@x-code-cli/core 0.2.9 → 0.3.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/dist/agent/compression.d.ts +12 -2
- package/dist/agent/compression.d.ts.map +1 -1
- package/dist/agent/compression.js +51 -2
- package/dist/agent/compression.js.map +1 -1
- package/dist/agent/file-ingest.js +2 -2
- package/dist/agent/file-ingest.js.map +1 -1
- package/dist/agent/loop-state.d.ts +3 -2
- package/dist/agent/loop-state.d.ts.map +1 -1
- package/dist/agent/loop-state.js.map +1 -1
- package/dist/agent/loop.d.ts.map +1 -1
- package/dist/agent/loop.js +140 -9
- package/dist/agent/loop.js.map +1 -1
- package/dist/agent/memory-extractor.js +5 -5
- package/dist/agent/memory-extractor.js.map +1 -1
- package/dist/agent/plan-storage.js +1 -1
- package/dist/agent/plan-storage.js.map +1 -1
- package/dist/agent/sub-agents/index.d.ts +2 -1
- package/dist/agent/sub-agents/index.d.ts.map +1 -1
- package/dist/agent/sub-agents/index.js +1 -1
- package/dist/agent/sub-agents/index.js.map +1 -1
- package/dist/agent/sub-agents/loader.d.ts +13 -3
- package/dist/agent/sub-agents/loader.d.ts.map +1 -1
- package/dist/agent/sub-agents/loader.js +36 -9
- package/dist/agent/sub-agents/loader.js.map +1 -1
- package/dist/agent/sub-agents/registry.d.ts +18 -1
- package/dist/agent/sub-agents/registry.d.ts.map +1 -1
- package/dist/agent/sub-agents/registry.js +38 -5
- package/dist/agent/sub-agents/registry.js.map +1 -1
- package/dist/agent/sub-agents/runner.d.ts.map +1 -1
- package/dist/agent/sub-agents/runner.js +45 -1
- package/dist/agent/sub-agents/runner.js.map +1 -1
- package/dist/agent/sub-agents/types.d.ts +4 -1
- package/dist/agent/sub-agents/types.d.ts.map +1 -1
- package/dist/agent/system-prompt.d.ts +21 -0
- package/dist/agent/system-prompt.d.ts.map +1 -1
- package/dist/agent/system-prompt.js +68 -2
- package/dist/agent/system-prompt.js.map +1 -1
- package/dist/agent/tool-execution.d.ts.map +1 -1
- package/dist/agent/tool-execution.js +220 -1
- package/dist/agent/tool-execution.js.map +1 -1
- package/dist/commands/index.d.ts +6 -0
- package/dist/commands/index.d.ts.map +1 -0
- package/dist/commands/index.js +3 -0
- package/dist/commands/index.js.map +1 -0
- package/dist/commands/loader.d.ts +13 -0
- package/dist/commands/loader.d.ts.map +1 -0
- package/dist/commands/loader.js +93 -0
- package/dist/commands/loader.js.map +1 -0
- package/dist/commands/registry.d.ts +44 -0
- package/dist/commands/registry.d.ts.map +1 -0
- package/dist/commands/registry.js +102 -0
- package/dist/commands/registry.js.map +1 -0
- package/dist/commands/types.d.ts +23 -0
- package/dist/commands/types.d.ts.map +1 -0
- package/dist/commands/types.js +26 -0
- package/dist/commands/types.js.map +1 -0
- package/dist/config/index.d.ts +9 -0
- package/dist/config/index.d.ts.map +1 -1
- package/dist/config/index.js +12 -10
- package/dist/config/index.js.map +1 -1
- package/dist/hooks/bus.d.ts +54 -0
- package/dist/hooks/bus.d.ts.map +1 -0
- package/dist/hooks/bus.js +165 -0
- package/dist/hooks/bus.js.map +1 -0
- package/dist/hooks/config-schema.d.ts +854 -0
- package/dist/hooks/config-schema.d.ts.map +1 -0
- package/dist/hooks/config-schema.js +79 -0
- package/dist/hooks/config-schema.js.map +1 -0
- package/dist/hooks/executor.d.ts +16 -0
- package/dist/hooks/executor.d.ts.map +1 -0
- package/dist/hooks/executor.js +183 -0
- package/dist/hooks/executor.js.map +1 -0
- package/dist/hooks/index.d.ts +10 -0
- package/dist/hooks/index.d.ts.map +1 -0
- package/dist/hooks/index.js +6 -0
- package/dist/hooks/index.js.map +1 -0
- package/dist/hooks/registry.d.ts +23 -0
- package/dist/hooks/registry.d.ts.map +1 -0
- package/dist/hooks/registry.js +49 -0
- package/dist/hooks/registry.js.map +1 -0
- package/dist/hooks/types.d.ts +165 -0
- package/dist/hooks/types.d.ts.map +1 -0
- package/dist/hooks/types.js +25 -0
- package/dist/hooks/types.js.map +1 -0
- package/dist/hooks/variables.d.ts +22 -0
- package/dist/hooks/variables.d.ts.map +1 -0
- package/dist/hooks/variables.js +80 -0
- package/dist/hooks/variables.js.map +1 -0
- package/dist/index.d.ts +56 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +37 -1
- package/dist/index.js.map +1 -1
- package/dist/knowledge/auto-memory.d.ts +1 -1
- package/dist/knowledge/auto-memory.d.ts.map +1 -1
- package/dist/knowledge/auto-memory.js +10 -10
- package/dist/knowledge/auto-memory.js.map +1 -1
- package/dist/knowledge/loader.js +12 -12
- package/dist/knowledge/loader.js.map +1 -1
- package/dist/mcp/arg-parser.d.ts +49 -0
- package/dist/mcp/arg-parser.d.ts.map +1 -0
- package/dist/mcp/arg-parser.js +357 -0
- package/dist/mcp/arg-parser.js.map +1 -0
- package/dist/mcp/client.d.ts +73 -0
- package/dist/mcp/client.d.ts.map +1 -0
- package/dist/mcp/client.js +376 -0
- package/dist/mcp/client.js.map +1 -0
- package/dist/mcp/config-schema.d.ts +64 -0
- package/dist/mcp/config-schema.d.ts.map +1 -0
- package/dist/mcp/config-schema.js +86 -0
- package/dist/mcp/config-schema.js.map +1 -0
- package/dist/mcp/config-writer.d.ts +41 -0
- package/dist/mcp/config-writer.d.ts.map +1 -0
- package/dist/mcp/config-writer.js +138 -0
- package/dist/mcp/config-writer.js.map +1 -0
- package/dist/mcp/env-safety.d.ts +12 -0
- package/dist/mcp/env-safety.d.ts.map +1 -0
- package/dist/mcp/env-safety.js +80 -0
- package/dist/mcp/env-safety.js.map +1 -0
- package/dist/mcp/expand-env.d.ts +14 -0
- package/dist/mcp/expand-env.d.ts.map +1 -0
- package/dist/mcp/expand-env.js +52 -0
- package/dist/mcp/expand-env.js.map +1 -0
- package/dist/mcp/loader.d.ts +81 -0
- package/dist/mcp/loader.d.ts.map +1 -0
- package/dist/mcp/loader.js +223 -0
- package/dist/mcp/loader.js.map +1 -0
- package/dist/mcp/name-mangling.d.ts +11 -0
- package/dist/mcp/name-mangling.d.ts.map +1 -0
- package/dist/mcp/name-mangling.js +82 -0
- package/dist/mcp/name-mangling.js.map +1 -0
- package/dist/mcp/oauth/callback-server.d.ts +25 -0
- package/dist/mcp/oauth/callback-server.d.ts.map +1 -0
- package/dist/mcp/oauth/callback-server.js +118 -0
- package/dist/mcp/oauth/callback-server.js.map +1 -0
- package/dist/mcp/oauth/provider.d.ts +80 -0
- package/dist/mcp/oauth/provider.d.ts.map +1 -0
- package/dist/mcp/oauth/provider.js +292 -0
- package/dist/mcp/oauth/provider.js.map +1 -0
- package/dist/mcp/oauth/token-storage.d.ts +42 -0
- package/dist/mcp/oauth/token-storage.d.ts.map +1 -0
- package/dist/mcp/oauth/token-storage.js +121 -0
- package/dist/mcp/oauth/token-storage.js.map +1 -0
- package/dist/mcp/permissions.d.ts +28 -0
- package/dist/mcp/permissions.d.ts.map +1 -0
- package/dist/mcp/permissions.js +105 -0
- package/dist/mcp/permissions.js.map +1 -0
- package/dist/mcp/registry.d.ts +150 -0
- package/dist/mcp/registry.d.ts.map +1 -0
- package/dist/mcp/registry.js +334 -0
- package/dist/mcp/registry.js.map +1 -0
- package/dist/mcp/resources.d.ts +7 -0
- package/dist/mcp/resources.d.ts.map +1 -0
- package/dist/mcp/resources.js +40 -0
- package/dist/mcp/resources.js.map +1 -0
- package/dist/mcp/tool-bridge.d.ts +16 -0
- package/dist/mcp/tool-bridge.d.ts.map +1 -0
- package/dist/mcp/tool-bridge.js +56 -0
- package/dist/mcp/tool-bridge.js.map +1 -0
- package/dist/mcp/trust.d.ts +31 -0
- package/dist/mcp/trust.d.ts.map +1 -0
- package/dist/mcp/trust.js +103 -0
- package/dist/mcp/trust.js.map +1 -0
- package/dist/mcp/types.d.ts +73 -0
- package/dist/mcp/types.d.ts.map +1 -0
- package/dist/mcp/types.js +13 -0
- package/dist/mcp/types.js.map +1 -0
- package/dist/permissions/session-store.d.ts +13 -2
- package/dist/permissions/session-store.d.ts.map +1 -1
- package/dist/permissions/session-store.js +264 -62
- package/dist/permissions/session-store.js.map +1 -1
- package/dist/plugins/consent.d.ts +87 -0
- package/dist/plugins/consent.d.ts.map +1 -0
- package/dist/plugins/consent.js +181 -0
- package/dist/plugins/consent.js.map +1 -0
- package/dist/plugins/enable-state.d.ts +34 -0
- package/dist/plugins/enable-state.d.ts.map +1 -0
- package/dist/plugins/enable-state.js +159 -0
- package/dist/plugins/enable-state.js.map +1 -0
- package/dist/plugins/installer.d.ts +64 -0
- package/dist/plugins/installer.d.ts.map +1 -0
- package/dist/plugins/installer.js +416 -0
- package/dist/plugins/installer.js.map +1 -0
- package/dist/plugins/integration.d.ts +91 -0
- package/dist/plugins/integration.d.ts.map +1 -0
- package/dist/plugins/integration.js +233 -0
- package/dist/plugins/integration.js.map +1 -0
- package/dist/plugins/loader.d.ts +69 -0
- package/dist/plugins/loader.d.ts.map +1 -0
- package/dist/plugins/loader.js +243 -0
- package/dist/plugins/loader.js.map +1 -0
- package/dist/plugins/manifest.d.ts +23 -0
- package/dist/plugins/manifest.d.ts.map +1 -0
- package/dist/plugins/manifest.js +143 -0
- package/dist/plugins/manifest.js.map +1 -0
- package/dist/plugins/marketplace.d.ts +100 -0
- package/dist/plugins/marketplace.d.ts.map +1 -0
- package/dist/plugins/marketplace.js +529 -0
- package/dist/plugins/marketplace.js.map +1 -0
- package/dist/plugins/paths.d.ts +44 -0
- package/dist/plugins/paths.d.ts.map +1 -0
- package/dist/plugins/paths.js +89 -0
- package/dist/plugins/paths.js.map +1 -0
- package/dist/plugins/refresh.d.ts +61 -0
- package/dist/plugins/refresh.d.ts.map +1 -0
- package/dist/plugins/refresh.js +98 -0
- package/dist/plugins/refresh.js.map +1 -0
- package/dist/plugins/registry.d.ts +40 -0
- package/dist/plugins/registry.d.ts.map +1 -0
- package/dist/plugins/registry.js +80 -0
- package/dist/plugins/registry.js.map +1 -0
- package/dist/plugins/types.d.ts +225 -0
- package/dist/plugins/types.d.ts.map +1 -0
- package/dist/plugins/types.js +16 -0
- package/dist/plugins/types.js.map +1 -0
- package/dist/plugins/user-config.d.ts +22 -0
- package/dist/plugins/user-config.d.ts.map +1 -0
- package/dist/plugins/user-config.js +96 -0
- package/dist/plugins/user-config.js.map +1 -0
- package/dist/providers/cache-control.d.ts +9 -0
- package/dist/providers/cache-control.d.ts.map +1 -1
- package/dist/providers/cache-control.js +31 -4
- package/dist/providers/cache-control.js.map +1 -1
- package/dist/skills/loader.d.ts +19 -0
- package/dist/skills/loader.d.ts.map +1 -0
- package/dist/skills/loader.js +197 -0
- package/dist/skills/loader.js.map +1 -0
- package/dist/skills/registry.d.ts +74 -0
- package/dist/skills/registry.d.ts.map +1 -0
- package/dist/skills/registry.js +136 -0
- package/dist/skills/registry.js.map +1 -0
- package/dist/skills/settings.d.ts +13 -0
- package/dist/skills/settings.d.ts.map +1 -0
- package/dist/skills/settings.js +100 -0
- package/dist/skills/settings.js.map +1 -0
- package/dist/tools/activate-skill.d.ts +5 -0
- package/dist/tools/activate-skill.d.ts.map +1 -0
- package/dist/tools/activate-skill.js +33 -0
- package/dist/tools/activate-skill.js.map +1 -0
- package/dist/tools/index.d.ts +1 -1
- package/dist/tools/todo-write.d.ts +1 -1
- package/dist/tools/web-fetch.d.ts.map +1 -1
- package/dist/tools/web-fetch.js +2 -1
- package/dist/tools/web-fetch.js.map +1 -1
- package/dist/types/index.d.ts +46 -1
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js.map +1 -1
- package/dist/utils.d.ts +23 -2
- package/dist/utils.d.ts.map +1 -1
- package/dist/utils.js +76 -20
- package/dist/utils.js.map +1 -1
- package/dist/version.d.ts +2 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +47 -0
- package/dist/version.js.map +1 -0
- package/package.json +2 -1
|
@@ -8,7 +8,127 @@ import * as fs from 'node:fs';
|
|
|
8
8
|
import * as path from 'node:path';
|
|
9
9
|
import { XCODE_DIR } from '../utils.js';
|
|
10
10
|
// Env-var assignment prefix: VAR=value (unquoted, safe chars only).
|
|
11
|
-
|
|
11
|
+
// The capture group exposes the name so the whitelist can decide whether
|
|
12
|
+
// to strip the prefix or treat it as a poison pill (see SAFE_ENV_VARS).
|
|
13
|
+
const ENV_VAR_RE = /^([A-Za-z_]\w*)=[A-Za-z0-9_./:@-]*\s+/;
|
|
14
|
+
// Env-var names safe to strip before deriving a "don't ask again" prefix.
|
|
15
|
+
// Deliberately conservative — anything that could shift program behaviour
|
|
16
|
+
// in security-relevant ways (PATH, LD_*, NODE_OPTIONS, http(s)_proxy,
|
|
17
|
+
// DYLD_*, …) is excluded so a non-whitelisted assignment downgrades the
|
|
18
|
+
// rule to exact-match. Without that, an agent could smuggle unaudited env
|
|
19
|
+
// into an already-approved command shape.
|
|
20
|
+
//
|
|
21
|
+
// Picked to cover the common NODE_ENV / CI / DEBUG / locale / color
|
|
22
|
+
// settings agents emit in practice, mirroring the spirit of Claude Code's
|
|
23
|
+
// SAFE_ENV_VARS list.
|
|
24
|
+
const SAFE_ENV_VARS = new Set([
|
|
25
|
+
'NODE_ENV',
|
|
26
|
+
'PYTHONUNBUFFERED',
|
|
27
|
+
'PYTHONIOENCODING',
|
|
28
|
+
'PYTHONDONTWRITEBYTECODE',
|
|
29
|
+
'CI',
|
|
30
|
+
'DEBUG',
|
|
31
|
+
'FORCE_COLOR',
|
|
32
|
+
'NO_COLOR',
|
|
33
|
+
'CLICOLOR',
|
|
34
|
+
'CLICOLOR_FORCE',
|
|
35
|
+
'TERM',
|
|
36
|
+
'COLORTERM',
|
|
37
|
+
'LANG',
|
|
38
|
+
'LC_ALL',
|
|
39
|
+
'LC_CTYPE',
|
|
40
|
+
'LC_MESSAGES',
|
|
41
|
+
'LC_TIME',
|
|
42
|
+
'LC_COLLATE',
|
|
43
|
+
'TZ',
|
|
44
|
+
'EDITOR',
|
|
45
|
+
'VISUAL',
|
|
46
|
+
'PAGER',
|
|
47
|
+
'LESS',
|
|
48
|
+
]);
|
|
49
|
+
// First-token wrappers too broad to anchor a "don't ask again" rule on.
|
|
50
|
+
// `sudo ls` once approved must NOT auto-approve `sudo <anything>`, and we
|
|
51
|
+
// don't (yet) crack open `bash -c "<inner>"` to re-extract — so for these
|
|
52
|
+
// we return null and force exact-match. `sudo` is also caught upstream by
|
|
53
|
+
// isDestructive(); listed here for defence-in-depth.
|
|
54
|
+
const WRAPPER_BLOCKLIST = new Set([
|
|
55
|
+
'sudo',
|
|
56
|
+
'doas',
|
|
57
|
+
'su',
|
|
58
|
+
'bash',
|
|
59
|
+
'sh',
|
|
60
|
+
'zsh',
|
|
61
|
+
'fish',
|
|
62
|
+
'dash',
|
|
63
|
+
'ksh',
|
|
64
|
+
'cmd',
|
|
65
|
+
'env',
|
|
66
|
+
'time',
|
|
67
|
+
'nice',
|
|
68
|
+
'ionice',
|
|
69
|
+
'timeout',
|
|
70
|
+
'nohup',
|
|
71
|
+
'xargs',
|
|
72
|
+
'watch',
|
|
73
|
+
'parallel',
|
|
74
|
+
'exec',
|
|
75
|
+
'eval',
|
|
76
|
+
]);
|
|
77
|
+
// Per-command global-flag tables: tokens between `cmd` and its real
|
|
78
|
+
// subcommand. Without these, `git -C /tmp commit` would extract `git -C`
|
|
79
|
+
// and miss every prefix rule the user has for `git commit`.
|
|
80
|
+
//
|
|
81
|
+
// `valued` flags consume the following token; everything else starting
|
|
82
|
+
// with `-` is treated as a boolean flag (skip one). `--name=value` is
|
|
83
|
+
// detected by the embedded `=`. `cargo +toolchain` is the one non-flag
|
|
84
|
+
// token kind that needs skipping; gated by `takesPlus`.
|
|
85
|
+
const GLOBAL_FLAGS = {
|
|
86
|
+
git: {
|
|
87
|
+
valued: new Set(['-C', '-c', '--git-dir', '--work-tree', '--namespace', '--exec-path', '--super-prefix']),
|
|
88
|
+
},
|
|
89
|
+
docker: {
|
|
90
|
+
valued: new Set([
|
|
91
|
+
'-H',
|
|
92
|
+
'--host',
|
|
93
|
+
'--config',
|
|
94
|
+
'--context',
|
|
95
|
+
'-c',
|
|
96
|
+
'--log-level',
|
|
97
|
+
'--tlscacert',
|
|
98
|
+
'--tlscert',
|
|
99
|
+
'--tlskey',
|
|
100
|
+
]),
|
|
101
|
+
},
|
|
102
|
+
podman: {
|
|
103
|
+
valued: new Set(['--connection', '-c', '--log-level', '--root', '--runroot', '--storage-driver', '--url']),
|
|
104
|
+
},
|
|
105
|
+
kubectl: {
|
|
106
|
+
valued: new Set([
|
|
107
|
+
'-n',
|
|
108
|
+
'--namespace',
|
|
109
|
+
'--context',
|
|
110
|
+
'--cluster',
|
|
111
|
+
'--kubeconfig',
|
|
112
|
+
'--server',
|
|
113
|
+
'-s',
|
|
114
|
+
'--user',
|
|
115
|
+
'--token',
|
|
116
|
+
'--as',
|
|
117
|
+
'--as-group',
|
|
118
|
+
'--cache-dir',
|
|
119
|
+
'--certificate-authority',
|
|
120
|
+
'--client-certificate',
|
|
121
|
+
'--client-key',
|
|
122
|
+
]),
|
|
123
|
+
},
|
|
124
|
+
cargo: {
|
|
125
|
+
valued: new Set(['--config', '-Z', '--color', '--manifest-path']),
|
|
126
|
+
takesPlus: true,
|
|
127
|
+
},
|
|
128
|
+
};
|
|
129
|
+
// Subcommand-name shape: lowercase letter, then [a-z0-9-]. Hyphens only
|
|
130
|
+
// internal (no trailing dash). Filters out `-flag`, `/flag`, and paths.
|
|
131
|
+
const SUBCOMMAND_RE = /^[a-z][a-z0-9]*(-[a-z0-9]+)*$/;
|
|
12
132
|
// Detects the `powershell` / `powershell.exe` / `pwsh` invocation prefix.
|
|
13
133
|
// We don't try to match the WHOLE shape here — agents use a lot of flag
|
|
14
134
|
// variations (`-NoProfile`, `-ExecutionPolicy Bypass`, `-File foo.ps1`,
|
|
@@ -20,12 +140,20 @@ const POWERSHELL_LAUNCHER_RE = /^(?:powershell(?:\.exe)?|pwsh(?:\.exe)?)\b/i;
|
|
|
20
140
|
const PS_INNER_CMD_RE = /["']?\s*(?:&\s*\{?\s*)?([A-Za-z][A-Za-z0-9]*(?:-[A-Za-z0-9]+)+|[a-z][a-z0-9._-]*)/;
|
|
21
141
|
/**
|
|
22
142
|
* Extract a command prefix suitable for prefix-match rules.
|
|
23
|
-
* Returns `null` when no meaningful prefix can be derived
|
|
143
|
+
* Returns `null` when no meaningful prefix can be safely derived —
|
|
144
|
+
* callers fall back to exact-match.
|
|
24
145
|
*
|
|
25
146
|
* 'git commit -m "fix"' → 'git commit'
|
|
147
|
+
* 'git -C /tmp commit -m fix' → 'git commit'
|
|
148
|
+
* 'docker -H tcp://host:2375 ps' → 'docker ps'
|
|
149
|
+
* 'kubectl -n prod get pods' → 'kubectl get'
|
|
150
|
+
* 'cargo +nightly build --release' → 'cargo build'
|
|
26
151
|
* 'pnpm run build' → 'pnpm run'
|
|
27
152
|
* 'npm install lodash' → 'npm install'
|
|
28
153
|
* 'NODE_ENV=prod npm run dev' → 'npm run'
|
|
154
|
+
* 'FOO=1 git status' → null (unsafe env)
|
|
155
|
+
* 'sudo npm install' → null (wrapper)
|
|
156
|
+
* 'bash -c "git status"' → null (wrapper)
|
|
29
157
|
* 'powershell -Command "Get-CimInstance ..."' → 'Get-CimInstance'
|
|
30
158
|
* 'powershell -NoProfile -Command "Get-CimInstance ..."' → 'Get-CimInstance'
|
|
31
159
|
* 'powershell -ExecutionPolicy Bypass -c "git status"' → 'git'
|
|
@@ -35,64 +163,126 @@ const PS_INNER_CMD_RE = /["']?\s*(?:&\s*\{?\s*)?([A-Za-z][A-Za-z0-9]*(?:-[A-Za-z
|
|
|
35
163
|
* '' → null
|
|
36
164
|
*/
|
|
37
165
|
export function extractCommandPrefix(command) {
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
//
|
|
43
|
-
// Agents emit varied flag combinations (`-NoProfile`, `-ExecutionPolicy
|
|
44
|
-
// Bypass`, `-c` vs `-Command`, etc.) — strip them all, then extract the
|
|
45
|
-
// first cmdlet/command from the remaining string. The earlier regex-based
|
|
46
|
-
// approach only matched a fixed flag layout and produced null for the
|
|
47
|
-
// common `-NoProfile` case, hiding the "don't ask again" option.
|
|
166
|
+
const cmd = command.trim();
|
|
167
|
+
if (!cmd)
|
|
168
|
+
return null;
|
|
169
|
+
// PowerShell first — its argument syntax doesn't follow the POSIX
|
|
170
|
+
// VAR=value convention so the env-var stripping below doesn't apply.
|
|
48
171
|
if (POWERSHELL_LAUNCHER_RE.test(cmd)) {
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
lower === '-outputformat' ||
|
|
69
|
-
lower === '-version' ||
|
|
70
|
-
lower === '-windowstyle' ||
|
|
71
|
-
lower === '-configurationname' ||
|
|
72
|
-
lower === '-mta' ||
|
|
73
|
-
lower === '-sta') {
|
|
74
|
-
i += 2;
|
|
75
|
-
continue;
|
|
76
|
-
}
|
|
77
|
-
// Boolean flags (no argument): -NoProfile, -NoLogo, -NonInteractive, etc.
|
|
78
|
-
i++;
|
|
79
|
-
}
|
|
80
|
-
if (i >= tokens.length)
|
|
172
|
+
return extractPowershellPrefix(cmd);
|
|
173
|
+
}
|
|
174
|
+
const tokens = cmd.split(/\s+/).filter(Boolean);
|
|
175
|
+
if (tokens.length === 0)
|
|
176
|
+
return null;
|
|
177
|
+
// Per-token env-var stripping. An env-var-shaped token (NAME=…) at the
|
|
178
|
+
// head must be either whitelisted or it's a hard stop — otherwise an
|
|
179
|
+
// agent could smuggle PATH=/evil, NODE_OPTIONS=--require ./evil.js,
|
|
180
|
+
// http_proxy=…, etc. into a rule shaped like `npm run`. Value chars are
|
|
181
|
+
// intentionally not constrained at this layer: it's the NAME that gates
|
|
182
|
+
// safety, and an arbitrary value class would let weird-but-safe values
|
|
183
|
+
// (`/`, `$`, `:`) bypass the check entirely.
|
|
184
|
+
let i = 0;
|
|
185
|
+
while (i < tokens.length) {
|
|
186
|
+
const tok = tokens[i];
|
|
187
|
+
const m = /^([A-Za-z_]\w*)=/.exec(tok);
|
|
188
|
+
if (!m)
|
|
189
|
+
break;
|
|
190
|
+
if (!SAFE_ENV_VARS.has(m[1]))
|
|
81
191
|
return null;
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
192
|
+
// A quoted value split across whitespace (`FOO="a b" cmd`) means our
|
|
193
|
+
// \s+ tokenizer broke the value boundary. We can't tell where the
|
|
194
|
+
// value ends without a real shell parser, so refuse the prefix.
|
|
195
|
+
const value = tok.slice(m[0].length);
|
|
196
|
+
if (hasUnclosedQuote(value))
|
|
197
|
+
return null;
|
|
198
|
+
i++;
|
|
199
|
+
}
|
|
200
|
+
const rest = tokens.slice(i);
|
|
201
|
+
if (rest.length < 2)
|
|
86
202
|
return null;
|
|
203
|
+
const firstLower = rest[0].toLowerCase();
|
|
204
|
+
if (WRAPPER_BLOCKLIST.has(firstLower))
|
|
205
|
+
return null;
|
|
206
|
+
const subIdx = skipGlobalFlags(rest, firstLower);
|
|
207
|
+
if (subIdx >= rest.length)
|
|
208
|
+
return null;
|
|
209
|
+
const sub = rest[subIdx];
|
|
210
|
+
if (!SUBCOMMAND_RE.test(sub))
|
|
211
|
+
return null;
|
|
212
|
+
return `${rest[0]} ${sub}`;
|
|
213
|
+
}
|
|
214
|
+
function hasUnclosedQuote(s) {
|
|
215
|
+
let sq = 0;
|
|
216
|
+
let dq = 0;
|
|
217
|
+
for (const ch of s) {
|
|
218
|
+
if (ch === "'")
|
|
219
|
+
sq++;
|
|
220
|
+
else if (ch === '"')
|
|
221
|
+
dq++;
|
|
87
222
|
}
|
|
223
|
+
return sq % 2 === 1 || dq % 2 === 1;
|
|
224
|
+
}
|
|
225
|
+
function skipGlobalFlags(tokens, firstLower) {
|
|
226
|
+
const cfg = GLOBAL_FLAGS[firstLower];
|
|
227
|
+
if (!cfg)
|
|
228
|
+
return 1;
|
|
229
|
+
let i = 1;
|
|
230
|
+
while (i < tokens.length) {
|
|
231
|
+
const tok = tokens[i];
|
|
232
|
+
if (cfg.takesPlus && tok.startsWith('+')) {
|
|
233
|
+
i++;
|
|
234
|
+
continue;
|
|
235
|
+
}
|
|
236
|
+
if (!tok.startsWith('-'))
|
|
237
|
+
break;
|
|
238
|
+
// --flag=value: single token, advance once.
|
|
239
|
+
if (tok.includes('=')) {
|
|
240
|
+
i++;
|
|
241
|
+
continue;
|
|
242
|
+
}
|
|
243
|
+
if (cfg.valued.has(tok)) {
|
|
244
|
+
i += 2;
|
|
245
|
+
continue;
|
|
246
|
+
}
|
|
247
|
+
// Unknown boolean-style flag — best-effort skip. Erring toward "find
|
|
248
|
+
// the subcommand" matches what users see at the CLI.
|
|
249
|
+
i++;
|
|
250
|
+
}
|
|
251
|
+
return i;
|
|
252
|
+
}
|
|
253
|
+
function extractPowershellPrefix(cmd) {
|
|
88
254
|
const tokens = cmd.split(/\s+/).filter(Boolean);
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
255
|
+
let i = 1; // skip launcher
|
|
256
|
+
while (i < tokens.length) {
|
|
257
|
+
const tok = tokens[i];
|
|
258
|
+
if (!tok.startsWith('-'))
|
|
259
|
+
break;
|
|
260
|
+
const lower = tok.toLowerCase();
|
|
261
|
+
if (lower === '-command' || lower === '-c') {
|
|
262
|
+
i++;
|
|
263
|
+
break;
|
|
264
|
+
}
|
|
265
|
+
if (lower === '-file')
|
|
266
|
+
return null;
|
|
267
|
+
if (lower === '-executionpolicy' ||
|
|
268
|
+
lower === '-encodedcommand' ||
|
|
269
|
+
lower === '-inputformat' ||
|
|
270
|
+
lower === '-outputformat' ||
|
|
271
|
+
lower === '-version' ||
|
|
272
|
+
lower === '-windowstyle' ||
|
|
273
|
+
lower === '-configurationname' ||
|
|
274
|
+
lower === '-mta' ||
|
|
275
|
+
lower === '-sta') {
|
|
276
|
+
i += 2;
|
|
277
|
+
continue;
|
|
278
|
+
}
|
|
279
|
+
i++;
|
|
94
280
|
}
|
|
95
|
-
|
|
281
|
+
if (i >= tokens.length)
|
|
282
|
+
return null;
|
|
283
|
+
const inner = tokens.slice(i).join(' ');
|
|
284
|
+
const m = PS_INNER_CMD_RE.exec(inner);
|
|
285
|
+
return m?.[1] ?? null;
|
|
96
286
|
}
|
|
97
287
|
/**
|
|
98
288
|
* Generate the display label for the "don't ask again" option.
|
|
@@ -106,10 +296,15 @@ export function extractCommandPrefix(command) {
|
|
|
106
296
|
* the prefix regex; without this fallback the user gets only Yes/No
|
|
107
297
|
* forever for repeated identical commands).
|
|
108
298
|
* Write tools (writeFile / edit): `all edits this session` (session-only)
|
|
299
|
+
* MCP tools (isMcp=true): `this MCP tool` (persisted to disk via
|
|
300
|
+
* McpPermissionStore — the label matches that posture, unlike write
|
|
301
|
+
* tools which fall back to session-only).
|
|
109
302
|
*/
|
|
110
|
-
export function suggestRuleLabel(toolName, input) {
|
|
303
|
+
export function suggestRuleLabel(toolName, input, isMcp = false) {
|
|
111
304
|
if (toolName === 'enterPlanMode')
|
|
112
305
|
return null;
|
|
306
|
+
if (isMcp)
|
|
307
|
+
return 'this MCP tool';
|
|
113
308
|
if (toolName === 'shell') {
|
|
114
309
|
const cmd = input.command ?? '';
|
|
115
310
|
const prefix = extractCommandPrefix(cmd);
|
|
@@ -145,19 +340,26 @@ export function buildAllowRule(toolName, input) {
|
|
|
145
340
|
if (prefix) {
|
|
146
341
|
return { rule: { tool: toolName, pattern: prefix, type: 'prefix' }, persist: true };
|
|
147
342
|
}
|
|
148
|
-
// Strip env-var prefixes
|
|
149
|
-
//
|
|
150
|
-
|
|
343
|
+
// Strip *safe* env-var prefixes only — same key the matcher compares
|
|
344
|
+
// against (stripSafeEnvVars). Non-whitelisted assignments stay in the
|
|
345
|
+
// pattern so an approval for `BACKDOOR=1 findstr …` doesn't
|
|
346
|
+
// accidentally auto-allow `findstr …` on its own.
|
|
347
|
+
const exact = stripSafeEnvVars(cmd);
|
|
151
348
|
if (!exact)
|
|
152
349
|
return null;
|
|
153
350
|
return { rule: { tool: toolName, pattern: exact, type: 'exact' }, persist: true };
|
|
154
351
|
}
|
|
155
352
|
return { rule: { tool: toolName, pattern: '*', type: 'tool' }, persist: false };
|
|
156
353
|
}
|
|
157
|
-
function
|
|
354
|
+
function stripSafeEnvVars(command) {
|
|
158
355
|
let cmd = command.trim();
|
|
159
|
-
while (
|
|
160
|
-
|
|
356
|
+
while (true) {
|
|
357
|
+
const m = ENV_VAR_RE.exec(cmd);
|
|
358
|
+
if (!m)
|
|
359
|
+
break;
|
|
360
|
+
if (!SAFE_ENV_VARS.has(m[1]))
|
|
361
|
+
break;
|
|
362
|
+
cmd = cmd.slice(m[0].length);
|
|
161
363
|
}
|
|
162
364
|
return cmd.trim();
|
|
163
365
|
}
|
|
@@ -204,7 +406,7 @@ class SessionPermissionStore {
|
|
|
204
406
|
if (toolName === 'shell') {
|
|
205
407
|
const cmd = input.command ?? '';
|
|
206
408
|
const prefix = extractCommandPrefix(cmd);
|
|
207
|
-
if (rule.type === 'exact' &&
|
|
409
|
+
if (rule.type === 'exact' && stripSafeEnvVars(cmd) === rule.pattern)
|
|
208
410
|
return true;
|
|
209
411
|
if (rule.type === 'prefix' && prefix) {
|
|
210
412
|
if (prefix === rule.pattern)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-store.js","sourceRoot":"","sources":["../../src/permissions/session-store.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"session-store.js","sourceRoot":"","sources":["../../src/permissions/session-store.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import type { HookEventName } from '../hooks/types.js';
|
|
2
|
+
import type { PluginManifest, PluginSource } from './types.js';
|
|
3
|
+
export interface ConsentPreview {
|
|
4
|
+
pluginId: string;
|
|
5
|
+
version: string;
|
|
6
|
+
description?: string;
|
|
7
|
+
source: PluginSource;
|
|
8
|
+
marketplace: string;
|
|
9
|
+
/** True when the install came from a marketplace flagged `verified`. */
|
|
10
|
+
verified: boolean;
|
|
11
|
+
/** True when the marketplace's name is one of `RESERVED_MARKETPLACE_NAMES`. */
|
|
12
|
+
fromReservedMarketplace: boolean;
|
|
13
|
+
/** Hook event names the plugin registers. Empty means no hooks. */
|
|
14
|
+
hookEvents: HookEventName[];
|
|
15
|
+
/** MCP server names contributed inline (path-form not previewed —
|
|
16
|
+
* requires reading another file before consent). */
|
|
17
|
+
inlineMcpServerNames: string[];
|
|
18
|
+
hasSkillsDir: boolean;
|
|
19
|
+
hasAgentsDir: boolean;
|
|
20
|
+
hasCommandsDir: boolean;
|
|
21
|
+
/** True when manifest declares `mcpServers` as a file path (not
|
|
22
|
+
* inline) — we don't have the names yet at consent time, but we can
|
|
23
|
+
* warn the user that the plugin DOES bring MCP servers. */
|
|
24
|
+
hasPathMcpServers: boolean;
|
|
25
|
+
/** Same as above for hooks declared via path rather than inline. */
|
|
26
|
+
hasPathHooks: boolean;
|
|
27
|
+
author?: string;
|
|
28
|
+
license?: string;
|
|
29
|
+
homepage?: string;
|
|
30
|
+
}
|
|
31
|
+
/** Filesystem-side info about a plugin's root directory — the things
|
|
32
|
+
* a manifest-only inspection can't see. Populated by [[probePluginRoot]]
|
|
33
|
+
* and passed to [[buildConsentPreview]] so the install-time "Will
|
|
34
|
+
* contribute" line reflects auto-discovered contributions (e.g.
|
|
35
|
+
* Claude Code's convention of dropping `.mcp.json` next to plugin.json
|
|
36
|
+
* instead of declaring `mcpServers` in the manifest). */
|
|
37
|
+
export interface RootProbe {
|
|
38
|
+
hasSkillsDir: boolean;
|
|
39
|
+
hasAgentsDir: boolean;
|
|
40
|
+
hasCommandsDir: boolean;
|
|
41
|
+
/** Server names parsed from a root-level `.mcp.json` / `mcp.json`
|
|
42
|
+
* (both flat and wrapped shapes accepted; see
|
|
43
|
+
* [[extractMcpServersBlock]]). Empty when neither file is present
|
|
44
|
+
* or the file failed to parse. */
|
|
45
|
+
rootMcpServerNames: string[];
|
|
46
|
+
/** True when a root-level mcp file exists, even if no names could
|
|
47
|
+
* be parsed from it. Lets the consent UI still warn "this plugin
|
|
48
|
+
* contributes MCP servers" when names are momentarily unknown. */
|
|
49
|
+
hasRootMcpFile: boolean;
|
|
50
|
+
/** Hook event names parsed from `hooks/hooks.json` at root, if present. */
|
|
51
|
+
rootHookEvents: HookEventName[];
|
|
52
|
+
/** True when `hooks/hooks.json` exists, regardless of parse result. */
|
|
53
|
+
hasRootHooksFile: boolean;
|
|
54
|
+
}
|
|
55
|
+
export interface BuildPreviewInput {
|
|
56
|
+
pluginId: string;
|
|
57
|
+
manifest: PluginManifest;
|
|
58
|
+
source: PluginSource;
|
|
59
|
+
marketplace: string;
|
|
60
|
+
verified?: boolean;
|
|
61
|
+
fromReservedMarketplace?: boolean;
|
|
62
|
+
/** Optional probe of the plugin's root directory. Without it,
|
|
63
|
+
* consent shows only what the manifest declares — which misses
|
|
64
|
+
* Claude Code-convention plugins that ship contributions as
|
|
65
|
+
* conventional files / dirs alongside `plugin.json`. */
|
|
66
|
+
rootProbe?: RootProbe;
|
|
67
|
+
}
|
|
68
|
+
/** Stat the plugin root for the conventional contribution files / dirs
|
|
69
|
+
* the loader's `resolveContributions` will pick up at runtime. The
|
|
70
|
+
* consent UI uses this so "Will contribute" doesn't lie when a plugin
|
|
71
|
+
* drops `skills/`, `.mcp.json`, etc. at root without naming them in
|
|
72
|
+
* the manifest. Safe to call on any directory — every probe is a
|
|
73
|
+
* best-effort stat / read and missing or unreadable files just count
|
|
74
|
+
* as "absent". */
|
|
75
|
+
export declare function probePluginRoot(rootDir: string): Promise<RootProbe>;
|
|
76
|
+
/** Build a `ConsentPreview` from a parsed manifest. The hook + mcp
|
|
77
|
+
* fields are inspected only for the inline shape; path-form
|
|
78
|
+
* contributions are surfaced as `has*` booleans so the consent UI can
|
|
79
|
+
* warn "this plugin contributes MCP servers" even when their names
|
|
80
|
+
* aren't yet known.
|
|
81
|
+
*
|
|
82
|
+
* When `input.rootProbe` is present, conventional root-level
|
|
83
|
+
* contributions (an undeclared `.mcp.json`, `hooks/hooks.json`,
|
|
84
|
+
* `skills/`, etc.) are merged in too — the loader will pick those up
|
|
85
|
+
* at runtime, so the consent UI needs to know about them now. */
|
|
86
|
+
export declare function buildConsentPreview(input: BuildPreviewInput): ConsentPreview;
|
|
87
|
+
//# sourceMappingURL=consent.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"consent.d.ts","sourceRoot":"","sources":["../../src/plugins/consent.ts"],"names":[],"mappings":"AA6BA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AAGtD,OAAO,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAE9D,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,MAAM,CAAA;IAChB,OAAO,EAAE,MAAM,CAAA;IACf,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,MAAM,EAAE,YAAY,CAAA;IACpB,WAAW,EAAE,MAAM,CAAA;IACnB,wEAAwE;IACxE,QAAQ,EAAE,OAAO,CAAA;IACjB,+EAA+E;IAC/E,uBAAuB,EAAE,OAAO,CAAA;IAChC,mEAAmE;IACnE,UAAU,EAAE,aAAa,EAAE,CAAA;IAC3B;yDACqD;IACrD,oBAAoB,EAAE,MAAM,EAAE,CAAA;IAC9B,YAAY,EAAE,OAAO,CAAA;IACrB,YAAY,EAAE,OAAO,CAAA;IACrB,cAAc,EAAE,OAAO,CAAA;IACvB;;gEAE4D;IAC5D,iBAAiB,EAAE,OAAO,CAAA;IAC1B,oEAAoE;IACpE,YAAY,EAAE,OAAO,CAAA;IACrB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB;AAED;;;;;0DAK0D;AAC1D,MAAM,WAAW,SAAS;IACxB,YAAY,EAAE,OAAO,CAAA;IACrB,YAAY,EAAE,OAAO,CAAA;IACrB,cAAc,EAAE,OAAO,CAAA;IACvB;;;uCAGmC;IACnC,kBAAkB,EAAE,MAAM,EAAE,CAAA;IAC5B;;uEAEmE;IACnE,cAAc,EAAE,OAAO,CAAA;IACvB,2EAA2E;IAC3E,cAAc,EAAE,aAAa,EAAE,CAAA;IAC/B,uEAAuE;IACvE,gBAAgB,EAAE,OAAO,CAAA;CAC1B;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,MAAM,CAAA;IAChB,QAAQ,EAAE,cAAc,CAAA;IACxB,MAAM,EAAE,YAAY,CAAA;IACpB,WAAW,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,uBAAuB,CAAC,EAAE,OAAO,CAAA;IACjC;;;6DAGyD;IACzD,SAAS,CAAC,EAAE,SAAS,CAAA;CACtB;AAED;;;;;;mBAMmB;AACnB,wBAAsB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,CAmDzE;AAoBD;;;;;;;;;kEASkE;AAClE,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,iBAAiB,GAAG,cAAc,CA4D5E"}
|