import { Type } from "@earendil-works/pi-ai"; import type { ExtensionContext, ToolDefinition } from "@earendil-works/pi-coding-agent"; import type { AgentActivity, AgentAccounting, AgentAttemptSummary, AgentExecutionOptions, AgentExecutionResult, AgentExecutionRoot, AgentProgress, AgentToolCallProgress, AgentTransport, LiveSessionHandoff, PreparedAgentSession, WorkflowAgentSession, WorkflowAgentSessionReference } from "../../src/index.js"; import type { Static } from "typebox"; import type { SubagentWorktreeAdapter } from "./worktree.js"; export declare const SUBAGENTS_TOOL_NAMES: readonly ["subagents_run", "subagents_inspect", "subagents_steer", "subagents_stop", "subagents_retry"]; export declare const SUBAGENT_ATTEMPT_DETAILS_LIMIT = 1; export declare const SUBAGENT_MAX_RETRIES = 255; export declare const SUBAGENT_SYSTEM_PROMPT_LIMIT: number; export declare const SUBAGENTS_RUN_PARAMETERS: Type.TObject<{ prompt: Type.TString; mode: Type.TOptional, Type.TLiteral<"foreground">]>>; label: Type.TOptional; model: Type.TOptional; tools: Type.TOptional>; skills: Type.TOptional>; extensions: Type.TOptional>; contextFiles: Type.TOptional>; role: Type.TOptional; worktree: Type.TOptional; outputSchema: Type.TOptional>; retries: Type.TOptional; timeoutMs: Type.TOptional>; }>; export declare const SUBAGENTS_INSPECT_PARAMETERS: Type.TObject<{ id: Type.TOptional; }>; export declare const SUBAGENTS_ID_PARAMETERS: Type.TObject<{ id: Type.TString; }>; export declare const SUBAGENTS_STEER_PARAMETERS: Type.TObject<{ id: Type.TString; message: Type.TString; }>; export declare const SUBAGENTS_STOP_PARAMETERS: Type.TObject<{ id: Type.TString; }>; export declare const SUBAGENTS_RETRY_PARAMETERS: Type.TObject<{ id: Type.TString; }>; export declare const SUBAGENTS_TOOL_SCHEMAS: { readonly subagents_run: Type.TObject<{ prompt: Type.TString; mode: Type.TOptional, Type.TLiteral<"foreground">]>>; label: Type.TOptional; model: Type.TOptional; tools: Type.TOptional>; skills: Type.TOptional>; extensions: Type.TOptional>; contextFiles: Type.TOptional>; role: Type.TOptional; worktree: Type.TOptional; outputSchema: Type.TOptional>; retries: Type.TOptional; timeoutMs: Type.TOptional>; }>; readonly subagents_inspect: Type.TObject<{ id: Type.TOptional; }>; readonly subagents_steer: Type.TObject<{ id: Type.TString; message: Type.TString; }>; readonly subagents_stop: Type.TObject<{ id: Type.TString; }>; readonly subagents_retry: Type.TObject<{ id: Type.TString; }>; }; export type SubagentRunRequest = Static; export declare function normalizeSubagentRunRequest(value: unknown): SubagentRunRequest; export type SubagentInspectRequest = Static; export type SubagentIdRequest = Static; export type SubagentSteerRequest = Static; export type SubagentProgress = { readonly accounting: AgentAccounting; readonly toolCalls: readonly AgentToolCallProgress[]; readonly state?: Omit, "systemPrompt">; readonly activity?: AgentActivity; readonly lastEventAt?: number; }; export interface SubagentStatus { readonly id: string; readonly sessionId?: string; readonly state: "running" | "completed" | "failed" | "stopped"; readonly startedAt?: number; readonly finishedAt?: number; readonly worktree?: { readonly path: string; readonly branch: string; }; readonly error?: { readonly code: string; readonly message: string; }; readonly progress?: SubagentProgress; readonly attempts?: number; readonly attemptDetails?: readonly AgentAttemptSummary[]; } export interface SubagentNotification { readonly id: string; readonly label?: string; readonly role?: string; readonly state: "completed" | "failed"; readonly error?: { readonly code: string; readonly message: string; }; } export interface SubagentManagerContext { readonly toolCallId: string; readonly signal: AbortSignal | undefined; readonly onUpdate: ((value: unknown) => void) | undefined; readonly extensionContext: ExtensionContext; readonly waitForForeground?: boolean; readonly includeAttemptMetadata?: boolean; } export interface SubagentAttemptActionData { readonly attempt: AgentAttemptSummary; readonly session?: WorkflowAgentSessionReference; readonly liveSession?: WorkflowAgentSession; readonly prepared?: Readonly; readonly handoff?: LiveSessionHandoff; readonly signal: AbortSignal; } export interface SubagentOwnerMarker { readonly pid: number; readonly processStart: number; readonly sessionId: string; readonly token: string; readonly acquiredAt: number; } export interface SubagentLiveness { readonly pid?: number; readonly processStart?: number; readonly sessionId?: string; readonly token?: string; readonly isLive?: (owner: Readonly) => boolean | Promise; } export interface SubagentExecutor { execute(task: string, options: AgentExecutionOptions, signal?: AbortSignal, setSteer?: (handler: (message: string) => void | Promise) => void): Promise; } export interface SubagentManagerDependencies { readonly getActiveTools?: () => readonly string[]; readonly agentDir?: string; readonly storageDir?: string; readonly transport?: AgentTransport; readonly createExecutor?: (root: AgentExecutionRoot, transport: AgentTransport) => SubagentExecutor; readonly worktreeAdapter?: SubagentWorktreeAdapter; readonly liveness?: SubagentLiveness; readonly notify?: (notification: Readonly) => void | Promise; readonly onStatus?: (status: Readonly, request: Readonly) => void; readonly onResourceWarning?: (message: string) => void; } export interface SubagentManager { run(request: Readonly, context: Readonly): Promise; inspect(request: Readonly, context: Readonly): Promise; steer(request: Readonly, context: Readonly): Promise; stop(request: Readonly, context: Readonly): Promise; retry(request: Readonly, context: Readonly): Promise; getAttemptActionData?(id: string): Readonly | undefined; dispose?(): Promise; } export interface SubagentsExtensionOptions { readonly manager?: SubagentManager; readonly clipboard?: (value: string) => Promise; readonly managerDependencies?: SubagentManagerDependencies; } export interface SubagentsExtension { readonly manager: SubagentManager; readonly tools: readonly ToolDefinition[]; }