@astrosheep/keiyaku 4.5.28 → 4.6.1

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 (425) 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 -19
  10. package/build/src/akuma/akuma-instance.js +65 -177
  11. package/build/src/akuma/akuma-observe.d.ts +3 -21
  12. package/build/src/akuma/akuma-observe.js +7 -25
  13. package/build/src/akuma/{akuma-handle.d.ts → akuma-owner.d.ts} +60 -25
  14. package/build/src/akuma/{akuma-handle.js → akuma-owner.js} +43 -29
  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 -32
  18. package/build/src/akuma/akuma-wait.js +113 -0
  19. package/build/src/akuma/akuma.d.ts +35 -97
  20. package/build/src/akuma/akuma.js +148 -35
  21. package/build/src/akuma/archetype.d.ts +18 -6
  22. package/build/src/akuma/archetype.js +52 -34
  23. package/build/src/akuma/body.d.ts +79 -61
  24. package/build/src/akuma/body.js +101 -50
  25. package/build/src/akuma/call-initial-tell.d.ts +164 -0
  26. package/build/src/akuma/call-initial-tell.js +62 -0
  27. package/build/src/akuma/call-input.d.ts +0 -3
  28. package/build/src/akuma/call-input.js +0 -7
  29. package/build/src/akuma/call-request.d.ts +247 -38
  30. package/build/src/akuma/call-request.js +77 -92
  31. package/build/src/akuma/coordinate.d.ts +15 -5
  32. package/build/src/akuma/coordinate.js +12 -22
  33. package/build/src/akuma/dispatch-association.d.ts +1 -1
  34. package/build/src/akuma/dispatch-association.js +1 -10
  35. package/build/src/akuma/heart/activity-schema.d.ts +325 -0
  36. package/build/src/akuma/heart/activity-schema.js +53 -0
  37. package/build/src/akuma/heart/facts.d.ts +3 -9
  38. package/build/src/akuma/heart/index.d.ts +3 -1
  39. package/build/src/akuma/heart/index.js +4 -1
  40. package/build/src/akuma/heart/rows.d.ts +49 -2
  41. package/build/src/akuma/heart/rows.js +16 -2
  42. package/build/src/akuma/heart/soul.d.ts +1 -0
  43. package/build/src/akuma/heart/soul.js +7 -10
  44. package/build/src/akuma/heart/tells.d.ts +1 -0
  45. package/build/src/akuma/heart/tells.js +18 -0
  46. package/build/src/akuma/identity.d.ts +10 -7
  47. package/build/src/akuma/identity.js +23 -0
  48. package/build/src/akuma/index.d.ts +10 -8
  49. package/build/src/akuma/index.js +2 -2
  50. package/build/src/akuma/nuke.d.ts +3 -0
  51. package/build/src/akuma/nuke.js +13 -7
  52. package/build/src/akuma/projection-read.js +1 -2
  53. package/build/src/akuma/projection.d.ts +0 -5
  54. package/build/src/akuma/projection.js +22 -43
  55. package/build/src/akuma/provider-recipe.d.ts +58 -23
  56. package/build/src/akuma/provider-recipe.js +62 -103
  57. package/build/src/akuma/provider.d.ts +7 -78
  58. package/build/src/akuma/provider.js +11 -219
  59. package/build/src/akuma/providers/acp/config.d.ts +2 -0
  60. package/build/src/akuma/providers/acp/config.js +26 -1
  61. package/build/src/akuma/providers/acp/core.d.ts +7 -0
  62. package/build/src/akuma/providers/acp/core.js +49 -18
  63. package/build/src/akuma/providers/acp/index.js +14 -17
  64. package/build/src/akuma/providers/claude/index.js +2 -14
  65. package/build/src/akuma/providers/codex-app-server/index.js +0 -22
  66. package/build/src/akuma/providers/grok-build/index.js +44 -24
  67. package/build/src/akuma/providers/index.d.ts +3 -3
  68. package/build/src/akuma/providers/index.js +2 -13
  69. package/build/src/akuma/providers/opencode-sdk/event-stream.d.ts +28 -0
  70. package/build/src/akuma/providers/opencode-sdk/event-stream.js +92 -0
  71. package/build/src/akuma/providers/opencode-sdk/events.d.ts +0 -1
  72. package/build/src/akuma/providers/opencode-sdk/index.js +200 -74
  73. package/build/src/akuma/providers/opencode-sdk/session.d.ts +41 -1
  74. package/build/src/akuma/providers/opencode-sdk/session.js +69 -2
  75. package/build/src/akuma/providers/pi/events.js +5 -2
  76. package/build/src/akuma/providers/pi/index.js +70 -24
  77. package/build/src/akuma/publication.d.ts +84 -3
  78. package/build/src/akuma/publication.js +145 -2
  79. package/build/src/akuma/read-pool.d.ts +2 -0
  80. package/build/src/akuma/read-pool.js +15 -0
  81. package/build/src/akuma/request-rendezvous.js +10 -0
  82. package/build/src/akuma/request-serve.js +7 -0
  83. package/build/src/akuma/request-wire.d.ts +14 -26
  84. package/build/src/akuma/request-wire.js +4 -0
  85. package/build/src/akuma/requests.d.ts +0 -3
  86. package/build/src/akuma/requests.js +0 -24
  87. package/build/src/akuma/{fleet-observation.d.ts → selection-observation.d.ts} +61 -52
  88. package/build/src/akuma/selection-observation.js +65 -0
  89. package/build/src/akuma/{fleet-owner-port.d.ts → selection-owner-port.d.ts} +3 -3
  90. package/build/src/akuma/{fleet-owner-port.js → selection-owner-port.js} +11 -17
  91. package/build/src/akuma/{fleet-request.d.ts → selection-request.d.ts} +42 -82
  92. package/build/src/akuma/{fleet-request.js → selection-request.js} +92 -136
  93. package/build/src/akuma/turn-drive.d.ts +3 -0
  94. package/build/src/akuma/turn-drive.js +75 -16
  95. package/build/src/akuma-body.js +91 -56
  96. package/build/src/body/amend.d.ts +5 -0
  97. package/build/src/body/amend.js +26 -50
  98. package/build/src/body/arc.d.ts +4 -2
  99. package/build/src/body/arc.js +19 -26
  100. package/build/src/body/criteria.d.ts +6 -0
  101. package/build/src/body/criteria.js +37 -0
  102. package/build/src/body/decode.js +5 -42
  103. package/build/src/body/region.d.ts +5 -0
  104. package/build/src/body/region.js +45 -2
  105. package/build/src/body/render.js +2 -4
  106. package/build/src/cli/activity.d.ts +26 -0
  107. package/build/src/cli/activity.js +75 -0
  108. package/build/src/cli/actor.d.ts +3 -1
  109. package/build/src/cli/actor.js +15 -2
  110. package/build/src/cli/commands/akuma-grammar.d.ts +75 -0
  111. package/build/src/cli/commands/akuma-grammar.js +414 -0
  112. package/build/src/cli/commands/akuma.d.ts +5 -69
  113. package/build/src/cli/commands/akuma.js +352 -312
  114. package/build/src/cli/commands/amend.d.ts +4 -5
  115. package/build/src/cli/commands/amend.js +1 -2
  116. package/build/src/cli/commands/bind.d.ts +4 -5
  117. package/build/src/cli/commands/bind.js +5 -9
  118. package/build/src/cli/commands/contract-grammar.d.ts +112 -0
  119. package/build/src/cli/commands/contract-grammar.js +282 -0
  120. package/build/src/cli/commands/contract-help.d.ts +28 -30
  121. package/build/src/cli/commands/contract-help.js +69 -96
  122. package/build/src/cli/commands/contract.d.ts +18 -97
  123. package/build/src/cli/commands/contract.js +620 -237
  124. package/build/src/cli/commands/install.d.ts +1 -1
  125. package/build/src/cli/commands/install.js +2 -2
  126. package/build/src/cli/commands/task-grammar.d.ts +19 -0
  127. package/build/src/cli/commands/task-grammar.js +438 -0
  128. package/build/src/cli/commands/task-query.js +23 -104
  129. package/build/src/cli/commands/task.d.ts +5 -20
  130. package/build/src/cli/commands/task.js +415 -333
  131. package/build/src/cli/coordinates.d.ts +10 -0
  132. package/build/src/cli/coordinates.js +20 -0
  133. package/build/src/cli/draft.d.ts +7 -1
  134. package/build/src/cli/main.js +10 -1
  135. package/build/src/cli/parse.d.ts +8 -9
  136. package/build/src/cli/parse.js +63 -61
  137. package/build/src/cli/render/akuma-activity.d.ts +88 -39
  138. package/build/src/cli/render/akuma-activity.js +465 -263
  139. package/build/src/cli/render/akuma-tool.d.ts +15 -5
  140. package/build/src/cli/render/akuma-tool.js +40 -27
  141. package/build/src/cli/render/akuma.d.ts +40 -24
  142. package/build/src/cli/render/akuma.js +108 -205
  143. package/build/src/cli/render/audit.d.ts +6 -2
  144. package/build/src/cli/render/audit.js +61 -30
  145. package/build/src/cli/render/catalog.d.ts +11 -2
  146. package/build/src/cli/render/catalog.js +75 -94
  147. package/build/src/cli/render/contract-history.d.ts +3 -1
  148. package/build/src/cli/render/contract-history.js +215 -22
  149. package/build/src/cli/render/contract-observation.d.ts +10 -5
  150. package/build/src/cli/render/contract-observation.js +29 -46
  151. package/build/src/cli/render/contract.d.ts +10 -3
  152. package/build/src/cli/render/contract.js +255 -106
  153. package/build/src/cli/render/effects.d.ts +26 -0
  154. package/build/src/cli/render/effects.js +41 -0
  155. package/build/src/cli/render/execution-progress.d.ts +18 -6
  156. package/build/src/cli/render/execution-progress.js +34 -31
  157. package/build/src/cli/render/kanshi-akuma.d.ts +1 -2
  158. package/build/src/cli/render/kanshi-akuma.js +5 -26
  159. package/build/src/cli/render/kanshi.js +108 -129
  160. package/build/src/cli/render/marks.d.ts +13 -0
  161. package/build/src/cli/render/marks.js +74 -0
  162. package/build/src/cli/render/nuke.js +18 -7
  163. package/build/src/cli/render/receipt.d.ts +10 -4
  164. package/build/src/cli/render/receipt.js +126 -46
  165. package/build/src/cli/render/reconcile.d.ts +5 -0
  166. package/build/src/cli/render/reconcile.js +152 -0
  167. package/build/src/cli/render/refusal.d.ts +21 -4
  168. package/build/src/cli/render/refusal.js +61 -34
  169. package/build/src/cli/render/region.js +3 -2
  170. package/build/src/cli/render/settings.js +4 -14
  171. package/build/src/cli/render/task.d.ts +37 -6
  172. package/build/src/cli/render/task.js +162 -158
  173. package/build/src/cli/render/terminal.d.ts +25 -1
  174. package/build/src/cli/render/terminal.js +105 -18
  175. package/build/src/cli/runtime.d.ts +32 -8
  176. package/build/src/cli/runtime.js +161 -163
  177. package/build/src/cli/selectors.d.ts +5 -2
  178. package/build/src/cli/selectors.js +11 -3
  179. package/build/src/cli/streams.d.ts +11 -0
  180. package/build/src/cli/streams.js +32 -0
  181. package/build/src/cli/usage.d.ts +2 -0
  182. package/build/src/cli/usage.js +12 -8
  183. package/build/src/contract-guidance.js +3 -7
  184. package/build/src/contract-worktree.d.ts +20 -28
  185. package/build/src/contract-worktree.js +18 -70
  186. package/build/src/coordination/durable-file.d.ts +2 -2
  187. package/build/src/coordination/durable-file.js +0 -27
  188. package/build/src/core/facts/codec.d.ts +1 -2
  189. package/build/src/core/facts/codec.js +6 -7
  190. package/build/src/core/facts/gate.d.ts +0 -1
  191. package/build/src/core/facts/gate.js +0 -82
  192. package/build/src/core/facts/types.d.ts +1 -2
  193. package/build/src/core/verbs/abandon.d.ts +2 -6
  194. package/build/src/core/verbs/abandon.js +0 -16
  195. package/build/src/core/verbs/amend.d.ts +0 -1
  196. package/build/src/core/verbs/amend.js +0 -20
  197. package/build/src/core/verbs/arc.d.ts +7 -8
  198. package/build/src/core/verbs/arc.js +2 -19
  199. package/build/src/core/verbs/attestation.d.ts +2 -6
  200. package/build/src/core/verbs/attestation.js +0 -16
  201. package/build/src/core/verbs/bind.d.ts +0 -1
  202. package/build/src/core/verbs/bind.js +0 -16
  203. package/build/src/core/verbs/deliver.d.ts +0 -1
  204. package/build/src/core/verbs/deliver.js +0 -16
  205. package/build/src/core/verbs/placement.d.ts +2 -1
  206. package/build/src/core/verbs/placement.js +10 -59
  207. package/build/src/git/admission.d.ts +6 -4
  208. package/build/src/git/admission.js +4 -0
  209. package/build/src/git/hooks.d.ts +55 -30
  210. package/build/src/git/hooks.js +30 -3
  211. package/build/src/git/identity.d.ts +6 -0
  212. package/build/src/git/identity.js +47 -0
  213. package/build/src/git/integration.d.ts +31 -13
  214. package/build/src/git/integration.js +32 -1
  215. package/build/src/git/nuke.d.ts +10 -1
  216. package/build/src/git/nuke.js +31 -11
  217. package/build/src/git/observe.js +2 -15
  218. package/build/src/git/private-state-seat.d.ts +6 -7
  219. package/build/src/git/private-state-seat.js +8 -6
  220. package/build/src/git/read-observation.d.ts +6 -1
  221. package/build/src/git/read-observation.js +81 -46
  222. package/build/src/git/reconcile.d.ts +117 -40
  223. package/build/src/git/reconcile.js +169 -40
  224. package/build/src/git/scratch.d.ts +7 -4
  225. package/build/src/git/scratch.js +28 -6
  226. package/build/src/git/target-placement.d.ts +53 -38
  227. package/build/src/git/target-placement.js +69 -54
  228. package/build/src/git/tender.d.ts +37 -28
  229. package/build/src/git/tender.js +39 -0
  230. package/build/src/git/terminal-reconcile.js +21 -23
  231. package/build/src/git/terminal-seal.d.ts +8 -6
  232. package/build/src/git/terminal-seal.js +10 -0
  233. package/build/src/git/workspace.d.ts +29 -15
  234. package/build/src/git/workspace.js +28 -2
  235. package/build/src/identity/normalize.js +19 -6
  236. package/build/src/index.d.ts +78 -6
  237. package/build/src/index.js +52 -3
  238. package/build/src/kanshi/read.d.ts +3 -3
  239. package/build/src/kanshi/read.js +21 -21
  240. package/build/src/kanshi/report.d.ts +9 -8
  241. package/build/src/kanshi/roster.d.ts +2 -0
  242. package/build/src/kanshi/roster.js +2 -0
  243. package/build/src/kanshi/select.js +7 -3
  244. package/build/src/library/address.d.ts +3 -7
  245. package/build/src/library/address.js +7 -7
  246. package/build/src/library/akuma-creation.d.ts +35 -33
  247. package/build/src/library/akuma-creation.js +184 -167
  248. package/build/src/library/akumas.d.ts +40 -0
  249. package/build/src/library/akumas.js +84 -0
  250. package/build/src/library/bind.d.ts +107 -13
  251. package/build/src/library/bind.js +29 -23
  252. package/build/src/library/continuation.d.ts +556 -28
  253. package/build/src/library/continuation.js +29 -54
  254. package/build/src/library/contract-composition.d.ts +40 -0
  255. package/build/src/library/contract-composition.js +105 -0
  256. package/build/src/library/contract-creation.d.ts +7 -0
  257. package/build/src/library/contract-creation.js +192 -0
  258. package/build/src/library/contract-execution.d.ts +29 -40
  259. package/build/src/library/contract-execution.js +503 -128
  260. package/build/src/library/contract-operations.d.ts +275 -134
  261. package/build/src/library/contract-operations.js +83 -92
  262. package/build/src/library/contract-outcomes.d.ts +71 -0
  263. package/build/src/library/contract-outcomes.js +32 -0
  264. package/build/src/library/contract-settings.d.ts +25 -0
  265. package/build/src/library/contract-settings.js +135 -0
  266. package/build/src/library/contract-types.d.ts +24 -38
  267. package/build/src/library/delivery.d.ts +530 -10
  268. package/build/src/library/delivery.js +20 -45
  269. package/build/src/library/input.d.ts +3 -1
  270. package/build/src/library/input.js +11 -16
  271. package/build/src/library/invocation.d.ts +87 -0
  272. package/build/src/library/invocation.js +290 -0
  273. package/build/src/library/keiyaku.d.ts +44 -437
  274. package/build/src/library/keiyaku.js +132 -20
  275. package/build/src/library/nuke.d.ts +2 -11
  276. package/build/src/library/nuke.js +70 -57
  277. package/build/src/library/outcome.d.ts +13196 -0
  278. package/build/src/library/outcome.js +487 -0
  279. package/build/src/library/reconcile.d.ts +96 -24
  280. package/build/src/library/reconcile.js +102 -42
  281. package/build/src/library/refusal.d.ts +470 -42
  282. package/build/src/library/refusal.js +55 -143
  283. package/build/src/library/region.d.ts +15 -7
  284. package/build/src/library/region.js +23 -3
  285. package/build/src/library/repo.d.ts +2 -12
  286. package/build/src/library/repo.js +1 -22
  287. package/build/src/library/selection.d.ts +121 -0
  288. package/build/src/library/{fleet.js → selection.js} +177 -160
  289. package/build/src/plugin/public.d.ts +2 -0
  290. package/build/src/protocol/abandon.d.ts +2 -2
  291. package/build/src/protocol/abandon.js +1 -0
  292. package/build/src/protocol/amend.js +1 -0
  293. package/build/src/protocol/arc.d.ts +6 -4
  294. package/build/src/protocol/attempt.d.ts +4 -2
  295. package/build/src/protocol/attempt.js +10 -0
  296. package/build/src/protocol/audit.d.ts +255 -52
  297. package/build/src/protocol/audit.js +63 -5
  298. package/build/src/protocol/bind.d.ts +18 -17
  299. package/build/src/protocol/bind.js +9 -28
  300. package/build/src/protocol/completion.d.ts +256 -22
  301. package/build/src/protocol/completion.js +100 -12
  302. package/build/src/protocol/deliver.d.ts +34 -23
  303. package/build/src/protocol/deliver.js +39 -25
  304. package/build/src/protocol/execution-observation.d.ts +36 -37
  305. package/build/src/protocol/execution-observation.js +7 -9
  306. package/build/src/protocol/intent.d.ts +101 -30
  307. package/build/src/protocol/intent.js +74 -1
  308. package/build/src/protocol/operations.d.ts +570 -64
  309. package/build/src/protocol/operations.js +189 -9
  310. package/build/src/protocol/outcome.d.ts +2 -1
  311. package/build/src/protocol/placement.d.ts +2 -2
  312. package/build/src/protocol/placement.js +3 -1
  313. package/build/src/protocol/progress.d.ts +108 -65
  314. package/build/src/protocol/progress.js +82 -132
  315. package/build/src/protocol/read/status.d.ts +4 -3
  316. package/build/src/protocol/read/status.js +6 -5
  317. package/build/src/protocol/reconcile.d.ts +3 -3
  318. package/build/src/protocol/reconcile.js +4 -0
  319. package/build/src/protocol/reintegrate.d.ts +2 -2
  320. package/build/src/protocol/review.d.ts +30 -12
  321. package/build/src/protocol/review.js +15 -24
  322. package/build/src/protocol/run.d.ts +34 -5
  323. package/build/src/protocol/run.js +24 -12
  324. package/build/src/runtime/proc/windows-launch.exe +0 -0
  325. package/build/src/settings.d.ts +0 -10
  326. package/build/src/settings.js +0 -76
  327. package/build/src/settlement/holder.d.ts +1 -1
  328. package/build/src/settlement/settle.d.ts +25 -16
  329. package/build/src/settlement/settle.js +80 -20
  330. package/build/src/task/board.d.ts +3 -1
  331. package/build/src/task/board.js +13 -17
  332. package/build/src/task/catalog.d.ts +0 -4
  333. package/build/src/task/catalog.js +0 -15
  334. package/build/src/task/compose-language.d.ts +19 -9
  335. package/build/src/task/compose-language.js +30 -20
  336. package/build/src/task/compose.d.ts +7 -37
  337. package/build/src/task/compose.js +20 -2
  338. package/build/src/task/created-observation.d.ts +0 -1
  339. package/build/src/task/created-observation.js +1 -4
  340. package/build/src/task/document.d.ts +12 -2
  341. package/build/src/task/document.js +4 -0
  342. package/build/src/task/identity.d.ts +4 -1
  343. package/build/src/task/identity.js +21 -17
  344. package/build/src/task/index.d.ts +36 -16
  345. package/build/src/task/index.js +103 -96
  346. package/build/src/task/lifecycle-operations.d.ts +1 -1
  347. package/build/src/task/mutation-result.d.ts +647 -586
  348. package/build/src/task/mutation-result.js +79 -46
  349. package/build/src/task/mutation.d.ts +298 -270
  350. package/build/src/task/mutation.js +93 -110
  351. package/build/src/task/operation-types.d.ts +6 -49
  352. package/build/src/task/operations.d.ts +2 -1
  353. package/build/src/task/operations.js +35 -12
  354. package/build/src/task/query.d.ts +9 -3
  355. package/build/src/task/query.js +42 -16
  356. package/build/src/task/store.d.ts +2 -1
  357. package/build/src/task/store.js +10 -14
  358. package/build/src/verification/declaration.d.ts +0 -1
  359. package/build/src/verification/declaration.js +1 -18
  360. package/build/src/verification/execution.d.ts +6 -2
  361. package/build/src/verification/observation.d.ts +1 -1
  362. package/package.json +2 -14
  363. package/build/src/akuma/akuma-product-symbols.d.ts +0 -1
  364. package/build/src/akuma/akuma-product-symbols.js +0 -1
  365. package/build/src/akuma/akuma-product.d.ts +0 -62
  366. package/build/src/akuma/akuma-product.js +0 -293
  367. package/build/src/akuma/fleet-execution.js +0 -181
  368. package/build/src/akuma/fleet-observation.js +0 -91
  369. package/build/src/cli/accepted.d.ts +0 -24
  370. package/build/src/cli/accepted.js +0 -167
  371. package/build/src/cli/commands/akuma-invoke.d.ts +0 -114
  372. package/build/src/cli/commands/akuma-invoke.js +0 -402
  373. package/build/src/cli/commands/contract-invoke.d.ts +0 -34
  374. package/build/src/cli/commands/contract-invoke.js +0 -259
  375. package/build/src/cli/commands/nuke.d.ts +0 -10
  376. package/build/src/cli/commands/nuke.js +0 -20
  377. package/build/src/cli/commands/status-set.d.ts +0 -4
  378. package/build/src/cli/commands/status-set.js +0 -52
  379. package/build/src/cli/commands/task-invoke.d.ts +0 -49
  380. package/build/src/cli/commands/task-invoke.js +0 -306
  381. package/build/src/cli/invoke.d.ts +0 -27
  382. package/build/src/cli/invoke.js +0 -484
  383. package/build/src/cli/render/board.d.ts +0 -3
  384. package/build/src/cli/render/board.js +0 -25
  385. package/build/src/cli/render/status-set.d.ts +0 -5
  386. package/build/src/cli/render/status-set.js +0 -19
  387. package/build/src/cli/render/text.d.ts +0 -3
  388. package/build/src/cli/render/text.js +0 -33
  389. package/build/src/cli/result.d.ts +0 -240
  390. package/build/src/cli/result.js +0 -1
  391. package/build/src/git/result-codec.d.ts +0 -29
  392. package/build/src/git/result-codec.js +0 -309
  393. package/build/src/kanshi/fleet.d.ts +0 -6
  394. package/build/src/kanshi/fleet.js +0 -27
  395. package/build/src/library/audit.d.ts +0 -29
  396. package/build/src/library/audit.js +0 -41
  397. package/build/src/library/catalog.d.ts +0 -68
  398. package/build/src/library/catalog.js +0 -130
  399. package/build/src/library/composition.d.ts +0 -403
  400. package/build/src/library/composition.js +0 -29
  401. package/build/src/library/configuration.d.ts +0 -4
  402. package/build/src/library/configuration.js +0 -2
  403. package/build/src/library/contract-bind.d.ts +0 -31
  404. package/build/src/library/contract-bind.js +0 -140
  405. package/build/src/library/contract-forwarding.d.ts +0 -55
  406. package/build/src/library/contract-forwarding.js +0 -67
  407. package/build/src/library/contract-handle.d.ts +0 -45
  408. package/build/src/library/contract-handle.js +0 -373
  409. package/build/src/library/contract.d.ts +0 -53
  410. package/build/src/library/contract.js +0 -91
  411. package/build/src/library/execution-result.d.ts +0 -243
  412. package/build/src/library/execution-result.js +0 -101
  413. package/build/src/library/execution.d.ts +0 -8
  414. package/build/src/library/execution.js +0 -102
  415. package/build/src/library/fleet.d.ts +0 -83
  416. package/build/src/library/mutation.d.ts +0 -501
  417. package/build/src/library/mutation.js +0 -248
  418. package/build/src/library/result-codec.d.ts +0 -2
  419. package/build/src/library/result-codec.js +0 -12
  420. package/build/src/protocol/result-codec.d.ts +0 -23
  421. package/build/src/protocol/result-codec.js +0 -488
  422. package/build/src/settlement/result-codec.d.ts +0 -2
  423. package/build/src/settlement/result-codec.js +0 -56
  424. package/build/src/task/public.d.ts +0 -2
  425. package/build/src/task/public.js +0 -1
@@ -1,20 +1,26 @@
1
- import type { ExecutionCleanup, ExecutionStop, ExecutionReceipt } from "../../index.js";
1
+ import type { ExecutionCleanup, ExecutionStop, PartialOutcomeEnvelope, ReconciliationLag } from "../../index.js";
2
2
  import type { PlacementStop, VerificationReuse, VerificationStop } from "../../index.js";
3
- import type { Lag } from "../result.js";
4
3
  export type ReceiptSegment = Readonly<{
5
4
  text: string;
6
5
  opaque?: boolean;
7
6
  }>;
8
- type HookFailure = Extract<Lag, {
7
+ type HookFailure = Extract<ReconciliationLag, {
9
8
  kind: "worktree-hook-failed";
10
9
  }>["failure"];
11
10
  export declare function receiptRow(lines: string[], mark: string, label: string, segments: readonly ReceiptSegment[], columns: number): void;
12
11
  export declare function receiptPayload(lines: string[], label: string, payload: string): void;
13
12
  export declare function outcomeLines(mark: "✓" | "×" | "!" | "?", verb: string, word: "accepted" | "refused" | "retry", contract: string | undefined, columns?: number): string[];
13
+ export declare function refusalLines(verb: string, facts: readonly string[], columns?: number, trailingFacts?: readonly string[]): string[];
14
14
  export declare function titleLines(mark: string, title: string, contract: string, columns?: number): string[];
15
15
  export declare function hookFailureSummary(failure: HookFailure): string;
16
16
  export declare function appendHookPayload(lines: string[], failure: HookFailure): void;
17
17
  export declare function reuseLines(reuse: VerificationReuse | undefined, columns: number): readonly string[];
18
+ /**
19
+ * The pending margin statement: the not-yet-happened requirements a refused placement awaits. A gate in stale
20
+ * state awaits the same event; when every unmet gate already holds a recorded verdict there is nothing pending and
21
+ * the line is omitted.
22
+ */
23
+ export declare function gatesAwaitLines(placement: VerificationStop | PlacementStop | undefined): readonly string[];
18
24
  export declare function stopLines(stop: VerificationStop | PlacementStop, columns: number, addressed: string, dependent?: string): readonly string[];
19
25
  export declare function cleanupLines(cleanup: Extract<ExecutionCleanup, {
20
26
  kind: "verification-cleanup";
@@ -27,5 +33,5 @@ export declare function seatCloseLines(seatClose: readonly Extract<ExecutionClea
27
33
  }>["failure"][], columns: number): readonly string[];
28
34
  export declare function executionStopLines(stops: readonly ExecutionStop[], columns: number): readonly string[];
29
35
  export declare function executionCleanupLines(cleanup: readonly ExecutionCleanup[], columns: number, primary?: string): readonly string[];
30
- export declare function executionFailureLines(receipt: ExecutionReceipt, category: string, diagnostic: string, columns: number): readonly string[];
36
+ export declare function executionFailureLines(receipt: PartialOutcomeEnvelope, category: string, diagnostic: string, columns: number): readonly string[];
31
37
  export {};
@@ -1,5 +1,5 @@
1
1
  import { renderRefusalFacts } from "./refusal.js";
2
- import { displayColumns, renderOpaqueBlock, safeText, quotedText } from "./terminal.js";
2
+ import { DEFAULT_CLI_COLUMNS, displayColumns, orderRefusalFacts, renderOpaqueBlock, safeText, quotedText, } from "./terminal.js";
3
3
  export function receiptRow(lines, mark, label, segments, columns) {
4
4
  const prefix = mark.trim().length === 0 ? " " : `${mark} `;
5
5
  let current = `${prefix}${label}`;
@@ -21,9 +21,9 @@ export function receiptRow(lines, mark, label, segments, columns) {
21
21
  lines.push(current);
22
22
  }
23
23
  export function receiptPayload(lines, label, payload) {
24
- lines.push(label, ...renderOpaqueBlock(payload, " ", 80), "");
24
+ lines.push(` ${label.trim()}`, ...renderOpaqueBlock(payload, " ", DEFAULT_CLI_COLUMNS), "");
25
25
  }
26
- export function outcomeLines(mark, verb, word, contract, columns = 80) {
26
+ export function outcomeLines(mark, verb, word, contract, columns = DEFAULT_CLI_COLUMNS) {
27
27
  const base = `${mark} ${verb} ${word}`;
28
28
  if (contract === undefined)
29
29
  return [base];
@@ -32,7 +32,15 @@ export function outcomeLines(mark, verb, word, contract, columns = 80) {
32
32
  return [inline];
33
33
  return [`${base}`, ` contract ${safeText(contract)}`];
34
34
  }
35
- export function titleLines(mark, title, contract, columns = 80) {
35
+ export function refusalLines(verb, facts, columns = DEFAULT_CLI_COLUMNS, trailingFacts = []) {
36
+ const lines = [
37
+ ...outcomeLines("×", verb, "refused", undefined, columns),
38
+ ...orderRefusalFacts(facts).map((fact) => ` ${fact}`),
39
+ ...trailingFacts,
40
+ ];
41
+ return lines;
42
+ }
43
+ export function titleLines(mark, title, contract, columns = DEFAULT_CLI_COLUMNS) {
36
44
  const base = `${mark} ${title}`;
37
45
  const inline = `${base} ${contract}`;
38
46
  if (displayColumns(inline) <= columns)
@@ -48,10 +56,10 @@ export function hookFailureSummary(failure) {
48
56
  }
49
57
  export function appendHookPayload(lines, failure) {
50
58
  if (failure.kind === "spawn-error")
51
- receiptPayload(lines, "diagnostic", failure.diagnostic);
59
+ receiptPayload(lines, "reason", failure.diagnostic);
52
60
  if (!("stdout" in failure))
53
61
  return;
54
- if (failure.stdout.length > 0)
62
+ if (failure.stdout !== undefined && failure.stdout.length > 0)
55
63
  receiptPayload(lines, "stdout", failure.stdout);
56
64
  if (failure.stderr !== undefined && failure.stderr.length > 0)
57
65
  receiptPayload(lines, "stderr", failure.stderr);
@@ -59,7 +67,7 @@ export function appendHookPayload(lines, failure) {
59
67
  export function reuseLines(reuse, columns) {
60
68
  if (reuse === undefined)
61
69
  return [];
62
- return renderOpaqueBlock(`reuse verified · ${reuse.verdict} · ${reuse.entry}`, " ", columns);
70
+ return renderOpaqueBlock(`reuse verified · ${reuse.verdict}`, " ", columns);
63
71
  }
64
72
  function prerequisiteRows(stop, columns) {
65
73
  if (!("refusal" in stop) || stop.refusal?.kind !== "prerequisites-unsatisfied")
@@ -70,26 +78,44 @@ function prerequisiteRows(stop, columns) {
70
78
  }
71
79
  return lines;
72
80
  }
73
- function gateRows(stop, columns) {
81
+ /** Requirement names speak as plain event nouns; the "gate" class word never prints on a receipt. */
82
+ function eventNoun(gate) {
83
+ if (gate === "reviewed")
84
+ return "review";
85
+ if (gate === "verified")
86
+ return "verification";
87
+ return gate;
88
+ }
89
+ /** Only a recorded unsatisfied verdict alarms; missing and stale requirements fold into the await line. */
90
+ function gateAlarmRows(stop, columns) {
74
91
  if (!("refusal" in stop) || stop.refusal?.kind !== "gates-unsatisfied")
75
92
  return [];
76
93
  const lines = [];
77
94
  for (const report of stop.refusal.unmet) {
78
95
  const { gate, current } = report;
79
- if (current.kind === "attested") {
80
- receiptRow(lines, " ", "gate", [{ text: gate, opaque: true }, { text: "·" }, { text: current.verdict }, { text: `· at ${current.at}` }], columns);
81
- if (current.summary !== undefined)
82
- receiptPayload(lines, ` summary ${gate}`, current.summary);
83
- }
84
- else if (current.kind === "stale") {
85
- receiptRow(lines, " ", "gate", [{ text: gate, opaque: true }, { text: "· stale" }, { text: `· prior ${current.priorVerdict}` }], columns);
86
- }
87
- else {
88
- receiptRow(lines, " ", "gate", [{ text: gate, opaque: true }, { text: "· missing" }], columns);
89
- }
96
+ if (current.kind !== "attested")
97
+ continue;
98
+ receiptRow(lines, "!", eventNoun(gate), [{ text: `· ${current.verdict}` }, { text: `· at ${current.at}` }], columns);
99
+ if (current.summary !== undefined)
100
+ receiptPayload(lines, ` summary ${gate}`, current.summary);
90
101
  }
91
102
  return lines;
92
103
  }
104
+ /**
105
+ * The pending margin statement: the not-yet-happened requirements a refused placement awaits. A gate in stale
106
+ * state awaits the same event; when every unmet gate already holds a recorded verdict there is nothing pending and
107
+ * the line is omitted.
108
+ */
109
+ export function gatesAwaitLines(placement) {
110
+ if (placement === undefined || !("refusal" in placement) || placement.refusal?.kind !== "gates-unsatisfied")
111
+ return [];
112
+ const events = placement.refusal.unmet
113
+ .filter((report) => report.current.kind !== "attested")
114
+ .map((report) => eventNoun(report.gate));
115
+ if (events.length === 0)
116
+ return [];
117
+ return [`⧗ awaiting ${events.length > 3 ? `${events.length} gates` : events.join(", ")}`];
118
+ }
93
119
  function targetMovedDetail(stop) {
94
120
  if ("integratedAt" in stop) {
95
121
  return [
@@ -106,16 +132,15 @@ function targetMovedDetail(stop) {
106
132
  ];
107
133
  }
108
134
  function directStopName(stop) {
109
- if ("refusal" in stop && stop.refusal !== undefined)
135
+ if ("refusal" in stop)
110
136
  return stop.refusal.kind.replaceAll("-", " ");
111
- if ("retry" in stop && stop.retry !== undefined)
137
+ if ("retry" in stop)
112
138
  return stop.retry.kind.replaceAll("-", " ");
113
139
  return stop.failure.replaceAll("-", " ");
114
140
  }
115
141
  function refusalEvidence(stop, columns) {
116
142
  const lines = [];
117
143
  lines.push(...prerequisiteRows(stop, columns));
118
- lines.push(...gateRows(stop, columns));
119
144
  if (!("refusal" in stop) || stop.refusal === undefined)
120
145
  return lines;
121
146
  const refusal = stop.refusal;
@@ -142,15 +167,51 @@ function refusalEvidence(stop, columns) {
142
167
  }
143
168
  return lines;
144
169
  }
145
- export function stopLines(stop, columns, addressed, dependent) {
146
- if ("refusal" in stop && stop.refusal?.kind === "checkout-not-followable") {
147
- const checkout = renderRefusalFacts(stop.refusal, "", columns, addressed);
148
- if (dependent === undefined)
149
- return checkout;
150
- const lines = [];
151
- receiptRow(lines, "!", "continuation", [{ text: dependent, opaque: true }], columns);
152
- return [...lines, ...checkout];
153
- }
170
+ function checkoutNotFollowableStopLines(stop, columns, addressed, dependent) {
171
+ if (!("refusal" in stop) || stop.refusal?.kind !== "checkout-not-followable")
172
+ return undefined;
173
+ const checkout = renderRefusalFacts(stop.refusal, "", columns, addressed);
174
+ if (dependent === undefined)
175
+ return checkout;
176
+ const lines = [];
177
+ receiptRow(lines, "!", "dependent", [{ text: dependent, opaque: true }], columns);
178
+ return [...lines, ...checkout];
179
+ }
180
+ function targetPlacementFailedStopLines(stop, columns, dependent) {
181
+ if (!("failure" in stop) || stop.failure !== "target-placement-failed")
182
+ return undefined;
183
+ const lines = [];
184
+ receiptRow(lines, "×", "not accepted", dependent === undefined ? [] : [{ text: dependent, opaque: true }], columns);
185
+ receiptPayload(lines, "reason", stop.diagnostic);
186
+ return lines;
187
+ }
188
+ function retryStopLines(stop, columns, dependent) {
189
+ if (!("retry" in stop) || stop.retry === undefined)
190
+ return undefined;
191
+ const lines = [];
192
+ const segments = [{ text: stop.retry.kind.replaceAll("-", " ") }];
193
+ if (dependent !== undefined)
194
+ segments.push({ text: "·" }, { text: dependent, opaque: true });
195
+ receiptRow(lines, "?", "retry", segments, columns);
196
+ if (stop.retry.kind === "publication-failed")
197
+ receiptPayload(lines, "reason", stop.retry.diagnostic);
198
+ return lines;
199
+ }
200
+ function gatesUnsatisfiedStopLines(stop, columns, dependent) {
201
+ if (!("refusal" in stop) || stop.refusal?.kind !== "gates-unsatisfied")
202
+ return undefined;
203
+ // The refused placement never prints its refusal kind: the per-gate alarms and the target's non-movement
204
+ // carry the story, and the caller closes the receipt with the awaiting margin line.
205
+ const lines = [];
206
+ const target = stop.refusal.target;
207
+ if (dependent !== undefined)
208
+ receiptRow(lines, "⧗", dependent, [{ text: "·" }, { text: "gates unmet" }], columns);
209
+ else if (target !== undefined)
210
+ receiptRow(lines, " ", "target", [{ text: target, opaque: true }, { text: "· unchanged" }], columns);
211
+ lines.push(...gateAlarmRows(stop, columns));
212
+ return lines;
213
+ }
214
+ function directStopLines(stop, columns, dependent) {
154
215
  const lines = [];
155
216
  const segments = dependent === undefined ? [] : [{ text: "·" }, { text: directStopName(stop) }];
156
217
  if ("failure" in stop && stop.failure === "target-moved")
@@ -163,14 +224,18 @@ export function stopLines(stop, columns, addressed, dependent) {
163
224
  if ("failure" in stop && stop.failure === "environment-failure" && "name" in stop) {
164
225
  appendHookPayload(lines, stop.detail);
165
226
  }
166
- if ("retry" in stop && stop.retry?.kind === "publication-failed") {
167
- receiptPayload(lines, "diagnostic", stop.retry.diagnostic);
168
- }
169
- else if ("failure" in stop && "diagnostic" in stop) {
170
- receiptPayload(lines, "diagnostic", stop.diagnostic);
227
+ if ("failure" in stop && "diagnostic" in stop) {
228
+ receiptPayload(lines, "reason", stop.diagnostic);
171
229
  }
172
230
  return lines;
173
231
  }
232
+ export function stopLines(stop, columns, addressed, dependent) {
233
+ return (checkoutNotFollowableStopLines(stop, columns, addressed, dependent) ??
234
+ targetPlacementFailedStopLines(stop, columns, dependent) ??
235
+ retryStopLines(stop, columns, dependent) ??
236
+ gatesUnsatisfiedStopLines(stop, columns, dependent) ??
237
+ directStopLines(stop, columns, dependent));
238
+ }
174
239
  export function cleanupLines(cleanup, columns) {
175
240
  const lines = [];
176
241
  receiptRow(lines, "!", "cleanup", [
@@ -183,23 +248,23 @@ export function cleanupLines(cleanup, columns) {
183
248
  }
184
249
  export function leakLines(leak, columns) {
185
250
  const lines = [];
186
- receiptRow(lines, "!", "leak", [{ text: "worktree" }, { text: leak.path, opaque: true }], columns);
187
- receiptPayload(lines, "diagnostic", leak.diagnostic);
251
+ receiptRow(lines, " ", "verification scratch kept at", [{ text: leak.path, opaque: true }], columns);
252
+ receiptPayload(lines, "reason", leak.diagnostic);
188
253
  return lines;
189
254
  }
190
255
  export function seatCloseLines(seatClose, columns) {
191
256
  const lines = [];
192
257
  for (const lag of seatClose) {
193
258
  receiptRow(lines, "!", "lag", [{ text: lag.kind }], columns);
194
- receiptPayload(lines, "diagnostic", lag.diagnostic);
259
+ receiptPayload(lines, "reason", lag.diagnostic);
195
260
  }
196
261
  return lines;
197
262
  }
198
263
  export function executionStopLines(stops, columns) {
199
264
  const lines = [];
200
265
  for (const stop of stops) {
201
- receiptRow(lines, "!", stop.stage, [{ text: stop.reason }, { text: stop.contractId, opaque: true }], columns);
202
- receiptPayload(lines, "diagnostic", stop.diagnostic);
266
+ receiptRow(lines, "!", "execution", [{ text: stop.reason }, { text: stop.contractId, opaque: true }], columns);
267
+ receiptPayload(lines, "reason", stop.diagnostic);
203
268
  }
204
269
  return lines;
205
270
  }
@@ -214,17 +279,32 @@ export function executionCleanupLines(cleanup, columns, primary) {
214
279
  lines.push(...cleanupLines(issue.failure, columns));
215
280
  else if (issue.kind === "worktree-leak")
216
281
  lines.push(...leakLines(issue.leak, columns));
282
+ else if (issue.kind === "decode-channel-retirement")
283
+ receiptPayload(lines, "cleanup", issue.diagnostic);
217
284
  else
218
285
  lines.push(...seatCloseLines([issue.failure], columns));
219
286
  }
220
287
  return lines;
221
288
  }
222
289
  export function executionFailureLines(receipt, category, diagnostic, columns) {
290
+ const contract = "contract" in receipt ? receipt.contract : undefined;
291
+ const stops = [];
292
+ const cleanup = [];
293
+ for (const effect of receipt.effects) {
294
+ if (effect.kind === "execution-stopped")
295
+ stops.push({
296
+ kind: "execution-stopped",
297
+ contractId: effect.contract,
298
+ stage: effect.stage,
299
+ reason: effect.reason,
300
+ diagnostic: effect.diagnostic,
301
+ });
302
+ else if (effect.kind === "cleanup")
303
+ cleanup.push(effect.issue);
304
+ }
223
305
  const lines = [];
224
- receiptRow(lines, "!", "execution failed after admission", [{ text: category }, { text: receipt.contractId, opaque: true }], columns);
225
- receiptPayload(lines, "diagnostic", diagnostic);
226
- for (const fact of receipt.facts)
227
- receiptRow(lines, " ", "journal", [{ text: fact.contract, opaque: true }, { text: fact.entry, opaque: true }, { text: fact.kind }], columns);
228
- lines.push(...executionStopLines(receipt.executionStops, columns), ...executionCleanupLines(receipt.cleanup, columns, receipt.contractId));
306
+ receiptRow(lines, "!", "execution failed after admission", [{ text: category }, ...(contract === undefined ? [] : [{ text: contract, opaque: true }])], columns);
307
+ receiptPayload(lines, "reason", diagnostic);
308
+ lines.push(...executionStopLines(stops, columns), ...executionCleanupLines(cleanup, columns, contract));
229
309
  return lines;
230
310
  }
@@ -0,0 +1,5 @@
1
+ import type { ReconcileReport } from "../../library/reconcile.js";
2
+ import { type RepoReconcileReport } from "../../library/reconcile.js";
3
+ import { type TextRenderContext } from "./terminal.js";
4
+ export declare function reconcileHasFailure(report: ReconcileReport | RepoReconcileReport): boolean;
5
+ export declare function renderReconcile(report: ReconcileReport | RepoReconcileReport, context?: TextRenderContext): string;
@@ -0,0 +1,152 @@
1
+ import { reconcileLagIsFailure } from "../../library/reconcile.js";
2
+ import { abbreviateGitIds, displayGitId } from "./contract-observation.js";
3
+ import { receiptPayload, receiptRow } from "./receipt.js";
4
+ import { DEFAULT_CLI_COLUMNS } from "./terminal.js";
5
+ function effectText(effect) {
6
+ if (effect.action === "unchanged")
7
+ return null;
8
+ const ids = effect.kind === "ref"
9
+ ? [effect.before ?? "", effect.after ?? ""]
10
+ : effect.kind === "worktree" && effect.action === "followed"
11
+ ? [effect.before, effect.after]
12
+ : effect.kind === "recovery-snapshot"
13
+ ? [effect.snapshot]
14
+ : [];
15
+ const abbreviations = abbreviateGitIds(ids);
16
+ const state = effect.kind === "ref"
17
+ ? `${effect.action}${effect.before === null ? "" : ` · ${displayGitId(effect.before, abbreviations)}`}${effect.after === null ? "" : ` → ${displayGitId(effect.after, abbreviations)}`}`
18
+ : effect.kind === "worktree" && effect.action === "followed"
19
+ ? `followed · ${displayGitId(effect.before, abbreviations)} → ${displayGitId(effect.after, abbreviations)}`
20
+ : effect.action;
21
+ const path = effect.kind === "ref"
22
+ ? effect.name
23
+ : effect.kind === "recovery-snapshot"
24
+ ? displayGitId(effect.snapshot, abbreviations)
25
+ : effect.path;
26
+ return [effect.kind, state, path];
27
+ }
28
+ function worktreeHookLagRows(lines, lag, columns, contract) {
29
+ receiptRow(lines, "!", "reconcile", [
30
+ ...(contract === undefined ? [] : [{ text: contract, opaque: true }]),
31
+ { text: "hook", opaque: true },
32
+ { text: lag.phase, opaque: true },
33
+ { text: lag.path, opaque: true },
34
+ { text: lag.name, opaque: true },
35
+ { text: `command ${lag.command}`, opaque: true },
36
+ { text: lag.failure.kind === "exit" ? `exit ${lag.failure.code}` : lag.failure.kind, opaque: true },
37
+ ], columns);
38
+ const output = "stdout" in lag.failure ? lag.failure.stdout : undefined;
39
+ const error = "stderr" in lag.failure ? lag.failure.stderr : undefined;
40
+ if (lag.failure.kind === "spawn-error") {
41
+ receiptRow(lines, "!", "reason", [{ text: lag.failure.diagnostic, opaque: true }], columns);
42
+ }
43
+ if (output !== undefined && output.length > 0)
44
+ receiptPayload(lines, "stdout", output);
45
+ if (error !== undefined && error.length > 0)
46
+ receiptPayload(lines, "stderr", error);
47
+ }
48
+ function lagRow(lines, lag, columns, contract) {
49
+ switch (lag.kind) {
50
+ case "worktree-hook-failed":
51
+ worktreeHookLagRows(lines, lag, columns, contract);
52
+ break;
53
+ case "reconcile-failed":
54
+ receiptRow(lines, "!", "reconcile", [
55
+ ...(contract === undefined ? [] : [{ text: contract, opaque: true }]),
56
+ { text: lag.stage, opaque: true },
57
+ { text: lag.diagnostic, opaque: true },
58
+ ], columns);
59
+ break;
60
+ case "worktree-retained":
61
+ receiptRow(lines, " ", "worktree retained at", [{ text: lag.path, opaque: true }], columns);
62
+ if (lag.diagnostic !== undefined)
63
+ receiptRow(lines, " ", "reason", [{ text: lag.diagnostic, opaque: true }], columns);
64
+ break;
65
+ case "worktree-follow-retained":
66
+ receiptRow(lines, " ", "worktree follow kept at", [{ text: lag.path, opaque: true }, { text: `· ${lag.reason.replaceAll("-", " ")}` }], columns);
67
+ break;
68
+ case "unsealed-bytes":
69
+ receiptRow(lines, " ", "unsealed bytes kept at", [{ text: lag.path, opaque: true }], columns);
70
+ break;
71
+ case "target-checkout-retained":
72
+ receiptRow(lines, "!", "target checkout kept at", [
73
+ { text: lag.path, opaque: true },
74
+ { text: `· ${lag.target}`, opaque: true },
75
+ ], columns);
76
+ receiptRow(lines, " ", "reason", [{ text: lag.diagnostic, opaque: true }], columns);
77
+ break;
78
+ case "contract-file-failed":
79
+ receiptRow(lines, "!", "contract file unavailable", [
80
+ { text: lag.worktree, opaque: true },
81
+ { text: `· ${lag.path}`, opaque: true },
82
+ ], columns);
83
+ receiptRow(lines, " ", "reason", [{ text: lag.diagnostic, opaque: true }], columns);
84
+ break;
85
+ default: {
86
+ const exhaustive = lag;
87
+ return exhaustive;
88
+ }
89
+ }
90
+ }
91
+ function appendReport(lines, report, columns, seen, contract) {
92
+ for (const effect of report.effects) {
93
+ const parts = effectText(effect);
94
+ if (parts === null)
95
+ continue;
96
+ const key = JSON.stringify([contract, effect]);
97
+ if (seen.has(key))
98
+ continue;
99
+ seen.add(key);
100
+ receiptRow(lines, " ", "effect", parts.map((text) => ({ text, opaque: true })), columns);
101
+ }
102
+ for (const lag of report.lag)
103
+ lagRow(lines, lag, columns, contract);
104
+ for (const action of report.settlement?.actions ?? []) {
105
+ receiptRow(lines, " ", "settlement", [{ text: action.kind, opaque: true }], columns);
106
+ }
107
+ for (const lag of report.settlement?.lags ?? []) {
108
+ receiptRow(lines, "!", "settlement", Object.entries(lag)
109
+ .filter(([key]) => key !== "kind")
110
+ .map(([key, value]) => ({ text: `${key} ${String(value)}`, opaque: true })), columns);
111
+ }
112
+ for (const failure of report.settlement?.seatClose ?? []) {
113
+ receiptRow(lines, "!", "settlement", [{ text: failure.kind, opaque: true }], columns);
114
+ receiptRow(lines, "!", "reason", [{ text: failure.diagnostic, opaque: true }], columns);
115
+ }
116
+ }
117
+ function isRepoReport(report) {
118
+ return "kind" in report && (report.kind === "completed" || report.kind === "world-observation-failed");
119
+ }
120
+ export function reconcileHasFailure(report) {
121
+ if (isRepoReport(report)) {
122
+ if (report.kind === "world-observation-failed")
123
+ return true;
124
+ const completed = report;
125
+ return completed.contracts.some((item) => {
126
+ return (item.report.lag.some((lag) => reconcileLagIsFailure(lag)) ||
127
+ item.report.settlement.lags.length > 0 ||
128
+ (item.report.settlement.seatClose?.length ?? 0) > 0);
129
+ });
130
+ }
131
+ return (report.lag.some((lag) => reconcileLagIsFailure(lag)) ||
132
+ (report.settlement?.lags.length ?? 0) > 0 ||
133
+ (report.settlement?.seatClose?.length ?? 0) > 0);
134
+ }
135
+ export function renderReconcile(report, context) {
136
+ const columns = context?.columns ?? DEFAULT_CLI_COLUMNS;
137
+ const lines = ["✓ reconcile"];
138
+ const seen = new Set();
139
+ if (isRepoReport(report)) {
140
+ if (report.kind === "world-observation-failed") {
141
+ receiptRow(lines, "!", "reconcile", [{ text: report.diagnostic, opaque: true }], columns);
142
+ return lines.join("\n");
143
+ }
144
+ for (const item of report.contracts)
145
+ appendReport(lines, item.report, columns, seen, item.contractId);
146
+ }
147
+ else
148
+ appendReport(lines, report, columns, seen);
149
+ if (lines.length === 1)
150
+ lines.push(" already consistent");
151
+ return lines.join("\n");
152
+ }
@@ -1,5 +1,6 @@
1
- import type { BindDraftReceipt, RefusedResult } from "../result.js";
2
- import type { IntegrationConflictMaterialized, KeiyakuRefusal } from "../../index.js";
1
+ import type { BindDraftReceipt } from "../draft.js";
2
+ import { type CliUsageGuide } from "../usage.js";
3
+ import type { ContractId, IntegrationConflictMaterialized, KeiyakuRefusal } from "../../index.js";
3
4
  import { type TextRenderContext } from "./terminal.js";
4
5
  type DirtyWithOption = Extract<KeiyakuRefusal, {
5
6
  kind: "dirty-workspace";
@@ -9,9 +10,25 @@ type DirtyWithOption = Extract<KeiyakuRefusal, {
9
10
  available: boolean;
10
11
  }>;
11
12
  };
12
- export type RenderableRefusal = KeiyakuRefusal | DirtyWithOption;
13
+ /** Edge acquisition refusals the CLI owns; they never come from the SDK. */
14
+ type CliEdgeRefusal = Readonly<{
15
+ kind: "invalid-document";
16
+ diagnostic: string;
17
+ }>;
18
+ export type RenderableRefusal = KeiyakuRefusal | DirtyWithOption | CliEdgeRefusal;
13
19
  export declare function renderRefusalFacts(refusal: RenderableRefusal, indent: string, columns: number, addressed?: string): readonly string[];
14
- export declare function renderRefusal(result: RefusedResult, context?: TextRenderContext): string;
20
+ /**
21
+ * The one refusal receipt assembly: a denied-verdict title, a labeled reason, labeled facts, and the
22
+ * applicable acceptance grammar. Typed refusals and bare command refusals both render through here.
23
+ */
24
+ export declare function renderStructuredRefusal(verb: string, reason: string, facts?: readonly string[], guide?: CliUsageGuide): string;
25
+ /** One native refusal plus the CLI's own presentation identity; the draft belongs only to edge bind. */
26
+ type RefusedInvocation = Readonly<{
27
+ operation: string;
28
+ contract?: ContractId;
29
+ refusal: RenderableRefusal;
30
+ }>;
31
+ export declare function renderRefusal(refused: RefusedInvocation, draft?: BindDraftReceipt, context?: TextRenderContext): string;
15
32
  export declare function renderConflictMaterialized(result: IntegrationConflictMaterialized, _context?: TextRenderContext): string;
16
33
  export declare function renderBindDraftReceipt(receipt: BindDraftReceipt): string;
17
34
  export {};