import type { BackgroundManager } from "../../features/background-agent"; import type { CategoriesConfig, GitMasterConfig, BrowserAutomationProvider, AgentOverrides, SisyphusAgentConfig } from "../../config/schema"; import type { ModelFallbackControllerAccessor } from "../../hooks/model-fallback"; import type { LoadedSkill } from "../../features/opencode-skill-loader/types"; import type { SessionPromptAsyncData, SessionPromptData, SessionStatusData } from "@opencode-ai/sdk"; import type { AvailableCategory, AvailableSkill } from "../../agents/dynamic-agent-prompt-builder"; type SessionPathInput = { readonly path: { readonly id: string; }; }; type SessionMessagesQuery = { readonly directory?: string; readonly limit?: number; }; type SessionPromptInput = Omit & { readonly signal?: AbortSignal | null; readonly [key: string]: unknown; }; type SessionStatusInput = Omit; type SessionCreateResult = { readonly data: { readonly id: string; }; readonly error?: undefined; } | { readonly data?: undefined; readonly error: unknown; }; type SessionGetResult = { readonly data?: { readonly directory?: string; }; readonly error?: unknown; }; export interface OmoAgentClient { readonly app: { readonly agents: () => Promise; }; readonly config: { readonly get: () => Promise; }; readonly model?: { readonly list?: () => Promise; }; readonly session: { readonly abort: (input: SessionPathInput) => Promise; readonly create: (input: { readonly body: Record; readonly query?: { readonly directory?: string; }; }) => Promise; readonly get: (input: SessionPathInput) => Promise; readonly messages: (input: SessionPathInput | (SessionPathInput & { readonly query?: SessionMessagesQuery; })) => Promise; readonly prompt?: (input: SessionPromptInput) => Promise; readonly promptAsync?: (input: SessionPromptInput) => Promise; readonly status: (input?: SessionStatusInput) => Promise; }; } export type OpencodeClient = OmoAgentClient; export interface DelegateTaskArgs { description: string; descriptionSource?: "explicit" | "generated"; prompt: string; category?: string; subagent_type?: string; requested_subagent_type?: string; run_in_background: boolean; task_id?: string; command?: string; load_skills: string[]; } export interface ToolContextWithMetadata { sessionID: string; messageID: string; agent: string; abort: AbortSignal; metadata?: (input: { title?: string; metadata?: Record; }) => void | Promise; /** * Tool call ID injected by OpenCode's internal context (not in plugin ToolContext type, * but present at runtime via spread in fromPlugin()). Used for metadata store keying. */ callID?: string; /** @deprecated OpenCode internal naming may vary across versions */ callId?: string; /** @deprecated OpenCode internal naming may vary across versions */ call_id?: string; } export interface SyncSessionCreatedEvent { sessionID: string; parentID: string; title: string; } export interface DelegateTaskToolOptions { manager: BackgroundManager; client: OpencodeClient; directory: string; /** * Test hook: bypass global cache reads (Bun runs tests in parallel). * If provided, resolveCategoryExecution/resolveSubagentExecution uses this instead of reading from disk cache. */ connectedProvidersOverride?: string[] | null; /** * Test hook: bypass fetchAvailableModels() by providing an explicit available model set. */ availableModelsOverride?: Set; userCategories?: CategoriesConfig; gitMasterConfig?: GitMasterConfig; sisyphusJuniorModel?: string; browserProvider?: BrowserAutomationProvider; disabledSkills?: Set; teamModeEnabled?: boolean; availableCategories?: AvailableCategory[]; availableSkills?: AvailableSkill[]; agentOverrides?: AgentOverrides; sisyphusAgentConfig?: SisyphusAgentConfig; modelFallbackControllerAccessor?: ModelFallbackControllerAccessor; onSyncSessionCreated?: (event: SyncSessionCreatedEvent) => Promise; syncPollTimeoutMs?: number; /** OpenCode native skill accessor for skills registered via config.skills.paths. Same shape as SkillLoadOptions.nativeSkills. */ nativeSkills?: { all(): { name: string; description: string; location: string; content: string; }[] | Promise<{ name: string; description: string; location: string; content: string; }[]>; get(name: string): { name: string; description: string; location: string; content: string; } | undefined | Promise<{ name: string; description: string; location: string; content: string; } | undefined>; dirs(): string[] | Promise; }; getLoadedSkills?: () => Promise; } import type { DelegatedModelConfig } from "../../shared/model-resolution-types"; export type { DelegatedModelConfig }; export interface BuildSystemContentInput { skillContent?: string; skillContents?: string[]; categoryPromptAppend?: string; agentsContext?: string; planAgentPrepend?: string; maxPromptTokens?: number; model?: DelegatedModelConfig; agentName?: string; availableCategories?: AvailableCategory[]; availableSkills?: AvailableSkill[]; /** OpenCode native skill list to merge into the block. */ nativeSkillInfos?: { name: string; description: string; location: string; }[]; }