@bastani/atomic 0.9.28-alpha.4 → 0.9.28-alpha.5

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.
Files changed (126) hide show
  1. package/CHANGELOG.md +16 -0
  2. package/dist/builtin/intercom/CHANGELOG.md +6 -0
  3. package/dist/builtin/intercom/README.md +3 -2
  4. package/dist/builtin/intercom/broker/broker.ts +90 -14
  5. package/dist/builtin/intercom/broker/paths.ts +4 -0
  6. package/dist/builtin/intercom/broker/socket-liveness.ts +32 -0
  7. package/dist/builtin/intercom/broker/socket-replacement-lock.ts +104 -0
  8. package/dist/builtin/intercom/broker/spawn.ts +108 -63
  9. package/dist/builtin/intercom/index.bundle.mjs +114 -61
  10. package/dist/builtin/intercom/package.json +1 -1
  11. package/dist/builtin/mcp/package.json +1 -1
  12. package/dist/builtin/subagents/package.json +1 -1
  13. package/dist/builtin/web-access/package.json +1 -1
  14. package/dist/builtin/workflows/CHANGELOG.md +6 -0
  15. package/dist/builtin/workflows/builtin/{chunk-aqv8ny38.js → chunk-9ywkdsa9.js} +1 -1
  16. package/dist/builtin/workflows/builtin/{chunk-p6jagvyf.js → chunk-bnz4knhy.js} +1 -1
  17. package/dist/builtin/workflows/builtin/{chunk-br4ac9a3.js → chunk-dx5sjaxe.js} +1 -1
  18. package/dist/builtin/workflows/builtin/{chunk-p3xmajmj.js → chunk-v4scsq3y.js} +41 -13
  19. package/dist/builtin/workflows/builtin/goal.js +2 -2
  20. package/dist/builtin/workflows/builtin/index.js +3 -3
  21. package/dist/builtin/workflows/builtin/ralph.js +2 -2
  22. package/dist/builtin/workflows/package.json +1 -1
  23. package/dist/builtin/workflows/src/extension/index.bundle.mjs +38 -14
  24. package/dist/builtin/workflows/src/index.js +38 -14
  25. package/dist/cli/startup-ui.d.ts +3 -2
  26. package/dist/cli/startup-ui.d.ts.map +1 -1
  27. package/dist/cli/startup-ui.js +19 -4
  28. package/dist/cli/startup-ui.js.map +1 -1
  29. package/dist/core/agent-session-runtime.d.ts +5 -1
  30. package/dist/core/agent-session-runtime.d.ts.map +1 -1
  31. package/dist/core/agent-session-runtime.js +13 -9
  32. package/dist/core/agent-session-runtime.js.map +1 -1
  33. package/dist/core/extensions/session-events.d.ts +2 -0
  34. package/dist/core/extensions/session-events.d.ts.map +1 -1
  35. package/dist/core/extensions/session-events.js.map +1 -1
  36. package/dist/core/provider-alias.d.ts.map +1 -1
  37. package/dist/core/provider-alias.js +8 -0
  38. package/dist/core/provider-alias.js.map +1 -1
  39. package/dist/core/provider-composer-internal.d.ts.map +1 -1
  40. package/dist/core/provider-composer-internal.js +6 -3
  41. package/dist/core/provider-composer-internal.js.map +1 -1
  42. package/dist/core/resource-loader-reload.d.ts.map +1 -1
  43. package/dist/core/resource-loader-reload.js +1 -0
  44. package/dist/core/resource-loader-reload.js.map +1 -1
  45. package/dist/core/resource-loader-types.d.ts +1 -0
  46. package/dist/core/resource-loader-types.d.ts.map +1 -1
  47. package/dist/core/resource-loader-types.js.map +1 -1
  48. package/dist/extensions/herdr/index.d.ts.map +1 -1
  49. package/dist/extensions/herdr/index.js +20 -2
  50. package/dist/extensions/herdr/index.js.map +1 -1
  51. package/dist/extensions/herdr/pane-owner.d.ts +7 -0
  52. package/dist/extensions/herdr/pane-owner.d.ts.map +1 -1
  53. package/dist/extensions/herdr/pane-owner.js +53 -11
  54. package/dist/extensions/herdr/pane-owner.js.map +1 -1
  55. package/dist/main-deferred-startup.d.ts +8 -0
  56. package/dist/main-deferred-startup.d.ts.map +1 -1
  57. package/dist/main-deferred-startup.js +6 -0
  58. package/dist/main-deferred-startup.js.map +1 -1
  59. package/dist/main.d.ts.map +1 -1
  60. package/dist/main.js +11 -3
  61. package/dist/main.js.map +1 -1
  62. package/dist/modes/interactive/interactive-auth-routing.js +2 -2
  63. package/dist/modes/interactive/interactive-auth-routing.js.map +1 -1
  64. package/dist/modes/interactive/interactive-extension-dialogs.js +8 -0
  65. package/dist/modes/interactive/interactive-extension-dialogs.js.map +1 -1
  66. package/dist/modes/interactive/interactive-mode-base.d.ts +1 -0
  67. package/dist/modes/interactive/interactive-mode-base.d.ts.map +1 -1
  68. package/dist/modes/interactive/interactive-mode-base.js +1 -0
  69. package/dist/modes/interactive/interactive-mode-base.js.map +1 -1
  70. package/dist/modes/interactive/interactive-mode-helpers.js +1 -1
  71. package/dist/modes/interactive/interactive-mode-helpers.js.map +1 -1
  72. package/dist/modes/interactive/interactive-mode-types.d.ts +1 -0
  73. package/dist/modes/interactive/interactive-mode-types.d.ts.map +1 -1
  74. package/dist/modes/interactive/interactive-mode-types.js.map +1 -1
  75. package/dist/modes/interactive/interactive-process-lifecycle.js +1 -1
  76. package/dist/modes/interactive/interactive-process-lifecycle.js.map +1 -1
  77. package/dist/modes/interactive/interactive-startup-trust.d.ts +6 -0
  78. package/dist/modes/interactive/interactive-startup-trust.d.ts.map +1 -0
  79. package/dist/modes/interactive/interactive-startup-trust.js +15 -0
  80. package/dist/modes/interactive/interactive-startup-trust.js.map +1 -0
  81. package/dist/modes/interactive/interactive-startup.d.ts.map +1 -1
  82. package/dist/modes/interactive/interactive-startup.js +3 -0
  83. package/dist/modes/interactive/interactive-startup.js.map +1 -1
  84. package/dist/modes/interactive-engine/engine-child-liveness.d.ts +1 -0
  85. package/dist/modes/interactive-engine/engine-child-liveness.d.ts.map +1 -1
  86. package/dist/modes/interactive-engine/engine-child-liveness.js +15 -1
  87. package/dist/modes/interactive-engine/engine-child-liveness.js.map +1 -1
  88. package/dist/modes/interactive-engine/engine-monitor.d.ts +4 -0
  89. package/dist/modes/interactive-engine/engine-monitor.d.ts.map +1 -1
  90. package/dist/modes/interactive-engine/engine-monitor.js +17 -0
  91. package/dist/modes/interactive-engine/engine-monitor.js.map +1 -1
  92. package/dist/modes/interactive-engine/engine-quit-intent.d.ts +16 -0
  93. package/dist/modes/interactive-engine/engine-quit-intent.d.ts.map +1 -0
  94. package/dist/modes/interactive-engine/engine-quit-intent.js +27 -0
  95. package/dist/modes/interactive-engine/engine-quit-intent.js.map +1 -0
  96. package/dist/modes/interactive-engine/extension-ui-bridge.d.ts +1 -0
  97. package/dist/modes/interactive-engine/extension-ui-bridge.d.ts.map +1 -1
  98. package/dist/modes/interactive-engine/extension-ui-bridge.js +5 -0
  99. package/dist/modes/interactive-engine/extension-ui-bridge.js.map +1 -1
  100. package/dist/modes/interactive-engine/isolated-runtime.d.ts +4 -1
  101. package/dist/modes/interactive-engine/isolated-runtime.d.ts.map +1 -1
  102. package/dist/modes/interactive-engine/isolated-runtime.js +19 -2
  103. package/dist/modes/interactive-engine/isolated-runtime.js.map +1 -1
  104. package/dist/modes/interactive-engine/protocol.d.ts +18 -1
  105. package/dist/modes/interactive-engine/protocol.d.ts.map +1 -1
  106. package/dist/modes/interactive-engine/protocol.js +6 -0
  107. package/dist/modes/interactive-engine/protocol.js.map +1 -1
  108. package/dist/modes/rpc/rpc-client.d.ts +11 -0
  109. package/dist/modes/rpc/rpc-client.d.ts.map +1 -1
  110. package/dist/modes/rpc/rpc-client.js +42 -0
  111. package/dist/modes/rpc/rpc-client.js.map +1 -1
  112. package/dist/modes/rpc/rpc-input-scheduler.js +2 -2
  113. package/dist/modes/rpc/rpc-input-scheduler.js.map +1 -1
  114. package/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
  115. package/dist/modes/rpc/rpc-mode.js +23 -6
  116. package/dist/modes/rpc/rpc-mode.js.map +1 -1
  117. package/dist/modes/rpc/rpc-provider-auth.js +1 -1
  118. package/dist/modes/rpc/rpc-provider-auth.js.map +1 -1
  119. package/docs/extensions/events.md +3 -0
  120. package/docs/herdr.md +11 -2
  121. package/docs/models.md +1 -1
  122. package/docs/providers.md +2 -0
  123. package/docs/sdk.md +1 -1
  124. package/docs/settings.md +1 -1
  125. package/npm-shrinkwrap.json +32 -32
  126. package/package.json +3 -3
@@ -1 +1 @@
1
- {"version":3,"file":"agent-session-runtime.js","sourceRoot":"","sources":["../../src/core/agent-session-runtime.ts"],"names":[],"mappings":"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","sourcesContent":["import { AsyncLocalStorage } from \"node:async_hooks\";\nimport { constants, copyFileSync, existsSync, mkdirSync } from \"node:fs\";\nimport { basename, join, parse, resolve } from \"node:path\";\nimport type { AuthInteraction } from \"@bastani/pi-ai\";\nimport { type Api, type Model, modelsAreEqual } from \"@bastani/pi-ai/compat\";\nimport type { ThinkingLevel } from \"@earendil-works/pi-agent-core\";\nimport { resolvePath } from \"../utils/paths.ts\";\nimport type { AgentSession } from \"./agent-session.js\";\nimport type { AgentSessionInternalSurface } from \"./agent-session-methods.ts\";\nimport { type AtomicOAuthLoginCallbacks, loginRuntimeOAuthProvider } from \"./agent-session-runtime-auth.ts\";\nimport type { AgentSessionRuntimeDiagnostic, AgentSessionServices } from \"./agent-session-services.ts\";\nimport type {\n\tProjectTrustContext,\n\tReplacedSessionContext,\n\tSessionShutdownEvent,\n\tSessionStartEvent,\n} from \"./extensions/index.js\";\nimport { emitSessionShutdownEvent } from \"./extensions/runner.ts\";\nimport type { ModelFallbackReason } from \"./model-resolver-types.ts\";\nimport type { AuthStatus } from \"./provider-composer.ts\";\nimport type { CreateAgentSessionResult } from \"./sdk.ts\";\nimport { assertSessionCwdExists } from \"./session-cwd.ts\";\nimport { sessionLifecycleCreation, sessionLifecycleScopes } from \"./session-lifecycle-scope.ts\";\nimport {\n\tdrainSessionWork,\n\thasCallingSessionWork,\n\tregisterSessionRetirement,\n\ttrackSessionWork,\n} from \"./session-lifecycle-work.ts\";\nimport { SessionManager } from \"./session-manager.ts\";\n\n/**\n * Result returned by runtime creation.\n *\n * The caller gets the created session, its cwd-bound services, and all\n * diagnostics collected during setup.\n */\nexport interface CreateAgentSessionRuntimeResult extends CreateAgentSessionResult {\n\tservices: AgentSessionServices;\n\tdiagnostics: AgentSessionRuntimeDiagnostic[];\n}\n\nexport interface LogoutProviderResult {\n\tprovider: string;\n\tauthStatus: AuthStatus;\n\tmodels: Model<Api>[];\n\tscopedModels?: Array<{ model: Model<Api>; thinkingLevel?: ThinkingLevel }>;\n}\n\n/**\n * Creates a full runtime for a target cwd and session manager.\n *\n * The factory closes over process-global fixed inputs, recreates cwd-bound\n * services for the effective cwd, resolves session options against those\n * services, and finally creates the AgentSession.\n */\nexport interface CreateAgentSessionRuntimeOptions {\n\tcwd: string;\n\tagentDir: string;\n\tsessionManager: SessionManager;\n\tsessionStartEvent?: SessionStartEvent;\n\tprojectTrustContext?: ProjectTrustContext;\n}\n\nexport type CreateAgentSessionRuntimeFactory = {\n\t(options: CreateAgentSessionRuntimeOptions): Promise<CreateAgentSessionRuntimeResult>;\n\tprepareResume?: (\n\t\toptions: CreateAgentSessionRuntimeOptions,\n\t) => Promise<() => Promise<CreateAgentSessionRuntimeResult>>;\n};\n\nconst SESSION_REPLACEMENT_UI_PROMPT_SETTLEMENT_TIMEOUT_MS = 1_000;\n\n/**\n * Thrown when /import references a JSONL file path that does not exist.\n */\nexport class SessionImportFileNotFoundError extends Error {\n\treadonly filePath: string;\n\n\tconstructor(filePath: string) {\n\t\tsuper(`File not found: ${filePath}`);\n\t\tthis.name = \"SessionImportFileNotFoundError\";\n\t\tthis.filePath = filePath;\n\t}\n}\n\nfunction extractUserMessageText(content: string | Array<{ type: string; text?: string }>): string {\n\tif (typeof content === \"string\") {\n\t\treturn content;\n\t}\n\n\treturn content\n\t\t.filter((part): part is { type: \"text\"; text: string } => part.type === \"text\" && typeof part.text === \"string\")\n\t\t.map((part) => part.text)\n\t\t.join(\"\");\n}\n\n/**\n * Owns the current AgentSession plus its cwd-bound services.\n *\n * Session replacement methods tear down the current runtime first, then create\n * and apply the next runtime. If creation fails, the error is propagated to the\n * caller. The caller is responsible for user-facing error handling.\n */\nexport class AgentSessionRuntime {\n\tprivate rebindSession?: (session: AgentSession) => Promise<void>;\n\tprivate beforeSessionInvalidate?: () => void;\n\tprivate projectTrustContextFactory?: (cwd: string) => ProjectTrustContext;\n\tprivate closed = false;\n\tprivate closing?: Promise<void>;\n\tprivate cleanupFailures: unknown[] = [];\n\tprivate candidates = new Set<AgentSession>();\n\tprivate replacements = 0;\n\tprivate publication: Promise<void> = Promise.resolve();\n\tprivate publicationContext = new AsyncLocalStorage<{ active: boolean }>();\n\tprivate retained = new Set<AgentSession>();\n\tprivate retirementCleanup = new Set<Promise<void>>();\n\n\tprivate retainRetirementCleanup(cleanup: Promise<void>): void {\n\t\tconst receipt = cleanup.catch((error) => {\n\t\t\tthis.cleanupFailures.push(error);\n\t\t});\n\t\tthis.retirementCleanup.add(receipt);\n\t\tvoid receipt.then(() => this.retirementCleanup.delete(receipt));\n\t}\n\n\tprivate async finalizeRetained(): Promise<void> {\n\t\tconst session = this.session;\n\t\tif (!this.retained.delete(session)) return;\n\t\tconst finalize = async () => {\n\t\t\tawait emitSessionShutdownEvent(session.extensionRunner, { type: \"session_shutdown\", reason: \"quit\" });\n\t\t};\n\t\tif (hasCallingSessionWork(session)) {\n\t\t\tthis.retainRetirementCleanup(\n\t\t\t\tsession.dispose().then(finalize, async (error) => {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tawait finalize();\n\t\t\t\t\t} catch (failure) {\n\t\t\t\t\t\tthrow new AggregateError([error, failure], \"Retained cleanup failed\");\n\t\t\t\t\t}\n\t\t\t\t\tthrow error;\n\t\t\t\t}),\n\t\t\t);\n\t\t\treturn;\n\t\t}\n\t\tawait finalize();\n\t}\n\n\tprivate replace<T>(operation: () => Promise<T>): Promise<T> {\n\t\tregisterSessionRetirement(this.session);\n\t\treturn this.admit(async () => {\n\t\t\tthis.replacements++;\n\t\t\tlet outcome: { value: T } | { error: unknown };\n\t\t\ttry {\n\t\t\t\toutcome = { value: await operation() };\n\t\t\t} catch (error) {\n\t\t\t\toutcome = { error };\n\t\t\t\tthis.retainCleanupFailures(error);\n\t\t\t}\n\t\t\tthis.replacements--;\n\t\t\tif (this.replacements === 0 && (this.session as unknown as AgentSessionInternalSurface)._disposed) {\n\t\t\t\ttry {\n\t\t\t\t\tawait this.finalizeRetained();\n\t\t\t\t} catch (error) {\n\t\t\t\t\tthis.cleanupFailures.push(error);\n\t\t\t\t\tthrow Object.assign(\n\t\t\t\t\t\tnew AggregateError(\n\t\t\t\t\t\t\t\"error\" in outcome ? [outcome.error, error] : [error],\n\t\t\t\t\t\t\t\"Retained session cleanup failed\",\n\t\t\t\t\t\t),\n\t\t\t\t\t\t{ code: \"ShutdownFailed\" },\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (\"error\" in outcome) throw outcome.error;\n\t\t\treturn outcome.value;\n\t\t});\n\t}\n\n\tprivate assertOpen(): void {\n\t\tif (this.closed) throw Object.assign(new Error(\"Session is closed\"), { code: \"SessionClosed\" });\n\t}\n\n\tprivate admit<T>(operation: () => Promise<T>): Promise<T> {\n\t\ttry {\n\t\t\tthis.assertOpen();\n\t\t} catch (error) {\n\t\t\treturn Promise.reject(error);\n\t\t}\n\t\treturn trackSessionWork(this, operation);\n\t}\n\n\t/** Bind a process-local trust UI; closures never cross the engine RPC boundary. */\n\tsetProjectTrustContextFactory(factory: (cwd: string) => ProjectTrustContext): void {\n\t\tthis.projectTrustContextFactory = factory;\n\t}\n\n\t/** Return false for ordinary startup; otherwise finish the safe session in place. */\n\tasync completeStartup(): Promise<boolean> {\n\t\treturn this.admit(async () => {\n\t\t\tconst complete = this.services.completeStartup;\n\t\t\tif (!complete) return false;\n\t\t\tif (!this.projectTrustContextFactory) throw new Error(\"Startup trust requires a bound session UI\");\n\t\t\tawait complete(this.projectTrustContextFactory(this.services.cwd));\n\t\t\treturn true;\n\t\t});\n\t}\n\n\tprivate declare _session: AgentSession;\n\tprivate declare _services: AgentSessionServices;\n\tprivate declare readonly createRuntime: CreateAgentSessionRuntimeFactory;\n\tprivate declare _diagnostics: AgentSessionRuntimeDiagnostic[];\n\tprivate declare _modelFallbackMessage?: string;\n\tprivate declare _modelFallbackReason?: ModelFallbackReason;\n\n\tconstructor(\n\t\t_session: AgentSession,\n\t\t_services: AgentSessionServices,\n\t\tcreateRuntime: CreateAgentSessionRuntimeFactory,\n\t\t_diagnostics: AgentSessionRuntimeDiagnostic[] = [],\n\t\t_modelFallbackMessage?: string,\n\t\t_modelFallbackReason?: ModelFallbackReason,\n\t) {\n\t\tthis._session = _session;\n\t\tthis._services = _services;\n\t\tconst scope = sessionLifecycleScopes.get(_session) ?? {};\n\t\tconst context = () => {\n\t\t\tconst current = this._session as unknown as AgentSessionInternalSurface;\n\t\t\treturn {\n\t\t\t\tscope,\n\t\t\t\treplacement: true,\n\t\t\t\tbindings: {\n\t\t\t\t\t...this._session.extensionRunner.getChildHostBindings(),\n\t\t\t\t\tuiContext: current._extensionUIContext,\n\t\t\t\t\tmode: current._extensionMode,\n\t\t\t\t\tcommandContextActions: current._extensionCommandContextActions,\n\t\t\t\t\tshutdownHandler: current._extensionShutdownHandler,\n\t\t\t\t\tonError: current._extensionErrorListener,\n\t\t\t\t},\n\t\t\t};\n\t\t};\n\t\tthis.createRuntime = (options) =>\n\t\t\tthis.createReplacement(() => sessionLifecycleCreation.run(context(), () => createRuntime(options)));\n\t\tthis.createRuntime.prepareResume = (options) =>\n\t\t\tsessionLifecycleCreation.run(context(), async () => {\n\t\t\t\tconst complete = createRuntime.prepareResume\n\t\t\t\t\t? await createRuntime.prepareResume(options)\n\t\t\t\t\t: () => createRuntime(options);\n\t\t\t\treturn () => this.createReplacement(() => sessionLifecycleCreation.run(context(), complete));\n\t\t\t});\n\t\tthis._diagnostics = _diagnostics;\n\t\tthis._modelFallbackMessage = _modelFallbackMessage;\n\t\tthis._modelFallbackReason = _modelFallbackReason;\n\t}\n\n\tprivate retainCleanupFailures(error: unknown): void {\n\t\tif (error instanceof Error && \"code\" in error && error.code === \"ShutdownFailed\") {\n\t\t\tthis.cleanupFailures.push(error);\n\t\t} else if (error instanceof AggregateError) {\n\t\t\tfor (const nested of error.errors) this.retainCleanupFailures(nested);\n\t\t}\n\t}\n\n\tprivate async createReplacement(\n\t\tcreate: () => Promise<CreateAgentSessionRuntimeResult>,\n\t): Promise<CreateAgentSessionRuntimeResult> {\n\t\ttry {\n\t\t\tthis.assertOpen();\n\t\t\tconst candidate = await create();\n\t\t\tthis.candidates.add(candidate.session);\n\t\t\tif (this.closed) {\n\t\t\t\ttry {\n\t\t\t\t\tawait candidate.session.dispose();\n\t\t\t\t} catch (error) {\n\t\t\t\t\tthis.cleanupFailures.push(error);\n\t\t\t\t}\n\t\t\t\tthis.candidates.delete(candidate.session);\n\t\t\t\tthis.assertOpen();\n\t\t\t}\n\t\t\treturn candidate;\n\t\t} catch (cause) {\n\t\t\tthis.retainCleanupFailures(cause);\n\t\t\t// The last admitted replacement finalizes retained scope only if no\n\t\t\t// live successor exists. A failed peer must not shut down a winner.\n\t\t\tthrow cause;\n\t\t}\n\t}\n\n\tget services(): AgentSessionServices {\n\t\treturn this._services;\n\t}\n\n\tget session(): AgentSession {\n\t\treturn this._session;\n\t}\n\n\tget cwd(): string {\n\t\treturn this._services.cwd;\n\t}\n\n\tget diagnostics(): readonly AgentSessionRuntimeDiagnostic[] {\n\t\treturn this._diagnostics;\n\t}\n\n\tget modelFallbackMessage(): string | undefined {\n\t\treturn this._modelFallbackMessage;\n\t}\n\n\tget modelFallbackReason(): ModelFallbackReason | undefined {\n\t\treturn this._modelFallbackReason;\n\t}\n\n\treplaceModelFallback(message?: string, reason?: ModelFallbackReason): void {\n\t\tthis._modelFallbackMessage = message;\n\t\tthis._modelFallbackReason = reason;\n\t}\n\n\tresolveModelFallback(): void {\n\t\tthis.replaceModelFallback();\n\t}\n\n\tresolveModelFallbackAfterExplicitModelSelection(\n\t\tpreviousModel: Model<Api> | undefined,\n\t\tselectedModel: Model<Api> | null | undefined,\n\t): void {\n\t\tif (selectedModel && !modelsAreEqual(previousModel, selectedModel)) this.resolveModelFallback();\n\t}\n\n\tasync loginOAuthProvider(\n\t\tprovider: string,\n\t\tcallbacks: AtomicOAuthLoginCallbacks,\n\t): Promise<{ modelsRefreshed: boolean }> {\n\t\treturn this.admit(async () => {\n\t\t\tawait loginRuntimeOAuthProvider(this.session, provider, callbacks);\n\t\t\treturn { modelsRefreshed: true };\n\t\t});\n\t}\n\n\tasync loginApiKeyProvider(provider: string, interaction: AuthInteraction): Promise<{ modelsRefreshed: boolean }> {\n\t\treturn this.admit(async () => {\n\t\t\tawait this.session.modelRuntime.login(provider, \"api_key\", interaction);\n\t\t\treturn { modelsRefreshed: true };\n\t\t});\n\t}\n\n\tasync logoutProvider(provider: string): Promise<LogoutProviderResult> {\n\t\treturn this.admit(async () => {\n\t\t\tconst registry = this.session.modelRuntime;\n\t\t\tawait registry.logout(provider);\n\t\t\tconst availableIds = new Set(registry.getAvailableSnapshot().map((model) => `${model.provider}\\0${model.id}`));\n\t\t\tconst scopedModels = this.session.scopedModels.filter(({ model }) =>\n\t\t\t\tavailableIds.has(`${model.provider}\\0${model.id}`),\n\t\t\t);\n\t\t\tthis.session.setScopedModels([...scopedModels]);\n\t\t\tthis.session.refreshCurrentModelFromRegistry();\n\t\t\treturn {\n\t\t\t\tprovider,\n\t\t\t\tauthStatus: registry.getProviderAuthStatus(provider),\n\t\t\t\tmodels: [...registry.getAvailableSnapshot()],\n\t\t\t\tscopedModels: [...scopedModels],\n\t\t\t};\n\t\t});\n\t}\n\n\tsetRebindSession(rebindSession?: (session: AgentSession) => Promise<void>): void {\n\t\tthis.rebindSession = rebindSession;\n\t}\n\n\t/**\n\t * Set a synchronous callback that runs after `session_shutdown` handlers finish\n\t * but before the current session is invalidated.\n\t *\n\t * This is for host-owned UI teardown that must not yield to the event loop,\n\t * such as detaching extension-provided TUI components before the old extension\n\t * context becomes stale.\n\t */\n\tsetBeforeSessionInvalidate(beforeSessionInvalidate?: () => void): void {\n\t\tthis.beforeSessionInvalidate = beforeSessionInvalidate;\n\t}\n\n\tprivate async emitBeforeSwitch(\n\t\treason: \"new\" | \"resume\",\n\t\ttargetSessionFile?: string,\n\t): Promise<{ cancelled: boolean }> {\n\t\tconst runner = this.session.extensionRunner;\n\t\tif (!runner.hasHandlers(\"session_before_switch\")) {\n\t\t\treturn { cancelled: false };\n\t\t}\n\n\t\tconst result = await runner.emit({\n\t\t\ttype: \"session_before_switch\",\n\t\t\treason,\n\t\t\ttargetSessionFile,\n\t\t});\n\t\tthis.assertOpen();\n\t\treturn { cancelled: result?.cancel === true };\n\t}\n\n\tprivate async emitBeforeFork(\n\t\tentryId: string,\n\t\toptions: { position: \"before\" | \"at\" },\n\t): Promise<{ cancelled: boolean }> {\n\t\tconst runner = this.session.extensionRunner;\n\t\tif (!runner.hasHandlers(\"session_before_fork\")) {\n\t\t\treturn { cancelled: false };\n\t\t}\n\n\t\tconst result = await runner.emit({\n\t\t\ttype: \"session_before_fork\",\n\t\t\tentryId,\n\t\t\t...options,\n\t\t});\n\t\tthis.assertOpen();\n\t\treturn { cancelled: result?.cancel === true };\n\t}\n\n\tprivate disposeCurrentSession(event: SessionShutdownEvent): Promise<void> {\n\t\tconst session = this.session;\n\t\tif (event.reason !== \"quit\") this.retained.add(session);\n\t\tconst receipt = (session as unknown as AgentSessionInternalSurface)._close(event, this.beforeSessionInvalidate);\n\t\tif (event.reason !== \"quit\" && hasCallingSessionWork(session)) this.retainRetirementCleanup(session.dispose());\n\t\treturn receipt;\n\t}\n\n\t/**\n\t * Settle an active response before the session it belongs to is replaced, so the\n\t * aborted turn (including its tool results) is persisted to the outgoing session\n\t * rather than stranded.\n\t *\n\t * Overridable because the isolated engine must not re-enter its cooperative\n\t * abort wait here: the child engine settles its own turn before it reports the\n\t * replacement, and the host facade's `abort()` is an unbounded round trip that\n\t * would hang teardown on an unresponsive or dead engine.\n\t */\n\tprotected async settleActiveResponseBeforeTeardown(): Promise<void> {\n\t\tif (!this.session.isStreaming) return;\n\t\tawait this.session.abort();\n\t}\n\n\tprivate async serializePublication(operation: () => Promise<void>): Promise<void> {\n\t\t// Host callbacks may themselves await another supported replacement.\n\t\tif (this.publicationContext.getStore()?.active) return operation();\n\t\tconst previous = this.publication;\n\t\tlet release!: () => void;\n\t\tthis.publication = new Promise<void>((resolve) => {\n\t\t\trelease = resolve;\n\t\t});\n\t\tconst context = { active: true };\n\t\ttry {\n\t\t\tawait previous;\n\t\t\tawait this.publicationContext.run(context, operation);\n\t\t} finally {\n\t\t\tcontext.active = false;\n\t\t\trelease();\n\t\t}\n\t}\n\tprivate async teardownCurrent(reason: SessionShutdownEvent[\"reason\"], targetSessionFile?: string): Promise<void> {\n\t\treturn this.serializePublication(async () => {\n\t\t\tthis.assertOpen();\n\t\t\tawait this.settleActiveResponseBeforeTeardown();\n\t\t\tthis.assertOpen();\n\t\t\tconst { timedOut } = await this.session.extensionRunner.flushUIPromptNotifications(\n\t\t\t\tSESSION_REPLACEMENT_UI_PROMPT_SETTLEMENT_TIMEOUT_MS,\n\t\t\t);\n\t\t\tthis.assertOpen();\n\t\t\tif (timedOut) {\n\t\t\t\tconsole.error(\n\t\t\t\t\t\"Warning: UI prompt observers did not settle within 1,000 ms; continuing session replacement.\",\n\t\t\t\t);\n\t\t\t}\n\t\t\tawait this.disposeCurrentSession({ type: \"session_shutdown\", reason, targetSessionFile });\n\t\t});\n\t}\n\n\tprivate async apply(\n\t\tresult: CreateAgentSessionRuntimeResult,\n\t\twithSession?: (ctx: ReplacedSessionContext) => Promise<void>,\n\t\tsetup?: (sessionManager: SessionManager) => Promise<void>,\n\t): Promise<void> {\n\t\treturn this.serializePublication(async () => {\n\t\t\ttry {\n\t\t\t\tthis.assertOpen();\n\t\t\t\t// A concurrently admitted factory may have published since preflight.\n\t\t\t\t// Retire that successor before displacing it, retaining workflow lineage.\n\t\t\t\tawait this.disposeCurrentSession({ type: \"session_shutdown\", reason: \"new\" });\n\t\t\t\tthis.assertOpen();\n\t\t\t\tthis.candidates.delete(result.session);\n\t\t\t\tthis.retained.delete(this.session);\n\t\t\t\tthis._session = result.session;\n\t\t\t\tthis._services = result.services;\n\t\t\t\tthis._diagnostics = result.diagnostics;\n\t\t\t\tthis._modelFallbackMessage = result.modelFallbackMessage;\n\t\t\t\tthis._modelFallbackReason = result.modelFallbackReason;\n\t\t\t\tif (setup) {\n\t\t\t\t\tawait setup(result.session.sessionManager);\n\t\t\t\t\tthis.assertOpen();\n\t\t\t\t\tif (this.session !== result.session) return;\n\t\t\t\t\tresult.session.refreshContext();\n\t\t\t\t}\n\t\t\t\tif (this.rebindSession) {\n\t\t\t\t\tawait this.rebindSession(result.session);\n\t\t\t\t\tthis.assertOpen();\n\t\t\t\t\tif (this.session !== result.session) return;\n\t\t\t\t}\n\t\t\t\tif (withSession) await withSession(result.session.createReplacedSessionContext());\n\t\t\t} catch (cause) {\n\t\t\t\tif (this.candidates.delete(result.session)) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tawait (result.session as unknown as AgentSessionInternalSurface)._close({\n\t\t\t\t\t\t\ttype: \"session_shutdown\",\n\t\t\t\t\t\t\treason: this.closed ? \"quit\" : \"new\",\n\t\t\t\t\t\t});\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tthis.cleanupFailures.push(error);\n\t\t\t\t\t\tthrow Object.assign(\n\t\t\t\t\t\t\tnew AggregateError([cause, error], \"Replacement publication and candidate cleanup failed\"),\n\t\t\t\t\t\t\t{ code: \"ShutdownFailed\" },\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthrow cause;\n\t\t\t}\n\t\t});\n\t}\n\n\tasync switchSession(\n\t\tsessionPath: string,\n\t\toptions?: {\n\t\t\tcwdOverride?: string;\n\t\t\twithSession?: (ctx: ReplacedSessionContext) => Promise<void>;\n\t\t\tprojectTrustContextFactory?: (cwd: string) => ProjectTrustContext;\n\t\t},\n\t): Promise<{ cancelled: boolean }> {\n\t\treturn this.replace(async () => {\n\t\t\tconst beforeResult = await this.emitBeforeSwitch(\"resume\", sessionPath);\n\t\t\tthis.assertOpen();\n\t\t\tif (beforeResult.cancelled) {\n\t\t\t\treturn beforeResult;\n\t\t\t}\n\n\t\t\tconst previousSessionFile = this.session.sessionFile;\n\t\t\tconst sessionManager = SessionManager.open(sessionPath, undefined, options?.cwdOverride);\n\t\t\tassertSessionCwdExists(sessionManager, this.cwd);\n\t\t\tconst runtimeOptions: CreateAgentSessionRuntimeOptions = {\n\t\t\t\tcwd: sessionManager.getCwd(),\n\t\t\t\tagentDir: this.services.agentDir,\n\t\t\t\tsessionManager,\n\t\t\t\tsessionStartEvent: { type: \"session_start\", reason: \"resume\", previousSessionFile },\n\t\t\t\tprojectTrustContext: (options?.projectTrustContextFactory ?? this.projectTrustContextFactory)?.(\n\t\t\t\t\tsessionManager.getCwd(),\n\t\t\t\t),\n\t\t\t};\n\t\t\tawait this.settleActiveResponseBeforeTeardown();\n\t\t\tthis.assertOpen();\n\t\t\tconst complete = await this.createRuntime.prepareResume?.(runtimeOptions);\n\t\t\tthis.assertOpen();\n\t\t\tawait this.teardownCurrent(\"resume\", sessionManager.getSessionFile());\n\t\t\tawait this.apply(await (complete ? complete() : this.createRuntime(runtimeOptions)), options?.withSession);\n\t\t\treturn { cancelled: false };\n\t\t});\n\t}\n\n\tasync newSession(options?: {\n\t\tparentSession?: string;\n\t\tsetup?: (sessionManager: SessionManager) => Promise<void>;\n\t\twithSession?: (ctx: ReplacedSessionContext) => Promise<void>;\n\t}): Promise<{ cancelled: boolean }> {\n\t\treturn this.replace(async () => {\n\t\t\tconst beforeResult = await this.emitBeforeSwitch(\"new\");\n\t\t\tthis.assertOpen();\n\t\t\tif (beforeResult.cancelled) {\n\t\t\t\treturn beforeResult;\n\t\t\t}\n\n\t\t\tconst previousSessionFile = this.session.sessionFile;\n\t\t\tconst sessionDir = this.session.sessionManager.getSessionDir();\n\t\t\tconst sessionManager = SessionManager.create(this.cwd, sessionDir);\n\t\t\tif (options?.parentSession) {\n\t\t\t\tsessionManager.newSession({ parentSession: options.parentSession });\n\t\t\t}\n\n\t\t\tawait this.teardownCurrent(\"new\", sessionManager.getSessionFile());\n\t\t\tawait this.apply(\n\t\t\t\tawait this.createRuntime({\n\t\t\t\t\tcwd: this.cwd,\n\t\t\t\t\tagentDir: this.services.agentDir,\n\t\t\t\t\tsessionManager,\n\t\t\t\t\tsessionStartEvent: { type: \"session_start\", reason: \"new\", previousSessionFile },\n\t\t\t\t}),\n\t\t\t\toptions?.withSession,\n\t\t\t\toptions?.setup,\n\t\t\t);\n\t\t\treturn { cancelled: false };\n\t\t});\n\t}\n\n\tasync fork(\n\t\tentryId: string,\n\t\toptions?: { position?: \"before\" | \"at\"; withSession?: (ctx: ReplacedSessionContext) => Promise<void> },\n\t): Promise<{ cancelled: boolean; selectedText?: string }> {\n\t\treturn this.replace(async () => {\n\t\t\tconst position = options?.position ?? \"before\";\n\t\t\tconst beforeResult = await this.emitBeforeFork(entryId, { position });\n\t\t\tthis.assertOpen();\n\t\t\tif (beforeResult.cancelled) {\n\t\t\t\treturn { cancelled: true };\n\t\t\t}\n\t\t\tlet targetLeafId: string | null;\n\t\t\tlet selectedText: string | undefined;\n\n\t\t\tconst selectedEntry = this.session.sessionManager.getEntry(entryId);\n\t\t\tif (!selectedEntry) {\n\t\t\t\tthrow new Error(\"Invalid entry ID for forking\");\n\t\t\t}\n\n\t\t\tif (position === \"at\") {\n\t\t\t\ttargetLeafId = selectedEntry.id;\n\t\t\t} else {\n\t\t\t\tif (selectedEntry.type !== \"message\" || selectedEntry.message.role !== \"user\") {\n\t\t\t\t\tthrow new Error(\"Invalid entry ID for forking\");\n\t\t\t\t}\n\t\t\t\ttargetLeafId = selectedEntry.parentId;\n\t\t\t\tselectedText = extractUserMessageText(selectedEntry.message.content);\n\t\t\t}\n\n\t\t\tconst previousSessionFile = this.session.sessionFile;\n\t\t\tif (this.session.sessionManager.isPersisted()) {\n\t\t\t\tconst currentSessionFile = this.session.sessionFile;\n\t\t\t\tif (!currentSessionFile) {\n\t\t\t\t\tthrow new Error(\"Persisted session is missing a session file\");\n\t\t\t\t}\n\t\t\t\tconst sessionDir = this.session.sessionManager.getSessionDir();\n\t\t\t\tif (!targetLeafId) {\n\t\t\t\t\tconst sessionManager = SessionManager.create(this.cwd, sessionDir);\n\t\t\t\t\tsessionManager.newSession({ parentSession: currentSessionFile });\n\t\t\t\t\tawait this.teardownCurrent(\"fork\", sessionManager.getSessionFile());\n\t\t\t\t\tawait this.apply(\n\t\t\t\t\t\tawait this.createRuntime({\n\t\t\t\t\t\t\tcwd: this.cwd,\n\t\t\t\t\t\t\tagentDir: this.services.agentDir,\n\t\t\t\t\t\t\tsessionManager,\n\t\t\t\t\t\t\tsessionStartEvent: { type: \"session_start\", reason: \"fork\", previousSessionFile },\n\t\t\t\t\t\t}),\n\t\t\t\t\t\toptions?.withSession,\n\t\t\t\t\t);\n\t\t\t\t\treturn { cancelled: false, selectedText };\n\t\t\t\t}\n\n\t\t\t\tif (!existsSync(currentSessionFile)) {\n\t\t\t\t\tthrow new Error(\"This session has not been saved yet. Send a message before cloning or forking it.\");\n\t\t\t\t}\n\t\t\t\tconst sessionManager = SessionManager.open(currentSessionFile, sessionDir);\n\t\t\t\tconst forkedSessionPath = sessionManager.createBranchedSession(targetLeafId);\n\t\t\t\tif (!forkedSessionPath) {\n\t\t\t\t\tthrow new Error(\"Failed to create forked session\");\n\t\t\t\t}\n\t\t\t\tawait this.teardownCurrent(\"fork\", sessionManager.getSessionFile());\n\t\t\t\tawait this.apply(\n\t\t\t\t\tawait this.createRuntime({\n\t\t\t\t\t\tcwd: sessionManager.getCwd(),\n\t\t\t\t\t\tagentDir: this.services.agentDir,\n\t\t\t\t\t\tsessionManager,\n\t\t\t\t\t\tsessionStartEvent: { type: \"session_start\", reason: \"fork\", previousSessionFile },\n\t\t\t\t\t}),\n\t\t\t\t\toptions?.withSession,\n\t\t\t\t);\n\t\t\t\treturn { cancelled: false, selectedText };\n\t\t\t}\n\n\t\t\tconst sessionManager = this.session.sessionManager;\n\t\t\tawait this.teardownCurrent(\"fork\", sessionManager.getSessionFile());\n\t\t\tif (!targetLeafId) {\n\t\t\t\tsessionManager.newSession({ parentSession: previousSessionFile });\n\t\t\t} else {\n\t\t\t\tsessionManager.createBranchedSession(targetLeafId);\n\t\t\t}\n\t\t\tawait this.apply(\n\t\t\t\tawait this.createRuntime({\n\t\t\t\t\tcwd: this.cwd,\n\t\t\t\t\tagentDir: this.services.agentDir,\n\t\t\t\t\tsessionManager,\n\t\t\t\t\tsessionStartEvent: { type: \"session_start\", reason: \"fork\", previousSessionFile },\n\t\t\t\t}),\n\t\t\t\toptions?.withSession,\n\t\t\t);\n\t\t\treturn { cancelled: false, selectedText };\n\t\t});\n\t}\n\n\t/**\n\t * Import a session JSONL file and switch runtime state to the imported session.\n\t *\n\t * @returns `{ cancelled: true }` when cancelled by `session_before_switch`, otherwise `{ cancelled: false }`.\n\t * @throws {SessionImportFileNotFoundError} When the input path does not exist.\n\t * @throws {MissingSessionCwdError} When the imported session cwd cannot be resolved and no override is provided.\n\t */\n\tasync importFromJsonl(inputPath: string, cwdOverride?: string): Promise<{ cancelled: boolean }> {\n\t\treturn this.replace(async () => {\n\t\t\tconst resolvedPath = resolvePath(inputPath);\n\t\t\tif (!existsSync(resolvedPath)) {\n\t\t\t\tthrow new SessionImportFileNotFoundError(resolvedPath);\n\t\t\t}\n\n\t\t\tconst sessionDir = this.session.sessionManager.getSessionDir();\n\t\t\tif (!existsSync(sessionDir)) {\n\t\t\t\tmkdirSync(sessionDir, { recursive: true });\n\t\t\t}\n\n\t\t\tlet destinationPath = join(sessionDir, basename(resolvedPath));\n\t\t\tconst sourceAlreadyStored = resolve(destinationPath) === resolvedPath;\n\t\t\tif (!sourceAlreadyStored) {\n\t\t\t\tconst { name, ext } = parse(destinationPath);\n\t\t\t\tlet suffix = 1;\n\t\t\t\twhile (existsSync(destinationPath)) {\n\t\t\t\t\tdestinationPath = join(sessionDir, `${name}-${suffix++}${ext}`);\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst beforeResult = await this.emitBeforeSwitch(\"resume\", destinationPath);\n\t\t\tthis.assertOpen();\n\t\t\tif (beforeResult.cancelled) {\n\t\t\t\treturn beforeResult;\n\t\t\t}\n\n\t\t\tconst previousSessionFile = this.session.sessionFile;\n\t\t\tif (!sourceAlreadyStored) {\n\t\t\t\tcopyFileSync(resolvedPath, destinationPath, constants.COPYFILE_EXCL);\n\t\t\t}\n\n\t\t\tconst sessionManager = SessionManager.open(destinationPath, sessionDir, cwdOverride);\n\t\t\tassertSessionCwdExists(sessionManager, this.cwd);\n\t\t\tawait this.teardownCurrent(\"resume\", sessionManager.getSessionFile());\n\t\t\tawait this.apply(\n\t\t\t\tawait this.createRuntime({\n\t\t\t\t\tcwd: sessionManager.getCwd(),\n\t\t\t\t\tagentDir: this.services.agentDir,\n\t\t\t\t\tsessionManager,\n\t\t\t\t\tsessionStartEvent: { type: \"session_start\", reason: \"resume\", previousSessionFile },\n\t\t\t\t}),\n\t\t\t);\n\t\t\treturn { cancelled: false };\n\t\t});\n\t}\n\n\tdispose(): Promise<void> {\n\t\tif (this.closing) return this.closing;\n\t\tthis.closed = true;\n\t\tconst current = this.disposeCurrentSession({ type: \"session_shutdown\", reason: \"quit\" });\n\t\tvoid current.catch(() => {});\n\t\tthis.closing = (async () => {\n\t\t\tawait drainSessionWork(this);\n\t\t\tfor (const candidate of this.candidates) {\n\t\t\t\ttry {\n\t\t\t\t\tawait candidate.dispose();\n\t\t\t\t} catch (error) {\n\t\t\t\t\tthis.cleanupFailures.push(error);\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.candidates.clear();\n\t\t\ttry {\n\t\t\t\tawait current;\n\t\t\t} catch (error) {\n\t\t\t\tthis.cleanupFailures.push(error);\n\t\t\t}\n\t\t\twhile (this.retirementCleanup.size) await Promise.all(this.retirementCleanup);\n\t\t\ttry {\n\t\t\t\tawait this.finalizeRetained();\n\t\t\t} catch (error) {\n\t\t\t\tthis.cleanupFailures.push(error);\n\t\t\t}\n\t\t\tif (this.cleanupFailures.length)\n\t\t\t\tthrow Object.assign(new AggregateError(this.cleanupFailures, \"Runtime shutdown failed\"), {\n\t\t\t\t\tcode: \"ShutdownFailed\",\n\t\t\t\t});\n\t\t})();\n\t\treturn this.closing;\n\t}\n}\n\n/**\n * Create the initial runtime from a runtime factory and initial session target.\n *\n * The same factory is stored on the returned AgentSessionRuntime and reused for\n * later /new, /resume, /fork, and import flows.\n */\nexport async function createAgentSessionRuntime(\n\tcreateRuntime: CreateAgentSessionRuntimeFactory,\n\toptions: {\n\t\tcwd: string;\n\t\tagentDir: string;\n\t\tsessionManager: SessionManager;\n\t\tsessionStartEvent?: SessionStartEvent;\n\t},\n): Promise<AgentSessionRuntime> {\n\tassertSessionCwdExists(options.sessionManager, options.cwd);\n\tconst result = await sessionLifecycleCreation.run({ scope: {} }, () => createRuntime(options));\n\treturn new AgentSessionRuntime(\n\t\tresult.session,\n\t\tresult.services,\n\t\tcreateRuntime,\n\t\tresult.diagnostics,\n\t\tresult.modelFallbackMessage,\n\t\tresult.modelFallbackReason,\n\t);\n}\n\nexport {\n\ttype AgentSessionRuntimeDiagnostic,\n\ttype AgentSessionServices,\n\ttype CreateAgentSessionFromServicesOptions,\n\ttype CreateAgentSessionServicesOptions,\n\tcreateAgentSessionFromServices,\n\tcreateAgentSessionServices,\n} from \"./agent-session-services.ts\";\n"]}
1
+ {"version":3,"file":"agent-session-runtime.js","sourceRoot":"","sources":["../../src/core/agent-session-runtime.ts"],"names":[],"mappings":"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","sourcesContent":["import { AsyncLocalStorage } from \"node:async_hooks\";\nimport { constants, copyFileSync, existsSync, mkdirSync } from \"node:fs\";\nimport { basename, join, parse, resolve } from \"node:path\";\nimport type { AuthInteraction } from \"@bastani/pi-ai\";\nimport { type Api, type Model, modelsAreEqual } from \"@bastani/pi-ai/compat\";\nimport type { ThinkingLevel } from \"@earendil-works/pi-agent-core\";\nimport { resolvePath } from \"../utils/paths.ts\";\nimport type { AgentSession } from \"./agent-session.js\";\nimport type { AgentSessionInternalSurface } from \"./agent-session-methods.ts\";\nimport { type AtomicOAuthLoginCallbacks, loginRuntimeOAuthProvider } from \"./agent-session-runtime-auth.ts\";\nimport type { AgentSessionRuntimeDiagnostic, AgentSessionServices } from \"./agent-session-services.ts\";\nimport type {\n\tProjectTrustContext,\n\tReplacedSessionContext,\n\tSessionShutdownEvent,\n\tSessionStartEvent,\n} from \"./extensions/index.js\";\nimport { emitSessionShutdownEvent } from \"./extensions/runner.ts\";\nimport type { ModelFallbackReason } from \"./model-resolver-types.ts\";\nimport type { AuthStatus } from \"./provider-composer.ts\";\nimport type { CreateAgentSessionResult } from \"./sdk.ts\";\nimport { assertSessionCwdExists } from \"./session-cwd.ts\";\nimport { sessionLifecycleCreation, sessionLifecycleScopes } from \"./session-lifecycle-scope.ts\";\nimport {\n\tdrainSessionWork,\n\thasCallingSessionWork,\n\tregisterSessionRetirement,\n\ttrackSessionWork,\n} from \"./session-lifecycle-work.ts\";\nimport { SessionManager } from \"./session-manager.ts\";\n\n/**\n * Result returned by runtime creation.\n *\n * The caller gets the created session, its cwd-bound services, and all\n * diagnostics collected during setup.\n */\nexport interface CreateAgentSessionRuntimeResult extends CreateAgentSessionResult {\n\tservices: AgentSessionServices;\n\tdiagnostics: AgentSessionRuntimeDiagnostic[];\n}\n\nexport interface LogoutProviderResult {\n\tprovider: string;\n\tauthStatus: AuthStatus;\n\tmodels: Model<Api>[];\n\tscopedModels?: Array<{ model: Model<Api>; thinkingLevel?: ThinkingLevel }>;\n}\n\n/**\n * Creates a full runtime for a target cwd and session manager.\n *\n * The factory closes over process-global fixed inputs, recreates cwd-bound\n * services for the effective cwd, resolves session options against those\n * services, and finally creates the AgentSession.\n */\nexport interface CreateAgentSessionRuntimeOptions {\n\tcwd: string;\n\tagentDir: string;\n\tsessionManager: SessionManager;\n\tsessionStartEvent?: SessionStartEvent;\n\tprojectTrustContext?: ProjectTrustContext;\n}\n\nexport type CreateAgentSessionRuntimeFactory = {\n\t(options: CreateAgentSessionRuntimeOptions): Promise<CreateAgentSessionRuntimeResult>;\n\tprepareResume?: (\n\t\toptions: CreateAgentSessionRuntimeOptions,\n\t) => Promise<() => Promise<CreateAgentSessionRuntimeResult>>;\n};\n\nconst SESSION_REPLACEMENT_UI_PROMPT_SETTLEMENT_TIMEOUT_MS = 1_000;\n\n/**\n * Thrown when /import references a JSONL file path that does not exist.\n */\nexport class SessionImportFileNotFoundError extends Error {\n\treadonly filePath: string;\n\n\tconstructor(filePath: string) {\n\t\tsuper(`File not found: ${filePath}`);\n\t\tthis.name = \"SessionImportFileNotFoundError\";\n\t\tthis.filePath = filePath;\n\t}\n}\n\nfunction extractUserMessageText(content: string | Array<{ type: string; text?: string }>): string {\n\tif (typeof content === \"string\") {\n\t\treturn content;\n\t}\n\n\treturn content\n\t\t.filter((part): part is { type: \"text\"; text: string } => part.type === \"text\" && typeof part.text === \"string\")\n\t\t.map((part) => part.text)\n\t\t.join(\"\");\n}\n\n/**\n * Owns the current AgentSession plus its cwd-bound services.\n *\n * Session replacement methods tear down the current runtime first, then create\n * and apply the next runtime. If creation fails, the error is propagated to the\n * caller. The caller is responsible for user-facing error handling.\n */\nexport class AgentSessionRuntime {\n\tprivate rebindSession?: (session: AgentSession) => Promise<void>;\n\tprivate beforeSessionInvalidate?: () => void;\n\tprivate projectTrustContextFactory?: (cwd: string) => ProjectTrustContext;\n\tprivate closed = false;\n\tprivate endedBySignal = false;\n\tprivate closing?: Promise<void>;\n\tprivate cleanupFailures: unknown[] = [];\n\tprivate candidates = new Set<AgentSession>();\n\tprivate replacements = 0;\n\tprivate publication: Promise<void> = Promise.resolve();\n\tprivate publicationContext = new AsyncLocalStorage<{ active: boolean }>();\n\tprivate retained = new Set<AgentSession>();\n\tprivate retirementCleanup = new Set<Promise<void>>();\n\n\tprivate retainRetirementCleanup(cleanup: Promise<void>): void {\n\t\tconst receipt = cleanup.catch((error) => {\n\t\t\tthis.cleanupFailures.push(error);\n\t\t});\n\t\tthis.retirementCleanup.add(receipt);\n\t\tvoid receipt.then(() => this.retirementCleanup.delete(receipt));\n\t}\n\n\tprivate async finalizeRetained(): Promise<void> {\n\t\tconst session = this.session;\n\t\tif (!this.retained.delete(session)) return;\n\t\tconst finalize = async () => {\n\t\t\tawait emitSessionShutdownEvent(session.extensionRunner, this.quitEvent());\n\t\t};\n\t\tif (hasCallingSessionWork(session)) {\n\t\t\tthis.retainRetirementCleanup(\n\t\t\t\tsession.dispose().then(finalize, async (error) => {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tawait finalize();\n\t\t\t\t\t} catch (failure) {\n\t\t\t\t\t\tthrow new AggregateError([error, failure], \"Retained cleanup failed\");\n\t\t\t\t\t}\n\t\t\t\t\tthrow error;\n\t\t\t\t}),\n\t\t\t);\n\t\t\treturn;\n\t\t}\n\t\tawait finalize();\n\t}\n\n\tprivate replace<T>(operation: () => Promise<T>): Promise<T> {\n\t\tregisterSessionRetirement(this.session);\n\t\treturn this.admit(async () => {\n\t\t\tthis.replacements++;\n\t\t\tlet outcome: { value: T } | { error: unknown };\n\t\t\ttry {\n\t\t\t\toutcome = { value: await operation() };\n\t\t\t} catch (error) {\n\t\t\t\toutcome = { error };\n\t\t\t\tthis.retainCleanupFailures(error);\n\t\t\t}\n\t\t\tthis.replacements--;\n\t\t\tif (this.replacements === 0 && (this.session as unknown as AgentSessionInternalSurface)._disposed) {\n\t\t\t\ttry {\n\t\t\t\t\tawait this.finalizeRetained();\n\t\t\t\t} catch (error) {\n\t\t\t\t\tthis.cleanupFailures.push(error);\n\t\t\t\t\tthrow Object.assign(\n\t\t\t\t\t\tnew AggregateError(\n\t\t\t\t\t\t\t\"error\" in outcome ? [outcome.error, error] : [error],\n\t\t\t\t\t\t\t\"Retained session cleanup failed\",\n\t\t\t\t\t\t),\n\t\t\t\t\t\t{ code: \"ShutdownFailed\" },\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (\"error\" in outcome) throw outcome.error;\n\t\t\treturn outcome.value;\n\t\t});\n\t}\n\n\tprivate assertOpen(): void {\n\t\tif (this.closed) throw Object.assign(new Error(\"Session is closed\"), { code: \"SessionClosed\" });\n\t}\n\n\tprivate admit<T>(operation: () => Promise<T>): Promise<T> {\n\t\ttry {\n\t\t\tthis.assertOpen();\n\t\t} catch (error) {\n\t\t\treturn Promise.reject(error);\n\t\t}\n\t\treturn trackSessionWork(this, operation);\n\t}\n\n\t/** Bind a process-local trust UI; closures never cross the engine RPC boundary. */\n\tsetProjectTrustContextFactory(factory: (cwd: string) => ProjectTrustContext): void {\n\t\tthis.projectTrustContextFactory = factory;\n\t}\n\n\t/** Return false for ordinary startup; otherwise finish the safe session in place. */\n\tasync completeStartup(): Promise<boolean> {\n\t\treturn this.admit(async () => {\n\t\t\tconst complete = this.services.completeStartup;\n\t\t\tif (!complete) return false;\n\t\t\tif (!this.projectTrustContextFactory) throw new Error(\"Startup trust requires a bound session UI\");\n\t\t\tawait complete(this.projectTrustContextFactory(this.services.cwd));\n\t\t\treturn true;\n\t\t});\n\t}\n\n\tprivate declare _session: AgentSession;\n\tprivate declare _services: AgentSessionServices;\n\tprivate declare readonly createRuntime: CreateAgentSessionRuntimeFactory;\n\tprivate declare _diagnostics: AgentSessionRuntimeDiagnostic[];\n\tprivate declare _modelFallbackMessage?: string;\n\tprivate declare _modelFallbackReason?: ModelFallbackReason;\n\n\tconstructor(\n\t\t_session: AgentSession,\n\t\t_services: AgentSessionServices,\n\t\tcreateRuntime: CreateAgentSessionRuntimeFactory,\n\t\t_diagnostics: AgentSessionRuntimeDiagnostic[] = [],\n\t\t_modelFallbackMessage?: string,\n\t\t_modelFallbackReason?: ModelFallbackReason,\n\t) {\n\t\tthis._session = _session;\n\t\tthis._services = _services;\n\t\tconst scope = sessionLifecycleScopes.get(_session) ?? {};\n\t\tconst context = () => {\n\t\t\tconst current = this._session as unknown as AgentSessionInternalSurface;\n\t\t\treturn {\n\t\t\t\tscope,\n\t\t\t\treplacement: true,\n\t\t\t\tbindings: {\n\t\t\t\t\t...this._session.extensionRunner.getChildHostBindings(),\n\t\t\t\t\tuiContext: current._extensionUIContext,\n\t\t\t\t\tmode: current._extensionMode,\n\t\t\t\t\tcommandContextActions: current._extensionCommandContextActions,\n\t\t\t\t\tshutdownHandler: current._extensionShutdownHandler,\n\t\t\t\t\tonError: current._extensionErrorListener,\n\t\t\t\t},\n\t\t\t};\n\t\t};\n\t\tthis.createRuntime = (options) =>\n\t\t\tthis.createReplacement(() => sessionLifecycleCreation.run(context(), () => createRuntime(options)));\n\t\tthis.createRuntime.prepareResume = (options) =>\n\t\t\tsessionLifecycleCreation.run(context(), async () => {\n\t\t\t\tconst complete = createRuntime.prepareResume\n\t\t\t\t\t? await createRuntime.prepareResume(options)\n\t\t\t\t\t: () => createRuntime(options);\n\t\t\t\treturn () => this.createReplacement(() => sessionLifecycleCreation.run(context(), complete));\n\t\t\t});\n\t\tthis._diagnostics = _diagnostics;\n\t\tthis._modelFallbackMessage = _modelFallbackMessage;\n\t\tthis._modelFallbackReason = _modelFallbackReason;\n\t}\n\n\tprivate retainCleanupFailures(error: unknown): void {\n\t\tif (error instanceof Error && \"code\" in error && error.code === \"ShutdownFailed\") {\n\t\t\tthis.cleanupFailures.push(error);\n\t\t} else if (error instanceof AggregateError) {\n\t\t\tfor (const nested of error.errors) this.retainCleanupFailures(nested);\n\t\t}\n\t}\n\n\tprivate async createReplacement(\n\t\tcreate: () => Promise<CreateAgentSessionRuntimeResult>,\n\t): Promise<CreateAgentSessionRuntimeResult> {\n\t\ttry {\n\t\t\tthis.assertOpen();\n\t\t\tconst candidate = await create();\n\t\t\tthis.candidates.add(candidate.session);\n\t\t\tif (this.closed) {\n\t\t\t\ttry {\n\t\t\t\t\tawait (candidate.session as unknown as AgentSessionInternalSurface)._close(this.quitEvent());\n\t\t\t\t} catch (error) {\n\t\t\t\t\tthis.cleanupFailures.push(error);\n\t\t\t\t}\n\t\t\t\tthis.candidates.delete(candidate.session);\n\t\t\t\tthis.assertOpen();\n\t\t\t}\n\t\t\treturn candidate;\n\t\t} catch (cause) {\n\t\t\tthis.retainCleanupFailures(cause);\n\t\t\t// The last admitted replacement finalizes retained scope only if no\n\t\t\t// live successor exists. A failed peer must not shut down a winner.\n\t\t\tthrow cause;\n\t\t}\n\t}\n\n\tget services(): AgentSessionServices {\n\t\treturn this._services;\n\t}\n\n\tget session(): AgentSession {\n\t\treturn this._session;\n\t}\n\n\tget cwd(): string {\n\t\treturn this._services.cwd;\n\t}\n\n\tget diagnostics(): readonly AgentSessionRuntimeDiagnostic[] {\n\t\treturn this._diagnostics;\n\t}\n\n\tget modelFallbackMessage(): string | undefined {\n\t\treturn this._modelFallbackMessage;\n\t}\n\n\tget modelFallbackReason(): ModelFallbackReason | undefined {\n\t\treturn this._modelFallbackReason;\n\t}\n\n\treplaceModelFallback(message?: string, reason?: ModelFallbackReason): void {\n\t\tthis._modelFallbackMessage = message;\n\t\tthis._modelFallbackReason = reason;\n\t}\n\n\tresolveModelFallback(): void {\n\t\tthis.replaceModelFallback();\n\t}\n\n\tresolveModelFallbackAfterExplicitModelSelection(\n\t\tpreviousModel: Model<Api> | undefined,\n\t\tselectedModel: Model<Api> | null | undefined,\n\t): void {\n\t\tif (selectedModel && !modelsAreEqual(previousModel, selectedModel)) this.resolveModelFallback();\n\t}\n\n\tasync loginOAuthProvider(\n\t\tprovider: string,\n\t\tcallbacks: AtomicOAuthLoginCallbacks,\n\t): Promise<{ modelsRefreshed: boolean }> {\n\t\treturn this.admit(async () => {\n\t\t\tawait loginRuntimeOAuthProvider(this.session, provider, callbacks);\n\t\t\treturn { modelsRefreshed: true };\n\t\t});\n\t}\n\n\tasync loginApiKeyProvider(provider: string, interaction: AuthInteraction): Promise<{ modelsRefreshed: boolean }> {\n\t\treturn this.admit(async () => {\n\t\t\tawait this.session.modelRuntime.login(provider, \"api_key\", interaction);\n\t\t\treturn { modelsRefreshed: true };\n\t\t});\n\t}\n\n\tasync logoutProvider(provider: string): Promise<LogoutProviderResult> {\n\t\treturn this.admit(async () => {\n\t\t\tconst registry = this.session.modelRuntime;\n\t\t\tawait registry.logout(provider);\n\t\t\tconst availableIds = new Set(registry.getAvailableSnapshot().map((model) => `${model.provider}\\0${model.id}`));\n\t\t\tconst scopedModels = this.session.scopedModels.filter(({ model }) =>\n\t\t\t\tavailableIds.has(`${model.provider}\\0${model.id}`),\n\t\t\t);\n\t\t\tthis.session.setScopedModels([...scopedModels]);\n\t\t\tthis.session.refreshCurrentModelFromRegistry();\n\t\t\treturn {\n\t\t\t\tprovider,\n\t\t\t\tauthStatus: registry.getProviderAuthStatus(provider),\n\t\t\t\tmodels: [...registry.getAvailableSnapshot()],\n\t\t\t\tscopedModels: [...scopedModels],\n\t\t\t};\n\t\t});\n\t}\n\n\tsetRebindSession(rebindSession?: (session: AgentSession) => Promise<void>): void {\n\t\tthis.rebindSession = rebindSession;\n\t}\n\n\t/**\n\t * Set a synchronous callback that runs after `session_shutdown` handlers finish\n\t * but before the current session is invalidated.\n\t *\n\t * This is for host-owned UI teardown that must not yield to the event loop,\n\t * such as detaching extension-provided TUI components before the old extension\n\t * context becomes stale.\n\t */\n\tsetBeforeSessionInvalidate(beforeSessionInvalidate?: () => void): void {\n\t\tthis.beforeSessionInvalidate = beforeSessionInvalidate;\n\t}\n\n\tprivate async emitBeforeSwitch(\n\t\treason: \"new\" | \"resume\",\n\t\ttargetSessionFile?: string,\n\t): Promise<{ cancelled: boolean }> {\n\t\tconst runner = this.session.extensionRunner;\n\t\tif (!runner.hasHandlers(\"session_before_switch\")) {\n\t\t\treturn { cancelled: false };\n\t\t}\n\n\t\tconst result = await runner.emit({\n\t\t\ttype: \"session_before_switch\",\n\t\t\treason,\n\t\t\ttargetSessionFile,\n\t\t});\n\t\tthis.assertOpen();\n\t\treturn { cancelled: result?.cancel === true };\n\t}\n\n\tprivate async emitBeforeFork(\n\t\tentryId: string,\n\t\toptions: { position: \"before\" | \"at\" },\n\t): Promise<{ cancelled: boolean }> {\n\t\tconst runner = this.session.extensionRunner;\n\t\tif (!runner.hasHandlers(\"session_before_fork\")) {\n\t\t\treturn { cancelled: false };\n\t\t}\n\n\t\tconst result = await runner.emit({\n\t\t\ttype: \"session_before_fork\",\n\t\t\tentryId,\n\t\t\t...options,\n\t\t});\n\t\tthis.assertOpen();\n\t\treturn { cancelled: result?.cancel === true };\n\t}\n\n\tprivate quitEvent(): SessionShutdownEvent {\n\t\treturn this.endedBySignal\n\t\t\t? { type: \"session_shutdown\", reason: \"quit\", fromSignal: true }\n\t\t\t: { type: \"session_shutdown\", reason: \"quit\" };\n\t}\n\n\tprivate disposeCurrentSession(event: SessionShutdownEvent): Promise<void> {\n\t\tconst session = this.session;\n\t\tif (event.reason !== \"quit\") this.retained.add(session);\n\t\tconst receipt = (session as unknown as AgentSessionInternalSurface)._close(event, this.beforeSessionInvalidate);\n\t\tif (event.reason !== \"quit\" && hasCallingSessionWork(session)) this.retainRetirementCleanup(session.dispose());\n\t\treturn receipt;\n\t}\n\n\t/**\n\t * Settle an active response before the session it belongs to is replaced, so the\n\t * aborted turn (including its tool results) is persisted to the outgoing session\n\t * rather than stranded.\n\t *\n\t * Overridable because the isolated engine must not re-enter its cooperative\n\t * abort wait here: the child engine settles its own turn before it reports the\n\t * replacement, and the host facade's `abort()` is an unbounded round trip that\n\t * would hang teardown on an unresponsive or dead engine.\n\t */\n\tprotected async settleActiveResponseBeforeTeardown(): Promise<void> {\n\t\tif (!this.session.isStreaming) return;\n\t\tawait this.session.abort();\n\t}\n\n\tprivate async serializePublication(operation: () => Promise<void>): Promise<void> {\n\t\t// Host callbacks may themselves await another supported replacement.\n\t\tif (this.publicationContext.getStore()?.active) return operation();\n\t\tconst previous = this.publication;\n\t\tlet release!: () => void;\n\t\tthis.publication = new Promise<void>((resolve) => {\n\t\t\trelease = resolve;\n\t\t});\n\t\tconst context = { active: true };\n\t\ttry {\n\t\t\tawait previous;\n\t\t\tawait this.publicationContext.run(context, operation);\n\t\t} finally {\n\t\t\tcontext.active = false;\n\t\t\trelease();\n\t\t}\n\t}\n\tprivate async teardownCurrent(reason: SessionShutdownEvent[\"reason\"], targetSessionFile?: string): Promise<void> {\n\t\treturn this.serializePublication(async () => {\n\t\t\tthis.assertOpen();\n\t\t\tawait this.settleActiveResponseBeforeTeardown();\n\t\t\tthis.assertOpen();\n\t\t\tconst { timedOut } = await this.session.extensionRunner.flushUIPromptNotifications(\n\t\t\t\tSESSION_REPLACEMENT_UI_PROMPT_SETTLEMENT_TIMEOUT_MS,\n\t\t\t);\n\t\t\tthis.assertOpen();\n\t\t\tif (timedOut) {\n\t\t\t\tconsole.error(\n\t\t\t\t\t\"Warning: UI prompt observers did not settle within 1,000 ms; continuing session replacement.\",\n\t\t\t\t);\n\t\t\t}\n\t\t\tawait this.disposeCurrentSession({ type: \"session_shutdown\", reason, targetSessionFile });\n\t\t});\n\t}\n\n\tprivate async apply(\n\t\tresult: CreateAgentSessionRuntimeResult,\n\t\twithSession?: (ctx: ReplacedSessionContext) => Promise<void>,\n\t\tsetup?: (sessionManager: SessionManager) => Promise<void>,\n\t): Promise<void> {\n\t\treturn this.serializePublication(async () => {\n\t\t\ttry {\n\t\t\t\tthis.assertOpen();\n\t\t\t\t// A concurrently admitted factory may have published since preflight.\n\t\t\t\t// Retire that successor before displacing it, retaining workflow lineage.\n\t\t\t\tawait this.disposeCurrentSession({ type: \"session_shutdown\", reason: \"new\" });\n\t\t\t\tthis.assertOpen();\n\t\t\t\tthis.candidates.delete(result.session);\n\t\t\t\tthis.retained.delete(this.session);\n\t\t\t\tthis._session = result.session;\n\t\t\t\tthis._services = result.services;\n\t\t\t\tthis._diagnostics = result.diagnostics;\n\t\t\t\tthis._modelFallbackMessage = result.modelFallbackMessage;\n\t\t\t\tthis._modelFallbackReason = result.modelFallbackReason;\n\t\t\t\tif (setup) {\n\t\t\t\t\tawait setup(result.session.sessionManager);\n\t\t\t\t\tthis.assertOpen();\n\t\t\t\t\tif (this.session !== result.session) return;\n\t\t\t\t\tresult.session.refreshContext();\n\t\t\t\t}\n\t\t\t\tif (this.rebindSession) {\n\t\t\t\t\tawait this.rebindSession(result.session);\n\t\t\t\t\tthis.assertOpen();\n\t\t\t\t\tif (this.session !== result.session) return;\n\t\t\t\t}\n\t\t\t\tif (withSession) await withSession(result.session.createReplacedSessionContext());\n\t\t\t} catch (cause) {\n\t\t\t\tif (this.candidates.delete(result.session)) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tawait (result.session as unknown as AgentSessionInternalSurface)._close(\n\t\t\t\t\t\t\tthis.closed ? this.quitEvent() : { type: \"session_shutdown\", reason: \"new\" },\n\t\t\t\t\t\t);\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tthis.cleanupFailures.push(error);\n\t\t\t\t\t\tthrow Object.assign(\n\t\t\t\t\t\t\tnew AggregateError([cause, error], \"Replacement publication and candidate cleanup failed\"),\n\t\t\t\t\t\t\t{ code: \"ShutdownFailed\" },\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthrow cause;\n\t\t\t}\n\t\t});\n\t}\n\n\tasync switchSession(\n\t\tsessionPath: string,\n\t\toptions?: {\n\t\t\tcwdOverride?: string;\n\t\t\twithSession?: (ctx: ReplacedSessionContext) => Promise<void>;\n\t\t\tprojectTrustContextFactory?: (cwd: string) => ProjectTrustContext;\n\t\t},\n\t): Promise<{ cancelled: boolean }> {\n\t\treturn this.replace(async () => {\n\t\t\tconst beforeResult = await this.emitBeforeSwitch(\"resume\", sessionPath);\n\t\t\tthis.assertOpen();\n\t\t\tif (beforeResult.cancelled) {\n\t\t\t\treturn beforeResult;\n\t\t\t}\n\n\t\t\tconst previousSessionFile = this.session.sessionFile;\n\t\t\tconst sessionManager = SessionManager.open(sessionPath, undefined, options?.cwdOverride);\n\t\t\tassertSessionCwdExists(sessionManager, this.cwd);\n\t\t\tconst runtimeOptions: CreateAgentSessionRuntimeOptions = {\n\t\t\t\tcwd: sessionManager.getCwd(),\n\t\t\t\tagentDir: this.services.agentDir,\n\t\t\t\tsessionManager,\n\t\t\t\tsessionStartEvent: { type: \"session_start\", reason: \"resume\", previousSessionFile },\n\t\t\t\tprojectTrustContext: (options?.projectTrustContextFactory ?? this.projectTrustContextFactory)?.(\n\t\t\t\t\tsessionManager.getCwd(),\n\t\t\t\t),\n\t\t\t};\n\t\t\tawait this.settleActiveResponseBeforeTeardown();\n\t\t\tthis.assertOpen();\n\t\t\tconst complete = await this.createRuntime.prepareResume?.(runtimeOptions);\n\t\t\tthis.assertOpen();\n\t\t\tawait this.teardownCurrent(\"resume\", sessionManager.getSessionFile());\n\t\t\tawait this.apply(await (complete ? complete() : this.createRuntime(runtimeOptions)), options?.withSession);\n\t\t\treturn { cancelled: false };\n\t\t});\n\t}\n\n\tasync newSession(options?: {\n\t\tparentSession?: string;\n\t\tsetup?: (sessionManager: SessionManager) => Promise<void>;\n\t\twithSession?: (ctx: ReplacedSessionContext) => Promise<void>;\n\t}): Promise<{ cancelled: boolean }> {\n\t\treturn this.replace(async () => {\n\t\t\tconst beforeResult = await this.emitBeforeSwitch(\"new\");\n\t\t\tthis.assertOpen();\n\t\t\tif (beforeResult.cancelled) {\n\t\t\t\treturn beforeResult;\n\t\t\t}\n\n\t\t\tconst previousSessionFile = this.session.sessionFile;\n\t\t\tconst sessionDir = this.session.sessionManager.getSessionDir();\n\t\t\tconst sessionManager = SessionManager.create(this.cwd, sessionDir);\n\t\t\tif (options?.parentSession) {\n\t\t\t\tsessionManager.newSession({ parentSession: options.parentSession });\n\t\t\t}\n\n\t\t\tawait this.teardownCurrent(\"new\", sessionManager.getSessionFile());\n\t\t\tawait this.apply(\n\t\t\t\tawait this.createRuntime({\n\t\t\t\t\tcwd: this.cwd,\n\t\t\t\t\tagentDir: this.services.agentDir,\n\t\t\t\t\tsessionManager,\n\t\t\t\t\tsessionStartEvent: { type: \"session_start\", reason: \"new\", previousSessionFile },\n\t\t\t\t}),\n\t\t\t\toptions?.withSession,\n\t\t\t\toptions?.setup,\n\t\t\t);\n\t\t\treturn { cancelled: false };\n\t\t});\n\t}\n\n\tasync fork(\n\t\tentryId: string,\n\t\toptions?: { position?: \"before\" | \"at\"; withSession?: (ctx: ReplacedSessionContext) => Promise<void> },\n\t): Promise<{ cancelled: boolean; selectedText?: string }> {\n\t\treturn this.replace(async () => {\n\t\t\tconst position = options?.position ?? \"before\";\n\t\t\tconst beforeResult = await this.emitBeforeFork(entryId, { position });\n\t\t\tthis.assertOpen();\n\t\t\tif (beforeResult.cancelled) {\n\t\t\t\treturn { cancelled: true };\n\t\t\t}\n\t\t\tlet targetLeafId: string | null;\n\t\t\tlet selectedText: string | undefined;\n\n\t\t\tconst selectedEntry = this.session.sessionManager.getEntry(entryId);\n\t\t\tif (!selectedEntry) {\n\t\t\t\tthrow new Error(\"Invalid entry ID for forking\");\n\t\t\t}\n\n\t\t\tif (position === \"at\") {\n\t\t\t\ttargetLeafId = selectedEntry.id;\n\t\t\t} else {\n\t\t\t\tif (selectedEntry.type !== \"message\" || selectedEntry.message.role !== \"user\") {\n\t\t\t\t\tthrow new Error(\"Invalid entry ID for forking\");\n\t\t\t\t}\n\t\t\t\ttargetLeafId = selectedEntry.parentId;\n\t\t\t\tselectedText = extractUserMessageText(selectedEntry.message.content);\n\t\t\t}\n\n\t\t\tconst previousSessionFile = this.session.sessionFile;\n\t\t\tif (this.session.sessionManager.isPersisted()) {\n\t\t\t\tconst currentSessionFile = this.session.sessionFile;\n\t\t\t\tif (!currentSessionFile) {\n\t\t\t\t\tthrow new Error(\"Persisted session is missing a session file\");\n\t\t\t\t}\n\t\t\t\tconst sessionDir = this.session.sessionManager.getSessionDir();\n\t\t\t\tif (!targetLeafId) {\n\t\t\t\t\tconst sessionManager = SessionManager.create(this.cwd, sessionDir);\n\t\t\t\t\tsessionManager.newSession({ parentSession: currentSessionFile });\n\t\t\t\t\tawait this.teardownCurrent(\"fork\", sessionManager.getSessionFile());\n\t\t\t\t\tawait this.apply(\n\t\t\t\t\t\tawait this.createRuntime({\n\t\t\t\t\t\t\tcwd: this.cwd,\n\t\t\t\t\t\t\tagentDir: this.services.agentDir,\n\t\t\t\t\t\t\tsessionManager,\n\t\t\t\t\t\t\tsessionStartEvent: { type: \"session_start\", reason: \"fork\", previousSessionFile },\n\t\t\t\t\t\t}),\n\t\t\t\t\t\toptions?.withSession,\n\t\t\t\t\t);\n\t\t\t\t\treturn { cancelled: false, selectedText };\n\t\t\t\t}\n\n\t\t\t\tif (!existsSync(currentSessionFile)) {\n\t\t\t\t\tthrow new Error(\"This session has not been saved yet. Send a message before cloning or forking it.\");\n\t\t\t\t}\n\t\t\t\tconst sessionManager = SessionManager.open(currentSessionFile, sessionDir);\n\t\t\t\tconst forkedSessionPath = sessionManager.createBranchedSession(targetLeafId);\n\t\t\t\tif (!forkedSessionPath) {\n\t\t\t\t\tthrow new Error(\"Failed to create forked session\");\n\t\t\t\t}\n\t\t\t\tawait this.teardownCurrent(\"fork\", sessionManager.getSessionFile());\n\t\t\t\tawait this.apply(\n\t\t\t\t\tawait this.createRuntime({\n\t\t\t\t\t\tcwd: sessionManager.getCwd(),\n\t\t\t\t\t\tagentDir: this.services.agentDir,\n\t\t\t\t\t\tsessionManager,\n\t\t\t\t\t\tsessionStartEvent: { type: \"session_start\", reason: \"fork\", previousSessionFile },\n\t\t\t\t\t}),\n\t\t\t\t\toptions?.withSession,\n\t\t\t\t);\n\t\t\t\treturn { cancelled: false, selectedText };\n\t\t\t}\n\n\t\t\tconst sessionManager = this.session.sessionManager;\n\t\t\tawait this.teardownCurrent(\"fork\", sessionManager.getSessionFile());\n\t\t\tif (!targetLeafId) {\n\t\t\t\tsessionManager.newSession({ parentSession: previousSessionFile });\n\t\t\t} else {\n\t\t\t\tsessionManager.createBranchedSession(targetLeafId);\n\t\t\t}\n\t\t\tawait this.apply(\n\t\t\t\tawait this.createRuntime({\n\t\t\t\t\tcwd: this.cwd,\n\t\t\t\t\tagentDir: this.services.agentDir,\n\t\t\t\t\tsessionManager,\n\t\t\t\t\tsessionStartEvent: { type: \"session_start\", reason: \"fork\", previousSessionFile },\n\t\t\t\t}),\n\t\t\t\toptions?.withSession,\n\t\t\t);\n\t\t\treturn { cancelled: false, selectedText };\n\t\t});\n\t}\n\n\t/**\n\t * Import a session JSONL file and switch runtime state to the imported session.\n\t *\n\t * @returns `{ cancelled: true }` when cancelled by `session_before_switch`, otherwise `{ cancelled: false }`.\n\t * @throws {SessionImportFileNotFoundError} When the input path does not exist.\n\t * @throws {MissingSessionCwdError} When the imported session cwd cannot be resolved and no override is provided.\n\t */\n\tasync importFromJsonl(inputPath: string, cwdOverride?: string): Promise<{ cancelled: boolean }> {\n\t\treturn this.replace(async () => {\n\t\t\tconst resolvedPath = resolvePath(inputPath);\n\t\t\tif (!existsSync(resolvedPath)) {\n\t\t\t\tthrow new SessionImportFileNotFoundError(resolvedPath);\n\t\t\t}\n\n\t\t\tconst sessionDir = this.session.sessionManager.getSessionDir();\n\t\t\tif (!existsSync(sessionDir)) {\n\t\t\t\tmkdirSync(sessionDir, { recursive: true });\n\t\t\t}\n\n\t\t\tlet destinationPath = join(sessionDir, basename(resolvedPath));\n\t\t\tconst sourceAlreadyStored = resolve(destinationPath) === resolvedPath;\n\t\t\tif (!sourceAlreadyStored) {\n\t\t\t\tconst { name, ext } = parse(destinationPath);\n\t\t\t\tlet suffix = 1;\n\t\t\t\twhile (existsSync(destinationPath)) {\n\t\t\t\t\tdestinationPath = join(sessionDir, `${name}-${suffix++}${ext}`);\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst beforeResult = await this.emitBeforeSwitch(\"resume\", destinationPath);\n\t\t\tthis.assertOpen();\n\t\t\tif (beforeResult.cancelled) {\n\t\t\t\treturn beforeResult;\n\t\t\t}\n\n\t\t\tconst previousSessionFile = this.session.sessionFile;\n\t\t\tif (!sourceAlreadyStored) {\n\t\t\t\tcopyFileSync(resolvedPath, destinationPath, constants.COPYFILE_EXCL);\n\t\t\t}\n\n\t\t\tconst sessionManager = SessionManager.open(destinationPath, sessionDir, cwdOverride);\n\t\t\tassertSessionCwdExists(sessionManager, this.cwd);\n\t\t\tawait this.teardownCurrent(\"resume\", sessionManager.getSessionFile());\n\t\t\tawait this.apply(\n\t\t\t\tawait this.createRuntime({\n\t\t\t\t\tcwd: sessionManager.getCwd(),\n\t\t\t\t\tagentDir: this.services.agentDir,\n\t\t\t\t\tsessionManager,\n\t\t\t\t\tsessionStartEvent: { type: \"session_start\", reason: \"resume\", previousSessionFile },\n\t\t\t\t}),\n\t\t\t);\n\t\t\treturn { cancelled: false };\n\t\t});\n\t}\n\n\tdispose(options?: { fromSignal?: boolean }): Promise<void> {\n\t\tif (this.closing) return this.closing;\n\t\tthis.closed = true;\n\t\tthis.endedBySignal = options?.fromSignal === true;\n\t\tconst current = this.disposeCurrentSession(this.quitEvent());\n\t\tvoid current.catch(() => {});\n\t\tthis.closing = (async () => {\n\t\t\tawait drainSessionWork(this);\n\t\t\tfor (const candidate of this.candidates) {\n\t\t\t\ttry {\n\t\t\t\t\tawait (candidate as unknown as AgentSessionInternalSurface)._close(this.quitEvent());\n\t\t\t\t} catch (error) {\n\t\t\t\t\tthis.cleanupFailures.push(error);\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.candidates.clear();\n\t\t\ttry {\n\t\t\t\tawait current;\n\t\t\t} catch (error) {\n\t\t\t\tthis.cleanupFailures.push(error);\n\t\t\t}\n\t\t\twhile (this.retirementCleanup.size) await Promise.all(this.retirementCleanup);\n\t\t\ttry {\n\t\t\t\tawait this.finalizeRetained();\n\t\t\t} catch (error) {\n\t\t\t\tthis.cleanupFailures.push(error);\n\t\t\t}\n\t\t\tif (this.cleanupFailures.length)\n\t\t\t\tthrow Object.assign(new AggregateError(this.cleanupFailures, \"Runtime shutdown failed\"), {\n\t\t\t\t\tcode: \"ShutdownFailed\",\n\t\t\t\t});\n\t\t})();\n\t\treturn this.closing;\n\t}\n}\n\n/**\n * Create the initial runtime from a runtime factory and initial session target.\n *\n * The same factory is stored on the returned AgentSessionRuntime and reused for\n * later /new, /resume, /fork, and import flows.\n */\nexport async function createAgentSessionRuntime(\n\tcreateRuntime: CreateAgentSessionRuntimeFactory,\n\toptions: {\n\t\tcwd: string;\n\t\tagentDir: string;\n\t\tsessionManager: SessionManager;\n\t\tsessionStartEvent?: SessionStartEvent;\n\t},\n): Promise<AgentSessionRuntime> {\n\tassertSessionCwdExists(options.sessionManager, options.cwd);\n\tconst result = await sessionLifecycleCreation.run({ scope: {} }, () => createRuntime(options));\n\treturn new AgentSessionRuntime(\n\t\tresult.session,\n\t\tresult.services,\n\t\tcreateRuntime,\n\t\tresult.diagnostics,\n\t\tresult.modelFallbackMessage,\n\t\tresult.modelFallbackReason,\n\t);\n}\n\nexport {\n\ttype AgentSessionRuntimeDiagnostic,\n\ttype AgentSessionServices,\n\ttype CreateAgentSessionFromServicesOptions,\n\ttype CreateAgentSessionServicesOptions,\n\tcreateAgentSessionFromServices,\n\tcreateAgentSessionServices,\n} from \"./agent-session-services.ts\";\n"]}
@@ -71,6 +71,8 @@ export interface SessionShutdownEvent {
71
71
  reason: "quit" | "reload" | "new" | "resume" | "fork";
72
72
  /** Destination session file when shutting down due to session replacement. */
73
73
  targetSessionFile?: string;
74
+ /** True when a `quit` was caused by a host termination signal (SIGTERM/SIGHUP) rather than an explicit user quit. */
75
+ fromSignal?: boolean;
74
76
  }
75
77
  /** Preparation data for tree navigation */
76
78
  export interface TreePreparation {
@@ -1 +1 @@
1
- {"version":3,"file":"session-events.d.ts","sourceRoot":"","sources":["../../../src/core/extensions/session-events.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"session-events.d.ts","sourceRoot":"","sources":["../../../src/core/extensions/session-events.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"session-events.js","sourceRoot":"","sources":["../../../src/core/extensions/session-events.ts"],"names":[],"mappings":"","sourcesContent":["import type {\n\tVerbatimCompactionDetails,\n\tVerbatimCompactionPreparation,\n\tVerbatimCompactionResult,\n} from \"../compaction/index.ts\";\nimport type { BranchSummaryEntry, CompactionEntry, SessionEntry } from \"../session-manager.ts\";\n\n// ============================================================================\n// Resource Events\n// ============================================================================\n\n/** Fired after session_start to allow extensions to provide additional resource paths. */\nexport interface ResourcesDiscoverEvent {\n\ttype: \"resources_discover\";\n\tcwd: string;\n\treason: \"startup\" | \"reload\";\n}\n\n/** Result from resources_discover event handler */\nexport interface ResourcesDiscoverResult {\n\tskillPaths?: string[];\n\tpromptPaths?: string[];\n\tthemePaths?: string[];\n}\n\n// ============================================================================\n// Session Events\n// ============================================================================\n\n/** Fired when a session is started, loaded, or reloaded */\nexport interface SessionStartEvent {\n\ttype: \"session_start\";\n\t/** Why this session start happened. */\n\treason: \"startup\" | \"reload\" | \"new\" | \"resume\" | \"fork\";\n\t/** Previously active session file. Present for \"new\", \"resume\", and \"fork\". */\n\tpreviousSessionFile?: string;\n}\n\n/** Fired when the current session metadata changes. */\nexport interface SessionInfoChangedEvent {\n\ttype: \"session_info_changed\";\n\t/** Current normalized session name. Undefined when the name is cleared. */\n\tname: string | undefined;\n}\n\n/** Fired before switching to another session (can be cancelled) */\nexport interface SessionBeforeSwitchEvent {\n\ttype: \"session_before_switch\";\n\treason: \"new\" | \"resume\";\n\ttargetSessionFile?: string;\n}\n\n/** Fired before forking a session (can be cancelled) */\nexport interface SessionBeforeForkEvent {\n\ttype: \"session_before_fork\";\n\tentryId: string;\n\tposition: \"before\" | \"at\";\n}\n\n/** Fired before context compaction (can be cancelled or customized) */\nexport interface SessionBeforeCompactEvent {\n\ttype: \"session_before_compact\";\n\treason: \"manual\" | \"threshold\" | \"overflow\";\n\tparameters: VerbatimCompactionPreparation[\"parameters\"];\n\tpreparation: VerbatimCompactionPreparation;\n\tbranchEntries: SessionEntry[];\n\tsignal: AbortSignal;\n}\n\n/** Fired after context compaction succeeds */\nexport interface SessionCompactEvent {\n\ttype: \"session_compact\";\n\treason: \"manual\" | \"threshold\" | \"overflow\";\n\tparameters: VerbatimCompactionPreparation[\"parameters\"];\n\tresult: VerbatimCompactionResult;\n\tcompactionEntry: CompactionEntry<VerbatimCompactionDetails>;\n\tfromExtension: boolean;\n}\n\n/** Fired after context compaction fails or is aborted. */\nexport interface SessionCompactFailedEvent {\n\ttype: \"session_compact_failed\";\n\treason: \"manual\" | \"threshold\" | \"overflow\";\n\terrorMessage?: string;\n\taborted: boolean;\n\twillRetry: boolean;\n\tfromExtension: boolean;\n}\n\n/** Fired before an extension runtime is torn down due to quit, reload, or session replacement. */\nexport interface SessionShutdownEvent {\n\ttype: \"session_shutdown\";\n\treason: \"quit\" | \"reload\" | \"new\" | \"resume\" | \"fork\";\n\t/** Destination session file when shutting down due to session replacement. */\n\ttargetSessionFile?: string;\n}\n\n/** Preparation data for tree navigation */\nexport interface TreePreparation {\n\ttargetId: string;\n\toldLeafId: string | null;\n\tcommonAncestorId: string | null;\n\tentriesToSummarize: SessionEntry[];\n\tuserWantsSummary: boolean;\n\t/** Custom instructions for summarization */\n\tcustomInstructions?: string;\n\t/** If true, customInstructions replaces the default prompt instead of being appended */\n\treplaceInstructions?: boolean;\n\t/** Label to attach to the branch summary entry */\n\tlabel?: string;\n}\n\n/** Fired before navigating in the session tree (can be cancelled) */\nexport interface SessionBeforeTreeEvent {\n\ttype: \"session_before_tree\";\n\tpreparation: TreePreparation;\n\tsignal: AbortSignal;\n}\n\n/** Fired after navigating in the session tree */\nexport interface SessionTreeEvent {\n\ttype: \"session_tree\";\n\tnewLeafId: string | null;\n\toldLeafId: string | null;\n\tsummaryEntry?: BranchSummaryEntry;\n\tfromExtension?: boolean;\n}\n\nexport type SessionEvent =\n\t| SessionStartEvent\n\t| SessionInfoChangedEvent\n\t| SessionBeforeSwitchEvent\n\t| SessionBeforeForkEvent\n\t| SessionBeforeCompactEvent\n\t| SessionCompactEvent\n\t| SessionCompactFailedEvent\n\t| SessionShutdownEvent\n\t| SessionBeforeTreeEvent\n\t| SessionTreeEvent;\n"]}
1
+ {"version":3,"file":"session-events.js","sourceRoot":"","sources":["../../../src/core/extensions/session-events.ts"],"names":[],"mappings":"","sourcesContent":["import type {\n\tVerbatimCompactionDetails,\n\tVerbatimCompactionPreparation,\n\tVerbatimCompactionResult,\n} from \"../compaction/index.ts\";\nimport type { BranchSummaryEntry, CompactionEntry, SessionEntry } from \"../session-manager.ts\";\n\n// ============================================================================\n// Resource Events\n// ============================================================================\n\n/** Fired after session_start to allow extensions to provide additional resource paths. */\nexport interface ResourcesDiscoverEvent {\n\ttype: \"resources_discover\";\n\tcwd: string;\n\treason: \"startup\" | \"reload\";\n}\n\n/** Result from resources_discover event handler */\nexport interface ResourcesDiscoverResult {\n\tskillPaths?: string[];\n\tpromptPaths?: string[];\n\tthemePaths?: string[];\n}\n\n// ============================================================================\n// Session Events\n// ============================================================================\n\n/** Fired when a session is started, loaded, or reloaded */\nexport interface SessionStartEvent {\n\ttype: \"session_start\";\n\t/** Why this session start happened. */\n\treason: \"startup\" | \"reload\" | \"new\" | \"resume\" | \"fork\";\n\t/** Previously active session file. Present for \"new\", \"resume\", and \"fork\". */\n\tpreviousSessionFile?: string;\n}\n\n/** Fired when the current session metadata changes. */\nexport interface SessionInfoChangedEvent {\n\ttype: \"session_info_changed\";\n\t/** Current normalized session name. Undefined when the name is cleared. */\n\tname: string | undefined;\n}\n\n/** Fired before switching to another session (can be cancelled) */\nexport interface SessionBeforeSwitchEvent {\n\ttype: \"session_before_switch\";\n\treason: \"new\" | \"resume\";\n\ttargetSessionFile?: string;\n}\n\n/** Fired before forking a session (can be cancelled) */\nexport interface SessionBeforeForkEvent {\n\ttype: \"session_before_fork\";\n\tentryId: string;\n\tposition: \"before\" | \"at\";\n}\n\n/** Fired before context compaction (can be cancelled or customized) */\nexport interface SessionBeforeCompactEvent {\n\ttype: \"session_before_compact\";\n\treason: \"manual\" | \"threshold\" | \"overflow\";\n\tparameters: VerbatimCompactionPreparation[\"parameters\"];\n\tpreparation: VerbatimCompactionPreparation;\n\tbranchEntries: SessionEntry[];\n\tsignal: AbortSignal;\n}\n\n/** Fired after context compaction succeeds */\nexport interface SessionCompactEvent {\n\ttype: \"session_compact\";\n\treason: \"manual\" | \"threshold\" | \"overflow\";\n\tparameters: VerbatimCompactionPreparation[\"parameters\"];\n\tresult: VerbatimCompactionResult;\n\tcompactionEntry: CompactionEntry<VerbatimCompactionDetails>;\n\tfromExtension: boolean;\n}\n\n/** Fired after context compaction fails or is aborted. */\nexport interface SessionCompactFailedEvent {\n\ttype: \"session_compact_failed\";\n\treason: \"manual\" | \"threshold\" | \"overflow\";\n\terrorMessage?: string;\n\taborted: boolean;\n\twillRetry: boolean;\n\tfromExtension: boolean;\n}\n\n/** Fired before an extension runtime is torn down due to quit, reload, or session replacement. */\nexport interface SessionShutdownEvent {\n\ttype: \"session_shutdown\";\n\treason: \"quit\" | \"reload\" | \"new\" | \"resume\" | \"fork\";\n\t/** Destination session file when shutting down due to session replacement. */\n\ttargetSessionFile?: string;\n\t/** True when a `quit` was caused by a host termination signal (SIGTERM/SIGHUP) rather than an explicit user quit. */\n\tfromSignal?: boolean;\n}\n\n/** Preparation data for tree navigation */\nexport interface TreePreparation {\n\ttargetId: string;\n\toldLeafId: string | null;\n\tcommonAncestorId: string | null;\n\tentriesToSummarize: SessionEntry[];\n\tuserWantsSummary: boolean;\n\t/** Custom instructions for summarization */\n\tcustomInstructions?: string;\n\t/** If true, customInstructions replaces the default prompt instead of being appended */\n\treplaceInstructions?: boolean;\n\t/** Label to attach to the branch summary entry */\n\tlabel?: string;\n}\n\n/** Fired before navigating in the session tree (can be cancelled) */\nexport interface SessionBeforeTreeEvent {\n\ttype: \"session_before_tree\";\n\tpreparation: TreePreparation;\n\tsignal: AbortSignal;\n}\n\n/** Fired after navigating in the session tree */\nexport interface SessionTreeEvent {\n\ttype: \"session_tree\";\n\tnewLeafId: string | null;\n\toldLeafId: string | null;\n\tsummaryEntry?: BranchSummaryEntry;\n\tfromExtension?: boolean;\n}\n\nexport type SessionEvent =\n\t| SessionStartEvent\n\t| SessionInfoChangedEvent\n\t| SessionBeforeSwitchEvent\n\t| SessionBeforeForkEvent\n\t| SessionBeforeCompactEvent\n\t| SessionCompactEvent\n\t| SessionCompactFailedEvent\n\t| SessionShutdownEvent\n\t| SessionBeforeTreeEvent\n\t| SessionTreeEvent;\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"provider-alias.d.ts","sourceRoot":"","sources":["../../src/core/provider-alias.ts"],"names":[],"mappings":"AAAA,OAAO,EAQN,KAAK,QAAQ,EAIb,MAAM,gBAAgB,CAAC;AAExB,MAAM,WAAW,mBAAmB;IACnC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;CACjB;AA2ED,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,mBAAmB,EAAE,OAAO,EAAE,MAAM,QAAQ,GAAG,QAAQ,CAkElG"}
1
+ {"version":3,"file":"provider-alias.d.ts","sourceRoot":"","sources":["../../src/core/provider-alias.ts"],"names":[],"mappings":"AAAA,OAAO,EAQN,KAAK,QAAQ,EAIb,MAAM,gBAAgB,CAAC;AAExB,MAAM,WAAW,mBAAmB;IACnC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;CACjB;AAoFD,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,mBAAmB,EAAE,OAAO,EAAE,MAAM,QAAQ,GAAG,QAAQ,CAkElG"}
@@ -5,6 +5,14 @@ function withProvider(value, provider) {
5
5
  function aliasApiKey(auth) {
6
6
  return {
7
7
  ...auth,
8
+ borrowCredentialsFrom: undefined,
9
+ login: auth.login ??
10
+ (async (interaction) => {
11
+ interaction.signal.throwIfAborted();
12
+ const key = await interaction.prompt({ type: "secret", message: `Enter ${auth.name}` });
13
+ interaction.signal.throwIfAborted();
14
+ return { type: "api_key", key };
15
+ }),
8
16
  check: async (input) => {
9
17
  if (!input.credential?.key?.trim())
10
18
  return undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"provider-alias.js","sourceRoot":"","sources":["../../src/core/provider-alias.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n\ttype AnyModel,\n\ttype Api,\n\ttype ApiKeyAuth,\n\ttype AssistantMessageEvent,\n\ttype AssistantMessageEventStream,\n\tlazyStream,\n\ttype Model,\n\ttype Provider,\n\ttype ProviderRequestOptions,\n\ttype StreamOptions,\n\ttype TranscriptContext,\n} from \"@bastani/pi-ai\";\n\nexport interface ProviderAliasConfig {\n\tid: string;\n\tname?: string;\n\tprovider: string;\n}\n\nfunction withProvider<T extends { provider: string }>(value: T, provider: string): T {\n\treturn { ...value, provider };\n}\n\nfunction aliasApiKey(auth: ApiKeyAuth): ApiKeyAuth {\n\treturn {\n\t\t...auth,\n\t\tcheck: async (input) => {\n\t\t\tif (!input.credential?.key?.trim()) return undefined;\n\t\t\tif (auth.check) return auth.check(input);\n\t\t\tconst result = await auth.resolve(input);\n\t\t\treturn result ? { type: \"api_key\", source: result.source } : undefined;\n\t\t},\n\t\tresolve: async (input) => (input.credential?.key?.trim() ? auth.resolve(input) : undefined),\n\t};\n}\n\nfunction sourceContext(context: TranscriptContext, alias: string, source: string): TranscriptContext {\n\treturn {\n\t\t...context,\n\t\tmessages: context.messages.map((message) => {\n\t\t\tif (message.role !== \"assistant\") return message;\n\t\t\tif (message.provider === alias) return withProvider(message, source);\n\t\t\tif (message.provider === source) return withProvider(message, `${source}:other-account`);\n\t\t\treturn message;\n\t\t}),\n\t};\n}\n\nfunction aliasOptions<TModel extends AnyModel, T extends ProviderRequestOptions<TModel>>(\n\toptions: T | undefined,\n\tmodel: TModel,\n): T | undefined {\n\tif (!options) return undefined;\n\treturn {\n\t\t...options,\n\t\tonPayload: options.onPayload ? (payload) => options.onPayload!(payload, model) : undefined,\n\t\tonResponse: options.onResponse ? (response) => options.onResponse!(response, model) : undefined,\n\t};\n}\n\nfunction aliasChatOptions<T extends StreamOptions>(options: T | undefined, model: Model<Api>): T | undefined {\n\tconst mapped = aliasOptions(options, model);\n\tif (!mapped) return undefined;\n\treturn {\n\t\t...mapped,\n\t\tonProviderStreamEvent: mapped.onProviderStreamEvent\n\t\t\t? (data) => mapped.onProviderStreamEvent!(data, model)\n\t\t\t: undefined,\n\t};\n}\n\nfunction aliasStream(model: Model<Api>, start: () => AssistantMessageEventStream): AssistantMessageEventStream {\n\treturn lazyStream(model, async () => {\n\t\tconst source = start();\n\t\tasync function* events(): AsyncGenerator<AssistantMessageEvent> {\n\t\t\tfor await (const event of source) {\n\t\t\t\tif (event.type === \"done\") {\n\t\t\t\t\tyield { ...event, message: withProvider(event.message, model.provider) };\n\t\t\t\t} else if (event.type === \"error\") {\n\t\t\t\t\tyield { ...event, error: withProvider(event.error, model.provider) };\n\t\t\t\t} else {\n\t\t\t\t\tyield { ...event, partial: withProvider(event.partial, model.provider) };\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn {\n\t\t\t[Symbol.asyncIterator]: events,\n\t\t\tresult: async () => withProvider(await source.result(), model.provider),\n\t\t};\n\t});\n}\n\nexport function createProviderAlias(config: ProviderAliasConfig, resolve: () => Provider): Provider {\n\tconst source = resolve();\n\tconst sourceModel = <T extends AnyModel>(model: T): T => withProvider(model, config.provider);\n\tconst aliasModel = <T extends AnyModel>(model: T): T => withProvider(model, config.id);\n\tconst apiKey = source.auth.apiKey;\n\tconst oauth = source.auth.oauth;\n\tconst alias: Provider = {\n\t\tid: config.id,\n\t\tname: config.name ?? config.id,\n\t\tbaseUrl: source.baseUrl,\n\t\theaders: source.headers,\n\t\tauth: {\n\t\t\t...(apiKey ? { apiKey: aliasApiKey(apiKey) } : {}),\n\t\t\t...(oauth ? { oauth: { ...oauth, name: config.name ?? config.id } } : {}),\n\t\t},\n\t\tgetModels: () => resolve().getModels().map(aliasModel),\n\t\tgetAllModels: () => {\n\t\t\tconst current = resolve();\n\t\t\treturn (current.getAllModels?.() ?? current.getModels()).map(aliasModel);\n\t\t},\n\t\tfilterModels: (models, credential) => {\n\t\t\tconst current = resolve();\n\t\t\treturn (current.filterModels?.(models.map(sourceModel), credential) ?? models).map(aliasModel);\n\t\t},\n\t\tfilterAllModels: source.filterAllModels\n\t\t\t? (models, credential) => resolve().filterAllModels!(models.map(sourceModel), credential).map(aliasModel)\n\t\t\t: undefined,\n\t\tstream: (model, context, options) =>\n\t\t\taliasStream(model, () =>\n\t\t\t\tresolve().stream(\n\t\t\t\t\tsourceModel(model),\n\t\t\t\t\tsourceContext(context, config.id, config.provider),\n\t\t\t\t\taliasChatOptions(options, model),\n\t\t\t\t),\n\t\t\t),\n\t\tstreamSimple: (model, context, options) =>\n\t\t\taliasStream(model, () =>\n\t\t\t\tresolve().streamSimple(\n\t\t\t\t\tsourceModel(model),\n\t\t\t\t\tsourceContext(context, config.id, config.provider),\n\t\t\t\t\taliasChatOptions(options, model),\n\t\t\t\t),\n\t\t\t),\n\t};\n\tif (source.fetchDeferred) {\n\t\talias.fetchDeferred = (model, handle, options) =>\n\t\t\taliasStream(model, () =>\n\t\t\t\tresolve().fetchDeferred!(sourceModel(model), handle, aliasChatOptions(options, model)),\n\t\t\t);\n\t}\n\tif (source.cancelDeferred) {\n\t\talias.cancelDeferred = (model, handle, options) =>\n\t\t\tresolve().cancelDeferred!(sourceModel(model), handle, aliasOptions(options, model));\n\t}\n\tif (source.generateImages) {\n\t\talias.generateImages = async (model, context, options) =>\n\t\t\twithProvider(\n\t\t\t\tawait resolve().generateImages!(sourceModel(model), context, aliasOptions(options, model)),\n\t\t\t\tconfig.id,\n\t\t\t);\n\t}\n\tif (source.classify) {\n\t\talias.classify = async (model, context, options) =>\n\t\t\twithProvider(await resolve().classify!(sourceModel(model), context, aliasOptions(options, model)), config.id);\n\t}\n\treturn alias;\n}\n"]}
1
+ {"version":3,"file":"provider-alias.js","sourceRoot":"","sources":["../../src/core/provider-alias.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n\ttype AnyModel,\n\ttype Api,\n\ttype ApiKeyAuth,\n\ttype AssistantMessageEvent,\n\ttype AssistantMessageEventStream,\n\tlazyStream,\n\ttype Model,\n\ttype Provider,\n\ttype ProviderRequestOptions,\n\ttype StreamOptions,\n\ttype TranscriptContext,\n} from \"@bastani/pi-ai\";\n\nexport interface ProviderAliasConfig {\n\tid: string;\n\tname?: string;\n\tprovider: string;\n}\n\nfunction withProvider<T extends { provider: string }>(value: T, provider: string): T {\n\treturn { ...value, provider };\n}\n\nfunction aliasApiKey(auth: ApiKeyAuth): ApiKeyAuth {\n\treturn {\n\t\t...auth,\n\t\tborrowCredentialsFrom: undefined,\n\t\tlogin:\n\t\t\tauth.login ??\n\t\t\t(async (interaction) => {\n\t\t\t\tinteraction.signal.throwIfAborted();\n\t\t\t\tconst key = await interaction.prompt({ type: \"secret\", message: `Enter ${auth.name}` });\n\t\t\t\tinteraction.signal.throwIfAborted();\n\t\t\t\treturn { type: \"api_key\", key };\n\t\t\t}),\n\t\tcheck: async (input) => {\n\t\t\tif (!input.credential?.key?.trim()) return undefined;\n\t\t\tif (auth.check) return auth.check(input);\n\t\t\tconst result = await auth.resolve(input);\n\t\t\treturn result ? { type: \"api_key\", source: result.source } : undefined;\n\t\t},\n\t\tresolve: async (input) => (input.credential?.key?.trim() ? auth.resolve(input) : undefined),\n\t};\n}\n\nfunction sourceContext(context: TranscriptContext, alias: string, source: string): TranscriptContext {\n\treturn {\n\t\t...context,\n\t\tmessages: context.messages.map((message) => {\n\t\t\tif (message.role !== \"assistant\") return message;\n\t\t\tif (message.provider === alias) return withProvider(message, source);\n\t\t\tif (message.provider === source) return withProvider(message, `${source}:other-account`);\n\t\t\treturn message;\n\t\t}),\n\t};\n}\n\nfunction aliasOptions<TModel extends AnyModel, T extends ProviderRequestOptions<TModel>>(\n\toptions: T | undefined,\n\tmodel: TModel,\n): T | undefined {\n\tif (!options) return undefined;\n\treturn {\n\t\t...options,\n\t\tonPayload: options.onPayload ? (payload) => options.onPayload!(payload, model) : undefined,\n\t\tonResponse: options.onResponse ? (response) => options.onResponse!(response, model) : undefined,\n\t};\n}\n\nfunction aliasChatOptions<T extends StreamOptions>(options: T | undefined, model: Model<Api>): T | undefined {\n\tconst mapped = aliasOptions(options, model);\n\tif (!mapped) return undefined;\n\treturn {\n\t\t...mapped,\n\t\tonProviderStreamEvent: mapped.onProviderStreamEvent\n\t\t\t? (data) => mapped.onProviderStreamEvent!(data, model)\n\t\t\t: undefined,\n\t};\n}\n\nfunction aliasStream(model: Model<Api>, start: () => AssistantMessageEventStream): AssistantMessageEventStream {\n\treturn lazyStream(model, async () => {\n\t\tconst source = start();\n\t\tasync function* events(): AsyncGenerator<AssistantMessageEvent> {\n\t\t\tfor await (const event of source) {\n\t\t\t\tif (event.type === \"done\") {\n\t\t\t\t\tyield { ...event, message: withProvider(event.message, model.provider) };\n\t\t\t\t} else if (event.type === \"error\") {\n\t\t\t\t\tyield { ...event, error: withProvider(event.error, model.provider) };\n\t\t\t\t} else {\n\t\t\t\t\tyield { ...event, partial: withProvider(event.partial, model.provider) };\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn {\n\t\t\t[Symbol.asyncIterator]: events,\n\t\t\tresult: async () => withProvider(await source.result(), model.provider),\n\t\t};\n\t});\n}\n\nexport function createProviderAlias(config: ProviderAliasConfig, resolve: () => Provider): Provider {\n\tconst source = resolve();\n\tconst sourceModel = <T extends AnyModel>(model: T): T => withProvider(model, config.provider);\n\tconst aliasModel = <T extends AnyModel>(model: T): T => withProvider(model, config.id);\n\tconst apiKey = source.auth.apiKey;\n\tconst oauth = source.auth.oauth;\n\tconst alias: Provider = {\n\t\tid: config.id,\n\t\tname: config.name ?? config.id,\n\t\tbaseUrl: source.baseUrl,\n\t\theaders: source.headers,\n\t\tauth: {\n\t\t\t...(apiKey ? { apiKey: aliasApiKey(apiKey) } : {}),\n\t\t\t...(oauth ? { oauth: { ...oauth, name: config.name ?? config.id } } : {}),\n\t\t},\n\t\tgetModels: () => resolve().getModels().map(aliasModel),\n\t\tgetAllModels: () => {\n\t\t\tconst current = resolve();\n\t\t\treturn (current.getAllModels?.() ?? current.getModels()).map(aliasModel);\n\t\t},\n\t\tfilterModels: (models, credential) => {\n\t\t\tconst current = resolve();\n\t\t\treturn (current.filterModels?.(models.map(sourceModel), credential) ?? models).map(aliasModel);\n\t\t},\n\t\tfilterAllModels: source.filterAllModels\n\t\t\t? (models, credential) => resolve().filterAllModels!(models.map(sourceModel), credential).map(aliasModel)\n\t\t\t: undefined,\n\t\tstream: (model, context, options) =>\n\t\t\taliasStream(model, () =>\n\t\t\t\tresolve().stream(\n\t\t\t\t\tsourceModel(model),\n\t\t\t\t\tsourceContext(context, config.id, config.provider),\n\t\t\t\t\taliasChatOptions(options, model),\n\t\t\t\t),\n\t\t\t),\n\t\tstreamSimple: (model, context, options) =>\n\t\t\taliasStream(model, () =>\n\t\t\t\tresolve().streamSimple(\n\t\t\t\t\tsourceModel(model),\n\t\t\t\t\tsourceContext(context, config.id, config.provider),\n\t\t\t\t\taliasChatOptions(options, model),\n\t\t\t\t),\n\t\t\t),\n\t};\n\tif (source.fetchDeferred) {\n\t\talias.fetchDeferred = (model, handle, options) =>\n\t\t\taliasStream(model, () =>\n\t\t\t\tresolve().fetchDeferred!(sourceModel(model), handle, aliasChatOptions(options, model)),\n\t\t\t);\n\t}\n\tif (source.cancelDeferred) {\n\t\talias.cancelDeferred = (model, handle, options) =>\n\t\t\tresolve().cancelDeferred!(sourceModel(model), handle, aliasOptions(options, model));\n\t}\n\tif (source.generateImages) {\n\t\talias.generateImages = async (model, context, options) =>\n\t\t\twithProvider(\n\t\t\t\tawait resolve().generateImages!(sourceModel(model), context, aliasOptions(options, model)),\n\t\t\t\tconfig.id,\n\t\t\t);\n\t}\n\tif (source.classify) {\n\t\talias.classify = async (model, context, options) =>\n\t\t\twithProvider(await resolve().classify!(sourceModel(model), context, aliasOptions(options, model)), config.id);\n\t}\n\treturn alias;\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"provider-composer-internal.d.ts","sourceRoot":"","sources":["../../src/core/provider-composer-internal.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"provider-composer-internal.d.ts","sourceRoot":"","sources":["../../src/core/provider-composer-internal.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACX,QAAQ,EACR,GAAG,EACH,UAAU,EACV,2BAA2B,EAG3B,aAAa,EACb,QAAQ,EACR,KAAK,EAEL,SAAS,EACT,gBAAgB,EAChB,mBAAmB,EACnB,QAAQ,EAER,kBAAkB,EAElB,cAAc,EACd,oBAAoB,EACpB,mBAAmB,EACnB,iBAAiB,EACjB,MAAM,gBAAgB,CAAC;AAExB,OAAO,KAAK,EAAmB,uBAAuB,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACtG,OAAO,EACN,qBAAqB,EAKrB,MAAM,2BAA2B,CAAC;AAEnC,MAAM,WAAW,oBAAoB;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,KAAK,CAAC,SAAS,EAAE,mBAAmB,EAAE,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC;IACtF;;;;;;OAMG;IACH,YAAY,CAAC,WAAW,EAAE,gBAAgB,EAAE,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAC5F,SAAS,CAAC,WAAW,EAAE,gBAAgB,GAAG,MAAM,CAAC;IACjD,YAAY,CAAC,CAAC,MAAM,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,EAAE,WAAW,EAAE,gBAAgB,GAAG,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;CACjF;AAED,UAAU,uBAAuB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC;IACzB,WAAW,CAAC,EAAE,QAAQ,CAAC,aAAa,CAAC,CAAC;IACtC,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACjC;AAED,MAAM,WAAW,uBAAwB,SAAQ,uBAAuB;IACvE,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,GAAG,CAAC;IACV,SAAS,EAAE,OAAO,CAAC;IACnB,gBAAgB,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,kBAAkB,CAAC,CAAC;IAClD,WAAW,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,aAAa,CAAC,CAAC;IACxC,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,gBAAgB,CAAC,CAAC;IAC9C,6BAA6B,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,+BAA+B,CAAC,CAAC;IAC5E,MAAM,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC;CAC9B;AAED,MAAM,WAAW,wBAAyB,SAAQ,uBAAuB;IACxE,IAAI,EAAE,OAAO,CAAC;IACd,GAAG,CAAC,EAAE,QAAQ,CAAC;IACf,MAAM,EAAE,CAAC,MAAM,GAAG,OAAO,CAAC,EAAE,CAAC;CAC7B;AAED,MAAM,WAAW,6BAA8B,SAAQ,uBAAuB;IAC7E,IAAI,EAAE,YAAY,CAAC;IACnB,GAAG,CAAC,EAAE,aAAa,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,MAAM,mBAAmB,GAAG,uBAAuB,GAAG,wBAAwB,GAAG,6BAA6B,CAAC;AAErH,yDAAyD;AACzD,MAAM,WAAW,mBAAmB;IACnC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,EAAE,GAAG,CAAC;IACV,YAAY,CAAC,EAAE,CACd,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,EACjB,OAAO,EAAE,iBAAiB,EAC1B,OAAO,CAAC,EAAE,mBAAmB,KACzB,2BAA2B,CAAC;IACjC,MAAM,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC,CAAC;IACnD,WAAW,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,aAAa,EAAE,kBAAkB,CAAC,CAAC,CAAC;IACjE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,KAAK,CAAC,EAAE,oBAAoB,CAAC;IAC7B,MAAM,CAAC,EAAE,mBAAmB,EAAE,CAAC;IAC/B,aAAa,CAAC,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,WAAW,CAAC,mBAAmB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;CACnG;AAED,MAAM,MAAM,UAAU,GAAG;IACxB,UAAU,EAAE,OAAO,CAAC;IACpB,MAAM,CAAC,EAAE,QAAQ,GAAG,SAAS,GAAG,aAAa,GAAG,UAAU,GAAG,iBAAiB,GAAG,qBAAqB,CAAC;IACvG,KAAK,CAAC,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,eAAO,MAAM,gBAAgB,8BAAwB,CAAC;AAyDtD,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,QAAQ,EAAE,uBAAuB,GAAG,KAAK,CAAC,GAAG,CAAC,CA+BnG;AAoDD,wBAAgB,eAAe,CAC9B,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,SAAS,QAAQ,EAAE,EAC/B,MAAM,EAAE,kBAAkB,GAAG,SAAS,GACpC,QAAQ,EAAE,CA0CZ;AAED,wBAAgB,cAAc,CAC7B,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,SAAS,QAAQ,EAAE,EAC3B,MAAM,EAAE,mBAAmB,GAAG,SAAS,GACrC,QAAQ,EAAE,CA0BZ;AAwCD,wBAAgB,gBAAgB,CAC/B,MAAM,EAAE,kBAAkB,GAAG,SAAS,EACtC,SAAS,EAAE,mBAAmB,GAAG,SAAS,GACxC,MAAM,GAAG,SAAS,CAEpB;AAED,wBAAgB,iBAAiB,CAChC,MAAM,EAAE,kBAAkB,GAAG,SAAS,EACtC,SAAS,EAAE,mBAAmB,GAAG,SAAS,GACxC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAGpC;AAgBD,wBAAgB,iBAAiB,CAChC,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,QAAQ,GAAG,SAAS,EAC1B,MAAM,EAAE,kBAAkB,GAAG,SAAS,EACtC,SAAS,EAAE,mBAAmB,GAAG,SAAS,GACxC,UAAU,GAAG,SAAS,CA6DxB;AAED,wBAAgB,gBAAgB,CAC/B,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,QAAQ,GAAG,SAAS,EAC1B,MAAM,EAAE,kBAAkB,GAAG,SAAS,EACtC,SAAS,EAAE,mBAAmB,GAAG,SAAS,GACxC,SAAS,GAAG,SAAS,CAkBvB;AAED,wBAAgB,eAAe,CAC9B,KAAK,EAAE,QAAQ,EACf,MAAM,EAAE,kBAAkB,GAAG,SAAS,EACtC,SAAS,EAAE,mBAAmB,GAAG,SAAS,GACxC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAWpC"}
@@ -236,11 +236,14 @@ export function composeApiKeyAuth(providerId, base, config, extension) {
236
236
  const authHeader = extension?.authHeader ?? config?.authHeader ?? false;
237
237
  return {
238
238
  name: inherited?.name ?? "API key",
239
- login: inherited?.login ??
240
- (async (interaction) => ({
239
+ // A configured key replaces borrowed credentials; a base without a login gains none.
240
+ borrowCredentialsFrom: rawKey === undefined ? inherited?.borrowCredentialsFrom : undefined,
241
+ login: inherited
242
+ ? inherited.login
243
+ : async (interaction) => ({
241
244
  type: "api_key",
242
245
  key: await interaction.prompt({ type: "secret", message: "Enter API key" }),
243
- })),
246
+ }),
244
247
  check: async (input) => {
245
248
  if (input.credential) {
246
249
  if (inherited?.check)