@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,5 +1,12 @@
1
- import type { AcceptedResult, RetryResult } from "../result.js";
1
+ import type { AbandonOutcome, AmendOutcome, ArcOutcome, AuditOutcome, BindOutcome, DeliverOutcome, ReviewOutcome } from "../../index.js";
2
2
  import { type TextRenderContext } from "./terminal.js";
3
- export declare function renderAccepted(result: AcceptedResult, context?: TextRenderContext): string;
4
- export declare function renderRetry(result: RetryResult, context?: TextRenderContext): string;
3
+ export type ContractOutcome = BindOutcome | AmendOutcome | DeliverOutcome | ReviewOutcome | AuditOutcome | ArcOutcome | AbandonOutcome;
4
+ export type AcceptedContractOutcome = Extract<ContractOutcome, {
5
+ kind: "accepted";
6
+ }>;
7
+ type RetryContractOutcome = Extract<ContractOutcome, {
8
+ kind: "retry";
9
+ }>;
10
+ export declare function renderAccepted(result: AcceptedContractOutcome, context?: TextRenderContext): string;
11
+ export declare function renderRetry(result: RetryContractOutcome, context?: TextRenderContext): string;
5
12
  export { renderContractHistory } from "./contract-history.js";
@@ -1,16 +1,43 @@
1
+ import { effectCleanup, effectExecutionStops, effectLags, effectRecoverySnapshot, effectRetainedCheckouts, effectRetainedWorktrees, effectRetiredWorktrees, effectSettlementLags, } from "./effects.js";
1
2
  import { renderAcceptedAudit } from "./audit.js";
2
- import { appendHookPayload, executionCleanupLines, executionStopLines, hookFailureSummary, outcomeLines, receiptPayload, receiptRow, reuseLines, stopLines, titleLines, } from "./receipt.js";
3
+ import { appendHookPayload, executionCleanupLines, executionStopLines, gatesAwaitLines, hookFailureSummary, outcomeLines, receiptPayload, receiptRow, reuseLines, stopLines, titleLines, } from "./receipt.js";
4
+ import { abbreviateGitIds, displayGitId, lifecycleWord } from "./contract-observation.js";
5
+ import { renderDiffstat } from "./akuma-tool.js";
3
6
  import { DEFAULT_CLI_COLUMNS, renderOpaqueBlock, safeText, tone } from "./terminal.js";
4
7
  const HANG = " ";
5
- function isRecord(value) {
6
- return typeof value === "object" && value !== null && !Array.isArray(value);
8
+ function attestationVerdict(facts) {
9
+ const attestation = facts.findLast((fact) => fact.kind === "attestation" && fact.data.gate === "reviewed");
10
+ if (attestation === undefined)
11
+ throw new Error("accepted review is missing its reviewed attestation");
12
+ return attestation.data.verdict;
13
+ }
14
+ function bindTarget(facts) {
15
+ return facts.findLast((fact) => fact.kind === "bind")?.data.coordinates.target ?? null;
16
+ }
17
+ function arcChapter(facts) {
18
+ const arc = facts.findLast((fact) => fact.kind === "arc");
19
+ if (arc === undefined)
20
+ throw new Error("accepted arc is missing its arc fact");
21
+ return { seq: arc.data.seq, title: arc.data.title };
22
+ }
23
+ function abandonedNote(facts) {
24
+ return facts.findLast((fact) => fact.kind === "abandoned")?.data.note;
7
25
  }
8
26
  function retryLines(detail, indent, columns) {
9
27
  if (detail.kind === "publication-failed") {
10
- return [...renderOpaqueBlock("publication-failed", indent, columns), ...["diagnostic", "", detail.diagnostic, ""]];
28
+ return [...renderOpaqueBlock("publication-failed", indent, columns), ...["reason", "", detail.diagnostic, ""]];
11
29
  }
12
30
  return renderOpaqueBlock(detail.kind, indent, columns);
13
31
  }
32
+ /**
33
+ * The one word for a checkout git could not carry to the landed head: `behind` is git's own name for
34
+ * that state, and the raw result kind never prints on a receipt.
35
+ */
36
+ function checkoutBehindRows(path, target, columns) {
37
+ const lines = [];
38
+ receiptRow(lines, "!", "lag", [{ text: "checkout behind" }, { text: path, opaque: true }, { text: `· ${target}`, opaque: true }], columns);
39
+ return lines;
40
+ }
14
41
  function lagRows(lag, columns) {
15
42
  const lines = [];
16
43
  if (lag.kind === "worktree-retained") {
@@ -29,8 +56,8 @@ function lagRows(lag, columns) {
29
56
  receiptRow(lines, "!", "lag", [{ text: "unsealed bytes" }, { text: lag.path, opaque: true }], columns);
30
57
  }
31
58
  else if (lag.kind === "target-checkout-retained") {
32
- receiptRow(lines, "!", "lag", [{ text: `target-checkout-retained ${lag.target} ${lag.path}`, opaque: true }], columns);
33
- receiptPayload(lines, "diagnostic", lag.diagnostic);
59
+ pushBlock(lines, checkoutBehindRows(lag.path, lag.target, columns));
60
+ receiptPayload(lines, "reason", lag.diagnostic);
34
61
  }
35
62
  else if (lag.kind === "worktree-hook-failed") {
36
63
  receiptRow(lines, "!", "lag", [
@@ -43,11 +70,11 @@ function lagRows(lag, columns) {
43
70
  }
44
71
  else if (lag.kind === "contract-file-failed") {
45
72
  receiptRow(lines, "!", "lag", [{ text: `contract-file-failed ${lag.worktree} ${lag.path}`, opaque: true }], columns);
46
- receiptPayload(lines, "diagnostic", lag.diagnostic);
73
+ receiptPayload(lines, "reason", lag.diagnostic);
47
74
  }
48
75
  else {
49
76
  receiptRow(lines, "!", "lag", [{ text: `reconcile-failed ${lag.stage}`, opaque: true }], columns);
50
- receiptPayload(lines, "diagnostic", lag.diagnostic);
77
+ receiptPayload(lines, "reason", lag.diagnostic);
51
78
  }
52
79
  return lines;
53
80
  }
@@ -58,39 +85,71 @@ function settlementLagRows(lag, columns) {
58
85
  receiptRow(lines, " ", "task", [{ text: lag.taskId, opaque: true }], columns);
59
86
  if (lag.path !== undefined)
60
87
  receiptRow(lines, " ", "path", [{ text: lag.path, opaque: true }], columns);
61
- receiptPayload(lines, "diagnostic", lag.diagnostic);
88
+ receiptPayload(lines, "reason", lag.diagnostic);
62
89
  return lines;
63
90
  }
91
+ function overlapGroup(patterns) {
92
+ const identical = [];
93
+ const identicalSeen = new Set();
94
+ const contained = new Map();
95
+ const intersections = [];
96
+ const intersectionSeen = new Set();
97
+ for (const pattern of patterns) {
98
+ if (pattern.relation === "same" || (pattern.relation === undefined && pattern.mine === pattern.theirs)) {
99
+ if (!identicalSeen.has(pattern.mine)) {
100
+ identicalSeen.add(pattern.mine);
101
+ identical.push(pattern.mine);
102
+ }
103
+ continue;
104
+ }
105
+ if (pattern.relation === "mine-within-theirs" || pattern.relation === "theirs-within-mine") {
106
+ const container = pattern.relation === "mine-within-theirs" ? pattern.theirs : pattern.mine;
107
+ const leaf = pattern.relation === "mine-within-theirs" ? pattern.mine : pattern.theirs;
108
+ const entry = contained.get(container) ?? { container, leaves: [] };
109
+ if (!entry.leaves.includes(leaf))
110
+ entry.leaves.push(leaf);
111
+ contained.set(container, entry);
112
+ continue;
113
+ }
114
+ const key = `${pattern.mine}\u0000${pattern.theirs}`;
115
+ if (!intersectionSeen.has(key)) {
116
+ intersectionSeen.add(key);
117
+ intersections.push({ mine: pattern.mine, theirs: pattern.theirs });
118
+ }
119
+ }
120
+ return { identical, contained: [...contained.values()], intersections };
121
+ }
64
122
  function overlapRows(overlaps, color) {
65
123
  const groups = new Map();
66
124
  for (const overlap of overlaps) {
67
- let patterns = groups.get(overlap.contract);
68
- if (patterns === undefined) {
69
- patterns = new Map();
70
- groups.set(overlap.contract, patterns);
71
- }
72
- for (const pattern of overlap.patterns)
73
- patterns.set(JSON.stringify([pattern.mine, pattern.theirs]), pattern);
125
+ const patterns = groups.get(overlap.contract) ?? [];
126
+ patterns.push(...overlap.patterns);
127
+ groups.set(overlap.contract, patterns);
74
128
  }
75
129
  if (groups.size === 0)
76
130
  return [];
77
- const lines = ["", ` ${tone("overlap", "dim", color)}`];
131
+ const lines = [""];
132
+ let groupIndex = 0;
78
133
  for (const [contract, patterns] of groups) {
79
- if (lines.length > 2)
134
+ if (groupIndex++ > 0)
80
135
  lines.push("");
81
136
  const identity = safeText(contract);
82
- lines.push(` ${tone("└─", "dim", color)} ${color ? `\u001b[1m${identity}\u001b[0m` : identity}`);
83
- let first = true;
84
- for (const { mine, theirs } of patterns.values()) {
85
- if (mine === theirs)
86
- lines.push(` ${safeText(mine)}`);
87
- else {
88
- if (!first)
89
- lines.push("");
90
- lines.push(` this ${safeText(mine)}`, ` other ${safeText(theirs)}`);
91
- }
92
- first = false;
137
+ lines.push(` overlap ${color ? `\u001b[1m${identity}\u001b[0m` : identity}`);
138
+ const group = overlapGroup(patterns);
139
+ const relation = (symbol) => tone(symbol, "dim", color);
140
+ const bounded = group.identical.slice(0, 6);
141
+ for (const pattern of bounded)
142
+ lines.push(` ${relation("≡")} ${safeText(pattern)}`);
143
+ if (group.identical.length > 6)
144
+ lines.push(` ${relation("≡")} … (${group.identical.length - 6} more)`);
145
+ for (const { container, leaves } of group.contained) {
146
+ for (const leaf of leaves.slice(0, 6))
147
+ lines.push(` ${safeText(leaf)} ${relation("⊂")} ${safeText(container)}`);
148
+ if (leaves.length > 6)
149
+ lines.push(` … (${leaves.length - 6} more) ${relation("⊂")} ${safeText(container)}`);
93
150
  }
151
+ for (const { mine, theirs } of group.intersections)
152
+ lines.push(` ${relation("∩")} ${safeText(mine)} · ${safeText(theirs)}`);
94
153
  }
95
154
  return lines;
96
155
  }
@@ -101,33 +160,47 @@ function pushBlock(lines, block) {
101
160
  }
102
161
  function acceptedRecord(result, columns) {
103
162
  const record = [];
104
- if (result.recoverySnapshot !== undefined)
105
- receiptRow(record, " ", "recovery snapshot", [{ text: result.recoverySnapshot, opaque: true }], columns);
106
- if (result.verb === "deliver") {
107
- pushBlock(record, reuseLines(result.verificationReuse, columns));
163
+ const recoverySnapshot = effectRecoverySnapshot(result.effects);
164
+ if (recoverySnapshot !== undefined)
165
+ receiptRow(record, " ", "recovery snapshot", [{ text: recoverySnapshot, opaque: true }], columns);
166
+ if (result.operation === "deliver") {
167
+ pushBlock(record, reuseLines(result.value.verificationReuse, columns));
108
168
  }
109
169
  return record;
110
170
  }
111
171
  function acceptedLagRows(result, columns) {
112
172
  const obligations = [];
113
- if (result.lag !== undefined) {
114
- for (const lag of result.lag)
115
- pushBlock(obligations, lagRows(lag, columns));
173
+ // A checkout this invocation's own follow could not carry is loud; the same arm's reconciliation lag
174
+ // is pre-existing residue and stays in the typed result only.
175
+ for (const checkout of effectRetainedCheckouts(result.effects) ?? []) {
176
+ pushBlock(obligations, checkoutBehindRows(checkout.path, checkout.target, columns));
116
177
  }
117
- for (const lag of result.settlementLags) {
178
+ for (const { contract, lag } of effectLags(result.effects)) {
179
+ if (lag.kind === "worktree-retained" ||
180
+ lag.kind === "worktree-follow-retained" ||
181
+ lag.kind === "unsealed-bytes" ||
182
+ lag.kind === "target-checkout-retained")
183
+ continue;
184
+ if (contract !== result.contract)
185
+ receiptRow(obligations, "!", "lag owner", [{ text: contract, opaque: true }], columns);
186
+ pushBlock(obligations, lagRows(lag, columns));
187
+ }
188
+ for (const { contract, lag } of effectSettlementLags(result.effects)) {
189
+ if (contract !== result.contract)
190
+ receiptRow(obligations, "!", "settlement owner", [{ text: contract, opaque: true }], columns);
118
191
  pushBlock(obligations, settlementLagRows(lag, columns));
119
192
  }
120
- pushBlock(obligations, executionCleanupLines(result.cleanup ?? [], columns, result.contract));
121
- pushBlock(obligations, executionStopLines(result.executionStops ?? [], columns));
193
+ pushBlock(obligations, executionCleanupLines(effectCleanup(result.effects).filter((issue) => issue.kind !== "worktree-leak"), columns, result.contract));
194
+ pushBlock(obligations, executionStopLines(effectExecutionStops(result.effects), columns));
122
195
  return obligations;
123
196
  }
124
197
  function acceptedDeviations(result, columns, color) {
125
198
  const deviations = [];
126
- if (result.overlaps !== undefined)
127
- pushBlock(deviations, overlapRows(result.overlaps, color));
128
- if (result.overlapFailure !== undefined) {
199
+ if (result.value.overlaps !== undefined)
200
+ pushBlock(deviations, overlapRows(result.value.overlaps, color));
201
+ if (result.value.overlapFailure !== undefined) {
129
202
  receiptRow(deviations, "!", "overlap", [{ text: "unavailable" }], columns);
130
- receiptPayload(deviations, "diagnostic", result.overlapFailure);
203
+ receiptPayload(deviations, "reason", result.value.overlapFailure);
131
204
  }
132
205
  return deviations;
133
206
  }
@@ -137,50 +210,99 @@ function recordBlock(result, columns) {
137
210
  }
138
211
  function nonGatingVerificationLines(result, columns) {
139
212
  const lines = [];
140
- const verification = result.completion?.verification;
213
+ const verification = result.value.completion?.verification;
141
214
  if (verification === undefined || verification.verdict !== "unsatisfied")
142
215
  return lines;
143
- receiptRow(lines, "!", "verification", [{ text: "unsatisfied" }, { text: `(${verification.mode})` }, { text: "· not required by Contract gates" }], columns);
144
- if (result.verificationSummary !== undefined) {
145
- receiptPayload(lines, " summary", result.verificationSummary);
216
+ receiptRow(lines, "!", "verification", [
217
+ ...(verification.mode === "reused" ? [{ text: "reused" }] : []),
218
+ { text: "unsatisfied" },
219
+ { text: "· not required by Contract gates" },
220
+ ], columns);
221
+ if (result.value.verificationSummary !== undefined) {
222
+ receiptPayload(lines, " summary", result.value.verificationSummary);
146
223
  }
147
224
  return lines;
148
225
  }
149
- function shortGitId(value) {
150
- return /^[0-9a-f]{40}$/iu.test(value) ? value.slice(0, 7) : value;
226
+ /** A terminal command names the worktree it retired, or the retained worktree it failed to remove. */
227
+ function worktreeRetirementLines(result, columns) {
228
+ const lines = [];
229
+ for (const { contract, name } of effectRetiredWorktrees(result.effects)) {
230
+ if (contract === result.contract)
231
+ receiptRow(lines, " ", "worktree", [{ text: `${name} retired` }], columns);
232
+ else
233
+ receiptRow(lines, "!", "worktree owner", [
234
+ { text: contract, opaque: true },
235
+ { text: `${name} retired`, opaque: true },
236
+ ], columns);
237
+ }
238
+ for (const { contract, path } of effectRetainedWorktrees(result.effects)) {
239
+ if (contract === result.contract)
240
+ receiptRow(lines, "!", "lag", [{ text: "worktree retained" }, { text: path, opaque: true }], columns);
241
+ else
242
+ receiptRow(lines, "!", "worktree owner", [
243
+ { text: contract, opaque: true },
244
+ { text: `retained ${path}`, opaque: true },
245
+ ], columns);
246
+ }
247
+ return lines;
248
+ }
249
+ /** The landed diff's shape, rendered by the one diffstat rule the akuma surfaces already own. */
250
+ function landedChangesLines(scope, columns) {
251
+ if (scope === undefined)
252
+ return [];
253
+ const files = `${scope.filesChanged} ${scope.filesChanged === 1 ? "file" : "files"}`;
254
+ const lines = [];
255
+ receiptRow(lines, " ", "changes", [{ text: `${files} · ${renderDiffstat({ added: scope.insertions, removed: scope.deletions })}` }], columns);
256
+ return lines;
151
257
  }
152
258
  /**
153
259
  * Shared presentation of a completed placement, so a deliver and a review that placed the same candidate read
154
260
  * identically: one git-shaped target movement row, naming the reference it advanced, then the final lifecycle
155
261
  * state. Satisfied Verification adds one fact row naming the integrated result; placement made that commit the
156
- * reference's new head, so the movement and integrated-result rows share one sha. Verification mode words stay in
157
- * JSON and `history`, never in ordinary receipt text. A completion without an advanced reference states no movement.
158
- * Journal ULIDs stay in JSON and `history`, never in ordinary receipt text.
262
+ * reference's new head, so the movement and integrated-result rows share one sha. The verdict names reuse in the
263
+ * audit surface's vocabulary and carries no qualifier when this command executed declarations. A completion
264
+ * without an advanced reference states no movement. Journal ULIDs stay in JSON and `history`, never in ordinary
265
+ * receipt text.
159
266
  */
160
267
  function completedPlacementLines(result, columns) {
161
- const completion = result.completion;
268
+ const completion = result.value.completion;
162
269
  if (completion === undefined)
163
270
  return [];
271
+ const abbreviations = abbreviateGitIds([
272
+ completion.predecessor ?? "",
273
+ completion.integration,
274
+ ...(result.operation === "deliver"
275
+ ? [result.value.tenderSnapshot ?? "", result.value.integration?.changeId ?? ""]
276
+ : []),
277
+ ]);
164
278
  const lines = [];
165
279
  if (completion.predecessor !== undefined && completion.target !== undefined) {
166
280
  receiptRow(lines, " ", "target", [
167
- { text: `${shortGitId(completion.predecessor)}..${shortGitId(completion.integration)}` },
281
+ {
282
+ text: `${displayGitId(completion.predecessor, abbreviations)}..${displayGitId(completion.integration, abbreviations)}`,
283
+ },
168
284
  { text: completion.target, opaque: true },
169
285
  ], columns);
170
286
  }
171
287
  if (completion.verification?.verdict === "satisfied") {
172
- receiptRow(lines, " ", "integration result", [{ text: `${shortGitId(completion.integration)} · verification satisfied` }], columns);
288
+ receiptRow(lines, " ", "integration result", [
289
+ {
290
+ text: `${displayGitId(completion.integration, abbreviations)} · verification ${completion.verification.mode === "reused" ? "reused " : ""}satisfied`,
291
+ },
292
+ ], columns);
173
293
  }
294
+ lines.push(...landedChangesLines(completion.scope, columns));
174
295
  lines.push(...nonGatingVerificationLines(result, columns));
175
- // Placement admission always admits the claim entry beside the movement, so a completed placement is claimed.
176
- receiptRow(lines, "●", "claimed", [], columns);
296
+ // Placement admission always admits the claim entry beside the movement, so a completed placement is accepted.
297
+ receiptRow(lines, "✓", lifecycleWord("claimed"), [], columns);
177
298
  return lines;
178
299
  }
179
300
  /** Evidence handles stay in JSON and history; ordinary receipt text carries only outstanding obligations. */
180
301
  function obligationLines(result, columns) {
181
302
  const rows = [];
182
- if (result.recoverySnapshot !== undefined)
183
- receiptRow(rows, " ", "recovery snapshot", [{ text: result.recoverySnapshot, opaque: true }], columns);
303
+ const recoverySnapshot = effectRecoverySnapshot(result.effects);
304
+ if (recoverySnapshot !== undefined)
305
+ receiptRow(rows, " ", "recovery snapshot", [{ text: recoverySnapshot, opaque: true }], columns);
184
306
  rows.push(...acceptedLagRows(result, columns));
185
307
  return rows;
186
308
  }
@@ -193,12 +315,12 @@ function movementLines(result, columns) {
193
315
  return lines;
194
316
  }
195
317
  function continuationLines(result, columns) {
196
- const report = result.continuation;
318
+ const report = result.value.continuation;
197
319
  if (report === undefined)
198
320
  return [];
199
321
  const lines = [];
200
322
  for (const contractId of report.claimed) {
201
- receiptRow(lines, "✓", "continuation", [{ text: "complete" }, { text: contractId, opaque: true }], columns);
323
+ receiptRow(lines, "✓", "dependent", [{ text: "complete" }, { text: contractId, opaque: true }], columns);
202
324
  }
203
325
  for (const { contractId, stop } of report.stopped) {
204
326
  if ("kind" in stop && stop.kind === "already-terminal")
@@ -206,7 +328,7 @@ function continuationLines(result, columns) {
206
328
  else if ("kind" in stop && stop.kind === "execution-stopped")
207
329
  lines.push(...executionStopLines([stop], columns));
208
330
  else if ("kind" in stop && stop.kind === "physical-lag") {
209
- receiptRow(lines, "!", "continuation", [{ text: contractId, opaque: true }, { text: "physical follow stopped" }], columns);
331
+ receiptRow(lines, "!", "dependent", [{ text: contractId, opaque: true }, { text: "physical follow stopped" }], columns);
210
332
  }
211
333
  else
212
334
  lines.push(...stopLines(stop, columns, contractId, contractId));
@@ -215,81 +337,110 @@ function continuationLines(result, columns) {
215
337
  }
216
338
  function renderAcceptedBind(result, columns, color) {
217
339
  const lines = titleLines("✓", "bound", result.contract, columns);
218
- if (result.workspace !== undefined)
219
- receiptRow(lines, " ", "workspace", [{ text: "worktree" }, { text: result.workspace.path, opaque: true }], columns);
220
- if (result.target === null)
340
+ if (result.value.workspace !== undefined)
341
+ receiptRow(lines, " ", "worktree", [{ text: result.value.workspace.path, opaque: true }], columns);
342
+ const target = bindTarget(result.facts);
343
+ if (target === null)
221
344
  receiptRow(lines, " ", "no target", [], columns);
222
345
  else
223
- receiptRow(lines, " ", "target", [{ text: result.target, opaque: true }], columns);
224
- for (const warning of result.warnings ?? [])
346
+ receiptRow(lines, " ", "target", [{ text: target, opaque: true }], columns);
347
+ for (const warning of result.value.warnings ?? [])
225
348
  receiptRow(lines, "!", "region warning", [{ text: warning }], columns);
226
349
  lines.push(...acceptedDeviations(result, columns, color), ...recordBlock(result, columns));
227
350
  return lines.join("\n");
228
351
  }
352
+ function termsDiffText(diff) {
353
+ return diff.replace(/^={3,}\r?\n/u, "").replace(/^((?:---|\+\+\+) [^\r\n]*)[ \t]+$/gmu, "$1");
354
+ }
229
355
  function renderAcceptedAmend(result, columns, color) {
230
- const changed = result.diff.length > 0;
231
- const lines = titleLines("✓", changed ? "terms replaced" : "terms unchanged", result.contract, columns);
232
- if (changed)
233
- receiptPayload(lines, " terms diff", result.diff);
356
+ const documentChanged = result.value.documentDiff.length > 0;
357
+ const changed = documentChanged || result.value.changes.gates !== undefined || result.value.changes.after !== undefined;
358
+ const lines = titleLines("✓", "amended", result.contract, columns);
359
+ if (!changed)
360
+ receiptRow(lines, " ", "terms", [{ text: "unchanged" }], columns);
361
+ if (result.value.changes.gates !== undefined)
362
+ receiptRow(lines, " ", "gates", [{ text: result.value.changes.gates.join(" · ") || "none" }], columns);
363
+ if (result.value.changes.after !== undefined)
364
+ receiptRow(lines, " ", "after", [{ text: result.value.changes.after.join(" · ") || "none" }], columns);
365
+ if (documentChanged)
366
+ receiptPayload(lines, "terms diff", termsDiffText(result.value.documentDiff));
234
367
  lines.push(...acceptedDeviations(result, columns, color), ...recordBlock(result, columns));
235
368
  return lines.join("\n");
236
369
  }
370
+ function deliverIdentityLines(result, abbreviations, columns) {
371
+ const lines = [];
372
+ if (result.value.leading !== undefined && result.value.leading.kind === "already-admitted")
373
+ receiptRow(lines, " ", "leading", [{ text: result.value.leading.kind.replaceAll("-", " ") }], columns);
374
+ if (result.value.tenderSnapshot !== undefined)
375
+ receiptRow(lines, " ", "candidate", [{ text: displayGitId(result.value.tenderSnapshot, abbreviations), opaque: true }], columns);
376
+ if (result.value.integration !== undefined && !/^0{40}$/u.test(result.value.integration.changeId))
377
+ receiptRow(lines, " ", "content identity (not commit)", [{ text: displayGitId(result.value.integration.changeId, abbreviations), opaque: true }], columns);
378
+ return lines;
379
+ }
237
380
  function renderAcceptedDeliver(result, columns) {
238
- const complete = result.completion !== undefined;
239
- const title = complete ? "delivered" : "deliver incomplete";
240
- const lines = titleLines("✓", title, result.contract, columns);
241
- if (result.leading !== undefined) {
242
- receiptRow(lines, " ", "leading", [{ text: result.leading.kind.replaceAll("-", " ") }], columns);
243
- }
244
- if (result.tenderSnapshot !== undefined)
245
- receiptRow(lines, " ", "tender commit", [{ text: result.tenderSnapshot, opaque: true }], columns);
246
- if (result.integration !== undefined)
247
- receiptRow(lines, " ", "content identity (not commit)", [{ text: result.integration.changeId, opaque: true }], columns);
381
+ const complete = result.value.completion !== undefined;
382
+ const lines = titleLines("✓", "delivered", result.contract, columns);
383
+ const abbreviations = abbreviateGitIds([
384
+ result.value.tenderSnapshot ?? "",
385
+ result.value.integration?.changeId ?? "",
386
+ result.value.verificationSubject?.snapshot ?? "",
387
+ result.value.completion?.predecessor ?? "",
388
+ result.value.completion?.integration ?? "",
389
+ ]);
390
+ lines.push(...deliverIdentityLines(result, abbreviations, columns));
248
391
  if (complete)
249
392
  lines.push(...completedPlacementLines(result, columns));
250
- else
393
+ else {
394
+ const subject = result.value.verificationSubject;
395
+ if (subject !== undefined)
396
+ receiptRow(lines, " ", "integration result", [
397
+ {
398
+ text: `${displayGitId(subject.snapshot, abbreviations)} · verification ${subject.mode === "reused" ? "reused " : ""}${subject.verdict}`,
399
+ },
400
+ ], columns);
251
401
  lines.push(...movementLines(result, columns));
252
- if (result.verification !== undefined) {
253
- lines.push(...stopLines(result.verification, columns, result.contract));
254
- }
255
- if (!complete && result.placement !== undefined) {
256
- lines.push(...stopLines(result.placement, columns, result.contract));
257
402
  }
403
+ if (result.value.verification !== undefined)
404
+ lines.push(...stopLines(result.value.verification, columns, result.contract));
405
+ if (!complete && result.value.placement !== undefined)
406
+ lines.push(...stopLines(result.value.placement, columns, result.contract));
258
407
  if (!complete)
259
408
  receiptRow(lines, " ", "candidate", [{ text: "kept" }], columns);
260
- lines.push(...continuationLines(result, columns));
261
- lines.push(...(complete ? obligationLines(result, columns) : recordBlock(result, columns)));
409
+ lines.push(...continuationLines(result, columns), ...(complete ? obligationLines(result, columns) : recordBlock(result, columns)), ...worktreeRetirementLines(result, columns), ...gatesAwaitLines(result.value.placement));
262
410
  return lines.join("\n");
263
411
  }
264
412
  function renderAcceptedReview(result, columns) {
265
- const lines = titleLines("✓", `review ${result.verdict}`, result.contract, columns);
413
+ const lines = titleLines("✓", `review ${attestationVerdict(result.facts)}`, result.contract, columns);
266
414
  lines.push(...completedPlacementLines(result, columns));
267
- if (result.verification !== undefined) {
268
- lines.push(...stopLines(result.verification, columns, result.contract));
415
+ if (result.value.verification !== undefined) {
416
+ lines.push(...stopLines(result.value.verification, columns, result.contract));
269
417
  }
270
- if (result.placement !== undefined) {
271
- lines.push(...stopLines(result.placement, columns, result.contract));
418
+ if (result.value.placement !== undefined) {
419
+ lines.push(...stopLines(result.value.placement, columns, result.contract));
272
420
  }
273
421
  lines.push(...continuationLines(result, columns));
274
422
  lines.push(...obligationLines(result, columns));
423
+ lines.push(...worktreeRetirementLines(result, columns));
424
+ lines.push(...gatesAwaitLines(result.value.placement));
275
425
  return lines.join("\n");
276
426
  }
277
427
  function renderAcceptedArc(result, columns) {
278
- const lines = titleLines("✓", `entered chapter ${result.chapter.seq}`, result.contract, columns);
279
- receiptRow(lines, " ", "chapter", [{ text: String(result.chapter.seq) }, { text: "·" }, { text: result.chapter.title }], columns);
428
+ const lines = titleLines("✓", `chapter ${arcChapter(result.facts).seq} opened · ${arcChapter(result.facts).title}`, result.contract, columns);
280
429
  lines.push(...recordBlock(result, columns));
281
430
  return lines.join("\n");
282
431
  }
283
432
  function renderAcceptedAbandon(result, columns) {
284
433
  const lines = titleLines("✓", "abandoned", result.contract, columns);
285
- if (result.note !== undefined)
286
- receiptRow(lines, " ", "note", [{ text: result.note }], columns);
434
+ const note = abandonedNote(result.facts);
435
+ if (note !== undefined)
436
+ receiptRow(lines, " ", "note", [{ text: note }], columns);
287
437
  lines.push(...recordBlock(result, columns));
438
+ lines.push(...worktreeRetirementLines(result, columns));
288
439
  return lines.join("\n");
289
440
  }
290
441
  export function renderAccepted(result, context) {
291
442
  const columns = context?.columns ?? DEFAULT_CLI_COLUMNS;
292
- switch (result.verb) {
443
+ switch (result.operation) {
293
444
  case "audit":
294
445
  return renderAcceptedAudit(result, context);
295
446
  case "bind":
@@ -308,9 +459,7 @@ export function renderAccepted(result, context) {
308
459
  }
309
460
  export function renderRetry(result, context) {
310
461
  const columns = context?.columns ?? DEFAULT_CLI_COLUMNS;
311
- const detail = isRecord(result.detail) && typeof result.detail.kind === "string"
312
- ? retryLines(result.detail, HANG, columns)
313
- : [];
314
- return [...outcomeLines("?", result.verb, "retry", result.contract, columns), ...detail].join("\n");
462
+ const detail = retryLines(result.reason, HANG, columns);
463
+ return [...outcomeLines("?", result.operation, "retry", result.contract, columns), ...detail].join("\n");
315
464
  }
316
465
  export { renderContractHistory } from "./contract-history.js";
@@ -0,0 +1,26 @@
1
+ import type { ContractId, ExecutionCleanup, ExecutionStop, InvocationEffect, ReconciliationLag, SettlementLag, SnapshotId } from "../../index.js";
2
+ /** Presentation reads of the one native effect carrier; it never recomputes owner finality. */
3
+ export declare function effectLags(effects: readonly InvocationEffect[]): readonly Readonly<{
4
+ contract: ContractId;
5
+ lag: ReconciliationLag;
6
+ }>[];
7
+ export declare function effectSettlementLags(effects: readonly InvocationEffect[]): readonly Readonly<{
8
+ contract: ContractId;
9
+ lag: SettlementLag;
10
+ }>[];
11
+ export declare function effectCleanup(effects: readonly InvocationEffect[]): readonly ExecutionCleanup[];
12
+ export declare function effectExecutionStops(effects: readonly InvocationEffect[]): readonly ExecutionStop[];
13
+ export declare function effectRetainedCheckouts(effects: readonly InvocationEffect[]): readonly Readonly<{
14
+ path: string;
15
+ target: string;
16
+ diagnostic: string;
17
+ }>[];
18
+ export declare function effectRetiredWorktrees(effects: readonly InvocationEffect[]): readonly Readonly<{
19
+ contract: ContractId;
20
+ name: string;
21
+ }>[];
22
+ export declare function effectRetainedWorktrees(effects: readonly InvocationEffect[]): readonly Readonly<{
23
+ contract: ContractId;
24
+ path: string;
25
+ }>[];
26
+ export declare function effectRecoverySnapshot(effects: readonly InvocationEffect[]): SnapshotId | undefined;
@@ -0,0 +1,41 @@
1
+ /** Presentation reads of the one native effect carrier; it never recomputes owner finality. */
2
+ export function effectLags(effects) {
3
+ return effects.flatMap((effect) => effect.kind === "reconciliation-lag" ? [{ contract: effect.contract, lag: effect.lag }] : []);
4
+ }
5
+ export function effectSettlementLags(effects) {
6
+ return effects.flatMap((effect) => effect.kind === "settlement-lag" ? [{ contract: effect.contract, lag: effect.lag }] : []);
7
+ }
8
+ export function effectCleanup(effects) {
9
+ return effects.flatMap((effect) => (effect.kind === "cleanup" ? [effect.issue] : []));
10
+ }
11
+ export function effectExecutionStops(effects) {
12
+ return effects.flatMap((effect) => effect.kind === "execution-stopped"
13
+ ? [
14
+ {
15
+ kind: "execution-stopped",
16
+ contractId: effect.contract,
17
+ stage: effect.stage,
18
+ reason: effect.reason,
19
+ diagnostic: effect.diagnostic,
20
+ },
21
+ ]
22
+ : []);
23
+ }
24
+ export function effectRetainedCheckouts(effects) {
25
+ return effects.flatMap((effect) => effect.kind === "checkout-retained"
26
+ ? [{ path: effect.path, target: effect.target, diagnostic: effect.diagnostic }]
27
+ : []);
28
+ }
29
+ export function effectRetiredWorktrees(effects) {
30
+ return effects.flatMap((effect) => effect.kind === "worktree-retired" ? [{ contract: effect.contract, name: effect.name }] : []);
31
+ }
32
+ export function effectRetainedWorktrees(effects) {
33
+ return effects.flatMap((effect) => effect.kind === "worktree-retained" ? [{ contract: effect.contract, path: effect.path }] : []);
34
+ }
35
+ export function effectRecoverySnapshot(effects) {
36
+ for (const effect of effects) {
37
+ if (effect.kind === "reconciliation-effect" && effect.effect.kind === "recovery-snapshot")
38
+ return effect.effect.snapshot;
39
+ }
40
+ return undefined;
41
+ }