@withakay/opencode-autopilot 0.1.1 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +47 -26
- package/dist/index.js +523 -538
- package/dist/index.js.map +18 -21
- package/package.json +8 -4
package/dist/index.js.map
CHANGED
|
@@ -1,27 +1,24 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["../
|
|
3
|
+
"sources": ["../hooks/chat-message.ts", "../hooks/event-handler.ts", "../hooks/permission.ts", "../hooks/system-transform.ts", "../hooks/tool-after.ts", "../prompts/continuation.ts", "../prompts/directives.ts", "../prompts/format.ts", "../prompts/normalize.ts", "../prompts/system-prompt.ts", "../state/factory.ts", "../state/session-cache.ts", "../tools/autopilot.ts", "../tools/usage.ts", "../plugin.ts"],
|
|
4
4
|
"sourcesContent": [
|
|
5
|
-
"
|
|
6
|
-
"import type {\
|
|
7
|
-
"
|
|
8
|
-
"
|
|
9
|
-
"
|
|
10
|
-
"export
|
|
11
|
-
"export function
|
|
12
|
-
"import type {
|
|
13
|
-
"
|
|
14
|
-
"
|
|
15
|
-
"
|
|
16
|
-
"
|
|
17
|
-
"import { tool } from \"@opencode-ai/plugin\";\nimport type { ExtendedState } from \"../types/index.ts\";\
|
|
18
|
-
"
|
|
19
|
-
"import { tool } from \"@opencode-ai/plugin\";\nimport type { ExtendedState } from \"../types/index.ts\";\n\n// ---------------------------------------------------------------------------\n// Deps\n// ---------------------------------------------------------------------------\n\nexport interface StopToolDeps {\n getState: (sessionID: string) => ExtendedState | undefined;\n onStop: (sessionID: string, reason: string | undefined) => void;\n}\n\n// ---------------------------------------------------------------------------\n// Tool factory\n// ---------------------------------------------------------------------------\n\nexport function createStopTool(deps: StopToolDeps) {\n return tool({\n description: \"Stop autopilot mode for the current session\",\n args: {\n reason: tool.schema\n .string()\n .optional()\n .describe(\"Optional reason to include in the stop message\"),\n },\n async execute(args, context) {\n const state = deps.getState(context.sessionID);\n\n if (!state || state.mode !== \"ENABLED\") {\n return \"Autopilot is not running in this session.\";\n }\n\n deps.onStop(context.sessionID, args.reason);\n\n return args.reason\n ? `Autopilot stopped: ${args.reason}`\n : \"Autopilot stopped for this session.\";\n },\n });\n}\n",
|
|
20
|
-
"import { tool } from \"@opencode-ai/plugin\";\n\nexport function createHelpTool() {\n return tool({\n description: \"Show autopilot usage instructions\",\n args: {},\n execute: async () => {\n return `\n## Autopilot Usage\n\nUse the global \\`Autopilot\\` agent to control the autopilot plugin.\n\n**Start Autopilot:**\nSwitch to the \\`Autopilot\\` agent, then send the task you want delegated.\n\nExamples:\n- \\`Fix the failing tests\\`\n- \\`Use allow-all mode and build-high to refactor the reducer\\`\n\n**Check Status:**\n- \\`status\\`\n- \\`is autopilot running?\\`\n\n**Stop Autopilot:**\n- \\`stop\\`\n- \\`stop because I want to inspect manually\\`\n\nDefaults:\n- permission mode: \\`limited\\`\n- continuation limit: \\`10\\`\n- worker agent: \\`general\\`\n`.trim();\n },\n });\n}\n",
|
|
21
|
-
"import { tool } from \"@opencode-ai/plugin\";\n\nconst AUTOPILOT_PROMPT = `You are the Autopilot control agent.\n\nYour job is to operate the local autopilot plugin, not to do the coding work yourself.\nThe plugin should handle the autonomous execution loop, while the worker agent (default \\`pi\\`) does the task work.\n\nRules:\n- If the user asks for help, usage, or examples, call \\`autopilot_help\\` and return the tool result.\n- If the user asks for status, progress, whether autopilot is running, or similar, call \\`autopilot_status\\` and return the tool result.\n- If the user asks to stop, cancel, disable, or pause autopilot, call \\`autopilot_stop\\`. Pass through a short reason when one is provided. Return the tool result.\n- Otherwise, treat the user's message as a request to start autopilot.\n- On a start request, call \\`autopilot_start\\` immediately before doing anything else.\n- Default start settings: \\`permissionMode: limited\\`, \\`maxContinues: 10\\`, \\`workerAgent: general\\`.\n- If the user clearly requests \\`allow-all\\`, \\`allow all\\`, or similar, set \\`permissionMode: allow-all\\`.\n- If the user clearly requests \\`limited\\`, set \\`permissionMode: limited\\`.\n- If the user clearly gives a continuation cap such as \\`max 3\\`, \\`max=3\\`, or \\`continue 3 times\\`, pass it as \\`maxContinues\\`.\n- If the user clearly asks for a different worker agent, such as \\`use build-high\\`, \\`worker agent build-high\\`, or \\`agent=build-high\\`, pass it as \\`workerAgent\\`.\n- Use the user's full request as the \\`task\\` unless they clearly separate control options from the task.\n- Do not solve the task yourself after starting autopilot. Return the tool result so the session can continue under the plugin.\n\nExamples:\n- \\`Fix the failing autopilot tests\\` -> \\`autopilot_start(task=\"Fix the failing autopilot tests\")\\`\n- \\`Start autopilot in allow-all mode and use build-high to refactor the reducer\\` -> \\`autopilot_start(permissionMode=\"allow-all\", workerAgent=\"build-high\", task=\"refactor the reducer\")\\`\n- \\`Use allow all and max 3 to debug the plugin startup failure\\` -> \\`autopilot_start(permissionMode=\"allow-all\", maxContinues=3, task=\"debug the plugin startup failure\")\\`\n- \\`status\\` -> \\`autopilot_status()\\`\n- \\`stop because I want to inspect manually\\` -> \\`autopilot_stop(reason=\"because I want to inspect manually\")\\``;\n\nexport function createPromptTool() {\n return tool({\n description:\n \"Get the autopilot control agent prompt. Call this at the start of a session to get your operating instructions.\",\n args: {},\n execute: async () => AUTOPILOT_PROMPT,\n });\n}\n",
|
|
22
|
-
"import type { Plugin } from \"@opencode-ai/plugin\";\nimport type { ExtendedState } from \"./types/index.ts\";\nimport { SessionCache } from \"./state/session-cache.ts\";\nimport { createSessionState } from \"./state/factory.ts\";\nimport {\n buildAutopilotSystemPrompt,\n buildContinuationPrompt,\n formatUsageMetadata,\n inferAutopilotDirective,\n normalizeMaxContinues,\n stripAutopilotMarker,\n summarizeAutopilotState,\n} from \"./prompts/index.ts\";\nimport {\n createEventHandler,\n createSessionTracking,\n} from \"./hooks/event-handler.ts\";\nimport type { SessionTracking } from \"./hooks/event-handler.ts\";\nimport { createPermissionHook } from \"./hooks/permission.ts\";\nimport { createSystemTransformHook } from \"./hooks/system-transform.ts\";\nimport { createChatMessageHook } from \"./hooks/chat-message.ts\";\nimport { createToolAfterHook } from \"./hooks/tool-after.ts\";\nimport { createStartTool } from \"./tools/start.ts\";\nimport { createStatusTool } from \"./tools/status.ts\";\nimport { createStopTool } from \"./tools/stop.ts\";\nimport { createHelpTool } from \"./tools/help.ts\";\nimport { createPromptTool } from \"./tools/prompt.ts\";\n\n// ---------------------------------------------------------------------------\n// Constants\n// ---------------------------------------------------------------------------\n\nconst AUTOPILOT_FALLBACK_AGENT = \"general\";\nconst MAX_HISTORY_ENTRIES = 10;\n\n// ---------------------------------------------------------------------------\n// Plugin\n// ---------------------------------------------------------------------------\n\nexport const AutopilotPlugin: Plugin = async ({\n client,\n directory,\n worktree,\n}) => {\n // -- Shared state stores (per-session) --\n const stateBySession = new Map<string, ExtendedState>();\n const trackingBySession = new Map<string, SessionTracking>();\n const suppressCountBySession = new Map<string, number>();\n const historyBySession = new Map<string, string[]>();\n const permissionModeBySession = new Map<string, \"allow-all\" | \"limited\">();\n const sessionCache = new SessionCache();\n\n // -- State accessors --\n const getState = (sessionID: string): ExtendedState | undefined =>\n stateBySession.get(sessionID);\n\n const setState = (sessionID: string, state: ExtendedState): void => {\n stateBySession.set(sessionID, state);\n };\n\n const deleteState = (sessionID: string): void => {\n stateBySession.delete(sessionID);\n trackingBySession.delete(sessionID);\n suppressCountBySession.delete(sessionID);\n historyBySession.delete(sessionID);\n permissionModeBySession.delete(sessionID);\n };\n\n const getTracking = (sessionID: string): SessionTracking | undefined =>\n trackingBySession.get(sessionID);\n\n const initSession = (sessionID: string): void => {\n trackingBySession.set(sessionID, createSessionTracking());\n suppressCountBySession.set(sessionID, 0);\n historyBySession.set(sessionID, []);\n };\n\n const recordHistory = (sessionID: string, message: string): void => {\n let history = historyBySession.get(sessionID);\n if (!history) {\n history = [];\n historyBySession.set(sessionID, history);\n }\n history.push(message);\n if (history.length > MAX_HISTORY_ENTRIES) {\n historyBySession.set(sessionID, history.slice(-MAX_HISTORY_ENTRIES));\n }\n };\n\n // -- Toast helper --\n const safeToast = async (opts: {\n title: string;\n message: string;\n variant: \"info\" | \"success\" | \"warning\" | \"error\";\n }): Promise<void> => {\n try {\n await client.tui.showToast({\n directory,\n workspace: worktree,\n title: opts.title,\n message: opts.message,\n variant: opts.variant,\n duration: 3000,\n });\n } catch {\n // Ignore TUI toast failures in non-TUI sessions.\n }\n };\n\n // -- Stop helper --\n const setStopped = async (\n sessionID: string,\n reason: string,\n detail: string | undefined,\n variant: \"info\" | \"success\" | \"warning\" | \"error\" = \"info\",\n ): Promise<void> => {\n const state = getState(sessionID);\n if (!state) return;\n\n state.mode = \"DISABLED\";\n state.phase = \"STOPPED\";\n state.stop_reason = \"USER_STOP\";\n recordHistory(sessionID, detail ? `${reason}: ${detail}` : reason);\n\n await safeToast({\n title: \"Autopilot stopped\",\n message: detail ? `${reason}: ${detail}` : reason,\n variant,\n });\n };\n\n // -- Dispatch helper --\n const dispatchPrompt = async (\n sessionID: string,\n state: ExtendedState,\n promptText: string,\n ): Promise<void> => {\n const tracking = getTracking(sessionID);\n if (!tracking) return;\n\n tracking.awaitingWorkerReply = true;\n tracking.lastAssistantMessageID = undefined;\n\n try {\n // The plugin runtime provides a wrapped client that accepts these\n // named params directly (matching the legacy JS plugin pattern).\n await (client.session.promptAsync as (opts: Record<string, unknown>) => Promise<unknown>)({\n directory,\n workspace: worktree,\n sessionID,\n agent: state.worker_agent,\n parts: [{ type: \"text\" as const, text: promptText }],\n });\n } catch {\n // Prompt dispatch failure — will be caught by session.error\n }\n };\n\n // -- Continuation logic (called on session.idle) --\n const maybeContinue = async (sessionID: string): Promise<void> => {\n const state = getState(sessionID);\n const tracking = getTracking(sessionID);\n if (!state || state.mode !== \"ENABLED\" || !tracking) return;\n\n // Initial dispatch after arming\n if (state.phase === \"OBSERVE\" && state.continuation_count === 0 && !tracking.lastAssistantMessageID) {\n recordHistory(sessionID, `Starting task with ${state.worker_agent}`);\n await safeToast({\n title: \"Autopilot armed\",\n message: `Starting task with ${state.worker_agent}`,\n variant: \"info\",\n });\n await dispatchPrompt(sessionID, state, state.goal);\n return;\n }\n\n // Permission block check\n if (tracking.blockedByPermission) {\n tracking.blockedByPermission = false;\n await setStopped(\n sessionID,\n \"Blocked by permissions\",\n tracking.permissionBlockMessage ??\n \"A required action was denied in limited mode.\",\n \"warning\",\n );\n return;\n }\n\n // Check for worker reply\n const messageID = tracking.lastAssistantMessageID;\n if (!messageID) return;\n\n tracking.awaitingWorkerReply = false;\n tracking.lastAssistantMessageID = undefined;\n\n const assistantText = sessionCache.getMessageText(sessionID, messageID);\n const directive = inferAutopilotDirective(assistantText);\n\n if (directive.status === \"complete\") {\n await setStopped(\n sessionID,\n \"Task completed\",\n directive.reason,\n \"success\",\n );\n return;\n }\n\n if (directive.status === \"blocked\") {\n await setStopped(\n sessionID,\n \"Task blocked\",\n directive.reason,\n \"warning\",\n );\n return;\n }\n\n // Check continuation limit\n if (state.continuation_count >= state.max_continues) {\n await setStopped(\n sessionID,\n \"Continuation limit reached\",\n `Stopped after ${state.continuation_count} autonomous continuations.`,\n \"warning\",\n );\n return;\n }\n\n // Continue\n state.continuation_count += 1;\n const usageBits = formatUsageMetadata(\n tracking.lastUsage as Parameters<typeof formatUsageMetadata>[0],\n );\n const suffix = usageBits ? ` (${usageBits})` : \"\";\n recordHistory(\n sessionID,\n `Continuation ${state.continuation_count}/${state.max_continues}${suffix}`,\n );\n\n await safeToast({\n title: \"Autopilot continuing\",\n message: `Continuation ${state.continuation_count}/${state.max_continues}${suffix}`,\n variant: \"info\",\n });\n\n await dispatchPrompt(\n sessionID,\n state,\n buildContinuationPrompt({\n continueCount: state.continuation_count,\n maxContinues: state.max_continues,\n task: state.goal,\n }),\n );\n };\n\n // -- Build hooks --\n const eventHandler = createEventHandler({\n getState,\n deleteState,\n sessionCache,\n getTracking,\n onSessionIdle: maybeContinue,\n onSessionError: async (sessionID, error) => {\n const errorMessage =\n error?.data?.message ?? \"Autopilot encountered an unknown error.\";\n const isAbort = error?.name === \"MessageAbortedError\";\n const reason = isAbort ? \"Interrupted\" : \"Error\";\n const variant: \"warning\" | \"error\" = isAbort ? \"warning\" : \"error\";\n await setStopped(sessionID, reason, errorMessage, variant);\n },\n });\n\n const permissionHook = createPermissionHook({\n getState,\n getPermissionMode: (sessionID) => permissionModeBySession.get(sessionID),\n onPermissionDenied: (sessionID, permission) => {\n const tracking = getTracking(sessionID);\n if (!tracking) return;\n tracking.blockedByPermission = true;\n const patternStr = Array.isArray(permission.pattern)\n ? permission.pattern.join(\", \")\n : permission.pattern ?? \"\";\n tracking.permissionBlockMessage =\n `Denied ${permission.type} ${patternStr}`.trim();\n recordHistory(\n sessionID,\n tracking.permissionBlockMessage,\n );\n },\n });\n\n const systemTransformHook = createSystemTransformHook({\n getState,\n getSuppressCount: (sessionID) =>\n suppressCountBySession.get(sessionID) ?? 0,\n decrementSuppressCount: (sessionID) => {\n const current = suppressCountBySession.get(sessionID) ?? 0;\n if (current > 0) {\n suppressCountBySession.set(sessionID, current - 1);\n }\n },\n buildSystemPrompt: buildAutopilotSystemPrompt,\n });\n\n const chatMessageHook = createChatMessageHook({\n getState,\n incrementSuppressCount: (sessionID) => {\n const current = suppressCountBySession.get(sessionID) ?? 0;\n suppressCountBySession.set(sessionID, current + 1);\n },\n });\n\n const toolAfterHook = createToolAfterHook({\n stripMarker: stripAutopilotMarker,\n });\n\n // -- Build tools --\n const startTool = createStartTool({\n getState,\n setState,\n createSessionState,\n normalizeMaxContinues,\n initSession,\n defaultWorkerAgent: AUTOPILOT_FALLBACK_AGENT,\n onArmed: async (sessionID, state) => {\n // Extract and store permissionMode\n const pm = (state as unknown as Record<string, unknown>)[\"permissionMode\"];\n if (pm === \"allow-all\" || pm === \"limited\") {\n permissionModeBySession.set(sessionID, pm);\n } else {\n permissionModeBySession.set(sessionID, \"limited\");\n }\n recordHistory(\n sessionID,\n `Armed in ${permissionModeBySession.get(sessionID)} mode with ${state.worker_agent}.`,\n );\n recordHistory(\n sessionID,\n `Continuation limit: ${state.max_continues}.`,\n );\n },\n });\n\n const statusTool = createStatusTool({\n getState,\n summarizeState: summarizeAutopilotState,\n getHistory: (sessionID) => historyBySession.get(sessionID) ?? [],\n });\n\n const stopTool = createStopTool({\n getState,\n onStop: (sessionID, reason) => {\n const state = getState(sessionID);\n if (!state) return;\n state.mode = \"DISABLED\";\n state.phase = \"STOPPED\";\n state.stop_reason = \"USER_STOP\";\n recordHistory(\n sessionID,\n reason ? `Cancelled by user: ${reason}` : \"Cancelled by user\",\n );\n },\n });\n\n const helpTool = createHelpTool();\n const promptTool = createPromptTool();\n\n // -- Return assembled hooks --\n return {\n tool: {\n autopilot_start: startTool,\n autopilot_status: statusTool,\n autopilot_stop: stopTool,\n autopilot_help: helpTool,\n autopilot_prompt: promptTool,\n },\n\n event: eventHandler,\n\n \"permission.ask\": permissionHook,\n\n \"experimental.chat.system.transform\": systemTransformHook,\n\n \"chat.message\": chatMessageHook,\n\n \"tool.execute.after\": toolAfterHook,\n };\n};\n"
|
|
5
|
+
"// ---------------------------------------------------------------------------\n// chat.message hook — tracks optional autopilot orchestrator turns for suppression\n// ---------------------------------------------------------------------------\n\nexport const CONTROL_AGENT = \"autopilot\";\n\nexport interface ChatMessageHookDeps {\n getState: (sessionID: string) => { mode: \"DISABLED\" | \"ENABLED\" } | undefined;\n incrementSuppressCount: (sessionID: string) => void;\n}\n\ninterface ChatMessageInput {\n sessionID: string;\n agent?: string;\n model?: { providerID: string; modelID: string };\n messageID?: string;\n variant?: string;\n}\n\ninterface ChatMessageOutput {\n message: Record<string, unknown>;\n parts: unknown[];\n}\n\nexport function createChatMessageHook(\n deps: ChatMessageHookDeps,\n): (input: ChatMessageInput, output: ChatMessageOutput) => Promise<void> {\n const { getState, incrementSuppressCount } = deps;\n\n return async (input: ChatMessageInput, _output: ChatMessageOutput): Promise<void> => {\n const state = getState(input.sessionID);\n\n if (!state || state.mode !== \"ENABLED\") {\n return;\n }\n\n if (input.agent === CONTROL_AGENT) {\n incrementSuppressCount(input.sessionID);\n }\n };\n}\n",
|
|
6
|
+
"import type { SessionCache } from \"../state/session-cache.ts\";\nimport type { ExtendedState } from \"../types/index.ts\";\n\n// ---------------------------------------------------------------------------\n// Auxiliary per-session tracking (fields not part of ExtendedState)\n// ---------------------------------------------------------------------------\n\nexport interface SessionTracking {\n lastAssistantMessageID: string | undefined;\n lastUsage: { tokens?: unknown; cost?: unknown } | undefined;\n awaitingWorkerReply: boolean;\n blockedByPermission: boolean;\n permissionBlockMessage: string | undefined;\n}\n\nexport function createSessionTracking(): SessionTracking {\n return {\n lastAssistantMessageID: undefined,\n lastUsage: undefined,\n awaitingWorkerReply: false,\n blockedByPermission: false,\n permissionBlockMessage: undefined,\n };\n}\n\n// ---------------------------------------------------------------------------\n// Deps\n// ---------------------------------------------------------------------------\n\nexport interface EventHandlerDeps {\n getState: (sessionID: string) => ExtendedState | undefined;\n deleteState: (sessionID: string) => void;\n sessionCache: SessionCache;\n getTracking: (sessionID: string) => SessionTracking | undefined;\n onSessionIdle: (sessionID: string) => Promise<void>;\n onSessionError: (\n sessionID: string,\n error: { name?: string; data?: { message?: string } } | undefined,\n ) => Promise<void>;\n}\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\nfunction isString(value: unknown): value is string {\n return typeof value === \"string\";\n}\n\nfunction isObject(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null;\n}\n\nfunction normalizeError(\n error: unknown,\n): { name?: string; data?: { message?: string } } | undefined {\n if (!isObject(error)) return undefined;\n\n const result: { name?: string; data?: { message?: string } } = {};\n\n if (isString(error.name)) {\n result.name = error.name;\n }\n\n if (isObject(error.data) && isString(error.data.message)) {\n result.data = { message: error.data.message };\n }\n\n return result;\n}\n\n// ---------------------------------------------------------------------------\n// Factory\n// ---------------------------------------------------------------------------\n\ninterface SdkEvent {\n type: string;\n properties: Record<string, unknown>;\n}\n\nexport function createEventHandler(\n deps: EventHandlerDeps,\n): (input: { event: SdkEvent }) => Promise<void> {\n const { getState, deleteState, sessionCache, getTracking, onSessionIdle, onSessionError } = deps;\n\n return async function handleEvent(input: { event: SdkEvent }): Promise<void> {\n const { event } = input;\n\n switch (event.type) {\n case \"message.updated\": {\n const info = event.properties.info;\n if (!isObject(info)) return;\n\n const sessionID = info.sessionID;\n const messageID = info.id;\n const role = info.role;\n\n if (!isString(sessionID) || !isString(messageID) || !isString(role)) {\n return;\n }\n\n if (role === \"user\" || role === \"assistant\") {\n sessionCache.setRole(sessionID, messageID, role);\n }\n\n if (\"agent\" in info && isString(info.agent)) {\n sessionCache.setAgent(sessionID, messageID, info.agent);\n }\n\n if (role === \"assistant\") {\n const state = getState(sessionID);\n const tracking = getTracking(sessionID);\n\n if (state && tracking?.awaitingWorkerReply) {\n const agent = \"agent\" in info && isString(info.agent) ? info.agent : undefined;\n\n if (agent === state.worker_agent) {\n tracking.lastAssistantMessageID = messageID;\n tracking.lastUsage = {\n tokens: info.tokens,\n cost: info.cost,\n };\n }\n }\n }\n return;\n }\n\n case \"message.part.updated\": {\n const part = event.properties.part;\n if (!isObject(part)) return;\n\n if (\n part.type !== \"text\" ||\n !isString(part.sessionID) ||\n !isString(part.messageID) ||\n !isString(part.id) ||\n !isString(part.text)\n ) {\n return;\n }\n\n const state = getState(part.sessionID);\n if (!state) return;\n\n const cachedRole = sessionCache.getRole(part.sessionID, part.messageID);\n const cachedAgent = sessionCache.getAgent(part.sessionID, part.messageID);\n\n if (cachedRole === \"assistant\" && cachedAgent === state.worker_agent) {\n sessionCache.setTextPart(part.sessionID, part.id, part.messageID, part.text);\n }\n return;\n }\n\n case \"session.idle\": {\n const sessionID = event.properties.sessionID;\n if (!isString(sessionID)) return;\n\n await onSessionIdle(sessionID);\n return;\n }\n\n case \"session.error\": {\n const sessionID = event.properties.sessionID;\n if (!isString(sessionID)) return;\n\n const state = getState(sessionID);\n if (!state || state.mode !== \"ENABLED\") return;\n\n const error = normalizeError(event.properties.error);\n await onSessionError(sessionID, error);\n return;\n }\n\n case \"session.deleted\": {\n const info = event.properties.info;\n if (!isObject(info) || !isString(info.id)) return;\n\n sessionCache.cleanup(info.id);\n deleteState(info.id);\n return;\n }\n\n case \"permission.updated\": {\n const sessionID = event.properties.sessionID;\n if (!isString(sessionID)) return;\n\n const state = getState(sessionID);\n const tracking = getTracking(sessionID);\n\n if (!state || state.mode !== \"ENABLED\" || !tracking) return;\n\n // In limited mode, a permission being asked implies it was denied\n // (since our permission.ask hook denies it). Record the block.\n tracking.blockedByPermission = true;\n const permType = isString(event.properties.type) ? event.properties.type : \"unknown\";\n const patterns = event.properties.pattern;\n const patternStr = Array.isArray(patterns)\n ? patterns.filter(isString).join(\", \")\n : isString(patterns)\n ? patterns\n : \"\";\n tracking.permissionBlockMessage = `Denied ${permType} ${patternStr}`.trim();\n return;\n }\n }\n };\n}\n",
|
|
7
|
+
"// ---------------------------------------------------------------------------\n// permission.ask hook — enforces allow-all / limited modes\n// ---------------------------------------------------------------------------\n\nexport interface PermissionHookDeps {\n getState: (sessionID: string) => { mode: \"DISABLED\" | \"ENABLED\" } | undefined;\n getPermissionMode: (sessionID: string) => \"allow-all\" | \"limited\" | undefined;\n onPermissionDenied?: (\n sessionID: string,\n permission: {\n type: string;\n pattern?: string | string[];\n title: string;\n },\n ) => void;\n}\n\ninterface PermissionInput {\n id: string;\n type: string;\n pattern?: string | string[];\n sessionID: string;\n messageID: string;\n callID?: string;\n title: string;\n metadata: Record<string, unknown>;\n time: { created: number };\n}\n\ninterface PermissionOutput {\n status: \"ask\" | \"deny\" | \"allow\";\n}\n\nexport function createPermissionHook(\n deps: PermissionHookDeps,\n): (input: PermissionInput, output: PermissionOutput) => Promise<void> {\n return async (input: PermissionInput, output: PermissionOutput): Promise<void> => {\n const state = deps.getState(input.sessionID);\n\n if (!state || state.mode !== \"ENABLED\") {\n return;\n }\n\n const permissionMode = deps.getPermissionMode(input.sessionID);\n\n if (permissionMode === \"allow-all\") {\n output.status = \"allow\";\n return;\n }\n\n if (permissionMode === \"limited\") {\n output.status = \"deny\";\n deps.onPermissionDenied?.(input.sessionID, {\n type: input.type,\n pattern: input.pattern,\n title: input.title,\n });\n }\n };\n}\n",
|
|
8
|
+
"// ---------------------------------------------------------------------------\n// experimental.chat.system.transform hook\n// Injects autopilot system prompt for worker turns, suppresses for control turns\n// ---------------------------------------------------------------------------\n\nimport type { AutonomousStrength } from \"../types/state.ts\";\n\nexport interface SystemTransformHookDeps {\n getState: (\n sessionID: string,\n ) => { mode: \"DISABLED\" | \"ENABLED\"; autonomous_strength: AutonomousStrength } | undefined;\n getSuppressCount: (sessionID: string) => number;\n decrementSuppressCount: (sessionID: string) => void;\n buildSystemPrompt: (strength: AutonomousStrength) => string;\n}\n\ninterface SystemTransformInput {\n sessionID?: string;\n model: Record<string, unknown>;\n}\n\ninterface SystemTransformOutput {\n system: string[];\n}\n\nexport function createSystemTransformHook(\n deps: SystemTransformHookDeps,\n): (input: SystemTransformInput, output: SystemTransformOutput) => Promise<void> {\n const { getState, getSuppressCount, decrementSuppressCount, buildSystemPrompt } = deps;\n\n return async (input: SystemTransformInput, output: SystemTransformOutput): Promise<void> => {\n const { sessionID } = input;\n\n if (sessionID === undefined) {\n return;\n }\n\n const state = getState(sessionID);\n\n if (!state || state.mode !== \"ENABLED\") {\n return;\n }\n\n const suppressCount = getSuppressCount(sessionID);\n\n if (suppressCount > 0) {\n decrementSuppressCount(sessionID);\n return;\n }\n\n if (!Array.isArray(output.system)) {\n output.system = [];\n }\n\n output.system.push(buildSystemPrompt(state.autonomous_strength));\n };\n}\n",
|
|
9
|
+
"// ---------------------------------------------------------------------------\n// tool.execute.after hook — strips autopilot markers from autopilot tool output\n// ---------------------------------------------------------------------------\n\nconst AUTOPILOT_TOOL = \"autopilot\";\n\nexport interface ToolAfterHookDeps {\n stripMarker: (text: string) => string;\n}\n\ninterface ToolAfterInput {\n tool: string;\n sessionID: string;\n callID: string;\n args: unknown;\n}\n\ninterface ToolAfterOutput {\n title: string;\n output: string;\n metadata: unknown;\n}\n\nexport function createToolAfterHook(\n deps: ToolAfterHookDeps,\n): (input: ToolAfterInput, output: ToolAfterOutput) => Promise<void> {\n return async (input: ToolAfterInput, output: ToolAfterOutput): Promise<void> => {\n if (input.tool !== AUTOPILOT_TOOL) {\n return;\n }\n\n output.output = deps.stripMarker(output.output);\n };\n}\n",
|
|
10
|
+
"export interface ContinuationPromptOptions {\n continueCount: number;\n maxContinues: number;\n task: string;\n isValidation?: boolean;\n}\n\nexport function buildContinuationPrompt(options: ContinuationPromptOptions): string {\n if (options.isValidation) {\n return [\n `Autopilot VALIDATION checkpoint ${options.continueCount}/${options.maxContinues}.`,\n \"You previously marked this task as potentially complete, but you MUST validate your work before marking it COMPLETE.\",\n `Original task: ${options.task}`,\n \"\",\n \"VALIDATION CHECKLIST - Complete ALL of these:\",\n \"1. Verify any files you created/modified actually exist and have correct content\",\n \"2. Run any tests or check outputs if applicable\",\n \"3. Confirm the task requirements are FULLY satisfied\",\n \"4. Check for any errors, TODOs, or incomplete work\",\n \"\",\n \"IF validation passes and you're 100% confident: mark COMPLETE\",\n \"IF you find issues: mark CONTINUE and fix them\",\n \"IF uncertain: mark VALIDATE again after gathering more info\",\n ].join(\"\\n\");\n }\n\n return [\n `Autopilot continuation ${options.continueCount}/${options.maxContinues}.`,\n \"Continue working autonomously on the same task.\",\n `Original task: ${options.task}`,\n \"Review your latest progress, choose the next concrete step, and keep moving without waiting for the user.\",\n \"Use VALIDATE when you think you might be done but need to verify your work.\",\n \"Use COMPLETE only when you are highly confident the task is fully done (gamble-your-house confident).\",\n \"Use BLOCKED if missing information or denied permissions.\",\n ].join(\"\\n\");\n}\n",
|
|
11
|
+
"export type AutopilotDirectiveStatus = \"continue\" | \"validate\" | \"complete\" | \"blocked\";\n\nexport interface AutopilotDirective {\n status: AutopilotDirectiveStatus;\n reason: string;\n}\n\nconst AUTOPILOT_MARKER_RE =\n /\\n?<autopilot\\s+status=\"(continue|validate|complete|blocked)\">([\\s\\S]*?)<\\/autopilot>\\s*$/i;\nconst BLOCKED_HINT_RE =\n /(need (more|additional) information|cannot continue|can't continue|blocked|waiting for user|please provide|which option|what should i|what would you like)/i;\n\nexport function parseAutopilotMarker(text: string): AutopilotDirective | null {\n const match = text.match(AUTOPILOT_MARKER_RE);\n\n if (!match) {\n return null;\n }\n\n const [, rawStatus, rawReason] = match;\n\n if (!rawStatus || rawReason === undefined) {\n return null;\n }\n\n const status = rawStatus.toLowerCase() as AutopilotDirectiveStatus;\n return {\n status,\n reason: rawReason.trim() || defaultReason(status),\n };\n}\n\nexport function stripAutopilotMarker(text: string): string {\n return text.replace(AUTOPILOT_MARKER_RE, \"\").trimEnd();\n}\n\nexport function inferAutopilotDirective(text: string): AutopilotDirective {\n const marker = parseAutopilotMarker(text);\n\n if (marker) {\n return marker;\n }\n\n const source = text.trim();\n if (!source) {\n return {\n status: \"blocked\",\n reason: \"Assistant returned no usable response.\",\n };\n }\n\n if (BLOCKED_HINT_RE.test(source)) {\n return {\n status: \"blocked\",\n reason: \"Assistant requested input or reported it could not continue.\",\n };\n }\n\n return {\n status: \"continue\",\n reason: \"No autopilot marker emitted; continuing with fallback policy.\",\n };\n}\n\nfunction defaultReason(status: AutopilotDirectiveStatus): string {\n if (status === \"complete\") {\n return \"Task complete.\";\n }\n\n if (status === \"blocked\") {\n return \"Task is blocked.\";\n }\n\n if (status === \"validate\") {\n return \"Task needs validation before marking complete.\";\n }\n\n return \"More work remains.\";\n}\n",
|
|
12
|
+
"import type { ExtendedState } from \"../types/index.ts\";\n\nexport interface UsageMetadata {\n tokens?: {\n total?: number;\n input?: number;\n output?: number;\n };\n cost?: {\n total?: number;\n };\n}\n\nexport function formatUsageMetadata(usage: UsageMetadata | null | undefined): string {\n if (!usage) {\n return \"\";\n }\n\n const parts: string[] = [];\n\n if (usage.tokens) {\n const { total, input, output } = usage.tokens;\n\n if (Number.isFinite(total)) {\n parts.push(`${total} tokens`);\n } else if (Number.isFinite(input) || Number.isFinite(output)) {\n const tokenParts: string[] = [];\n\n if (Number.isFinite(input)) {\n tokenParts.push(`in ${input}`);\n }\n\n if (Number.isFinite(output)) {\n tokenParts.push(`out ${output}`);\n }\n\n if (tokenParts.length > 0) {\n parts.push(tokenParts.join(\", \"));\n }\n }\n }\n\n const totalCost = usage.cost?.total;\n if (Number.isFinite(totalCost)) {\n parts.push(`cost ${totalCost}`);\n }\n\n return parts.join(\"; \");\n}\n\nexport function summarizeAutopilotState(state: ExtendedState | null | undefined): string {\n if (!state) {\n return \"Autopilot is idle.\";\n }\n\n const status = [\n `phase=${state.phase}`,\n `mode=${state.mode}`,\n `session_mode=${state.session_mode}`,\n `continues=${state.continuation_count}/${state.max_continues}`,\n `agent=${state.worker_agent}`,\n ];\n\n if (state.session_mode === \"delegated-task\") {\n status.push(`task=${JSON.stringify(state.goal)}`);\n }\n\n if (state.stop_reason) {\n status.push(`stop=${state.stop_reason}`);\n }\n\n const latestEvent = state.latest_observations.events.at(-1);\n if (latestEvent) {\n status.push(`last_event=${latestEvent.event_type}`);\n }\n\n return `Autopilot status: ${status.join(\", \")}`;\n}\n",
|
|
13
|
+
"export const AUTOPILOT_DEFAULT_MAX_CONTINUES = 10;\nexport const AUTOPILOT_MAX_CONTINUES_HARD_LIMIT = 50;\n\nexport function normalizeMaxContinues(value: unknown): number {\n const numeric = Number(value);\n\n if (!Number.isFinite(numeric) || numeric <= 0) {\n return AUTOPILOT_DEFAULT_MAX_CONTINUES;\n }\n\n return Math.min(AUTOPILOT_MAX_CONTINUES_HARD_LIMIT, Math.max(1, Math.floor(numeric)));\n}\n",
|
|
14
|
+
"import type { AutonomousStrength } from \"../types/state.ts\";\n\nexport function buildAutopilotSystemPrompt(strength: AutonomousStrength = \"balanced\"): string {\n const baseInstructions = [\"Autopilot mode is active for this session.\"];\n\n const behaviorInstructions: string[] = (() => {\n switch (strength) {\n case \"conservative\":\n return [\n \"Work autonomously toward the user's goal and ask fewer follow-up questions.\",\n \"Prefer the recommended or safest reasonable default when a routine choice is needed.\",\n \"Only ask the user for input when you are truly blocked, the choice is high-impact, or no safe default exists.\",\n ];\n\n case \"balanced\":\n return [\n \"Work autonomously toward the user's goal with minimal user interaction.\",\n \"When faced with routine choices (file paths, variable names, standard configurations), select the recommended or safest default without asking.\",\n \"Only escalate to the user for: (1) high-impact decisions, (2) security/safety risks, or (3) when truly blocked with no reasonable default.\",\n ];\n\n case \"aggressive\":\n return [\n \"CRITICAL: Work with maximum autonomy. Minimize all user interaction.\",\n \"When faced with any routine choice (file paths, variable names, configurations, formatting preferences), ALWAYS select the recommended or safest default immediately. DO NOT ask the user.\",\n \"For choices with a 'recommended' option clearly marked, select it automatically and explain your choice in the response.\",\n \"Only escalate to the user for: (1) high-impact irreversible decisions (data deletion, major refactors), (2) explicit user preference required (UX/design choices affecting end users), or (3) security/safety risks.\",\n \"If you can make reasonable progress on a task without user input, do so immediately.\",\n ];\n }\n })();\n\n const statusMarkerInstructions = [\n \"If a delegated autopilot task is in progress, keep it moving without waiting for extra confirmation.\",\n \"At the very end of every assistant response, append exactly one machine-readable status marker on its own line using this format:\",\n '<autopilot status=\"continue|validate|complete|blocked\">short reason</autopilot>',\n \"Use CONTINUE when more work remains and you can keep going without the user.\",\n \"Use VALIDATE when you THINK the task might be done but need to verify your work. This is a checkpoint - verify file contents, run tests, check outputs. Do NOT mark complete without validating first!\",\n \"Use COMPLETE only when you are HIGHLY CONFIDENT the task is FULLY DONE!!! This is a **PROMISE**! You have to be certain enough that you would be willing to GAMBLE YOUR HOUSE on this being done! If you have ANY doubt, use VALIDATE instead!\",\n \"Use BLOCKED when missing information, denied permissions, or an external failure prevents meaningful progress.\",\n \"Do not omit the marker.\",\n ];\n\n return [...baseInstructions, ...behaviorInstructions, ...statusMarkerInstructions].join(\"\\n\");\n}\n",
|
|
15
|
+
"import type {\n AgentMode,\n AgentPhase,\n ApprovalState,\n AutonomousStrength,\n ContextState,\n ExtendedState,\n PlanState,\n RetryCounters,\n TrustState,\n} from \"../types/index.ts\";\n\nexport interface CreateInitialStateOptions {\n sessionID?: string;\n mode?: AgentMode;\n phase?: AgentPhase;\n sessionMode?: ExtendedState[\"session_mode\"];\n allowedTools?: string[];\n allowedPaths?: string[];\n maxContinues?: number;\n workerAgent?: string;\n autonomousStrength?: AutonomousStrength;\n remainingBudget?: number | null;\n contextThreshold?: number;\n maxStepRetries?: number;\n maxGlobalRetries?: number;\n maxNoProgress?: number;\n trustedPaths?: string[];\n}\n\nconst DEFAULT_ALLOWED_TOOLS = [\"bash\", \"read\", \"glob\", \"grep\", \"apply_patch\"];\nconst DEFAULT_CONTEXT_THRESHOLD = 8_000;\nconst DEFAULT_MAX_CONTINUES = 25;\nconst DEFAULT_MAX_STEP_RETRIES = 2;\nconst DEFAULT_MAX_GLOBAL_RETRIES = 6;\nconst DEFAULT_MAX_NO_PROGRESS = 3;\nconst DEFAULT_WORKER_AGENT = \"pi\";\nconst DEFAULT_AUTONOMOUS_STRENGTH: AutonomousStrength = \"balanced\";\n\nfunction createPlanState(): PlanState {\n return {\n steps: [],\n open_items: [],\n completed_items: [],\n blocked_items: [],\n dependencies: {},\n stale: false,\n };\n}\n\nfunction createApprovalState(): ApprovalState {\n return {\n status: \"idle\",\n pending_action: null,\n pending_scope: null,\n approved_scopes: [],\n denied_scopes: [],\n last_feedback: null,\n };\n}\n\nfunction createTrustState(trustedPaths: string[]): TrustState {\n return {\n status: trustedPaths.length > 0 ? \"trusted\" : \"untrusted\",\n trusted_paths: [...trustedPaths],\n pending_path: null,\n denied_paths: [],\n last_feedback: null,\n };\n}\n\nfunction createContextState(remainingBudget: number | null, threshold: number): ContextState {\n const resolvedBudget = remainingBudget ?? null;\n const compactionNeeded = resolvedBudget === null ? false : resolvedBudget <= threshold;\n\n return {\n remaining_budget: resolvedBudget,\n threshold,\n compaction_needed: compactionNeeded,\n compacted_at: null,\n unsafe_to_continue: compactionNeeded,\n };\n}\n\nfunction createRetryCounters(options: CreateInitialStateOptions): RetryCounters {\n return {\n step_retry_count: 0,\n global_retry_count: 0,\n no_progress_count: 0,\n recovery_attempt_count: 0,\n max_step_retries: options.maxStepRetries ?? DEFAULT_MAX_STEP_RETRIES,\n max_global_retries: options.maxGlobalRetries ?? DEFAULT_MAX_GLOBAL_RETRIES,\n max_no_progress: options.maxNoProgress ?? DEFAULT_MAX_NO_PROGRESS,\n };\n}\n\nexport function createInitialState(\n goal: string,\n options: CreateInitialStateOptions = {},\n): ExtendedState {\n const sessionID = options.sessionID ?? \"\";\n const allowedPaths = options.allowedPaths ?? [];\n\n return {\n session_id: sessionID,\n mode: options.mode ?? \"DISABLED\",\n phase: options.phase ?? \"STOPPED\",\n session_mode: options.sessionMode ?? \"delegated-task\",\n goal,\n plan_state: createPlanState(),\n completion_evidence: [],\n allowed_tools: [...(options.allowedTools ?? DEFAULT_ALLOWED_TOOLS)],\n allowed_paths: [...allowedPaths],\n approval_state: createApprovalState(),\n trust_state: createTrustState(options.trustedPaths ?? allowedPaths),\n context_state: createContextState(\n options.remainingBudget ?? null,\n options.contextThreshold ?? DEFAULT_CONTEXT_THRESHOLD,\n ),\n foreground_action: null,\n background_tasks: [],\n retry_counters: createRetryCounters(options),\n stop_reason: null,\n latest_observations: {\n events: [],\n last_user_input: null,\n last_tool_result: null,\n last_tool_error: null,\n last_interrupt: null,\n },\n continuation_count: 0,\n max_continues: options.maxContinues ?? DEFAULT_MAX_CONTINUES,\n worker_agent: options.workerAgent ?? DEFAULT_WORKER_AGENT,\n autonomous_strength: options.autonomousStrength ?? DEFAULT_AUTONOMOUS_STRENGTH,\n last_updated_at: null,\n resumable: true,\n };\n}\n\nexport function createSessionState(\n sessionID: string,\n goal: string,\n options: Omit<CreateInitialStateOptions, \"sessionID\"> = {},\n): ExtendedState {\n return createInitialState(goal, {\n ...options,\n sessionID,\n mode: options.mode ?? \"ENABLED\",\n phase: options.phase ?? \"OBSERVE\",\n sessionMode: options.sessionMode ?? \"delegated-task\",\n });\n}\n",
|
|
16
|
+
"type MessageRole = \"user\" | \"assistant\" | \"system\" | \"tool\";\n\nexport interface CachedTextPart {\n id: string;\n messageID: string;\n text: string;\n}\n\nexport interface SessionSnapshot {\n roles: Record<string, MessageRole>;\n agents: Record<string, string>;\n textParts: CachedTextPart[];\n}\n\ninterface SessionStore {\n roles: Map<string, MessageRole>;\n agents: Map<string, string>;\n textParts: Map<string, CachedTextPart>;\n}\n\nfunction createSessionStore(): SessionStore {\n return {\n roles: new Map<string, MessageRole>(),\n agents: new Map<string, string>(),\n textParts: new Map<string, CachedTextPart>(),\n };\n}\n\nexport class SessionCache {\n private readonly sessions = new Map<string, SessionStore>();\n\n private ensureSession(sessionID: string): SessionStore {\n const existing = this.sessions.get(sessionID);\n\n if (existing) {\n return existing;\n }\n\n const created = createSessionStore();\n this.sessions.set(sessionID, created);\n return created;\n }\n\n setRole(sessionID: string, messageID: string, role: MessageRole): void {\n this.ensureSession(sessionID).roles.set(messageID, role);\n }\n\n getRole(sessionID: string, messageID: string): MessageRole | null {\n return this.sessions.get(sessionID)?.roles.get(messageID) ?? null;\n }\n\n setAgent(sessionID: string, messageID: string, agent: string): void {\n this.ensureSession(sessionID).agents.set(messageID, agent);\n }\n\n getAgent(sessionID: string, messageID: string): string | null {\n return this.sessions.get(sessionID)?.agents.get(messageID) ?? null;\n }\n\n setTextPart(sessionID: string, partID: string, messageID: string, text: string): void {\n this.ensureSession(sessionID).textParts.set(partID, {\n id: partID,\n messageID,\n text,\n });\n }\n\n getTextPart(sessionID: string, partID: string): CachedTextPart | null {\n return this.sessions.get(sessionID)?.textParts.get(partID) ?? null;\n }\n\n getMessageText(sessionID: string, messageID: string): string {\n const session = this.sessions.get(sessionID);\n\n if (!session) {\n return \"\";\n }\n\n return [...session.textParts.values()]\n .filter((part) => part.messageID === messageID)\n .map((part) => part.text)\n .join(\"\");\n }\n\n snapshot(sessionID: string): SessionSnapshot {\n const session = this.sessions.get(sessionID) ?? createSessionStore();\n\n return {\n roles: Object.fromEntries(session.roles),\n agents: Object.fromEntries(session.agents),\n textParts: [...session.textParts.values()],\n };\n }\n\n cleanup(sessionID: string): void {\n this.sessions.delete(sessionID);\n }\n}\n\nexport type { MessageRole };\n",
|
|
17
|
+
"import { tool } from \"@opencode-ai/plugin\";\nimport type { AutonomousStrength, ExtendedState } from \"../types/index.ts\";\nimport { buildAutopilotUsage } from \"./usage.ts\";\n\nexport interface AutopilotToolDeps {\n getState: (sessionID: string) => ExtendedState | undefined;\n setState: (sessionID: string, state: ExtendedState) => void;\n createSessionState: (\n sessionID: string,\n goal: string,\n options: {\n maxContinues?: number;\n sessionMode?: ExtendedState[\"session_mode\"];\n workerAgent?: string;\n autonomousStrength?: AutonomousStrength;\n },\n ) => ExtendedState;\n normalizeMaxContinues: (value: unknown) => number;\n initSession: (sessionID: string) => void;\n onArmed: (sessionID: string, state: ExtendedState) => Promise<void>;\n summarizeState: (state: ExtendedState | null | undefined) => string;\n getHistory: (sessionID: string) => string[];\n onStop: (sessionID: string, reason: string | undefined) => void;\n defaultWorkerAgent: string;\n}\n\nconst AUTOPILOT_FALLBACK_AGENT = \"pi\";\n\nexport function createAutopilotTool(deps: AutopilotToolDeps) {\n return tool({\n description:\n \"Control session autopilot: turn it on or off, check status, or start a long-running delegated task\",\n args: {\n action: tool.schema\n .enum([\"on\", \"off\", \"status\", \"help\"])\n .optional()\n .describe(\"Autopilot command: on, off, status, or help\"),\n task: tool.schema\n .string()\n .optional()\n .describe(\"Optional delegated task to hand to the configured agent\"),\n permissionMode: tool.schema\n .enum([\"limited\", \"allow-all\"])\n .optional()\n .describe(\"How permissions should behave while autopilot is active\"),\n maxContinues: tool.schema\n .number()\n .int()\n .positive()\n .optional()\n .describe(\"Maximum number of autonomous continuation prompts\"),\n workerAgent: tool.schema\n .string()\n .optional()\n .describe(\"Delegate agent used for long-running autopilot tasks\"),\n autonomousStrength: tool.schema\n .enum([\"conservative\", \"balanced\", \"aggressive\"])\n .optional()\n .describe(\n \"How strongly autopilot prefers defaults: conservative (soft guidance), balanced (default, stronger guidance), aggressive (always pick recommended/safe defaults)\",\n ),\n },\n async execute(args, context) {\n const task = args.task?.trim() ?? \"\";\n const action = args.action ?? (task ? \"on\" : \"help\");\n\n if (action === \"help\" || (!args.action && task.toLowerCase() === \"help\")) {\n return buildAutopilotUsage();\n }\n\n if (action === \"status\") {\n const state = deps.getState(context.sessionID);\n if (!state) {\n return deps.summarizeState(state);\n }\n\n const history = deps.getHistory(context.sessionID);\n const historyStr = history.length > 0 ? `\\nRecent events:\\n- ${history.join(\"\\n- \")}` : \"\";\n return `${deps.summarizeState(state)}${historyStr}`;\n }\n\n if (action === \"off\") {\n const state = deps.getState(context.sessionID);\n if (!state || state.mode !== \"ENABLED\") {\n return \"Autopilot is not running in this session.\";\n }\n\n deps.onStop(context.sessionID, task || undefined);\n return task ? `Autopilot stopped: ${task}` : \"Autopilot stopped for this session.\";\n }\n\n const permissionMode = args.permissionMode ?? \"limited\";\n const maxContinues = deps.normalizeMaxContinues(args.maxContinues);\n const workerAgent =\n args.workerAgent?.trim() || deps.defaultWorkerAgent || AUTOPILOT_FALLBACK_AGENT;\n const autonomousStrength = args.autonomousStrength ?? \"balanced\";\n\n const state = deps.createSessionState(context.sessionID, task, {\n maxContinues,\n workerAgent,\n autonomousStrength,\n sessionMode: task ? \"delegated-task\" : \"session-defaults\",\n });\n\n Object.defineProperty(state, \"permissionMode\", {\n value: permissionMode,\n writable: true,\n enumerable: true,\n configurable: true,\n });\n\n deps.setState(context.sessionID, state);\n deps.initSession(context.sessionID);\n\n context.metadata({\n title: task ? \"Autopilot task started\" : \"Autopilot enabled\",\n metadata: {\n action,\n permissionMode,\n maxContinues,\n workerAgent,\n autonomousStrength,\n task: task || null,\n },\n });\n\n await deps.onArmed(context.sessionID, state);\n\n if (state.session_mode === \"session-defaults\") {\n return `Autopilot is enabled in ${permissionMode} mode for this session. OpenCode will prefer reasonable defaults, ask fewer questions, and keep using ${workerAgent} for delegated work when you hand it a task.`;\n }\n\n return `Autopilot enabled in ${permissionMode} mode with ${workerAgent}. It will start the delegated task after this response and may continue up to ${maxContinues} times.`;\n },\n });\n}\n",
|
|
18
|
+
"export function buildAutopilotUsage(): string {\n return `\n## Autopilot Usage\n\nPrimary workflow:\n- \\`/autopilot on\\` — enable session autopilot defaults\n- \\`/autopilot off\\` — disable autopilot for this session\n- \\`/autopilot status\\` — show current status and recent events\n- \\`/autopilot <task>\\` — enable autopilot and hand a long-running task to the delegate agent\n\nDirect tool equivalents:\n- \\`autopilot(action=\"on\")\\`\n- \\`autopilot(action=\"off\")\\`\n- \\`autopilot(action=\"status\")\\`\n- \\`autopilot(task=\"Fix the failing tests\")\\`\n- \\`autopilot(action=\"on\", autonomousStrength=\"aggressive\")\\`\n\nDefaults:\n- permission mode: \\`limited\\`\n- continuation limit: \\`10\\`\n- delegate agent: \\`general\\`\n- autonomous strength: \\`balanced\\`\n\nAutonomous strength modes:\n- \\`conservative\\` — soft guidance to prefer defaults, asks when unsure (similar to previous behavior)\n- \\`balanced\\` — stronger bias toward selecting recommended/safe defaults, minimal user interaction (default)\n- \\`aggressive\\` — always pick recommended/safe defaults for routine choices, only escalate high-impact decisions\n\nNotes:\n- Session autopilot makes OpenCode act more autonomously and ask fewer questions based on the configured autonomous strength.\n- Long-running delegated tasks run through the configured agent and continue until complete, blocked, or the continuation limit is reached.\n- OpenCode does not currently expose a general question-timeout hook, so autopilot can only auto-handle permission prompts directly. For everything else, the injected system guidance tells the active agent to prefer recommended defaults when safe. The autonomous strength parameter controls how strongly this guidance is worded.\n `.trim();\n}\n",
|
|
19
|
+
"import type { Plugin } from \"@opencode-ai/plugin\";\nimport { createChatMessageHook } from \"./hooks/chat-message.ts\";\nimport type { SessionTracking } from \"./hooks/event-handler.ts\";\nimport { createEventHandler, createSessionTracking } from \"./hooks/event-handler.ts\";\nimport { createPermissionHook } from \"./hooks/permission.ts\";\nimport { createSystemTransformHook } from \"./hooks/system-transform.ts\";\nimport { createToolAfterHook } from \"./hooks/tool-after.ts\";\nimport {\n buildAutopilotSystemPrompt,\n buildContinuationPrompt,\n formatUsageMetadata,\n inferAutopilotDirective,\n normalizeMaxContinues,\n stripAutopilotMarker,\n summarizeAutopilotState,\n} from \"./prompts/index.ts\";\nimport { createSessionState } from \"./state/factory.ts\";\nimport { SessionCache } from \"./state/session-cache.ts\";\nimport { createAutopilotTool } from \"./tools/autopilot.ts\";\nimport type { ExtendedState } from \"./types/index.ts\";\n\n// ---------------------------------------------------------------------------\n// Constants\n// ---------------------------------------------------------------------------\n\nconst AUTOPILOT_FALLBACK_AGENT = \"general\";\nconst MAX_HISTORY_ENTRIES = 10;\n\n// ---------------------------------------------------------------------------\n// Plugin\n// ---------------------------------------------------------------------------\n\nexport const AutopilotPlugin: Plugin = async ({ client, directory, worktree }) => {\n // -- Shared state stores (per-session) --\n const stateBySession = new Map<string, ExtendedState>();\n const trackingBySession = new Map<string, SessionTracking>();\n const suppressCountBySession = new Map<string, number>();\n const historyBySession = new Map<string, string[]>();\n const permissionModeBySession = new Map<string, \"allow-all\" | \"limited\">();\n const sessionCache = new SessionCache();\n\n // -- State accessors --\n const getState = (sessionID: string): ExtendedState | undefined => stateBySession.get(sessionID);\n\n const setState = (sessionID: string, state: ExtendedState): void => {\n stateBySession.set(sessionID, state);\n };\n\n const deleteState = (sessionID: string): void => {\n stateBySession.delete(sessionID);\n trackingBySession.delete(sessionID);\n suppressCountBySession.delete(sessionID);\n historyBySession.delete(sessionID);\n permissionModeBySession.delete(sessionID);\n };\n\n const getTracking = (sessionID: string): SessionTracking | undefined =>\n trackingBySession.get(sessionID);\n\n const initSession = (sessionID: string): void => {\n trackingBySession.set(sessionID, createSessionTracking());\n suppressCountBySession.set(sessionID, 0);\n historyBySession.set(sessionID, []);\n };\n\n const recordHistory = (sessionID: string, message: string): void => {\n let history = historyBySession.get(sessionID);\n if (!history) {\n history = [];\n historyBySession.set(sessionID, history);\n }\n history.push(message);\n if (history.length > MAX_HISTORY_ENTRIES) {\n historyBySession.set(sessionID, history.slice(-MAX_HISTORY_ENTRIES));\n }\n };\n\n // -- Toast helper --\n const safeToast = async (opts: {\n title: string;\n message: string;\n variant: \"info\" | \"success\" | \"warning\" | \"error\";\n }): Promise<void> => {\n try {\n await client.tui.showToast({\n body: {\n title: opts.title,\n message: opts.message,\n variant: opts.variant,\n duration: 3000,\n },\n });\n } catch {\n // Ignore TUI toast failures in non-TUI sessions.\n }\n };\n\n // -- Stop helper --\n const setStopped = async (\n sessionID: string,\n reason: string,\n detail: string | undefined,\n variant: \"info\" | \"success\" | \"warning\" | \"error\" = \"info\",\n ): Promise<void> => {\n const state = getState(sessionID);\n if (!state) return;\n\n state.mode = \"DISABLED\";\n state.phase = \"STOPPED\";\n state.stop_reason = \"USER_STOP\";\n recordHistory(sessionID, detail ? `${reason}: ${detail}` : reason);\n\n await safeToast({\n title: \"Autopilot stopped\",\n message: detail ? `${reason}: ${detail}` : reason,\n variant,\n });\n };\n\n // -- Dispatch helper --\n const dispatchPrompt = async (\n sessionID: string,\n state: ExtendedState,\n promptText: string,\n ): Promise<void> => {\n const tracking = getTracking(sessionID);\n if (!tracking) return;\n\n tracking.awaitingWorkerReply = true;\n tracking.lastAssistantMessageID = undefined;\n\n try {\n // The plugin runtime provides a wrapped client that accepts these\n // named params directly (matching the legacy JS plugin pattern).\n await (client.session.promptAsync as (opts: Record<string, unknown>) => Promise<unknown>)({\n directory,\n workspace: worktree,\n sessionID,\n agent: state.worker_agent,\n parts: [{ type: \"text\" as const, text: promptText }],\n });\n } catch {\n // Prompt dispatch failure — will be caught by session.error\n }\n };\n\n // -- Continuation logic (called on session.idle) --\n const maybeContinue = async (sessionID: string): Promise<void> => {\n const state = getState(sessionID);\n const tracking = getTracking(sessionID);\n if (!state || state.mode !== \"ENABLED\" || !tracking) return;\n\n // Initial dispatch after arming\n if (\n state.phase === \"OBSERVE\" &&\n state.continuation_count === 0 &&\n !tracking.lastAssistantMessageID &&\n state.session_mode === \"delegated-task\"\n ) {\n recordHistory(sessionID, `Starting task with ${state.worker_agent}`);\n await safeToast({\n title: \"Autopilot armed\",\n message: `Starting task with ${state.worker_agent}`,\n variant: \"info\",\n });\n await dispatchPrompt(sessionID, state, state.goal);\n return;\n }\n\n // Permission block check\n if (tracking.blockedByPermission) {\n tracking.blockedByPermission = false;\n await setStopped(\n sessionID,\n \"Blocked by permissions\",\n tracking.permissionBlockMessage ?? \"A required action was denied in limited mode.\",\n \"warning\",\n );\n return;\n }\n\n // Check for worker reply\n const messageID = tracking.lastAssistantMessageID;\n if (!messageID) return;\n\n tracking.awaitingWorkerReply = false;\n tracking.lastAssistantMessageID = undefined;\n\n const assistantText = sessionCache.getMessageText(sessionID, messageID);\n const directive = inferAutopilotDirective(assistantText);\n\n if (directive.status === \"complete\") {\n await setStopped(sessionID, \"Task completed\", directive.reason, \"success\");\n return;\n }\n\n if (directive.status === \"blocked\") {\n await setStopped(sessionID, \"Task blocked\", directive.reason, \"warning\");\n return;\n }\n\n if (directive.status === \"validate\") {\n // Task thinks it's done but needs verification - continue to validate\n state.continuation_count += 1;\n await safeToast({\n title: \"Autopilot validating\",\n message: \"Verifying task completion before finalizing\",\n variant: \"info\",\n });\n await dispatchPrompt(\n sessionID,\n state,\n buildContinuationPrompt({\n continueCount: state.continuation_count,\n maxContinues: state.max_continues,\n task: state.goal,\n isValidation: true,\n }),\n );\n return;\n }\n\n // Check continuation limit\n if (state.continuation_count >= state.max_continues) {\n await setStopped(\n sessionID,\n \"Continuation limit reached\",\n `Stopped after ${state.continuation_count} autonomous continuations.`,\n \"warning\",\n );\n return;\n }\n\n // Continue\n state.continuation_count += 1;\n const usageBits = formatUsageMetadata(\n tracking.lastUsage as Parameters<typeof formatUsageMetadata>[0],\n );\n const suffix = usageBits ? ` (${usageBits})` : \"\";\n recordHistory(\n sessionID,\n `Continuation ${state.continuation_count}/${state.max_continues}${suffix}`,\n );\n\n await safeToast({\n title: \"Autopilot continuing\",\n message: `Continuation ${state.continuation_count}/${state.max_continues}${suffix}`,\n variant: \"info\",\n });\n\n await dispatchPrompt(\n sessionID,\n state,\n buildContinuationPrompt({\n continueCount: state.continuation_count,\n maxContinues: state.max_continues,\n task: state.goal,\n }),\n );\n };\n\n // -- Build hooks --\n const eventHandler = createEventHandler({\n getState,\n deleteState,\n sessionCache,\n getTracking,\n onSessionIdle: maybeContinue,\n onSessionError: async (sessionID, error) => {\n const errorMessage = error?.data?.message ?? \"Autopilot encountered an unknown error.\";\n const isAbort = error?.name === \"MessageAbortedError\";\n const reason = isAbort ? \"Interrupted\" : \"Error\";\n const variant: \"warning\" | \"error\" = isAbort ? \"warning\" : \"error\";\n await setStopped(sessionID, reason, errorMessage, variant);\n },\n });\n\n const permissionHook = createPermissionHook({\n getState,\n getPermissionMode: (sessionID) => permissionModeBySession.get(sessionID),\n onPermissionDenied: (sessionID, permission) => {\n const tracking = getTracking(sessionID);\n if (!tracking) return;\n tracking.blockedByPermission = true;\n const patternStr = Array.isArray(permission.pattern)\n ? permission.pattern.join(\", \")\n : (permission.pattern ?? \"\");\n tracking.permissionBlockMessage = `Denied ${permission.type} ${patternStr}`.trim();\n recordHistory(sessionID, tracking.permissionBlockMessage);\n },\n });\n\n const systemTransformHook = createSystemTransformHook({\n getState,\n getSuppressCount: (sessionID) => suppressCountBySession.get(sessionID) ?? 0,\n decrementSuppressCount: (sessionID) => {\n const current = suppressCountBySession.get(sessionID) ?? 0;\n if (current > 0) {\n suppressCountBySession.set(sessionID, current - 1);\n }\n },\n buildSystemPrompt: buildAutopilotSystemPrompt,\n });\n\n const chatMessageHook = createChatMessageHook({\n getState,\n incrementSuppressCount: (sessionID) => {\n const current = suppressCountBySession.get(sessionID) ?? 0;\n suppressCountBySession.set(sessionID, current + 1);\n },\n });\n\n const toolAfterHook = createToolAfterHook({\n stripMarker: stripAutopilotMarker,\n });\n\n // -- Build tools --\n const stopSession = (sessionID: string, reason: string | undefined) => {\n const state = getState(sessionID);\n if (!state) return;\n state.mode = \"DISABLED\";\n state.phase = \"STOPPED\";\n state.stop_reason = \"USER_STOP\";\n recordHistory(sessionID, reason ? `Cancelled by user: ${reason}` : \"Cancelled by user\");\n };\n\n const autopilotTool = createAutopilotTool({\n getState,\n setState,\n createSessionState,\n normalizeMaxContinues,\n initSession,\n summarizeState: summarizeAutopilotState,\n getHistory: (sessionID) => historyBySession.get(sessionID) ?? [],\n onStop: stopSession,\n defaultWorkerAgent: AUTOPILOT_FALLBACK_AGENT,\n onArmed: async (sessionID, state) => {\n const pm = (state as unknown as Record<string, unknown>).permissionMode;\n if (pm === \"allow-all\" || pm === \"limited\") {\n permissionModeBySession.set(sessionID, pm);\n } else {\n permissionModeBySession.set(sessionID, \"limited\");\n }\n\n if (state.session_mode === \"delegated-task\") {\n recordHistory(\n sessionID,\n `Delegated task armed in ${permissionModeBySession.get(sessionID)} mode with ${state.worker_agent}.`,\n );\n recordHistory(sessionID, `Continuation limit: ${state.max_continues}.`);\n return;\n }\n\n recordHistory(\n sessionID,\n `Session autopilot enabled in ${permissionModeBySession.get(sessionID)} mode.`,\n );\n recordHistory(\n sessionID,\n `Delegate agent ready: ${state.worker_agent}. Long-running tasks will use this agent.`,\n );\n },\n });\n\n // -- Return assembled hooks --\n return {\n tool: {\n autopilot: autopilotTool,\n },\n\n event: eventHandler,\n\n \"permission.ask\": permissionHook,\n\n \"experimental.chat.system.transform\": systemTransformHook,\n\n \"chat.message\": chatMessageHook,\n\n \"tool.execute.after\": toolAfterHook,\n };\n};\n"
|
|
23
20
|
],
|
|
24
|
-
"mappings": "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",
|
|
25
|
-
"debugId": "
|
|
21
|
+
"mappings": "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",
|
|
22
|
+
"debugId": "377FE34A3CD781F264756E2164756E21",
|
|
26
23
|
"names": []
|
|
27
24
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@withakay/opencode-autopilot",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.0",
|
|
4
4
|
"description": "Autopilot mode plugin for OpenCode - autonomous multi-step task execution with safety guarantees",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -18,8 +18,11 @@
|
|
|
18
18
|
],
|
|
19
19
|
"scripts": {
|
|
20
20
|
"build": "bun build ./index.ts --outdir ./dist --target node --sourcemap --external @opencode-ai/plugin --external @opencode-ai/sdk",
|
|
21
|
-
"typecheck": "
|
|
21
|
+
"typecheck": "tsc --noEmit",
|
|
22
22
|
"test": "bun test ./__tests__/",
|
|
23
|
+
"lint": "biome check .",
|
|
24
|
+
"format": "biome format . --write",
|
|
25
|
+
"check": "bun run lint && bun run typecheck",
|
|
23
26
|
"prepublishOnly": "bun run build"
|
|
24
27
|
},
|
|
25
28
|
"keywords": [
|
|
@@ -45,9 +48,10 @@
|
|
|
45
48
|
"@opencode-ai/sdk": "^1.3.0"
|
|
46
49
|
},
|
|
47
50
|
"devDependencies": {
|
|
51
|
+
"@biomejs/biome": "^2.4.8",
|
|
48
52
|
"@opencode-ai/plugin": "^1.3.0",
|
|
49
53
|
"@opencode-ai/sdk": "^1.3.0",
|
|
50
|
-
"bun-types": "^1.3.
|
|
51
|
-
"typescript": "^
|
|
54
|
+
"bun-types": "^1.3.11",
|
|
55
|
+
"typescript": "^6.0.2"
|
|
52
56
|
}
|
|
53
57
|
}
|