@sema-agent/core 7.43.0 → 7.45.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.
Files changed (98) hide show
  1. package/CHANGELOG.md +245 -0
  2. package/dist/agents/subagent.d.ts +2 -1
  3. package/dist/agents/subagent.js +33 -14
  4. package/dist/agents/tool-filter.d.ts +65 -4
  5. package/dist/agents/tool-filter.js +127 -4
  6. package/dist/brain/errors.d.ts +23 -2
  7. package/dist/brain/errors.js +26 -2
  8. package/dist/brain/stream-engine.d.ts +2 -1
  9. package/dist/brain/stream-engine.js +10 -9
  10. package/dist/core/agent-definition.d.ts +2 -2
  11. package/dist/core/allow-entry.d.ts +25 -1
  12. package/dist/core/allow-entry.js +29 -4
  13. package/dist/core/ask-origin.d.ts +23 -4
  14. package/dist/core/ask-origin.js +10 -4
  15. package/dist/core/checkpoint-store.d.ts +28 -15
  16. package/dist/core/checkpoint-store.js +4 -13
  17. package/dist/core/decision-receipt.js +1 -1
  18. package/dist/core/effective-path-target.d.ts +7 -6
  19. package/dist/core/effective-path-target.js +3 -7
  20. package/dist/core/engine-notice.d.ts +33 -14
  21. package/dist/core/engine-notice.js +14 -7
  22. package/dist/core/gate-lanes.js +2 -0
  23. package/dist/core/gate-outcome.d.ts +5 -0
  24. package/dist/core/gate-outcome.js +2 -0
  25. package/dist/core/governance-codes.d.ts +4 -3
  26. package/dist/core/governance-codes.js +1 -0
  27. package/dist/core/hooks.d.ts +2 -0
  28. package/dist/core/memory-engine/content-origin.d.ts +0 -34
  29. package/dist/core/memory-engine/content-origin.js +9 -4
  30. package/dist/core/memory-engine/engine.d.ts +2 -2
  31. package/dist/core/memory-engine/engine.js +7 -14
  32. package/dist/core/memory-engine/file-backend.d.ts +2 -2
  33. package/dist/core/memory-engine/file-backend.js +5 -7
  34. package/dist/core/memory-engine/layout.d.ts +41 -4
  35. package/dist/core/memory-engine/layout.js +35 -5
  36. package/dist/core/permission-rules.d.ts +4 -0
  37. package/dist/core/permission-rules.js +5 -2
  38. package/dist/core/real-approval.d.ts +9 -6
  39. package/dist/core/real-approval.js +5 -5
  40. package/dist/core/runner/child-tree.d.ts +13 -0
  41. package/dist/core/runner/child-tree.js +3 -0
  42. package/dist/core/runner/contracts.d.ts +9 -18
  43. package/dist/core/runner/prepare-ask-lane.d.ts +2 -0
  44. package/dist/core/runner/prepare-ask-lane.js +2 -2
  45. package/dist/core/runner/prepare-config-doors.js +3 -1
  46. package/dist/core/runner/prepare-execution-env.js +2 -1
  47. package/dist/core/runner/prepare-gate-stations.d.ts +3 -0
  48. package/dist/core/runner/prepare-gate-stations.js +2 -1
  49. package/dist/core/runner/prepare-listings.d.ts +4 -4
  50. package/dist/core/runner/prepare-listings.js +2 -22
  51. package/dist/core/runner/prepare-park-ask.d.ts +2 -0
  52. package/dist/core/runner/prepare-park-ask.js +2 -2
  53. package/dist/core/runner/prepare-policy-chain.d.ts +2 -0
  54. package/dist/core/runner/prepare-policy-chain.js +4 -2
  55. package/dist/core/runner/prepare-task.js +10 -6
  56. package/dist/core/runner/resume-policy-outcome.js +2 -1
  57. package/dist/core/runner/run-leg.js +1 -1
  58. package/dist/core/runner/run-notification-lane.js +2 -2
  59. package/dist/core/runner/runtask.d.ts +2 -0
  60. package/dist/core/runner/runtask.js +3 -5
  61. package/dist/core/runner/steer-admission.d.ts +10 -11
  62. package/dist/core/runner/steer-admission.js +6 -8
  63. package/dist/core/runner/stream-steer-verb.d.ts +5 -4
  64. package/dist/core/runner/stream-steer-verb.js +8 -10
  65. package/dist/core/runner/sub-agent-deny-lists.d.ts +32 -0
  66. package/dist/core/runner/sub-agent-deny-lists.js +121 -0
  67. package/dist/core/runner/synthetic-tools.d.ts +1 -1
  68. package/dist/core/runner/synthetic-tools.js +3 -2
  69. package/dist/core/session-policy-store.d.ts +6 -2
  70. package/dist/core/session-policy-store.js +2 -1
  71. package/dist/core/skill-grant.d.ts +10 -2
  72. package/dist/core/skill-grant.js +20 -4
  73. package/dist/core/steer-replay.d.ts +46 -0
  74. package/dist/core/steer-replay.js +22 -0
  75. package/dist/core/task-event.d.ts +3 -2
  76. package/dist/core/task-notification.d.ts +12 -1
  77. package/dist/core/task-notification.js +13 -1
  78. package/dist/core/task-spec.d.ts +5 -3
  79. package/dist/core/task-stream.d.ts +12 -6
  80. package/dist/core/tool-errors.d.ts +2 -2
  81. package/dist/core/tool-policy.d.ts +15 -4
  82. package/dist/core/tool-policy.js +9 -13
  83. package/dist/core/tool-spec.d.ts +20 -2
  84. package/dist/core/types.d.ts +2 -2
  85. package/dist/core/types.js +1 -1
  86. package/dist/index.d.ts +7 -4
  87. package/dist/index.js +7 -4
  88. package/dist/orchestration/workflow-types.d.ts +5 -0
  89. package/dist/orchestration/workflow.d.ts +3 -2
  90. package/dist/orchestration/workflow.js +16 -7
  91. package/dist/tools/fs/removal-targets.d.ts +82 -0
  92. package/dist/tools/fs/removal-targets.js +236 -0
  93. package/dist/tools/fs/shell-read-write-targets.d.ts +27 -0
  94. package/dist/tools/fs/shell-read-write-targets.js +1 -1
  95. package/package.json +1 -1
  96. package/test/export-surface.snapshot.json +43 -5
  97. package/wire-changes/core@7.44.0.json +469 -0
  98. package/wire-changes/core@7.45.0.json +1084 -0
@@ -0,0 +1,1084 @@
1
+ {
2
+ "repo": "core",
3
+ "version": "7.45.0",
4
+ "from": "73002f2fdbd4de6991332f8173fa826e8186f970",
5
+ "to": "185f5debffa0c4e6e5104f58db12586b2839ba8f",
6
+ "added": [
7
+ {
8
+ "name": "HOST_DECIDERS",
9
+ "kind": "variable",
10
+ "tier": "advanced",
11
+ "at": [
12
+ "src/core/gate-outcome.ts:127",
13
+ "src/index.ts:1490"
14
+ ],
15
+ "criteriaCovered": false,
16
+ "breaking": false
17
+ },
18
+ {
19
+ "name": "HeldQuestion",
20
+ "kind": "type",
21
+ "tier": "advanced",
22
+ "at": [
23
+ "src/core/real-approval.ts:40",
24
+ "src/index.ts:1491"
25
+ ],
26
+ "criteriaCovered": false,
27
+ "breaking": false
28
+ },
29
+ {
30
+ "name": "HostDecider",
31
+ "kind": "type",
32
+ "tier": "advanced",
33
+ "at": [
34
+ "src/core/gate-outcome.ts:128",
35
+ "src/index.ts:1490"
36
+ ],
37
+ "criteriaCovered": false,
38
+ "breaking": false
39
+ },
40
+ {
41
+ "name": "SCOPE_HOME_FORMS",
42
+ "kind": "variable",
43
+ "tier": "advanced",
44
+ "at": [
45
+ "src/core/memory-engine/layout.ts:1145",
46
+ "src/index.ts:2422"
47
+ ],
48
+ "criteriaCovered": false,
49
+ "breaking": false
50
+ },
51
+ {
52
+ "name": "SCOPE_HOME_NOT_DIRECTORY",
53
+ "kind": "variable",
54
+ "tier": "advanced",
55
+ "at": [
56
+ "src/core/memory-engine/layout.ts:1142",
57
+ "src/index.ts:2422"
58
+ ],
59
+ "criteriaCovered": false,
60
+ "breaking": false
61
+ },
62
+ {
63
+ "name": "STORE_FORM_REFUSAL_CODES",
64
+ "kind": "variable",
65
+ "tier": "advanced",
66
+ "at": [
67
+ "src/core/memory-engine/layout.ts:1135",
68
+ "src/index.ts:2422"
69
+ ],
70
+ "criteriaCovered": false,
71
+ "breaking": false
72
+ },
73
+ {
74
+ "name": "ScopeHomeForm",
75
+ "kind": "type",
76
+ "tier": "advanced",
77
+ "at": [
78
+ "src/core/memory-engine/layout.ts:1146",
79
+ "src/index.ts:2422"
80
+ ],
81
+ "criteriaCovered": false,
82
+ "breaking": false
83
+ },
84
+ {
85
+ "name": "StoreFormRefusal",
86
+ "kind": "type",
87
+ "tier": "advanced",
88
+ "at": [
89
+ "src/core/memory-engine/layout.ts:1163",
90
+ "src/index.ts:2422"
91
+ ],
92
+ "criteriaCovered": false,
93
+ "breaking": false
94
+ },
95
+ {
96
+ "name": "StoreFormRefusalCode",
97
+ "kind": "type",
98
+ "tier": "advanced",
99
+ "at": [
100
+ "src/core/memory-engine/layout.ts:1136",
101
+ "src/index.ts:2422"
102
+ ],
103
+ "criteriaCovered": false,
104
+ "breaking": false
105
+ },
106
+ {
107
+ "name": "StoreFormRefusalDetail",
108
+ "kind": "type",
109
+ "tier": "advanced",
110
+ "at": [
111
+ "src/core/memory-engine/layout.ts:1158",
112
+ "src/index.ts:2422"
113
+ ],
114
+ "criteriaCovered": true,
115
+ "breaking": false
116
+ },
117
+ {
118
+ "name": "TARGET_OUTSIDE_STORE",
119
+ "kind": "variable",
120
+ "tier": "advanced",
121
+ "at": [
122
+ "src/core/memory-engine/layout.ts:1139",
123
+ "src/index.ts:2422"
124
+ ],
125
+ "criteriaCovered": false,
126
+ "breaking": false
127
+ },
128
+ {
129
+ "name": "USER_INPUT_UNDRAINED_FAMILIES",
130
+ "kind": "variable",
131
+ "tier": "advanced",
132
+ "at": [
133
+ "src/core/engine-notice.ts:1050",
134
+ "src/core/types.ts:55",
135
+ "src/index.ts:360"
136
+ ],
137
+ "criteriaCovered": false,
138
+ "breaking": false
139
+ },
140
+ {
141
+ "name": "UserInputLane",
142
+ "kind": "type",
143
+ "tier": "advanced",
144
+ "at": [
145
+ "src/core/task-notification.ts:68",
146
+ "src/index.ts:1006"
147
+ ],
148
+ "criteriaCovered": false,
149
+ "breaking": false
150
+ },
151
+ {
152
+ "name": "injectionLaneOf",
153
+ "kind": "function",
154
+ "tier": "advanced",
155
+ "at": [
156
+ "src/core/task-notification.ts:77",
157
+ "src/index.ts:1005"
158
+ ],
159
+ "criteriaCovered": false,
160
+ "breaking": false
161
+ },
162
+ {
163
+ "name": "isHostDecider",
164
+ "kind": "variable",
165
+ "tier": "advanced",
166
+ "at": [
167
+ "src/core/gate-outcome.ts:129",
168
+ "src/index.ts:1490"
169
+ ],
170
+ "criteriaCovered": false,
171
+ "breaking": false
172
+ },
173
+ {
174
+ "name": "policyCannotAnswer",
175
+ "kind": "function",
176
+ "tier": "advanced",
177
+ "at": [
178
+ "src/core/real-approval.ts:62",
179
+ "src/core/tool-policy.ts:8",
180
+ "src/index.ts:1491"
181
+ ],
182
+ "criteriaCovered": false,
183
+ "breaking": false
184
+ }
185
+ ],
186
+ "removed": [],
187
+ "changed": [],
188
+ "narrowed": [
189
+ {
190
+ "id": "F6",
191
+ "source": "behaviorFlips.after",
192
+ "text": "v7.45.0: each entry is mapped to its tool name before the narrowing policy is built — `Edit(src/**)`, `Edit()`, `Edit(*)` and `Edit` deny the tool `Edit` for the leg and nothing else; `\"Edit \"` and `Bash(` throw `config.agent.unknown_tool` naming `workflow agentType \"<name>\"`; a name no tool carries still builds a policy that denies nothing."
193
+ },
194
+ {
195
+ "id": "F19",
196
+ "source": "behaviorFlips.summary",
197
+ "text": "BEHAVIOR NARROWING (#1403): a removal whose target is a protected location — the filesystem root, a top-level directory, a home directory, the task root / working directory / an additional working directory or an ancestor of one, or a shell script built only when the command runs that may run a removal — is the mandated class `dangerous_delete` (`ASK_CLASSES` +1): no permission mode, allow-layer member or classifier clears it."
198
+ },
199
+ {
200
+ "id": "G20",
201
+ "source": "criteria.title",
202
+ "text": "#1395 — on a narrowed read face a shell read outside the roots (or one the station cannot place) is put to the approval seat under `auto`, not to the classifier; the card is the probe card `default` gives"
203
+ }
204
+ ],
205
+ "closedSetMembers": [
206
+ {
207
+ "set": "ASK_CLASSES",
208
+ "at": [
209
+ "src/core/ask-origin.ts:601"
210
+ ],
211
+ "newSet": false,
212
+ "added": [
213
+ "dangerous_delete"
214
+ ],
215
+ "removed": [],
216
+ "breaking": false,
217
+ "criteriaCovered": false
218
+ },
219
+ {
220
+ "set": "DangerousRemovalKind",
221
+ "at": [
222
+ "src/tools/fs/removal-targets.ts:33"
223
+ ],
224
+ "newSet": true,
225
+ "added": [
226
+ "filesystem_root",
227
+ "home",
228
+ "runtime_script",
229
+ "top_level",
230
+ "workspace"
231
+ ],
232
+ "removed": [],
233
+ "breaking": false,
234
+ "criteriaCovered": false
235
+ },
236
+ {
237
+ "set": "HOST_DECIDERS",
238
+ "at": [
239
+ "src/core/gate-outcome.ts:127"
240
+ ],
241
+ "newSet": true,
242
+ "added": [
243
+ "person",
244
+ "policy",
245
+ "sla_timeout"
246
+ ],
247
+ "removed": [],
248
+ "breaking": false,
249
+ "criteriaCovered": false
250
+ },
251
+ {
252
+ "set": "HostDecider",
253
+ "at": [
254
+ "src/core/gate-outcome.ts:128",
255
+ "src/index.ts:1490"
256
+ ],
257
+ "newSet": true,
258
+ "added": [
259
+ "person",
260
+ "policy",
261
+ "sla_timeout"
262
+ ],
263
+ "removed": [],
264
+ "breaking": false,
265
+ "criteriaCovered": false
266
+ },
267
+ {
268
+ "set": "PermissionResult.guard",
269
+ "at": [
270
+ "src/core/tool-policy.ts:606"
271
+ ],
272
+ "newSet": false,
273
+ "added": [
274
+ "dangerous_delete"
275
+ ],
276
+ "removed": [],
277
+ "breaking": false,
278
+ "criteriaCovered": false
279
+ },
280
+ {
281
+ "set": "SHELL_REMOVAL_COMMANDS",
282
+ "at": [
283
+ "src/tools/fs/removal-targets.ts:24"
284
+ ],
285
+ "newSet": true,
286
+ "added": [
287
+ "rm",
288
+ "rmdir"
289
+ ],
290
+ "removed": [],
291
+ "breaking": false,
292
+ "criteriaCovered": false
293
+ },
294
+ {
295
+ "set": "STORE_FORM_REFUSAL_CODES",
296
+ "at": [
297
+ "src/core/memory-engine/layout.ts:1135"
298
+ ],
299
+ "newSet": true,
300
+ "added": [
301
+ "memory.scope_home_not_directory",
302
+ "memory.target_outside_store"
303
+ ],
304
+ "removed": [],
305
+ "breaking": false,
306
+ "criteriaCovered": false
307
+ },
308
+ {
309
+ "set": "ShellRemovalCommand",
310
+ "at": [
311
+ "src/tools/fs/removal-targets.ts:25"
312
+ ],
313
+ "newSet": true,
314
+ "added": [
315
+ "rm",
316
+ "rmdir"
317
+ ],
318
+ "removed": [],
319
+ "breaking": false,
320
+ "criteriaCovered": false
321
+ },
322
+ {
323
+ "set": "StoreFormRefusalCode",
324
+ "at": [
325
+ "src/core/memory-engine/layout.ts:1136",
326
+ "src/index.ts:2422"
327
+ ],
328
+ "newSet": true,
329
+ "added": [
330
+ "memory.scope_home_not_directory",
331
+ "memory.target_outside_store"
332
+ ],
333
+ "removed": [],
334
+ "breaking": false,
335
+ "criteriaCovered": false
336
+ },
337
+ {
338
+ "set": "ToolNameListSide",
339
+ "at": [
340
+ "src/agents/tool-filter.ts:118"
341
+ ],
342
+ "newSet": true,
343
+ "added": [
344
+ "allowed",
345
+ "denied"
346
+ ],
347
+ "removed": [],
348
+ "breaking": false,
349
+ "criteriaCovered": false
350
+ },
351
+ {
352
+ "set": "UserInputLane",
353
+ "at": [
354
+ "src/core/task-notification.ts:68"
355
+ ],
356
+ "newSet": true,
357
+ "added": [
358
+ "followUp",
359
+ "steer"
360
+ ],
361
+ "removed": [],
362
+ "breaking": false,
363
+ "criteriaCovered": false
364
+ }
365
+ ],
366
+ "closedSetsUnreadable": [],
367
+ "typeKeys": [
368
+ {
369
+ "type": "AllowEntryInert",
370
+ "at": [
371
+ "src/core/allow-entry.ts:68"
372
+ ],
373
+ "via": "SkillGrantHit.readsAsNothing",
374
+ "added": [
375
+ "valueType"
376
+ ],
377
+ "addedDetail": [
378
+ {
379
+ "key": "valueType",
380
+ "optional": true
381
+ }
382
+ ],
383
+ "addedRequired": [],
384
+ "removed": [],
385
+ "breaking": false,
386
+ "criteriaCovered": false
387
+ },
388
+ {
389
+ "type": "AllowEntryInertDetail",
390
+ "at": [
391
+ "src/core/allow-entry.ts:46"
392
+ ],
393
+ "via": "SkillGrantHit.readsAsNothing.AllowEntryInertDetail",
394
+ "added": [
395
+ "valueType"
396
+ ],
397
+ "addedDetail": [
398
+ {
399
+ "key": "valueType",
400
+ "optional": true
401
+ }
402
+ ],
403
+ "addedRequired": [],
404
+ "removed": [],
405
+ "breaking": false,
406
+ "criteriaCovered": false
407
+ },
408
+ {
409
+ "type": "AskClassFacts",
410
+ "at": [
411
+ "src/core/ask-origin.ts:736"
412
+ ],
413
+ "added": [
414
+ "readFace"
415
+ ],
416
+ "addedDetail": [
417
+ {
418
+ "key": "readFace",
419
+ "optional": true
420
+ }
421
+ ],
422
+ "addedRequired": [],
423
+ "removed": [],
424
+ "breaking": false,
425
+ "criteriaCovered": false
426
+ },
427
+ {
428
+ "type": "Prepared",
429
+ "at": [
430
+ "src/core/runner/contracts.ts:246"
431
+ ],
432
+ "via": "Runner.SuspendReap.env",
433
+ "added": [
434
+ "handsRoot"
435
+ ],
436
+ "addedDetail": [
437
+ {
438
+ "key": "handsRoot",
439
+ "optional": true
440
+ }
441
+ ],
442
+ "addedRequired": [],
443
+ "removed": [],
444
+ "breaking": false,
445
+ "criteriaCovered": false
446
+ },
447
+ {
448
+ "type": "RunnerSelfSeat",
449
+ "at": [
450
+ "src/core/runner/contracts.ts:2505"
451
+ ],
452
+ "added": [
453
+ "canRerootChild"
454
+ ],
455
+ "addedDetail": [
456
+ {
457
+ "key": "canRerootChild",
458
+ "optional": true
459
+ }
460
+ ],
461
+ "addedRequired": [],
462
+ "removed": [],
463
+ "breaking": false,
464
+ "criteriaCovered": false
465
+ },
466
+ {
467
+ "type": "SessionRuleNameRefusal",
468
+ "at": [
469
+ "src/core/session-policy-store.ts:66"
470
+ ],
471
+ "added": [
472
+ "guidance"
473
+ ],
474
+ "addedDetail": [
475
+ {
476
+ "key": "guidance",
477
+ "optional": true
478
+ }
479
+ ],
480
+ "addedRequired": [],
481
+ "removed": [],
482
+ "breaking": false,
483
+ "criteriaCovered": true
484
+ },
485
+ {
486
+ "type": "ToolCallRequest",
487
+ "at": [
488
+ "src/core/tool-policy.ts:51"
489
+ ],
490
+ "added": [
491
+ "root"
492
+ ],
493
+ "addedDetail": [
494
+ {
495
+ "key": "root",
496
+ "optional": true
497
+ }
498
+ ],
499
+ "addedRequired": [],
500
+ "removed": [],
501
+ "breaking": false,
502
+ "criteriaCovered": true
503
+ },
504
+ {
505
+ "type": "ToolGateInput",
506
+ "at": [
507
+ "src/core/hooks.ts:1470"
508
+ ],
509
+ "via": "runToolGate.ToolGateInput",
510
+ "added": [
511
+ "readFace"
512
+ ],
513
+ "addedDetail": [
514
+ {
515
+ "key": "readFace",
516
+ "optional": true
517
+ }
518
+ ],
519
+ "addedRequired": [],
520
+ "removed": [],
521
+ "breaking": false,
522
+ "criteriaCovered": false
523
+ },
524
+ {
525
+ "type": "ToolSpec",
526
+ "at": [
527
+ "src/core/tool-spec.ts:131"
528
+ ],
529
+ "added": [
530
+ "agentToolFaces[].authored",
531
+ "agentToolLevelAllowTools",
532
+ "agentToolLevelDenyTools"
533
+ ],
534
+ "addedDetail": [
535
+ {
536
+ "key": "agentToolFaces[].authored",
537
+ "optional": true
538
+ },
539
+ {
540
+ "key": "agentToolLevelAllowTools",
541
+ "optional": true
542
+ },
543
+ {
544
+ "key": "agentToolLevelDenyTools",
545
+ "optional": true
546
+ }
547
+ ],
548
+ "addedRequired": [],
549
+ "removed": [],
550
+ "breaking": false,
551
+ "criteriaCovered": true
552
+ }
553
+ ],
554
+ "typeKeysUnreadableArms": [],
555
+ "typeKeysFlattenedCount": 225,
556
+ "signatures": [
557
+ {
558
+ "name": "Prepared.approvedCallScreen",
559
+ "at": [
560
+ "src/core/runner/contracts.ts:425"
561
+ ],
562
+ "from": [
563
+ "(call: { toolCallId: string; toolName: string; args: unknown; decidedBy: \"person\" | \"sla_timeout\" | \"policy\"; }): Promise<{ readonly refused: string; } | { readonly args: unknown; readonly admit: () => void; }>"
564
+ ],
565
+ "to": [
566
+ "(call: { toolCallId: string; toolName: string; args: unknown; decidedBy: HostDecider; }): Promise<{ readonly refused: string; } | { readonly args: unknown; readonly admit: () => void; }>"
567
+ ],
568
+ "changes": [
569
+ {
570
+ "aspect": "param",
571
+ "detail": "param 1 `call` type changed, direction not read: …gs: unknown; decidedBy: [\"person\" | \"sla_timeout\" | \"policy\" -> HostDecider]; }",
572
+ "breaking": true,
573
+ "uncertain": true
574
+ }
575
+ ],
576
+ "uncertain": "param 1 `call` type changed, direction not read: …gs: unknown; decidedBy: [\"person\" | \"sla_timeout\" | \"policy\" -> HostDecider]; } — the direction of a type change is not read syntactically, so it is reported breaking: check whether existing call sites still type-check before writing the BREAKING line",
577
+ "breaking": true,
578
+ "criteriaCovered": false
579
+ },
580
+ {
581
+ "name": "createUnverifiableDeletePolicy",
582
+ "at": [
583
+ "src/core/tool-policy.ts:2515"
584
+ ],
585
+ "from": [
586
+ "(opts?: { safeVars?: readonly string[]; tools?: string[]; }): ToolPolicy"
587
+ ],
588
+ "to": [
589
+ "(opts?: { safeVars?: readonly string[]; tools?: string[]; removalSeat?: RemovalGuardSeat; }): ToolPolicy"
590
+ ],
591
+ "changes": [
592
+ {
593
+ "aspect": "param",
594
+ "detail": "param 1 `opts` type widened: …ng[]; tools?: string[]; [ -> removalSeat?: RemovalGuardSeat; ]}",
595
+ "breaking": false
596
+ }
597
+ ],
598
+ "breaking": false,
599
+ "criteriaCovered": false
600
+ },
601
+ {
602
+ "name": "foldArbitrationRow",
603
+ "at": [
604
+ "src/core/ask-origin.ts:813"
605
+ ],
606
+ "from": [
607
+ "(classes: ReadonlySet<AskClass>): ModeArbitrationRow"
608
+ ],
609
+ "to": [
610
+ "(classes: ReadonlySet<AskClass>, readFace?: ContainmentFace): ModeArbitrationRow"
611
+ ],
612
+ "changes": [
613
+ {
614
+ "aspect": "param",
615
+ "detail": "+optional param `readFace?: ContainmentFace`",
616
+ "breaking": false
617
+ }
618
+ ],
619
+ "breaking": false,
620
+ "criteriaCovered": false
621
+ }
622
+ ],
623
+ "declarationMoves": [
624
+ {
625
+ "name": "HeldQuestion",
626
+ "kind": "type",
627
+ "onSurface": true,
628
+ "from": [
629
+ "src/core/real-approval.ts"
630
+ ],
631
+ "to": [
632
+ "src/core/real-approval.ts",
633
+ "src/index.ts"
634
+ ]
635
+ },
636
+ {
637
+ "name": "SCOPE_HOME_FORMS",
638
+ "kind": "variable",
639
+ "onSurface": true,
640
+ "from": [
641
+ "src/core/memory-engine/layout.ts"
642
+ ],
643
+ "to": [
644
+ "src/core/memory-engine/layout.ts",
645
+ "src/index.ts"
646
+ ]
647
+ },
648
+ {
649
+ "name": "SCOPE_HOME_NOT_DIRECTORY",
650
+ "kind": "variable",
651
+ "onSurface": true,
652
+ "from": [
653
+ "src/core/memory-engine/layout.ts"
654
+ ],
655
+ "to": [
656
+ "src/core/memory-engine/layout.ts",
657
+ "src/index.ts"
658
+ ]
659
+ },
660
+ {
661
+ "name": "ScopeHomeForm",
662
+ "kind": "type",
663
+ "onSurface": true,
664
+ "from": [
665
+ "src/core/memory-engine/layout.ts"
666
+ ],
667
+ "to": [
668
+ "src/core/memory-engine/layout.ts",
669
+ "src/index.ts"
670
+ ]
671
+ },
672
+ {
673
+ "name": "StoreFormRefusal",
674
+ "kind": "type",
675
+ "onSurface": true,
676
+ "from": [
677
+ "src/core/memory-engine/layout.ts"
678
+ ],
679
+ "to": [
680
+ "src/core/memory-engine/layout.ts",
681
+ "src/index.ts"
682
+ ]
683
+ },
684
+ {
685
+ "name": "StoreFormRefusalDetail",
686
+ "kind": "type",
687
+ "onSurface": true,
688
+ "from": [
689
+ "src/core/memory-engine/layout.ts"
690
+ ],
691
+ "to": [
692
+ "src/core/memory-engine/layout.ts",
693
+ "src/index.ts"
694
+ ]
695
+ },
696
+ {
697
+ "name": "TARGET_OUTSIDE_STORE",
698
+ "kind": "variable",
699
+ "onSurface": true,
700
+ "from": [
701
+ "src/core/memory-engine/layout.ts"
702
+ ],
703
+ "to": [
704
+ "src/core/memory-engine/layout.ts",
705
+ "src/index.ts"
706
+ ]
707
+ },
708
+ {
709
+ "name": "policyCannotAnswer",
710
+ "kind": "function",
711
+ "onSurface": true,
712
+ "from": [
713
+ "src/core/real-approval.ts",
714
+ "src/core/tool-policy.ts"
715
+ ],
716
+ "to": [
717
+ "src/core/real-approval.ts",
718
+ "src/core/tool-policy.ts",
719
+ "src/index.ts"
720
+ ]
721
+ }
722
+ ],
723
+ "mintMoves": [],
724
+ "criteriaObserves": [
725
+ {
726
+ "kind": "engineNoticeCode",
727
+ "name": "permission.allowed_tool_not_granted",
728
+ "assertions": [
729
+ "G16.a",
730
+ "G16.b",
731
+ "G17.a",
732
+ "G17.b",
733
+ "G19.a",
734
+ "G19.c"
735
+ ]
736
+ },
737
+ {
738
+ "kind": "engineNoticeCode",
739
+ "name": "task.user_followup_undrained",
740
+ "assertions": [
741
+ "G21.a",
742
+ "G21.b"
743
+ ]
744
+ },
745
+ {
746
+ "kind": "engineNoticeCode",
747
+ "name": "task.user_steer_undrained",
748
+ "assertions": [
749
+ "G21.a"
750
+ ]
751
+ },
752
+ {
753
+ "kind": "taskEventField",
754
+ "name": "tool_end.isError",
755
+ "assertions": [
756
+ "G14.a",
757
+ "G15.a"
758
+ ]
759
+ },
760
+ {
761
+ "kind": "taskEventField",
762
+ "name": "tool_end.output",
763
+ "assertions": [
764
+ "G14.a",
765
+ "G14.b",
766
+ "G15.a",
767
+ "G19.a"
768
+ ]
769
+ },
770
+ {
771
+ "kind": "typeMember",
772
+ "name": "AgentDefinition.allowTools",
773
+ "assertions": [
774
+ "G18.a",
775
+ "G18.b",
776
+ "G18.c"
777
+ ]
778
+ },
779
+ {
780
+ "kind": "typeMember",
781
+ "name": "AgentDefinition.denyTools",
782
+ "assertions": [
783
+ "G5.a",
784
+ "G5.b",
785
+ "G6.a",
786
+ "G7.a",
787
+ "G7.b",
788
+ "G10.a",
789
+ "G10.b",
790
+ "G12.a",
791
+ "G12.b",
792
+ "G16.c"
793
+ ]
794
+ },
795
+ {
796
+ "kind": "typeMember",
797
+ "name": "AskRequest.askClass",
798
+ "assertions": [
799
+ "G1.a",
800
+ "G2.b",
801
+ "G20.a",
802
+ "G24.a",
803
+ "G24.d"
804
+ ]
805
+ },
806
+ {
807
+ "kind": "typeMember",
808
+ "name": "AskRequest.classes",
809
+ "assertions": [
810
+ "G20.a",
811
+ "G24.a",
812
+ "G24.b",
813
+ "G24.c"
814
+ ]
815
+ },
816
+ {
817
+ "kind": "typeMember",
818
+ "name": "AskRequest.mandate",
819
+ "assertions": [
820
+ "G20.a"
821
+ ]
822
+ },
823
+ {
824
+ "kind": "typeMember",
825
+ "name": "AskRequest.mandated",
826
+ "assertions": [
827
+ "G20.b"
828
+ ]
829
+ },
830
+ {
831
+ "kind": "typeMember",
832
+ "name": "AskRequest.message",
833
+ "assertions": [
834
+ "G1.a",
835
+ "G24.b"
836
+ ]
837
+ },
838
+ {
839
+ "kind": "typeMember",
840
+ "name": "AskRequest.requiresRealApproval",
841
+ "assertions": [
842
+ "G20.b",
843
+ "G20.c"
844
+ ]
845
+ },
846
+ {
847
+ "kind": "typeMember",
848
+ "name": "GateOutcome.disposition",
849
+ "assertions": [
850
+ "G1.b",
851
+ "G1.c"
852
+ ]
853
+ },
854
+ {
855
+ "kind": "typeMember",
856
+ "name": "GateOutcome.disposition.released.reason",
857
+ "assertions": [
858
+ "G2.b"
859
+ ]
860
+ },
861
+ {
862
+ "kind": "typeMember",
863
+ "name": "ModeArbitrationRow.classifierEligible",
864
+ "assertions": [
865
+ "G20.c"
866
+ ]
867
+ },
868
+ {
869
+ "kind": "typeMember",
870
+ "name": "PendingSteerInput.priority",
871
+ "assertions": [
872
+ "G21.c"
873
+ ]
874
+ },
875
+ {
876
+ "kind": "typeMember",
877
+ "name": "PermissionResult.matchedAskRule",
878
+ "assertions": [
879
+ "G3.a"
880
+ ]
881
+ },
882
+ {
883
+ "kind": "typeMember",
884
+ "name": "PermissionResult.requiresRealApproval",
885
+ "assertions": [
886
+ "G2.a"
887
+ ]
888
+ },
889
+ {
890
+ "kind": "typeMember",
891
+ "name": "PermissionResult.ruleUnreadable",
892
+ "assertions": [
893
+ "G2.a",
894
+ "G3.b",
895
+ "G3.c"
896
+ ]
897
+ },
898
+ {
899
+ "kind": "typeMember",
900
+ "name": "ResumeOutcome.hostDecision",
901
+ "assertions": [
902
+ "G13.a",
903
+ "G13.b"
904
+ ]
905
+ },
906
+ {
907
+ "kind": "typeMember",
908
+ "name": "SessionRuleNameRefusal.guidance",
909
+ "assertions": [
910
+ "G23.a"
911
+ ]
912
+ },
913
+ {
914
+ "kind": "typeMember",
915
+ "name": "SessionRuleNameRefusal.verdict",
916
+ "assertions": [
917
+ "G23.b"
918
+ ]
919
+ },
920
+ {
921
+ "kind": "typeMember",
922
+ "name": "SkillSpec.allowedTools",
923
+ "assertions": [
924
+ "G19.c",
925
+ "G19.d"
926
+ ]
927
+ },
928
+ {
929
+ "kind": "typeMember",
930
+ "name": "SkillSpec.disallowedTools",
931
+ "assertions": [
932
+ "G19.a",
933
+ "G19.d"
934
+ ]
935
+ },
936
+ {
937
+ "kind": "typeMember",
938
+ "name": "StoreFormRefusalDetail.form",
939
+ "assertions": [
940
+ "G22.a",
941
+ "G22.b"
942
+ ]
943
+ },
944
+ {
945
+ "kind": "typeMember",
946
+ "name": "StoreFormRefusalDetail.path",
947
+ "assertions": [
948
+ "G22.b"
949
+ ]
950
+ },
951
+ {
952
+ "kind": "typeMember",
953
+ "name": "TaskResult.terminal",
954
+ "assertions": [
955
+ "G19.b"
956
+ ]
957
+ },
958
+ {
959
+ "kind": "typeMember",
960
+ "name": "TaskSpec.agents",
961
+ "assertions": [
962
+ "G5.a",
963
+ "G6.a",
964
+ "G6.b",
965
+ "G16.c",
966
+ "G18.a"
967
+ ]
968
+ },
969
+ {
970
+ "kind": "typeMember",
971
+ "name": "TaskSpec.allowedTools",
972
+ "assertions": [
973
+ "G16.a"
974
+ ]
975
+ },
976
+ {
977
+ "kind": "typeMember",
978
+ "name": "TaskSpec.permissionMode",
979
+ "assertions": [
980
+ "G20.b"
981
+ ]
982
+ },
983
+ {
984
+ "kind": "typeMember",
985
+ "name": "TaskSpec.readFace",
986
+ "assertions": [
987
+ "G20.a"
988
+ ]
989
+ },
990
+ {
991
+ "kind": "typeMember",
992
+ "name": "TaskSpec.userInvokedSkills",
993
+ "assertions": [
994
+ "G19.b"
995
+ ]
996
+ },
997
+ {
998
+ "kind": "typeMember",
999
+ "name": "ToolCallRequest.cwd",
1000
+ "assertions": [
1001
+ "G4.a"
1002
+ ]
1003
+ },
1004
+ {
1005
+ "kind": "typeMember",
1006
+ "name": "ToolCallRequest.root",
1007
+ "assertions": [
1008
+ "G4.a"
1009
+ ]
1010
+ },
1011
+ {
1012
+ "kind": "typeMember",
1013
+ "name": "ToolSpec.agentToolFaces",
1014
+ "assertions": [
1015
+ "G9.a",
1016
+ "G9.c",
1017
+ "G11.a"
1018
+ ]
1019
+ },
1020
+ {
1021
+ "kind": "typeMember",
1022
+ "name": "ToolSpec.agentToolLevelAllowTools",
1023
+ "assertions": [
1024
+ "G18.a",
1025
+ "G18.c"
1026
+ ]
1027
+ },
1028
+ {
1029
+ "kind": "typeMember",
1030
+ "name": "ToolSpec.agentToolLevelDenyTools",
1031
+ "assertions": [
1032
+ "G9.b"
1033
+ ]
1034
+ },
1035
+ {
1036
+ "kind": "typeMember",
1037
+ "name": "ToolSpec.agentToolPool",
1038
+ "assertions": [
1039
+ "G8.a",
1040
+ "G8.b",
1041
+ "G11.a"
1042
+ ]
1043
+ }
1044
+ ],
1045
+ "consumersHint": {
1046
+ "cli": [
1047
+ "ASK_CLASSES",
1048
+ "PermissionResult",
1049
+ "Prepared",
1050
+ "RunnerSelfSeat",
1051
+ "ToolCallRequest",
1052
+ "ToolGateInput",
1053
+ "ToolSpec"
1054
+ ],
1055
+ "server": [
1056
+ "ASK_CLASSES",
1057
+ "HOST_DECIDERS",
1058
+ "PermissionResult",
1059
+ "Prepared",
1060
+ "SCOPE_HOME_NOT_DIRECTORY",
1061
+ "STORE_FORM_REFUSAL_CODES",
1062
+ "SessionRuleNameRefusal",
1063
+ "StoreFormRefusal",
1064
+ "StoreFormRefusalCode",
1065
+ "TARGET_OUTSIDE_STORE",
1066
+ "ToolCallRequest",
1067
+ "ToolGateInput",
1068
+ "ToolSpec",
1069
+ "createUnverifiableDeletePolicy",
1070
+ "foldArbitrationRow",
1071
+ "policyCannotAnswer"
1072
+ ],
1073
+ "sdk": [
1074
+ "ASK_CLASSES",
1075
+ "PermissionResult",
1076
+ "SCOPE_HOME_NOT_DIRECTORY"
1077
+ ],
1078
+ "note": "scanned cli@fb2a095a server@bed34b7d sdk@605ccb1 — a name listed is MENTIONED there today, which is evidence of consumption, not proof of it. Ledger files (**/docs/core-consumption/**, **/docs/wire-consumption/**, **/*LEDGER*.json) are not evidence of use — server: 2 name(s) matched ONLY in bookkeeping files and were set aside (AskClassFacts, RunnerSelfSeat)"
1079
+ },
1080
+ "breakingCount": 1,
1081
+ "breakingItems": [
1082
+ "signature changed: Prepared.approvedCallScreen — param 1 `call` type changed, direction not read: …gs: unknown; decidedBy: [\"person\" | \"sla_timeout\" | \"policy\" -> HostDecider]; }"
1083
+ ]
1084
+ }