@namzu/cli 29.1.0 → 32.0.0
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 +296 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +5 -1
- package/dist/cli.js.map +1 -1
- package/dist/commands/acp.d.ts +20 -2
- package/dist/commands/acp.d.ts.map +1 -1
- package/dist/commands/acp.js +42 -5
- package/dist/commands/acp.js.map +1 -1
- package/dist/commands/drain.d.ts.map +1 -1
- package/dist/commands/drain.js +2 -1
- package/dist/commands/drain.js.map +1 -1
- package/dist/commands/exec-json.d.ts.map +1 -1
- package/dist/commands/exec-json.js +24 -1
- package/dist/commands/exec-json.js.map +1 -1
- package/dist/commands/exec.d.ts.map +1 -1
- package/dist/commands/exec.js +5 -1
- package/dist/commands/exec.js.map +1 -1
- package/dist/commands/prior-messages.d.ts.map +1 -1
- package/dist/commands/prior-messages.js +42 -2
- package/dist/commands/prior-messages.js.map +1 -1
- package/dist/commands/schedule.d.ts.map +1 -1
- package/dist/commands/schedule.js +7 -5
- package/dist/commands/schedule.js.map +1 -1
- package/dist/config/composer-triggers.d.ts +41 -0
- package/dist/config/composer-triggers.d.ts.map +1 -0
- package/dist/config/composer-triggers.js +80 -0
- package/dist/config/composer-triggers.js.map +1 -0
- package/dist/config/load.d.ts.map +1 -1
- package/dist/config/load.js +58 -0
- package/dist/config/load.js.map +1 -1
- package/dist/config/schema.d.ts +34 -0
- package/dist/config/schema.d.ts.map +1 -1
- package/dist/config/schema.js.map +1 -1
- package/dist/context/doctrine.d.ts +3 -3
- package/dist/context/doctrine.d.ts.map +1 -1
- package/dist/context/doctrine.js +3 -3
- package/dist/context/doctrine.js.map +1 -1
- package/dist/context/environment.d.ts +26 -3
- package/dist/context/environment.d.ts.map +1 -1
- package/dist/context/environment.js +68 -9
- package/dist/context/environment.js.map +1 -1
- package/dist/context/runtime-message.d.ts.map +1 -1
- package/dist/context/runtime-message.js +4 -0
- package/dist/context/runtime-message.js.map +1 -1
- package/dist/integrations/mcp/servers.d.ts +72 -5
- package/dist/integrations/mcp/servers.d.ts.map +1 -1
- package/dist/integrations/mcp/servers.js +144 -23
- package/dist/integrations/mcp/servers.js.map +1 -1
- package/dist/integrations/notifications/desktop.d.ts +2 -0
- package/dist/integrations/notifications/desktop.d.ts.map +1 -1
- package/dist/integrations/notifications/desktop.js +6 -5
- package/dist/integrations/notifications/desktop.js.map +1 -1
- package/dist/integrations/plugins/runtime.d.ts +10 -2
- package/dist/integrations/plugins/runtime.d.ts.map +1 -1
- package/dist/integrations/plugins/runtime.js +16 -29
- package/dist/integrations/plugins/runtime.js.map +1 -1
- package/dist/integrations/providers/harness-credentials.d.ts +9 -4
- package/dist/integrations/providers/harness-credentials.d.ts.map +1 -1
- package/dist/integrations/providers/harness-credentials.js +16 -8
- package/dist/integrations/providers/harness-credentials.js.map +1 -1
- package/dist/integrations/resident/session-step.d.ts.map +1 -1
- package/dist/integrations/resident/session-step.js +2 -1
- package/dist/integrations/resident/session-step.js.map +1 -1
- package/dist/integrations/sessions/store.d.ts.map +1 -1
- package/dist/integrations/sessions/store.js +20 -2
- package/dist/integrations/sessions/store.js.map +1 -1
- package/dist/integrations/subagents/NamzuCliAgent.d.ts +8 -0
- package/dist/integrations/subagents/NamzuCliAgent.d.ts.map +1 -0
- package/dist/integrations/subagents/NamzuCliAgent.js +9 -0
- package/dist/integrations/subagents/NamzuCliAgent.js.map +1 -0
- package/dist/integrations/subagents/runtime.d.ts +5 -4
- package/dist/integrations/subagents/runtime.d.ts.map +1 -1
- package/dist/integrations/subagents/runtime.js +46 -11
- package/dist/integrations/subagents/runtime.js.map +1 -1
- package/dist/integrations/web/open-url.d.ts +24 -0
- package/dist/integrations/web/open-url.d.ts.map +1 -0
- package/dist/integrations/web/open-url.js +73 -0
- package/dist/integrations/web/open-url.js.map +1 -0
- package/dist/integrations/web/search.d.ts.map +1 -1
- package/dist/integrations/web/search.js +8 -6
- package/dist/integrations/web/search.js.map +1 -1
- package/dist/permissions/rules.d.ts +5 -1
- package/dist/permissions/rules.d.ts.map +1 -1
- package/dist/permissions/rules.js +85 -3
- package/dist/permissions/rules.js.map +1 -1
- package/dist/schedule/build.d.ts +26 -2
- package/dist/schedule/build.d.ts.map +1 -1
- package/dist/schedule/build.js +139 -20
- package/dist/schedule/build.js.map +1 -1
- package/dist/schedule/changes.d.ts +6 -0
- package/dist/schedule/changes.d.ts.map +1 -1
- package/dist/schedule/changes.js +23 -0
- package/dist/schedule/changes.js.map +1 -1
- package/dist/schedule/commands/add.d.ts +1 -1
- package/dist/schedule/commands/add.d.ts.map +1 -1
- package/dist/schedule/commands/add.js +188 -54
- package/dist/schedule/commands/add.js.map +1 -1
- package/dist/schedule/commands/lifecycle.d.ts.map +1 -1
- package/dist/schedule/commands/lifecycle.js +2 -1
- package/dist/schedule/commands/lifecycle.js.map +1 -1
- package/dist/schedule/commands/list.d.ts +2 -0
- package/dist/schedule/commands/list.d.ts.map +1 -1
- package/dist/schedule/commands/list.js +69 -20
- package/dist/schedule/commands/list.js.map +1 -1
- package/dist/schedule/daemon/daemon.d.ts +1 -1
- package/dist/schedule/daemon/daemon.d.ts.map +1 -1
- package/dist/schedule/daemon/daemon.js +22 -5
- package/dist/schedule/daemon/daemon.js.map +1 -1
- package/dist/schedule/daemon/notify.d.ts +29 -2
- package/dist/schedule/daemon/notify.d.ts.map +1 -1
- package/dist/schedule/daemon/notify.js +71 -2
- package/dist/schedule/daemon/notify.js.map +1 -1
- package/dist/schedule/env.d.ts +8 -4
- package/dist/schedule/env.d.ts.map +1 -1
- package/dist/schedule/env.js +13 -6
- package/dist/schedule/env.js.map +1 -1
- package/dist/schedule/fire/calls.d.ts +49 -0
- package/dist/schedule/fire/calls.d.ts.map +1 -0
- package/dist/schedule/fire/calls.js +114 -0
- package/dist/schedule/fire/calls.js.map +1 -0
- package/dist/schedule/fire/fire.d.ts +1 -1
- package/dist/schedule/fire/fire.d.ts.map +1 -1
- package/dist/schedule/fire/fire.js +209 -15
- package/dist/schedule/fire/fire.js.map +1 -1
- package/dist/schedule/fire/result.d.ts +1 -1
- package/dist/schedule/fire/result.d.ts.map +1 -1
- package/dist/schedule/fire/result.js +2 -1
- package/dist/schedule/fire/result.js.map +1 -1
- package/dist/schedule/fire/run-script.d.ts +46 -0
- package/dist/schedule/fire/run-script.d.ts.map +1 -0
- package/dist/schedule/fire/run-script.js +81 -0
- package/dist/schedule/fire/run-script.js.map +1 -0
- package/dist/schedule/fire/unattended-note.d.ts +8 -0
- package/dist/schedule/fire/unattended-note.d.ts.map +1 -1
- package/dist/schedule/fire/unattended-note.js +5 -0
- package/dist/schedule/fire/unattended-note.js.map +1 -1
- package/dist/schedule/fire/wake-gate.d.ts +39 -0
- package/dist/schedule/fire/wake-gate.d.ts.map +1 -0
- package/dist/schedule/fire/wake-gate.js +90 -0
- package/dist/schedule/fire/wake-gate.js.map +1 -0
- package/dist/schedule/floor.d.ts +28 -8
- package/dist/schedule/floor.d.ts.map +1 -1
- package/dist/schedule/floor.js +624 -114
- package/dist/schedule/floor.js.map +1 -1
- package/dist/schedule/policy.d.ts +40 -0
- package/dist/schedule/policy.d.ts.map +1 -1
- package/dist/schedule/policy.js +36 -0
- package/dist/schedule/policy.js.map +1 -1
- package/dist/schedule/script-check.d.ts +53 -0
- package/dist/schedule/script-check.d.ts.map +1 -0
- package/dist/schedule/script-check.js +145 -0
- package/dist/schedule/script-check.js.map +1 -0
- package/dist/schedule/script-shell.d.ts +3 -0
- package/dist/schedule/script-shell.d.ts.map +1 -0
- package/dist/schedule/script-shell.js +5 -0
- package/dist/schedule/script-shell.js.map +1 -0
- package/dist/schedule/service/index.d.ts +1 -1
- package/dist/schedule/service/index.d.ts.map +1 -1
- package/dist/schedule/service/index.js +20 -11
- package/dist/schedule/service/index.js.map +1 -1
- package/dist/schedule/service/manifest.js +1 -1
- package/dist/schedule/service/manifest.js.map +1 -1
- package/dist/schedule/service/windows-task.d.ts +7 -0
- package/dist/schedule/service/windows-task.d.ts.map +1 -1
- package/dist/schedule/service/windows-task.js +65 -0
- package/dist/schedule/service/windows-task.js.map +1 -1
- package/dist/schedule/service/wsl.d.ts +13 -1
- package/dist/schedule/service/wsl.d.ts.map +1 -1
- package/dist/schedule/service/wsl.js +16 -6
- package/dist/schedule/service/wsl.js.map +1 -1
- package/dist/schedule/store/atomic.d.ts +5 -2
- package/dist/schedule/store/atomic.d.ts.map +1 -1
- package/dist/schedule/store/atomic.js +7 -4
- package/dist/schedule/store/atomic.js.map +1 -1
- package/dist/schedule/store/claims.js +1 -1
- package/dist/schedule/store/claims.js.map +1 -1
- package/dist/schedule/store/history.d.ts +1 -1
- package/dist/schedule/store/history.d.ts.map +1 -1
- package/dist/schedule/store/history.js +4 -1
- package/dist/schedule/store/history.js.map +1 -1
- package/dist/schedule/store/jobs.d.ts +19 -3
- package/dist/schedule/store/jobs.d.ts.map +1 -1
- package/dist/schedule/store/jobs.js +83 -16
- package/dist/schedule/store/jobs.js.map +1 -1
- package/dist/schedule/store/state.js +1 -1
- package/dist/schedule/store/state.js.map +1 -1
- package/dist/schedule/types.d.ts +98 -6
- package/dist/schedule/types.d.ts.map +1 -1
- package/dist/schedule/types.js +25 -1
- package/dist/schedule/types.js.map +1 -1
- package/dist/schedule/visible-source.d.ts +18 -0
- package/dist/schedule/visible-source.d.ts.map +1 -0
- package/dist/schedule/visible-source.js +59 -0
- package/dist/schedule/visible-source.js.map +1 -0
- package/dist/skills/directory.d.ts +38 -0
- package/dist/skills/directory.d.ts.map +1 -0
- package/dist/skills/directory.js +51 -0
- package/dist/skills/directory.js.map +1 -0
- package/dist/test-support/toolset.d.ts +23 -0
- package/dist/test-support/toolset.d.ts.map +1 -0
- package/dist/test-support/toolset.js +27 -0
- package/dist/test-support/toolset.js.map +1 -0
- package/dist/tui/App.d.ts.map +1 -1
- package/dist/tui/App.js +343 -64
- package/dist/tui/App.js.map +1 -1
- package/dist/tui/ChoicePicker.d.ts +2 -0
- package/dist/tui/ChoicePicker.d.ts.map +1 -1
- package/dist/tui/ChoicePicker.js +10 -2
- package/dist/tui/ChoicePicker.js.map +1 -1
- package/dist/tui/Composer.d.ts +62 -3
- package/dist/tui/Composer.d.ts.map +1 -1
- package/dist/tui/Composer.js +162 -25
- package/dist/tui/Composer.js.map +1 -1
- package/dist/tui/ComposerFrame.d.ts +1 -1
- package/dist/tui/ComposerFrame.js +3 -3
- package/dist/tui/ComposerFrame.js.map +1 -1
- package/dist/tui/EffortSlider.d.ts +8 -9
- package/dist/tui/EffortSlider.d.ts.map +1 -1
- package/dist/tui/EffortSlider.js +15 -12
- package/dist/tui/EffortSlider.js.map +1 -1
- package/dist/tui/PermissionOverlay.d.ts +13 -1
- package/dist/tui/PermissionOverlay.d.ts.map +1 -1
- package/dist/tui/PermissionOverlay.js +26 -4
- package/dist/tui/PermissionOverlay.js.map +1 -1
- package/dist/tui/StatusBar.d.ts +12 -12
- package/dist/tui/StatusBar.d.ts.map +1 -1
- package/dist/tui/StatusBar.js +15 -15
- package/dist/tui/StatusBar.js.map +1 -1
- package/dist/tui/agent.d.ts +73 -12
- package/dist/tui/agent.d.ts.map +1 -1
- package/dist/tui/agent.js +430 -180
- package/dist/tui/agent.js.map +1 -1
- package/dist/tui/hypermode.d.ts +37 -0
- package/dist/tui/hypermode.d.ts.map +1 -0
- package/dist/tui/hypermode.js +58 -0
- package/dist/tui/hypermode.js.map +1 -0
- package/dist/tui/open-browser.d.ts +29 -1
- package/dist/tui/open-browser.d.ts.map +1 -1
- package/dist/tui/open-browser.js +83 -11
- package/dist/tui/open-browser.js.map +1 -1
- package/dist/tui/permission-review.d.ts +11 -2
- package/dist/tui/permission-review.d.ts.map +1 -1
- package/dist/tui/permission-review.js +176 -19
- package/dist/tui/permission-review.js.map +1 -1
- package/dist/tui/schedule/host-commands.d.ts.map +1 -1
- package/dist/tui/schedule/host-commands.js +95 -33
- package/dist/tui/schedule/host-commands.js.map +1 -1
- package/dist/tui/schedule/integration.d.ts +6 -2
- package/dist/tui/schedule/integration.d.ts.map +1 -1
- package/dist/tui/schedule/integration.js +3 -1
- package/dist/tui/schedule/integration.js.map +1 -1
- package/dist/tui/schedule/resume.d.ts.map +1 -1
- package/dist/tui/schedule/resume.js +10 -1
- package/dist/tui/schedule/resume.js.map +1 -1
- package/dist/tui/schedule/tool-host.d.ts +18 -1
- package/dist/tui/schedule/tool-host.d.ts.map +1 -1
- package/dist/tui/schedule/tool-host.js +384 -84
- package/dist/tui/schedule/tool-host.js.map +1 -1
- package/dist/tui/slashCommands.d.ts +23 -5
- package/dist/tui/slashCommands.d.ts.map +1 -1
- package/dist/tui/slashCommands.js +80 -31
- package/dist/tui/slashCommands.js.map +1 -1
- package/dist/tui/theme.d.ts +10 -4
- package/dist/tui/theme.d.ts.map +1 -1
- package/dist/tui/theme.js +4 -3
- package/dist/tui/theme.js.map +1 -1
- package/dist/tui/triggers/analyze.d.ts +57 -0
- package/dist/tui/triggers/analyze.d.ts.map +1 -0
- package/dist/tui/triggers/analyze.js +221 -0
- package/dist/tui/triggers/analyze.js.map +1 -0
- package/dist/tui/triggers/context-text.d.ts +21 -0
- package/dist/tui/triggers/context-text.d.ts.map +1 -0
- package/dist/tui/triggers/context-text.js +44 -0
- package/dist/tui/triggers/context-text.js.map +1 -0
- package/dist/tui/triggers/copy.d.ts +38 -0
- package/dist/tui/triggers/copy.d.ts.map +1 -0
- package/dist/tui/triggers/copy.js +163 -0
- package/dist/tui/triggers/copy.js.map +1 -0
- package/dist/tui/triggers/detect.d.ts +83 -0
- package/dist/tui/triggers/detect.d.ts.map +1 -0
- package/dist/tui/triggers/detect.js +295 -0
- package/dist/tui/triggers/detect.js.map +1 -0
- package/dist/tui/triggers/fold.d.ts +34 -0
- package/dist/tui/triggers/fold.d.ts.map +1 -0
- package/dist/tui/triggers/fold.js +44 -0
- package/dist/tui/triggers/fold.js.map +1 -0
- package/dist/tui/triggers/pattern.d.ts +66 -0
- package/dist/tui/triggers/pattern.d.ts.map +1 -0
- package/dist/tui/triggers/pattern.js +243 -0
- package/dist/tui/triggers/pattern.js.map +1 -0
- package/dist/tui/triggers/provenance.d.ts +58 -0
- package/dist/tui/triggers/provenance.d.ts.map +1 -0
- package/dist/tui/triggers/provenance.js +98 -0
- package/dist/tui/triggers/provenance.js.map +1 -0
- package/dist/tui/triggers/registry.d.ts +113 -0
- package/dist/tui/triggers/registry.d.ts.map +1 -0
- package/dist/tui/triggers/registry.js +164 -0
- package/dist/tui/triggers/registry.js.map +1 -0
- package/dist/tui/triggers/setting.d.ts +18 -0
- package/dist/tui/triggers/setting.d.ts.map +1 -0
- package/dist/tui/triggers/setting.js +61 -0
- package/dist/tui/triggers/setting.js.map +1 -0
- package/dist/tui/triggers/verbs.d.ts +29 -0
- package/dist/tui/triggers/verbs.d.ts.map +1 -0
- package/dist/tui/triggers/verbs.js +140 -0
- package/dist/tui/triggers/verbs.js.map +1 -0
- package/dist/tui/types.d.ts +3 -1
- package/dist/tui/types.d.ts.map +1 -1
- package/package.json +12 -12
- package/skills/README.md +5 -0
- package/skills/schedule-task/SKILL.md +123 -5
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
* "search": { "url": "https://tools.example.internal/mcp" }
|
|
15
15
|
* }
|
|
16
16
|
*
|
|
17
|
-
* Its tools arrive prefixed with the server's name (`
|
|
17
|
+
* Its tools arrive prefixed with the server's name (`mcp__tickets__create`), so
|
|
18
18
|
* two servers offering `search` do not collide and the transcript says where a
|
|
19
19
|
* call went.
|
|
20
20
|
*
|
|
@@ -31,7 +31,7 @@
|
|
|
31
31
|
* and a headless run has nobody to read anything, so it refuses. This module
|
|
32
32
|
* reports; the callers decide.
|
|
33
33
|
*/
|
|
34
|
-
import { MCPClient,
|
|
34
|
+
import { MCPClient, mcpToolset, requireApproval, } from '@namzu/sdk';
|
|
35
35
|
/**
|
|
36
36
|
* How long a single server gets to connect, hand shake and list its tools.
|
|
37
37
|
*
|
|
@@ -50,6 +50,55 @@ export const CONNECT_TIMEOUT_MS = 10_000;
|
|
|
50
50
|
* command open past the work it was asked to do.
|
|
51
51
|
*/
|
|
52
52
|
export const CLOSE_TIMEOUT_MS = 2_000;
|
|
53
|
+
/**
|
|
54
|
+
* A bare `${VAR}` reference inside an `env` or `headers` value — identifier
|
|
55
|
+
* characters only, no `:-default` fallback. See {@link expandEnvRefsInRecord}.
|
|
56
|
+
*/
|
|
57
|
+
const ENV_REF_PATTERN = /\$\{([A-Za-z_][A-Za-z0-9_]*)\}/g;
|
|
58
|
+
/**
|
|
59
|
+
* Expand `${VAR}` references inside `env`/`headers` values against the
|
|
60
|
+
* operator's own environment.
|
|
61
|
+
*
|
|
62
|
+
* Deliberately narrower than the interpolation some other MCP clients'
|
|
63
|
+
* configs use (see docs/cli/mcp-servers.md): bare `${VAR}` only, no
|
|
64
|
+
* `${VAR:-default}` fallback, and only inside `env` and `headers` values —
|
|
65
|
+
* never `command`, `args`, `url` or `cwd`, which have no legitimate secret
|
|
66
|
+
* use case and would only widen the surface for an accidental literal `${`
|
|
67
|
+
* to break. A referenced variable that is unset is refused with a named
|
|
68
|
+
* reason, not silently substituted with an empty string: that is exactly
|
|
69
|
+
* the footgun a `:-default` fallback would reintroduce, and this module's
|
|
70
|
+
* whole design is "every failure is named" rather than a server running
|
|
71
|
+
* quietly with a secret it never got.
|
|
72
|
+
*
|
|
73
|
+
* `inheritEnv` stays the primary idiom for "grant this named variable to
|
|
74
|
+
* the child process under its own name" — this is for the config VALUE
|
|
75
|
+
* itself, letting an operator rename an env var into whatever key or
|
|
76
|
+
* header a server expects, and giving `headers` a secret-safe option it
|
|
77
|
+
* has never had (`inheritEnv` only reaches the stdio child's process env,
|
|
78
|
+
* not header values).
|
|
79
|
+
*
|
|
80
|
+
* Returns the expanded record, or a reason string naming the first unset
|
|
81
|
+
* variable a value referenced.
|
|
82
|
+
*/
|
|
83
|
+
export function expandEnvRefsInRecord(record, env) {
|
|
84
|
+
const result = {};
|
|
85
|
+
for (const [key, raw] of Object.entries(record)) {
|
|
86
|
+
let missing;
|
|
87
|
+
const expanded = raw.replace(ENV_REF_PATTERN, (whole, name) => {
|
|
88
|
+
const value = env[name];
|
|
89
|
+
if (value === undefined) {
|
|
90
|
+
missing = name;
|
|
91
|
+
return whole;
|
|
92
|
+
}
|
|
93
|
+
return value;
|
|
94
|
+
});
|
|
95
|
+
if (missing !== undefined) {
|
|
96
|
+
return `references \${${missing}}, which is not set in the operator's environment`;
|
|
97
|
+
}
|
|
98
|
+
result[key] = expanded;
|
|
99
|
+
}
|
|
100
|
+
return result;
|
|
101
|
+
}
|
|
53
102
|
/**
|
|
54
103
|
* Turn one spec into a transport, or say why it is not one.
|
|
55
104
|
*
|
|
@@ -57,27 +106,33 @@ export const CLOSE_TIMEOUT_MS = 2_000;
|
|
|
57
106
|
* operator who edited one into a file that already had the other, and picking
|
|
58
107
|
* either would run something they did not mean to run.
|
|
59
108
|
*/
|
|
60
|
-
export function transportFor(spec, defaultCwd) {
|
|
109
|
+
export function transportFor(spec, defaultCwd, env = process.env) {
|
|
61
110
|
const hasCommand = typeof spec.command === 'string' && spec.command.trim().length > 0;
|
|
62
111
|
const hasUrl = typeof spec.url === 'string' && spec.url.trim().length > 0;
|
|
63
112
|
if (hasCommand && hasUrl) {
|
|
64
113
|
return 'it declares both a command and a url — pick one';
|
|
65
114
|
}
|
|
66
115
|
if (hasCommand) {
|
|
116
|
+
const expandedEnv = spec.env ? expandEnvRefsInRecord(spec.env, env) : undefined;
|
|
117
|
+
if (typeof expandedEnv === 'string')
|
|
118
|
+
return expandedEnv;
|
|
67
119
|
return {
|
|
68
120
|
type: 'stdio',
|
|
69
121
|
command: spec.command,
|
|
70
122
|
...(spec.args ? { args: [...spec.args] } : {}),
|
|
71
|
-
...(
|
|
123
|
+
...(expandedEnv ? { env: expandedEnv } : {}),
|
|
72
124
|
...(spec.inheritEnv ? { inheritEnv: [...spec.inheritEnv] } : {}),
|
|
73
125
|
cwd: spec.cwd ?? defaultCwd,
|
|
74
126
|
};
|
|
75
127
|
}
|
|
76
128
|
if (hasUrl) {
|
|
129
|
+
const expandedHeaders = spec.headers ? expandEnvRefsInRecord(spec.headers, env) : undefined;
|
|
130
|
+
if (typeof expandedHeaders === 'string')
|
|
131
|
+
return expandedHeaders;
|
|
77
132
|
return {
|
|
78
133
|
type: 'streamable-http',
|
|
79
134
|
url: spec.url,
|
|
80
|
-
...(
|
|
135
|
+
...(expandedHeaders ? { headers: expandedHeaders } : {}),
|
|
81
136
|
};
|
|
82
137
|
}
|
|
83
138
|
return 'it declares neither a command nor a url';
|
|
@@ -136,9 +191,38 @@ export function eraProbeTimeoutFor(spec) {
|
|
|
136
191
|
}
|
|
137
192
|
return ms;
|
|
138
193
|
}
|
|
194
|
+
function toolsetOptionsFor(spec, name) {
|
|
195
|
+
for (const field of ['allow', 'deny']) {
|
|
196
|
+
const value = spec[field];
|
|
197
|
+
if (value !== undefined &&
|
|
198
|
+
(!Array.isArray(value) || !value.every((item) => typeof item === 'string' && item.length > 0))) {
|
|
199
|
+
return `${field} must be a list of nonempty server-reported names`;
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
if (spec.maxRetries !== undefined &&
|
|
203
|
+
(!Number.isSafeInteger(spec.maxRetries) || spec.maxRetries < 0)) {
|
|
204
|
+
return `maxRetries must be a nonnegative integer, got ${JSON.stringify(spec.maxRetries)}`;
|
|
205
|
+
}
|
|
206
|
+
if (spec.requireApproval !== undefined && typeof spec.requireApproval !== 'boolean') {
|
|
207
|
+
return 'requireApproval must be true or false';
|
|
208
|
+
}
|
|
209
|
+
if (spec.readOnlyHintTrusted !== undefined && typeof spec.readOnlyHintTrusted !== 'boolean') {
|
|
210
|
+
return 'readOnlyHintTrusted must be true or false';
|
|
211
|
+
}
|
|
212
|
+
if (spec.instructions !== undefined && typeof spec.instructions !== 'boolean') {
|
|
213
|
+
return 'instructions must be true or false';
|
|
214
|
+
}
|
|
215
|
+
return {
|
|
216
|
+
id: `mcp:${name}`,
|
|
217
|
+
allow: spec.allow,
|
|
218
|
+
deny: spec.deny,
|
|
219
|
+
maxRetries: spec.maxRetries,
|
|
220
|
+
readOnlyHintTrusted: spec.readOnlyHintTrusted,
|
|
221
|
+
};
|
|
222
|
+
}
|
|
139
223
|
export async function connectMcpServers(config, options) {
|
|
140
224
|
const entries = Object.entries(config ?? {});
|
|
141
|
-
const
|
|
225
|
+
const toolsets = [];
|
|
142
226
|
const startupFailed = [];
|
|
143
227
|
const clients = [];
|
|
144
228
|
const liveServers = [];
|
|
@@ -147,6 +231,10 @@ export async function connectMcpServers(config, options) {
|
|
|
147
231
|
// of nothing and the failure output arrive interleaved, for a saving that
|
|
148
232
|
// matters only to someone running many servers, who has other problems.
|
|
149
233
|
for (const [name, spec] of entries) {
|
|
234
|
+
if (typeof spec !== 'object' || spec === null) {
|
|
235
|
+
startupFailed.push({ name, reason: 'server spec must be a mapping' });
|
|
236
|
+
continue;
|
|
237
|
+
}
|
|
150
238
|
const transport = transportFor(spec, options.cwd);
|
|
151
239
|
if (typeof transport === 'string') {
|
|
152
240
|
startupFailed.push({ name, reason: transport });
|
|
@@ -162,26 +250,41 @@ export async function connectMcpServers(config, options) {
|
|
|
162
250
|
startupFailed.push({ name, reason: eraProbeTimeoutMs });
|
|
163
251
|
continue;
|
|
164
252
|
}
|
|
253
|
+
const toolsetOptions = toolsetOptionsFor(spec, name);
|
|
254
|
+
if (typeof toolsetOptions === 'string') {
|
|
255
|
+
startupFailed.push({ name, reason: toolsetOptions });
|
|
256
|
+
continue;
|
|
257
|
+
}
|
|
165
258
|
const client = new MCPClient({
|
|
166
259
|
serverName: name,
|
|
167
260
|
transport,
|
|
168
261
|
...(eraProbeTimeoutMs !== undefined ? { eraProbeTimeoutMs } : {}),
|
|
169
262
|
});
|
|
263
|
+
const discovery = {
|
|
264
|
+
added: new Set(),
|
|
265
|
+
removed: new Set(),
|
|
266
|
+
changed: new Set(),
|
|
267
|
+
refused: new Map(),
|
|
268
|
+
};
|
|
170
269
|
try {
|
|
171
270
|
await withDeadline(client.connect(), deadline, `server "${name}"`);
|
|
172
|
-
const
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
};
|
|
184
|
-
|
|
271
|
+
const discovered = await withDeadline(mcpToolset(client, {
|
|
272
|
+
...toolsetOptions,
|
|
273
|
+
onDrift: ({ drift }) => {
|
|
274
|
+
for (const item of drift.added)
|
|
275
|
+
discovery.added.add(item);
|
|
276
|
+
for (const item of drift.removed)
|
|
277
|
+
discovery.removed.add(item);
|
|
278
|
+
for (const item of drift.changed)
|
|
279
|
+
discovery.changed.add(item);
|
|
280
|
+
},
|
|
281
|
+
onRefused: ({ kind, refused }) => discovery.refused.set(kind, refused),
|
|
282
|
+
}), deadline, `server "${name}" discovering its tools`);
|
|
283
|
+
const mounted = spec.requireApproval
|
|
284
|
+
? discovered.map((entry) => requireApproval(entry))
|
|
285
|
+
: [...discovered];
|
|
286
|
+
toolsets.push(...mounted);
|
|
287
|
+
liveServers.push({ client, name, toolsets: mounted, discovery });
|
|
185
288
|
clients.push(client);
|
|
186
289
|
}
|
|
187
290
|
catch (err) {
|
|
@@ -207,14 +310,28 @@ export async function connectMcpServers(config, options) {
|
|
|
207
310
|
const current = () => {
|
|
208
311
|
const connected = [];
|
|
209
312
|
const failed = [...startupFailed];
|
|
210
|
-
for (const { client,
|
|
313
|
+
for (const { client, name, toolsets: serverToolsets, discovery } of liveServers) {
|
|
211
314
|
const state = client.getState();
|
|
212
315
|
if (state.status === 'connected') {
|
|
213
|
-
|
|
316
|
+
const names = serverToolsets.flatMap((entry) => entry.tools().map((tool) => tool.name));
|
|
317
|
+
connected.push({
|
|
318
|
+
name,
|
|
319
|
+
toolCount: names.length,
|
|
320
|
+
tools: names,
|
|
321
|
+
drift: {
|
|
322
|
+
added: [...discovery.added],
|
|
323
|
+
removed: [...discovery.removed],
|
|
324
|
+
changed: [...discovery.changed],
|
|
325
|
+
},
|
|
326
|
+
refused: [...discovery.refused.entries()].flatMap(([kind, items]) => items.map((item) => ({ kind, ...item }))),
|
|
327
|
+
...(state.serverInstructions !== undefined
|
|
328
|
+
? { instructions: state.serverInstructions }
|
|
329
|
+
: {}),
|
|
330
|
+
});
|
|
214
331
|
continue;
|
|
215
332
|
}
|
|
216
333
|
failed.push({
|
|
217
|
-
name
|
|
334
|
+
name,
|
|
218
335
|
reason: state.error ??
|
|
219
336
|
(state.status === 'disconnected'
|
|
220
337
|
? 'connection closed after startup'
|
|
@@ -224,7 +341,10 @@ export async function connectMcpServers(config, options) {
|
|
|
224
341
|
return { connected, failed };
|
|
225
342
|
};
|
|
226
343
|
return {
|
|
227
|
-
tools
|
|
344
|
+
get tools() {
|
|
345
|
+
return toolsets.flatMap((entry) => entry.tools());
|
|
346
|
+
},
|
|
347
|
+
toolsets,
|
|
228
348
|
current,
|
|
229
349
|
get connected() {
|
|
230
350
|
return current().connected;
|
|
@@ -233,6 +353,7 @@ export async function connectMcpServers(config, options) {
|
|
|
233
353
|
return current().failed;
|
|
234
354
|
},
|
|
235
355
|
close: async () => {
|
|
356
|
+
await Promise.all(toolsets.map((entry) => entry.close?.()));
|
|
236
357
|
await Promise.all(clients.map((c) => withDeadline(c.disconnect(), CLOSE_TIMEOUT_MS, 'closing a tool server').catch(() => {
|
|
237
358
|
// Shutting down is best effort by definition: the process may
|
|
238
359
|
// already be gone, and nothing useful follows from saying so.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"servers.js","sourceRoot":"","sources":["../../../src/integrations/mcp/servers.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AAEH,OAAO,EACN,SAAS,
|
|
1
|
+
{"version":3,"file":"servers.js","sourceRoot":"","sources":["../../../src/integrations/mcp/servers.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AAEH,OAAO,EACN,SAAS,EAMT,UAAU,EACV,eAAe,GACf,MAAM,YAAY,CAAA;AAEnB;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,MAAM,CAAA;AAExC;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,KAAK,CAAA;AA4IrC;;;GAGG;AACH,MAAM,eAAe,GAAG,iCAAiC,CAAA;AAEzD;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,MAAM,UAAU,qBAAqB,CACpC,MAAwC,EACxC,GAAsB;IAEtB,MAAM,MAAM,GAA2B,EAAE,CAAA;IACzC,KAAK,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QACjD,IAAI,OAA2B,CAAA;QAC/B,MAAM,QAAQ,GAAG,GAAG,CAAC,OAAO,CAAC,eAAe,EAAE,CAAC,KAAK,EAAE,IAAY,EAAE,EAAE;YACrE,MAAM,KAAK,GAAG,GAAG,CAAC,IAAI,CAAC,CAAA;YACvB,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;gBACzB,OAAO,GAAG,IAAI,CAAA;gBACd,OAAO,KAAK,CAAA;YACb,CAAC;YACD,OAAO,KAAK,CAAA;QACb,CAAC,CAAC,CAAA;QACF,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;YAC3B,OAAO,iBAAiB,OAAO,mDAAmD,CAAA;QACnF,CAAC;QACD,MAAM,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAA;IACvB,CAAC;IACD,OAAO,MAAM,CAAA;AACd,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,YAAY,CAC3B,IAAmB,EACnB,UAAkB,EAClB,MAAyB,OAAO,CAAC,GAAG;IAEpC,MAAM,UAAU,GAAG,OAAO,IAAI,CAAC,OAAO,KAAK,QAAQ,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAA;IACrF,MAAM,MAAM,GAAG,OAAO,IAAI,CAAC,GAAG,KAAK,QAAQ,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAA;IACzE,IAAI,UAAU,IAAI,MAAM,EAAE,CAAC;QAC1B,OAAO,iDAAiD,CAAA;IACzD,CAAC;IACD,IAAI,UAAU,EAAE,CAAC;QAChB,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,qBAAqB,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;QAC/E,IAAI,OAAO,WAAW,KAAK,QAAQ;YAAE,OAAO,WAAW,CAAA;QACvD,OAAO;YACN,IAAI,EAAE,OAAO;YACb,OAAO,EAAE,IAAI,CAAC,OAAiB;YAC/B,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC9C,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC5C,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAChE,GAAG,EAAE,IAAI,CAAC,GAAG,IAAI,UAAU;SAC3B,CAAA;IACF,CAAC;IACD,IAAI,MAAM,EAAE,CAAC;QACZ,MAAM,eAAe,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,qBAAqB,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;QAC3F,IAAI,OAAO,eAAe,KAAK,QAAQ;YAAE,OAAO,eAAe,CAAA;QAC/D,OAAO;YACN,IAAI,EAAE,iBAAiB;YACvB,GAAG,EAAE,IAAI,CAAC,GAAa;YACvB,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,eAAe,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACxD,CAAA;IACF,CAAC;IACD,OAAO,yCAAyC,CAAA;AACjD,CAAC;AAED,KAAK,UAAU,YAAY,CAAI,IAAgB,EAAE,EAAU,EAAE,IAAY;IACxE,IAAI,KAAiC,CAAA;IACrC,IAAI,CAAC;QACJ,OAAO,MAAM,OAAO,CAAC,IAAI,CAAC;YACzB,IAAI;YACJ,IAAI,OAAO,CAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE;gBAChC,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,GAAG,IAAI,0BAA0B,EAAE,IAAI,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;YACzF,CAAC,CAAC;SACF,CAAC,CAAA;IACH,CAAC;YAAS,CAAC;QACV,IAAI,KAAK;YAAE,YAAY,CAAC,KAAK,CAAC,CAAA;IAC/B,CAAC;AACF,CAAC;AAED,MAAM,QAAQ,GAAG,CAAC,GAAY,EAAU,EAAE,CAAC,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAA;AAE7F;;;;;;GAMG;AACH,MAAM,UAAU,kBAAkB,CAAC,IAAmB;IACrD,MAAM,EAAE,GAAG,IAAI,CAAC,gBAAgB,CAAA;IAChC,IAAI,EAAE,KAAK,SAAS;QAAE,OAAO,kBAAkB,CAAA;IAC/C,IAAI,OAAO,EAAE,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC;QAC/D,OAAO,mEAAmE,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,EAAE,CAAA;IAC/F,CAAC;IACD,OAAO,EAAE,CAAA;AACV,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,kBAAkB,CAAC,IAAmB;IACrD,MAAM,EAAE,GAAG,IAAI,CAAC,iBAAiB,CAAA;IACjC,IAAI,EAAE,KAAK,SAAS;QAAE,OAAO,SAAS,CAAA;IACtC,IAAI,OAAO,EAAE,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC;QAC/D,OAAO,oEAAoE,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,EAAE,CAAA;IAChG,CAAC;IACD,OAAO,EAAE,CAAA;AACV,CAAC;AAED,SAAS,iBAAiB,CAAC,IAAmB,EAAE,IAAY;IAC3D,KAAK,MAAM,KAAK,IAAI,CAAC,OAAO,EAAE,MAAM,CAAU,EAAE,CAAC;QAChD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,CAAA;QACzB,IACC,KAAK,KAAK,SAAS;YACnB,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,EAC7F,CAAC;YACF,OAAO,GAAG,KAAK,mDAAmD,CAAA;QACnE,CAAC;IACF,CAAC;IACD,IACC,IAAI,CAAC,UAAU,KAAK,SAAS;QAC7B,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC,EAC9D,CAAC;QACF,OAAO,iDAAiD,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAA;IAC1F,CAAC;IACD,IAAI,IAAI,CAAC,eAAe,KAAK,SAAS,IAAI,OAAO,IAAI,CAAC,eAAe,KAAK,SAAS,EAAE,CAAC;QACrF,OAAO,uCAAuC,CAAA;IAC/C,CAAC;IACD,IAAI,IAAI,CAAC,mBAAmB,KAAK,SAAS,IAAI,OAAO,IAAI,CAAC,mBAAmB,KAAK,SAAS,EAAE,CAAC;QAC7F,OAAO,2CAA2C,CAAA;IACnD,CAAC;IACD,IAAI,IAAI,CAAC,YAAY,KAAK,SAAS,IAAI,OAAO,IAAI,CAAC,YAAY,KAAK,SAAS,EAAE,CAAC;QAC/E,OAAO,oCAAoC,CAAA;IAC5C,CAAC;IACD,OAAO;QACN,EAAE,EAAE,OAAO,IAAI,EAAE;QACjB,KAAK,EAAE,IAAI,CAAC,KAAK;QACjB,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,UAAU,EAAE,IAAI,CAAC,UAAU;QAC3B,mBAAmB,EAAE,IAAI,CAAC,mBAAmB;KAC7C,CAAA;AACF,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACtC,MAAoC,EACpC,OAAiC;IAEjC,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,IAAI,EAAE,CAAC,CAAA;IAC5C,MAAM,QAAQ,GAAc,EAAE,CAAA;IAC9B,MAAM,aAAa,GAAsB,EAAE,CAAA;IAC3C,MAAM,OAAO,GAAgB,EAAE,CAAA;IAC/B,MAAM,WAAW,GAaZ,EAAE,CAAA;IAEP,wEAAwE;IACxE,2EAA2E;IAC3E,0EAA0E;IAC1E,wEAAwE;IACxE,KAAK,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,OAAO,EAAE,CAAC;QACpC,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;YAC/C,aAAa,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,+BAA+B,EAAE,CAAC,CAAA;YACrE,SAAQ;QACT,CAAC;QACD,MAAM,SAAS,GAAG,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,CAAA;QACjD,IAAI,OAAO,SAAS,KAAK,QAAQ,EAAE,CAAC;YACnC,aAAa,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAA;YAC/C,SAAQ;QACT,CAAC;QACD,MAAM,QAAQ,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAA;QACzC,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE,CAAC;YAClC,aAAa,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAA;YAC9C,SAAQ;QACT,CAAC;QACD,MAAM,iBAAiB,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAA;QAClD,IAAI,OAAO,iBAAiB,KAAK,QAAQ,EAAE,CAAC;YAC3C,aAAa,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,iBAAiB,EAAE,CAAC,CAAA;YACvD,SAAQ;QACT,CAAC;QACD,MAAM,cAAc,GAAG,iBAAiB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;QACpD,IAAI,OAAO,cAAc,KAAK,QAAQ,EAAE,CAAC;YACxC,aAAa,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,cAAc,EAAE,CAAC,CAAA;YACpD,SAAQ;QACT,CAAC;QACD,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC;YAC5B,UAAU,EAAE,IAAI;YAChB,SAAS;YACT,GAAG,CAAC,iBAAiB,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,iBAAiB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACjE,CAAC,CAAA;QACF,MAAM,SAAS,GAAG;YACjB,KAAK,EAAE,IAAI,GAAG,EAAU;YACxB,OAAO,EAAE,IAAI,GAAG,EAAU;YAC1B,OAAO,EAAE,IAAI,GAAG,EAAU;YAC1B,OAAO,EAAE,IAAI,GAAG,EAGb;SACH,CAAA;QACD,IAAI,CAAC;YACJ,MAAM,YAAY,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,WAAW,IAAI,GAAG,CAAC,CAAA;YAClE,MAAM,UAAU,GAAG,MAAM,YAAY,CACpC,UAAU,CAAC,MAAM,EAAE;gBAClB,GAAG,cAAc;gBACjB,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE;oBACtB,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,KAAK;wBAAE,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;oBACzD,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,OAAO;wBAAE,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;oBAC7D,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,OAAO;wBAAE,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;gBAC9D,CAAC;gBACD,SAAS,EAAE,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC;aACtE,CAAC,EACF,QAAQ,EACR,WAAW,IAAI,yBAAyB,CACxC,CAAA;YACD,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe;gBACnC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;gBACnD,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,CAAA;YAClB,QAAQ,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,CAAA;YACzB,WAAW,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,CAAA;YAChE,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;QACrB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACd,aAAa,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;YACnD,sEAAsE;YACtE,mEAAmE;YACnE,EAAE;YACF,mEAAmE;YACnE,oEAAoE;YACpE,6DAA6D;YAC7D,iEAAiE;YACjE,mEAAmE;YACnE,2DAA2D;YAC3D,IAAI,CAAC;gBACJ,MAAM,YAAY,CAAC,MAAM,CAAC,UAAU,EAAE,EAAE,gBAAgB,EAAE,YAAY,IAAI,GAAG,CAAC,CAAA;YAC/E,CAAC;YAAC,MAAM,CAAC;gBACR,qEAAqE;gBACrE,gEAAgE;YACjE,CAAC;QACF,CAAC;IACF,CAAC;IAED,MAAM,OAAO,GAAG,GAGd,EAAE;QACH,MAAM,SAAS,GAAyB,EAAE,CAAA;QAC1C,MAAM,MAAM,GAAsB,CAAC,GAAG,aAAa,CAAC,CAAA;QACpD,KAAK,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,cAAc,EAAE,SAAS,EAAE,IAAI,WAAW,EAAE,CAAC;YACjF,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAA;YAC/B,IAAI,KAAK,CAAC,MAAM,KAAK,WAAW,EAAE,CAAC;gBAClC,MAAM,KAAK,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAA;gBACvF,SAAS,CAAC,IAAI,CAAC;oBACd,IAAI;oBACJ,SAAS,EAAE,KAAK,CAAC,MAAM;oBACvB,KAAK,EAAE,KAAK;oBACZ,KAAK,EAAE;wBACN,KAAK,EAAE,CAAC,GAAG,SAAS,CAAC,KAAK,CAAC;wBAC3B,OAAO,EAAE,CAAC,GAAG,SAAS,CAAC,OAAO,CAAC;wBAC/B,OAAO,EAAE,CAAC,GAAG,SAAS,CAAC,OAAO,CAAC;qBAC/B;oBACD,OAAO,EAAE,CAAC,GAAG,SAAS,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,EAAE,CACnE,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,GAAG,IAAI,EAAE,CAAC,CAAC,CACxC;oBACD,GAAG,CAAC,KAAK,CAAC,kBAAkB,KAAK,SAAS;wBACzC,CAAC,CAAC,EAAE,YAAY,EAAE,KAAK,CAAC,kBAAkB,EAAE;wBAC5C,CAAC,CAAC,EAAE,CAAC;iBACN,CAAC,CAAA;gBACF,SAAQ;YACT,CAAC;YACD,MAAM,CAAC,IAAI,CAAC;gBACX,IAAI;gBACJ,MAAM,EACL,KAAK,CAAC,KAAK;oBACX,CAAC,KAAK,CAAC,MAAM,KAAK,cAAc;wBAC/B,CAAC,CAAC,iCAAiC;wBACnC,CAAC,CAAC,iBAAiB,KAAK,CAAC,MAAM,EAAE,CAAC;aACpC,CAAC,CAAA;QACH,CAAC;QACD,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,CAAA;IAC7B,CAAC,CAAA;IAED,OAAO;QACN,IAAI,KAAK;YACR,OAAO,QAAQ,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAA;QAClD,CAAC;QACD,QAAQ;QACR,OAAO;QACP,IAAI,SAAS;YACZ,OAAO,OAAO,EAAE,CAAC,SAAS,CAAA;QAC3B,CAAC;QACD,IAAI,MAAM;YACT,OAAO,OAAO,EAAE,CAAC,MAAM,CAAA;QACxB,CAAC;QACD,KAAK,EAAE,KAAK,IAAI,EAAE;YACjB,MAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,CAAA;YAC3D,MAAM,OAAO,CAAC,GAAG,CAChB,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CACjB,YAAY,CAAC,CAAC,CAAC,UAAU,EAAE,EAAE,gBAAgB,EAAE,uBAAuB,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;gBAClF,8DAA8D;gBAC9D,8DAA8D;gBAC9D,0DAA0D;gBAC1D,iDAAiD;YAClD,CAAC,CAAC,CACF,CACD,CAAA;QACF,CAAC;KACD,CAAA;AACF,CAAC"}
|
|
@@ -33,6 +33,8 @@ export interface BackendProbe {
|
|
|
33
33
|
readonly which?: (name: string) => string | undefined;
|
|
34
34
|
/** `powershell.exe` under WSL, as recorded at install. */
|
|
35
35
|
readonly powershell?: string;
|
|
36
|
+
/** Where WSL mounts the Windows drives; absent reads `/etc/wsl.conf`. */
|
|
37
|
+
readonly mountRoot?: string;
|
|
36
38
|
/** The kernel release (`/proc/sys/kernel/osrelease`); WSL's names Microsoft. */
|
|
37
39
|
readonly osRelease?: () => string | undefined;
|
|
38
40
|
/** WSL's interop sockets (`/run/WSL/*_interop`), each with its modification time. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"desktop.d.ts","sourceRoot":"","sources":["../../../src/integrations/notifications/desktop.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAWH,MAAM,MAAM,kBAAkB,GAAG,WAAW,GAAG,eAAe,GAAG,OAAO,GAAG,aAAa,GAAG,MAAM,CAAA;AAEjG,MAAM,WAAW,cAAc;IAC9B,QAAQ,CAAC,IAAI,EAAE,kBAAkB,CAAA;IACjC,qDAAqD;IACrD,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,MAAM,EAAE,CAAA;IACzD,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,UAAU,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC,UAAU,CAAA;IAC1F,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAA;CACrB;AAED,MAAM,WAAW,YAAY;IAC5B,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAA;IACnC,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAA;IAChC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAA;IAC3C,kCAAkC;IAClC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,CAAA;IACrD,0DAA0D;IAC1D,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAA;IAC5B,gFAAgF;IAChF,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,MAAM,GAAG,SAAS,CAAA;IAC7C,qFAAqF;IACrF,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,SAAS;QAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;KAAE,EAAE,CAAA;CAC9F;AA6CD;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAChC,OAAO,EAAE,SAAS;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CAAE,EAAE,GACrE,MAAM,GAAG,SAAS,CAIpB;
|
|
1
|
+
{"version":3,"file":"desktop.d.ts","sourceRoot":"","sources":["../../../src/integrations/notifications/desktop.ts"],"names":[],"mappings":"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"}
|
|
@@ -18,7 +18,7 @@
|
|
|
18
18
|
import { execFile } from 'node:child_process';
|
|
19
19
|
import { existsSync, readFileSync, readdirSync, statSync } from 'node:fs';
|
|
20
20
|
import { join } from 'node:path';
|
|
21
|
-
import { detectWsl } from '../../context/environment.js';
|
|
21
|
+
import { detectWsl, readWslMountRoot, wslSystem32 } from '../../context/environment.js';
|
|
22
22
|
import { gdbusArguments, notifySendArguments } from './desktop/freedesktop.js';
|
|
23
23
|
import { osascriptArguments } from './desktop/macos.js';
|
|
24
24
|
import { sanitizeLine } from './desktop/sanitize.js';
|
|
@@ -81,7 +81,6 @@ export function findInteropSocket(sockets) {
|
|
|
81
81
|
return stable.path;
|
|
82
82
|
return [...sockets].sort((a, b) => b.mtimeMs - a.mtimeMs)[0]?.path;
|
|
83
83
|
}
|
|
84
|
-
const WSL_POWERSHELL = '/mnt/c/Windows/System32/WindowsPowerShell/v1.0/powershell.exe';
|
|
85
84
|
/** Pick the backend this machine supports. */
|
|
86
85
|
export function selectDesktopBackend(probe = {}) {
|
|
87
86
|
const platform = probe.platform ?? process.platform;
|
|
@@ -105,7 +104,8 @@ export function selectDesktopBackend(probe = {}) {
|
|
|
105
104
|
env: (base, title, body) => toastEnvironment(base, title, body, false),
|
|
106
105
|
};
|
|
107
106
|
}
|
|
108
|
-
const
|
|
107
|
+
const mountRoot = probe.mountRoot ?? readWslMountRoot();
|
|
108
|
+
const wsl = detectWsl(env, { exists, list: () => [], mountRoot });
|
|
109
109
|
// A systemd user service in WSL gets neither WSL_DISTRO_NAME nor
|
|
110
110
|
// WSL_INTEROP, so the environment alone does not say this is WSL; the
|
|
111
111
|
// kernel does. Without this, such a daemon picked the Linux session bus,
|
|
@@ -128,7 +128,8 @@ export function selectDesktopBackend(probe = {}) {
|
|
|
128
128
|
: 'WSL interop is disabled ([interop] enabled=false in /etc/wsl.conf), so Windows notifications cannot be shown',
|
|
129
129
|
};
|
|
130
130
|
}
|
|
131
|
-
|
|
131
|
+
// Under the drive mount root `/etc/wsl.conf` sets, `/mnt/` by default.
|
|
132
|
+
const powershell = probe.powershell ?? `${wslSystem32(mountRoot)}/WindowsPowerShell/v1.0/powershell.exe`;
|
|
132
133
|
if (!exists(powershell))
|
|
133
134
|
return { kind: 'none', detail: `${powershell} was not found` };
|
|
134
135
|
const found = env.WSL_INTEROP ? undefined : socket;
|
|
@@ -141,7 +142,7 @@ export function selectDesktopBackend(probe = {}) {
|
|
|
141
142
|
...toastEnvironment(base, title, body, true),
|
|
142
143
|
...(found ? { WSL_INTEROP: found } : {}),
|
|
143
144
|
}),
|
|
144
|
-
cwd:
|
|
145
|
+
cwd: `${mountRoot}c`,
|
|
145
146
|
};
|
|
146
147
|
}
|
|
147
148
|
const bus = env.DBUS_SESSION_BUS_ADDRESS ||
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"desktop.js","sourceRoot":"","sources":["../../../src/integrations/notifications/desktop.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAA;AAC7C,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAA;AACzE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAChC,OAAO,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAA;
|
|
1
|
+
{"version":3,"file":"desktop.js","sourceRoot":"","sources":["../../../src/integrations/notifications/desktop.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { PluginLifecycleManager, SkillRegistry
|
|
1
|
+
import { PluginLifecycleManager, SkillRegistry } from '@namzu/sdk';
|
|
2
2
|
import type { HooksConfig, PluginConfig, PluginScope } from '../../config/schema.js';
|
|
3
3
|
export interface CliPluginRuntime {
|
|
4
4
|
readonly manager: PluginLifecycleManager;
|
|
@@ -30,8 +30,16 @@ export interface CliPluginInfo {
|
|
|
30
30
|
* The exact `enabled === true` check is the default-off boundary. Nothing in
|
|
31
31
|
* the plugin directories is discovered, read, or imported on every other
|
|
32
32
|
* value. Callers invoke this only after project trust has pinned `cwd`.
|
|
33
|
+
*
|
|
34
|
+
* No longer takes a tool registry to register into (plan.md v3 §7):
|
|
35
|
+
* `PluginLifecycleManager` exposes one live file source per plugin and one
|
|
36
|
+
* live MCP source per plugin server (`manager.toolsets`); a caller folds them into
|
|
37
|
+
* its own `toolsets` array. The `skill` tool itself is the CALLER's concern
|
|
38
|
+
* now too — this runtime only reports `skills.size` so the caller can decide
|
|
39
|
+
* live whether to offer it, rather than this module owning a "who registered
|
|
40
|
+
* it first" flag over a shared mutable registry.
|
|
33
41
|
*/
|
|
34
|
-
export declare function createCliPluginRuntime(config: PluginConfig | undefined,
|
|
42
|
+
export declare function createCliPluginRuntime(config: PluginConfig | undefined, cwd: string,
|
|
35
43
|
/**
|
|
36
44
|
* Operator shell hooks. They ride the same lifecycle manager plugins use,
|
|
37
45
|
* so a session with hooks and no plugins still builds one — with nothing
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../../src/integrations/plugins/runtime.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,sBAAsB,EAEtB,aAAa,
|
|
1
|
+
{"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../../src/integrations/plugins/runtime.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,sBAAsB,EAEtB,aAAa,EAGb,MAAM,YAAY,CAAA;AAEnB,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAA;AAKpF,MAAM,WAAW,gBAAgB;IAChC,QAAQ,CAAC,OAAO,EAAE,sBAAsB,CAAA;IACxC,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAA;IAC9B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;IAC5B,IAAI,IAAI,SAAS,aAAa,EAAE,CAAA;IAChC,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACzD,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAC1C,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;CACtB;AAED,kFAAkF;AAClF,MAAM,WAAW,aAAa;IAC7B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;IAC5B,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAA;IAC3B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,cAAc,CAAC,EAAE,OAAO,CAAA;IACjC,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAA;IAC9B,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAA;IACjC,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAA;IAClC,QAAQ,CAAC,WAAW,EAAE,SAAS,MAAM,EAAE,CAAA;IACvC,QAAQ,CAAC,UAAU,EAAE,SAAS,MAAM,EAAE,CAAA;CACtC;AAMD;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,sBAAsB,CAC3C,MAAM,EAAE,YAAY,GAAG,SAAS,EAChC,GAAG,EAAE,MAAM;AACX;;;;GAIG;AACH,KAAK,CAAC,EAAE,WAAW,GACjB,OAAO,CAAC,gBAAgB,GAAG,SAAS,CAAC,CAuJvC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { PluginLifecycleManager, PluginRegistry, SkillRegistry,
|
|
1
|
+
import { PluginLifecycleManager, PluginRegistry, SkillRegistry, attachShellHooks, discoverAllPluginDirs, } from '@namzu/sdk';
|
|
2
2
|
import { cliLogger } from '../../logging.js';
|
|
3
3
|
import { resolveNamzuHome } from '../state/home.js';
|
|
4
4
|
import { PluginSettingsStore } from './settings.js';
|
|
@@ -11,8 +11,16 @@ function message(error) {
|
|
|
11
11
|
* The exact `enabled === true` check is the default-off boundary. Nothing in
|
|
12
12
|
* the plugin directories is discovered, read, or imported on every other
|
|
13
13
|
* value. Callers invoke this only after project trust has pinned `cwd`.
|
|
14
|
+
*
|
|
15
|
+
* No longer takes a tool registry to register into (plan.md v3 §7):
|
|
16
|
+
* `PluginLifecycleManager` exposes one live file source per plugin and one
|
|
17
|
+
* live MCP source per plugin server (`manager.toolsets`); a caller folds them into
|
|
18
|
+
* its own `toolsets` array. The `skill` tool itself is the CALLER's concern
|
|
19
|
+
* now too — this runtime only reports `skills.size` so the caller can decide
|
|
20
|
+
* live whether to offer it, rather than this module owning a "who registered
|
|
21
|
+
* it first" flag over a shared mutable registry.
|
|
14
22
|
*/
|
|
15
|
-
export async function createCliPluginRuntime(config,
|
|
23
|
+
export async function createCliPluginRuntime(config, cwd,
|
|
16
24
|
/**
|
|
17
25
|
* Operator shell hooks. They ride the same lifecycle manager plugins use,
|
|
18
26
|
* so a session with hooks and no plugins still builds one — with nothing
|
|
@@ -30,7 +38,6 @@ hooks) {
|
|
|
30
38
|
const skills = new SkillRegistry(log);
|
|
31
39
|
const manager = new PluginLifecycleManager({
|
|
32
40
|
pluginRegistry: plugins,
|
|
33
|
-
toolRegistry: tools,
|
|
34
41
|
skillRegistry: skills,
|
|
35
42
|
scopeRoots: { project: cwd, user: userRoot },
|
|
36
43
|
log,
|
|
@@ -49,7 +56,6 @@ hooks) {
|
|
|
49
56
|
})
|
|
50
57
|
: { project: [], user: [] };
|
|
51
58
|
const installed = [];
|
|
52
|
-
let ownsSkillTool = false;
|
|
53
59
|
try {
|
|
54
60
|
for (const scope of allowedScopes) {
|
|
55
61
|
const dirs = [...discovered[scope]].sort((a, b) => a.localeCompare(b));
|
|
@@ -61,14 +67,8 @@ hooks) {
|
|
|
61
67
|
await manager.enable(plugin.id);
|
|
62
68
|
}
|
|
63
69
|
}
|
|
64
|
-
if (skills.size > 0 && !tools.has(SkillTool.name)) {
|
|
65
|
-
tools.register(SkillTool);
|
|
66
|
-
ownsSkillTool = true;
|
|
67
|
-
}
|
|
68
70
|
}
|
|
69
71
|
catch (error) {
|
|
70
|
-
if (ownsSkillTool)
|
|
71
|
-
tools.unregister(SkillTool.name);
|
|
72
72
|
const cleanupErrors = [];
|
|
73
73
|
for (const plugin of [...installed].reverse()) {
|
|
74
74
|
try {
|
|
@@ -88,16 +88,11 @@ hooks) {
|
|
|
88
88
|
let closePromise;
|
|
89
89
|
let closed = false;
|
|
90
90
|
let mutation;
|
|
91
|
-
const
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
else if (skills.size === 0 && ownsSkillTool) {
|
|
97
|
-
tools.unregister(SkillTool.name);
|
|
98
|
-
ownsSkillTool = false;
|
|
99
|
-
}
|
|
100
|
-
};
|
|
91
|
+
const contributedToolNames = (prefix) => manager.toolsets
|
|
92
|
+
.flatMap((ts) => ts.tools())
|
|
93
|
+
.map((tool) => tool.name)
|
|
94
|
+
.filter((name) => name.startsWith(prefix))
|
|
95
|
+
.sort();
|
|
101
96
|
return {
|
|
102
97
|
manager,
|
|
103
98
|
skills,
|
|
@@ -123,10 +118,7 @@ hooks) {
|
|
|
123
118
|
status: plugin.status === 'installed' ? 'disabled' : plugin.status,
|
|
124
119
|
...(startupEnabled !== undefined ? { startupEnabled } : {}),
|
|
125
120
|
...(startupError ? { startupError } : {}),
|
|
126
|
-
tools:
|
|
127
|
-
.listNames()
|
|
128
|
-
.filter((name) => name.startsWith(prefix))
|
|
129
|
-
.sort(),
|
|
121
|
+
tools: contributedToolNames(prefix),
|
|
130
122
|
skills: skills
|
|
131
123
|
.list()
|
|
132
124
|
.map((skill) => skill.metadata.name)
|
|
@@ -153,7 +145,6 @@ hooks) {
|
|
|
153
145
|
await mutation;
|
|
154
146
|
}
|
|
155
147
|
finally {
|
|
156
|
-
syncSkillTool();
|
|
157
148
|
mutation = undefined;
|
|
158
149
|
}
|
|
159
150
|
},
|
|
@@ -179,10 +170,6 @@ hooks) {
|
|
|
179
170
|
if (mutation)
|
|
180
171
|
await mutation.catch(() => { });
|
|
181
172
|
const errors = [];
|
|
182
|
-
if (ownsSkillTool) {
|
|
183
|
-
tools.unregister(SkillTool.name);
|
|
184
|
-
ownsSkillTool = false;
|
|
185
|
-
}
|
|
186
173
|
for (const plugin of [...installed].reverse()) {
|
|
187
174
|
try {
|
|
188
175
|
await manager.uninstall(plugin.id);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime.js","sourceRoot":"","sources":["../../../src/integrations/plugins/runtime.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,sBAAsB,EACtB,cAAc,EACd,aAAa,EACb,
|
|
1
|
+
{"version":3,"file":"runtime.js","sourceRoot":"","sources":["../../../src/integrations/plugins/runtime.ts"],"names":[],"mappings":"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"}
|
|
@@ -13,17 +13,22 @@ export interface ClaudeCredentialReplaceResult {
|
|
|
13
13
|
readonly current: AgentOAuthCredential | null;
|
|
14
14
|
}
|
|
15
15
|
export declare function claudeCredentialsPath(home?: string, env?: NodeJS.ProcessEnv): string;
|
|
16
|
-
/**
|
|
17
|
-
|
|
16
|
+
/**
|
|
17
|
+
* Convert an absolute Windows path into the drive mount WSL exposes, under
|
|
18
|
+
* `mountRoot` (`/mnt/` unless `/etc/wsl.conf` moves it).
|
|
19
|
+
*/
|
|
20
|
+
export declare function windowsPathToWsl(path: string, mountRoot?: string): string | null;
|
|
18
21
|
/**
|
|
19
22
|
* Resolve the Windows account paired with this WSL process.
|
|
20
23
|
*
|
|
21
24
|
* The Windows executable is pinned instead of searched through PATH: this
|
|
22
25
|
* lookup decides where a credential may be read, so a project-local `cmd.exe`
|
|
23
26
|
* must not be able to redirect it. Failure is an ordinary "no second home"
|
|
24
|
-
* result; native Linux never starts a process.
|
|
27
|
+
* result; native Linux never starts a process. Both the command and the home
|
|
28
|
+
* it answers with are under the drive mount root `/etc/wsl.conf` sets
|
|
29
|
+
* (`[automount] root`, `/mnt/` by default).
|
|
25
30
|
*/
|
|
26
|
-
export declare function wslWindowsHome(env?: NodeJS.ProcessEnv, run?: typeof execFileSync, command?: string): string | null;
|
|
31
|
+
export declare function wslWindowsHome(env?: NodeJS.ProcessEnv, run?: typeof execFileSync, command?: string, mountRoot?: string): string | null;
|
|
27
32
|
/**
|
|
28
33
|
* Usable Claude sessions visible from this process, freshest first.
|
|
29
34
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"harness-credentials.d.ts","sourceRoot":"","sources":["../../../src/integrations/providers/harness-credentials.ts"],"names":[],"mappings":"AAAA,sEAAsE;AAEtE,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;
|
|
1
|
+
{"version":3,"file":"harness-credentials.d.ts","sourceRoot":"","sources":["../../../src/integrations/providers/harness-credentials.ts"],"names":[],"mappings":"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"}
|