Commit 7bb4205
committed
fix(permissions): align monitor + propagate warnings to ACP/non-interactive (#4386 review)
Addresses round-2 review findings from wenshao on PR #4386. Four
related findings, all about sibling drift from the original #4093 fix:
either the same hard-deny-on-substitution pattern in a sibling tool, or
downstream consumers that don't propagate the new warnings field.
1. monitor.ts: `MonitorToolInvocation.getDefaultPermission()` had the
identical `detectCommandSubstitution → 'deny'` pattern that the
original PR removed from `PermissionManager.resolveDefaultPermission`
— sibling drift the original audit missed. Same UX problems apply
(YOLO unbypassable, opaque deny). Removed the deny branch, added
the substitution warning in `getConfirmationDetails` (mirroring
ShellToolInvocation), updated the 5 existing tests that asserted
the old 'deny' to assert 'ask', and added a confirmation-warning
test for the issue #4093 mirror case. Monitor still maintains its
separate permission boundary (Monitor(...) rules don't share with
Bash(...) — documented in the unchanged comment at the top of
getConfirmationDetails); only the substitution-deny half is removed.
2. ACP `buildPermissionRequestContent` (permissionUtils.ts): had no
`exec` branch, so the new `warnings` field never reached ACP
clients (IDE integrations etc.). Added an `exec` branch that emits
one `⚠ <warning>` text content per warning, alongside the existing
`edit` (diff) and `plan` (text) branches. Two regression tests
added: warning present → ⚠ content entry; no warnings → empty.
3. Non-interactive `permissionController.buildPermissionSuggestions`:
the `case 'exec'` description string didn't read `warnings`, so
daemon/API consumers that delegate the approval decision back to
a user lost the substitution context. Appended warnings as a
parenthesized `⚠ ...` suffix to the description string. (No test
file exists for this controller — change is small and verifiable
by inspection; adding test scaffolding is out of scope for this
round.)
4. Test coverage: the `command substitution (issue #4093)` describe
blocks in `shell.test.ts` and `permission-manager.test.ts` covered
`$()`, backticks, and `<()` but not `>()` — even though
`detectCommandSubstitution` and the warning text both list it.
Added a `>()` case to each block to close the regression gap.1 parent c672223 commit 7bb4205
7 files changed
Lines changed: 163 additions & 19 deletions
File tree
- packages
- cli/src
- acp-integration/session
- nonInteractive/control/controllers
- core/src
- permissions
- tools
Lines changed: 46 additions & 1 deletion
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
6 | 6 | | |
7 | 7 | | |
8 | 8 | | |
9 | | - | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
10 | 13 | | |
11 | 14 | | |
12 | 15 | | |
| |||
94 | 97 | | |
95 | 98 | | |
96 | 99 | | |
| 100 | + | |
| 101 | + | |
| 102 | + | |
| 103 | + | |
| 104 | + | |
| 105 | + | |
| 106 | + | |
| 107 | + | |
| 108 | + | |
| 109 | + | |
| 110 | + | |
| 111 | + | |
| 112 | + | |
| 113 | + | |
| 114 | + | |
| 115 | + | |
| 116 | + | |
| 117 | + | |
| 118 | + | |
| 119 | + | |
| 120 | + | |
| 121 | + | |
| 122 | + | |
| 123 | + | |
| 124 | + | |
| 125 | + | |
| 126 | + | |
| 127 | + | |
| 128 | + | |
| 129 | + | |
| 130 | + | |
| 131 | + | |
| 132 | + | |
| 133 | + | |
| 134 | + | |
| 135 | + | |
| 136 | + | |
| 137 | + | |
| 138 | + | |
| 139 | + | |
| 140 | + | |
| 141 | + | |
97 | 142 | | |
Lines changed: 16 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
92 | 92 | | |
93 | 93 | | |
94 | 94 | | |
| 95 | + | |
| 96 | + | |
| 97 | + | |
| 98 | + | |
| 99 | + | |
| 100 | + | |
| 101 | + | |
| 102 | + | |
| 103 | + | |
| 104 | + | |
| 105 | + | |
| 106 | + | |
| 107 | + | |
| 108 | + | |
| 109 | + | |
| 110 | + | |
95 | 111 | | |
96 | 112 | | |
97 | 113 | | |
| |||
Lines changed: 19 additions & 2 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
263 | 263 | | |
264 | 264 | | |
265 | 265 | | |
266 | | - | |
| 266 | + | |
| 267 | + | |
| 268 | + | |
| 269 | + | |
| 270 | + | |
| 271 | + | |
| 272 | + | |
| 273 | + | |
| 274 | + | |
| 275 | + | |
| 276 | + | |
| 277 | + | |
| 278 | + | |
| 279 | + | |
| 280 | + | |
| 281 | + | |
| 282 | + | |
267 | 283 | | |
268 | 284 | | |
269 | 285 | | |
270 | 286 | | |
271 | | - | |
| 287 | + | |
272 | 288 | | |
273 | 289 | | |
274 | 290 | | |
275 | 291 | | |
276 | 292 | | |
277 | 293 | | |
278 | 294 | | |
| 295 | + | |
279 | 296 | | |
280 | 297 | | |
281 | 298 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1058 | 1058 | | |
1059 | 1059 | | |
1060 | 1060 | | |
| 1061 | + | |
| 1062 | + | |
| 1063 | + | |
| 1064 | + | |
| 1065 | + | |
| 1066 | + | |
| 1067 | + | |
| 1068 | + | |
| 1069 | + | |
1061 | 1070 | | |
1062 | 1071 | | |
1063 | 1072 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
416 | 416 | | |
417 | 417 | | |
418 | 418 | | |
419 | | - | |
| 419 | + | |
| 420 | + | |
| 421 | + | |
| 422 | + | |
| 423 | + | |
| 424 | + | |
420 | 425 | | |
421 | 426 | | |
422 | 427 | | |
423 | 428 | | |
424 | | - | |
| 429 | + | |
425 | 430 | | |
426 | 431 | | |
427 | | - | |
| 432 | + | |
428 | 433 | | |
429 | 434 | | |
430 | 435 | | |
431 | 436 | | |
432 | | - | |
| 437 | + | |
433 | 438 | | |
434 | 439 | | |
435 | | - | |
| 440 | + | |
436 | 441 | | |
437 | 442 | | |
438 | 443 | | |
439 | 444 | | |
440 | | - | |
| 445 | + | |
441 | 446 | | |
442 | 447 | | |
443 | | - | |
| 448 | + | |
444 | 449 | | |
445 | 450 | | |
446 | 451 | | |
447 | 452 | | |
448 | | - | |
| 453 | + | |
449 | 454 | | |
450 | 455 | | |
451 | | - | |
| 456 | + | |
452 | 457 | | |
453 | 458 | | |
454 | 459 | | |
455 | 460 | | |
456 | | - | |
| 461 | + | |
457 | 462 | | |
458 | 463 | | |
459 | 464 | | |
| |||
464 | 469 | | |
465 | 470 | | |
466 | 471 | | |
| 472 | + | |
| 473 | + | |
| 474 | + | |
| 475 | + | |
| 476 | + | |
| 477 | + | |
| 478 | + | |
| 479 | + | |
| 480 | + | |
| 481 | + | |
| 482 | + | |
467 | 483 | | |
468 | 484 | | |
469 | 485 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
171 | 171 | | |
172 | 172 | | |
173 | 173 | | |
174 | | - | |
175 | | - | |
176 | | - | |
177 | | - | |
| 174 | + | |
| 175 | + | |
| 176 | + | |
| 177 | + | |
| 178 | + | |
| 179 | + | |
| 180 | + | |
| 181 | + | |
| 182 | + | |
| 183 | + | |
| 184 | + | |
| 185 | + | |
178 | 186 | | |
179 | 187 | | |
180 | 188 | | |
| |||
246 | 254 | | |
247 | 255 | | |
248 | 256 | | |
249 | | - | |
| 257 | + | |
| 258 | + | |
| 259 | + | |
| 260 | + | |
| 261 | + | |
| 262 | + | |
| 263 | + | |
| 264 | + | |
| 265 | + | |
| 266 | + | |
| 267 | + | |
| 268 | + | |
| 269 | + | |
| 270 | + | |
| 271 | + | |
| 272 | + | |
| 273 | + | |
| 274 | + | |
250 | 275 | | |
251 | 276 | | |
252 | 277 | | |
| |||
258 | 283 | | |
259 | 284 | | |
260 | 285 | | |
261 | | - | |
| 286 | + | |
| 287 | + | |
| 288 | + | |
| 289 | + | |
| 290 | + | |
262 | 291 | | |
263 | 292 | | |
264 | 293 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
5011 | 5011 | | |
5012 | 5012 | | |
5013 | 5013 | | |
| 5014 | + | |
| 5015 | + | |
| 5016 | + | |
| 5017 | + | |
| 5018 | + | |
| 5019 | + | |
| 5020 | + | |
| 5021 | + | |
| 5022 | + | |
| 5023 | + | |
| 5024 | + | |
| 5025 | + | |
5014 | 5026 | | |
5015 | 5027 | | |
5016 | 5028 | | |
| |||
0 commit comments