@bastani/atomic 0.9.26-alpha.1 → 0.9.26-alpha.3

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 (140) hide show
  1. package/CHANGELOG.md +28 -0
  2. package/dist/builtin/intercom/broker/spawn.ts +2 -0
  3. package/dist/builtin/intercom/index.bundle.mjs +1 -0
  4. package/dist/builtin/intercom/package.json +1 -1
  5. package/dist/builtin/mcp/native-client-licenses/NOTICE +2 -0
  6. package/dist/builtin/mcp/package.json +1 -1
  7. package/dist/builtin/subagents/package.json +1 -1
  8. package/dist/builtin/web-access/package.json +1 -1
  9. package/dist/builtin/workflows/package.json +1 -1
  10. package/dist/cli/args.d.ts.map +1 -1
  11. package/dist/cli/args.js +4 -1
  12. package/dist/cli/args.js.map +1 -1
  13. package/dist/core/extensions/api-types.d.ts +2 -1
  14. package/dist/core/extensions/api-types.d.ts.map +1 -1
  15. package/dist/core/extensions/api-types.js.map +1 -1
  16. package/dist/core/extensions/index.d.ts +1 -1
  17. package/dist/core/extensions/index.d.ts.map +1 -1
  18. package/dist/core/extensions/index.js.map +1 -1
  19. package/dist/core/extensions/loader-api.d.ts.map +1 -1
  20. package/dist/core/extensions/loader-api.js +7 -0
  21. package/dist/core/extensions/loader-api.js.map +1 -1
  22. package/dist/core/extensions/provider-types.d.ts +2 -0
  23. package/dist/core/extensions/provider-types.d.ts.map +1 -1
  24. package/dist/core/extensions/provider-types.js.map +1 -1
  25. package/dist/core/keybindings.d.ts +5 -0
  26. package/dist/core/keybindings.d.ts.map +1 -1
  27. package/dist/core/keybindings.js +1 -0
  28. package/dist/core/keybindings.js.map +1 -1
  29. package/dist/core/model-runtime-streaming.d.ts +2 -1
  30. package/dist/core/model-runtime-streaming.d.ts.map +1 -1
  31. package/dist/core/model-runtime-streaming.js +4 -1
  32. package/dist/core/model-runtime-streaming.js.map +1 -1
  33. package/dist/core/model-runtime.d.ts +2 -0
  34. package/dist/core/model-runtime.d.ts.map +1 -1
  35. package/dist/core/model-runtime.js +69 -5
  36. package/dist/core/model-runtime.js.map +1 -1
  37. package/dist/core/oauth-provider-metadata.d.ts.map +1 -1
  38. package/dist/core/oauth-provider-metadata.js +4 -17
  39. package/dist/core/oauth-provider-metadata.js.map +1 -1
  40. package/dist/core/provider-alias.d.ts +8 -0
  41. package/dist/core/provider-alias.d.ts.map +1 -0
  42. package/dist/core/provider-alias.js +119 -0
  43. package/dist/core/provider-alias.js.map +1 -0
  44. package/dist/core/provider-composer-internal.d.ts +1 -0
  45. package/dist/core/provider-composer-internal.d.ts.map +1 -1
  46. package/dist/core/provider-composer-internal.js.map +1 -1
  47. package/dist/core/provider-composer.d.ts.map +1 -1
  48. package/dist/core/provider-composer.js +9 -0
  49. package/dist/core/provider-composer.js.map +1 -1
  50. package/dist/core/sdk.js +2 -1
  51. package/dist/core/sdk.js.map +1 -1
  52. package/dist/extensions/mcp/cli.d.ts.map +1 -1
  53. package/dist/extensions/mcp/cli.js +4 -1
  54. package/dist/extensions/mcp/cli.js.map +1 -1
  55. package/dist/extensions/mcp/client/oauth/callback.d.ts +4 -2
  56. package/dist/extensions/mcp/client/oauth/callback.d.ts.map +1 -1
  57. package/dist/extensions/mcp/client/oauth/callback.js +12 -7
  58. package/dist/extensions/mcp/client/oauth/callback.js.map +1 -1
  59. package/dist/extensions/mcp/client/oauth/flow.d.ts +7 -1
  60. package/dist/extensions/mcp/client/oauth/flow.d.ts.map +1 -1
  61. package/dist/extensions/mcp/client/oauth/flow.js +20 -21
  62. package/dist/extensions/mcp/client/oauth/flow.js.map +1 -1
  63. package/dist/extensions/mcp/client/oauth/index.d.ts +1 -1
  64. package/dist/extensions/mcp/client/oauth/index.d.ts.map +1 -1
  65. package/dist/extensions/mcp/client/oauth/index.js.map +1 -1
  66. package/dist/extensions/mcp/client/oauth/provider.d.ts +5 -2
  67. package/dist/extensions/mcp/client/oauth/provider.d.ts.map +1 -1
  68. package/dist/extensions/mcp/client/oauth/provider.js +2 -0
  69. package/dist/extensions/mcp/client/oauth/provider.js.map +1 -1
  70. package/dist/extensions/mcp/config.d.ts +16 -4
  71. package/dist/extensions/mcp/config.d.ts.map +1 -1
  72. package/dist/extensions/mcp/config.js +50 -11
  73. package/dist/extensions/mcp/config.js.map +1 -1
  74. package/dist/extensions/mcp/index.d.ts +4 -1
  75. package/dist/extensions/mcp/index.d.ts.map +1 -1
  76. package/dist/extensions/mcp/index.js +80 -46
  77. package/dist/extensions/mcp/index.js.map +1 -1
  78. package/dist/extensions/mcp/oauth.d.ts.map +1 -1
  79. package/dist/extensions/mcp/oauth.js +9 -5
  80. package/dist/extensions/mcp/oauth.js.map +1 -1
  81. package/dist/extensions/mcp/ui.d.ts.map +1 -1
  82. package/dist/extensions/mcp/ui.js +8 -4
  83. package/dist/extensions/mcp/ui.js.map +1 -1
  84. package/dist/index-extensions.d.ts +1 -1
  85. package/dist/index-extensions.d.ts.map +1 -1
  86. package/dist/index-extensions.js.map +1 -1
  87. package/dist/index.d.ts +1 -1
  88. package/dist/index.js.map +1 -1
  89. package/dist/modes/interactive/chat-input-actions.js.map +1 -1
  90. package/dist/modes/interactive/components/auth-url.d.ts +10 -0
  91. package/dist/modes/interactive/components/auth-url.d.ts.map +1 -0
  92. package/dist/modes/interactive/components/auth-url.js +37 -0
  93. package/dist/modes/interactive/components/auth-url.js.map +1 -0
  94. package/dist/modes/interactive/components/index.d.ts +0 -1
  95. package/dist/modes/interactive/components/index.d.ts.map +1 -1
  96. package/dist/modes/interactive/components/index.js +0 -1
  97. package/dist/modes/interactive/components/index.js.map +1 -1
  98. package/dist/modes/interactive/components/login-dialog.d.ts +1 -0
  99. package/dist/modes/interactive/components/login-dialog.d.ts.map +1 -1
  100. package/dist/modes/interactive/components/login-dialog.js +10 -5
  101. package/dist/modes/interactive/components/login-dialog.js.map +1 -1
  102. package/dist/modes/interactive/interactive-auth-login.js +0 -1
  103. package/dist/modes/interactive/interactive-auth-login.js.map +1 -1
  104. package/dist/modes/interactive/interactive-hotkeys-debug.js +1 -11
  105. package/dist/modes/interactive/interactive-hotkeys-debug.js.map +1 -1
  106. package/dist/modes/interactive/interactive-mode-base.js.map +1 -1
  107. package/dist/modes/interactive/interactive-mode-deps.d.ts +1 -2
  108. package/dist/modes/interactive/interactive-mode-deps.d.ts.map +1 -1
  109. package/dist/modes/interactive/interactive-mode-deps.js +0 -1
  110. package/dist/modes/interactive/interactive-mode-deps.js.map +1 -1
  111. package/dist/modes/interactive/interactive-mode-surface.d.ts +0 -5
  112. package/dist/modes/interactive/interactive-mode-surface.d.ts.map +1 -1
  113. package/dist/modes/interactive/interactive-mode-surface.js.map +1 -1
  114. package/dist/modes/interactive/interactive-model-routing.js +0 -2
  115. package/dist/modes/interactive/interactive-model-routing.js.map +1 -1
  116. package/dist/modes/interactive/interactive-tui.js.map +1 -1
  117. package/dist/modes/interactive-engine/engine-custom-ui.d.ts.map +1 -1
  118. package/dist/modes/interactive-engine/engine-custom-ui.js +38 -2
  119. package/dist/modes/interactive-engine/engine-custom-ui.js.map +1 -1
  120. package/dist/modes/interactive-engine/protocol.d.ts +10 -0
  121. package/dist/modes/interactive-engine/protocol.d.ts.map +1 -1
  122. package/dist/modes/interactive-engine/protocol.js +10 -0
  123. package/dist/modes/interactive-engine/protocol.js.map +1 -1
  124. package/dist/modes/interactive-engine/remote-component.d.ts +2 -1
  125. package/dist/modes/interactive-engine/remote-component.d.ts.map +1 -1
  126. package/dist/modes/interactive-engine/remote-component.js +23 -1
  127. package/dist/modes/interactive-engine/remote-component.js.map +1 -1
  128. package/docs/custom-provider/oauth.md +2 -0
  129. package/docs/custom-provider/registration.md +32 -0
  130. package/docs/custom-provider.md +1 -0
  131. package/docs/keybindings.md +3 -0
  132. package/docs/mcp-servers.md +13 -1
  133. package/docs/providers.md +2 -0
  134. package/examples/extensions/provider-accounts.ts +11 -0
  135. package/npm-shrinkwrap.json +55 -33
  136. package/package.json +4 -3
  137. package/dist/modes/interactive/components/daxnuts.d.ts +0 -23
  138. package/dist/modes/interactive/components/daxnuts.d.ts.map +0 -1
  139. package/dist/modes/interactive/components/daxnuts.js +0 -140
  140. package/dist/modes/interactive/components/daxnuts.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"sdk.js","sourceRoot":"","sources":["../../src/core/sdk.ts"],"names":[],"mappings":"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","sourcesContent":["import { basename, join, relative, sep } from \"node:path\";\nimport { clampThinkingLevel, type Message, type ProviderHeaders, streamSimple } from \"@bastani/pi-ai/compat\";\nimport { getProviderEnvValue } from \"@bastani/pi-ai/utils/provider-env\";\nimport { Agent, type AgentMessage, setDefaultStreamFn, type ThinkingLevel } from \"@earendil-works/pi-agent-core\";\nimport { getAgentDir } from \"../config.js\";\nimport { resolvePath } from \"../utils/paths.ts\";\nimport { AgentSession } from \"./agent-session.js\";\nimport type { AgentSessionInternalSurface } from \"./agent-session-methods.ts\";\nimport { restoreAnthropicReplayThinkingBlocks } from \"./anthropic-thinking-guard.ts\";\nimport { formatNoModelsAvailableMessage } from \"./auth-guidance.ts\";\nimport { getBuiltinPackageLocations, getBuiltinPackagePaths } from \"./builtin-packages.ts\";\nimport { withBuiltinResourceLoader } from \"./builtin-resource-loader.ts\";\nimport { getDefaultCacheRetention } from \"./cache-retention.ts\";\nimport { CacheWarmer } from \"./cache-warmer.ts\";\nimport { inheritChildSessionOptions } from \"./child-session-options.ts\";\nimport { DEFAULT_THINKING_LEVEL } from \"./defaults.ts\";\nimport type { ExtensionRunner } from \"./extensions/index.js\";\nimport {\n\tfactoryAcquisitions,\n\tfactoryRollbackError,\n\trollbackFactoryAcquisitions,\n} from \"./extensions/loader-rollback.ts\";\nimport { getModelFastRoute, streamWithFastRoute, withFastRouteStreamOptions } from \"./fast-model-routing.ts\";\nimport { markLifecycleTiming } from \"./lifecycle-timings.ts\";\nimport {\n\tisMandatoryResourceLoader,\n\tisolateMandatoryResourceLoader,\n\twithMandatoryResourceLoader,\n} from \"./mandatory-resource-loader.ts\";\nimport { convertToLlm, repairOrphanToolResults } from \"./messages.ts\";\nimport { findInitialModel, resolveRestoredModelReference } from \"./model-resolver.ts\";\nimport { ModelRuntime } from \"./model-runtime.js\";\nimport { type ModelRuntimeSimpleStreamOptions, mergeHeaders } from \"./model-runtime-streaming.ts\";\nimport { sanitizeOpenAIResponsesPayload } from \"./openai-responses-payload-sanitizer.ts\";\nimport { mergeProviderAttributionHeaders } from \"./provider-attribution.ts\";\nimport { scrubPreCompactionAssistantUsage } from \"./provider-context-usage.ts\";\nimport { canCloneDefaultResourceDiscovery, DefaultResourceLoader } from \"./resource-loader.ts\";\nimport type { CreateAgentSessionOptions, CreateAgentSessionResult } from \"./sdk-types.ts\";\nimport { sessionLifecycleCreation, sessionLifecycleScopes } from \"./session-lifecycle-scope.ts\";\nimport { sessionGenerationClosing, sessionLifetime, trackSessionWork } from \"./session-lifecycle-work.ts\";\nimport { getDefaultSessionDir, SessionManager } from \"./session-manager.ts\";\nimport { registerStartupRollback, rollbackStartup } from \"./session-startup-rollback.ts\";\nimport { SettingsManager } from \"./settings-manager.ts\";\nimport { ownedSettingsManagers } from \"./settings-write-ownership.ts\";\nimport { createChildCommandTaskOwner } from \"./tasks/child-command-owner.js\";\nimport { time } from \"./timings.ts\";\nimport { allToolNames, getDefaultToolNames } from \"./tools/index.ts\";\n\nexport type { ModelFallbackReason } from \"./model-resolver-types.ts\";\nexport * from \"./sdk-exports.ts\";\nexport type { AtomicBuiltin, CreateAgentSessionOptions, CreateAgentSessionResult } from \"./sdk-types.ts\";\n\n// Preserve the pre-0.81 fallback for extensions that construct Agent instances\n// or invoke low-level agent loops without supplying streamFn.\nsetDefaultStreamFn(streamSimple);\n\n// Helper Functions\n\nfunction getDefaultAgentDir(): string {\n\treturn getAgentDir();\n}\n\n/** Keep static model headers visible to hooks without promoting unchanged defaults to request overrides. */\nfunction removeUnownedModelHeaders(\n\theaders: ProviderHeaders | undefined,\n\tmodelHeaders: ProviderHeaders | undefined,\n\trequestHeaders: ProviderHeaders | undefined,\n): ProviderHeaders | undefined {\n\tif (!headers || !modelHeaders) return headers;\n\tconst requestOwned = new Set(Object.keys(requestHeaders ?? {}).map((name) => name.toLowerCase()));\n\tconst filtered = { ...headers };\n\tfor (const [modelName, modelValue] of Object.entries(modelHeaders)) {\n\t\tconst lowerName = modelName.toLowerCase();\n\t\tif (requestOwned.has(lowerName)) continue;\n\t\tfor (const [name, value] of Object.entries(filtered)) {\n\t\t\tif (name.toLowerCase() === lowerName && value === modelValue) delete filtered[name];\n\t\t}\n\t}\n\treturn Object.keys(filtered).length > 0 ? filtered : undefined;\n}\n\n/**\n * Create an AgentSession with the specified options.\n *\n * @example\n * ```typescript\n * // Minimal - uses defaults\n * const { session } = await createAgentSession();\n *\n * // With explicit model\n * import { getModel } from '@bastani/pi-ai/compat';\n * const { session } = await createAgentSession({\n * model: getModel('anthropic', 'claude-opus-4-5'),\n * thinkingLevel: 'high',\n * });\n *\n * // Continue previous session\n * const { session, modelFallbackMessage } = await createAgentSession({\n * continueSession: true,\n * });\n *\n * // Full control\n * const loader = new DefaultResourceLoader({\n * cwd: process.cwd(),\n * agentDir: getAgentDir(),\n * settingsManager: SettingsManager.create(),\n * });\n * await loader.reload();\n * const { session } = await createAgentSession({\n * model: myModel,\n * tools: [\"read\", \"bash\"],\n * resourceLoader: loader,\n * sessionManager: SessionManager.inMemory(),\n * });\n * ```\n */\nexport async function createAgentSession(options: CreateAgentSessionOptions = {}): Promise<CreateAgentSessionResult> {\n\treturn createScopedSession(options, false);\n}\n\n/** Internal CLI assembly seam. Not exported from the package entrypoint. */\nexport function createUnstartedAgentSession(options: CreateAgentSessionOptions): Promise<CreateAgentSessionResult> {\n\treturn createScopedSession(options, true);\n}\n\nfunction createScopedSession(\n\toptions: CreateAgentSessionOptions,\n\tdeferStart: boolean,\n): Promise<CreateAgentSessionResult> {\n\tconst inherited = sessionLifecycleCreation.getStore();\n\tconst context = inherited && !inherited.claimed ? inherited : { scope: {} };\n\treturn sessionLifecycleCreation.run({ ...context, claimed: true }, async () => {\n\t\tconst result = await factoryAcquisitions.run(\n\t\t\t{ pending: new Map(), replacement: context.replacement },\n\t\t\tasync () => {\n\t\t\t\ttry {\n\t\t\t\t\treturn await constructAgentSession(\n\t\t\t\t\t\t{ ...options, extensionBindings: options.extensionBindings ?? context.bindings },\n\t\t\t\t\t\tdeferStart,\n\t\t\t\t\t);\n\t\t\t\t} catch (error) {\n\t\t\t\t\tthrow factoryRollbackError(error, await rollbackFactoryAcquisitions());\n\t\t\t\t}\n\t\t\t},\n\t\t);\n\t\tsessionLifecycleScopes.set(result.session, context.scope);\n\t\treturn result;\n\t});\n}\n\nasync function constructAgentSession(\n\toptions: CreateAgentSessionOptions,\n\tdeferStart: boolean,\n): Promise<CreateAgentSessionResult> {\n\tconst cwd = resolvePath(options.cwd ?? options.sessionManager?.getCwd() ?? process.cwd());\n\tconst agentDir = options.agentDir ? resolvePath(options.agentDir) : getDefaultAgentDir();\n\tlet resourceLoader = options.resourceLoader;\n\t// The concrete default can rediscover into private storage (including deferred\n\t// CLI configuration). Custom discovery stays delegated; composition instantiates\n\t// its extensions independently without replacing overridden resource policy.\n\tif (canCloneDefaultResourceDiscovery(resourceLoader)) {\n\t\tresourceLoader = await resourceLoader.createSessionLoader(sessionLifecycleCreation.getStore()!.scope);\n\t}\n\tif (resourceLoader) resourceLoader = await isolateMandatoryResourceLoader(resourceLoader);\n\n\tconst authPath = options.agentDir ? join(agentDir, \"auth.json\") : undefined;\n\tconst modelsPath = options.agentDir ? join(agentDir, \"models.json\") : undefined;\n\tconst modelRuntime = options.modelRuntime ?? (await ModelRuntime.create({ authPath, modelsPath }));\n\tawait modelRuntime.refresh({ allowNetwork: false });\n\n\tconst settingsManager = options.settingsManager ?? SettingsManager.create(cwd, agentDir);\n\tconst sessionManager = options.sessionManager ?? SessionManager.create(cwd, getDefaultSessionDir(cwd, agentDir));\n\n\t// Mark workflow-created sessions as internal so they are excluded from the\n\t// standard `/resume` history while remaining resumable via `/workflow resume`.\n\t// Only stamped when the orchestration context identifies a workflow stage;\n\t// reattaching to an already-marked session preserves its existing marker.\n\tif (options.orchestrationContext?.kind === \"workflow-stage\") {\n\t\tconst ctx = options.orchestrationContext;\n\t\tsessionManager.markSessionInternal({\n\t\t\trunId: ctx.workflowRunId,\n\t\t\tstageId: ctx.workflowStageId,\n\t\t\tstageName: ctx.workflowStageName,\n\t\t});\n\t}\n\n\tconst disableWorkflowExtension =\n\t\toptions.orchestrationContext?.kind === \"workflow-stage\" || options.subagentPolicy !== undefined;\n\tif (!resourceLoader) {\n\t\tresourceLoader = new DefaultResourceLoader({\n\t\t\tcwd,\n\t\t\tagentDir,\n\t\t\tsettingsManager,\n\t\t\tbuiltinPackagePaths: getBuiltinPackagePaths(options.builtins).map((source) =>\n\t\t\t\tdisableWorkflowExtension && basename(source) === \"workflows\" ? { source, extensions: [] } : source,\n\t\t\t),\n\t\t});\n\t\tawait resourceLoader.reload();\n\t\ttime(\"resourceLoader.reload\");\n\t}\n\tif (\n\t\t(options.resourceLoader || options.builtins || disableWorkflowExtension) &&\n\t\t(!isMandatoryResourceLoader(resourceLoader) || options.builtins || disableWorkflowExtension)\n\t) {\n\t\tresourceLoader = await withBuiltinResourceLoader(\n\t\t\tresourceLoader,\n\t\t\tcwd,\n\t\t\tagentDir,\n\t\t\toptions.builtins,\n\t\t\tdisableWorkflowExtension,\n\t\t);\n\t}\n\tif (options.builtins?.intercom !== false) {\n\t\tresourceLoader = await withMandatoryResourceLoader(resourceLoader, cwd);\n\t}\n\n\t// Check if session has existing data to restore\n\tconst existingSession = sessionManager.buildSessionContext();\n\tconst repairedMessages = repairOrphanToolResults(existingSession.messages, { repairTrailing: true });\n\tconst existingMessages = options.initialContextTransform\n\t\t? options.initialContextTransform(repairedMessages)\n\t\t: repairedMessages;\n\tconst hasExistingSession = existingMessages.length > 0;\n\tconst hasThinkingEntry = sessionManager.getBranch().some((entry) => entry.type === \"thinking_level_change\");\n\n\tlet model = options.model;\n\tlet modelFallbackMessage: string | undefined;\n\tlet modelFallbackReason: import(\"./model-resolver-types.ts\").ModelFallbackReason | undefined;\n\n\t// If session has data, try to restore model from it\n\tif (!model && hasExistingSession && existingSession.model) {\n\t\tmodel = await resolveRestoredModelReference(\n\t\t\texistingSession.model.provider,\n\t\t\texistingSession.model.modelId,\n\t\t\tmodelRuntime,\n\t\t);\n\t\tif (!model) {\n\t\t\tmodelFallbackMessage = `Could not restore model ${existingSession.model.provider}/${existingSession.model.modelId}`;\n\t\t\tmodelFallbackReason = \"session-restore\";\n\t\t}\n\t}\n\tif (!model) {\n\t\tconst result = await findInitialModel({\n\t\t\tscopedModels: [],\n\t\t\tisContinuing: hasExistingSession,\n\t\t\tdefaultProvider: settingsManager.getDefaultProvider(),\n\t\t\tdefaultModelId: settingsManager.getDefaultModel(),\n\t\t\tdefaultThinkingLevel: settingsManager.getDefaultThinkingLevel(),\n\t\t\tmodelThinkingLevels: settingsManager.getAllModelThinkingLevels(),\n\t\t\tmodelRuntime,\n\t\t});\n\t\tmodel = result.model;\n\t\tif (!model) {\n\t\t\tif (result.fallbackReason === \"configured-provider-unsupported\") {\n\t\t\t\tmodelFallbackMessage = result.fallbackMessage;\n\t\t\t\tmodelFallbackReason = result.fallbackReason;\n\t\t\t} else if (!modelFallbackMessage) {\n\t\t\t\tmodelFallbackMessage = result.fallbackMessage ?? formatNoModelsAvailableMessage();\n\t\t\t\tmodelFallbackReason = result.fallbackReason ?? \"no-models-available\";\n\t\t\t}\n\t\t} else if (modelFallbackMessage) {\n\t\t\tmodelFallbackMessage += `. Using ${model.provider}/${model.id}`;\n\t\t}\n\t}\n\n\tlet thinkingLevel = options.thinkingLevel;\n\n\t// If session has data, restore thinking level from it\n\tif (thinkingLevel === undefined && hasExistingSession) {\n\t\tthinkingLevel = hasThinkingEntry\n\t\t\t? (existingSession.thinkingLevel as ThinkingLevel)\n\t\t\t: (settingsManager.getDefaultThinkingLevel() ?? DEFAULT_THINKING_LEVEL);\n\t}\n\n\t// Fall back to per-model override, then global default\n\tif (thinkingLevel === undefined && model) {\n\t\tthinkingLevel = settingsManager.getModelThinkingLevel(model.provider, model.id);\n\t}\n\tif (thinkingLevel === undefined) {\n\t\tthinkingLevel = settingsManager.getDefaultThinkingLevel() ?? DEFAULT_THINKING_LEVEL;\n\t}\n\n\t// Clamp to model capabilities\n\tif (!model) {\n\t\tthinkingLevel = \"off\";\n\t} else {\n\t\tthinkingLevel = clampThinkingLevel(model, thinkingLevel) as ThinkingLevel;\n\t}\n\n\t// `defaultTools` narrows only the initial BUILT-IN selection. It must not\n\t// narrow `allowedToolNames`: a narrow allowlist would drop every extension\n\t// and SDK custom tool (workflow, subagent, intercom, mcp, web_search, ...)\n\t// for any user who configures it (upstream 4d9aa837 + companion fix 541045ae).\n\tconst configuredDefaultToolNames = settingsManager.getDefaultTools();\n\tconst allowedToolNames =\n\t\toptions.noTools === \"all\" ? [] : options.tools === undefined ? undefined : [...options.tools];\n\tconst subagentPolicy =\n\t\toptions.subagentPolicy && (options.subagentPolicy.depth ?? 0) >= 1\n\t\t\t? {\n\t\t\t\t\t...options.subagentPolicy,\n\t\t\t\t\ttools: allowedToolNames,\n\t\t\t\t\tmcpDirectTools:\n\t\t\t\t\t\toptions.noTools === \"all\"\n\t\t\t\t\t\t\t? []\n\t\t\t\t\t\t\t: (options.subagentPolicy.mcpDirectTools ?? (allowedToolNames === undefined ? undefined : [])),\n\t\t\t\t}\n\t\t\t: options.subagentPolicy;\n\tconst initialActiveToolNames: string[] = allowedToolNames\n\t\t? [...allowedToolNames]\n\t\t: options.noTools\n\t\t\t? []\n\t\t\t: [...(configuredDefaultToolNames ?? getDefaultToolNames())];\n\tconst childBuiltins = { ...options.builtins };\n\tconst childExcludedTools = [\n\t\t...(options.excludedTools ?? []),\n\t\t...(allowedToolNames === undefined\n\t\t\t? [...allToolNames].filter((name) => !initialActiveToolNames.includes(name))\n\t\t\t: []),\n\t];\n\n\tlet agent: Agent;\n\n\tlet lastConvertedLlmMessages: Message[] | undefined;\n\n\t// Create convertToLlm wrapper that filters images if blockImages is enabled (defense-in-depth)\n\tconst convertToLlmWithBlockImages = (messages: AgentMessage[]): Message[] => {\n\t\tconst converted = convertToLlm(messages);\n\t\t// Check setting dynamically so mid-session changes take effect\n\t\tif (!settingsManager.getBlockImages()) {\n\t\t\tlastConvertedLlmMessages = converted;\n\t\t\treturn converted;\n\t\t}\n\t\t// Filter out ImageContent from all messages, replacing with text placeholder\n\t\tconst filtered = converted.map((msg): Message => {\n\t\t\tif (msg.role === \"user\" || msg.role === \"toolResult\") {\n\t\t\t\tconst content = msg.content;\n\t\t\t\tif (Array.isArray(content)) {\n\t\t\t\t\tconst hasImages = content.some((c) => c.type === \"image\");\n\t\t\t\t\tif (hasImages) {\n\t\t\t\t\t\tconst filteredContent = content\n\t\t\t\t\t\t\t.map((c) =>\n\t\t\t\t\t\t\t\tc.type === \"image\"\n\t\t\t\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\t\t\t\ttype: \"text\" as const,\n\t\t\t\t\t\t\t\t\t\t\ttext: \"Image reading is disabled.\",\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t: c,\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t.filter(\n\t\t\t\t\t\t\t\t(c, i, arr) =>\n\t\t\t\t\t\t\t\t\t// Dedupe consecutive \"Image reading is disabled.\" texts\n\t\t\t\t\t\t\t\t\t!(\n\t\t\t\t\t\t\t\t\t\tc.type === \"text\" &&\n\t\t\t\t\t\t\t\t\t\tc.text === \"Image reading is disabled.\" &&\n\t\t\t\t\t\t\t\t\t\ti > 0 &&\n\t\t\t\t\t\t\t\t\t\tarr[i - 1].type === \"text\" &&\n\t\t\t\t\t\t\t\t\t\t(arr[i - 1] as { type: \"text\"; text: string }).text === \"Image reading is disabled.\"\n\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t// `user` and `toolResult` carry different content unions, and mapping them in one\n\t\t\t\t\t\t// branch widens both to their union. Only image blocks are rewritten here, so each\n\t\t\t\t\t\t// message keeps its own shape at runtime.\n\t\t\t\t\t\treturn { ...msg, content: filteredContent } as Message;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn msg;\n\t\t});\n\t\tlastConvertedLlmMessages = filtered;\n\t\treturn filtered;\n\t};\n\n\tconst extensionRunnerRef: { current?: ExtensionRunner } = {};\n\tconst cacheWarmer = new CacheWarmer(\n\t\t{\n\t\t\tstreamSimple: (model, context, requestOptions) => {\n\t\t\t\tconst extension = modelRuntime.getRegisteredProviderConfig(model.provider);\n\t\t\t\treturn getModelFastRoute(model)?.serviceTier !== undefined &&\n\t\t\t\t\t!(extension?.streamSimple && extension.api === model.api)\n\t\t\t\t\t? streamWithFastRoute(model, context, requestOptions)\n\t\t\t\t\t: modelRuntime.streamSimple(model, context, requestOptions);\n\t\t\t},\n\t\t},\n\t\tsessionManager,\n\t\t() => settingsManager.getCacheWarmingMode(),\n\t\tasync (event) => {\n\t\t\tconst runner = extensionRunnerRef.current;\n\t\t\tif (!runner) {\n\t\t\t\treturn event.action;\n\t\t\t}\n\t\t\treturn (await runner.emitCacheWarmingDecision(event)) ?? event.action;\n\t\t},\n\t\t(refresh) => trackSessionWork(session, refresh),\n\t);\n\n\tconst handleProviderStreamEvent: NonNullable<ModelRuntimeSimpleStreamOptions[\"onProviderStreamEvent\"]> = async (\n\t\tdata,\n\t\tmodel,\n\t) => {\n\t\tconst runner = extensionRunnerRef.current;\n\t\tif (!runner?.hasHandlers(\"provider_stream_event\")) return;\n\t\tawait runner.emit({\n\t\t\ttype: \"provider_stream_event\",\n\t\t\tprovider: model.provider,\n\t\t\tapi: model.api,\n\t\t\tmodel: model.id,\n\t\t\tdata,\n\t\t});\n\t};\n\n\tagent = new Agent({\n\t\tinitialState: {\n\t\t\tsystemPrompt: \"\",\n\t\t\tmodel,\n\t\t\tthinkingLevel,\n\t\t\ttools: [],\n\t\t\tmessages: existingMessages,\n\t\t},\n\t\tconvertToLlm: convertToLlmWithBlockImages,\n\t\tstreamFn: async (model, context, streamOptions) => {\n\t\t\tconst authResult = await modelRuntime.getRequestAuth(model, {\n\t\t\t\tapiKey: streamOptions?.apiKey,\n\t\t\t\tenv: streamOptions?.env,\n\t\t\t\tsignal: streamOptions?.signal,\n\t\t\t});\n\t\t\tconst compatibility = authResult ? undefined : modelRuntime.getCompatibilityRequestConfig(model);\n\t\t\tif (!authResult && compatibility?.authHeader) {\n\t\t\t\tthrow new Error(`No API key found for \"${model.provider}\"`);\n\t\t\t}\n\t\t\tconst auth = {\n\t\t\t\tapiKey: authResult?.auth.apiKey,\n\t\t\t\theaders: authResult?.auth.headers ?? compatibility?.headers,\n\t\t\t\tbaseUrl: authResult?.auth.baseUrl,\n\t\t\t\tenv: authResult?.env,\n\t\t\t};\n\t\t\tconst requestModel =\n\t\t\t\tauth.baseUrl !== undefined && auth.baseUrl !== model.baseUrl ? { ...model, baseUrl: auth.baseUrl } : model;\n\t\t\tconst providerRetrySettings = settingsManager.getProviderRetrySettings();\n\t\t\tconst httpIdleTimeoutMs = settingsManager.getHttpIdleTimeoutMs();\n\t\t\t// SDKs treat timeout=0 as 0ms (immediate timeout), not \"no timeout\".\n\t\t\t// Use max int32 to effectively disable the timeout.\n\t\t\tconst effectiveTimeoutMs = httpIdleTimeoutMs === 0 ? 2147483647 : httpIdleTimeoutMs;\n\t\t\tconst timeoutMs = streamOptions?.timeoutMs ?? providerRetrySettings.timeoutMs ?? effectiveTimeoutMs;\n\t\t\tconst websocketConnectTimeoutMs =\n\t\t\t\tstreamOptions?.websocketConnectTimeoutMs ?? settingsManager.getWebSocketConnectTimeoutMs();\n\t\t\tconst streamDeadlineMs = streamOptions?.streamDeadlineMs ?? settingsManager.getStreamDeadlineMs();\n\t\t\tconst requestHeaders = mergeProviderAttributionHeaders(\n\t\t\t\tmodel,\n\t\t\t\tsettingsManager,\n\t\t\t\tstreamOptions?.sessionId,\n\t\t\t\tauth.headers,\n\t\t\t\tstreamOptions?.headers,\n\t\t\t);\n\t\t\tconst mergedHeaders = mergeHeaders(model.headers, requestHeaders);\n\t\t\tconst headerRunner = extensionRunnerRef.current;\n\t\t\tconst assembledHeaders = headerRunner?.hasHandlers(\"before_provider_headers\")\n\t\t\t\t? await headerRunner.emitBeforeProviderHeaders(mergedHeaders ?? {})\n\t\t\t\t: mergedHeaders;\n\t\t\tconst extensionProvider = modelRuntime.getRegisteredProviderConfig(requestModel.provider);\n\t\t\tconst usesExtensionStream =\n\t\t\t\textensionProvider?.streamSimple !== undefined && requestModel.api === extensionProvider.api;\n\t\t\tconst transportHeaders = usesExtensionStream\n\t\t\t\t? assembledHeaders\n\t\t\t\t: removeUnownedModelHeaders(assembledHeaders, model.headers, requestHeaders);\n\t\t\t// Fast-vs-normal is the selected model's own identity, so the canonical `-fast` model is what\n\t\t\t// dispatch, the recorded assistant message, session state, and usage all see. The provider\n\t\t\t// adapter reads `fastRoute.upstreamModelId` when it serializes the outbound request.\n\t\t\tconst fastRoute = getModelFastRoute(requestModel);\n\t\t\tif (fastRoute?.serviceTier !== undefined && !usesExtensionStream && !authResult) {\n\t\t\t\tthrow new Error(`No API key found for \"${model.provider}\"`);\n\t\t\t}\n\t\t\tconst env = auth.env || streamOptions?.env ? { ...auth.env, ...streamOptions?.env } : undefined;\n\t\t\tconst cacheRetentionEnv = getProviderEnvValue(\"PI_CACHE_RETENTION\", env);\n\t\t\t// Shared by main chat, workflow stages and subagents; provider capability gates still apply.\n\t\t\tconst cacheRetention =\n\t\t\t\tstreamOptions?.cacheRetention ??\n\t\t\t\t(cacheRetentionEnv === \"none\"\n\t\t\t\t\t? \"none\"\n\t\t\t\t\t: !cacheRetentionEnv\n\t\t\t\t\t\t? getDefaultCacheRetention(requestModel)\n\t\t\t\t\t\t: cacheRetentionEnv === \"long\"\n\t\t\t\t\t\t\t? \"long\"\n\t\t\t\t\t\t\t: \"short\");\n\t\t\tconst fastRouteStreamOptions = withFastRouteStreamOptions(fastRoute, {\n\t\t\t\t...streamOptions,\n\t\t\t\tapiKey: auth.apiKey,\n\t\t\t\tenv,\n\t\t\t\tcacheRetention,\n\t\t\t\ttimeoutMs,\n\t\t\t\twebsocketConnectTimeoutMs,\n\t\t\t\tstreamDeadlineMs,\n\t\t\t\tmaxRetries: streamOptions?.maxRetries ?? providerRetrySettings.maxRetries,\n\t\t\t\tmaxRetryDelayMs: streamOptions?.maxRetryDelayMs ?? providerRetrySettings.maxRetryDelayMs,\n\t\t\t\theaders: transportHeaders,\n\t\t\t});\n\t\t\tconst preparedStreamOptions: ModelRuntimeSimpleStreamOptions = {\n\t\t\t\t...fastRouteStreamOptions,\n\t\t\t\tpreparedRequestAuth: { resolution: authResult },\n\t\t\t};\n\t\t\tif (streamOptions?.sessionId === sessionManager.getSessionId()) {\n\t\t\t\tconst prefix = [...agent.state.messages];\n\t\t\t\tcacheWarmer.start({ model: requestModel, context, options: preparedStreamOptions }, () => {\n\t\t\t\t\tconst current = agent.state.model;\n\t\t\t\t\treturn (\n\t\t\t\t\t\t!sessionLifetime(session).aborted &&\n\t\t\t\t\t\t!sessionGenerationClosing.has(session) &&\n\t\t\t\t\t\t!(session as unknown as AgentSessionInternalSurface)._agentRunAbortRequested &&\n\t\t\t\t\t\tcurrent?.provider === model.provider &&\n\t\t\t\t\t\tcurrent.id === model.id &&\n\t\t\t\t\t\tprefix.every((message, index) => agent.state.messages[index] === message)\n\t\t\t\t\t);\n\t\t\t\t});\n\t\t\t}\n\t\t\tconst onProviderStreamEvent = streamOptions?.onProviderStreamEvent ?? handleProviderStreamEvent;\n\t\t\tif (fastRoute?.serviceTier !== undefined && !usesExtensionStream) {\n\t\t\t\treturn streamWithFastRoute(requestModel, context, { ...fastRouteStreamOptions, onProviderStreamEvent });\n\t\t\t}\n\t\t\t// The Codex routing identity is attached by ModelRuntimeStreaming, after auth headers are\n\t\t\t// merged. Applying it here would be inert: `mergeHeaders` copies the header object the\n\t\t\t// wrapper mutates.\n\t\t\treturn modelRuntime.streamSimple(requestModel, context, { ...preparedStreamOptions, onProviderStreamEvent });\n\t\t},\n\t\tonPayload: async (payload, model) => {\n\t\t\tconst sourceMessages = lastConvertedLlmMessages;\n\t\t\tconst replayGuardedPayload = sourceMessages\n\t\t\t\t? restoreAnthropicReplayThinkingBlocks(payload, sourceMessages, model)\n\t\t\t\t: payload;\n\t\t\tconst runner = extensionRunnerRef.current;\n\t\t\tlet finalPayload: unknown;\n\t\t\tif (!runner?.hasHandlers(\"before_provider_request\")) {\n\t\t\t\tfinalPayload = replayGuardedPayload;\n\t\t\t} else {\n\t\t\t\tconst extensionPayload = await runner.emitBeforeProviderRequest(replayGuardedPayload);\n\t\t\t\tfinalPayload = sourceMessages\n\t\t\t\t\t? restoreAnthropicReplayThinkingBlocks(extensionPayload, sourceMessages, model)\n\t\t\t\t\t: extensionPayload;\n\t\t\t}\n\t\t\tconst sanitizedPayload = sanitizeOpenAIResponsesPayload(finalPayload, model);\n\t\t\tmarkLifecycleTiming(\"before-provider-request\");\n\t\t\treturn sanitizedPayload;\n\t\t},\n\t\tonResponse: async (response, _model) => {\n\t\t\tconst runner = extensionRunnerRef.current;\n\t\t\tif (!runner?.hasHandlers(\"after_provider_response\")) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tawait runner.emit({\n\t\t\t\ttype: \"after_provider_response\",\n\t\t\t\tstatus: response.status,\n\t\t\t\theaders: response.headers,\n\t\t\t});\n\t\t},\n\t\tsessionId: sessionManager.getSessionId(),\n\t\ttransformContext: async (messages) => {\n\t\t\tconst runner = extensionRunnerRef.current;\n\t\t\tconst transformed = runner ? await runner.emitContext(messages) : messages;\n\t\t\treturn scrubPreCompactionAssistantUsage(transformed, sessionManager.getBranch());\n\t\t},\n\t\tsteeringMode: settingsManager.getSteeringMode(),\n\t\tfollowUpMode: settingsManager.getFollowUpMode(),\n\t\ttransport: settingsManager.getTransport(),\n\t\tthinkingBudgets: settingsManager.getThinkingBudgets(),\n\t\tmaxRetryDelayMs: settingsManager.getProviderRetrySettings().maxRetryDelayMs,\n\t});\n\n\t// Restore missing settings metadata for older sessions.\n\tif (hasExistingSession) {\n\t\tif (!hasThinkingEntry) {\n\t\t\tsessionManager.appendThinkingLevelChange(thinkingLevel);\n\t\t}\n\t} else {\n\t\t// Save initial model and thinking level for new sessions so they can be restored on resume\n\t\tif (model) {\n\t\t\tsessionManager.appendModelChange(model.provider, model.id);\n\t\t}\n\t\tsessionManager.appendThinkingLevelChange(thinkingLevel);\n\t}\n\n\tconst providerRollback = modelRuntime.createExtensionProviderTransaction();\n\tlet session: AgentSession;\n\tconst childCommandTaskOwner = createChildCommandTaskOwner(() => session.getAgentTaskHost());\n\ttry {\n\t\tsession = new AgentSession({\n\t\t\tagent,\n\t\t\tsessionManager,\n\t\t\tsettingsManager,\n\t\t\tcwd,\n\t\t\tchildSessionOptions: (child) =>\n\t\t\t\tinheritChildSessionOptions(\n\t\t\t\t\t{\n\t\t\t\t\t\tcwd,\n\t\t\t\t\t\tagentDir,\n\t\t\t\t\t\tmodelRuntime,\n\t\t\t\t\t\tsettingsManager,\n\t\t\t\t\t\tmodel: session.model,\n\t\t\t\t\t\tthinkingLevel: session.thinkingLevel,\n\t\t\t\t\t\tfallbackModels: options.fallbackModels ?? settingsManager.getFallbackModels(),\n\t\t\t\t\t\tisFallbackModelAllowed: options.isFallbackModelAllowed,\n\t\t\t\t\t\tbuiltins: childBuiltins,\n\t\t\t\t\t\ttools: allowedToolNames,\n\t\t\t\t\t\tnoTools: options.noTools,\n\t\t\t\t\t\texcludedTools: childExcludedTools,\n\t\t\t\t\t\tcustomTools: options.customTools,\n\t\t\t\t\t\textensionBindings: session.extensionRunner.getChildHostBindings(),\n\t\t\t\t\t\tparentCommandTaskOwner: childCommandTaskOwner,\n\t\t\t\t\t},\n\t\t\t\t\tchild,\n\t\t\t\t),\n\t\t\tscopedModels: options.scopedModels,\n\t\t\tfallbackModels: options.fallbackModels ?? settingsManager.getFallbackModels(),\n\t\t\tisFallbackModelAllowed: options.isFallbackModelAllowed,\n\t\t\tresourceLoader,\n\t\t\tcustomTools: options.customTools,\n\t\t\tmodelRuntime,\n\t\t\tcacheWarmer,\n\t\t\tinitialActiveToolNames,\n\t\t\tusesDefaultTools: options.tools === undefined && !options.noTools,\n\t\t\tallowedToolNames,\n\t\t\texcludedToolNames: options.excludedTools,\n\t\t\textensionRunnerRef,\n\t\t\tsessionStartEvent: options.sessionStartEvent,\n\t\t\torchestrationContext: options.orchestrationContext,\n\t\t\tsubagentPolicy,\n\t\t\tparentCommandTaskOwner: options.parentCommandTaskOwner,\n\t\t\tsystemPromptTransform: options.systemPromptTransform,\n\t\t\tcontextProjectionTransform: options.initialContextTransform,\n\t\t});\n\t} catch (error) {\n\t\t// The constructor releases its own leases/subscriptions; restore borrowed provider state here.\n\t\tconst cleanup = await Promise.allSettled([providerRollback.commit(), settingsManager.flush()]);\n\t\tconst failures = cleanup.flatMap((result) => (result.status === \"rejected\" ? [result.reason] : []));\n\t\tif (failures.length)\n\t\t\tthrow new AggregateError([error, ...failures], \"Session construction failed and rollback reported errors\");\n\t\tthrow error;\n\t}\n\t// Only the selected factories transfer. Discovery may have acquired omitted factories.\n\tconst acquisitions = factoryAcquisitions.getStore();\n\tconst selected = resourceLoader.getExtensions();\n\tfor (const extension of selected.extensions) acquisitions?.pending?.delete(extension);\n\tif (!options.settingsManager) ownedSettingsManagers.set(settingsManager, session);\n\tconst rollbackReason = sessionLifecycleCreation.getStore()?.replacement ? \"new\" : \"quit\";\n\tregisterStartupRollback(session.extensionRunner, async (error) => {\n\t\tconst results = await Promise.allSettled([\n\t\t\t(session as unknown as AgentSessionInternalSurface)._close({\n\t\t\t\ttype: \"session_shutdown\",\n\t\t\t\treason: rollbackReason,\n\t\t\t}),\n\t\t\tproviderRollback.commit(),\n\t\t]);\n\t\tconst cleanupErrors = results.flatMap((result) => (result.status === \"rejected\" ? [result.reason] : []));\n\t\tif (cleanupErrors.length)\n\t\t\tthrow new AggregateError([error, ...cleanupErrors], \"Extension startup failed and rollback reported errors\");\n\t\tthrow error;\n\t});\n\ttry {\n\t\t// Omitted factories may share the selected runtime: release their acquisitions,\n\t\t// but leave that runtime and its selected subscriptions owned by the runner.\n\t\tconst failures = await rollbackFactoryAcquisitions(new Set([selected.runtime]));\n\t\tif (failures.length)\n\t\t\tthrow Object.assign(new AggregateError(failures, \"Unselected extension cleanup failed\"), {\n\t\t\t\tcode: \"ShutdownFailed\",\n\t\t\t});\n\t\tconst extensionsResult = resourceLoader.getExtensions();\n\t\tfor (const failure of extensionsResult.errors) {\n\t\t\tconst builtin = getBuiltinPackageLocations().find(({ packageDir }) => {\n\t\t\t\tconst path = relative(packageDir, failure.path);\n\t\t\t\treturn path !== \"..\" && !path.startsWith(`..${sep}`) && !path.startsWith(sep);\n\t\t\t});\n\t\t\tif (builtin)\n\t\t\t\tthrow Object.assign(new Error(`Builtin unavailable: ${builtin.packageName}: ${failure.error}`), {\n\t\t\t\t\tcode: \"BuiltinUnavailable\",\n\t\t\t\t});\n\t\t}\n\t\tif (!deferStart) await session.bindExtensions(options.extensionBindings ?? {});\n\t\treturn { session, extensionsResult, modelFallbackMessage, modelFallbackReason };\n\t} catch (error) {\n\t\treturn rollbackStartup(session.extensionRunner, error instanceof Error ? error : new Error(String(error)));\n\t}\n}\n"]}
1
+ {"version":3,"file":"sdk.js","sourceRoot":"","sources":["../../src/core/sdk.ts"],"names":[],"mappings":"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","sourcesContent":["import { basename, join, relative, sep } from \"node:path\";\nimport { clampThinkingLevel, type Message, type ProviderHeaders, streamSimple } from \"@bastani/pi-ai/compat\";\nimport { getProviderEnvValue } from \"@bastani/pi-ai/utils/provider-env\";\nimport { Agent, type AgentMessage, setDefaultStreamFn, type ThinkingLevel } from \"@earendil-works/pi-agent-core\";\nimport { getAgentDir } from \"../config.js\";\nimport { resolvePath } from \"../utils/paths.ts\";\nimport { AgentSession } from \"./agent-session.js\";\nimport type { AgentSessionInternalSurface } from \"./agent-session-methods.ts\";\nimport { restoreAnthropicReplayThinkingBlocks } from \"./anthropic-thinking-guard.ts\";\nimport { formatNoModelsAvailableMessage } from \"./auth-guidance.ts\";\nimport { getBuiltinPackageLocations, getBuiltinPackagePaths } from \"./builtin-packages.ts\";\nimport { withBuiltinResourceLoader } from \"./builtin-resource-loader.ts\";\nimport { getDefaultCacheRetention } from \"./cache-retention.ts\";\nimport { CacheWarmer } from \"./cache-warmer.ts\";\nimport { inheritChildSessionOptions } from \"./child-session-options.ts\";\nimport { DEFAULT_THINKING_LEVEL } from \"./defaults.ts\";\nimport type { ExtensionRunner } from \"./extensions/index.js\";\nimport {\n\tfactoryAcquisitions,\n\tfactoryRollbackError,\n\trollbackFactoryAcquisitions,\n} from \"./extensions/loader-rollback.ts\";\nimport { getModelFastRoute, streamWithFastRoute, withFastRouteStreamOptions } from \"./fast-model-routing.ts\";\nimport { markLifecycleTiming } from \"./lifecycle-timings.ts\";\nimport {\n\tisMandatoryResourceLoader,\n\tisolateMandatoryResourceLoader,\n\twithMandatoryResourceLoader,\n} from \"./mandatory-resource-loader.ts\";\nimport { convertToLlm, repairOrphanToolResults } from \"./messages.ts\";\nimport { findInitialModel, resolveRestoredModelReference } from \"./model-resolver.ts\";\nimport { ModelRuntime } from \"./model-runtime.js\";\nimport { type ModelRuntimeSimpleStreamOptions, mergeHeaders } from \"./model-runtime-streaming.ts\";\nimport { sanitizeOpenAIResponsesPayload } from \"./openai-responses-payload-sanitizer.ts\";\nimport { mergeProviderAttributionHeaders } from \"./provider-attribution.ts\";\nimport { scrubPreCompactionAssistantUsage } from \"./provider-context-usage.ts\";\nimport { canCloneDefaultResourceDiscovery, DefaultResourceLoader } from \"./resource-loader.ts\";\nimport type { CreateAgentSessionOptions, CreateAgentSessionResult } from \"./sdk-types.ts\";\nimport { sessionLifecycleCreation, sessionLifecycleScopes } from \"./session-lifecycle-scope.ts\";\nimport { sessionGenerationClosing, sessionLifetime, trackSessionWork } from \"./session-lifecycle-work.ts\";\nimport { getDefaultSessionDir, SessionManager } from \"./session-manager.ts\";\nimport { registerStartupRollback, rollbackStartup } from \"./session-startup-rollback.ts\";\nimport { SettingsManager } from \"./settings-manager.ts\";\nimport { ownedSettingsManagers } from \"./settings-write-ownership.ts\";\nimport { createChildCommandTaskOwner } from \"./tasks/child-command-owner.js\";\nimport { time } from \"./timings.ts\";\nimport { allToolNames, getDefaultToolNames } from \"./tools/index.ts\";\n\nexport type { ModelFallbackReason } from \"./model-resolver-types.ts\";\nexport * from \"./sdk-exports.ts\";\nexport type { AtomicBuiltin, CreateAgentSessionOptions, CreateAgentSessionResult } from \"./sdk-types.ts\";\n\n// Preserve the pre-0.81 fallback for extensions that construct Agent instances\n// or invoke low-level agent loops without supplying streamFn.\nsetDefaultStreamFn(streamSimple);\n\n// Helper Functions\n\nfunction getDefaultAgentDir(): string {\n\treturn getAgentDir();\n}\n\n/** Keep static model headers visible to hooks without promoting unchanged defaults to request overrides. */\nfunction removeUnownedModelHeaders(\n\theaders: ProviderHeaders | undefined,\n\tmodelHeaders: ProviderHeaders | undefined,\n\trequestHeaders: ProviderHeaders | undefined,\n): ProviderHeaders | undefined {\n\tif (!headers || !modelHeaders) return headers;\n\tconst requestOwned = new Set(Object.keys(requestHeaders ?? {}).map((name) => name.toLowerCase()));\n\tconst filtered = { ...headers };\n\tfor (const [modelName, modelValue] of Object.entries(modelHeaders)) {\n\t\tconst lowerName = modelName.toLowerCase();\n\t\tif (requestOwned.has(lowerName)) continue;\n\t\tfor (const [name, value] of Object.entries(filtered)) {\n\t\t\tif (name.toLowerCase() === lowerName && value === modelValue) delete filtered[name];\n\t\t}\n\t}\n\treturn Object.keys(filtered).length > 0 ? filtered : undefined;\n}\n\n/**\n * Create an AgentSession with the specified options.\n *\n * @example\n * ```typescript\n * // Minimal - uses defaults\n * const { session } = await createAgentSession();\n *\n * // With explicit model\n * import { getModel } from '@bastani/pi-ai/compat';\n * const { session } = await createAgentSession({\n * model: getModel('anthropic', 'claude-opus-4-5'),\n * thinkingLevel: 'high',\n * });\n *\n * // Continue previous session\n * const { session, modelFallbackMessage } = await createAgentSession({\n * continueSession: true,\n * });\n *\n * // Full control\n * const loader = new DefaultResourceLoader({\n * cwd: process.cwd(),\n * agentDir: getAgentDir(),\n * settingsManager: SettingsManager.create(),\n * });\n * await loader.reload();\n * const { session } = await createAgentSession({\n * model: myModel,\n * tools: [\"read\", \"bash\"],\n * resourceLoader: loader,\n * sessionManager: SessionManager.inMemory(),\n * });\n * ```\n */\nexport async function createAgentSession(options: CreateAgentSessionOptions = {}): Promise<CreateAgentSessionResult> {\n\treturn createScopedSession(options, false);\n}\n\n/** Internal CLI assembly seam. Not exported from the package entrypoint. */\nexport function createUnstartedAgentSession(options: CreateAgentSessionOptions): Promise<CreateAgentSessionResult> {\n\treturn createScopedSession(options, true);\n}\n\nfunction createScopedSession(\n\toptions: CreateAgentSessionOptions,\n\tdeferStart: boolean,\n): Promise<CreateAgentSessionResult> {\n\tconst inherited = sessionLifecycleCreation.getStore();\n\tconst context = inherited && !inherited.claimed ? inherited : { scope: {} };\n\treturn sessionLifecycleCreation.run({ ...context, claimed: true }, async () => {\n\t\tconst result = await factoryAcquisitions.run(\n\t\t\t{ pending: new Map(), replacement: context.replacement },\n\t\t\tasync () => {\n\t\t\t\ttry {\n\t\t\t\t\treturn await constructAgentSession(\n\t\t\t\t\t\t{ ...options, extensionBindings: options.extensionBindings ?? context.bindings },\n\t\t\t\t\t\tdeferStart,\n\t\t\t\t\t);\n\t\t\t\t} catch (error) {\n\t\t\t\t\tthrow factoryRollbackError(error, await rollbackFactoryAcquisitions());\n\t\t\t\t}\n\t\t\t},\n\t\t);\n\t\tsessionLifecycleScopes.set(result.session, context.scope);\n\t\treturn result;\n\t});\n}\n\nasync function constructAgentSession(\n\toptions: CreateAgentSessionOptions,\n\tdeferStart: boolean,\n): Promise<CreateAgentSessionResult> {\n\tconst cwd = resolvePath(options.cwd ?? options.sessionManager?.getCwd() ?? process.cwd());\n\tconst agentDir = options.agentDir ? resolvePath(options.agentDir) : getDefaultAgentDir();\n\tlet resourceLoader = options.resourceLoader;\n\t// The concrete default can rediscover into private storage (including deferred\n\t// CLI configuration). Custom discovery stays delegated; composition instantiates\n\t// its extensions independently without replacing overridden resource policy.\n\tif (canCloneDefaultResourceDiscovery(resourceLoader)) {\n\t\tresourceLoader = await resourceLoader.createSessionLoader(sessionLifecycleCreation.getStore()!.scope);\n\t}\n\tif (resourceLoader) resourceLoader = await isolateMandatoryResourceLoader(resourceLoader);\n\n\tconst authPath = options.agentDir ? join(agentDir, \"auth.json\") : undefined;\n\tconst modelsPath = options.agentDir ? join(agentDir, \"models.json\") : undefined;\n\tconst modelRuntime = options.modelRuntime ?? (await ModelRuntime.create({ authPath, modelsPath }));\n\tawait modelRuntime.refresh({ allowNetwork: false });\n\n\tconst settingsManager = options.settingsManager ?? SettingsManager.create(cwd, agentDir);\n\tconst sessionManager = options.sessionManager ?? SessionManager.create(cwd, getDefaultSessionDir(cwd, agentDir));\n\n\t// Mark workflow-created sessions as internal so they are excluded from the\n\t// standard `/resume` history while remaining resumable via `/workflow resume`.\n\t// Only stamped when the orchestration context identifies a workflow stage;\n\t// reattaching to an already-marked session preserves its existing marker.\n\tif (options.orchestrationContext?.kind === \"workflow-stage\") {\n\t\tconst ctx = options.orchestrationContext;\n\t\tsessionManager.markSessionInternal({\n\t\t\trunId: ctx.workflowRunId,\n\t\t\tstageId: ctx.workflowStageId,\n\t\t\tstageName: ctx.workflowStageName,\n\t\t});\n\t}\n\n\tconst disableWorkflowExtension =\n\t\toptions.orchestrationContext?.kind === \"workflow-stage\" || options.subagentPolicy !== undefined;\n\tif (!resourceLoader) {\n\t\tresourceLoader = new DefaultResourceLoader({\n\t\t\tcwd,\n\t\t\tagentDir,\n\t\t\tsettingsManager,\n\t\t\tbuiltinPackagePaths: getBuiltinPackagePaths(options.builtins).map((source) =>\n\t\t\t\tdisableWorkflowExtension && basename(source) === \"workflows\" ? { source, extensions: [] } : source,\n\t\t\t),\n\t\t});\n\t\tawait resourceLoader.reload();\n\t\ttime(\"resourceLoader.reload\");\n\t}\n\tif (\n\t\t(options.resourceLoader || options.builtins || disableWorkflowExtension) &&\n\t\t(!isMandatoryResourceLoader(resourceLoader) || options.builtins || disableWorkflowExtension)\n\t) {\n\t\tresourceLoader = await withBuiltinResourceLoader(\n\t\t\tresourceLoader,\n\t\t\tcwd,\n\t\t\tagentDir,\n\t\t\toptions.builtins,\n\t\t\tdisableWorkflowExtension,\n\t\t);\n\t}\n\tif (options.builtins?.intercom !== false) {\n\t\tresourceLoader = await withMandatoryResourceLoader(resourceLoader, cwd);\n\t}\n\n\t// Check if session has existing data to restore\n\tconst existingSession = sessionManager.buildSessionContext();\n\tconst repairedMessages = repairOrphanToolResults(existingSession.messages, { repairTrailing: true });\n\tconst existingMessages = options.initialContextTransform\n\t\t? options.initialContextTransform(repairedMessages)\n\t\t: repairedMessages;\n\tconst hasExistingSession = existingMessages.length > 0;\n\tconst hasThinkingEntry = sessionManager.getBranch().some((entry) => entry.type === \"thinking_level_change\");\n\n\tlet model = options.model;\n\tlet modelFallbackMessage: string | undefined;\n\tlet modelFallbackReason: import(\"./model-resolver-types.ts\").ModelFallbackReason | undefined;\n\n\t// If session has data, try to restore model from it\n\tif (!model && hasExistingSession && existingSession.model) {\n\t\tmodel = await resolveRestoredModelReference(\n\t\t\texistingSession.model.provider,\n\t\t\texistingSession.model.modelId,\n\t\t\tmodelRuntime,\n\t\t);\n\t\tif (!model) {\n\t\t\tmodelFallbackMessage = `Could not restore model ${existingSession.model.provider}/${existingSession.model.modelId}`;\n\t\t\tmodelFallbackReason = \"session-restore\";\n\t\t}\n\t}\n\tif (!model) {\n\t\tconst result = await findInitialModel({\n\t\t\tscopedModels: [],\n\t\t\tisContinuing: hasExistingSession,\n\t\t\tdefaultProvider: settingsManager.getDefaultProvider(),\n\t\t\tdefaultModelId: settingsManager.getDefaultModel(),\n\t\t\tdefaultThinkingLevel: settingsManager.getDefaultThinkingLevel(),\n\t\t\tmodelThinkingLevels: settingsManager.getAllModelThinkingLevels(),\n\t\t\tmodelRuntime,\n\t\t});\n\t\tmodel = result.model;\n\t\tif (!model) {\n\t\t\tif (result.fallbackReason === \"configured-provider-unsupported\") {\n\t\t\t\tmodelFallbackMessage = result.fallbackMessage;\n\t\t\t\tmodelFallbackReason = result.fallbackReason;\n\t\t\t} else if (!modelFallbackMessage) {\n\t\t\t\tmodelFallbackMessage = result.fallbackMessage ?? formatNoModelsAvailableMessage();\n\t\t\t\tmodelFallbackReason = result.fallbackReason ?? \"no-models-available\";\n\t\t\t}\n\t\t} else if (modelFallbackMessage) {\n\t\t\tmodelFallbackMessage += `. Using ${model.provider}/${model.id}`;\n\t\t}\n\t}\n\n\tlet thinkingLevel = options.thinkingLevel;\n\n\t// If session has data, restore thinking level from it\n\tif (thinkingLevel === undefined && hasExistingSession) {\n\t\tthinkingLevel = hasThinkingEntry\n\t\t\t? (existingSession.thinkingLevel as ThinkingLevel)\n\t\t\t: (settingsManager.getDefaultThinkingLevel() ?? DEFAULT_THINKING_LEVEL);\n\t}\n\n\t// Fall back to per-model override, then global default\n\tif (thinkingLevel === undefined && model) {\n\t\tthinkingLevel = settingsManager.getModelThinkingLevel(model.provider, model.id);\n\t}\n\tif (thinkingLevel === undefined) {\n\t\tthinkingLevel = settingsManager.getDefaultThinkingLevel() ?? DEFAULT_THINKING_LEVEL;\n\t}\n\n\t// Clamp to model capabilities\n\tif (!model) {\n\t\tthinkingLevel = \"off\";\n\t} else {\n\t\tthinkingLevel = clampThinkingLevel(model, thinkingLevel) as ThinkingLevel;\n\t}\n\n\t// `defaultTools` narrows only the initial BUILT-IN selection. It must not\n\t// narrow `allowedToolNames`: a narrow allowlist would drop every extension\n\t// and SDK custom tool (workflow, subagent, intercom, mcp, web_search, ...)\n\t// for any user who configures it (upstream 4d9aa837 + companion fix 541045ae).\n\tconst configuredDefaultToolNames = settingsManager.getDefaultTools();\n\tconst allowedToolNames =\n\t\toptions.noTools === \"all\" ? [] : options.tools === undefined ? undefined : [...options.tools];\n\tconst subagentPolicy =\n\t\toptions.subagentPolicy && (options.subagentPolicy.depth ?? 0) >= 1\n\t\t\t? {\n\t\t\t\t\t...options.subagentPolicy,\n\t\t\t\t\ttools: allowedToolNames,\n\t\t\t\t\tmcpDirectTools:\n\t\t\t\t\t\toptions.noTools === \"all\"\n\t\t\t\t\t\t\t? []\n\t\t\t\t\t\t\t: (options.subagentPolicy.mcpDirectTools ?? (allowedToolNames === undefined ? undefined : [])),\n\t\t\t\t}\n\t\t\t: options.subagentPolicy;\n\tconst initialActiveToolNames: string[] = allowedToolNames\n\t\t? [...allowedToolNames]\n\t\t: options.noTools\n\t\t\t? []\n\t\t\t: [...(configuredDefaultToolNames ?? getDefaultToolNames())];\n\tconst childBuiltins = { ...options.builtins };\n\tconst childExcludedTools = [\n\t\t...(options.excludedTools ?? []),\n\t\t...(allowedToolNames === undefined\n\t\t\t? [...allToolNames].filter((name) => !initialActiveToolNames.includes(name))\n\t\t\t: []),\n\t];\n\n\tlet agent: Agent;\n\n\tlet lastConvertedLlmMessages: Message[] | undefined;\n\n\t// Create convertToLlm wrapper that filters images if blockImages is enabled (defense-in-depth)\n\tconst convertToLlmWithBlockImages = (messages: AgentMessage[]): Message[] => {\n\t\tconst converted = convertToLlm(messages);\n\t\t// Check setting dynamically so mid-session changes take effect\n\t\tif (!settingsManager.getBlockImages()) {\n\t\t\tlastConvertedLlmMessages = converted;\n\t\t\treturn converted;\n\t\t}\n\t\t// Filter out ImageContent from all messages, replacing with text placeholder\n\t\tconst filtered = converted.map((msg): Message => {\n\t\t\tif (msg.role === \"user\" || msg.role === \"toolResult\") {\n\t\t\t\tconst content = msg.content;\n\t\t\t\tif (Array.isArray(content)) {\n\t\t\t\t\tconst hasImages = content.some((c) => c.type === \"image\");\n\t\t\t\t\tif (hasImages) {\n\t\t\t\t\t\tconst filteredContent = content\n\t\t\t\t\t\t\t.map((c) =>\n\t\t\t\t\t\t\t\tc.type === \"image\"\n\t\t\t\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\t\t\t\ttype: \"text\" as const,\n\t\t\t\t\t\t\t\t\t\t\ttext: \"Image reading is disabled.\",\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t: c,\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t.filter(\n\t\t\t\t\t\t\t\t(c, i, arr) =>\n\t\t\t\t\t\t\t\t\t// Dedupe consecutive \"Image reading is disabled.\" texts\n\t\t\t\t\t\t\t\t\t!(\n\t\t\t\t\t\t\t\t\t\tc.type === \"text\" &&\n\t\t\t\t\t\t\t\t\t\tc.text === \"Image reading is disabled.\" &&\n\t\t\t\t\t\t\t\t\t\ti > 0 &&\n\t\t\t\t\t\t\t\t\t\tarr[i - 1].type === \"text\" &&\n\t\t\t\t\t\t\t\t\t\t(arr[i - 1] as { type: \"text\"; text: string }).text === \"Image reading is disabled.\"\n\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t// `user` and `toolResult` carry different content unions, and mapping them in one\n\t\t\t\t\t\t// branch widens both to their union. Only image blocks are rewritten here, so each\n\t\t\t\t\t\t// message keeps its own shape at runtime.\n\t\t\t\t\t\treturn { ...msg, content: filteredContent } as Message;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn msg;\n\t\t});\n\t\tlastConvertedLlmMessages = filtered;\n\t\treturn filtered;\n\t};\n\n\tconst extensionRunnerRef: { current?: ExtensionRunner } = {};\n\tconst cacheWarmer = new CacheWarmer(\n\t\t{\n\t\t\tstreamSimple: (model, context, requestOptions) => {\n\t\t\t\tconst extension = modelRuntime.getRegisteredProviderConfig(model.provider);\n\t\t\t\treturn getModelFastRoute(model)?.serviceTier !== undefined &&\n\t\t\t\t\textension?.aliasOf === undefined &&\n\t\t\t\t\t!(extension?.streamSimple && extension.api === model.api)\n\t\t\t\t\t? streamWithFastRoute(model, context, requestOptions)\n\t\t\t\t\t: modelRuntime.streamSimple(model, context, requestOptions);\n\t\t\t},\n\t\t},\n\t\tsessionManager,\n\t\t() => settingsManager.getCacheWarmingMode(),\n\t\tasync (event) => {\n\t\t\tconst runner = extensionRunnerRef.current;\n\t\t\tif (!runner) {\n\t\t\t\treturn event.action;\n\t\t\t}\n\t\t\treturn (await runner.emitCacheWarmingDecision(event)) ?? event.action;\n\t\t},\n\t\t(refresh) => trackSessionWork(session, refresh),\n\t);\n\n\tconst handleProviderStreamEvent: NonNullable<ModelRuntimeSimpleStreamOptions[\"onProviderStreamEvent\"]> = async (\n\t\tdata,\n\t\tmodel,\n\t) => {\n\t\tconst runner = extensionRunnerRef.current;\n\t\tif (!runner?.hasHandlers(\"provider_stream_event\")) return;\n\t\tawait runner.emit({\n\t\t\ttype: \"provider_stream_event\",\n\t\t\tprovider: model.provider,\n\t\t\tapi: model.api,\n\t\t\tmodel: model.id,\n\t\t\tdata,\n\t\t});\n\t};\n\n\tagent = new Agent({\n\t\tinitialState: {\n\t\t\tsystemPrompt: \"\",\n\t\t\tmodel,\n\t\t\tthinkingLevel,\n\t\t\ttools: [],\n\t\t\tmessages: existingMessages,\n\t\t},\n\t\tconvertToLlm: convertToLlmWithBlockImages,\n\t\tstreamFn: async (model, context, streamOptions) => {\n\t\t\tconst authResult = await modelRuntime.getRequestAuth(model, {\n\t\t\t\tapiKey: streamOptions?.apiKey,\n\t\t\t\tenv: streamOptions?.env,\n\t\t\t\tsignal: streamOptions?.signal,\n\t\t\t});\n\t\t\tconst compatibility = authResult ? undefined : modelRuntime.getCompatibilityRequestConfig(model);\n\t\t\tif (!authResult && compatibility?.authHeader) {\n\t\t\t\tthrow new Error(`No API key found for \"${model.provider}\"`);\n\t\t\t}\n\t\t\tconst auth = {\n\t\t\t\tapiKey: authResult?.auth.apiKey,\n\t\t\t\theaders: authResult?.auth.headers ?? compatibility?.headers,\n\t\t\t\tbaseUrl: authResult?.auth.baseUrl,\n\t\t\t\tenv: authResult?.env,\n\t\t\t};\n\t\t\tconst requestModel =\n\t\t\t\tauth.baseUrl !== undefined && auth.baseUrl !== model.baseUrl ? { ...model, baseUrl: auth.baseUrl } : model;\n\t\t\tconst providerRetrySettings = settingsManager.getProviderRetrySettings();\n\t\t\tconst httpIdleTimeoutMs = settingsManager.getHttpIdleTimeoutMs();\n\t\t\t// SDKs treat timeout=0 as 0ms (immediate timeout), not \"no timeout\".\n\t\t\t// Use max int32 to effectively disable the timeout.\n\t\t\tconst effectiveTimeoutMs = httpIdleTimeoutMs === 0 ? 2147483647 : httpIdleTimeoutMs;\n\t\t\tconst timeoutMs = streamOptions?.timeoutMs ?? providerRetrySettings.timeoutMs ?? effectiveTimeoutMs;\n\t\t\tconst websocketConnectTimeoutMs =\n\t\t\t\tstreamOptions?.websocketConnectTimeoutMs ?? settingsManager.getWebSocketConnectTimeoutMs();\n\t\t\tconst streamDeadlineMs = streamOptions?.streamDeadlineMs ?? settingsManager.getStreamDeadlineMs();\n\t\t\tconst requestHeaders = mergeProviderAttributionHeaders(\n\t\t\t\tmodel,\n\t\t\t\tsettingsManager,\n\t\t\t\tstreamOptions?.sessionId,\n\t\t\t\tauth.headers,\n\t\t\t\tstreamOptions?.headers,\n\t\t\t);\n\t\t\tconst mergedHeaders = mergeHeaders(model.headers, requestHeaders);\n\t\t\tconst headerRunner = extensionRunnerRef.current;\n\t\t\tconst assembledHeaders = headerRunner?.hasHandlers(\"before_provider_headers\")\n\t\t\t\t? await headerRunner.emitBeforeProviderHeaders(mergedHeaders ?? {})\n\t\t\t\t: mergedHeaders;\n\t\t\tconst extensionProvider = modelRuntime.getRegisteredProviderConfig(requestModel.provider);\n\t\t\tconst usesExtensionStream =\n\t\t\t\textensionProvider?.streamSimple !== undefined && requestModel.api === extensionProvider.api;\n\t\t\tconst transportHeaders = usesExtensionStream\n\t\t\t\t? assembledHeaders\n\t\t\t\t: removeUnownedModelHeaders(assembledHeaders, model.headers, requestHeaders);\n\t\t\t// Fast-vs-normal is the selected model's own identity, so the canonical `-fast` model is what\n\t\t\t// dispatch, the recorded assistant message, session state, and usage all see. The provider\n\t\t\t// adapter reads `fastRoute.upstreamModelId` when it serializes the outbound request.\n\t\t\tconst fastRoute = getModelFastRoute(requestModel);\n\t\t\tif (fastRoute?.serviceTier !== undefined && !usesExtensionStream && !authResult) {\n\t\t\t\tthrow new Error(`No API key found for \"${model.provider}\"`);\n\t\t\t}\n\t\t\tconst env = auth.env || streamOptions?.env ? { ...auth.env, ...streamOptions?.env } : undefined;\n\t\t\tconst cacheRetentionEnv = getProviderEnvValue(\"PI_CACHE_RETENTION\", env);\n\t\t\t// Shared by main chat, workflow stages and subagents; provider capability gates still apply.\n\t\t\tconst cacheRetention =\n\t\t\t\tstreamOptions?.cacheRetention ??\n\t\t\t\t(cacheRetentionEnv === \"none\"\n\t\t\t\t\t? \"none\"\n\t\t\t\t\t: !cacheRetentionEnv\n\t\t\t\t\t\t? getDefaultCacheRetention(requestModel)\n\t\t\t\t\t\t: cacheRetentionEnv === \"long\"\n\t\t\t\t\t\t\t? \"long\"\n\t\t\t\t\t\t\t: \"short\");\n\t\t\tconst fastRouteStreamOptions = withFastRouteStreamOptions(fastRoute, {\n\t\t\t\t...streamOptions,\n\t\t\t\tapiKey: auth.apiKey,\n\t\t\t\tenv,\n\t\t\t\tcacheRetention,\n\t\t\t\ttimeoutMs,\n\t\t\t\twebsocketConnectTimeoutMs,\n\t\t\t\tstreamDeadlineMs,\n\t\t\t\tmaxRetries: streamOptions?.maxRetries ?? providerRetrySettings.maxRetries,\n\t\t\t\tmaxRetryDelayMs: streamOptions?.maxRetryDelayMs ?? providerRetrySettings.maxRetryDelayMs,\n\t\t\t\theaders: transportHeaders,\n\t\t\t});\n\t\t\tconst preparedStreamOptions: ModelRuntimeSimpleStreamOptions = {\n\t\t\t\t...fastRouteStreamOptions,\n\t\t\t\tpreparedRequestAuth: { resolution: authResult },\n\t\t\t};\n\t\t\tif (streamOptions?.sessionId === sessionManager.getSessionId()) {\n\t\t\t\tconst prefix = [...agent.state.messages];\n\t\t\t\tcacheWarmer.start({ model: requestModel, context, options: preparedStreamOptions }, () => {\n\t\t\t\t\tconst current = agent.state.model;\n\t\t\t\t\treturn (\n\t\t\t\t\t\t!sessionLifetime(session).aborted &&\n\t\t\t\t\t\t!sessionGenerationClosing.has(session) &&\n\t\t\t\t\t\t!(session as unknown as AgentSessionInternalSurface)._agentRunAbortRequested &&\n\t\t\t\t\t\tcurrent?.provider === model.provider &&\n\t\t\t\t\t\tcurrent.id === model.id &&\n\t\t\t\t\t\tprefix.every((message, index) => agent.state.messages[index] === message)\n\t\t\t\t\t);\n\t\t\t\t});\n\t\t\t}\n\t\t\tconst onProviderStreamEvent = streamOptions?.onProviderStreamEvent ?? handleProviderStreamEvent;\n\t\t\tif (fastRoute?.serviceTier !== undefined && !usesExtensionStream && extensionProvider?.aliasOf === undefined) {\n\t\t\t\treturn streamWithFastRoute(requestModel, context, { ...fastRouteStreamOptions, onProviderStreamEvent });\n\t\t\t}\n\t\t\t// The Codex routing identity is attached by ModelRuntimeStreaming, after auth headers are\n\t\t\t// merged. Applying it here would be inert: `mergeHeaders` copies the header object the\n\t\t\t// wrapper mutates.\n\t\t\treturn modelRuntime.streamSimple(requestModel, context, { ...preparedStreamOptions, onProviderStreamEvent });\n\t\t},\n\t\tonPayload: async (payload, model) => {\n\t\t\tconst sourceMessages = lastConvertedLlmMessages;\n\t\t\tconst replayGuardedPayload = sourceMessages\n\t\t\t\t? restoreAnthropicReplayThinkingBlocks(payload, sourceMessages, model)\n\t\t\t\t: payload;\n\t\t\tconst runner = extensionRunnerRef.current;\n\t\t\tlet finalPayload: unknown;\n\t\t\tif (!runner?.hasHandlers(\"before_provider_request\")) {\n\t\t\t\tfinalPayload = replayGuardedPayload;\n\t\t\t} else {\n\t\t\t\tconst extensionPayload = await runner.emitBeforeProviderRequest(replayGuardedPayload);\n\t\t\t\tfinalPayload = sourceMessages\n\t\t\t\t\t? restoreAnthropicReplayThinkingBlocks(extensionPayload, sourceMessages, model)\n\t\t\t\t\t: extensionPayload;\n\t\t\t}\n\t\t\tconst sanitizedPayload = sanitizeOpenAIResponsesPayload(finalPayload, model);\n\t\t\tmarkLifecycleTiming(\"before-provider-request\");\n\t\t\treturn sanitizedPayload;\n\t\t},\n\t\tonResponse: async (response, _model) => {\n\t\t\tconst runner = extensionRunnerRef.current;\n\t\t\tif (!runner?.hasHandlers(\"after_provider_response\")) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tawait runner.emit({\n\t\t\t\ttype: \"after_provider_response\",\n\t\t\t\tstatus: response.status,\n\t\t\t\theaders: response.headers,\n\t\t\t});\n\t\t},\n\t\tsessionId: sessionManager.getSessionId(),\n\t\ttransformContext: async (messages) => {\n\t\t\tconst runner = extensionRunnerRef.current;\n\t\t\tconst transformed = runner ? await runner.emitContext(messages) : messages;\n\t\t\treturn scrubPreCompactionAssistantUsage(transformed, sessionManager.getBranch());\n\t\t},\n\t\tsteeringMode: settingsManager.getSteeringMode(),\n\t\tfollowUpMode: settingsManager.getFollowUpMode(),\n\t\ttransport: settingsManager.getTransport(),\n\t\tthinkingBudgets: settingsManager.getThinkingBudgets(),\n\t\tmaxRetryDelayMs: settingsManager.getProviderRetrySettings().maxRetryDelayMs,\n\t});\n\n\t// Restore missing settings metadata for older sessions.\n\tif (hasExistingSession) {\n\t\tif (!hasThinkingEntry) {\n\t\t\tsessionManager.appendThinkingLevelChange(thinkingLevel);\n\t\t}\n\t} else {\n\t\t// Save initial model and thinking level for new sessions so they can be restored on resume\n\t\tif (model) {\n\t\t\tsessionManager.appendModelChange(model.provider, model.id);\n\t\t}\n\t\tsessionManager.appendThinkingLevelChange(thinkingLevel);\n\t}\n\n\tconst providerRollback = modelRuntime.createExtensionProviderTransaction();\n\tlet session: AgentSession;\n\tconst childCommandTaskOwner = createChildCommandTaskOwner(() => session.getAgentTaskHost());\n\ttry {\n\t\tsession = new AgentSession({\n\t\t\tagent,\n\t\t\tsessionManager,\n\t\t\tsettingsManager,\n\t\t\tcwd,\n\t\t\tchildSessionOptions: (child) =>\n\t\t\t\tinheritChildSessionOptions(\n\t\t\t\t\t{\n\t\t\t\t\t\tcwd,\n\t\t\t\t\t\tagentDir,\n\t\t\t\t\t\tmodelRuntime,\n\t\t\t\t\t\tsettingsManager,\n\t\t\t\t\t\tmodel: session.model,\n\t\t\t\t\t\tthinkingLevel: session.thinkingLevel,\n\t\t\t\t\t\tfallbackModels: options.fallbackModels ?? settingsManager.getFallbackModels(),\n\t\t\t\t\t\tisFallbackModelAllowed: options.isFallbackModelAllowed,\n\t\t\t\t\t\tbuiltins: childBuiltins,\n\t\t\t\t\t\ttools: allowedToolNames,\n\t\t\t\t\t\tnoTools: options.noTools,\n\t\t\t\t\t\texcludedTools: childExcludedTools,\n\t\t\t\t\t\tcustomTools: options.customTools,\n\t\t\t\t\t\textensionBindings: session.extensionRunner.getChildHostBindings(),\n\t\t\t\t\t\tparentCommandTaskOwner: childCommandTaskOwner,\n\t\t\t\t\t},\n\t\t\t\t\tchild,\n\t\t\t\t),\n\t\t\tscopedModels: options.scopedModels,\n\t\t\tfallbackModels: options.fallbackModels ?? settingsManager.getFallbackModels(),\n\t\t\tisFallbackModelAllowed: options.isFallbackModelAllowed,\n\t\t\tresourceLoader,\n\t\t\tcustomTools: options.customTools,\n\t\t\tmodelRuntime,\n\t\t\tcacheWarmer,\n\t\t\tinitialActiveToolNames,\n\t\t\tusesDefaultTools: options.tools === undefined && !options.noTools,\n\t\t\tallowedToolNames,\n\t\t\texcludedToolNames: options.excludedTools,\n\t\t\textensionRunnerRef,\n\t\t\tsessionStartEvent: options.sessionStartEvent,\n\t\t\torchestrationContext: options.orchestrationContext,\n\t\t\tsubagentPolicy,\n\t\t\tparentCommandTaskOwner: options.parentCommandTaskOwner,\n\t\t\tsystemPromptTransform: options.systemPromptTransform,\n\t\t\tcontextProjectionTransform: options.initialContextTransform,\n\t\t});\n\t} catch (error) {\n\t\t// The constructor releases its own leases/subscriptions; restore borrowed provider state here.\n\t\tconst cleanup = await Promise.allSettled([providerRollback.commit(), settingsManager.flush()]);\n\t\tconst failures = cleanup.flatMap((result) => (result.status === \"rejected\" ? [result.reason] : []));\n\t\tif (failures.length)\n\t\t\tthrow new AggregateError([error, ...failures], \"Session construction failed and rollback reported errors\");\n\t\tthrow error;\n\t}\n\t// Only the selected factories transfer. Discovery may have acquired omitted factories.\n\tconst acquisitions = factoryAcquisitions.getStore();\n\tconst selected = resourceLoader.getExtensions();\n\tfor (const extension of selected.extensions) acquisitions?.pending?.delete(extension);\n\tif (!options.settingsManager) ownedSettingsManagers.set(settingsManager, session);\n\tconst rollbackReason = sessionLifecycleCreation.getStore()?.replacement ? \"new\" : \"quit\";\n\tregisterStartupRollback(session.extensionRunner, async (error) => {\n\t\tconst results = await Promise.allSettled([\n\t\t\t(session as unknown as AgentSessionInternalSurface)._close({\n\t\t\t\ttype: \"session_shutdown\",\n\t\t\t\treason: rollbackReason,\n\t\t\t}),\n\t\t\tproviderRollback.commit(),\n\t\t]);\n\t\tconst cleanupErrors = results.flatMap((result) => (result.status === \"rejected\" ? [result.reason] : []));\n\t\tif (cleanupErrors.length)\n\t\t\tthrow new AggregateError([error, ...cleanupErrors], \"Extension startup failed and rollback reported errors\");\n\t\tthrow error;\n\t});\n\ttry {\n\t\t// Omitted factories may share the selected runtime: release their acquisitions,\n\t\t// but leave that runtime and its selected subscriptions owned by the runner.\n\t\tconst failures = await rollbackFactoryAcquisitions(new Set([selected.runtime]));\n\t\tif (failures.length)\n\t\t\tthrow Object.assign(new AggregateError(failures, \"Unselected extension cleanup failed\"), {\n\t\t\t\tcode: \"ShutdownFailed\",\n\t\t\t});\n\t\tconst extensionsResult = resourceLoader.getExtensions();\n\t\tfor (const failure of extensionsResult.errors) {\n\t\t\tconst builtin = getBuiltinPackageLocations().find(({ packageDir }) => {\n\t\t\t\tconst path = relative(packageDir, failure.path);\n\t\t\t\treturn path !== \"..\" && !path.startsWith(`..${sep}`) && !path.startsWith(sep);\n\t\t\t});\n\t\t\tif (builtin)\n\t\t\t\tthrow Object.assign(new Error(`Builtin unavailable: ${builtin.packageName}: ${failure.error}`), {\n\t\t\t\t\tcode: \"BuiltinUnavailable\",\n\t\t\t\t});\n\t\t}\n\t\tif (!deferStart) await session.bindExtensions(options.extensionBindings ?? {});\n\t\treturn { session, extensionsResult, modelFallbackMessage, modelFallbackReason };\n\t} catch (error) {\n\t\treturn rollbackStartup(session.extensionRunner, error instanceof Error ? error : new Error(String(error)));\n\t}\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../../../src/extensions/mcp/cli.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAkBH,OAAO,EAEN,uBAAuB,EAKvB,MAAM,cAAc,CAAC;AAgDtB,MAAM,WAAW,iBAAiB;IACjC,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;IACjB,0DAA0D;IAC1D,WAAW,CAAC,EAAE,uBAAuB,CAAC;IACtC,wCAAwC;IACxC,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IAChC,kCAAkC;IAClC,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC7B,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CAC/B;AA6FD,oDAAoD;AACpD,wBAAsB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,MAAM,CAAC,CA2E/F"}
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../../../src/extensions/mcp/cli.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAkBH,OAAO,EAEN,uBAAuB,EAKvB,MAAM,cAAc,CAAC;AAgDtB,MAAM,WAAW,iBAAiB;IACjC,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;IACjB,0DAA0D;IAC1D,WAAW,CAAC,EAAE,uBAAuB,CAAC;IACtC,wCAAwC;IACxC,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IAChC,kCAAkC;IAClC,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC7B,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CAC/B;AA+FD,oDAAoD;AACpD,wBAAsB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,MAAM,CAAC,CA2E/F"}
@@ -350,6 +350,7 @@ async function list(loaded, json, untrustedNote, options, credentials, log) {
350
350
  name: entry.name,
351
351
  scope: entry.scope ?? "global",
352
352
  source: entry.source,
353
+ ...(entry.override ? { override: entry.override } : {}),
353
354
  enabled: entry.config.enabled !== false,
354
355
  exposure: entry.config.exposure ?? "codemode",
355
356
  transport: describeTransport(entry),
@@ -388,7 +389,7 @@ async function list(loaded, json, untrustedNote, options, credentials, log) {
388
389
  return failed ? 1 : 0;
389
390
  }
390
391
  if (reports.length === 0 && loaded.errors.length === 0) {
391
- log(`No MCP servers configured. Add them to ${join(options.agentDir, "mcp.json")} or .pi/mcp.json.`);
392
+ log(`No MCP servers configured. Add them to ${join(options.agentDir, "mcp.json")} or ${CONFIG_DIR_NAME}/mcp.json.`);
392
393
  }
393
394
  for (const report of reports) {
394
395
  const state = report.state === "connected"
@@ -398,6 +399,8 @@ async function list(loaded, json, untrustedNote, options, credentials, log) {
398
399
  : report.state;
399
400
  log(`${report.name}: ${state} (${report.exposure}, ${report.scope})`);
400
401
  log(` ${report.transport}`);
402
+ if (report.override)
403
+ log(` project override: ${report.override}`);
401
404
  if (report.state === "needs-auth")
402
405
  log(` sign in with: ${APP_NAME} mcp login ${report.name}`);
403
406
  if (report.tools.length > 0) {
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../../../src/extensions/mcp/cli.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * `pi mcp`: add, remove, and check MCP servers and sign in to them outside a session. Agents run it\n * through bash to configure servers, verify an `mcp.json` they wrote, and start an OAuth sign-in;\n * the user only approves access in the browser. Running sessions pick up new credentials on their\n * next turn.\n */\n\nimport { existsSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport { createInterface } from \"node:readline/promises\";\nimport chalk from \"chalk\";\nimport { APP_NAME, CONFIG_DIR_NAME } from \"../../config.js\";\nimport { validateMcpServerConfig } from \"../../core/mcp-servers.ts\";\nimport { ProjectTrustStore } from \"../../core/trust-manager.ts\";\nimport { openBrowser } from \"../../utils/open-browser.ts\";\nimport {\n\taddMcpServerConfig,\n\tgetMcpToolExposure,\n\ttype LoadedMcpConfig,\n\tloadMcpConfig,\n\ttype McpServerEntry,\n\tremoveMcpServerConfig,\n} from \"./config.ts\";\nimport {\n\tcreateDefaultTransport,\n\tMcpOAuthCredentialStore,\n\tMcpServerConnection,\n\tMcpServerLog,\n\tMcpSignInCancelledError,\n\tsignInMcpServer,\n} from \"./runtime.ts\";\n\nconst HELP = `${chalk.bold(\"Usage:\")}\n ${APP_NAME} mcp add <server> [options] -- <command> [args...]\n ${APP_NAME} mcp add <server> [options] --url <url>\n ${APP_NAME} mcp remove <server> [-l]\n ${APP_NAME} mcp list [--json]\n ${APP_NAME} mcp login <server> [--timeout <seconds>]\n ${APP_NAME} mcp logout <server>\n\nConfigure and check MCP servers and sign in to OAuth servers without starting a session.\nReads ~/${CONFIG_DIR_NAME}/agent/mcp.json and, in trusted projects, ${CONFIG_DIR_NAME}/mcp.json.\n\nCommands:\n add <server> Add or replace a server in mcp.json\n remove <server> Remove a server from mcp.json\n list Show state, tools, and errors (exits 1 on failure)\n login <server> Sign in through the browser\n logout <server> Delete the stored OAuth credentials\n\nOptions for add and remove:\n -l, --local Use ${CONFIG_DIR_NAME}/mcp.json in the current project instead of the global file\n\nOptions for add:\n --url <url> Streamable HTTP server URL (instead of a command)\n --env <KEY=VALUE> Environment variable for a stdio server (repeatable)\n --cwd <dir> Working directory for a stdio server\n --header <KEY=VALUE> HTTP header (repeatable)\n --bearer-token-env-var <NAME>\n Send \"Authorization: Bearer \\${NAME}\"\n --oauth-client-id <id> Pre-registered OAuth client id\n --oauth-client-secret <secret>\n OAuth client secret (may be \\${NAME} or !command)\n --oauth-callback-port <port>\n Fixed OAuth callback port\n --oauth-client-name <name>\n Client name sent when registering with the OAuth server\n --exposure <mode> codemode (default), deferred, direct, or hidden\n --description <text> What the server offers, shown in the system prompt\n\nOther options:\n --json Print the list as JSON\n --timeout <seconds> How long login waits for the browser (default: 300)`;\n\nconst HELP_HINT = chalk.dim(`Use \"${APP_NAME} mcp --help\" for usage.`);\n\nconst DEFAULT_LOGIN_TIMEOUT_SECONDS = 300;\n\nexport interface McpCommandOptions {\n\tcwd: string;\n\tagentDir: string;\n\t/** Defaults to `mcp-auth.json` in the agent directory. */\n\tcredentials?: McpOAuthCredentialStore;\n\t/** Defaults to the platform browser. */\n\topenUrl?: (url: string) => void;\n\t/** Defaults to console output. */\n\tlog?: (line: string) => void;\n\terror?: (line: string) => void;\n}\n\ninterface ServerReport {\n\tname: string;\n\tscope: string;\n\tsource: string;\n\tenabled: boolean;\n\texposure: string;\n\ttransport: string;\n\tstate: string;\n\ttools: string[];\n\t/** Tools whose exposure differs from the server's, from `toolExposure`. */\n\ttoolExposure?: Record<string, string>;\n\tresources?: number;\n\tresourceTemplates?: number;\n\terror?: string;\n}\n\nfunction errorMessage(error: unknown): string {\n\treturn error instanceof Error ? error.message : String(error);\n}\n\nfunction describeTransport(entry: McpServerEntry): string {\n\tconst { config } = entry;\n\treturn \"url\" in config ? config.url : [config.command, ...(config.args ?? [])].join(\" \");\n}\n\nfunction createConnection(entry: McpServerEntry, options: McpCommandOptions, credentials: McpOAuthCredentialStore) {\n\treturn new McpServerConnection({\n\t\tentry,\n\t\tcwd: options.cwd,\n\t\tcreateTransport: createDefaultTransport,\n\t\tcredentials,\n\t\tlog: new McpServerLog(join(options.agentDir, \"mcp.log\")),\n\t\tonTools: () => {},\n\t});\n}\n\n/** Short spellings of options. `-l`/`--local` match `pi install`. */\nconst OPTION_ALIASES = new Map([[\"-l\", \"--local\"]]);\n\ninterface ParsedOptions {\n\tpositional: string[];\n\tvalues: Map<string, string | true>;\n\t/** Values of `list` options, in order. */\n\tlists: Map<string, string[]>;\n}\n\n/**\n * Parse `--name value` options; returns undefined and reports unknown ones. `--` ends the options,\n * as does reaching `maxPositionals` positional arguments: the remaining arguments are positional,\n * so a command's own options (`add <server> <command> --flag`) are passed through.\n */\nfunction parseOptions(\n\targs: string[],\n\tknown: Record<string, \"flag\" | \"value\" | \"list\">,\n\terror: (line: string) => void,\n\tmaxPositionals = Number.POSITIVE_INFINITY,\n): ParsedOptions | undefined {\n\tconst positional: string[] = [];\n\tconst values = new Map<string, string | true>();\n\tconst lists = new Map<string, string[]>();\n\tfor (let index = 0; index < args.length; index++) {\n\t\tconst arg = OPTION_ALIASES.get(args[index]) ?? args[index];\n\t\tif (arg === \"--\" || positional.length >= maxPositionals) {\n\t\t\tpositional.push(...args.slice(arg === \"--\" ? index + 1 : index));\n\t\t\tbreak;\n\t\t}\n\t\tif (!arg.startsWith(\"--\")) {\n\t\t\tpositional.push(arg);\n\t\t\tcontinue;\n\t\t}\n\t\tconst name = arg.slice(2);\n\t\tconst kind = known[name];\n\t\tif (!kind) {\n\t\t\terror(`Unknown option ${arg}.\\n${HELP_HINT}`);\n\t\t\treturn undefined;\n\t\t}\n\t\tif (kind === \"flag\") {\n\t\t\tvalues.set(name, true);\n\t\t\tcontinue;\n\t\t}\n\t\tconst value = args[++index];\n\t\tif (value === undefined) {\n\t\t\terror(`${arg} needs a value.`);\n\t\t\treturn undefined;\n\t\t}\n\t\tif (kind === \"list\") lists.set(name, [...(lists.get(name) ?? []), value]);\n\t\telse values.set(name, value);\n\t}\n\treturn { positional, values, lists };\n}\n\n/** Run `pi mcp <args>` and return the exit code. */\nexport async function runMcpCommand(args: string[], options: McpCommandOptions): Promise<number> {\n\tconst log = options.log ?? ((line: string) => console.log(line));\n\tconst error = options.error ?? ((line: string) => console.error(line));\n\tconst [command, ...rest] = args;\n\tif (command === undefined || command === \"help\" || args.includes(\"--help\") || args.includes(\"-h\")) {\n\t\tlog(HELP);\n\t\treturn 0;\n\t}\n\n\tconst projectConfig = join(options.cwd, CONFIG_DIR_NAME, \"mcp.json\");\n\tif (command === \"add\" || command === \"remove\") {\n\t\treturn command === \"add\"\n\t\t\t? add(rest, projectConfig, options, log, error)\n\t\t\t: remove(rest, projectConfig, options, log, error);\n\t}\n\tconst projectTrusted = new ProjectTrustStore(options.agentDir).get(options.cwd) === true;\n\tconst loaded = loadMcpConfig({ agentDir: options.agentDir, cwd: options.cwd, projectTrusted });\n\tconst untrustedNote =\n\t\t!projectTrusted && existsSync(projectConfig)\n\t\t\t? `${projectConfig} is ignored because the project is not trusted. Start ${APP_NAME} in the project to trust it.`\n\t\t\t: undefined;\n\tconst credentials = options.credentials ?? new McpOAuthCredentialStore();\n\n\tswitch (command) {\n\t\tcase \"list\": {\n\t\t\tconst parsed = parseOptions(rest, { json: \"flag\" }, error);\n\t\t\tif (!parsed) return 1;\n\t\t\tif (parsed.positional.length > 0) {\n\t\t\t\terror(`Usage: ${APP_NAME} mcp list [--json]\\n${HELP_HINT}`);\n\t\t\t\treturn 1;\n\t\t\t}\n\t\t\treturn list(loaded, parsed.values.has(\"json\"), untrustedNote, options, credentials, log);\n\t\t}\n\t\tcase \"login\":\n\t\tcase \"logout\": {\n\t\t\tconst parsed = parseOptions(rest, command === \"login\" ? { timeout: \"value\" } : {}, error);\n\t\t\tif (!parsed) return 1;\n\t\t\tconst [name, ...extra] = parsed.positional;\n\t\t\tif (!name || extra.length > 0) {\n\t\t\t\terror(`Usage: ${APP_NAME} mcp ${command} <server>\\n${HELP_HINT}`);\n\t\t\t\treturn 1;\n\t\t\t}\n\t\t\tconst entry = loaded.servers.find((server) => server.name === name);\n\t\t\tif (!entry) {\n\t\t\t\terror(\n\t\t\t\t\t`No MCP server named \"${name}\".${untrustedNote ? ` ${untrustedNote}` : \"\"} Configured: ${loaded.servers.map((server) => server.name).join(\", \") || \"none\"}.`,\n\t\t\t\t);\n\t\t\t\treturn 1;\n\t\t\t}\n\t\t\tconst connection = createConnection(entry, options, credentials);\n\t\t\tconst url = connection.oauthUrl;\n\t\t\tif (!url) {\n\t\t\t\terror(`MCP server \"${name}\" does not use OAuth. Only HTTP servers without an Authorization header do.`);\n\t\t\t\treturn 1;\n\t\t\t}\n\t\t\tif (command === \"logout\") {\n\t\t\t\tconst removed = await credentials.removeAsync(name, url);\n\t\t\t\tlog(removed ? `Signed out of MCP server \"${name}\".` : `No stored credentials for MCP server \"${name}\".`);\n\t\t\t\treturn 0;\n\t\t\t}\n\t\t\tconst timeout = Number(parsed.values.get(\"timeout\") ?? DEFAULT_LOGIN_TIMEOUT_SECONDS);\n\t\t\tif (!Number.isFinite(timeout) || timeout <= 0) {\n\t\t\t\terror(\"--timeout must be a positive number of seconds.\");\n\t\t\t\treturn 1;\n\t\t\t}\n\t\t\ttry {\n\t\t\t\treturn await login(entry, connection, url, timeout * 1000, options, credentials, log, error);\n\t\t\t} finally {\n\t\t\t\tawait connection.close();\n\t\t\t}\n\t\t}\n\t\tdefault:\n\t\t\terror(`Unknown mcp command \"${command}\".\\n${HELP_HINT}`);\n\t\t\treturn 1;\n\t}\n}\n\n/** Parse `KEY=VALUE` pairs of a repeatable option into a record. */\nfunction parsePairs(option: string, pairs: string[] | undefined, error: (line: string) => void) {\n\tif (!pairs) return {};\n\tconst record: Record<string, string> = {};\n\tfor (const pair of pairs) {\n\t\tconst separator = pair.indexOf(\"=\");\n\t\tif (separator <= 0) {\n\t\t\terror(`--${option} expects KEY=VALUE, got \"${pair}\".`);\n\t\t\treturn undefined;\n\t\t}\n\t\trecord[pair.slice(0, separator)] = pair.slice(separator + 1);\n\t}\n\treturn record;\n}\n\nfunction add(\n\targs: string[],\n\tprojectConfig: string,\n\toptions: McpCommandOptions,\n\tlog: (line: string) => void,\n\terror: (line: string) => void,\n): number {\n\tconst usage = `Usage: ${APP_NAME} mcp add <server> [options] (--url <url> | -- <command> [args...])\\n${HELP_HINT}`;\n\tconst parsed = parseOptions(\n\t\targs,\n\t\t{\n\t\t\tlocal: \"flag\",\n\t\t\turl: \"value\",\n\t\t\tenv: \"list\",\n\t\t\tcwd: \"value\",\n\t\t\theader: \"list\",\n\t\t\t\"bearer-token-env-var\": \"value\",\n\t\t\t\"oauth-client-id\": \"value\",\n\t\t\t\"oauth-client-secret\": \"value\",\n\t\t\t\"oauth-callback-port\": \"value\",\n\t\t\t\"oauth-client-name\": \"value\",\n\t\t\texposure: \"value\",\n\t\t\tdescription: \"value\",\n\t\t},\n\t\terror,\n\t\t2,\n\t);\n\tif (!parsed) return 1;\n\tconst { positional, values, lists } = parsed;\n\tconst [name, ...command] = positional;\n\tconst url = values.get(\"url\");\n\tif (!name || (url === undefined) === (command.length === 0)) {\n\t\terror(usage);\n\t\treturn 1;\n\t}\n\tconst value = (option: string) => {\n\t\tconst found = values.get(option);\n\t\treturn typeof found === \"string\" ? found : undefined;\n\t};\n\tconst exposure = value(\"exposure\");\n\tconst httpOnly = [\n\t\t\"header\",\n\t\t\"bearer-token-env-var\",\n\t\t\"oauth-client-id\",\n\t\t\"oauth-client-secret\",\n\t\t\"oauth-callback-port\",\n\t\t\"oauth-client-name\",\n\t];\n\tconst stdioOnly = [\"env\", \"cwd\"];\n\tconst misplaced = (url === undefined ? httpOnly : stdioOnly).find(\n\t\t(option) => values.has(option) || lists.has(option),\n\t);\n\tif (misplaced) {\n\t\terror(`--${misplaced} only applies to ${url === undefined ? \"HTTP servers (--url)\" : \"stdio servers\"}.`);\n\t\treturn 1;\n\t}\n\n\tlet config: Record<string, unknown>;\n\tif (typeof url === \"string\") {\n\t\tconst headers = parsePairs(\"header\", lists.get(\"header\"), error);\n\t\tif (!headers) return 1;\n\t\tconst bearer = value(\"bearer-token-env-var\");\n\t\tif (bearer !== undefined) headers.Authorization = `Bearer \\${${bearer}}`;\n\t\tconst port = value(\"oauth-callback-port\");\n\t\tconst oauth = {\n\t\t\t...(value(\"oauth-client-id\") === undefined ? {} : { clientId: value(\"oauth-client-id\") }),\n\t\t\t...(value(\"oauth-client-secret\") === undefined ? {} : { clientSecret: value(\"oauth-client-secret\") }),\n\t\t\t...(port === undefined ? {} : { callbackPort: Number(port) }),\n\t\t\t...(value(\"oauth-client-name\") === undefined ? {} : { clientName: value(\"oauth-client-name\") }),\n\t\t};\n\t\tconfig = {\n\t\t\turl,\n\t\t\t...(Object.keys(headers).length > 0 ? { headers } : {}),\n\t\t\t...(Object.keys(oauth).length > 0 ? { oauth } : {}),\n\t\t};\n\t} else {\n\t\tconst env = parsePairs(\"env\", lists.get(\"env\"), error);\n\t\tif (!env) return 1;\n\t\tconst [executable, ...commandArgs] = command;\n\t\tconfig = {\n\t\t\tcommand: executable,\n\t\t\t...(commandArgs.length > 0 ? { args: commandArgs } : {}),\n\t\t\t...(Object.keys(env).length > 0 ? { env } : {}),\n\t\t\t...(value(\"cwd\") === undefined ? {} : { cwd: value(\"cwd\") }),\n\t\t};\n\t}\n\tif (exposure !== undefined) config.exposure = exposure;\n\tconst description = value(\"description\");\n\tif (description !== undefined) config.description = description;\n\tconst validated = validateMcpServerConfig(name, config);\n\tif (typeof validated === \"string\") {\n\t\terror(validated);\n\t\treturn 1;\n\t}\n\n\tconst project = values.has(\"local\");\n\tconst path = project ? projectConfig : join(options.agentDir, \"mcp.json\");\n\tconst scope = project ? \"project\" : \"global\";\n\tlet replaced: boolean;\n\ttry {\n\t\treplaced = addMcpServerConfig(path, name, validated);\n\t} catch (addError) {\n\t\terror(`Could not update ${path}: ${errorMessage(addError)}`);\n\t\treturn 1;\n\t}\n\tlog(`${replaced ? \"Replaced\" : \"Added\"} ${scope} MCP server \"${name}\" in ${path}.`);\n\tif (project && new ProjectTrustStore(options.agentDir).get(options.cwd) !== true) {\n\t\tlog(`The project is not trusted, so ${path} is ignored until you start ${APP_NAME} in the project and trust it.`);\n\t}\n\t// HTTP servers without an Authorization header may use OAuth.\n\tconst mayNeedSignIn =\n\t\t\"url\" in validated &&\n\t\t!Object.keys(validated.headers ?? {}).some((header) => header.toLowerCase() === \"authorization\");\n\tlog(\n\t\t`Check it with: ${APP_NAME} mcp list${mayNeedSignIn ? `. If it requires sign-in: ${APP_NAME} mcp login ${name}` : \"\"}`,\n\t);\n\treturn 0;\n}\n\nfunction remove(\n\targs: string[],\n\tprojectConfig: string,\n\toptions: McpCommandOptions,\n\tlog: (line: string) => void,\n\terror: (line: string) => void,\n): number {\n\tconst parsed = parseOptions(args, { local: \"flag\" }, error);\n\tif (!parsed) return 1;\n\tconst [name, ...extra] = parsed.positional;\n\tif (!name || extra.length > 0) {\n\t\terror(`Usage: ${APP_NAME} mcp remove <server> [-l]\\n${HELP_HINT}`);\n\t\treturn 1;\n\t}\n\tconst project = parsed.values.has(\"local\");\n\tconst globalConfig = join(options.agentDir, \"mcp.json\");\n\tconst path = project ? projectConfig : globalConfig;\n\tconst scope = project ? \"project\" : \"global\";\n\tlet removed: boolean;\n\ttry {\n\t\tremoved = removeMcpServerConfig(path, name);\n\t} catch (removeError) {\n\t\terror(`Could not update ${path}: ${errorMessage(removeError)}`);\n\t\treturn 1;\n\t}\n\tif (removed) {\n\t\tlog(`Removed ${scope} MCP server \"${name}\" from ${path}.`);\n\t\treturn 0;\n\t}\n\tconst other = loadMcpConfig({ agentDir: options.agentDir, cwd: options.cwd, projectTrusted: true }).servers.find(\n\t\t(server) => server.name === name && server.scope !== scope,\n\t);\n\terror(\n\t\t`No ${scope} MCP server named \"${name}\" in ${path}.${other ? ` It is defined in ${other.source}${other.scope === \"project\" ? \"; use --local\" : \"; omit --local\"}.` : \"\"}`,\n\t);\n\treturn 1;\n}\n\nasync function list(\n\tloaded: LoadedMcpConfig,\n\tjson: boolean,\n\tuntrustedNote: string | undefined,\n\toptions: McpCommandOptions,\n\tcredentials: McpOAuthCredentialStore,\n\tlog: (line: string) => void,\n): Promise<number> {\n\tconst reports = await Promise.all(\n\t\tloaded.servers.map(async (entry): Promise<ServerReport> => {\n\t\t\tconst report: ServerReport = {\n\t\t\t\tname: entry.name,\n\t\t\t\tscope: entry.scope ?? \"global\",\n\t\t\t\tsource: entry.source,\n\t\t\t\tenabled: entry.config.enabled !== false,\n\t\t\t\texposure: entry.config.exposure ?? \"codemode\",\n\t\t\t\ttransport: describeTransport(entry),\n\t\t\t\tstate: \"disabled\",\n\t\t\t\ttools: [],\n\t\t\t};\n\t\t\tif (!report.enabled) return report;\n\t\t\tconst connection = createConnection(entry, options, credentials);\n\t\t\ttry {\n\t\t\t\tawait connection.getClient();\n\t\t\t} catch {\n\t\t\t\t// The connection records the state and error.\n\t\t\t}\n\t\t\treport.state = connection.state;\n\t\t\treport.tools = connection.tools.map((tool) => tool.name);\n\t\t\tconst overrides = connection.tools.flatMap((tool) => {\n\t\t\t\tconst exposure = getMcpToolExposure(entry.config, tool.name);\n\t\t\t\treturn exposure === report.exposure ? [] : [[tool.name, exposure] as const];\n\t\t\t});\n\t\t\tif (overrides.length > 0) report.toolExposure = Object.fromEntries(overrides);\n\t\t\tif (connection.hasResources) {\n\t\t\t\treport.resources = connection.resources.length;\n\t\t\t\treport.resourceTemplates = connection.resourceTemplates.length;\n\t\t\t}\n\t\t\tif (connection.state !== \"connected\" && connection.error) report.error = connection.error;\n\t\t\tawait connection.close();\n\t\t\treturn report;\n\t\t}),\n\t);\n\tconst failed = loaded.errors.length > 0 || reports.some((report) => report.enabled && report.state !== \"connected\");\n\n\tif (json) {\n\t\tlog(\n\t\t\tJSON.stringify(\n\t\t\t\t{ servers: reports, errors: loaded.errors, ...(untrustedNote ? { note: untrustedNote } : {}) },\n\t\t\t\tnull,\n\t\t\t\t2,\n\t\t\t),\n\t\t);\n\t\treturn failed ? 1 : 0;\n\t}\n\tif (reports.length === 0 && loaded.errors.length === 0) {\n\t\tlog(`No MCP servers configured. Add them to ${join(options.agentDir, \"mcp.json\")} or .pi/mcp.json.`);\n\t}\n\tfor (const report of reports) {\n\t\tconst state =\n\t\t\treport.state === \"connected\"\n\t\t\t\t? `connected, ${report.tools.length} tool${report.tools.length === 1 ? \"\" : \"s\"}`\n\t\t\t\t: report.state === \"needs-auth\"\n\t\t\t\t\t? \"needs sign-in\"\n\t\t\t\t\t: report.state;\n\t\tlog(`${report.name}: ${state} (${report.exposure}, ${report.scope})`);\n\t\tlog(` ${report.transport}`);\n\t\tif (report.state === \"needs-auth\") log(` sign in with: ${APP_NAME} mcp login ${report.name}`);\n\t\tif (report.tools.length > 0) {\n\t\t\tconst tools = report.tools.map((tool) => {\n\t\t\t\tconst exposure = report.toolExposure?.[tool];\n\t\t\t\treturn exposure ? `${tool} [${exposure}]` : tool;\n\t\t\t});\n\t\t\tlog(` tools: ${tools.join(\", \")}`);\n\t\t}\n\t\tif (report.resources !== undefined) {\n\t\t\tlog(` resources: ${report.resources}, URI templates: ${report.resourceTemplates ?? 0}`);\n\t\t}\n\t\tif (report.error) log(` ${report.error.split(\"\\n\").join(\"\\n \")}`);\n\t}\n\tfor (const configError of loaded.errors) log(`config error: ${configError}`);\n\tif (untrustedNote) log(untrustedNote);\n\treturn failed ? 1 : 0;\n}\n\nasync function login(\n\tentry: McpServerEntry,\n\tconnection: McpServerConnection,\n\turl: string,\n\ttimeoutMs: number,\n\toptions: McpCommandOptions,\n\tcredentials: McpOAuthCredentialStore,\n\tlog: (line: string) => void,\n\terror: (line: string) => void,\n): Promise<number> {\n\tconst { name } = entry;\n\t// Connecting first answers whether a sign-in is needed and records the server's challenge.\n\ttry {\n\t\tawait connection.getClient();\n\t\tlog(`Already signed in to MCP server \"${name}\" (${connection.tools.length} tools).`);\n\t\treturn 0;\n\t} catch {\n\t\tif (connection.state !== \"needs-auth\") {\n\t\t\terror(`MCP server \"${name}\" failed to connect: ${connection.error ?? \"unknown error\"}`);\n\t\t\treturn 1;\n\t\t}\n\t}\n\n\tconst openUrl = options.openUrl ?? openBrowser;\n\tconst interactive = process.stdin.isTTY === true && options.openUrl === undefined;\n\ttry {\n\t\tawait signInMcpServer({\n\t\t\tserverUrl: url,\n\t\t\tstore: credentials.forServer(name, url),\n\t\t\tsettings: connection.oauthSettings(),\n\t\t\tchallenge: connection.challenge,\n\t\t\tprompt: {\n\t\t\t\tshowAuthorizationUrl: (authorizationUrl) => {\n\t\t\t\t\tlog(`Sign in to MCP server \"${name}\" in your browser:\\n${authorizationUrl.href}`);\n\t\t\t\t\topenUrl(authorizationUrl.href);\n\t\t\t\t},\n\t\t\t\tpromptForRedirectUrl: (signal) => waitForRedirectUrl(signal, timeoutMs, interactive),\n\t\t\t},\n\t\t});\n\t} catch (signInError) {\n\t\terror(\n\t\t\tsignInError instanceof McpSignInCancelledError\n\t\t\t\t? `Sign-in to MCP server \"${name}\" was cancelled or not completed within ${Math.round(timeoutMs / 1000)} seconds.`\n\t\t\t\t: `Sign-in to MCP server \"${name}\" failed: ${errorMessage(signInError)}`,\n\t\t);\n\t\treturn 1;\n\t}\n\tconnection.challenge = undefined;\n\ttry {\n\t\tawait connection.reconnect();\n\t} catch (connectError) {\n\t\terror(`Signed in, but ${errorMessage(connectError)}`);\n\t\treturn 1;\n\t}\n\tlog(`Signed in to MCP server \"${name}\" (${connection.tools.length} tools).`);\n\treturn 0;\n}\n\n/**\n * The pasted redirect URL in a terminal; otherwise only the browser callback can finish the sign-in.\n * Resolves to undefined (cancelling the sign-in) after `timeoutMs`, or when the callback arrived.\n */\nasync function waitForRedirectUrl(\n\tsignal: AbortSignal,\n\ttimeoutMs: number,\n\tinteractive: boolean,\n): Promise<string | undefined> {\n\tconst controller = new AbortController();\n\tconst abort = () => controller.abort();\n\tsignal.addEventListener(\"abort\", abort, { once: true });\n\tconst timer = setTimeout(abort, timeoutMs);\n\ttry {\n\t\tif (!interactive) {\n\t\t\tawait new Promise<void>((resolve) =>\n\t\t\t\tcontroller.signal.addEventListener(\"abort\", () => resolve(), { once: true }),\n\t\t\t);\n\t\t\treturn undefined;\n\t\t}\n\t\tconst readline = createInterface({ input: process.stdin, output: process.stderr });\n\t\ttry {\n\t\t\treturn await readline.question(\n\t\t\t\t\"If the browser cannot reach this machine, paste the URL it was redirected to: \",\n\t\t\t\t{ signal: controller.signal },\n\t\t\t);\n\t\t} catch {\n\t\t\treturn undefined;\n\t\t} finally {\n\t\t\treadline.close();\n\t\t}\n\t} finally {\n\t\tclearTimeout(timer);\n\t\tsignal.removeEventListener(\"abort\", abort);\n\t}\n}\n"]}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../../../src/extensions/mcp/cli.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * `pi mcp`: add, remove, and check MCP servers and sign in to them outside a session. Agents run it\n * through bash to configure servers, verify an `mcp.json` they wrote, and start an OAuth sign-in;\n * the user only approves access in the browser. Running sessions pick up new credentials on their\n * next turn.\n */\n\nimport { existsSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport { createInterface } from \"node:readline/promises\";\nimport chalk from \"chalk\";\nimport { APP_NAME, CONFIG_DIR_NAME } from \"../../config.js\";\nimport { validateMcpServerConfig } from \"../../core/mcp-servers.ts\";\nimport { ProjectTrustStore } from \"../../core/trust-manager.ts\";\nimport { openBrowser } from \"../../utils/open-browser.ts\";\nimport {\n\taddMcpServerConfig,\n\tgetMcpToolExposure,\n\ttype LoadedMcpConfig,\n\tloadMcpConfig,\n\ttype McpServerEntry,\n\tremoveMcpServerConfig,\n} from \"./config.ts\";\nimport {\n\tcreateDefaultTransport,\n\tMcpOAuthCredentialStore,\n\tMcpServerConnection,\n\tMcpServerLog,\n\tMcpSignInCancelledError,\n\tsignInMcpServer,\n} from \"./runtime.ts\";\n\nconst HELP = `${chalk.bold(\"Usage:\")}\n ${APP_NAME} mcp add <server> [options] -- <command> [args...]\n ${APP_NAME} mcp add <server> [options] --url <url>\n ${APP_NAME} mcp remove <server> [-l]\n ${APP_NAME} mcp list [--json]\n ${APP_NAME} mcp login <server> [--timeout <seconds>]\n ${APP_NAME} mcp logout <server>\n\nConfigure and check MCP servers and sign in to OAuth servers without starting a session.\nReads ~/${CONFIG_DIR_NAME}/agent/mcp.json and, in trusted projects, ${CONFIG_DIR_NAME}/mcp.json.\n\nCommands:\n add <server> Add or replace a server in mcp.json\n remove <server> Remove a server from mcp.json\n list Show state, tools, and errors (exits 1 on failure)\n login <server> Sign in through the browser\n logout <server> Delete the stored OAuth credentials\n\nOptions for add and remove:\n -l, --local Use ${CONFIG_DIR_NAME}/mcp.json in the current project instead of the global file\n\nOptions for add:\n --url <url> Streamable HTTP server URL (instead of a command)\n --env <KEY=VALUE> Environment variable for a stdio server (repeatable)\n --cwd <dir> Working directory for a stdio server\n --header <KEY=VALUE> HTTP header (repeatable)\n --bearer-token-env-var <NAME>\n Send \"Authorization: Bearer \\${NAME}\"\n --oauth-client-id <id> Pre-registered OAuth client id\n --oauth-client-secret <secret>\n OAuth client secret (may be \\${NAME} or !command)\n --oauth-callback-port <port>\n Fixed OAuth callback port\n --oauth-client-name <name>\n Client name sent when registering with the OAuth server\n --exposure <mode> codemode (default), deferred, direct, or hidden\n --description <text> What the server offers, shown in the system prompt\n\nOther options:\n --json Print the list as JSON\n --timeout <seconds> How long login waits for the browser (default: 300)`;\n\nconst HELP_HINT = chalk.dim(`Use \"${APP_NAME} mcp --help\" for usage.`);\n\nconst DEFAULT_LOGIN_TIMEOUT_SECONDS = 300;\n\nexport interface McpCommandOptions {\n\tcwd: string;\n\tagentDir: string;\n\t/** Defaults to `mcp-auth.json` in the agent directory. */\n\tcredentials?: McpOAuthCredentialStore;\n\t/** Defaults to the platform browser. */\n\topenUrl?: (url: string) => void;\n\t/** Defaults to console output. */\n\tlog?: (line: string) => void;\n\terror?: (line: string) => void;\n}\n\ninterface ServerReport {\n\tname: string;\n\tscope: string;\n\tsource: string;\n\t/** Project `mcp.json` that overrides `enabled`, `exposure`, or `toolExposure` of this global server. */\n\toverride?: string;\n\tenabled: boolean;\n\texposure: string;\n\ttransport: string;\n\tstate: string;\n\ttools: string[];\n\t/** Tools whose exposure differs from the server's, from `toolExposure`. */\n\ttoolExposure?: Record<string, string>;\n\tresources?: number;\n\tresourceTemplates?: number;\n\terror?: string;\n}\n\nfunction errorMessage(error: unknown): string {\n\treturn error instanceof Error ? error.message : String(error);\n}\n\nfunction describeTransport(entry: McpServerEntry): string {\n\tconst { config } = entry;\n\treturn \"url\" in config ? config.url : [config.command, ...(config.args ?? [])].join(\" \");\n}\n\nfunction createConnection(entry: McpServerEntry, options: McpCommandOptions, credentials: McpOAuthCredentialStore) {\n\treturn new McpServerConnection({\n\t\tentry,\n\t\tcwd: options.cwd,\n\t\tcreateTransport: createDefaultTransport,\n\t\tcredentials,\n\t\tlog: new McpServerLog(join(options.agentDir, \"mcp.log\")),\n\t\tonTools: () => {},\n\t});\n}\n\n/** Short spellings of options. `-l`/`--local` match `pi install`. */\nconst OPTION_ALIASES = new Map([[\"-l\", \"--local\"]]);\n\ninterface ParsedOptions {\n\tpositional: string[];\n\tvalues: Map<string, string | true>;\n\t/** Values of `list` options, in order. */\n\tlists: Map<string, string[]>;\n}\n\n/**\n * Parse `--name value` options; returns undefined and reports unknown ones. `--` ends the options,\n * as does reaching `maxPositionals` positional arguments: the remaining arguments are positional,\n * so a command's own options (`add <server> <command> --flag`) are passed through.\n */\nfunction parseOptions(\n\targs: string[],\n\tknown: Record<string, \"flag\" | \"value\" | \"list\">,\n\terror: (line: string) => void,\n\tmaxPositionals = Number.POSITIVE_INFINITY,\n): ParsedOptions | undefined {\n\tconst positional: string[] = [];\n\tconst values = new Map<string, string | true>();\n\tconst lists = new Map<string, string[]>();\n\tfor (let index = 0; index < args.length; index++) {\n\t\tconst arg = OPTION_ALIASES.get(args[index]) ?? args[index];\n\t\tif (arg === \"--\" || positional.length >= maxPositionals) {\n\t\t\tpositional.push(...args.slice(arg === \"--\" ? index + 1 : index));\n\t\t\tbreak;\n\t\t}\n\t\tif (!arg.startsWith(\"--\")) {\n\t\t\tpositional.push(arg);\n\t\t\tcontinue;\n\t\t}\n\t\tconst name = arg.slice(2);\n\t\tconst kind = known[name];\n\t\tif (!kind) {\n\t\t\terror(`Unknown option ${arg}.\\n${HELP_HINT}`);\n\t\t\treturn undefined;\n\t\t}\n\t\tif (kind === \"flag\") {\n\t\t\tvalues.set(name, true);\n\t\t\tcontinue;\n\t\t}\n\t\tconst value = args[++index];\n\t\tif (value === undefined) {\n\t\t\terror(`${arg} needs a value.`);\n\t\t\treturn undefined;\n\t\t}\n\t\tif (kind === \"list\") lists.set(name, [...(lists.get(name) ?? []), value]);\n\t\telse values.set(name, value);\n\t}\n\treturn { positional, values, lists };\n}\n\n/** Run `pi mcp <args>` and return the exit code. */\nexport async function runMcpCommand(args: string[], options: McpCommandOptions): Promise<number> {\n\tconst log = options.log ?? ((line: string) => console.log(line));\n\tconst error = options.error ?? ((line: string) => console.error(line));\n\tconst [command, ...rest] = args;\n\tif (command === undefined || command === \"help\" || args.includes(\"--help\") || args.includes(\"-h\")) {\n\t\tlog(HELP);\n\t\treturn 0;\n\t}\n\n\tconst projectConfig = join(options.cwd, CONFIG_DIR_NAME, \"mcp.json\");\n\tif (command === \"add\" || command === \"remove\") {\n\t\treturn command === \"add\"\n\t\t\t? add(rest, projectConfig, options, log, error)\n\t\t\t: remove(rest, projectConfig, options, log, error);\n\t}\n\tconst projectTrusted = new ProjectTrustStore(options.agentDir).get(options.cwd) === true;\n\tconst loaded = loadMcpConfig({ agentDir: options.agentDir, cwd: options.cwd, projectTrusted });\n\tconst untrustedNote =\n\t\t!projectTrusted && existsSync(projectConfig)\n\t\t\t? `${projectConfig} is ignored because the project is not trusted. Start ${APP_NAME} in the project to trust it.`\n\t\t\t: undefined;\n\tconst credentials = options.credentials ?? new McpOAuthCredentialStore();\n\n\tswitch (command) {\n\t\tcase \"list\": {\n\t\t\tconst parsed = parseOptions(rest, { json: \"flag\" }, error);\n\t\t\tif (!parsed) return 1;\n\t\t\tif (parsed.positional.length > 0) {\n\t\t\t\terror(`Usage: ${APP_NAME} mcp list [--json]\\n${HELP_HINT}`);\n\t\t\t\treturn 1;\n\t\t\t}\n\t\t\treturn list(loaded, parsed.values.has(\"json\"), untrustedNote, options, credentials, log);\n\t\t}\n\t\tcase \"login\":\n\t\tcase \"logout\": {\n\t\t\tconst parsed = parseOptions(rest, command === \"login\" ? { timeout: \"value\" } : {}, error);\n\t\t\tif (!parsed) return 1;\n\t\t\tconst [name, ...extra] = parsed.positional;\n\t\t\tif (!name || extra.length > 0) {\n\t\t\t\terror(`Usage: ${APP_NAME} mcp ${command} <server>\\n${HELP_HINT}`);\n\t\t\t\treturn 1;\n\t\t\t}\n\t\t\tconst entry = loaded.servers.find((server) => server.name === name);\n\t\t\tif (!entry) {\n\t\t\t\terror(\n\t\t\t\t\t`No MCP server named \"${name}\".${untrustedNote ? ` ${untrustedNote}` : \"\"} Configured: ${loaded.servers.map((server) => server.name).join(\", \") || \"none\"}.`,\n\t\t\t\t);\n\t\t\t\treturn 1;\n\t\t\t}\n\t\t\tconst connection = createConnection(entry, options, credentials);\n\t\t\tconst url = connection.oauthUrl;\n\t\t\tif (!url) {\n\t\t\t\terror(`MCP server \"${name}\" does not use OAuth. Only HTTP servers without an Authorization header do.`);\n\t\t\t\treturn 1;\n\t\t\t}\n\t\t\tif (command === \"logout\") {\n\t\t\t\tconst removed = await credentials.removeAsync(name, url);\n\t\t\t\tlog(removed ? `Signed out of MCP server \"${name}\".` : `No stored credentials for MCP server \"${name}\".`);\n\t\t\t\treturn 0;\n\t\t\t}\n\t\t\tconst timeout = Number(parsed.values.get(\"timeout\") ?? DEFAULT_LOGIN_TIMEOUT_SECONDS);\n\t\t\tif (!Number.isFinite(timeout) || timeout <= 0) {\n\t\t\t\terror(\"--timeout must be a positive number of seconds.\");\n\t\t\t\treturn 1;\n\t\t\t}\n\t\t\ttry {\n\t\t\t\treturn await login(entry, connection, url, timeout * 1000, options, credentials, log, error);\n\t\t\t} finally {\n\t\t\t\tawait connection.close();\n\t\t\t}\n\t\t}\n\t\tdefault:\n\t\t\terror(`Unknown mcp command \"${command}\".\\n${HELP_HINT}`);\n\t\t\treturn 1;\n\t}\n}\n\n/** Parse `KEY=VALUE` pairs of a repeatable option into a record. */\nfunction parsePairs(option: string, pairs: string[] | undefined, error: (line: string) => void) {\n\tif (!pairs) return {};\n\tconst record: Record<string, string> = {};\n\tfor (const pair of pairs) {\n\t\tconst separator = pair.indexOf(\"=\");\n\t\tif (separator <= 0) {\n\t\t\terror(`--${option} expects KEY=VALUE, got \"${pair}\".`);\n\t\t\treturn undefined;\n\t\t}\n\t\trecord[pair.slice(0, separator)] = pair.slice(separator + 1);\n\t}\n\treturn record;\n}\n\nfunction add(\n\targs: string[],\n\tprojectConfig: string,\n\toptions: McpCommandOptions,\n\tlog: (line: string) => void,\n\terror: (line: string) => void,\n): number {\n\tconst usage = `Usage: ${APP_NAME} mcp add <server> [options] (--url <url> | -- <command> [args...])\\n${HELP_HINT}`;\n\tconst parsed = parseOptions(\n\t\targs,\n\t\t{\n\t\t\tlocal: \"flag\",\n\t\t\turl: \"value\",\n\t\t\tenv: \"list\",\n\t\t\tcwd: \"value\",\n\t\t\theader: \"list\",\n\t\t\t\"bearer-token-env-var\": \"value\",\n\t\t\t\"oauth-client-id\": \"value\",\n\t\t\t\"oauth-client-secret\": \"value\",\n\t\t\t\"oauth-callback-port\": \"value\",\n\t\t\t\"oauth-client-name\": \"value\",\n\t\t\texposure: \"value\",\n\t\t\tdescription: \"value\",\n\t\t},\n\t\terror,\n\t\t2,\n\t);\n\tif (!parsed) return 1;\n\tconst { positional, values, lists } = parsed;\n\tconst [name, ...command] = positional;\n\tconst url = values.get(\"url\");\n\tif (!name || (url === undefined) === (command.length === 0)) {\n\t\terror(usage);\n\t\treturn 1;\n\t}\n\tconst value = (option: string) => {\n\t\tconst found = values.get(option);\n\t\treturn typeof found === \"string\" ? found : undefined;\n\t};\n\tconst exposure = value(\"exposure\");\n\tconst httpOnly = [\n\t\t\"header\",\n\t\t\"bearer-token-env-var\",\n\t\t\"oauth-client-id\",\n\t\t\"oauth-client-secret\",\n\t\t\"oauth-callback-port\",\n\t\t\"oauth-client-name\",\n\t];\n\tconst stdioOnly = [\"env\", \"cwd\"];\n\tconst misplaced = (url === undefined ? httpOnly : stdioOnly).find(\n\t\t(option) => values.has(option) || lists.has(option),\n\t);\n\tif (misplaced) {\n\t\terror(`--${misplaced} only applies to ${url === undefined ? \"HTTP servers (--url)\" : \"stdio servers\"}.`);\n\t\treturn 1;\n\t}\n\n\tlet config: Record<string, unknown>;\n\tif (typeof url === \"string\") {\n\t\tconst headers = parsePairs(\"header\", lists.get(\"header\"), error);\n\t\tif (!headers) return 1;\n\t\tconst bearer = value(\"bearer-token-env-var\");\n\t\tif (bearer !== undefined) headers.Authorization = `Bearer \\${${bearer}}`;\n\t\tconst port = value(\"oauth-callback-port\");\n\t\tconst oauth = {\n\t\t\t...(value(\"oauth-client-id\") === undefined ? {} : { clientId: value(\"oauth-client-id\") }),\n\t\t\t...(value(\"oauth-client-secret\") === undefined ? {} : { clientSecret: value(\"oauth-client-secret\") }),\n\t\t\t...(port === undefined ? {} : { callbackPort: Number(port) }),\n\t\t\t...(value(\"oauth-client-name\") === undefined ? {} : { clientName: value(\"oauth-client-name\") }),\n\t\t};\n\t\tconfig = {\n\t\t\turl,\n\t\t\t...(Object.keys(headers).length > 0 ? { headers } : {}),\n\t\t\t...(Object.keys(oauth).length > 0 ? { oauth } : {}),\n\t\t};\n\t} else {\n\t\tconst env = parsePairs(\"env\", lists.get(\"env\"), error);\n\t\tif (!env) return 1;\n\t\tconst [executable, ...commandArgs] = command;\n\t\tconfig = {\n\t\t\tcommand: executable,\n\t\t\t...(commandArgs.length > 0 ? { args: commandArgs } : {}),\n\t\t\t...(Object.keys(env).length > 0 ? { env } : {}),\n\t\t\t...(value(\"cwd\") === undefined ? {} : { cwd: value(\"cwd\") }),\n\t\t};\n\t}\n\tif (exposure !== undefined) config.exposure = exposure;\n\tconst description = value(\"description\");\n\tif (description !== undefined) config.description = description;\n\tconst validated = validateMcpServerConfig(name, config);\n\tif (typeof validated === \"string\") {\n\t\terror(validated);\n\t\treturn 1;\n\t}\n\n\tconst project = values.has(\"local\");\n\tconst path = project ? projectConfig : join(options.agentDir, \"mcp.json\");\n\tconst scope = project ? \"project\" : \"global\";\n\tlet replaced: boolean;\n\ttry {\n\t\treplaced = addMcpServerConfig(path, name, validated);\n\t} catch (addError) {\n\t\terror(`Could not update ${path}: ${errorMessage(addError)}`);\n\t\treturn 1;\n\t}\n\tlog(`${replaced ? \"Replaced\" : \"Added\"} ${scope} MCP server \"${name}\" in ${path}.`);\n\tif (project && new ProjectTrustStore(options.agentDir).get(options.cwd) !== true) {\n\t\tlog(`The project is not trusted, so ${path} is ignored until you start ${APP_NAME} in the project and trust it.`);\n\t}\n\t// HTTP servers without an Authorization header may use OAuth.\n\tconst mayNeedSignIn =\n\t\t\"url\" in validated &&\n\t\t!Object.keys(validated.headers ?? {}).some((header) => header.toLowerCase() === \"authorization\");\n\tlog(\n\t\t`Check it with: ${APP_NAME} mcp list${mayNeedSignIn ? `. If it requires sign-in: ${APP_NAME} mcp login ${name}` : \"\"}`,\n\t);\n\treturn 0;\n}\n\nfunction remove(\n\targs: string[],\n\tprojectConfig: string,\n\toptions: McpCommandOptions,\n\tlog: (line: string) => void,\n\terror: (line: string) => void,\n): number {\n\tconst parsed = parseOptions(args, { local: \"flag\" }, error);\n\tif (!parsed) return 1;\n\tconst [name, ...extra] = parsed.positional;\n\tif (!name || extra.length > 0) {\n\t\terror(`Usage: ${APP_NAME} mcp remove <server> [-l]\\n${HELP_HINT}`);\n\t\treturn 1;\n\t}\n\tconst project = parsed.values.has(\"local\");\n\tconst globalConfig = join(options.agentDir, \"mcp.json\");\n\tconst path = project ? projectConfig : globalConfig;\n\tconst scope = project ? \"project\" : \"global\";\n\tlet removed: boolean;\n\ttry {\n\t\tremoved = removeMcpServerConfig(path, name);\n\t} catch (removeError) {\n\t\terror(`Could not update ${path}: ${errorMessage(removeError)}`);\n\t\treturn 1;\n\t}\n\tif (removed) {\n\t\tlog(`Removed ${scope} MCP server \"${name}\" from ${path}.`);\n\t\treturn 0;\n\t}\n\tconst other = loadMcpConfig({ agentDir: options.agentDir, cwd: options.cwd, projectTrusted: true }).servers.find(\n\t\t(server) => server.name === name && server.scope !== scope,\n\t);\n\terror(\n\t\t`No ${scope} MCP server named \"${name}\" in ${path}.${other ? ` It is defined in ${other.source}${other.scope === \"project\" ? \"; use --local\" : \"; omit --local\"}.` : \"\"}`,\n\t);\n\treturn 1;\n}\n\nasync function list(\n\tloaded: LoadedMcpConfig,\n\tjson: boolean,\n\tuntrustedNote: string | undefined,\n\toptions: McpCommandOptions,\n\tcredentials: McpOAuthCredentialStore,\n\tlog: (line: string) => void,\n): Promise<number> {\n\tconst reports = await Promise.all(\n\t\tloaded.servers.map(async (entry): Promise<ServerReport> => {\n\t\t\tconst report: ServerReport = {\n\t\t\t\tname: entry.name,\n\t\t\t\tscope: entry.scope ?? \"global\",\n\t\t\t\tsource: entry.source,\n\t\t\t\t...(entry.override ? { override: entry.override } : {}),\n\t\t\t\tenabled: entry.config.enabled !== false,\n\t\t\t\texposure: entry.config.exposure ?? \"codemode\",\n\t\t\t\ttransport: describeTransport(entry),\n\t\t\t\tstate: \"disabled\",\n\t\t\t\ttools: [],\n\t\t\t};\n\t\t\tif (!report.enabled) return report;\n\t\t\tconst connection = createConnection(entry, options, credentials);\n\t\t\ttry {\n\t\t\t\tawait connection.getClient();\n\t\t\t} catch {\n\t\t\t\t// The connection records the state and error.\n\t\t\t}\n\t\t\treport.state = connection.state;\n\t\t\treport.tools = connection.tools.map((tool) => tool.name);\n\t\t\tconst overrides = connection.tools.flatMap((tool) => {\n\t\t\t\tconst exposure = getMcpToolExposure(entry.config, tool.name);\n\t\t\t\treturn exposure === report.exposure ? [] : [[tool.name, exposure] as const];\n\t\t\t});\n\t\t\tif (overrides.length > 0) report.toolExposure = Object.fromEntries(overrides);\n\t\t\tif (connection.hasResources) {\n\t\t\t\treport.resources = connection.resources.length;\n\t\t\t\treport.resourceTemplates = connection.resourceTemplates.length;\n\t\t\t}\n\t\t\tif (connection.state !== \"connected\" && connection.error) report.error = connection.error;\n\t\t\tawait connection.close();\n\t\t\treturn report;\n\t\t}),\n\t);\n\tconst failed = loaded.errors.length > 0 || reports.some((report) => report.enabled && report.state !== \"connected\");\n\n\tif (json) {\n\t\tlog(\n\t\t\tJSON.stringify(\n\t\t\t\t{ servers: reports, errors: loaded.errors, ...(untrustedNote ? { note: untrustedNote } : {}) },\n\t\t\t\tnull,\n\t\t\t\t2,\n\t\t\t),\n\t\t);\n\t\treturn failed ? 1 : 0;\n\t}\n\tif (reports.length === 0 && loaded.errors.length === 0) {\n\t\tlog(\n\t\t\t`No MCP servers configured. Add them to ${join(options.agentDir, \"mcp.json\")} or ${CONFIG_DIR_NAME}/mcp.json.`,\n\t\t);\n\t}\n\tfor (const report of reports) {\n\t\tconst state =\n\t\t\treport.state === \"connected\"\n\t\t\t\t? `connected, ${report.tools.length} tool${report.tools.length === 1 ? \"\" : \"s\"}`\n\t\t\t\t: report.state === \"needs-auth\"\n\t\t\t\t\t? \"needs sign-in\"\n\t\t\t\t\t: report.state;\n\t\tlog(`${report.name}: ${state} (${report.exposure}, ${report.scope})`);\n\t\tlog(` ${report.transport}`);\n\t\tif (report.override) log(` project override: ${report.override}`);\n\t\tif (report.state === \"needs-auth\") log(` sign in with: ${APP_NAME} mcp login ${report.name}`);\n\t\tif (report.tools.length > 0) {\n\t\t\tconst tools = report.tools.map((tool) => {\n\t\t\t\tconst exposure = report.toolExposure?.[tool];\n\t\t\t\treturn exposure ? `${tool} [${exposure}]` : tool;\n\t\t\t});\n\t\t\tlog(` tools: ${tools.join(\", \")}`);\n\t\t}\n\t\tif (report.resources !== undefined) {\n\t\t\tlog(` resources: ${report.resources}, URI templates: ${report.resourceTemplates ?? 0}`);\n\t\t}\n\t\tif (report.error) log(` ${report.error.split(\"\\n\").join(\"\\n \")}`);\n\t}\n\tfor (const configError of loaded.errors) log(`config error: ${configError}`);\n\tif (untrustedNote) log(untrustedNote);\n\treturn failed ? 1 : 0;\n}\n\nasync function login(\n\tentry: McpServerEntry,\n\tconnection: McpServerConnection,\n\turl: string,\n\ttimeoutMs: number,\n\toptions: McpCommandOptions,\n\tcredentials: McpOAuthCredentialStore,\n\tlog: (line: string) => void,\n\terror: (line: string) => void,\n): Promise<number> {\n\tconst { name } = entry;\n\t// Connecting first answers whether a sign-in is needed and records the server's challenge.\n\ttry {\n\t\tawait connection.getClient();\n\t\tlog(`Already signed in to MCP server \"${name}\" (${connection.tools.length} tools).`);\n\t\treturn 0;\n\t} catch {\n\t\tif (connection.state !== \"needs-auth\") {\n\t\t\terror(`MCP server \"${name}\" failed to connect: ${connection.error ?? \"unknown error\"}`);\n\t\t\treturn 1;\n\t\t}\n\t}\n\n\tconst openUrl = options.openUrl ?? openBrowser;\n\tconst interactive = process.stdin.isTTY === true && options.openUrl === undefined;\n\ttry {\n\t\tawait signInMcpServer({\n\t\t\tserverUrl: url,\n\t\t\tstore: credentials.forServer(name, url),\n\t\t\tsettings: connection.oauthSettings(),\n\t\t\tchallenge: connection.challenge,\n\t\t\tprompt: {\n\t\t\t\tshowAuthorizationUrl: (authorizationUrl) => {\n\t\t\t\t\tlog(`Sign in to MCP server \"${name}\" in your browser:\\n${authorizationUrl.href}`);\n\t\t\t\t\topenUrl(authorizationUrl.href);\n\t\t\t\t},\n\t\t\t\tpromptForRedirectUrl: (signal) => waitForRedirectUrl(signal, timeoutMs, interactive),\n\t\t\t},\n\t\t});\n\t} catch (signInError) {\n\t\terror(\n\t\t\tsignInError instanceof McpSignInCancelledError\n\t\t\t\t? `Sign-in to MCP server \"${name}\" was cancelled or not completed within ${Math.round(timeoutMs / 1000)} seconds.`\n\t\t\t\t: `Sign-in to MCP server \"${name}\" failed: ${errorMessage(signInError)}`,\n\t\t);\n\t\treturn 1;\n\t}\n\tconnection.challenge = undefined;\n\ttry {\n\t\tawait connection.reconnect();\n\t} catch (connectError) {\n\t\terror(`Signed in, but ${errorMessage(connectError)}`);\n\t\treturn 1;\n\t}\n\tlog(`Signed in to MCP server \"${name}\" (${connection.tools.length} tools).`);\n\treturn 0;\n}\n\n/**\n * The pasted redirect URL in a terminal; otherwise only the browser callback can finish the sign-in.\n * Resolves to undefined (cancelling the sign-in) after `timeoutMs`, or when the callback arrived.\n */\nasync function waitForRedirectUrl(\n\tsignal: AbortSignal,\n\ttimeoutMs: number,\n\tinteractive: boolean,\n): Promise<string | undefined> {\n\tconst controller = new AbortController();\n\tconst abort = () => controller.abort();\n\tsignal.addEventListener(\"abort\", abort, { once: true });\n\tconst timer = setTimeout(abort, timeoutMs);\n\ttry {\n\t\tif (!interactive) {\n\t\t\tawait new Promise<void>((resolve) =>\n\t\t\t\tcontroller.signal.addEventListener(\"abort\", () => resolve(), { once: true }),\n\t\t\t);\n\t\t\treturn undefined;\n\t\t}\n\t\tconst readline = createInterface({ input: process.stdin, output: process.stderr });\n\t\ttry {\n\t\t\treturn await readline.question(\n\t\t\t\t\"If the browser cannot reach this machine, paste the URL it was redirected to: \",\n\t\t\t\t{ signal: controller.signal },\n\t\t\t);\n\t\t} catch {\n\t\t\treturn undefined;\n\t\t} finally {\n\t\t\treadline.close();\n\t\t}\n\t} finally {\n\t\tclearTimeout(timer);\n\t\tsignal.removeEventListener(\"abort\", abort);\n\t}\n}\n"]}
@@ -21,6 +21,8 @@ export interface OAuthCallbackServerOptions {
21
21
  redirectHost?: string;
22
22
  port?: number;
23
23
  path?: string;
24
+ /** Additional callback paths, for server-specific redirect URIs. */
25
+ extraPaths?: string[];
24
26
  timeoutMs?: number;
25
27
  /** Render the browser page as HTML. Default: a plain-text message. */
26
28
  renderPage?: (page: OAuthCallbackPage) => string;
@@ -28,13 +30,13 @@ export interface OAuthCallbackServerOptions {
28
30
  export declare class OAuthCallbackServer {
29
31
  readonly redirectUrl: string;
30
32
  private server;
31
- private path;
33
+ private paths;
32
34
  private timeoutMs;
33
35
  private renderPage;
34
36
  private pending;
35
37
  private constructor();
36
38
  static listen(options?: OAuthCallbackServerOptions): Promise<OAuthCallbackServer>;
37
- waitForCallback(state: string): Promise<OAuthCallback>;
39
+ waitForCallback(state: string, path?: string): Promise<OAuthCallback>;
38
40
  close(): Promise<void>;
39
41
  private reply;
40
42
  private handle;
@@ -1 +1 @@
1
- {"version":3,"file":"callback.d.ts","sourceRoot":"","sources":["../../../../../src/extensions/mcp/client/oauth/callback.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,aAAa;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;CACb;AAED,4DAA4D;AAC5D,MAAM,MAAM,iBAAiB,GAAG;IAAE,EAAE,EAAE,IAAI,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAEhG,MAAM,WAAW,0BAA0B;IAC1C,kDAAkD;IAClD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,sEAAsE;IACtE,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,iBAAiB,KAAK,MAAM,CAAC;CACjD;AAOD,qBAAa,mBAAmB;IAC/B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,IAAI,CAAS;IACrB,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,UAAU,CAAoD;IACtE,OAAO,CAAC,OAAO,CAOX;IAEJ,OAAO,eAYN;IAED,OAAa,MAAM,CAAC,OAAO,GAAE,0BAA+B,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAuB1F;IAED,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CASrD;IAEK,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAS3B;IAED,OAAO,CAAC,KAAK;IASb,OAAO,CAAC,MAAM;CAmCd"}
1
+ {"version":3,"file":"callback.d.ts","sourceRoot":"","sources":["../../../../../src/extensions/mcp/client/oauth/callback.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,aAAa;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;CACb;AAED,4DAA4D;AAC5D,MAAM,MAAM,iBAAiB,GAAG;IAAE,EAAE,EAAE,IAAI,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAEhG,MAAM,WAAW,0BAA0B;IAC1C,kDAAkD;IAClD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,oEAAoE;IACpE,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,sEAAsE;IACtE,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,iBAAiB,KAAK,MAAM,CAAC;CACjD;AAOD,qBAAa,mBAAmB;IAC/B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,KAAK,CAAW;IACxB,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,UAAU,CAAoD;IACtE,OAAO,CAAC,OAAO,CAQX;IAEJ,OAAO,eAYN;IAED,OAAa,MAAM,CAAC,OAAO,GAAE,0BAA+B,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAuB1F;IAED,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CASpE;IAEK,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAS3B;IAED,OAAO,CAAC,KAAK;IASb,OAAO,CAAC,MAAM;CAwCd"}
@@ -7,14 +7,14 @@ function plainText(page) {
7
7
  export class OAuthCallbackServer {
8
8
  redirectUrl;
9
9
  server;
10
- path;
10
+ paths;
11
11
  timeoutMs;
12
12
  renderPage;
13
13
  pending = new Map();
14
- constructor(server, redirectUrl, path, timeoutMs, renderPage) {
14
+ constructor(server, redirectUrl, paths, timeoutMs, renderPage) {
15
15
  this.server = server;
16
16
  this.redirectUrl = redirectUrl;
17
- this.path = path;
17
+ this.paths = paths;
18
18
  this.timeoutMs = timeoutMs;
19
19
  this.renderPage = renderPage;
20
20
  }
@@ -34,10 +34,10 @@ export class OAuthCallbackServer {
34
34
  const address = server.address();
35
35
  if (!address || typeof address === "string")
36
36
  throw new Error("OAuth callback server did not bind to TCP");
37
- instance = new OAuthCallbackServer(server, `http://${redirectHost.includes(":") ? `[${redirectHost}]` : redirectHost}:${address.port}${path}`, path, options.timeoutMs ?? 5 * 60_000, options.renderPage);
37
+ instance = new OAuthCallbackServer(server, `http://${redirectHost.includes(":") ? `[${redirectHost}]` : redirectHost}:${address.port}${path}`, [path, ...(options.extraPaths ?? [])], options.timeoutMs ?? 5 * 60_000, options.renderPage);
38
38
  return instance;
39
39
  }
40
- waitForCallback(state) {
40
+ waitForCallback(state, path) {
41
41
  if (this.pending.has(state))
42
42
  throw new Error("OAuth state is already pending");
43
43
  return new Promise((resolve, reject) => {
@@ -45,7 +45,7 @@ export class OAuthCallbackServer {
45
45
  this.pending.delete(state);
46
46
  reject(new Error("OAuth callback timed out"));
47
47
  }, this.timeoutMs);
48
- this.pending.set(state, { resolve, reject, timer });
48
+ this.pending.set(state, { resolve, reject, timer, path });
49
49
  });
50
50
  }
51
51
  async close() {
@@ -69,7 +69,7 @@ export class OAuthCallbackServer {
69
69
  }
70
70
  handle(rawUrl, response) {
71
71
  const url = new URL(rawUrl, this.redirectUrl);
72
- if (url.pathname !== this.path) {
72
+ if (!this.paths.includes(url.pathname)) {
73
73
  this.reply(response, 404, { ok: false, message: "Not found" });
74
74
  return;
75
75
  }
@@ -81,6 +81,11 @@ export class OAuthCallbackServer {
81
81
  }
82
82
  clearTimeout(pending.timer);
83
83
  this.pending.delete(state);
84
+ if (pending.path !== undefined && url.pathname !== pending.path) {
85
+ pending.reject(new Error("The authorization response arrived on another redirect URI"));
86
+ this.reply(response, 400, { ok: false, message: "Unexpected redirect URI" });
87
+ return;
88
+ }
84
89
  const error = url.searchParams.get("error");
85
90
  if (error) {
86
91
  const description = url.searchParams.get("error_description") ?? error;