Refactor plugin to replace DmsAssistant with AIAgent, updating imports, services, and manifest files accordingly

This commit is contained in:
Andrew Beal 2025-10-02 11:10:57 +01:00
parent ac70bc2f6f
commit 370c5d54bb
12 changed files with 34 additions and 35 deletions

View file

@ -1,4 +1,4 @@
import type DmsAssistantPlugin from "main";
import type AIAgentPlugin from "main";
import type { Vault } from "obsidian";
import { Resolve } from "Services/DependencyService";
import { Services } from "Services/Services";
@ -15,7 +15,7 @@ export class AIPrompt implements IPrompt {
private vault: Vault;
public constructor() {
this.vault = Resolve<DmsAssistantPlugin>(Services.DmsAssistantPlugin).app.vault;
this.vault = Resolve<AIAgentPlugin>(Services.AIAgentPlugin).app.vault;
}
public getDirectories(): string {

View file

@ -3,14 +3,14 @@ import type { IActioner } from "./IActioner";
import type { Vault } from "obsidian";
import { Resolve } from "Services/DependencyService";
import { Services } from "Services/Services";
import type DmsAssistantPlugin from "main";
import type AIAgentPlugin from "main";
export class Actioner implements IActioner {
private vault: Vault;
public constructor() {
this.vault = Resolve<DmsAssistantPlugin>(Services.DmsAssistantPlugin).app.vault;
this.vault = Resolve<AIAgentPlugin>(Services.AIAgentPlugin).app.vault;
}
public async [create_file](action: CreateFileRequest) {

View file

@ -1,5 +1,5 @@
export enum Path {
Root = "DM's Assistant",
Schemas = "DM's Assistant/Schemas",
Records = "DM's Assistant/Records"
Root = "AI Agent",
Schemas = "AI Agent/Schemas",
Records = "AI Agent/Records"
};

View file

@ -4,7 +4,7 @@ import { validate as uuidValidate } from 'uuid';
import type { OdbCache } from './OdbCache';
import { Resolve } from 'Services/DependencyService';
import { Services } from 'Services/Services';
import type DmsAssistantPlugin from 'main';
import type AIAgentPlugin from 'main';
import { TAbstractFile, TFile, type Vault } from 'obsidian';
interface DynamicProps {
@ -25,7 +25,7 @@ export class DynamicRecord {
public constructor(recordPath: string, schema: object, record: { [key: string]: any }) {
this.odbCache = Resolve<OdbCache>(Services.OdbCache);
this.vault = Resolve<DmsAssistantPlugin>(Services.DmsAssistantPlugin).app.vault;
this.vault = Resolve<AIAgentPlugin>(Services.AIAgentPlugin).app.vault;
this.schema = schema;
this.recordPath = recordPath;

View file

@ -1,7 +1,7 @@
import { TAbstractFile, TFile, TFolder, Vault } from "obsidian";
import { DynamicRecord } from "./DynamicRecord";
import { Resolve } from "Services/DependencyService";
import type DmsAssistantPlugin from "main";
import type AIAgentPlugin from "main";
import { Services } from "Services/Services";
import { Path } from "Enums/Path";
import { DynamicRecordProp } from "Enums/DynamicRecord";
@ -16,7 +16,7 @@ export class OdbCache {
private cache: Map<string, DynamicRecord> = new Map<string, DynamicRecord>();
public constructor() {
this.vault = Resolve<DmsAssistantPlugin>(Services.DmsAssistantPlugin).app.vault;
this.vault = Resolve<AIAgentPlugin>(Services.AIAgentPlugin).app.vault;
}
public getSchemas(): Map<string, object> {

View file

@ -1,4 +1,4 @@
import type DmsAssistantPlugin from "main";
import type AIAgentPlugin from "main";
import { TAbstractFile, TFile, type Vault } from "obsidian";
import { Resolve } from "./DependencyService";
import { Services } from "./Services";
@ -9,7 +9,7 @@ export class FileSystemService {
private vault: Vault;
public constructor() {
this.vault = Resolve<DmsAssistantPlugin>(Services.DmsAssistantPlugin).app.vault;
this.vault = Resolve<AIAgentPlugin>(Services.AIAgentPlugin).app.vault;
}
public async readObjectFromFile(filePath: string): Promise<object | null> {

View file

@ -1,5 +1,5 @@
import { AIProvider } from "Enums/ApiProvider";
import type DmsAssistantPlugin from "main";
import type AIAgentPlugin from "main";
import { OdbCache } from "ODB/Core/OdbCache";
import { RegisterSingleton, RegisterTransient } from "./DependencyService";
import { ModalService } from "./ModalService";
@ -16,9 +16,9 @@ import { MessageService } from "./MessageService";
import { FileSystemService } from "./FileSystemService";
import { ConversationFileSystemService } from "./ConversationFileSystemService";
export function RegisterDependencies(plugin: DmsAssistantPlugin) {
export function RegisterDependencies(plugin: AIAgentPlugin) {
RegisterSingleton(Services.MessageService, new MessageService());
RegisterSingleton(Services.DmsAssistantPlugin, plugin);
RegisterSingleton(Services.AIAgentPlugin, plugin);
RegisterSingleton(Services.OdbCache, new OdbCache());
RegisterSingleton(Services.ModalService, new ModalService())
RegisterSingleton(Services.FileSystemService, new FileSystemService());
@ -32,7 +32,7 @@ export function RegisterDependencies(plugin: DmsAssistantPlugin) {
RegisterAiProvider(plugin);
}
export function RegisterAiProvider(plugin: DmsAssistantPlugin) {
export function RegisterAiProvider(plugin: AIAgentPlugin) {
if (plugin.settings.apiProvider == AIProvider.Gemini && plugin.settings.apiKey != "") {
RegisterTransient<IActionDefinitions>(Services.IActionDefinitions, () => new GeminiActionDefinitions());
RegisterSingleton<IAIClass>(Services.IAIClass, new Gemini(plugin.settings.apiKey));

View file

@ -1,6 +1,6 @@
export class Services {
static MessageService = Symbol("MessageService");
static DmsAssistantPlugin = Symbol("DmsAssistantPlugin");
static AIAgentPlugin = Symbol("AIAgentPlugin");
static OdbCache = Symbol("OdbCache");
static ModalService = Symbol("ModalService");
static FileSystemService = Symbol("FileSystemService");

19
main.ts
View file

@ -8,20 +8,19 @@ import { OdbCache } from 'ODB/Core/OdbCache';
import { FileAction } from 'Enums/FileAction';
import { Path } from 'Enums/Path';
import { RegisterAiProvider, RegisterDependencies } from 'Services/ServiceRegistration';
import { loadExternalCSS } from 'Helpers/Helpers';
interface DmsAssistantSettings {
interface AIAgentSettings {
apiProvider: string;
apiKey: string;
}
const DEFAULT_SETTINGS: DmsAssistantSettings = {
const DEFAULT_SETTINGS: AIAgentSettings = {
apiProvider: AIProvider.Gemini,
apiKey: ""
}
export default class DmsAssistantPlugin extends Plugin {
settings: DmsAssistantSettings;
export default class AIAgentPlugin extends Plugin {
settings: AIAgentSettings;
async onload() {
const script = document.createElement('script');
@ -83,7 +82,7 @@ export default class DmsAssistantPlugin extends Plugin {
});
// This adds a settings tab so the user can configure various aspects of the plugin
this.addSettingTab(new DmsAssistantSettingTab(this.app, this));
this.addSettingTab(new AIAgentSettingTab(this.app, this));
// If the plugin hooks up any global DOM events (on parts of the app that doesn't belong to this plugin)
// Using this function will automatically remove the event listener when this plugin is disabled.
@ -163,10 +162,10 @@ class SampleModal extends Modal {
}
}
class DmsAssistantSettingTab extends PluginSettingTab {
plugin: DmsAssistantPlugin;
class AIAgentSettingTab extends PluginSettingTab {
plugin: AIAgentPlugin;
constructor(app: App, plugin: DmsAssistantPlugin) {
constructor(app: App, plugin: AIAgentPlugin) {
super(app, plugin);
this.plugin = plugin;
}
@ -203,7 +202,7 @@ class DmsAssistantSettingTab extends PluginSettingTab {
}
}
function CreateDirectories(plugin: DmsAssistantPlugin) {
function CreateDirectories(plugin: AIAgentPlugin) {
this.app.workspace.onLayoutReady(async () => {
const vault = plugin.app.vault;
if (vault.getAbstractFileByPath(Path.Root) == null) {

View file

@ -1,9 +1,9 @@
{
"id": "dms_assistant",
"name": "DM's Assistant",
"id": "ai_agent",
"name": "AI Agent",
"version": "1.0.0",
"minAppVersion": "0.15.0",
"description": "AI powered Dungeon Master's assistant.",
"description": "AI powered agent assistant.",
"author": "Obsidian",
"authorUrl": "https://obsidian.md",
"fundingUrl": "https://obsidian.md/pricing",

4
package-lock.json generated
View file

@ -1,11 +1,11 @@
{
"name": "dms_assistant",
"name": "ai_agent",
"version": "1.0.0",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "dms_assistant",
"name": "ai_agent",
"version": "1.0.0",
"license": "MIT",
"dependencies": {

View file

@ -1,7 +1,7 @@
{
"name": "dms_assistant",
"name": "ai_agent",
"version": "1.0.0",
"description": "AI powered Dungeon Master's assistant.",
"description": "AI powered agent assistant.",
"main": "main.js",
"scripts": {
"dev": "node esbuild.config.mjs",