@astrosheep/keiyaku 4.5.29 → 4.6.2

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 (418) hide show
  1. package/build/integrations/marketplace/plugins/keiyaku/skills/keiyaku/SKILL.md +0 -13
  2. package/build/integrations/marketplace/plugins/keiyaku/skills/keiyaku-akuma/SKILL.md +47 -78
  3. package/build/integrations/marketplace/plugins/keiyaku/skills/keiyaku-akuma/references/automation.md +54 -41
  4. package/build/integrations/marketplace/plugins/keiyaku/skills/keiyaku-babysit/SKILL.md +10 -0
  5. package/build/integrations/marketplace/plugins/keiyaku/skills/keiyaku-bind/SKILL.md +27 -9
  6. package/build/integrations/marketplace/plugins/keiyaku/skills/keiyaku-workflow/SKILL.md +68 -71
  7. package/build/src/akuma/akuma-call.d.ts +53 -0
  8. package/build/src/akuma/akuma-call.js +113 -0
  9. package/build/src/akuma/akuma-instance.d.ts +20 -18
  10. package/build/src/akuma/akuma-instance.js +65 -175
  11. package/build/src/akuma/akuma-observe.d.ts +3 -21
  12. package/build/src/akuma/akuma-observe.js +7 -24
  13. package/build/src/akuma/{akuma-handle.d.ts → akuma-owner.d.ts} +55 -27
  14. package/build/src/akuma/{akuma-handle.js → akuma-owner.js} +24 -23
  15. package/build/src/akuma/akuma-selection-execution.d.ts +51 -0
  16. package/build/src/akuma/akuma-selection-execution.js +134 -0
  17. package/build/src/akuma/{fleet-execution.d.ts → akuma-wait.d.ts} +24 -44
  18. package/build/src/akuma/akuma-wait.js +113 -0
  19. package/build/src/akuma/akuma.d.ts +35 -89
  20. package/build/src/akuma/akuma.js +148 -30
  21. package/build/src/akuma/archetype.d.ts +12 -0
  22. package/build/src/akuma/archetype.js +47 -19
  23. package/build/src/akuma/body.d.ts +76 -36
  24. package/build/src/akuma/body.js +84 -49
  25. package/build/src/akuma/call-initial-tell.d.ts +131 -22
  26. package/build/src/akuma/call-initial-tell.js +31 -1
  27. package/build/src/akuma/call-request.d.ts +237 -31
  28. package/build/src/akuma/call-request.js +67 -94
  29. package/build/src/akuma/coordinate.d.ts +15 -5
  30. package/build/src/akuma/coordinate.js +12 -22
  31. package/build/src/akuma/dispatch-association.d.ts +1 -1
  32. package/build/src/akuma/dispatch-association.js +1 -10
  33. package/build/src/akuma/heart/activity-schema.d.ts +325 -0
  34. package/build/src/akuma/heart/activity-schema.js +53 -0
  35. package/build/src/akuma/heart/facts.d.ts +1 -6
  36. package/build/src/akuma/heart/index.d.ts +3 -1
  37. package/build/src/akuma/heart/index.js +4 -1
  38. package/build/src/akuma/heart/rows.d.ts +49 -2
  39. package/build/src/akuma/heart/rows.js +16 -2
  40. package/build/src/akuma/heart/soul.d.ts +1 -0
  41. package/build/src/akuma/heart/soul.js +6 -4
  42. package/build/src/akuma/heart/tells.d.ts +1 -0
  43. package/build/src/akuma/heart/tells.js +18 -0
  44. package/build/src/akuma/identity.d.ts +10 -7
  45. package/build/src/akuma/identity.js +23 -0
  46. package/build/src/akuma/index.d.ts +10 -8
  47. package/build/src/akuma/index.js +2 -2
  48. package/build/src/akuma/nuke.d.ts +3 -0
  49. package/build/src/akuma/nuke.js +13 -7
  50. package/build/src/akuma/projection.d.ts +0 -5
  51. package/build/src/akuma/projection.js +22 -43
  52. package/build/src/akuma/provider-recipe.d.ts +58 -13
  53. package/build/src/akuma/provider-recipe.js +62 -80
  54. package/build/src/akuma/provider.d.ts +6 -76
  55. package/build/src/akuma/provider.js +11 -219
  56. package/build/src/akuma/providers/acp/config.d.ts +2 -0
  57. package/build/src/akuma/providers/acp/config.js +26 -1
  58. package/build/src/akuma/providers/acp/core.d.ts +7 -0
  59. package/build/src/akuma/providers/acp/core.js +49 -18
  60. package/build/src/akuma/providers/acp/index.js +14 -6
  61. package/build/src/akuma/providers/grok-build/index.js +44 -13
  62. package/build/src/akuma/providers/index.d.ts +3 -3
  63. package/build/src/akuma/providers/index.js +2 -13
  64. package/build/src/akuma/providers/opencode-sdk/event-stream.d.ts +28 -0
  65. package/build/src/akuma/providers/opencode-sdk/event-stream.js +92 -0
  66. package/build/src/akuma/providers/opencode-sdk/events.d.ts +0 -1
  67. package/build/src/akuma/providers/opencode-sdk/index.js +200 -64
  68. package/build/src/akuma/providers/opencode-sdk/session.d.ts +41 -1
  69. package/build/src/akuma/providers/opencode-sdk/session.js +69 -2
  70. package/build/src/akuma/providers/pi/events.js +5 -2
  71. package/build/src/akuma/providers/pi/index.d.ts +3 -4
  72. package/build/src/akuma/providers/pi/index.js +99 -45
  73. package/build/src/akuma/publication.d.ts +84 -3
  74. package/build/src/akuma/publication.js +145 -2
  75. package/build/src/akuma/read-pool.d.ts +2 -0
  76. package/build/src/akuma/read-pool.js +15 -0
  77. package/build/src/akuma/request-rendezvous.js +10 -0
  78. package/build/src/akuma/request-serve.js +7 -0
  79. package/build/src/akuma/request-wire.d.ts +14 -26
  80. package/build/src/akuma/request-wire.js +4 -0
  81. package/build/src/akuma/requests.d.ts +0 -2
  82. package/build/src/akuma/requests.js +0 -17
  83. package/build/src/akuma/{fleet-observation.d.ts → selection-observation.d.ts} +37 -36
  84. package/build/src/akuma/selection-observation.js +65 -0
  85. package/build/src/akuma/{fleet-owner-port.d.ts → selection-owner-port.d.ts} +3 -3
  86. package/build/src/akuma/{fleet-owner-port.js → selection-owner-port.js} +11 -17
  87. package/build/src/akuma/{fleet-request.d.ts → selection-request.d.ts} +42 -82
  88. package/build/src/akuma/{fleet-request.js → selection-request.js} +92 -136
  89. package/build/src/akuma/turn-drive.js +73 -14
  90. package/build/src/akuma-body.js +91 -56
  91. package/build/src/body/amend.d.ts +5 -0
  92. package/build/src/body/amend.js +26 -50
  93. package/build/src/body/arc.d.ts +4 -2
  94. package/build/src/body/arc.js +19 -26
  95. package/build/src/body/criteria.d.ts +6 -0
  96. package/build/src/body/criteria.js +37 -0
  97. package/build/src/body/decode.js +5 -42
  98. package/build/src/body/region.d.ts +5 -0
  99. package/build/src/body/region.js +45 -2
  100. package/build/src/body/render.js +2 -4
  101. package/build/src/cli/activity.d.ts +26 -0
  102. package/build/src/cli/activity.js +75 -0
  103. package/build/src/cli/actor.d.ts +3 -1
  104. package/build/src/cli/actor.js +15 -2
  105. package/build/src/cli/commands/akuma-grammar.d.ts +75 -0
  106. package/build/src/cli/commands/akuma-grammar.js +414 -0
  107. package/build/src/cli/commands/akuma.d.ts +5 -69
  108. package/build/src/cli/commands/akuma.js +352 -319
  109. package/build/src/cli/commands/amend.d.ts +4 -5
  110. package/build/src/cli/commands/amend.js +1 -2
  111. package/build/src/cli/commands/bind.d.ts +4 -5
  112. package/build/src/cli/commands/bind.js +7 -10
  113. package/build/src/cli/commands/contract-grammar.d.ts +112 -0
  114. package/build/src/cli/commands/contract-grammar.js +282 -0
  115. package/build/src/cli/commands/contract-help.d.ts +17 -22
  116. package/build/src/cli/commands/contract-help.js +37 -24
  117. package/build/src/cli/commands/contract.d.ts +18 -97
  118. package/build/src/cli/commands/contract.js +621 -233
  119. package/build/src/cli/commands/install.d.ts +1 -1
  120. package/build/src/cli/commands/install.js +2 -2
  121. package/build/src/cli/commands/task-grammar.d.ts +19 -0
  122. package/build/src/cli/commands/task-grammar.js +438 -0
  123. package/build/src/cli/commands/task-query.js +23 -104
  124. package/build/src/cli/commands/task.d.ts +5 -20
  125. package/build/src/cli/commands/task.js +414 -364
  126. package/build/src/cli/coordinates.d.ts +10 -0
  127. package/build/src/cli/coordinates.js +20 -0
  128. package/build/src/cli/draft.d.ts +7 -1
  129. package/build/src/cli/main.js +10 -1
  130. package/build/src/cli/parse.d.ts +8 -9
  131. package/build/src/cli/parse.js +62 -62
  132. package/build/src/cli/render/akuma-activity.d.ts +54 -36
  133. package/build/src/cli/render/akuma-activity.js +262 -242
  134. package/build/src/cli/render/akuma-tool.d.ts +8 -4
  135. package/build/src/cli/render/akuma-tool.js +6 -5
  136. package/build/src/cli/render/akuma.d.ts +36 -16
  137. package/build/src/cli/render/akuma.js +65 -132
  138. package/build/src/cli/render/audit.d.ts +6 -2
  139. package/build/src/cli/render/audit.js +59 -28
  140. package/build/src/cli/render/catalog.d.ts +11 -2
  141. package/build/src/cli/render/catalog.js +75 -95
  142. package/build/src/cli/render/contract-history.d.ts +3 -1
  143. package/build/src/cli/render/contract-history.js +215 -22
  144. package/build/src/cli/render/contract-observation.d.ts +10 -5
  145. package/build/src/cli/render/contract-observation.js +29 -46
  146. package/build/src/cli/render/contract.d.ts +10 -3
  147. package/build/src/cli/render/contract.js +252 -103
  148. package/build/src/cli/render/effects.d.ts +26 -0
  149. package/build/src/cli/render/effects.js +41 -0
  150. package/build/src/cli/render/execution-progress.d.ts +18 -6
  151. package/build/src/cli/render/execution-progress.js +34 -31
  152. package/build/src/cli/render/kanshi-akuma.d.ts +1 -2
  153. package/build/src/cli/render/kanshi-akuma.js +5 -26
  154. package/build/src/cli/render/kanshi.js +107 -128
  155. package/build/src/cli/render/marks.d.ts +13 -0
  156. package/build/src/cli/render/marks.js +74 -0
  157. package/build/src/cli/render/nuke.js +18 -7
  158. package/build/src/cli/render/receipt.d.ts +10 -4
  159. package/build/src/cli/render/receipt.js +124 -44
  160. package/build/src/cli/render/reconcile.d.ts +5 -0
  161. package/build/src/cli/render/reconcile.js +152 -0
  162. package/build/src/cli/render/refusal.d.ts +21 -4
  163. package/build/src/cli/render/refusal.js +60 -33
  164. package/build/src/cli/render/region.js +3 -2
  165. package/build/src/cli/render/settings.js +2 -12
  166. package/build/src/cli/render/task.d.ts +37 -6
  167. package/build/src/cli/render/task.js +161 -157
  168. package/build/src/cli/render/terminal.d.ts +20 -1
  169. package/build/src/cli/render/terminal.js +92 -18
  170. package/build/src/cli/runtime.d.ts +32 -8
  171. package/build/src/cli/runtime.js +157 -165
  172. package/build/src/cli/selectors.d.ts +5 -2
  173. package/build/src/cli/selectors.js +11 -3
  174. package/build/src/cli/streams.d.ts +11 -0
  175. package/build/src/cli/streams.js +32 -0
  176. package/build/src/cli/usage.d.ts +2 -0
  177. package/build/src/cli/usage.js +12 -8
  178. package/build/src/contract-guidance.js +3 -7
  179. package/build/src/contract-worktree.d.ts +20 -28
  180. package/build/src/contract-worktree.js +18 -70
  181. package/build/src/coordination/durable-file.d.ts +2 -2
  182. package/build/src/coordination/durable-file.js +0 -27
  183. package/build/src/core/facts/codec.d.ts +1 -2
  184. package/build/src/core/facts/codec.js +6 -7
  185. package/build/src/core/facts/gate.d.ts +0 -1
  186. package/build/src/core/facts/gate.js +0 -82
  187. package/build/src/core/facts/types.d.ts +1 -2
  188. package/build/src/core/verbs/abandon.d.ts +2 -6
  189. package/build/src/core/verbs/abandon.js +0 -16
  190. package/build/src/core/verbs/amend.d.ts +0 -1
  191. package/build/src/core/verbs/amend.js +0 -20
  192. package/build/src/core/verbs/arc.d.ts +7 -8
  193. package/build/src/core/verbs/arc.js +2 -19
  194. package/build/src/core/verbs/attestation.d.ts +2 -6
  195. package/build/src/core/verbs/attestation.js +0 -16
  196. package/build/src/core/verbs/bind.d.ts +0 -1
  197. package/build/src/core/verbs/bind.js +0 -16
  198. package/build/src/core/verbs/deliver.d.ts +0 -1
  199. package/build/src/core/verbs/deliver.js +0 -16
  200. package/build/src/core/verbs/placement.d.ts +2 -1
  201. package/build/src/core/verbs/placement.js +10 -59
  202. package/build/src/git/admission.d.ts +6 -4
  203. package/build/src/git/admission.js +4 -0
  204. package/build/src/git/hooks.d.ts +55 -30
  205. package/build/src/git/hooks.js +30 -3
  206. package/build/src/git/identity.d.ts +6 -0
  207. package/build/src/git/identity.js +47 -0
  208. package/build/src/git/integration.d.ts +31 -13
  209. package/build/src/git/integration.js +32 -1
  210. package/build/src/git/nuke.d.ts +10 -1
  211. package/build/src/git/nuke.js +31 -11
  212. package/build/src/git/observe.js +2 -15
  213. package/build/src/git/private-state-seat.d.ts +6 -7
  214. package/build/src/git/private-state-seat.js +8 -6
  215. package/build/src/git/read-observation.d.ts +6 -1
  216. package/build/src/git/read-observation.js +81 -46
  217. package/build/src/git/reconcile.d.ts +117 -40
  218. package/build/src/git/reconcile.js +169 -40
  219. package/build/src/git/scratch.d.ts +7 -4
  220. package/build/src/git/scratch.js +28 -6
  221. package/build/src/git/target-placement.d.ts +53 -38
  222. package/build/src/git/target-placement.js +69 -54
  223. package/build/src/git/tender.d.ts +37 -28
  224. package/build/src/git/tender.js +39 -0
  225. package/build/src/git/terminal-reconcile.js +21 -23
  226. package/build/src/git/terminal-seal.d.ts +8 -6
  227. package/build/src/git/terminal-seal.js +10 -0
  228. package/build/src/git/workspace.d.ts +29 -15
  229. package/build/src/git/workspace.js +28 -2
  230. package/build/src/identity/normalize.js +19 -6
  231. package/build/src/index.d.ts +78 -7
  232. package/build/src/index.js +52 -4
  233. package/build/src/kanshi/read.d.ts +3 -3
  234. package/build/src/kanshi/read.js +21 -21
  235. package/build/src/kanshi/report.d.ts +9 -8
  236. package/build/src/kanshi/roster.d.ts +2 -0
  237. package/build/src/kanshi/roster.js +2 -0
  238. package/build/src/kanshi/select.js +7 -3
  239. package/build/src/library/address.d.ts +3 -7
  240. package/build/src/library/address.js +7 -7
  241. package/build/src/library/akuma-creation.d.ts +21 -32
  242. package/build/src/library/akuma-creation.js +148 -165
  243. package/build/src/library/akumas.d.ts +20 -22
  244. package/build/src/library/akumas.js +43 -20
  245. package/build/src/library/bind.d.ts +107 -13
  246. package/build/src/library/bind.js +29 -23
  247. package/build/src/library/continuation.d.ts +556 -28
  248. package/build/src/library/continuation.js +29 -54
  249. package/build/src/library/contract-composition.d.ts +40 -0
  250. package/build/src/library/contract-composition.js +105 -0
  251. package/build/src/library/contract-creation.d.ts +7 -0
  252. package/build/src/library/contract-creation.js +192 -0
  253. package/build/src/library/contract-execution.d.ts +29 -40
  254. package/build/src/library/contract-execution.js +503 -128
  255. package/build/src/library/contract-operations.d.ts +275 -134
  256. package/build/src/library/contract-operations.js +83 -92
  257. package/build/src/library/contract-outcomes.d.ts +71 -0
  258. package/build/src/library/contract-outcomes.js +32 -0
  259. package/build/src/library/contract-settings.d.ts +25 -0
  260. package/build/src/library/contract-settings.js +135 -0
  261. package/build/src/library/contract-types.d.ts +17 -38
  262. package/build/src/library/delivery.d.ts +530 -10
  263. package/build/src/library/delivery.js +20 -45
  264. package/build/src/library/input.d.ts +3 -1
  265. package/build/src/library/input.js +11 -16
  266. package/build/src/library/invocation.d.ts +87 -0
  267. package/build/src/library/invocation.js +290 -0
  268. package/build/src/library/keiyaku.d.ts +45 -22
  269. package/build/src/library/keiyaku.js +134 -8
  270. package/build/src/library/nuke.d.ts +2 -11
  271. package/build/src/library/nuke.js +70 -57
  272. package/build/src/library/outcome.d.ts +13196 -0
  273. package/build/src/library/outcome.js +487 -0
  274. package/build/src/library/reconcile.d.ts +96 -24
  275. package/build/src/library/reconcile.js +102 -42
  276. package/build/src/library/refusal.d.ts +470 -42
  277. package/build/src/library/refusal.js +55 -143
  278. package/build/src/library/region.d.ts +15 -7
  279. package/build/src/library/region.js +23 -3
  280. package/build/src/library/repo.d.ts +2 -12
  281. package/build/src/library/repo.js +1 -22
  282. package/build/src/library/selection.d.ts +121 -0
  283. package/build/src/library/{fleet.js → selection.js} +169 -152
  284. package/build/src/plugin/public.d.ts +2 -0
  285. package/build/src/protocol/abandon.d.ts +2 -2
  286. package/build/src/protocol/abandon.js +1 -0
  287. package/build/src/protocol/amend.js +1 -0
  288. package/build/src/protocol/arc.d.ts +6 -4
  289. package/build/src/protocol/attempt.d.ts +4 -2
  290. package/build/src/protocol/attempt.js +10 -0
  291. package/build/src/protocol/audit.d.ts +255 -52
  292. package/build/src/protocol/audit.js +63 -5
  293. package/build/src/protocol/bind.d.ts +18 -17
  294. package/build/src/protocol/bind.js +9 -28
  295. package/build/src/protocol/completion.d.ts +256 -22
  296. package/build/src/protocol/completion.js +100 -12
  297. package/build/src/protocol/deliver.d.ts +34 -23
  298. package/build/src/protocol/deliver.js +39 -25
  299. package/build/src/protocol/execution-observation.d.ts +36 -37
  300. package/build/src/protocol/execution-observation.js +7 -9
  301. package/build/src/protocol/intent.d.ts +101 -30
  302. package/build/src/protocol/intent.js +74 -1
  303. package/build/src/protocol/operations.d.ts +570 -64
  304. package/build/src/protocol/operations.js +189 -9
  305. package/build/src/protocol/outcome.d.ts +2 -1
  306. package/build/src/protocol/placement.d.ts +2 -2
  307. package/build/src/protocol/placement.js +3 -1
  308. package/build/src/protocol/progress.d.ts +108 -65
  309. package/build/src/protocol/progress.js +82 -132
  310. package/build/src/protocol/read/status.d.ts +4 -3
  311. package/build/src/protocol/read/status.js +6 -5
  312. package/build/src/protocol/reconcile.d.ts +3 -3
  313. package/build/src/protocol/reconcile.js +4 -0
  314. package/build/src/protocol/reintegrate.d.ts +2 -2
  315. package/build/src/protocol/review.d.ts +30 -12
  316. package/build/src/protocol/review.js +15 -24
  317. package/build/src/protocol/run.d.ts +34 -5
  318. package/build/src/protocol/run.js +24 -12
  319. package/build/src/runtime/proc/windows-launch.exe +0 -0
  320. package/build/src/settings.d.ts +0 -10
  321. package/build/src/settings.js +0 -76
  322. package/build/src/settlement/holder.d.ts +1 -1
  323. package/build/src/settlement/settle.d.ts +25 -16
  324. package/build/src/settlement/settle.js +80 -20
  325. package/build/src/task/board.d.ts +3 -1
  326. package/build/src/task/board.js +13 -17
  327. package/build/src/task/catalog.d.ts +0 -4
  328. package/build/src/task/catalog.js +0 -15
  329. package/build/src/task/compose-language.d.ts +19 -9
  330. package/build/src/task/compose-language.js +30 -20
  331. package/build/src/task/compose.d.ts +7 -37
  332. package/build/src/task/compose.js +20 -2
  333. package/build/src/task/created-observation.d.ts +0 -1
  334. package/build/src/task/created-observation.js +1 -4
  335. package/build/src/task/document.d.ts +12 -2
  336. package/build/src/task/document.js +4 -0
  337. package/build/src/task/identity.d.ts +4 -1
  338. package/build/src/task/identity.js +21 -17
  339. package/build/src/task/index.d.ts +36 -16
  340. package/build/src/task/index.js +103 -96
  341. package/build/src/task/lifecycle-operations.d.ts +1 -1
  342. package/build/src/task/mutation-result.d.ts +647 -586
  343. package/build/src/task/mutation-result.js +79 -46
  344. package/build/src/task/mutation.d.ts +298 -270
  345. package/build/src/task/mutation.js +93 -110
  346. package/build/src/task/operation-types.d.ts +6 -49
  347. package/build/src/task/operations.d.ts +2 -1
  348. package/build/src/task/operations.js +35 -12
  349. package/build/src/task/query.d.ts +9 -3
  350. package/build/src/task/query.js +42 -16
  351. package/build/src/task/store.d.ts +2 -1
  352. package/build/src/task/store.js +10 -14
  353. package/build/src/verification/declaration.d.ts +0 -1
  354. package/build/src/verification/declaration.js +1 -18
  355. package/build/src/verification/execution.d.ts +6 -2
  356. package/build/src/verification/observation.d.ts +1 -1
  357. package/package.json +2 -18
  358. package/build/src/akuma/akuma-product.d.ts +0 -58
  359. package/build/src/akuma/akuma-product.js +0 -276
  360. package/build/src/akuma/fleet-execution.js +0 -234
  361. package/build/src/akuma/fleet-observation.js +0 -97
  362. package/build/src/cli/accepted.d.ts +0 -24
  363. package/build/src/cli/accepted.js +0 -167
  364. package/build/src/cli/catalog.d.ts +0 -45
  365. package/build/src/cli/catalog.js +0 -1
  366. package/build/src/cli/commands/akuma-invoke.d.ts +0 -114
  367. package/build/src/cli/commands/akuma-invoke.js +0 -375
  368. package/build/src/cli/commands/contract-invoke.d.ts +0 -34
  369. package/build/src/cli/commands/contract-invoke.js +0 -259
  370. package/build/src/cli/commands/nuke.d.ts +0 -10
  371. package/build/src/cli/commands/nuke.js +0 -20
  372. package/build/src/cli/commands/status-set.d.ts +0 -4
  373. package/build/src/cli/commands/status-set.js +0 -52
  374. package/build/src/cli/commands/task-invoke.d.ts +0 -49
  375. package/build/src/cli/commands/task-invoke.js +0 -306
  376. package/build/src/cli/invoke.d.ts +0 -27
  377. package/build/src/cli/invoke.js +0 -521
  378. package/build/src/cli/render/board.d.ts +0 -3
  379. package/build/src/cli/render/board.js +0 -25
  380. package/build/src/cli/render/status-set.d.ts +0 -5
  381. package/build/src/cli/render/status-set.js +0 -19
  382. package/build/src/cli/render/text.d.ts +0 -3
  383. package/build/src/cli/render/text.js +0 -33
  384. package/build/src/cli/result.d.ts +0 -240
  385. package/build/src/cli/result.js +0 -1
  386. package/build/src/git/result-codec.d.ts +0 -29
  387. package/build/src/git/result-codec.js +0 -309
  388. package/build/src/kanshi/fleet.d.ts +0 -6
  389. package/build/src/kanshi/fleet.js +0 -27
  390. package/build/src/library/audit.d.ts +0 -29
  391. package/build/src/library/audit.js +0 -41
  392. package/build/src/library/composition.d.ts +0 -15
  393. package/build/src/library/composition.js +0 -28
  394. package/build/src/library/configuration.d.ts +0 -4
  395. package/build/src/library/configuration.js +0 -2
  396. package/build/src/library/contract-bind.d.ts +0 -31
  397. package/build/src/library/contract-bind.js +0 -140
  398. package/build/src/library/contract-forwarding.d.ts +0 -55
  399. package/build/src/library/contract-forwarding.js +0 -67
  400. package/build/src/library/contract-handle.d.ts +0 -50
  401. package/build/src/library/contract-handle.js +0 -385
  402. package/build/src/library/contract.d.ts +0 -46
  403. package/build/src/library/contract.js +0 -73
  404. package/build/src/library/execution-result.d.ts +0 -243
  405. package/build/src/library/execution-result.js +0 -101
  406. package/build/src/library/execution.d.ts +0 -8
  407. package/build/src/library/execution.js +0 -102
  408. package/build/src/library/fleet.d.ts +0 -83
  409. package/build/src/library/mutation.d.ts +0 -501
  410. package/build/src/library/mutation.js +0 -248
  411. package/build/src/library/result-codec.d.ts +0 -2
  412. package/build/src/library/result-codec.js +0 -12
  413. package/build/src/protocol/result-codec.d.ts +0 -23
  414. package/build/src/protocol/result-codec.js +0 -488
  415. package/build/src/settlement/result-codec.d.ts +0 -2
  416. package/build/src/settlement/result-codec.js +0 -56
  417. package/build/src/task/public.d.ts +0 -2
  418. package/build/src/task/public.js +0 -1
@@ -1,21 +1,22 @@
1
- import { akumaIdSchema } from "./akuma.js";
1
+ import { z } from "zod";
2
+ import { AkumaNotBornError, AkumaObservationError } from "./akuma-errors.js";
3
+ import { akumaIdSchema } from "./identity.js";
2
4
  import { requestBodyCommand } from "./request-rendezvous.js";
3
5
  import { eraseRequestCommand, } from "./request-wire.js";
4
- import { fleetResultSchemas, isKillResult, isTellResult, isTellWaitResult, isWaitResult, } from "./fleet-observation.js";
5
- import { z } from "zod";
6
6
  import { schemaJsonText } from "./schema.js";
7
- import { AkumaDecodeError, AkumaNotBornError, AkumaObservationError } from "./akuma-errors.js";
7
+ import { selectionResultSchemas, } from "./selection-observation.js";
8
8
  const nonblankTextSchema = z.string().refine((value) => value.trim() !== "");
9
- const fleetTargetsSchema = z
9
+ const selectionTargetsSchema = z
10
10
  .array(akumaIdSchema)
11
11
  .min(1)
12
12
  .superRefine((ids, context) => {
13
13
  if (new Set(ids).size !== ids.length)
14
14
  context.addIssue({ code: "custom", message: "expected a deduplicated target set" });
15
- });
15
+ })
16
+ .readonly();
16
17
  const waitRequestSchema = z
17
18
  .object({
18
- targets: fleetTargetsSchema,
19
+ targets: selectionTargetsSchema,
19
20
  completion: z.enum(["any", "all"]),
20
21
  timeoutMs: z.number().int().nonnegative().optional(),
21
22
  })
@@ -26,65 +27,62 @@ const waitRequestSchema = z
26
27
  ...(timeoutMs === undefined ? {} : { timeoutMs }),
27
28
  }));
28
29
  const tellRequestSchema = z
29
- .object({ target: akumaIdSchema, body: z.string(), initiator: nonblankTextSchema.optional() })
30
- .strict()
31
- .transform((request) => ({ action: "akuma.tell", ...request }));
32
- const tellAnswerRequestSchema = z
33
30
  .object({
34
31
  target: akumaIdSchema,
35
32
  body: z.string(),
36
- schemaJson: nonblankTextSchema,
37
33
  initiator: nonblankTextSchema.optional(),
38
34
  interrupt: z.boolean().optional(),
39
35
  })
40
36
  .strict()
41
- .transform((request) => ({ action: "akuma.tell-answer", ...request }));
42
- const tellWaitRequestSchema = z
37
+ .transform((request) => ({ action: "akuma.tell", ...request }));
38
+ const askRequestSchema = z
43
39
  .object({
44
40
  target: akumaIdSchema,
45
41
  body: z.string(),
46
- timeoutMs: z.number().int().nonnegative(),
42
+ timeoutMs: z.number().int().nonnegative().optional(),
47
43
  schemaJson: nonblankTextSchema.optional(),
48
44
  initiator: nonblankTextSchema.optional(),
49
45
  interrupt: z.boolean().optional(),
50
46
  })
51
47
  .strict()
52
- .transform((request) => ({ action: "akuma.tell-wait", ...request }));
48
+ .transform((request) => ({ action: "akuma.ask", ...request }));
53
49
  const killRequestSchema = z
54
- .object({ targets: fleetTargetsSchema })
50
+ .object({ targets: selectionTargetsSchema })
55
51
  .strict()
56
52
  .transform((request) => ({ action: "akuma.kill", ...request }));
57
53
  const waitServiceSchema = z.object({ action: z.literal("akuma.wait") }).strict();
58
54
  const tellServiceSchema = z
59
55
  .object({ action: z.literal("akuma.tell"), target: akumaIdSchema, tellId: nonblankTextSchema })
60
56
  .strict();
61
- const tellWaitServiceSchema = z
62
- .object({ action: z.literal("akuma.tell-wait"), target: akumaIdSchema, tellId: nonblankTextSchema })
57
+ const askServiceSchema = z
58
+ .object({ action: z.literal("akuma.ask"), target: akumaIdSchema, tellId: nonblankTextSchema })
63
59
  .strict();
64
60
  const killServiceSchema = z
65
61
  .object({
66
62
  action: z.literal("akuma.kill"),
67
- results: z.array(z.object({ id: akumaIdSchema, evidence: fleetResultSchemas.killEvidence }).strict()),
63
+ results: z
64
+ .array(z.object({ id: akumaIdSchema, evidence: selectionResultSchemas.killEvidence }).strict())
65
+ .readonly(),
68
66
  })
69
67
  .strict();
70
68
  /**
71
- * A forwarded Fleet request leaves selection and observation to the parent, so
69
+ * A forwarded Selection request leaves selection and observation to the parent, so
72
70
  * the parent's typed refusal is the only evidence the child can classify on.
73
71
  * Transporting it is the codec's own duty: an unencoded failure reaches the
74
72
  * caller as an anonymous request error and loses the identity it names.
75
73
  *
76
74
  * The transport voids a begun request only when the encoded failure proves no
77
75
  * product effect. A refused selection or an unreadable observation never
78
- * reached an action, so Fleet proves that through the same refusal envelope
76
+ * reached an action, so Selection proves that through the same refusal envelope
79
77
  * the Contract codec uses; a genuinely failed action stays unencoded and
80
78
  * keeps its existing anonymous classification.
81
79
  */
82
- const fleetRefusalSchema = z.union([
80
+ const selectionRefusalSchema = z.union([
83
81
  z.object({ kind: z.literal("akuma-not-born"), id: akumaIdSchema }).strict(),
84
82
  z.object({ kind: z.literal("akuma-observation"), id: akumaIdSchema, diagnostic: z.string() }).strict(),
85
83
  ]);
86
- const fleetLiveFailureSchema = z.object({ kind: z.literal("refused"), failure: fleetRefusalSchema }).strict();
87
- export function encodeFleetLiveFailure(error) {
84
+ const selectionLiveFailureSchema = z.object({ kind: z.literal("refused"), failure: selectionRefusalSchema }).strict();
85
+ export function encodeSelectionLiveFailure(error) {
88
86
  const failure = error instanceof AkumaNotBornError
89
87
  ? { kind: "akuma-not-born", id: error.id }
90
88
  : error instanceof AkumaObservationError
@@ -92,8 +90,8 @@ export function encodeFleetLiveFailure(error) {
92
90
  : null;
93
91
  return failure === null ? null : { kind: "refused", failure };
94
92
  }
95
- export function decodeFleetLiveFailure(value) {
96
- const parsed = fleetLiveFailureSchema.safeParse(value);
93
+ export function decodeSelectionLiveFailure(value) {
94
+ const parsed = selectionLiveFailureSchema.safeParse(value);
97
95
  if (!parsed.success)
98
96
  return null;
99
97
  const failure = parsed.data.failure;
@@ -101,49 +99,45 @@ export function decodeFleetLiveFailure(value) {
101
99
  ? new AkumaNotBornError(failure.id)
102
100
  : new AkumaObservationError(failure.id, failure.diagnostic);
103
101
  }
104
- function decodeFleetRequest(action, value) {
102
+ function decodeSelectionRequest(action, value) {
105
103
  const schema = action === "akuma.wait"
106
104
  ? waitRequestSchema
107
105
  : action === "akuma.tell"
108
106
  ? tellRequestSchema
109
- : action === "akuma.tell-answer"
110
- ? tellAnswerRequestSchema
111
- : action === "akuma.tell-wait"
112
- ? tellWaitRequestSchema
113
- : killRequestSchema;
107
+ : action === "akuma.ask"
108
+ ? askRequestSchema
109
+ : killRequestSchema;
114
110
  const parsed = schema.safeParse(value);
115
111
  return parsed.success ? parsed.data : null;
116
112
  }
117
- function decodeFleetService(action, value) {
113
+ function decodeSelectionService(action, value) {
118
114
  const schema = action === "akuma.wait"
119
115
  ? waitServiceSchema
120
- : action === "akuma.tell" || action === "akuma.tell-answer"
116
+ : action === "akuma.tell"
121
117
  ? tellServiceSchema
122
- : action === "akuma.tell-wait"
123
- ? tellWaitServiceSchema
118
+ : action === "akuma.ask"
119
+ ? askServiceSchema
124
120
  : killServiceSchema;
125
121
  const parsed = schema.safeParse(value);
126
122
  if (!parsed.success)
127
- throw new Error("malformed stored Fleet service evidence");
123
+ throw new Error("malformed stored Selection service evidence");
128
124
  return parsed.data;
129
125
  }
130
- function decodedFleetResult(action, value) {
131
- if (action === "akuma.tell-answer")
132
- return value;
126
+ function decodedSelectionResult(action, value) {
133
127
  const schema = action === "akuma.wait"
134
- ? fleetResultSchemas.wait
128
+ ? selectionResultSchemas.wait
135
129
  : action === "akuma.tell"
136
- ? fleetResultSchemas.tell
137
- : action === "akuma.tell-wait"
138
- ? fleetResultSchemas.tellWait
139
- : fleetResultSchemas.kill;
130
+ ? selectionResultSchemas.tell
131
+ : action === "akuma.ask"
132
+ ? selectionResultSchemas.ask
133
+ : selectionResultSchemas.kill;
140
134
  const parsed = schema.safeParse(value);
141
135
  if (!parsed.success)
142
136
  throw new Error(`Akuma body request returned an invalid live result for ${action}`);
143
137
  return parsed.data;
144
138
  }
145
139
  /** Akuma owns Body Request payload, live result, and durable service codecs for wait/tell/kill. */
146
- export function fleetRequestProtocol(action) {
140
+ export function selectionRequestProtocol(action) {
147
141
  return {
148
142
  action,
149
143
  supportsCancellation: true,
@@ -151,70 +145,58 @@ export function fleetRequestProtocol(action) {
151
145
  const { action: _action, ...payload } = request;
152
146
  return payload;
153
147
  },
154
- decodeRequest: (payload) => decodeFleetRequest(action, payload),
148
+ decodeRequest: (payload) => decodeSelectionRequest(action, payload),
155
149
  encodeResult: (result) => result,
156
- decodeResult: (result) => decodedFleetResult(action, result),
157
- encodeFailure: encodeFleetLiveFailure,
158
- decodeFailure: decodeFleetLiveFailure,
159
- decodeReference: (reference) => decodeFleetService(action, reference),
150
+ decodeResult: (result) => decodedSelectionResult(action, result),
151
+ encodeFailure: encodeSelectionLiveFailure,
152
+ decodeFailure: decodeSelectionLiveFailure,
153
+ decodeReference: (reference) => decodeSelectionService(action, reference),
160
154
  isPermitted: (allowed) => action === "akuma.wait" ||
161
- ((action === "akuma.tell" || action === "akuma.tell-answer" || action === "akuma.tell-wait") &&
162
- allowed.includes("akuma.tell")) ||
155
+ ((action === "akuma.tell" || action === "akuma.ask") && allowed.includes("akuma.tell")) ||
163
156
  (action === "akuma.kill" && allowed.includes("akuma.kill")),
164
157
  };
165
158
  }
166
- export function fleetRequestCommand(action, port) {
159
+ export function selectionRequestCommand(action, port) {
167
160
  return {
168
161
  completion: "service",
169
- protocol: fleetRequestProtocol(action),
170
- encodeService: (service) => decodeFleetService(action, service),
171
- decodeService: (service) => decodeFleetService(action, service),
172
- projectService: (service) => decodeFleetService(action, service),
162
+ protocol: selectionRequestProtocol(action),
163
+ encodeService: (service) => service,
164
+ decodeService: (service) => decodeSelectionService(action, service),
165
+ projectService: (service) => service,
173
166
  execute: async (request, facts) => {
174
167
  if (request.action === "akuma.wait") {
175
168
  return {
169
+ kind: "served",
176
170
  result: await port.wait({ ...request, signal: facts.signal }),
177
171
  service: { action: request.action },
178
172
  };
179
173
  }
180
174
  if (request.action === "akuma.tell") {
181
175
  return {
176
+ kind: "served",
182
177
  result: await port.tell({
183
178
  target: request.target,
184
179
  body: request.body,
185
180
  tellId: facts.id,
186
181
  ...(request.initiator === undefined ? {} : { initiator: request.initiator }),
182
+ ...(request.interrupt === undefined ? {} : { interrupt: request.interrupt }),
187
183
  recordedAt: facts.admittedAt,
188
184
  signal: facts.signal,
189
185
  }),
190
186
  service: { action: request.action, target: request.target, tellId: facts.id },
191
187
  };
192
188
  }
193
- if (request.action === "akuma.tell-answer") {
194
- if (port.tellAnswer === undefined)
195
- throw new Error("schema answer Fleet port is unavailable");
196
- return {
197
- result: await port.tellAnswer({
198
- target: request.target,
199
- body: request.body,
200
- schemaJson: request.schemaJson,
201
- ...(request.initiator === undefined ? {} : { initiator: request.initiator }),
202
- ...(request.interrupt === undefined ? {} : { interrupt: request.interrupt }),
203
- signal: facts.signal,
204
- }),
205
- service: { action: "akuma.tell", target: request.target, tellId: facts.id },
206
- };
207
- }
208
- if (request.action === "akuma.tell-wait") {
209
- if (port.tellWait === undefined)
210
- throw new Error("bounded Tell Fleet port is unavailable");
189
+ if (request.action === "akuma.ask") {
190
+ if (port.ask === undefined)
191
+ throw new Error("bounded Tell Selection port is unavailable");
211
192
  return {
212
- result: await port.tellWait({
193
+ kind: "served",
194
+ result: await port.ask({
213
195
  target: request.target,
214
196
  body: request.body,
215
197
  tellId: facts.id,
216
198
  recordedAt: facts.admittedAt,
217
- timeoutMs: request.timeoutMs,
199
+ ...(request.timeoutMs === undefined ? {} : { timeoutMs: request.timeoutMs }),
218
200
  ...(request.schemaJson === undefined ? {} : { schemaJson: request.schemaJson }),
219
201
  ...(request.initiator === undefined ? {} : { initiator: request.initiator }),
220
202
  ...(request.interrupt === undefined ? {} : { interrupt: request.interrupt }),
@@ -225,64 +207,37 @@ export function fleetRequestCommand(action, port) {
225
207
  }
226
208
  const result = await port.kill({ targets: request.targets, signal: facts.signal });
227
209
  if ("result" in result)
228
- return { result: result.result, service: { action: request.action, results: result.service } };
210
+ return { kind: "served", result: result.result, service: { action: request.action, results: result.service } };
229
211
  return {
212
+ kind: "served",
230
213
  result,
231
214
  service: { action: request.action, results: result.results.map(({ id, evidence }) => ({ id, evidence })) },
232
215
  };
233
216
  },
234
217
  };
235
218
  }
236
- export function fleetRequestCommands(port) {
219
+ export function selectionRequestCommands(port) {
237
220
  return {
238
- "akuma.wait": eraseRequestCommand(fleetRequestCommand("akuma.wait", port)),
239
- "akuma.tell": eraseRequestCommand(fleetRequestCommand("akuma.tell", port)),
240
- "akuma.tell-answer": eraseRequestCommand(fleetRequestCommand("akuma.tell-answer", port)),
241
- "akuma.tell-wait": eraseRequestCommand(fleetRequestCommand("akuma.tell-wait", port)),
242
- "akuma.kill": eraseRequestCommand(fleetRequestCommand("akuma.kill", port)),
221
+ "akuma.wait": eraseRequestCommand(selectionRequestCommand("akuma.wait", port)),
222
+ "akuma.tell": eraseRequestCommand(selectionRequestCommand("akuma.tell", port)),
223
+ "akuma.ask": eraseRequestCommand(selectionRequestCommand("akuma.ask", port)),
224
+ "akuma.kill": eraseRequestCommand(selectionRequestCommand("akuma.kill", port)),
243
225
  };
244
226
  }
245
- export async function requestForwardedFleetTellAnswer(input) {
246
- const response = await requestBodyCommand({
247
- directory: input.directory,
248
- command: fleetRequestProtocol("akuma.tell-answer"),
249
- value: {
250
- action: "akuma.tell-answer",
251
- target: input.target,
252
- body: input.body,
253
- schemaJson: schemaJsonText(input.schema),
254
- ...(input.initiator === undefined ? {} : { initiator: input.initiator }),
255
- ...(input.interrupt === undefined ? {} : { interrupt: input.interrupt }),
256
- },
257
- ...(input.signal === undefined ? {} : { signal: input.signal }),
258
- });
259
- if (response.kind !== "returned")
260
- throw new Error("Akuma body request terminal schema answer cannot reproduce an expired live result");
261
- try {
262
- return input.schema.decode(response.result);
263
- }
264
- catch (error) {
265
- throw new AkumaDecodeError(error instanceof Error ? error.message : "Answer failed schema decode", typeof response.result === "string" ? response.result : JSON.stringify(response.result));
266
- }
267
- }
268
- function forwardedFleetCommandResult(response, action) {
269
- if (response.kind === "returned") {
270
- if (action === "akuma.wait" && isWaitResult(response.result))
271
- return response.result;
272
- if (action === "akuma.tell" && isTellResult(response.result))
273
- return response.result;
274
- if (action === "akuma.tell-wait" && isTellWaitResult(response.result))
275
- return response.result;
276
- if (action === "akuma.kill" && isKillResult(response.result))
277
- return response.result;
278
- throw new Error(`transport integrity: request Fleet ${action} returned an invalid live result`);
279
- }
280
- throw new Error("Akuma body request terminal Fleet reference cannot reproduce an expired live result");
227
+ /**
228
+ * The one terminal guard for every forwarded Selection operation: a returned
229
+ * live result is the operation's own answer, and a durable reference can never
230
+ * reproduce an expired live result.
231
+ */
232
+ function forwardedSelectionResult(response) {
233
+ if (response.kind === "returned")
234
+ return response.result;
235
+ throw new Error("Akuma body request terminal Selection reference cannot reproduce an expired live result");
281
236
  }
282
- export async function requestForwardedFleetWait(input) {
237
+ export async function requestForwardedSelectionWait(input) {
283
238
  const response = await requestBodyCommand({
284
239
  directory: input.directory,
285
- command: fleetRequestProtocol("akuma.wait"),
240
+ command: selectionRequestProtocol("akuma.wait"),
286
241
  value: {
287
242
  action: "akuma.wait",
288
243
  targets: input.targets,
@@ -291,45 +246,46 @@ export async function requestForwardedFleetWait(input) {
291
246
  },
292
247
  ...(input.signal === undefined ? {} : { signal: input.signal }),
293
248
  });
294
- return forwardedFleetCommandResult(response, "akuma.wait");
249
+ return forwardedSelectionResult(response);
295
250
  }
296
- export async function requestForwardedFleetTell(input) {
251
+ export async function requestForwardedSelectionTell(input) {
297
252
  const response = await requestBodyCommand({
298
253
  directory: input.directory,
299
- command: fleetRequestProtocol("akuma.tell"),
254
+ command: selectionRequestProtocol("akuma.tell"),
300
255
  value: {
301
256
  action: "akuma.tell",
302
257
  target: input.target,
303
258
  body: input.body,
304
259
  ...(input.initiator === undefined ? {} : { initiator: input.initiator }),
260
+ ...(input.interrupt === true ? { interrupt: true } : {}),
305
261
  },
306
262
  ...(input.signal === undefined ? {} : { signal: input.signal }),
307
263
  });
308
- return forwardedFleetCommandResult(response, "akuma.tell");
264
+ return forwardedSelectionResult(response);
309
265
  }
310
- export async function requestForwardedFleetTellWait(input) {
266
+ export async function requestForwardedSelectionAsk(input) {
311
267
  const response = await requestBodyCommand({
312
268
  directory: input.directory,
313
- command: fleetRequestProtocol("akuma.tell-wait"),
269
+ command: selectionRequestProtocol("akuma.ask"),
314
270
  value: {
315
- action: "akuma.tell-wait",
271
+ action: "akuma.ask",
316
272
  target: input.target,
317
273
  body: input.body,
318
- timeoutMs: input.timeoutMs,
274
+ ...(input.timeoutMs === undefined ? {} : { timeoutMs: input.timeoutMs }),
319
275
  ...(input.schema === undefined ? {} : { schemaJson: schemaJsonText(input.schema) }),
320
276
  ...(input.initiator === undefined ? {} : { initiator: input.initiator }),
321
277
  ...(input.interrupt === undefined ? {} : { interrupt: input.interrupt }),
322
278
  },
323
279
  ...(input.signal === undefined ? {} : { signal: input.signal }),
324
280
  });
325
- return forwardedFleetCommandResult(response, "akuma.tell-wait");
281
+ return forwardedSelectionResult(response);
326
282
  }
327
- export async function requestForwardedFleetKill(input) {
283
+ export async function requestForwardedSelectionKill(input) {
328
284
  const response = await requestBodyCommand({
329
285
  directory: input.directory,
330
- command: fleetRequestProtocol("akuma.kill"),
286
+ command: selectionRequestProtocol("akuma.kill"),
331
287
  value: { action: "akuma.kill", targets: input.targets },
332
288
  ...(input.signal === undefined ? {} : { signal: input.signal }),
333
289
  });
334
- return forwardedFleetCommandResult(response, "akuma.kill");
290
+ return forwardedSelectionResult(response);
335
291
  }
@@ -288,6 +288,63 @@ async function settleCompletion(result, session, active) {
288
288
  active.releaseDriveSignal();
289
289
  }
290
290
  }
291
+ /**
292
+ * One bounded wake slot per live Turn source.
293
+ *
294
+ * A stalled provider leaves its current event pull pending, so attaching a fresh reaction to that
295
+ * pull on every control observation retains a reaction and a derived promise per tick. Here each
296
+ * source registers exactly one reaction and is re-armed only after the wake it produced has been
297
+ * consumed; terminal sources settle once and are never re-armed. The queue therefore holds at most
298
+ * one wake per source. A new Heart observation is armed only after the prior observation is
299
+ * consumed, so the wait never falls back to an older snapshot. Stop clears the queue and its
300
+ * waiter; later notifications are ignored rather than written, though the one reaction already
301
+ * registered on a source that never settled stays attached until that source settles.
302
+ */
303
+ function createTurnWakeups(observeHeart) {
304
+ const queue = [];
305
+ let waiter;
306
+ let stopped = false;
307
+ const publish = (wakeup) => {
308
+ if (stopped)
309
+ return;
310
+ const waiting = waiter;
311
+ waiter = undefined;
312
+ if (waiting === undefined)
313
+ queue.push(wakeup);
314
+ else
315
+ waiting(wakeup);
316
+ };
317
+ return {
318
+ event: (pull) => {
319
+ void pull.then((event) => publish({ kind: "event", event }), (error) => publish({ kind: "failed", error }));
320
+ },
321
+ heart: (after) => {
322
+ void observeHeart(after).then((observation) => publish({ kind: "heart", observation }), (error) => publish({ kind: "failed", error }));
323
+ },
324
+ tell: (submission) => {
325
+ void submission.then((result) => publish({ kind: "tell", result }), (error) => publish({ kind: "failed", error }));
326
+ },
327
+ failure: (source) => {
328
+ void source.then(() => undefined, (error) => publish({ kind: "failed", error }));
329
+ },
330
+ completionFailed: (source) => {
331
+ void source.then((wakeup) => publish(wakeup));
332
+ },
333
+ next: () => {
334
+ const ready = queue.shift();
335
+ if (ready !== undefined)
336
+ return Promise.resolve(ready);
337
+ return new Promise((resolve) => {
338
+ waiter = resolve;
339
+ });
340
+ },
341
+ stop: () => {
342
+ stopped = true;
343
+ waiter = undefined;
344
+ queue.length = 0;
345
+ },
346
+ };
347
+ }
291
348
  async function consumeTurnDrive(input, active) {
292
349
  const { turnSequence, drive, requests, resume } = active;
293
350
  let heart = input.supervisor.current();
@@ -300,10 +357,15 @@ async function consumeTurnDrive(input, active) {
300
357
  const receiptFailure = observeReceiptFailure(pumpReceipts(writers));
301
358
  const completionFailure = observeCompletionFailure(drive);
302
359
  const iterator = drive.events[Symbol.asyncIterator]();
303
- let pending = iterator.next();
304
360
  let liveTells = true;
305
361
  let tellPump = null;
306
- let tellObservation = null;
362
+ const wakeups = createTurnWakeups((after) => input.supervisor.next(after));
363
+ wakeups.event(iterator.next());
364
+ wakeups.heart(heart);
365
+ wakeups.failure(receiptFailure);
366
+ wakeups.failure(requests.failure);
367
+ wakeups.failure(active.custodyFailure);
368
+ wakeups.completionFailed(completionFailure);
307
369
  try {
308
370
  for (;;) {
309
371
  if (input.supervisor.signal.aborted) {
@@ -318,28 +380,22 @@ async function consumeTurnDrive(input, active) {
318
380
  return retirement.kind === "hung" ? retirement : { kind: "handoff" };
319
381
  }
320
382
  tellPump = submitPendingLiveTells(writers, heart.pending, attempted, drive.tell);
321
- tellObservation = tellPump.then((result) => ({ kind: "tell", result }));
383
+ wakeups.tell(tellPump);
322
384
  }
323
- const next = await Promise.race([
324
- pending.then((event) => ({ kind: "event", event })),
325
- input.supervisor.next(heart).then((observation) => ({ kind: "heart", observation })),
326
- ...(tellObservation === null ? [] : [tellObservation]),
327
- receiptFailure,
328
- requests.failure,
329
- completionFailure,
330
- active.custodyFailure,
331
- ]);
385
+ const next = await wakeups.next();
332
386
  if (next.kind === "completion-failed") {
333
387
  requests.stopAdmission();
334
388
  throw next.error;
335
389
  }
390
+ if (next.kind === "failed")
391
+ throw next.error;
336
392
  if (next.kind === "heart") {
337
393
  heart = next.observation;
394
+ wakeups.heart(heart);
338
395
  continue;
339
396
  }
340
397
  if (next.kind === "tell") {
341
398
  tellPump = null;
342
- tellObservation = null;
343
399
  liveTells = next.result === "live";
344
400
  continue;
345
401
  }
@@ -348,7 +404,7 @@ async function consumeTurnDrive(input, active) {
348
404
  await writeProviderEvent(input, active, next.event.value);
349
405
  if (next.event.value.type === "session")
350
406
  turnSession = next.event.value.coordinate;
351
- pending = iterator.next();
407
+ wakeups.event(iterator.next());
352
408
  }
353
409
  const result = await drive.completion;
354
410
  await active.attempt.closed;
@@ -376,6 +432,9 @@ async function consumeTurnDrive(input, active) {
376
432
  return retirement;
377
433
  return { kind: "failed", diagnostic: error instanceof Error ? error.message : String(error) };
378
434
  }
435
+ finally {
436
+ wakeups.stop();
437
+ }
379
438
  }
380
439
  export async function driveTurn(input) {
381
440
  let active;