@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,18 +1,95 @@
1
- import { encodeEntry } from "../core/facts/codec.js";
1
+ import { contractIdSchema, snapshotIdSchema } from "../git/identity.js";
2
+ import { z } from "zod";
3
+ import { worktreeLeakSchema } from "../git/scratch.js";
4
+ import { privateStateSeatCloseLagSchema } from "../git/private-state-seat.js";
5
+ import { verificationCleanupFailureSchema } from "./intent.js";
2
6
  import { AuthorityCorruptionError } from "../core/facts/errors.js";
3
7
  import { GitPlumbingError } from "../git/process.js";
4
8
  import { SqliteTransactionLockError } from "../coordination/sqlite-transaction-lock.js";
5
- import { observeExecution } from "./execution-observation.js";
9
+ import { GitPrivateStateSeatContentionError } from "../git/private-state-seat.js";
6
10
  export function contractCheckpoint(input) {
7
11
  return { state: input.state, journal: input.journal };
8
12
  }
13
+ export const executionCleanupSchema = z.union([
14
+ z
15
+ .object({
16
+ kind: z.literal("decode-channel-retirement"),
17
+ contractId: contractIdSchema,
18
+ diagnostic: z.string().min(1),
19
+ })
20
+ .strict(),
21
+ z
22
+ .object({
23
+ kind: z.literal("verification-cleanup"),
24
+ contractId: contractIdSchema,
25
+ snapshot: snapshotIdSchema.optional(),
26
+ failure: verificationCleanupFailureSchema,
27
+ })
28
+ .strict(),
29
+ z
30
+ .object({
31
+ kind: z.literal("worktree-leak"),
32
+ contractId: contractIdSchema,
33
+ snapshot: snapshotIdSchema.optional(),
34
+ leak: worktreeLeakSchema,
35
+ })
36
+ .strict(),
37
+ z
38
+ .object({
39
+ kind: z.literal("private-state-seat-close"),
40
+ contractId: contractIdSchema,
41
+ failure: privateStateSeatCloseLagSchema,
42
+ })
43
+ .strict(),
44
+ ]);
45
+ export const executionStageSchema = z.enum([
46
+ "admission",
47
+ "verification",
48
+ "placement",
49
+ "reintegration",
50
+ "continuation",
51
+ "reconciliation",
52
+ ]);
53
+ export const executionStopSchema = z
54
+ .object({
55
+ kind: z.literal("execution-stopped"),
56
+ contractId: contractIdSchema,
57
+ stage: executionStageSchema,
58
+ reason: z.enum(["cancelled", "failed"]),
59
+ diagnostic: z.string().refine((value) => value.trim() !== ""),
60
+ })
61
+ .strict();
62
+ /** Only owner-declared operational classes and native system I/O failures are operational. */
63
+ export function isOperationalFailure(error) {
64
+ if (!(error instanceof Error) ||
65
+ error instanceof AuthorityCorruptionError ||
66
+ error instanceof TypeError ||
67
+ error instanceof RangeError ||
68
+ error instanceof ReferenceError ||
69
+ error instanceof SyntaxError)
70
+ return false;
71
+ return (error instanceof GitPlumbingError ||
72
+ error instanceof SqliteTransactionLockError ||
73
+ error instanceof GitPrivateStateSeatContentionError ||
74
+ ("code" in error && typeof error.code === "string" && /^E[A-Z0-9]+$/u.test(error.code)));
75
+ }
76
+ /** Cancellation is witnessed by this exact signal reason, not by a signal merely being aborted. */
77
+ export function isOperationalStop(error, signal) {
78
+ if (signal?.aborted === true && error === signal.reason)
79
+ return true;
80
+ if (error instanceof AuthorityCorruptionError ||
81
+ error instanceof TypeError ||
82
+ error instanceof RangeError ||
83
+ error instanceof ReferenceError ||
84
+ error instanceof SyntaxError)
85
+ return false;
86
+ return isOperationalFailure(error);
87
+ }
9
88
  /** Classify operational failures only; programming errors and corrupt authority still throw. */
10
89
  export function executionStop(contractId, stage, error, signal) {
11
- if (error instanceof AuthorityCorruptionError || error instanceof TypeError)
12
- throw error;
13
90
  const cancelled = signal?.aborted === true &&
14
91
  (error === signal.reason || error instanceof GitPlumbingError || error instanceof SqliteTransactionLockError);
15
- if (!cancelled && !(error instanceof GitPlumbingError) && !(error instanceof SqliteTransactionLockError))
92
+ if (!cancelled && !isOperationalFailure(error))
16
93
  throw error;
17
94
  return {
18
95
  kind: "execution-stopped",
@@ -22,130 +99,3 @@ export function executionStop(contractId, stage, error, signal) {
22
99
  diagnostic: error instanceof Error ? error.message : String(error),
23
100
  };
24
101
  }
25
- /** Invocation-local receipts and ephemeral observations; no scheduling or authority reads. */
26
- export class ExecutionProgress {
27
- observer;
28
- constructor(observer) {
29
- this.observer = observer;
30
- }
31
- observe(event) {
32
- observeExecution(this.observer, event);
33
- }
34
- entries = new Map();
35
- admittedFacts = [];
36
- admittedHeads = new Map();
37
- admittedCheckpoints = new Map();
38
- affectedContracts = new Set();
39
- effects = [];
40
- lags = [];
41
- cleanupIssues = [];
42
- executionStops = [];
43
- reportedResidue = new WeakSet();
44
- /** A confirmed publication is retained even if folding or later physical work throws. */
45
- recordPublication(contractId, head, facts) {
46
- const incoming = new Map();
47
- for (const fact of facts) {
48
- const key = `${fact.contract}\0${fact.entry}`;
49
- const bytes = encodeEntry(fact);
50
- const previous = incoming.get(key)?.bytes ?? this.entries.get(key);
51
- if (previous !== undefined && previous !== bytes)
52
- throw new AuthorityCorruptionError("conflicting invocation receipt");
53
- incoming.set(key, { fact, bytes });
54
- }
55
- let fresh = false;
56
- for (const [key, { fact, bytes }] of incoming) {
57
- if (this.entries.has(key))
58
- continue;
59
- this.entries.set(key, bytes);
60
- this.admittedFacts.push(fact);
61
- this.observe({ kind: "admitted", contractId, fact });
62
- this.affectedContracts.add(fact.contract);
63
- fresh = true;
64
- }
65
- if (fresh || !this.admittedHeads.has(contractId))
66
- this.admittedHeads.set(contractId, head);
67
- }
68
- recordAdmission(step) {
69
- if (step.state.head === null)
70
- throw new Error("admission requires a journal head");
71
- this.recordPublication(step.state.id, step.state.head, step.facts);
72
- if (this.admittedHeads.get(step.state.id) === step.state.head) {
73
- this.admittedCheckpoints.set(step.state.id, contractCheckpoint(step));
74
- }
75
- this.recordResidue(step.state.id, step);
76
- }
77
- hasFact(fact) {
78
- return this.entries.get(`${fact.contract}\0${fact.entry}`) === encodeEntry(fact);
79
- }
80
- head(contractId) {
81
- return this.admittedHeads.get(contractId);
82
- }
83
- recordResidue(contractId, residue) {
84
- if (residue.physical !== undefined)
85
- this.recordPhysical(contractId, residue.physical);
86
- for (const failure of residue.seatClose ?? []) {
87
- if (this.reportedResidue.has(failure))
88
- continue;
89
- this.reportedResidue.add(failure);
90
- this.cleanupIssues.push({ kind: "private-state-seat-close", contractId, failure });
91
- }
92
- }
93
- recordPhysical(contractId, physical) {
94
- if (physical.effects.length > 0 || physical.lag.length > 0)
95
- this.affectedContracts.add(contractId);
96
- for (const effect of physical.effects) {
97
- if (this.reportedResidue.has(effect))
98
- continue;
99
- this.reportedResidue.add(effect);
100
- this.effects.push(effect);
101
- }
102
- for (const lag of physical.lag) {
103
- if (this.reportedResidue.has(lag))
104
- continue;
105
- this.reportedResidue.add(lag);
106
- this.lags.push(lag);
107
- }
108
- }
109
- recordVerification(contractId, snapshot, result) {
110
- if (result.cleanup !== undefined)
111
- this.cleanupIssues.push({
112
- kind: "verification-cleanup",
113
- contractId,
114
- ...(snapshot === undefined ? {} : { snapshot }),
115
- failure: result.cleanup,
116
- });
117
- if (result.leak !== undefined)
118
- this.cleanupIssues.push({
119
- kind: "worktree-leak",
120
- contractId,
121
- ...(snapshot === undefined ? {} : { snapshot }),
122
- leak: result.leak,
123
- });
124
- }
125
- recordStop(stop) {
126
- if (!this.executionStops.includes(stop))
127
- this.executionStops.push(stop);
128
- }
129
- checkpoint(contractId) {
130
- return this.admittedCheckpoints.get(contractId);
131
- }
132
- snapshot() {
133
- return {
134
- facts: Object.freeze([...this.admittedFacts]),
135
- checkpoints: new Map(this.admittedCheckpoints),
136
- heads: new Map(this.admittedHeads),
137
- affected: Object.freeze([...this.affectedContracts]),
138
- physical: { effects: Object.freeze([...this.effects]), lag: Object.freeze([...this.lags]) },
139
- cleanup: Object.freeze([...this.cleanupIssues]),
140
- stops: Object.freeze([...this.executionStops]),
141
- };
142
- }
143
- /** One final assembly; a dependent's checkpoint can never replace the addressed head. */
144
- accepted(contractId, value) {
145
- const head = this.head(contractId);
146
- if (head === undefined)
147
- throw new Error("missing leading admission receipt");
148
- const snapshot = this.snapshot();
149
- return { kind: "accepted", head, facts: snapshot.facts, value, physical: snapshot.physical };
150
- }
151
- }
@@ -4,7 +4,7 @@ import type { GitDecodeChannel, GitReadObservation } from "../../git/read-observ
4
4
  import { type GateCurrent } from "../../core/facts/gate.js";
5
5
  import { type ContractId, type ContractState, type DeliverData, type JournalEntry, type SnapshotId } from "../../core/facts/types.js";
6
6
  import { type BoundedList } from "../../bounded-list.js";
7
- export type ContractPhase = "waiting" | "bound" | "tendered" | "claimed" | "abandoned";
7
+ export type ContractPhase = "bound" | "delivered" | "claimed" | "abandoned";
8
8
  export type ContractDisposition = "active" | "terminal";
9
9
  export type ContractGateCurrent = GateCurrent;
10
10
  export type ContractGateReport = Readonly<{
@@ -36,7 +36,7 @@ export type ContractTargetLag = GitContractTargetLag | Readonly<{
36
36
  }>;
37
37
  }>;
38
38
  export type { ContractWorkspaceObservation };
39
- export type AfterEndpointObservation = Readonly<{
39
+ type AfterEndpointObservation = Readonly<{
40
40
  kind: "claimed";
41
41
  }> | Readonly<{
42
42
  kind: "active";
@@ -67,6 +67,7 @@ export type ContractRow = Readonly<{
67
67
  target: string | null;
68
68
  targetLag: ContractTargetLag;
69
69
  delivery: DeliverData | null;
70
+ abandonNote?: string;
70
71
  targetObservation: Readonly<{
71
72
  head: SnapshotId | null;
72
73
  drift: boolean;
@@ -97,7 +98,7 @@ export type ContractObservation = Readonly<{
97
98
  kind: "present";
98
99
  row: ContractRow;
99
100
  }>;
100
- export declare function phaseAtFor(state: Pick<ContractState, "terminal" | "delivery" | "bound">, bindAt: string): string;
101
+ export declare function phaseAtFor(state: Pick<ContractState, "terminal" | "delivery">, bindAt: string): string;
101
102
  export declare function lastJournalAtFor(entries: readonly Pick<JournalEntry, "at">[]): string;
102
103
  /** Build the Contract board from one immutable git observation. */
103
104
  export declare function readContractBoard(observation: GitReadObservation, include?: ContractId): Promise<ContractBoard>;
@@ -25,10 +25,8 @@ function phaseFor(state) {
25
25
  if (state.terminal?.kind === "abandoned")
26
26
  return "abandoned";
27
27
  if (state.delivery !== null)
28
- return "tendered";
29
- if (state.bound !== null)
30
- return "bound";
31
- return "waiting";
28
+ return "delivered";
29
+ return "bound";
32
30
  }
33
31
  function verificationFor(state, document) {
34
32
  if (document === undefined)
@@ -49,7 +47,7 @@ function verificationFor(state, document) {
49
47
  return state.delivery === null ? undefined : { kind: "unrecorded" };
50
48
  }
51
49
  export function phaseAtFor(state, bindAt) {
52
- return state.terminal?.at ?? state.delivery?.at ?? state.bound?.at ?? bindAt;
50
+ return state.terminal?.at ?? state.delivery?.at ?? bindAt;
53
51
  }
54
52
  export function lastJournalAtFor(entries) {
55
53
  const last = entries.at(-1);
@@ -129,6 +127,9 @@ async function rowFor(input) {
129
127
  delivery: state.delivery === null || state.currentIntegration === null
130
128
  ? null
131
129
  : { ...state.delivery.data, integration: state.currentIntegration },
130
+ ...(state.terminal?.kind === "abandoned" && state.terminal.data.note !== undefined
131
+ ? { abandonNote: state.terminal.data.note }
132
+ : {}),
132
133
  targetObservation,
133
134
  ...(verification === undefined ? {} : { verification }),
134
135
  gates: {
@@ -3,10 +3,9 @@ import type { ContractId, ContractState } from "../core/facts/types.js";
3
3
  import type { WorktreeHooks } from "../git/hooks.js";
4
4
  import type { GitDecodeChannel } from "../git/read-observation.js";
5
5
  import type { MutationOperationInput, RepositoryScope } from "./operations.js";
6
- export type ReconcileReport = ReconcileResult;
7
6
  type ReconcileObservation = Readonly<{
8
7
  state: ContractState | null;
9
- report: ReconcileReport;
8
+ report: ReconcileResult;
10
9
  }>;
11
10
  type ReconcileOptions = Readonly<{
12
11
  hooks: WorktreeHooks;
@@ -14,12 +13,13 @@ type ReconcileOptions = Readonly<{
14
13
  retainTerminalWorktree?: boolean;
15
14
  place?: string;
16
15
  places?: ReadonlyMap<ContractId, string>;
16
+ onPhysical?: (report: ReconcileResult) => void;
17
17
  }>;
18
18
  export declare function reconcileOperation(input: MutationOperationInput & ReconcileOptions): Promise<ReconcileObservation>;
19
19
  type RepoReconcileItem = Readonly<{
20
20
  contractId: ContractId;
21
21
  state: ContractState | null;
22
- report: ReconcileReport;
22
+ report: ReconcileResult;
23
23
  }>;
24
24
  type RepoReconcileReport = Readonly<{
25
25
  contracts: readonly RepoReconcileItem[];
@@ -10,6 +10,10 @@ export async function reconcileOperation(input) {
10
10
  contractId: input.contractId,
11
11
  hooks: input.hooks,
12
12
  retryHooks: input.retryHooks,
13
+ onPhysical: (report) => {
14
+ input.progress?.recordPhysical(input.contractId, report);
15
+ input.onPhysical?.(report);
16
+ },
13
17
  ...(input.retainTerminalWorktree === undefined ? {} : { retainTerminalWorktree: input.retainTerminalWorktree }),
14
18
  ...(input.place === undefined ? {} : { place: input.place }),
15
19
  });
@@ -1,4 +1,4 @@
1
- import type { ExecutionProgress } from "./progress.js";
1
+ import type { ProtocolProgress } from "./progress.js";
2
2
  import type { ActorId, ContractId, ReintegratedData } from "../core/facts/types.js";
3
3
  import { type ReintegrateRefusal } from "../core/verbs/reintegrate.js";
4
4
  import { type IntegrationPreparationRefusal } from "../git/integration.js";
@@ -27,7 +27,7 @@ type ReintegrationInput = Readonly<{
27
27
  contractId: ContractId;
28
28
  target: string;
29
29
  actor?: ActorId;
30
- progress?: ExecutionProgress;
30
+ progress?: ProtocolProgress;
31
31
  }>;
32
32
  export declare function reintegrateOperation(input: ReintegrationInput): Promise<ReintegrationResult>;
33
33
  export {};
@@ -1,26 +1,43 @@
1
- import { type WorkspaceDirtyDelta } from "../git/tender.js";
1
+ import { z } from "zod";
2
+ import { type ActiveContractRefusal } from "../core/facts/observation.js";
2
3
  import type { AttestationData, ContractState, DeliverData } from "../core/facts/types.js";
3
- import { type AttestationRefusal } from "../core/verbs/attestation.js";
4
4
  import type { LeadingOutcome } from "./outcome.js";
5
- import type { CompletionEvidence } from "./completion.js";
6
5
  import type { MutationOperationInput, RepositoryScope } from "./operations.js";
7
6
  type ReviewPreparationRefusal = Readonly<{
8
7
  kind: "worktree-missing";
9
8
  contractId: import("../core/facts/types.js").ContractId;
10
9
  }> | import("../git/tender.js").DirtyWorkspaceRefusal;
11
- type ReviewRefusal = AttestationRefusal | ReviewPreparationRefusal;
10
+ type ReviewRefusal = ActiveContractRefusal | ReviewPreparationRefusal;
12
11
  type ReviewOperationInput = MutationOperationInput & Readonly<{
13
12
  verdict: AttestationData["verdict"];
14
13
  summary?: string;
15
14
  }>;
16
- export type ReviewWorkspaceEvidence = WorkspaceDirtyDelta & Readonly<{
17
- unmergedPaths: readonly string[];
18
- }>;
19
- export type ReviewAdmissionValue = Readonly<{
20
- workspace?: ReviewWorkspaceEvidence;
21
- }>;
22
- export type ReviewValue = CompletionEvidence & ReviewAdmissionValue;
23
- export { decodeReviewValue } from "./result-codec.js";
15
+ declare const reviewWorkspaceEvidenceSchema: z.ZodObject<{
16
+ staged: z.ZodReadonly<z.ZodArray<z.ZodString>>;
17
+ unstaged: z.ZodReadonly<z.ZodArray<z.ZodString>>;
18
+ untracked: z.ZodReadonly<z.ZodArray<z.ZodString>>;
19
+ shortStat: z.ZodObject<{
20
+ filesChanged: z.ZodNumber;
21
+ insertions: z.ZodNumber;
22
+ deletions: z.ZodNumber;
23
+ }, z.core.$strict>;
24
+ unmergedPaths: z.ZodReadonly<z.ZodArray<z.ZodString>>;
25
+ }, z.core.$strict>;
26
+ type ReviewWorkspaceEvidence = z.infer<typeof reviewWorkspaceEvidenceSchema>;
27
+ export declare const reviewAdmissionValueSchema: z.ZodObject<{
28
+ workspace: z.ZodOptional<z.ZodObject<{
29
+ staged: z.ZodReadonly<z.ZodArray<z.ZodString>>;
30
+ unstaged: z.ZodReadonly<z.ZodArray<z.ZodString>>;
31
+ untracked: z.ZodReadonly<z.ZodArray<z.ZodString>>;
32
+ shortStat: z.ZodObject<{
33
+ filesChanged: z.ZodNumber;
34
+ insertions: z.ZodNumber;
35
+ deletions: z.ZodNumber;
36
+ }, z.core.$strict>;
37
+ unmergedPaths: z.ZodReadonly<z.ZodArray<z.ZodString>>;
38
+ }, z.core.$strict>>;
39
+ }, z.core.$strict>;
40
+ export type ReviewAdmissionValue = z.infer<typeof reviewAdmissionValueSchema>;
24
41
  export declare function prepareReview(repository: RepositoryScope, stage: Readonly<{
25
42
  contractId: import("../core/facts/types.js").ContractId;
26
43
  coordinates: ContractState["coordinates"];
@@ -35,3 +52,4 @@ export declare function prepareReview(repository: RepositoryScope, stage: Readon
35
52
  refusal: ReviewPreparationRefusal;
36
53
  }>;
37
54
  export declare function admitReviewOperation(input: ReviewOperationInput): Promise<LeadingOutcome<ReviewAdmissionValue, ReviewRefusal>>;
55
+ export {};
@@ -1,8 +1,10 @@
1
+ import { z } from "zod";
2
+ import { workspaceDirtyDeltaSchema } from "../git/tender.js";
1
3
  import { worktreeChangeId } from "../git/integration.js";
2
- import { captureTender, dirtyTenderDelta, dirtyTenderRefusal, } from "../git/tender.js";
4
+ import { captureTender, dirtyTenderDelta, dirtyTenderRefusal } from "../git/tender.js";
3
5
  import { observeContractsForAdmissionAt } from "../git/observe.js";
4
6
  import { unmergedWorkspacePaths, worktreePath } from "../git/workspace.js";
5
- import { contractStateWitness, privateStateSeatAttempt, sameWorktreeWitness, STALE_PRIVATE_STATE_PREPARATION, } from "./run.js";
7
+ import { contractStateWitness, privateStateSeatAttempt, runBoundedAttempts, sameWorktreeWitness, STALE_PRIVATE_STATE_PREPARATION, } from "./run.js";
6
8
  import { dependencyKeySet } from "../core/subject.js";
7
9
  import { contractState } from "../core/facts/observation.js";
8
10
  import { gate } from "../core/facts/types.js";
@@ -11,7 +13,10 @@ import { admitDecidedOffer, mintAttempts } from "./attempt.js";
11
13
  import { appointmentFor, readPlaceRegister } from "../workspace-place.js";
12
14
  import { attemptDecisionWithSeatClose, timestamp } from "./operations.js";
13
15
  const REVIEWED = gate("reviewed");
14
- export { decodeReviewValue } from "./result-codec.js";
16
+ const reviewWorkspaceEvidenceSchema = workspaceDirtyDeltaSchema
17
+ .extend({ unmergedPaths: z.array(z.string().refine((value) => value.trim() !== "")).readonly() })
18
+ .strict();
19
+ export const reviewAdmissionValueSchema = z.object({ workspace: reviewWorkspaceEvidenceSchema.optional() }).strict();
15
20
  async function captureReviewableWorktree(repository, stage) {
16
21
  const appointed = stage.coordinates.workspace === "worktree"
17
22
  ? appointmentFor(await readPlaceRegister(repository), stage.contractId)
@@ -178,25 +183,11 @@ async function reviewAttempt(input, attempt) {
178
183
  }, attemptDecisionWithSeatClose);
179
184
  }
180
185
  export async function admitReviewOperation(input) {
181
- const attempts = mintAttempts({ entryCount: 1 });
182
- let review = null;
183
- for (let index = 0; index < attempts.length; index += 1) {
184
- const result = await reviewAttempt(input, attempts[index]);
185
- if (result.kind === "accepted" || result.kind === "refused") {
186
- review = result;
187
- break;
188
- }
189
- if (result.kind === "publication-failed")
190
- return { kind: "retry", reason: result };
191
- if (result.kind === "stale" || result.kind === "redecide")
192
- continue;
193
- if (result.kind === "collision" && index + 1 === attempts.length)
194
- return { kind: "retry", reason: result };
195
- }
196
- if (review === null)
197
- return { kind: "retry", reason: { kind: "exhausted" } };
198
- if (review.kind !== "accepted")
199
- return review;
200
- input.progress?.recordResidue(input.contractId, review);
201
- return review;
186
+ const result = await runBoundedAttempts(mintAttempts({ entryCount: 1 }), (attempt) => reviewAttempt(input, attempt));
187
+ if (result.kind === "refused")
188
+ return result;
189
+ if (result.kind !== "accepted")
190
+ return { kind: "retry", reason: result };
191
+ input.progress?.recordResidue(input.contractId, result);
192
+ return result;
202
193
  }
@@ -1,4 +1,5 @@
1
- import type { ExecutionProgress } from "./progress.js";
1
+ import { z } from "zod";
2
+ import type { ProtocolProgress } from "./progress.js";
2
3
  import { type GitDecisionObservation } from "../git/observe.js";
3
4
  import { type PrivateStatePublicationSeat, type PrivateStateSeatOutcome } from "../git/private-state-seat.js";
4
5
  import type { GitDecodeChannel, GitTreeSelection } from "../git/read-observation.js";
@@ -12,13 +13,41 @@ import { type AcceptedAdmission, type AttemptTerminal } from "./attempt.js";
12
13
  export declare const STALE_PRIVATE_STATE_PREPARATION: {
13
14
  readonly kind: "stale";
14
15
  };
15
- export type ProtocolTerminal = Readonly<{
16
- kind: "exhausted";
17
- }> | AttemptTerminal;
16
+ export declare const protocolTerminalSchema: z.ZodUnion<readonly [z.ZodObject<{
17
+ kind: z.ZodEnum<{
18
+ exhausted: "exhausted";
19
+ collision: "collision";
20
+ }>;
21
+ }, z.core.$strict>, z.ZodObject<{
22
+ kind: z.ZodLiteral<"publication-failed">;
23
+ diagnostic: z.ZodString;
24
+ }, z.core.$strict>]>;
25
+ export type ProtocolTerminal = z.infer<typeof protocolTerminalSchema>;
18
26
  export type ProtocolResult<Refusal> = AcceptedAdmission | Readonly<{
19
27
  kind: "refused";
20
28
  refusal: Refusal;
21
29
  }> | ProtocolTerminal;
30
+ type BoundedAttemptResult<Accepted extends Readonly<{
31
+ kind: "accepted";
32
+ }>, Refusal> = Accepted | Readonly<{
33
+ kind: "refused";
34
+ refusal: Refusal;
35
+ }> | Readonly<{
36
+ kind: "stale";
37
+ }> | Readonly<{
38
+ kind: "redecide";
39
+ }> | AttemptTerminal;
40
+ /**
41
+ * Classify one bounded sequence of fresh semantic attempts. The callback owns every verb-specific
42
+ * observation, preparation, decision, and publication; this function only decides whether its
43
+ * result is terminal or whether the next fresh context may be tried.
44
+ */
45
+ export declare function runBoundedAttempts<Accepted extends Readonly<{
46
+ kind: "accepted";
47
+ }>, Refusal>(attempts: readonly AttemptContext[], attempt: (context: AttemptContext, index: number) => Promise<BoundedAttemptResult<Accepted, Refusal>>): Promise<Accepted | Readonly<{
48
+ kind: "refused";
49
+ refusal: Refusal;
50
+ }> | ProtocolTerminal>;
22
51
  export type CompanionDecorator = (input: Readonly<{
23
52
  repository: GitRepository;
24
53
  observation: GitDecisionObservation;
@@ -61,7 +90,7 @@ type ProtocolAdmission<Input extends Readonly<{
61
90
  }>, Refusal> = Readonly<{
62
91
  channel: GitDecodeChannel;
63
92
  repository: GitRepository;
64
- progress?: ExecutionProgress;
93
+ progress?: ProtocolProgress;
65
94
  contracts: readonly ContractId[];
66
95
  attempts: readonly AttemptContext[];
67
96
  decide: (input: DecideInput<Input>) => OfferDecision<Refusal>;
@@ -1,3 +1,5 @@
1
+ import { z } from "zod";
2
+ import { publicationFailedSchema } from "../git/admission.js";
1
3
  import { extendAdmissionPathsAt, observeContractsForAdmissionAt } from "../git/observe.js";
2
4
  import { appendPrivateStateSeatClose, isPrivateStateSeatContention, mergePrivateStateSeatClose, withPrivateStatePublicationSeat, } from "../git/private-state-seat.js";
3
5
  import { GIT_REF, readRefs } from "../git/repository.js";
@@ -5,6 +7,25 @@ import { admitDecidedOffer } from "./attempt.js";
5
7
  export const STALE_PRIVATE_STATE_PREPARATION = {
6
8
  kind: "stale",
7
9
  };
10
+ export const protocolTerminalSchema = z.union([
11
+ z.object({ kind: z.enum(["exhausted", "collision"]) }).strict(),
12
+ publicationFailedSchema,
13
+ ]);
14
+ /**
15
+ * Classify one bounded sequence of fresh semantic attempts. The callback owns every verb-specific
16
+ * observation, preparation, decision, and publication; this function only decides whether its
17
+ * result is terminal or whether the next fresh context may be tried.
18
+ */
19
+ export async function runBoundedAttempts(attempts, attempt) {
20
+ for (let index = 0; index < attempts.length; index += 1) {
21
+ const result = await attempt(attempts[index], index);
22
+ if (result.kind === "accepted" || result.kind === "refused" || result.kind === "publication-failed")
23
+ return result;
24
+ if (result.kind === "collision" && index + 1 === attempts.length)
25
+ return result;
26
+ }
27
+ return { kind: "exhausted" };
28
+ }
8
29
  export function contractStateWitness(state) {
9
30
  return { head: state.head };
10
31
  }
@@ -158,16 +179,7 @@ async function prepareDirectProtocolAttempt(input, baseAttempt) {
158
179
  }
159
180
  /** Run bounded, verb-neutral attempts and return one real admission on acceptance. */
160
181
  export async function runProtocol(input) {
161
- const attempts = input.attempts;
162
- for (let index = 0; index < attempts.length; index += 1) {
163
- const attempt = attempts[index];
164
- const result = input.preparation === undefined
165
- ? await runDirectProtocolAttempt(input, attempt)
166
- : await runSplitProtocolAttempt(input, attempt);
167
- if (result.kind === "refused" || result.kind === "accepted" || result.kind === "publication-failed")
168
- return result;
169
- if (result.kind === "collision" && index + 1 === attempts.length)
170
- return result;
171
- }
172
- return { kind: "exhausted" };
182
+ return await runBoundedAttempts(input.attempts, (attempt) => input.preparation === undefined
183
+ ? runDirectProtocolAttempt(input, attempt)
184
+ : runSplitProtocolAttempt(input, attempt));
173
185
  }
@@ -46,16 +46,6 @@ export declare class SettingsError extends Error {
46
46
  readonly kind = "settings";
47
47
  constructor(message: string);
48
48
  }
49
- export type Gate = string;
50
- export type GatesFromInput = Readonly<{
51
- settings: Settings;
52
- names?: readonly string[];
53
- }>;
54
- export type RequireBranchesToBeUpToDateFromInput = Readonly<{
55
- settings: Settings;
56
- }>;
57
49
  export declare function settings(input?: SettingsInput): Promise<Settings>;
58
50
  /** Read only the project scope owned by a materialized candidate snapshot. */
59
51
  export declare function projectSettings(root: string): Promise<Settings>;
60
- export declare function gatesFrom(input: GatesFromInput): readonly Gate[];
61
- export declare function requireBranchesToBeUpToDateFrom(input: RequireBranchesToBeUpToDateFromInput): boolean;