andy-stack_vaultkeeper-ai/AIClasses/ToolDefinitions/AIToolDefinitions.ts
Andrew Beal d18f5ef655 refactor: replace Replan with granular orchestration tools
Replace the single Replan tool with three targeted alternatives:
ReviseStep, RevisePlan, and SkipStep. This gives the orchestration
agent more precise control over plan recovery — revising only the
current step, replacing all remaining steps, or skipping a step
entirely — rather than triggering a full replan each time.

Also give the orchestration agent read access to vault files so it
can resolve execution failures without routing back to the planning
agent, and update the execution agent prompt to stop it from
attempting self-recovery (gap resolution is now the orchestrator's
responsibility).
2026-02-19 20:48:59 +00:00

81 lines
No EOL
2.9 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";
export abstract class AIToolDefinitions {
public static isGated: boolean = false;
// 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, WriteVaultFile, PatchVaultFile, DeleteVaultFiles, MoveVaultFiles];
public static agentDefinitions(destructive: boolean, planningMode: boolean): IAIToolDefinition[] {
this.isGated = false;
if (planningMode) {
return [ExecuteWorkflow];
}
let actions = [
SearchVaultFiles,
ReadVaultFiles,
ListVaultFiles
];
if (destructive) {
actions = actions.concat([
WriteVaultFile,
PatchVaultFile,
DeleteVaultFiles,
MoveVaultFiles
]);
}
return actions;
}
public static orchestrationAgentDefinitions(): IAIToolDefinition[] {
return [
SearchVaultFiles,
ReadVaultFiles,
ListVaultFiles,
CompleteStep,
ReviseStep,
RevisePlan,
SkipStep,
CompletePlan,
CancelPlan
];
}
public static planningAgentDefinitions(): IAIToolDefinition[] {
return [SearchVaultFiles, ReadVaultFiles, ListVaultFiles, AskUserQuestionPlanning, SubmitPlan];
}
public static executionAgentDefinitions(): IAIToolDefinition[] {
return [...this.agentDefinitions(true, false), CompleteTask];
}
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");
}
}