@sema-agent/core 7.55.0 → 7.57.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 (502) hide show
  1. package/CHANGELOG.md +1054 -0
  2. package/LICENSE +1 -1
  3. package/dist/agents/cascade.js +1 -1
  4. package/dist/agents/cc-peer-directory.js +1 -0
  5. package/dist/agents/child-model-seat.d.ts +0 -11
  6. package/dist/agents/child-model-seat.js +0 -3
  7. package/dist/agents/list-agents-tool.d.ts +3 -1
  8. package/dist/agents/list-agents-tool.js +7 -7
  9. package/dist/agents/org-delivery-gate.js +3 -4
  10. package/dist/agents/peer-directory.d.ts +22 -4
  11. package/dist/agents/peer-directory.js +24 -2
  12. package/dist/agents/peer-held-queue.d.ts +69 -49
  13. package/dist/agents/peer-held-queue.js +255 -106
  14. package/dist/agents/peer-session-drain.js +65 -45
  15. package/dist/agents/repair-loop.js +2 -2
  16. package/dist/agents/send-message-tool.js +7 -6
  17. package/dist/agents/subagent.d.ts +6 -4
  18. package/dist/agents/subagent.js +72 -68
  19. package/dist/agents/tool-filter.d.ts +7 -5
  20. package/dist/agents/tool-filter.js +12 -9
  21. package/dist/agents/verify.d.ts +3 -2
  22. package/dist/agents/verify.js +3 -3
  23. package/dist/brain/anthropic.js +45 -80
  24. package/dist/brain/media-degrade.d.ts +18 -7
  25. package/dist/brain/media-degrade.js +13 -2
  26. package/dist/brain/model-capability.d.ts +37 -0
  27. package/dist/brain/model-capability.js +34 -0
  28. package/dist/brain/model-presets.d.ts +2 -8
  29. package/dist/brain/model-presets.js +1 -6
  30. package/dist/brain/open-responses.js +23 -34
  31. package/dist/brain/openai.js +25 -96
  32. package/dist/brain/provider-dialect.d.ts +3 -2
  33. package/dist/brain/provider-dialect.js +2 -2
  34. package/dist/brain/reasoning-request.d.ts +96 -0
  35. package/dist/brain/reasoning-request.js +174 -0
  36. package/dist/brain/reasoning.d.ts +11 -11
  37. package/dist/brain/reasoning.js +4 -3
  38. package/dist/brain/request-params.d.ts +13 -4
  39. package/dist/brain/request-params.js +21 -5
  40. package/dist/brain/status-sink.d.ts +20 -0
  41. package/dist/brain/status-sink.js +7 -0
  42. package/dist/brain/stream-engine.d.ts +9 -0
  43. package/dist/brain/stream-engine.js +24 -10
  44. package/dist/brain/stream-shared.d.ts +5 -4
  45. package/dist/brain/stream-shared.js +4 -4
  46. package/dist/core/a2a.d.ts +2 -1
  47. package/dist/core/a2a.js +19 -13
  48. package/dist/core/agent-definition.d.ts +10 -0
  49. package/dist/core/allow-entry.d.ts +23 -23
  50. package/dist/core/allow-entry.js +42 -46
  51. package/dist/core/allow-rule-shadow.d.ts +3 -3
  52. package/dist/core/approval-object.d.ts +21 -5
  53. package/dist/core/approval-object.js +44 -17
  54. package/dist/core/ask-origin.d.ts +66 -20
  55. package/dist/core/ask-origin.js +63 -23
  56. package/dist/core/ask-question.d.ts +51 -8
  57. package/dist/core/ask-question.js +3 -4
  58. package/dist/core/ask-unresolvable-notice.d.ts +8 -3
  59. package/dist/core/ask-unresolvable-notice.js +16 -2
  60. package/dist/core/auto-compaction.d.ts +71 -6
  61. package/dist/core/auto-compaction.js +42 -26
  62. package/dist/core/background-agent-store.d.ts +6 -2
  63. package/dist/core/background-agent-store.js +1 -1
  64. package/dist/core/checkpoint-generation.d.ts +53 -0
  65. package/dist/core/checkpoint-generation.js +35 -0
  66. package/dist/core/checkpoint-queries.d.ts +180 -0
  67. package/dist/core/checkpoint-queries.js +272 -0
  68. package/dist/core/checkpoint-requirements.d.ts +19 -1
  69. package/dist/core/checkpoint-requirements.js +6 -0
  70. package/dist/core/checkpoint-store.d.ts +105 -53
  71. package/dist/core/checkpoint-store.js +43 -20
  72. package/dist/core/cross-boundary-taint.d.ts +6 -5
  73. package/dist/core/cross-boundary-taint.js +5 -5
  74. package/dist/core/decision-receipt.d.ts +37 -3
  75. package/dist/core/decision-receipt.js +17 -17
  76. package/dist/core/delegation-not-started.d.ts +6 -0
  77. package/dist/core/delegation-not-started.js +17 -0
  78. package/dist/core/engine-attestation.d.ts +93 -0
  79. package/dist/core/engine-attestation.js +70 -0
  80. package/dist/core/engine-capabilities.d.ts +4 -1
  81. package/dist/core/engine-capabilities.js +1 -1
  82. package/dist/core/engine-notice.d.ts +32 -12
  83. package/dist/core/engine-notice.js +6 -0
  84. package/dist/core/file-history-store.d.ts +104 -22
  85. package/dist/core/file-history-store.js +37 -19
  86. package/dist/core/gate-fold.d.ts +1 -1
  87. package/dist/core/gate-fold.js +22 -10
  88. package/dist/core/gate-lanes.js +73 -65
  89. package/dist/core/gate-outcome.d.ts +26 -5
  90. package/dist/core/gate-outcome.js +26 -0
  91. package/dist/core/governance-codes.d.ts +5 -1
  92. package/dist/core/governance-codes.js +6 -0
  93. package/dist/core/hooks.d.ts +19 -18
  94. package/dist/core/hooks.js +3 -1
  95. package/dist/core/host-floor.d.ts +128 -0
  96. package/dist/core/host-floor.js +206 -0
  97. package/dist/core/host-target.d.ts +38 -3
  98. package/dist/core/host-target.js +38 -5
  99. package/dist/core/mailbox-store.d.ts +62 -1
  100. package/dist/core/mailbox-store.js +59 -0
  101. package/dist/core/mcp-name-judge.d.ts +46 -0
  102. package/dist/core/mcp-name-judge.js +61 -0
  103. package/dist/core/mcp-probe.d.ts +1 -1
  104. package/dist/core/mcp-probe.js +2 -5
  105. package/dist/core/mcp.d.ts +5 -1
  106. package/dist/core/mcp.js +70 -64
  107. package/dist/core/memory-engine/consolidation-driver.js +4 -3
  108. package/dist/core/memory-engine/delegation-settlement.js +15 -24
  109. package/dist/core/memory-engine/distiller.js +26 -17
  110. package/dist/core/memory-engine/engine.js +4 -4
  111. package/dist/core/memory-engine/layout.d.ts +60 -8
  112. package/dist/core/memory-engine/layout.js +70 -8
  113. package/dist/core/model-seat.d.ts +10 -3
  114. package/dist/core/mods/classic-events.d.ts +67 -0
  115. package/dist/core/mods/classic-events.js +1 -0
  116. package/dist/core/mods/dollar.d.ts +13 -0
  117. package/dist/core/mods/extension-call.d.ts +31 -0
  118. package/dist/core/mods/extension-call.js +43 -0
  119. package/dist/core/mods/kernel/dispatch.d.ts +20 -3
  120. package/dist/core/mods/kernel/dispatch.js +140 -69
  121. package/dist/core/mods/kernel/events.d.ts +47 -11
  122. package/dist/core/mods/kernel/events.js +66 -42
  123. package/dist/core/mods/kernel/index.d.ts +4 -4
  124. package/dist/core/mods/kernel/index.js +2 -2
  125. package/dist/core/mods/kernel/receive.d.ts +39 -5
  126. package/dist/core/mods/kernel/receive.js +290 -17
  127. package/dist/core/mods/kernel/registration.d.ts +33 -2
  128. package/dist/core/mods/kernel/registration.js +6 -7
  129. package/dist/core/mods/kernel/site-rules.d.ts +44 -16
  130. package/dist/core/mods/kernel/site-rules.js +24 -42
  131. package/dist/core/mods/spec-seats.d.ts +69 -0
  132. package/dist/core/mods/spec-seats.js +114 -0
  133. package/dist/core/mods/stations.d.ts +28 -8
  134. package/dist/core/mods/stations.js +29 -13
  135. package/dist/core/mods/tool-call.d.ts +79 -0
  136. package/dist/core/mods/tool-call.js +152 -0
  137. package/dist/core/namespaced-rule-name.d.ts +32 -38
  138. package/dist/core/namespaced-rule-name.js +29 -36
  139. package/dist/core/parent-spec-seat.d.ts +6 -1
  140. package/dist/core/parent-spec-seat.js +2 -0
  141. package/dist/core/park-selfcheck.js +3 -0
  142. package/dist/core/permission-rule-consent.d.ts +24 -3
  143. package/dist/core/permission-rule-consent.js +136 -41
  144. package/dist/core/permission-rule-model.d.ts +57 -5
  145. package/dist/core/permission-rule-model.js +90 -31
  146. package/dist/core/permission-rule-org.d.ts +6 -2
  147. package/dist/core/permission-rule-org.js +8 -4
  148. package/dist/core/permission-rule-provider.d.ts +5 -2
  149. package/dist/core/permission-rule-provider.js +41 -11
  150. package/dist/core/permission-rule-store.d.ts +3 -2
  151. package/dist/core/permission-rule-store.js +11 -2
  152. package/dist/core/permission-rule-sync.js +3 -2
  153. package/dist/core/permission-rule-syntax.d.ts +5 -4
  154. package/dist/core/permission-rule-syntax.js +2 -2
  155. package/dist/core/permission-rules.d.ts +4 -4
  156. package/dist/core/permission-rules.js +11 -20
  157. package/dist/core/persisted-rule-arms.d.ts +2 -2
  158. package/dist/core/persisted-rule-arms.js +10 -12
  159. package/dist/core/principal-name.d.ts +20 -0
  160. package/dist/core/principal-name.js +22 -0
  161. package/dist/core/prompt-section-seat.js +4 -6
  162. package/dist/core/protocol-http-auth.d.ts +40 -5
  163. package/dist/core/protocol-http-auth.js +168 -4
  164. package/dist/core/protocol-naming.d.ts +20 -0
  165. package/dist/core/protocol-naming.js +20 -3
  166. package/dist/core/read-only-shell.d.ts +20 -5
  167. package/dist/core/read-only-shell.js +29 -14
  168. package/dist/core/remote-env.d.ts +37 -1
  169. package/dist/core/remote-env.js +11 -0
  170. package/dist/core/resume-startup-cause.d.ts +24 -2
  171. package/dist/core/resume-startup-cause.js +20 -1
  172. package/dist/core/retired-keys.d.ts +16 -0
  173. package/dist/core/retired-keys.js +16 -4
  174. package/dist/core/rewrite-rejudge.d.ts +60 -0
  175. package/dist/core/rewrite-rejudge.js +36 -0
  176. package/dist/core/roles.d.ts +28 -1
  177. package/dist/core/roles.js +81 -26
  178. package/dist/core/rule-lane-reads.d.ts +20 -15
  179. package/dist/core/rule-lane-reads.js +45 -17
  180. package/dist/core/rule-owner.d.ts +3 -3
  181. package/dist/core/rule-owner.js +3 -2
  182. package/dist/core/runner/announce-once-ledger.d.ts +14 -0
  183. package/dist/core/runner/announce-once-ledger.js +5 -0
  184. package/dist/core/runner/assemble-result.d.ts +1 -0
  185. package/dist/core/runner/assemble-result.js +1 -1
  186. package/dist/core/runner/call-hook-stations.d.ts +3 -2
  187. package/dist/core/runner/caller-roster.d.ts +16 -4
  188. package/dist/core/runner/caller-roster.js +33 -6
  189. package/dist/core/runner/capability-withheld-seat.d.ts +5 -0
  190. package/dist/core/runner/capability-withheld-seat.js +24 -0
  191. package/dist/core/runner/classifier-ladder.d.ts +7 -9
  192. package/dist/core/runner/classifier-ladder.js +3 -3
  193. package/dist/core/runner/compact-session.d.ts +10 -0
  194. package/dist/core/runner/compact-session.js +202 -0
  195. package/dist/core/runner/compaction-call-options.d.ts +2 -2
  196. package/dist/core/runner/compaction-seams.d.ts +21 -1
  197. package/dist/core/runner/compaction-seams.js +11 -8
  198. package/dist/core/runner/construction-doors.js +3 -0
  199. package/dist/core/runner/contracts.d.ts +50 -40
  200. package/dist/core/runner/cross-boundary-lane.d.ts +17 -13
  201. package/dist/core/runner/cross-boundary-lane.js +40 -27
  202. package/dist/core/runner/denial-limit-arms.d.ts +2 -2
  203. package/dist/core/runner/denial-limit-arms.js +1 -1
  204. package/dist/core/runner/derived-route-fallback.d.ts +13 -0
  205. package/dist/core/runner/derived-route-fallback.js +6 -0
  206. package/dist/core/runner/env-capability-census.d.ts +3 -2
  207. package/dist/core/runner/env-capability-census.js +9 -3
  208. package/dist/core/runner/file-history-request.d.ts +18 -0
  209. package/dist/core/runner/file-history-request.js +21 -13
  210. package/dist/core/runner/file-history-restore.d.ts +45 -0
  211. package/dist/core/runner/file-history-restore.js +46 -0
  212. package/dist/core/runner/gate-exit.d.ts +3 -3
  213. package/dist/core/runner/gate-exit.js +4 -3
  214. package/dist/core/runner/image.d.ts +7 -17
  215. package/dist/core/runner/image.js +9 -60
  216. package/dist/core/runner/permission-rule-lanes.d.ts +11 -11
  217. package/dist/core/runner/permission-rule-lanes.js +39 -17
  218. package/dist/core/runner/person-path-rows.d.ts +12 -9
  219. package/dist/core/runner/person-path-rows.js +18 -7
  220. package/dist/core/runner/prepare-acquire-reconcile.d.ts +3 -0
  221. package/dist/core/runner/prepare-acquire-reconcile.js +2 -1
  222. package/dist/core/runner/prepare-ask-lane.d.ts +2 -2
  223. package/dist/core/runner/prepare-ask-lane.js +5 -2
  224. package/dist/core/runner/prepare-caps-and-workflow.d.ts +4 -6
  225. package/dist/core/runner/prepare-caps-and-workflow.js +4 -3
  226. package/dist/core/runner/prepare-config-doors.d.ts +35 -38
  227. package/dist/core/runner/prepare-config-doors.js +46 -28
  228. package/dist/core/runner/prepare-defer-classify.d.ts +4 -3
  229. package/dist/core/runner/prepare-defer-classify.js +7 -8
  230. package/dist/core/runner/prepare-file-history.d.ts +48 -8
  231. package/dist/core/runner/prepare-file-history.js +7 -39
  232. package/dist/core/runner/prepare-gate-stations.d.ts +1 -1
  233. package/dist/core/runner/prepare-gate-stations.js +10 -1
  234. package/dist/core/runner/prepare-hands-readface.d.ts +5 -9
  235. package/dist/core/runner/prepare-hands-readface.js +17 -14
  236. package/dist/core/runner/prepare-inherited-gate.d.ts +6 -3
  237. package/dist/core/runner/prepare-inherited-gate.js +5 -3
  238. package/dist/core/runner/prepare-memory-engine-session.js +1 -1
  239. package/dist/core/runner/prepare-park-ask.d.ts +2 -0
  240. package/dist/core/runner/prepare-park-ask.js +7 -7
  241. package/dist/core/runner/prepare-policy-chain.d.ts +6 -3
  242. package/dist/core/runner/prepare-policy-chain.js +67 -76
  243. package/dist/core/runner/prepare-prompt-assembly.d.ts +5 -7
  244. package/dist/core/runner/prepare-prompt-assembly.js +10 -8
  245. package/dist/core/runner/prepare-prompt-inputs.d.ts +11 -9
  246. package/dist/core/runner/prepare-prompt-inputs.js +3 -5
  247. package/dist/core/runner/prepare-protocol-tools.d.ts +2 -0
  248. package/dist/core/runner/prepare-protocol-tools.js +3 -3
  249. package/dist/core/runner/prepare-safety-scan.d.ts +1 -1
  250. package/dist/core/runner/prepare-safety-scan.js +0 -17
  251. package/dist/core/runner/prepare-suspend-saga.d.ts +2 -0
  252. package/dist/core/runner/prepare-suspend-saga.js +5 -6
  253. package/dist/core/runner/prepare-task.d.ts +5 -2
  254. package/dist/core/runner/prepare-task.js +48 -43
  255. package/dist/core/runner/prepare-tool-disclosure-mount.d.ts +20 -4
  256. package/dist/core/runner/prepare-tool-disclosure-mount.js +33 -23
  257. package/dist/core/runner/prepare-turn-wiring.d.ts +0 -4
  258. package/dist/core/runner/prepare-turn-wiring.js +2 -7
  259. package/dist/core/runner/prepare-wiring-manifest.d.ts +6 -2
  260. package/dist/core/runner/prepare-wiring-manifest.js +3 -3
  261. package/dist/core/runner/resume-admission.js +1 -1
  262. package/dist/core/runner/resume-apply.js +11 -12
  263. package/dist/core/runner/resume-checkpoint-screen.js +3 -0
  264. package/dist/core/runner/resume-claim.d.ts +4 -2
  265. package/dist/core/runner/resume-claim.js +15 -8
  266. package/dist/core/runner/retired-runner-deps.js +1 -0
  267. package/dist/core/runner/rewind-files.d.ts +12 -0
  268. package/dist/core/runner/rewind-files.js +90 -0
  269. package/dist/core/runner/run-attachment-seats.js +2 -1
  270. package/dist/core/runner/run-brain-sinks.d.ts +4 -1
  271. package/dist/core/runner/run-brain-sinks.js +4 -2
  272. package/dist/core/runner/run-harness-handlers.js +12 -4
  273. package/dist/core/runner/run-leg.d.ts +1 -1
  274. package/dist/core/runner/run-leg.js +40 -39
  275. package/dist/core/runner/run-notification-lane.d.ts +2 -0
  276. package/dist/core/runner/run-notification-lane.js +2 -2
  277. package/dist/core/runner/run-recovery-lanes.js +3 -4
  278. package/dist/core/runner/run-settle-and-teardown.js +7 -12
  279. package/dist/core/runner/run-terminal-adoption.js +3 -4
  280. package/dist/core/runner/run-turn-boundary.js +4 -15
  281. package/dist/core/runner/runtask.d.ts +10 -0
  282. package/dist/core/runner/runtask.js +35 -42
  283. package/dist/core/runner/send-message-continuation.js +1 -1
  284. package/dist/core/runner/session-read-file-states.d.ts +15 -0
  285. package/dist/core/runner/session-read-file-states.js +28 -0
  286. package/dist/core/runner/session-rule-policy.js +4 -3
  287. package/dist/core/runner/session-verb-doors.d.ts +28 -0
  288. package/dist/core/runner/session-verb-doors.js +48 -0
  289. package/dist/core/runner/session-write-ledger.d.ts +30 -0
  290. package/dist/core/runner/session-write-ledger.js +101 -0
  291. package/dist/core/runner/shell-env-withheld.d.ts +33 -0
  292. package/dist/core/runner/shell-env-withheld.js +51 -0
  293. package/dist/core/runner/skills-seat.js +6 -2
  294. package/dist/core/runner/stream-settle-backstop.js +12 -15
  295. package/dist/core/runner/sub-agent-deny-lists.d.ts +25 -3
  296. package/dist/core/runner/sub-agent-deny-lists.js +25 -17
  297. package/dist/core/runner/synthetic-tools.d.ts +6 -0
  298. package/dist/core/runner/synthetic-tools.js +4 -1
  299. package/dist/core/runner/teardown-bounded.d.ts +1 -0
  300. package/dist/core/runner/teardown-bounded.js +1 -0
  301. package/dist/core/runner/tool-disclosure.d.ts +10 -12
  302. package/dist/core/runner/tool-disclosure.js +1 -3
  303. package/dist/core/runner/tool-end-body.d.ts +1 -1
  304. package/dist/core/runner/tool-end-body.js +10 -9
  305. package/dist/core/runner/tool-not-executed.d.ts +5 -0
  306. package/dist/core/runner/tool-not-executed.js +11 -0
  307. package/dist/core/runner/tool-occurrence.d.ts +8 -0
  308. package/dist/core/runner/tool-occurrence.js +7 -0
  309. package/dist/core/runner/turn-attachments.d.ts +33 -15
  310. package/dist/core/runner/turn-attachments.js +62 -37
  311. package/dist/core/runner-deps.d.ts +7 -7
  312. package/dist/core/safety-axis-vocab.d.ts +6 -4
  313. package/dist/core/safety-axis-vocab.js +6 -5
  314. package/dist/core/safety-merge-corpus.js +11 -3
  315. package/dist/core/secret-env.d.ts +30 -3
  316. package/dist/core/secret-env.js +47 -8
  317. package/dist/core/select-model.js +3 -3
  318. package/dist/core/session-policy-store.d.ts +32 -15
  319. package/dist/core/session-policy-store.js +156 -36
  320. package/dist/core/session-store.d.ts +29 -10
  321. package/dist/core/session-store.js +51 -19
  322. package/dist/core/session.d.ts +82 -16
  323. package/dist/core/session.js +53 -0
  324. package/dist/core/shell-read-silence.d.ts +11 -12
  325. package/dist/core/shell-read-silence.js +9 -5
  326. package/dist/core/shell-run-candidates.js +3 -1
  327. package/dist/core/shell-wrapper-projection.d.ts +1 -1
  328. package/dist/core/shell-wrapper-projection.js +1 -1
  329. package/dist/core/shell-wrapper-table.d.ts +14 -7
  330. package/dist/core/shell-wrapper-table.js +5 -4
  331. package/dist/core/side-query.js +10 -1
  332. package/dist/core/skill-grant.d.ts +7 -2
  333. package/dist/core/skill-grant.js +5 -0
  334. package/dist/core/skills-directory.js +6 -2
  335. package/dist/core/store-contracts/background-agent-store-contract.js +1 -0
  336. package/dist/core/store-contracts/checkpoint-store-contract.d.ts +11 -1
  337. package/dist/core/store-contracts/checkpoint-store-contract.js +141 -2
  338. package/dist/core/store-contracts/file-history-store-contract.js +40 -1
  339. package/dist/core/store-contracts/mailbox-store-contract.js +49 -1
  340. package/dist/core/store-contracts/peer-directory-contract.d.ts +7 -2
  341. package/dist/core/store-contracts/peer-directory-contract.js +14 -2
  342. package/dist/core/store-contracts/session-repo-contract.js +51 -0
  343. package/dist/core/store-contracts/session-store-contract.d.ts +2 -1
  344. package/dist/core/store-contracts/session-store-contract.js +150 -14
  345. package/dist/core/stub-env.d.ts +2 -0
  346. package/dist/core/stub-env.js +1 -0
  347. package/dist/core/synthetic-read-verdict.js +3 -3
  348. package/dist/core/task-event.d.ts +32 -4
  349. package/dist/core/task-notification.d.ts +16 -12
  350. package/dist/core/task-registry-agent.d.ts +8 -4
  351. package/dist/core/task-registry-agent.js +14 -8
  352. package/dist/core/task-registry-shared.d.ts +35 -6
  353. package/dist/core/task-registry-shared.js +11 -0
  354. package/dist/core/task-registry.d.ts +10 -1
  355. package/dist/core/task-registry.js +12 -2
  356. package/dist/core/task-result.d.ts +18 -0
  357. package/dist/core/task-spec.d.ts +18 -13
  358. package/dist/core/tighten-task-spec.js +2 -1
  359. package/dist/core/tool-catalog-entries.d.ts +23 -0
  360. package/dist/core/tool-catalog-entries.js +14 -2
  361. package/dist/core/tool-check-reading.d.ts +11 -0
  362. package/dist/core/tool-check-reading.js +11 -6
  363. package/dist/core/tool-model-gate.d.ts +2 -2
  364. package/dist/core/tool-name-aliases.d.ts +48 -18
  365. package/dist/core/tool-name-aliases.js +36 -19
  366. package/dist/core/tool-name-readings.d.ts +6 -32
  367. package/dist/core/tool-name-readings.js +2 -9
  368. package/dist/core/tool-policy.d.ts +78 -204
  369. package/dist/core/tool-policy.js +152 -204
  370. package/dist/core/tool-result-store.js +3 -0
  371. package/dist/core/tool-roster.d.ts +14 -19
  372. package/dist/core/tool-roster.js +11 -44
  373. package/dist/core/tool-spec-members.js +7 -2
  374. package/dist/core/tool-spec.d.ts +19 -11
  375. package/dist/core/tools.js +49 -9
  376. package/dist/core/trace.d.ts +6 -3
  377. package/dist/core/trace.js +2 -1
  378. package/dist/core/types.d.ts +1 -1
  379. package/dist/core/untrusted-egress.d.ts +20 -0
  380. package/dist/core/untrusted-egress.js +77 -3
  381. package/dist/core/user-attachment.d.ts +8 -1
  382. package/dist/core/user-attachment.js +64 -4
  383. package/dist/core/wiring-manifest.d.ts +9 -0
  384. package/dist/core/wiring-manifest.js +1 -0
  385. package/dist/core/workflow-journal-store.js +1 -1
  386. package/dist/engine/compaction/compaction.js +3 -2
  387. package/dist/engine/execution-env/node-execution-env.d.ts +7 -3
  388. package/dist/engine/execution-env/node-execution-env.js +11 -2
  389. package/dist/engine/harness/agent-harness.d.ts +32 -6
  390. package/dist/engine/harness/agent-harness.js +65 -9
  391. package/dist/engine/harness/types.d.ts +29 -2
  392. package/dist/engine/llm/types.d.ts +28 -11
  393. package/dist/engine/loop/agent-loop.d.ts +23 -4
  394. package/dist/engine/loop/agent-loop.js +42 -30
  395. package/dist/engine/loop/types.d.ts +16 -6
  396. package/dist/engine/session/memory-repo.d.ts +9 -2
  397. package/dist/engine/session/memory-repo.js +11 -1
  398. package/dist/engine/session/repo-utils.d.ts +6 -5
  399. package/dist/engine/session/repo-utils.js +14 -6
  400. package/dist/index.d.ts +34 -17
  401. package/dist/index.js +22 -11
  402. package/dist/internal/harness-types.d.ts +1 -1
  403. package/dist/internal/harness.d.ts +2 -1
  404. package/dist/internal/harness.js +1 -0
  405. package/dist/internal/llm.d.ts +1 -1
  406. package/dist/orchestration/run-workflow-tool.d.ts +6 -4
  407. package/dist/orchestration/run-workflow-tool.js +5 -3
  408. package/dist/orchestration/workflow.d.ts +3 -0
  409. package/dist/orchestration/workflow.js +36 -18
  410. package/dist/primitives/credential-ref.d.ts +89 -0
  411. package/dist/primitives/credential-ref.js +125 -0
  412. package/dist/primitives/index.d.ts +2 -0
  413. package/dist/primitives/index.js +1 -0
  414. package/dist/prompt-assembly/artifact.d.ts +2 -2
  415. package/dist/prompt-assembly/artifact.js +5 -3
  416. package/dist/prompt-assembly/assemble.d.ts +3 -2
  417. package/dist/prompt-assembly/assemble.js +1 -1
  418. package/dist/prompt-assembly/catalog/schema.d.ts +43 -12
  419. package/dist/prompt-assembly/catalog/schema.js +34 -2
  420. package/dist/prompt-assembly/catalog/sections.js +0 -1
  421. package/dist/prompt-assembly/composer.d.ts +3 -1
  422. package/dist/prompt-assembly/composer.js +1 -1
  423. package/dist/prompt-assembly/event-registry.js +1 -0
  424. package/dist/prompt-assembly/overlay.js +3 -3
  425. package/dist/prompt-assembly/renderers.d.ts +1 -1
  426. package/dist/prompt-assembly/renderers.js +0 -3
  427. package/dist/prompt-assembly/role-base.d.ts +15 -0
  428. package/dist/prompt-assembly/role-base.js +9 -0
  429. package/dist/prompt-assembly/select.d.ts +39 -14
  430. package/dist/prompt-assembly/select.js +47 -16
  431. package/dist/prompt-assembly/sugar.d.ts +17 -11
  432. package/dist/prompt-assembly/sugar.js +8 -3
  433. package/dist/prompt-assembly/tool-catalog.d.ts +37 -3
  434. package/dist/prompt-assembly/tool-catalog.js +114 -4
  435. package/dist/prompt-assembly/turn-snapshot.d.ts +4 -10
  436. package/dist/prompt-assembly/turn-snapshot.js +0 -3
  437. package/dist/prompt-assembly/types.d.ts +0 -7
  438. package/dist/scenarios/full-body.d.ts +11 -11
  439. package/dist/scenarios/full-body.js +4 -3
  440. package/dist/shell/lex.js +10 -1
  441. package/dist/stores/file/adoption/adopt.js +4 -3
  442. package/dist/stores/file/adoption/marker.js +3 -2
  443. package/dist/stores/file/checkpoint-store.d.ts +21 -4
  444. package/dist/stores/file/checkpoint-store.js +38 -7
  445. package/dist/stores/file/file-history-store.js +18 -11
  446. package/dist/stores/file/index.js +2 -1
  447. package/dist/stores/file/mailbox-store.d.ts +2 -1
  448. package/dist/stores/file/mailbox-store.js +26 -1
  449. package/dist/stores/file/permission-rule-adopt.js +4 -3
  450. package/dist/stores/file/permission-rule-store.js +11 -5
  451. package/dist/stores/file/session-store.d.ts +29 -6
  452. package/dist/stores/file/session-store.js +42 -50
  453. package/dist/tools/artifact/artifact-tool.js +3 -2
  454. package/dist/tools/fs/bash-program-position.d.ts +19 -2
  455. package/dist/tools/fs/bash-program-position.js +56 -9
  456. package/dist/tools/fs/bash-readonly-classifier.d.ts +15 -19
  457. package/dist/tools/fs/bash-readonly-classifier.js +5 -10
  458. package/dist/tools/fs/fs-bash.js +15 -8
  459. package/dist/tools/fs/fs-glob.d.ts +86 -0
  460. package/dist/tools/fs/fs-glob.js +226 -0
  461. package/dist/tools/fs/fs-read.js +14 -14
  462. package/dist/tools/fs/fs-search-tools.js +7 -7
  463. package/dist/tools/fs/pattern-kill-guard.d.ts +23 -0
  464. package/dist/tools/fs/pattern-kill-guard.js +429 -0
  465. package/dist/tools/fs/pdf.d.ts +9 -6
  466. package/dist/tools/fs/pdf.js +3 -3
  467. package/dist/tools/fs/program-read-model.d.ts +57 -7
  468. package/dist/tools/fs/program-read-model.js +11 -1
  469. package/dist/tools/fs/program-read-model.rows.js +78 -21
  470. package/dist/tools/fs/read-deny-home.js +3 -2
  471. package/dist/tools/fs/removal-targets.d.ts +17 -7
  472. package/dist/tools/fs/removal-targets.js +47 -20
  473. package/dist/tools/fs/search.d.ts +10 -0
  474. package/dist/tools/fs/search.js +20 -26
  475. package/dist/tools/fs/shell-read-argv.js +89 -12
  476. package/dist/tools/fs/shell-read-bindings.d.ts +31 -0
  477. package/dist/tools/fs/shell-read-bindings.js +41 -0
  478. package/dist/tools/fs/shell-read-check.d.ts +10 -0
  479. package/dist/tools/fs/shell-read-check.js +13 -20
  480. package/dist/tools/fs/shell-read-environment.d.ts +5 -1
  481. package/dist/tools/fs/shell-read-environment.js +3 -2
  482. package/dist/tools/fs/shell-read-establish.d.ts +15 -0
  483. package/dist/tools/fs/shell-read-establish.js +19 -20
  484. package/dist/tools/fs/shell-read-identity.d.ts +12 -9
  485. package/dist/tools/fs/shell-read-identity.js +9 -4
  486. package/dist/tools/fs/shell-read-plan.js +24 -16
  487. package/dist/tools/fs/shell-read-start.d.ts +6 -1
  488. package/dist/tools/fs/shell-read-write-targets.d.ts +5 -1
  489. package/dist/tools/fs/shell-read-write-targets.js +2 -3
  490. package/dist/tools/fs/shell-reentry-text.d.ts +9 -0
  491. package/dist/tools/fs/shell-reentry-text.js +40 -2
  492. package/dist/tools/todo.js +63 -63
  493. package/dist/tools/web.d.ts +19 -14
  494. package/dist/tools/web.js +46 -61
  495. package/package.json +1 -1
  496. package/test/export-surface.snapshot.json +221 -7
  497. package/wire-changes/core-stores-sql@7.57.0.json +29 -0
  498. package/wire-changes/core@7.56.0.json +3891 -0
  499. package/wire-changes/core@7.57.0.json +1487 -0
  500. package/wire-changes/mods-kernel@7.56.0.json +303 -0
  501. package/wire-changes/mods-kernel@7.57.0.json +29 -0
  502. package/wire-changes/primitives@7.57.0.json +245 -0
@@ -1,3 +1,4 @@
1
+ import { isMailboxDecisionDeliverable, isMailboxDecisionFinal } from "../core/mailbox-store.js";
1
2
  import { PEER_HELD_QUEUE_CAP, PEER_HELD_REVIEW_CAUSES } from "./peer-notices.js";
2
3
  import { peerSessionBoxHandle } from "./peer-directory.js";
3
4
  export const realPeerClock = {
@@ -10,14 +11,23 @@ export const realPeerClock = {
10
11
  clearTimeout: (h) => clearTimeout(h),
11
12
  };
12
13
  const crashHandlers = new WeakMap();
13
- export const PEER_HELD_DECISION_MEMORY = PEER_HELD_QUEUE_CAP * 4;
14
14
  export function createPeerHeldQueue(key, opts = {}) {
15
15
  const cap = opts.cap ?? PEER_HELD_QUEUE_CAP;
16
16
  const clock = opts.clock ?? realPeerClock;
17
17
  const entries = [];
18
18
  const deadlines = new Map();
19
- const decisions = new Map();
20
19
  let cfg;
20
+ const cardChains = new Map();
21
+ const onCard = (seq, f) => {
22
+ const run = (cardChains.get(seq) ?? Promise.resolve()).then(f);
23
+ const tail = run.then(() => undefined, () => undefined);
24
+ cardChains.set(seq, tail);
25
+ void tail.then(() => {
26
+ if (cardChains.get(seq) === tail)
27
+ cardChains.delete(seq);
28
+ });
29
+ return run;
30
+ };
21
31
  const sinkOrThrow = () => {
22
32
  if (cfg === undefined)
23
33
  throw new Error("PeerHeldQueue: not configured — bind a run (configure) before holding messages");
@@ -43,103 +53,199 @@ export function createPeerHeldQueue(key, opts = {}) {
43
53
  entries.splice(i, 1);
44
54
  clearDeadline(entry.seq);
45
55
  };
46
- const settleOut = (entry, settlement, reason, receipt) => {
56
+ const leave = (entry, settlement, reason, receipt) => {
47
57
  const sink = sinkOrThrow();
48
58
  remove(entry);
49
- if (settlement !== "delivered") {
50
- decisions.set(entry.seq, settlement);
51
- while (decisions.size > PEER_HELD_DECISION_MEMORY) {
52
- const oldest = decisions.keys().next();
53
- if (oldest.done === true)
54
- break;
55
- decisions.delete(oldest.value);
56
- }
57
- }
58
59
  if (receipt !== undefined)
59
60
  safe(() => sink.receipt(entry, receipt));
60
61
  safe(() => sink.onSettled?.(entry, settlement, reason, entries.length));
61
62
  };
63
+ const move = async (entry, next) => {
64
+ const sink = sinkOrThrow();
65
+ let outcome;
66
+ try {
67
+ outcome = await sink.decide(entry, entry.decision, next);
68
+ }
69
+ catch (e) {
70
+ safe(() => sink.onFault?.(entry, e));
71
+ return "fault";
72
+ }
73
+ if (outcome.ok)
74
+ return "won";
75
+ adoptCurrent(entry, outcome.current);
76
+ return "lost";
77
+ };
78
+ const adoptCurrent = (entry, current) => {
79
+ if (!entries.includes(entry))
80
+ return;
81
+ if (current === "gone" || current === "unset")
82
+ return leave(entry, "retired", "superseded", undefined);
83
+ if (isMailboxDecisionFinal(current))
84
+ return leave(entry, current, "decided_elsewhere", undefined);
85
+ if (isMailboxDecisionDeliverable(current) && entry.decision !== current) {
86
+ entry.decision = current;
87
+ clearDeadline(entry.seq);
88
+ }
89
+ };
90
+ const settleLocal = async (entry, settlement, reason) => {
91
+ const sink = sinkOrThrow();
92
+ let tells = false;
93
+ try {
94
+ tells = sink.tellsSender(entry);
95
+ }
96
+ catch {
97
+ tells = false;
98
+ }
99
+ const from = settlement === "expired" ? "held" : "delivered";
100
+ if (!tells || entry.decision !== from)
101
+ return leave(entry, "retired", reason, undefined);
102
+ const r = await move(entry, settlement);
103
+ if (r === "won")
104
+ leave(entry, settlement, reason, settlement);
105
+ else if (r === "fault")
106
+ leave(entry, "retired", reason, undefined);
107
+ };
62
108
  const armDeadline = (entry) => {
63
109
  if (cfg === undefined || cfg.dialogExpiryMs === null || deadlines.has(entry.seq))
64
110
  return;
65
- if (entry.released === true)
111
+ if (entry.decision !== "held")
66
112
  return;
67
113
  if (!PEER_HELD_REVIEW_CAUSES.includes(entry.cause))
68
114
  return;
69
115
  const h = clock.setTimeout(() => {
70
116
  deadlines.delete(entry.seq);
71
- if (!entries.includes(entry))
72
- return;
73
- rejudge();
74
- if (!entries.includes(entry))
75
- return;
76
- settleOut(entry, "expired", "deadline", "expired");
117
+ void (async () => {
118
+ if (!entries.includes(entry))
119
+ return;
120
+ await rejudge();
121
+ await onCard(entry.seq, async () => {
122
+ if (!entries.includes(entry) || entry.decision !== "held")
123
+ return;
124
+ if ((await move(entry, "expired")) === "won")
125
+ leave(entry, "expired", "deadline", "expired");
126
+ });
127
+ })().catch(() => undefined);
77
128
  }, cfg.dialogExpiryMs);
78
129
  deadlines.set(entry.seq, h);
79
130
  };
80
- const tryDeliver = (entry, reason) => {
131
+ const mayHandOver = (entry) => {
81
132
  const sink = sinkOrThrow();
82
133
  if (sink.inject === undefined)
134
+ return false;
135
+ try {
136
+ return sink.canInject === undefined || sink.canInject(entry);
137
+ }
138
+ catch {
139
+ return false;
140
+ }
141
+ };
142
+ const tryDeliver = async (entry, reason) => {
143
+ const sink = sinkOrThrow();
144
+ if (sink.inject === undefined || !mayHandOver(entry))
83
145
  return "no_leg";
146
+ if (entry.decision !== "delivered") {
147
+ const r = await move(entry, "delivered");
148
+ if (r === "lost")
149
+ return "lost";
150
+ if (r === "fault")
151
+ return "no_leg";
152
+ entry.decision = "delivered";
153
+ clearDeadline(entry.seq);
154
+ }
84
155
  try {
85
156
  if (sink.inject(entry) === "deferred")
86
157
  return "no_leg";
87
158
  }
88
159
  catch {
89
- settleOut(entry, "dropped", "inject_failed", "dropped");
160
+ await settleLocal(entry, "dropped", "inject_failed");
90
161
  return "dropped";
91
162
  }
92
- settleOut(entry, "delivered", reason, "delivered");
163
+ leave(entry, "delivered", reason, "delivered");
93
164
  return "delivered";
94
165
  };
95
- const reconcile = (present) => {
166
+ const refuseCard = async (entry, reason) => {
167
+ const owed = entry.decision === "delivered";
168
+ if (owed && !mayHandOver(entry))
169
+ return "waits";
170
+ const word = owed ? "dropped" : "refused";
171
+ const r = await move(entry, word);
172
+ if (r === "won")
173
+ leave(entry, word, reason, word);
174
+ return r;
175
+ };
176
+ const rejudgeOne = async (entry, reannounce) => {
177
+ const sink = sinkOrThrow();
178
+ let verdict;
179
+ try {
180
+ verdict = sink.judge(entry);
181
+ }
182
+ catch {
183
+ return "held";
184
+ }
185
+ if (verdict.verdict === "refuse")
186
+ return (await refuseCard(entry, "rejudge")) === "won" ? "refused" : "held";
187
+ if (verdict.verdict === "deliver" || isMailboxDecisionDeliverable(entry.decision)) {
188
+ const r = await tryDeliver(entry, entry.decision === "approved" ? "approved" : "rejudge");
189
+ return r === "delivered" ? "released" : "held";
190
+ }
191
+ if (verdict.verdict === "hold" && verdict.cause !== entry.cause) {
192
+ entry.cause = verdict.cause;
193
+ reannounce.push([entry, verdict.cause]);
194
+ clearDeadline(entry.seq);
195
+ armDeadline(entry);
196
+ }
197
+ return "held";
198
+ };
199
+ const rejudge = async () => {
200
+ sinkOrThrow();
201
+ let released = 0;
202
+ let refused = 0;
203
+ const reannounce = [];
204
+ for (const entry of [...entries]) {
205
+ const r = await onCard(entry.seq, async () => (entries.includes(entry) ? rejudgeOne(entry, reannounce) : "held"));
206
+ if (r === "released")
207
+ released += 1;
208
+ else if (r === "refused")
209
+ refused += 1;
210
+ }
96
211
  const sink = sinkOrThrow();
212
+ for (const [entry, cause] of reannounce)
213
+ if (entries.includes(entry))
214
+ safe(() => sink.onHeld?.(entry, entries.length, cause, true));
215
+ return { released, refused, held: entries.length };
216
+ };
217
+ const reconcile = (snapshot) => {
218
+ sinkOrThrow();
97
219
  let retired = 0;
98
220
  for (const entry of [...entries]) {
99
- if (present.has(entry.seq))
221
+ if (cardChains.has(entry.seq))
100
222
  continue;
101
- remove(entry);
102
- retired += 1;
103
- safe(() => sink.onSettled?.(entry, "expired", "superseded", entries.length));
223
+ const present = snapshot.has(entry.seq);
224
+ const before = entries.length;
225
+ adoptCurrent(entry, present ? (snapshot.get(entry.seq) ?? "unset") : "gone");
226
+ if (entries.length < before)
227
+ retired += 1;
104
228
  }
105
229
  return retired;
106
230
  };
107
- const rejudge = () => {
231
+ const makeRoom = async () => {
232
+ if (entries.length < cap)
233
+ return true;
108
234
  const sink = sinkOrThrow();
109
- let released = 0;
110
- let refused = 0;
111
- const reannounce = [];
112
- for (const entry of [...entries]) {
113
- let verdict;
235
+ const victim = entries.find((e) => {
236
+ if (e.decision !== "held")
237
+ return false;
114
238
  try {
115
- verdict = sink.judge(entry);
239
+ return sink.tellsSender(e);
116
240
  }
117
241
  catch {
118
- continue;
242
+ return false;
119
243
  }
120
- if (verdict.verdict === "refuse") {
121
- settleOut(entry, "refused", "rejudge", "refused");
122
- refused += 1;
123
- continue;
124
- }
125
- if (verdict.verdict === "deliver" || entry.released === true) {
126
- const r = tryDeliver(entry, entry.released === true ? "approved" : "rejudge");
127
- if (r === "no_leg")
128
- entry.released = true;
129
- else if (r === "delivered")
130
- released += 1;
131
- continue;
132
- }
133
- if (verdict.cause !== entry.cause) {
134
- entry.cause = verdict.cause;
135
- reannounce.push([entry, verdict.cause]);
136
- clearDeadline(entry.seq);
137
- armDeadline(entry);
138
- }
139
- }
140
- for (const [entry, cause] of reannounce)
141
- safe(() => sink.onHeld?.(entry, entries.length, cause, true));
142
- return { released, refused, held: entries.length };
244
+ });
245
+ if (victim === undefined)
246
+ return false;
247
+ await onCard(victim.seq, async () => (entries.includes(victim) ? settleLocal(victim, "expired", "evicted") : undefined));
248
+ return entries.length < cap;
143
249
  };
144
250
  const queue = {
145
251
  key,
@@ -160,63 +266,55 @@ export function createPeerHeldQueue(key, opts = {}) {
160
266
  cfg = { ...cfg, sink: rest };
161
267
  },
162
268
  configured: () => cfg !== undefined,
163
- hold(input) {
269
+ async hold(input, known) {
164
270
  const sink = sinkOrThrow();
165
271
  if (entries.some((e) => e.box === input.box && e.seq === input.seq))
166
- return;
167
- const entry = { ...input, heldAt: clock.now() };
168
- if (entries.length >= cap) {
169
- const oldest = entries[0];
170
- settleOut(oldest, "expired", "evicted", "expired");
272
+ return "adopted";
273
+ let state = known ?? "held";
274
+ let fresh = false;
275
+ if (known === undefined) {
276
+ let outcome;
277
+ try {
278
+ outcome = await sink.decide({ ...input, heldAt: clock.now(), decision: "held" }, undefined, "held");
279
+ }
280
+ catch (e) {
281
+ safe(() => sink.onFault?.({ ...input, heldAt: clock.now(), decision: "held" }, e));
282
+ return "fault";
283
+ }
284
+ if (outcome.ok)
285
+ fresh = true;
286
+ else if (outcome.current === "gone" || outcome.current === "unset")
287
+ return "gone";
288
+ else if (isMailboxDecisionFinal(outcome.current))
289
+ return outcome.current;
290
+ else
291
+ state = outcome.current;
292
+ }
293
+ if (entries.some((e) => e.box === input.box && e.seq === input.seq))
294
+ return fresh ? "held" : "adopted";
295
+ if (!(await makeRoom())) {
296
+ if (fresh)
297
+ safe(() => sink.receipt({ ...input, heldAt: clock.now(), decision: state }, "held"));
298
+ return "uncarded";
171
299
  }
300
+ const entry = { ...input, heldAt: clock.now(), decision: state };
172
301
  entries.push(entry);
173
302
  armDeadline(entry);
174
- safe(() => sink.onHeld?.(entry, entries.length, entry.cause, false));
175
- safe(() => sink.receipt(entry, "held"));
303
+ if (state === "held")
304
+ safe(() => sink.onHeld?.(entry, entries.length, entry.cause, false));
305
+ if (fresh)
306
+ safe(() => sink.receipt(entry, "held"));
307
+ return fresh ? "held" : "adopted";
176
308
  },
177
309
  rejudge,
178
310
  reconcile,
179
311
  settle(seq, decision) {
180
- const sink = sinkOrThrow();
181
- const entry = entries.find((e) => e.seq === seq);
182
- if (entry === undefined)
183
- return "gone";
184
- if (decision === "deny") {
185
- settleOut(entry, "denied", "denied", "denied");
186
- return "denied";
187
- }
188
- if (decision === "cancel") {
189
- settleOut(entry, "expired", "cancelled", "expired");
190
- return "expired";
191
- }
192
- let verdict;
193
- try {
194
- verdict = sink.judge(entry);
195
- }
196
- catch {
197
- entry.released = true;
198
- return "released_pending";
199
- }
200
- if (verdict.verdict === "refuse") {
201
- settleOut(entry, "refused", "approved", "refused");
202
- return "dropped_by_policy";
203
- }
204
- const r = tryDeliver(entry, "approved");
205
- if (r === "no_leg") {
206
- entry.released = true;
207
- clearDeadline(entry.seq);
208
- return "released_pending";
209
- }
210
- return r;
312
+ return onCard(seq, () => settleCard(seq, decision));
211
313
  },
314
+ has: (seq) => entries.some((e) => e.seq === seq),
212
315
  list: () => entries.map((e) => ({ ...e, ...(e.hopChain !== undefined ? { hopChain: [...e.hopChain] } : {}), ...(e.peerMeta !== undefined ? { peerMeta: { ...e.peerMeta } } : {}) })),
213
316
  size: () => entries.length,
214
- decisions: () => decisions,
215
- forgetDecisions(seqs) {
216
- for (const seq of seqs)
217
- decisions.delete(seq);
218
- },
219
- shutdown() {
317
+ async shutdown() {
220
318
  if (cfg === undefined) {
221
319
  entries.length = 0;
222
320
  for (const h of deadlines.values())
@@ -224,12 +322,63 @@ export function createPeerHeldQueue(key, opts = {}) {
224
322
  deadlines.clear();
225
323
  return;
226
324
  }
227
- for (const entry of [...entries])
228
- settleOut(entry, "expired", "shutdown", "expired");
325
+ for (const entry of [...entries]) {
326
+ await onCard(entry.seq, async () => {
327
+ if (entries.includes(entry))
328
+ await settleLocal(entry, "expired", "shutdown");
329
+ });
330
+ }
229
331
  },
230
332
  };
333
+ async function settleCard(seq, decision) {
334
+ const sink = sinkOrThrow();
335
+ const entry = entries.find((e) => e.seq === seq);
336
+ if (entry === undefined)
337
+ return "gone";
338
+ const handedOver = entry.decision === "delivered";
339
+ if (decision === "deny" || decision === "cancel") {
340
+ if (handedOver)
341
+ return "delivered";
342
+ const word = decision === "deny" ? "denied" : "expired";
343
+ const r = await move(entry, word);
344
+ if (r === "fault")
345
+ throw new Error(`PeerHeldQueue.settle: the ${decision} of seq ${seq} could not be recorded (the store refused the move); nothing was decided`);
346
+ if (r === "lost")
347
+ return "decided_elsewhere";
348
+ leave(entry, word, decision === "deny" ? "denied" : "cancelled", word);
349
+ return word;
350
+ }
351
+ let verdict;
352
+ try {
353
+ verdict = sink.judge(entry);
354
+ }
355
+ catch {
356
+ verdict = undefined;
357
+ }
358
+ if (verdict?.verdict === "refuse") {
359
+ const r = await refuseCard(entry, "approved");
360
+ if (r === "fault")
361
+ throw new Error(`PeerHeldQueue.settle: the refusal of seq ${seq} could not be recorded (the store refused the move)`);
362
+ if (r !== "waits")
363
+ return r === "lost" ? "decided_elsewhere" : "dropped_by_policy";
364
+ }
365
+ if (handedOver)
366
+ return "delivered";
367
+ if (entry.decision === "held") {
368
+ const r = await move(entry, "approved");
369
+ if (r === "fault")
370
+ throw new Error(`PeerHeldQueue.settle: the approval of seq ${seq} could not be recorded (the store refused the move); nothing was decided`);
371
+ if (r === "lost")
372
+ return "decided_elsewhere";
373
+ entry.decision = "approved";
374
+ clearDeadline(entry.seq);
375
+ }
376
+ if (verdict === undefined)
377
+ return "released_pending";
378
+ const d = await tryDeliver(entry, "approved");
379
+ return d === "no_leg" ? "released_pending" : d === "lost" ? "decided_elsewhere" : d;
380
+ }
231
381
  crashHandlers.set(queue, () => {
232
- decisions.clear();
233
382
  entries.length = 0;
234
383
  for (const h of deadlines.values())
235
384
  clock.clearTimeout(h);