@greppleai/grip 0.1.6 → 0.1.7
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/CHANGELOG.md +19 -0
- package/README.md +1 -1
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +2 -0
- package/dist/config.js.map +1 -1
- package/dist/core/agent-session.d.ts +11 -1
- package/dist/core/agent-session.d.ts.map +1 -1
- package/dist/core/agent-session.js +172 -2
- package/dist/core/agent-session.js.map +1 -1
- package/dist/core/compaction/compaction.d.ts.map +1 -1
- package/dist/core/compaction/compaction.js +9 -2
- package/dist/core/compaction/compaction.js.map +1 -1
- package/dist/core/extensions/runner.d.ts +3 -0
- package/dist/core/extensions/runner.d.ts.map +1 -1
- package/dist/core/extensions/runner.js +22 -0
- package/dist/core/extensions/runner.js.map +1 -1
- package/dist/core/extensions/types.d.ts +21 -1
- package/dist/core/extensions/types.d.ts.map +1 -1
- package/dist/core/extensions/types.js.map +1 -1
- package/dist/core/instruction-resource-loader.d.ts +1 -0
- package/dist/core/instruction-resource-loader.d.ts.map +1 -1
- package/dist/core/instruction-resource-loader.js +2 -1
- package/dist/core/instruction-resource-loader.js.map +1 -1
- package/dist/core/messages.d.ts.map +1 -1
- package/dist/core/messages.js +30 -1
- package/dist/core/messages.js.map +1 -1
- package/dist/core/skills.d.ts.map +1 -1
- package/dist/core/skills.js +3 -2
- package/dist/core/skills.js.map +1 -1
- package/dist/core/system-prompt.d.ts +1 -1
- package/dist/core/system-prompt.d.ts.map +1 -1
- package/dist/core/system-prompt.js +3 -2
- package/dist/core/system-prompt.js.map +1 -1
- package/dist/core/tools/bash.d.ts +1 -0
- package/dist/core/tools/bash.d.ts.map +1 -1
- package/dist/core/tools/bash.js +26 -23
- package/dist/core/tools/bash.js.map +1 -1
- package/dist/core/tools/operations.d.ts +6 -0
- package/dist/core/tools/operations.d.ts.map +1 -1
- package/dist/core/tools/operations.js +28 -4
- package/dist/core/tools/operations.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/main.d.ts.map +1 -1
- package/dist/main.js +8 -3
- package/dist/main.js.map +1 -1
- package/dist/modes/interactive/components/footer.d.ts.map +1 -1
- package/dist/modes/interactive/components/footer.js +7 -1
- package/dist/modes/interactive/components/footer.js.map +1 -1
- package/dist/modes/interactive/interactive-mode.d.ts +0 -1
- package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode.js +25 -23
- package/dist/modes/interactive/interactive-mode.js.map +1 -1
- package/dist/package-manager-cli.d.ts.map +1 -1
- package/dist/package-manager-cli.js +33 -2
- package/dist/package-manager-cli.js.map +1 -1
- package/dist/utils/binary-self-update.d.ts +25 -0
- package/dist/utils/binary-self-update.d.ts.map +1 -0
- package/dist/utils/binary-self-update.js +159 -0
- package/dist/utils/binary-self-update.js.map +1 -0
- package/dist/utils/directory-completions.d.ts +8 -0
- package/dist/utils/directory-completions.d.ts.map +1 -1
- package/dist/utils/directory-completions.js +42 -1
- package/dist/utils/directory-completions.js.map +1 -1
- package/docs/extensions.md +31 -1
- package/docs/sandbox.md +2 -2
- package/docs/sessions.md +1 -1
- package/docs/skills.md +4 -4
- package/docs/usage.md +1 -1
- package/examples/extensions/custom-provider-anthropic/package.json +1 -1
- package/examples/extensions/custom-provider-gitlab-duo/package.json +1 -1
- package/examples/extensions/sandbox/package.json +1 -1
- package/examples/extensions/with-deps/package.json +1 -1
- package/npm-shrinkwrap.json +12 -12
- package/package.json +4 -4
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runner.js","sourceRoot":"","sources":["../../../src/core/extensions/runner.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Extension runner - executes extensions and manages their lifecycle.\n */\n\nimport type { AgentMessage } from \"@greppleai/grip-agent-core\";\nimport type { ImageContent, Model, ProviderHeaders } from \"@greppleai/grip-ai\";\nimport type { KeyId } from \"@greppleai/grip-tui\";\nimport { type Theme, theme } from \"../../modes/interactive/theme/theme.ts\";\nimport { executeBashWithOperations } from \"../bash-executor.ts\";\nimport type { ResourceDiagnostic } from \"../diagnostics.ts\";\nimport type { KeybindingsConfig } from \"../keybindings.ts\";\nimport type { ModelRegistry } from \"../model-registry.ts\";\nimport type { Session } from \"../session/session.ts\";\nimport type { BuildSystemPromptOptions } from \"../system-prompt.ts\";\nimport type {\n\tBeforeAgentStartEvent,\n\tBeforeAgentStartEventResult,\n\tBeforeProviderHeadersEvent,\n\tBeforeProviderRequestEvent,\n\tCompactOptions,\n\tContextEvent,\n\tContextEventResult,\n\tContextUsage,\n\tExtension,\n\tExtensionActions,\n\tExtensionCommandContext,\n\tExtensionCommandContextActions,\n\tExtensionContext,\n\tExtensionContextActions,\n\tExtensionError,\n\tExtensionEvent,\n\tExtensionFlag,\n\tExtensionForkOptions,\n\tExtensionNavigateTreeOptions,\n\tExtensionNewSessionOptions,\n\tExtensionRuntime,\n\tExtensionSessionActionResult,\n\tExtensionShortcut,\n\tExtensionSwitchSessionOptions,\n\tExtensionUIContext,\n\tInputEvent,\n\tInputEventResult,\n\tInputSource,\n\tMarkdownTransformer,\n\tMessageEndEvent,\n\tMessageEndEventResult,\n\tMessageRenderer,\n\tProviderConfig,\n\tRegisteredCommand,\n\tRegisteredTool,\n\tResolvedCommand,\n\tResourcesDiscoverEvent,\n\tResourcesDiscoverReason,\n\tResourcesDiscoverResult,\n\tSessionBeforeCompactResult,\n\tSessionBeforeForkResult,\n\tSessionBeforeSwitchResult,\n\tSessionBeforeTreeResult,\n\tSessionShutdownEvent,\n\tStreamingBehavior,\n\tToolCallEvent,\n\tToolCallEventResult,\n\tToolDefinition,\n\tToolResultEvent,\n\tToolResultEventResult,\n\tUserBashEvent,\n\tUserBashEventResult,\n} from \"./types.ts\";\n\n// Extension shortcuts compete with canonical keybinding ids from keybindings.json.\n// Only editor-global shortcuts are reserved here. Picker-specific bindings are not.\nconst RESERVED_KEYBINDINGS_FOR_EXTENSION_CONFLICTS = new Set([\n\t\"app.interrupt\",\n\t\"app.clear\",\n\t\"app.exit\",\n\t\"app.suspend\",\n\t\"app.thinking.cycle\",\n\t\"app.model.cycleForward\",\n\t\"app.model.cycleBackward\",\n\t\"app.model.select\",\n\t\"app.tools.expand\",\n\t\"app.thinking.toggle\",\n\t\"app.editor.external\",\n\t\"app.message.copy\",\n\t\"app.message.followUp\",\n\t\"tui.input.submit\",\n\t\"tui.select.confirm\",\n\t\"tui.select.cancel\",\n\t\"tui.input.copy\",\n\t\"tui.editor.deleteToLineEnd\",\n]);\n\ntype BuiltInKeyBindings = Partial<Record<KeyId, { keybinding: string; restrictOverride: boolean }>>;\n\nconst buildBuiltinKeybindings = (resolvedKeybindings: KeybindingsConfig): BuiltInKeyBindings => {\n\tconst builtinKeybindings = {} as BuiltInKeyBindings;\n\tfor (const [keybinding, keys] of Object.entries(resolvedKeybindings)) {\n\t\tif (keys === undefined) continue;\n\t\tconst keyList = Array.isArray(keys) ? keys : [keys];\n\t\tconst restrictOverride = RESERVED_KEYBINDINGS_FOR_EXTENSION_CONFLICTS.has(keybinding);\n\t\tfor (const key of keyList) {\n\t\t\tconst normalizedKey = key.toLowerCase() as KeyId;\n\t\t\t// If multiple actions bind the same key, the reserved action wins so extensions\n\t\t\t// remain blocked by reserved shortcuts regardless of iteration order.\n\t\t\tconst existing = builtinKeybindings[normalizedKey];\n\t\t\tif (existing?.restrictOverride && !restrictOverride) continue;\n\t\t\tbuiltinKeybindings[normalizedKey] = {\n\t\t\t\tkeybinding,\n\t\t\t\trestrictOverride,\n\t\t\t};\n\t\t}\n\t}\n\treturn builtinKeybindings;\n};\n\ninterface MessageEndExtensionResult {\n\tmessage: AgentMessage;\n\tmodified: boolean;\n}\n\n/** Combined result from all before_agent_start handlers */\ninterface BeforeAgentStartCombinedResult {\n\tmessages?: NonNullable<BeforeAgentStartEventResult[\"message\"]>[];\n\tsystemPrompt?: string;\n}\n\n// grip-ignore noNearIdenticalDataStructures: Mutable extension dispatch state tracks optional in-flight attachments, while ProcessedFiles is the completed CLI file-loading result.\ninterface InputDispatchState {\n\ttext: string;\n\timages: ImageContent[] | undefined;\n}\n\ninterface BeforeAgentStartDispatchState {\n\tcurrentSystemPrompt: string;\n\tmessages: NonNullable<BeforeAgentStartEventResult[\"message\"]>[];\n\tsystemPromptModified: boolean;\n}\n\ninterface ProviderRegistrationActions {\n\tregisterProvider?(name: string, config: ProviderConfig): void;\n\tunregisterProvider?(name: string): void;\n}\n\ntype ExtensionResourcePath = {\n\tpath: string;\n\textensionPath: string;\n};\n\ninterface AggregatedResourcesDiscoverResult {\n\tskillPaths: ExtensionResourcePath[];\n\trulePaths: ExtensionResourcePath[];\n\tpromptPaths: ExtensionResourcePath[];\n\tthemePaths: ExtensionResourcePath[];\n}\n\nasync function callContextHandlerAbortable<T>(fn: () => Promise<T> | T, signal: AbortSignal): Promise<T> {\n\tif (signal.aborted) {\n\t\tthrow new Error(\"Agent run aborted\");\n\t}\n\n\tlet cleanup = () => {};\n\tconst abortPromise = new Promise<never>((_resolve, reject) => {\n\t\tconst onAbort = () => reject(new Error(\"Agent run aborted\"));\n\t\tsignal.addEventListener(\"abort\", onAbort, { once: true });\n\t\tcleanup = () => signal.removeEventListener(\"abort\", onAbort);\n\t});\n\n\ttry {\n\t\treturn await Promise.race([Promise.resolve().then(fn), abortPromise]);\n\t} finally {\n\t\tcleanup();\n\t}\n}\n\n/**\n * Events handled by the generic emit() method.\n * Events with dedicated emitXxx() methods are excluded for stronger type safety.\n */\ntype RunnerEmitEvent = Exclude<\n\tExtensionEvent,\n\t| ToolCallEvent\n\t| ToolResultEvent\n\t| UserBashEvent\n\t| ContextEvent\n\t| BeforeProviderRequestEvent\n\t| BeforeProviderHeadersEvent\n\t| BeforeAgentStartEvent\n\t| MessageEndEvent\n\t| ResourcesDiscoverEvent\n\t| InputEvent\n>;\n\ntype SessionBeforeEvent = Extract<\n\tRunnerEmitEvent,\n\t{ type: \"session_before_switch\" | \"session_before_fork\" | \"session_before_compact\" | \"session_before_tree\" }\n>;\n\ntype SessionBeforeEventResult =\n\t| SessionBeforeSwitchResult\n\t| SessionBeforeForkResult\n\t| SessionBeforeCompactResult\n\t| SessionBeforeTreeResult;\n\ntype RunnerEmitResult<TEvent extends RunnerEmitEvent> = TEvent extends { type: \"session_before_switch\" }\n\t? SessionBeforeSwitchResult | undefined\n\t: TEvent extends { type: \"session_before_fork\" }\n\t\t? SessionBeforeForkResult | undefined\n\t\t: TEvent extends { type: \"session_before_compact\" }\n\t\t\t? SessionBeforeCompactResult | undefined\n\t\t\t: TEvent extends { type: \"session_before_tree\" }\n\t\t\t\t? SessionBeforeTreeResult | undefined\n\t\t\t\t: undefined;\n\nexport type ExtensionErrorListener = (error: ExtensionError) => void;\n\nexport type NewSessionHandler = (options?: ExtensionNewSessionOptions) => Promise<ExtensionSessionActionResult>;\n\nexport type ForkHandler = (entryId: string, options?: ExtensionForkOptions) => Promise<ExtensionSessionActionResult>;\n\nexport type NavigateTreeHandler = (\n\ttargetId: string,\n\toptions?: ExtensionNavigateTreeOptions,\n) => Promise<ExtensionSessionActionResult>;\n\nexport type SwitchSessionHandler = (\n\tsessionPath: string,\n\toptions?: ExtensionSwitchSessionOptions,\n) => Promise<ExtensionSessionActionResult>;\n\nexport type ReloadHandler = () => Promise<void>;\n\nexport type ShutdownHandler = () => void;\n\n/**\n * Helper function to emit session_shutdown event to extensions.\n * Returns true if the event was emitted, false if there were no handlers.\n */\nexport async function emitSessionShutdownEvent(\n\textensionRunner: ExtensionRunner,\n\tevent: SessionShutdownEvent,\n): Promise<boolean> {\n\tif (extensionRunner.hasHandlers(\"session_shutdown\")) {\n\t\tawait extensionRunner.emit(event);\n\t\treturn true;\n\t}\n\treturn false;\n}\n\nconst noOpUIContext: ExtensionUIContext = {\n\tselect: async () => undefined,\n\tconfirm: async () => false,\n\tinput: async () => undefined,\n\tnotify: () => {},\n\tonTerminalInput: () => () => {},\n\tsetStatus: () => {},\n\tsetWorkingMessage: () => {},\n\tsetWorkingVisible: () => {},\n\tsetWorkingIndicator: () => {},\n\tsetHiddenThinkingLabel: () => {},\n\tsetWidget: () => {},\n\tsetFooter: () => {},\n\tsetHeader: () => {},\n\tsetTitle: () => {},\n\tcustom: async () => undefined as never,\n\tpasteToEditor: () => {},\n\tsetEditorText: () => {},\n\tgetEditorText: () => \"\",\n\teditor: async () => undefined,\n\taddAutocompleteProvider: () => {},\n\tsetEditorComponent: () => {},\n\tgetEditorComponent: () => undefined,\n\tget theme() {\n\t\treturn theme;\n\t},\n\tgetAllThemes: () => [],\n\tgetTheme: () => undefined,\n\tsetTheme: (_theme: string | Theme) => ({ success: false, error: \"UI not available\" }),\n\tgetToolsExpanded: () => false,\n\tsetToolsExpanded: () => {},\n};\n\nexport class ExtensionRunner {\n\tprivate extensions: Extension[];\n\tprivate runtime: ExtensionRuntime;\n\tprivate uiContext: ExtensionUIContext;\n\tprivate cwd: string;\n\tprivate session: Session;\n\tprivate modelRegistry: ModelRegistry;\n\tprivate errorListeners: Set<ExtensionErrorListener> = new Set();\n\tprivate getModel: () => Model<any> | undefined = () => undefined;\n\tprivate isIdleFn: () => boolean = () => true;\n\tprivate getSignalFn: () => AbortSignal | undefined = () => undefined;\n\tprivate waitForIdleFn: () => Promise<void> = async () => {};\n\tprivate abortFn: () => void = () => {};\n\tprivate hasPendingMessagesFn: () => boolean = () => false;\n\tprivate getContextUsageFn: () => ContextUsage | undefined = () => undefined;\n\tprivate compactFn: (options?: CompactOptions) => void = () => {};\n\tprivate getSystemPromptFn: () => string = () => \"\";\n\tprivate getToolOperationsFn: ExtensionContextActions[\"getToolOperations\"];\n\tprivate getToolBackendInfoFn: ExtensionContextActions[\"getToolBackendInfo\"];\n\tprivate getLspStatusFn: ExtensionContextActions[\"getLspStatus\"];\n\tprivate configureLspFn: ExtensionContextActions[\"configureLsp\"];\n\tprivate execToolBackendFn: ExtensionContextActions[\"execToolBackend\"];\n\tprivate newSessionHandler: NewSessionHandler = async () => ({ cancelled: false });\n\tprivate forkHandler: ForkHandler = async () => ({ cancelled: false });\n\tprivate navigateTreeHandler: NavigateTreeHandler = async () => ({ cancelled: false });\n\tprivate switchSessionHandler: SwitchSessionHandler = async () => ({ cancelled: false });\n\tprivate reloadHandler: ReloadHandler = async () => {};\n\tprivate shutdownHandler: ShutdownHandler = () => {};\n\tprivate shortcutDiagnostics: ResourceDiagnostic[] = [];\n\tprivate commandDiagnostics: ResourceDiagnostic[] = [];\n\tprivate staleMessage: string | undefined;\n\n\tconstructor(\n\t\textensions: Extension[],\n\t\truntime: ExtensionRuntime,\n\t\tcwd: string,\n\t\tsession: Session,\n\t\tmodelRegistry: ModelRegistry,\n\t) {\n\t\tthis.extensions = extensions;\n\t\tthis.runtime = runtime;\n\t\tthis.uiContext = noOpUIContext;\n\t\tthis.cwd = cwd;\n\t\tthis.session = session;\n\t\tthis.modelRegistry = modelRegistry;\n\t\tthis.getToolOperationsFn = () => {\n\t\t\tthrow new Error(\"Extension tool backend is not bound yet\");\n\t\t};\n\t\tthis.getToolBackendInfoFn = () =>\n\t\t\tthis.getToolOperationsFn().getBackendInfo?.() ?? { type: \"local\", cwd: this.cwd };\n\t\tthis.getLspStatusFn = () => ({\n\t\t\towner: \"standalone\",\n\t\t\tenabled: false,\n\t\t\tconfiguration: { enabled: false, servers: [] },\n\t\t\tservers: [],\n\t\t});\n\t\tthis.configureLspFn = async () => {\n\t\t\tthrow new Error(\"Extension LSP configuration is not bound yet\");\n\t\t};\n\t\tthis.execToolBackendFn = async (command, options) => {\n\t\t\tconst operations = this.getToolOperationsFn();\n\t\t\treturn executeBashWithOperations(command, options?.cwd ?? operations.cwd, operations, options);\n\t\t};\n\t}\n\n\tbindCore(\n\t\tactions: ExtensionActions,\n\t\tcontextActions: ExtensionContextActions,\n\t\tproviderActions?: ProviderRegistrationActions,\n\t): void {\n\t\t// Copy actions into the shared runtime (all extension APIs reference this)\n\t\tthis.runtime.sendMessage = actions.sendMessage;\n\t\tthis.runtime.sendUserMessage = actions.sendUserMessage;\n\t\tthis.runtime.appendEntry = actions.appendEntry;\n\t\tthis.runtime.setSessionName = actions.setSessionName;\n\t\tthis.runtime.getSessionName = actions.getSessionName;\n\t\tthis.runtime.setLabel = actions.setLabel;\n\t\tthis.runtime.getActiveTools = actions.getActiveTools;\n\t\tthis.runtime.getAllTools = actions.getAllTools;\n\t\tthis.runtime.setActiveTools = actions.setActiveTools;\n\t\tthis.runtime.refreshTools = actions.refreshTools;\n\t\tthis.runtime.getCommands = actions.getCommands;\n\t\tthis.runtime.setModel = actions.setModel;\n\t\tthis.runtime.getThinkingLevel = actions.getThinkingLevel;\n\t\tthis.runtime.setThinkingLevel = actions.setThinkingLevel;\n\n\t\t// Context actions (required)\n\t\tthis.getModel = contextActions.getModel;\n\t\tthis.isIdleFn = contextActions.isIdle;\n\t\tthis.getSignalFn = contextActions.getSignal;\n\t\tthis.abortFn = contextActions.abort;\n\t\tthis.hasPendingMessagesFn = contextActions.hasPendingMessages;\n\t\tthis.shutdownHandler = contextActions.shutdown;\n\t\tthis.getContextUsageFn = contextActions.getContextUsage;\n\t\tthis.compactFn = contextActions.compact;\n\t\tthis.getSystemPromptFn = contextActions.getSystemPrompt;\n\t\tthis.getToolOperationsFn = contextActions.getToolOperations;\n\t\tthis.getToolBackendInfoFn = contextActions.getToolBackendInfo;\n\t\tthis.getLspStatusFn = contextActions.getLspStatus;\n\t\tthis.configureLspFn = contextActions.configureLsp;\n\t\tthis.execToolBackendFn = contextActions.execToolBackend;\n\n\t\t// Flush provider registrations queued during extension loading\n\t\tfor (const { name, config, extensionPath } of this.runtime.pendingProviderRegistrations) {\n\t\t\ttry {\n\t\t\t\tif (providerActions?.registerProvider) {\n\t\t\t\t\tproviderActions.registerProvider(name, config);\n\t\t\t\t} else {\n\t\t\t\t\tthis.modelRegistry.registerProvider(name, config);\n\t\t\t\t}\n\t\t\t} catch (err) {\n\t\t\t\tthis.emitError({\n\t\t\t\t\textensionPath,\n\t\t\t\t\tevent: \"register_provider\",\n\t\t\t\t\terror: err instanceof Error ? err.message : String(err),\n\t\t\t\t\tstack: err instanceof Error ? err.stack : undefined,\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t\tthis.runtime.pendingProviderRegistrations = [];\n\n\t\t// From this point on, provider registration/unregistration takes effect immediately\n\t\t// without requiring a /reload.\n\t\tthis.runtime.registerProvider = (name, config) => {\n\t\t\tif (providerActions?.registerProvider) {\n\t\t\t\tproviderActions.registerProvider(name, config);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis.modelRegistry.registerProvider(name, config);\n\t\t};\n\t\tthis.runtime.unregisterProvider = (name) => {\n\t\t\tif (providerActions?.unregisterProvider) {\n\t\t\t\tproviderActions.unregisterProvider(name);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis.modelRegistry.unregisterProvider(name);\n\t\t};\n\t}\n\n\tbindCommandContext(actions?: ExtensionCommandContextActions): void {\n\t\tif (actions) {\n\t\t\tthis.waitForIdleFn = actions.waitForIdle;\n\t\t\tthis.newSessionHandler = actions.newSession;\n\t\t\tthis.forkHandler = actions.fork;\n\t\t\tthis.navigateTreeHandler = actions.navigateTree;\n\t\t\tthis.switchSessionHandler = actions.switchSession;\n\t\t\tthis.reloadHandler = actions.reload;\n\t\t\treturn;\n\t\t}\n\n\t\tthis.waitForIdleFn = async () => {};\n\t\tthis.newSessionHandler = async () => ({ cancelled: false });\n\t\tthis.forkHandler = async () => ({ cancelled: false });\n\t\tthis.navigateTreeHandler = async () => ({ cancelled: false });\n\t\tthis.switchSessionHandler = async () => ({ cancelled: false });\n\t\tthis.reloadHandler = async () => {};\n\t}\n\n\tsetUIContext(uiContext?: ExtensionUIContext): void {\n\t\tthis.uiContext = uiContext ?? noOpUIContext;\n\t}\n\n\tgetUIContext(): ExtensionUIContext {\n\t\treturn this.uiContext;\n\t}\n\n\thasUI(): boolean {\n\t\treturn this.uiContext !== noOpUIContext;\n\t}\n\n\tgetExtensionPaths(): string[] {\n\t\treturn this.extensions.map((e) => e.path);\n\t}\n\n\t/** Get all registered tools from all extensions (first registration per name wins). */\n\tgetAllRegisteredTools(): RegisteredTool[] {\n\t\tconst toolsByName = new Map<string, RegisteredTool>();\n\t\tfor (const ext of this.extensions) {\n\t\t\tfor (const tool of ext.tools.values()) {\n\t\t\t\tif (!toolsByName.has(tool.definition.name)) {\n\t\t\t\t\ttoolsByName.set(tool.definition.name, tool);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn Array.from(toolsByName.values());\n\t}\n\n\tgetAvailableRegisteredTools(): RegisteredTool[] {\n\t\treturn this.getAllRegisteredTools().filter((tool) => tool.lazy === true);\n\t}\n\n\tloadRegisteredTool(toolName: string): boolean {\n\t\tconst tool = this.getFirstRegisteredTool(toolName);\n\t\tif (tool?.lazy !== true) return false;\n\t\ttool.loaded = true;\n\t\treturn true;\n\t}\n\n\tunloadRegisteredTool(toolName: string): boolean {\n\t\tconst tool = this.getFirstRegisteredTool(toolName);\n\t\tif (tool?.lazy !== true) return false;\n\t\ttool.loaded = false;\n\t\treturn true;\n\t}\n\n\tprivate getFirstRegisteredTool(toolName: string): RegisteredTool | undefined {\n\t\tfor (const ext of this.extensions) {\n\t\t\tconst tool = ext.tools.get(toolName);\n\t\t\tif (tool) return tool;\n\t\t}\n\t\treturn undefined;\n\t}\n\n\t/** Get a tool definition by name. Returns undefined if not found. */\n\tgetToolDefinition(toolName: string): ToolDefinition | undefined {\n\t\tfor (const ext of this.extensions) {\n\t\t\tconst tool = ext.tools.get(toolName);\n\t\t\tif (tool) {\n\t\t\t\treturn tool.definition;\n\t\t\t}\n\t\t}\n\t\treturn undefined;\n\t}\n\n\tgetFlags(): Map<string, ExtensionFlag> {\n\t\tconst allFlags = new Map<string, ExtensionFlag>();\n\t\tfor (const ext of this.extensions) {\n\t\t\tfor (const [name, flag] of ext.flags) {\n\t\t\t\tif (!allFlags.has(name)) {\n\t\t\t\t\tallFlags.set(name, flag);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn allFlags;\n\t}\n\n\tsetFlagValue(name: string, value: boolean | string): void {\n\t\tthis.runtime.flagValues.set(name, value);\n\t}\n\n\tgetFlagValues(): Map<string, boolean | string> {\n\t\treturn new Map(this.runtime.flagValues);\n\t}\n\n\tgetShortcuts(resolvedKeybindings: KeybindingsConfig): Map<KeyId, ExtensionShortcut> {\n\t\tthis.shortcutDiagnostics = [];\n\t\tconst builtinKeybindings = buildBuiltinKeybindings(resolvedKeybindings);\n\t\tconst extensionShortcuts = new Map<KeyId, ExtensionShortcut>();\n\n\t\tconst addDiagnostic = (message: string, extensionPath: string) => {\n\t\t\tthis.shortcutDiagnostics.push({ type: \"warning\", message, path: extensionPath });\n\t\t\tif (!this.hasUI()) {\n\t\t\t\tconsole.warn(message);\n\t\t\t}\n\t\t};\n\n\t\tfor (const ext of this.extensions) {\n\t\t\tfor (const [key, shortcut] of ext.shortcuts) {\n\t\t\t\tconst normalizedKey = key.toLowerCase() as KeyId;\n\n\t\t\t\tconst builtInKeybinding = builtinKeybindings[normalizedKey];\n\t\t\t\tif (builtInKeybinding?.restrictOverride === true) {\n\t\t\t\t\taddDiagnostic(\n\t\t\t\t\t\t`Extension shortcut '${key}' from ${shortcut.extensionPath} conflicts with built-in shortcut. Skipping.`,\n\t\t\t\t\t\tshortcut.extensionPath,\n\t\t\t\t\t);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tif (builtInKeybinding?.restrictOverride === false) {\n\t\t\t\t\taddDiagnostic(\n\t\t\t\t\t\t`Extension shortcut conflict: '${key}' is built-in shortcut for ${builtInKeybinding.keybinding} and ${shortcut.extensionPath}. Using ${shortcut.extensionPath}.`,\n\t\t\t\t\t\tshortcut.extensionPath,\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tconst existingExtensionShortcut = extensionShortcuts.get(normalizedKey);\n\t\t\t\tif (existingExtensionShortcut) {\n\t\t\t\t\taddDiagnostic(\n\t\t\t\t\t\t`Extension shortcut conflict: '${key}' registered by both ${existingExtensionShortcut.extensionPath} and ${shortcut.extensionPath}. Using ${shortcut.extensionPath}.`,\n\t\t\t\t\t\tshortcut.extensionPath,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\textensionShortcuts.set(normalizedKey, shortcut);\n\t\t\t}\n\t\t}\n\t\treturn extensionShortcuts;\n\t}\n\n\tgetShortcutDiagnostics(): ResourceDiagnostic[] {\n\t\treturn this.shortcutDiagnostics;\n\t}\n\n\tinvalidate(\n\t\tmessage = \"This extension ctx is stale after session replacement or reload. Do not use a captured extension API or command ctx after ctx.newSession(), ctx.fork(), ctx.switchSession(), or ctx.reload(). For newSession, fork, and switchSession, move post-replacement work into withSession and use the ctx passed to withSession. For reload, do not use the old ctx after await ctx.reload().\",\n\t): void {\n\t\tif (!this.staleMessage) {\n\t\t\tthis.staleMessage = message;\n\t\t\tthis.runtime.invalidate(message);\n\t\t}\n\t}\n\n\tprivate assertActive(): void {\n\t\tif (this.staleMessage) {\n\t\t\tthrow new Error(this.staleMessage);\n\t\t}\n\t}\n\n\tonError(listener: ExtensionErrorListener): () => void {\n\t\tthis.errorListeners.add(listener);\n\t\treturn () => this.errorListeners.delete(listener);\n\t}\n\n\temitError(error: ExtensionError): void {\n\t\tfor (const listener of this.errorListeners) {\n\t\t\tlistener(error);\n\t\t}\n\t}\n\tprivate emitHandlerError(extensionPath: string, event: string, error: unknown): void {\n\t\tthis.emitError({\n\t\t\textensionPath,\n\t\t\tevent,\n\t\t\terror: error instanceof Error ? error.message : String(error),\n\t\t\tstack: error instanceof Error ? error.stack : undefined,\n\t\t});\n\t}\n\n\thasHandlers(eventType: string): boolean {\n\t\tfor (const ext of this.extensions) {\n\t\t\tconst handlers = ext.handlers.get(eventType);\n\t\t\tif (handlers && handlers.length > 0) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t}\n\n\tgetMessageRenderer(customType: string): MessageRenderer | undefined {\n\t\tfor (const ext of this.extensions) {\n\t\t\tconst renderer = ext.messageRenderers.get(customType);\n\t\t\tif (renderer) {\n\t\t\t\treturn renderer;\n\t\t\t}\n\t\t}\n\t\treturn undefined;\n\t}\n\n\tgetMarkdownTransformers(): MarkdownTransformer[] {\n\t\treturn this.extensions.flatMap((extension) =>\n\t\t\textension.markdownTransformer ? [extension.markdownTransformer] : [],\n\t\t);\n\t}\n\n\tprivate resolveRegisteredCommands(): ResolvedCommand[] {\n\t\tconst commands: RegisteredCommand[] = [];\n\t\tconst counts = new Map<string, number>();\n\n\t\tfor (const ext of this.extensions) {\n\t\t\tfor (const command of ext.commands.values()) {\n\t\t\t\tcommands.push(command);\n\t\t\t\tcounts.set(command.name, (counts.get(command.name) ?? 0) + 1);\n\t\t\t}\n\t\t}\n\n\t\tconst seen = new Map<string, number>();\n\t\tconst takenInvocationNames = new Set<string>();\n\n\t\treturn commands.map((command) => {\n\t\t\tconst occurrence = (seen.get(command.name) ?? 0) + 1;\n\t\t\tseen.set(command.name, occurrence);\n\n\t\t\tlet invocationName = (counts.get(command.name) ?? 0) > 1 ? `${command.name}:${occurrence}` : command.name;\n\n\t\t\tif (takenInvocationNames.has(invocationName)) {\n\t\t\t\tlet suffix = occurrence;\n\t\t\t\tdo {\n\t\t\t\t\tsuffix++;\n\t\t\t\t\tinvocationName = `${command.name}:${suffix}`;\n\t\t\t\t} while (takenInvocationNames.has(invocationName));\n\t\t\t}\n\n\t\t\ttakenInvocationNames.add(invocationName);\n\t\t\treturn {\n\t\t\t\t...command,\n\t\t\t\tinvocationName,\n\t\t\t};\n\t\t});\n\t}\n\n\tgetRegisteredCommands(): ResolvedCommand[] {\n\t\tthis.commandDiagnostics = [];\n\t\treturn this.resolveRegisteredCommands();\n\t}\n\n\tgetCommandDiagnostics(): ResourceDiagnostic[] {\n\t\treturn this.commandDiagnostics;\n\t}\n\n\tgetCommand(name: string): ResolvedCommand | undefined {\n\t\treturn this.resolveRegisteredCommands().find((command) => command.invocationName === name);\n\t}\n\n\t/**\n\t * Request a graceful shutdown. Called by extension tools and event handlers.\n\t * The actual shutdown behavior is provided by the mode via bindExtensions().\n\t */\n\tshutdown(): void {\n\t\tthis.shutdownHandler();\n\t}\n\n\t/**\n\t * Create an ExtensionContext for use in event handlers and tool execution.\n\t * Context values are resolved at call time, so changes via bindCore/bindUI are reflected.\n\t */\n\tcreateContext(): ExtensionContext {\n\t\tconst runner = this;\n\t\tconst getModel = this.getModel;\n\t\treturn {\n\t\t\tget ui() {\n\t\t\t\trunner.assertActive();\n\t\t\t\treturn runner.uiContext;\n\t\t\t},\n\t\t\tget hasUI() {\n\t\t\t\trunner.assertActive();\n\t\t\t\treturn runner.hasUI();\n\t\t\t},\n\t\t\tget cwd() {\n\t\t\t\trunner.assertActive();\n\t\t\t\treturn runner.cwd;\n\t\t\t},\n\t\t\tget toolOperations() {\n\t\t\t\trunner.assertActive();\n\t\t\t\treturn runner.getToolOperationsFn();\n\t\t\t},\n\t\t\tgetToolBackendInfo: () => {\n\t\t\t\trunner.assertActive();\n\t\t\t\treturn runner.getToolBackendInfoFn();\n\t\t\t},\n\t\t\tgetLspStatus: () => {\n\t\t\t\trunner.assertActive();\n\t\t\t\treturn runner.getLspStatusFn();\n\t\t\t},\n\t\t\tconfigureLsp: (configuration) => {\n\t\t\t\trunner.assertActive();\n\t\t\t\treturn runner.configureLspFn(configuration);\n\t\t\t},\n\t\t\texecToolBackend: (command, options) => {\n\t\t\t\trunner.assertActive();\n\t\t\t\treturn runner.execToolBackendFn(command, options);\n\t\t\t},\n\t\t\tget session() {\n\t\t\t\trunner.assertActive();\n\t\t\t\treturn runner.session;\n\t\t\t},\n\t\t\tget modelRegistry() {\n\t\t\t\trunner.assertActive();\n\t\t\t\treturn runner.modelRegistry;\n\t\t\t},\n\t\t\tget model() {\n\t\t\t\trunner.assertActive();\n\t\t\t\treturn getModel();\n\t\t\t},\n\t\t\tget thinkingLevel() {\n\t\t\t\trunner.assertActive();\n\t\t\t\treturn runner.runtime.getThinkingLevel();\n\t\t\t},\n\t\t\tisIdle: () => {\n\t\t\t\trunner.assertActive();\n\t\t\t\treturn runner.isIdleFn();\n\t\t\t},\n\t\t\tget signal() {\n\t\t\t\trunner.assertActive();\n\t\t\t\treturn runner.getSignalFn();\n\t\t\t},\n\t\t\tabort: () => {\n\t\t\t\trunner.assertActive();\n\t\t\t\trunner.abortFn();\n\t\t\t},\n\t\t\thasPendingMessages: () => {\n\t\t\t\trunner.assertActive();\n\t\t\t\treturn runner.hasPendingMessagesFn();\n\t\t\t},\n\t\t\tshutdown: () => {\n\t\t\t\trunner.assertActive();\n\t\t\t\trunner.shutdownHandler();\n\t\t\t},\n\t\t\tgetContextUsage: () => {\n\t\t\t\trunner.assertActive();\n\t\t\t\treturn runner.getContextUsageFn();\n\t\t\t},\n\t\t\tcompact: (options) => {\n\t\t\t\trunner.assertActive();\n\t\t\t\trunner.compactFn(options);\n\t\t\t},\n\t\t\tgetSystemPrompt: () => {\n\t\t\t\trunner.assertActive();\n\t\t\t\treturn runner.getSystemPromptFn();\n\t\t\t},\n\t\t};\n\t}\n\n\tcreateCommandContext(): ExtensionCommandContext {\n\t\t// Use property descriptors instead of object spread so the guarded getters from\n\t\t// createContext() stay lazy. A spread would eagerly read them once and freeze the\n\t\t// old values into the returned object, bypassing stale-instance checks.\n\t\tconst context = Object.defineProperties(\n\t\t\t{},\n\t\t\tObject.getOwnPropertyDescriptors(this.createContext()),\n\t\t) as ExtensionCommandContext;\n\t\tcontext.waitForIdle = () => {\n\t\t\tthis.assertActive();\n\t\t\treturn this.waitForIdleFn();\n\t\t};\n\t\tcontext.newSession = (options) => {\n\t\t\tthis.assertActive();\n\t\t\treturn this.newSessionHandler(options);\n\t\t};\n\t\tcontext.fork = (entryId, options) => {\n\t\t\tthis.assertActive();\n\t\t\treturn this.forkHandler(entryId, options);\n\t\t};\n\t\tcontext.navigateTree = (targetId, options) => {\n\t\t\tthis.assertActive();\n\t\t\treturn this.navigateTreeHandler(targetId, options);\n\t\t};\n\t\tcontext.switchSession = (sessionPath, options) => {\n\t\t\tthis.assertActive();\n\t\t\treturn this.switchSessionHandler(sessionPath, options);\n\t\t};\n\t\tcontext.reload = () => {\n\t\t\tthis.assertActive();\n\t\t\treturn this.reloadHandler();\n\t\t};\n\t\treturn context;\n\t}\n\n\tprivate isSessionBeforeEvent(event: RunnerEmitEvent): event is SessionBeforeEvent {\n\t\treturn (\n\t\t\tevent.type === \"session_before_switch\" ||\n\t\t\tevent.type === \"session_before_fork\" ||\n\t\t\tevent.type === \"session_before_compact\" ||\n\t\t\tevent.type === \"session_before_tree\"\n\t\t);\n\t}\n\tprivate async emitGenericEventToExtension(\n\t\textension: Extension,\n\t\tevent: RunnerEmitEvent,\n\t\tcontext: ExtensionContext,\n\t): Promise<SessionBeforeEventResult | undefined> {\n\t\tconst handlers = extension.handlers.get(event.type);\n\t\tif (!handlers || handlers.length === 0) return undefined;\n\t\tlet result: SessionBeforeEventResult | undefined;\n\t\tfor (const handler of handlers) {\n\t\t\ttry {\n\t\t\t\tconst handlerResult = await handler(event, context);\n\t\t\t\tif (!this.isSessionBeforeEvent(event) || !handlerResult) continue;\n\t\t\t\tresult = handlerResult as SessionBeforeEventResult;\n\t\t\t\tif (result.cancel) return result;\n\t\t\t} catch (error) {\n\t\t\t\tthis.emitHandlerError(extension.path, event.type, error);\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t}\n\n\tasync emit<TEvent extends RunnerEmitEvent>(event: TEvent): Promise<RunnerEmitResult<TEvent>> {\n\t\tconst context = this.createContext();\n\t\tlet result: SessionBeforeEventResult | undefined;\n\t\tfor (const extension of this.extensions) {\n\t\t\tconst extensionResult = await this.emitGenericEventToExtension(extension, event, context);\n\t\t\tif (!extensionResult) continue;\n\t\t\tresult = extensionResult;\n\t\t\tif (result.cancel) return result as RunnerEmitResult<TEvent>;\n\t\t}\n\t\treturn result as RunnerEmitResult<TEvent>;\n\t}\n\n\tprivate async emitMessageEndToExtension(\n\t\textension: Extension,\n\t\tevent: MessageEndEvent,\n\t\tcontext: ExtensionContext,\n\t\tinitialMessage: AgentMessage,\n\t): Promise<MessageEndExtensionResult> {\n\t\tconst handlers = extension.handlers.get(\"message_end\");\n\t\tif (!handlers || handlers.length === 0) return { message: initialMessage, modified: false };\n\n\t\tlet message = initialMessage;\n\t\tlet modified = false;\n\t\tfor (const handler of handlers) {\n\t\t\ttry {\n\t\t\t\tconst currentEvent: MessageEndEvent = { ...event, message };\n\t\t\t\tconst handlerResult = (await handler(currentEvent, context)) as MessageEndEventResult | undefined;\n\t\t\t\tif (!handlerResult?.message) continue;\n\t\t\t\tif (handlerResult.message.role !== message.role) {\n\t\t\t\t\tthis.emitError({\n\t\t\t\t\t\textensionPath: extension.path,\n\t\t\t\t\t\tevent: \"message_end\",\n\t\t\t\t\t\terror: \"message_end handlers must return a message with the same role\",\n\t\t\t\t\t});\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tmessage = handlerResult.message;\n\t\t\t\tmodified = true;\n\t\t\t} catch (error) {\n\t\t\t\tthis.emitHandlerError(extension.path, \"message_end\", error);\n\t\t\t}\n\t\t}\n\t\treturn { message, modified };\n\t}\n\n\tasync emitMessageEnd(event: MessageEndEvent): Promise<AgentMessage | undefined> {\n\t\tconst context = this.createContext();\n\t\tlet currentMessage = event.message;\n\t\tlet modified = false;\n\n\t\tfor (const extension of this.extensions) {\n\t\t\tconst extensionResult = await this.emitMessageEndToExtension(extension, event, context, currentMessage);\n\t\t\tcurrentMessage = extensionResult.message;\n\t\t\tmodified = modified || extensionResult.modified;\n\t\t}\n\n\t\treturn modified ? currentMessage : undefined;\n\t}\n\n\tprivate applyToolResultUpdate(event: ToolResultEvent, result: ToolResultEventResult): boolean {\n\t\tlet modified = false;\n\t\tif (result.content !== undefined) {\n\t\t\tevent.content = result.content;\n\t\t\tmodified = true;\n\t\t}\n\t\tif (result.details !== undefined) {\n\t\t\tevent.details = result.details;\n\t\t\tmodified = true;\n\t\t}\n\t\tif (result.isError !== undefined) {\n\t\t\tevent.isError = result.isError;\n\t\t\tmodified = true;\n\t\t}\n\t\treturn modified;\n\t}\n\n\tprivate async emitToolResultToExtension(\n\t\textension: Extension,\n\t\tevent: ToolResultEvent,\n\t\tcontext: ExtensionContext,\n\t): Promise<boolean> {\n\t\tconst handlers = extension.handlers.get(\"tool_result\");\n\t\tif (!handlers || handlers.length === 0) return false;\n\t\tlet modified = false;\n\t\tfor (const handler of handlers) {\n\t\t\ttry {\n\t\t\t\tconst result = (await handler(event, context)) as ToolResultEventResult | undefined;\n\t\t\t\tif (!result) continue;\n\t\t\t\tif (this.applyToolResultUpdate(event, result)) modified = true;\n\t\t\t} catch (error) {\n\t\t\t\tthis.emitHandlerError(extension.path, \"tool_result\", error);\n\t\t\t}\n\t\t}\n\t\treturn modified;\n\t}\n\n\tasync emitToolResult(event: ToolResultEvent): Promise<ToolResultEventResult | undefined> {\n\t\tconst context = this.createContext();\n\t\tconst currentEvent: ToolResultEvent = { ...event };\n\t\tlet modified = false;\n\t\tfor (const extension of this.extensions) {\n\t\t\tconst extensionModified = await this.emitToolResultToExtension(extension, currentEvent, context);\n\t\t\tif (extensionModified) modified = true;\n\t\t}\n\t\tif (!modified) return undefined;\n\t\treturn {\n\t\t\tcontent: currentEvent.content,\n\t\t\tdetails: currentEvent.details,\n\t\t\tisError: currentEvent.isError,\n\t\t};\n\t}\n\n\tasync emitToolCall(event: ToolCallEvent): Promise<ToolCallEventResult | undefined> {\n\t\tconst ctx = this.createContext();\n\t\tlet result: ToolCallEventResult | undefined;\n\n\t\tfor (const ext of this.extensions) {\n\t\t\tconst handlers = ext.handlers.get(\"tool_call\");\n\t\t\tif (!handlers || handlers.length === 0) continue;\n\n\t\t\tfor (const handler of handlers) {\n\t\t\t\tconst handlerResult = await handler(event, ctx);\n\n\t\t\t\tif (handlerResult) {\n\t\t\t\t\tresult = handlerResult as ToolCallEventResult;\n\t\t\t\t\tif (result.block) {\n\t\t\t\t\t\treturn result;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn result;\n\t}\n\n\tprivate async emitUserBashToExtension(\n\t\textension: Extension,\n\t\tevent: UserBashEvent,\n\t\tcontext: ExtensionContext,\n\t): Promise<UserBashEventResult | undefined> {\n\t\tconst handlers = extension.handlers.get(\"user_bash\");\n\t\tif (!handlers || handlers.length === 0) return undefined;\n\t\tfor (const handler of handlers) {\n\t\t\ttry {\n\t\t\t\tconst result = await handler(event, context);\n\t\t\t\tif (result) return result as UserBashEventResult;\n\t\t\t} catch (error) {\n\t\t\t\tthis.emitHandlerError(extension.path, \"user_bash\", error);\n\t\t\t}\n\t\t}\n\t\treturn undefined;\n\t}\n\n\tasync emitUserBash(event: UserBashEvent): Promise<UserBashEventResult | undefined> {\n\t\tconst context = this.createContext();\n\t\tfor (const extension of this.extensions) {\n\t\t\tconst result = await this.emitUserBashToExtension(extension, event, context);\n\t\t\tif (result) return result;\n\t\t}\n\t\treturn undefined;\n\t}\n\n\tprivate async emitContextToExtension(\n\t\textension: Extension,\n\t\tmessages: AgentMessage[],\n\t\tcontext: ExtensionContext,\n\t): Promise<AgentMessage[]> {\n\t\tconst handlers = extension.handlers.get(\"context\");\n\t\tif (!handlers || handlers.length === 0) return messages;\n\t\tlet currentMessages = messages;\n\t\tfor (const handler of handlers) {\n\t\t\ttry {\n\t\t\t\tconst event: ContextEvent = { type: \"context\", messages: currentMessages };\n\t\t\t\tconst handlerResult = context.signal\n\t\t\t\t\t? await callContextHandlerAbortable(() => handler(event, context), context.signal)\n\t\t\t\t\t: await handler(event, context);\n\t\t\t\tconst result = handlerResult as ContextEventResult | undefined;\n\t\t\t\tif (result?.messages) currentMessages = result.messages;\n\t\t\t} catch (error) {\n\t\t\t\tif (context.signal?.aborted) throw error;\n\t\t\t\tthis.emitHandlerError(extension.path, \"context\", error);\n\t\t\t}\n\t\t}\n\t\treturn currentMessages;\n\t}\n\n\tasync emitContext(messages: AgentMessage[]): Promise<AgentMessage[]> {\n\t\tconst context = this.createContext();\n\t\tlet currentMessages = structuredClone(messages);\n\t\tfor (const extension of this.extensions) {\n\t\t\tcurrentMessages = await this.emitContextToExtension(extension, currentMessages, context);\n\t\t}\n\t\treturn currentMessages;\n\t}\n\n\tprivate async emitBeforeProviderRequestToExtension(\n\t\textension: Extension,\n\t\tpayload: unknown,\n\t\tcontext: ExtensionContext,\n\t): Promise<unknown> {\n\t\tconst handlers = extension.handlers.get(\"before_provider_request\");\n\t\tif (!handlers || handlers.length === 0) return payload;\n\t\tlet currentPayload = payload;\n\t\tfor (const handler of handlers) {\n\t\t\ttry {\n\t\t\t\tconst event: BeforeProviderRequestEvent = {\n\t\t\t\t\ttype: \"before_provider_request\",\n\t\t\t\t\tpayload: currentPayload,\n\t\t\t\t};\n\t\t\t\tconst handlerResult = await handler(event, context);\n\t\t\t\tif (handlerResult !== undefined) currentPayload = handlerResult;\n\t\t\t} catch (error) {\n\t\t\t\tthis.emitHandlerError(extension.path, \"before_provider_request\", error);\n\t\t\t}\n\t\t}\n\t\treturn currentPayload;\n\t}\n\n\tasync emitBeforeProviderRequest(payload: unknown): Promise<unknown> {\n\t\tconst context = this.createContext();\n\t\tlet currentPayload = payload;\n\t\tfor (const extension of this.extensions) {\n\t\t\tcurrentPayload = await this.emitBeforeProviderRequestToExtension(extension, currentPayload, context);\n\t\t}\n\t\treturn currentPayload;\n\t}\n\n\tprivate async emitBeforeProviderHeadersToExtension(\n\t\textension: Extension,\n\t\theaders: ProviderHeaders,\n\t\tcontext: ExtensionContext,\n\t): Promise<void> {\n\t\tconst handlers = extension.handlers.get(\"before_provider_headers\");\n\t\tif (!handlers || handlers.length === 0) return;\n\t\tfor (const handler of handlers) {\n\t\t\ttry {\n\t\t\t\t// Handlers share one mutable map; their return values are intentionally ignored.\n\t\t\t\tconst event: BeforeProviderHeadersEvent = { type: \"before_provider_headers\", headers };\n\t\t\t\tawait handler(event, context);\n\t\t\t} catch (error) {\n\t\t\t\tthis.emitHandlerError(extension.path, \"before_provider_headers\", error);\n\t\t\t}\n\t\t}\n\t}\n\n\tasync emitBeforeProviderHeaders(headers: ProviderHeaders): Promise<ProviderHeaders> {\n\t\tconst context = this.createContext();\n\t\tfor (const extension of this.extensions) {\n\t\t\tawait this.emitBeforeProviderHeadersToExtension(extension, headers, context);\n\t\t}\n\t\treturn headers;\n\t}\n\tprivate async emitBeforeAgentStartToExtension(\n\t\textension: Extension,\n\t\tprompt: string,\n\t\timages: ImageContent[] | undefined,\n\t\tsystemPromptOptions: BuildSystemPromptOptions,\n\t\tcontext: ExtensionContext,\n\t\tstate: BeforeAgentStartDispatchState,\n\t): Promise<void> {\n\t\tconst handlers = extension.handlers.get(\"before_agent_start\");\n\t\tif (!handlers || handlers.length === 0) return;\n\n\t\tfor (const handler of handlers) {\n\t\t\ttry {\n\t\t\t\tconst event: BeforeAgentStartEvent = {\n\t\t\t\t\ttype: \"before_agent_start\",\n\t\t\t\t\tprompt,\n\t\t\t\t\timages,\n\t\t\t\t\tsystemPrompt: state.currentSystemPrompt,\n\t\t\t\t\tsystemPromptOptions,\n\t\t\t\t};\n\t\t\t\tconst result = (await handler(event, context)) as BeforeAgentStartEventResult | undefined;\n\t\t\t\tif (result?.message) state.messages.push(result.message);\n\t\t\t\tif (result?.systemPrompt !== undefined) {\n\t\t\t\t\tstate.currentSystemPrompt = result.systemPrompt;\n\t\t\t\t\tstate.systemPromptModified = true;\n\t\t\t\t}\n\t\t\t} catch (error) {\n\t\t\t\tthis.emitHandlerError(extension.path, \"before_agent_start\", error);\n\t\t\t}\n\t\t}\n\t}\n\n\tasync emitBeforeAgentStart(\n\t\tprompt: string,\n\t\timages: ImageContent[] | undefined,\n\t\tsystemPrompt: string,\n\t\tsystemPromptOptions: BuildSystemPromptOptions,\n\t): Promise<BeforeAgentStartCombinedResult | undefined> {\n\t\tconst state: BeforeAgentStartDispatchState = {\n\t\t\tcurrentSystemPrompt: systemPrompt,\n\t\t\tmessages: [],\n\t\t\tsystemPromptModified: false,\n\t\t};\n\t\tconst context = Object.defineProperties(\n\t\t\t{},\n\t\t\tObject.getOwnPropertyDescriptors(this.createContext()),\n\t\t) as ExtensionContext;\n\t\tcontext.getSystemPrompt = () => {\n\t\t\tthis.assertActive();\n\t\t\treturn state.currentSystemPrompt;\n\t\t};\n\n\t\tfor (const extension of this.extensions) {\n\t\t\tawait this.emitBeforeAgentStartToExtension(extension, prompt, images, systemPromptOptions, context, state);\n\t\t}\n\n\t\tif (state.messages.length === 0 && !state.systemPromptModified) return undefined;\n\t\treturn {\n\t\t\tmessages: state.messages.length > 0 ? state.messages : undefined,\n\t\t\tsystemPrompt: state.systemPromptModified ? state.currentSystemPrompt : undefined,\n\t\t};\n\t}\n\n\tprivate appendDiscoveredResourcePaths(\n\t\ttarget: ExtensionResourcePath[],\n\t\tpaths: string[] | undefined,\n\t\textensionPath: string,\n\t): void {\n\t\tif (!paths?.length) return;\n\t\ttarget.push(...paths.map((path) => ({ path, extensionPath })));\n\t}\n\n\tprivate mergeResourcesDiscoverResult(\n\t\tdiscovered: AggregatedResourcesDiscoverResult,\n\t\tresult: ResourcesDiscoverResult | undefined,\n\t\textensionPath: string,\n\t): void {\n\t\tthis.appendDiscoveredResourcePaths(discovered.skillPaths, result?.skillPaths, extensionPath);\n\t\tthis.appendDiscoveredResourcePaths(discovered.rulePaths, result?.rulePaths, extensionPath);\n\t\tthis.appendDiscoveredResourcePaths(discovered.promptPaths, result?.promptPaths, extensionPath);\n\t\tthis.appendDiscoveredResourcePaths(discovered.themePaths, result?.themePaths, extensionPath);\n\t}\n\n\tprivate async emitResourcesDiscoverToExtension(\n\t\textension: Extension,\n\t\tcwd: string,\n\t\treason: ResourcesDiscoverReason,\n\t\tcontext: ExtensionContext,\n\t\tdiscovered: AggregatedResourcesDiscoverResult,\n\t): Promise<void> {\n\t\tconst handlers = extension.handlers.get(\"resources_discover\");\n\t\tif (!handlers || handlers.length === 0) return;\n\n\t\tfor (const handler of handlers) {\n\t\t\ttry {\n\t\t\t\tconst event: ResourcesDiscoverEvent = { type: \"resources_discover\", cwd, reason };\n\t\t\t\tconst handlerResult = await handler(event, context);\n\t\t\t\tthis.mergeResourcesDiscoverResult(\n\t\t\t\t\tdiscovered,\n\t\t\t\t\thandlerResult as ResourcesDiscoverResult | undefined,\n\t\t\t\t\textension.path,\n\t\t\t\t);\n\t\t\t} catch (error) {\n\t\t\t\tthis.emitHandlerError(extension.path, \"resources_discover\", error);\n\t\t\t}\n\t\t}\n\t}\n\n\tasync emitResourcesDiscover(\n\t\tcwd: string,\n\t\treason: ResourcesDiscoverReason,\n\t): Promise<AggregatedResourcesDiscoverResult> {\n\t\tconst context = this.createContext();\n\t\tconst discovered: AggregatedResourcesDiscoverResult = {\n\t\t\tskillPaths: [],\n\t\t\trulePaths: [],\n\t\t\tpromptPaths: [],\n\t\t\tthemePaths: [],\n\t\t};\n\n\t\tfor (const extension of this.extensions) {\n\t\t\tawait this.emitResourcesDiscoverToExtension(extension, cwd, reason, context, discovered);\n\t\t}\n\t\treturn discovered;\n\t}\n\n\tprivate async emitInputToExtension(\n\t\textension: Extension,\n\t\tstate: InputDispatchState,\n\t\tsource: InputSource,\n\t\tstreamingBehavior: StreamingBehavior | undefined,\n\t\tcontext: ExtensionContext,\n\t): Promise<InputEventResult | undefined> {\n\t\tfor (const handler of extension.handlers.get(\"input\") ?? []) {\n\t\t\ttry {\n\t\t\t\tconst event: InputEvent = {\n\t\t\t\t\ttype: \"input\",\n\t\t\t\t\ttext: state.text,\n\t\t\t\t\timages: state.images,\n\t\t\t\t\tsource,\n\t\t\t\t\tstreamingBehavior,\n\t\t\t\t};\n\t\t\t\tconst result = (await handler(event, context)) as InputEventResult | undefined;\n\t\t\t\tif (result?.action === \"handled\") return result;\n\t\t\t\tif (result?.action === \"transform\") {\n\t\t\t\t\tstate.text = result.text;\n\t\t\t\t\tstate.images = result.images ?? state.images;\n\t\t\t\t}\n\t\t\t} catch (error) {\n\t\t\t\tthis.emitError({\n\t\t\t\t\textensionPath: extension.path,\n\t\t\t\t\tevent: \"input\",\n\t\t\t\t\terror: error instanceof Error ? error.message : String(error),\n\t\t\t\t\tstack: error instanceof Error ? error.stack : undefined,\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t\treturn undefined;\n\t}\n\n\t/** Emit input event. Transforms chain, \"handled\" short-circuits. */\n\tasync emitInput(\n\t\ttext: string,\n\t\timages: ImageContent[] | undefined,\n\t\tsource: InputSource,\n\t\tstreamingBehavior?: StreamingBehavior,\n\t): Promise<InputEventResult> {\n\t\tconst context = this.createContext();\n\t\tconst state: InputDispatchState = { text, images };\n\t\tfor (const extension of this.extensions) {\n\t\t\tconst result = await this.emitInputToExtension(extension, state, source, streamingBehavior, context);\n\t\t\tif (result) return result;\n\t\t}\n\t\treturn state.text !== text || state.images !== images\n\t\t\t? { action: \"transform\", text: state.text, images: state.images }\n\t\t\t: { action: \"continue\" };\n\t}\n}\n"]}
|
|
1
|
+
{"version":3,"file":"runner.js","sourceRoot":"","sources":["../../../src/core/extensions/runner.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Extension runner - executes extensions and manages their lifecycle.\n */\n\nimport type { AgentMessage } from \"@greppleai/grip-agent-core\";\nimport type { ImageContent, Model, ProviderHeaders } from \"@greppleai/grip-ai\";\nimport type { KeyId } from \"@greppleai/grip-tui\";\nimport { type Theme, theme } from \"../../modes/interactive/theme/theme.ts\";\nimport { executeBashWithOperations } from \"../bash-executor.ts\";\nimport type { ResourceDiagnostic } from \"../diagnostics.ts\";\nimport type { KeybindingsConfig } from \"../keybindings.ts\";\nimport type { ModelRegistry } from \"../model-registry.ts\";\nimport type { Session } from \"../session/session.ts\";\nimport type { BuildSystemPromptOptions } from \"../system-prompt.ts\";\nimport type {\n\tBeforeAgentStartEvent,\n\tBeforeAgentStartEventResult,\n\tBeforeProviderHeadersEvent,\n\tBeforeProviderRequestEvent,\n\tCompactOptions,\n\tContextEvent,\n\tContextEventResult,\n\tContextUsage,\n\tExtension,\n\tExtensionActions,\n\tExtensionCommandContext,\n\tExtensionCommandContextActions,\n\tExtensionContext,\n\tExtensionContextActions,\n\tExtensionError,\n\tExtensionEvent,\n\tExtensionFlag,\n\tExtensionForkOptions,\n\tExtensionNavigateTreeOptions,\n\tExtensionNewSessionOptions,\n\tExtensionRuntime,\n\tExtensionSessionActionResult,\n\tExtensionShortcut,\n\tExtensionSwitchSessionOptions,\n\tExtensionUIContext,\n\tInputEvent,\n\tInputEventResult,\n\tInputSource,\n\tMarkdownTransformer,\n\tMessageEndEvent,\n\tMessageEndEventResult,\n\tMessageRenderer,\n\tProviderConfig,\n\tRegisteredCommand,\n\tRegisteredTool,\n\tResolvedCommand,\n\tResourcesDiscoverEvent,\n\tResourcesDiscoverReason,\n\tResourcesDiscoverResult,\n\tSessionBeforeCompactResult,\n\tSessionBeforeForkResult,\n\tSessionBeforeSwitchResult,\n\tSessionBeforeTreeResult,\n\tSessionShutdownEvent,\n\tStreamingBehavior,\n\tToolCallEvent,\n\tToolCallEventResult,\n\tToolDefinition,\n\tToolResultEvent,\n\tToolResultEventResult,\n\tUserBashEvent,\n\tUserBashEventResult,\n} from \"./types.ts\";\n\n// Extension shortcuts compete with canonical keybinding ids from keybindings.json.\n// Only editor-global shortcuts are reserved here. Picker-specific bindings are not.\nconst RESERVED_KEYBINDINGS_FOR_EXTENSION_CONFLICTS = new Set([\n\t\"app.interrupt\",\n\t\"app.clear\",\n\t\"app.exit\",\n\t\"app.suspend\",\n\t\"app.thinking.cycle\",\n\t\"app.model.cycleForward\",\n\t\"app.model.cycleBackward\",\n\t\"app.model.select\",\n\t\"app.tools.expand\",\n\t\"app.thinking.toggle\",\n\t\"app.editor.external\",\n\t\"app.message.copy\",\n\t\"app.message.followUp\",\n\t\"tui.input.submit\",\n\t\"tui.select.confirm\",\n\t\"tui.select.cancel\",\n\t\"tui.input.copy\",\n\t\"tui.editor.deleteToLineEnd\",\n]);\n\ntype BuiltInKeyBindings = Partial<Record<KeyId, { keybinding: string; restrictOverride: boolean }>>;\n\nconst buildBuiltinKeybindings = (resolvedKeybindings: KeybindingsConfig): BuiltInKeyBindings => {\n\tconst builtinKeybindings = {} as BuiltInKeyBindings;\n\tfor (const [keybinding, keys] of Object.entries(resolvedKeybindings)) {\n\t\tif (keys === undefined) continue;\n\t\tconst keyList = Array.isArray(keys) ? keys : [keys];\n\t\tconst restrictOverride = RESERVED_KEYBINDINGS_FOR_EXTENSION_CONFLICTS.has(keybinding);\n\t\tfor (const key of keyList) {\n\t\t\tconst normalizedKey = key.toLowerCase() as KeyId;\n\t\t\t// If multiple actions bind the same key, the reserved action wins so extensions\n\t\t\t// remain blocked by reserved shortcuts regardless of iteration order.\n\t\t\tconst existing = builtinKeybindings[normalizedKey];\n\t\t\tif (existing?.restrictOverride && !restrictOverride) continue;\n\t\t\tbuiltinKeybindings[normalizedKey] = {\n\t\t\t\tkeybinding,\n\t\t\t\trestrictOverride,\n\t\t\t};\n\t\t}\n\t}\n\treturn builtinKeybindings;\n};\n\ninterface MessageEndExtensionResult {\n\tmessage: AgentMessage;\n\tmodified: boolean;\n}\n\n/** Combined result from all before_agent_start handlers */\ninterface BeforeAgentStartCombinedResult {\n\tmessages?: NonNullable<BeforeAgentStartEventResult[\"message\"]>[];\n\tsystemPrompt?: string;\n}\n\n// grip-ignore noNearIdenticalDataStructures: Mutable extension dispatch state tracks optional in-flight attachments, while ProcessedFiles is the completed CLI file-loading result.\ninterface InputDispatchState {\n\ttext: string;\n\timages: ImageContent[] | undefined;\n}\n\ninterface BeforeAgentStartDispatchState {\n\tcurrentSystemPrompt: string;\n\tmessages: NonNullable<BeforeAgentStartEventResult[\"message\"]>[];\n\tsystemPromptModified: boolean;\n}\n\ninterface ProviderRegistrationActions {\n\tregisterProvider?(name: string, config: ProviderConfig): void;\n\tunregisterProvider?(name: string): void;\n}\n\ntype ExtensionResourcePath = {\n\tpath: string;\n\textensionPath: string;\n};\n\ninterface AggregatedResourcesDiscoverResult {\n\tskillPaths: ExtensionResourcePath[];\n\trulePaths: ExtensionResourcePath[];\n\tpromptPaths: ExtensionResourcePath[];\n\tthemePaths: ExtensionResourcePath[];\n}\n\nasync function callContextHandlerAbortable<T>(fn: () => Promise<T> | T, signal: AbortSignal): Promise<T> {\n\tif (signal.aborted) {\n\t\tthrow new Error(\"Agent run aborted\");\n\t}\n\n\tlet cleanup = () => {};\n\tconst abortPromise = new Promise<never>((_resolve, reject) => {\n\t\tconst onAbort = () => reject(new Error(\"Agent run aborted\"));\n\t\tsignal.addEventListener(\"abort\", onAbort, { once: true });\n\t\tcleanup = () => signal.removeEventListener(\"abort\", onAbort);\n\t});\n\n\ttry {\n\t\treturn await Promise.race([Promise.resolve().then(fn), abortPromise]);\n\t} finally {\n\t\tcleanup();\n\t}\n}\n\n/**\n * Events handled by the generic emit() method.\n * Events with dedicated emitXxx() methods are excluded for stronger type safety.\n */\ntype RunnerEmitEvent = Exclude<\n\tExtensionEvent,\n\t| ToolCallEvent\n\t| ToolResultEvent\n\t| UserBashEvent\n\t| ContextEvent\n\t| BeforeProviderRequestEvent\n\t| BeforeProviderHeadersEvent\n\t| BeforeAgentStartEvent\n\t| MessageEndEvent\n\t| ResourcesDiscoverEvent\n\t| InputEvent\n>;\n\ntype SessionBeforeEvent = Extract<\n\tRunnerEmitEvent,\n\t{ type: \"session_before_switch\" | \"session_before_fork\" | \"session_before_compact\" | \"session_before_tree\" }\n>;\n\ntype SessionBeforeEventResult =\n\t| SessionBeforeSwitchResult\n\t| SessionBeforeForkResult\n\t| SessionBeforeCompactResult\n\t| SessionBeforeTreeResult;\n\ntype RunnerEmitResult<TEvent extends RunnerEmitEvent> = TEvent extends { type: \"session_before_switch\" }\n\t? SessionBeforeSwitchResult | undefined\n\t: TEvent extends { type: \"session_before_fork\" }\n\t\t? SessionBeforeForkResult | undefined\n\t\t: TEvent extends { type: \"session_before_compact\" }\n\t\t\t? SessionBeforeCompactResult | undefined\n\t\t\t: TEvent extends { type: \"session_before_tree\" }\n\t\t\t\t? SessionBeforeTreeResult | undefined\n\t\t\t\t: undefined;\n\nexport type ExtensionErrorListener = (error: ExtensionError) => void;\n\nexport type NewSessionHandler = (options?: ExtensionNewSessionOptions) => Promise<ExtensionSessionActionResult>;\n\nexport type ForkHandler = (entryId: string, options?: ExtensionForkOptions) => Promise<ExtensionSessionActionResult>;\n\nexport type NavigateTreeHandler = (\n\ttargetId: string,\n\toptions?: ExtensionNavigateTreeOptions,\n) => Promise<ExtensionSessionActionResult>;\n\nexport type SwitchSessionHandler = (\n\tsessionPath: string,\n\toptions?: ExtensionSwitchSessionOptions,\n) => Promise<ExtensionSessionActionResult>;\n\nexport type ReloadHandler = () => Promise<void>;\n\nexport type ShutdownHandler = () => void;\n\n/**\n * Helper function to emit session_shutdown event to extensions.\n * Returns true if the event was emitted, false if there were no handlers.\n */\nexport async function emitSessionShutdownEvent(\n\textensionRunner: ExtensionRunner,\n\tevent: SessionShutdownEvent,\n): Promise<boolean> {\n\tif (extensionRunner.hasHandlers(\"session_shutdown\")) {\n\t\tawait extensionRunner.emit(event);\n\t\treturn true;\n\t}\n\treturn false;\n}\n\nconst noOpUIContext: ExtensionUIContext = {\n\tselect: async () => undefined,\n\tconfirm: async () => false,\n\tinput: async () => undefined,\n\tnotify: () => {},\n\tonTerminalInput: () => () => {},\n\tsetStatus: () => {},\n\tsetWorkingMessage: () => {},\n\tsetWorkingVisible: () => {},\n\tsetWorkingIndicator: () => {},\n\tsetHiddenThinkingLabel: () => {},\n\tsetWidget: () => {},\n\tsetFooter: () => {},\n\tsetHeader: () => {},\n\tsetTitle: () => {},\n\tcustom: async () => undefined as never,\n\tpasteToEditor: () => {},\n\tsetEditorText: () => {},\n\tgetEditorText: () => \"\",\n\teditor: async () => undefined,\n\taddAutocompleteProvider: () => {},\n\tsetEditorComponent: () => {},\n\tgetEditorComponent: () => undefined,\n\tget theme() {\n\t\treturn theme;\n\t},\n\tgetAllThemes: () => [],\n\tgetTheme: () => undefined,\n\tsetTheme: (_theme: string | Theme) => ({ success: false, error: \"UI not available\" }),\n\tgetToolsExpanded: () => false,\n\tsetToolsExpanded: () => {},\n};\n\nexport class ExtensionRunner {\n\tprivate extensions: Extension[];\n\tprivate runtime: ExtensionRuntime;\n\tprivate uiContext: ExtensionUIContext;\n\tprivate cwd: string;\n\tprivate session: Session;\n\tprivate modelRegistry: ModelRegistry;\n\tprivate errorListeners: Set<ExtensionErrorListener> = new Set();\n\tprivate getModel: () => Model<any> | undefined = () => undefined;\n\tprivate isIdleFn: () => boolean = () => true;\n\tprivate getSignalFn: () => AbortSignal | undefined = () => undefined;\n\tprivate waitForIdleFn: () => Promise<void> = async () => {};\n\tprivate abortFn: () => void = () => {};\n\tprivate hasPendingMessagesFn: () => boolean = () => false;\n\tprivate getContextUsageFn: () => ContextUsage | undefined = () => undefined;\n\tprivate compactFn: (options?: CompactOptions) => void = () => {};\n\tprivate getSystemPromptFn: () => string = () => \"\";\n\tprivate getToolOperationsFn: ExtensionContextActions[\"getToolOperations\"];\n\tprivate getToolBackendInfoFn: ExtensionContextActions[\"getToolBackendInfo\"];\n\tprivate isSandboxFn: ExtensionContextActions[\"isSandbox\"] = () => false;\n\tprivate getLspStatusFn: ExtensionContextActions[\"getLspStatus\"];\n\tprivate configureLspFn: ExtensionContextActions[\"configureLsp\"];\n\tprivate execToolBackendFn: ExtensionContextActions[\"execToolBackend\"];\n\tprivate execHostCommandFn: ExtensionContextActions[\"execHostCommand\"] = async () => {\n\t\tthrow new Error(\"Host command execution is not available in this extension runtime\");\n\t};\n\tprivate execHostProcessFn: ExtensionContextActions[\"execHostProcess\"] = async () => {\n\t\tthrow new Error(\"Host process execution is not available in this extension runtime\");\n\t};\n\tprivate newSessionHandler: NewSessionHandler = async () => ({ cancelled: false });\n\tprivate forkHandler: ForkHandler = async () => ({ cancelled: false });\n\tprivate navigateTreeHandler: NavigateTreeHandler = async () => ({ cancelled: false });\n\tprivate switchSessionHandler: SwitchSessionHandler = async () => ({ cancelled: false });\n\tprivate reloadHandler: ReloadHandler = async () => {};\n\tprivate shutdownHandler: ShutdownHandler = () => {};\n\tprivate shortcutDiagnostics: ResourceDiagnostic[] = [];\n\tprivate commandDiagnostics: ResourceDiagnostic[] = [];\n\tprivate staleMessage: string | undefined;\n\n\tconstructor(\n\t\textensions: Extension[],\n\t\truntime: ExtensionRuntime,\n\t\tcwd: string,\n\t\tsession: Session,\n\t\tmodelRegistry: ModelRegistry,\n\t) {\n\t\tthis.extensions = extensions;\n\t\tthis.runtime = runtime;\n\t\tthis.uiContext = noOpUIContext;\n\t\tthis.cwd = cwd;\n\t\tthis.session = session;\n\t\tthis.modelRegistry = modelRegistry;\n\t\tthis.getToolOperationsFn = () => {\n\t\t\tthrow new Error(\"Extension tool backend is not bound yet\");\n\t\t};\n\t\tthis.getToolBackendInfoFn = () =>\n\t\t\tthis.getToolOperationsFn().getBackendInfo?.() ?? { type: \"local\", cwd: this.cwd };\n\t\tthis.getLspStatusFn = () => ({\n\t\t\towner: \"standalone\",\n\t\t\tenabled: false,\n\t\t\tconfiguration: { enabled: false, servers: [] },\n\t\t\tservers: [],\n\t\t});\n\t\tthis.configureLspFn = async () => {\n\t\t\tthrow new Error(\"Extension LSP configuration is not bound yet\");\n\t\t};\n\t\tthis.execToolBackendFn = async (command, options) => {\n\t\t\tconst operations = this.getToolOperationsFn();\n\t\t\treturn executeBashWithOperations(command, options?.cwd ?? operations.cwd, operations, options);\n\t\t};\n\t}\n\n\tbindCore(\n\t\tactions: ExtensionActions,\n\t\tcontextActions: ExtensionContextActions,\n\t\tproviderActions?: ProviderRegistrationActions,\n\t): void {\n\t\t// Copy actions into the shared runtime (all extension APIs reference this)\n\t\tthis.runtime.sendMessage = actions.sendMessage;\n\t\tthis.runtime.sendUserMessage = actions.sendUserMessage;\n\t\tthis.runtime.appendEntry = actions.appendEntry;\n\t\tthis.runtime.setSessionName = actions.setSessionName;\n\t\tthis.runtime.getSessionName = actions.getSessionName;\n\t\tthis.runtime.setLabel = actions.setLabel;\n\t\tthis.runtime.getActiveTools = actions.getActiveTools;\n\t\tthis.runtime.getAllTools = actions.getAllTools;\n\t\tthis.runtime.setActiveTools = actions.setActiveTools;\n\t\tthis.runtime.refreshTools = actions.refreshTools;\n\t\tthis.runtime.getCommands = actions.getCommands;\n\t\tthis.runtime.setModel = actions.setModel;\n\t\tthis.runtime.getThinkingLevel = actions.getThinkingLevel;\n\t\tthis.runtime.setThinkingLevel = actions.setThinkingLevel;\n\n\t\t// Context actions (required)\n\t\tthis.getModel = contextActions.getModel;\n\t\tthis.isIdleFn = contextActions.isIdle;\n\t\tthis.getSignalFn = contextActions.getSignal;\n\t\tthis.abortFn = contextActions.abort;\n\t\tthis.hasPendingMessagesFn = contextActions.hasPendingMessages;\n\t\tthis.shutdownHandler = contextActions.shutdown;\n\t\tthis.getContextUsageFn = contextActions.getContextUsage;\n\t\tthis.compactFn = contextActions.compact;\n\t\tthis.getSystemPromptFn = contextActions.getSystemPrompt;\n\t\tthis.getToolOperationsFn = contextActions.getToolOperations;\n\t\tthis.getToolBackendInfoFn = contextActions.getToolBackendInfo;\n\t\tthis.isSandboxFn = contextActions.isSandbox;\n\t\tthis.getLspStatusFn = contextActions.getLspStatus;\n\t\tthis.configureLspFn = contextActions.configureLsp;\n\t\tthis.execToolBackendFn = contextActions.execToolBackend;\n\t\tthis.execHostCommandFn = contextActions.execHostCommand;\n\t\tthis.execHostProcessFn = contextActions.execHostProcess;\n\n\t\t// Flush provider registrations queued during extension loading\n\t\tfor (const { name, config, extensionPath } of this.runtime.pendingProviderRegistrations) {\n\t\t\ttry {\n\t\t\t\tif (providerActions?.registerProvider) {\n\t\t\t\t\tproviderActions.registerProvider(name, config);\n\t\t\t\t} else {\n\t\t\t\t\tthis.modelRegistry.registerProvider(name, config);\n\t\t\t\t}\n\t\t\t} catch (err) {\n\t\t\t\tthis.emitError({\n\t\t\t\t\textensionPath,\n\t\t\t\t\tevent: \"register_provider\",\n\t\t\t\t\terror: err instanceof Error ? err.message : String(err),\n\t\t\t\t\tstack: err instanceof Error ? err.stack : undefined,\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t\tthis.runtime.pendingProviderRegistrations = [];\n\n\t\t// From this point on, provider registration/unregistration takes effect immediately\n\t\t// without requiring a /reload.\n\t\tthis.runtime.registerProvider = (name, config) => {\n\t\t\tif (providerActions?.registerProvider) {\n\t\t\t\tproviderActions.registerProvider(name, config);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis.modelRegistry.registerProvider(name, config);\n\t\t};\n\t\tthis.runtime.unregisterProvider = (name) => {\n\t\t\tif (providerActions?.unregisterProvider) {\n\t\t\t\tproviderActions.unregisterProvider(name);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis.modelRegistry.unregisterProvider(name);\n\t\t};\n\t}\n\n\tbindCommandContext(actions?: ExtensionCommandContextActions): void {\n\t\tif (actions) {\n\t\t\tthis.waitForIdleFn = actions.waitForIdle;\n\t\t\tthis.newSessionHandler = actions.newSession;\n\t\t\tthis.forkHandler = actions.fork;\n\t\t\tthis.navigateTreeHandler = actions.navigateTree;\n\t\t\tthis.switchSessionHandler = actions.switchSession;\n\t\t\tthis.reloadHandler = actions.reload;\n\t\t\treturn;\n\t\t}\n\n\t\tthis.waitForIdleFn = async () => {};\n\t\tthis.newSessionHandler = async () => ({ cancelled: false });\n\t\tthis.forkHandler = async () => ({ cancelled: false });\n\t\tthis.navigateTreeHandler = async () => ({ cancelled: false });\n\t\tthis.switchSessionHandler = async () => ({ cancelled: false });\n\t\tthis.reloadHandler = async () => {};\n\t}\n\n\tsetUIContext(uiContext?: ExtensionUIContext): void {\n\t\tthis.uiContext = uiContext ?? noOpUIContext;\n\t}\n\n\tgetUIContext(): ExtensionUIContext {\n\t\treturn this.uiContext;\n\t}\n\n\thasUI(): boolean {\n\t\treturn this.uiContext !== noOpUIContext;\n\t}\n\n\tgetExtensionPaths(): string[] {\n\t\treturn this.extensions.map((e) => e.path);\n\t}\n\n\t/** Get all registered tools from all extensions (first registration per name wins). */\n\tgetAllRegisteredTools(): RegisteredTool[] {\n\t\tconst toolsByName = new Map<string, RegisteredTool>();\n\t\tfor (const ext of this.extensions) {\n\t\t\tfor (const tool of ext.tools.values()) {\n\t\t\t\tif (!toolsByName.has(tool.definition.name)) {\n\t\t\t\t\ttoolsByName.set(tool.definition.name, tool);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn Array.from(toolsByName.values());\n\t}\n\n\tgetAvailableRegisteredTools(): RegisteredTool[] {\n\t\treturn this.getAllRegisteredTools().filter((tool) => tool.lazy === true);\n\t}\n\n\tloadRegisteredTool(toolName: string): boolean {\n\t\tconst tool = this.getFirstRegisteredTool(toolName);\n\t\tif (tool?.lazy !== true) return false;\n\t\ttool.loaded = true;\n\t\treturn true;\n\t}\n\n\tunloadRegisteredTool(toolName: string): boolean {\n\t\tconst tool = this.getFirstRegisteredTool(toolName);\n\t\tif (tool?.lazy !== true) return false;\n\t\ttool.loaded = false;\n\t\treturn true;\n\t}\n\n\tprivate getFirstRegisteredTool(toolName: string): RegisteredTool | undefined {\n\t\tfor (const ext of this.extensions) {\n\t\t\tconst tool = ext.tools.get(toolName);\n\t\t\tif (tool) return tool;\n\t\t}\n\t\treturn undefined;\n\t}\n\n\t/** Get a tool definition by name. Returns undefined if not found. */\n\tgetToolDefinition(toolName: string): ToolDefinition | undefined {\n\t\tfor (const ext of this.extensions) {\n\t\t\tconst tool = ext.tools.get(toolName);\n\t\t\tif (tool) {\n\t\t\t\treturn tool.definition;\n\t\t\t}\n\t\t}\n\t\treturn undefined;\n\t}\n\n\tgetFlags(): Map<string, ExtensionFlag> {\n\t\tconst allFlags = new Map<string, ExtensionFlag>();\n\t\tfor (const ext of this.extensions) {\n\t\t\tfor (const [name, flag] of ext.flags) {\n\t\t\t\tif (!allFlags.has(name)) {\n\t\t\t\t\tallFlags.set(name, flag);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn allFlags;\n\t}\n\n\tsetFlagValue(name: string, value: boolean | string): void {\n\t\tthis.runtime.flagValues.set(name, value);\n\t}\n\n\tgetFlagValues(): Map<string, boolean | string> {\n\t\treturn new Map(this.runtime.flagValues);\n\t}\n\n\tgetShortcuts(resolvedKeybindings: KeybindingsConfig): Map<KeyId, ExtensionShortcut> {\n\t\tthis.shortcutDiagnostics = [];\n\t\tconst builtinKeybindings = buildBuiltinKeybindings(resolvedKeybindings);\n\t\tconst extensionShortcuts = new Map<KeyId, ExtensionShortcut>();\n\n\t\tconst addDiagnostic = (message: string, extensionPath: string) => {\n\t\t\tthis.shortcutDiagnostics.push({ type: \"warning\", message, path: extensionPath });\n\t\t\tif (!this.hasUI()) {\n\t\t\t\tconsole.warn(message);\n\t\t\t}\n\t\t};\n\n\t\tfor (const ext of this.extensions) {\n\t\t\tfor (const [key, shortcut] of ext.shortcuts) {\n\t\t\t\tconst normalizedKey = key.toLowerCase() as KeyId;\n\n\t\t\t\tconst builtInKeybinding = builtinKeybindings[normalizedKey];\n\t\t\t\tif (builtInKeybinding?.restrictOverride === true) {\n\t\t\t\t\taddDiagnostic(\n\t\t\t\t\t\t`Extension shortcut '${key}' from ${shortcut.extensionPath} conflicts with built-in shortcut. Skipping.`,\n\t\t\t\t\t\tshortcut.extensionPath,\n\t\t\t\t\t);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tif (builtInKeybinding?.restrictOverride === false) {\n\t\t\t\t\taddDiagnostic(\n\t\t\t\t\t\t`Extension shortcut conflict: '${key}' is built-in shortcut for ${builtInKeybinding.keybinding} and ${shortcut.extensionPath}. Using ${shortcut.extensionPath}.`,\n\t\t\t\t\t\tshortcut.extensionPath,\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tconst existingExtensionShortcut = extensionShortcuts.get(normalizedKey);\n\t\t\t\tif (existingExtensionShortcut) {\n\t\t\t\t\taddDiagnostic(\n\t\t\t\t\t\t`Extension shortcut conflict: '${key}' registered by both ${existingExtensionShortcut.extensionPath} and ${shortcut.extensionPath}. Using ${shortcut.extensionPath}.`,\n\t\t\t\t\t\tshortcut.extensionPath,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\textensionShortcuts.set(normalizedKey, shortcut);\n\t\t\t}\n\t\t}\n\t\treturn extensionShortcuts;\n\t}\n\n\tgetShortcutDiagnostics(): ResourceDiagnostic[] {\n\t\treturn this.shortcutDiagnostics;\n\t}\n\n\tinvalidate(\n\t\tmessage = \"This extension ctx is stale after session replacement or reload. Do not use a captured extension API or command ctx after ctx.newSession(), ctx.fork(), ctx.switchSession(), or ctx.reload(). For newSession, fork, and switchSession, move post-replacement work into withSession and use the ctx passed to withSession. For reload, do not use the old ctx after await ctx.reload().\",\n\t): void {\n\t\tif (!this.staleMessage) {\n\t\t\tthis.staleMessage = message;\n\t\t\tthis.runtime.invalidate(message);\n\t\t}\n\t}\n\n\tprivate assertActive(): void {\n\t\tif (this.staleMessage) {\n\t\t\tthrow new Error(this.staleMessage);\n\t\t}\n\t}\n\n\tonError(listener: ExtensionErrorListener): () => void {\n\t\tthis.errorListeners.add(listener);\n\t\treturn () => this.errorListeners.delete(listener);\n\t}\n\n\temitError(error: ExtensionError): void {\n\t\tfor (const listener of this.errorListeners) {\n\t\t\tlistener(error);\n\t\t}\n\t}\n\tprivate emitHandlerError(extensionPath: string, event: string, error: unknown): void {\n\t\tthis.emitError({\n\t\t\textensionPath,\n\t\t\tevent,\n\t\t\terror: error instanceof Error ? error.message : String(error),\n\t\t\tstack: error instanceof Error ? error.stack : undefined,\n\t\t});\n\t}\n\n\thasHandlers(eventType: string): boolean {\n\t\tfor (const ext of this.extensions) {\n\t\t\tconst handlers = ext.handlers.get(eventType);\n\t\t\tif (handlers && handlers.length > 0) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t}\n\n\tgetMessageRenderer(customType: string): MessageRenderer | undefined {\n\t\tfor (const ext of this.extensions) {\n\t\t\tconst renderer = ext.messageRenderers.get(customType);\n\t\t\tif (renderer) {\n\t\t\t\treturn renderer;\n\t\t\t}\n\t\t}\n\t\treturn undefined;\n\t}\n\n\tgetMarkdownTransformers(): MarkdownTransformer[] {\n\t\treturn this.extensions.flatMap((extension) =>\n\t\t\textension.markdownTransformer ? [extension.markdownTransformer] : [],\n\t\t);\n\t}\n\n\tprivate resolveRegisteredCommands(): ResolvedCommand[] {\n\t\tconst commands: RegisteredCommand[] = [];\n\t\tconst counts = new Map<string, number>();\n\n\t\tfor (const ext of this.extensions) {\n\t\t\tfor (const command of ext.commands.values()) {\n\t\t\t\tcommands.push(command);\n\t\t\t\tcounts.set(command.name, (counts.get(command.name) ?? 0) + 1);\n\t\t\t}\n\t\t}\n\n\t\tconst seen = new Map<string, number>();\n\t\tconst takenInvocationNames = new Set<string>();\n\n\t\treturn commands.map((command) => {\n\t\t\tconst occurrence = (seen.get(command.name) ?? 0) + 1;\n\t\t\tseen.set(command.name, occurrence);\n\n\t\t\tlet invocationName = (counts.get(command.name) ?? 0) > 1 ? `${command.name}:${occurrence}` : command.name;\n\n\t\t\tif (takenInvocationNames.has(invocationName)) {\n\t\t\t\tlet suffix = occurrence;\n\t\t\t\tdo {\n\t\t\t\t\tsuffix++;\n\t\t\t\t\tinvocationName = `${command.name}:${suffix}`;\n\t\t\t\t} while (takenInvocationNames.has(invocationName));\n\t\t\t}\n\n\t\t\ttakenInvocationNames.add(invocationName);\n\t\t\treturn {\n\t\t\t\t...command,\n\t\t\t\tinvocationName,\n\t\t\t};\n\t\t});\n\t}\n\n\tgetRegisteredCommands(): ResolvedCommand[] {\n\t\tthis.commandDiagnostics = [];\n\t\treturn this.resolveRegisteredCommands();\n\t}\n\n\tgetCommandDiagnostics(): ResourceDiagnostic[] {\n\t\treturn this.commandDiagnostics;\n\t}\n\n\tgetCommand(name: string): ResolvedCommand | undefined {\n\t\treturn this.resolveRegisteredCommands().find((command) => command.invocationName === name);\n\t}\n\n\t/**\n\t * Request a graceful shutdown. Called by extension tools and event handlers.\n\t * The actual shutdown behavior is provided by the mode via bindExtensions().\n\t */\n\tshutdown(): void {\n\t\tthis.shutdownHandler();\n\t}\n\n\t/**\n\t * Create an ExtensionContext for use in event handlers and tool execution.\n\t * Context values are resolved at call time, so changes via bindCore/bindUI are reflected.\n\t */\n\tcreateContext(): ExtensionContext {\n\t\tconst runner = this;\n\t\tconst getModel = this.getModel;\n\t\treturn {\n\t\t\tget ui() {\n\t\t\t\trunner.assertActive();\n\t\t\t\treturn runner.uiContext;\n\t\t\t},\n\t\t\tget hasUI() {\n\t\t\t\trunner.assertActive();\n\t\t\t\treturn runner.hasUI();\n\t\t\t},\n\t\t\tget cwd() {\n\t\t\t\trunner.assertActive();\n\t\t\t\treturn runner.cwd;\n\t\t\t},\n\t\t\tget toolOperations() {\n\t\t\t\trunner.assertActive();\n\t\t\t\treturn runner.getToolOperationsFn();\n\t\t\t},\n\t\t\tgetToolBackendInfo: () => {\n\t\t\t\trunner.assertActive();\n\t\t\t\treturn runner.getToolBackendInfoFn();\n\t\t\t},\n\t\t\tisSandbox: () => {\n\t\t\t\trunner.assertActive();\n\t\t\t\treturn runner.isSandboxFn();\n\t\t\t},\n\t\t\tgetLspStatus: () => {\n\t\t\t\trunner.assertActive();\n\t\t\t\treturn runner.getLspStatusFn();\n\t\t\t},\n\t\t\tconfigureLsp: (configuration) => {\n\t\t\t\trunner.assertActive();\n\t\t\t\treturn runner.configureLspFn(configuration);\n\t\t\t},\n\t\t\texecToolBackend: (command, options) => {\n\t\t\t\trunner.assertActive();\n\t\t\t\treturn runner.execToolBackendFn(command, options);\n\t\t\t},\n\t\t\texecHostCommand: (command, options) => {\n\t\t\t\trunner.assertActive();\n\t\t\t\treturn runner.execHostCommandFn(command, options);\n\t\t\t},\n\t\t\texecHostProcess: (executable, args, options) => {\n\t\t\t\trunner.assertActive();\n\t\t\t\treturn runner.execHostProcessFn(executable, args, options);\n\t\t\t},\n\t\t\tget session() {\n\t\t\t\trunner.assertActive();\n\t\t\t\treturn runner.session;\n\t\t\t},\n\t\t\tget modelRegistry() {\n\t\t\t\trunner.assertActive();\n\t\t\t\treturn runner.modelRegistry;\n\t\t\t},\n\t\t\tget model() {\n\t\t\t\trunner.assertActive();\n\t\t\t\treturn getModel();\n\t\t\t},\n\t\t\tget thinkingLevel() {\n\t\t\t\trunner.assertActive();\n\t\t\t\treturn runner.runtime.getThinkingLevel();\n\t\t\t},\n\t\t\tisIdle: () => {\n\t\t\t\trunner.assertActive();\n\t\t\t\treturn runner.isIdleFn();\n\t\t\t},\n\t\t\tget signal() {\n\t\t\t\trunner.assertActive();\n\t\t\t\treturn runner.getSignalFn();\n\t\t\t},\n\t\t\tabort: () => {\n\t\t\t\trunner.assertActive();\n\t\t\t\trunner.abortFn();\n\t\t\t},\n\t\t\thasPendingMessages: () => {\n\t\t\t\trunner.assertActive();\n\t\t\t\treturn runner.hasPendingMessagesFn();\n\t\t\t},\n\t\t\tshutdown: () => {\n\t\t\t\trunner.assertActive();\n\t\t\t\trunner.shutdownHandler();\n\t\t\t},\n\t\t\tgetContextUsage: () => {\n\t\t\t\trunner.assertActive();\n\t\t\t\treturn runner.getContextUsageFn();\n\t\t\t},\n\t\t\tcompact: (options) => {\n\t\t\t\trunner.assertActive();\n\t\t\t\trunner.compactFn(options);\n\t\t\t},\n\t\t\tgetSystemPrompt: () => {\n\t\t\t\trunner.assertActive();\n\t\t\t\treturn runner.getSystemPromptFn();\n\t\t\t},\n\t\t};\n\t}\n\n\tcreateCommandContext(): ExtensionCommandContext {\n\t\t// Use property descriptors instead of object spread so the guarded getters from\n\t\t// createContext() stay lazy. A spread would eagerly read them once and freeze the\n\t\t// old values into the returned object, bypassing stale-instance checks.\n\t\tconst context = Object.defineProperties(\n\t\t\t{},\n\t\t\tObject.getOwnPropertyDescriptors(this.createContext()),\n\t\t) as ExtensionCommandContext;\n\t\tcontext.waitForIdle = () => {\n\t\t\tthis.assertActive();\n\t\t\treturn this.waitForIdleFn();\n\t\t};\n\t\tcontext.newSession = (options) => {\n\t\t\tthis.assertActive();\n\t\t\treturn this.newSessionHandler(options);\n\t\t};\n\t\tcontext.fork = (entryId, options) => {\n\t\t\tthis.assertActive();\n\t\t\treturn this.forkHandler(entryId, options);\n\t\t};\n\t\tcontext.navigateTree = (targetId, options) => {\n\t\t\tthis.assertActive();\n\t\t\treturn this.navigateTreeHandler(targetId, options);\n\t\t};\n\t\tcontext.switchSession = (sessionPath, options) => {\n\t\t\tthis.assertActive();\n\t\t\treturn this.switchSessionHandler(sessionPath, options);\n\t\t};\n\t\tcontext.reload = () => {\n\t\t\tthis.assertActive();\n\t\t\treturn this.reloadHandler();\n\t\t};\n\t\treturn context;\n\t}\n\n\tprivate isSessionBeforeEvent(event: RunnerEmitEvent): event is SessionBeforeEvent {\n\t\treturn (\n\t\t\tevent.type === \"session_before_switch\" ||\n\t\t\tevent.type === \"session_before_fork\" ||\n\t\t\tevent.type === \"session_before_compact\" ||\n\t\t\tevent.type === \"session_before_tree\"\n\t\t);\n\t}\n\tprivate async emitGenericEventToExtension(\n\t\textension: Extension,\n\t\tevent: RunnerEmitEvent,\n\t\tcontext: ExtensionContext,\n\t): Promise<SessionBeforeEventResult | undefined> {\n\t\tconst handlers = extension.handlers.get(event.type);\n\t\tif (!handlers || handlers.length === 0) return undefined;\n\t\tlet result: SessionBeforeEventResult | undefined;\n\t\tfor (const handler of handlers) {\n\t\t\ttry {\n\t\t\t\tconst handlerResult = await handler(event, context);\n\t\t\t\tif (!this.isSessionBeforeEvent(event) || !handlerResult) continue;\n\t\t\t\tresult = handlerResult as SessionBeforeEventResult;\n\t\t\t\tif (result.cancel) return result;\n\t\t\t} catch (error) {\n\t\t\t\tthis.emitHandlerError(extension.path, event.type, error);\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t}\n\n\tasync emit<TEvent extends RunnerEmitEvent>(event: TEvent): Promise<RunnerEmitResult<TEvent>> {\n\t\tconst context = this.createContext();\n\t\tlet result: SessionBeforeEventResult | undefined;\n\t\tfor (const extension of this.extensions) {\n\t\t\tconst extensionResult = await this.emitGenericEventToExtension(extension, event, context);\n\t\t\tif (!extensionResult) continue;\n\t\t\tresult = extensionResult;\n\t\t\tif (result.cancel) return result as RunnerEmitResult<TEvent>;\n\t\t}\n\t\treturn result as RunnerEmitResult<TEvent>;\n\t}\n\n\tprivate async emitMessageEndToExtension(\n\t\textension: Extension,\n\t\tevent: MessageEndEvent,\n\t\tcontext: ExtensionContext,\n\t\tinitialMessage: AgentMessage,\n\t): Promise<MessageEndExtensionResult> {\n\t\tconst handlers = extension.handlers.get(\"message_end\");\n\t\tif (!handlers || handlers.length === 0) return { message: initialMessage, modified: false };\n\n\t\tlet message = initialMessage;\n\t\tlet modified = false;\n\t\tfor (const handler of handlers) {\n\t\t\ttry {\n\t\t\t\tconst currentEvent: MessageEndEvent = { ...event, message };\n\t\t\t\tconst handlerResult = (await handler(currentEvent, context)) as MessageEndEventResult | undefined;\n\t\t\t\tif (!handlerResult?.message) continue;\n\t\t\t\tif (handlerResult.message.role !== message.role) {\n\t\t\t\t\tthis.emitError({\n\t\t\t\t\t\textensionPath: extension.path,\n\t\t\t\t\t\tevent: \"message_end\",\n\t\t\t\t\t\terror: \"message_end handlers must return a message with the same role\",\n\t\t\t\t\t});\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tmessage = handlerResult.message;\n\t\t\t\tmodified = true;\n\t\t\t} catch (error) {\n\t\t\t\tthis.emitHandlerError(extension.path, \"message_end\", error);\n\t\t\t}\n\t\t}\n\t\treturn { message, modified };\n\t}\n\n\tasync emitMessageEnd(event: MessageEndEvent): Promise<AgentMessage | undefined> {\n\t\tconst context = this.createContext();\n\t\tlet currentMessage = event.message;\n\t\tlet modified = false;\n\n\t\tfor (const extension of this.extensions) {\n\t\t\tconst extensionResult = await this.emitMessageEndToExtension(extension, event, context, currentMessage);\n\t\t\tcurrentMessage = extensionResult.message;\n\t\t\tmodified = modified || extensionResult.modified;\n\t\t}\n\n\t\treturn modified ? currentMessage : undefined;\n\t}\n\n\tprivate applyToolResultUpdate(event: ToolResultEvent, result: ToolResultEventResult): boolean {\n\t\tlet modified = false;\n\t\tif (result.content !== undefined) {\n\t\t\tevent.content = result.content;\n\t\t\tmodified = true;\n\t\t}\n\t\tif (result.details !== undefined) {\n\t\t\tevent.details = result.details;\n\t\t\tmodified = true;\n\t\t}\n\t\tif (result.isError !== undefined) {\n\t\t\tevent.isError = result.isError;\n\t\t\tmodified = true;\n\t\t}\n\t\treturn modified;\n\t}\n\n\tprivate async emitToolResultToExtension(\n\t\textension: Extension,\n\t\tevent: ToolResultEvent,\n\t\tcontext: ExtensionContext,\n\t): Promise<boolean> {\n\t\tconst handlers = extension.handlers.get(\"tool_result\");\n\t\tif (!handlers || handlers.length === 0) return false;\n\t\tlet modified = false;\n\t\tfor (const handler of handlers) {\n\t\t\ttry {\n\t\t\t\tconst result = (await handler(event, context)) as ToolResultEventResult | undefined;\n\t\t\t\tif (!result) continue;\n\t\t\t\tif (this.applyToolResultUpdate(event, result)) modified = true;\n\t\t\t} catch (error) {\n\t\t\t\tthis.emitHandlerError(extension.path, \"tool_result\", error);\n\t\t\t}\n\t\t}\n\t\treturn modified;\n\t}\n\n\tasync emitToolResult(event: ToolResultEvent): Promise<ToolResultEventResult | undefined> {\n\t\tconst context = this.createContext();\n\t\tconst currentEvent: ToolResultEvent = { ...event };\n\t\tlet modified = false;\n\t\tfor (const extension of this.extensions) {\n\t\t\tconst extensionModified = await this.emitToolResultToExtension(extension, currentEvent, context);\n\t\t\tif (extensionModified) modified = true;\n\t\t}\n\t\tif (!modified) return undefined;\n\t\treturn {\n\t\t\tcontent: currentEvent.content,\n\t\t\tdetails: currentEvent.details,\n\t\t\tisError: currentEvent.isError,\n\t\t};\n\t}\n\n\tasync emitToolCall(event: ToolCallEvent): Promise<ToolCallEventResult | undefined> {\n\t\tconst ctx = this.createContext();\n\t\tlet result: ToolCallEventResult | undefined;\n\n\t\tfor (const ext of this.extensions) {\n\t\t\tconst handlers = ext.handlers.get(\"tool_call\");\n\t\t\tif (!handlers || handlers.length === 0) continue;\n\n\t\t\tfor (const handler of handlers) {\n\t\t\t\tconst handlerResult = await handler(event, ctx);\n\n\t\t\t\tif (handlerResult) {\n\t\t\t\t\tresult = handlerResult as ToolCallEventResult;\n\t\t\t\t\tif (result.block) {\n\t\t\t\t\t\treturn result;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn result;\n\t}\n\n\tprivate async emitUserBashToExtension(\n\t\textension: Extension,\n\t\tevent: UserBashEvent,\n\t\tcontext: ExtensionContext,\n\t): Promise<UserBashEventResult | undefined> {\n\t\tconst handlers = extension.handlers.get(\"user_bash\");\n\t\tif (!handlers || handlers.length === 0) return undefined;\n\t\tfor (const handler of handlers) {\n\t\t\ttry {\n\t\t\t\tconst result = await handler(event, context);\n\t\t\t\tif (result) return result as UserBashEventResult;\n\t\t\t} catch (error) {\n\t\t\t\tthis.emitHandlerError(extension.path, \"user_bash\", error);\n\t\t\t}\n\t\t}\n\t\treturn undefined;\n\t}\n\n\tasync emitUserBash(event: UserBashEvent): Promise<UserBashEventResult | undefined> {\n\t\tconst context = this.createContext();\n\t\tfor (const extension of this.extensions) {\n\t\t\tconst result = await this.emitUserBashToExtension(extension, event, context);\n\t\t\tif (result) return result;\n\t\t}\n\t\treturn undefined;\n\t}\n\n\tprivate async emitContextToExtension(\n\t\textension: Extension,\n\t\tmessages: AgentMessage[],\n\t\tcontext: ExtensionContext,\n\t): Promise<AgentMessage[]> {\n\t\tconst handlers = extension.handlers.get(\"context\");\n\t\tif (!handlers || handlers.length === 0) return messages;\n\t\tlet currentMessages = messages;\n\t\tfor (const handler of handlers) {\n\t\t\ttry {\n\t\t\t\tconst event: ContextEvent = { type: \"context\", messages: currentMessages };\n\t\t\t\tconst handlerResult = context.signal\n\t\t\t\t\t? await callContextHandlerAbortable(() => handler(event, context), context.signal)\n\t\t\t\t\t: await handler(event, context);\n\t\t\t\tconst result = handlerResult as ContextEventResult | undefined;\n\t\t\t\tif (result?.messages) currentMessages = result.messages;\n\t\t\t} catch (error) {\n\t\t\t\tif (context.signal?.aborted) throw error;\n\t\t\t\tthis.emitHandlerError(extension.path, \"context\", error);\n\t\t\t}\n\t\t}\n\t\treturn currentMessages;\n\t}\n\n\tasync emitContext(messages: AgentMessage[]): Promise<AgentMessage[]> {\n\t\tconst context = this.createContext();\n\t\tlet currentMessages = structuredClone(messages);\n\t\tfor (const extension of this.extensions) {\n\t\t\tcurrentMessages = await this.emitContextToExtension(extension, currentMessages, context);\n\t\t}\n\t\treturn currentMessages;\n\t}\n\n\tprivate async emitBeforeProviderRequestToExtension(\n\t\textension: Extension,\n\t\tpayload: unknown,\n\t\tcontext: ExtensionContext,\n\t): Promise<unknown> {\n\t\tconst handlers = extension.handlers.get(\"before_provider_request\");\n\t\tif (!handlers || handlers.length === 0) return payload;\n\t\tlet currentPayload = payload;\n\t\tfor (const handler of handlers) {\n\t\t\ttry {\n\t\t\t\tconst event: BeforeProviderRequestEvent = {\n\t\t\t\t\ttype: \"before_provider_request\",\n\t\t\t\t\tpayload: currentPayload,\n\t\t\t\t};\n\t\t\t\tconst handlerResult = await handler(event, context);\n\t\t\t\tif (handlerResult !== undefined) currentPayload = handlerResult;\n\t\t\t} catch (error) {\n\t\t\t\tthis.emitHandlerError(extension.path, \"before_provider_request\", error);\n\t\t\t}\n\t\t}\n\t\treturn currentPayload;\n\t}\n\n\tasync emitBeforeProviderRequest(payload: unknown): Promise<unknown> {\n\t\tconst context = this.createContext();\n\t\tlet currentPayload = payload;\n\t\tfor (const extension of this.extensions) {\n\t\t\tcurrentPayload = await this.emitBeforeProviderRequestToExtension(extension, currentPayload, context);\n\t\t}\n\t\treturn currentPayload;\n\t}\n\n\tprivate async emitBeforeProviderHeadersToExtension(\n\t\textension: Extension,\n\t\theaders: ProviderHeaders,\n\t\tcontext: ExtensionContext,\n\t): Promise<void> {\n\t\tconst handlers = extension.handlers.get(\"before_provider_headers\");\n\t\tif (!handlers || handlers.length === 0) return;\n\t\tfor (const handler of handlers) {\n\t\t\ttry {\n\t\t\t\t// Handlers share one mutable map; their return values are intentionally ignored.\n\t\t\t\tconst event: BeforeProviderHeadersEvent = { type: \"before_provider_headers\", headers };\n\t\t\t\tawait handler(event, context);\n\t\t\t} catch (error) {\n\t\t\t\tthis.emitHandlerError(extension.path, \"before_provider_headers\", error);\n\t\t\t}\n\t\t}\n\t}\n\n\tasync emitBeforeProviderHeaders(headers: ProviderHeaders): Promise<ProviderHeaders> {\n\t\tconst context = this.createContext();\n\t\tfor (const extension of this.extensions) {\n\t\t\tawait this.emitBeforeProviderHeadersToExtension(extension, headers, context);\n\t\t}\n\t\treturn headers;\n\t}\n\tprivate async emitBeforeAgentStartToExtension(\n\t\textension: Extension,\n\t\tprompt: string,\n\t\timages: ImageContent[] | undefined,\n\t\tsystemPromptOptions: BuildSystemPromptOptions,\n\t\tcontext: ExtensionContext,\n\t\tstate: BeforeAgentStartDispatchState,\n\t): Promise<void> {\n\t\tconst handlers = extension.handlers.get(\"before_agent_start\");\n\t\tif (!handlers || handlers.length === 0) return;\n\n\t\tfor (const handler of handlers) {\n\t\t\ttry {\n\t\t\t\tconst event: BeforeAgentStartEvent = {\n\t\t\t\t\ttype: \"before_agent_start\",\n\t\t\t\t\tprompt,\n\t\t\t\t\timages,\n\t\t\t\t\tsystemPrompt: state.currentSystemPrompt,\n\t\t\t\t\tsystemPromptOptions,\n\t\t\t\t};\n\t\t\t\tconst result = (await handler(event, context)) as BeforeAgentStartEventResult | undefined;\n\t\t\t\tif (result?.message) state.messages.push(result.message);\n\t\t\t\tif (result?.systemPrompt !== undefined) {\n\t\t\t\t\tstate.currentSystemPrompt = result.systemPrompt;\n\t\t\t\t\tstate.systemPromptModified = true;\n\t\t\t\t}\n\t\t\t} catch (error) {\n\t\t\t\tthis.emitHandlerError(extension.path, \"before_agent_start\", error);\n\t\t\t}\n\t\t}\n\t}\n\n\tasync emitBeforeAgentStart(\n\t\tprompt: string,\n\t\timages: ImageContent[] | undefined,\n\t\tsystemPrompt: string,\n\t\tsystemPromptOptions: BuildSystemPromptOptions,\n\t): Promise<BeforeAgentStartCombinedResult | undefined> {\n\t\tconst state: BeforeAgentStartDispatchState = {\n\t\t\tcurrentSystemPrompt: systemPrompt,\n\t\t\tmessages: [],\n\t\t\tsystemPromptModified: false,\n\t\t};\n\t\tconst context = Object.defineProperties(\n\t\t\t{},\n\t\t\tObject.getOwnPropertyDescriptors(this.createContext()),\n\t\t) as ExtensionContext;\n\t\tcontext.getSystemPrompt = () => {\n\t\t\tthis.assertActive();\n\t\t\treturn state.currentSystemPrompt;\n\t\t};\n\n\t\tfor (const extension of this.extensions) {\n\t\t\tawait this.emitBeforeAgentStartToExtension(extension, prompt, images, systemPromptOptions, context, state);\n\t\t}\n\n\t\tif (state.messages.length === 0 && !state.systemPromptModified) return undefined;\n\t\treturn {\n\t\t\tmessages: state.messages.length > 0 ? state.messages : undefined,\n\t\t\tsystemPrompt: state.systemPromptModified ? state.currentSystemPrompt : undefined,\n\t\t};\n\t}\n\n\tprivate appendDiscoveredResourcePaths(\n\t\ttarget: ExtensionResourcePath[],\n\t\tpaths: string[] | undefined,\n\t\textensionPath: string,\n\t): void {\n\t\tif (!paths?.length) return;\n\t\ttarget.push(...paths.map((path) => ({ path, extensionPath })));\n\t}\n\n\tprivate mergeResourcesDiscoverResult(\n\t\tdiscovered: AggregatedResourcesDiscoverResult,\n\t\tresult: ResourcesDiscoverResult | undefined,\n\t\textensionPath: string,\n\t): void {\n\t\tthis.appendDiscoveredResourcePaths(discovered.skillPaths, result?.skillPaths, extensionPath);\n\t\tthis.appendDiscoveredResourcePaths(discovered.rulePaths, result?.rulePaths, extensionPath);\n\t\tthis.appendDiscoveredResourcePaths(discovered.promptPaths, result?.promptPaths, extensionPath);\n\t\tthis.appendDiscoveredResourcePaths(discovered.themePaths, result?.themePaths, extensionPath);\n\t}\n\n\tprivate async emitResourcesDiscoverToExtension(\n\t\textension: Extension,\n\t\tcwd: string,\n\t\treason: ResourcesDiscoverReason,\n\t\tcontext: ExtensionContext,\n\t\tdiscovered: AggregatedResourcesDiscoverResult,\n\t): Promise<void> {\n\t\tconst handlers = extension.handlers.get(\"resources_discover\");\n\t\tif (!handlers || handlers.length === 0) return;\n\n\t\tfor (const handler of handlers) {\n\t\t\ttry {\n\t\t\t\tconst event: ResourcesDiscoverEvent = { type: \"resources_discover\", cwd, reason };\n\t\t\t\tconst handlerResult = await handler(event, context);\n\t\t\t\tthis.mergeResourcesDiscoverResult(\n\t\t\t\t\tdiscovered,\n\t\t\t\t\thandlerResult as ResourcesDiscoverResult | undefined,\n\t\t\t\t\textension.path,\n\t\t\t\t);\n\t\t\t} catch (error) {\n\t\t\t\tthis.emitHandlerError(extension.path, \"resources_discover\", error);\n\t\t\t}\n\t\t}\n\t}\n\n\tasync emitResourcesDiscover(\n\t\tcwd: string,\n\t\treason: ResourcesDiscoverReason,\n\t): Promise<AggregatedResourcesDiscoverResult> {\n\t\tconst context = this.createContext();\n\t\tconst discovered: AggregatedResourcesDiscoverResult = {\n\t\t\tskillPaths: [],\n\t\t\trulePaths: [],\n\t\t\tpromptPaths: [],\n\t\t\tthemePaths: [],\n\t\t};\n\n\t\tfor (const extension of this.extensions) {\n\t\t\tawait this.emitResourcesDiscoverToExtension(extension, cwd, reason, context, discovered);\n\t\t}\n\t\treturn discovered;\n\t}\n\n\tprivate async emitInputToExtension(\n\t\textension: Extension,\n\t\tstate: InputDispatchState,\n\t\tsource: InputSource,\n\t\tstreamingBehavior: StreamingBehavior | undefined,\n\t\tcontext: ExtensionContext,\n\t): Promise<InputEventResult | undefined> {\n\t\tfor (const handler of extension.handlers.get(\"input\") ?? []) {\n\t\t\ttry {\n\t\t\t\tconst event: InputEvent = {\n\t\t\t\t\ttype: \"input\",\n\t\t\t\t\ttext: state.text,\n\t\t\t\t\timages: state.images,\n\t\t\t\t\tsource,\n\t\t\t\t\tstreamingBehavior,\n\t\t\t\t};\n\t\t\t\tconst result = (await handler(event, context)) as InputEventResult | undefined;\n\t\t\t\tif (result?.action === \"handled\") return result;\n\t\t\t\tif (result?.action === \"transform\") {\n\t\t\t\t\tstate.text = result.text;\n\t\t\t\t\tstate.images = result.images ?? state.images;\n\t\t\t\t}\n\t\t\t} catch (error) {\n\t\t\t\tthis.emitError({\n\t\t\t\t\textensionPath: extension.path,\n\t\t\t\t\tevent: \"input\",\n\t\t\t\t\terror: error instanceof Error ? error.message : String(error),\n\t\t\t\t\tstack: error instanceof Error ? error.stack : undefined,\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t\treturn undefined;\n\t}\n\n\t/** Emit input event. Transforms chain, \"handled\" short-circuits. */\n\tasync emitInput(\n\t\ttext: string,\n\t\timages: ImageContent[] | undefined,\n\t\tsource: InputSource,\n\t\tstreamingBehavior?: StreamingBehavior,\n\t): Promise<InputEventResult> {\n\t\tconst context = this.createContext();\n\t\tconst state: InputDispatchState = { text, images };\n\t\tfor (const extension of this.extensions) {\n\t\t\tconst result = await this.emitInputToExtension(extension, state, source, streamingBehavior, context);\n\t\t\tif (result) return result;\n\t\t}\n\t\treturn state.text !== text || state.images !== images\n\t\t\t? { action: \"transform\", text: state.text, images: state.images }\n\t\t\t: { action: \"continue\" };\n\t}\n}\n"]}
|
|
@@ -226,10 +226,21 @@ export interface ExtensionToolBackendExecOptions extends BashExecutorOptions {
|
|
|
226
226
|
/** Timeout in seconds. */
|
|
227
227
|
timeout?: number;
|
|
228
228
|
}
|
|
229
|
+
export interface ExtensionHostCommandOptions extends ExtensionToolBackendExecOptions {
|
|
230
|
+
/** Human-readable reason for this exact host command; Grip supplies the command and host cwd in the approval. */
|
|
231
|
+
question: string;
|
|
232
|
+
}
|
|
233
|
+
/** Arguments are passed directly to the executable, never to a shell. cwd is a guest directory. */
|
|
234
|
+
export interface ExtensionHostProcessOptions extends ExecOptions {
|
|
235
|
+
/** Extension-supplied approval question; Grip also displays exact executable, argv and mapped host cwd. */
|
|
236
|
+
question: string;
|
|
237
|
+
/** Optional unverified explanation to show separately in the approval dialog (may originate from the agent). */
|
|
238
|
+
explanation?: string;
|
|
239
|
+
}
|
|
229
240
|
export interface ExtensionContext {
|
|
230
241
|
/** UI methods for user interaction */
|
|
231
242
|
ui: ExtensionUIContext;
|
|
232
|
-
/** Whether UI
|
|
243
|
+
/** Whether a UI can answer dialogs (false in print and JSON modes; RPC clients can answer). */
|
|
233
244
|
hasUI: boolean;
|
|
234
245
|
/** Current working directory */
|
|
235
246
|
cwd: string;
|
|
@@ -237,12 +248,18 @@ export interface ExtensionContext {
|
|
|
237
248
|
toolOperations: BorrowedToolOperations;
|
|
238
249
|
/** Get active file/tool backend metadata. */
|
|
239
250
|
getToolBackendInfo(): ToolBackendInfo;
|
|
251
|
+
/** True while a session-owned sandbox daemon is connected (started or attached). Does not guarantee a host mount mapping. */
|
|
252
|
+
isSandbox(): boolean;
|
|
240
253
|
/** Inspect the AgentSession-owned LSP runtime without creating another manager. */
|
|
241
254
|
getLspStatus(): LspSessionStatus;
|
|
242
255
|
/** Replace the AgentSession-owned LSP configuration after validation. Relative paths are resolved from the session cwd. */
|
|
243
256
|
configureLsp(configuration: LspConfigurationLayer): Promise<ResolvedLspConfiguration>;
|
|
244
257
|
/** Execute a shell command through the active file/tool backend. */
|
|
245
258
|
execToolBackend(command: string, options?: ExtensionToolBackendExecOptions): Promise<BashResult>;
|
|
259
|
+
/** Execute on the host only after fresh user approval; available only for verified managed sandbox mounts. */
|
|
260
|
+
execHostCommand(command: string, options: ExtensionHostCommandOptions): Promise<BashResult>;
|
|
261
|
+
/** Spawn a host executable with argv (no shell), after per-call approval and guest-to-host cwd translation. */
|
|
262
|
+
execHostProcess(executable: string, args: string[], options: ExtensionHostProcessOptions): Promise<ExecResult>;
|
|
246
263
|
/** Current session (read-only) */
|
|
247
264
|
session: ReadonlySession;
|
|
248
265
|
/** Model registry for API key resolution */
|
|
@@ -1261,9 +1278,12 @@ export interface ExtensionContextActions {
|
|
|
1261
1278
|
getSystemPrompt: () => string;
|
|
1262
1279
|
getToolOperations: () => ToolOperations;
|
|
1263
1280
|
getToolBackendInfo: () => ToolBackendInfo;
|
|
1281
|
+
isSandbox: () => boolean;
|
|
1264
1282
|
getLspStatus: () => LspSessionStatus;
|
|
1265
1283
|
configureLsp: (configuration: LspConfigurationLayer) => Promise<ResolvedLspConfiguration>;
|
|
1266
1284
|
execToolBackend: (command: string, options?: ExtensionToolBackendExecOptions) => Promise<BashResult>;
|
|
1285
|
+
execHostCommand: (command: string, options: ExtensionHostCommandOptions) => Promise<BashResult>;
|
|
1286
|
+
execHostProcess: (executable: string, args: string[], options: ExtensionHostProcessOptions) => Promise<ExecResult>;
|
|
1267
1287
|
}
|
|
1268
1288
|
/**
|
|
1269
1289
|
* Actions for ExtensionCommandContext (ctx.* in command handlers).
|