@akon-labs/nexus-cli 0.1.10 → 0.1.11

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 (127) hide show
  1. package/dist/cli/require-login.d.ts.map +1 -1
  2. package/dist/cli/require-login.js +2 -2
  3. package/dist/cli/require-login.js.map +1 -1
  4. package/dist/cli.js +2492 -1088
  5. package/dist/core/agent-session.d.ts +3 -1
  6. package/dist/core/agent-session.d.ts.map +1 -1
  7. package/dist/core/agent-session.js +4 -0
  8. package/dist/core/agent-session.js.map +1 -1
  9. package/dist/core/extensions/index.d.ts +1 -1
  10. package/dist/core/extensions/index.d.ts.map +1 -1
  11. package/dist/core/extensions/index.js.map +1 -1
  12. package/dist/core/extensions/loader.d.ts.map +1 -1
  13. package/dist/core/extensions/loader.js +6 -0
  14. package/dist/core/extensions/loader.js.map +1 -1
  15. package/dist/core/extensions/runner.d.ts +7 -1
  16. package/dist/core/extensions/runner.d.ts.map +1 -1
  17. package/dist/core/extensions/runner.js +14 -0
  18. package/dist/core/extensions/runner.js.map +1 -1
  19. package/dist/core/extensions/types.d.ts +18 -0
  20. package/dist/core/extensions/types.d.ts.map +1 -1
  21. package/dist/core/extensions/types.js.map +1 -1
  22. package/dist/core/graph-rail-store.d.ts +10 -0
  23. package/dist/core/graph-rail-store.d.ts.map +1 -1
  24. package/dist/core/graph-rail-store.js +9 -0
  25. package/dist/core/graph-rail-store.js.map +1 -1
  26. package/dist/core/keybindings.d.ts +2 -1
  27. package/dist/core/keybindings.d.ts.map +1 -1
  28. package/dist/core/keybindings.js +4 -1
  29. package/dist/core/keybindings.js.map +1 -1
  30. package/dist/core/tools/find.d.ts.map +1 -1
  31. package/dist/core/tools/find.js +1 -1
  32. package/dist/core/tools/find.js.map +1 -1
  33. package/dist/core/tools/grep.d.ts.map +1 -1
  34. package/dist/core/tools/grep.js +1 -1
  35. package/dist/core/tools/grep.js.map +1 -1
  36. package/dist/extensions/gitnexus/client.d.ts.map +1 -1
  37. package/dist/extensions/gitnexus/client.js +45 -14
  38. package/dist/extensions/gitnexus/client.js.map +1 -1
  39. package/dist/extensions/gitnexus/config.d.ts +15 -1
  40. package/dist/extensions/gitnexus/config.d.ts.map +1 -1
  41. package/dist/extensions/gitnexus/config.js +86 -2
  42. package/dist/extensions/gitnexus/config.js.map +1 -1
  43. package/dist/extensions/gitnexus/hub-api.d.ts +56 -0
  44. package/dist/extensions/gitnexus/hub-api.d.ts.map +1 -0
  45. package/dist/extensions/gitnexus/hub-api.js +105 -0
  46. package/dist/extensions/gitnexus/hub-api.js.map +1 -0
  47. package/dist/extensions/gitnexus/index-repo.d.ts +50 -0
  48. package/dist/extensions/gitnexus/index-repo.d.ts.map +1 -0
  49. package/dist/extensions/gitnexus/index-repo.js +162 -0
  50. package/dist/extensions/gitnexus/index-repo.js.map +1 -0
  51. package/dist/extensions/gitnexus/index.d.ts.map +1 -1
  52. package/dist/extensions/gitnexus/index.js +137 -17
  53. package/dist/extensions/gitnexus/index.js.map +1 -1
  54. package/dist/extensions/gitnexus/observatory.d.ts.map +1 -1
  55. package/dist/extensions/gitnexus/observatory.js +2 -2
  56. package/dist/extensions/gitnexus/observatory.js.map +1 -1
  57. package/dist/extensions/gitnexus/resolve.d.ts +9 -0
  58. package/dist/extensions/gitnexus/resolve.d.ts.map +1 -1
  59. package/dist/extensions/gitnexus/resolve.js +52 -2
  60. package/dist/extensions/gitnexus/resolve.js.map +1 -1
  61. package/dist/extensions/index.d.ts.map +1 -1
  62. package/dist/extensions/index.js +3 -0
  63. package/dist/extensions/index.js.map +1 -1
  64. package/dist/extensions/mcp/commands.d.ts +22 -2
  65. package/dist/extensions/mcp/commands.d.ts.map +1 -1
  66. package/dist/extensions/mcp/commands.js +201 -9
  67. package/dist/extensions/mcp/commands.js.map +1 -1
  68. package/dist/extensions/mcp/config.d.ts +2 -0
  69. package/dist/extensions/mcp/config.d.ts.map +1 -1
  70. package/dist/extensions/mcp/config.js +6 -1
  71. package/dist/extensions/mcp/config.js.map +1 -1
  72. package/dist/extensions/mcp/index.d.ts.map +1 -1
  73. package/dist/extensions/mcp/index.js +54 -5
  74. package/dist/extensions/mcp/index.js.map +1 -1
  75. package/dist/extensions/mcp/mcp-setup-panel.d.ts +63 -2
  76. package/dist/extensions/mcp/mcp-setup-panel.d.ts.map +1 -1
  77. package/dist/extensions/mcp/mcp-setup-panel.js +563 -77
  78. package/dist/extensions/mcp/mcp-setup-panel.js.map +1 -1
  79. package/dist/extensions/subagent/index.d.ts +2 -1
  80. package/dist/extensions/subagent/index.d.ts.map +1 -1
  81. package/dist/extensions/subagent/index.js +19 -6
  82. package/dist/extensions/subagent/index.js.map +1 -1
  83. package/dist/extensions/subagent-render.d.ts +3 -0
  84. package/dist/extensions/subagent-render.d.ts.map +1 -0
  85. package/dist/extensions/subagent-render.js +39 -0
  86. package/dist/extensions/subagent-render.js.map +1 -0
  87. package/dist/index.js +2524 -1120
  88. package/dist/modes/interactive/components/assistant-message.d.ts.map +1 -1
  89. package/dist/modes/interactive/components/assistant-message.js +2 -0
  90. package/dist/modes/interactive/components/assistant-message.js.map +1 -1
  91. package/dist/modes/interactive/components/command-palette.d.ts +2 -1
  92. package/dist/modes/interactive/components/command-palette.d.ts.map +1 -1
  93. package/dist/modes/interactive/components/command-palette.js +11 -4
  94. package/dist/modes/interactive/components/command-palette.js.map +1 -1
  95. package/dist/modes/interactive/components/footer.d.ts.map +1 -1
  96. package/dist/modes/interactive/components/footer.js +9 -3
  97. package/dist/modes/interactive/components/footer.js.map +1 -1
  98. package/dist/modes/interactive/components/graph-rail.d.ts.map +1 -1
  99. package/dist/modes/interactive/components/graph-rail.js +18 -3
  100. package/dist/modes/interactive/components/graph-rail.js.map +1 -1
  101. package/dist/modes/interactive/components/keybinding-hints.d.ts +1 -0
  102. package/dist/modes/interactive/components/keybinding-hints.d.ts.map +1 -1
  103. package/dist/modes/interactive/components/keybinding-hints.js +7 -1
  104. package/dist/modes/interactive/components/keybinding-hints.js.map +1 -1
  105. package/dist/modes/interactive/components/landing-panel.d.ts.map +1 -1
  106. package/dist/modes/interactive/components/landing-panel.js +15 -2
  107. package/dist/modes/interactive/components/landing-panel.js.map +1 -1
  108. package/dist/modes/interactive/components/tool-execution.d.ts +3 -2
  109. package/dist/modes/interactive/components/tool-execution.d.ts.map +1 -1
  110. package/dist/modes/interactive/components/tool-execution.js +12 -2
  111. package/dist/modes/interactive/components/tool-execution.js.map +1 -1
  112. package/dist/modes/interactive/interactive-mode.d.ts +3 -0
  113. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  114. package/dist/modes/interactive/interactive-mode.js +42 -8
  115. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  116. package/dist/rpc-entry.js +2492 -1088
  117. package/dist/utils/hidden-spawn.d.ts +29 -0
  118. package/dist/utils/hidden-spawn.d.ts.map +1 -0
  119. package/dist/utils/hidden-spawn.js +101 -0
  120. package/dist/utils/hidden-spawn.js.map +1 -0
  121. package/dist/vendor/ai.js +233 -233
  122. package/dist/vendor/tui.js +1 -1
  123. package/native/win32/build.mjs +95 -0
  124. package/native/win32/prebuilds/win32-x64/hidden-spawn.exe +0 -0
  125. package/native/win32/src/hidden-spawn.c +157 -0
  126. package/npm-shrinkwrap.json +2 -37
  127. package/package.json +7 -3
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/extensions/mcp/index.ts"],"names":[],"mappings":"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","sourcesContent":["import { existsSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport type { Api, Model } from \"@earendil-works/pi-ai\";\nimport type { TSchema } from \"typebox\";\nimport { Type } from \"typebox\";\nimport type { AgentToolUpdateCallback, ExtensionAPI, ExtensionContext, ToolInfo } from \"../../core/extensions/types.ts\";\nimport {\n\tauthenticateServer,\n\tlogoutServer,\n\tmanageBearerToken,\n\topenMcpAuthPanel,\n\topenMcpPanel,\n\topenMcpSetup,\n\treconnectServer,\n\treconnectServers,\n\tshowPrompts,\n\tshowStatus,\n\tshowTools,\n} from \"./commands.ts\";\nimport { cloneMcpConfig, loadMcpConfig, writeProjectServerDisabledOverride } from \"./config.ts\";\nimport {\n\tbuildProxyDescription,\n\tcreateDirectToolExecutor,\n\tgetMissingConfiguredDirectToolServers,\n\tresolveDirectTools,\n} from \"./direct-tools.ts\";\nimport { toolErrorOverride } from \"./error-signal.ts\";\nimport { flushMetadataCache, initializeMcp, updateStatusBar } from \"./init.ts\";\nimport { logger } from \"./logger.ts\";\nimport type { McpOAuthRuntime } from \"./mcp-auth-flow.ts\";\nimport { createOAuthRuntime, shutdownOAuth } from \"./mcp-auth-flow.ts\";\nimport { runMcpScript } from \"./mcp-code.ts\";\nimport { publishMcpStatusShutdown } from \"./mcp-status.ts\";\nimport { loadMetadataCache, type MetadataCache } from \"./metadata-cache.ts\";\nimport { createPromptCommand, resolveCachedPrompts } from \"./prompts.ts\";\nimport {\n\texecuteAuthComplete,\n\texecuteAuthStart,\n\texecuteCall,\n\texecuteConnect,\n\texecuteDescribe,\n\texecuteInstructions,\n\texecuteList,\n\texecuteSearch,\n\texecuteStatus,\n\texecuteUiMessages,\n} from \"./proxy-modes.ts\";\nimport { createMcpRuntimeOwner, createOwnedUi, isAbortError, type McpRuntimeOwner } from \"./runtime-owner.ts\";\nimport type { McpExtensionState } from \"./state.ts\";\nimport { cleanupMaterializedBinaryResources } from \"./tool-registrar.ts\";\nimport {\n\tcreateMcpDirectToolCallRenderer,\n\tcreateMcpProxyToolCallRenderer,\n\tcreateMcpToolResultRenderer,\n\tresolveMcpToolRenderOptions,\n} from \"./tool-result-renderer.ts\";\nimport type { DirectToolSpec, McpAdapterOptions, McpConfig, PromptMetadata, ServerEntry } from \"./types.ts\";\nimport { formatTerminalError, getConfigPathFromArgv, normalizeDirectToolInputSchema, truncateAtWord } from \"./utils.ts\";\n\nexport type { McpAdapterOptions, ServerEntry } from \"./types.ts\";\nexport {\n\tMCP_STATUS_EVENT,\n\tMCP_STATUS_SNAPSHOT_VERSION,\n\tMCP_TOOL_APPROVAL_REQUEST_EVENT,\n\ttype McpServerRuntimeStatus,\n\ttype McpServerStatusSnapshot,\n\ttype McpStatusSnapshot,\n\ttype McpToolApprovalDecision,\n\ttype McpToolApprovalHandler,\n\ttype McpToolApprovalOrigin,\n\ttype McpToolApprovalRequest,\n} from \"./types.ts\";\n\nconst INIT_WAIT_TIMEOUT_MS = 30_000;\nconst INIT_WAIT_TIMED_OUT: unique symbol = Symbol(\"init-wait-timed-out\");\n\nexport interface McpServerRegistration {\n\tdispose(): Promise<void>;\n}\n\n// Routes runtime registrations to the adapter installed for a specific Nexus\n// instance, so a process with several adapters cannot cross-register.\nconst runtimeRegistrars = new WeakMap<ExtensionAPI, (name: string, definition: ServerEntry) => McpServerRegistration>();\n\nasync function awaitWithTimeout<T>(promise: Promise<T>, timeoutMs: number): Promise<T | typeof INIT_WAIT_TIMED_OUT> {\n\tlet timer: ReturnType<typeof setTimeout> | undefined;\n\ttry {\n\t\treturn await Promise.race([\n\t\t\tpromise,\n\t\t\tnew Promise<typeof INIT_WAIT_TIMED_OUT>((resolve) => {\n\t\t\t\ttimer = setTimeout(() => resolve(INIT_WAIT_TIMED_OUT), timeoutMs);\n\t\t\t\ttimer.unref?.();\n\t\t\t}),\n\t\t]);\n\t} finally {\n\t\tclearTimeout(timer);\n\t}\n}\n\n// TypeBox 1.x annotates raw objects passed to Type.Optional with an enumerable\n// \"~optional\" key that survives serialization into provider tool schemas (Gemini\n// rejects it with 400 INVALID_ARGUMENT). Prefer a real Type.Number schema; fall\n// back to a plain raw schema for host TypeBox shims that omit Type.Number, since\n// a property left out of `required` is optional by default.\nfunction optionalNumber(options: { minimum?: number; description: string }): TSchema {\n\tconst number = (Type as { Number?: (opts: typeof options) => TSchema }).Number;\n\treturn typeof number === \"function\"\n\t\t? Type.Optional(number(options))\n\t\t: ({ type: \"number\", ...options } as unknown as TSchema);\n}\n\nfunction installMcpAdapter(nexus: ExtensionAPI, options: McpAdapterOptions) {\n\tconst sessionConfig = options.config !== undefined ? cloneMcpConfig(options.config) : undefined;\n\tconst programmaticConfig = sessionConfig !== undefined;\n\tlet state: McpExtensionState | null = null;\n\tlet initPromise: Promise<McpExtensionState> | null = null;\n\tlet currentOwner: McpRuntimeOwner | null = null;\n\tlet currentOAuthRuntime: McpOAuthRuntime | null = null;\n\tlet currentModel: Model<Api> | undefined;\n\tlet lifecycleGeneration = 0;\n\n\tasync function shutdownState(currentState: McpExtensionState | null, reason: string): Promise<void> {\n\t\tif (!currentState) {\n\t\t\tpublishMcpStatusShutdown(nexus.events);\n\t\t\treturn;\n\t\t}\n\n\t\tpublishMcpStatusShutdown(currentState.statusEvents);\n\n\t\tif (currentState.uiServer) {\n\t\t\tcurrentState.uiServer.close(reason);\n\t\t\tcurrentState.uiServer = null;\n\t\t}\n\n\t\tlet flushError: unknown;\n\t\ttry {\n\t\t\tflushMetadataCache(currentState);\n\t\t} catch (error) {\n\t\t\tflushError = error;\n\t\t}\n\n\t\ttry {\n\t\t\tif (currentState.owner) {\n\t\t\t\tawait currentState.owner.stop(reason);\n\t\t\t} else {\n\t\t\t\tawait currentState.lifecycle.gracefulShutdown();\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tif (flushError) {\n\t\t\t\tconsole.error(`MCP: graceful shutdown failed after metadata flush error: ${formatTerminalError(error)}`);\n\t\t\t} else {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t}\n\n\t\tif (flushError) {\n\t\t\tthrow flushError;\n\t\t}\n\t}\n\n\tconst earlyConfigPath = programmaticConfig ? undefined : (options.configPath ?? getConfigPathFromArgv());\n\tconst earlyConfig = programmaticConfig\n\t\t? cloneMcpConfig(sessionConfig)\n\t\t: loadMcpConfig(earlyConfigPath, process.cwd(), false);\n\tconst earlyCache = loadMetadataCache();\n\tconst envRaw = process.env.MCP_DIRECT_TOOLS;\n\tconst envDirectToolOverride = envRaw\n\t\t?.split(\",\")\n\t\t.map((s) => s.trim())\n\t\t.filter(Boolean);\n\tconst registeredDirectTools = new Map<string, string>();\n\tconst fallbackDeactivatedTools = new Set<string>();\n\tconst toolRenderOptions = resolveMcpToolRenderOptions(earlyConfig.settings);\n\tconst toolRenderShell = toolRenderOptions.resultRendering === \"compact\" ? \"self\" : \"default\";\n\tconst renderMcpToolResult = createMcpToolResultRenderer(toolRenderOptions);\n\tlet proxyToolRegistered = false;\n\tlet proxyToolDescription: string | null = null;\n\tlet directToolsFrozen = false;\n\t// Session/runtime scoped server registrations from other extensions. They\n\t// survive session restarts within this install and die with the process.\n\tconst runtimeServers = new Map<string, ServerEntry>();\n\n\t// Mirrors init's per-server lifecycle registration so runtime servers get\n\t// idle cleanup and keep-alive health recovery like configured servers.\n\tfunction attachRuntimeServerLifecycle(targetState: McpExtensionState, name: string, definition: ServerEntry): void {\n\t\tconst lifecycleMode = definition.lifecycle ?? \"lazy\";\n\t\tconst persistsAfterFirstSpawn = lifecycleMode === \"eager\" || lifecycleMode === \"lazy-keep-alive\";\n\t\tconst idleOverride = definition.idleTimeout ?? (persistsAfterFirstSpawn ? 0 : undefined);\n\t\ttargetState.lifecycle.registerServer(\n\t\t\tname,\n\t\t\tdefinition,\n\t\t\tidleOverride !== undefined ? { idleTimeout: idleOverride } : undefined,\n\t\t);\n\t\tif (lifecycleMode === \"keep-alive\") targetState.lifecycle.markKeepAlive(name, definition);\n\t}\n\n\t// OMP remaps `typebox` to a host shim that historically lacked Type.Unsafe.\n\t// Prefer Unsafe when present (real TypeBox / fixed OMP shim); otherwise pass\n\t// the normalized JSON Schema through as a plain object so toolWireSchema and\n\t// validateToolArguments still treat it as JSON Schema.\n\tconst toToolParameters = (schema: Record<string, unknown>) =>\n\t\ttypeof (Type as { Unsafe?: (value: never) => unknown }).Unsafe === \"function\"\n\t\t\t? (Type as { Unsafe: (value: never) => unknown }).Unsafe(schema as never)\n\t\t\t: schema;\n\n\tfunction directToolFingerprint(spec: DirectToolSpec): string {\n\t\treturn JSON.stringify({\n\t\t\tserverName: spec.serverName,\n\t\t\toriginalName: spec.originalName,\n\t\t\tprefixedName: spec.prefixedName,\n\t\t\tdescription: spec.description,\n\t\t\tinputSchema: spec.inputSchema,\n\t\t\tresourceUri: spec.resourceUri,\n\t\t\tuiResourceUri: spec.uiResourceUri,\n\t\t\tuiStreamMode: spec.uiStreamMode,\n\t\t});\n\t}\n\n\tfunction registerDirectTool(spec: DirectToolSpec): void {\n\t\t(nexus.registerTool as (tool: unknown) => unknown)({\n\t\t\tname: spec.prefixedName,\n\t\t\tlabel: `MCP: ${spec.originalName}`,\n\t\t\tdescription: spec.description || \"(no description)\",\n\t\t\tpromptSnippet: truncateAtWord(spec.description, 100) || `MCP tool from ${spec.serverName}`,\n\t\t\tparameters: toToolParameters(normalizeDirectToolInputSchema(spec.inputSchema)),\n\t\t\texecute: createDirectToolExecutor(\n\t\t\t\t() => state,\n\t\t\t\t() => initPromise,\n\t\t\t\tspec,\n\t\t\t),\n\t\t\trenderShell: toolRenderShell,\n\t\t\trenderCall: createMcpDirectToolCallRenderer(spec.prefixedName, toolRenderOptions),\n\t\t\trenderResult: renderMcpToolResult,\n\t\t});\n\t}\n\n\tfunction resolveCurrentDirectTools(config: McpConfig, cache: MetadataCache | null): DirectToolSpec[] {\n\t\tif (envRaw === \"__none__\") return [];\n\t\tconst prefix = config.settings?.toolPrefix ?? \"server\";\n\t\treturn resolveDirectTools(config, cache, prefix, envDirectToolOverride);\n\t}\n\n\tfunction getActiveToolsIfReady(): string[] | undefined {\n\t\ttry {\n\t\t\treturn nexus.getActiveTools?.();\n\t\t} catch (error) {\n\t\t\tif (\n\t\t\t\terror instanceof Error &&\n\t\t\t\terror.message.includes(\"Action methods cannot be called during extension loading\")\n\t\t\t)\n\t\t\t\treturn undefined;\n\t\t\tthrow error;\n\t\t}\n\t}\n\n\tfunction deactivateTools(toolNames: string[]): string[] {\n\t\tif (toolNames.length === 0) return [];\n\t\tconst unregisterTool = (nexus as ExtensionAPI & { unregisterTool?: (name: string) => boolean }).unregisterTool;\n\t\tconst unregistered = toolNames.filter((toolName) => unregisterTool?.(toolName) === true);\n\t\tconst fallbackNames = toolNames.filter((toolName) => !unregistered.includes(toolName));\n\t\tconst remove = new Set(toolNames);\n\t\tconst activeTools = getActiveToolsIfReady();\n\t\tif (!activeTools || activeTools.length === 0) {\n\t\t\tfor (const toolName of fallbackNames) fallbackDeactivatedTools.add(toolName);\n\t\t\treturn unregistered;\n\t\t}\n\t\tconst nextActiveTools = activeTools.filter((name) => !remove.has(name));\n\t\tif (nextActiveTools.length !== activeTools.length) {\n\t\t\tfor (const toolName of fallbackNames) fallbackDeactivatedTools.add(toolName);\n\t\t\tnexus.setActiveTools(nextActiveTools);\n\t\t}\n\t\treturn unregistered;\n\t}\n\n\tfunction syncDirectTools(\n\t\tconfig: McpConfig,\n\t\tcache: MetadataCache | null,\n\t): {\n\t\tspecs: DirectToolSpec[];\n\t\tadded: string[];\n\t\tupdated: string[];\n\t\tdeactivated: string[];\n\t} {\n\t\tconst specs = resolveCurrentDirectTools(config, cache);\n\t\tconst nextNames = new Set(specs.map((spec) => spec.prefixedName));\n\t\tconst added: string[] = [];\n\t\tconst updated: string[] = [];\n\t\tconst deactivated: string[] = [];\n\n\t\tfor (const spec of specs) {\n\t\t\tconst fingerprint = directToolFingerprint(spec);\n\t\t\tconst previous = registeredDirectTools.get(spec.prefixedName);\n\t\t\tif (previous !== fingerprint) {\n\t\t\t\tregisterDirectTool(spec);\n\t\t\t\tregisteredDirectTools.set(spec.prefixedName, fingerprint);\n\t\t\t\tif (fallbackDeactivatedTools.delete(spec.prefixedName)) {\n\t\t\t\t\tconst activeTools = getActiveToolsIfReady();\n\t\t\t\t\tif (activeTools && !activeTools.includes(spec.prefixedName)) {\n\t\t\t\t\t\tnexus.setActiveTools([...activeTools, spec.prefixedName]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t(previous ? updated : added).push(spec.prefixedName);\n\t\t\t}\n\t\t}\n\n\t\tfor (const toolName of [...registeredDirectTools.keys()]) {\n\t\t\tif (nextNames.has(toolName)) continue;\n\t\t\tregisteredDirectTools.delete(toolName);\n\t\t\tdeactivated.push(toolName);\n\t\t}\n\n\t\tdeactivateTools(deactivated);\n\t\treturn { specs, added, updated, deactivated };\n\t}\n\n\tfunction applyDirectToolConfigChanges(changes: Map<string, true | string[] | false>): void {\n\t\tif (!state) return;\n\t\tfor (const [serverName, value] of changes) {\n\t\t\tconst definition = state.config.mcpServers[serverName];\n\t\t\tif (!definition) continue;\n\t\t\tstate.config.mcpServers[serverName] = { ...definition, directTools: value };\n\t\t}\n\t}\n\n\tfunction syncToolSurface(ctx?: ExtensionContext): void {\n\t\tconst config = state?.config ?? earlyConfig;\n\t\tconst cache = loadMetadataCache();\n\t\tconst result = syncDirectTools(config, cache);\n\t\tsyncProxyTool(config, cache, result.specs);\n\t\tconst changed = result.added.length + result.updated.length + result.deactivated.length;\n\t\tif (changed > 0 && ctx?.hasUI) {\n\t\t\tctx.ui.notify(\n\t\t\t\t`MCP: direct tools refreshed (+${result.added.length}, ~${result.updated.length}, -${result.deactivated.length})`,\n\t\t\t\t\"info\",\n\t\t\t);\n\t\t}\n\t}\n\n\tconst registeredPromptCommands = new Set<string>();\n\n\tfunction registerPromptCommands(specs: Iterable<PromptMetadata>): void {\n\t\tfor (const spec of specs) {\n\t\t\tif (registeredPromptCommands.has(spec.commandName)) {\n\t\t\t\tlogger.debug(\n\t\t\t\t\t`MCP: prompt \"${spec.originalName}\" on ${spec.serverName} skipped; /${spec.commandName} is already registered`,\n\t\t\t\t);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tregisteredPromptCommands.add(spec.commandName);\n\t\t\tnexus.registerCommand(\n\t\t\t\tspec.commandName,\n\t\t\t\tcreatePromptCommand(nexus, () => state, spec),\n\t\t\t);\n\t\t}\n\t}\n\n\tfunction syncPromptCommands(): void {\n\t\tregisterPromptCommands([...(state?.promptMetadata?.values() ?? [])].flat());\n\t}\n\n\tregisterPromptCommands(resolveCachedPrompts(earlyConfig));\n\n\truntimeRegistrars.set(nexus, (name: string, definition: ServerEntry): McpServerRegistration => {\n\t\tif (typeof name !== \"string\" || name.trim() === \"\") {\n\t\t\tthrow new Error(\"MCP server name must be a non-empty string\");\n\t\t}\n\t\tif (typeof definition !== \"object\" || definition === null || Array.isArray(definition)) {\n\t\t\tthrow new Error(`MCP server definition for \"${name}\" must be an object`);\n\t\t}\n\t\tconst effective = state?.config ?? earlyConfig;\n\t\tif (runtimeServers.has(name) || Object.hasOwn(effective.mcpServers, name)) {\n\t\t\tthrow new Error(`MCP server \"${name}\" is already registered`);\n\t\t}\n\t\t// Runtime-registered servers are proxy-tool-only: direct tools are frozen\n\t\t// at startup and must not be rebuilt for late registrations.\n\t\tconst entry: ServerEntry = { ...structuredClone(definition), directTools: false };\n\t\truntimeServers.set(name, entry);\n\t\tconst registeredState = state;\n\t\tif (registeredState) {\n\t\t\tregisteredState.config.mcpServers[name] = entry;\n\t\t\tattachRuntimeServerLifecycle(registeredState, name, entry);\n\t\t\tsyncToolSurface();\n\t\t\tupdateStatusBar(registeredState);\n\t\t}\n\t\tlet disposed = false;\n\t\treturn {\n\t\t\tdispose: async (): Promise<void> => {\n\t\t\t\tif (disposed) return;\n\t\t\t\tdisposed = true;\n\t\t\t\truntimeServers.delete(name);\n\t\t\t\tconst currentState = state;\n\t\t\t\tif (!currentState || currentState.config.mcpServers[name] !== entry) return;\n\t\t\t\tdelete currentState.config.mcpServers[name];\n\t\t\t\tcurrentState.lifecycle.unregisterServer(name);\n\t\t\t\tawait currentState.manager.close(name);\n\t\t\t\tsyncToolSurface();\n\t\t\t\tupdateStatusBar(currentState);\n\t\t\t},\n\t\t};\n\t});\n\n\tconst getNexusTools = (): ToolInfo[] => nexus.getAllTools();\n\n\tnexus.registerFlag(\"mcp-config\", {\n\t\tdescription: \"Path to MCP config file\",\n\t\ttype: \"string\",\n\t});\n\n\tfunction startInitialization(\n\t\tctx: ExtensionContext,\n\t\towner: McpRuntimeOwner,\n\t\toauthRuntime: McpOAuthRuntime,\n\t\tgeneration: number,\n\t\tstaleReason: string,\n\t): Promise<void> {\n\t\towner.addCleanup(() => cleanupMaterializedBinaryResources(owner.signal));\n\t\tconst promise = initializeMcp(nexus, ctx, owner, {\n\t\t\t...(programmaticConfig || options.configPath !== undefined\n\t\t\t\t? {\n\t\t\t\t\t\t...(earlyConfigPath !== undefined ? { configPath: earlyConfigPath } : {}),\n\t\t\t\t\t\t...(sessionConfig !== undefined ? { config: sessionConfig } : {}),\n\t\t\t\t\t}\n\t\t\t\t: {}),\n\t\t\toauthRuntime,\n\t\t\tgetCurrentModel: () => currentModel,\n\t\t});\n\t\tinitPromise = promise;\n\n\t\treturn promise\n\t\t\t.then(async (nextState) => {\n\t\t\t\tif (!owner.isActive() || generation !== lifecycleGeneration || initPromise !== promise) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tawait shutdownState(nextState, staleReason);\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tconsole.error(`MCP: failed to clean stale initialization state: ${formatTerminalError(error)}`);\n\t\t\t\t\t}\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tstate = nextState;\n\t\t\t\tfor (const [name, definition] of runtimeServers) {\n\t\t\t\t\tif (Object.hasOwn(nextState.config.mcpServers, name)) {\n\t\t\t\t\t\tconsole.error(\n\t\t\t\t\t\t\t`MCP: runtime-registered server \"${name}\" now collides with a configured server; keeping the configured server`,\n\t\t\t\t\t\t);\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tnextState.config.mcpServers[name] = definition;\n\t\t\t\t\tattachRuntimeServerLifecycle(nextState, name, definition);\n\t\t\t\t}\n\t\t\t\tnextState.onToolMetadataUpdated = (_serverName, _reason) => {\n\t\t\t\t\tif (state !== nextState || !owner.isActive()) return;\n\t\t\t\t\tsyncPromptCommands();\n\t\t\t\t\tif (directToolsFrozen) {\n\t\t\t\t\t\tlogger.debug(`MCP: metadata update for ${_serverName} (${_reason}) skipped — directTools frozen`);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tsyncToolSurface(ctx);\n\t\t\t\t};\n\t\t\t\tsyncPromptCommands();\n\t\t\t\tsyncToolSurface(ctx);\n\t\t\t\t// A connected snapshot is readiness-like external state. Publish it only\n\t\t\t\t// after Nexus's model-facing direct-tool surface reflects live metadata.\n\t\t\t\tnextState.statusEvents = nexus.events;\n\t\t\t\tupdateStatusBar(nextState);\n\t\t\t\tinitPromise = null;\n\t\t\t\tif (nextState.config.settings?.freezeDirectTools === true) {\n\t\t\t\t\tdirectToolsFrozen = true;\n\t\t\t\t\tlogger.info(\n\t\t\t\t\t\t'MCP: direct tools frozen after initial sync — reconnects won\\'t rebuild the system prompt; use mcp({ connect: \"server\" }) to rediscover',\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t})\n\t\t\t.catch(async (err) => {\n\t\t\t\tif (!owner.isActive() || generation !== lifecycleGeneration) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (initPromise !== promise && initPromise !== null) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tconsole.error(`MCP initialization failed: ${formatTerminalError(err)}`);\n\t\t\t\tinitPromise = null;\n\t\t\t\tif (state) return;\n\n\t\t\t\ttry {\n\t\t\t\t\tawait Promise.all([owner.stop(\"MCP initialization failed\"), shutdownOAuth(oauthRuntime)]);\n\t\t\t\t} catch (error) {\n\t\t\t\t\tconsole.error(`MCP: failed to clean rejected initialization: ${formatTerminalError(error)}`);\n\t\t\t\t}\n\t\t\t});\n\t}\n\n\tfunction startLoadTimeInitialization(): void {\n\t\tconst hasStartupServer = Object.values(earlyConfig.mcpServers).some((definition) => {\n\t\t\tif (definition.disabled === true) return false;\n\t\t\treturn definition.lifecycle === \"eager\" || definition.lifecycle === \"keep-alive\";\n\t\t});\n\t\tif (!hasStartupServer) return;\n\t\tsetImmediate(() => {\n\t\t\tif (lifecycleGeneration !== 0 || state || initPromise) return;\n\t\t\tconst generation = ++lifecycleGeneration;\n\t\t\tconst owner = createMcpRuntimeOwner();\n\t\t\tconst oauthRuntime = createOAuthRuntime(owner.signal);\n\t\t\tcurrentOwner = owner;\n\t\t\tcurrentOAuthRuntime = oauthRuntime;\n\t\t\tstartInitialization(\n\t\t\t\t{\n\t\t\t\t\tmode: \"print\",\n\t\t\t\t\thasUI: false,\n\t\t\t\t\tcwd: process.cwd(),\n\t\t\t\t\tmodel: undefined,\n\t\t\t\t\tmodelRegistry: undefined,\n\t\t\t\t\tsignal: undefined,\n\t\t\t\t\tisProjectTrusted: () => false,\n\t\t\t\t} as unknown as ExtensionContext,\n\t\t\t\towner,\n\t\t\t\toauthRuntime,\n\t\t\t\tgeneration,\n\t\t\t\t\"stale_load_time_initialization\",\n\t\t\t);\n\t\t});\n\t}\n\n\tnexus.on(\"session_start\", async (_event, ctx) => {\n\t\tcurrentModel = ctx.model;\n\t\tdirectToolsFrozen = false;\n\t\tconst generation = ++lifecycleGeneration;\n\t\tconst previousState = state;\n\t\tconst previousOwner = currentOwner;\n\t\tconst previousOAuthRuntime = currentOAuthRuntime;\n\t\tconst owner = createMcpRuntimeOwner();\n\t\tconst oauthRuntime = createOAuthRuntime(owner.signal);\n\t\tcurrentOwner = owner;\n\t\tcurrentOAuthRuntime = oauthRuntime;\n\t\tstate = null;\n\t\tinitPromise = null;\n\n\t\t// Abort synchronously before awaiting cleanup so old callbacks and startup\n\t\t// work cannot resume into a stale ExtensionContext.\n\t\tconst stopPrevious = previousOwner?.stop(\"MCP extension session restarted\") ?? Promise.resolve();\n\t\ttry {\n\t\t\tawait Promise.all([\n\t\t\t\tstopPrevious,\n\t\t\t\tshutdownState(previousState, \"session_restart\"),\n\t\t\t\tpreviousOAuthRuntime ? shutdownOAuth(previousOAuthRuntime) : Promise.resolve(),\n\t\t\t]);\n\t\t} catch (error) {\n\t\t\tconsole.error(`MCP: failed to shut down previous session state: ${formatTerminalError(error)}`);\n\t\t}\n\n\t\tif (generation !== lifecycleGeneration || !owner.isActive()) return;\n\n\t\tconst initialization = startInitialization(ctx, owner, oauthRuntime, generation, \"stale_session_start\");\n\t\tif (envRaw !== undefined && envRaw !== \"__none__\") {\n\t\t\tconst missingEnvDirectTools = getMissingConfiguredDirectToolServers(\n\t\t\t\tearlyConfig,\n\t\t\t\tloadMetadataCache(),\n\t\t\t\tenvDirectToolOverride,\n\t\t\t);\n\t\t\tif (missingEnvDirectTools.length > 0) {\n\t\t\t\tawait initialization;\n\t\t\t}\n\t\t}\n\t});\n\n\tnexus.on(\"model_select\", (event) => {\n\t\tcurrentModel = event.model;\n\t});\n\n\tnexus.on(\"input\", async () => {\n\t\tconst inputOwner = currentOwner;\n\t\tif (!inputOwner?.isActive()) return;\n\n\t\tif (!state && initPromise) {\n\t\t\ttry {\n\t\t\t\tawait awaitWithTimeout(initPromise, INIT_WAIT_TIMEOUT_MS);\n\t\t\t} catch {\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\tconst inputState = state;\n\t\tif (!inputState || !inputOwner.isActive()) return;\n\t\ttry {\n\t\t\tawait inputState.lifecycle.ensureConverged(inputOwner.signal);\n\t\t} catch (error) {\n\t\t\tif (!isAbortError(error, inputOwner.signal)) {\n\t\t\t\tlogger.debug(`MCP: keep-alive convergence failed before input: ${formatTerminalError(error)}`);\n\t\t\t}\n\t\t}\n\t});\n\n\tnexus.on(\"session_shutdown\", async () => {\n\t\t++lifecycleGeneration;\n\t\tconst currentState = state;\n\t\tconst owner = currentOwner;\n\t\tconst oauthRuntime = currentOAuthRuntime;\n\t\tcurrentOwner = null;\n\t\tcurrentOAuthRuntime = null;\n\t\tcurrentModel = undefined;\n\t\tstate = null;\n\t\tinitPromise = null;\n\n\t\t// Abort before awaiting cleanup so delayed initialization cannot touch stale\n\t\t// Nexus context after session shutdown.\n\t\tconst stopOwner = owner?.stop(\"MCP extension session shutdown\") ?? Promise.resolve();\n\t\ttry {\n\t\t\tawait Promise.all([\n\t\t\t\tstopOwner,\n\t\t\t\tshutdownState(currentState, \"session_shutdown\"),\n\t\t\t\toauthRuntime ? shutdownOAuth(oauthRuntime) : Promise.resolve(),\n\t\t\t]);\n\t\t} catch (error) {\n\t\t\tconsole.error(`MCP: session shutdown cleanup failed: ${formatTerminalError(error)}`);\n\t\t}\n\t});\n\n\t// Re-flag returned MCP tool failures so nexus registers them as errors (see toolErrorOverride).\n\tnexus.on(\"tool_result\", (event) => toolErrorOverride(event.details));\n\n\tconst registerMcpCommand = (commandName: string) =>\n\t\tnexus.registerCommand(commandName, {\n\t\t\tdescription: \"Show MCP server status\",\n\t\t\tgetArgumentCompletions: (prefix: string) => {\n\t\t\t\tconst normalized = prefix.trimStart();\n\t\t\t\tconst argumentMatch = normalized.match(/^(\\S+)\\s+(.*)$/);\n\t\t\t\tif (!argumentMatch) {\n\t\t\t\t\tconst subcommands = [\n\t\t\t\t\t\t{ value: \"reconnect\", label: \"reconnect — Reconnect servers\" },\n\t\t\t\t\t\t{ value: \"tools\", label: \"tools — List all tools\" },\n\t\t\t\t\t\t{ value: \"prompts\", label: \"prompts — List all MCP prompts\" },\n\t\t\t\t\t\t{ value: \"setup\", label: \"setup — Configure MCP servers\" },\n\t\t\t\t\t\t{ value: \"logout\", label: \"logout — Clear server credentials\" },\n\t\t\t\t\t\t{ value: \"token\", label: \"token — Manage stored bearer tokens\" },\n\t\t\t\t\t\t{ value: \"disable\", label: \"disable — Disable a server\" },\n\t\t\t\t\t\t{ value: \"enable\", label: \"enable — Enable a server\" },\n\t\t\t\t\t\t{ value: \"status\", label: \"status — Show server status\" },\n\t\t\t\t\t].filter(({ value }) => value.startsWith(normalized));\n\t\t\t\t\treturn subcommands.length > 0 ? subcommands : null;\n\t\t\t\t}\n\n\t\t\t\tconst [, subcommand, argumentPrefix] = argumentMatch;\n\t\t\t\tif (\n\t\t\t\t\t(subcommand !== \"reconnect\" &&\n\t\t\t\t\t\tsubcommand !== \"logout\" &&\n\t\t\t\t\t\tsubcommand !== \"disable\" &&\n\t\t\t\t\t\tsubcommand !== \"enable\" &&\n\t\t\t\t\t\tsubcommand !== \"token\") ||\n\t\t\t\t\targumentPrefix === undefined ||\n\t\t\t\t\t!state\n\t\t\t\t)\n\t\t\t\t\treturn null;\n\n\t\t\t\tif (subcommand === \"token\") {\n\t\t\t\t\tconst tokenMatch = argumentPrefix.trimStart().match(/^(set|remove|status)\\s+(.*)$/);\n\t\t\t\t\tif (!tokenMatch) {\n\t\t\t\t\t\tconst actions = [\"set\", \"remove\", \"status\"]\n\t\t\t\t\t\t\t.filter((action) => action.startsWith(argumentPrefix.trimStart()))\n\t\t\t\t\t\t\t.map((action) => ({ value: `token ${action} `, label: `${action} — Bearer token ${action}` }));\n\t\t\t\t\t\treturn actions.length > 0 ? actions : null;\n\t\t\t\t\t}\n\t\t\t\t\tconst action = tokenMatch[1] ?? \"\";\n\t\t\t\t\tconst serverPrefix = tokenMatch[2] ?? \"\";\n\t\t\t\t\tconst servers = Object.keys(state.config.mcpServers)\n\t\t\t\t\t\t.filter((serverName) => serverName.startsWith(serverPrefix.trimStart()))\n\t\t\t\t\t\t.map((serverName) => ({ value: `token ${action} ${serverName}`, label: serverName }));\n\t\t\t\t\treturn servers.length > 0 ? servers : null;\n\t\t\t\t}\n\n\t\t\t\tconst servers = Object.keys(state.config.mcpServers)\n\t\t\t\t\t.filter((serverName) => serverName.startsWith(argumentPrefix.trimStart()))\n\t\t\t\t\t.map((serverName) => ({ value: `${subcommand} ${serverName}`, label: serverName }));\n\t\t\t\treturn servers.length > 0 ? servers : null;\n\t\t\t},\n\t\t\thandler: async (args, ctx) => {\n\t\t\t\tconst commandOwner = currentOwner;\n\t\t\t\tconst commandReload = typeof ctx.reload === \"function\" ? ctx.reload.bind(ctx) : async () => {};\n\t\t\t\tconst commandHasUI = ctx.hasUI;\n\t\t\t\tconst commandCtx = {\n\t\t\t\t\thasUI: commandHasUI,\n\t\t\t\t\tui: commandHasUI ? (commandOwner ? createOwnedUi(ctx.ui, commandOwner) : ctx.ui) : undefined,\n\t\t\t\t\tcwd: ctx.cwd,\n\t\t\t\t\tmode: ctx.mode,\n\t\t\t\t\tsignal: commandOwner?.signal ?? ctx.signal,\n\t\t\t\t\tisProjectTrusted: () => ctx.isProjectTrusted(),\n\t\t\t\t} as unknown as ExtensionContext;\n\t\t\t\tif (!state && initPromise) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst initialized = await initPromise;\n\t\t\t\t\t\tcommandOwner?.throwIfInactive();\n\t\t\t\t\t\tstate = initialized;\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\t\t\t\t\tif (commandCtx.hasUI) commandCtx.ui?.notify(`MCP initialization failed: ${message}`, \"error\");\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (!state) {\n\t\t\t\t\tif (commandCtx.hasUI) commandCtx.ui?.notify(\"MCP not initialized\", \"error\");\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst parts = args?.trim()?.split(/\\s+/) ?? [];\n\t\t\t\tconst subcommand = parts[0] ?? \"\";\n\t\t\t\tconst targetServer = parts[1];\n\t\t\t\tconst rest = parts.slice(1).join(\" \");\n\n\t\t\t\tswitch (subcommand) {\n\t\t\t\t\tcase \"reconnect\":\n\t\t\t\t\t\tcommandOwner?.throwIfInactive();\n\t\t\t\t\t\tawait reconnectServers(state, commandCtx, targetServer);\n\t\t\t\t\t\tif (directToolsFrozen) syncToolSurface(commandCtx);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"tools\":\n\t\t\t\t\t\tawait showTools(state, commandCtx);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"prompts\":\n\t\t\t\t\t\tawait showPrompts(state, commandCtx);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"setup\": {\n\t\t\t\t\t\tcommandOwner?.throwIfInactive();\n\t\t\t\t\t\tif (!ctx.isProjectTrusted()) {\n\t\t\t\t\t\t\tcommandCtx.ui?.notify(\"Trust this project before opening MCP setup.\", \"warning\");\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (programmaticConfig) {\n\t\t\t\t\t\t\tcommandCtx.ui?.notify(\n\t\t\t\t\t\t\t\t\"MCP setup is unavailable when config is supplied by createMcpAdapter().\",\n\t\t\t\t\t\t\t\t\"info\",\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tconst result = await openMcpSetup(state, nexus, commandCtx, earlyConfigPath, \"setup\");\n\t\t\t\t\t\tif (result?.configChanged) {\n\t\t\t\t\t\t\tcommandOwner?.throwIfInactive();\n\t\t\t\t\t\t\tawait commandReload();\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tcase \"logout\": {\n\t\t\t\t\t\tconst serverName = rest;\n\t\t\t\t\t\tif (!serverName) {\n\t\t\t\t\t\t\tif (commandCtx.hasUI) commandCtx.ui?.notify(\"Usage: /mcp logout <server>\", \"error\");\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcommandOwner?.throwIfInactive();\n\t\t\t\t\t\tawait logoutServer(serverName, state, commandCtx);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tcase \"token\": {\n\t\t\t\t\t\tconst action = parts[1];\n\t\t\t\t\t\tconst serverName = parts.slice(2).join(\" \");\n\t\t\t\t\t\tif (action !== \"set\" && action !== \"remove\" && action !== \"status\") {\n\t\t\t\t\t\t\tif (commandCtx.hasUI)\n\t\t\t\t\t\t\t\tcommandCtx.ui?.notify(\"Usage: /mcp token set|remove|status <server>\", \"error\");\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!serverName) {\n\t\t\t\t\t\t\tif (commandCtx.hasUI)\n\t\t\t\t\t\t\t\tcommandCtx.ui?.notify(\"Usage: /mcp token set|remove|status <server>\", \"error\");\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcommandOwner?.throwIfInactive();\n\t\t\t\t\t\tawait manageBearerToken(action, serverName, state, commandCtx);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tcase \"disable\":\n\t\t\t\t\tcase \"enable\": {\n\t\t\t\t\t\tconst serverName = rest;\n\t\t\t\t\t\tif (!ctx.isProjectTrusted()) {\n\t\t\t\t\t\t\tcommandCtx.ui?.notify(`Trust this project before running /mcp ${subcommand}.`, \"warning\");\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (programmaticConfig) {\n\t\t\t\t\t\t\tcommandCtx.ui?.notify(\n\t\t\t\t\t\t\t\t`/mcp ${subcommand} is unavailable when config is supplied by createMcpAdapter().`,\n\t\t\t\t\t\t\t\t\"info\",\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!serverName) {\n\t\t\t\t\t\t\tcommandCtx.ui?.notify(`Usage: /mcp ${subcommand} <server>`, \"error\");\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!state.config.mcpServers[serverName]) {\n\t\t\t\t\t\t\tcommandCtx.ui?.notify(`Server \"${serverName}\" not found in effective config`, \"error\");\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcommandOwner?.throwIfInactive();\n\t\t\t\t\t\tconst result = writeProjectServerDisabledOverride(\n\t\t\t\t\t\t\tearlyConfigPath,\n\t\t\t\t\t\t\tcommandCtx.cwd,\n\t\t\t\t\t\t\tserverName,\n\t\t\t\t\t\t\tsubcommand === \"disable\",\n\t\t\t\t\t\t);\n\t\t\t\t\t\tif (result.changed) {\n\t\t\t\t\t\t\tcommandCtx.ui?.notify(\n\t\t\t\t\t\t\t\t`${subcommand === \"disable\" ? \"Disabled\" : \"Enabled\"} server \"${serverName}\" in ${result.path} — run /reload to apply`,\n\t\t\t\t\t\t\t\t\"info\",\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tcommandCtx.ui?.notify(\n\t\t\t\t\t\t\t\t`Server \"${serverName}\" is already ${subcommand === \"disable\" ? \"disabled\" : \"enabled\"}`,\n\t\t\t\t\t\t\t\t\"info\",\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tif (commandCtx.hasUI) {\n\t\t\t\t\t\t\tcommandOwner?.throwIfInactive();\n\t\t\t\t\t\t\tif (programmaticConfig || !ctx.isProjectTrusted()) {\n\t\t\t\t\t\t\t\tif (programmaticConfig) {\n\t\t\t\t\t\t\t\t\tcommandCtx.ui?.notify(\n\t\t\t\t\t\t\t\t\t\t\"MCP status is shown from the in-memory SDK config; configuration discovery is unavailable.\",\n\t\t\t\t\t\t\t\t\t\t\"info\",\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tawait showStatus(state, commandCtx);\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tconst result = await openMcpPanel(state, nexus, commandCtx, earlyConfigPath, (changes) => {\n\t\t\t\t\t\t\t\tapplyDirectToolConfigChanges(changes);\n\t\t\t\t\t\t\t\tsyncToolSurface(commandCtx);\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\tif (result?.configChanged) {\n\t\t\t\t\t\t\t\tcommandOwner?.throwIfInactive();\n\t\t\t\t\t\t\t\tawait commandReload();\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tawait showStatus(state, commandCtx);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t},\n\t\t});\n\tregisterMcpCommand(\"mcp\");\n\n\tnexus.registerCommand(\"mcp-auth\", {\n\t\tdescription: \"Authenticate with an MCP server (OAuth)\",\n\t\thandler: async (args, ctx) => {\n\t\t\tconst commandOwner = currentOwner;\n\t\t\tconst commandHasUI = ctx.hasUI;\n\t\t\tconst commandCtx = {\n\t\t\t\thasUI: commandHasUI,\n\t\t\t\tui: commandHasUI ? (commandOwner ? createOwnedUi(ctx.ui, commandOwner) : ctx.ui) : undefined,\n\t\t\t\tcwd: ctx.cwd,\n\t\t\t\tmode: ctx.mode,\n\t\t\t\tsignal: commandOwner?.signal ?? ctx.signal,\n\t\t\t\tisProjectTrusted: () => ctx.isProjectTrusted(),\n\t\t\t} as unknown as ExtensionContext;\n\t\t\tconst serverName = args?.trim();\n\t\t\tif (!serverName && !commandCtx.hasUI) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (!state && initPromise) {\n\t\t\t\ttry {\n\t\t\t\t\tconst initialized = await initPromise;\n\t\t\t\t\tcommandOwner?.throwIfInactive();\n\t\t\t\t\tstate = initialized;\n\t\t\t\t} catch (error) {\n\t\t\t\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\t\t\t\tif (commandCtx.hasUI) commandCtx.ui?.notify(`MCP initialization failed: ${message}`, \"error\");\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (!state) {\n\t\t\t\tif (commandCtx.hasUI) commandCtx.ui?.notify(\"MCP not initialized\", \"error\");\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (!serverName) {\n\t\t\t\tif (!ctx.isProjectTrusted()) {\n\t\t\t\t\tcommandCtx.ui?.notify(\n\t\t\t\t\t\t\"Trust this project or specify a global MCP server with /mcp-auth <server>.\",\n\t\t\t\t\t\t\"warning\",\n\t\t\t\t\t);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (programmaticConfig) {\n\t\t\t\t\tcommandCtx.ui?.notify(\n\t\t\t\t\t\t\"Use /mcp-auth <server> to authenticate a server from the in-memory SDK config.\",\n\t\t\t\t\t\t\"info\",\n\t\t\t\t\t);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tawait openMcpAuthPanel(state, nexus, commandCtx, earlyConfigPath);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst result = await authenticateServer(\n\t\t\t\tserverName,\n\t\t\t\tstate.config,\n\t\t\t\tcommandCtx,\n\t\t\t\tcommandCtx.signal,\n\t\t\t\tstate.oauthRuntime,\n\t\t\t);\n\t\t\tif (result.ok) {\n\t\t\t\tcommandOwner?.throwIfInactive();\n\t\t\t\tawait reconnectServer(state, commandCtx, serverName);\n\t\t\t}\n\t\t},\n\t});\n\n\tif (earlyConfig.settings?.scriptMode !== false) {\n\t\t(nexus.registerTool as (tool: unknown) => unknown)({\n\t\t\tname: \"mcpScript\",\n\t\t\tlabel: \"MCP Script\",\n\t\t\tdescription:\n\t\t\t\t\"Run trusted JavaScript that makes multiple MCP tool calls in one request — loop, filter, chain, or fan out between calls. For a single MCP call, search, describe, status check, or auth action, use the mcp tool instead. Discover with await tools.search({ query }) — resolves to { items: [{ path, name, server, description? }], total, hasMore, nextOffset }, not an { ok, data } envelope. Inspect with await tools.describe({ path }) — resolves to the tool descriptor with inputTypeScript, or { path, error: { code, message, suggestions } }. Then call tools.call(path, args) — resolves to { ok: true, data } or { ok: false, error: { code, message } } — or use direct flat calls when the name is already known; use emit(value) for user-visible output. Load the mcp-scripting skill for the full workflow guide.\",\n\t\t\tpromptSnippet: \"Batch multiple MCP tool calls in one JavaScript request (loop, filter, chain)\",\n\t\t\tparameters: Type.Object({\n\t\t\t\tcode: Type.String({\n\t\t\t\t\tdescription: \"Trusted JavaScript MCP script. Use tools.<prefixedToolName>(args) and emit(value).\",\n\t\t\t\t}),\n\t\t\t\ttimeoutMs: optionalNumber({\n\t\t\t\t\tminimum: 1,\n\t\t\t\t\tdescription: \"Execution timeout in milliseconds (default: 30000)\",\n\t\t\t\t}),\n\t\t\t}),\n\t\t\trenderResult: renderMcpToolResult,\n\t\t\tasync execute(\n\t\t\t\t_toolCallId: string,\n\t\t\t\tparams: { code: string; timeoutMs?: number },\n\t\t\t\tsignal: AbortSignal | undefined,\n\t\t\t) {\n\t\t\t\tconst executeOwner = currentOwner;\n\t\t\t\tif (!state && initPromise) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst initialized = await awaitWithTimeout(initPromise, INIT_WAIT_TIMEOUT_MS);\n\t\t\t\t\t\tif (initialized === INIT_WAIT_TIMED_OUT) {\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\tcontent: [\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\ttype: \"text\" as const,\n\t\t\t\t\t\t\t\t\t\ttext: \"MCP initialization is still in progress. Try again shortly.\",\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\tdetails: { mode: \"script\", error: \"init_timeout\", timeoutMs: INIT_WAIT_TIMEOUT_MS },\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t\texecuteOwner?.throwIfInactive();\n\t\t\t\t\t\tstate = initialized;\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tif (executeOwner && isAbortError(error, executeOwner.signal)) throw error;\n\t\t\t\t\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tcontent: [{ type: \"text\" as const, text: `MCP initialization failed: ${message}` }],\n\t\t\t\t\t\t\tdetails: { mode: \"script\", error: \"init_failed\", message },\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (!state) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tcontent: [{ type: \"text\" as const, text: \"MCP not initialized\" }],\n\t\t\t\t\t\tdetails: { mode: \"script\", error: \"not_initialized\" },\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\texecuteOwner?.throwIfInactive();\n\t\t\t\treturn runMcpScript(state, params.code, params.timeoutMs, getNexusTools, signal);\n\t\t\t},\n\t\t});\n\t}\n\n\tfunction registerProxyTool(description: string): void {\n\t\t(nexus.registerTool as (tool: unknown) => unknown)({\n\t\t\tname: \"mcp\",\n\t\t\tlabel: \"MCP\",\n\t\t\tdescription,\n\t\t\tpromptSnippet: \"MCP gateway — status, search, describe, auth, and single MCP tool calls\",\n\t\t\trenderShell: toolRenderShell,\n\t\t\trenderCall: createMcpProxyToolCallRenderer(toolRenderOptions),\n\t\t\tparameters: Type.Object({\n\t\t\t\ttool: Type.Optional(Type.String({ description: \"Tool name to call (e.g., 'xcodebuild_list_sims')\" })),\n\t\t\t\targs: Type.Optional(\n\t\t\t\t\tType.Union(\n\t\t\t\t\t\t[\n\t\t\t\t\t\t\tType.String({ description: 'Arguments as a JSON string (e.g., \\'{\"key\": \"value\"}\\')' }),\n\t\t\t\t\t\t\tType.Object(\n\t\t\t\t\t\t\t\t{},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tadditionalProperties: true,\n\t\t\t\t\t\t\t\t\tdescription: 'Arguments as a JSON object (e.g., { \"key\": \"value\" })',\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t],\n\t\t\t\t\t\t{ description: \"Tool arguments as a JSON object, or as a JSON string encoding one\" },\n\t\t\t\t\t),\n\t\t\t\t),\n\t\t\t\tconnect: Type.Optional(\n\t\t\t\t\tType.String({ description: \"Server name to connect (lazy connect + metadata refresh)\" }),\n\t\t\t\t),\n\t\t\t\tdescribe: Type.Optional(Type.String({ description: \"Tool name to describe (shows parameters)\" })),\n\t\t\t\tinstructions: Type.Optional(\n\t\t\t\t\tType.String({ description: \"Server name to show that server's usage instructions\" }),\n\t\t\t\t),\n\t\t\t\tsearch: Type.Optional(Type.String({ description: \"Search tools by name/description\" })),\n\t\t\t\tregex: Type.Optional(Type.Boolean({ description: \"Treat search as regex (default: substring match)\" })),\n\t\t\t\tincludeSchemas: Type.Optional(\n\t\t\t\t\tType.Boolean({ description: \"Include parameter schemas in search results (default: true)\" }),\n\t\t\t\t),\n\t\t\t\tlimit: optionalNumber({ minimum: 1, description: \"Maximum search results to return (default: 12)\" }),\n\t\t\t\toffset: optionalNumber({ minimum: 0, description: \"Search result offset (default: 0)\" }),\n\t\t\t\tserver: Type.Optional(\n\t\t\t\t\tType.String({ description: \"Filter to specific server (also disambiguates tool calls)\" }),\n\t\t\t\t),\n\t\t\t\taction: Type.Optional(\n\t\t\t\t\tType.String({ description: \"Action: 'ui-messages', 'auth-start', or 'auth-complete'\" }),\n\t\t\t\t),\n\t\t\t}),\n\t\t\trenderResult: renderMcpToolResult,\n\t\t\tasync execute(\n\t\t\t\t_toolCallId: string,\n\t\t\t\tparams: {\n\t\t\t\t\ttool?: string;\n\t\t\t\t\targs?: string | Record<string, unknown>;\n\t\t\t\t\tconnect?: string;\n\t\t\t\t\tdescribe?: string;\n\t\t\t\t\tinstructions?: string;\n\t\t\t\t\tsearch?: string;\n\t\t\t\t\tregex?: boolean;\n\t\t\t\t\tincludeSchemas?: boolean;\n\t\t\t\t\tlimit?: number;\n\t\t\t\t\toffset?: number;\n\t\t\t\t\tserver?: string;\n\t\t\t\t\taction?: string;\n\t\t\t\t},\n\t\t\t\tsignal: AbortSignal | undefined,\n\t\t\t\t_onUpdate: AgentToolUpdateCallback<Record<string, unknown>> | undefined,\n\t\t\t\t_ctx: ExtensionContext,\n\t\t\t) {\n\t\t\t\tconst executeOwner = currentOwner;\n\t\t\t\tconst parseArgs = (\n\t\t\t\t\tvalue: string | Record<string, unknown> | undefined,\n\t\t\t\t): Record<string, unknown> | undefined => {\n\t\t\t\t\tif (value === undefined || value === \"\") return undefined;\n\t\t\t\t\tlet args: unknown;\n\t\t\t\t\tif (typeof value === \"string\") {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\targs = JSON.parse(value);\n\t\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\t\tif (error instanceof SyntaxError) {\n\t\t\t\t\t\t\t\tthrow new Error(`Invalid args JSON: ${error.message}`, { cause: error });\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tthrow error;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\targs = value;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (typeof args !== \"object\" || args === null || Array.isArray(args)) {\n\t\t\t\t\t\tconst gotType = Array.isArray(args) ? \"array\" : args === null ? \"null\" : typeof args;\n\t\t\t\t\t\tthrow new Error(`Invalid args: expected a JSON object, got ${gotType}`);\n\t\t\t\t\t}\n\t\t\t\t\treturn args as Record<string, unknown>;\n\t\t\t\t};\n\t\t\t\tconst validateNestedGatewayParams = (value: Record<string, unknown>): typeof params => {\n\t\t\t\t\tfor (const key of [\n\t\t\t\t\t\t\"tool\",\n\t\t\t\t\t\t\"connect\",\n\t\t\t\t\t\t\"describe\",\n\t\t\t\t\t\t\"instructions\",\n\t\t\t\t\t\t\"search\",\n\t\t\t\t\t\t\"server\",\n\t\t\t\t\t\t\"action\",\n\t\t\t\t\t] as const) {\n\t\t\t\t\t\tif (value[key] !== undefined && typeof value[key] !== \"string\") {\n\t\t\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t\t\t`Invalid nested gateway param \\`${key}\\`: expected string, got ${Array.isArray(value[key]) ? \"array\" : typeof value[key]}`,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tfor (const key of [\"regex\", \"includeSchemas\"] as const) {\n\t\t\t\t\t\tif (value[key] !== undefined && typeof value[key] !== \"boolean\") {\n\t\t\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t\t\t`Invalid nested gateway param \\`${key}\\`: expected boolean, got ${Array.isArray(value[key]) ? \"array\" : typeof value[key]}`,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tfor (const key of [\"limit\", \"offset\"] as const) {\n\t\t\t\t\t\tif (value[key] !== undefined && typeof value[key] !== \"number\") {\n\t\t\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t\t\t`Invalid nested gateway param \\`${key}\\`: expected number, got ${Array.isArray(value[key]) ? \"array\" : typeof value[key]}`,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tconst args = value.args;\n\t\t\t\t\tif (\n\t\t\t\t\t\targs !== undefined &&\n\t\t\t\t\t\ttypeof args !== \"string\" &&\n\t\t\t\t\t\t(typeof args !== \"object\" || args === null || Array.isArray(args))\n\t\t\t\t\t) {\n\t\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t\t`Invalid nested gateway param \\`args\\`: expected JSON object or JSON string, got ${Array.isArray(args) ? \"array\" : args === null ? \"null\" : typeof args}`,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\treturn value as typeof params;\n\t\t\t\t};\n\t\t\t\tlet parsedArgs = parseArgs(params.args);\n\t\t\t\tlet dispatchParams = params;\n\t\t\t\tconst hasGatewayMode = (value: typeof params): boolean =>\n\t\t\t\t\tvalue.tool !== undefined ||\n\t\t\t\t\tvalue.connect !== undefined ||\n\t\t\t\t\tvalue.describe !== undefined ||\n\t\t\t\t\tvalue.instructions !== undefined ||\n\t\t\t\t\tvalue.search !== undefined ||\n\t\t\t\t\tvalue.server !== undefined ||\n\t\t\t\t\tvalue.action !== undefined;\n\t\t\t\tif (!hasGatewayMode(params) && parsedArgs) {\n\t\t\t\t\tconst nestedParams = validateNestedGatewayParams(parsedArgs);\n\t\t\t\t\tif (hasGatewayMode(nestedParams)) {\n\t\t\t\t\t\tdispatchParams = nestedParams;\n\t\t\t\t\t\tparsedArgs = parseArgs(nestedParams.args);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t\t'Gateway params were nested inside `args`; pass them top-level (for example, mcp({ search: \"...\" }) or mcp({ tool: \"...\", args: {} })).',\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t} else if (!hasGatewayMode(params) && params.args !== undefined) {\n\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t'Gateway params were nested inside `args`; pass them top-level (for example, mcp({ search: \"...\" }) or mcp({ tool: \"...\", args: {} })).',\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tif (!state && initPromise) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst initialized = await awaitWithTimeout(initPromise, INIT_WAIT_TIMEOUT_MS);\n\t\t\t\t\t\tif (initialized === INIT_WAIT_TIMED_OUT) {\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\tcontent: [\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\ttype: \"text\" as const,\n\t\t\t\t\t\t\t\t\t\ttext: \"MCP initialization is still in progress. Try again shortly.\",\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\tdetails: { error: \"init_timeout\", timeoutMs: INIT_WAIT_TIMEOUT_MS },\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t\texecuteOwner?.throwIfInactive();\n\t\t\t\t\t\tstate = initialized;\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tif (executeOwner && isAbortError(error, executeOwner.signal)) throw error;\n\t\t\t\t\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tcontent: [{ type: \"text\" as const, text: `MCP initialization failed: ${message}` }],\n\t\t\t\t\t\t\tdetails: { error: \"init_failed\", message },\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (!state) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tcontent: [{ type: \"text\" as const, text: \"MCP not initialized\" }],\n\t\t\t\t\t\tdetails: { error: \"not_initialized\" },\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\texecuteOwner?.throwIfInactive();\n\n\t\t\t\tif (dispatchParams.action === \"ui-messages\") {\n\t\t\t\t\treturn executeUiMessages(state);\n\t\t\t\t}\n\t\t\t\tif (dispatchParams.action === \"auth-start\") {\n\t\t\t\t\tif (!dispatchParams.server) {\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tcontent: [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\ttype: \"text\" as const,\n\t\t\t\t\t\t\t\t\ttext: 'auth-start requires `server`. Example: mcp({ action: \"auth-start\", server: \"linear-server\" })',\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\tdetails: { mode: \"auth-start\", error: \"missing_server\" },\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t\treturn signal\n\t\t\t\t\t\t? executeAuthStart(state, dispatchParams.server, signal)\n\t\t\t\t\t\t: executeAuthStart(state, dispatchParams.server);\n\t\t\t\t}\n\t\t\t\tif (dispatchParams.action === \"auth-complete\") {\n\t\t\t\t\tif (!dispatchParams.server) {\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tcontent: [{ type: \"text\" as const, text: \"auth-complete requires `server`.\" }],\n\t\t\t\t\t\t\tdetails: { mode: \"auth-complete\", error: \"missing_server\" },\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t\tconst input = parsedArgs?.redirectUrl ?? parsedArgs?.code ?? parsedArgs?.input;\n\t\t\t\t\tif (typeof input !== \"string\" || input.trim().length === 0) {\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tcontent: [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\ttype: \"text\" as const,\n\t\t\t\t\t\t\t\t\ttext: \"auth-complete requires args with `redirectUrl`, `code`, or `input`.\",\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\tdetails: { mode: \"auth-complete\", error: \"missing_input\" },\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t\treturn signal\n\t\t\t\t\t\t? executeAuthComplete(state, dispatchParams.server, input, signal)\n\t\t\t\t\t\t: executeAuthComplete(state, dispatchParams.server, input);\n\t\t\t\t}\n\t\t\t\tif (dispatchParams.tool) {\n\t\t\t\t\treturn executeCall(state, dispatchParams.tool, parsedArgs, dispatchParams.server, getNexusTools, signal);\n\t\t\t\t}\n\t\t\t\tif (dispatchParams.connect) {\n\t\t\t\t\tconst result = await executeConnect(state, dispatchParams.connect, signal);\n\t\t\t\t\tsyncToolSurface(_ctx as ExtensionContext);\n\t\t\t\t\treturn result;\n\t\t\t\t}\n\t\t\t\tif (dispatchParams.describe) {\n\t\t\t\t\treturn executeDescribe(state, dispatchParams.describe);\n\t\t\t\t}\n\t\t\t\tif (dispatchParams.instructions) {\n\t\t\t\t\treturn executeInstructions(state, dispatchParams.instructions);\n\t\t\t\t}\n\t\t\t\tif (dispatchParams.search !== undefined) {\n\t\t\t\t\treturn executeSearch(\n\t\t\t\t\t\tstate,\n\t\t\t\t\t\tdispatchParams.search,\n\t\t\t\t\t\tdispatchParams.regex,\n\t\t\t\t\t\tdispatchParams.server,\n\t\t\t\t\t\tdispatchParams.includeSchemas,\n\t\t\t\t\t\tdispatchParams.limit,\n\t\t\t\t\t\tdispatchParams.offset,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tif (dispatchParams.server) {\n\t\t\t\t\treturn executeList(state, dispatchParams.server);\n\t\t\t\t}\n\t\t\t\treturn executeStatus(state);\n\t\t\t},\n\t\t});\n\t\tproxyToolRegistered = true;\n\t\tproxyToolDescription = description;\n\t}\n\n\tfunction syncProxyTool(config: McpConfig, cache: MetadataCache | null, directSpecs: DirectToolSpec[]): void {\n\t\tconst missingConfiguredDirectToolServers = getMissingConfiguredDirectToolServers(\n\t\t\tconfig,\n\t\t\tcache,\n\t\t\tenvRaw === undefined || envRaw === \"__none__\" ? undefined : envDirectToolOverride,\n\t\t);\n\t\tconst shouldRegisterProxyTool =\n\t\t\tconfig.settings?.disableProxyTool !== true ||\n\t\t\tdirectSpecs.length === 0 ||\n\t\t\tmissingConfiguredDirectToolServers.length > 0;\n\n\t\tif (shouldRegisterProxyTool) {\n\t\t\tconst description = buildProxyDescription(config, cache, directSpecs);\n\t\t\tif (!proxyToolRegistered || proxyToolDescription !== description) {\n\t\t\t\tregisterProxyTool(description);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst activeTools = getActiveToolsIfReady();\n\t\t\tif (activeTools && !activeTools.includes(\"mcp\")) {\n\t\t\t\tnexus.setActiveTools([...activeTools, \"mcp\"]);\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tif (proxyToolRegistered) {\n\t\t\tconst unregistered = deactivateTools([\"mcp\"]);\n\t\t\tif (unregistered.includes(\"mcp\")) {\n\t\t\t\tproxyToolRegistered = false;\n\t\t\t\tproxyToolDescription = null;\n\t\t\t}\n\t\t}\n\t}\n\n\tnexus.on(\"resources_discover\", () => {\n\t\tconst skillsPath = join(import.meta.dirname, \"skills\");\n\t\tif (existsSync(skillsPath)) return { skillPaths: [skillsPath] };\n\t});\n\n\tconst initialDirectTools = syncDirectTools(earlyConfig, earlyCache).specs;\n\tsyncProxyTool(earlyConfig, earlyCache, initialDirectTools);\n\tstartLoadTimeInitialization();\n}\n\nexport function createMcpAdapter(options: McpAdapterOptions = {}) {\n\tconst factoryConfig = options.config !== undefined ? cloneMcpConfig(options.config) : undefined;\n\treturn function mcpAdapter(nexus: ExtensionAPI) {\n\t\tinstallMcpAdapter(nexus, {\n\t\t\t...(options.configPath !== undefined ? { configPath: options.configPath } : {}),\n\t\t\t...(factoryConfig !== undefined ? { config: cloneMcpConfig(factoryConfig) } : {}),\n\t\t});\n\t};\n}\n\n/**\n * Register an MCP server with the adapter installed for this Nexus instance.\n * Registrations are session/runtime scoped and never persisted. Duplicate\n * names fail closed. Registered servers are proxy-tool-only; their tools\n * become visible at the next tool sync. To change a definition, dispose the\n * registration and register again.\n */\nexport function registerMcpServer(options: {\n\tnexus: ExtensionAPI;\n\tname: string;\n\tdefinition: ServerEntry;\n}): McpServerRegistration {\n\tconst { nexus, name, definition } = options;\n\tconst register = runtimeRegistrars.get(nexus);\n\tif (!register) {\n\t\tthrow new Error(\"The native Nexus MCP runtime is not installed for this instance\");\n\t}\n\treturn register(name, definition);\n}\n\nexport default createMcpAdapter();\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/extensions/mcp/index.ts"],"names":[],"mappings":"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","sourcesContent":["import { existsSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport type { Api, Model } from \"@earendil-works/pi-ai\";\nimport type { TSchema } from \"typebox\";\nimport { Type } from \"typebox\";\nimport type { AgentToolUpdateCallback, ExtensionAPI, ExtensionContext, ToolInfo } from \"../../core/extensions/types.ts\";\nimport {\n\tADD_SERVER_USAGE,\n\taddCustomServer,\n\tauthenticateServer,\n\tlogoutServer,\n\tmanageBearerToken,\n\topenMcpAuthPanel,\n\topenMcpPanel,\n\topenMcpSetup,\n\tparseAddServerArgs,\n\treconnectServer,\n\treconnectServers,\n\tshowPrompts,\n\tshowStatus,\n\tshowTools,\n} from \"./commands.ts\";\nimport { cloneMcpConfig, loadMcpConfig, writeProjectServerDisabledOverride } from \"./config.ts\";\nimport {\n\tbuildProxyDescription,\n\tcreateDirectToolExecutor,\n\tgetMissingConfiguredDirectToolServers,\n\tresolveDirectTools,\n} from \"./direct-tools.ts\";\nimport { toolErrorOverride } from \"./error-signal.ts\";\nimport { flushMetadataCache, initializeMcp, updateStatusBar } from \"./init.ts\";\nimport { logger } from \"./logger.ts\";\nimport type { McpOAuthRuntime } from \"./mcp-auth-flow.ts\";\nimport { createOAuthRuntime, shutdownOAuth } from \"./mcp-auth-flow.ts\";\nimport { runMcpScript } from \"./mcp-code.ts\";\nimport { publishMcpStatusShutdown } from \"./mcp-status.ts\";\nimport { loadMetadataCache, type MetadataCache } from \"./metadata-cache.ts\";\nimport { createPromptCommand, resolveCachedPrompts } from \"./prompts.ts\";\nimport {\n\texecuteAuthComplete,\n\texecuteAuthStart,\n\texecuteCall,\n\texecuteConnect,\n\texecuteDescribe,\n\texecuteInstructions,\n\texecuteList,\n\texecuteSearch,\n\texecuteStatus,\n\texecuteUiMessages,\n} from \"./proxy-modes.ts\";\nimport { createMcpRuntimeOwner, createOwnedUi, isAbortError, type McpRuntimeOwner } from \"./runtime-owner.ts\";\nimport type { McpExtensionState } from \"./state.ts\";\nimport { cleanupMaterializedBinaryResources } from \"./tool-registrar.ts\";\nimport {\n\tcreateMcpDirectToolCallRenderer,\n\tcreateMcpProxyToolCallRenderer,\n\tcreateMcpToolResultRenderer,\n\tresolveMcpToolRenderOptions,\n} from \"./tool-result-renderer.ts\";\nimport type { DirectToolSpec, McpAdapterOptions, McpConfig, PromptMetadata, ServerEntry } from \"./types.ts\";\nimport { formatTerminalError, getConfigPathFromArgv, normalizeDirectToolInputSchema, truncateAtWord } from \"./utils.ts\";\n\nexport type { McpAdapterOptions, ServerEntry } from \"./types.ts\";\nexport {\n\tMCP_STATUS_EVENT,\n\tMCP_STATUS_SNAPSHOT_VERSION,\n\tMCP_TOOL_APPROVAL_REQUEST_EVENT,\n\ttype McpServerRuntimeStatus,\n\ttype McpServerStatusSnapshot,\n\ttype McpStatusSnapshot,\n\ttype McpToolApprovalDecision,\n\ttype McpToolApprovalHandler,\n\ttype McpToolApprovalOrigin,\n\ttype McpToolApprovalRequest,\n} from \"./types.ts\";\n\nconst INIT_WAIT_TIMEOUT_MS = 30_000;\nconst INIT_WAIT_TIMED_OUT: unique symbol = Symbol(\"init-wait-timed-out\");\n\nexport interface McpServerRegistration {\n\tdispose(): Promise<void>;\n}\n\n// Routes runtime registrations to the adapter installed for a specific Nexus\n// instance, so a process with several adapters cannot cross-register.\nconst runtimeRegistrars = new WeakMap<ExtensionAPI, (name: string, definition: ServerEntry) => McpServerRegistration>();\n\nasync function awaitWithTimeout<T>(promise: Promise<T>, timeoutMs: number): Promise<T | typeof INIT_WAIT_TIMED_OUT> {\n\tlet timer: ReturnType<typeof setTimeout> | undefined;\n\ttry {\n\t\treturn await Promise.race([\n\t\t\tpromise,\n\t\t\tnew Promise<typeof INIT_WAIT_TIMED_OUT>((resolve) => {\n\t\t\t\ttimer = setTimeout(() => resolve(INIT_WAIT_TIMED_OUT), timeoutMs);\n\t\t\t\ttimer.unref?.();\n\t\t\t}),\n\t\t]);\n\t} finally {\n\t\tclearTimeout(timer);\n\t}\n}\n\n// TypeBox 1.x annotates raw objects passed to Type.Optional with an enumerable\n// \"~optional\" key that survives serialization into provider tool schemas (Gemini\n// rejects it with 400 INVALID_ARGUMENT). Prefer a real Type.Number schema; fall\n// back to a plain raw schema for host TypeBox shims that omit Type.Number, since\n// a property left out of `required` is optional by default.\nfunction optionalNumber(options: { minimum?: number; description: string }): TSchema {\n\tconst number = (Type as { Number?: (opts: typeof options) => TSchema }).Number;\n\treturn typeof number === \"function\"\n\t\t? Type.Optional(number(options))\n\t\t: ({ type: \"number\", ...options } as unknown as TSchema);\n}\n\nfunction installMcpAdapter(nexus: ExtensionAPI, options: McpAdapterOptions) {\n\tconst sessionConfig = options.config !== undefined ? cloneMcpConfig(options.config) : undefined;\n\tconst programmaticConfig = sessionConfig !== undefined;\n\tlet state: McpExtensionState | null = null;\n\tlet initPromise: Promise<McpExtensionState> | null = null;\n\tlet currentOwner: McpRuntimeOwner | null = null;\n\tlet currentOAuthRuntime: McpOAuthRuntime | null = null;\n\tlet currentModel: Model<Api> | undefined;\n\tlet lifecycleGeneration = 0;\n\n\tasync function shutdownState(currentState: McpExtensionState | null, reason: string): Promise<void> {\n\t\tif (!currentState) {\n\t\t\tpublishMcpStatusShutdown(nexus.events);\n\t\t\treturn;\n\t\t}\n\n\t\tpublishMcpStatusShutdown(currentState.statusEvents);\n\n\t\tif (currentState.uiServer) {\n\t\t\tcurrentState.uiServer.close(reason);\n\t\t\tcurrentState.uiServer = null;\n\t\t}\n\n\t\tlet flushError: unknown;\n\t\ttry {\n\t\t\tflushMetadataCache(currentState);\n\t\t} catch (error) {\n\t\t\tflushError = error;\n\t\t}\n\n\t\ttry {\n\t\t\tif (currentState.owner) {\n\t\t\t\tawait currentState.owner.stop(reason);\n\t\t\t} else {\n\t\t\t\tawait currentState.lifecycle.gracefulShutdown();\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tif (flushError) {\n\t\t\t\tconsole.error(`MCP: graceful shutdown failed after metadata flush error: ${formatTerminalError(error)}`);\n\t\t\t} else {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t}\n\n\t\tif (flushError) {\n\t\t\tthrow flushError;\n\t\t}\n\t}\n\n\tconst earlyConfigPath = programmaticConfig ? undefined : (options.configPath ?? getConfigPathFromArgv());\n\tconst earlyConfig = programmaticConfig\n\t\t? cloneMcpConfig(sessionConfig)\n\t\t: loadMcpConfig(earlyConfigPath, process.cwd(), false);\n\tconst earlyCache = loadMetadataCache();\n\tconst envRaw = process.env.MCP_DIRECT_TOOLS;\n\tconst envDirectToolOverride = envRaw\n\t\t?.split(\",\")\n\t\t.map((s) => s.trim())\n\t\t.filter(Boolean);\n\tconst registeredDirectTools = new Map<string, string>();\n\tconst fallbackDeactivatedTools = new Set<string>();\n\tconst toolRenderOptions = resolveMcpToolRenderOptions(earlyConfig.settings);\n\tconst toolRenderShell = toolRenderOptions.resultRendering === \"compact\" ? \"self\" : \"default\";\n\tconst renderMcpToolResult = createMcpToolResultRenderer(toolRenderOptions);\n\tlet proxyToolRegistered = false;\n\tlet proxyToolDescription: string | null = null;\n\tlet directToolsFrozen = false;\n\t// Session/runtime scoped server registrations from other extensions. They\n\t// survive session restarts within this install and die with the process.\n\tconst runtimeServers = new Map<string, ServerEntry>();\n\n\t// Mirrors init's per-server lifecycle registration so runtime servers get\n\t// idle cleanup and keep-alive health recovery like configured servers.\n\tfunction attachRuntimeServerLifecycle(targetState: McpExtensionState, name: string, definition: ServerEntry): void {\n\t\tconst lifecycleMode = definition.lifecycle ?? \"lazy\";\n\t\tconst persistsAfterFirstSpawn = lifecycleMode === \"eager\" || lifecycleMode === \"lazy-keep-alive\";\n\t\tconst idleOverride = definition.idleTimeout ?? (persistsAfterFirstSpawn ? 0 : undefined);\n\t\ttargetState.lifecycle.registerServer(\n\t\t\tname,\n\t\t\tdefinition,\n\t\t\tidleOverride !== undefined ? { idleTimeout: idleOverride } : undefined,\n\t\t);\n\t\tif (lifecycleMode === \"keep-alive\") targetState.lifecycle.markKeepAlive(name, definition);\n\t}\n\n\t// OMP remaps `typebox` to a host shim that historically lacked Type.Unsafe.\n\t// Prefer Unsafe when present (real TypeBox / fixed OMP shim); otherwise pass\n\t// the normalized JSON Schema through as a plain object so toolWireSchema and\n\t// validateToolArguments still treat it as JSON Schema.\n\tconst toToolParameters = (schema: Record<string, unknown>) =>\n\t\ttypeof (Type as { Unsafe?: (value: never) => unknown }).Unsafe === \"function\"\n\t\t\t? (Type as { Unsafe: (value: never) => unknown }).Unsafe(schema as never)\n\t\t\t: schema;\n\n\tfunction directToolFingerprint(spec: DirectToolSpec): string {\n\t\treturn JSON.stringify({\n\t\t\tserverName: spec.serverName,\n\t\t\toriginalName: spec.originalName,\n\t\t\tprefixedName: spec.prefixedName,\n\t\t\tdescription: spec.description,\n\t\t\tinputSchema: spec.inputSchema,\n\t\t\tresourceUri: spec.resourceUri,\n\t\t\tuiResourceUri: spec.uiResourceUri,\n\t\t\tuiStreamMode: spec.uiStreamMode,\n\t\t});\n\t}\n\n\tfunction registerDirectTool(spec: DirectToolSpec): void {\n\t\t(nexus.registerTool as (tool: unknown) => unknown)({\n\t\t\tname: spec.prefixedName,\n\t\t\tlabel: `MCP: ${spec.originalName}`,\n\t\t\tdescription: spec.description || \"(no description)\",\n\t\t\tpromptSnippet: truncateAtWord(spec.description, 100) || `MCP tool from ${spec.serverName}`,\n\t\t\tparameters: toToolParameters(normalizeDirectToolInputSchema(spec.inputSchema)),\n\t\t\texecute: createDirectToolExecutor(\n\t\t\t\t() => state,\n\t\t\t\t() => initPromise,\n\t\t\t\tspec,\n\t\t\t),\n\t\t\trenderShell: toolRenderShell,\n\t\t\trenderCall: createMcpDirectToolCallRenderer(spec.prefixedName, toolRenderOptions),\n\t\t\trenderResult: renderMcpToolResult,\n\t\t});\n\t}\n\n\tfunction resolveCurrentDirectTools(config: McpConfig, cache: MetadataCache | null): DirectToolSpec[] {\n\t\tif (envRaw === \"__none__\") return [];\n\t\tconst prefix = config.settings?.toolPrefix ?? \"server\";\n\t\treturn resolveDirectTools(config, cache, prefix, envDirectToolOverride);\n\t}\n\n\tfunction getActiveToolsIfReady(): string[] | undefined {\n\t\ttry {\n\t\t\treturn nexus.getActiveTools?.();\n\t\t} catch (error) {\n\t\t\tif (\n\t\t\t\terror instanceof Error &&\n\t\t\t\terror.message.includes(\"Action methods cannot be called during extension loading\")\n\t\t\t)\n\t\t\t\treturn undefined;\n\t\t\tthrow error;\n\t\t}\n\t}\n\n\tfunction deactivateTools(toolNames: string[]): string[] {\n\t\tif (toolNames.length === 0) return [];\n\t\tconst unregisterTool = (nexus as ExtensionAPI & { unregisterTool?: (name: string) => boolean }).unregisterTool;\n\t\tconst unregistered = toolNames.filter((toolName) => unregisterTool?.(toolName) === true);\n\t\tconst fallbackNames = toolNames.filter((toolName) => !unregistered.includes(toolName));\n\t\tconst remove = new Set(toolNames);\n\t\tconst activeTools = getActiveToolsIfReady();\n\t\tif (!activeTools || activeTools.length === 0) {\n\t\t\tfor (const toolName of fallbackNames) fallbackDeactivatedTools.add(toolName);\n\t\t\treturn unregistered;\n\t\t}\n\t\tconst nextActiveTools = activeTools.filter((name) => !remove.has(name));\n\t\tif (nextActiveTools.length !== activeTools.length) {\n\t\t\tfor (const toolName of fallbackNames) fallbackDeactivatedTools.add(toolName);\n\t\t\tnexus.setActiveTools(nextActiveTools);\n\t\t}\n\t\treturn unregistered;\n\t}\n\n\tfunction syncDirectTools(\n\t\tconfig: McpConfig,\n\t\tcache: MetadataCache | null,\n\t): {\n\t\tspecs: DirectToolSpec[];\n\t\tadded: string[];\n\t\tupdated: string[];\n\t\tdeactivated: string[];\n\t} {\n\t\tconst specs = resolveCurrentDirectTools(config, cache);\n\t\tconst nextNames = new Set(specs.map((spec) => spec.prefixedName));\n\t\tconst added: string[] = [];\n\t\tconst updated: string[] = [];\n\t\tconst deactivated: string[] = [];\n\n\t\tfor (const spec of specs) {\n\t\t\tconst fingerprint = directToolFingerprint(spec);\n\t\t\tconst previous = registeredDirectTools.get(spec.prefixedName);\n\t\t\tif (previous !== fingerprint) {\n\t\t\t\tregisterDirectTool(spec);\n\t\t\t\tregisteredDirectTools.set(spec.prefixedName, fingerprint);\n\t\t\t\tif (fallbackDeactivatedTools.delete(spec.prefixedName)) {\n\t\t\t\t\tconst activeTools = getActiveToolsIfReady();\n\t\t\t\t\tif (activeTools && !activeTools.includes(spec.prefixedName)) {\n\t\t\t\t\t\tnexus.setActiveTools([...activeTools, spec.prefixedName]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t(previous ? updated : added).push(spec.prefixedName);\n\t\t\t}\n\t\t}\n\n\t\tfor (const toolName of [...registeredDirectTools.keys()]) {\n\t\t\tif (nextNames.has(toolName)) continue;\n\t\t\tregisteredDirectTools.delete(toolName);\n\t\t\tdeactivated.push(toolName);\n\t\t}\n\n\t\tdeactivateTools(deactivated);\n\t\treturn { specs, added, updated, deactivated };\n\t}\n\n\tfunction applyDirectToolConfigChanges(changes: Map<string, true | string[] | false>): void {\n\t\tif (!state) return;\n\t\tfor (const [serverName, value] of changes) {\n\t\t\tconst definition = state.config.mcpServers[serverName];\n\t\t\tif (!definition) continue;\n\t\t\tstate.config.mcpServers[serverName] = { ...definition, directTools: value };\n\t\t}\n\t}\n\n\tfunction syncToolSurface(ctx?: ExtensionContext): void {\n\t\tconst config = state?.config ?? earlyConfig;\n\t\tconst cache = loadMetadataCache();\n\t\tconst result = syncDirectTools(config, cache);\n\t\tsyncProxyTool(config, cache, result.specs);\n\t\tconst changed = result.added.length + result.updated.length + result.deactivated.length;\n\t\tif (changed > 0 && ctx?.hasUI) {\n\t\t\tctx.ui.notify(\n\t\t\t\t`MCP: direct tools refreshed (+${result.added.length}, ~${result.updated.length}, -${result.deactivated.length})`,\n\t\t\t\t\"info\",\n\t\t\t);\n\t\t}\n\t}\n\n\tconst registeredPromptCommands = new Set<string>();\n\n\tfunction registerPromptCommands(specs: Iterable<PromptMetadata>): void {\n\t\tfor (const spec of specs) {\n\t\t\tif (registeredPromptCommands.has(spec.commandName)) {\n\t\t\t\tlogger.debug(\n\t\t\t\t\t`MCP: prompt \"${spec.originalName}\" on ${spec.serverName} skipped; /${spec.commandName} is already registered`,\n\t\t\t\t);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tregisteredPromptCommands.add(spec.commandName);\n\t\t\tnexus.registerCommand(\n\t\t\t\tspec.commandName,\n\t\t\t\tcreatePromptCommand(nexus, () => state, spec),\n\t\t\t);\n\t\t}\n\t}\n\n\tfunction syncPromptCommands(): void {\n\t\tregisterPromptCommands([...(state?.promptMetadata?.values() ?? [])].flat());\n\t}\n\n\tregisterPromptCommands(resolveCachedPrompts(earlyConfig));\n\n\truntimeRegistrars.set(nexus, (name: string, definition: ServerEntry): McpServerRegistration => {\n\t\tif (typeof name !== \"string\" || name.trim() === \"\") {\n\t\t\tthrow new Error(\"MCP server name must be a non-empty string\");\n\t\t}\n\t\tif (typeof definition !== \"object\" || definition === null || Array.isArray(definition)) {\n\t\t\tthrow new Error(`MCP server definition for \"${name}\" must be an object`);\n\t\t}\n\t\tconst effective = state?.config ?? earlyConfig;\n\t\tif (runtimeServers.has(name) || Object.hasOwn(effective.mcpServers, name)) {\n\t\t\tthrow new Error(`MCP server \"${name}\" is already registered`);\n\t\t}\n\t\t// Runtime-registered servers are proxy-tool-only: direct tools are frozen\n\t\t// at startup and must not be rebuilt for late registrations.\n\t\tconst entry: ServerEntry = { ...structuredClone(definition), directTools: false };\n\t\truntimeServers.set(name, entry);\n\t\tconst registeredState = state;\n\t\tif (registeredState) {\n\t\t\tregisteredState.config.mcpServers[name] = entry;\n\t\t\tattachRuntimeServerLifecycle(registeredState, name, entry);\n\t\t\tsyncToolSurface();\n\t\t\tupdateStatusBar(registeredState);\n\t\t}\n\t\tlet disposed = false;\n\t\treturn {\n\t\t\tdispose: async (): Promise<void> => {\n\t\t\t\tif (disposed) return;\n\t\t\t\tdisposed = true;\n\t\t\t\truntimeServers.delete(name);\n\t\t\t\tconst currentState = state;\n\t\t\t\tif (!currentState || currentState.config.mcpServers[name] !== entry) return;\n\t\t\t\tdelete currentState.config.mcpServers[name];\n\t\t\t\tcurrentState.lifecycle.unregisterServer(name);\n\t\t\t\tawait currentState.manager.close(name);\n\t\t\t\tsyncToolSurface();\n\t\t\t\tupdateStatusBar(currentState);\n\t\t\t},\n\t\t};\n\t});\n\n\tconst getNexusTools = (): ToolInfo[] => nexus.getAllTools();\n\n\tnexus.registerFlag(\"mcp-config\", {\n\t\tdescription: \"Path to MCP config file\",\n\t\ttype: \"string\",\n\t});\n\n\tfunction startInitialization(\n\t\tctx: ExtensionContext,\n\t\towner: McpRuntimeOwner,\n\t\toauthRuntime: McpOAuthRuntime,\n\t\tgeneration: number,\n\t\tstaleReason: string,\n\t): Promise<void> {\n\t\towner.addCleanup(() => cleanupMaterializedBinaryResources(owner.signal));\n\t\tconst promise = initializeMcp(nexus, ctx, owner, {\n\t\t\t...(programmaticConfig || options.configPath !== undefined\n\t\t\t\t? {\n\t\t\t\t\t\t...(earlyConfigPath !== undefined ? { configPath: earlyConfigPath } : {}),\n\t\t\t\t\t\t...(sessionConfig !== undefined ? { config: sessionConfig } : {}),\n\t\t\t\t\t}\n\t\t\t\t: {}),\n\t\t\toauthRuntime,\n\t\t\tgetCurrentModel: () => currentModel,\n\t\t});\n\t\tinitPromise = promise;\n\n\t\treturn promise\n\t\t\t.then(async (nextState) => {\n\t\t\t\tif (!owner.isActive() || generation !== lifecycleGeneration || initPromise !== promise) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tawait shutdownState(nextState, staleReason);\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tconsole.error(`MCP: failed to clean stale initialization state: ${formatTerminalError(error)}`);\n\t\t\t\t\t}\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tstate = nextState;\n\t\t\t\tfor (const [name, definition] of runtimeServers) {\n\t\t\t\t\tif (Object.hasOwn(nextState.config.mcpServers, name)) {\n\t\t\t\t\t\tconsole.error(\n\t\t\t\t\t\t\t`MCP: runtime-registered server \"${name}\" now collides with a configured server; keeping the configured server`,\n\t\t\t\t\t\t);\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tnextState.config.mcpServers[name] = definition;\n\t\t\t\t\tattachRuntimeServerLifecycle(nextState, name, definition);\n\t\t\t\t}\n\t\t\t\tnextState.onToolMetadataUpdated = (_serverName, _reason) => {\n\t\t\t\t\tif (state !== nextState || !owner.isActive()) return;\n\t\t\t\t\tsyncPromptCommands();\n\t\t\t\t\tif (directToolsFrozen) {\n\t\t\t\t\t\tlogger.debug(`MCP: metadata update for ${_serverName} (${_reason}) skipped — directTools frozen`);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tsyncToolSurface(ctx);\n\t\t\t\t};\n\t\t\t\tsyncPromptCommands();\n\t\t\t\tsyncToolSurface(ctx);\n\t\t\t\t// A connected snapshot is readiness-like external state. Publish it only\n\t\t\t\t// after Nexus's model-facing direct-tool surface reflects live metadata.\n\t\t\t\tnextState.statusEvents = nexus.events;\n\t\t\t\tupdateStatusBar(nextState);\n\t\t\t\tinitPromise = null;\n\t\t\t\tif (nextState.config.settings?.freezeDirectTools === true) {\n\t\t\t\t\tdirectToolsFrozen = true;\n\t\t\t\t\tlogger.info(\n\t\t\t\t\t\t'MCP: direct tools frozen after initial sync — reconnects won\\'t rebuild the system prompt; use mcp({ connect: \"server\" }) to rediscover',\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t})\n\t\t\t.catch(async (err) => {\n\t\t\t\tif (!owner.isActive() || generation !== lifecycleGeneration) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (initPromise !== promise && initPromise !== null) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tconsole.error(`MCP initialization failed: ${formatTerminalError(err)}`);\n\t\t\t\tinitPromise = null;\n\t\t\t\tif (state) return;\n\n\t\t\t\ttry {\n\t\t\t\t\tawait Promise.all([owner.stop(\"MCP initialization failed\"), shutdownOAuth(oauthRuntime)]);\n\t\t\t\t} catch (error) {\n\t\t\t\t\tconsole.error(`MCP: failed to clean rejected initialization: ${formatTerminalError(error)}`);\n\t\t\t\t}\n\t\t\t});\n\t}\n\n\tfunction startLoadTimeInitialization(): void {\n\t\tconst hasStartupServer = Object.values(earlyConfig.mcpServers).some((definition) => {\n\t\t\tif (definition.disabled === true) return false;\n\t\t\treturn definition.lifecycle === \"eager\" || definition.lifecycle === \"keep-alive\";\n\t\t});\n\t\tif (!hasStartupServer) return;\n\t\tsetImmediate(() => {\n\t\t\tif (lifecycleGeneration !== 0 || state || initPromise) return;\n\t\t\tconst generation = ++lifecycleGeneration;\n\t\t\tconst owner = createMcpRuntimeOwner();\n\t\t\tconst oauthRuntime = createOAuthRuntime(owner.signal);\n\t\t\tcurrentOwner = owner;\n\t\t\tcurrentOAuthRuntime = oauthRuntime;\n\t\t\tstartInitialization(\n\t\t\t\t{\n\t\t\t\t\tmode: \"print\",\n\t\t\t\t\thasUI: false,\n\t\t\t\t\tcwd: process.cwd(),\n\t\t\t\t\tmodel: undefined,\n\t\t\t\t\tmodelRegistry: undefined,\n\t\t\t\t\tsignal: undefined,\n\t\t\t\t\tisProjectTrusted: () => false,\n\t\t\t\t} as unknown as ExtensionContext,\n\t\t\t\towner,\n\t\t\t\toauthRuntime,\n\t\t\t\tgeneration,\n\t\t\t\t\"stale_load_time_initialization\",\n\t\t\t);\n\t\t});\n\t}\n\n\tnexus.on(\"session_start\", async (_event, ctx) => {\n\t\tcurrentModel = ctx.model;\n\t\tdirectToolsFrozen = false;\n\t\tconst generation = ++lifecycleGeneration;\n\t\tconst previousState = state;\n\t\tconst previousOwner = currentOwner;\n\t\tconst previousOAuthRuntime = currentOAuthRuntime;\n\t\tconst owner = createMcpRuntimeOwner();\n\t\tconst oauthRuntime = createOAuthRuntime(owner.signal);\n\t\tcurrentOwner = owner;\n\t\tcurrentOAuthRuntime = oauthRuntime;\n\t\tstate = null;\n\t\tinitPromise = null;\n\n\t\t// Abort synchronously before awaiting cleanup so old callbacks and startup\n\t\t// work cannot resume into a stale ExtensionContext.\n\t\tconst stopPrevious = previousOwner?.stop(\"MCP extension session restarted\") ?? Promise.resolve();\n\t\ttry {\n\t\t\tawait Promise.all([\n\t\t\t\tstopPrevious,\n\t\t\t\tshutdownState(previousState, \"session_restart\"),\n\t\t\t\tpreviousOAuthRuntime ? shutdownOAuth(previousOAuthRuntime) : Promise.resolve(),\n\t\t\t]);\n\t\t} catch (error) {\n\t\t\tconsole.error(`MCP: failed to shut down previous session state: ${formatTerminalError(error)}`);\n\t\t}\n\n\t\tif (generation !== lifecycleGeneration || !owner.isActive()) return;\n\n\t\tconst initialization = startInitialization(ctx, owner, oauthRuntime, generation, \"stale_session_start\");\n\t\tif (envRaw !== undefined && envRaw !== \"__none__\") {\n\t\t\tconst missingEnvDirectTools = getMissingConfiguredDirectToolServers(\n\t\t\t\tearlyConfig,\n\t\t\t\tloadMetadataCache(),\n\t\t\t\tenvDirectToolOverride,\n\t\t\t);\n\t\t\tif (missingEnvDirectTools.length > 0) {\n\t\t\t\tawait initialization;\n\t\t\t}\n\t\t}\n\t});\n\n\tnexus.on(\"model_select\", (event) => {\n\t\tcurrentModel = event.model;\n\t});\n\n\tnexus.on(\"input\", async () => {\n\t\tconst inputOwner = currentOwner;\n\t\tif (!inputOwner?.isActive()) return;\n\n\t\tif (!state && initPromise) {\n\t\t\ttry {\n\t\t\t\tawait awaitWithTimeout(initPromise, INIT_WAIT_TIMEOUT_MS);\n\t\t\t} catch {\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\tconst inputState = state;\n\t\tif (!inputState || !inputOwner.isActive()) return;\n\t\ttry {\n\t\t\tawait inputState.lifecycle.ensureConverged(inputOwner.signal);\n\t\t} catch (error) {\n\t\t\tif (!isAbortError(error, inputOwner.signal)) {\n\t\t\t\tlogger.debug(`MCP: keep-alive convergence failed before input: ${formatTerminalError(error)}`);\n\t\t\t}\n\t\t}\n\t});\n\n\tnexus.on(\"session_shutdown\", async () => {\n\t\t++lifecycleGeneration;\n\t\tconst currentState = state;\n\t\tconst owner = currentOwner;\n\t\tconst oauthRuntime = currentOAuthRuntime;\n\t\tcurrentOwner = null;\n\t\tcurrentOAuthRuntime = null;\n\t\tcurrentModel = undefined;\n\t\tstate = null;\n\t\tinitPromise = null;\n\n\t\t// Abort before awaiting cleanup so delayed initialization cannot touch stale\n\t\t// Nexus context after session shutdown.\n\t\tconst stopOwner = owner?.stop(\"MCP extension session shutdown\") ?? Promise.resolve();\n\t\ttry {\n\t\t\tawait Promise.all([\n\t\t\t\tstopOwner,\n\t\t\t\tshutdownState(currentState, \"session_shutdown\"),\n\t\t\t\toauthRuntime ? shutdownOAuth(oauthRuntime) : Promise.resolve(),\n\t\t\t]);\n\t\t} catch (error) {\n\t\t\tconsole.error(`MCP: session shutdown cleanup failed: ${formatTerminalError(error)}`);\n\t\t}\n\t});\n\n\t// Re-flag returned MCP tool failures so nexus registers them as errors (see toolErrorOverride).\n\tnexus.on(\"tool_result\", (event) => toolErrorOverride(event.details));\n\n\tconst registerMcpCommand = (commandName: string) =>\n\t\tnexus.registerCommand(commandName, {\n\t\t\tdescription: \"Configure and manage MCP servers\",\n\t\t\tgetArgumentCompletions: (prefix: string) => {\n\t\t\t\tconst normalized = prefix.trimStart();\n\t\t\t\tconst argumentMatch = normalized.match(/^(\\S+)\\s+(.*)$/);\n\t\t\t\tif (!argumentMatch) {\n\t\t\t\t\tconst subcommands = [\n\t\t\t\t\t\t{ value: \"reconnect\", label: \"reconnect — Reconnect servers\" },\n\t\t\t\t\t\t{ value: \"tools\", label: \"tools — List all tools\" },\n\t\t\t\t\t\t{ value: \"prompts\", label: \"prompts — List all MCP prompts\" },\n\t\t\t\t\t\t{ value: \"setup\", label: \"setup — Configure MCP servers\" },\n\t\t\t\t\t\t{ value: \"add\", label: \"add — Add a custom server\" },\n\t\t\t\t\t\t{ value: \"logout\", label: \"logout — Clear server credentials\" },\n\t\t\t\t\t\t{ value: \"token\", label: \"token — Manage stored bearer tokens\" },\n\t\t\t\t\t\t{ value: \"disable\", label: \"disable — Disable a server\" },\n\t\t\t\t\t\t{ value: \"enable\", label: \"enable — Enable a server\" },\n\t\t\t\t\t\t{ value: \"status\", label: \"status — Live connections, reconnect, per-tool toggles\" },\n\t\t\t\t\t].filter(({ value }) => value.startsWith(normalized));\n\t\t\t\t\treturn subcommands.length > 0 ? subcommands : null;\n\t\t\t\t}\n\n\t\t\t\tconst [, subcommand, argumentPrefix] = argumentMatch;\n\t\t\t\tif (\n\t\t\t\t\t(subcommand !== \"reconnect\" &&\n\t\t\t\t\t\tsubcommand !== \"logout\" &&\n\t\t\t\t\t\tsubcommand !== \"disable\" &&\n\t\t\t\t\t\tsubcommand !== \"enable\" &&\n\t\t\t\t\t\tsubcommand !== \"token\") ||\n\t\t\t\t\targumentPrefix === undefined ||\n\t\t\t\t\t!state\n\t\t\t\t)\n\t\t\t\t\treturn null;\n\n\t\t\t\tif (subcommand === \"token\") {\n\t\t\t\t\tconst tokenMatch = argumentPrefix.trimStart().match(/^(set|remove|status)\\s+(.*)$/);\n\t\t\t\t\tif (!tokenMatch) {\n\t\t\t\t\t\tconst actions = [\"set\", \"remove\", \"status\"]\n\t\t\t\t\t\t\t.filter((action) => action.startsWith(argumentPrefix.trimStart()))\n\t\t\t\t\t\t\t.map((action) => ({ value: `token ${action} `, label: `${action} — Bearer token ${action}` }));\n\t\t\t\t\t\treturn actions.length > 0 ? actions : null;\n\t\t\t\t\t}\n\t\t\t\t\tconst action = tokenMatch[1] ?? \"\";\n\t\t\t\t\tconst serverPrefix = tokenMatch[2] ?? \"\";\n\t\t\t\t\tconst servers = Object.keys(state.config.mcpServers)\n\t\t\t\t\t\t.filter((serverName) => serverName.startsWith(serverPrefix.trimStart()))\n\t\t\t\t\t\t.map((serverName) => ({ value: `token ${action} ${serverName}`, label: serverName }));\n\t\t\t\t\treturn servers.length > 0 ? servers : null;\n\t\t\t\t}\n\n\t\t\t\tconst servers = Object.keys(state.config.mcpServers)\n\t\t\t\t\t.filter((serverName) => serverName.startsWith(argumentPrefix.trimStart()))\n\t\t\t\t\t.map((serverName) => ({ value: `${subcommand} ${serverName}`, label: serverName }));\n\t\t\t\treturn servers.length > 0 ? servers : null;\n\t\t\t},\n\t\t\thandler: async (args, ctx) => {\n\t\t\t\tconst commandOwner = currentOwner;\n\t\t\t\tconst commandReload = typeof ctx.reload === \"function\" ? ctx.reload.bind(ctx) : async () => {};\n\t\t\t\tconst commandHasUI = ctx.hasUI;\n\t\t\t\tconst commandCtx = {\n\t\t\t\t\thasUI: commandHasUI,\n\t\t\t\t\tui: commandHasUI ? (commandOwner ? createOwnedUi(ctx.ui, commandOwner) : ctx.ui) : undefined,\n\t\t\t\t\tcwd: ctx.cwd,\n\t\t\t\t\tmode: ctx.mode,\n\t\t\t\t\tsignal: commandOwner?.signal ?? ctx.signal,\n\t\t\t\t\tisProjectTrusted: () => ctx.isProjectTrusted(),\n\t\t\t\t} as unknown as ExtensionContext;\n\t\t\t\tif (!state && initPromise) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst initialized = await initPromise;\n\t\t\t\t\t\tcommandOwner?.throwIfInactive();\n\t\t\t\t\t\tstate = initialized;\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\t\t\t\t\tif (commandCtx.hasUI) commandCtx.ui?.notify(`MCP initialization failed: ${message}`, \"error\");\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (!state) {\n\t\t\t\t\tif (commandCtx.hasUI) commandCtx.ui?.notify(\"MCP not initialized\", \"error\");\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst parts = args?.trim()?.split(/\\s+/) ?? [];\n\t\t\t\tconst subcommand = parts[0] ?? \"\";\n\t\t\t\tconst targetServer = parts[1];\n\t\t\t\tconst rest = parts.slice(1).join(\" \");\n\n\t\t\t\tswitch (subcommand) {\n\t\t\t\t\tcase \"reconnect\":\n\t\t\t\t\t\tcommandOwner?.throwIfInactive();\n\t\t\t\t\t\tawait reconnectServers(state, commandCtx, targetServer);\n\t\t\t\t\t\tif (directToolsFrozen) syncToolSurface(commandCtx);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"tools\":\n\t\t\t\t\t\tawait showTools(state, commandCtx);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"prompts\":\n\t\t\t\t\t\tawait showPrompts(state, commandCtx);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"setup\": {\n\t\t\t\t\t\tcommandOwner?.throwIfInactive();\n\t\t\t\t\t\tif (!ctx.isProjectTrusted()) {\n\t\t\t\t\t\t\tcommandCtx.ui?.notify(\"Trust this project before opening MCP setup.\", \"warning\");\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (programmaticConfig) {\n\t\t\t\t\t\t\tcommandCtx.ui?.notify(\n\t\t\t\t\t\t\t\t\"MCP setup is unavailable when config is supplied by createMcpAdapter().\",\n\t\t\t\t\t\t\t\t\"info\",\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tconst result = await openMcpSetup(state, nexus, commandCtx, earlyConfigPath, \"setup\");\n\t\t\t\t\t\tif (result?.configChanged) {\n\t\t\t\t\t\t\tcommandOwner?.throwIfInactive();\n\t\t\t\t\t\t\tawait commandReload();\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tcase \"add\": {\n\t\t\t\t\t\tcommandOwner?.throwIfInactive();\n\t\t\t\t\t\tif (!ctx.isProjectTrusted()) {\n\t\t\t\t\t\t\tcommandCtx.ui?.notify(\"Trust this project before running /mcp add.\", \"warning\");\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (programmaticConfig) {\n\t\t\t\t\t\t\tcommandCtx.ui?.notify(\n\t\t\t\t\t\t\t\t\"/mcp add is unavailable when config is supplied by createMcpAdapter().\",\n\t\t\t\t\t\t\t\t\"info\",\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tconst addArgv = parts.slice(1);\n\t\t\t\t\t\tif (addArgv.length === 0) {\n\t\t\t\t\t\t\tcommandCtx.ui?.notify(ADD_SERVER_USAGE, \"info\");\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tconst parsed = parseAddServerArgs(addArgv);\n\t\t\t\t\t\tif (!parsed.ok) {\n\t\t\t\t\t\t\tcommandCtx.ui?.notify(`${parsed.error}\\n\\n${ADD_SERVER_USAGE}`, \"error\");\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tconst { path } = addCustomServer(commandCtx.cwd, parsed.name, parsed.entry);\n\t\t\t\t\t\tcommandCtx.ui?.notify(`Added MCP server \"${parsed.name}\" to ${path} — run /reload to apply`, \"info\");\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tcase \"logout\": {\n\t\t\t\t\t\tconst serverName = rest;\n\t\t\t\t\t\tif (!serverName) {\n\t\t\t\t\t\t\tif (commandCtx.hasUI) commandCtx.ui?.notify(\"Usage: /mcp logout <server>\", \"error\");\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcommandOwner?.throwIfInactive();\n\t\t\t\t\t\tawait logoutServer(serverName, state, commandCtx);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tcase \"token\": {\n\t\t\t\t\t\tconst action = parts[1];\n\t\t\t\t\t\tconst serverName = parts.slice(2).join(\" \");\n\t\t\t\t\t\tif (action !== \"set\" && action !== \"remove\" && action !== \"status\") {\n\t\t\t\t\t\t\tif (commandCtx.hasUI)\n\t\t\t\t\t\t\t\tcommandCtx.ui?.notify(\"Usage: /mcp token set|remove|status <server>\", \"error\");\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!serverName) {\n\t\t\t\t\t\t\tif (commandCtx.hasUI)\n\t\t\t\t\t\t\t\tcommandCtx.ui?.notify(\"Usage: /mcp token set|remove|status <server>\", \"error\");\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcommandOwner?.throwIfInactive();\n\t\t\t\t\t\tawait manageBearerToken(action, serverName, state, commandCtx);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tcase \"disable\":\n\t\t\t\t\tcase \"enable\": {\n\t\t\t\t\t\tconst serverName = rest;\n\t\t\t\t\t\tif (!ctx.isProjectTrusted()) {\n\t\t\t\t\t\t\tcommandCtx.ui?.notify(`Trust this project before running /mcp ${subcommand}.`, \"warning\");\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (programmaticConfig) {\n\t\t\t\t\t\t\tcommandCtx.ui?.notify(\n\t\t\t\t\t\t\t\t`/mcp ${subcommand} is unavailable when config is supplied by createMcpAdapter().`,\n\t\t\t\t\t\t\t\t\"info\",\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!serverName) {\n\t\t\t\t\t\t\tcommandCtx.ui?.notify(`Usage: /mcp ${subcommand} <server>`, \"error\");\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!state.config.mcpServers[serverName]) {\n\t\t\t\t\t\t\tcommandCtx.ui?.notify(`Server \"${serverName}\" not found in effective config`, \"error\");\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcommandOwner?.throwIfInactive();\n\t\t\t\t\t\tconst result = writeProjectServerDisabledOverride(\n\t\t\t\t\t\t\tearlyConfigPath,\n\t\t\t\t\t\t\tcommandCtx.cwd,\n\t\t\t\t\t\t\tserverName,\n\t\t\t\t\t\t\tsubcommand === \"disable\",\n\t\t\t\t\t\t);\n\t\t\t\t\t\tif (result.changed) {\n\t\t\t\t\t\t\tcommandCtx.ui?.notify(\n\t\t\t\t\t\t\t\t`${subcommand === \"disable\" ? \"Disabled\" : \"Enabled\"} server \"${serverName}\" in ${result.path} — run /reload to apply`,\n\t\t\t\t\t\t\t\t\"info\",\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tcommandCtx.ui?.notify(\n\t\t\t\t\t\t\t\t`Server \"${serverName}\" is already ${subcommand === \"disable\" ? \"disabled\" : \"enabled\"}`,\n\t\t\t\t\t\t\t\t\"info\",\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tcase \"status\": {\n\t\t\t\t\t\t// The live connection/reconnect/per-tool-toggle view. Kept reachable by\n\t\t\t\t\t\t// explicit name; bare /mcp now always opens the setup+manage panel below.\n\t\t\t\t\t\tif (commandCtx.hasUI) {\n\t\t\t\t\t\t\tcommandOwner?.throwIfInactive();\n\t\t\t\t\t\t\tif (programmaticConfig || !ctx.isProjectTrusted()) {\n\t\t\t\t\t\t\t\tif (programmaticConfig) {\n\t\t\t\t\t\t\t\t\tcommandCtx.ui?.notify(\n\t\t\t\t\t\t\t\t\t\t\"MCP status is shown from the in-memory SDK config; configuration discovery is unavailable.\",\n\t\t\t\t\t\t\t\t\t\t\"info\",\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tawait showStatus(state, commandCtx);\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tconst result = await openMcpPanel(state, nexus, commandCtx, earlyConfigPath, (changes) => {\n\t\t\t\t\t\t\t\tapplyDirectToolConfigChanges(changes);\n\t\t\t\t\t\t\t\tsyncToolSurface(commandCtx);\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\tif (result?.configChanged) {\n\t\t\t\t\t\t\t\tcommandOwner?.throwIfInactive();\n\t\t\t\t\t\t\t\tawait commandReload();\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tawait showStatus(state, commandCtx);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tif (commandCtx.hasUI) {\n\t\t\t\t\t\t\tcommandOwner?.throwIfInactive();\n\t\t\t\t\t\t\tif (programmaticConfig || !ctx.isProjectTrusted()) {\n\t\t\t\t\t\t\t\tif (programmaticConfig) {\n\t\t\t\t\t\t\t\t\tcommandCtx.ui?.notify(\n\t\t\t\t\t\t\t\t\t\t\"MCP status is shown from the in-memory SDK config; configuration discovery is unavailable.\",\n\t\t\t\t\t\t\t\t\t\t\"info\",\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tawait showStatus(state, commandCtx);\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tconst result = await openMcpSetup(state, nexus, commandCtx, earlyConfigPath, \"setup\");\n\t\t\t\t\t\t\tif (result?.configChanged) {\n\t\t\t\t\t\t\t\tcommandOwner?.throwIfInactive();\n\t\t\t\t\t\t\t\tawait commandReload();\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tawait showStatus(state, commandCtx);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t},\n\t\t});\n\tregisterMcpCommand(\"mcp\");\n\n\tnexus.registerCommand(\"mcp-auth\", {\n\t\tdescription: \"Authenticate with an MCP server (OAuth)\",\n\t\thandler: async (args, ctx) => {\n\t\t\tconst commandOwner = currentOwner;\n\t\t\tconst commandHasUI = ctx.hasUI;\n\t\t\tconst commandCtx = {\n\t\t\t\thasUI: commandHasUI,\n\t\t\t\tui: commandHasUI ? (commandOwner ? createOwnedUi(ctx.ui, commandOwner) : ctx.ui) : undefined,\n\t\t\t\tcwd: ctx.cwd,\n\t\t\t\tmode: ctx.mode,\n\t\t\t\tsignal: commandOwner?.signal ?? ctx.signal,\n\t\t\t\tisProjectTrusted: () => ctx.isProjectTrusted(),\n\t\t\t} as unknown as ExtensionContext;\n\t\t\tconst serverName = args?.trim();\n\t\t\tif (!serverName && !commandCtx.hasUI) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (!state && initPromise) {\n\t\t\t\ttry {\n\t\t\t\t\tconst initialized = await initPromise;\n\t\t\t\t\tcommandOwner?.throwIfInactive();\n\t\t\t\t\tstate = initialized;\n\t\t\t\t} catch (error) {\n\t\t\t\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\t\t\t\tif (commandCtx.hasUI) commandCtx.ui?.notify(`MCP initialization failed: ${message}`, \"error\");\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (!state) {\n\t\t\t\tif (commandCtx.hasUI) commandCtx.ui?.notify(\"MCP not initialized\", \"error\");\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (!serverName) {\n\t\t\t\tif (!ctx.isProjectTrusted()) {\n\t\t\t\t\tcommandCtx.ui?.notify(\n\t\t\t\t\t\t\"Trust this project or specify a global MCP server with /mcp-auth <server>.\",\n\t\t\t\t\t\t\"warning\",\n\t\t\t\t\t);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (programmaticConfig) {\n\t\t\t\t\tcommandCtx.ui?.notify(\n\t\t\t\t\t\t\"Use /mcp-auth <server> to authenticate a server from the in-memory SDK config.\",\n\t\t\t\t\t\t\"info\",\n\t\t\t\t\t);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tawait openMcpAuthPanel(state, nexus, commandCtx, earlyConfigPath);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst result = await authenticateServer(\n\t\t\t\tserverName,\n\t\t\t\tstate.config,\n\t\t\t\tcommandCtx,\n\t\t\t\tcommandCtx.signal,\n\t\t\t\tstate.oauthRuntime,\n\t\t\t\tnexus,\n\t\t\t);\n\t\t\tif (result.ok) {\n\t\t\t\tcommandOwner?.throwIfInactive();\n\t\t\t\tawait reconnectServer(state, commandCtx, serverName);\n\t\t\t}\n\t\t},\n\t});\n\n\tif (earlyConfig.settings?.scriptMode !== false) {\n\t\t(nexus.registerTool as (tool: unknown) => unknown)({\n\t\t\tname: \"mcpScript\",\n\t\t\tlabel: \"MCP Script\",\n\t\t\tdescription:\n\t\t\t\t\"Run trusted JavaScript that makes multiple MCP tool calls in one request — loop, filter, chain, or fan out between calls. For a single MCP call, search, describe, status check, or auth action, use the mcp tool instead. Discover with await tools.search({ query }) — resolves to { items: [{ path, name, server, description? }], total, hasMore, nextOffset }, not an { ok, data } envelope. Inspect with await tools.describe({ path }) — resolves to the tool descriptor with inputTypeScript, or { path, error: { code, message, suggestions } }. Then call tools.call(path, args) — resolves to { ok: true, data } or { ok: false, error: { code, message } } — or use direct flat calls when the name is already known; use emit(value) for user-visible output. Load the mcp-scripting skill for the full workflow guide.\",\n\t\t\tpromptSnippet: \"Batch multiple MCP tool calls in one JavaScript request (loop, filter, chain)\",\n\t\t\tparameters: Type.Object({\n\t\t\t\tcode: Type.String({\n\t\t\t\t\tdescription: \"Trusted JavaScript MCP script. Use tools.<prefixedToolName>(args) and emit(value).\",\n\t\t\t\t}),\n\t\t\t\ttimeoutMs: optionalNumber({\n\t\t\t\t\tminimum: 1,\n\t\t\t\t\tdescription: \"Execution timeout in milliseconds (default: 30000)\",\n\t\t\t\t}),\n\t\t\t}),\n\t\t\trenderResult: renderMcpToolResult,\n\t\t\tasync execute(\n\t\t\t\t_toolCallId: string,\n\t\t\t\tparams: { code: string; timeoutMs?: number },\n\t\t\t\tsignal: AbortSignal | undefined,\n\t\t\t) {\n\t\t\t\tconst executeOwner = currentOwner;\n\t\t\t\tif (!state && initPromise) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst initialized = await awaitWithTimeout(initPromise, INIT_WAIT_TIMEOUT_MS);\n\t\t\t\t\t\tif (initialized === INIT_WAIT_TIMED_OUT) {\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\tcontent: [\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\ttype: \"text\" as const,\n\t\t\t\t\t\t\t\t\t\ttext: \"MCP initialization is still in progress. Try again shortly.\",\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\tdetails: { mode: \"script\", error: \"init_timeout\", timeoutMs: INIT_WAIT_TIMEOUT_MS },\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t\texecuteOwner?.throwIfInactive();\n\t\t\t\t\t\tstate = initialized;\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tif (executeOwner && isAbortError(error, executeOwner.signal)) throw error;\n\t\t\t\t\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tcontent: [{ type: \"text\" as const, text: `MCP initialization failed: ${message}` }],\n\t\t\t\t\t\t\tdetails: { mode: \"script\", error: \"init_failed\", message },\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (!state) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tcontent: [{ type: \"text\" as const, text: \"MCP not initialized\" }],\n\t\t\t\t\t\tdetails: { mode: \"script\", error: \"not_initialized\" },\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\texecuteOwner?.throwIfInactive();\n\t\t\t\treturn runMcpScript(state, params.code, params.timeoutMs, getNexusTools, signal);\n\t\t\t},\n\t\t});\n\t}\n\n\tfunction registerProxyTool(description: string): void {\n\t\t(nexus.registerTool as (tool: unknown) => unknown)({\n\t\t\tname: \"mcp\",\n\t\t\tlabel: \"MCP\",\n\t\t\tdescription,\n\t\t\tpromptSnippet: \"MCP gateway — status, search, describe, auth, and single MCP tool calls\",\n\t\t\trenderShell: toolRenderShell,\n\t\t\trenderCall: createMcpProxyToolCallRenderer(toolRenderOptions),\n\t\t\tparameters: Type.Object({\n\t\t\t\ttool: Type.Optional(Type.String({ description: \"Tool name to call (e.g., 'xcodebuild_list_sims')\" })),\n\t\t\t\targs: Type.Optional(\n\t\t\t\t\tType.Union(\n\t\t\t\t\t\t[\n\t\t\t\t\t\t\tType.String({ description: 'Arguments as a JSON string (e.g., \\'{\"key\": \"value\"}\\')' }),\n\t\t\t\t\t\t\tType.Object(\n\t\t\t\t\t\t\t\t{},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tadditionalProperties: true,\n\t\t\t\t\t\t\t\t\tdescription: 'Arguments as a JSON object (e.g., { \"key\": \"value\" })',\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t],\n\t\t\t\t\t\t{ description: \"Tool arguments as a JSON object, or as a JSON string encoding one\" },\n\t\t\t\t\t),\n\t\t\t\t),\n\t\t\t\tconnect: Type.Optional(\n\t\t\t\t\tType.String({ description: \"Server name to connect (lazy connect + metadata refresh)\" }),\n\t\t\t\t),\n\t\t\t\tdescribe: Type.Optional(Type.String({ description: \"Tool name to describe (shows parameters)\" })),\n\t\t\t\tinstructions: Type.Optional(\n\t\t\t\t\tType.String({ description: \"Server name to show that server's usage instructions\" }),\n\t\t\t\t),\n\t\t\t\tsearch: Type.Optional(Type.String({ description: \"Search tools by name/description\" })),\n\t\t\t\tregex: Type.Optional(Type.Boolean({ description: \"Treat search as regex (default: substring match)\" })),\n\t\t\t\tincludeSchemas: Type.Optional(\n\t\t\t\t\tType.Boolean({ description: \"Include parameter schemas in search results (default: true)\" }),\n\t\t\t\t),\n\t\t\t\tlimit: optionalNumber({ minimum: 1, description: \"Maximum search results to return (default: 12)\" }),\n\t\t\t\toffset: optionalNumber({ minimum: 0, description: \"Search result offset (default: 0)\" }),\n\t\t\t\tserver: Type.Optional(\n\t\t\t\t\tType.String({ description: \"Filter to specific server (also disambiguates tool calls)\" }),\n\t\t\t\t),\n\t\t\t\taction: Type.Optional(\n\t\t\t\t\tType.String({ description: \"Action: 'ui-messages', 'auth-start', or 'auth-complete'\" }),\n\t\t\t\t),\n\t\t\t}),\n\t\t\trenderResult: renderMcpToolResult,\n\t\t\tasync execute(\n\t\t\t\t_toolCallId: string,\n\t\t\t\tparams: {\n\t\t\t\t\ttool?: string;\n\t\t\t\t\targs?: string | Record<string, unknown>;\n\t\t\t\t\tconnect?: string;\n\t\t\t\t\tdescribe?: string;\n\t\t\t\t\tinstructions?: string;\n\t\t\t\t\tsearch?: string;\n\t\t\t\t\tregex?: boolean;\n\t\t\t\t\tincludeSchemas?: boolean;\n\t\t\t\t\tlimit?: number;\n\t\t\t\t\toffset?: number;\n\t\t\t\t\tserver?: string;\n\t\t\t\t\taction?: string;\n\t\t\t\t},\n\t\t\t\tsignal: AbortSignal | undefined,\n\t\t\t\t_onUpdate: AgentToolUpdateCallback<Record<string, unknown>> | undefined,\n\t\t\t\t_ctx: ExtensionContext,\n\t\t\t) {\n\t\t\t\tconst executeOwner = currentOwner;\n\t\t\t\tconst parseArgs = (\n\t\t\t\t\tvalue: string | Record<string, unknown> | undefined,\n\t\t\t\t): Record<string, unknown> | undefined => {\n\t\t\t\t\tif (value === undefined || value === \"\") return undefined;\n\t\t\t\t\tlet args: unknown;\n\t\t\t\t\tif (typeof value === \"string\") {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\targs = JSON.parse(value);\n\t\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\t\tif (error instanceof SyntaxError) {\n\t\t\t\t\t\t\t\tthrow new Error(`Invalid args JSON: ${error.message}`, { cause: error });\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tthrow error;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\targs = value;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (typeof args !== \"object\" || args === null || Array.isArray(args)) {\n\t\t\t\t\t\tconst gotType = Array.isArray(args) ? \"array\" : args === null ? \"null\" : typeof args;\n\t\t\t\t\t\tthrow new Error(`Invalid args: expected a JSON object, got ${gotType}`);\n\t\t\t\t\t}\n\t\t\t\t\treturn args as Record<string, unknown>;\n\t\t\t\t};\n\t\t\t\tconst validateNestedGatewayParams = (value: Record<string, unknown>): typeof params => {\n\t\t\t\t\tfor (const key of [\n\t\t\t\t\t\t\"tool\",\n\t\t\t\t\t\t\"connect\",\n\t\t\t\t\t\t\"describe\",\n\t\t\t\t\t\t\"instructions\",\n\t\t\t\t\t\t\"search\",\n\t\t\t\t\t\t\"server\",\n\t\t\t\t\t\t\"action\",\n\t\t\t\t\t] as const) {\n\t\t\t\t\t\tif (value[key] !== undefined && typeof value[key] !== \"string\") {\n\t\t\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t\t\t`Invalid nested gateway param \\`${key}\\`: expected string, got ${Array.isArray(value[key]) ? \"array\" : typeof value[key]}`,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tfor (const key of [\"regex\", \"includeSchemas\"] as const) {\n\t\t\t\t\t\tif (value[key] !== undefined && typeof value[key] !== \"boolean\") {\n\t\t\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t\t\t`Invalid nested gateway param \\`${key}\\`: expected boolean, got ${Array.isArray(value[key]) ? \"array\" : typeof value[key]}`,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tfor (const key of [\"limit\", \"offset\"] as const) {\n\t\t\t\t\t\tif (value[key] !== undefined && typeof value[key] !== \"number\") {\n\t\t\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t\t\t`Invalid nested gateway param \\`${key}\\`: expected number, got ${Array.isArray(value[key]) ? \"array\" : typeof value[key]}`,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tconst args = value.args;\n\t\t\t\t\tif (\n\t\t\t\t\t\targs !== undefined &&\n\t\t\t\t\t\ttypeof args !== \"string\" &&\n\t\t\t\t\t\t(typeof args !== \"object\" || args === null || Array.isArray(args))\n\t\t\t\t\t) {\n\t\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t\t`Invalid nested gateway param \\`args\\`: expected JSON object or JSON string, got ${Array.isArray(args) ? \"array\" : args === null ? \"null\" : typeof args}`,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\treturn value as typeof params;\n\t\t\t\t};\n\t\t\t\tlet parsedArgs = parseArgs(params.args);\n\t\t\t\tlet dispatchParams = params;\n\t\t\t\tconst hasGatewayMode = (value: typeof params): boolean =>\n\t\t\t\t\tvalue.tool !== undefined ||\n\t\t\t\t\tvalue.connect !== undefined ||\n\t\t\t\t\tvalue.describe !== undefined ||\n\t\t\t\t\tvalue.instructions !== undefined ||\n\t\t\t\t\tvalue.search !== undefined ||\n\t\t\t\t\tvalue.server !== undefined ||\n\t\t\t\t\tvalue.action !== undefined;\n\t\t\t\tif (!hasGatewayMode(params) && parsedArgs) {\n\t\t\t\t\tconst nestedParams = validateNestedGatewayParams(parsedArgs);\n\t\t\t\t\tif (hasGatewayMode(nestedParams)) {\n\t\t\t\t\t\tdispatchParams = nestedParams;\n\t\t\t\t\t\tparsedArgs = parseArgs(nestedParams.args);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t\t'Gateway params were nested inside `args`; pass them top-level (for example, mcp({ search: \"...\" }) or mcp({ tool: \"...\", args: {} })).',\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t} else if (!hasGatewayMode(params) && params.args !== undefined) {\n\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t'Gateway params were nested inside `args`; pass them top-level (for example, mcp({ search: \"...\" }) or mcp({ tool: \"...\", args: {} })).',\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tif (!state && initPromise) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst initialized = await awaitWithTimeout(initPromise, INIT_WAIT_TIMEOUT_MS);\n\t\t\t\t\t\tif (initialized === INIT_WAIT_TIMED_OUT) {\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\tcontent: [\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\ttype: \"text\" as const,\n\t\t\t\t\t\t\t\t\t\ttext: \"MCP initialization is still in progress. Try again shortly.\",\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\tdetails: { error: \"init_timeout\", timeoutMs: INIT_WAIT_TIMEOUT_MS },\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t\texecuteOwner?.throwIfInactive();\n\t\t\t\t\t\tstate = initialized;\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tif (executeOwner && isAbortError(error, executeOwner.signal)) throw error;\n\t\t\t\t\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tcontent: [{ type: \"text\" as const, text: `MCP initialization failed: ${message}` }],\n\t\t\t\t\t\t\tdetails: { error: \"init_failed\", message },\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (!state) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tcontent: [{ type: \"text\" as const, text: \"MCP not initialized\" }],\n\t\t\t\t\t\tdetails: { error: \"not_initialized\" },\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\texecuteOwner?.throwIfInactive();\n\n\t\t\t\tif (dispatchParams.action === \"ui-messages\") {\n\t\t\t\t\treturn executeUiMessages(state);\n\t\t\t\t}\n\t\t\t\tif (dispatchParams.action === \"auth-start\") {\n\t\t\t\t\tif (!dispatchParams.server) {\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tcontent: [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\ttype: \"text\" as const,\n\t\t\t\t\t\t\t\t\ttext: 'auth-start requires `server`. Example: mcp({ action: \"auth-start\", server: \"linear-server\" })',\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\tdetails: { mode: \"auth-start\", error: \"missing_server\" },\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t\treturn signal\n\t\t\t\t\t\t? executeAuthStart(state, dispatchParams.server, signal)\n\t\t\t\t\t\t: executeAuthStart(state, dispatchParams.server);\n\t\t\t\t}\n\t\t\t\tif (dispatchParams.action === \"auth-complete\") {\n\t\t\t\t\tif (!dispatchParams.server) {\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tcontent: [{ type: \"text\" as const, text: \"auth-complete requires `server`.\" }],\n\t\t\t\t\t\t\tdetails: { mode: \"auth-complete\", error: \"missing_server\" },\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t\tconst input = parsedArgs?.redirectUrl ?? parsedArgs?.code ?? parsedArgs?.input;\n\t\t\t\t\tif (typeof input !== \"string\" || input.trim().length === 0) {\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tcontent: [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\ttype: \"text\" as const,\n\t\t\t\t\t\t\t\t\ttext: \"auth-complete requires args with `redirectUrl`, `code`, or `input`.\",\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\tdetails: { mode: \"auth-complete\", error: \"missing_input\" },\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t\treturn signal\n\t\t\t\t\t\t? executeAuthComplete(state, dispatchParams.server, input, signal)\n\t\t\t\t\t\t: executeAuthComplete(state, dispatchParams.server, input);\n\t\t\t\t}\n\t\t\t\tif (dispatchParams.tool) {\n\t\t\t\t\treturn executeCall(state, dispatchParams.tool, parsedArgs, dispatchParams.server, getNexusTools, signal);\n\t\t\t\t}\n\t\t\t\tif (dispatchParams.connect) {\n\t\t\t\t\tconst result = await executeConnect(state, dispatchParams.connect, signal);\n\t\t\t\t\tsyncToolSurface(_ctx as ExtensionContext);\n\t\t\t\t\treturn result;\n\t\t\t\t}\n\t\t\t\tif (dispatchParams.describe) {\n\t\t\t\t\treturn executeDescribe(state, dispatchParams.describe);\n\t\t\t\t}\n\t\t\t\tif (dispatchParams.instructions) {\n\t\t\t\t\treturn executeInstructions(state, dispatchParams.instructions);\n\t\t\t\t}\n\t\t\t\tif (dispatchParams.search !== undefined) {\n\t\t\t\t\treturn executeSearch(\n\t\t\t\t\t\tstate,\n\t\t\t\t\t\tdispatchParams.search,\n\t\t\t\t\t\tdispatchParams.regex,\n\t\t\t\t\t\tdispatchParams.server,\n\t\t\t\t\t\tdispatchParams.includeSchemas,\n\t\t\t\t\t\tdispatchParams.limit,\n\t\t\t\t\t\tdispatchParams.offset,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tif (dispatchParams.server) {\n\t\t\t\t\treturn executeList(state, dispatchParams.server);\n\t\t\t\t}\n\t\t\t\treturn executeStatus(state);\n\t\t\t},\n\t\t});\n\t\tproxyToolRegistered = true;\n\t\tproxyToolDescription = description;\n\t}\n\n\tfunction syncProxyTool(config: McpConfig, cache: MetadataCache | null, directSpecs: DirectToolSpec[]): void {\n\t\tconst missingConfiguredDirectToolServers = getMissingConfiguredDirectToolServers(\n\t\t\tconfig,\n\t\t\tcache,\n\t\t\tenvRaw === undefined || envRaw === \"__none__\" ? undefined : envDirectToolOverride,\n\t\t);\n\t\tconst shouldRegisterProxyTool =\n\t\t\tconfig.settings?.disableProxyTool !== true ||\n\t\t\tdirectSpecs.length === 0 ||\n\t\t\tmissingConfiguredDirectToolServers.length > 0;\n\n\t\tif (shouldRegisterProxyTool) {\n\t\t\tconst description = buildProxyDescription(config, cache, directSpecs);\n\t\t\tif (!proxyToolRegistered || proxyToolDescription !== description) {\n\t\t\t\tregisterProxyTool(description);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst activeTools = getActiveToolsIfReady();\n\t\t\tif (activeTools && !activeTools.includes(\"mcp\")) {\n\t\t\t\tnexus.setActiveTools([...activeTools, \"mcp\"]);\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tif (proxyToolRegistered) {\n\t\t\tconst unregistered = deactivateTools([\"mcp\"]);\n\t\t\tif (unregistered.includes(\"mcp\")) {\n\t\t\t\tproxyToolRegistered = false;\n\t\t\t\tproxyToolDescription = null;\n\t\t\t}\n\t\t}\n\t}\n\n\tnexus.on(\"resources_discover\", () => {\n\t\tconst skillsPath = join(import.meta.dirname, \"skills\");\n\t\tif (existsSync(skillsPath)) return { skillPaths: [skillsPath] };\n\t});\n\n\tconst initialDirectTools = syncDirectTools(earlyConfig, earlyCache).specs;\n\tsyncProxyTool(earlyConfig, earlyCache, initialDirectTools);\n\tstartLoadTimeInitialization();\n}\n\nexport function createMcpAdapter(options: McpAdapterOptions = {}) {\n\tconst factoryConfig = options.config !== undefined ? cloneMcpConfig(options.config) : undefined;\n\treturn function mcpAdapter(nexus: ExtensionAPI) {\n\t\tinstallMcpAdapter(nexus, {\n\t\t\t...(options.configPath !== undefined ? { configPath: options.configPath } : {}),\n\t\t\t...(factoryConfig !== undefined ? { config: cloneMcpConfig(factoryConfig) } : {}),\n\t\t});\n\t};\n}\n\n/**\n * Register an MCP server with the adapter installed for this Nexus instance.\n * Registrations are session/runtime scoped and never persisted. Duplicate\n * names fail closed. Registered servers are proxy-tool-only; their tools\n * become visible at the next tool sync. To change a definition, dispose the\n * registration and register again.\n */\nexport function registerMcpServer(options: {\n\tnexus: ExtensionAPI;\n\tname: string;\n\tdefinition: ServerEntry;\n}): McpServerRegistration {\n\tconst { nexus, name, definition } = options;\n\tconst register = runtimeRegistrars.get(nexus);\n\tif (!register) {\n\t\tthrow new Error(\"The native Nexus MCP runtime is not installed for this instance\");\n\t}\n\treturn register(name, definition);\n}\n\nexport default createMcpAdapter();\n"]}
@@ -1,7 +1,7 @@
1
1
  import { type ConfigWritePreview, type KnownServerPreset, type McpDiscoverySummary } from "./config.ts";
2
2
  import type { McpOnboardingState } from "./onboarding-state.ts";
3
3
  import { type PanelKeybindings } from "./panel-keys.ts";
4
- import type { ImportKind } from "./types.ts";
4
+ import type { ImportKind, ServerEntry } from "./types.ts";
5
5
  export interface SetupPanelCallbacks {
6
6
  previewImports: (imports: ImportKind[]) => ConfigWritePreview;
7
7
  previewStarterProject: () => ConfigWritePreview;
@@ -24,20 +24,48 @@ export interface SetupPanelCallbacks {
24
24
  }>;
25
25
  openPath: (path: string) => Promise<void>;
26
26
  markSetupCompleted: () => void;
27
+ /** Replace the main chat input with `text`, so the user lands on a ready-to-edit command after this panel closes. */
28
+ seedEditor: (text: string) => void;
29
+ /** Flip a configured server's disabled flag in the project config. */
30
+ toggleServerDisabled: (serverName: string, disabled: boolean) => Promise<{
31
+ path: string;
32
+ changed: boolean;
33
+ }>;
34
+ /** Run the actual OAuth sign-in flow (opens a browser) for an already-loaded, OAuth-capable server. */
35
+ /** `fallbackEntry` lets a server just written this session (not yet in the live config) authenticate immediately, before /reload. */
36
+ authenticateServer: (serverName: string, fallbackEntry?: ServerEntry) => Promise<{
37
+ ok: boolean;
38
+ message: string;
39
+ }>;
40
+ }
41
+ export interface InstalledServerEntry {
42
+ name: string;
43
+ disabled: boolean;
44
+ kind: "stdio" | "http";
45
+ /** Whether this server is configured for OAuth, so the Installed tab can offer a sign-in action. */
46
+ authCapable: boolean;
47
+ /** Whether OAuth tokens actually exist for this server right now. Meaningless (false) when authCapable is false. */
48
+ signedIn: boolean;
27
49
  }
28
50
  export interface SetupPanelOptions {
29
51
  mode: "empty" | "setup";
30
52
  onboardingState: McpOnboardingState;
31
53
  keybindings?: PanelKeybindings;
54
+ /** Effective, already-configured servers (from every source), for the Installed tab and the Presets "active" marker. */
55
+ installedServers: InstalledServerEntry[];
32
56
  }
33
57
  export declare class McpSetupPanel {
34
58
  private screen;
59
+ private activeTab;
35
60
  private actionCursor;
36
61
  private importCursor;
37
62
  private pathCursor;
63
+ private advancedCursor;
38
64
  private selectedImports;
39
65
  private busy;
40
66
  private notice;
67
+ private pendingAction;
68
+ private maxHeight;
41
69
  private tui;
42
70
  private t;
43
71
  private keys;
@@ -45,6 +73,8 @@ export declare class McpSetupPanel {
45
73
  private discovery;
46
74
  private callbacks;
47
75
  private options;
76
+ /** Mutable copy of options.installedServers, updated in-place after a successful add so the Installed tab and Presets "active" tag reflect it immediately, without needing to close and reopen the panel. */
77
+ private installedServers;
48
78
  private done;
49
79
  private static readonly INACTIVITY_MS;
50
80
  constructor(discovery: McpDiscoverySummary, callbacks: SetupPanelCallbacks, options: SetupPanelOptions, tui: {
@@ -52,19 +82,50 @@ export declare class McpSetupPanel {
52
82
  }, done: () => void);
53
83
  private resetInactivityTimeout;
54
84
  private cleanup;
85
+ /** The old "Setup" tab's contents — now a sub-screen opened from Custom's "Advanced options...", not a permanent top-level tab. */
86
+ private getAdvancedActions;
87
+ private getPresetsTabActions;
88
+ private getCustomTabActions;
89
+ private getInstalledTabActions;
90
+ /**
91
+ * Single-glyph prefix instead of a tag chip: ✓ for a preset you already have
92
+ * (dim if you've disabled it), ✓/⊘ for an Installed-tab row's active state.
93
+ * No mark at all for a preset you don't have yet, to keep the list scannable.
94
+ */
95
+ private getRowMark;
55
96
  private getActions;
97
+ private cycleTab;
56
98
  private getDetectedPaths;
57
- private getSelectedAction;
58
99
  handleInput(data: string): void;
59
100
  private handleImportsInput;
60
101
  private handlePathsInput;
102
+ private handleAdvancedInput;
103
+ private handleConfirmPresetInput;
104
+ /** Getter used by openSelectedDocs while the confirm screen is up (no action-list cursor there). */
105
+ private getSelectedAction;
106
+ /** Add or replace an entry so the Installed tab and Presets "active" tag update immediately, without closing the panel. */
107
+ private upsertInstalledServer;
108
+ private confirmPendingAction;
61
109
  private runAction;
62
110
  private applySelectedImports;
111
+ private openSelectedDocs;
112
+ private authenticateSelected;
63
113
  private runBusy;
64
114
  render(width: number): string[];
115
+ setMaxHeight(lines: number): void;
116
+ /**
117
+ * The overlay host may cap total rows and, absent this hook, would slice
118
+ * blindly from the bottom — cutting off the closing border and leaving the
119
+ * box looking broken. Truncate the content instead, keeping the header and
120
+ * action list (the interactive part) and dropping preview/diff lines first.
121
+ */
122
+ private clampHeight;
123
+ private renderTabBar;
65
124
  private renderActions;
66
125
  private renderImports;
67
126
  private renderPaths;
127
+ private renderAdvanced;
128
+ private renderConfirmPreset;
68
129
  private discoverySummaryLine;
69
130
  private secondarySummaryLine;
70
131
  private visibleActionRange;