@sema-agent/core 7.54.1 → 7.56.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 (621) hide show
  1. package/CHANGELOG.md +950 -0
  2. package/dist/agents/agent-transcript-tool.js +2 -1
  3. package/dist/agents/builtin-agents.d.ts +12 -14
  4. package/dist/agents/cascade.js +1 -1
  5. package/dist/agents/cc-peer-directory.d.ts +36 -0
  6. package/dist/agents/cc-peer-directory.js +139 -0
  7. package/dist/agents/cc-peer-wire.d.ts +105 -0
  8. package/dist/agents/cc-peer-wire.js +98 -0
  9. package/dist/agents/cc-uds-peer-channel.d.ts +40 -0
  10. package/dist/agents/cc-uds-peer-channel.js +457 -0
  11. package/dist/agents/child-model-seat.d.ts +0 -11
  12. package/dist/agents/child-model-seat.js +0 -3
  13. package/dist/agents/cross-session-envelope.d.ts +4 -1
  14. package/dist/agents/cross-session-envelope.js +8 -1
  15. package/dist/agents/cross-session-judge.d.ts +2 -2
  16. package/dist/agents/list-agents-tool.d.ts +3 -1
  17. package/dist/agents/list-agents-tool.js +9 -8
  18. package/dist/agents/observer.d.ts +4 -5
  19. package/dist/agents/observer.js +2 -1
  20. package/dist/agents/peer-admission.d.ts +6 -0
  21. package/dist/agents/peer-admission.js +4 -1
  22. package/dist/agents/peer-directory.d.ts +65 -13
  23. package/dist/agents/peer-directory.js +90 -25
  24. package/dist/agents/peer-notices.d.ts +1 -1
  25. package/dist/agents/peer-session-drain.d.ts +3 -1
  26. package/dist/agents/peer-session-drain.js +3 -2
  27. package/dist/agents/read-inbox-tool.js +2 -1
  28. package/dist/agents/repair-loop.js +2 -2
  29. package/dist/agents/retain-ledger.d.ts +1 -1
  30. package/dist/agents/roster-store.d.ts +1 -1
  31. package/dist/agents/send-message-tool.d.ts +10 -0
  32. package/dist/agents/send-message-tool.js +37 -8
  33. package/dist/agents/subagent.d.ts +39 -82
  34. package/dist/agents/subagent.js +109 -106
  35. package/dist/agents/tool-filter.d.ts +31 -46
  36. package/dist/agents/tool-filter.js +13 -33
  37. package/dist/agents/verify.d.ts +6 -5
  38. package/dist/agents/verify.js +3 -3
  39. package/dist/brain/anthropic.js +43 -81
  40. package/dist/brain/errors.d.ts +15 -0
  41. package/dist/brain/errors.js +10 -0
  42. package/dist/brain/media-degrade.d.ts +18 -7
  43. package/dist/brain/media-degrade.js +13 -2
  44. package/dist/brain/model-capability.d.ts +37 -0
  45. package/dist/brain/model-capability.js +34 -0
  46. package/dist/brain/model-presets.d.ts +6 -12
  47. package/dist/brain/model-presets.js +1 -6
  48. package/dist/brain/open-responses.js +27 -35
  49. package/dist/brain/openai.js +30 -98
  50. package/dist/brain/provider-dialect.d.ts +39 -3
  51. package/dist/brain/provider-dialect.js +28 -0
  52. package/dist/brain/reasoning-request.d.ts +96 -0
  53. package/dist/brain/reasoning-request.js +174 -0
  54. package/dist/brain/reasoning.d.ts +12 -12
  55. package/dist/brain/reasoning.js +4 -3
  56. package/dist/brain/request-params.d.ts +62 -9
  57. package/dist/brain/request-params.js +42 -7
  58. package/dist/brain/retry.d.ts +1 -1
  59. package/dist/brain/route-adjudicator.d.ts +15 -0
  60. package/dist/brain/route-adjudicator.js +15 -0
  61. package/dist/brain/status-sink.d.ts +20 -0
  62. package/dist/brain/status-sink.js +7 -0
  63. package/dist/brain/stream-engine.js +6 -5
  64. package/dist/brain/stream-shared.d.ts +1 -1
  65. package/dist/core/a2a.d.ts +2 -1
  66. package/dist/core/a2a.js +19 -13
  67. package/dist/core/advisor-verdict.d.ts +120 -0
  68. package/dist/core/advisor-verdict.js +92 -0
  69. package/dist/core/agent-definition.d.ts +17 -8
  70. package/dist/core/allow-entry.d.ts +69 -36
  71. package/dist/core/allow-entry.js +81 -52
  72. package/dist/core/allow-rule-shadow.d.ts +10 -3
  73. package/dist/core/approval-object.d.ts +2 -1
  74. package/dist/core/approval-object.js +6 -6
  75. package/dist/core/ask-origin.d.ts +127 -29
  76. package/dist/core/ask-origin.js +87 -25
  77. package/dist/core/ask-question.d.ts +51 -8
  78. package/dist/core/ask-question.js +12 -7
  79. package/dist/core/ask-unresolvable-notice.d.ts +8 -3
  80. package/dist/core/ask-unresolvable-notice.js +16 -2
  81. package/dist/core/auto-compaction.d.ts +11 -8
  82. package/dist/core/auto-compaction.js +4 -2
  83. package/dist/core/auto-mode-arming.d.ts +2 -2
  84. package/dist/core/auto-mode-defaults.d.ts +8 -8
  85. package/dist/core/auto-mode-prompt-assets.d.ts +3 -3
  86. package/dist/core/auto-mode-prompt.d.ts +1 -1
  87. package/dist/core/auto-mode.d.ts +17 -9
  88. package/dist/core/auto-mode.js +9 -6
  89. package/dist/core/background-agent-store.d.ts +3 -3
  90. package/dist/core/canonical-json.d.ts +1 -1
  91. package/dist/core/canonical-json.js +2 -2
  92. package/dist/core/checkpoint-generation.d.ts +53 -0
  93. package/dist/core/checkpoint-generation.js +35 -0
  94. package/dist/core/checkpoint-queries.d.ts +180 -0
  95. package/dist/core/checkpoint-queries.js +272 -0
  96. package/dist/core/checkpoint-requirements.d.ts +19 -4
  97. package/dist/core/checkpoint-requirements.js +8 -14
  98. package/dist/core/checkpoint-store.d.ts +165 -72
  99. package/dist/core/checkpoint-store.js +79 -82
  100. package/dist/core/child-clamp-seats.d.ts +6 -0
  101. package/dist/core/child-clamp-seats.js +3 -16
  102. package/dist/core/compliance.d.ts +2 -2
  103. package/dist/core/context-edit.d.ts +6 -7
  104. package/dist/core/cross-boundary-taint.d.ts +11 -4
  105. package/dist/core/cross-boundary-taint.js +3 -3
  106. package/dist/core/decision-receipt.d.ts +37 -3
  107. package/dist/core/decision-receipt.js +19 -19
  108. package/dist/core/delegation-not-started.d.ts +6 -0
  109. package/dist/core/delegation-not-started.js +17 -0
  110. package/dist/core/effective-path-target.d.ts +1 -1
  111. package/dist/core/engine-attestation.d.ts +93 -0
  112. package/dist/core/engine-attestation.js +70 -0
  113. package/dist/core/engine-capabilities.d.ts +4 -1
  114. package/dist/core/engine-capabilities.js +1 -1
  115. package/dist/core/engine-notice.d.ts +45 -12
  116. package/dist/core/exec-output-tail.d.ts +1 -1
  117. package/dist/core/file-history-retention.d.ts +1 -1
  118. package/dist/core/file-history-store.d.ts +147 -21
  119. package/dist/core/file-history-store.js +58 -32
  120. package/dist/core/gate-fold.d.ts +1 -1
  121. package/dist/core/gate-fold.js +24 -11
  122. package/dist/core/gate-lanes.js +81 -68
  123. package/dist/core/gate-outcome.d.ts +40 -6
  124. package/dist/core/gate-outcome.js +56 -0
  125. package/dist/core/governance-codes.d.ts +17 -3
  126. package/dist/core/governance-codes.js +16 -0
  127. package/dist/core/hands-band.d.ts +1 -1
  128. package/dist/core/hooks.d.ts +21 -20
  129. package/dist/core/hooks.js +3 -1
  130. package/dist/core/host-floor.d.ts +128 -0
  131. package/dist/core/host-floor.js +206 -0
  132. package/dist/core/host-target.d.ts +84 -0
  133. package/dist/core/host-target.js +92 -0
  134. package/dist/core/image-downsample.d.ts +1 -1
  135. package/dist/core/lsp-diagnostics.d.ts +4 -4
  136. package/dist/core/lsp.d.ts +3 -3
  137. package/dist/core/mailbox-store.d.ts +4 -0
  138. package/dist/core/mcp-connection-pool.d.ts +18 -2
  139. package/dist/core/mcp-connection-pool.js +53 -6
  140. package/dist/core/mcp-failure.d.ts +23 -4
  141. package/dist/core/mcp-failure.js +26 -11
  142. package/dist/core/mcp-listing-drift.d.ts +10 -0
  143. package/dist/core/mcp-listing-drift.js +6 -0
  144. package/dist/core/mcp-server-link.d.ts +173 -0
  145. package/dist/core/mcp-server-link.js +127 -0
  146. package/dist/core/mcp-server-spec.d.ts +4 -2
  147. package/dist/core/mcp-session-end.d.ts +26 -0
  148. package/dist/core/mcp-session-end.js +29 -0
  149. package/dist/core/mcp-startup-request.d.ts +17 -0
  150. package/dist/core/mcp-startup-request.js +17 -0
  151. package/dist/core/mcp.d.ts +17 -13
  152. package/dist/core/mcp.js +240 -189
  153. package/dist/core/media-byte-cap.d.ts +1 -1
  154. package/dist/core/memory-engine/delegation-settlement.js +15 -24
  155. package/dist/core/memory-engine/engine.d.ts +9 -9
  156. package/dist/core/memory-engine/engine.js +4 -4
  157. package/dist/core/memory-engine/layout.d.ts +60 -8
  158. package/dist/core/memory-engine/layout.js +65 -6
  159. package/dist/core/memory-engine/provenance-wording.d.ts +1 -1
  160. package/dist/core/memory-engine/tools.js +4 -1
  161. package/dist/core/mode-policy.d.ts +1 -1
  162. package/dist/core/model-seat.d.ts +10 -3
  163. package/dist/core/mods/classic-events.d.ts +67 -0
  164. package/dist/core/mods/classic-events.js +1 -0
  165. package/dist/core/mods/dollar.d.ts +13 -0
  166. package/dist/core/mods/extension-call.d.ts +31 -0
  167. package/dist/core/mods/extension-call.js +43 -0
  168. package/dist/core/mods/kernel/dispatch.d.ts +20 -3
  169. package/dist/core/mods/kernel/dispatch.js +140 -69
  170. package/dist/core/mods/kernel/events.d.ts +47 -11
  171. package/dist/core/mods/kernel/events.js +66 -42
  172. package/dist/core/mods/kernel/index.d.ts +4 -4
  173. package/dist/core/mods/kernel/index.js +2 -2
  174. package/dist/core/mods/kernel/receive.d.ts +39 -5
  175. package/dist/core/mods/kernel/receive.js +290 -17
  176. package/dist/core/mods/kernel/registration.d.ts +33 -2
  177. package/dist/core/mods/kernel/registration.js +6 -7
  178. package/dist/core/mods/kernel/site-rules.d.ts +44 -16
  179. package/dist/core/mods/kernel/site-rules.js +24 -42
  180. package/dist/core/mods/spec-seats.d.ts +69 -0
  181. package/dist/core/mods/spec-seats.js +114 -0
  182. package/dist/core/mods/stations.d.ts +28 -8
  183. package/dist/core/mods/stations.js +29 -13
  184. package/dist/core/mods/tool-call.d.ts +79 -0
  185. package/dist/core/mods/tool-call.js +152 -0
  186. package/dist/core/namespaced-rule-name.d.ts +44 -24
  187. package/dist/core/namespaced-rule-name.js +50 -43
  188. package/dist/core/output-style.d.ts +1 -1
  189. package/dist/core/param-rule-reach.d.ts +15 -0
  190. package/dist/core/param-rule-reach.js +30 -0
  191. package/dist/core/parent-spec-seat.d.ts +13 -1
  192. package/dist/core/parent-spec-seat.js +6 -0
  193. package/dist/core/park-selfcheck.js +1 -0
  194. package/dist/core/pause-registry.d.ts +16 -5
  195. package/dist/core/pause-registry.js +6 -2
  196. package/dist/core/peer-channel.d.ts +70 -0
  197. package/dist/core/peer-channel.js +1 -0
  198. package/dist/core/permission-rule-consent.d.ts +30 -5
  199. package/dist/core/permission-rule-consent.js +147 -50
  200. package/dist/core/permission-rule-model.d.ts +245 -65
  201. package/dist/core/permission-rule-model.js +421 -107
  202. package/dist/core/permission-rule-org.d.ts +6 -2
  203. package/dist/core/permission-rule-org.js +7 -3
  204. package/dist/core/permission-rule-provider.d.ts +6 -2
  205. package/dist/core/permission-rule-provider.js +41 -11
  206. package/dist/core/permission-rule-store.d.ts +22 -26
  207. package/dist/core/permission-rule-store.js +12 -6
  208. package/dist/core/permission-rule-sync.d.ts +11 -2
  209. package/dist/core/permission-rule-sync.js +11 -3
  210. package/dist/core/permission-rule-syntax.d.ts +5 -4
  211. package/dist/core/permission-rule-syntax.js +2 -2
  212. package/dist/core/permission-rules.d.ts +53 -15
  213. package/dist/core/permission-rules.js +125 -100
  214. package/dist/core/persisted-rule-arms.d.ts +6 -4
  215. package/dist/core/persisted-rule-arms.js +10 -12
  216. package/dist/core/present-plan-tool.js +3 -1
  217. package/dist/core/principal-name.d.ts +20 -0
  218. package/dist/core/principal-name.js +22 -0
  219. package/dist/core/prompt-section-seat.js +4 -6
  220. package/dist/core/protocol-http-auth.d.ts +26 -5
  221. package/dist/core/protocol-http-auth.js +137 -4
  222. package/dist/core/protocol-naming.d.ts +2 -2
  223. package/dist/core/read-only-shell-table.d.ts +1 -1
  224. package/dist/core/read-only-shell.d.ts +1 -1
  225. package/dist/core/retired-keys.d.ts +16 -0
  226. package/dist/core/retired-keys.js +16 -4
  227. package/dist/core/rewrite-rejudge.d.ts +60 -0
  228. package/dist/core/rewrite-rejudge.js +36 -0
  229. package/dist/core/roles.d.ts +34 -3
  230. package/dist/core/roles.js +66 -53
  231. package/dist/core/rule-lane-reads.d.ts +20 -15
  232. package/dist/core/rule-lane-reads.js +45 -17
  233. package/dist/core/rule-offer-read.d.ts +53 -0
  234. package/dist/core/rule-offer-read.js +146 -0
  235. package/dist/core/rule-owner.d.ts +46 -0
  236. package/dist/core/rule-owner.js +29 -0
  237. package/dist/core/runner/advisor-instructions.d.ts +70 -0
  238. package/dist/core/runner/advisor-instructions.js +61 -0
  239. package/dist/core/runner/advisor-tool.d.ts +33 -0
  240. package/dist/core/runner/advisor-tool.js +112 -0
  241. package/dist/core/runner/announce-once-ledger.d.ts +18 -26
  242. package/dist/core/runner/announce-once-ledger.js +19 -46
  243. package/dist/core/runner/approval-feedback.js +6 -3
  244. package/dist/core/runner/assemble-result.d.ts +2 -1
  245. package/dist/core/runner/assemble-result.js +1 -1
  246. package/dist/core/runner/call-hook-stations.d.ts +3 -2
  247. package/dist/core/runner/caller-roster.d.ts +21 -2
  248. package/dist/core/runner/caller-roster.js +38 -0
  249. package/dist/core/runner/capability-withheld-seat.d.ts +5 -0
  250. package/dist/core/runner/capability-withheld-seat.js +24 -0
  251. package/dist/core/runner/classifier-ladder.d.ts +33 -13
  252. package/dist/core/runner/classifier-ladder.js +15 -14
  253. package/dist/core/runner/compaction-restate.d.ts +10 -6
  254. package/dist/core/runner/compaction-restate.js +9 -3
  255. package/dist/core/runner/construction-doors.js +3 -0
  256. package/dist/core/runner/contracts.d.ts +40 -33
  257. package/dist/core/runner/conversation-segment.d.ts +28 -0
  258. package/dist/core/runner/conversation-segment.js +42 -0
  259. package/dist/core/runner/cross-boundary-lane.d.ts +21 -16
  260. package/dist/core/runner/cross-boundary-lane.js +58 -34
  261. package/dist/core/runner/decide-continuation.d.ts +7 -4
  262. package/dist/core/runner/decide-continuation.js +2 -2
  263. package/dist/core/runner/denial-limit-arms.d.ts +4 -4
  264. package/dist/core/runner/denial-limit-arms.js +1 -1
  265. package/dist/core/runner/derived-route-fallback.d.ts +24 -24
  266. package/dist/core/runner/derived-route-fallback.js +9 -7
  267. package/dist/core/runner/file-history-request.d.ts +18 -0
  268. package/dist/core/runner/file-history-request.js +21 -13
  269. package/dist/core/runner/file-history-restore.d.ts +45 -0
  270. package/dist/core/runner/file-history-restore.js +46 -0
  271. package/dist/core/runner/gate-exit.d.ts +9 -3
  272. package/dist/core/runner/gate-exit.js +11 -5
  273. package/dist/core/runner/image.d.ts +7 -17
  274. package/dist/core/runner/image.js +9 -60
  275. package/dist/core/runner/initial-run-state.js +1 -1
  276. package/dist/core/runner/permission-rule-lanes.d.ts +6 -6
  277. package/dist/core/runner/permission-rule-lanes.js +38 -15
  278. package/dist/core/runner/person-path-rows.d.ts +12 -9
  279. package/dist/core/runner/person-path-rows.js +19 -8
  280. package/dist/core/runner/prepare-advisor.d.ts +63 -0
  281. package/dist/core/runner/prepare-advisor.js +77 -0
  282. package/dist/core/runner/prepare-ask-lane.d.ts +2 -2
  283. package/dist/core/runner/prepare-ask-lane.js +5 -2
  284. package/dist/core/runner/prepare-caps-and-workflow.d.ts +4 -6
  285. package/dist/core/runner/prepare-caps-and-workflow.js +5 -4
  286. package/dist/core/runner/prepare-config-doors.d.ts +31 -38
  287. package/dist/core/runner/prepare-config-doors.js +57 -34
  288. package/dist/core/runner/prepare-defer-classify.d.ts +4 -3
  289. package/dist/core/runner/prepare-defer-classify.js +7 -8
  290. package/dist/core/runner/prepare-delegation-surface.d.ts +2 -2
  291. package/dist/core/runner/prepare-delegation-surface.js +1 -1
  292. package/dist/core/runner/prepare-file-history.d.ts +48 -8
  293. package/dist/core/runner/prepare-file-history.js +41 -73
  294. package/dist/core/runner/prepare-gate-stations.d.ts +2 -5
  295. package/dist/core/runner/prepare-gate-stations.js +12 -8
  296. package/dist/core/runner/prepare-hands-readface.d.ts +2 -8
  297. package/dist/core/runner/prepare-hands-readface.js +15 -14
  298. package/dist/core/runner/prepare-inherited-gate.d.ts +11 -7
  299. package/dist/core/runner/prepare-inherited-gate.js +8 -6
  300. package/dist/core/runner/prepare-memory-engine-session.js +1 -1
  301. package/dist/core/runner/prepare-park-ask.js +12 -12
  302. package/dist/core/runner/prepare-policy-chain.d.ts +7 -4
  303. package/dist/core/runner/prepare-policy-chain.js +68 -81
  304. package/dist/core/runner/prepare-project-context.d.ts +5 -2
  305. package/dist/core/runner/prepare-project-context.js +6 -3
  306. package/dist/core/runner/prepare-prompt-assembly.d.ts +5 -7
  307. package/dist/core/runner/prepare-prompt-assembly.js +10 -8
  308. package/dist/core/runner/prepare-prompt-inputs.d.ts +11 -9
  309. package/dist/core/runner/prepare-prompt-inputs.js +4 -6
  310. package/dist/core/runner/prepare-protocol-tools.d.ts +4 -2
  311. package/dist/core/runner/prepare-protocol-tools.js +5 -4
  312. package/dist/core/runner/prepare-safety-scan.d.ts +9 -12
  313. package/dist/core/runner/prepare-safety-scan.js +8 -23
  314. package/dist/core/runner/prepare-suspend-saga.d.ts +2 -0
  315. package/dist/core/runner/prepare-suspend-saga.js +5 -6
  316. package/dist/core/runner/prepare-task.d.ts +1 -1
  317. package/dist/core/runner/prepare-task.js +41 -35
  318. package/dist/core/runner/prepare-tool-disclosure-mount.d.ts +7 -4
  319. package/dist/core/runner/prepare-tool-disclosure-mount.js +24 -18
  320. package/dist/core/runner/prepare-turn-wiring.d.ts +0 -4
  321. package/dist/core/runner/prepare-turn-wiring.js +2 -7
  322. package/dist/core/runner/prepare-wiring-manifest.d.ts +11 -4
  323. package/dist/core/runner/prepare-wiring-manifest.js +3 -3
  324. package/dist/core/runner/resume-admission.js +1 -1
  325. package/dist/core/runner/resume-apply.js +11 -12
  326. package/dist/core/runner/resume-checkpoint-screen.js +3 -0
  327. package/dist/core/runner/resume-claim.d.ts +4 -2
  328. package/dist/core/runner/resume-claim.js +15 -8
  329. package/dist/core/runner/resume-policy-outcome.js +1 -1
  330. package/dist/core/runner/retired-runner-deps.js +2 -1
  331. package/dist/core/runner/rewind-files.d.ts +15 -0
  332. package/dist/core/runner/rewind-files.js +132 -0
  333. package/dist/core/runner/run-attachment-seats.js +2 -2
  334. package/dist/core/runner/run-brain-sinks.d.ts +4 -1
  335. package/dist/core/runner/run-brain-sinks.js +4 -2
  336. package/dist/core/runner/run-compaction-machinery.d.ts +1 -1
  337. package/dist/core/runner/run-compaction-machinery.js +2 -12
  338. package/dist/core/runner/run-git-lane.d.ts +1 -0
  339. package/dist/core/runner/run-harness-handlers.js +14 -7
  340. package/dist/core/runner/run-leg.d.ts +1 -1
  341. package/dist/core/runner/run-leg.js +43 -18
  342. package/dist/core/runner/run-settle-and-teardown.js +3 -2
  343. package/dist/core/runner/run-telemetry-and-budget-seats.js +1 -1
  344. package/dist/core/runner/run-turn-boundary.d.ts +1 -0
  345. package/dist/core/runner/run-turn-boundary.js +15 -22
  346. package/dist/core/runner/runtask.d.ts +3 -0
  347. package/dist/core/runner/runtask.js +8 -9
  348. package/dist/core/runner/session-read-file-states.d.ts +15 -0
  349. package/dist/core/runner/session-read-file-states.js +28 -0
  350. package/dist/core/runner/session-rule-policy.d.ts +22 -21
  351. package/dist/core/runner/session-rule-policy.js +17 -31
  352. package/dist/core/runner/shell-env-withheld.d.ts +33 -0
  353. package/dist/core/runner/shell-env-withheld.js +51 -0
  354. package/dist/core/runner/side-call-account.d.ts +32 -8
  355. package/dist/core/runner/side-call-account.js +23 -1
  356. package/dist/core/runner/skills-seat.js +6 -2
  357. package/dist/core/runner/stream-settle-backstop.js +1 -1
  358. package/dist/core/runner/strict-output-schema.d.ts +1 -1
  359. package/dist/core/runner/sub-agent-deny-lists.js +4 -6
  360. package/dist/core/runner/synthetic-tools.d.ts +16 -13
  361. package/dist/core/runner/synthetic-tools.js +8 -3
  362. package/dist/core/runner/tool-disclosure.d.ts +10 -12
  363. package/dist/core/runner/tool-disclosure.js +3 -4
  364. package/dist/core/runner/tool-end-body.d.ts +1 -1
  365. package/dist/core/runner/tool-end-body.js +10 -9
  366. package/dist/core/runner/tool-face-overlay.d.ts +2 -1
  367. package/dist/core/runner/tool-face-overlay.js +17 -1
  368. package/dist/core/runner/tool-not-executed.d.ts +5 -0
  369. package/dist/core/runner/tool-not-executed.js +11 -0
  370. package/dist/core/runner/tool-occurrence.d.ts +8 -0
  371. package/dist/core/runner/tool-occurrence.js +7 -0
  372. package/dist/core/runner/tool-progress-lane.d.ts +2 -2
  373. package/dist/core/runner/tool-turn-repair-seat.d.ts +3 -2
  374. package/dist/core/runner/turn-attachments.d.ts +91 -80
  375. package/dist/core/runner/turn-attachments.js +62 -37
  376. package/dist/core/runner-deps.d.ts +42 -42
  377. package/dist/core/runtime-caps.d.ts +4 -4
  378. package/dist/core/safety-axis-vocab.d.ts +6 -4
  379. package/dist/core/safety-axis-vocab.js +6 -5
  380. package/dist/core/safety-merge-corpus.js +26 -2
  381. package/dist/core/same-plain-value.d.ts +40 -0
  382. package/dist/core/same-plain-value.js +49 -0
  383. package/dist/core/scheduler.d.ts +1 -1
  384. package/dist/core/secret-env.d.ts +26 -3
  385. package/dist/core/secret-env.js +44 -8
  386. package/dist/core/select-model.js +3 -3
  387. package/dist/core/sensitive-path-policy.d.ts +1 -1
  388. package/dist/core/sensitive-path-policy.js +1 -1
  389. package/dist/core/session-policy-store.d.ts +102 -35
  390. package/dist/core/session-policy-store.js +210 -48
  391. package/dist/core/session-reconcile.d.ts +2 -2
  392. package/dist/core/session-store.d.ts +106 -37
  393. package/dist/core/session-store.js +165 -91
  394. package/dist/core/session.d.ts +101 -57
  395. package/dist/core/session.js +53 -0
  396. package/dist/core/shared-memory/tools.js +3 -1
  397. package/dist/core/shared-memory/types.d.ts +1 -1
  398. package/dist/core/shell-read-silence.d.ts +11 -12
  399. package/dist/core/shell-read-silence.js +9 -5
  400. package/dist/core/shell-run-candidates.js +3 -1
  401. package/dist/core/shell-wrapper-projection.js +1 -1
  402. package/dist/core/shell-wrapper-table.d.ts +14 -7
  403. package/dist/core/shell-wrapper-table.js +5 -4
  404. package/dist/core/side-query.d.ts +10 -0
  405. package/dist/core/side-query.js +15 -1
  406. package/dist/core/skill-grant.d.ts +7 -2
  407. package/dist/core/skill-grant.js +5 -0
  408. package/dist/core/skills-directory.js +6 -2
  409. package/dist/core/store-contracts/checkpoint-store-contract.d.ts +11 -1
  410. package/dist/core/store-contracts/checkpoint-store-contract.js +168 -3
  411. package/dist/core/store-contracts/file-history-store-contract.js +74 -4
  412. package/dist/core/store-contracts/peer-directory-contract.d.ts +7 -2
  413. package/dist/core/store-contracts/peer-directory-contract.js +14 -2
  414. package/dist/core/store-contracts/session-policy-store-contract.d.ts +7 -0
  415. package/dist/core/store-contracts/session-policy-store-contract.js +130 -0
  416. package/dist/core/store-contracts/session-repo-contract.js +176 -0
  417. package/dist/core/store-contracts/session-store-contract.d.ts +6 -8
  418. package/dist/core/store-contracts/session-store-contract.js +361 -51
  419. package/dist/core/store-contracts/workflow-journal-store-contract.js +26 -1
  420. package/dist/core/stub-env.d.ts +2 -0
  421. package/dist/core/stub-env.js +1 -0
  422. package/dist/core/surrogate-safe-slice.d.ts +3 -3
  423. package/dist/core/synthetic-read-verdict.js +3 -3
  424. package/dist/core/task-event.d.ts +42 -8
  425. package/dist/core/task-notification.d.ts +19 -15
  426. package/dist/core/task-registry-agent.d.ts +4 -4
  427. package/dist/core/task-registry-shared.d.ts +4 -4
  428. package/dist/core/task-registry-shared.js +1 -0
  429. package/dist/core/task-registry.d.ts +13 -4
  430. package/dist/core/task-registry.js +14 -2
  431. package/dist/core/task-result.d.ts +21 -3
  432. package/dist/core/task-spec.d.ts +69 -64
  433. package/dist/core/task-stream.d.ts +6 -6
  434. package/dist/core/task-tool-shape.d.ts +4 -4
  435. package/dist/core/tighten-task-spec.d.ts +1 -1
  436. package/dist/core/tighten-task-spec.js +2 -1
  437. package/dist/core/tool-catalog-entries.d.ts +36 -2
  438. package/dist/core/tool-catalog-entries.js +69 -43
  439. package/dist/core/tool-check-reading.d.ts +11 -0
  440. package/dist/core/tool-check-reading.js +11 -6
  441. package/dist/core/tool-conformance.js +1 -0
  442. package/dist/core/tool-errors.d.ts +2 -2
  443. package/dist/core/tool-face-reader.js +5 -3
  444. package/dist/core/tool-face.d.ts +21 -2
  445. package/dist/core/tool-face.js +1 -1
  446. package/dist/core/tool-model-gate.d.ts +5 -5
  447. package/dist/core/tool-name-aliases.d.ts +29 -8
  448. package/dist/core/tool-name-aliases.js +22 -4
  449. package/dist/core/tool-name-readings.d.ts +10 -43
  450. package/dist/core/tool-name-readings.js +2 -11
  451. package/dist/core/tool-policy.d.ts +85 -196
  452. package/dist/core/tool-policy.js +150 -175
  453. package/dist/core/tool-registry.d.ts +14 -7
  454. package/dist/core/tool-registry.js +17 -7
  455. package/dist/core/tool-result-store.js +5 -1
  456. package/dist/core/tool-roster.d.ts +57 -33
  457. package/dist/core/tool-roster.js +56 -68
  458. package/dist/core/tool-spec-members.js +8 -3
  459. package/dist/core/tool-spec.d.ts +53 -31
  460. package/dist/core/tools.js +51 -10
  461. package/dist/core/trace.d.ts +6 -2
  462. package/dist/core/types.d.ts +1 -1
  463. package/dist/core/untrusted-egress.d.ts +1 -1
  464. package/dist/core/untrusted-text.d.ts +1 -1
  465. package/dist/core/user-attachment.d.ts +8 -1
  466. package/dist/core/user-attachment.js +64 -4
  467. package/dist/core/warm-resume.d.ts +1 -1
  468. package/dist/core/wiring-manifest.d.ts +58 -0
  469. package/dist/core/wiring-manifest.js +14 -5
  470. package/dist/core/workflow-journal-store.d.ts +62 -0
  471. package/dist/core/workflow-journal-store.js +78 -2
  472. package/dist/core/workflow-run-store.d.ts +6 -0
  473. package/dist/core/workflow-run-store.js +2 -0
  474. package/dist/engine/compaction/compaction.d.ts +9 -9
  475. package/dist/engine/compaction/compaction.js +3 -2
  476. package/dist/engine/execution-env/node-execution-env.d.ts +26 -8
  477. package/dist/engine/execution-env/node-execution-env.js +54 -24
  478. package/dist/engine/harness/agent-harness.d.ts +39 -9
  479. package/dist/engine/harness/agent-harness.js +87 -33
  480. package/dist/engine/harness/types.d.ts +58 -9
  481. package/dist/engine/harness/types.js +12 -1
  482. package/dist/engine/llm/types.d.ts +36 -19
  483. package/dist/engine/llm/validation.d.ts +4 -1
  484. package/dist/engine/llm/validation.js +13 -1
  485. package/dist/engine/loop/agent-loop.d.ts +23 -1
  486. package/dist/engine/loop/agent-loop.js +26 -34
  487. package/dist/engine/loop/types.d.ts +31 -19
  488. package/dist/engine/lsp/node-lsp-manager.d.ts +2 -2
  489. package/dist/engine/session/memory-repo.d.ts +18 -12
  490. package/dist/engine/session/memory-repo.js +24 -9
  491. package/dist/engine/session/parent-chain-guard.d.ts +3 -2
  492. package/dist/engine/session/parent-chain-guard.js +1 -1
  493. package/dist/engine/session/repo-utils.d.ts +32 -3
  494. package/dist/engine/session/repo-utils.js +50 -5
  495. package/dist/index.d.ts +47 -23
  496. package/dist/index.js +35 -17
  497. package/dist/internal/harness-types.d.ts +1 -1
  498. package/dist/internal/harness.d.ts +3 -3
  499. package/dist/internal/harness.js +2 -2
  500. package/dist/internal/llm.d.ts +2 -2
  501. package/dist/internal/llm.js +1 -1
  502. package/dist/orchestration/goal.js +2 -2
  503. package/dist/orchestration/run-workflow-tool.d.ts +8 -6
  504. package/dist/orchestration/run-workflow-tool.js +10 -6
  505. package/dist/orchestration/workflow-size-guideline.d.ts +4 -4
  506. package/dist/orchestration/workflow-types.d.ts +18 -0
  507. package/dist/orchestration/workflow-types.js +6 -0
  508. package/dist/orchestration/workflow.d.ts +5 -13
  509. package/dist/orchestration/workflow.js +57 -49
  510. package/dist/prompt-assembly/artifact.d.ts +2 -2
  511. package/dist/prompt-assembly/artifact.js +5 -3
  512. package/dist/prompt-assembly/assemble.d.ts +3 -2
  513. package/dist/prompt-assembly/assemble.js +1 -1
  514. package/dist/prompt-assembly/catalog/schema.d.ts +43 -12
  515. package/dist/prompt-assembly/catalog/schema.js +34 -2
  516. package/dist/prompt-assembly/catalog/sections.js +0 -1
  517. package/dist/prompt-assembly/composer.d.ts +3 -1
  518. package/dist/prompt-assembly/composer.js +1 -1
  519. package/dist/prompt-assembly/event-registry.js +2 -0
  520. package/dist/prompt-assembly/overlay.js +3 -3
  521. package/dist/prompt-assembly/renderers.d.ts +1 -1
  522. package/dist/prompt-assembly/renderers.js +0 -3
  523. package/dist/prompt-assembly/role-base.d.ts +15 -0
  524. package/dist/prompt-assembly/role-base.js +9 -0
  525. package/dist/prompt-assembly/select.d.ts +39 -14
  526. package/dist/prompt-assembly/select.js +47 -16
  527. package/dist/prompt-assembly/sugar.d.ts +17 -11
  528. package/dist/prompt-assembly/sugar.js +8 -3
  529. package/dist/prompt-assembly/tool-catalog.d.ts +39 -2
  530. package/dist/prompt-assembly/tool-catalog.js +117 -4
  531. package/dist/prompt-assembly/turn-snapshot.d.ts +4 -10
  532. package/dist/prompt-assembly/turn-snapshot.js +0 -3
  533. package/dist/prompt-assembly/types.d.ts +0 -7
  534. package/dist/prompts/default.d.ts +14 -14
  535. package/dist/scenarios/full-body.d.ts +15 -15
  536. package/dist/scenarios/full-body.js +4 -3
  537. package/dist/shell/lex.js +10 -1
  538. package/dist/stores/file/adoption/adopt.d.ts +4 -3
  539. package/dist/stores/file/adoption/adopt.js +27 -33
  540. package/dist/stores/file/adoption/marker.d.ts +6 -13
  541. package/dist/stores/file/adoption/marker.js +9 -17
  542. package/dist/stores/file/checkpoint-store.d.ts +24 -0
  543. package/dist/stores/file/checkpoint-store.js +45 -7
  544. package/dist/stores/file/file-history-store.d.ts +20 -19
  545. package/dist/stores/file/file-history-store.js +157 -141
  546. package/dist/stores/file/fs-atomic.d.ts +15 -0
  547. package/dist/stores/file/fs-atomic.js +89 -14
  548. package/dist/stores/file/index.d.ts +1 -1
  549. package/dist/stores/file/index.js +2 -1
  550. package/dist/stores/file/mailbox-store.d.ts +3 -0
  551. package/dist/stores/file/mailbox-store.js +3 -1
  552. package/dist/stores/file/permission-rule-adopt.d.ts +1 -1
  553. package/dist/stores/file/permission-rule-adopt.js +18 -18
  554. package/dist/stores/file/permission-rule-store.d.ts +18 -2
  555. package/dist/stores/file/permission-rule-store.js +31 -18
  556. package/dist/stores/file/session-policy-store.d.ts +3 -3
  557. package/dist/stores/file/session-store.d.ts +54 -16
  558. package/dist/stores/file/session-store.js +114 -85
  559. package/dist/stores/file/workflow-journal-store.d.ts +10 -4
  560. package/dist/stores/file/workflow-journal-store.js +28 -13
  561. package/dist/tools/artifact/artifact-text.d.ts +1 -1
  562. package/dist/tools/artifact/artifact-tool.js +5 -3
  563. package/dist/tools/fs/bash-program-position.d.ts +19 -2
  564. package/dist/tools/fs/bash-program-position.js +56 -9
  565. package/dist/tools/fs/bash-readonly-classifier.d.ts +3 -3
  566. package/dist/tools/fs/fs-bash.d.ts +2 -2
  567. package/dist/tools/fs/fs-bash.js +8 -6
  568. package/dist/tools/fs/fs-glob.d.ts +86 -0
  569. package/dist/tools/fs/fs-glob.js +226 -0
  570. package/dist/tools/fs/fs-read.js +14 -14
  571. package/dist/tools/fs/fs-search-tools.js +7 -7
  572. package/dist/tools/fs/fs-shared.d.ts +8 -8
  573. package/dist/tools/fs/gh-rate-limit.d.ts +1 -1
  574. package/dist/tools/fs/notebook.d.ts +2 -2
  575. package/dist/tools/fs/pattern-kill-guard.d.ts +22 -0
  576. package/dist/tools/fs/pattern-kill-guard.js +397 -0
  577. package/dist/tools/fs/pdf.d.ts +9 -6
  578. package/dist/tools/fs/pdf.js +3 -3
  579. package/dist/tools/fs/program-read-model.d.ts +57 -7
  580. package/dist/tools/fs/program-read-model.js +11 -1
  581. package/dist/tools/fs/program-read-model.rows.js +78 -21
  582. package/dist/tools/fs/read-deny-home.js +3 -2
  583. package/dist/tools/fs/read-deny.d.ts +29 -7
  584. package/dist/tools/fs/read-deny.js +63 -22
  585. package/dist/tools/fs/removal-targets.d.ts +18 -8
  586. package/dist/tools/fs/removal-targets.js +47 -20
  587. package/dist/tools/fs/safety.d.ts +9 -9
  588. package/dist/tools/fs/search.d.ts +16 -6
  589. package/dist/tools/fs/search.js +20 -26
  590. package/dist/tools/fs/shell-read-argv.js +89 -12
  591. package/dist/tools/fs/shell-read-bindings.d.ts +31 -0
  592. package/dist/tools/fs/shell-read-bindings.js +41 -0
  593. package/dist/tools/fs/shell-read-check.js +12 -20
  594. package/dist/tools/fs/shell-read-environment.d.ts +5 -1
  595. package/dist/tools/fs/shell-read-environment.js +3 -2
  596. package/dist/tools/fs/shell-read-establish.d.ts +15 -0
  597. package/dist/tools/fs/shell-read-establish.js +19 -20
  598. package/dist/tools/fs/shell-read-judge.d.ts +4 -0
  599. package/dist/tools/fs/shell-read-judge.js +5 -2
  600. package/dist/tools/fs/shell-read-plan.js +24 -16
  601. package/dist/tools/fs/shell-read-start.d.ts +6 -1
  602. package/dist/tools/fs/shell-read-write-targets.d.ts +5 -1
  603. package/dist/tools/fs/shell-read-write-targets.js +2 -3
  604. package/dist/tools/fs/shell-reentry-text.d.ts +9 -0
  605. package/dist/tools/fs/shell-reentry-text.js +40 -2
  606. package/dist/tools/loop-tick.d.ts +2 -2
  607. package/dist/tools/scheduler-tools.js +5 -1
  608. package/dist/tools/task-list.d.ts +7 -7
  609. package/dist/tools/task-list.js +5 -1
  610. package/dist/tools/todo.js +65 -64
  611. package/dist/tools/web.d.ts +20 -15
  612. package/dist/tools/web.js +55 -69
  613. package/dist/tools/worktree.d.ts +3 -3
  614. package/dist/tools/worktree.js +3 -1
  615. package/package.json +1 -1
  616. package/test/export-surface.snapshot.json +5894 -5638
  617. package/wire-changes/core@7.55.0.json +3318 -0
  618. package/wire-changes/core@7.56.0.json +3891 -0
  619. package/wire-changes/mods-kernel@7.56.0.json +303 -0
  620. package/dist/core/store-contracts/session-store-incarnation-contract.d.ts +0 -39
  621. package/dist/core/store-contracts/session-store-incarnation-contract.js +0 -95
@@ -0,0 +1,180 @@
1
+ import type { Checkpoint, CheckpointSummary, CheckpointToken } from "./checkpoint-store.js";
2
+ import { facetOf, type GateKind } from "./pause-registry.js";
3
+ /**
4
+ * The page bounds of the two listing faces: a query without `limit` reads `default` rows, an explicit `limit` is an integer in
5
+ * 1..`max`. A session page holds whole rows (each carries its parked state), an overdue page holds summaries — hence the smaller
6
+ * session bound.
7
+ */
8
+ export declare const CHECKPOINT_LIST_LIMITS: Readonly<{
9
+ overdue: Readonly<{
10
+ readonly default: 100;
11
+ readonly max: 500;
12
+ }>;
13
+ session: Readonly<{
14
+ readonly default: 100;
15
+ readonly max: 100;
16
+ }>;
17
+ }>;
18
+ /** A row's deadline semantic — {@link facetOf}'s answer for its gate (`A` approval SLA, `B` abandonment TTL, `-` the non-gate park). */
19
+ export type CheckpointFacet = ReturnType<typeof facetOf>;
20
+ type CheckpointRowStatus = Checkpoint["status"];
21
+ /** One page of a listing face: the rows, and the cursor of the next page — present exactly when more rows match after these. */
22
+ export interface CheckpointPage<R, C> {
23
+ readonly rows: readonly R[];
24
+ /** Pass it as the next query's `after`. The store mints it from its own order key; a caller never builds one. */
25
+ readonly next?: C;
26
+ }
27
+ /** The order key of an overdue page: the row's deadline (`-Infinity` for a deadline that is not a finite number), then its token. */
28
+ export interface CheckpointOverdueCursor {
29
+ readonly deadline: number;
30
+ readonly token: CheckpointToken;
31
+ }
32
+ /**
33
+ * What {@link import("./checkpoint-store.js").CheckpointStore.listOverdue} is asked for: the PENDING rows of every scope whose
34
+ * deadline has passed `cutoff` ({@link checkpointDeadlinePassed}) and whose gate reads as `facet` ({@link facetOf}, the card
35
+ * overrides included — a question parked under an approval gate kind is `B`). Ordered by deadline, then token, ascending.
36
+ * A deployment's sweep reads one facet at a time and disposes each row through the row CAS verbs (`expire`, or a resume that
37
+ * denies): `A` rows are approvals whose deadline denies, `B` and `-` rows are abandoned at theirs.
38
+ */
39
+ export interface CheckpointOverdueQuery {
40
+ /** Epoch ms, a finite number. */
41
+ cutoff: number;
42
+ facet: CheckpointFacet;
43
+ after?: CheckpointOverdueCursor;
44
+ /** At most this many rows, an integer in 1..{@link CHECKPOINT_LIST_LIMITS}`.overdue.max`; absent = the default. */
45
+ limit?: number;
46
+ }
47
+ /** The order key of a session page: the row's `createdAt` (`-Infinity` for one that is not a finite number), then its token. */
48
+ export interface CheckpointSessionCursor {
49
+ readonly createdAt: number;
50
+ readonly token: CheckpointToken;
51
+ }
52
+ /**
53
+ * What {@link import("./checkpoint-store.js").CheckpointStore.listBySession} is asked for: the rows of ONE session, of every
54
+ * status unless `status` says one, narrowed by the members present. Ordered by `createdAt`, then token — oldest first unless
55
+ * `order` says `newest`. "The session's pending row of these gate kinds, newest first" is `{ status: "pending", gateKinds,
56
+ * order: "newest", limit: 1 }`; "the rows that parked this tool call" is `{ toolCallId }`; "does the session hold an expired
57
+ * row" is `{ status: "expired", limit: 1 }`.
58
+ */
59
+ export interface CheckpointSessionQuery {
60
+ /** The session id (non-empty). */
61
+ sessionId: string;
62
+ /** Only the rows filed in this scope. */
63
+ scope?: string;
64
+ /** Only the rows in this status. Absent = every status. */
65
+ status?: CheckpointRowStatus;
66
+ /** Only the rows parked on one of these gate kinds; an empty list matches no row. Absent = every kind. */
67
+ gateKinds?: readonly GateKind[];
68
+ /** Only the rows whose pending action is a `tool_approval` of this tool call (a park with no tool call never matches). */
69
+ toolCallId?: string;
70
+ /** Only the rows created at or after this epoch ms (a finite number). */
71
+ createdSince?: number;
72
+ order?: "oldest" | "newest";
73
+ after?: CheckpointSessionCursor;
74
+ /** At most this many rows, an integer in 1..{@link CHECKPOINT_LIST_LIMITS}`.session.max`; absent = the default. */
75
+ limit?: number;
76
+ }
77
+ /**
78
+ * One row of a session page. `row` is a readable row (its members match the query and every member the face judged is well
79
+ * formed). `unreadable` is a row of THIS session that matches every filter the store could judge but whose stored shape the face
80
+ * cannot read — a token member other than the key it is filed under, a scope that is not a string, a status outside the three
81
+ * words, a gate with no registered kind, a pending action with no kind, a tool approval with no tool call id, a `createdAt` that
82
+ * is not a finite number, a state that is not an object: it is answered rather than skipped (an unreadable row is not an absent
83
+ * one, and a consumer that takes its token to `get` meets the damage loudly) and rather than failing the page (one damaged row
84
+ * does not hide the readable rows beside it). The store discloses it through its own seat. Its `token` is the key the store
85
+ * files it under.
86
+ */
87
+ export type CheckpointRowRead = {
88
+ readonly kind: "row";
89
+ readonly checkpoint: Checkpoint;
90
+ } | {
91
+ readonly kind: "unreadable";
92
+ readonly token: CheckpointToken;
93
+ /** The stored scope, or `null` when it is not a string. */
94
+ readonly scope: string | null;
95
+ readonly sessionId: string;
96
+ /** The status as stored (a word outside the three is part of the damage). */
97
+ readonly status: string;
98
+ /** The stored `createdAt`, or `null` when it is not a finite number. */
99
+ readonly createdAt: number | null;
100
+ /** What could not be read, naming the member by its shape (never its value). */
101
+ readonly problem: string;
102
+ };
103
+ /**
104
+ * The guard of {@link import("./checkpoint-store.js").CheckpointStore.deleteSessionCheckpoints}: the rows are deleted only when the
105
+ * session's own row exists and is owned by `owner` — compared null-safe (`null` = the anonymous session, and it matches only an
106
+ * anonymous one). No session row, or another owner, deletes nothing and answers `0`. `owner` is a principal name or `null`: a
107
+ * blank string names nobody and is refused.
108
+ */
109
+ export interface CheckpointDeleteGuard {
110
+ readonly owner: string | null;
111
+ }
112
+ /** {@link readCheckpointOverdueQuery}'s answer: the members as read, the default limit filled in. */
113
+ export interface CheckpointOverdueQueryReading {
114
+ readonly cutoff: number;
115
+ readonly facet: CheckpointFacet;
116
+ readonly after?: CheckpointOverdueCursor;
117
+ readonly limit: number;
118
+ }
119
+ /** {@link readCheckpointSessionQuery}'s answer: the members as read, the default order and limit filled in. */
120
+ export interface CheckpointSessionQueryReading {
121
+ readonly sessionId: string;
122
+ readonly scope?: string;
123
+ readonly status?: CheckpointRowStatus;
124
+ readonly gateKinds?: readonly GateKind[];
125
+ readonly toolCallId?: string;
126
+ readonly createdSince?: number;
127
+ readonly order: "oldest" | "newest";
128
+ readonly after?: CheckpointSessionCursor;
129
+ readonly limit: number;
130
+ }
131
+ /** The one reading of a {@link CheckpointOverdueQuery} for every store that implements `listOverdue`. A bad value is refused,
132
+ * never mapped to a default: `config.invalid_argument`. */
133
+ export declare function readCheckpointOverdueQuery(raw: unknown): CheckpointOverdueQueryReading;
134
+ /** The one reading of a {@link CheckpointSessionQuery} for every store that implements `listBySession`. A bad value is refused,
135
+ * never mapped to a default: `config.invalid_argument`. */
136
+ export declare function readCheckpointSessionQuery(raw: unknown): CheckpointSessionQueryReading;
137
+ /** The guard's one reading (the delete is irreversible, so a guard that is not exactly `{ owner: <a principal name> | null }` is refused). */
138
+ export declare function readCheckpointDeleteGuard(sessionId: unknown, raw: unknown): {
139
+ readonly sessionId: string;
140
+ readonly owner: string | null;
141
+ };
142
+ /** Does the session's head admit the delete: a row exists and its owner equals the guard's, null-safe. */
143
+ export declare function deleteGuardAdmits(head: {
144
+ readonly owner: string | null;
145
+ } | undefined, owner: string | null): boolean;
146
+ /**
147
+ * `deleteSessionCheckpoints` over a store's rows, for both first-party stores: the guard read, the session's rows taken as they stand when
148
+ * the call starts — BEFORE the head read, so a row put while it is awaited (another generation of the id, under another owner) is
149
+ * never one of them — the guard judged on the head, then each taken row handed to `remove`, which deletes it only while it is still
150
+ * that row and answers whether it did. Answers the count.
151
+ */
152
+ export declare function deleteSessionRowsAtStart(rows: Iterable<readonly [string, Checkpoint]>, sessionId: unknown, guard: unknown, headOf: (sessionId: string) => Promise<{
153
+ readonly owner: string | null;
154
+ } | undefined>, remove: (token: string, row: Checkpoint) => boolean | Promise<boolean>): Promise<number>;
155
+ /**
156
+ * Has a row's deadline passed `cutoff`? A row with no deadline never has; a deadline that is not a finite number always has —
157
+ * a bound nobody can evaluate is not a bound, and leaving it would keep the row pending forever (core sanitizes its own mints,
158
+ * but rows also come from other backends and older engines, and a JSON-held `NaN` reads back as `null`). The two `reap` verbs and
159
+ * {@link selectOverduePage} read this one rule.
160
+ */
161
+ export declare function checkpointDeadlinePassed(deadline: number | null | undefined, cutoff: number): boolean;
162
+ /**
163
+ * The overdue page over a store's rows (`[key, row]` pairs — the key is the authoritative token): pending ∧
164
+ * {@link checkpointDeadlinePassed} ∧ `facetOf(gate) === facet`, after the cursor, ordered (deadline key, token) ascending, filled up
165
+ * to `limit` with the rows whose summary `project` mints. A candidate whose shape the face cannot read, or whose summary cannot be
166
+ * projected, is left out and disclosed (`disclose` gets one sentence per such row, on every call) and the page fills on from the
167
+ * next candidate; only the rows of the page are projected. `next` is present when a candidate remains after the page's last row
168
+ * (a page after it can come back shorter, even empty, when every remaining candidate is damaged).
169
+ */
170
+ export declare function selectOverduePage(rows: Iterable<readonly [string, Checkpoint]>, query: CheckpointOverdueQueryReading, project: (cp: Checkpoint) => CheckpointSummary, disclose?: (sentence: string) => void): CheckpointPage<CheckpointSummary, CheckpointOverdueCursor>;
171
+ /**
172
+ * The session page over a store's rows (`[key, row]` pairs — the key is the authoritative token): the session's rows narrowed by
173
+ * the query's members, after the cursor, ordered (createdAt key, token) in the query's order, cut at `limit` before anything is
174
+ * copied (`clone` runs for the page's readable rows only). A filter that reads a damaged member cannot exclude the row, so a row of
175
+ * this session that no readable filter excludes and that carries damage is answered `unreadable` (and disclosed); a row whose
176
+ * session id is not a string is attributable to no session — left out and disclosed. `next` is present exactly when more rows
177
+ * match after the page.
178
+ */
179
+ export declare function selectSessionPage(rows: Iterable<readonly [string, Checkpoint]>, query: CheckpointSessionQueryReading, clone: (cp: Checkpoint) => Checkpoint, disclose?: (sentence: string) => void): CheckpointPage<CheckpointRowRead, CheckpointSessionCursor>;
180
+ export {};
@@ -0,0 +1,272 @@
1
+ import { types } from "node:util";
2
+ import { facetOf, isGateKind } from "./pause-registry.js";
3
+ import { receiptRefusal, receiveOwnProperties } from "./own-property-receipt.js";
4
+ import { principalNameOf } from "./principal-name.js";
5
+ export const CHECKPOINT_LIST_LIMITS = Object.freeze({
6
+ overdue: Object.freeze({ default: 100, max: 500 }),
7
+ session: Object.freeze({ default: 100, max: 100 }),
8
+ });
9
+ const FACETS = ["A", "B", "-"];
10
+ const STATUSES = ["pending", "resolved", "expired"];
11
+ const OVERDUE_MEMBERS = ["cutoff", "facet", "after", "limit"];
12
+ const SESSION_MEMBERS = ["sessionId", "scope", "status", "gateKinds", "toolCallId", "createdSince", "order", "after", "limit"];
13
+ function receiveQuery(raw, subject, face, members) {
14
+ if (typeof raw !== "object" || raw === null)
15
+ throw receiptRefusal(`${face}: the query must be an object, got ${raw === null ? "null" : typeof raw}`);
16
+ const got = receiveOwnProperties(raw, { subject, unit: "member", moment: `at ${face}` });
17
+ const own = Object.create(null);
18
+ for (const name of Object.keys(got)) {
19
+ if (!members.includes(name))
20
+ throw receiptRefusal(`${face}: the query carries "${name}", which is not a member of ${subject} — refused rather than answered without the filter it names`);
21
+ own[name] = got[name];
22
+ }
23
+ return own;
24
+ }
25
+ function readGateKinds(raw) {
26
+ const refuse = () => receiptRefusal("CheckpointSessionQuery.gateKinds must be a dense array of registered gate kinds (no hole, no accessor, not a Proxy) when present");
27
+ if (typeof raw !== "object" || raw === null || types.isProxy(raw) || !Array.isArray(raw))
28
+ throw refuse();
29
+ const length = Object.getOwnPropertyDescriptor(raw, "length")?.value;
30
+ if (typeof length !== "number")
31
+ throw refuse();
32
+ const kinds = [];
33
+ for (let i = 0; i < length; i++) {
34
+ const d = Object.getOwnPropertyDescriptor(raw, i);
35
+ if (d === undefined || !("value" in d) || !isGateKind(d.value))
36
+ throw refuse();
37
+ kinds.push(d.value);
38
+ }
39
+ return Object.freeze(kinds);
40
+ }
41
+ function readLimit(raw, subject, bound) {
42
+ if (raw === undefined)
43
+ return bound.default;
44
+ if (typeof raw === "number" && Number.isSafeInteger(raw) && raw >= 1 && raw <= bound.max)
45
+ return raw;
46
+ throw receiptRefusal(`${subject}.limit must be an integer in 1..${bound.max} when present`);
47
+ }
48
+ function readCursor(raw, subject, key, face) {
49
+ const got = receiveQuery(raw, `${subject}.after`, face, [key, "token"]);
50
+ const value = got[key];
51
+ if (typeof value !== "number" || Number.isNaN(value) || value === Infinity)
52
+ throw receiptRefusal(`${subject}.after.${key} must be a finite number or -Infinity (a cursor is the order key of the page before)`);
53
+ if (typeof got.token !== "string")
54
+ throw receiptRefusal(`${subject}.after.token must be a string`);
55
+ return { [key]: value, token: got.token };
56
+ }
57
+ export function readCheckpointOverdueQuery(raw) {
58
+ const face = "CheckpointStore.listOverdue";
59
+ const got = receiveQuery(raw, "CheckpointOverdueQuery", face, OVERDUE_MEMBERS);
60
+ const { cutoff, facet, after } = got;
61
+ if (typeof cutoff !== "number" || !Number.isFinite(cutoff))
62
+ throw receiptRefusal("CheckpointOverdueQuery.cutoff must be a finite number (epoch ms)");
63
+ if (!FACETS.includes(facet))
64
+ throw receiptRefusal(`CheckpointOverdueQuery.facet must be one of ${FACETS.map((f) => JSON.stringify(f)).join(" / ")}`);
65
+ return {
66
+ cutoff,
67
+ facet: facet,
68
+ ...(after !== undefined ? { after: readCursor(after, "CheckpointOverdueQuery", "deadline", face) } : {}),
69
+ limit: readLimit(got.limit, "CheckpointOverdueQuery", CHECKPOINT_LIST_LIMITS.overdue),
70
+ };
71
+ }
72
+ export function readCheckpointSessionQuery(raw) {
73
+ const face = "CheckpointStore.listBySession";
74
+ const got = receiveQuery(raw, "CheckpointSessionQuery", face, SESSION_MEMBERS);
75
+ const { sessionId, scope, status, gateKinds, toolCallId, createdSince, order, after } = got;
76
+ if (typeof sessionId !== "string" || sessionId === "")
77
+ throw receiptRefusal("CheckpointSessionQuery.sessionId must be a non-empty string");
78
+ if (scope !== undefined && typeof scope !== "string")
79
+ throw receiptRefusal(`CheckpointSessionQuery.scope must be a string when present, got ${typeof scope}`);
80
+ if (status !== undefined && !STATUSES.includes(status))
81
+ throw receiptRefusal(`CheckpointSessionQuery.status must be one of ${STATUSES.join(" / ")} when present`);
82
+ if (toolCallId !== undefined && typeof toolCallId !== "string")
83
+ throw receiptRefusal(`CheckpointSessionQuery.toolCallId must be a string when present, got ${typeof toolCallId}`);
84
+ if (createdSince !== undefined && (typeof createdSince !== "number" || !Number.isFinite(createdSince)))
85
+ throw receiptRefusal("CheckpointSessionQuery.createdSince must be a finite number when present");
86
+ if (order !== undefined && order !== "oldest" && order !== "newest")
87
+ throw receiptRefusal('CheckpointSessionQuery.order must be "oldest" or "newest" when present');
88
+ const kinds = gateKinds === undefined ? undefined : readGateKinds(gateKinds);
89
+ return {
90
+ sessionId,
91
+ ...(scope !== undefined ? { scope } : {}),
92
+ ...(status !== undefined ? { status: status } : {}),
93
+ ...(kinds !== undefined ? { gateKinds: kinds } : {}),
94
+ ...(toolCallId !== undefined ? { toolCallId } : {}),
95
+ ...(createdSince !== undefined ? { createdSince } : {}),
96
+ order: order === "newest" ? "newest" : "oldest",
97
+ ...(after !== undefined ? { after: readCursor(after, "CheckpointSessionQuery", "createdAt", face) } : {}),
98
+ limit: readLimit(got.limit, "CheckpointSessionQuery", CHECKPOINT_LIST_LIMITS.session),
99
+ };
100
+ }
101
+ export function readCheckpointDeleteGuard(sessionId, raw) {
102
+ const face = "CheckpointStore.deleteSessionCheckpoints";
103
+ if (typeof sessionId !== "string" || sessionId === "")
104
+ throw receiptRefusal(`${face}: the session id must be a non-empty string`);
105
+ const got = receiveQuery(raw, "CheckpointDeleteGuard", face, ["owner"]);
106
+ const owner = got.owner === null ? null : principalNameOf(got.owner);
107
+ if (owner === undefined)
108
+ throw receiptRefusal("CheckpointDeleteGuard.owner must be a principal name (a string with a visible character, no control or separator character, and no format character but a joiner) or null");
109
+ return { sessionId, owner };
110
+ }
111
+ export function deleteGuardAdmits(head, owner) {
112
+ return head !== undefined && head.owner === owner;
113
+ }
114
+ export async function deleteSessionRowsAtStart(rows, sessionId, guard, headOf, remove) {
115
+ const read = readCheckpointDeleteGuard(sessionId, guard);
116
+ const taken = [];
117
+ for (const [token, cp] of rows)
118
+ if (cp.sessionId === read.sessionId)
119
+ taken.push([token, cp]);
120
+ if (!deleteGuardAdmits(await headOf(read.sessionId), read.owner))
121
+ return 0;
122
+ let n = 0;
123
+ for (const [token, cp] of taken)
124
+ if (await remove(token, cp))
125
+ n++;
126
+ return n;
127
+ }
128
+ export function checkpointDeadlinePassed(deadline, cutoff) {
129
+ return deadline !== undefined && (typeof deadline === "number" && Number.isFinite(deadline) ? deadline <= cutoff : true);
130
+ }
131
+ function orderKey(value) {
132
+ return typeof value === "number" && Number.isFinite(value) ? value : -Infinity;
133
+ }
134
+ function membersOf(key, cp) {
135
+ return { key, token: cp.token, sessionId: cp.sessionId, scope: cp.scope, status: cp.status, gate: cp.gate, pendingAction: cp.pendingAction, createdAt: cp.createdAt, deadline: cp.deadline, state: cp.state, checkpointId: cp.checkpointId };
136
+ }
137
+ function memberOf(value, key) {
138
+ return typeof value === "object" && value !== null && key in value ? value[key] : undefined;
139
+ }
140
+ const isStatusWord = (v) => STATUSES.some((s) => s === v);
141
+ const isFiniteNumber = (v) => typeof v === "number" && Number.isFinite(v);
142
+ function listingDamage(m) {
143
+ if (m.token !== m.key)
144
+ return "its token member is not the key the store files it under";
145
+ if (typeof m.scope !== "string")
146
+ return "its scope is not a string";
147
+ if (!isStatusWord(m.status))
148
+ return "its status is not one of pending / resolved / expired";
149
+ if (!isGateKind(memberOf(m.gate, "kind")))
150
+ return "its gate is not an object of a registered gate kind";
151
+ const actionKind = memberOf(m.pendingAction, "kind");
152
+ if (typeof actionKind !== "string")
153
+ return "its pending action is not an object with a kind";
154
+ if (actionKind === "tool_approval" && typeof memberOf(m.pendingAction, "toolCallId") !== "string")
155
+ return "its tool approval carries no tool call id";
156
+ if (!isFiniteNumber(m.createdAt))
157
+ return "its createdAt is not a finite number";
158
+ if (typeof m.state !== "object" || m.state === null)
159
+ return "its state is not an object";
160
+ return undefined;
161
+ }
162
+ function thrownName(e) {
163
+ return e instanceof Error ? e.constructor.name : typeof e;
164
+ }
165
+ function rowName(m) {
166
+ return `checkpoint ${typeof m.checkpointId === "string" ? JSON.stringify(m.checkpointId) : "null"} of session ${typeof m.sessionId === "string" ? JSON.stringify(m.sessionId) : "(unreadable)"}`;
167
+ }
168
+ function afterCursor(key, token, cursor, ascending) {
169
+ if (key !== cursor.key)
170
+ return ascending ? key > cursor.key : key < cursor.key;
171
+ return ascending ? token > cursor.token : token < cursor.token;
172
+ }
173
+ function compareKeys(a, b) {
174
+ if (a.key !== b.key)
175
+ return a.key < b.key ? -1 : 1;
176
+ return a.token < b.token ? -1 : a.token > b.token ? 1 : 0;
177
+ }
178
+ export function selectOverduePage(rows, query, project, disclose) {
179
+ const hits = [];
180
+ for (const [token, cp] of rows) {
181
+ const m = membersOf(token, cp);
182
+ if (m.status !== "pending" || !checkpointDeadlinePassed(m.deadline, query.cutoff))
183
+ continue;
184
+ const damage = typeof m.sessionId !== "string" ? "its sessionId is not a string" : listingDamage(m);
185
+ if (damage !== undefined) {
186
+ disclose?.(`${rowName(m)}: ${damage} — the overdue listing cannot read it, so it leaves it out`);
187
+ continue;
188
+ }
189
+ if (facetOf(m.gate) !== query.facet)
190
+ continue;
191
+ const key = orderKey(m.deadline);
192
+ if (query.after !== undefined && !afterCursor(key, token, { key: query.after.deadline, token: query.after.token }, true))
193
+ continue;
194
+ hits.push({ key, token, cp, m });
195
+ }
196
+ hits.sort(compareKeys);
197
+ const out = [];
198
+ let last;
199
+ let i = 0;
200
+ for (; i < hits.length && out.length < query.limit; i++) {
201
+ const hit = hits[i];
202
+ let summary;
203
+ try {
204
+ summary = project(hit.cp);
205
+ }
206
+ catch (e) {
207
+ disclose?.(`${rowName(hit.m)}: its summary could not be projected (${thrownName(e)}) — the overdue listing leaves it out`);
208
+ continue;
209
+ }
210
+ out.push(summary);
211
+ last = hit;
212
+ }
213
+ return { rows: out, ...(i < hits.length && last !== undefined ? { next: { deadline: last.key, token: last.token } } : {}) };
214
+ }
215
+ export function selectSessionPage(rows, query, clone, disclose) {
216
+ const ascending = query.order === "oldest";
217
+ const hits = [];
218
+ if (query.gateKinds !== undefined && query.gateKinds.length === 0)
219
+ return { rows: [] };
220
+ for (const [token, cp] of rows) {
221
+ const m = membersOf(token, cp);
222
+ if (typeof m.sessionId !== "string") {
223
+ disclose?.(`${rowName(m)}: its sessionId is not a string — no session listing can attribute it, so it is left out`);
224
+ continue;
225
+ }
226
+ if (m.sessionId !== query.sessionId)
227
+ continue;
228
+ if (query.scope !== undefined && typeof m.scope === "string" && m.scope !== query.scope)
229
+ continue;
230
+ if (query.status !== undefined && isStatusWord(m.status) && m.status !== query.status)
231
+ continue;
232
+ const gateKind = memberOf(m.gate, "kind");
233
+ if (query.gateKinds !== undefined && isGateKind(gateKind) && !query.gateKinds.includes(gateKind))
234
+ continue;
235
+ if (query.toolCallId !== undefined) {
236
+ const actionKind = memberOf(m.pendingAction, "kind");
237
+ const callId = memberOf(m.pendingAction, "toolCallId");
238
+ if (typeof actionKind === "string" && actionKind !== "tool_approval")
239
+ continue;
240
+ if (actionKind === "tool_approval" && typeof callId === "string" && callId !== query.toolCallId)
241
+ continue;
242
+ }
243
+ if (query.createdSince !== undefined && isFiniteNumber(m.createdAt) && m.createdAt < query.createdSince)
244
+ continue;
245
+ const key = orderKey(m.createdAt);
246
+ if (query.after !== undefined && !afterCursor(key, token, { key: query.after.createdAt, token: query.after.token }, ascending))
247
+ continue;
248
+ hits.push({ key, token, cp, m, damage: listingDamage(m) });
249
+ }
250
+ hits.sort((a, b) => (ascending ? 1 : -1) * compareKeys(a, b));
251
+ const page = hits.slice(0, query.limit);
252
+ const last = page[page.length - 1];
253
+ return {
254
+ rows: page.map((h) => readOut(h, clone, disclose)),
255
+ ...(hits.length > query.limit && last !== undefined ? { next: { createdAt: last.key, token: last.token } } : {}),
256
+ };
257
+ }
258
+ function readOut(hit, clone, disclose) {
259
+ const { token, cp, m, damage } = hit;
260
+ if (damage === undefined)
261
+ return { kind: "row", checkpoint: clone(cp) };
262
+ disclose?.(`${rowName(m)}: ${damage} — listed as unreadable`);
263
+ return {
264
+ kind: "unreadable",
265
+ token: token,
266
+ scope: typeof m.scope === "string" ? m.scope : null,
267
+ sessionId: String(m.sessionId),
268
+ status: typeof m.status === "string" ? m.status : `(${typeof m.status})`,
269
+ createdAt: isFiniteNumber(m.createdAt) ? m.createdAt : null,
270
+ problem: damage,
271
+ };
272
+ }
@@ -6,7 +6,7 @@ import { type StoreFidelity, type Checkpoint, type CheckpointFeature, type Check
6
6
  * had carried beside the one its word now names, and the members added after the table, each a capability a reader
7
7
  * must have. Downstream reads them for display only (`CheckpointError.detail.requires`).
8
8
  */
9
- export declare const REQUIREMENT_WORDS: readonly ["resource", "binding", "token", "orgAdmission", "f012", "realApproval", "face", "requirements_digest", "org_admission_inherited", "org_write_grant", "org_governed", "delegation_provenance", "skill_grants", "skill_card_binding", "hands_coordinates", "hands_home", "path_rule_anchors", "path_rule_installations", "permission_mode", "plan_mode_restore", "persisted_rule_mandate", "deployment_authored", "call_names", "write_face", "denial_limit_fallback", "leg_scope", "tool_ceiling", "tool_lists_judged", "own_tool_lists", "approval_targets", "cross_boundary"];
9
+ export declare const REQUIREMENT_WORDS: readonly ["resource", "binding", "token", "orgAdmission", "f012", "realApproval", "face", "requirements_digest", "org_admission_inherited", "org_write_grant", "org_governed", "delegation_provenance", "skill_grants", "skill_card_binding", "hands_coordinates", "hands_home", "path_rule_anchors", "path_rule_installations", "permission_mode", "plan_mode_restore", "persisted_rule_mandate", "deployment_authored", "call_names", "write_face", "denial_limit_fallback", "leg_scope", "tool_ceiling", "tool_lists_judged", "own_tool_lists", "approval_targets", "cross_boundary", "mount_site", "skill_scopes"];
10
10
  export type RequirementWord = (typeof REQUIREMENT_WORDS)[number];
11
11
  /** Runtime twin of {@link RequirementWord}. */
12
12
  export declare function isRequirementWord(word: unknown): word is RequirementWord;
@@ -124,6 +124,9 @@ export declare const CHECKPOINT_STATE_REQUIREMENTS: {
124
124
  readonly skillGrants: {
125
125
  readonly word: "skill_grants";
126
126
  };
127
+ readonly skillScopes: {
128
+ readonly word: "skill_scopes";
129
+ };
127
130
  readonly reminderMark: {
128
131
  readonly digest: "decision-read";
129
132
  };
@@ -317,9 +320,15 @@ export declare const PENDING_ACTION_REQUIREMENTS: {
317
320
  readonly pathTarget: {
318
321
  readonly digest: "decision-read";
319
322
  };
323
+ readonly hostTarget: {
324
+ readonly digest: "decision-read";
325
+ };
320
326
  readonly names: {
321
327
  readonly word: "call_names";
322
328
  };
329
+ readonly engineMounted: {
330
+ readonly word: "mount_site";
331
+ };
323
332
  readonly targets: {
324
333
  readonly word: "approval_targets";
325
334
  };
@@ -482,6 +491,9 @@ export declare const CHECKPOINT_REQUIREMENTS: {
482
491
  readonly skillGrants: {
483
492
  readonly word: "skill_grants";
484
493
  };
494
+ readonly skillScopes: {
495
+ readonly word: "skill_scopes";
496
+ };
485
497
  readonly reminderMark: {
486
498
  readonly digest: "decision-read";
487
499
  };
@@ -820,9 +832,15 @@ export declare const CHECKPOINT_REQUIREMENTS: {
820
832
  readonly pathTarget: {
821
833
  readonly digest: "decision-read";
822
834
  };
835
+ readonly hostTarget: {
836
+ readonly digest: "decision-read";
837
+ };
823
838
  readonly names: {
824
839
  readonly word: "call_names";
825
840
  };
841
+ readonly engineMounted: {
842
+ readonly word: "mount_site";
843
+ };
826
844
  readonly targets: {
827
845
  readonly word: "approval_targets";
828
846
  };
@@ -873,9 +891,6 @@ export interface UnencodableMember {
873
891
  readonly path: string;
874
892
  readonly kind: "cycle" | "depth" | "function" | "symbol" | "unreadable" | "codec";
875
893
  }
876
- /** Where a value holds something the row digest cannot encode, or `undefined` — the park mint asks this of the
877
- * arguments before any side effect, so such a call is refused before anything is paused. */
878
- export declare function unencodableIn(value: unknown, path: string): UnencodableMember | undefined;
879
894
  /** The row digest: sha256 (hex) over the binding serializer's canonical form ({@link canonicalize}: type-tagged,
880
895
  * sorted keys) of every member a decision reads but the digest itself, keyed by path, each read through
881
896
  * {@link digestProjection}. Never a constant: a value it cannot encode throws {@link RowNotEncodable}. */
@@ -1,5 +1,5 @@
1
1
  import { createHash } from "node:crypto";
2
- import { canonicalize, UNCANONICALIZABLE } from "./canonical-json.js";
2
+ import { canonicalize, MAX_DEPTH, UNCANONICALIZABLE } from "./canonical-json.js";
3
3
  import { CHECKPOINT_FEATURES, checkpointVersionOf, encodeAtFidelity } from "./checkpoint-store.js";
4
4
  export const REQUIREMENT_WORDS = Object.freeze([
5
5
  "resource",
@@ -33,6 +33,8 @@ export const REQUIREMENT_WORDS = Object.freeze([
33
33
  "own_tool_lists",
34
34
  "approval_targets",
35
35
  "cross_boundary",
36
+ "mount_site",
37
+ "skill_scopes",
36
38
  ]);
37
39
  export function isRequirementWord(word) {
38
40
  return typeof word === "string" && REQUIREMENT_WORDS.includes(word);
@@ -74,6 +76,7 @@ export const CHECKPOINT_STATE_REQUIREMENTS = {
74
76
  readFace: { word: "face" },
75
77
  writeFace: { word: "write_face" },
76
78
  skillGrants: { word: "skill_grants" },
79
+ skillScopes: { word: "skill_scopes" },
77
80
  reminderMark: DECISION_READ,
78
81
  repairBundle: DECISION_READ,
79
82
  workspaceHandle: DECISION_READ,
@@ -126,7 +129,9 @@ export const PENDING_ACTION_REQUIREMENTS = {
126
129
  implementationRevision: DECISION_READ,
127
130
  family: DECISION_READ,
128
131
  pathTarget: DECISION_READ,
132
+ hostTarget: DECISION_READ,
129
133
  names: { word: "call_names" },
134
+ engineMounted: { word: "mount_site" },
130
135
  targets: { word: "approval_targets" },
131
136
  hasBidiControls: SHOWN,
132
137
  batchToolCallIds: DECISION_READ,
@@ -212,7 +217,7 @@ class RowNotEncodable extends Error {
212
217
  this.at = at;
213
218
  }
214
219
  }
215
- const DIGEST_DEPTH_CAP = 128;
220
+ const DIGEST_DEPTH_CAP = MAX_DEPTH + 1;
216
221
  function digestProjection(value, path, depth, open) {
217
222
  if (typeof value === "function")
218
223
  throw new RowNotEncodable({ path, kind: "function" });
@@ -255,24 +260,13 @@ function digestProjection(value, path, depth, open) {
255
260
  open.delete(value);
256
261
  }
257
262
  }
258
- export function unencodableIn(value, path) {
259
- try {
260
- digestProjection(value, path, 1, new Set());
261
- return undefined;
262
- }
263
- catch (e) {
264
- if (e instanceof RowNotEncodable)
265
- return e.at;
266
- throw e;
267
- }
268
- }
269
263
  export function requirementsDigestOf(cp) {
270
264
  const held = Object.create(null);
271
265
  const open = new Set();
272
266
  for (const m of membersOf(cp))
273
267
  if (m.path !== "requirementsDigest")
274
268
  held[m.path] = digestProjection(m.value, m.path, 1, open);
275
- const canonical = canonicalize(held);
269
+ const canonical = canonicalize(held, -1);
276
270
  if (canonical === UNCANONICALIZABLE)
277
271
  throw new RowNotEncodable({ path: "(row)", kind: "unreadable" });
278
272
  return createHash("sha256").update(canonical, "utf8").digest("hex");