mirror of
https://github.com/andy-stack/vaultkeeper-ai.git
synced 2026-07-22 16:30:27 +00:00
- Change ChatMode enum values from numeric (0,1,2) to string literals ("read_only", "edit", "planning")
- Move chat mode state management from ChatWindow to SettingsService with persistence
- Add chat mode awareness to system prompts and tool validation
- Replace Map with WeakMap for settings subscribers to prevent memory leaks
- Add type-safe event handlers to EventService
- Update esbuild and TypeScript targets from ES2018/ES2020 to ES2022
- Add requiresEditModeEnabled() validation to prevent tool hallucination in read-only mode
- Update all test fixtures to include chatMode in mock settings
121 lines
No EOL
4.5 KiB
TypeScript
121 lines
No EOL
4.5 KiB
TypeScript
import type { IAIToolDefinition } from "./IAIToolDefinition";
|
|
import { SearchVaultFiles } from "./Tools/SearchVaultFiles";
|
|
import { ReadVaultFiles } from "./Tools/ReadVaultFiles";
|
|
import { WriteVaultFile } from "./Tools/WriteVaultFile";
|
|
import { DeleteVaultFiles } from "./Tools/DeleteVaultFiles";
|
|
import { MoveVaultFiles } from "./Tools/MoveVaultFiles";
|
|
import { ListVaultFiles } from "./Tools/ListVaultFiles";
|
|
import { PatchVaultFile } from "./Tools/PatchVaultFile";
|
|
import { CompleteStep } from "./Tools/CompleteStep";
|
|
import { SubmitPlan } from "./Tools/SubmitPlan";
|
|
import { CancelPlan } from "./Tools/CancelPlan";
|
|
import { AskUserQuestionPlanning } from "./Tools/AskUserQuestionPlanning";
|
|
import { CompletePlan } from "./Tools/CompletePlan";
|
|
import { CompleteTask } from "./Tools/CompleteTask";
|
|
import { ExecuteWorkflow } from "./Tools/ExecuteWorkflow";
|
|
import { ReviseStep } from "./Tools/ReviseStep";
|
|
import { RevisePlan } from "./Tools/RevisePlan";
|
|
import { SkipStep } from "./Tools/SkipStep";
|
|
import { ReadMemories } from "./Tools/ReadMemories";
|
|
import { UpdateMemories } from "./Tools/UpdateMemories";
|
|
import { CreateVaultFolder } from "./Tools/CreateVaultFolder";
|
|
import { GetWebViewerContent } from "./Tools/GetWebViewerContent";
|
|
import { DeleteVaultFolder } from "./Tools/DeleteVaultFolder";
|
|
import { MoveVaultFolder } from "./Tools/MoveVaultFolder";
|
|
import { ChatMode, chatModeAllowsEdits } from "Enums/ChatMode";
|
|
import type { AITool } from "Enums/AITool";
|
|
|
|
export abstract class AIToolDefinitions {
|
|
|
|
// Definitions list provides a list of function definitions that does not include any planning functions (used as reference in planning agent prompt)
|
|
private static readonly definitionsList = [SearchVaultFiles, ReadVaultFiles, ListVaultFiles, GetWebViewerContent,
|
|
WriteVaultFile, PatchVaultFile, DeleteVaultFiles, MoveVaultFiles, CreateVaultFolder, DeleteVaultFolder, MoveVaultFolder];
|
|
|
|
public static readonly editModeDefinitionsList = [WriteVaultFile, PatchVaultFile, DeleteVaultFiles,
|
|
MoveVaultFiles, CreateVaultFolder, DeleteVaultFolder, MoveVaultFolder];
|
|
|
|
public static agentDefinitions(chatMode: ChatMode, memories: boolean, updateMemories: boolean, webViewer: boolean): IAIToolDefinition[] {
|
|
|
|
if (chatMode === ChatMode.Planning) {
|
|
return [ExecuteWorkflow];
|
|
}
|
|
|
|
let actions = [
|
|
SearchVaultFiles,
|
|
ReadVaultFiles,
|
|
ListVaultFiles
|
|
];
|
|
|
|
if (webViewer) {
|
|
actions = actions.concat([GetWebViewerContent]);
|
|
}
|
|
|
|
if (memories) {
|
|
actions = actions.concat([ReadMemories]);
|
|
}
|
|
|
|
if (updateMemories) {
|
|
actions = actions.concat([UpdateMemories]);
|
|
}
|
|
|
|
if (chatModeAllowsEdits(chatMode)) {
|
|
actions = actions.concat(this.editModeDefinitionsList);
|
|
}
|
|
|
|
return actions;
|
|
}
|
|
|
|
public static orchestrationAgentDefinitions(memories: boolean, webViewer: boolean): IAIToolDefinition[] {
|
|
let actions = [
|
|
SearchVaultFiles,
|
|
ReadVaultFiles,
|
|
ListVaultFiles,
|
|
CompleteStep,
|
|
ReviseStep,
|
|
RevisePlan,
|
|
SkipStep,
|
|
CompletePlan,
|
|
CancelPlan
|
|
];
|
|
|
|
if (webViewer) {
|
|
actions = actions.concat([GetWebViewerContent]);
|
|
}
|
|
|
|
if (memories) {
|
|
actions = actions.concat([ReadMemories]);
|
|
}
|
|
|
|
return actions;
|
|
}
|
|
|
|
public static planningAgentDefinitions(memories: boolean, webViewer: boolean): IAIToolDefinition[] {
|
|
let actions = [SearchVaultFiles, ReadVaultFiles, ListVaultFiles, AskUserQuestionPlanning, SubmitPlan];
|
|
|
|
if (webViewer) {
|
|
actions = actions.concat([GetWebViewerContent]);
|
|
}
|
|
|
|
if (memories) {
|
|
actions = actions.concat([ReadMemories]);
|
|
}
|
|
|
|
return actions;
|
|
}
|
|
|
|
public static executionAgentDefinitions(): IAIToolDefinition[] {
|
|
return [...this.agentDefinitions(ChatMode.Edit, false, false, false), CompleteTask];
|
|
}
|
|
|
|
public static requiresEditModeEnabled(definition: AITool): boolean {
|
|
return this.editModeDefinitionsList.map(definition => definition.name).includes(definition);
|
|
}
|
|
|
|
public static compactSummaryForPlanningAgent(): string {
|
|
return this.definitionsList.map(definition => {
|
|
// Extract first line of description as brief purpose
|
|
const description = definition.description.split('\n')[0].trim();
|
|
return `- ${description}`;
|
|
}).join("\n");
|
|
}
|
|
} |