andy-stack_vaultkeeper-ai/AIClasses/FunctionDefinitions/AIFunctionDefinitions.ts
Andrew Beal 1b47c64c8b fix: prevent plan completion when replan is requested
Track replan state to ensure plan doesn't complete prematurely when a replan
is requested. Also add CompletePlan to orchestration agent definitions and
update step progress callback on successful completion.
2026-01-28 23:03:38 +00:00

94 lines
No EOL
3.4 KiB
TypeScript

import type { IAIFunctionDefinition } from "./IAIFunctionDefinition";
import { SearchVaultFiles } from "./Functions/SearchVaultFiles";
import { ReadVaultFiles } from "./Functions/ReadVaultFiles";
import { WriteVaultFile } from "./Functions/WriteVaultFile";
import { DeleteVaultFiles } from "./Functions/DeleteVaultFiles";
import { MoveVaultFiles } from "./Functions/MoveVaultFiles";
import { ListVaultFiles } from "./Functions/ListVaultFiles";
import { PatchVaultFile } from "./Functions/PatchVaultFile";
import { Replan } from "./Functions/Replan";
import { CompleteStep } from "./Functions/CompleteStep";
import { SubmitPlan } from "./Functions/SubmitPlan";
import { CancelPlan } from "./Functions/CancelPlan";
import { AskUserQuestionPlanning } from "./Functions/AskUserQuestionPlanning";
import { CompletePlan } from "./Functions/CompletePlan";
import { AskUserQuestionExecution } from "./Functions/AskUserQuestionExecution";
import { ContinuePlanExecution } from "./Functions/ContinuePlanExecution";
import { CompleteTask } from "./Functions/CompleteTask";
import { ExecuteWorkflow } from "./Functions/CreatePlan";
export abstract class AIFunctionDefinitions {
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, planning: boolean): IAIFunctionDefinition[] {
this.isGated = false;
if (planning) {
return [ExecuteWorkflow];
}
let actions = [
SearchVaultFiles,
ReadVaultFiles,
ListVaultFiles
];
if (destructive) {
actions = actions.concat([
WriteVaultFile,
PatchVaultFile,
DeleteVaultFiles,
MoveVaultFiles
]);
}
return actions;
}
public static orchestrationAgentDefinitions(): IAIFunctionDefinition[] {
return [CompleteStep, Replan, CancelPlan, CompletePlan];
}
public static planningAgentDefinitions(): IAIFunctionDefinition[] {
return [SearchVaultFiles, ReadVaultFiles, ListVaultFiles, AskUserQuestionPlanning, SubmitPlan];
}
public static executionAgentDefinitions(): IAIFunctionDefinition[] {
return [...this.agentDefinitions(true, false), CompleteTask];
}
public static agentExecutionDefinitions() {
this.isGated = false;
return [
SearchVaultFiles,
ReadVaultFiles,
ListVaultFiles,
WriteVaultFile,
PatchVaultFile,
DeleteVaultFiles,
MoveVaultFiles,
AskUserQuestionExecution,
CompletePlan
];
}
public static gatedDefinitions() {
this.isGated = true;
return [
ContinuePlanExecution,
CompleteStep
];
}
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");
}
}