@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,14 +1,38 @@
1
- import type { TaskInvocationResult } from "./commands/task-invoke.js";
2
- import type { ParsedCommand, ParsedExecution } from "./parse.js";
3
- import type { ExecutionEvent } from "../library/execution.js";
4
- export declare function writeExecutionProgress(events: AsyncIterable<ExecutionEvent>, stream?: NodeJS.WritableStream): Promise<void>;
5
- export declare function writeTask(command: Extract<ParsedCommand, {
6
- command: "task";
7
- }>, result: TaskInvocationResult): Promise<number>;
1
+ import { type LibraryExecution } from "../akuma/requests.js";
2
+ import type { ActorId } from "../index.js";
3
+ import type { ExecutionObserver } from "../protocol/execution-observation.js";
4
+ import { type ParsedCommand, type ParsedInvocation } from "./parse.js";
5
+ export type ParsedCommandInvocation = Extract<ParsedInvocation, {
6
+ command: ParsedCommand;
7
+ }>;
8
+ type ExecutionProgressDriver = Readonly<{
9
+ observe: ExecutionObserver;
10
+ finish: () => Promise<void>;
11
+ }>;
12
+ /** Everything one invocation's leaves need at the process edge; Product JSON never sees this. */
13
+ export type CliRuntime = Readonly<{
14
+ environment: NodeJS.ProcessEnv;
15
+ execution: LibraryExecution;
16
+ home?: string;
17
+ readStdin: () => Promise<string>;
18
+ signal: AbortSignal;
19
+ progress: () => Promise<ExecutionProgressDriver>;
20
+ actor?: ActorId;
21
+ }>;
22
+ export type CliRuntimeInput = Readonly<{
23
+ cwd?: string;
24
+ environment?: NodeJS.ProcessEnv;
25
+ readStdin?: () => Promise<string>;
26
+ actor?: ActorId;
27
+ signal?: AbortSignal;
28
+ }>;
29
+ /** Builds the one live progress observer for an invocation; the leaf owns when it finishes. */
30
+ export declare function writeExecutionProgress(stream?: NodeJS.WritableStream): Promise<ExecutionProgressDriver>;
8
31
  type AkumaFailureProjection = Readonly<{
9
32
  body: string;
10
33
  exitCode: 1 | 3;
11
34
  }>;
35
+ /** Projection of one native Akuma addressing/observation failure into its stated refusal body. */
12
36
  export declare function akumaFailureProjection(error: unknown, command: ParsedCommand): Promise<AkumaFailureProjection | undefined>;
13
- export declare function runCliCommand(invocation: ParsedExecution): Promise<number>;
37
+ export declare function runCliCommand(invocation: ParsedCommandInvocation, input?: CliRuntimeInput): Promise<number>;
14
38
  export {};
@@ -1,14 +1,46 @@
1
- import { isParsedAkumaCommand } from "./commands/akuma.js";
2
- import { CliUsageError, usageGuideForCommand } from "./parse.js";
3
- import { renderUsageMessage } from "./usage.js";
1
+ import { AkumaNotBornError, AkumaObservationError } from "../akuma/akuma-errors.js";
2
+ import { AkumaArchetypeError } from "../akuma/archetype.js";
3
+ import { AKUMA_REQUESTS_ENV } from "../akuma/provider.js";
4
+ import { bodyRequestExecution, localExecutionContext } from "../akuma/requests.js";
5
+ import { AkumaAddressError, AkumaWorldScopeError } from "../library/address.js";
6
+ import { encodeFailureWire, KeiyakuError } from "../library/outcome.js";
7
+ import { isParsedAkumaCommand, runAkumaCommand } from "./commands/akuma.js";
8
+ import { admitBindMarkdown, runContractCommand, runContractHistoryCommand } from "./commands/contract.js";
9
+ import { installExitCode, installHarnesses, renderInstallText, } from "./commands/install.js";
10
+ import { runTaskCommand } from "./commands/task.js";
11
+ import { resolveInvocationCoordinates } from "./coordinates.js";
12
+ import { BindDraftError } from "./draft.js";
13
+ import { assertExplicitRepoUse, CliUsageError, usageGuideForCommand, } from "./parse.js";
14
+ import { createExecutionProgressRenderer } from "./render/execution-progress.js";
15
+ import { executionFailureLines } from "./render/receipt.js";
16
+ import { renderRefusal, renderStructuredRefusal } from "./render/refusal.js";
4
17
  import { DEFAULT_CLI_COLUMNS, safeText } from "./render/terminal.js";
5
- function writeCliStream(stream, body) {
6
- stream.write(body.endsWith("\n") ? body : `${body}\n`);
18
+ import { displayContext, writeJson, writeStderr, writeStdout } from "./streams.js";
19
+ function processStdin() {
20
+ return (async () => {
21
+ const chunks = [];
22
+ for await (const chunk of process.stdin)
23
+ chunks.push(Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk));
24
+ return Buffer.concat(chunks).toString("utf8");
25
+ })();
7
26
  }
8
- export async function writeExecutionProgress(events, stream = process.stderr) {
9
- const { renderExecutionProgress } = await import("./render/execution-progress.js");
27
+ function memoized(reader) {
28
+ let value;
29
+ return () => (value ??= reader());
30
+ }
31
+ function executionForEnvironment(environment) {
32
+ return environment[AKUMA_REQUESTS_ENV] === undefined
33
+ ? localExecutionContext()
34
+ : bodyRequestExecution({ directory: environment[AKUMA_REQUESTS_ENV] });
35
+ }
36
+ function homeFromEnvironment(environment) {
37
+ const mapped = environment.KEIYAKU_HOME?.trim();
38
+ return mapped === undefined || mapped.length === 0 ? undefined : mapped;
39
+ }
40
+ /** Builds the one live progress observer for an invocation; the leaf owns when it finishes. */
41
+ export async function writeExecutionProgress(stream = process.stderr) {
10
42
  const terminal = stream;
11
- await renderExecutionProgress(events, {
43
+ const renderer = createExecutionProgressRenderer({
12
44
  stream: terminal,
13
45
  context: {
14
46
  columns: terminal.isTTY === true && Number.isInteger(terminal.columns)
@@ -17,8 +49,11 @@ export async function writeExecutionProgress(events, stream = process.stderr) {
17
49
  color: false,
18
50
  },
19
51
  });
52
+ return { observe: (event) => renderer.observe(event), finish: () => renderer.finish() };
20
53
  }
21
- function cliCancellation() {
54
+ function cliCancellation(signal) {
55
+ if (signal !== undefined)
56
+ return { signal, close: () => undefined };
22
57
  const controller = new AbortController();
23
58
  const cancel = () => controller.abort(new Error("CLI cancellation requested"));
24
59
  process.once("SIGINT", cancel);
@@ -31,133 +66,48 @@ function cliCancellation() {
31
66
  },
32
67
  };
33
68
  }
34
- export async function writeTask(command, result) {
35
- const { renderTaskIncompleteDiagnostic, renderTaskText, taskExitCode } = await import("./render/task.js");
36
- const context = {
37
- columns: process.stdout.isTTY === true && Number.isInteger(process.stdout.columns)
38
- ? process.stdout.columns
39
- : DEFAULT_CLI_COLUMNS,
40
- color: false,
41
- };
42
- if (command.output === "json")
43
- writeCliStream(process.stdout, JSON.stringify(result));
44
- else if (command.action === "compose" &&
45
- typeof result === "object" &&
46
- result !== null &&
47
- "kind" in result &&
48
- result.kind === "incomplete") {
49
- const diagnostic = renderTaskIncompleteDiagnostic(result);
50
- if (diagnostic.length > 0)
51
- writeCliStream(process.stderr, diagnostic);
52
- process.stdout.write(result.draft);
53
- }
54
- else
55
- writeCliStream(process.stdout, renderTaskText(command, result, context));
56
- return taskExitCode(result);
57
- }
58
- function displayContext() {
59
- return {
60
- columns: process.stdout.isTTY === true && Number.isInteger(process.stdout.columns)
61
- ? process.stdout.columns
62
- : DEFAULT_CLI_COLUMNS,
63
- color: process.stdout.isTTY === true && process.env.NO_COLOR === undefined,
64
- };
69
+ /** Bind's document admission runs before coordinate resolution so a malformed document refuses first. */
70
+ async function admitBindInput(command, invocation, runtime, processCwd) {
71
+ if (command.command !== "bind" || command.forkOf !== undefined)
72
+ return;
73
+ await admitBindMarkdown({
74
+ markdown: await runtime.readStdin(),
75
+ processCwd,
76
+ ...(invocation.cwd === undefined ? {} : { cwd: invocation.cwd }),
77
+ });
65
78
  }
66
- async function writeAkuma(command, result) {
67
- const { renderAkumaJson, akumaExitCode, akumaRawAnswer, renderAkumaText } = await import("./render/akuma.js");
68
- const output = command.output === "json" ? renderAkumaJson(result) : renderAkumaText(command, result, displayContext());
69
- const exact = command.output === "text" &&
70
- (akumaRawAnswer(result) !== undefined ||
71
- (command.command === "history" && command.last && result.action === "history" && result.mode === "last"));
72
- if (exact)
73
- process.stdout.write(output);
79
+ async function runInstall(command, environment) {
80
+ const result = await installHarnesses(command.harnesses, environment);
81
+ if (command.output === "json")
82
+ writeJson(result);
74
83
  else
75
- writeCliStream(process.stdout, output);
76
- return akumaExitCode(result);
77
- }
78
- function isAkumaOutput(command, result) {
79
- if (isParsedAkumaCommand(command))
80
- return true;
81
- return (command.command === "status" &&
82
- typeof result === "object" &&
83
- result !== null &&
84
- "kind" in result &&
85
- result.kind === "akuma");
86
- }
87
- function invocationJson(result) {
88
- switch (result.kind) {
89
- case "guidance":
90
- return { contract: result.contract, guidance: result.guidance };
91
- case "catalog":
92
- return result.catalog;
93
- case "nuke":
94
- return result.result;
95
- case "region":
96
- return result.region;
97
- case "contract-history":
98
- return result.history;
99
- case "status":
100
- return result.report;
101
- case "status-set":
102
- return result.entries;
103
- default:
104
- return result;
105
- }
106
- }
107
- async function invocationExitCode(result) {
108
- if (result.kind === "nuke")
109
- return (await import("./render/nuke.js")).nukeExitCode(result.result);
110
- if (result.kind === "observation") {
111
- const { worldObservationFailureText } = await import("./render/board.js");
112
- return worldObservationFailureText(result) === undefined ? 0 : 1;
113
- }
114
- return result.kind === "refused" ? 1 : result.kind === "retry" ? 2 : 0;
115
- }
116
- async function writeResult(command, result) {
117
- if (command.command === "install") {
118
- const { installExitCode, renderInstallText } = await import("./commands/install.js");
119
- const value = result;
120
- writeCliStream(process.stdout, command.output === "json" ? JSON.stringify(value) : renderInstallText(value));
121
- return installExitCode(value);
122
- }
123
- if (command.command === "task")
124
- return await writeTask(command, result);
125
- if (command.command === "settings") {
126
- const { renderSettingsText, settingsJsonValue } = await import("./render/settings.js");
127
- const value = result.value;
128
- writeCliStream(process.stdout, command.output === "json"
129
- ? JSON.stringify(settingsJsonValue(value))
130
- : renderSettingsText(value, displayContext().columns));
131
- return 0;
132
- }
133
- if (isAkumaOutput(command, result))
134
- return await writeAkuma(command, result);
135
- const contractResult = result;
136
- const { renderText } = await import("./render/text.js");
137
- const json = command.output === "json";
138
- const body = json ? JSON.stringify(invocationJson(contractResult)) : renderText(contractResult, displayContext());
139
- writeCliStream(process.stdout, body);
140
- return invocationExitCode(contractResult);
84
+ writeStdout(renderInstallText(result));
85
+ return installExitCode(result);
141
86
  }
87
+ /** Projection of one native Akuma addressing/observation failure into its stated refusal body. */
142
88
  export async function akumaFailureProjection(error, command) {
143
- const [{ AkumaNotBornError, AkumaObservationError }, { AkumaAddressError, AkumaWorldScopeError }] = await Promise.all([import("../akuma/akuma-errors.js"), import("../library/address.js")]);
144
89
  if (error instanceof AkumaNotBornError) {
145
90
  return {
146
- body: command.output === "json" ? error.message : `× Akuma not found ${safeText(error.id)}`,
91
+ body: command.output === "json"
92
+ ? error.message
93
+ : renderStructuredRefusal(command.command, "Akuma not found", [`id ${safeText(error.id)}`], usageGuideForCommand(command)),
147
94
  exitCode: 1,
148
95
  };
149
96
  }
150
97
  if (error instanceof AkumaAddressError) {
151
98
  const body = error.refusal.kind === "akuma-alias-not-found"
152
- ? `× Akuma alias not found ${safeText(error.refusal.alias)}`
153
- : `× invalid Akuma ${safeText(error.refusal.selector)}`;
99
+ ? renderStructuredRefusal(command.command, "Akuma alias not found", [`alias ${safeText(error.refusal.alias)}`], usageGuideForCommand(command))
100
+ : renderStructuredRefusal(command.command, "invalid Akuma address", [`selector ${safeText(error.refusal.selector)}`], usageGuideForCommand(command));
154
101
  return { body: command.output === "json" ? error.message : body, exitCode: 1 };
155
102
  }
156
103
  if (error instanceof AkumaWorldScopeError) {
157
104
  return {
158
105
  body: command.output === "json"
159
106
  ? JSON.stringify(error.refusal)
160
- : error.refusal.ids.map((id) => `× Akuma not in this World ${safeText(id)}`).join("\n"),
107
+ : renderStructuredRefusal(command.command, "Akuma not in this World", [
108
+ `ids ${error.refusal.ids.map((id) => safeText(id)).join(" · ")}`,
109
+ `world ${safeText(error.refusal.world)}`,
110
+ ], usageGuideForCommand(command)),
161
111
  exitCode: 1,
162
112
  };
163
113
  }
@@ -175,60 +125,102 @@ async function commandFailureText(error, command) {
175
125
  const diagnostic = error instanceof Error ? error.message : String(error);
176
126
  if (command.output === "json" || error instanceof CliUsageError)
177
127
  return diagnostic;
178
- const { KeiyakuRefused } = await import("../library/refusal.js");
179
- if (error instanceof KeiyakuRefused) {
180
- if (error.refusal.kind === "contract-missing") {
181
- return renderUsageMessage(diagnostic, {
182
- ...usageGuideForCommand(command),
183
- given: error.refusal.contractId,
184
- }, "selector");
128
+ if (error instanceof AkumaArchetypeError) {
129
+ if (command.command === "call") {
130
+ return renderStructuredRefusal("call", `Akuma not found · ${safeText(error.archetype)}`, ["available keiyaku ls aku/"], usageGuideForCommand(command));
131
+ }
132
+ return `× ${command.command} failed\n reason ${safeText(error.message)}`;
133
+ }
134
+ return `× ${command.command} failed\n reason ${safeText(diagnostic)}`;
135
+ }
136
+ function writeBindDraftFailure(error, command) {
137
+ const refusal = {
138
+ kind: "invalid-document",
139
+ diagnostic: error.original instanceof Error ? error.original.message : String(error.original),
140
+ };
141
+ if (command.output === "json")
142
+ writeJson({ kind: "refused", operation: "bind", refusal, draft: error.draft });
143
+ else
144
+ writeStdout(renderRefusal({ operation: "bind", refusal }, error.draft, displayContext()));
145
+ return error.original instanceof CliUsageError ? 64 : 1;
146
+ }
147
+ async function writeFailure(error, command) {
148
+ if (error instanceof BindDraftError)
149
+ return writeBindDraftFailure(error, command);
150
+ if (error instanceof KeiyakuError) {
151
+ const diagnostic = error.message;
152
+ if (command.output === "json")
153
+ writeJson(encodeFailureWire(error));
154
+ else if (error.outcome !== undefined) {
155
+ writeStdout(executionFailureLines(error.outcome, error.category, diagnostic, displayContext().columns).join("\n"));
185
156
  }
186
- const { renderRefusalFacts } = await import("./render/refusal.js");
187
- return [`× ${command.command} refused`, ...renderRefusalFacts(error.refusal, " ", displayContext().columns)].join("\n");
157
+ else
158
+ writeStderr(`× ${command.command} failed\n reason ${safeText(diagnostic)}`);
159
+ return 3;
160
+ }
161
+ const akumaFailure = await akumaFailureProjection(error, command);
162
+ if (akumaFailure !== undefined) {
163
+ writeStderr(akumaFailure.body);
164
+ return akumaFailure.exitCode;
188
165
  }
189
- return `× ${command.command} failed\n diagnostic ${safeText(diagnostic)}`;
166
+ if (error instanceof AkumaArchetypeError && command.command === "call") {
167
+ if (command.output === "json")
168
+ writeJson({
169
+ kind: "refused",
170
+ diagnostic: "Akuma not found",
171
+ archetype: error.archetype,
172
+ available: "keiyaku ls aku/",
173
+ });
174
+ else
175
+ writeStdout(renderStructuredRefusal("call", `Akuma not found · ${safeText(error.archetype)}`, ["available keiyaku ls aku/"], usageGuideForCommand(command)));
176
+ return 1;
177
+ }
178
+ if (command.output === "json")
179
+ writeJson(encodeFailureWire(error));
180
+ else
181
+ writeStderr(await commandFailureText(error, command));
182
+ return error instanceof CliUsageError ? 64 : 3;
190
183
  }
191
- export async function runCliCommand(invocation) {
184
+ export async function runCliCommand(invocation, input = {}) {
192
185
  const command = invocation.command;
193
- const cancellation = cliCancellation();
186
+ assertExplicitRepoUse(command, invocation.repo);
187
+ const environment = input.environment ?? process.env;
188
+ const home = homeFromEnvironment(environment);
189
+ const cancellation = cliCancellation(input.signal);
190
+ let progress;
191
+ const runtime = {
192
+ environment,
193
+ execution: executionForEnvironment(environment),
194
+ ...(home === undefined ? {} : { home }),
195
+ readStdin: memoized(input.readStdin ?? processStdin),
196
+ signal: cancellation.signal,
197
+ progress: () => (progress ??= writeExecutionProgress()),
198
+ ...(input.actor === undefined ? {} : { actor: input.actor }),
199
+ };
194
200
  try {
195
- const { invoke } = await import("./invoke.js");
196
- const result = await invoke(invocation, {
197
- cwd: process.cwd(),
198
- signal: cancellation.signal,
199
- progress: writeExecutionProgress,
200
- });
201
- return await writeResult(command, result);
201
+ if (command.command === "install")
202
+ return await runInstall(command, environment);
203
+ await admitBindInput(command, invocation, runtime, input.cwd ?? process.cwd());
204
+ const coordinates = await resolveInvocationCoordinates({
205
+ processCwd: input.cwd ?? process.cwd(),
206
+ ...(invocation.cwd === undefined ? {} : { cwd: invocation.cwd }),
207
+ ...(invocation.repo === undefined ? {} : { repo: invocation.repo }),
208
+ ...(invocation.workdir === undefined ? {} : { workdir: invocation.workdir }),
209
+ command,
210
+ }, environment);
211
+ if (command.command === "task")
212
+ return await runTaskCommand(command, coordinates, runtime);
213
+ if (isParsedAkumaCommand(command))
214
+ return await runAkumaCommand(command, coordinates, invocation.workdir, runtime);
215
+ if (command.command === "history" && "contract" in command)
216
+ return await runContractHistoryCommand(command, coordinates);
217
+ return await runContractCommand(command, coordinates, runtime);
202
218
  }
203
219
  catch (error) {
204
- const { executionReceipt } = await import("../library/execution-result.js");
205
- const receipt = executionReceipt(error);
206
- if (receipt !== undefined) {
207
- const diagnostic = error instanceof Error ? error.message : String(error);
208
- const { postAdmissionFailureCategory } = await import("../library/refusal.js");
209
- const category = postAdmissionFailureCategory(error);
210
- const { executionFailureLines } = await import("./render/receipt.js");
211
- writeCliStream(process.stdout, command.output === "json"
212
- ? JSON.stringify({ kind: "execution-failed", category, diagnostic, receipt })
213
- : executionFailureLines(receipt, category, diagnostic, displayContext().columns).join("\n"));
214
- return 3;
215
- }
216
- const akumaFailure = await akumaFailureProjection(error, command);
217
- if (akumaFailure !== undefined) {
218
- writeCliStream(process.stderr, akumaFailure.body);
219
- return akumaFailure.exitCode;
220
- }
221
- if (command.command === "bind") {
222
- const { BindDraftError } = await import("./draft.js");
223
- if (error instanceof BindDraftError) {
224
- writeCliStream(process.stderr, await commandFailureText(error.original, command));
225
- const { renderBindDraftReceipt } = await import("./render/refusal.js");
226
- writeCliStream(process.stderr, renderBindDraftReceipt(error.draft));
227
- return error.original instanceof CliUsageError ? 1 : 3;
228
- }
220
+ if (error instanceof CliUsageError && error.guide === undefined) {
221
+ throw new CliUsageError(error.diagnostic, usageGuideForCommand(command));
229
222
  }
230
- writeCliStream(process.stderr, await commandFailureText(error, command));
231
- return error instanceof CliUsageError ? 1 : 3;
223
+ return await writeFailure(error, command);
232
224
  }
233
225
  finally {
234
226
  cancellation.close();
@@ -1,11 +1,14 @@
1
- import { Keiyaku, type ContractBoard, type ContractId, type Repo } from "../index.js";
2
1
  import { type ExecutionContext } from "../akuma/requests.js";
2
+ import type { ContractBoard, ContractId, Keiyaku, Repo } from "../index.js";
3
3
  import type { KanshiReport } from "../kanshi/index.js";
4
- export type SelectedContract = Readonly<{
4
+ type SelectedContract = Readonly<{
5
5
  id: ContractId;
6
6
  contract: Keiyaku;
7
7
  }>;
8
8
  export declare function contractFromInput(repo: Repo, value: string, execution?: ExecutionContext): SelectedContract;
9
9
  export declare function resolveContextualContract(board: ContractBoard, selector: string | undefined, scope: string): ContractId;
10
+ /** Resolve one explicit, short, or worktree-contextual selector to its Contract id. */
11
+ export declare function resolveContractId(repo: Repo, selector: string | undefined, scope: string): Promise<ContractId>;
10
12
  export declare function canonicalContractSelector(selector: string): ContractId;
11
13
  export declare function resolveKanshiContract(report: KanshiReport, selector: string): string;
14
+ export {};
@@ -1,7 +1,8 @@
1
1
  import { resolve } from "node:path";
2
- import { identitySegments } from "../identity/coordinates.js";
3
- import { Keiyaku } from "../index.js";
4
2
  import { localExecutionContext } from "../akuma/requests.js";
3
+ import { identitySegments } from "../identity/coordinates.js";
4
+ import { composeContractLibrary } from "../library/contract-composition.js";
5
+ import { createKeiyakuHandle } from "../library/keiyaku.js";
5
6
  import { CliUsageError } from "./parse.js";
6
7
  function selectorError(message) {
7
8
  throw new CliUsageError(message);
@@ -16,7 +17,7 @@ function activeManagedCandidates(rows) {
16
17
  export function contractFromInput(repo, value, execution = localExecutionContext()) {
17
18
  try {
18
19
  const id = value;
19
- return { id, contract: Keiyaku.with({ execution }).select({ repo, id }) };
20
+ return { id, contract: composeContractLibrary(execution, createKeiyakuHandle).select({ repo, id }) };
20
21
  }
21
22
  catch (error) {
22
23
  selectorError(error instanceof Error ? error.message : String(error));
@@ -49,6 +50,13 @@ export function resolveContextualContract(board, selector, scope) {
49
50
  return resolveShortContract(board.rows, selector);
50
51
  return selectorError(`contract selector must be kei/<contract-segment> or @<contract-segment>: ${selector}`);
51
52
  }
53
+ /** Resolve one explicit, short, or worktree-contextual selector to its Contract id. */
54
+ export async function resolveContractId(repo, selector, scope) {
55
+ if (selector !== undefined && !selector.startsWith("@"))
56
+ return contractFromInput(repo, selector).id;
57
+ const { listKeiyaku } = await import("../library/contract-composition.js");
58
+ return resolveContextualContract(await listKeiyaku({ repo }), selector, scope);
59
+ }
52
60
  export function canonicalContractSelector(selector) {
53
61
  try {
54
62
  identitySegments({ family: "kei", value: selector });
@@ -0,0 +1,11 @@
1
+ import { type TextRenderContext } from "./render/terminal.js";
2
+ /** Append one complete line to a process stream unless the body already ends with a newline. */
3
+ export declare function writeCliStream(stream: NodeJS.WritableStream, body: string): void;
4
+ export declare function writeStdout(body: string): void;
5
+ export declare function writeStderr(body: string): void;
6
+ /** The product-result presentation context, measured from the stream that carries the result. */
7
+ export declare function displayContext(): TextRenderContext;
8
+ /** The live-progress context, measured from stderr where activity rows are written. */
9
+ export declare function resultContext(): TextRenderContext;
10
+ /** One JSON product answer, verbatim from the native value. */
11
+ export declare function writeJson(value: unknown): void;
@@ -0,0 +1,32 @@
1
+ import { DEFAULT_CLI_COLUMNS } from "./render/terminal.js";
2
+ /** Append one complete line to a process stream unless the body already ends with a newline. */
3
+ export function writeCliStream(stream, body) {
4
+ stream.write(body.endsWith("\n") ? body : `${body}\n`);
5
+ }
6
+ export function writeStdout(body) {
7
+ writeCliStream(process.stdout, body);
8
+ }
9
+ export function writeStderr(body) {
10
+ writeCliStream(process.stderr, body);
11
+ }
12
+ /** The product-result presentation context, measured from the stream that carries the result. */
13
+ export function displayContext() {
14
+ return {
15
+ columns: process.stdout.isTTY === true && Number.isInteger(process.stdout.columns)
16
+ ? process.stdout.columns
17
+ : DEFAULT_CLI_COLUMNS,
18
+ color: process.stdout.isTTY === true && process.env.NO_COLOR === undefined,
19
+ };
20
+ }
21
+ /** The live-progress context, measured from stderr where activity rows are written. */
22
+ export function resultContext() {
23
+ const tty = process.stderr.isTTY === true;
24
+ return {
25
+ columns: tty && Number.isInteger(process.stderr.columns) ? process.stderr.columns : DEFAULT_CLI_COLUMNS,
26
+ color: tty && process.env.NO_COLOR === undefined,
27
+ };
28
+ }
29
+ /** One JSON product answer, verbatim from the native value. */
30
+ export function writeJson(value) {
31
+ writeStdout(JSON.stringify(value));
32
+ }
@@ -11,6 +11,8 @@ export declare function acceptsFromUsage(usage: string): string;
11
11
  export declare function commandGuide(commandPath: string, usage: string): CliUsageGuide;
12
12
  export declare function unknownCommandGuide(guide: CliUsageGuide, given: string): CliUsageGuide;
13
13
  export declare function renderUsageMessage(diagnostic: string, guide?: CliUsageGuide, kind?: "usage" | "selector"): string;
14
+ /** The acceptance grammar tail shared by usage and substantive refusals. */
15
+ export declare function usageAcceptanceLines(guide: CliUsageGuide): readonly string[];
14
16
  export declare class CliUsageError extends Error {
15
17
  readonly diagnostic: string;
16
18
  readonly guide?: CliUsageGuide | undefined;
@@ -34,23 +34,27 @@ export function unknownCommandGuide(guide, given) {
34
34
  }
35
35
  export function renderUsageMessage(diagnostic, guide, kind = "usage") {
36
36
  if (guide === undefined) {
37
- return `× ${kind}\n diagnostic ${diagnostic}`;
37
+ return `× ${kind}\n reason ${diagnostic}`;
38
38
  }
39
39
  const lines = [`× ${kind} ${guide.scope}`];
40
40
  if (!guide.hideDiagnostic && diagnostic.length > 0) {
41
- lines.push(` diagnostic ${diagnostic}`);
41
+ lines.push(` reason ${diagnostic}`);
42
42
  }
43
43
  if (guide.given !== undefined) {
44
44
  lines.push(` given ${guide.given}`);
45
45
  }
46
- const accepts = guide.accepts.split("\n");
47
- lines.push(` accepts ${accepts[0]}`);
48
- for (const part of accepts.slice(1)) {
49
- lines.push(` ${part}`);
50
- }
51
- lines.push(` help ${guide.help}`);
46
+ lines.push(...usageAcceptanceLines(guide));
52
47
  return lines.join("\n");
53
48
  }
49
+ /** The acceptance grammar tail shared by usage and substantive refusals. */
50
+ export function usageAcceptanceLines(guide) {
51
+ const accepts = guide.accepts.split("\n");
52
+ return [
53
+ ` accepts ${accepts[0]}`,
54
+ ...accepts.slice(1).map((part) => ` ${part}`),
55
+ ` help ${guide.help}`,
56
+ ];
57
+ }
54
58
  export class CliUsageError extends Error {
55
59
  diagnostic;
56
60
  guide;
@@ -89,7 +89,7 @@ export const CONTRACT_REVIEWER_SKILL = [
89
89
  "",
90
90
  "`keiyaku review` records a verdict on the whole Contract.",
91
91
  "",
92
- "Record `--satisfied` when you have verified two things and hold the evidence: the current worktree meets every Criterion, and the result actually achieves what the Objective set out to do. Criteria are the written checks; the Objective is the intent behind them — work that passes every check but misses the intent is not satisfied. If a delivered candidate, prerequisites, and all declared gates are in place, the Contract is claimed immediately and cannot be reopened.",
92
+ "Record `--satisfied` when you have verified two things and hold the evidence: the current worktree meets every Criterion, and the result actually achieves what the Objective set out to do. Criteria are the written checks; the Objective is the intent behind them — work that passes every check but misses the intent is not satisfied. If a delivered candidate, prerequisites, and all declared gates are in place, the Contract is accepted immediately and cannot be reopened.",
93
93
  "",
94
94
  "Record `--unsatisfied` when any Criterion is unmet, the work is incomplete, or the result does not achieve the Objective's intent — and state what is missing.",
95
95
  "",
@@ -117,13 +117,9 @@ function renderArc(arc) {
117
117
  "",
118
118
  arc.title.trimEnd(),
119
119
  "",
120
- "### Objective",
120
+ "### Body",
121
121
  "",
122
- arc.objective.trimEnd(),
123
- "",
124
- "### Brief",
125
- "",
126
- arc.brief.trimEnd(),
122
+ arc.body.replace(/^(?:\r?\n)+/u, "").trimEnd(),
127
123
  ].join("\n");
128
124
  }
129
125
  const FULFILLMENT = [
@@ -1,35 +1,27 @@
1
- import { type DerivedFileAction } from "./coordination/durable-file.js";
2
- import { type ContractId, type ContractState } from "./core/facts/types.js";
1
+ import { z } from "zod";
2
+ import { type ContractState } from "./core/facts/types.js";
3
3
  import { type GitRepository } from "./git/process.js";
4
4
  import { type PlaceRegister } from "./workspace-place.js";
5
- export type ContractAppointment = Readonly<{
6
- kind: "absent";
7
- path: string;
8
- }> | Readonly<{
9
- kind: "appointed";
10
- path: string;
11
- contract: ContractId;
12
- }> | Readonly<{
13
- kind: "invalid";
14
- path: string;
15
- }>;
16
- export type ContractFileEffect = Readonly<{
17
- kind: "contract-file";
18
- path: string;
19
- action: DerivedFileAction | "removed";
20
- }>;
21
- export type ContractFileLag = Readonly<{
22
- kind: "contract-file-failed";
23
- worktree: string;
24
- path: string;
25
- diagnostic: string;
26
- }>;
27
- export declare function decodeContractFileLag(value: unknown): ContractFileLag;
5
+ export declare const contractFileEffectSchema: z.ZodObject<{
6
+ kind: z.ZodLiteral<"contract-file">;
7
+ path: z.ZodString;
8
+ action: z.ZodEnum<{
9
+ created: "created";
10
+ updated: "updated";
11
+ unchanged: "unchanged";
12
+ removed: "removed";
13
+ }>;
14
+ }, z.core.$strict>;
15
+ export type ContractFileEffect = z.infer<typeof contractFileEffectSchema>;
16
+ export declare const contractFileLagSchema: z.ZodObject<{
17
+ kind: z.ZodLiteral<"contract-file-failed">;
18
+ worktree: z.ZodString;
19
+ path: z.ZodString;
20
+ diagnostic: z.ZodString;
21
+ }, z.core.$strict>;
22
+ export type ContractFileLag = z.infer<typeof contractFileLagSchema>;
28
23
  export type ContractWorktreeResult = Readonly<{
29
24
  effects: readonly ContractFileEffect[];
30
25
  lag: readonly ContractFileLag[];
31
26
  }>;
32
- export declare function readContractAppointment(repository: GitRepository): Promise<ContractAppointment>;
33
- export declare function withContractWorktreeAppointment<T>(repository: GitRepository, action: () => T | Promise<T>): Promise<T>;
34
- export declare function releaseContractWorktree(repository: GitRepository, contract: ContractId): Promise<void>;
35
27
  export declare function projectContractWorktree(repository: GitRepository, state: ContractState | null, register?: PlaceRegister, _onConflict?: (diagnostic: string) => never): Promise<ContractWorktreeResult>;