@sema-agent/core 7.39.1 → 7.40.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 (54) hide show
  1. package/CHANGELOG.md +92 -0
  2. package/dist/core/a2a.js +1 -0
  3. package/dist/core/ask-origin.d.ts +19 -6
  4. package/dist/core/ask-origin.js +6 -0
  5. package/dist/core/gate-fold.js +5 -0
  6. package/dist/core/gate-lanes.js +8 -4
  7. package/dist/core/hands-band.d.ts +0 -12
  8. package/dist/core/hooks.d.ts +3 -0
  9. package/dist/core/hooks.js +4 -1
  10. package/dist/core/mcp.js +1 -1
  11. package/dist/core/mode-policy.d.ts +17 -2
  12. package/dist/core/mode-policy.js +13 -6
  13. package/dist/core/permission-rule-model.d.ts +29 -0
  14. package/dist/core/permission-rule-model.js +15 -2
  15. package/dist/core/permission-rules.d.ts +2 -10
  16. package/dist/core/permission-rules.js +22 -19
  17. package/dist/core/runner/branch-writeback.d.ts +38 -0
  18. package/dist/core/runner/branch-writeback.js +58 -0
  19. package/dist/core/runner/denial-limit-arms.js +1 -1
  20. package/dist/core/runner/gate-exit.d.ts +5 -1
  21. package/dist/core/runner/permission-rule-lanes.js +7 -5
  22. package/dist/core/runner/persisted-path-rows.js +3 -3
  23. package/dist/core/runner/prepare-acquire-reconcile.d.ts +9 -2
  24. package/dist/core/runner/prepare-acquire-reconcile.js +16 -30
  25. package/dist/core/runner/prepare-file-history.d.ts +2 -2
  26. package/dist/core/runner/prepare-gate-stations.d.ts +1 -1
  27. package/dist/core/runner/prepare-gate-stations.js +2 -0
  28. package/dist/core/runner/prepare-hands-readface.d.ts +1 -1
  29. package/dist/core/runner/prepare-hands-readface.js +0 -1
  30. package/dist/core/runner/prepare-policy-chain.js +11 -7
  31. package/dist/core/runner/prepare-task.js +12 -9
  32. package/dist/core/runner/prepare-wiring-manifest.d.ts +1 -1
  33. package/dist/core/runner/prepare-wiring-manifest.js +10 -5
  34. package/dist/core/runner/retired-runner-deps.js +1 -0
  35. package/dist/core/tool-policy.d.ts +14 -0
  36. package/dist/core/tool-policy.js +15 -6
  37. package/dist/core/tool-spec.d.ts +10 -0
  38. package/dist/core/tools.js +1 -0
  39. package/dist/engine/loop/types.d.ts +6 -0
  40. package/dist/orchestration/workflow.js +1 -1
  41. package/dist/stores/file/index.d.ts +4 -3
  42. package/dist/stores/file/session-policy-store.d.ts +19 -11
  43. package/dist/stores/file/session-policy-store.js +13 -16
  44. package/dist/stores/file/usage-window-store.d.ts +5 -5
  45. package/dist/tools/fs/fs-read.d.ts +1 -1
  46. package/dist/tools/fs/fs-read.js +3 -5
  47. package/dist/tools/fs/fs-shared.d.ts +0 -27
  48. package/dist/tools/fs/fs-shared.js +0 -3
  49. package/dist/tools/fs/index.d.ts +1 -9
  50. package/dist/tools/fs/index.js +1 -1
  51. package/package.json +1 -1
  52. package/wire-changes/core@7.33.6.json +55 -6
  53. package/wire-changes/core@7.39.2.json +102 -0
  54. package/wire-changes/core@7.40.0.json +376 -0
@@ -0,0 +1,102 @@
1
+ {
2
+ "repo": "core",
3
+ "version": "7.39.2",
4
+ "from": "335797ec9feceb08277d52fd882d20f00374808f",
5
+ "to": "fe41b09d0494634b4adfb12e9024f67719247eec",
6
+ "added": [],
7
+ "removed": [],
8
+ "changed": [],
9
+ "narrowed": [],
10
+ "closedSetMembers": [],
11
+ "closedSetsUnreadable": [],
12
+ "typeKeys": [],
13
+ "typeKeysUnreadableArms": [],
14
+ "typeKeysFlattenedCount": 220,
15
+ "signatures": [],
16
+ "declarationMoves": [],
17
+ "mintMoves": [],
18
+ "criteriaObserves": [
19
+ {
20
+ "kind": "typeMember",
21
+ "name": "Model.extraBody",
22
+ "assertions": [
23
+ "G5.a"
24
+ ]
25
+ },
26
+ {
27
+ "kind": "typeMember",
28
+ "name": "RunnerDeps.executionEnvFactory",
29
+ "assertions": [
30
+ "G2.a"
31
+ ]
32
+ },
33
+ {
34
+ "kind": "typeMember",
35
+ "name": "RunnerDeps.onError",
36
+ "assertions": [
37
+ "G3.b"
38
+ ]
39
+ },
40
+ {
41
+ "kind": "typeMember",
42
+ "name": "SessionPolicyStore.getRules",
43
+ "assertions": [
44
+ "G6.a"
45
+ ]
46
+ },
47
+ {
48
+ "kind": "typeMember",
49
+ "name": "SessionPolicyStore.putRules",
50
+ "assertions": [
51
+ "G6.b"
52
+ ]
53
+ },
54
+ {
55
+ "kind": "typeMember",
56
+ "name": "TaskResult.rewindNotes",
57
+ "assertions": [
58
+ "G4.a"
59
+ ]
60
+ },
61
+ {
62
+ "kind": "typeMember",
63
+ "name": "TaskResult.terminal",
64
+ "assertions": [
65
+ "G1.b"
66
+ ]
67
+ },
68
+ {
69
+ "kind": "typeMember",
70
+ "name": "TaskResult.terminal.code",
71
+ "assertions": [
72
+ "G1.a",
73
+ "G2.a",
74
+ "G3.a",
75
+ "G5.a",
76
+ "G6.c"
77
+ ]
78
+ },
79
+ {
80
+ "kind": "typeMember",
81
+ "name": "TaskResult.terminal.message",
82
+ "assertions": [
83
+ "G3.c"
84
+ ]
85
+ },
86
+ {
87
+ "kind": "typeMember",
88
+ "name": "TaskSpec.resumeAt",
89
+ "assertions": [
90
+ "G1.a"
91
+ ]
92
+ }
93
+ ],
94
+ "consumersHint": {
95
+ "cli": [],
96
+ "server": [],
97
+ "sdk": [],
98
+ "note": "scanned cli@1c57a121 server@79de35f8 sdk@8ce1faa — a name listed is MENTIONED there today, which is evidence of consumption, not proof of it"
99
+ },
100
+ "breakingCount": 0,
101
+ "breakingItems": []
102
+ }
@@ -0,0 +1,376 @@
1
+ {
2
+ "repo": "core",
3
+ "version": "7.40.0",
4
+ "from": "22e5cf13b7bb519f5b50c74e9b6035693cc0e6d1",
5
+ "to": "bb53e9641e80586def0084e6a9ffdbc1dafa5c91",
6
+ "added": [],
7
+ "removed": [],
8
+ "changed": [],
9
+ "narrowed": [
10
+ {
11
+ "id": "F2",
12
+ "source": "behaviorFlips.after",
13
+ "text": "one card per such call, the Read tool's card (`askClass: \"ask_rule\"`, the same `message`), in `default` and `bypassPermissions`; `dontAsk` refuses; answered no ⇒ nothing of the search reaches the model; answered yes ⇒ the search runs and the next search of that path asks again. A search rooted ABOVE the asked path (no `path`, a relative Glob pattern) is not asked and its results are not filtered (KL-1291-a). The deny is unchanged. WHO IS HURT: a deployment or script that wrote a `Read(<path>)` ask rule and searched that path without a card (now asked; headless ⇒ refused). COMPENSATION: narrow the ask rule's pattern, or use the persisted `Read(//dir/**)` directory row for reads that need no person. IF UNCHANGED: those searches stop running without a person's answer."
14
+ },
15
+ {
16
+ "id": "F3",
17
+ "source": "behaviorFlips.after",
18
+ "text": "one card per such call, the Edit tool's card (`askClass: \"ask_rule\"`), in `default` and `bypassPermissions`; answered no ⇒ nothing is written. A Read under the asked path raises no card (read face untouched); a Write outside it raises none. The deny column is unchanged. WHO IS HURT: a deployment or script that wrote an `Edit(<path>)` ask rule and wrote under that path with Write / NotebookEdit without a card (now asked; headless ⇒ refused). COMPENSATION: narrow the rule's pattern or drop it for paths that need no person. IF UNCHANGED: those writes stop running without a person's answer."
19
+ }
20
+ ],
21
+ "closedSetMembers": [
22
+ {
23
+ "set": "ASK_CLASSES",
24
+ "at": [
25
+ "src/core/ask-origin.ts:583"
26
+ ],
27
+ "newSet": false,
28
+ "added": [
29
+ "unstated"
30
+ ],
31
+ "removed": [],
32
+ "breaking": false,
33
+ "criteriaCovered": false
34
+ },
35
+ {
36
+ "set": "AgentTool.permissionSeat",
37
+ "at": [
38
+ "src/engine/loop/types.ts:849"
39
+ ],
40
+ "newSet": true,
41
+ "added": [
42
+ "passthrough"
43
+ ],
44
+ "removed": [],
45
+ "breaking": false,
46
+ "criteriaCovered": false
47
+ },
48
+ {
49
+ "set": "AskOriginFacts.tightened",
50
+ "at": [
51
+ "src/core/ask-origin.ts:115"
52
+ ],
53
+ "newSet": false,
54
+ "added": [
55
+ "unstated"
56
+ ],
57
+ "removed": [],
58
+ "breaking": false,
59
+ "criteriaCovered": false
60
+ },
61
+ {
62
+ "set": "ModePolicy.unstated",
63
+ "at": [
64
+ "src/core/mode-policy.ts:56"
65
+ ],
66
+ "newSet": true,
67
+ "added": [
68
+ "ask",
69
+ "none"
70
+ ],
71
+ "removed": [],
72
+ "breaking": false,
73
+ "criteriaCovered": false
74
+ },
75
+ {
76
+ "set": "ToolGateInput.permissionSeat",
77
+ "at": [
78
+ "src/core/hooks.ts:1804"
79
+ ],
80
+ "newSet": true,
81
+ "added": [
82
+ "passthrough"
83
+ ],
84
+ "removed": [],
85
+ "breaking": false,
86
+ "criteriaCovered": false
87
+ },
88
+ {
89
+ "set": "ToolSpec.permissionSeat",
90
+ "at": [
91
+ "src/core/tool-spec.ts:283"
92
+ ],
93
+ "newSet": true,
94
+ "added": [
95
+ "passthrough"
96
+ ],
97
+ "removed": [],
98
+ "breaking": false,
99
+ "criteriaCovered": false
100
+ }
101
+ ],
102
+ "closedSetsUnreadable": [],
103
+ "typeKeys": [
104
+ {
105
+ "type": "AgentTool",
106
+ "at": [
107
+ "src/engine/loop/types.ts:768"
108
+ ],
109
+ "via": "A2aRefreshResult.tools",
110
+ "added": [
111
+ "permissionSeat"
112
+ ],
113
+ "addedDetail": [
114
+ {
115
+ "key": "permissionSeat",
116
+ "optional": true
117
+ }
118
+ ],
119
+ "addedRequired": [],
120
+ "removed": [],
121
+ "breaking": false,
122
+ "criteriaCovered": false
123
+ },
124
+ {
125
+ "type": "HandsBandOptions",
126
+ "at": [
127
+ "src/core/hands-band.ts:106"
128
+ ],
129
+ "added": [],
130
+ "addedDetail": [],
131
+ "addedRequired": [],
132
+ "removed": [
133
+ "readCyberReminder"
134
+ ],
135
+ "breaking": true,
136
+ "criteriaCovered": false
137
+ },
138
+ {
139
+ "type": "ModePolicy",
140
+ "at": [
141
+ "src/core/mode-policy.ts:51"
142
+ ],
143
+ "added": [
144
+ "unstated"
145
+ ],
146
+ "addedDetail": [
147
+ {
148
+ "key": "unstated",
149
+ "optional": false
150
+ }
151
+ ],
152
+ "addedRequired": [
153
+ "unstated"
154
+ ],
155
+ "removed": [],
156
+ "breaking": true,
157
+ "criteriaCovered": false
158
+ },
159
+ {
160
+ "type": "ToolGateInput",
161
+ "at": [
162
+ "src/core/hooks.ts:1467"
163
+ ],
164
+ "via": "runToolGate.ToolGateInput",
165
+ "added": [
166
+ "permissionSeat"
167
+ ],
168
+ "addedDetail": [
169
+ {
170
+ "key": "permissionSeat",
171
+ "optional": true
172
+ }
173
+ ],
174
+ "addedRequired": [],
175
+ "removed": [],
176
+ "breaking": false,
177
+ "criteriaCovered": false
178
+ },
179
+ {
180
+ "type": "ToolSpec",
181
+ "at": [
182
+ "src/core/tool-spec.ts:131"
183
+ ],
184
+ "added": [
185
+ "permissionSeat"
186
+ ],
187
+ "addedDetail": [
188
+ {
189
+ "key": "permissionSeat",
190
+ "optional": true
191
+ }
192
+ ],
193
+ "addedRequired": [],
194
+ "removed": [],
195
+ "breaking": false,
196
+ "criteriaCovered": false
197
+ }
198
+ ],
199
+ "typeKeysUnreadableArms": [],
200
+ "typeKeysFlattenedCount": 220,
201
+ "signatures": [
202
+ {
203
+ "name": "adjudicatePersistedPathRules",
204
+ "at": [
205
+ "src/core/permission-rule-model.ts:2309"
206
+ ],
207
+ "from": [
208
+ "(rules: readonly PersistedRule[], call: { tool: string; cwd: string | undefined; sessionId?: string; }, targets: { readonly tighten?: PathTargetReading; readonly allow?: PathTargetReading; }, bases: PathRuleBases): PersistedRuleVerdict | undefined"
209
+ ],
210
+ "to": [
211
+ "(rules: readonly PersistedRule[], call: { tool: string; cwd: string | undefined; sessionId?: string; face?: DenyFace | undefined; }, targets: { readonly tighten?: PathTargetReading; readonly allow?: PathTargetReading; }, bases: PathRuleBases): PersistedRuleVerdict | undefined"
212
+ ],
213
+ "changes": [
214
+ {
215
+ "aspect": "param",
216
+ "detail": "param 2 `call` type widened: …ed; sessionId?: string; [ -> face?: DenyFace | undefined; ]}",
217
+ "breaking": false
218
+ }
219
+ ],
220
+ "breaking": false,
221
+ "criteriaCovered": false
222
+ },
223
+ {
224
+ "name": "createAllowDenyPolicy",
225
+ "at": [
226
+ "src/core/tool-policy.ts:1299"
227
+ ],
228
+ "from": [
229
+ "(opts: { allow?: string[]; deny?: string[]; onInvalidName?: \"throw\" | \"skip\"; onInvalidNameIssue?: (issue: { entry: string; list: \"allow\" | \"deny\"; message: string; }) => void; }): NamedToolPolicy"
230
+ ],
231
+ "to": [
232
+ "(opts: { allow?: string[]; deny?: string[]; onInvalidName?: \"throw\" | \"skip\"; onInvalidNameIssue?: (issue: { entry: string; list: \"allow\" | \"deny\"; message: string; }) => void; scope?: \"grant\" | \"narrowing\"; }): NamedToolPolicy"
233
+ ],
234
+ "changes": [
235
+ {
236
+ "aspect": "param",
237
+ "detail": "param 1 `opts` type widened: …ge: string; }) => void; [ -> scope?: \"grant\" | \"narrowing\"; ]}",
238
+ "breaking": false
239
+ }
240
+ ],
241
+ "breaking": false,
242
+ "criteriaCovered": false
243
+ }
244
+ ],
245
+ "declarationMoves": [],
246
+ "mintMoves": [],
247
+ "criteriaObserves": [
248
+ {
249
+ "kind": "taskEventField",
250
+ "name": "tool_end.errorCode",
251
+ "assertions": [
252
+ "G7.f"
253
+ ]
254
+ },
255
+ {
256
+ "kind": "taskEventField",
257
+ "name": "tool_end.gate",
258
+ "assertions": [
259
+ "G1.b",
260
+ "G3.a",
261
+ "G7.b",
262
+ "G7.c",
263
+ "G7.e",
264
+ "G8.b",
265
+ "G8.d"
266
+ ]
267
+ },
268
+ {
269
+ "kind": "taskEventField",
270
+ "name": "tool_end.output",
271
+ "assertions": [
272
+ "G9.a",
273
+ "G9.b"
274
+ ]
275
+ },
276
+ {
277
+ "kind": "typeMember",
278
+ "name": "AskRequest.askClass",
279
+ "assertions": [
280
+ "G7.a",
281
+ "G8.a"
282
+ ]
283
+ },
284
+ {
285
+ "kind": "typeMember",
286
+ "name": "AskRequest.classes",
287
+ "assertions": [
288
+ "G1.a",
289
+ "G2.a",
290
+ "G2.b",
291
+ "G3.b",
292
+ "G5.a",
293
+ "G5.b",
294
+ "G6.a",
295
+ "G7.a"
296
+ ]
297
+ },
298
+ {
299
+ "kind": "typeMember",
300
+ "name": "AskRequest.message",
301
+ "assertions": [
302
+ "G7.a"
303
+ ]
304
+ },
305
+ {
306
+ "kind": "typeMember",
307
+ "name": "AskRequest.origin",
308
+ "assertions": [
309
+ "G1.a"
310
+ ]
311
+ },
312
+ {
313
+ "kind": "typeMember",
314
+ "name": "AskRequest.toolName",
315
+ "assertions": [
316
+ "G7.a",
317
+ "G7.c",
318
+ "G7.d",
319
+ "G7.e",
320
+ "G7.f",
321
+ "G8.a",
322
+ "G8.c",
323
+ "G8.d"
324
+ ]
325
+ },
326
+ {
327
+ "kind": "typeMember",
328
+ "name": "Context.systemPrompt",
329
+ "assertions": [
330
+ "G9.d"
331
+ ]
332
+ },
333
+ {
334
+ "kind": "typeMember",
335
+ "name": "HandsBandOptions.readCyberReminder",
336
+ "assertions": [
337
+ "G9.c"
338
+ ]
339
+ },
340
+ {
341
+ "kind": "typeMember",
342
+ "name": "PendingAction.classes",
343
+ "assertions": [
344
+ "G4.a",
345
+ "G4.b"
346
+ ]
347
+ }
348
+ ],
349
+ "consumersHint": {
350
+ "cli": [
351
+ "ASK_CLASSES",
352
+ "AgentTool",
353
+ "AskOriginFacts",
354
+ "ModePolicy",
355
+ "ToolGateInput",
356
+ "ToolSpec",
357
+ "createAllowDenyPolicy"
358
+ ],
359
+ "server": [
360
+ "ASK_CLASSES",
361
+ "AgentTool",
362
+ "ToolGateInput",
363
+ "ToolSpec",
364
+ "createAllowDenyPolicy"
365
+ ],
366
+ "sdk": [
367
+ "ASK_CLASSES"
368
+ ],
369
+ "note": "scanned cli@1c57a121 server@79de35f8 sdk@8ce1faa — 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: 3 name(s) matched ONLY in bookkeeping files and were set aside (HandsBandOptions, ModePolicy, adjudicatePersistedPathRules)"
370
+ },
371
+ "breakingCount": 2,
372
+ "breakingItems": [
373
+ "type gained required keys: ModePolicy +unstated",
374
+ "type lost keys: HandsBandOptions -readCyberReminder"
375
+ ]
376
+ }