andy-stack_vaultkeeper-ai/Stores/ExecutionPlanStore.ts
Andrew Beal ab9ee08281 refactor: implement multi-agent orchestration architecture
Restructure the AI workflow from a single-agent model to a specialized
multi-agent system with distinct roles:

- Add AgentType enum (Main, Orchestration, Planning, Execution) to define
  agent specializations
- Replace AIControllerService and AIFunctionService with modular agent
  classes in Services/AIServices/:
  - MainAgent: Handles user interaction and delegates to orchestration
  - OrchestrationAgent: Coordinates plan execution and step-by-step workflow
  - PlanningAgent: Creates and revises execution plans
  - ExecutionAgent: Executes individual plan steps
  - AIController: Base class providing common agent loop functionality
- Create specialized prompts (OrchestrationPrompt, ExecutionPrompt) for
  agent-specific behavior
- Add OrchestrationResult type to communicate workflow control decisions
  (continue, abort, replan)
- Introduce agent-specific function scoping:
  - ExecuteWorkflow for main agent
  - CompleteTask for execution agent
  - CompleteStep/Replan/CancelPlan for orchestration agent
  - SubmitPlan/AskUserQuestionPlanning for planning agent
- Update BaseAIClass to use agentType property instead of isPlanningAgent
  boolean for model selection
- Simplify ExecutionPlan and ExecutionStep types by removing execution
  state tracking (moved to agent coordination)
- Remove PlanningEnabledAppendix and ExecutionStatus enum (superseded by
  agent architecture)
- Add comprehensive integration tests for agent workflows

This architecture provides better separation of concerns, clearer agent
responsibilities, and more robust plan execution with explicit orchestration
control flow.
2026-01-27 20:29:20 +00:00

38 lines
1.1 KiB
TypeScript

import type { ExecutionPlan } from 'Types/ExecutionPlan';
import { writable, get } from 'svelte/store';
export interface IExecutionPlanState {
plan: ExecutionPlan | null;
currentStepIndex: number; // -1 = no active step, 0+ = currently executing step index
}
export class ExecutionPlanStore {
public executionPlanState = writable<IExecutionPlanState>({
plan: null,
currentStepIndex: -1
});
public setPlan(plan: ExecutionPlan | null) {
this.executionPlanState.set({ plan, currentStepIndex: plan ? 0 : -1 });
}
public updatePlan() {
this.executionPlanState.update(state => ({ ...state }));
}
public setCurrentStepIndex(index: number) {
this.executionPlanState.update(state => ({ ...state, currentStepIndex: index }));
}
public clearPlan() {
this.executionPlanState.set({ plan: null, currentStepIndex: -1 });
}
public getCurrentPlan(): ExecutionPlan | null {
return get(this.executionPlanState).plan;
}
public getCurrentStepIndex(): number {
return get(this.executionPlanState).currentStepIndex;
}
}