import type { ExtensionAPI } from "@earendil-works/pi-coding-agent"; import { registerGoalCommand } from "./command-registration.js"; import { GoalCommandController } from "./commands.js"; import { registerGoalLifecycle } from "./lifecycle.js"; import { GoalRunController } from "./run-protocol.js"; import { GoalRuntime } from "./runtime.js"; import { registerGoalTools } from "./tools.js"; interface GoalOptions { settingsPath?: string; } function registerGoalRuntime(pi: ExtensionAPI, options: GoalOptions = {}) { const runtime = new GoalRuntime(pi); const commands = new GoalCommandController(runtime); const runController = new GoalRunController(runtime, commands); // Keep registration order explicit: managed-run bus listeners exist before tools, // command routing, and session lifecycle bind the per-factory runtime. runController.register(pi); registerGoalTools(pi, runtime); registerGoalCommand(pi, runtime, commands, options); registerGoalLifecycle(pi, runtime, runController, options); } export default function goal(pi: ExtensionAPI, options: GoalOptions = {}) { registerGoalRuntime(pi, options); } export { assistantUsageTokens, cumulativeAssistantTokens, formatDuration, formatTokenCount, } from "./accounting.js"; export { completeGoalArguments, parseCommand, parseTokenBudget, validateObjective, } from "./command.js"; export { buildGoalSystemPrompt } from "./prompts.js"; export { findFinalAssistantMessage, formatStatus, isContradictoryCompletionSummary, isRetryableGoalInterruption, isUsageLimitedGoalInterruption, } from "./runtime.js";