@bastani/atomic 0.9.27 → 0.9.28-alpha.1
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 +28 -0
- package/dist/builtin/intercom/CHANGELOG.md +6 -0
- package/dist/builtin/intercom/broker/broker.ts +13 -1
- package/dist/builtin/intercom/package.json +2 -2
- package/dist/builtin/mcp/CHANGELOG.md +6 -0
- package/dist/builtin/mcp/package.json +1 -1
- package/dist/builtin/subagents/package.json +3 -3
- package/dist/builtin/web-access/index.bundle.mjs +194 -44
- package/dist/builtin/web-access/package.json +3 -3
- package/dist/builtin/workflows/CHANGELOG.md +8 -0
- package/dist/builtin/workflows/builtin/{chunk-gts8wgjr.js → chunk-f61w0hpm.js} +1 -1
- package/dist/builtin/workflows/builtin/{chunk-9bhs02gm.js → chunk-tecnpe8j.js} +1 -1
- package/dist/builtin/workflows/builtin/{chunk-gw7rghda.js → chunk-wz8v67bn.js} +1 -1
- package/dist/builtin/workflows/builtin/goal.js +2 -2
- package/dist/builtin/workflows/builtin/index.js +3 -3
- package/dist/builtin/workflows/builtin/ralph.js +2 -2
- package/dist/builtin/workflows/package.json +2 -2
- package/dist/builtin/workflows/src/extension/index.bundle.mjs +7958 -7904
- package/dist/builtin/workflows/src/index.js +11210 -11204
- package/dist/cli/args.d.ts +1 -0
- package/dist/cli/args.d.ts.map +1 -1
- package/dist/cli/args.js +12 -5
- package/dist/cli/args.js.map +1 -1
- package/dist/codemode-worker.js +99 -3
- package/dist/core/agent-session-events.js +1 -1
- package/dist/core/agent-session-events.js.map +1 -1
- package/dist/core/agent-session-extension-bindings.d.ts.map +1 -1
- package/dist/core/agent-session-extension-bindings.js +9 -5
- package/dist/core/agent-session-extension-bindings.js.map +1 -1
- package/dist/core/agent-session-methods.d.ts +2 -0
- package/dist/core/agent-session-methods.d.ts.map +1 -1
- package/dist/core/agent-session-methods.js.map +1 -1
- package/dist/core/agent-session-prompt.d.ts.map +1 -1
- package/dist/core/agent-session-prompt.js +5 -2
- package/dist/core/agent-session-prompt.js.map +1 -1
- package/dist/core/agent-session-services.d.ts +1 -0
- package/dist/core/agent-session-services.d.ts.map +1 -1
- package/dist/core/agent-session-services.js +1 -0
- package/dist/core/agent-session-services.js.map +1 -1
- package/dist/core/agent-session-state.d.ts.map +1 -1
- package/dist/core/agent-session-state.js +3 -2
- package/dist/core/agent-session-state.js.map +1 -1
- package/dist/core/agent-session-tool-registry.d.ts.map +1 -1
- package/dist/core/agent-session-tool-registry.js +10 -16
- package/dist/core/agent-session-tool-registry.js.map +1 -1
- package/dist/core/agent-session.d.ts +2 -0
- package/dist/core/agent-session.d.ts.map +1 -1
- package/dist/core/agent-session.js +5 -0
- package/dist/core/agent-session.js.map +1 -1
- package/dist/core/auth-storage-backends.d.ts.map +1 -1
- package/dist/core/auth-storage-backends.js +2 -1
- package/dist/core/auth-storage-backends.js.map +1 -1
- package/dist/core/auth-storage.d.ts +1 -1
- package/dist/core/auth-storage.d.ts.map +1 -1
- package/dist/core/auth-storage.js +15 -7
- package/dist/core/auth-storage.js.map +1 -1
- package/dist/core/azure-provider-compat.d.ts +8 -0
- package/dist/core/azure-provider-compat.d.ts.map +1 -0
- package/dist/core/azure-provider-compat.js +65 -0
- package/dist/core/azure-provider-compat.js.map +1 -0
- package/dist/core/child-session-options.d.ts +1 -1
- package/dist/core/child-session-options.d.ts.map +1 -1
- package/dist/core/child-session-options.js +11 -2
- package/dist/core/child-session-options.js.map +1 -1
- package/dist/core/extensions/api-types.d.ts +1 -0
- package/dist/core/extensions/api-types.d.ts.map +1 -1
- package/dist/core/extensions/api-types.js.map +1 -1
- package/dist/core/extensions/loader-api.d.ts.map +1 -1
- package/dist/core/extensions/loader-api.js +5 -0
- package/dist/core/extensions/loader-api.js.map +1 -1
- package/dist/core/extensions/loader-host-modules.d.ts +1 -0
- package/dist/core/extensions/loader-host-modules.d.ts.map +1 -1
- package/dist/core/extensions/loader-host-modules.js +12 -0
- package/dist/core/extensions/loader-host-modules.js.map +1 -1
- package/dist/core/extensions/runner.d.ts +1 -1
- package/dist/core/extensions/runner.d.ts.map +1 -1
- package/dist/core/extensions/runner.js +7 -2
- package/dist/core/extensions/runner.js.map +1 -1
- package/dist/core/extensions/tool-types.d.ts +2 -0
- package/dist/core/extensions/tool-types.d.ts.map +1 -1
- package/dist/core/extensions/tool-types.js.map +1 -1
- package/dist/core/fast-model-variants.d.ts +1 -1
- package/dist/core/fast-model-variants.js +1 -1
- package/dist/core/fast-model-variants.js.map +1 -1
- package/dist/core/keybindings.d.ts +4 -4
- package/dist/core/model-config.d.ts.map +1 -1
- package/dist/core/model-config.js +2 -1
- package/dist/core/model-config.js.map +1 -1
- package/dist/core/model-fallback-failures.d.ts.map +1 -1
- package/dist/core/model-fallback-failures.js +5 -1
- package/dist/core/model-fallback-failures.js.map +1 -1
- package/dist/core/model-resolver-cli.d.ts.map +1 -1
- package/dist/core/model-resolver-cli.js +5 -1
- package/dist/core/model-resolver-cli.js.map +1 -1
- package/dist/core/model-resolver-defaults.js +1 -1
- package/dist/core/model-resolver-defaults.js.map +1 -1
- package/dist/core/model-resolver-initial.d.ts.map +1 -1
- package/dist/core/model-resolver-initial.js +6 -1
- package/dist/core/model-resolver-initial.js.map +1 -1
- package/dist/core/model-resolver-patterns.d.ts.map +1 -1
- package/dist/core/model-resolver-patterns.js +2 -1
- package/dist/core/model-resolver-patterns.js.map +1 -1
- package/dist/core/model-resolver-scope.d.ts.map +1 -1
- package/dist/core/model-resolver-scope.js +3 -1
- package/dist/core/model-resolver-scope.js.map +1 -1
- package/dist/core/model-runtime-streaming.d.ts.map +1 -1
- package/dist/core/model-runtime-streaming.js +2 -0
- package/dist/core/model-runtime-streaming.js.map +1 -1
- package/dist/core/model-runtime.d.ts.map +1 -1
- package/dist/core/model-runtime.js +48 -22
- package/dist/core/model-runtime.js.map +1 -1
- package/dist/core/provider-composer-internal.d.ts.map +1 -1
- package/dist/core/provider-composer-internal.js +4 -1
- package/dist/core/provider-composer-internal.js.map +1 -1
- package/dist/core/provider-display-names.js +1 -1
- package/dist/core/provider-display-names.js.map +1 -1
- package/dist/core/resource-loader-core.d.ts +1 -0
- package/dist/core/resource-loader-core.d.ts.map +1 -1
- package/dist/core/resource-loader-core.js +4 -0
- package/dist/core/resource-loader-core.js.map +1 -1
- package/dist/core/resource-loader-internals.d.ts +1 -0
- package/dist/core/resource-loader-internals.d.ts.map +1 -1
- package/dist/core/resource-loader-internals.js.map +1 -1
- package/dist/core/resource-loader-reload.d.ts.map +1 -1
- package/dist/core/resource-loader-reload.js +28 -5
- package/dist/core/resource-loader-reload.js.map +1 -1
- package/dist/core/resource-loader-types.d.ts +2 -0
- package/dist/core/resource-loader-types.d.ts.map +1 -1
- package/dist/core/resource-loader-types.js.map +1 -1
- package/dist/core/sdk-types.d.ts +6 -4
- package/dist/core/sdk-types.d.ts.map +1 -1
- package/dist/core/sdk-types.js.map +1 -1
- package/dist/core/sdk.d.ts.map +1 -1
- package/dist/core/sdk.js +5 -3
- package/dist/core/sdk.js.map +1 -1
- package/dist/core/session-lifecycle-work.d.ts +2 -1
- package/dist/core/session-lifecycle-work.d.ts.map +1 -1
- package/dist/core/session-lifecycle-work.js +15 -1
- package/dist/core/session-lifecycle-work.js.map +1 -1
- package/dist/core/settings-manager-basic-accessors.d.ts.map +1 -1
- package/dist/core/settings-manager-basic-accessors.js +4 -4
- package/dist/core/settings-manager-basic-accessors.js.map +1 -1
- package/dist/core/settings-manager-core.d.ts.map +1 -1
- package/dist/core/settings-manager-core.js +2 -0
- package/dist/core/settings-manager-core.js.map +1 -1
- package/dist/core/settings-storage.d.ts.map +1 -1
- package/dist/core/settings-storage.js +2 -1
- package/dist/core/settings-storage.js.map +1 -1
- package/dist/core/skills.d.ts +1 -1
- package/dist/core/skills.d.ts.map +1 -1
- package/dist/core/skills.js +3 -1
- package/dist/core/skills.js.map +1 -1
- package/dist/core/system-prompt.d.ts +3 -0
- package/dist/core/system-prompt.d.ts.map +1 -1
- package/dist/core/system-prompt.js +7 -3
- package/dist/core/system-prompt.js.map +1 -1
- package/dist/core/tool-loadout.d.ts.map +1 -1
- package/dist/core/tool-loadout.js +8 -1
- package/dist/core/tool-loadout.js.map +1 -1
- package/dist/core/tool-selection.d.ts +13 -0
- package/dist/core/tool-selection.d.ts.map +1 -0
- package/dist/core/tool-selection.js +43 -0
- package/dist/core/tool-selection.js.map +1 -0
- package/dist/core/tools/read.d.ts +7 -0
- package/dist/core/tools/read.d.ts.map +1 -1
- package/dist/core/tools/read.js +11 -1
- package/dist/core/tools/read.js.map +1 -1
- package/dist/extensions/codemode/execute.d.ts.map +1 -1
- package/dist/extensions/codemode/execute.js +2 -1
- package/dist/extensions/codemode/execute.js.map +1 -1
- package/dist/extensions/codemode/index.d.ts.map +1 -1
- package/dist/extensions/codemode/index.js +1 -0
- package/dist/extensions/codemode/index.js.map +1 -1
- package/dist/extensions/codemode/tool.d.ts +4 -1
- package/dist/extensions/codemode/tool.d.ts.map +1 -1
- package/dist/extensions/codemode/tool.js +6 -3
- package/dist/extensions/codemode/tool.js.map +1 -1
- package/dist/extensions/mcp/client/oauth/flow.d.ts.map +1 -1
- package/dist/extensions/mcp/client/oauth/flow.js +14 -1
- package/dist/extensions/mcp/client/oauth/flow.js.map +1 -1
- package/dist/extensions/mcp/client/oauth/types.d.ts +1 -0
- package/dist/extensions/mcp/client/oauth/types.d.ts.map +1 -1
- package/dist/extensions/mcp/client/oauth/types.js.map +1 -1
- package/dist/extensions/mcp/index.js.map +1 -1
- package/dist/extensions/mcp/runtime.d.ts +5 -2
- package/dist/extensions/mcp/runtime.d.ts.map +1 -1
- package/dist/extensions/mcp/runtime.js +18 -4
- package/dist/extensions/mcp/runtime.js.map +1 -1
- package/dist/main.d.ts.map +1 -1
- package/dist/main.js +2 -0
- package/dist/main.js.map +1 -1
- package/dist/migrations-azure.d.ts +4 -0
- package/dist/migrations-azure.d.ts.map +1 -0
- package/dist/migrations-azure.js +41 -0
- package/dist/migrations-azure.js.map +1 -0
- package/dist/migrations.d.ts.map +1 -1
- package/dist/migrations.js +2 -0
- package/dist/migrations.js.map +1 -1
- package/dist/modes/interactive/components/chat-session-host-state.d.ts.map +1 -1
- package/dist/modes/interactive/components/chat-session-host-state.js +2 -1
- package/dist/modes/interactive/components/chat-session-host-state.js.map +1 -1
- package/dist/modes/interactive/components/chat-transcript.d.ts +2 -0
- package/dist/modes/interactive/components/chat-transcript.d.ts.map +1 -1
- package/dist/modes/interactive/components/chat-transcript.js +9 -3
- package/dist/modes/interactive/components/chat-transcript.js.map +1 -1
- package/dist/modes/interactive/theme/tui-theme.d.ts.map +1 -1
- package/dist/modes/interactive/theme/tui-theme.js +1 -0
- package/dist/modes/interactive/theme/tui-theme.js.map +1 -1
- package/dist/modes/interactive-engine/engine-args.d.ts.map +1 -1
- package/dist/modes/interactive-engine/engine-args.js +1 -0
- package/dist/modes/interactive-engine/engine-args.js.map +1 -1
- package/dist/utils/syntax-highlight.d.ts.map +1 -1
- package/dist/utils/syntax-highlight.js +6 -1
- package/dist/utils/syntax-highlight.js.map +1 -1
- package/docs/codemode.md +3 -2
- package/docs/extensions/api-reference.md +14 -0
- package/docs/extensions/authoring.md +1 -1
- package/docs/extensions.md +2 -0
- package/docs/keybindings.md +9 -9
- package/docs/mcp-servers.md +4 -0
- package/docs/providers.md +21 -2
- package/docs/reference/cli.md +10 -3
- package/docs/workflows/api-reference.md +3 -1
- package/docs/workflows/authoring.md +6 -2
- package/npm-shrinkwrap.json +78 -74
- package/package.json +9 -9
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runner.js","sourceRoot":"","sources":["../../../src/core/extensions/runner.ts"],"names":[],"mappings":"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","sourcesContent":["import { AsyncLocalStorage } from \"node:async_hooks\";\nimport type {\n\tCacheWarmingAction,\n\tCacheWarmingDecisionEvent,\n\tCacheWarmingDecisionEventResult,\n} from \"../cache-warmer.ts\";\nimport type { ExecuteToolOptions, ExtensionToolContext } from \"./context-types.ts\";\nimport { snapshotEventHandlers } from \"./runner-events.ts\";\n/**\n * Extension runner - executes extensions and manages their lifecycle.\n */\n\nimport type { Provider, ProviderHeaders } from \"@bastani/pi-ai\";\nimport type { Api, ImageContent, Model } from \"@bastani/pi-ai/compat\";\nimport type { AgentMessage } from \"@earendil-works/pi-agent-core\";\nimport type { KeyId } from \"@earendil-works/pi-tui\";\nimport type { ResourceDiagnostic } from \"../diagnostics.ts\";\nimport type { KeybindingsConfig } from \"../keybindings.ts\";\nimport type { ModelRegistry } from \"../model-registry.ts\";\nimport type { ScopedModel } from \"../model-resolver.ts\";\nimport { lifecycleScopeForOwner, sessionLifecycleScopes } from \"../session-lifecycle-scope.ts\";\nimport type { SessionManager } from \"../session-manager.ts\";\nimport type { BuildSystemPromptOptions } from \"../system-prompt.ts\";\nimport { normalizeBuildSystemPromptOptions } from \"../system-prompt.ts\";\nimport { presentQuestionnaire } from \"../tools/ask-user-question/ask-user-question.js\";\nimport {\n\tassertExtensionAction,\n\tbindExtensionWork,\n\tdrainExtensionWork,\n\textensionWorkOpen,\n\tresumeExtensionWork,\n\trevokeExtensionAuthority,\n\trunExtensionCleanup,\n\tsealExtensionWork,\n} from \"./extension-work.ts\";\nimport {\n\tcopyHostQuestionnaire,\n\ttype HostDiagnostic,\n\ttype HostInput,\n\tHostInputBridge,\n\thostInputError,\n} from \"./host-input.js\";\nimport { originalRegistrationCallback } from \"./loader-bindings.ts\";\nimport { boundExtensionRuntimes, runResourceRegistrationBatch } from \"./loader-runtime.ts\";\nimport {\n\tcreateExtensionCommandContext,\n\tcreateExtensionContext,\n\ttype ExtensionCommandContextSource,\n} from \"./runner-context.ts\";\nimport {\n\ttype BeforeAgentStartCombinedResult,\n\ttype BoundaryBaseEvent,\n\ttype BoundaryDispatchResult,\n\ttype ResourcesDiscoverCombinedResult,\n\ttype RunnerEmitEvent,\n\ttype RunnerEmitResult,\n\trunBeforeAgentStartHandlers,\n\trunBeforeProviderRequestHandlers,\n\trunBoundaryHandlers,\n\trunContextHandlers,\n\trunGenericHandlers,\n\trunInputHandlers,\n\trunMessageEndHandlers,\n\trunResourcesDiscoverHandlers,\n\trunToolCallHandlers,\n\trunToolResultHandlers,\n\trunUserBashHandlers,\n} from \"./runner-events.ts\";\nimport type {\n\tExtensionErrorListener,\n\tForkHandler,\n\tNavigateTreeHandler,\n\tNewSessionHandler,\n\tReloadHandler,\n\tShutdownHandler,\n\tSwitchSessionHandler,\n} from \"./runner-handlers.ts\";\nimport {\n\tcollectFlags,\n\tcollectMarkdownTransformers,\n\tcollectRegisteredTools,\n\tfindEntryRenderer,\n\tfindMessageRenderer,\n\tfindToolDefinition,\n\thasExtensionHandlers,\n\tresolveRegisteredCommands,\n} from \"./runner-registries.ts\";\nimport { resolveExtensionShortcuts } from \"./runner-shortcuts.ts\";\nimport { noOpUIContext } from \"./runner-ui.ts\";\nimport { STALE_EXTENSION_CONTEXT_MESSAGE } from \"./stale-context.ts\";\nimport type {\n\tBoundaryContextPreview,\n\tCompactOptions,\n\tContextUsage,\n\tEntryRenderer,\n\tExtension,\n\tExtensionActions,\n\tExtensionCommandContext,\n\tExtensionCommandContextActions,\n\tExtensionContext,\n\tExtensionContextActions,\n\tExtensionError,\n\tExtensionFlag,\n\tExtensionMode,\n\tExtensionRuntime,\n\tExtensionShortcut,\n\tExtensionUIContext,\n\tInputEventResult,\n\tInputSource,\n\tMarkdownTransformer,\n\tMessageEndEvent,\n\tMessageRenderer,\n\tOrchestrationContext,\n\tProviderConfig,\n\tRegisteredTool,\n\tResolvedCommand,\n\tResourcesDiscoverEvent,\n\tSessionBoundaryDraft,\n\tSessionShutdownEvent,\n\tSubagentChildPolicy,\n\tToolCallEvent,\n\tToolCallEventResult,\n\tToolRenderers,\n\tToolResultEvent,\n\tToolResultEventResult,\n\tUIPromptKind,\n\tUserBashEvent,\n\tUserBashEventResult,\n} from \"./types.ts\";\nimport type { SessionWorkflows } from \"./workflow-run-control.js\";\n\nexport type {\n\tExtensionErrorListener,\n\tForkHandler,\n\tNavigateTreeHandler,\n\tNewSessionHandler,\n\tReloadHandler,\n\tShutdownHandler,\n\tSwitchSessionHandler,\n} from \"./runner-handlers.ts\";\nexport { emitProjectTrustEvent } from \"./runner-project-trust.ts\";\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\tconst failures: Error[] = [];\n\t\tconst unsubscribe = extensionRunner.onError((failure) => {\n\t\t\tif (failure.event === \"session_shutdown\")\n\t\t\t\tfailures.push(new Error(`${failure.extensionPath}: ${failure.error}`));\n\t\t});\n\t\ttry {\n\t\t\tawait extensionRunner.emit(event);\n\t\t} catch (error) {\n\t\t\tconst causes = error instanceof AggregateError ? error.errors : [error];\n\t\t\tfailures.push(...causes.map((cause) => (cause instanceof Error ? cause : new Error(String(cause)))));\n\t\t} finally {\n\t\t\tunsubscribe();\n\t\t}\n\t\t// Shutdown may start tracked cleanup without returning its promise. Join it\n\t\t// after dispatch leaves its own work frame, including when a handler failed.\n\t\ttry {\n\t\t\tawait extensionRunner.drainWork();\n\t\t} catch (error) {\n\t\t\tfailures.push(error instanceof Error ? error : new Error(String(error)));\n\t\t}\n\t\tif (failures.length)\n\t\t\tthrow Object.assign(new AggregateError(failures, \"Extension shutdown failed\"), { code: \"ShutdownFailed\" });\n\t\treturn true;\n\t}\n\treturn false;\n}\n\nexport class ExtensionRunner {\n\tprivate extensions: Extension[];\n\tprivate runtime: ExtensionRuntime;\n\tprivate uiContext: ExtensionUIContext;\n\tprivate presentationUI?: ExtensionUIContext;\n\tprivate presentationInput?: HostInput;\n\tprivate humanInput?: HostInput | null;\n\tprivate humanInputBindingRevision = 0;\n\tprivate inputBridge = new HostInputBridge(\n\t\t() => this.sessionManager.getSessionId(),\n\t\t() => this.getSignalFn(),\n\t);\n\tprivate onDiagnostic?: (diagnostic: HostDiagnostic) => void;\n\tprivate mode: ExtensionMode = \"print\";\n\tprivate cwd: string;\n\tprivate sessionManager: SessionManager;\n\tprivate modelRegistry: ModelRegistry;\n\tprivate orchestrationContext: OrchestrationContext | undefined;\n\tprivate subagentPolicy: SubagentChildPolicy | undefined;\n\tprivate taskHostBinding: (() => import(\"../tasks/agent-adapter.js\").AgentTaskHost) | undefined;\n\t/** @internal Attach dispatch receipts to the owning session before startup. */\n\tbindWorkOwner(owner: object): void {\n\t\tbindExtensionWork(this.runtime, owner);\n\t}\n\tbindTaskHost(binding: () => import(\"../tasks/agent-adapter.js\").AgentTaskHost): void {\n\t\tthis.taskHostBinding = binding;\n\t}\n\tbindChildSessionOptions(\n\t\tresolver: import(\"../child-session-options.ts\").ChildSessionOptionsResolver | undefined,\n\t): void {\n\t\tthis.runtime.getChildSessionOptions = resolver;\n\t}\n\t/** The run-control implementation registered by the current extension generation, if any. */\n\tgetWorkflowRunControl(): SessionWorkflows | undefined {\n\t\treturn this.runtime.workflowRunControlHub.current();\n\t}\n\tgetChildHostBindings(): import(\"../agent-session-types.js\").ExtensionBindings {\n\t\treturn {\n\t\t\thumanInput: this.humanInput === undefined ? this.presentationInput : this.humanInput,\n\t\t\tonDiagnostic: this.onDiagnostic,\n\t\t};\n\t}\n\tprivate errorListeners: Set<ExtensionErrorListener> = new Set();\n\tprivate getModel: () => Model<Api> | undefined = () => undefined;\n\tprivate getScopedModels: () => readonly ScopedModel[] = () => [];\n\tprivate isIdleFn: () => boolean = () => true;\n\tprivate isProjectTrustedFn: () => 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 getSystemPromptOptionsFn: () => BuildSystemPromptOptions = () =>\n\t\tnormalizeBuildSystemPromptOptions({ cwd: this.cwd });\n\tprivate getSkillCatalogFn: ExtensionContextActions[\"getSkillCatalog\"] = undefined;\n\tprivate getRouterModelFn: ExtensionContextActions[\"getRouterModel\"] = undefined;\n\tprivate getModelRoutingFn: ExtensionContextActions[\"getModelRouting\"] = undefined;\n\tprivate executeToolFn: ExtensionContextActions[\"executeTool\"];\n\tprivate getCallableToolsFn: NonNullable<ExtensionContextActions[\"getCallableTools\"]> = () => [];\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\tprivate authorityRevoked = false;\n\tprivate readonly contextOwner = {};\n\tprivate uiPromptBinding = 0;\n\tprivate activeUIPrompt:\n\t\t| { depth: number; reason: \"ui_prompt\" | \"project_trust\"; kind: UIPromptKind; title: string | undefined }\n\t\t| undefined;\n\n\tconstructor(\n\t\textensions: Extension[],\n\t\truntime: ExtensionRuntime,\n\t\tcwd: string,\n\t\tsessionManager: SessionManager,\n\t\tmodelRegistry: ModelRegistry,\n\t\torchestrationContext?: OrchestrationContext,\n\t\tsubagentPolicy?: SubagentChildPolicy,\n\t) {\n\t\tthis.extensions = extensions;\n\t\tthis.runtime = runtime;\n\t\tsessionLifecycleScopes.set(this, lifecycleScopeForOwner(runtime));\n\t\tthis.runtime.workflowActivityHub.bindDispatcher((event, isCurrent) => this.emit(event, isCurrent));\n\t\tthis.uiContext = noOpUIContext;\n\t\tthis.cwd = cwd;\n\t\tthis.sessionManager = sessionManager;\n\t\tthis.modelRegistry = modelRegistry;\n\t\tthis.orchestrationContext = orchestrationContext;\n\t\tthis.subagentPolicy = subagentPolicy;\n\t}\n\n\tbindCore(\n\t\tactions: ExtensionActions,\n\t\tcontextActions: ExtensionContextActions,\n\t\tproviderActions?: {\n\t\t\tregisterProvider?: (providerOrName: Provider | string, config?: ProviderConfig) => void;\n\t\t\tunregisterProvider?: (name: string) => void;\n\t\t},\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.sendMessages = actions.sendMessages;\n\t\tthis.runtime.sendUserMessage = actions.sendUserMessage;\n\t\tboundExtensionRuntimes.add(this.runtime);\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.getScopedModels = contextActions.getScopedModels;\n\t\tthis.isIdleFn = contextActions.isIdle;\n\t\tthis.isProjectTrustedFn = contextActions.isProjectTrusted;\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.getSystemPromptOptionsFn =\n\t\t\tcontextActions.getSystemPromptOptions ?? (() => normalizeBuildSystemPromptOptions({ cwd: this.cwd }));\n\t\tthis.getSkillCatalogFn = contextActions.getSkillCatalog;\n\t\tthis.getRouterModelFn = contextActions.getRouterModel;\n\t\tthis.getModelRoutingFn = contextActions.getModelRouting;\n\t\tthis.executeToolFn = contextActions.executeTool;\n\t\tthis.getCallableToolsFn = contextActions.getCallableTools ?? (() => []);\n\t\tthis.runtime.getSettings = contextActions.getSettings;\n\n\t\t// Flush provider registrations queued during extension loading.\n\t\tfor (const registration of this.runtime.pendingProviderRegistrations) {\n\t\t\ttry {\n\t\t\t\tif (\"provider\" in registration) {\n\t\t\t\t\t(\n\t\t\t\t\t\tproviderActions?.registerProvider ??\n\t\t\t\t\t\t((provider: Provider) => this.modelRegistry.registerProvider(provider))\n\t\t\t\t\t)(registration.provider);\n\t\t\t\t} else {\n\t\t\t\t\t(\n\t\t\t\t\t\tproviderActions?.registerProvider ??\n\t\t\t\t\t\t((name: string, config?: ProviderConfig) => this.modelRegistry.registerProvider(name, config!))\n\t\t\t\t\t)(registration.name, registration.config);\n\t\t\t\t}\n\t\t\t} catch (error) {\n\t\t\t\tthis.emitError({\n\t\t\t\t\textensionPath: registration.extensionPath,\n\t\t\t\t\tevent: \"register_provider\",\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\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 = ((providerOrName: Provider | string, configOrPath?: ProviderConfig | string) => {\n\t\t\tif (typeof providerOrName === \"string\") {\n\t\t\t\tconst config = configOrPath as ProviderConfig;\n\t\t\t\tif (providerActions?.registerProvider) providerActions.registerProvider(providerOrName, config);\n\t\t\t\telse this.modelRegistry.registerProvider(providerOrName, config);\n\t\t\t} else if (providerActions?.registerProvider) providerActions.registerProvider(providerOrName);\n\t\t\telse this.modelRegistry.registerProvider(providerOrName);\n\t\t}) as ExtensionRuntime[\"registerProvider\"];\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\tsetHostBindings(\n\t\thumanInput: HostInput | null | undefined,\n\t\tonDiagnostic?: (diagnostic: HostDiagnostic) => void,\n\t\tbindingRevision = 0,\n\t): void {\n\t\tthis.humanInput = humanInput;\n\t\tthis.humanInputBindingRevision = bindingRevision;\n\t\tthis.onDiagnostic = onDiagnostic;\n\t\t// Internal builtin bridge: no new extension API and no interception of console.\n\t\tconst scope = lifecycleScopeForOwner(this.runtime);\n\t\tconst report = (diagnostic: Omit<HostDiagnostic, \"sessionId\">) => {\n\t\t\ttry {\n\t\t\t\tthis.onDiagnostic?.({ ...diagnostic, sessionId: this.sessionManager.getSessionId() });\n\t\t\t} catch {\n\t\t\t\t// Observers cannot replace the primary service failure.\n\t\t\t}\n\t\t};\n\t\t// Rebinding replaces the reporter, not the builtin service owner.\n\t\tObject.defineProperty(report, Symbol.for(\"atomic.builtin-owner.v1\"), { value: scope });\n\t\tReflect.set(scope, Symbol.for(\"atomic.builtin-diagnostic.v1\"), report);\n\t\tthis.refreshHostInput();\n\t}\n\n\tcancelHostInput(): void {\n\t\tthis.inputBridge.cancel();\n\t}\n\t/** @internal Join this generation's callbacks without draining its reload caller. */\n\tdrainWork(): Promise<void> {\n\t\treturn drainExtensionWork(this.runtime);\n\t}\n\n\t/** @internal Seal input admission without invalidating shutdown handlers. */\n\tsealHostInput(): void {\n\t\tthis.inputBridge.close();\n\t\tsealExtensionWork(this.runtime);\n\t}\n\n\t/** @internal A rejected transaction retains the live runner, but never revives captured dialogs. */\n\tresumeAfterRejectedReload(): void {\n\t\tif (this.staleMessage) return;\n\t\tresumeExtensionWork(this.runtime);\n\t\tthis.inputBridge = new HostInputBridge(\n\t\t\t() => this.sessionManager.getSessionId(),\n\t\t\t() => this.getSignalFn(),\n\t\t);\n\t\tthis.refreshHostInput();\n\t}\n\n\tprivate refreshHostInput(): void {\n\t\tconst ui = this.presentationUI;\n\t\tthis.inputBridge.bind(\n\t\t\tthis.humanInput === undefined ? this.presentationInput : (this.humanInput ?? undefined),\n\t\t\tthis.humanInput,\n\t\t\tthis.humanInputBindingRevision,\n\t\t);\n\t\tconst bridged = this.inputBridge.wrap(\n\t\t\tui ?? {\n\t\t\t\t...noOpUIContext,\n\t\t\t\tcustom: async () => {\n\t\t\t\t\tthrow hostInputError(\"HumanInputUnavailable\");\n\t\t\t\t},\n\t\t\t},\n\t\t\tthis.presentationInput,\n\t\t\tthis.orchestrationContext?.kind === \"workflow-stage\"\n\t\t\t\t? {\n\t\t\t\t\t\tworkflowRunId: this.orchestrationContext.workflowRunId,\n\t\t\t\t\t\tworkflowStageId: this.orchestrationContext.workflowStageId,\n\t\t\t\t\t}\n\t\t\t\t: {},\n\t\t);\n\t\tthis.uiContext = this.wrapUIPromptContext(bridged, this.uiPromptBinding);\n\t\tcopyHostQuestionnaire(bridged, this.uiContext);\n\t}\n\n\tsetUIContext(uiContext?: ExtensionUIContext, mode: ExtensionMode = \"print\"): void {\n\t\tif (uiContext !== this.presentationUI) {\n\t\t\tthis.endActiveUIPrompt();\n\t\t\t++this.uiPromptBinding;\n\t\t\tthis.presentationUI = uiContext;\n\t\t\tconst ui = uiContext;\n\t\t\tthis.presentationInput = ui\n\t\t\t\t? {\n\t\t\t\t\t\tconfirm: (title, message, options) => ui.confirm(title, message, options),\n\t\t\t\t\t\tselect: (title, choices, options) => ui.select(title, choices, options),\n\t\t\t\t\t\tinput: (title, placeholder, options) => ui.input(title, placeholder, options),\n\t\t\t\t\t\teditor: (title, initial, options) => ui.editor(title, initial, options),\n\t\t\t\t\t\tquestionnaire: (params, options) => presentQuestionnaire(ui, params, options.signal),\n\t\t\t\t\t}\n\t\t\t\t: undefined;\n\t\t\tthis.refreshHostInput();\n\t\t}\n\t\tthis.mode = mode;\n\t}\n\n\tprivate wrapUIPromptContext(ui: ExtensionUIContext, binding: number): ExtensionUIContext {\n\t\treturn {\n\t\t\t...ui,\n\t\t\tselect: (title, options, opts) =>\n\t\t\t\tthis.withUIPrompt(binding, \"select\", title, () => ui.select(title, options, opts)),\n\t\t\tconfirm: (title, message, opts) =>\n\t\t\t\tthis.withUIPrompt(binding, \"confirm\", title, () => ui.confirm(title, message, opts)),\n\t\t\tinput: (title, placeholder, opts) =>\n\t\t\t\tthis.withUIPrompt(binding, \"input\", title, () => ui.input(title, placeholder, opts)),\n\t\t\teditor: (title, prefill, opts) =>\n\t\t\t\tthis.withUIPrompt(binding, \"editor\", title, () => ui.editor(title, prefill, opts)),\n\t\t\tcustom: (factory, options) =>\n\t\t\t\toptions?.purpose === \"navigation\"\n\t\t\t\t\t? ui.custom(factory, options)\n\t\t\t\t\t: this.withUIPrompt(binding, \"custom\", undefined, () => ui.custom(factory, options)),\n\t\t};\n\t}\n\n\t/** Track a host-owned trust dialog using the current session's prompt lifecycle. */\n\twithProjectTrustPrompt<T>(kind: UIPromptKind, title: string, run: () => Promise<T>): Promise<T> {\n\t\treturn this.withUIPrompt(this.uiPromptBinding, kind, title, run, \"project_trust\");\n\t}\n\n\t/** Begin a host-owned trust span whose end arrives as a separate control frame. */\n\tbeginProjectTrustPrompt(kind: UIPromptKind, title: string): () => void {\n\t\treturn this.beginUIPrompt(kind, title, \"project_trust\");\n\t}\n\n\tprivate withUIPrompt<T>(\n\t\tbinding: number,\n\t\tkind: UIPromptKind,\n\t\ttitle: string | undefined,\n\t\trun: () => Promise<T>,\n\t\treason: \"ui_prompt\" | \"project_trust\" = \"ui_prompt\",\n\t): Promise<T> {\n\t\tif (binding !== this.uiPromptBinding) return run();\n\t\tconst finish = this.beginUIPrompt(kind, title, reason);\n\t\ttry {\n\t\t\treturn run().finally(finish);\n\t\t} catch (error) {\n\t\t\tfinish();\n\t\t\tthrow error;\n\t\t}\n\t}\n\n\tprivate beginUIPrompt(\n\t\tkind: UIPromptKind,\n\t\ttitle: string | undefined,\n\t\treason: \"ui_prompt\" | \"project_trust\",\n\t): () => void {\n\t\tlet prompt = this.activeUIPrompt;\n\t\tif (!prompt) {\n\t\t\tprompt = { depth: 0, reason, kind, title };\n\t\t\tthis.activeUIPrompt = prompt;\n\t\t\tthis.emitUIPromptEvent({\n\t\t\t\ttype: \"ui_prompt_start\",\n\t\t\t\treason,\n\t\t\t\tkind,\n\t\t\t\t...(title === undefined ? {} : { title }),\n\t\t\t});\n\t\t}\n\t\tprompt.depth += 1;\n\n\t\tlet finished = false;\n\t\treturn () => {\n\t\t\tif (finished) return;\n\t\t\tfinished = true;\n\t\t\tif (this.activeUIPrompt !== prompt) return;\n\n\t\t\tprompt.depth -= 1;\n\t\t\tif (prompt.depth === 0) this.endActiveUIPrompt(prompt);\n\t\t};\n\t}\n\n\tprivate endActiveUIPrompt(prompt = this.activeUIPrompt): void {\n\t\tif (!prompt || this.activeUIPrompt !== prompt) return;\n\t\tthis.activeUIPrompt = undefined;\n\t\tprompt.depth = 0;\n\t\tthis.emitUIPromptEvent({\n\t\t\ttype: \"ui_prompt_end\",\n\t\t\treason: prompt.reason,\n\t\t\tkind: prompt.kind,\n\t\t\t...(prompt.title === undefined ? {} : { title: prompt.title }),\n\t\t});\n\t}\n\n\tprivate readonly pendingUIPromptNotifications = new Set<Promise<void>>();\n\n\tprivate emitUIPromptEvent(event: Extract<RunnerEmitEvent, { type: \"ui_prompt_start\" | \"ui_prompt_end\" }>): void {\n\t\tconst delivery = Promise.resolve().then(async () => {\n\t\t\tawait this.emit(event);\n\t\t});\n\t\tthis.pendingUIPromptNotifications.add(delivery);\n\t\tvoid delivery.finally(() => this.pendingUIPromptNotifications.delete(delivery)).catch(() => {});\n\t}\n\n\t/** Settle only the deliveries pending at this boundary, without delaying prompt UI. */\n\tasync flushUIPromptNotifications(timeoutMs: number): Promise<{ timedOut: boolean }> {\n\t\tconst pending = [...this.pendingUIPromptNotifications];\n\t\tif (pending.length === 0) return { timedOut: false };\n\t\tlet timer: ReturnType<typeof setTimeout> | undefined;\n\t\ttry {\n\t\t\treturn await Promise.race([\n\t\t\t\tPromise.allSettled(pending).then(() => ({ timedOut: false })),\n\t\t\t\tnew Promise<{ timedOut: boolean }>((resolve) => {\n\t\t\t\t\ttimer = setTimeout(() => resolve({ timedOut: true }), timeoutMs);\n\t\t\t\t}),\n\t\t\t]);\n\t\t} finally {\n\t\t\tclearTimeout(timer);\n\t\t}\n\t}\n\n\tgetUIContext(): ExtensionUIContext {\n\t\treturn this.uiContext;\n\t}\n\n\thasUI(): boolean {\n\t\treturn this.presentationUI !== undefined;\n\t}\n\n\tgetExtensionPaths(): string[] {\n\t\treturn this.extensions.map((extension) => extension.path);\n\t}\n\n\t/** Get all registered tools from all extensions (first registration per name wins). */\n\tgetAllRegisteredTools(): RegisteredTool[] {\n\t\treturn collectRegisteredTools(this.extensions);\n\t}\n\n\t/** Get a tool definition by name. Returns undefined if not found. */\n\tgetToolDefinition(toolName: string): RegisteredTool[\"definition\"] | undefined {\n\t\treturn findToolDefinition(this.extensions, toolName);\n\t}\n\n\tgetFlags(): Map<string, ExtensionFlag> {\n\t\treturn collectFlags(this.extensions);\n\t}\n\n\tsetFlagValue(name: string, value: boolean | string): void {\n\t\tthis.runtime.flagValues.set(name, value);\n\t\tthis.runtime.explicitFlagNames ??= new Set();\n\t\tthis.runtime.explicitFlagNames.add(name);\n\t}\n\n\tgetFlagValues(): Map<string, boolean | string> {\n\t\treturn new Map(this.runtime.flagValues);\n\t}\n\n\tgetExplicitFlagValues(): Map<string, boolean | string> {\n\t\tconst explicitFlagNames = this.runtime.explicitFlagNames ?? new Set<string>();\n\t\treturn new Map([...this.runtime.flagValues].filter(([name]) => explicitFlagNames.has(name)));\n\t}\n\n\tgetShortcuts(resolvedKeybindings: KeybindingsConfig): Map<KeyId, ExtensionShortcut> {\n\t\tconst resolution = resolveExtensionShortcuts(this.extensions, resolvedKeybindings, this.hasUI());\n\t\tthis.shortcutDiagnostics = resolution.diagnostics;\n\t\tfor (const [key, shortcut] of resolution.shortcuts) {\n\t\t\tresolution.shortcuts.set(key, {\n\t\t\t\t...shortcut,\n\t\t\t\thandler: (context) => {\n\t\t\t\t\tif (!extensionWorkOpen(this.runtime)) return Promise.reject(hostInputError(\"SessionClosed\"));\n\t\t\t\t\treturn runResourceRegistrationBatch(this.runtime, async () => shortcut.handler(context));\n\t\t\t\t},\n\t\t\t});\n\t\t}\n\t\treturn resolution.shortcuts;\n\t}\n\n\tgetShortcutDiagnostics(): ResourceDiagnostic[] {\n\t\treturn this.shortcutDiagnostics;\n\t}\n\n\trevokeAuthority(): void {\n\t\tthis.authorityRevoked = true;\n\t\trevokeExtensionAuthority(this.runtime);\n\t}\n\n\tinvalidate(message = STALE_EXTENSION_CONTEXT_MESSAGE): void {\n\t\tthis.sealHostInput();\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.authorityRevoked) this.runtime.assertActive();\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\tthis.onDiagnostic?.({\n\t\t\tlevel: \"error\",\n\t\t\tsource: error.extensionPath,\n\t\t\tmessage: `Extension ${error.event} failed`,\n\t\t\tsessionId: this.sessionManager.getSessionId(),\n\t\t});\n\t\tfor (const listener of this.errorListeners) {\n\t\t\tlistener(error);\n\t\t}\n\t}\n\n\thasHandlers(eventType: string): boolean {\n\t\treturn hasExtensionHandlers(this.extensions, eventType);\n\t}\n\n\tgetMessageRenderer(customType: string): MessageRenderer | undefined {\n\t\treturn findMessageRenderer(this.extensions, customType);\n\t}\n\n\tgetMarkdownTransformers(): MarkdownTransformer[] {\n\t\treturn collectMarkdownTransformers(this.extensions);\n\t}\n\n\t/** Renderers of calls to `toolName`: extension resolvers in load order, then `base`. */\n\tresolveToolRenderers(toolName: string, base: () => ToolRenderers | undefined): ToolRenderers | undefined {\n\t\tconst resolvers = this.extensions.flatMap((ext) => ext.toolRenderers ?? []);\n\t\tconst resolve = (index: number): ToolRenderers | undefined =>\n\t\t\tindex < resolvers.length ? resolvers[index](toolName, () => resolve(index + 1)) : base();\n\t\treturn resolve(0);\n\t}\n\n\tgetEntryRenderer(customType: string): EntryRenderer | undefined {\n\t\tconst renderer = findEntryRenderer(this.extensions, customType);\n\t\treturn renderer ? originalRegistrationCallback(renderer) : undefined;\n\t}\n\n\t/** Invoke the session-owned registration without changing discovery identity. */\n\trenderEntry(customType: string, ...args: Parameters<EntryRenderer>): ReturnType<EntryRenderer> {\n\t\tthis.assertActive();\n\t\treturn findEntryRenderer(this.extensions, customType)?.(...args);\n\t}\n\n\tgetRegisteredCommands(): ResolvedCommand[] {\n\t\tthis.commandDiagnostics = [];\n\t\treturn resolveRegisteredCommands(this.extensions);\n\t}\n\n\tgetCommandDiagnostics(): ResourceDiagnostic[] {\n\t\treturn this.commandDiagnostics;\n\t}\n\n\tgetCommand(name: string): ResolvedCommand | undefined {\n\t\tconst command = resolveRegisteredCommands(this.extensions).find((entry) => entry.invocationName === name);\n\t\tif (!command) return undefined;\n\t\treturn {\n\t\t\t...command,\n\t\t\thandler: (args, context) =>\n\t\t\t\trunResourceRegistrationBatch(this.runtime, async () => command.handler(args, context)),\n\t\t};\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\tcreateContext(): ExtensionContext {\n\t\treturn createExtensionContext(this.createContextSource(), this.contextOwner);\n\t}\n\n\t/** Bound to the actual executing parent, not an extension-supplied caller identity. */\n\tcreateToolContext(toolCallId: string, signal: AbortSignal | undefined): ExtensionToolContext {\n\t\tconst invoke = AsyncLocalStorage.bind(async (name: string, args: unknown, options: ExecuteToolOptions = {}) => {\n\t\t\tthis.assertActive();\n\t\t\tif (signal?.aborted) throw new Error(\"Calling tool execution has ended\");\n\t\t\tif (!this.executeToolFn)\n\t\t\t\treturn {\n\t\t\t\t\ttoolCall: { type: \"toolCall\" as const, id: `${toolCallId}/0`, name, arguments: {} },\n\t\t\t\t\tresult: {\n\t\t\t\t\t\tcontent: [{ type: \"text\" as const, text: \"Nested tool calls are not available in this context\" }],\n\t\t\t\t\t\tdetails: {},\n\t\t\t\t\t},\n\t\t\t\t\tisError: true,\n\t\t\t\t};\n\t\t\tconst callSignal =\n\t\t\t\tsignal && options.signal ? AbortSignal.any([signal, options.signal]) : (options.signal ?? signal);\n\t\t\treturn this.executeToolFn(toolCallId, name, args, { ...options, signal: callSignal });\n\t\t});\n\t\treturn Object.defineProperties(this.createContext() as ExtensionToolContext, {\n\t\t\ttools: {\n\t\t\t\tget: () => {\n\t\t\t\t\tthis.assertActive();\n\t\t\t\t\treturn this.getCallableToolsFn();\n\t\t\t\t},\n\t\t\t},\n\t\t\texecuteTool: { value: invoke },\n\t\t});\n\t}\n\n\tcreateCommandContext(): ExtensionCommandContext {\n\t\treturn createExtensionCommandContext(this.createContextSource(), this.contextOwner);\n\t}\n\n\tprivate createContextSource(): ExtensionCommandContextSource {\n\t\treturn {\n\t\t\tassertActive: () => this.assertActive(),\n\t\t\tassertAction: () => assertExtensionAction(this.runtime),\n\t\t\tgetChildSessionOptions: (options) => this.runtime.getChildSessionOptions?.(options) ?? options,\n\t\t\tgetExtensionPaths: () => this.getExtensionPaths(),\n\t\t\tobserveWorkflowActivity: (observer) => this.runtime.workflowActivityHub.observeWorkflowActivity(observer),\n\t\t\t...(this.taskHostBinding ? { getAgentTaskHost: this.taskHostBinding } : {}),\n\t\t\tgetUIContext: () => this.uiContext,\n\t\t\tgetMode: () => this.mode,\n\t\t\thasUI: () => this.hasUI(),\n\t\t\thasHumanInput: () => this.inputBridge.available,\n\t\t\tgetCwd: () => this.cwd,\n\t\t\tgetSessionManager: () => this.sessionManager,\n\t\t\tgetModelRegistry: () => this.modelRegistry,\n\t\t\tgetModel: () => this.getModel(),\n\t\t\tgetSubagentPolicy: () => this.subagentPolicy,\n\t\t\tgetScopedModels: () => this.getScopedModels(),\n\t\t\tgetThinkingLevel: () => this.runtime.getThinkingLevel(),\n\t\t\tgetOrchestrationContext: () => this.orchestrationContext,\n\t\t\tisIdle: () => this.isIdleFn(),\n\t\t\tisProjectTrusted: () => this.isProjectTrustedFn(),\n\t\t\tgetSignal: () => this.getSignalFn(),\n\t\t\tabort: () => this.abortFn(),\n\t\t\thasPendingMessages: () => this.hasPendingMessagesFn(),\n\t\t\tshutdown: () => this.shutdownHandler(),\n\t\t\tgetContextUsage: () => this.getContextUsageFn(),\n\t\t\tcompact: (options) => this.compactFn(options),\n\t\t\tgetSystemPrompt: () => this.getSystemPromptFn(),\n\t\t\t...(this.getSkillCatalogFn ? { getSkillCatalog: () => this.getSkillCatalogFn!() } : {}),\n\t\t\t...(this.getRouterModelFn ? { getRouterModel: () => this.getRouterModelFn!() } : {}),\n\t\t\t...(this.getModelRoutingFn ? { getModelRouting: () => this.getModelRoutingFn!() } : {}),\n\t\t\tgetSystemPromptOptions: () => this.getSystemPromptOptionsFn(),\n\t\t\twaitForIdle: () => this.waitForIdleFn(),\n\t\t\tnewSession: (options) => this.newSessionHandler(options),\n\t\t\tfork: (entryId, options) => this.forkHandler(entryId, options),\n\t\t\tnavigateTree: (targetId, options) => this.navigateTreeHandler(targetId, options),\n\t\t\tswitchSession: (sessionPath, options) => this.switchSessionHandler(sessionPath, options),\n\t\t\treload: () => this.reloadHandler(),\n\t\t};\n\t}\n\n\t/** Keep startup reporters bound while adding the now-authorized extension set. */\n\tattachStartupExtensions(extensions: Extension[]): () => Promise<void> {\n\t\tconst newcomers = extensions.filter((extension) => !this.extensions.includes(extension));\n\t\tthis.extensions = [...this.extensions, ...newcomers];\n\t\treturn async () => {\n\t\t\tawait runResourceRegistrationBatch(this.runtime, () =>\n\t\t\t\trunGenericHandlers(\n\t\t\t\t\tthis.extensions.filter((extension) => newcomers.includes(extension)),\n\t\t\t\t\tthis.createContext(),\n\t\t\t\t\t{ type: \"session_start\", reason: \"startup\" },\n\t\t\t\t\t(error) => this.emitError(error),\n\t\t\t\t),\n\t\t\t);\n\t\t};\n\t}\n\n\tasync emit<TEvent extends RunnerEmitEvent>(\n\t\tevent: TEvent,\n\t\tisCurrent?: () => boolean,\n\t\tadmitted = false,\n\t): Promise<RunnerEmitResult<TEvent>> {\n\t\tif (!admitted && event.type !== \"session_shutdown\" && !extensionWorkOpen(this.runtime))\n\t\t\treturn undefined as RunnerEmitResult<TEvent>;\n\t\tconst observerFailures: Error[] = [];\n\t\tconst dispatch = () =>\n\t\t\trunGenericHandlers(\n\t\t\t\tthis.extensions,\n\t\t\t\tthis.createContext(),\n\t\t\t\tevent,\n\t\t\t\t(error) => {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tthis.emitError(error);\n\t\t\t\t\t} catch (cause) {\n\t\t\t\t\t\tif (event.type !== \"session_shutdown\") throw cause;\n\t\t\t\t\t\tobserverFailures.push(\n\t\t\t\t\t\t\tnew Error(`${error.extensionPath}: ${error.error}`),\n\t\t\t\t\t\t\tnew Error(\"Shutdown observer failed\", { cause }),\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tisCurrent,\n\t\t\t);\n\t\tconst result = await runResourceRegistrationBatch(\n\t\t\tthis.runtime,\n\t\t\t() => (event.type === \"session_shutdown\" ? runExtensionCleanup(this.runtime, dispatch) : dispatch()),\n\t\t\tadmitted || event.type === \"session_shutdown\",\n\t\t);\n\t\tif (observerFailures.length)\n\t\t\tthrow Object.assign(new AggregateError(observerFailures, \"Shutdown observers failed\"), {\n\t\t\t\tcode: \"ShutdownFailed\",\n\t\t\t});\n\t\treturn result;\n\t}\n\n\tasync emitMessageEnd(event: MessageEndEvent, admitted = false): Promise<AgentMessage | undefined> {\n\t\treturn runResourceRegistrationBatch(\n\t\t\tthis.runtime,\n\t\t\t() => runMessageEndHandlers(this.extensions, this.createContext(), event, (error) => this.emitError(error)),\n\t\t\tadmitted,\n\t\t);\n\t}\n\n\tasync emitToolResult(event: ToolResultEvent, admitted = false): Promise<ToolResultEventResult | undefined> {\n\t\treturn runResourceRegistrationBatch(\n\t\t\tthis.runtime,\n\t\t\t() => runToolResultHandlers(this.extensions, this.createContext(), event, (error) => this.emitError(error)),\n\t\t\tadmitted,\n\t\t);\n\t}\n\n\tasync emitToolCall(event: ToolCallEvent): Promise<ToolCallEventResult | undefined> {\n\t\treturn runResourceRegistrationBatch(this.runtime, () =>\n\t\t\trunToolCallHandlers(this.extensions, this.createContext(), event),\n\t\t);\n\t}\n\n\tasync emitUserBash(event: UserBashEvent): Promise<UserBashEventResult | undefined> {\n\t\treturn runResourceRegistrationBatch(this.runtime, () =>\n\t\t\trunUserBashHandlers(this.extensions, this.createContext(), event, (error) => this.emitError(error)),\n\t\t);\n\t}\n\n\tasync emitBoundary(\n\t\tbaseEvent: BoundaryBaseEvent,\n\t\tbuildContext: (entries: SessionBoundaryDraft[]) => BoundaryContextPreview | Promise<BoundaryContextPreview>,\n\t): Promise<BoundaryDispatchResult> {\n\t\treturn runResourceRegistrationBatch(\n\t\t\tthis.runtime,\n\t\t\t() =>\n\t\t\t\trunBoundaryHandlers(this.extensions, this.createContext(), baseEvent, buildContext, (error) =>\n\t\t\t\t\tthis.emitError(error),\n\t\t\t\t),\n\t\t\ttrue,\n\t\t);\n\t}\n\n\tasync emitContext(messages: AgentMessage[]): Promise<AgentMessage[]> {\n\t\treturn runResourceRegistrationBatch(this.runtime, () =>\n\t\t\trunContextHandlers(this.extensions, this.createContext(), messages, (error) => this.emitError(error)),\n\t\t);\n\t}\n\n\temitBeforeProviderRequest(payload: unknown): Promise<unknown> {\n\t\treturn runResourceRegistrationBatch(this.runtime, () =>\n\t\t\trunBeforeProviderRequestHandlers(this.extensions, this.createContext(), payload, (error) =>\n\t\t\t\tthis.emitError(error),\n\t\t\t),\n\t\t);\n\t}\n\n\tasync emitCacheWarmingDecision(event: CacheWarmingDecisionEvent): Promise<CacheWarmingAction> {\n\t\tlet action = event.action;\n\t\tconst ctx = this.createContext();\n\t\tfor (const { ext, handlers } of snapshotEventHandlers(this.extensions, event.type)) {\n\t\t\tfor (const handler of handlers) {\n\t\t\t\ttry {\n\t\t\t\t\tconst result = (await handler({ ...event, action }, ctx)) as CacheWarmingDecisionEventResult | undefined;\n\t\t\t\t\tif (result?.action === \"warm\" || result?.action === \"stop\") action = result.action;\n\t\t\t\t} catch (error) {\n\t\t\t\t\tthis.emitError({\n\t\t\t\t\t\textensionPath: ext.path,\n\t\t\t\t\t\tevent: event.type,\n\t\t\t\t\t\terror: error instanceof Error ? error.message : String(error),\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn action;\n\t}\n\n\tasync emitBeforeProviderHeaders(headers: ProviderHeaders): Promise<ProviderHeaders> {\n\t\treturn runResourceRegistrationBatch(this.runtime, async () => {\n\t\t\tfor (const { ext: extension, handlers } of snapshotEventHandlers(this.extensions, \"before_provider_headers\")) {\n\t\t\t\tfor (const handler of handlers) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tawait handler({ type: \"before_provider_headers\", headers }, this.createContext());\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tthis.emitError({\n\t\t\t\t\t\t\textensionPath: extension.path,\n\t\t\t\t\t\t\tevent: \"before_provider_headers\",\n\t\t\t\t\t\t\terror: error instanceof Error ? error.message : String(error),\n\t\t\t\t\t\t\tstack: error instanceof Error ? error.stack : undefined,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn headers;\n\t\t});\n\t}\n\n\temitBeforeAgentStart(\n\t\tprompt: string,\n\t\timages: ImageContent[] | undefined,\n\t\tsystemPromptOptions: BuildSystemPromptOptions,\n\t): Promise<BeforeAgentStartCombinedResult> {\n\t\treturn runResourceRegistrationBatch(this.runtime, () =>\n\t\t\trunBeforeAgentStartHandlers(\n\t\t\t\tthis.extensions,\n\t\t\t\tthis.createContext(),\n\t\t\t\t() => this.assertActive(),\n\t\t\t\tprompt,\n\t\t\t\timages,\n\t\t\t\tsystemPromptOptions,\n\t\t\t\t(error) => this.emitError(error),\n\t\t\t),\n\t\t);\n\t}\n\n\temitResourcesDiscover(\n\t\tcwd: string,\n\t\treason: ResourcesDiscoverEvent[\"reason\"],\n\t): Promise<ResourcesDiscoverCombinedResult> {\n\t\treturn runResourceRegistrationBatch(this.runtime, () =>\n\t\t\trunResourcesDiscoverHandlers(this.extensions, this.createContext(), cwd, reason, (error) =>\n\t\t\t\tthis.emitError(error),\n\t\t\t),\n\t\t);\n\t}\n\n\t/** Emit input event. Transforms chain, \"handled\" short-circuits. */\n\temitInput(\n\t\ttext: string,\n\t\timages: ImageContent[] | undefined,\n\t\tsource: InputSource,\n\t\tstreamingBehavior?: \"steer\" | \"followUp\",\n\t): Promise<InputEventResult> {\n\t\treturn runResourceRegistrationBatch(this.runtime, () =>\n\t\t\trunInputHandlers(this.extensions, this.createContext(), text, images, source, streamingBehavior, (error) =>\n\t\t\t\tthis.emitError(error),\n\t\t\t),\n\t\t);\n\t}\n}\n"]}
|
|
1
|
+
{"version":3,"file":"runner.js","sourceRoot":"","sources":["../../../src/core/extensions/runner.ts"],"names":[],"mappings":"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","sourcesContent":["import { AsyncLocalStorage } from \"node:async_hooks\";\nimport { raceWithAbortSignal } from \"../../utils/abort.js\";\nimport type {\n\tCacheWarmingAction,\n\tCacheWarmingDecisionEvent,\n\tCacheWarmingDecisionEventResult,\n} from \"../cache-warmer.ts\";\nimport type { ExecuteToolOptions, ExtensionToolContext } from \"./context-types.ts\";\nimport { snapshotEventHandlers } from \"./runner-events.ts\";\n/**\n * Extension runner - executes extensions and manages their lifecycle.\n */\n\nimport type { Provider, ProviderHeaders } from \"@bastani/pi-ai\";\nimport type { Api, ImageContent, Model } from \"@bastani/pi-ai/compat\";\nimport type { AgentMessage } from \"@earendil-works/pi-agent-core\";\nimport type { KeyId } from \"@earendil-works/pi-tui\";\nimport type { ResourceDiagnostic } from \"../diagnostics.ts\";\nimport type { KeybindingsConfig } from \"../keybindings.ts\";\nimport type { ModelRegistry } from \"../model-registry.ts\";\nimport type { ScopedModel } from \"../model-resolver.ts\";\nimport { lifecycleScopeForOwner, sessionLifecycleScopes } from \"../session-lifecycle-scope.ts\";\nimport type { SessionManager } from \"../session-manager.ts\";\nimport type { BuildSystemPromptOptions } from \"../system-prompt.ts\";\nimport { normalizeBuildSystemPromptOptions } from \"../system-prompt.ts\";\nimport { presentQuestionnaire } from \"../tools/ask-user-question/ask-user-question.js\";\nimport {\n\tassertExtensionAction,\n\tbindExtensionWork,\n\tdrainExtensionWork,\n\textensionWorkOpen,\n\tresumeExtensionWork,\n\trevokeExtensionAuthority,\n\trunExtensionCleanup,\n\tsealExtensionWork,\n} from \"./extension-work.ts\";\nimport {\n\tcopyHostQuestionnaire,\n\ttype HostDiagnostic,\n\ttype HostInput,\n\tHostInputBridge,\n\thostInputError,\n} from \"./host-input.js\";\nimport { originalRegistrationCallback } from \"./loader-bindings.ts\";\nimport { boundExtensionRuntimes, runResourceRegistrationBatch } from \"./loader-runtime.ts\";\nimport {\n\tcreateExtensionCommandContext,\n\tcreateExtensionContext,\n\ttype ExtensionCommandContextSource,\n} from \"./runner-context.ts\";\nimport {\n\ttype BeforeAgentStartCombinedResult,\n\ttype BoundaryBaseEvent,\n\ttype BoundaryDispatchResult,\n\ttype ResourcesDiscoverCombinedResult,\n\ttype RunnerEmitEvent,\n\ttype RunnerEmitResult,\n\trunBeforeAgentStartHandlers,\n\trunBeforeProviderRequestHandlers,\n\trunBoundaryHandlers,\n\trunContextHandlers,\n\trunGenericHandlers,\n\trunInputHandlers,\n\trunMessageEndHandlers,\n\trunResourcesDiscoverHandlers,\n\trunToolCallHandlers,\n\trunToolResultHandlers,\n\trunUserBashHandlers,\n} from \"./runner-events.ts\";\nimport type {\n\tExtensionErrorListener,\n\tForkHandler,\n\tNavigateTreeHandler,\n\tNewSessionHandler,\n\tReloadHandler,\n\tShutdownHandler,\n\tSwitchSessionHandler,\n} from \"./runner-handlers.ts\";\nimport {\n\tcollectFlags,\n\tcollectMarkdownTransformers,\n\tcollectRegisteredTools,\n\tfindEntryRenderer,\n\tfindMessageRenderer,\n\tfindToolDefinition,\n\thasExtensionHandlers,\n\tresolveRegisteredCommands,\n} from \"./runner-registries.ts\";\nimport { resolveExtensionShortcuts } from \"./runner-shortcuts.ts\";\nimport { noOpUIContext } from \"./runner-ui.ts\";\nimport { STALE_EXTENSION_CONTEXT_MESSAGE } from \"./stale-context.ts\";\nimport type {\n\tBoundaryContextPreview,\n\tCompactOptions,\n\tContextUsage,\n\tEntryRenderer,\n\tExtension,\n\tExtensionActions,\n\tExtensionCommandContext,\n\tExtensionCommandContextActions,\n\tExtensionContext,\n\tExtensionContextActions,\n\tExtensionError,\n\tExtensionFlag,\n\tExtensionMode,\n\tExtensionRuntime,\n\tExtensionShortcut,\n\tExtensionUIContext,\n\tInputEventResult,\n\tInputSource,\n\tMarkdownTransformer,\n\tMessageEndEvent,\n\tMessageRenderer,\n\tOrchestrationContext,\n\tProviderConfig,\n\tRegisteredTool,\n\tResolvedCommand,\n\tResourcesDiscoverEvent,\n\tSessionBoundaryDraft,\n\tSessionShutdownEvent,\n\tSubagentChildPolicy,\n\tToolCallEvent,\n\tToolCallEventResult,\n\tToolRenderers,\n\tToolResultEvent,\n\tToolResultEventResult,\n\tUIPromptKind,\n\tUserBashEvent,\n\tUserBashEventResult,\n} from \"./types.ts\";\nimport type { SessionWorkflows } from \"./workflow-run-control.js\";\n\nexport type {\n\tExtensionErrorListener,\n\tForkHandler,\n\tNavigateTreeHandler,\n\tNewSessionHandler,\n\tReloadHandler,\n\tShutdownHandler,\n\tSwitchSessionHandler,\n} from \"./runner-handlers.ts\";\nexport { emitProjectTrustEvent } from \"./runner-project-trust.ts\";\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\tconst failures: Error[] = [];\n\t\tconst unsubscribe = extensionRunner.onError((failure) => {\n\t\t\tif (failure.event === \"session_shutdown\")\n\t\t\t\tfailures.push(new Error(`${failure.extensionPath}: ${failure.error}`));\n\t\t});\n\t\ttry {\n\t\t\tawait extensionRunner.emit(event);\n\t\t} catch (error) {\n\t\t\tconst causes = error instanceof AggregateError ? error.errors : [error];\n\t\t\tfailures.push(...causes.map((cause) => (cause instanceof Error ? cause : new Error(String(cause)))));\n\t\t} finally {\n\t\t\tunsubscribe();\n\t\t}\n\t\t// Shutdown may start tracked cleanup without returning its promise. Join it\n\t\t// after dispatch leaves its own work frame, including when a handler failed.\n\t\ttry {\n\t\t\tawait extensionRunner.drainWork();\n\t\t} catch (error) {\n\t\t\tfailures.push(error instanceof Error ? error : new Error(String(error)));\n\t\t}\n\t\tif (failures.length)\n\t\t\tthrow Object.assign(new AggregateError(failures, \"Extension shutdown failed\"), { code: \"ShutdownFailed\" });\n\t\treturn true;\n\t}\n\treturn false;\n}\n\nexport class ExtensionRunner {\n\tprivate extensions: Extension[];\n\tprivate runtime: ExtensionRuntime;\n\tprivate uiContext: ExtensionUIContext;\n\tprivate presentationUI?: ExtensionUIContext;\n\tprivate presentationInput?: HostInput;\n\tprivate humanInput?: HostInput | null;\n\tprivate humanInputBindingRevision = 0;\n\tprivate inputBridge = new HostInputBridge(\n\t\t() => this.sessionManager.getSessionId(),\n\t\t() => this.getSignalFn(),\n\t);\n\tprivate onDiagnostic?: (diagnostic: HostDiagnostic) => void;\n\tprivate mode: ExtensionMode = \"print\";\n\tprivate cwd: string;\n\tprivate sessionManager: SessionManager;\n\tprivate modelRegistry: ModelRegistry;\n\tprivate orchestrationContext: OrchestrationContext | undefined;\n\tprivate subagentPolicy: SubagentChildPolicy | undefined;\n\tprivate taskHostBinding: (() => import(\"../tasks/agent-adapter.js\").AgentTaskHost) | undefined;\n\t/** @internal Attach dispatch receipts to the owning session before startup. */\n\tbindWorkOwner(owner: object): void {\n\t\tbindExtensionWork(this.runtime, owner);\n\t}\n\tbindTaskHost(binding: () => import(\"../tasks/agent-adapter.js\").AgentTaskHost): void {\n\t\tthis.taskHostBinding = binding;\n\t}\n\tbindChildSessionOptions(\n\t\tresolver: import(\"../child-session-options.ts\").ChildSessionOptionsResolver | undefined,\n\t): void {\n\t\tthis.runtime.getChildSessionOptions = resolver;\n\t}\n\t/** The run-control implementation registered by the current extension generation, if any. */\n\tgetWorkflowRunControl(): SessionWorkflows | undefined {\n\t\treturn this.runtime.workflowRunControlHub.current();\n\t}\n\tgetChildHostBindings(): import(\"../agent-session-types.js\").ExtensionBindings {\n\t\treturn {\n\t\t\thumanInput: this.humanInput === undefined ? this.presentationInput : this.humanInput,\n\t\t\tonDiagnostic: this.onDiagnostic,\n\t\t};\n\t}\n\tprivate errorListeners: Set<ExtensionErrorListener> = new Set();\n\tprivate getModel: () => Model<Api> | undefined = () => undefined;\n\tprivate getScopedModels: () => readonly ScopedModel[] = () => [];\n\tprivate isIdleFn: () => boolean = () => true;\n\tprivate isProjectTrustedFn: () => 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 getSystemPromptOptionsFn: () => BuildSystemPromptOptions = () =>\n\t\tnormalizeBuildSystemPromptOptions({ cwd: this.cwd });\n\tprivate getSkillCatalogFn: ExtensionContextActions[\"getSkillCatalog\"] = undefined;\n\tprivate getRouterModelFn: ExtensionContextActions[\"getRouterModel\"] = undefined;\n\tprivate getModelRoutingFn: ExtensionContextActions[\"getModelRouting\"] = undefined;\n\tprivate executeToolFn: ExtensionContextActions[\"executeTool\"];\n\tprivate getCallableToolsFn: NonNullable<ExtensionContextActions[\"getCallableTools\"]> = () => [];\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\tprivate authorityRevoked = false;\n\tprivate readonly contextOwner = {};\n\tprivate uiPromptBinding = 0;\n\tprivate activeUIPrompt:\n\t\t| { depth: number; reason: \"ui_prompt\" | \"project_trust\"; kind: UIPromptKind; title: string | undefined }\n\t\t| undefined;\n\n\tconstructor(\n\t\textensions: Extension[],\n\t\truntime: ExtensionRuntime,\n\t\tcwd: string,\n\t\tsessionManager: SessionManager,\n\t\tmodelRegistry: ModelRegistry,\n\t\torchestrationContext?: OrchestrationContext,\n\t\tsubagentPolicy?: SubagentChildPolicy,\n\t) {\n\t\tthis.extensions = extensions;\n\t\tthis.runtime = runtime;\n\t\tsessionLifecycleScopes.set(this, lifecycleScopeForOwner(runtime));\n\t\tthis.runtime.workflowActivityHub.bindDispatcher((event, isCurrent) => this.emit(event, isCurrent));\n\t\tthis.uiContext = noOpUIContext;\n\t\tthis.cwd = cwd;\n\t\tthis.sessionManager = sessionManager;\n\t\tthis.modelRegistry = modelRegistry;\n\t\tthis.orchestrationContext = orchestrationContext;\n\t\tthis.subagentPolicy = subagentPolicy;\n\t}\n\n\tbindCore(\n\t\tactions: ExtensionActions,\n\t\tcontextActions: ExtensionContextActions,\n\t\tproviderActions?: {\n\t\t\tregisterProvider?: (providerOrName: Provider | string, config?: ProviderConfig) => void;\n\t\t\tunregisterProvider?: (name: string) => void;\n\t\t},\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.sendMessages = actions.sendMessages;\n\t\tthis.runtime.sendUserMessage = actions.sendUserMessage;\n\t\tboundExtensionRuntimes.add(this.runtime);\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.getScopedModels = contextActions.getScopedModels;\n\t\tthis.isIdleFn = contextActions.isIdle;\n\t\tthis.isProjectTrustedFn = contextActions.isProjectTrusted;\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.getSystemPromptOptionsFn =\n\t\t\tcontextActions.getSystemPromptOptions ?? (() => normalizeBuildSystemPromptOptions({ cwd: this.cwd }));\n\t\tthis.getSkillCatalogFn = contextActions.getSkillCatalog;\n\t\tthis.getRouterModelFn = contextActions.getRouterModel;\n\t\tthis.getModelRoutingFn = contextActions.getModelRouting;\n\t\tthis.executeToolFn = contextActions.executeTool;\n\t\tthis.getCallableToolsFn = contextActions.getCallableTools ?? (() => []);\n\t\tthis.runtime.getSettings = contextActions.getSettings;\n\n\t\t// Flush provider registrations queued during extension loading.\n\t\tfor (const registration of this.runtime.pendingProviderRegistrations) {\n\t\t\ttry {\n\t\t\t\tif (\"provider\" in registration) {\n\t\t\t\t\t(\n\t\t\t\t\t\tproviderActions?.registerProvider ??\n\t\t\t\t\t\t((provider: Provider) => this.modelRegistry.registerProvider(provider))\n\t\t\t\t\t)(registration.provider);\n\t\t\t\t} else {\n\t\t\t\t\t(\n\t\t\t\t\t\tproviderActions?.registerProvider ??\n\t\t\t\t\t\t((name: string, config?: ProviderConfig) => this.modelRegistry.registerProvider(name, config!))\n\t\t\t\t\t)(registration.name, registration.config);\n\t\t\t\t}\n\t\t\t} catch (error) {\n\t\t\t\tthis.emitError({\n\t\t\t\t\textensionPath: registration.extensionPath,\n\t\t\t\t\tevent: \"register_provider\",\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\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 = ((providerOrName: Provider | string, configOrPath?: ProviderConfig | string) => {\n\t\t\tif (typeof providerOrName === \"string\") {\n\t\t\t\tconst config = configOrPath as ProviderConfig;\n\t\t\t\tif (providerActions?.registerProvider) providerActions.registerProvider(providerOrName, config);\n\t\t\t\telse this.modelRegistry.registerProvider(providerOrName, config);\n\t\t\t} else if (providerActions?.registerProvider) providerActions.registerProvider(providerOrName);\n\t\t\telse this.modelRegistry.registerProvider(providerOrName);\n\t\t}) as ExtensionRuntime[\"registerProvider\"];\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\tsetHostBindings(\n\t\thumanInput: HostInput | null | undefined,\n\t\tonDiagnostic?: (diagnostic: HostDiagnostic) => void,\n\t\tbindingRevision = 0,\n\t): void {\n\t\tthis.humanInput = humanInput;\n\t\tthis.humanInputBindingRevision = bindingRevision;\n\t\tthis.onDiagnostic = onDiagnostic;\n\t\t// Internal builtin bridge: no new extension API and no interception of console.\n\t\tconst scope = lifecycleScopeForOwner(this.runtime);\n\t\tconst report = (diagnostic: Omit<HostDiagnostic, \"sessionId\">) => {\n\t\t\ttry {\n\t\t\t\tthis.onDiagnostic?.({ ...diagnostic, sessionId: this.sessionManager.getSessionId() });\n\t\t\t} catch {\n\t\t\t\t// Observers cannot replace the primary service failure.\n\t\t\t}\n\t\t};\n\t\t// Rebinding replaces the reporter, not the builtin service owner.\n\t\tObject.defineProperty(report, Symbol.for(\"atomic.builtin-owner.v1\"), { value: scope });\n\t\tReflect.set(scope, Symbol.for(\"atomic.builtin-diagnostic.v1\"), report);\n\t\tthis.refreshHostInput();\n\t}\n\n\tcancelHostInput(): void {\n\t\tthis.inputBridge.cancel();\n\t}\n\t/** @internal Join this generation's callbacks without draining its reload caller. */\n\tdrainWork(): Promise<void> {\n\t\treturn drainExtensionWork(this.runtime);\n\t}\n\n\t/** @internal Seal input admission without invalidating shutdown handlers. */\n\tsealHostInput(): void {\n\t\tthis.inputBridge.close();\n\t\tsealExtensionWork(this.runtime);\n\t}\n\n\t/** @internal A rejected transaction retains the live runner, but never revives captured dialogs. */\n\tresumeAfterRejectedReload(): void {\n\t\tif (this.staleMessage) return;\n\t\tresumeExtensionWork(this.runtime);\n\t\tthis.inputBridge = new HostInputBridge(\n\t\t\t() => this.sessionManager.getSessionId(),\n\t\t\t() => this.getSignalFn(),\n\t\t);\n\t\tthis.refreshHostInput();\n\t}\n\n\tprivate refreshHostInput(): void {\n\t\tconst ui = this.presentationUI;\n\t\tthis.inputBridge.bind(\n\t\t\tthis.humanInput === undefined ? this.presentationInput : (this.humanInput ?? undefined),\n\t\t\tthis.humanInput,\n\t\t\tthis.humanInputBindingRevision,\n\t\t);\n\t\tconst bridged = this.inputBridge.wrap(\n\t\t\tui ?? {\n\t\t\t\t...noOpUIContext,\n\t\t\t\tcustom: async () => {\n\t\t\t\t\tthrow hostInputError(\"HumanInputUnavailable\");\n\t\t\t\t},\n\t\t\t},\n\t\t\tthis.presentationInput,\n\t\t\tthis.orchestrationContext?.kind === \"workflow-stage\"\n\t\t\t\t? {\n\t\t\t\t\t\tworkflowRunId: this.orchestrationContext.workflowRunId,\n\t\t\t\t\t\tworkflowStageId: this.orchestrationContext.workflowStageId,\n\t\t\t\t\t}\n\t\t\t\t: {},\n\t\t);\n\t\tthis.uiContext = this.wrapUIPromptContext(bridged, this.uiPromptBinding);\n\t\tcopyHostQuestionnaire(bridged, this.uiContext);\n\t}\n\n\tsetUIContext(uiContext?: ExtensionUIContext, mode: ExtensionMode = \"print\"): void {\n\t\tif (uiContext !== this.presentationUI) {\n\t\t\tthis.endActiveUIPrompt();\n\t\t\t++this.uiPromptBinding;\n\t\t\tthis.presentationUI = uiContext;\n\t\t\tconst ui = uiContext;\n\t\t\tthis.presentationInput = ui\n\t\t\t\t? {\n\t\t\t\t\t\tconfirm: (title, message, options) => ui.confirm(title, message, options),\n\t\t\t\t\t\tselect: (title, choices, options) => ui.select(title, choices, options),\n\t\t\t\t\t\tinput: (title, placeholder, options) => ui.input(title, placeholder, options),\n\t\t\t\t\t\teditor: (title, initial, options) => ui.editor(title, initial, options),\n\t\t\t\t\t\tquestionnaire: (params, options) => presentQuestionnaire(ui, params, options.signal),\n\t\t\t\t\t}\n\t\t\t\t: undefined;\n\t\t\tthis.refreshHostInput();\n\t\t}\n\t\tthis.mode = mode;\n\t}\n\n\tprivate wrapUIPromptContext(ui: ExtensionUIContext, binding: number): ExtensionUIContext {\n\t\treturn {\n\t\t\t...ui,\n\t\t\tselect: (title, options, opts) =>\n\t\t\t\tthis.withUIPrompt(binding, \"select\", title, () => ui.select(title, options, opts)),\n\t\t\tconfirm: (title, message, opts) =>\n\t\t\t\tthis.withUIPrompt(binding, \"confirm\", title, () => ui.confirm(title, message, opts)),\n\t\t\tinput: (title, placeholder, opts) =>\n\t\t\t\tthis.withUIPrompt(binding, \"input\", title, () => ui.input(title, placeholder, opts)),\n\t\t\teditor: (title, prefill, opts) =>\n\t\t\t\tthis.withUIPrompt(binding, \"editor\", title, () => ui.editor(title, prefill, opts)),\n\t\t\tcustom: (factory, options) =>\n\t\t\t\toptions?.purpose === \"navigation\"\n\t\t\t\t\t? ui.custom(factory, options)\n\t\t\t\t\t: this.withUIPrompt(binding, \"custom\", undefined, () => ui.custom(factory, options)),\n\t\t};\n\t}\n\n\t/** Track a host-owned trust dialog using the current session's prompt lifecycle. */\n\twithProjectTrustPrompt<T>(kind: UIPromptKind, title: string, run: () => Promise<T>): Promise<T> {\n\t\treturn this.withUIPrompt(this.uiPromptBinding, kind, title, run, \"project_trust\");\n\t}\n\n\t/** Begin a host-owned trust span whose end arrives as a separate control frame. */\n\tbeginProjectTrustPrompt(kind: UIPromptKind, title: string): () => void {\n\t\treturn this.beginUIPrompt(kind, title, \"project_trust\");\n\t}\n\n\tprivate withUIPrompt<T>(\n\t\tbinding: number,\n\t\tkind: UIPromptKind,\n\t\ttitle: string | undefined,\n\t\trun: () => Promise<T>,\n\t\treason: \"ui_prompt\" | \"project_trust\" = \"ui_prompt\",\n\t): Promise<T> {\n\t\tif (binding !== this.uiPromptBinding) return run();\n\t\tconst finish = this.beginUIPrompt(kind, title, reason);\n\t\ttry {\n\t\t\treturn run().finally(finish);\n\t\t} catch (error) {\n\t\t\tfinish();\n\t\t\tthrow error;\n\t\t}\n\t}\n\n\tprivate beginUIPrompt(\n\t\tkind: UIPromptKind,\n\t\ttitle: string | undefined,\n\t\treason: \"ui_prompt\" | \"project_trust\",\n\t): () => void {\n\t\tlet prompt = this.activeUIPrompt;\n\t\tif (!prompt) {\n\t\t\tprompt = { depth: 0, reason, kind, title };\n\t\t\tthis.activeUIPrompt = prompt;\n\t\t\tthis.emitUIPromptEvent({\n\t\t\t\ttype: \"ui_prompt_start\",\n\t\t\t\treason,\n\t\t\t\tkind,\n\t\t\t\t...(title === undefined ? {} : { title }),\n\t\t\t});\n\t\t}\n\t\tprompt.depth += 1;\n\n\t\tlet finished = false;\n\t\treturn () => {\n\t\t\tif (finished) return;\n\t\t\tfinished = true;\n\t\t\tif (this.activeUIPrompt !== prompt) return;\n\n\t\t\tprompt.depth -= 1;\n\t\t\tif (prompt.depth === 0) this.endActiveUIPrompt(prompt);\n\t\t};\n\t}\n\n\tprivate endActiveUIPrompt(prompt = this.activeUIPrompt): void {\n\t\tif (!prompt || this.activeUIPrompt !== prompt) return;\n\t\tthis.activeUIPrompt = undefined;\n\t\tprompt.depth = 0;\n\t\tthis.emitUIPromptEvent({\n\t\t\ttype: \"ui_prompt_end\",\n\t\t\treason: prompt.reason,\n\t\t\tkind: prompt.kind,\n\t\t\t...(prompt.title === undefined ? {} : { title: prompt.title }),\n\t\t});\n\t}\n\n\tprivate readonly pendingUIPromptNotifications = new Set<Promise<void>>();\n\n\tprivate emitUIPromptEvent(event: Extract<RunnerEmitEvent, { type: \"ui_prompt_start\" | \"ui_prompt_end\" }>): void {\n\t\tconst delivery = Promise.resolve().then(async () => {\n\t\t\tawait this.emit(event);\n\t\t});\n\t\tthis.pendingUIPromptNotifications.add(delivery);\n\t\tvoid delivery.finally(() => this.pendingUIPromptNotifications.delete(delivery)).catch(() => {});\n\t}\n\n\t/** Settle only the deliveries pending at this boundary, without delaying prompt UI. */\n\tasync flushUIPromptNotifications(timeoutMs: number): Promise<{ timedOut: boolean }> {\n\t\tconst pending = [...this.pendingUIPromptNotifications];\n\t\tif (pending.length === 0) return { timedOut: false };\n\t\tlet timer: ReturnType<typeof setTimeout> | undefined;\n\t\ttry {\n\t\t\treturn await Promise.race([\n\t\t\t\tPromise.allSettled(pending).then(() => ({ timedOut: false })),\n\t\t\t\tnew Promise<{ timedOut: boolean }>((resolve) => {\n\t\t\t\t\ttimer = setTimeout(() => resolve({ timedOut: true }), timeoutMs);\n\t\t\t\t}),\n\t\t\t]);\n\t\t} finally {\n\t\t\tclearTimeout(timer);\n\t\t}\n\t}\n\n\tgetUIContext(): ExtensionUIContext {\n\t\treturn this.uiContext;\n\t}\n\n\thasUI(): boolean {\n\t\treturn this.presentationUI !== undefined;\n\t}\n\n\tgetExtensionPaths(): string[] {\n\t\treturn this.extensions.map((extension) => extension.path);\n\t}\n\n\t/** Get all registered tools from all extensions (first registration per name wins). */\n\tgetAllRegisteredTools(): RegisteredTool[] {\n\t\treturn collectRegisteredTools(this.extensions);\n\t}\n\n\t/** Get a tool definition by name. Returns undefined if not found. */\n\tgetToolDefinition(toolName: string): RegisteredTool[\"definition\"] | undefined {\n\t\treturn findToolDefinition(this.extensions, toolName);\n\t}\n\n\tgetFlags(): Map<string, ExtensionFlag> {\n\t\treturn collectFlags(this.extensions);\n\t}\n\n\tsetFlagValue(name: string, value: boolean | string): void {\n\t\tthis.runtime.flagValues.set(name, value);\n\t\tthis.runtime.explicitFlagNames ??= new Set();\n\t\tthis.runtime.explicitFlagNames.add(name);\n\t}\n\n\tgetFlagValues(): Map<string, boolean | string> {\n\t\treturn new Map(this.runtime.flagValues);\n\t}\n\n\tgetExplicitFlagValues(): Map<string, boolean | string> {\n\t\tconst explicitFlagNames = this.runtime.explicitFlagNames ?? new Set<string>();\n\t\treturn new Map([...this.runtime.flagValues].filter(([name]) => explicitFlagNames.has(name)));\n\t}\n\n\tgetShortcuts(resolvedKeybindings: KeybindingsConfig): Map<KeyId, ExtensionShortcut> {\n\t\tconst resolution = resolveExtensionShortcuts(this.extensions, resolvedKeybindings, this.hasUI());\n\t\tthis.shortcutDiagnostics = resolution.diagnostics;\n\t\tfor (const [key, shortcut] of resolution.shortcuts) {\n\t\t\tresolution.shortcuts.set(key, {\n\t\t\t\t...shortcut,\n\t\t\t\thandler: (context) => {\n\t\t\t\t\tif (!extensionWorkOpen(this.runtime)) return Promise.reject(hostInputError(\"SessionClosed\"));\n\t\t\t\t\treturn runResourceRegistrationBatch(this.runtime, async () => shortcut.handler(context));\n\t\t\t\t},\n\t\t\t});\n\t\t}\n\t\treturn resolution.shortcuts;\n\t}\n\n\tgetShortcutDiagnostics(): ResourceDiagnostic[] {\n\t\treturn this.shortcutDiagnostics;\n\t}\n\n\trevokeAuthority(): void {\n\t\tthis.authorityRevoked = true;\n\t\trevokeExtensionAuthority(this.runtime);\n\t}\n\n\tinvalidate(message = STALE_EXTENSION_CONTEXT_MESSAGE): void {\n\t\tthis.sealHostInput();\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.authorityRevoked) this.runtime.assertActive();\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\tthis.onDiagnostic?.({\n\t\t\tlevel: \"error\",\n\t\t\tsource: error.extensionPath,\n\t\t\tmessage: `Extension ${error.event} failed`,\n\t\t\tsessionId: this.sessionManager.getSessionId(),\n\t\t});\n\t\tfor (const listener of this.errorListeners) {\n\t\t\tlistener(error);\n\t\t}\n\t}\n\n\thasHandlers(eventType: string): boolean {\n\t\treturn hasExtensionHandlers(this.extensions, eventType);\n\t}\n\n\tgetMessageRenderer(customType: string): MessageRenderer | undefined {\n\t\treturn findMessageRenderer(this.extensions, customType);\n\t}\n\n\tgetMarkdownTransformers(): MarkdownTransformer[] {\n\t\treturn collectMarkdownTransformers(this.extensions);\n\t}\n\n\t/** Renderers of calls to `toolName`: extension resolvers in load order, then `base`. */\n\tresolveToolRenderers(toolName: string, base: () => ToolRenderers | undefined): ToolRenderers | undefined {\n\t\tconst resolvers = this.extensions.flatMap((ext) => ext.toolRenderers ?? []);\n\t\tconst resolve = (index: number): ToolRenderers | undefined =>\n\t\t\tindex < resolvers.length ? resolvers[index](toolName, () => resolve(index + 1)) : base();\n\t\treturn resolve(0);\n\t}\n\n\tgetEntryRenderer(customType: string): EntryRenderer | undefined {\n\t\tconst renderer = findEntryRenderer(this.extensions, customType);\n\t\treturn renderer ? originalRegistrationCallback(renderer) : undefined;\n\t}\n\n\t/** Invoke the session-owned registration without changing discovery identity. */\n\trenderEntry(customType: string, ...args: Parameters<EntryRenderer>): ReturnType<EntryRenderer> {\n\t\tthis.assertActive();\n\t\treturn findEntryRenderer(this.extensions, customType)?.(...args);\n\t}\n\n\tgetRegisteredCommands(): ResolvedCommand[] {\n\t\tthis.commandDiagnostics = [];\n\t\treturn resolveRegisteredCommands(this.extensions);\n\t}\n\n\tgetCommandDiagnostics(): ResourceDiagnostic[] {\n\t\treturn this.commandDiagnostics;\n\t}\n\n\tgetCommand(name: string, quitSignal?: AbortSignal): ResolvedCommand | undefined {\n\t\tconst command = resolveRegisteredCommands(this.extensions).find((entry) => entry.invocationName === name);\n\t\tif (!command) return undefined;\n\t\treturn {\n\t\t\t...command,\n\t\t\thandler: (args, context) =>\n\t\t\t\trunResourceRegistrationBatch(this.runtime, async () => {\n\t\t\t\t\tquitSignal?.throwIfAborted();\n\t\t\t\t\tconst execution = command.handler(args, context);\n\t\t\t\t\treturn quitSignal ? raceWithAbortSignal(execution, quitSignal) : execution;\n\t\t\t\t}),\n\t\t};\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\tcreateContext(): ExtensionContext {\n\t\treturn createExtensionContext(this.createContextSource(), this.contextOwner);\n\t}\n\n\t/** Bound to the actual executing parent, not an extension-supplied caller identity. */\n\tcreateToolContext(toolCallId: string, signal: AbortSignal | undefined): ExtensionToolContext {\n\t\tconst invoke = AsyncLocalStorage.bind(async (name: string, args: unknown, options: ExecuteToolOptions = {}) => {\n\t\t\tthis.assertActive();\n\t\t\tif (signal?.aborted) throw new Error(\"Calling tool execution has ended\");\n\t\t\tif (!this.executeToolFn)\n\t\t\t\treturn {\n\t\t\t\t\ttoolCall: { type: \"toolCall\" as const, id: `${toolCallId}/0`, name, arguments: {} },\n\t\t\t\t\tresult: {\n\t\t\t\t\t\tcontent: [{ type: \"text\" as const, text: \"Nested tool calls are not available in this context\" }],\n\t\t\t\t\t\tdetails: {},\n\t\t\t\t\t},\n\t\t\t\t\tisError: true,\n\t\t\t\t};\n\t\t\tconst callSignal =\n\t\t\t\tsignal && options.signal ? AbortSignal.any([signal, options.signal]) : (options.signal ?? signal);\n\t\t\treturn this.executeToolFn(toolCallId, name, args, { ...options, signal: callSignal });\n\t\t});\n\t\treturn Object.defineProperties(this.createContext() as ExtensionToolContext, {\n\t\t\ttools: {\n\t\t\t\tget: () => {\n\t\t\t\t\tthis.assertActive();\n\t\t\t\t\treturn this.getCallableToolsFn();\n\t\t\t\t},\n\t\t\t},\n\t\t\texecuteTool: { value: invoke },\n\t\t});\n\t}\n\n\tcreateCommandContext(): ExtensionCommandContext {\n\t\treturn createExtensionCommandContext(this.createContextSource(), this.contextOwner);\n\t}\n\n\tprivate createContextSource(): ExtensionCommandContextSource {\n\t\treturn {\n\t\t\tassertActive: () => this.assertActive(),\n\t\t\tassertAction: () => assertExtensionAction(this.runtime),\n\t\t\tgetChildSessionOptions: (options) => this.runtime.getChildSessionOptions?.(options) ?? options,\n\t\t\tgetExtensionPaths: () => this.getExtensionPaths(),\n\t\t\tobserveWorkflowActivity: (observer) => this.runtime.workflowActivityHub.observeWorkflowActivity(observer),\n\t\t\t...(this.taskHostBinding ? { getAgentTaskHost: this.taskHostBinding } : {}),\n\t\t\tgetUIContext: () => this.uiContext,\n\t\t\tgetMode: () => this.mode,\n\t\t\thasUI: () => this.hasUI(),\n\t\t\thasHumanInput: () => this.inputBridge.available,\n\t\t\tgetCwd: () => this.cwd,\n\t\t\tgetSessionManager: () => this.sessionManager,\n\t\t\tgetModelRegistry: () => this.modelRegistry,\n\t\t\tgetModel: () => this.getModel(),\n\t\t\tgetSubagentPolicy: () => this.subagentPolicy,\n\t\t\tgetScopedModels: () => this.getScopedModels(),\n\t\t\tgetThinkingLevel: () => this.runtime.getThinkingLevel(),\n\t\t\tgetOrchestrationContext: () => this.orchestrationContext,\n\t\t\tisIdle: () => this.isIdleFn(),\n\t\t\tisProjectTrusted: () => this.isProjectTrustedFn(),\n\t\t\tgetSignal: () => this.getSignalFn(),\n\t\t\tabort: () => this.abortFn(),\n\t\t\thasPendingMessages: () => this.hasPendingMessagesFn(),\n\t\t\tshutdown: () => this.shutdownHandler(),\n\t\t\tgetContextUsage: () => this.getContextUsageFn(),\n\t\t\tcompact: (options) => this.compactFn(options),\n\t\t\tgetSystemPrompt: () => this.getSystemPromptFn(),\n\t\t\t...(this.getSkillCatalogFn ? { getSkillCatalog: () => this.getSkillCatalogFn!() } : {}),\n\t\t\t...(this.getRouterModelFn ? { getRouterModel: () => this.getRouterModelFn!() } : {}),\n\t\t\t...(this.getModelRoutingFn ? { getModelRouting: () => this.getModelRoutingFn!() } : {}),\n\t\t\tgetSystemPromptOptions: () => this.getSystemPromptOptionsFn(),\n\t\t\twaitForIdle: () => this.waitForIdleFn(),\n\t\t\tnewSession: (options) => this.newSessionHandler(options),\n\t\t\tfork: (entryId, options) => this.forkHandler(entryId, options),\n\t\t\tnavigateTree: (targetId, options) => this.navigateTreeHandler(targetId, options),\n\t\t\tswitchSession: (sessionPath, options) => this.switchSessionHandler(sessionPath, options),\n\t\t\treload: () => this.reloadHandler(),\n\t\t};\n\t}\n\n\t/** Keep startup reporters bound while adding the now-authorized extension set. */\n\tattachStartupExtensions(extensions: Extension[]): () => Promise<void> {\n\t\tconst newcomers = extensions.filter((extension) => !this.extensions.includes(extension));\n\t\tthis.extensions = [...this.extensions, ...newcomers];\n\t\treturn async () => {\n\t\t\tawait runResourceRegistrationBatch(this.runtime, () =>\n\t\t\t\trunGenericHandlers(\n\t\t\t\t\tthis.extensions.filter((extension) => newcomers.includes(extension)),\n\t\t\t\t\tthis.createContext(),\n\t\t\t\t\t{ type: \"session_start\", reason: \"startup\" },\n\t\t\t\t\t(error) => this.emitError(error),\n\t\t\t\t),\n\t\t\t);\n\t\t};\n\t}\n\n\tasync emit<TEvent extends RunnerEmitEvent>(\n\t\tevent: TEvent,\n\t\tisCurrent?: () => boolean,\n\t\tadmitted = false,\n\t): Promise<RunnerEmitResult<TEvent>> {\n\t\tif (!admitted && event.type !== \"session_shutdown\" && !extensionWorkOpen(this.runtime))\n\t\t\treturn undefined as RunnerEmitResult<TEvent>;\n\t\tconst observerFailures: Error[] = [];\n\t\tconst dispatch = () =>\n\t\t\trunGenericHandlers(\n\t\t\t\tthis.extensions,\n\t\t\t\tthis.createContext(),\n\t\t\t\tevent,\n\t\t\t\t(error) => {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tthis.emitError(error);\n\t\t\t\t\t} catch (cause) {\n\t\t\t\t\t\tif (event.type !== \"session_shutdown\") throw cause;\n\t\t\t\t\t\tobserverFailures.push(\n\t\t\t\t\t\t\tnew Error(`${error.extensionPath}: ${error.error}`),\n\t\t\t\t\t\t\tnew Error(\"Shutdown observer failed\", { cause }),\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tisCurrent,\n\t\t\t);\n\t\tconst result = await runResourceRegistrationBatch(\n\t\t\tthis.runtime,\n\t\t\t() => (event.type === \"session_shutdown\" ? runExtensionCleanup(this.runtime, dispatch) : dispatch()),\n\t\t\tadmitted || event.type === \"session_shutdown\",\n\t\t);\n\t\tif (observerFailures.length)\n\t\t\tthrow Object.assign(new AggregateError(observerFailures, \"Shutdown observers failed\"), {\n\t\t\t\tcode: \"ShutdownFailed\",\n\t\t\t});\n\t\treturn result;\n\t}\n\n\tasync emitMessageEnd(event: MessageEndEvent, admitted = false): Promise<AgentMessage | undefined> {\n\t\treturn runResourceRegistrationBatch(\n\t\t\tthis.runtime,\n\t\t\t() => runMessageEndHandlers(this.extensions, this.createContext(), event, (error) => this.emitError(error)),\n\t\t\tadmitted,\n\t\t);\n\t}\n\n\tasync emitToolResult(event: ToolResultEvent, admitted = false): Promise<ToolResultEventResult | undefined> {\n\t\treturn runResourceRegistrationBatch(\n\t\t\tthis.runtime,\n\t\t\t() => runToolResultHandlers(this.extensions, this.createContext(), event, (error) => this.emitError(error)),\n\t\t\tadmitted,\n\t\t);\n\t}\n\n\tasync emitToolCall(event: ToolCallEvent): Promise<ToolCallEventResult | undefined> {\n\t\treturn runResourceRegistrationBatch(this.runtime, () =>\n\t\t\trunToolCallHandlers(this.extensions, this.createContext(), event),\n\t\t);\n\t}\n\n\tasync emitUserBash(event: UserBashEvent): Promise<UserBashEventResult | undefined> {\n\t\treturn runResourceRegistrationBatch(this.runtime, () =>\n\t\t\trunUserBashHandlers(this.extensions, this.createContext(), event, (error) => this.emitError(error)),\n\t\t);\n\t}\n\n\tasync emitBoundary(\n\t\tbaseEvent: BoundaryBaseEvent,\n\t\tbuildContext: (entries: SessionBoundaryDraft[]) => BoundaryContextPreview | Promise<BoundaryContextPreview>,\n\t): Promise<BoundaryDispatchResult> {\n\t\treturn runResourceRegistrationBatch(\n\t\t\tthis.runtime,\n\t\t\t() =>\n\t\t\t\trunBoundaryHandlers(this.extensions, this.createContext(), baseEvent, buildContext, (error) =>\n\t\t\t\t\tthis.emitError(error),\n\t\t\t\t),\n\t\t\ttrue,\n\t\t);\n\t}\n\n\tasync emitContext(messages: AgentMessage[]): Promise<AgentMessage[]> {\n\t\treturn runResourceRegistrationBatch(this.runtime, () =>\n\t\t\trunContextHandlers(this.extensions, this.createContext(), messages, (error) => this.emitError(error)),\n\t\t);\n\t}\n\n\temitBeforeProviderRequest(payload: unknown): Promise<unknown> {\n\t\treturn runResourceRegistrationBatch(this.runtime, () =>\n\t\t\trunBeforeProviderRequestHandlers(this.extensions, this.createContext(), payload, (error) =>\n\t\t\t\tthis.emitError(error),\n\t\t\t),\n\t\t);\n\t}\n\n\tasync emitCacheWarmingDecision(event: CacheWarmingDecisionEvent): Promise<CacheWarmingAction> {\n\t\tlet action = event.action;\n\t\tconst ctx = this.createContext();\n\t\tfor (const { ext, handlers } of snapshotEventHandlers(this.extensions, event.type)) {\n\t\t\tfor (const handler of handlers) {\n\t\t\t\ttry {\n\t\t\t\t\tconst result = (await handler({ ...event, action }, ctx)) as CacheWarmingDecisionEventResult | undefined;\n\t\t\t\t\tif (result?.action === \"warm\" || result?.action === \"stop\") action = result.action;\n\t\t\t\t} catch (error) {\n\t\t\t\t\tthis.emitError({\n\t\t\t\t\t\textensionPath: ext.path,\n\t\t\t\t\t\tevent: event.type,\n\t\t\t\t\t\terror: error instanceof Error ? error.message : String(error),\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn action;\n\t}\n\n\tasync emitBeforeProviderHeaders(headers: ProviderHeaders): Promise<ProviderHeaders> {\n\t\treturn runResourceRegistrationBatch(this.runtime, async () => {\n\t\t\tfor (const { ext: extension, handlers } of snapshotEventHandlers(this.extensions, \"before_provider_headers\")) {\n\t\t\t\tfor (const handler of handlers) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tawait handler({ type: \"before_provider_headers\", headers }, this.createContext());\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tthis.emitError({\n\t\t\t\t\t\t\textensionPath: extension.path,\n\t\t\t\t\t\t\tevent: \"before_provider_headers\",\n\t\t\t\t\t\t\terror: error instanceof Error ? error.message : String(error),\n\t\t\t\t\t\t\tstack: error instanceof Error ? error.stack : undefined,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn headers;\n\t\t});\n\t}\n\n\temitBeforeAgentStart(\n\t\tprompt: string,\n\t\timages: ImageContent[] | undefined,\n\t\tsystemPromptOptions: BuildSystemPromptOptions,\n\t): Promise<BeforeAgentStartCombinedResult> {\n\t\treturn runResourceRegistrationBatch(this.runtime, () =>\n\t\t\trunBeforeAgentStartHandlers(\n\t\t\t\tthis.extensions,\n\t\t\t\tthis.createContext(),\n\t\t\t\t() => this.assertActive(),\n\t\t\t\tprompt,\n\t\t\t\timages,\n\t\t\t\tsystemPromptOptions,\n\t\t\t\t(error) => this.emitError(error),\n\t\t\t),\n\t\t);\n\t}\n\n\temitResourcesDiscover(\n\t\tcwd: string,\n\t\treason: ResourcesDiscoverEvent[\"reason\"],\n\t): Promise<ResourcesDiscoverCombinedResult> {\n\t\treturn runResourceRegistrationBatch(this.runtime, () =>\n\t\t\trunResourcesDiscoverHandlers(this.extensions, this.createContext(), cwd, reason, (error) =>\n\t\t\t\tthis.emitError(error),\n\t\t\t),\n\t\t);\n\t}\n\n\t/** Emit input event. Transforms chain, \"handled\" short-circuits. */\n\temitInput(\n\t\ttext: string,\n\t\timages: ImageContent[] | undefined,\n\t\tsource: InputSource,\n\t\tstreamingBehavior?: \"steer\" | \"followUp\",\n\t): Promise<InputEventResult> {\n\t\treturn runResourceRegistrationBatch(this.runtime, () =>\n\t\t\trunInputHandlers(this.extensions, this.createContext(), text, images, source, streamingBehavior, (error) =>\n\t\t\t\tthis.emitError(error),\n\t\t\t),\n\t\t);\n\t}\n}\n"]}
|
|
@@ -66,6 +66,8 @@ export interface ToolLoadout {
|
|
|
66
66
|
readonly registered: readonly import("@earendil-works/pi-agent-core").AgentTool[];
|
|
67
67
|
getExposure(name: string): ToolExposure;
|
|
68
68
|
getNamespace(name: string): ToolNamespace | undefined;
|
|
69
|
+
/** A tool's prompt guidelines, omitted from system prompt rules when its declaration is hidden. */
|
|
70
|
+
getPromptGuidelines(name: string): readonly string[];
|
|
69
71
|
}
|
|
70
72
|
export interface ToolLoadoutChanges {
|
|
71
73
|
descriptions?: Readonly<Record<string, string>>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool-types.d.ts","sourceRoot":"","sources":["../../../src/core/extensions/tool-types.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"tool-types.d.ts","sourceRoot":"","sources":["../../../src/core/extensions/tool-types.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool-types.js","sourceRoot":"","sources":["../../../src/core/extensions/tool-types.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"tool-types.js","sourceRoot":"","sources":["../../../src/core/extensions/tool-types.ts"],"names":[],"mappings":"AA2KA;;;;;;GAMG;AACH,MAAM,UAAU,UAAU,CACzB,IAA+C;IAE/C,OAAO,IAAqE,CAAC;AAC9E,CAAC","sourcesContent":["import type { ConstrainedSamplingConfig } from \"@bastani/pi-ai/compat\";\nimport type { AgentToolResult, AgentToolUpdateCallback, ToolExecutionMode } from \"@earendil-works/pi-agent-core\";\nimport type { Component } from \"@earendil-works/pi-tui\";\nimport type { Static, TSchema } from \"typebox\";\nimport type { Theme } from \"../../modes/interactive/theme/theme.js\";\nimport type { SourceInfo } from \"../source-info.ts\";\nimport type { ToolConcurrency } from \"../tools/tool-concurrency.ts\";\n\nexport type { ToolConcurrency, ToolConcurrencyMode } from \"../tools/tool-concurrency.ts\";\n\nimport type { ExtensionToolContext } from \"./context-types.ts\";\n\n/** Rendering options for tool results */\nexport interface ToolRenderResultOptions {\n\t/** Whether the result view is expanded */\n\texpanded: boolean;\n\t/** Whether this is a partial/streaming result */\n\tisPartial: boolean;\n}\n\n/** Context passed to tool renderers. */\nexport interface ToolRenderContext<TState = unknown, TArgs = unknown> {\n\t/** Current tool call arguments. Shared across call/result renders for the same tool call. */\n\targs: TArgs;\n\t/** Unique id for this tool execution. Stable across call/result renders for the same tool call. */\n\ttoolCallId: string;\n\t/** Invalidate just this tool execution component for redraw. */\n\tinvalidate: () => void;\n\t/** Previously returned component for this render slot, if any. */\n\tlastComponent: Component | undefined;\n\t/** Shared renderer state for this tool row. Initialized by tool-execution.ts. */\n\tstate: TState;\n\t/** Working directory for this tool execution. */\n\tcwd: string;\n\t/** Whether the tool execution has started. */\n\texecutionStarted: boolean;\n\t/** Whether the tool call arguments are complete. */\n\targsComplete: boolean;\n\t/** Whether the tool result is partial/streaming. */\n\tisPartial: boolean;\n\t/** Whether the result view is expanded. */\n\texpanded: boolean;\n\t/** Whether inline images are currently shown in the TUI. */\n\tshowImages: boolean;\n\t/** Whether the current result is an error. */\n\tisError: boolean;\n}\n\ntype ToolRenderCall<TParams extends TSchema, TState> = {\n\tbivarianceHack(args: Static<TParams>, theme: Theme, context: ToolRenderContext<TState, Static<TParams>>): Component;\n}[\"bivarianceHack\"];\n\ntype ToolRenderResult<TParams extends TSchema, TDetails, TState> = {\n\tbivarianceHack(\n\t\tresult: AgentToolResult<TDetails>,\n\t\toptions: ToolRenderResultOptions,\n\t\ttheme: Theme,\n\t\tcontext: ToolRenderContext<TState, Static<TParams>>,\n\t): Component;\n}[\"bivarianceHack\"];\n\n/** How the model reaches a registered tool. */\nexport type ToolExposure = \"direct\" | \"model-only\" | \"codemode\" | \"deferred\" | \"hidden\";\n\nexport interface ToolAnnotations {\n\treadOnlyHint?: boolean;\n\tdestructiveHint?: boolean;\n\tidempotentHint?: boolean;\n\topenWorldHint?: boolean;\n}\n\nexport interface ToolNamespace {\n\tname: string;\n\tdescription?: string;\n\tinstructions?: string;\n}\n\nexport interface ToolLoadout {\n\treadonly declared: readonly import(\"@earendil-works/pi-agent-core\").AgentTool[];\n\treadonly callable: readonly import(\"@earendil-works/pi-agent-core\").AgentTool[];\n\treadonly registered: readonly import(\"@earendil-works/pi-agent-core\").AgentTool[];\n\tgetExposure(name: string): ToolExposure;\n\tgetNamespace(name: string): ToolNamespace | undefined;\n\t/** A tool's prompt guidelines, omitted from system prompt rules when its declaration is hidden. */\n\tgetPromptGuidelines(name: string): readonly string[];\n}\n\nexport interface ToolLoadoutChanges {\n\tdescriptions?: Readonly<Record<string, string>>;\n\thiddenDeclarations?: readonly string[];\n}\n\n/**\n * Tool definition for registerTool().\n */\nexport interface ToolDefinition<TParams extends TSchema = TSchema, TDetails = unknown, TState = unknown> {\n\t/** Tool name (used in LLM tool calls) */\n\tname: string;\n\t/** Human-readable label for UI */\n\tlabel: string;\n\t/** Description for LLM */\n\tdescription: string;\n\t/** Optional one-line snippet for the Available tools section in the default system prompt. Custom tools are omitted from that section when this is not provided. */\n\tpromptSnippet?: string;\n\t/** Optional guideline bullets appended to the default system prompt Guidelines section when this tool is active. */\n\tpromptGuidelines?: string[];\n\t/** Parameter schema (TypeBox) */\n\tparameters: TParams;\n\t/** Optional provider-side constrained sampling request. `false` explicitly disables it. */\n\tconstrainedSampling?: false | ConstrainedSamplingConfig;\n\t/** Optional per-tool character cap for model-visible result persistence. Use Infinity to opt out for self-bounded tools. */\n\tmaxResultSizeChars?: number;\n\t/** Marks a terminating tool created by createStructuredOutputTool() so print mode can emit custom-named final JSON without treating every terminating tool as printable. */\n\tstructuredOutput?: true;\n\t/** Controls whether ToolExecutionComponent renders the standard colored shell or the tool renders its own framing. */\n\trenderShell?: \"default\" | \"self\";\n\n\t/** Optional compatibility shim to prepare raw tool call arguments before schema validation. Must return an object conforming to TParams. */\n\tprepareArguments?: (args: unknown) => Static<TParams>;\n\t/** Schema of successful machine-readable results. */\n\toutputSchema?: TSchema;\n\t/** Direct and model-only tools activate by default; other exposures do not. */\n\texposure?: ToolExposure;\n\tnamespace?: ToolNamespace;\n\tannotations?: ToolAnnotations;\n\tdefaultActive?: boolean;\n\tprepareLoadout?: (loadout: ToolLoadout) => ToolLoadoutChanges | undefined;\n\n\t/**\n\t * Per-tool execution mode override.\n\t * - \"sequential\": this tool must execute one at a time with other tool calls.\n\t * - \"parallel\": this tool can execute concurrently with other tool calls.\n\t *\n\t * If omitted, the default execution mode applies.\n\t */\n\texecutionMode?: ToolExecutionMode;\n\n\t/**\n\t * Ordering against the other calls of the same assistant message.\n\t * - \"shared\": may overlap other shared calls, but starts after the latest earlier exclusive call (default)\n\t * - \"exclusive\": starts after every earlier call finishes; later calls start after it finishes\n\t * - function: resolved per call from its arguments; a throwing resolver means \"exclusive\"\n\t */\n\tconcurrency?: ToolConcurrency<Static<TParams>>;\n\n\t/** Execute the tool. */\n\texecute(\n\t\ttoolCallId: string,\n\t\tparams: Static<TParams>,\n\t\tsignal: AbortSignal | undefined,\n\t\tonUpdate: AgentToolUpdateCallback<TDetails> | undefined,\n\t\tctx: ExtensionToolContext,\n\t): Promise<AgentToolResult<TDetails>>;\n\n\t/** Custom rendering for tool call display */\n\trenderCall?: ToolRenderCall<TParams, TState>;\n\n\t/** Custom rendering for tool result display */\n\trenderResult?: ToolRenderResult<TParams, TDetails, TState>;\n}\n\ntype AnyToolDefinition = ToolDefinition<TSchema, unknown, unknown>;\n\nexport type ToolRenderers = Pick<AnyToolDefinition, \"renderShell\" | \"renderCall\" | \"renderResult\">;\n\n/** Chooses renderers for any tool. `next()` resolves later extensions, then the registered tool. */\nexport type ToolRendererResolver = (\n\ttoolName: string,\n\tnext: () => ToolRenderers | undefined,\n) => ToolRenderers | undefined;\n\n/**\n * Preserve parameter inference for standalone tool definitions.\n *\n * Use this when assigning a tool to a variable or passing it through arrays such\n * as `customTools`, where contextual typing would otherwise widen params to\n * `unknown`.\n */\nexport function defineTool<TParams extends TSchema, TDetails = unknown, TState = unknown>(\n\ttool: ToolDefinition<TParams, TDetails, TState>,\n): ToolDefinition<TParams, TDetails, TState> & AnyToolDefinition {\n\treturn tool as ToolDefinition<TParams, TDetails, TState> & AnyToolDefinition;\n}\n\n/** Public constrained-sampling shape inherited from pi-ai. */\nexport type { ConstrainedSamplingConfig } from \"@bastani/pi-ai/compat\";\n\n/** Tool info with name, description, parameter schema, constraint, and source metadata */\nexport type ToolInfo = Pick<\n\tToolDefinition,\n\t| \"name\"\n\t| \"description\"\n\t| \"parameters\"\n\t| \"constrainedSampling\"\n\t| \"promptGuidelines\"\n\t| \"exposure\"\n\t| \"namespace\"\n\t| \"annotations\"\n> & {\n\tsourceInfo: SourceInfo;\n};\n"]}
|
|
@@ -66,7 +66,7 @@ export declare function isNativeFastRouteApi(api: Api): api is "openai-responses
|
|
|
66
66
|
* OpenAI-style fast routing keeps the base upstream model ID and adds a priority service tier.
|
|
67
67
|
*
|
|
68
68
|
* Eligibility requires both a first-party provider ID and an adapter that serializes
|
|
69
|
-
* `service_tier`. A renamed provider, proxy, Azure
|
|
69
|
+
* `service_tier`. A renamed provider, proxy, Azure (`azure`), OpenRouter
|
|
70
70
|
* (`openai-completions`), and generic OpenAI-compatible providers do not qualify. An `openai` or
|
|
71
71
|
* `openai-codex` model on an adapter that cannot carry `service_tier` must not offer a fast variant,
|
|
72
72
|
* because selecting it would send an ordinary request under a name that promises otherwise.
|
|
@@ -35,7 +35,7 @@ export function isNativeFastRouteApi(api) {
|
|
|
35
35
|
* OpenAI-style fast routing keeps the base upstream model ID and adds a priority service tier.
|
|
36
36
|
*
|
|
37
37
|
* Eligibility requires both a first-party provider ID and an adapter that serializes
|
|
38
|
-
* `service_tier`. A renamed provider, proxy, Azure
|
|
38
|
+
* `service_tier`. A renamed provider, proxy, Azure (`azure`), OpenRouter
|
|
39
39
|
* (`openai-completions`), and generic OpenAI-compatible providers do not qualify. An `openai` or
|
|
40
40
|
* `openai-codex` model on an adapter that cannot carry `service_tier` must not offer a fast variant,
|
|
41
41
|
* because selecting it would send an ordinary request under a name that promises otherwise.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fast-model-variants.js","sourceRoot":"","sources":["../../src/core/fast-model-variants.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n\ttype Api,\n\ttype Credential,\n\tgetServiceTierCost,\n\ttype Model,\n\ttype ModelFastRoute,\n\ttype Provider,\n} from \"@bastani/pi-ai\";\nimport type { ModelsJsonModelOverride } from \"./model-config.ts\";\nimport { applyModelOverride } from \"./provider-composer-internal.ts\";\n\n/** Canonical suffix every selectable fast model variant carries. */\nexport const FAST_MODEL_ID_SUFFIX = \"-fast\";\n\n/** Service tier OpenAI-style providers use to route fast traffic. */\nexport const FAST_MODEL_SERVICE_TIER = \"priority\" as const;\n\n/** Codex's Ultrafast tier, offered only for models that advertise it; access depends on the account. */\nexport const ULTRAFAST_MODEL_ID_SUFFIX = \"-ultrafast\";\nexport const ULTRAFAST_MODEL_SERVICE_TIER = \"ultrafast\" as const;\n\n/** Inference speed Anthropic's Messages API uses to route fast traffic. */\nexport const FAST_MODEL_SPEED = \"fast\" as const;\n\n/**\n * Claude models Anthropic's fast mode accepts. Requesting `speed: \"fast\"` on any other model is an\n * error, so the list is explicit rather than a family-name pattern.\n * https://platform.claude.com/docs/en/build-with-claude/fast-mode#supported-models\n */\nexport const ANTHROPIC_FAST_MODE_MODEL_IDS: ReadonlySet<string> = new Set([\n\t\"claude-opus-5-5\",\n\t\"claude-opus-5\",\n\t\"claude-opus-4-8\",\n]);\n\n/** A derived fast variant that was suppressed because something already owns its exact model ID. */\nexport interface FastModelVariantDiagnostic {\n\tprovider: string;\n\t/** The exact selectable model ID that collided. */\n\tmodelId: string;\n\tmessage: string;\n}\n\nexport interface FastModelVariantDerivation {\n\tmodels: readonly Model<Api>[];\n\tdiagnostics: readonly FastModelVariantDiagnostic[];\n}\n\nexport interface DeriveFastModelVariantsOptions {\n\t/** Exact fast model IDs the stored GitHub Copilot credential advertises for this account. */\n\tcopilotFastModelIds?: readonly string[];\n\t/** `models.json` `modelOverrides` for this provider, applied to derived entries by their exact `-fast` ID. */\n\tmodelOverrides?: Readonly<Record<string, ModelsJsonModelOverride>>;\n\t/** APIs whose transport a registered extension owns for this provider. No variant is derived for them. */\n\textensionOwnedApis?: ReadonlySet<Api>;\n\t/** IDs explicitly declared in this provider's models.json models array. Never derive siblings for them. */\n\tcustomModelIds?: ReadonlySet<string>;\n}\n\nexport interface FastModelVariantsOptions {\n\t/**\n\t * Synchronous read of the exact fast model IDs the stored GitHub Copilot credential advertises.\n\t * Read per call so a credential that lands after provider composition still takes effect.\n\t */\n\tgetCopilotFastModelIds?: () => readonly string[] | undefined;\n\t/** Synchronous read of this provider's `models.json` `modelOverrides`, so a reload takes effect. */\n\tgetModelOverrides?: () => Readonly<Record<string, ModelsJsonModelOverride>> | undefined;\n\t/** Read current custom model IDs per pass so models.json reloads update eligibility. */\n\tgetCustomModelIds?: () => ReadonlySet<string>;\n\t/**\n\t * Synchronous read of the APIs a registered extension supplies a stream function for. Read per call\n\t * because extensions register after initial composition on some paths.\n\t */\n\tgetExtensionOwnedApis?: () => ReadonlySet<Api> | undefined;\n\t/** Called after every derivation pass with the complete diagnostic list for this provider. */\n\tonDiagnostics?: (providerId: string, diagnostics: readonly FastModelVariantDiagnostic[]) => void;\n}\n\n/** Canonical selectable ID of the fast variant of `baseModelId`. */\nexport function fastModelId(baseModelId: string): string {\n\treturn `${baseModelId}${FAST_MODEL_ID_SUFFIX}`;\n}\n\n/**\n * The two pi-ai adapters that serialize `service_tier`. `azure-openai-responses` and\n * `openai-completions` have no such option, and `streamSimple` drops it, so a service-tier route on\n * any other API would silently degrade to an ordinary request.\n */\nexport function isNativeFastRouteApi(api: Api): api is \"openai-responses\" | \"openai-codex-responses\" {\n\treturn api === \"openai-responses\" || api === \"openai-codex-responses\";\n}\n\n/**\n * OpenAI-style fast routing keeps the base upstream model ID and adds a priority service tier.\n *\n * Eligibility requires both a first-party provider ID and an adapter that serializes\n * `service_tier`. A renamed provider, proxy, Azure OpenAI (`azure-openai-responses`), OpenRouter\n * (`openai-completions`), and generic OpenAI-compatible providers do not qualify. An `openai` or\n * `openai-codex` model on an adapter that cannot carry `service_tier` must not offer a fast variant,\n * because selecting it would send an ordinary request under a name that promises otherwise.\n */\nexport function usesOpenAIFastServiceTier(model: Pick<Model<Api>, \"api\" | \"provider\">): boolean {\n\treturn isNativeFastRouteApi(model.api) && (model.provider === \"openai\" || model.provider === \"openai-codex\");\n}\n\n/**\n * xAI Priority Processing keeps the base upstream Grok model ID and adds the same\n * `service_tier: \"priority\"` field on the Responses API. xAI has no `-fast` model slugs for current\n * Grok models; priority is billed at twice the standard token rates, and only when the response\n * confirms the tier. https://docs.x.ai/developers/advanced-api-usage/priority-processing\n *\n * Eligibility requires the first-party `xai` provider on `openai-responses`. OpenRouter, Vercel AI\n * Gateway, and renamed or proxied xAI-compatible providers do not qualify.\n */\nexport function usesXaiFastServiceTier(model: Pick<Model<Api>, \"api\" | \"provider\">): boolean {\n\treturn model.api === \"openai-responses\" && model.provider === \"xai\";\n}\n\n/** GitHub Copilot advertises real fast sibling model IDs per account; it never uses a service tier. */\nexport function isGitHubCopilotModel(model: Pick<Model<Api>, \"provider\">): boolean {\n\treturn model.provider === \"github-copilot\";\n}\n\n/**\n * Anthropic fast mode keeps the base upstream model ID and adds `speed: \"fast\"` with the fast-mode beta.\n *\n * Eligibility requires the first-party `anthropic` provider on the Messages API and a supported model.\n * Fast mode is not offered through Amazon Bedrock, Google Vertex, GitHub Copilot, OpenRouter, or a\n * renamed or proxied Anthropic-compatible provider.\n */\nexport function usesAnthropicFastMode(model: Pick<Model<Api>, \"api\" | \"id\" | \"provider\">): boolean {\n\treturn (\n\t\tmodel.api === \"anthropic-messages\" &&\n\t\tmodel.provider === \"anthropic\" &&\n\t\tANTHROPIC_FAST_MODE_MODEL_IDS.has(model.id)\n\t);\n}\n\nfunction advertisedModelIds(value: unknown): readonly string[] | undefined {\n\tif (!Array.isArray(value) || !value.every((entry) => typeof entry === \"string\")) return undefined;\n\treturn value;\n}\n\n/** Read the exact fast model IDs a stored GitHub Copilot OAuth credential advertises. */\nexport function copilotAdvertisedFastModelIds(credential: Credential | undefined): readonly string[] | undefined {\n\tif (credential?.type !== \"oauth\") return undefined;\n\treturn advertisedModelIds(credential.fastModelIds);\n}\n\n/**\n * Whether a stored GitHub Copilot OAuth credential advertises this exact model ID at all — as a\n * selectable picker/policy model or as a fast sibling.\n *\n * Copilot's per-account advertisement is the authority the provider's own `filterModels` uses, so\n * restoration consults the same lists. An ID the account advertises as an ordinary model is ordinary,\n * whatever its name ends in.\n */\nexport function copilotAdvertisesModelId(credential: Credential | undefined, modelId: string): boolean {\n\tif (credential?.type !== \"oauth\") return false;\n\treturn (\n\t\tadvertisedModelIds(credential.availableModelIds)?.includes(modelId) === true ||\n\t\tadvertisedModelIds(credential.fastModelIds)?.includes(modelId) === true\n\t);\n}\n\n/** A model without tier metadata keeps offering Fast; one that lists its tiers must advertise it, as in Codex. */\nfunction advertisesFastServiceTier(model: Model<Api>): boolean {\n\treturn model.serviceTiers === undefined || getServiceTierCost(model, FAST_MODEL_SERVICE_TIER) !== undefined;\n}\n\nfunction fastRouteForBaseModel(\n\tmodel: Model<Api>,\n\tentitledCopilotFastModelIds: ReadonlySet<string>,\n): ModelFastRoute | undefined {\n\tif (usesOpenAIFastServiceTier(model)) {\n\t\treturn advertisesFastServiceTier(model)\n\t\t\t? { baseModelId: model.id, upstreamModelId: model.id, serviceTier: FAST_MODEL_SERVICE_TIER }\n\t\t\t: undefined;\n\t}\n\tif (usesXaiFastServiceTier(model)) {\n\t\treturn { baseModelId: model.id, upstreamModelId: model.id, serviceTier: FAST_MODEL_SERVICE_TIER };\n\t}\n\tif (usesAnthropicFastMode(model)) {\n\t\treturn { baseModelId: model.id, upstreamModelId: model.id, speed: FAST_MODEL_SPEED };\n\t}\n\tif (isGitHubCopilotModel(model)) {\n\t\tconst advertisedId = fastModelId(model.id);\n\t\treturn entitledCopilotFastModelIds.has(advertisedId)\n\t\t\t? { baseModelId: model.id, upstreamModelId: advertisedId }\n\t\t\t: undefined;\n\t}\n\treturn undefined;\n}\n\n/**\n * Add a selectable `<base-model-id>-fast` entry for every eligible model, carrying the explicit\n * {@link ModelFastRoute} metadata that gives it fast semantics. The input list is preserved verbatim\n * and in order; each derived entry is appended directly after the model it derives from.\n *\n * A model whose exact `-fast` ID is already owned by the provider, a `models.json` custom model, or an\n * extension wins: derivation is suppressed for it and a diagnostic is recorded. The owning model keeps\n * whatever semantics it declares, because fast behavior comes only from `fastRoute`, never from the\n * `-fast` suffix. For the same reason a base model whose ID already ends in `-fast` is never used to\n * derive a `-fast-fast` variant: that is not a canonical ID this scheme defines.\n *\n * A derived entry is a real catalog model, so a `modelOverrides` entry keyed on its exact `-fast` ID\n * applies to it after derivation. Without that pass the derived entry would inherit the *base* model's\n * overrides and its own would be silently inert.\n *\n * No variant is derived for an API whose transport a registered extension owns, because Atomic cannot\n * enforce the route through a transport it does not serialize.\n */\nexport function deriveFastModelVariants(\n\tproviderId: string,\n\tmodels: readonly Model<Api>[],\n\toptions: DeriveFastModelVariantsOptions = {},\n): FastModelVariantDerivation {\n\tconst ownedModelIds = new Set(models.map((model) => model.id));\n\tconst entitledCopilotFastModelIds = new Set(options.copilotFastModelIds ?? []);\n\tconst derived: Model<Api>[] = [];\n\tconst diagnostics: FastModelVariantDiagnostic[] = [];\n\tlet changed = false;\n\tfor (const model of models) {\n\t\tderived.push(model);\n\t\tif (\n\t\t\tmodel.fastRoute !== undefined ||\n\t\t\tmodel.id.endsWith(FAST_MODEL_ID_SUFFIX) ||\n\t\t\tmodel.id.endsWith(ULTRAFAST_MODEL_ID_SUFFIX)\n\t\t)\n\t\t\tcontinue;\n\t\tif (options.customModelIds?.has(model.id)) continue;\n\t\t// An extension that supplies this API's stream function owns its serialization, so Atomic cannot\n\t\t// guarantee the route reaches the wire. Publishing a `-fast` choice it may not honor is the same\n\t\t// hazard as publishing one for an adapter that cannot carry the tier.\n\t\tif (options.extensionOwnedApis?.has(model.api) === true) continue;\n\t\tconst fastRoute = fastRouteForBaseModel(model, entitledCopilotFastModelIds);\n\t\tconst routes: Array<{ suffix: string; label: string; route: ModelFastRoute }> = [];\n\t\tif (fastRoute) routes.push({ suffix: FAST_MODEL_ID_SUFFIX, label: \"fast\", route: fastRoute });\n\t\tif (usesOpenAIFastServiceTier(model) && getServiceTierCost(model, ULTRAFAST_MODEL_SERVICE_TIER)) {\n\t\t\troutes.push({\n\t\t\t\tsuffix: ULTRAFAST_MODEL_ID_SUFFIX,\n\t\t\t\tlabel: \"ultrafast\",\n\t\t\t\troute: { baseModelId: model.id, upstreamModelId: model.id, serviceTier: ULTRAFAST_MODEL_SERVICE_TIER },\n\t\t\t});\n\t\t}\n\t\tfor (const { suffix, label, route } of routes) {\n\t\t\tconst variantId = `${model.id}${suffix}`;\n\t\t\tif (ownedModelIds.has(variantId)) {\n\t\t\t\tdiagnostics.push({\n\t\t\t\t\tprovider: providerId,\n\t\t\t\t\tmodelId: variantId,\n\t\t\t\t\tmessage:\n\t\t\t\t\t\t`Model \"${providerId}/${variantId}\" is already defined by the provider, models.json, or an extension, ` +\n\t\t\t\t\t\t`so Atomic did not derive a ${label} variant of \"${providerId}/${model.id}\". ` +\n\t\t\t\t\t\t`That model routes exactly as declared. Rename or remove it to get the derived ${label} variant instead.`,\n\t\t\t\t});\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconst override = options.modelOverrides?.[variantId];\n\t\t\tconst variant: Model<Api> = { ...model, id: variantId, name: `${model.name} (${label})`, fastRoute: route };\n\t\t\tderived.push(override ? applyModelOverride(variant, override) : variant);\n\t\t\tchanged = true;\n\t\t}\n\t}\n\tif (!changed && diagnostics.length === 0) return { models, diagnostics };\n\treturn { models: derived, diagnostics };\n}\n\n/**\n * Overlay derived fast model variants onto a composed provider. Apply this after built-in,\n * `models.json`, extension, and `modelOverrides` composition so exact user-owned `-fast` IDs are\n * already present and win the collision.\n */\nexport function withFastModelVariants(provider: Provider, options: FastModelVariantsOptions = {}): Provider {\n\treturn {\n\t\t...provider,\n\t\tgetModels: () => {\n\t\t\tconst { models, diagnostics } = deriveFastModelVariants(provider.id, provider.getModels(), {\n\t\t\t\tcopilotFastModelIds: isGitHubCopilotModel({ provider: provider.id })\n\t\t\t\t\t? options.getCopilotFastModelIds?.()\n\t\t\t\t\t: undefined,\n\t\t\t\tmodelOverrides: options.getModelOverrides?.(),\n\t\t\t\textensionOwnedApis: options.getExtensionOwnedApis?.(),\n\t\t\t\tcustomModelIds: options.getCustomModelIds?.(),\n\t\t\t});\n\t\t\toptions.onDiagnostics?.(provider.id, diagnostics);\n\t\t\treturn models;\n\t\t},\n\t};\n}\n"]}
|
|
1
|
+
{"version":3,"file":"fast-model-variants.js","sourceRoot":"","sources":["../../src/core/fast-model-variants.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n\ttype Api,\n\ttype Credential,\n\tgetServiceTierCost,\n\ttype Model,\n\ttype ModelFastRoute,\n\ttype Provider,\n} from \"@bastani/pi-ai\";\nimport type { ModelsJsonModelOverride } from \"./model-config.ts\";\nimport { applyModelOverride } from \"./provider-composer-internal.ts\";\n\n/** Canonical suffix every selectable fast model variant carries. */\nexport const FAST_MODEL_ID_SUFFIX = \"-fast\";\n\n/** Service tier OpenAI-style providers use to route fast traffic. */\nexport const FAST_MODEL_SERVICE_TIER = \"priority\" as const;\n\n/** Codex's Ultrafast tier, offered only for models that advertise it; access depends on the account. */\nexport const ULTRAFAST_MODEL_ID_SUFFIX = \"-ultrafast\";\nexport const ULTRAFAST_MODEL_SERVICE_TIER = \"ultrafast\" as const;\n\n/** Inference speed Anthropic's Messages API uses to route fast traffic. */\nexport const FAST_MODEL_SPEED = \"fast\" as const;\n\n/**\n * Claude models Anthropic's fast mode accepts. Requesting `speed: \"fast\"` on any other model is an\n * error, so the list is explicit rather than a family-name pattern.\n * https://platform.claude.com/docs/en/build-with-claude/fast-mode#supported-models\n */\nexport const ANTHROPIC_FAST_MODE_MODEL_IDS: ReadonlySet<string> = new Set([\n\t\"claude-opus-5-5\",\n\t\"claude-opus-5\",\n\t\"claude-opus-4-8\",\n]);\n\n/** A derived fast variant that was suppressed because something already owns its exact model ID. */\nexport interface FastModelVariantDiagnostic {\n\tprovider: string;\n\t/** The exact selectable model ID that collided. */\n\tmodelId: string;\n\tmessage: string;\n}\n\nexport interface FastModelVariantDerivation {\n\tmodels: readonly Model<Api>[];\n\tdiagnostics: readonly FastModelVariantDiagnostic[];\n}\n\nexport interface DeriveFastModelVariantsOptions {\n\t/** Exact fast model IDs the stored GitHub Copilot credential advertises for this account. */\n\tcopilotFastModelIds?: readonly string[];\n\t/** `models.json` `modelOverrides` for this provider, applied to derived entries by their exact `-fast` ID. */\n\tmodelOverrides?: Readonly<Record<string, ModelsJsonModelOverride>>;\n\t/** APIs whose transport a registered extension owns for this provider. No variant is derived for them. */\n\textensionOwnedApis?: ReadonlySet<Api>;\n\t/** IDs explicitly declared in this provider's models.json models array. Never derive siblings for them. */\n\tcustomModelIds?: ReadonlySet<string>;\n}\n\nexport interface FastModelVariantsOptions {\n\t/**\n\t * Synchronous read of the exact fast model IDs the stored GitHub Copilot credential advertises.\n\t * Read per call so a credential that lands after provider composition still takes effect.\n\t */\n\tgetCopilotFastModelIds?: () => readonly string[] | undefined;\n\t/** Synchronous read of this provider's `models.json` `modelOverrides`, so a reload takes effect. */\n\tgetModelOverrides?: () => Readonly<Record<string, ModelsJsonModelOverride>> | undefined;\n\t/** Read current custom model IDs per pass so models.json reloads update eligibility. */\n\tgetCustomModelIds?: () => ReadonlySet<string>;\n\t/**\n\t * Synchronous read of the APIs a registered extension supplies a stream function for. Read per call\n\t * because extensions register after initial composition on some paths.\n\t */\n\tgetExtensionOwnedApis?: () => ReadonlySet<Api> | undefined;\n\t/** Called after every derivation pass with the complete diagnostic list for this provider. */\n\tonDiagnostics?: (providerId: string, diagnostics: readonly FastModelVariantDiagnostic[]) => void;\n}\n\n/** Canonical selectable ID of the fast variant of `baseModelId`. */\nexport function fastModelId(baseModelId: string): string {\n\treturn `${baseModelId}${FAST_MODEL_ID_SUFFIX}`;\n}\n\n/**\n * The two pi-ai adapters that serialize `service_tier`. `azure-openai-responses` and\n * `openai-completions` have no such option, and `streamSimple` drops it, so a service-tier route on\n * any other API would silently degrade to an ordinary request.\n */\nexport function isNativeFastRouteApi(api: Api): api is \"openai-responses\" | \"openai-codex-responses\" {\n\treturn api === \"openai-responses\" || api === \"openai-codex-responses\";\n}\n\n/**\n * OpenAI-style fast routing keeps the base upstream model ID and adds a priority service tier.\n *\n * Eligibility requires both a first-party provider ID and an adapter that serializes\n * `service_tier`. A renamed provider, proxy, Azure (`azure`), OpenRouter\n * (`openai-completions`), and generic OpenAI-compatible providers do not qualify. An `openai` or\n * `openai-codex` model on an adapter that cannot carry `service_tier` must not offer a fast variant,\n * because selecting it would send an ordinary request under a name that promises otherwise.\n */\nexport function usesOpenAIFastServiceTier(model: Pick<Model<Api>, \"api\" | \"provider\">): boolean {\n\treturn isNativeFastRouteApi(model.api) && (model.provider === \"openai\" || model.provider === \"openai-codex\");\n}\n\n/**\n * xAI Priority Processing keeps the base upstream Grok model ID and adds the same\n * `service_tier: \"priority\"` field on the Responses API. xAI has no `-fast` model slugs for current\n * Grok models; priority is billed at twice the standard token rates, and only when the response\n * confirms the tier. https://docs.x.ai/developers/advanced-api-usage/priority-processing\n *\n * Eligibility requires the first-party `xai` provider on `openai-responses`. OpenRouter, Vercel AI\n * Gateway, and renamed or proxied xAI-compatible providers do not qualify.\n */\nexport function usesXaiFastServiceTier(model: Pick<Model<Api>, \"api\" | \"provider\">): boolean {\n\treturn model.api === \"openai-responses\" && model.provider === \"xai\";\n}\n\n/** GitHub Copilot advertises real fast sibling model IDs per account; it never uses a service tier. */\nexport function isGitHubCopilotModel(model: Pick<Model<Api>, \"provider\">): boolean {\n\treturn model.provider === \"github-copilot\";\n}\n\n/**\n * Anthropic fast mode keeps the base upstream model ID and adds `speed: \"fast\"` with the fast-mode beta.\n *\n * Eligibility requires the first-party `anthropic` provider on the Messages API and a supported model.\n * Fast mode is not offered through Amazon Bedrock, Google Vertex, GitHub Copilot, OpenRouter, or a\n * renamed or proxied Anthropic-compatible provider.\n */\nexport function usesAnthropicFastMode(model: Pick<Model<Api>, \"api\" | \"id\" | \"provider\">): boolean {\n\treturn (\n\t\tmodel.api === \"anthropic-messages\" &&\n\t\tmodel.provider === \"anthropic\" &&\n\t\tANTHROPIC_FAST_MODE_MODEL_IDS.has(model.id)\n\t);\n}\n\nfunction advertisedModelIds(value: unknown): readonly string[] | undefined {\n\tif (!Array.isArray(value) || !value.every((entry) => typeof entry === \"string\")) return undefined;\n\treturn value;\n}\n\n/** Read the exact fast model IDs a stored GitHub Copilot OAuth credential advertises. */\nexport function copilotAdvertisedFastModelIds(credential: Credential | undefined): readonly string[] | undefined {\n\tif (credential?.type !== \"oauth\") return undefined;\n\treturn advertisedModelIds(credential.fastModelIds);\n}\n\n/**\n * Whether a stored GitHub Copilot OAuth credential advertises this exact model ID at all — as a\n * selectable picker/policy model or as a fast sibling.\n *\n * Copilot's per-account advertisement is the authority the provider's own `filterModels` uses, so\n * restoration consults the same lists. An ID the account advertises as an ordinary model is ordinary,\n * whatever its name ends in.\n */\nexport function copilotAdvertisesModelId(credential: Credential | undefined, modelId: string): boolean {\n\tif (credential?.type !== \"oauth\") return false;\n\treturn (\n\t\tadvertisedModelIds(credential.availableModelIds)?.includes(modelId) === true ||\n\t\tadvertisedModelIds(credential.fastModelIds)?.includes(modelId) === true\n\t);\n}\n\n/** A model without tier metadata keeps offering Fast; one that lists its tiers must advertise it, as in Codex. */\nfunction advertisesFastServiceTier(model: Model<Api>): boolean {\n\treturn model.serviceTiers === undefined || getServiceTierCost(model, FAST_MODEL_SERVICE_TIER) !== undefined;\n}\n\nfunction fastRouteForBaseModel(\n\tmodel: Model<Api>,\n\tentitledCopilotFastModelIds: ReadonlySet<string>,\n): ModelFastRoute | undefined {\n\tif (usesOpenAIFastServiceTier(model)) {\n\t\treturn advertisesFastServiceTier(model)\n\t\t\t? { baseModelId: model.id, upstreamModelId: model.id, serviceTier: FAST_MODEL_SERVICE_TIER }\n\t\t\t: undefined;\n\t}\n\tif (usesXaiFastServiceTier(model)) {\n\t\treturn { baseModelId: model.id, upstreamModelId: model.id, serviceTier: FAST_MODEL_SERVICE_TIER };\n\t}\n\tif (usesAnthropicFastMode(model)) {\n\t\treturn { baseModelId: model.id, upstreamModelId: model.id, speed: FAST_MODEL_SPEED };\n\t}\n\tif (isGitHubCopilotModel(model)) {\n\t\tconst advertisedId = fastModelId(model.id);\n\t\treturn entitledCopilotFastModelIds.has(advertisedId)\n\t\t\t? { baseModelId: model.id, upstreamModelId: advertisedId }\n\t\t\t: undefined;\n\t}\n\treturn undefined;\n}\n\n/**\n * Add a selectable `<base-model-id>-fast` entry for every eligible model, carrying the explicit\n * {@link ModelFastRoute} metadata that gives it fast semantics. The input list is preserved verbatim\n * and in order; each derived entry is appended directly after the model it derives from.\n *\n * A model whose exact `-fast` ID is already owned by the provider, a `models.json` custom model, or an\n * extension wins: derivation is suppressed for it and a diagnostic is recorded. The owning model keeps\n * whatever semantics it declares, because fast behavior comes only from `fastRoute`, never from the\n * `-fast` suffix. For the same reason a base model whose ID already ends in `-fast` is never used to\n * derive a `-fast-fast` variant: that is not a canonical ID this scheme defines.\n *\n * A derived entry is a real catalog model, so a `modelOverrides` entry keyed on its exact `-fast` ID\n * applies to it after derivation. Without that pass the derived entry would inherit the *base* model's\n * overrides and its own would be silently inert.\n *\n * No variant is derived for an API whose transport a registered extension owns, because Atomic cannot\n * enforce the route through a transport it does not serialize.\n */\nexport function deriveFastModelVariants(\n\tproviderId: string,\n\tmodels: readonly Model<Api>[],\n\toptions: DeriveFastModelVariantsOptions = {},\n): FastModelVariantDerivation {\n\tconst ownedModelIds = new Set(models.map((model) => model.id));\n\tconst entitledCopilotFastModelIds = new Set(options.copilotFastModelIds ?? []);\n\tconst derived: Model<Api>[] = [];\n\tconst diagnostics: FastModelVariantDiagnostic[] = [];\n\tlet changed = false;\n\tfor (const model of models) {\n\t\tderived.push(model);\n\t\tif (\n\t\t\tmodel.fastRoute !== undefined ||\n\t\t\tmodel.id.endsWith(FAST_MODEL_ID_SUFFIX) ||\n\t\t\tmodel.id.endsWith(ULTRAFAST_MODEL_ID_SUFFIX)\n\t\t)\n\t\t\tcontinue;\n\t\tif (options.customModelIds?.has(model.id)) continue;\n\t\t// An extension that supplies this API's stream function owns its serialization, so Atomic cannot\n\t\t// guarantee the route reaches the wire. Publishing a `-fast` choice it may not honor is the same\n\t\t// hazard as publishing one for an adapter that cannot carry the tier.\n\t\tif (options.extensionOwnedApis?.has(model.api) === true) continue;\n\t\tconst fastRoute = fastRouteForBaseModel(model, entitledCopilotFastModelIds);\n\t\tconst routes: Array<{ suffix: string; label: string; route: ModelFastRoute }> = [];\n\t\tif (fastRoute) routes.push({ suffix: FAST_MODEL_ID_SUFFIX, label: \"fast\", route: fastRoute });\n\t\tif (usesOpenAIFastServiceTier(model) && getServiceTierCost(model, ULTRAFAST_MODEL_SERVICE_TIER)) {\n\t\t\troutes.push({\n\t\t\t\tsuffix: ULTRAFAST_MODEL_ID_SUFFIX,\n\t\t\t\tlabel: \"ultrafast\",\n\t\t\t\troute: { baseModelId: model.id, upstreamModelId: model.id, serviceTier: ULTRAFAST_MODEL_SERVICE_TIER },\n\t\t\t});\n\t\t}\n\t\tfor (const { suffix, label, route } of routes) {\n\t\t\tconst variantId = `${model.id}${suffix}`;\n\t\t\tif (ownedModelIds.has(variantId)) {\n\t\t\t\tdiagnostics.push({\n\t\t\t\t\tprovider: providerId,\n\t\t\t\t\tmodelId: variantId,\n\t\t\t\t\tmessage:\n\t\t\t\t\t\t`Model \"${providerId}/${variantId}\" is already defined by the provider, models.json, or an extension, ` +\n\t\t\t\t\t\t`so Atomic did not derive a ${label} variant of \"${providerId}/${model.id}\". ` +\n\t\t\t\t\t\t`That model routes exactly as declared. Rename or remove it to get the derived ${label} variant instead.`,\n\t\t\t\t});\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconst override = options.modelOverrides?.[variantId];\n\t\t\tconst variant: Model<Api> = { ...model, id: variantId, name: `${model.name} (${label})`, fastRoute: route };\n\t\t\tderived.push(override ? applyModelOverride(variant, override) : variant);\n\t\t\tchanged = true;\n\t\t}\n\t}\n\tif (!changed && diagnostics.length === 0) return { models, diagnostics };\n\treturn { models: derived, diagnostics };\n}\n\n/**\n * Overlay derived fast model variants onto a composed provider. Apply this after built-in,\n * `models.json`, extension, and `modelOverrides` composition so exact user-owned `-fast` IDs are\n * already present and win the collision.\n */\nexport function withFastModelVariants(provider: Provider, options: FastModelVariantsOptions = {}): Provider {\n\treturn {\n\t\t...provider,\n\t\tgetModels: () => {\n\t\t\tconst { models, diagnostics } = deriveFastModelVariants(provider.id, provider.getModels(), {\n\t\t\t\tcopilotFastModelIds: isGitHubCopilotModel({ provider: provider.id })\n\t\t\t\t\t? options.getCopilotFastModelIds?.()\n\t\t\t\t\t: undefined,\n\t\t\t\tmodelOverrides: options.getModelOverrides?.(),\n\t\t\t\textensionOwnedApis: options.getExtensionOwnedApis?.(),\n\t\t\t\tcustomModelIds: options.getCustomModelIds?.(),\n\t\t\t});\n\t\t\toptions.onDiagnostics?.(provider.id, diagnostics);\n\t\t\treturn models;\n\t\t},\n\t};\n}\n"]}
|
|
@@ -89,11 +89,11 @@ export declare const KEYBINDINGS: {
|
|
|
89
89
|
readonly description: "Move cursor word right";
|
|
90
90
|
};
|
|
91
91
|
readonly "tui.editor.cursorLineStart": {
|
|
92
|
-
readonly defaultKeys: ["home", "ctrl+
|
|
92
|
+
readonly defaultKeys: ["home", "ctrl+a"];
|
|
93
93
|
readonly description: "Move to line start";
|
|
94
94
|
};
|
|
95
95
|
readonly "tui.editor.cursorLineEnd": {
|
|
96
|
-
readonly defaultKeys: ["end", "ctrl+
|
|
96
|
+
readonly defaultKeys: ["end", "ctrl+e"];
|
|
97
97
|
readonly description: "Move to line end";
|
|
98
98
|
};
|
|
99
99
|
readonly "tui.editor.jumpForward": {
|
|
@@ -209,11 +209,11 @@ export declare const KEYBINDINGS: {
|
|
|
209
209
|
readonly description: "Scroll viewport down one line";
|
|
210
210
|
};
|
|
211
211
|
readonly "tui.altScreen.top": {
|
|
212
|
-
readonly defaultKeys: "home";
|
|
212
|
+
readonly defaultKeys: "ctrl+home";
|
|
213
213
|
readonly description: "Scroll viewport to top";
|
|
214
214
|
};
|
|
215
215
|
readonly "tui.altScreen.bottom": {
|
|
216
|
-
readonly defaultKeys: "end";
|
|
216
|
+
readonly defaultKeys: "ctrl+end";
|
|
217
217
|
readonly description: "Scroll viewport to bottom";
|
|
218
218
|
};
|
|
219
219
|
readonly "app.workflows.scrollUp": {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"model-config.d.ts","sourceRoot":"","sources":["../../src/core/model-config.ts"],"names":[],"mappings":"AAAA,wDAAwD;AAGxD,OAAO,EAAE,KAAK,MAAM,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"model-config.d.ts","sourceRoot":"","sources":["../../src/core/model-config.ts"],"names":[],"mappings":"AAAA,wDAAwD;AAGxD,OAAO,EAAE,KAAK,MAAM,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AA+M5C,QAAA,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAiBzB,CAAC;AAEH,QAAA,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAsBvB,CAAC;AAEH,QAAA,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAWxB,CAAC;AAOH,MAAM,MAAM,eAAe,GAAG,MAAM,CAAC,OAAO,qBAAqB,CAAC,CAAC;AACnE,MAAM,MAAM,uBAAuB,GAAG,MAAM,CAAC,OAAO,mBAAmB,CAAC,CAAC;AACzE,MAAM,MAAM,kBAAkB,GAAG,MAAM,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAsBrE,yCAAyC;AACzC,qBAAa,WAAW;IACvB,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA0C;IACpE,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAqB;IAE3C,OAAO,eAGN;IAED,OAAa,IAAI,CAAC,cAAc,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC,WAAW,CAAC,CAuC1E;IAED,WAAW,CAAC,UAAU,EAAE,MAAM,GAAG,kBAAkB,GAAG,SAAS,CAE9D;IAED,cAAc,IAAI,SAAS,MAAM,EAAE,CAElC;IAED,QAAQ,IAAI,MAAM,GAAG,SAAS,CAE7B;CACD"}
|