@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,159 +1,534 @@
1
+ /** @architectureCompositionRoot */
2
+ import { AkumaBodyRequestError } from "../akuma/request-rendezvous.js";
3
+ import { executionChannel } from "../akuma/requests.js";
4
+ import { prepareAmendDocument } from "../body/amend.js";
5
+ import { decodeArcDocument } from "../body/arc.js";
1
6
  import { decodeContractDocument } from "../body/decode.js";
7
+ import { contractId } from "../core/facts/types.js";
2
8
  import { withGitDecodeChannel } from "../git/read-observation.js";
9
+ import { documentDiff } from "../markdown/diff.js";
10
+ import { abandonOperation } from "../protocol/abandon.js";
11
+ import { amendOperation } from "../protocol/amend.js";
12
+ import { arcOperation } from "../protocol/arc.js";
13
+ import { auditOperation } from "../protocol/audit.js";
14
+ import { completeCandidate } from "../protocol/completion.js";
3
15
  import { admitDeliveryOperation } from "../protocol/deliver.js";
4
- import { withScopeAbortSignal } from "../protocol/operations.js";
16
+ import { withScopeAbortSignal, } from "../protocol/operations.js";
17
+ import { executionStop, isOperationalFailure, isOperationalStop, } from "../protocol/progress.js";
5
18
  import { admitReviewOperation } from "../protocol/review.js";
6
- import { completeCandidate } from "../protocol/completion.js";
7
- import { ExecutionProgress, contractCheckpoint, executionStop } from "../protocol/progress.js";
19
+ import { releaseTaskHolder, releaseTaskHolderWithFence, taskHolderObservationSelection } from "../settlement/holder.js";
8
20
  import { continueDeliveredDependents } from "./continuation.js";
9
- import { documentDerivation } from "./input.js";
10
- import { completeMutation, projectMutationFinality } from "./mutation.js";
11
- import { requireLeadingAdmission } from "./refusal.js";
12
- import { receiptFromProgress, withExecutionReceipt } from "./execution-result.js";
13
- function derivedDocument(state) {
14
- return documentDerivation(decodeContractDocument(state.terms.document.bytes), state.terms.gates, state.id);
15
- }
16
- function retainTrailingFailure(context, operation, error) {
17
- const receipt = receiptFromProgress(operation, context.contractId, context.progress);
18
- if (receipt === undefined)
19
- throw error;
20
- try {
21
- context.progress.recordStop(executionStop(context.contractId, "admission", error, context.signal));
21
+ import { requestForwardedContractLive } from "./contract-operations.js";
22
+ import { acceptedOutcome, admissionOf, conclusions, expected, retainAdmission } from "./contract-outcomes.js";
23
+ import { derivedContractPolicy, derivedGates, derivedHooks, gateNames, } from "./contract-settings.js";
24
+ import { deliveryForContract } from "./delivery.js";
25
+ import { actorOption, contractTerms, documentDerivation, normalizedList, optionalBoolean, optionalNonblank, optionalSignal, requireInput, requireMarkdown, } from "./input.js";
26
+ import { InvocationAccumulator } from "./invocation.js";
27
+ import { KeiyakuError, errorCategory, project, validated, } from "./outcome.js";
28
+ import { completeReconcile } from "./reconcile.js";
29
+ import { observeChangedRegion } from "./region.js";
30
+ export class ContractExecution {
31
+ seat;
32
+ constructor(seat) {
33
+ this.seat = seat;
22
34
  }
23
- catch (unexpected) {
24
- throw withExecutionReceipt(unexpected, receipt);
35
+ get id() {
36
+ return this.seat.id;
25
37
  }
26
- }
27
- /** The channel's own retirement cannot hide an already returned admission. */
28
- export async function withContractExecution(input, operation, run) {
29
- const progress = new ExecutionProgress(input.observe);
30
- const scope = withScopeAbortSignal(input.scope, input.signal);
31
- let produced;
32
- try {
33
- return await withGitDecodeChannel(scope, async (channel) => {
34
- const context = {
35
- ...input,
38
+ get scope() {
39
+ return this.seat.scope;
40
+ }
41
+ get execution() {
42
+ return this.seat.execution;
43
+ }
44
+ get composition() {
45
+ return this.seat.composition;
46
+ }
47
+ async amend(input) {
48
+ const { markdown, gates, prerequisites, actor } = validated(() => {
49
+ const values = requireInput(input, "amend input", ["actor", "markdown", "gates", "after"]);
50
+ return {
51
+ markdown: values.markdown === undefined ? undefined : requireMarkdown(values.markdown),
52
+ gates: values.gates === undefined ? undefined : derivedGates(this.composition, gateNames(values.gates)),
53
+ prerequisites: values.after === undefined ? undefined : normalizedList(values.after, "after", contractId),
54
+ actor: actorOption(values.actor).actor,
55
+ };
56
+ });
57
+ const hooks = derivedHooks(this.composition);
58
+ const amendmentPlan = markdown === undefined ? undefined : validated(() => prepareAmendDocument(markdown));
59
+ validated(() => {
60
+ if (markdown === undefined && gates === undefined && prerequisites === undefined)
61
+ throw new TypeError("amend requires markdown, after, or gates");
62
+ });
63
+ let changedSections;
64
+ return await this.local("amend", async (accumulator, channel, scope) => {
65
+ const admission = admissionOf(await amendOperation({
66
+ scope,
67
+ channel,
68
+ contractId: this.id,
69
+ progress: accumulator,
70
+ ...(actor === undefined ? {} : { actor }),
71
+ deriveAmendment: (source) => {
72
+ const current = persistedDocument(source.document.bytes);
73
+ const amendment = amendmentPlan === undefined ? undefined : validated(() => amendmentPlan(current));
74
+ changedSections = amendment?.changedSections;
75
+ const amended = amendment === undefined ? current : validated(() => decodeContractDocument(amendment.document));
76
+ const terms = markdown === undefined
77
+ ? {
78
+ document: source.document,
79
+ segments: source.segments,
80
+ gates: gates ?? source.gates,
81
+ after: prerequisites ?? source.after,
82
+ }
83
+ : contractTerms(amended, gates ?? source.gates, prerequisites ?? source.after);
84
+ return { terms, verification: documentDerivation(amended, terms.gates, this.id).verification };
85
+ },
86
+ }));
87
+ if (admission.kind !== "accepted")
88
+ return expected(this.id, admission);
89
+ const accepted = admission.accepted;
90
+ const changes = changedAmendTerms(accepted.value.source, accepted.value.terms);
91
+ const diff = documentDiff("before", "after", accepted.value.source.document.bytes, accepted.value.terms.document.bytes);
92
+ accumulator.extendConclusions(this.id, { documentDiff: diff, changes });
93
+ const region = await observeChangedRegion(scope, this.id, changedSections, decodeContractDocument(accepted.value.terms.document.bytes).region);
94
+ const value = await this.conclude(accumulator, {
95
+ scope,
96
+ channel,
97
+ leading: accepted,
98
+ hooks,
99
+ verificationResidueRecorded: false,
100
+ value: () => ({ documentDiff: diff, changes, ...region }),
101
+ });
102
+ return acceptedOutcome("amend", this.id, accumulator, value);
103
+ });
104
+ }
105
+ /** One promise with an optional observation callback; observation never delays custody. */
106
+ async deliver(input, options) {
107
+ const values = validated(() => normalizeDeliverInput(input));
108
+ const observer = validated(() => observationOptions(options));
109
+ const channel = executionChannel(this.execution);
110
+ if (channel.kind === "body-request")
111
+ return await forwardedContractOutcome({
112
+ revive: (value) => deliveryForContract(this.scope, value),
113
+ directory: channel.directory,
114
+ action: "contract.deliver",
115
+ ...(observer === undefined ? {} : { observe: observer }),
116
+ ...(values.signal === undefined ? {} : { signal: values.signal }),
117
+ request: {
118
+ action: "contract.deliver",
119
+ repoRoot: this.scope.primaryWorktree,
120
+ contractId: this.id,
121
+ ...(values.message === undefined ? {} : { message: values.message }),
122
+ includeDirty: values.includeDirty,
123
+ materializeConflict: values.materializeConflict,
124
+ overwrite: values.overwrite,
125
+ },
126
+ });
127
+ const { hooks, requireBranchesToBeUpToDate } = derivedContractPolicy(this.composition);
128
+ return await this.local("deliver", async (accumulator, localChannel, scope) => {
129
+ let leadingValue;
130
+ let stage = "admission";
131
+ try {
132
+ values.signal?.throwIfAborted();
133
+ const outcome = await admitDeliveryOperation({
134
+ scope,
135
+ channel: localChannel,
136
+ contractId: this.id,
137
+ progress: accumulator,
138
+ ...(this.composition.actor === undefined ? {} : { actor: this.composition.actor }),
139
+ ...(values.signal === undefined ? {} : { signal: values.signal }),
140
+ ...(values.message === undefined ? {} : { message: values.message }),
141
+ includeDirty: values.includeDirty,
142
+ materializeConflict: values.materializeConflict,
143
+ overwrite: values.overwrite,
144
+ requireBranchesToBeUpToDate,
145
+ deriveDocument: derivedDocument,
146
+ });
147
+ if (outcome.kind === "integration-conflict-materialized")
148
+ return { kind: "handoff", contract: this.id, value: outcome };
149
+ if (outcome.kind !== "accepted")
150
+ return expected(this.id, outcome);
151
+ leadingValue = outcome.value;
152
+ stage = "verification";
153
+ await advanceAndContinue(accumulator, scope, localChannel, this.id, this.composition, outcome, values.signal, "verification");
154
+ }
155
+ catch (error) {
156
+ retainTrailingFailure(accumulator, this.id, error, values.signal, stage);
157
+ }
158
+ const base = admittedDeliveryValue(accumulator, this.id);
159
+ requireMatchingDeliveryLeading(leadingValue, base);
160
+ const retained = accumulator.conclusions(this.id) ?? {};
161
+ const value = { ...base, ...leadingValue, ...retained };
162
+ accumulator.recordConclusions(this.id, value);
163
+ await this.reconcileContracts(accumulator, scope, localChannel, hooks);
164
+ return acceptedOutcome("deliver", this.id, accumulator, deliveryForContract(this.scope, value));
165
+ }, values.signal, observer);
166
+ }
167
+ async review(input, options) {
168
+ const values = validated(() => requireInput(input, "review input", ["verdict", "summary", "signal"]));
169
+ const verdict = values.verdict;
170
+ if (verdict !== "satisfied" && verdict !== "unsatisfied")
171
+ throw new KeiyakuError("invalid-input", "verdict must be satisfied or unsatisfied", {
172
+ cause: new TypeError("verdict must be satisfied or unsatisfied"),
173
+ });
174
+ const summary = validated(() => optionalNonblank(values.summary, "review summary"));
175
+ const signal = validated(() => optionalSignal(values.signal));
176
+ const observer = validated(() => observationOptions(options));
177
+ const channel = executionChannel(this.execution);
178
+ if (channel.kind === "body-request")
179
+ return await forwardedContractOutcome({
180
+ directory: channel.directory,
181
+ action: "contract.review",
182
+ ...(observer === undefined ? {} : { observe: observer }),
183
+ ...(signal === undefined ? {} : { signal }),
184
+ request: {
185
+ action: "contract.review",
186
+ repoRoot: this.scope.primaryWorktree,
187
+ contractId: this.id,
188
+ verdict,
189
+ ...(summary === undefined ? {} : { summary }),
190
+ },
191
+ });
192
+ const hooks = derivedHooks(this.composition);
193
+ return await this.local("review", async (accumulator, localChannel, scope) => {
194
+ let value = {};
195
+ let stage = "admission";
196
+ try {
197
+ signal?.throwIfAborted();
198
+ const outcome = await admitReviewOperation({
199
+ scope,
200
+ channel: localChannel,
201
+ contractId: this.id,
202
+ progress: accumulator,
203
+ ...(this.composition.actor === undefined ? {} : { actor: this.composition.actor }),
204
+ ...(signal === undefined ? {} : { signal }),
205
+ verdict,
206
+ ...(summary === undefined ? {} : { summary }),
207
+ });
208
+ if (outcome.kind !== "accepted")
209
+ return expected(this.id, outcome);
210
+ value = outcome.value;
211
+ accumulator.extendConclusions(this.id, value);
212
+ stage = "placement";
213
+ if (verdict === "satisfied")
214
+ value = {
215
+ ...value,
216
+ ...(await advanceAndContinue(accumulator, scope, localChannel, this.id, this.composition, outcome, signal, "placement")),
217
+ };
218
+ }
219
+ catch (error) {
220
+ retainTrailingFailure(accumulator, this.id, error, signal, stage);
221
+ }
222
+ const retained = { ...value, ...accumulator.conclusions(this.id) };
223
+ accumulator.extendConclusions(this.id, retained);
224
+ await this.reconcileContracts(accumulator, scope, localChannel, hooks);
225
+ return acceptedOutcome("review", this.id, accumulator, retained);
226
+ }, signal, observer);
227
+ }
228
+ async abandon(input) {
229
+ const { note, actor } = validated(() => {
230
+ const values = input === undefined ? undefined : requireInput(input, "abandon input", ["note", "actor"]);
231
+ return {
232
+ note: optionalNonblank(values?.note, "abandon note"),
233
+ actor: actorOption(values?.actor),
234
+ };
235
+ });
236
+ const hooks = derivedHooks(this.composition);
237
+ return await this.local("abandon", async (accumulator, channel, scope) => {
238
+ const admission = admissionOf((await releaseTaskHolderWithFence(scope, channel, this.id, () => abandonOperation({
239
+ scope,
240
+ channel,
241
+ contractId: this.id,
242
+ ...actor,
243
+ ...(note === undefined ? {} : { note }),
244
+ observationSelection: taskHolderObservationSelection(),
245
+ progress: accumulator,
246
+ decorateOffer: async ({ observation, contractId: owner }) => {
247
+ const companion = await releaseTaskHolder(channel, observation, owner);
248
+ return companion === null ? [] : [companion];
249
+ },
250
+ }))).result);
251
+ if (admission.kind !== "accepted")
252
+ return expected(this.id, admission);
253
+ await this.conclude(accumulator, {
36
254
  scope,
37
255
  channel,
38
- progress,
39
- ...(scope.signal === undefined ? {} : { signal: scope.signal }),
256
+ leading: admission.accepted,
257
+ hooks,
258
+ verificationResidueRecorded: false,
259
+ value: () => ({}),
260
+ });
261
+ return acceptedOutcome("abandon", this.id, accumulator, undefined);
262
+ });
263
+ }
264
+ async arc(input) {
265
+ const { chapter, actor } = validated(() => {
266
+ const values = requireInput(input, "arc input", ["markdown", "actor"]);
267
+ return {
268
+ chapter: decodeArcDocument(requireMarkdown(values.markdown)),
269
+ actor: actorOption(values.actor),
40
270
  };
41
- produced = await run(context);
42
- return produced;
271
+ });
272
+ const hooks = derivedHooks(this.composition);
273
+ return await this.local("arc", async (accumulator, channel, scope) => {
274
+ const admission = admissionOf(await arcOperation({
275
+ scope,
276
+ channel,
277
+ contractId: this.id,
278
+ ...actor,
279
+ chapter,
280
+ progress: accumulator,
281
+ }));
282
+ if (admission.kind !== "accepted")
283
+ return expected(this.id, admission);
284
+ await this.conclude(accumulator, {
285
+ scope,
286
+ channel,
287
+ leading: admission.accepted,
288
+ hooks,
289
+ verificationResidueRecorded: false,
290
+ value: () => ({}),
291
+ });
292
+ return acceptedOutcome("arc", this.id, accumulator, undefined);
43
293
  });
44
294
  }
45
- catch (error) {
46
- const receipt = receiptFromProgress(operation, input.contractId, progress);
47
- if (receipt === undefined)
48
- throw error;
49
- if (produced?.kind === "accepted") {
295
+ async audit(input, options) {
296
+ const values = validated(() => input === undefined ? undefined : requireInput(input, "audit input", ["includeDirty", "showDiff", "signal"]));
297
+ const includeDirty = validated(() => optionalBoolean(values?.includeDirty, "includeDirty") ?? false);
298
+ const showDiff = validated(() => optionalBoolean(values?.showDiff, "showDiff") ?? false);
299
+ const signal = validated(() => optionalSignal(values?.signal));
300
+ const observer = validated(() => observationOptions(options));
301
+ const channel = executionChannel(this.execution);
302
+ if (channel.kind === "body-request")
303
+ return await forwardedContractOutcome({
304
+ directory: channel.directory,
305
+ action: "contract.audit",
306
+ ...(observer === undefined ? {} : { observe: observer }),
307
+ ...(signal === undefined ? {} : { signal }),
308
+ request: {
309
+ action: "contract.audit",
310
+ repoRoot: this.scope.primaryWorktree,
311
+ contractId: this.id,
312
+ includeDirty,
313
+ showDiff,
314
+ },
315
+ });
316
+ const { hooks, requireBranchesToBeUpToDate } = derivedContractPolicy(this.composition);
317
+ return await this.local("audit", async (accumulator, localChannel, scope) => {
318
+ const admission = admissionOf(await auditOperation({
319
+ scope,
320
+ channel: localChannel,
321
+ progress: accumulator,
322
+ contractId: this.id,
323
+ deriveDocument: derivedDocument,
324
+ includeDirty,
325
+ showDiff,
326
+ requireBranchesToBeUpToDate,
327
+ ...(signal === undefined ? {} : { signal }),
328
+ ...(this.composition.actor === undefined ? {} : { actor: this.composition.actor }),
329
+ }));
330
+ if (admission.kind !== "accepted")
331
+ return expected(this.id, admission);
332
+ const report = await this.conclude(accumulator, {
333
+ scope,
334
+ channel: localChannel,
335
+ leading: admission.accepted,
336
+ hooks,
337
+ verificationResidueRecorded: false,
338
+ value: (value) => value,
339
+ });
340
+ return acceptedOutcome("audit", this.id, accumulator, report);
341
+ }, signal, observer);
342
+ }
343
+ /** One accumulator before the first admission-capable await, one projector after teardown. */
344
+ async local(operation, run, signal, observer) {
345
+ const accumulator = new InvocationAccumulator(observer);
346
+ const scope = withScopeAbortSignal(this.scope, signal);
347
+ let projection;
348
+ let completed;
349
+ let retirement;
350
+ try {
351
+ projection = await withGitDecodeChannel(scope, async (channel) => {
352
+ completed = await run(accumulator, channel, scope);
353
+ return completed;
354
+ }, (error) => {
355
+ retirement = error;
356
+ accumulator.recordChannelRetirement(this.id, error);
357
+ });
358
+ }
359
+ catch (error) {
360
+ projection =
361
+ error === retirement && completed?.kind === "accepted" && isOperationalFailure(error)
362
+ ? completed
363
+ : { kind: "failed", contract: this.id, error: invocationFailure(error, scope.signal) };
364
+ }
365
+ const projected = project(operation, accumulator.snapshot(), projection);
366
+ if (projected.kind === "failed")
367
+ throw projected.error;
368
+ return projected.outcome;
369
+ }
370
+ async conclude(accumulator, input) {
371
+ retainAdmission(accumulator, this.id, input.leading, input.verificationResidueRecorded);
372
+ const value = input.value(input.leading.value);
373
+ accumulator.extendConclusions(this.id, conclusions(value));
374
+ await this.reconcileContracts(accumulator, input.scope, input.channel, input.hooks);
375
+ return value;
376
+ }
377
+ async reconcileContracts(accumulator, scope, channel, hooks) {
378
+ for (const contract of [...new Set([this.id, ...accumulator.snapshot().affected])]) {
50
379
  try {
51
- progress.recordStop(executionStop(input.contractId, "reconciliation", error, scope.signal));
52
- const updated = { ...produced, executionStops: progress.snapshot().stops };
53
- const finality = projectMutationFinality(updated);
54
- return { ...updated, pending: finality.kind === "accepted-pending" ? finality.pending : [] };
380
+ scope.signal?.throwIfAborted();
381
+ accumulator.observe({ kind: "stage", contractId: contract, stage: "reconciliation", state: "started" });
382
+ const report = await (async () => {
383
+ try {
384
+ return await completeReconcile({
385
+ scope,
386
+ channel,
387
+ contractId: contract,
388
+ hooks,
389
+ retryHooks: false,
390
+ progress: accumulator,
391
+ });
392
+ }
393
+ finally {
394
+ accumulator.observe({ kind: "stage", contractId: contract, stage: "reconciliation", state: "finished" });
395
+ }
396
+ })();
397
+ void report;
55
398
  }
56
- catch (unexpected) {
57
- throw withExecutionReceipt(unexpected, receipt);
399
+ catch (error) {
400
+ if (!isOperationalStop(error, scope.signal))
401
+ throw error;
402
+ accumulator.recordStop(executionStop(contract, "reconciliation", error, scope.signal));
58
403
  }
59
404
  }
60
- throw withExecutionReceipt(error, receipt);
61
405
  }
62
406
  }
63
- async function advanceAndContinue(context, checkpoint, start) {
407
+ function changedAmendTerms(before, after) {
408
+ return {
409
+ ...(before.gates.length === after.gates.length && before.gates.every((gate, index) => gate === after.gates[index])
410
+ ? {}
411
+ : { gates: after.gates }),
412
+ ...(before.after.length === after.after.length && before.after.every((id, index) => id === after.after[index])
413
+ ? {}
414
+ : { after: after.after }),
415
+ };
416
+ }
417
+ function persistedDocument(bytes) {
418
+ try {
419
+ return decodeContractDocument(bytes);
420
+ }
421
+ catch (cause) {
422
+ throw new KeiyakuError("authority-corruption", "undecodable persisted Contract document", { cause });
423
+ }
424
+ }
425
+ function derivedDocument(state) {
426
+ return documentDerivation(persistedDocument(state.terms.document.bytes), state.terms.gates, state.id);
427
+ }
428
+ function observationOptions(options) {
429
+ if (options === undefined)
430
+ return undefined;
431
+ const input = requireInput(options, "observation options", ["observe"]);
432
+ if (input.observe !== undefined && typeof input.observe !== "function")
433
+ throw new TypeError("observe must be a function");
434
+ return input.observe;
435
+ }
436
+ function normalizeDeliverInput(input) {
437
+ const values = input === undefined
438
+ ? undefined
439
+ : requireInput(input, "deliver input", ["message", "includeDirty", "materializeConflict", "overwrite", "signal"]);
440
+ const message = optionalNonblank(values?.message, "deliver message");
441
+ const signal = optionalSignal(values?.signal);
442
+ return {
443
+ ...(message === undefined ? {} : { message }),
444
+ includeDirty: optionalBoolean(values?.includeDirty, "includeDirty") ?? false,
445
+ materializeConflict: optionalBoolean(values?.materializeConflict, "materializeConflict") ?? false,
446
+ overwrite: optionalBoolean(values?.overwrite, "overwrite") ?? false,
447
+ ...(signal === undefined ? {} : { signal }),
448
+ };
449
+ }
450
+ /** A trailing operational failure after a confirmed admission is a typed stop, never a lost receipt. */
451
+ function retainTrailingFailure(accumulator, contractId, error, signal, stage) {
452
+ if (accumulator.head(contractId) === undefined)
453
+ throw error;
454
+ if (!isOperationalStop(error, signal))
455
+ throw error;
456
+ accumulator.recordStop(executionStop(contractId, stage, error, signal));
457
+ }
458
+ // eslint-disable-next-line max-params -- Keep this local operation's custody, admission, and policy witnesses explicit.
459
+ async function advanceAndContinue(accumulator, scope, channel, contractId, composition, outcome, signal, start) {
460
+ const checkpoint = { state: outcome.state, journal: outcome.journal };
64
461
  const result = await completeCandidate({
65
- repository: context.scope,
66
- channel: context.channel,
462
+ repository: scope,
463
+ channel,
67
464
  checkpoint,
68
- progress: context.progress,
465
+ progress: accumulator,
69
466
  start,
70
467
  deriveDocument: derivedDocument,
71
- ...(context.actor === undefined ? {} : { actor: context.actor }),
72
- ...(context.signal === undefined ? {} : { signal: context.signal }),
468
+ ...(composition.actor === undefined ? {} : { actor: composition.actor }),
469
+ ...(signal === undefined ? {} : { signal }),
73
470
  });
74
- if (result.kind === "completed")
75
- context.progress.observe({
76
- kind: "stage",
77
- contractId: context.contractId,
78
- stage: "continuation",
79
- state: "started",
80
- });
81
- const continuation = result.kind !== "completed"
82
- ? undefined
83
- : await continueDeliveredDependents({
84
- ...context,
85
- completed: result,
86
- deriveDocument: derivedDocument,
87
- });
88
- if (result.kind === "completed")
89
- context.progress.observe({
90
- kind: "stage",
91
- contractId: context.contractId,
92
- stage: "continuation",
93
- state: "finished",
94
- });
471
+ accumulator.recordCandidate(contractId, result.evidence);
472
+ if (result.kind !== "completed")
473
+ return { ...result.evidence };
474
+ accumulator.observe({ kind: "stage", contractId, stage: "continuation", state: "started" });
475
+ const continuation = await continueDeliveredDependents({
476
+ scope,
477
+ channel,
478
+ progress: accumulator,
479
+ completed: result,
480
+ deriveDocument: derivedDocument,
481
+ ...(composition.actor === undefined ? {} : { actor: composition.actor }),
482
+ ...(signal === undefined ? {} : { signal }),
483
+ });
484
+ accumulator.observe({ kind: "stage", contractId, stage: "continuation", state: "finished" });
95
485
  return { ...result.evidence, ...(continuation === undefined ? {} : { continuation }) };
96
486
  }
97
- /** Review records testimony, then the same shared node judges automatic placement. */
98
- export async function executeLocalReview(input) {
99
- return await withContractExecution(input, "review", async (context) => {
100
- let value = {};
101
- try {
102
- context.signal?.throwIfAborted();
103
- const leading = requireLeadingAdmission(await admitReviewOperation({
104
- ...context,
105
- verdict: input.verdict,
106
- ...(input.summary === undefined ? {} : { summary: input.summary }),
107
- }));
108
- value = leading.value;
109
- if (input.verdict === "satisfied")
110
- value = { ...value, ...(await advanceAndContinue(context, contractCheckpoint(leading), "placement")) };
111
- }
112
- catch (error) {
113
- retainTrailingFailure(context, "review", error);
114
- }
115
- return await completeMutation({
116
- ...context,
117
- operation: "review",
118
- accepted: context.progress.accepted(context.contractId, value),
119
- value: (review) => review,
120
- });
121
- });
487
+ /** An accepted delivery's leading act must be the fact this invocation admitted. */
488
+ function requireMatchingDeliveryLeading(leading, base) {
489
+ const mismatched = leading !== undefined && (leading.leading.kind !== base.leading.kind || leading.leading.fact !== base.leading.fact);
490
+ if (mismatched)
491
+ throw new Error("accepted delivery leading disagrees with its admitted fact");
122
492
  }
123
- function admittedDeliveryValue(context) {
124
- const fact = context.progress
125
- .snapshot()
126
- .facts.find((entry) => entry.contract === context.contractId && entry.kind === "deliver");
493
+ function admittedDeliveryValue(accumulator, contractId) {
494
+ const fact = accumulator.snapshot().facts.find((entry) => entry.contract === contractId && entry.kind === "deliver");
127
495
  if (fact?.kind === "deliver")
128
- return fact.data;
129
- const delivery = context.progress.checkpoint(context.contractId)?.state.delivery?.data;
130
- if (delivery !== undefined)
131
- return delivery;
496
+ return { ...fact.data, leading: { kind: "admitted-now", fact: fact.entry } };
497
+ const delivery = accumulator.checkpoint(contractId)?.state.delivery;
498
+ if (delivery !== undefined && delivery !== null)
499
+ return { ...delivery.data, leading: { kind: "already-admitted", fact: delivery.entry } };
132
500
  throw new Error("confirmed delivery requires its own receipt");
133
501
  }
134
- /** Delivery admits a candidate; completion and dependent continuation remain automatic. */
135
- export async function executeLocalDelivery(input) {
136
- return await withContractExecution(input, "deliver", async (context) => {
137
- let trailing = {};
138
- let leadingValue;
139
- try {
140
- context.signal?.throwIfAborted();
141
- const outcome = await admitDeliveryOperation({ ...input, ...context, deriveDocument: derivedDocument });
142
- if (outcome.kind === "integration-conflict-materialized")
143
- return outcome;
144
- const leading = requireLeadingAdmission(outcome);
145
- leadingValue = leading.value;
146
- trailing = await advanceAndContinue(context, contractCheckpoint(leading), "verification");
147
- }
148
- catch (error) {
149
- retainTrailingFailure(context, "deliver", error);
150
- }
151
- const value = { ...admittedDeliveryValue(context), ...leadingValue, ...trailing };
152
- return await completeMutation({
153
- ...context,
154
- operation: "deliver",
155
- accepted: context.progress.accepted(context.contractId, value),
156
- value: (delivery) => delivery,
502
+ async function forwardedContractOutcome(input) {
503
+ try {
504
+ const result = (await requestForwardedContractLive({
505
+ directory: input.directory,
506
+ action: input.action,
507
+ request: input.request,
508
+ ...(input.signal === undefined ? {} : { signal: input.signal }),
509
+ ...(input.observe === undefined ? {} : { observe: input.observe }),
510
+ }));
511
+ return result.kind === "accepted" && input.revive !== undefined
512
+ ? { ...result, value: input.revive(result.value) }
513
+ : result;
514
+ }
515
+ catch (error) {
516
+ if (error instanceof KeiyakuError)
517
+ throw error;
518
+ if (input.signal?.aborted === true && error === input.signal.reason)
519
+ throw invocationFailure(error, input.signal);
520
+ throw new KeiyakuError(error instanceof AkumaBodyRequestError && (error.outcome === "unknown" || error.outcome === "unproven")
521
+ ? "unknown-outcome"
522
+ : errorCategory(error), errorMessage(error), {
523
+ cause: error,
157
524
  });
158
- });
525
+ }
526
+ }
527
+ function invocationFailure(error, signal) {
528
+ return signal?.aborted === true && error === signal.reason
529
+ ? new KeiyakuError("aborted", errorMessage(error), { cause: error })
530
+ : error;
531
+ }
532
+ function errorMessage(error) {
533
+ return error instanceof Error ? error.message : String(error);
159
534
  }