@akon-labs/nexus-cli 0.1.8 → 0.1.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +27 -0
- package/LICENSE +1 -0
- package/README.md +3 -2
- package/dist/app-bridge.bundle.js +67 -0
- package/dist/cli.js +19934 -1869
- package/dist/core/agent-session.d.ts.map +1 -1
- package/dist/core/agent-session.js +1 -1
- package/dist/core/agent-session.js.map +1 -1
- package/dist/core/auto-model.d.ts +1 -1
- package/dist/core/auto-model.d.ts.map +1 -1
- package/dist/core/auto-model.js +1 -1
- package/dist/core/auto-model.js.map +1 -1
- package/dist/core/model-resolver.d.ts +2 -2
- package/dist/core/model-resolver.d.ts.map +1 -1
- package/dist/core/model-resolver.js +3 -3
- package/dist/core/model-resolver.js.map +1 -1
- package/dist/core/package-manager.d.ts +15 -0
- package/dist/core/package-manager.d.ts.map +1 -1
- package/dist/core/package-manager.js +50 -0
- package/dist/core/package-manager.js.map +1 -1
- package/dist/core/sdk.d.ts.map +1 -1
- package/dist/core/sdk.js +1 -1
- package/dist/core/sdk.js.map +1 -1
- package/dist/core/slash-commands.d.ts.map +1 -1
- package/dist/core/slash-commands.js +3 -3
- package/dist/core/slash-commands.js.map +1 -1
- package/dist/core/system-prompt.d.ts.map +1 -1
- package/dist/core/system-prompt.js +1 -1
- package/dist/core/system-prompt.js.map +1 -1
- package/dist/core/tools/index.d.ts +1 -1
- package/dist/core/tools/index.d.ts.map +1 -1
- package/dist/core/tools/index.js +5 -5
- package/dist/core/tools/index.js.map +1 -1
- package/dist/core/tools/websearch.d.ts.map +1 -1
- package/dist/core/tools/websearch.js +3 -3
- package/dist/core/tools/websearch.js.map +1 -1
- package/dist/extensions/gitnexus/gateway.d.ts +6 -6
- package/dist/extensions/gitnexus/gateway.d.ts.map +1 -1
- package/dist/extensions/gitnexus/gateway.js +4 -4
- package/dist/extensions/gitnexus/gateway.js.map +1 -1
- package/dist/extensions/gitnexus/index.d.ts.map +1 -1
- package/dist/extensions/gitnexus/index.js +4 -2
- package/dist/extensions/gitnexus/index.js.map +1 -1
- package/dist/extensions/mcp/abort.d.ts +3 -0
- package/dist/extensions/mcp/abort.d.ts.map +1 -0
- package/dist/extensions/mcp/abort.js +41 -0
- package/dist/extensions/mcp/abort.js.map +1 -0
- package/dist/extensions/mcp/agent-dir.d.ts +6 -0
- package/dist/extensions/mcp/agent-dir.d.ts.map +1 -0
- package/dist/extensions/mcp/agent-dir.js +18 -0
- package/dist/extensions/mcp/agent-dir.js.map +1 -0
- package/dist/extensions/mcp/agent-plugin-loader.d.ts +9 -0
- package/dist/extensions/mcp/agent-plugin-loader.d.ts.map +1 -0
- package/dist/extensions/mcp/agent-plugin-loader.js +384 -0
- package/dist/extensions/mcp/agent-plugin-loader.js.map +1 -0
- package/dist/extensions/mcp/app-bridge.bundle.js +67 -0
- package/dist/extensions/mcp/commands.d.ts +27 -0
- package/dist/extensions/mcp/commands.d.ts.map +1 -0
- package/dist/extensions/mcp/commands.js +629 -0
- package/dist/extensions/mcp/commands.js.map +1 -0
- package/dist/extensions/mcp/config.d.ts +121 -38
- package/dist/extensions/mcp/config.d.ts.map +1 -1
- package/dist/extensions/mcp/config.js +1030 -70
- package/dist/extensions/mcp/config.js.map +1 -1
- package/dist/extensions/mcp/consent-manager.d.ts +14 -0
- package/dist/extensions/mcp/consent-manager.d.ts.map +1 -0
- package/dist/extensions/mcp/consent-manager.js +60 -0
- package/dist/extensions/mcp/consent-manager.js.map +1 -0
- package/dist/extensions/mcp/direct-tools.d.ts +11 -0
- package/dist/extensions/mcp/direct-tools.d.ts.map +1 -0
- package/dist/extensions/mcp/direct-tools.js +562 -0
- package/dist/extensions/mcp/direct-tools.js.map +1 -0
- package/dist/extensions/mcp/elicitation-handler.d.ts +18 -0
- package/dist/extensions/mcp/elicitation-handler.d.ts.map +1 -0
- package/dist/extensions/mcp/elicitation-handler.js +320 -0
- package/dist/extensions/mcp/elicitation-handler.js.map +1 -0
- package/dist/extensions/mcp/error-signal.d.ts +16 -0
- package/dist/extensions/mcp/error-signal.d.ts.map +1 -0
- package/dist/extensions/mcp/error-signal.js +22 -0
- package/dist/extensions/mcp/error-signal.js.map +1 -0
- package/dist/extensions/mcp/errors.d.ts +104 -0
- package/dist/extensions/mcp/errors.d.ts.map +1 -0
- package/dist/extensions/mcp/errors.js +171 -0
- package/dist/extensions/mcp/errors.js.map +1 -0
- package/dist/extensions/mcp/glimpse-ui.d.ts +10 -0
- package/dist/extensions/mcp/glimpse-ui.d.ts.map +1 -0
- package/dist/extensions/mcp/glimpse-ui.js +67 -0
- package/dist/extensions/mcp/glimpse-ui.js.map +1 -0
- package/dist/extensions/mcp/host-html-template.d.ts +17 -0
- package/dist/extensions/mcp/host-html-template.d.ts.map +1 -0
- package/dist/extensions/mcp/host-html-template.js +442 -0
- package/dist/extensions/mcp/host-html-template.js.map +1 -0
- package/dist/extensions/mcp/index.d.ts +20 -15
- package/dist/extensions/mcp/index.d.ts.map +1 -1
- package/dist/extensions/mcp/index.js +1064 -82
- package/dist/extensions/mcp/index.js.map +1 -1
- package/dist/extensions/mcp/init.d.ts +28 -0
- package/dist/extensions/mcp/init.d.ts.map +1 -0
- package/dist/extensions/mcp/init.js +631 -0
- package/dist/extensions/mcp/init.js.map +1 -0
- package/dist/extensions/mcp/json-schema-validator.d.ts +3 -0
- package/dist/extensions/mcp/json-schema-validator.d.ts.map +1 -0
- package/dist/extensions/mcp/json-schema-validator.js +53 -0
- package/dist/extensions/mcp/json-schema-validator.js.map +1 -0
- package/dist/extensions/mcp/lifecycle.d.ts +56 -0
- package/dist/extensions/mcp/lifecycle.d.ts.map +1 -0
- package/dist/extensions/mcp/lifecycle.js +395 -0
- package/dist/extensions/mcp/lifecycle.js.map +1 -0
- package/dist/extensions/mcp/logger.d.ts +52 -0
- package/dist/extensions/mcp/logger.d.ts.map +1 -0
- package/dist/extensions/mcp/logger.js +134 -0
- package/dist/extensions/mcp/logger.js.map +1 -0
- package/dist/extensions/mcp/mcp-auth-flow.d.ts +117 -0
- package/dist/extensions/mcp/mcp-auth-flow.d.ts.map +1 -0
- package/dist/extensions/mcp/mcp-auth-flow.js +869 -0
- package/dist/extensions/mcp/mcp-auth-flow.js.map +1 -0
- package/dist/extensions/mcp/mcp-auth.d.ts +162 -0
- package/dist/extensions/mcp/mcp-auth.d.ts.map +1 -0
- package/dist/extensions/mcp/mcp-auth.js +897 -0
- package/dist/extensions/mcp/mcp-auth.js.map +1 -0
- package/dist/extensions/mcp/mcp-bearer-store.d.ts +25 -0
- package/dist/extensions/mcp/mcp-bearer-store.d.ts.map +1 -0
- package/dist/extensions/mcp/mcp-bearer-store.js +350 -0
- package/dist/extensions/mcp/mcp-bearer-store.js.map +1 -0
- package/dist/extensions/mcp/mcp-callback-server.d.ts +54 -0
- package/dist/extensions/mcp/mcp-callback-server.d.ts.map +1 -0
- package/dist/extensions/mcp/mcp-callback-server.js +454 -0
- package/dist/extensions/mcp/mcp-callback-server.js.map +1 -0
- package/dist/extensions/mcp/mcp-code.d.ts +48 -0
- package/dist/extensions/mcp/mcp-code.d.ts.map +1 -0
- package/dist/extensions/mcp/mcp-code.js +358 -0
- package/dist/extensions/mcp/mcp-code.js.map +1 -0
- package/dist/extensions/mcp/mcp-keyring-helper.cjs +89 -0
- package/dist/extensions/mcp/mcp-oauth-provider.d.ts +135 -0
- package/dist/extensions/mcp/mcp-oauth-provider.d.ts.map +1 -0
- package/dist/extensions/mcp/mcp-oauth-provider.js +491 -0
- package/dist/extensions/mcp/mcp-oauth-provider.js.map +1 -0
- package/dist/extensions/mcp/mcp-output-guard.d.ts +59 -0
- package/dist/extensions/mcp/mcp-output-guard.d.ts.map +1 -0
- package/dist/extensions/mcp/mcp-output-guard.js +343 -0
- package/dist/extensions/mcp/mcp-output-guard.js.map +1 -0
- package/dist/extensions/mcp/mcp-panel.d.ts +71 -0
- package/dist/extensions/mcp/mcp-panel.d.ts.map +1 -0
- package/dist/extensions/mcp/mcp-panel.js +973 -0
- package/dist/extensions/mcp/mcp-panel.js.map +1 -0
- package/dist/extensions/mcp/mcp-probe.d.ts +7 -0
- package/dist/extensions/mcp/mcp-probe.d.ts.map +1 -0
- package/dist/extensions/mcp/mcp-probe.js +155 -0
- package/dist/extensions/mcp/mcp-probe.js.map +1 -0
- package/dist/extensions/mcp/mcp-script-worker.mjs +130 -0
- package/dist/extensions/mcp/mcp-setup-panel.d.ts +85 -0
- package/dist/extensions/mcp/mcp-setup-panel.d.ts.map +1 -0
- package/dist/extensions/mcp/mcp-setup-panel.js +618 -0
- package/dist/extensions/mcp/mcp-setup-panel.js.map +1 -0
- package/dist/extensions/mcp/mcp-status.d.ts +12 -0
- package/dist/extensions/mcp/mcp-status.d.ts.map +1 -0
- package/dist/extensions/mcp/mcp-status.js +98 -0
- package/dist/extensions/mcp/mcp-status.js.map +1 -0
- package/dist/extensions/mcp/mcp-trace.d.ts +95 -0
- package/dist/extensions/mcp/mcp-trace.d.ts.map +1 -0
- package/dist/extensions/mcp/mcp-trace.js +252 -0
- package/dist/extensions/mcp/mcp-trace.js.map +1 -0
- package/dist/extensions/mcp/metadata-cache.d.ts +20 -0
- package/dist/extensions/mcp/metadata-cache.d.ts.map +1 -0
- package/dist/extensions/mcp/metadata-cache.js +318 -0
- package/dist/extensions/mcp/metadata-cache.js.map +1 -0
- package/dist/extensions/mcp/npx-resolver.d.ts +7 -0
- package/dist/extensions/mcp/npx-resolver.d.ts.map +1 -0
- package/dist/extensions/mcp/npx-resolver.js +505 -0
- package/dist/extensions/mcp/npx-resolver.js.map +1 -0
- package/dist/extensions/mcp/oauth.d.ts +21 -0
- package/dist/extensions/mcp/oauth.d.ts.map +1 -0
- package/dist/extensions/mcp/oauth.js +15 -0
- package/dist/extensions/mcp/oauth.js.map +1 -0
- package/dist/extensions/mcp/onboarding-state.d.ts +13 -0
- package/dist/extensions/mcp/onboarding-state.d.ts.map +1 -0
- package/dist/extensions/mcp/onboarding-state.js +65 -0
- package/dist/extensions/mcp/onboarding-state.js.map +1 -0
- package/dist/extensions/mcp/package-mcp-loader.d.ts +3 -0
- package/dist/extensions/mcp/package-mcp-loader.d.ts.map +1 -0
- package/dist/extensions/mcp/package-mcp-loader.js +170 -0
- package/dist/extensions/mcp/package-mcp-loader.js.map +1 -0
- package/dist/extensions/mcp/panel-keys.d.ts +21 -0
- package/dist/extensions/mcp/panel-keys.d.ts.map +1 -0
- package/dist/extensions/mcp/panel-keys.js +29 -0
- package/dist/extensions/mcp/panel-keys.js.map +1 -0
- package/dist/extensions/mcp/prompts.d.ts +63 -0
- package/dist/extensions/mcp/prompts.d.ts.map +1 -0
- package/dist/extensions/mcp/prompts.js +297 -0
- package/dist/extensions/mcp/prompts.js.map +1 -0
- package/dist/extensions/mcp/proxy-modes.d.ts +15 -0
- package/dist/extensions/mcp/proxy-modes.d.ts.map +1 -0
- package/dist/extensions/mcp/proxy-modes.js +1421 -0
- package/dist/extensions/mcp/proxy-modes.js.map +1 -0
- package/dist/extensions/mcp/request-headers-command.d.ts +11 -0
- package/dist/extensions/mcp/request-headers-command.d.ts.map +1 -0
- package/dist/extensions/mcp/request-headers-command.js +334 -0
- package/dist/extensions/mcp/request-headers-command.js.map +1 -0
- package/dist/extensions/mcp/resource-tools.d.ts +2 -0
- package/dist/extensions/mcp/resource-tools.d.ts.map +1 -0
- package/dist/extensions/mcp/resource-tools.js +15 -0
- package/dist/extensions/mcp/resource-tools.js.map +1 -0
- package/dist/extensions/mcp/runtime-owner.d.ts +14 -0
- package/dist/extensions/mcp/runtime-owner.d.ts.map +1 -0
- package/dist/extensions/mcp/runtime-owner.js +84 -0
- package/dist/extensions/mcp/runtime-owner.js.map +1 -0
- package/dist/extensions/mcp/sampling-handler.d.ts +18 -0
- package/dist/extensions/mcp/sampling-handler.d.ts.map +1 -0
- package/dist/extensions/mcp/sampling-handler.js +229 -0
- package/dist/extensions/mcp/sampling-handler.js.map +1 -0
- package/dist/extensions/mcp/search-ranking.d.ts +25 -0
- package/dist/extensions/mcp/search-ranking.d.ts.map +1 -0
- package/dist/extensions/mcp/search-ranking.js +234 -0
- package/dist/extensions/mcp/search-ranking.js.map +1 -0
- package/dist/extensions/mcp/server-manager.d.ts +116 -0
- package/dist/extensions/mcp/server-manager.d.ts.map +1 -0
- package/dist/extensions/mcp/server-manager.js +1052 -0
- package/dist/extensions/mcp/server-manager.js.map +1 -0
- package/dist/extensions/mcp/session-recovery.d.ts +27 -0
- package/dist/extensions/mcp/session-recovery.d.ts.map +1 -0
- package/dist/extensions/mcp/session-recovery.js +140 -0
- package/dist/extensions/mcp/session-recovery.js.map +1 -0
- package/dist/extensions/mcp/skills/mcp-scripting/SKILL.md +38 -0
- package/dist/extensions/mcp/state.d.ts +62 -0
- package/dist/extensions/mcp/state.d.ts.map +1 -0
- package/dist/extensions/mcp/state.js +2 -0
- package/dist/extensions/mcp/state.js.map +1 -0
- package/dist/extensions/mcp/tool-approval.d.ts +11 -0
- package/dist/extensions/mcp/tool-approval.d.ts.map +1 -0
- package/dist/extensions/mcp/tool-approval.js +156 -0
- package/dist/extensions/mcp/tool-approval.js.map +1 -0
- package/dist/extensions/mcp/tool-metadata.d.ts +11 -0
- package/dist/extensions/mcp/tool-metadata.d.ts.map +1 -0
- package/dist/extensions/mcp/tool-metadata.js +264 -0
- package/dist/extensions/mcp/tool-metadata.js.map +1 -0
- package/dist/extensions/mcp/tool-registrar.d.ts +21 -0
- package/dist/extensions/mcp/tool-registrar.d.ts.map +1 -0
- package/dist/extensions/mcp/tool-registrar.js +229 -0
- package/dist/extensions/mcp/tool-registrar.js.map +1 -0
- package/dist/extensions/mcp/tool-result-renderer.d.ts +83 -0
- package/dist/extensions/mcp/tool-result-renderer.d.ts.map +1 -0
- package/dist/extensions/mcp/tool-result-renderer.js +345 -0
- package/dist/extensions/mcp/tool-result-renderer.js.map +1 -0
- package/dist/extensions/mcp/ts-shape.d.ts +3 -0
- package/dist/extensions/mcp/ts-shape.d.ts.map +1 -0
- package/dist/extensions/mcp/ts-shape.js +160 -0
- package/dist/extensions/mcp/ts-shape.js.map +1 -0
- package/dist/extensions/mcp/types.d.ts +521 -0
- package/dist/extensions/mcp/types.d.ts.map +1 -0
- package/dist/extensions/mcp/types.js +294 -0
- package/dist/extensions/mcp/types.js.map +1 -0
- package/dist/extensions/mcp/ui-app-bridge-helpers.d.ts +7 -0
- package/dist/extensions/mcp/ui-app-bridge-helpers.d.ts.map +1 -0
- package/dist/extensions/mcp/ui-app-bridge-helpers.js +37 -0
- package/dist/extensions/mcp/ui-app-bridge-helpers.js.map +1 -0
- package/dist/extensions/mcp/ui-resource-handler.d.ts +18 -0
- package/dist/extensions/mcp/ui-resource-handler.d.ts.map +1 -0
- package/dist/extensions/mcp/ui-resource-handler.js +210 -0
- package/dist/extensions/mcp/ui-resource-handler.js.map +1 -0
- package/dist/extensions/mcp/ui-server.d.ts +52 -0
- package/dist/extensions/mcp/ui-server.d.ts.map +1 -0
- package/dist/extensions/mcp/ui-server.js +740 -0
- package/dist/extensions/mcp/ui-server.js.map +1 -0
- package/dist/extensions/mcp/ui-session.d.ts +40 -0
- package/dist/extensions/mcp/ui-session.d.ts.map +1 -0
- package/dist/extensions/mcp/ui-session.js +477 -0
- package/dist/extensions/mcp/ui-session.js.map +1 -0
- package/dist/extensions/mcp/ui-stream-types.d.ts +105 -0
- package/dist/extensions/mcp/ui-stream-types.d.ts.map +1 -0
- package/dist/extensions/mcp/ui-stream-types.js +61 -0
- package/dist/extensions/mcp/ui-stream-types.js.map +1 -0
- package/dist/extensions/mcp/ui-tool-visibility.d.ts +5 -0
- package/dist/extensions/mcp/ui-tool-visibility.d.ts.map +1 -0
- package/dist/extensions/mcp/ui-tool-visibility.js +27 -0
- package/dist/extensions/mcp/ui-tool-visibility.js.map +1 -0
- package/dist/extensions/mcp/unix-socket-transport.d.ts +15 -0
- package/dist/extensions/mcp/unix-socket-transport.d.ts.map +1 -0
- package/dist/extensions/mcp/unix-socket-transport.js +85 -0
- package/dist/extensions/mcp/unix-socket-transport.js.map +1 -0
- package/dist/extensions/mcp/utils.d.ts +32 -0
- package/dist/extensions/mcp/utils.d.ts.map +1 -0
- package/dist/extensions/mcp/utils.js +336 -0
- package/dist/extensions/mcp/utils.js.map +1 -0
- package/dist/extensions/subagent/index.d.ts +62 -3
- package/dist/extensions/subagent/index.d.ts.map +1 -1
- package/dist/extensions/subagent/index.js +193 -58
- package/dist/extensions/subagent/index.js.map +1 -1
- package/dist/extensions/web-access.d.ts.map +1 -1
- package/dist/extensions/web-access.js +1 -1
- package/dist/extensions/web-access.js.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +20074 -2004
- package/dist/index.js.map +1 -1
- package/dist/mcp-keyring-helper.cjs +89 -0
- package/dist/mcp-script-worker.mjs +130 -0
- package/dist/modes/interactive/components/model-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/model-selector.js +1 -1
- package/dist/modes/interactive/components/model-selector.js.map +1 -1
- package/dist/modes/interactive/components/response-separator.d.ts +1 -1
- package/dist/modes/interactive/components/response-separator.d.ts.map +1 -1
- package/dist/modes/interactive/components/response-separator.js +1 -1
- package/dist/modes/interactive/components/response-separator.js.map +1 -1
- package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode.js +7 -5
- package/dist/modes/interactive/interactive-mode.js.map +1 -1
- package/dist/rpc-entry.js +19934 -1869
- package/dist/skills/mcp-scripting/SKILL.md +38 -0
- package/dist/vendor/ai.js +282 -207
- package/docs/mcp.md +178 -0
- package/docs/pi-subagents.md +75 -0
- package/docs/quickstart.md +1 -1
- package/docs/usage.md +2 -1
- package/examples/extensions/pi-subagents-worker-policy.ts +86 -0
- package/npm-shrinkwrap.json +763 -6
- package/package.json +15 -4
- package/dist/extensions/mcp/client.d.ts +0 -86
- package/dist/extensions/mcp/client.d.ts.map +0 -1
- package/dist/extensions/mcp/client.js +0 -275
- package/dist/extensions/mcp/client.js.map +0 -1
|
@@ -0,0 +1,336 @@
|
|
|
1
|
+
import { spawnSync } from "node:child_process";
|
|
2
|
+
import { homedir, platform } from "node:os";
|
|
3
|
+
import { extname, isAbsolute, join } from "node:path";
|
|
4
|
+
async function execOpen(nexus, target, browser, signal) {
|
|
5
|
+
const os = platform();
|
|
6
|
+
if (os === "darwin") {
|
|
7
|
+
if (browser) {
|
|
8
|
+
// An absolute executable path (e.g. from $BROWSER) names a launcher
|
|
9
|
+
// binary. App bundles still go through `open -a`, which handles them.
|
|
10
|
+
return isAbsolute(browser) && extname(browser).toLowerCase() !== ".app"
|
|
11
|
+
? nexus.exec(browser, [target], signal ? { signal } : {})
|
|
12
|
+
: nexus.exec("open", ["-a", browser, target], signal ? { signal } : {});
|
|
13
|
+
}
|
|
14
|
+
return nexus.exec("open", [target], signal ? { signal } : {});
|
|
15
|
+
}
|
|
16
|
+
if (os === "win32") {
|
|
17
|
+
return browser
|
|
18
|
+
? nexus.exec("cmd", ["/c", "start", "", browser, target], signal ? { signal } : {})
|
|
19
|
+
: nexus.exec("cmd", ["/c", "start", "", target], signal ? { signal } : {});
|
|
20
|
+
}
|
|
21
|
+
return browser
|
|
22
|
+
? nexus.exec(browser, [target], signal ? { signal } : {})
|
|
23
|
+
: nexus.exec("xdg-open", [target], signal ? { signal } : {});
|
|
24
|
+
}
|
|
25
|
+
export async function openUrl(nexus, url, browser, signal) {
|
|
26
|
+
const result = await execOpen(nexus, url, browser, signal);
|
|
27
|
+
if (result.code !== 0) {
|
|
28
|
+
throw new Error(result.stderr || `Failed to open browser (exit code ${result.code})`);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
export async function openPath(nexus, targetPath) {
|
|
32
|
+
const result = await execOpen(nexus, targetPath);
|
|
33
|
+
if (result.code !== 0) {
|
|
34
|
+
throw new Error(result.stderr || `Failed to open path (exit code ${result.code})`);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
export async function parallelLimit(items, limit, fn) {
|
|
38
|
+
const results = [];
|
|
39
|
+
const iterator = items.entries();
|
|
40
|
+
async function worker() {
|
|
41
|
+
while (true) {
|
|
42
|
+
const next = iterator.next();
|
|
43
|
+
if (next.done)
|
|
44
|
+
return;
|
|
45
|
+
const [index, item] = next.value;
|
|
46
|
+
results[index] = await fn(item);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
const workers = Array(Math.min(limit, items.length))
|
|
50
|
+
.fill(null)
|
|
51
|
+
.map(() => worker());
|
|
52
|
+
await Promise.all(workers);
|
|
53
|
+
return results;
|
|
54
|
+
}
|
|
55
|
+
export function getConfigPathFromArgv() {
|
|
56
|
+
const idx = process.argv.indexOf("--mcp-config");
|
|
57
|
+
if (idx >= 0 && idx + 1 < process.argv.length) {
|
|
58
|
+
return process.argv[idx + 1];
|
|
59
|
+
}
|
|
60
|
+
return undefined;
|
|
61
|
+
}
|
|
62
|
+
export function interpolateEnvVars(value) {
|
|
63
|
+
return value
|
|
64
|
+
.replace(/\$\{(\w+)\}/g, (_, name) => process.env[name] ?? "")
|
|
65
|
+
.replace(/\$env:(\w+)/g, (_, name) => process.env[name] ?? "")
|
|
66
|
+
.replace(/\{env:(\w+)\}/g, (_, name) => process.env[name] ?? "");
|
|
67
|
+
}
|
|
68
|
+
function getMissingEnvVars(value) {
|
|
69
|
+
const missing = new Set();
|
|
70
|
+
for (const match of value.matchAll(/\$\{(\w+)\}|\$env:(\w+)|\{env:(\w+)\}/g)) {
|
|
71
|
+
const name = match[1] ?? match[2] ?? match[3];
|
|
72
|
+
if (name && process.env[name] === undefined) {
|
|
73
|
+
missing.add(name);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
return [...missing];
|
|
77
|
+
}
|
|
78
|
+
export function toStringRecord(value) {
|
|
79
|
+
if (!value || typeof value !== "object" || Array.isArray(value))
|
|
80
|
+
return undefined;
|
|
81
|
+
const result = {};
|
|
82
|
+
for (const [key, entry] of Object.entries(value)) {
|
|
83
|
+
if (typeof entry === "string")
|
|
84
|
+
result[key] = entry;
|
|
85
|
+
}
|
|
86
|
+
return Object.keys(result).length > 0 ? result : undefined;
|
|
87
|
+
}
|
|
88
|
+
function interpolateSecretExpression(value) {
|
|
89
|
+
if (value.startsWith("!!"))
|
|
90
|
+
return interpolateEnvVars(value.slice(1));
|
|
91
|
+
return value.startsWith("!") ? value : interpolateEnvVars(value);
|
|
92
|
+
}
|
|
93
|
+
export function interpolateEnvRecord(values) {
|
|
94
|
+
if (!values)
|
|
95
|
+
return undefined;
|
|
96
|
+
return Object.fromEntries(Object.entries(values).map(([key, value]) => [key, interpolateSecretExpression(value)]));
|
|
97
|
+
}
|
|
98
|
+
const COMMAND_SECRET_TIMEOUT_MS = 10_000;
|
|
99
|
+
const COMMAND_SECRET_MAX_OUTPUT_BYTES = 1024 * 1024;
|
|
100
|
+
export function resolveCommandSecret(value, context) {
|
|
101
|
+
if (value === undefined)
|
|
102
|
+
return undefined;
|
|
103
|
+
if (value.startsWith("!!"))
|
|
104
|
+
return interpolateEnvVars(value.slice(1));
|
|
105
|
+
if (!value.startsWith("!"))
|
|
106
|
+
return interpolateEnvVars(value);
|
|
107
|
+
const result = spawnSync(value.slice(1), {
|
|
108
|
+
shell: true,
|
|
109
|
+
encoding: "utf8",
|
|
110
|
+
timeout: COMMAND_SECRET_TIMEOUT_MS,
|
|
111
|
+
maxBuffer: COMMAND_SECRET_MAX_OUTPUT_BYTES,
|
|
112
|
+
stdio: ["ignore", "pipe", "ignore"],
|
|
113
|
+
windowsHide: true,
|
|
114
|
+
});
|
|
115
|
+
if (result.error) {
|
|
116
|
+
const code = result.error.code;
|
|
117
|
+
const reason = code === "ETIMEDOUT"
|
|
118
|
+
? "command timed out after 10 seconds"
|
|
119
|
+
: code === "ENOBUFS"
|
|
120
|
+
? "command output exceeded 1 MiB"
|
|
121
|
+
: "command failed to start";
|
|
122
|
+
throw new Error(`Failed to resolve ${context}: ${reason}`);
|
|
123
|
+
}
|
|
124
|
+
if (result.status !== 0) {
|
|
125
|
+
throw new Error(`Failed to resolve ${context}: command exited with code ${result.status ?? "unknown"}`);
|
|
126
|
+
}
|
|
127
|
+
const resolved = result.stdout.trim();
|
|
128
|
+
if (!resolved)
|
|
129
|
+
throw new Error(`Failed to resolve ${context}: command returned empty output`);
|
|
130
|
+
return resolved;
|
|
131
|
+
}
|
|
132
|
+
/** Resolve command markers in a configured record without mutating the input. */
|
|
133
|
+
export function resolveCommandSecretsRecord(values, context) {
|
|
134
|
+
if (!values)
|
|
135
|
+
return undefined;
|
|
136
|
+
return Object.fromEntries(Object.entries(values).map(([key, value]) => [key, resolveCommandSecret(value, context(key))]));
|
|
137
|
+
}
|
|
138
|
+
export function resolveServerUrl(definition) {
|
|
139
|
+
if (definition.url == null)
|
|
140
|
+
return undefined;
|
|
141
|
+
if (typeof definition.url !== "string") {
|
|
142
|
+
throw new Error("MCP server URL must be a string");
|
|
143
|
+
}
|
|
144
|
+
const missing = getMissingEnvVars(definition.url);
|
|
145
|
+
if (missing.length > 0) {
|
|
146
|
+
throw new Error(`Missing environment variable${missing.length === 1 ? "" : "s"} in MCP server URL: ${missing.join(", ")}`);
|
|
147
|
+
}
|
|
148
|
+
const resolved = interpolateEnvVars(definition.url);
|
|
149
|
+
try {
|
|
150
|
+
new URL(resolved);
|
|
151
|
+
}
|
|
152
|
+
catch (error) {
|
|
153
|
+
throw new Error(`Invalid MCP server URL after environment interpolation: ${resolved}`, { cause: error });
|
|
154
|
+
}
|
|
155
|
+
return resolved;
|
|
156
|
+
}
|
|
157
|
+
export function resolveConfigPath(value) {
|
|
158
|
+
if (value === undefined)
|
|
159
|
+
return undefined;
|
|
160
|
+
const resolved = interpolateEnvVars(value);
|
|
161
|
+
if (resolved === "~")
|
|
162
|
+
return homedir();
|
|
163
|
+
if (resolved.startsWith("~/") || resolved.startsWith("~\\")) {
|
|
164
|
+
return join(homedir(), resolved.slice(2));
|
|
165
|
+
}
|
|
166
|
+
return resolved;
|
|
167
|
+
}
|
|
168
|
+
export function resolveBearerToken(definition) {
|
|
169
|
+
if (definition.bearerToken !== undefined) {
|
|
170
|
+
return interpolateSecretExpression(definition.bearerToken);
|
|
171
|
+
}
|
|
172
|
+
return definition.bearerTokenEnv ? process.env[definition.bearerTokenEnv] : undefined;
|
|
173
|
+
}
|
|
174
|
+
/** Remove OSC control strings, including payloads that have no terminator. */
|
|
175
|
+
export function stripOscSequences(text) {
|
|
176
|
+
let result = "";
|
|
177
|
+
let index = 0;
|
|
178
|
+
while (index < text.length) {
|
|
179
|
+
const isEscOsc = text.charCodeAt(index) === 0x1b && text[index + 1] === "]";
|
|
180
|
+
const isC1Osc = text.charCodeAt(index) === 0x9d;
|
|
181
|
+
if (!isEscOsc && !isC1Osc) {
|
|
182
|
+
result += text[index++];
|
|
183
|
+
continue;
|
|
184
|
+
}
|
|
185
|
+
index += isEscOsc ? 2 : 1;
|
|
186
|
+
while (index < text.length) {
|
|
187
|
+
const code = text.charCodeAt(index++);
|
|
188
|
+
if (code === 0x07 || code === 0x9c)
|
|
189
|
+
break;
|
|
190
|
+
if (code === 0x1b && text[index] === "\\") {
|
|
191
|
+
index++;
|
|
192
|
+
break;
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
return result;
|
|
197
|
+
}
|
|
198
|
+
export function sanitizeTerminalText(text) {
|
|
199
|
+
return stripOscSequences(text)
|
|
200
|
+
.replace(/(?:\x1b\[[0-?]*[ -/]*[@-~]|\x1b[@-Z\\-_])/g, "")
|
|
201
|
+
.replace(/[\u0000-\u001f\u007f-\u009f]+/g, " ")
|
|
202
|
+
.replace(/\s+/g, " ")
|
|
203
|
+
.trim();
|
|
204
|
+
}
|
|
205
|
+
export function formatTerminalError(error) {
|
|
206
|
+
const messages = [];
|
|
207
|
+
const seen = new Set();
|
|
208
|
+
const collect = (value) => {
|
|
209
|
+
if (seen.has(value))
|
|
210
|
+
return;
|
|
211
|
+
if ((typeof value === "object" && value !== null) || typeof value === "function")
|
|
212
|
+
seen.add(value);
|
|
213
|
+
if (value instanceof AggregateError) {
|
|
214
|
+
const countBefore = messages.length;
|
|
215
|
+
for (const nested of value.errors)
|
|
216
|
+
collect(nested);
|
|
217
|
+
if (value.cause !== undefined)
|
|
218
|
+
collect(value.cause);
|
|
219
|
+
if (messages.length === countBefore && value.message)
|
|
220
|
+
messages.push(value.message);
|
|
221
|
+
return;
|
|
222
|
+
}
|
|
223
|
+
if (value instanceof Error) {
|
|
224
|
+
if (value.message)
|
|
225
|
+
messages.push(value.message);
|
|
226
|
+
if (value.cause !== undefined)
|
|
227
|
+
collect(value.cause);
|
|
228
|
+
return;
|
|
229
|
+
}
|
|
230
|
+
messages.push(String(value));
|
|
231
|
+
};
|
|
232
|
+
collect(error);
|
|
233
|
+
return sanitizeTerminalText([...new Set(messages)].join(": "));
|
|
234
|
+
}
|
|
235
|
+
export function truncateAtWord(text, target) {
|
|
236
|
+
if (!text || text.length <= target)
|
|
237
|
+
return text;
|
|
238
|
+
const truncated = text.slice(0, target);
|
|
239
|
+
const lastSpace = truncated.lastIndexOf(" ");
|
|
240
|
+
if (lastSpace > target * 0.6) {
|
|
241
|
+
return `${truncated.slice(0, lastSpace)}...`;
|
|
242
|
+
}
|
|
243
|
+
return `${truncated}...`;
|
|
244
|
+
}
|
|
245
|
+
export function normalizeDirectToolInputSchema(schema) {
|
|
246
|
+
const inputSchema = schema && typeof schema === "object" && !Array.isArray(schema)
|
|
247
|
+
? schema
|
|
248
|
+
: { type: "object", properties: {} };
|
|
249
|
+
const normalized = { ...inputSchema };
|
|
250
|
+
delete normalized.$schema;
|
|
251
|
+
delete normalized.additionalProperties;
|
|
252
|
+
return normalized;
|
|
253
|
+
}
|
|
254
|
+
export function normalizeToolArguments(value, context = "tool arguments") {
|
|
255
|
+
if (value === undefined || value === null || value === "")
|
|
256
|
+
return {};
|
|
257
|
+
if (typeof value === "string") {
|
|
258
|
+
const trimmed = value.trim();
|
|
259
|
+
if (trimmed === "")
|
|
260
|
+
return {};
|
|
261
|
+
let parsed;
|
|
262
|
+
try {
|
|
263
|
+
parsed = JSON.parse(trimmed);
|
|
264
|
+
}
|
|
265
|
+
catch (error) {
|
|
266
|
+
throw new Error(`${context}: invalid args JSON (${error instanceof SyntaxError ? error.message : String(error)}); ` +
|
|
267
|
+
`pass args as a JSON object, or as a valid JSON string encoding one`, { cause: error });
|
|
268
|
+
}
|
|
269
|
+
if (typeof parsed !== "object" || parsed === null || Array.isArray(parsed)) {
|
|
270
|
+
throw new Error(`${context}: expected a JSON object, got ${Array.isArray(parsed) ? "array" : typeof parsed}`);
|
|
271
|
+
}
|
|
272
|
+
return parsed;
|
|
273
|
+
}
|
|
274
|
+
if (typeof value !== "object" || Array.isArray(value)) {
|
|
275
|
+
throw new Error(`${context}: expected a JSON object, got ${Array.isArray(value) ? "array" : typeof value}`);
|
|
276
|
+
}
|
|
277
|
+
assertJsonSerializable(value, context);
|
|
278
|
+
try {
|
|
279
|
+
return JSON.parse(JSON.stringify(value));
|
|
280
|
+
}
|
|
281
|
+
catch (error) {
|
|
282
|
+
throw new Error(`${context}: value is not JSON-serializable: ${error instanceof Error ? error.message : String(error)}`, { cause: error });
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
function assertJsonSerializable(value, context, path = "") {
|
|
286
|
+
if (value === null)
|
|
287
|
+
return;
|
|
288
|
+
if (typeof value === "string" || typeof value === "boolean")
|
|
289
|
+
return;
|
|
290
|
+
if (typeof value === "number") {
|
|
291
|
+
if (!Number.isFinite(value))
|
|
292
|
+
throw new Error(`${context}: value at ${path || "root"} is not a finite number`);
|
|
293
|
+
return;
|
|
294
|
+
}
|
|
295
|
+
if (Array.isArray(value)) {
|
|
296
|
+
for (const [index, item] of value.entries())
|
|
297
|
+
assertJsonSerializable(item, context, `${path}[${index}]`);
|
|
298
|
+
return;
|
|
299
|
+
}
|
|
300
|
+
if (typeof value === "object") {
|
|
301
|
+
if (Object.getPrototypeOf(value) !== Object.prototype && Object.getPrototypeOf(value) !== null) {
|
|
302
|
+
throw new Error(`${context}: value at ${path || "root"} is not a plain JSON object`);
|
|
303
|
+
}
|
|
304
|
+
if (Object.getOwnPropertySymbols(value).length > 0) {
|
|
305
|
+
throw new Error(`${context}: value at ${path || "root"} has symbol keys`);
|
|
306
|
+
}
|
|
307
|
+
for (const [key, item] of Object.entries(value)) {
|
|
308
|
+
assertJsonSerializable(item, context, path ? `${path}.${key}` : key);
|
|
309
|
+
}
|
|
310
|
+
return;
|
|
311
|
+
}
|
|
312
|
+
throw new Error(`${context}: value at ${path || "root"} is not JSON-serializable`);
|
|
313
|
+
}
|
|
314
|
+
export function formatAuthRequiredMessage(config, serverName, defaultMessage) {
|
|
315
|
+
const template = config.settings?.authRequiredMessage;
|
|
316
|
+
return template ? template.replaceAll(`\${server}`, serverName) : defaultMessage;
|
|
317
|
+
}
|
|
318
|
+
export function formatMcpStatus(config, message) {
|
|
319
|
+
if (config.settings?.mcpFooterStatus === "off")
|
|
320
|
+
return undefined;
|
|
321
|
+
return `${config.settings?.showStatusIcon === false ? "MCP: " : "🔌 MCP: "}${message}`;
|
|
322
|
+
}
|
|
323
|
+
/**
|
|
324
|
+
* Extract the adapter-owned UI stream mode from tool metadata.
|
|
325
|
+
*/
|
|
326
|
+
export function extractToolUiStreamMode(toolMeta) {
|
|
327
|
+
const uiMeta = toolMeta?.ui;
|
|
328
|
+
if (!uiMeta || typeof uiMeta !== "object")
|
|
329
|
+
return undefined;
|
|
330
|
+
const streamMode = uiMeta["nexus-mcp.streamMode"];
|
|
331
|
+
if (streamMode === "eager" || streamMode === "stream-first") {
|
|
332
|
+
return streamMode;
|
|
333
|
+
}
|
|
334
|
+
return undefined;
|
|
335
|
+
}
|
|
336
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/extensions/mcp/utils.ts"],"names":[],"mappings":"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","sourcesContent":["import { spawnSync } from \"node:child_process\";\nimport { homedir, platform } from \"node:os\";\nimport { extname, isAbsolute, join } from \"node:path\";\nimport type { ExtensionAPI } from \"../../core/extensions/types.ts\";\nimport type { McpConfig, ServerEntry } from \"./types.ts\";\n\nasync function execOpen(nexus: ExtensionAPI, target: string, browser?: string, signal?: AbortSignal) {\n\tconst os = platform();\n\n\tif (os === \"darwin\") {\n\t\tif (browser) {\n\t\t\t// An absolute executable path (e.g. from $BROWSER) names a launcher\n\t\t\t// binary. App bundles still go through `open -a`, which handles them.\n\t\t\treturn isAbsolute(browser) && extname(browser).toLowerCase() !== \".app\"\n\t\t\t\t? nexus.exec(browser, [target], signal ? { signal } : {})\n\t\t\t\t: nexus.exec(\"open\", [\"-a\", browser, target], signal ? { signal } : {});\n\t\t}\n\t\treturn nexus.exec(\"open\", [target], signal ? { signal } : {});\n\t}\n\tif (os === \"win32\") {\n\t\treturn browser\n\t\t\t? nexus.exec(\"cmd\", [\"/c\", \"start\", \"\", browser, target], signal ? { signal } : {})\n\t\t\t: nexus.exec(\"cmd\", [\"/c\", \"start\", \"\", target], signal ? { signal } : {});\n\t}\n\treturn browser\n\t\t? nexus.exec(browser, [target], signal ? { signal } : {})\n\t\t: nexus.exec(\"xdg-open\", [target], signal ? { signal } : {});\n}\n\nexport async function openUrl(nexus: ExtensionAPI, url: string, browser?: string, signal?: AbortSignal): Promise<void> {\n\tconst result = await execOpen(nexus, url, browser, signal);\n\tif (result.code !== 0) {\n\t\tthrow new Error(result.stderr || `Failed to open browser (exit code ${result.code})`);\n\t}\n}\n\nexport async function openPath(nexus: ExtensionAPI, targetPath: string): Promise<void> {\n\tconst result = await execOpen(nexus, targetPath);\n\tif (result.code !== 0) {\n\t\tthrow new Error(result.stderr || `Failed to open path (exit code ${result.code})`);\n\t}\n}\n\nexport async function parallelLimit<T, R>(items: T[], limit: number, fn: (item: T) => Promise<R>): Promise<R[]> {\n\tconst results: R[] = [];\n\tconst iterator = items.entries();\n\n\tasync function worker() {\n\t\twhile (true) {\n\t\t\tconst next = iterator.next();\n\t\t\tif (next.done) return;\n\t\t\tconst [index, item] = next.value;\n\t\t\tresults[index] = await fn(item);\n\t\t}\n\t}\n\n\tconst workers = Array(Math.min(limit, items.length))\n\t\t.fill(null)\n\t\t.map(() => worker());\n\tawait Promise.all(workers);\n\treturn results;\n}\n\nexport function getConfigPathFromArgv(): string | undefined {\n\tconst idx = process.argv.indexOf(\"--mcp-config\");\n\tif (idx >= 0 && idx + 1 < process.argv.length) {\n\t\treturn process.argv[idx + 1];\n\t}\n\treturn undefined;\n}\n\nexport function interpolateEnvVars(value: string): string {\n\treturn value\n\t\t.replace(/\\$\\{(\\w+)\\}/g, (_, name) => process.env[name] ?? \"\")\n\t\t.replace(/\\$env:(\\w+)/g, (_, name) => process.env[name] ?? \"\")\n\t\t.replace(/\\{env:(\\w+)\\}/g, (_, name) => process.env[name] ?? \"\");\n}\n\nfunction getMissingEnvVars(value: string): string[] {\n\tconst missing = new Set<string>();\n\tfor (const match of value.matchAll(/\\$\\{(\\w+)\\}|\\$env:(\\w+)|\\{env:(\\w+)\\}/g)) {\n\t\tconst name = match[1] ?? match[2] ?? match[3];\n\t\tif (name && process.env[name] === undefined) {\n\t\t\tmissing.add(name);\n\t\t}\n\t}\n\treturn [...missing];\n}\n\nexport function toStringRecord(value: unknown): Record<string, string> | undefined {\n\tif (!value || typeof value !== \"object\" || Array.isArray(value)) return undefined;\n\n\tconst result: Record<string, string> = {};\n\tfor (const [key, entry] of Object.entries(value)) {\n\t\tif (typeof entry === \"string\") result[key] = entry;\n\t}\n\treturn Object.keys(result).length > 0 ? result : undefined;\n}\n\nfunction interpolateSecretExpression(value: string): string {\n\tif (value.startsWith(\"!!\")) return interpolateEnvVars(value.slice(1));\n\treturn value.startsWith(\"!\") ? value : interpolateEnvVars(value);\n}\n\nexport function interpolateEnvRecord(values: Record<string, string> | undefined): Record<string, string> | undefined {\n\tif (!values) return undefined;\n\n\treturn Object.fromEntries(Object.entries(values).map(([key, value]) => [key, interpolateSecretExpression(value)]));\n}\n\nconst COMMAND_SECRET_TIMEOUT_MS = 10_000;\nconst COMMAND_SECRET_MAX_OUTPUT_BYTES = 1024 * 1024;\n\n/** Resolve a secret value, executing only a single leading `!` command marker. */\nexport function resolveCommandSecret(value: string, context: string): string;\nexport function resolveCommandSecret(value: undefined, context: string): undefined;\nexport function resolveCommandSecret(value: string | undefined, context: string): string | undefined;\nexport function resolveCommandSecret(value: string | undefined, context: string): string | undefined {\n\tif (value === undefined) return undefined;\n\tif (value.startsWith(\"!!\")) return interpolateEnvVars(value.slice(1));\n\tif (!value.startsWith(\"!\")) return interpolateEnvVars(value);\n\n\tconst result = spawnSync(value.slice(1), {\n\t\tshell: true,\n\t\tencoding: \"utf8\",\n\t\ttimeout: COMMAND_SECRET_TIMEOUT_MS,\n\t\tmaxBuffer: COMMAND_SECRET_MAX_OUTPUT_BYTES,\n\t\tstdio: [\"ignore\", \"pipe\", \"ignore\"],\n\t\twindowsHide: true,\n\t});\n\tif (result.error) {\n\t\tconst code = (result.error as NodeJS.ErrnoException).code;\n\t\tconst reason =\n\t\t\tcode === \"ETIMEDOUT\"\n\t\t\t\t? \"command timed out after 10 seconds\"\n\t\t\t\t: code === \"ENOBUFS\"\n\t\t\t\t\t? \"command output exceeded 1 MiB\"\n\t\t\t\t\t: \"command failed to start\";\n\t\tthrow new Error(`Failed to resolve ${context}: ${reason}`);\n\t}\n\tif (result.status !== 0) {\n\t\tthrow new Error(`Failed to resolve ${context}: command exited with code ${result.status ?? \"unknown\"}`);\n\t}\n\n\tconst resolved = result.stdout.trim();\n\tif (!resolved) throw new Error(`Failed to resolve ${context}: command returned empty output`);\n\treturn resolved;\n}\n\n/** Resolve command markers in a configured record without mutating the input. */\nexport function resolveCommandSecretsRecord(\n\tvalues: Record<string, string> | undefined,\n\tcontext: (key: string) => string,\n): Record<string, string> | undefined {\n\tif (!values) return undefined;\n\n\treturn Object.fromEntries(\n\t\tObject.entries(values).map(([key, value]) => [key, resolveCommandSecret(value, context(key))]),\n\t);\n}\n\nexport function resolveServerUrl(definition: Pick<ServerEntry, \"url\">): string | undefined {\n\tif (definition.url == null) return undefined;\n\tif (typeof definition.url !== \"string\") {\n\t\tthrow new Error(\"MCP server URL must be a string\");\n\t}\n\n\tconst missing = getMissingEnvVars(definition.url);\n\tif (missing.length > 0) {\n\t\tthrow new Error(\n\t\t\t`Missing environment variable${missing.length === 1 ? \"\" : \"s\"} in MCP server URL: ${missing.join(\", \")}`,\n\t\t);\n\t}\n\n\tconst resolved = interpolateEnvVars(definition.url);\n\ttry {\n\t\tnew URL(resolved);\n\t} catch (error) {\n\t\tthrow new Error(`Invalid MCP server URL after environment interpolation: ${resolved}`, { cause: error });\n\t}\n\treturn resolved;\n}\n\nexport function resolveConfigPath(value: string | undefined): string | undefined {\n\tif (value === undefined) return undefined;\n\n\tconst resolved = interpolateEnvVars(value);\n\tif (resolved === \"~\") return homedir();\n\tif (resolved.startsWith(\"~/\") || resolved.startsWith(\"~\\\\\")) {\n\t\treturn join(homedir(), resolved.slice(2));\n\t}\n\treturn resolved;\n}\n\nexport function resolveBearerToken(\n\tdefinition: Pick<ServerEntry, \"bearerToken\" | \"bearerTokenEnv\">,\n): string | undefined {\n\tif (definition.bearerToken !== undefined) {\n\t\treturn interpolateSecretExpression(definition.bearerToken);\n\t}\n\treturn definition.bearerTokenEnv ? process.env[definition.bearerTokenEnv] : undefined;\n}\n\n/** Remove OSC control strings, including payloads that have no terminator. */\nexport function stripOscSequences(text: string): string {\n\tlet result = \"\";\n\tlet index = 0;\n\twhile (index < text.length) {\n\t\tconst isEscOsc = text.charCodeAt(index) === 0x1b && text[index + 1] === \"]\";\n\t\tconst isC1Osc = text.charCodeAt(index) === 0x9d;\n\t\tif (!isEscOsc && !isC1Osc) {\n\t\t\tresult += text[index++];\n\t\t\tcontinue;\n\t\t}\n\n\t\tindex += isEscOsc ? 2 : 1;\n\t\twhile (index < text.length) {\n\t\t\tconst code = text.charCodeAt(index++);\n\t\t\tif (code === 0x07 || code === 0x9c) break;\n\t\t\tif (code === 0x1b && text[index] === \"\\\\\") {\n\t\t\t\tindex++;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\treturn result;\n}\n\nexport function sanitizeTerminalText(text: string): string {\n\treturn stripOscSequences(text)\n\t\t.replace(/(?:\\x1b\\[[0-?]*[ -/]*[@-~]|\\x1b[@-Z\\\\-_])/g, \"\")\n\t\t.replace(/[\\u0000-\\u001f\\u007f-\\u009f]+/g, \" \")\n\t\t.replace(/\\s+/g, \" \")\n\t\t.trim();\n}\n\nexport function formatTerminalError(error: unknown): string {\n\tconst messages: string[] = [];\n\tconst seen = new Set<unknown>();\n\tconst collect = (value: unknown) => {\n\t\tif (seen.has(value)) return;\n\t\tif ((typeof value === \"object\" && value !== null) || typeof value === \"function\") seen.add(value);\n\n\t\tif (value instanceof AggregateError) {\n\t\t\tconst countBefore = messages.length;\n\t\t\tfor (const nested of value.errors) collect(nested);\n\t\t\tif (value.cause !== undefined) collect(value.cause);\n\t\t\tif (messages.length === countBefore && value.message) messages.push(value.message);\n\t\t\treturn;\n\t\t}\n\t\tif (value instanceof Error) {\n\t\t\tif (value.message) messages.push(value.message);\n\t\t\tif (value.cause !== undefined) collect(value.cause);\n\t\t\treturn;\n\t\t}\n\t\tmessages.push(String(value));\n\t};\n\n\tcollect(error);\n\treturn sanitizeTerminalText([...new Set(messages)].join(\": \"));\n}\n\nexport function truncateAtWord(text: string, target: number): string {\n\tif (!text || text.length <= target) return text;\n\n\tconst truncated = text.slice(0, target);\n\tconst lastSpace = truncated.lastIndexOf(\" \");\n\n\tif (lastSpace > target * 0.6) {\n\t\treturn `${truncated.slice(0, lastSpace)}...`;\n\t}\n\n\treturn `${truncated}...`;\n}\n\nexport function normalizeDirectToolInputSchema(schema: unknown): Record<string, unknown> {\n\tconst inputSchema =\n\t\tschema && typeof schema === \"object\" && !Array.isArray(schema)\n\t\t\t? (schema as Record<string, unknown>)\n\t\t\t: { type: \"object\", properties: {} };\n\tconst normalized = { ...inputSchema };\n\tdelete normalized.$schema;\n\tdelete normalized.additionalProperties;\n\treturn normalized;\n}\n\nexport function normalizeToolArguments(value: unknown, context = \"tool arguments\"): Record<string, unknown> {\n\tif (value === undefined || value === null || value === \"\") return {};\n\n\tif (typeof value === \"string\") {\n\t\tconst trimmed = value.trim();\n\t\tif (trimmed === \"\") return {};\n\t\tlet parsed: unknown;\n\t\ttry {\n\t\t\tparsed = JSON.parse(trimmed);\n\t\t} catch (error) {\n\t\t\tthrow new Error(\n\t\t\t\t`${context}: invalid args JSON (${error instanceof SyntaxError ? error.message : String(error)}); ` +\n\t\t\t\t\t`pass args as a JSON object, or as a valid JSON string encoding one`,\n\t\t\t\t{ cause: error },\n\t\t\t);\n\t\t}\n\t\tif (typeof parsed !== \"object\" || parsed === null || Array.isArray(parsed)) {\n\t\t\tthrow new Error(`${context}: expected a JSON object, got ${Array.isArray(parsed) ? \"array\" : typeof parsed}`);\n\t\t}\n\t\treturn parsed as Record<string, unknown>;\n\t}\n\n\tif (typeof value !== \"object\" || Array.isArray(value)) {\n\t\tthrow new Error(`${context}: expected a JSON object, got ${Array.isArray(value) ? \"array\" : typeof value}`);\n\t}\n\n\tassertJsonSerializable(value, context);\n\ttry {\n\t\treturn JSON.parse(JSON.stringify(value)) as Record<string, unknown>;\n\t} catch (error) {\n\t\tthrow new Error(\n\t\t\t`${context}: value is not JSON-serializable: ${error instanceof Error ? error.message : String(error)}`,\n\t\t\t{ cause: error },\n\t\t);\n\t}\n}\n\nfunction assertJsonSerializable(value: unknown, context: string, path = \"\"): void {\n\tif (value === null) return;\n\tif (typeof value === \"string\" || typeof value === \"boolean\") return;\n\tif (typeof value === \"number\") {\n\t\tif (!Number.isFinite(value)) throw new Error(`${context}: value at ${path || \"root\"} is not a finite number`);\n\t\treturn;\n\t}\n\tif (Array.isArray(value)) {\n\t\tfor (const [index, item] of value.entries()) assertJsonSerializable(item, context, `${path}[${index}]`);\n\t\treturn;\n\t}\n\tif (typeof value === \"object\") {\n\t\tif (Object.getPrototypeOf(value) !== Object.prototype && Object.getPrototypeOf(value) !== null) {\n\t\t\tthrow new Error(`${context}: value at ${path || \"root\"} is not a plain JSON object`);\n\t\t}\n\t\tif (Object.getOwnPropertySymbols(value).length > 0) {\n\t\t\tthrow new Error(`${context}: value at ${path || \"root\"} has symbol keys`);\n\t\t}\n\t\tfor (const [key, item] of Object.entries(value)) {\n\t\t\tassertJsonSerializable(item, context, path ? `${path}.${key}` : key);\n\t\t}\n\t\treturn;\n\t}\n\tthrow new Error(`${context}: value at ${path || \"root\"} is not JSON-serializable`);\n}\n\nexport function formatAuthRequiredMessage(\n\tconfig: Pick<McpConfig, \"settings\">,\n\tserverName: string,\n\tdefaultMessage: string,\n): string {\n\tconst template = config.settings?.authRequiredMessage;\n\treturn template ? template.replaceAll(`\\${server}`, serverName) : defaultMessage;\n}\n\nexport function formatMcpStatus(config: Pick<McpConfig, \"settings\">, message: string): string | undefined {\n\tif (config.settings?.mcpFooterStatus === \"off\") return undefined;\n\treturn `${config.settings?.showStatusIcon === false ? \"MCP: \" : \"🔌 MCP: \"}${message}`;\n}\n\n/**\n * Extract the adapter-owned UI stream mode from tool metadata.\n */\nexport function extractToolUiStreamMode(\n\ttoolMeta: Record<string, unknown> | undefined,\n): \"eager\" | \"stream-first\" | undefined {\n\tconst uiMeta = toolMeta?.ui;\n\tif (!uiMeta || typeof uiMeta !== \"object\") return undefined;\n\tconst streamMode = (uiMeta as Record<string, unknown>)[\"nexus-mcp.streamMode\"];\n\tif (streamMode === \"eager\" || streamMode === \"stream-first\") {\n\t\treturn streamMode;\n\t}\n\treturn undefined;\n}\n"]}
|
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
* extension calls registerDelegateTaskTool(). The CLI owns process isolation
|
|
7
7
|
* and streaming UX; the Hub owns one-time worker authorization and routing.
|
|
8
8
|
*/
|
|
9
|
+
import * as fs from "node:fs";
|
|
9
10
|
import type { AgentToolResult } from "@earendil-works/pi-agent-core";
|
|
10
11
|
import type { ExtensionAPI } from "../../core/extensions/types.ts";
|
|
11
12
|
import type { GitNexusConfig } from "../gitnexus/config.ts";
|
|
@@ -25,13 +26,12 @@ export declare const ROOT_REQUEST_ID_HEADER = "x-nexus-root-request-id";
|
|
|
25
26
|
export declare const PARENT_REQUEST_ID_HEADER = "x-nexus-parent-request-id";
|
|
26
27
|
export declare const DELEGATION_ID_HEADER = "x-nexus-delegation-id";
|
|
27
28
|
export declare const REQUEST_SCOPE_HEADER = "x-nexus-request-scope";
|
|
28
|
-
export declare const MAX_DELEGATED_TURNS =
|
|
29
|
-
export declare const MAX_DELEGATIONS_PER_RUN = 3;
|
|
29
|
+
export declare const MAX_DELEGATED_TURNS = 50;
|
|
30
30
|
export declare const DELEGATED_WORKER_TIMEOUT_MS: number;
|
|
31
31
|
export declare const DELEGATED_OUTPUT_CAP_BYTES: number;
|
|
32
32
|
export declare const DELEGATED_EVENT_CAP_BYTES: number;
|
|
33
33
|
export declare const MAX_DELEGATED_TASK_BYTES: number;
|
|
34
|
-
export declare const DELEGATED_WORKER_TOOLS: readonly ["read", "grep", "find", "ls", "bash", "write", "edit", "gitnexus_query", "gitnexus_context", "gitnexus_impact", "gitnexus_detect_changes", "gitnexus_cypher", "gitnexus_list_repos"];
|
|
34
|
+
export declare const DELEGATED_WORKER_TOOLS: readonly ["read", "grep", "find", "ls", "bash", "write", "edit", "web_search", "gitnexus_query", "gitnexus_context", "gitnexus_impact", "gitnexus_detect_changes", "gitnexus_cypher", "gitnexus_list_repos"];
|
|
35
35
|
export type DelegationStatus = "running" | "completed" | "failed" | "aborted" | "timeout" | "turn_limit" | "event_limit";
|
|
36
36
|
export interface DelegationDetails {
|
|
37
37
|
status: DelegationStatus;
|
|
@@ -96,6 +96,65 @@ export declare function createHubDelegationController(config: GitNexusConfig, op
|
|
|
96
96
|
timeoutMs?: number;
|
|
97
97
|
}): DelegationController;
|
|
98
98
|
export declare function isDelegatedWorkerProcess(env?: NodeJS.ProcessEnv): boolean;
|
|
99
|
+
export declare const DELEGATION_MODE_ENV = "NEXUS_DELEGATION_MODE";
|
|
100
|
+
/**
|
|
101
|
+
* `NEXUS_DELEGATION_MODE=external` hands delegation to an external
|
|
102
|
+
* orchestrator (e.g. the pi-subagents package): delegate_task is not
|
|
103
|
+
* registered, so the model sees exactly one delegation surface. Worker-scope
|
|
104
|
+
* billing still works — children marked via the nexus-subagent-worker wrapper
|
|
105
|
+
* self-mint grants exactly like delegate_task workers do.
|
|
106
|
+
*/
|
|
107
|
+
export declare const BIG_MODEL_AGENTS_ENV = "NEXUS_BIG_MODEL_AGENTS";
|
|
108
|
+
export declare const WORKER_SCOPE_ENV = "NEXUS_WORKER_SCOPE";
|
|
109
|
+
export declare const PARENT_POLICY_ENV = "NEXUS_PARENT_POLICY";
|
|
110
|
+
export declare const BUNDLED_SUBAGENTS_ENV = "NEXUS_BUNDLED_SUBAGENTS";
|
|
111
|
+
export declare const BUNDLED_PACKAGES_ENV = "NEXUS_BUNDLED_PACKAGES";
|
|
112
|
+
export declare const PI_SUBAGENT_CHILD_AGENT_ENV = "PI_SUBAGENT_CHILD_AGENT";
|
|
113
|
+
export declare const PI_SUBAGENT_BINARY_ENV = "PI_SUBAGENT_PI_BINARY";
|
|
114
|
+
export declare const DEFAULT_BIG_MODEL_AGENTS: readonly ["oracle"];
|
|
115
|
+
/** pi-subagents ships inside the CLI unless bundled packages are switched off. */
|
|
116
|
+
export declare function bundledSubagentsAvailable(env?: NodeJS.ProcessEnv): boolean;
|
|
117
|
+
/**
|
|
118
|
+
* Delegation runs through the bundled pi-subagents tool by default; the
|
|
119
|
+
* legacy delegate_task worker is opt-in via NEXUS_DELEGATION_MODE=internal.
|
|
120
|
+
*/
|
|
121
|
+
export declare function isExternalDelegationMode(env?: NodeJS.ProcessEnv): boolean;
|
|
122
|
+
/** Agents that keep billing the orchestrator deployment (big model). */
|
|
123
|
+
export declare function bigModelAgents(env?: NodeJS.ProcessEnv): Set<string>;
|
|
124
|
+
/**
|
|
125
|
+
* A process spawned by pi-subagents announces its agent in PI_SUBAGENT_CHILD_AGENT.
|
|
126
|
+
* Mark it as a delegated worker so every model turn self-mints a worker grant
|
|
127
|
+
* and bills the worker deployment. Big-model agents are explicitly unmarked,
|
|
128
|
+
* even when a marker was inherited from a worker parent (nested fan-out).
|
|
129
|
+
* Context is always regenerated: a worker deletes its own context before
|
|
130
|
+
* spawning tools, so nothing inherited is trustworthy.
|
|
131
|
+
*/
|
|
132
|
+
export declare function applyPiSubagentChildWorkerScope(env?: NodeJS.ProcessEnv, uuid?: () => string): boolean;
|
|
133
|
+
/**
|
|
134
|
+
* The executable pi-subagents should spawn for children: this CLI itself.
|
|
135
|
+
* A compiled standalone binary is its own executable; under node/bun the
|
|
136
|
+
* built cli.js carries a shebang and the executable bit from the build.
|
|
137
|
+
*/
|
|
138
|
+
export declare function resolveBundledChildBinary(argv1?: string | undefined, execPath?: string, fsImpl?: Pick<typeof fs, "realpathSync" | "accessSync" | "constants">): string | undefined;
|
|
139
|
+
export declare function applyBundledChildBinaryDefault(env?: NodeJS.ProcessEnv, resolved?: string | undefined): void;
|
|
140
|
+
export declare const BLOCKED_ORCHESTRATOR_TOOLS: Set<string>;
|
|
141
|
+
export declare const ORCHESTRATOR_GUIDANCE: string;
|
|
142
|
+
export declare function isOrchestratorPolicyDisabled(env?: NodeJS.ProcessEnv): boolean;
|
|
143
|
+
/**
|
|
144
|
+
* Orchestrator-side policy for bundled subagents: hard-block mutating tools
|
|
145
|
+
* (the cost guarantee — implementation always bills the worker deployment)
|
|
146
|
+
* and steer everything else by prompt. No read budget: reads and graph calls
|
|
147
|
+
* are cheap on cached input and capping them measurably hurt output quality.
|
|
148
|
+
*/
|
|
149
|
+
export declare function registerOrchestratorPolicy(pi: ExtensionAPI, env?: NodeJS.ProcessEnv): void;
|
|
150
|
+
/**
|
|
151
|
+
* Nexus-branded aliases for the upstream pi-subagents env knobs: users set
|
|
152
|
+
* NEXUS_SUBAGENT_*, we copy onto the PI_SUBAGENT_* names the package reads.
|
|
153
|
+
* NEXUS_SUBAGENT_BINARY maps to PI_SUBAGENT_PI_BINARY (the child-spawn
|
|
154
|
+
* wrapper hook); every other NEXUS_SUBAGENT_X maps to PI_SUBAGENT_X.
|
|
155
|
+
* Explicit PI_* values always win — aliases never overwrite them.
|
|
156
|
+
*/
|
|
157
|
+
export declare function applyNexusSubagentEnvAliases(env?: NodeJS.ProcessEnv): void;
|
|
99
158
|
/** Capture task routing once, then remove it before worker tools can inherit it. */
|
|
100
159
|
export declare function consumeWorkerContext(env?: NodeJS.ProcessEnv): WorkerContext | undefined;
|
|
101
160
|
export declare function runDelegatedWorker(options: DelegatedWorkerOptions): Promise<DelegatedWorkerResult>;
|