@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,19 @@
1
- import { LEASH_HELD_EXIT, runAkumaBody } from "./akuma/body.js";
1
+ import { resolve } from "node:path";
2
+ import { fileURLToPath } from "node:url";
3
+ import { bodyLaunchSchema, LEASH_HELD_EXIT, runAkumaBody } from "./akuma/body.js";
2
4
  import { worldRootForAkumaPaths } from "./akuma/identity.js";
3
- import { World } from "./world.js";
4
- import { fleetRequestPort } from "./akuma/fleet-owner-port.js";
5
- import { fleetRequestCommands } from "./akuma/fleet-request.js";
6
- import { worktreeHooksFrom } from "./git/hooks.js";
7
- import { contractRequestCommands, executeForwardedAudit, executeForwardedDeliver, executeForwardedReview, } from "./library/contract-operations.js";
8
- import { Repo } from "./library/repo.js";
9
- import { requireBranchesToBeUpToDateFrom, settings } from "./settings.js";
10
- import { executeTaskMutation, taskMutationRequestCommands } from "./task/mutation.js";
11
5
  import { composeRequestCommands } from "./akuma/request-wire.js";
6
+ import { localExecutionContext } from "./akuma/requests.js";
7
+ import { selectionRequestPort } from "./akuma/selection-owner-port.js";
8
+ import { selectionRequestCommands } from "./akuma/selection-request.js";
9
+ import { composeContractLibrary } from "./library/contract-composition.js";
10
+ import { contractRequestCommands } from "./library/contract-operations.js";
11
+ import { createKeiyakuHandle } from "./library/keiyaku.js";
12
+ import { Repo } from "./library/repo.js";
13
+ import { settings } from "./settings.js";
14
+ import { Tasks } from "./task/index.js";
15
+ import { taskMutationRequestCommands } from "./task/mutation.js";
16
+ import { World } from "./world.js";
12
17
  async function contractDependencies(repoRoot, processConfiguration) {
13
18
  const repo = await Repo.at({
14
19
  path: repoRoot,
@@ -23,82 +28,112 @@ async function contractDependencies(repoRoot, processConfiguration) {
23
28
  });
24
29
  return [repo, configuration];
25
30
  }
31
+ function contractChannel(repo, contractId, requester, configuration) {
32
+ return composeContractLibrary(localExecutionContext(), createKeiyakuHandle, {
33
+ settings: configuration,
34
+ actor: requester,
35
+ }).select({
36
+ repo,
37
+ id: contractId,
38
+ });
39
+ }
26
40
  function contractUpstream(processConfiguration) {
27
41
  return {
28
42
  audit: async (input) => {
29
43
  const [repo, configuration] = await contractDependencies(input.repoRoot, processConfiguration);
30
- return await executeForwardedAudit({
31
- repo,
32
- ...(input.observe === undefined ? {} : { observe: input.observe }),
33
- contractId: input.contractId,
34
- requester: input.requester,
44
+ return await contractChannel(repo, input.contractId, input.requester, configuration).audit({
35
45
  includeDirty: input.includeDirty,
36
46
  showDiff: input.showDiff,
37
- requireBranchesToBeUpToDate: requireBranchesToBeUpToDateFrom({ settings: configuration }),
38
- hooks: worktreeHooksFrom({ settings: configuration }),
39
47
  signal: input.signal,
40
- });
48
+ }, input.observe === undefined ? undefined : { observe: input.observe });
41
49
  },
42
50
  deliver: async (input) => {
43
51
  const [repo, configuration] = await contractDependencies(input.repoRoot, processConfiguration);
44
- return await executeForwardedDeliver({
45
- repo,
46
- ...(input.observe === undefined ? {} : { observe: input.observe }),
47
- contractId: input.contractId,
48
- requester: input.requester,
49
- ...(input.message === undefined ? {} : { message: input.message }),
52
+ return await contractChannel(repo, input.contractId, input.requester, configuration).deliver({
50
53
  includeDirty: input.includeDirty,
51
54
  materializeConflict: input.materializeConflict,
52
- requireBranchesToBeUpToDate: requireBranchesToBeUpToDateFrom({ settings: configuration }),
53
- hooks: worktreeHooksFrom({ settings: configuration }),
55
+ ...(input.message === undefined ? {} : { message: input.message }),
56
+ ...(input.overwrite === undefined ? {} : { overwrite: input.overwrite }),
54
57
  signal: input.signal,
55
- });
58
+ }, input.observe === undefined ? undefined : { observe: input.observe });
56
59
  },
57
60
  review: async (input) => {
58
61
  const [repo, configuration] = await contractDependencies(input.repoRoot, processConfiguration);
59
- return await executeForwardedReview({
60
- repo,
61
- ...(input.observe === undefined ? {} : { observe: input.observe }),
62
- contractId: input.contractId,
63
- requester: input.requester,
62
+ return await contractChannel(repo, input.contractId, input.requester, configuration).review({
64
63
  verdict: input.verdict,
65
- signal: input.signal,
66
64
  ...(input.summary === undefined ? {} : { summary: input.summary }),
67
- hooks: worktreeHooksFrom({ settings: configuration }),
68
- });
65
+ signal: input.signal,
66
+ }, input.observe === undefined ? undefined : { observe: input.observe });
69
67
  },
70
68
  };
71
69
  }
70
+ const TASK_LIFECYCLE = {
71
+ start: async (handle, input) => await handle.start(input),
72
+ stop: async (handle, input) => await handle.stop(input),
73
+ hold: async (handle, input) => await handle.hold(input),
74
+ resume: async (handle, input) => await handle.resume(input),
75
+ done: async (handle, input) => await handle.done(input),
76
+ drop: async (handle, input) => await handle.drop(input),
77
+ };
78
+ /**
79
+ * The upper Body edge composes the forced-local Tasks SDK the descriptor
80
+ * execution entries consume. Each ability is one ordinary local product
81
+ * operation; no generic task(request) dispatcher is introduced here.
82
+ */
72
83
  function taskMutationRequestPort() {
73
84
  return {
74
- task: async (input) => await executeTaskMutation({
75
- world: input.world,
76
- request: input.request,
77
- requester: input.requester,
78
- signal: input.signal,
85
+ add: async ({ world, options }) => await Tasks.of(world).add(options),
86
+ addDocument: async ({ world, document }) => await Tasks.of(world).addDocument(document),
87
+ compose: async ({ world, markdown, defaultNamespace, actor, signal }) => await Tasks.of(world).compose({
88
+ markdown,
89
+ namespace: defaultNamespace,
90
+ actor,
91
+ ...(signal === undefined ? {} : { signal }),
92
+ }),
93
+ update: async ({ world, id, options }) => await Tasks.of(world).task({ id }).update(options),
94
+ lifecycle: async ({ world, verb, id, note, signal }) => await TASK_LIFECYCLE[verb](Tasks.of(world).task({ id }), {
95
+ ...(note === undefined ? {} : { note }),
96
+ ...(signal === undefined ? {} : { signal }),
97
+ }),
98
+ batch: async ({ world, verb, ids, note, signal }) => await Tasks.of(world).batch({
99
+ verb,
100
+ ids,
101
+ ...(note === undefined ? {} : { note }),
102
+ ...(signal === undefined ? {} : { signal }),
79
103
  }),
80
104
  };
81
105
  }
82
- const encoded = process.argv[2];
83
- if (encoded === undefined)
84
- throw new TypeError("Akuma body launch payload is missing");
85
- const launch = JSON.parse(Buffer.from(encoded, "base64url").toString("utf8"));
86
- const mappedHome = process.env.KEIYAKU_HOME?.trim();
87
- const mappedGitPath = process.env.KEIYAKU_GIT_PATH;
88
- if (mappedGitPath !== undefined && mappedGitPath.trim().length === 0) {
89
- throw new TypeError("KEIYAKU_GIT_PATH requires a nonblank value");
90
- }
91
- const configuration = {
92
- ...(mappedHome === undefined || mappedHome.length === 0 ? {} : { home: mappedHome }),
93
- ...(mappedGitPath === undefined ? {} : { gitPath: mappedGitPath }),
94
- };
95
106
  export async function externalRequestCommandsFor(launch, processConfiguration) {
96
107
  const world = await World.prove(worldRootForAkumaPaths(launch.paths));
97
108
  return {
98
109
  world,
99
- commands: composeRequestCommands(fleetRequestCommands(fleetRequestPort(world)), contractRequestCommands(contractUpstream(processConfiguration)), taskMutationRequestCommands(taskMutationRequestPort())),
110
+ commands: composeRequestCommands(selectionRequestCommands(selectionRequestPort(world)), contractRequestCommands(contractUpstream(processConfiguration)), taskMutationRequestCommands(taskMutationRequestPort())),
100
111
  };
101
112
  }
102
- const { world, commands: externalCommands } = await externalRequestCommandsFor(launch, configuration);
103
- if ((await runAkumaBody(launch, world, externalCommands)) === "held")
104
- process.exitCode = LEASH_HELD_EXIT;
113
+ function bodyProcessConfiguration() {
114
+ const mappedHome = process.env.KEIYAKU_HOME?.trim();
115
+ const mappedGitPath = process.env.KEIYAKU_GIT_PATH;
116
+ if (mappedGitPath !== undefined && mappedGitPath.trim().length === 0) {
117
+ throw new TypeError("KEIYAKU_GIT_PATH requires a nonblank value");
118
+ }
119
+ return {
120
+ ...(mappedHome === undefined || mappedHome.length === 0 ? {} : { home: mappedHome }),
121
+ ...(mappedGitPath === undefined ? {} : { gitPath: mappedGitPath }),
122
+ };
123
+ }
124
+ async function runBodyEntrypoint() {
125
+ const encoded = process.argv[2];
126
+ if (encoded === undefined)
127
+ throw new TypeError("Akuma body launch payload is missing");
128
+ const launch = bodyLaunchSchema.parse(JSON.parse(Buffer.from(encoded, "base64url").toString("utf8")));
129
+ const { world, commands } = await externalRequestCommandsFor(launch, bodyProcessConfiguration());
130
+ if ((await runAkumaBody(launch, world, commands)) === "held")
131
+ process.exitCode = LEASH_HELD_EXIT;
132
+ }
133
+ /** Only the spawned entrypoint launches a Body; importing this module composes commands without side effects. */
134
+ function invokedAsBodyEntrypoint() {
135
+ const entry = process.argv[1];
136
+ return entry !== undefined && resolve(entry) === resolve(fileURLToPath(import.meta.url));
137
+ }
138
+ if (invokedAsBodyEntrypoint())
139
+ await runBodyEntrypoint();
@@ -3,3 +3,8 @@ export declare function applyAmendDocument(source: string, current: DecodedContr
3
3
  document: string;
4
4
  changedSections: ReadonlySet<string>;
5
5
  }>;
6
+ /** Caller syntax is decoded before any repository observation; current-dependent application stays pure. */
7
+ export declare function prepareAmendDocument(source: string): (current: DecodedContractDocument) => Readonly<{
8
+ document: string;
9
+ changedSections: ReadonlySet<string>;
10
+ }>;
@@ -1,9 +1,10 @@
1
1
  import { decodeVerificationDeclarations, VerificationDocumentError } from "./verification.js";
2
2
  import { parseToAST } from "../markdown/parse.js";
3
- import { directChildren, indexDocument, indexedHeadings, normalizeTitle, rawSlice, sectionContent, } from "../markdown/query.js";
4
- import { decodeRegion, RegionDocumentError } from "./region.js";
3
+ import { indexDocument, indexedHeadings, normalizeTitle, rawSlice, sectionContent } from "../markdown/query.js";
4
+ import { decodeRegionOrRefusal } from "./region.js";
5
5
  import { contractSectionName, RESERVED_SECTIONS } from "./shape.js";
6
6
  import { renderAmendedContractBody } from "./render.js";
7
+ import { decodeCriteria } from "./criteria.js";
7
8
  function refusal(message) {
8
9
  throw new TypeError(message);
9
10
  }
@@ -37,39 +38,6 @@ function prose(document, section, label) {
37
38
  refusal(`${label} operation body must be nonblank`);
38
39
  return value;
39
40
  }
40
- function region(document, section) {
41
- try {
42
- return decodeRegion(document, section);
43
- }
44
- catch (error) {
45
- if (error instanceof RegionDocumentError)
46
- refusal(error.message);
47
- throw error;
48
- }
49
- }
50
- function criteria(document, section) {
51
- const headings = directChildren(section, "heading").filter((heading) => heading.level === 3);
52
- if (headings.length === 0)
53
- refusal("Criteria operation must contain one or more H3 entries");
54
- const before = rawSlice(document, { start: section.contentStart, end: headings[0].span.start });
55
- if (before.trim().length > 0)
56
- refusal("Criteria operation may contain only H3 entries");
57
- const seen = new Set();
58
- return headings.map((heading, index) => {
59
- const title = heading.text.trim();
60
- const key = normalizeTitle(title);
61
- if (title.length === 0 || seen.has(key))
62
- refusal("criteria operation contains duplicate or empty titles");
63
- seen.add(key);
64
- const body = rawSlice(document, {
65
- start: heading.span.end,
66
- end: headings[index + 1]?.span.start ?? section.span.end,
67
- });
68
- if (body.trim().length === 0)
69
- refusal(`criterion '${title}' operation body is empty`);
70
- return { title, body };
71
- });
72
- }
73
41
  function verification(document, section) {
74
42
  try {
75
43
  return decodeVerificationDeclarations(document, section, { requireTimeout: true });
@@ -154,7 +122,7 @@ function applyUpdate(body, operation, document) {
154
122
  body.extensions[index] = { ...extension, content: prose(document, operation.section, "extension") };
155
123
  }
156
124
  function addedCriteria(body, operation, document) {
157
- const added = criteria(document, operation.section);
125
+ const added = decodeCriteria(document, operation.section, "amend");
158
126
  if (added.some((candidate) => criterionIndex(body, candidate.title) >= 0)) {
159
127
  refusal(`${operation.kind} Criteria targets an existing criterion`);
160
128
  }
@@ -213,11 +181,11 @@ function applyReplace(body, operation, document) {
213
181
  return;
214
182
  }
215
183
  if (target === "region") {
216
- body.region = region(document, operation.section);
184
+ body.region = decodeRegionOrRefusal(document, operation.section);
217
185
  return;
218
186
  }
219
187
  if (target === "criteria") {
220
- const replacement = criteria(document, operation.section);
188
+ const replacement = decodeCriteria(document, operation.section, "amend");
221
189
  body.criteria = [...replacement];
222
190
  body.criterionIndexes = new Map(replacement.map((criterion, index) => [normalizeTitle(criterion.title), index]));
223
191
  return;
@@ -262,28 +230,36 @@ function applyOperation(body, operation, document) {
262
230
  function operationKey(operation) {
263
231
  return `${operation.kind}:${operation.target}`;
264
232
  }
265
- function apply(source, current) {
233
+ function apply(document, operations, current) {
234
+ const changed = new Set();
235
+ const body = cloneBody(current);
236
+ for (const operation of operations) {
237
+ changed.add(normalizeTitle(operation.target));
238
+ applyOperation(body, operation, document);
239
+ }
240
+ return { body: completeBody(body), changed };
241
+ }
242
+ export function applyAmendDocument(source, current) {
243
+ return prepareAmendDocument(source)(current);
244
+ }
245
+ /** Caller syntax is decoded before any repository observation; current-dependent application stays pure. */
246
+ export function prepareAmendDocument(source) {
266
247
  const document = parseToAST(source);
267
248
  const operations = operationSections(document);
268
249
  if (operations.length === 0)
269
250
  refusal("amend requires at least one H2 operation");
270
251
  const seen = new Set();
271
- const changed = new Set();
272
- const body = cloneBody(current);
273
252
  for (const operation of operations) {
274
253
  const key = operationKey(operation);
275
254
  if (seen.has(key))
276
255
  refusal(`duplicate amend operation '${key}'`);
277
256
  seen.add(key);
278
- changed.add(normalizeTitle(operation.target));
279
- applyOperation(body, operation, document);
280
257
  }
281
- return { body: completeBody(body), changed };
282
- }
283
- export function applyAmendDocument(source, current) {
284
- const result = apply(source, current);
285
- return {
286
- document: renderAmendedContractBody(current.document.bytes, result.body, result.changed),
287
- changedSections: result.changed,
258
+ return (current) => {
259
+ const result = apply(document, operations, current);
260
+ return {
261
+ document: renderAmendedContractBody(current.document.bytes, result.body, result.changed),
262
+ changedSections: result.changed,
263
+ };
288
264
  };
289
265
  }
@@ -1,2 +1,4 @@
1
- import type { ArcData } from "../core/facts/types.js";
2
- export declare function decodeArcDocument(source: string): Readonly<Omit<ArcData, "seq">>;
1
+ export declare function decodeArcDocument(source: string): Readonly<{
2
+ title: string;
3
+ body: string;
4
+ }>;
@@ -1,29 +1,22 @@
1
- import { sectionContent } from "../markdown/query.js";
2
- import { decodeDocumentEnvelope } from "./envelope.js";
3
- function refusal(message) {
4
- throw new TypeError(message);
5
- }
6
- function requiredProse(document, sections, name) {
7
- const section = sections.get(name);
8
- if (section === undefined)
9
- refusal(`arc document is missing ## ${name[0].toUpperCase()}${name.slice(1)}`);
10
- const value = sectionContent(document, section);
11
- if (value.trim().length === 0)
12
- refusal(`arc section '${section.title}' is empty`);
13
- return value;
14
- }
1
+ import { parseToAST } from "../markdown/parse.js";
2
+ import { indexDocument, indexedHeadings } from "../markdown/query.js";
3
+ const ARC_SHAPE = "arc document requires exactly one nonblank H1 chapter name (# <name>) followed by a freeform Markdown body (which may be empty)";
15
4
  export function decodeArcDocument(source) {
16
- const { document, title, sections } = decodeDocumentEnvelope(source, "arc");
17
- if (title.title.trim().length === 0)
18
- refusal("arc title must be nonblank");
19
- for (const [name, section] of sections) {
20
- if (name !== "objective" && name !== "brief") {
21
- refusal(`arc document does not allow ## ${section.title}`);
22
- }
5
+ let document;
6
+ try {
7
+ document = parseToAST(source);
8
+ }
9
+ catch {
10
+ throw new TypeError(ARC_SHAPE);
11
+ }
12
+ const titles = indexedHeadings(indexDocument(document), { level: 1 }).filter((node) => node.type === "section");
13
+ const title = titles[0];
14
+ if (document.frontmatter !== undefined ||
15
+ titles.length !== 1 ||
16
+ title === undefined ||
17
+ title.title.trim().length === 0 ||
18
+ source.slice(0, title.span.start).trim().length !== 0) {
19
+ throw new TypeError(ARC_SHAPE);
23
20
  }
24
- return {
25
- title: title.title,
26
- objective: requiredProse(document, sections, "objective"),
27
- brief: requiredProse(document, sections, "brief"),
28
- };
21
+ return { title: title.title, body: source.slice(title.contentStart) };
29
22
  }
@@ -0,0 +1,6 @@
1
+ import type { DocumentNode, SectionNode } from "../markdown/types.js";
2
+ import type { ContractCriterion } from "./types.js";
3
+ type CriteriaContext = "contract" | "amend";
4
+ export declare function criteriaStructure(document: DocumentNode, section: SectionNode, context?: CriteriaContext): string | null;
5
+ export declare function decodeCriteria(document: DocumentNode, section: SectionNode, context?: CriteriaContext): readonly ContractCriterion[];
6
+ export {};
@@ -0,0 +1,37 @@
1
+ import { directChildren, normalizeTitle, rawSlice } from "../markdown/query.js";
2
+ function criteriaHeadings(section) {
3
+ return directChildren(section, "heading").filter((heading) => heading.level === 3);
4
+ }
5
+ export function criteriaStructure(document, section, context = "contract") {
6
+ const label = context === "amend" ? "Criteria operation" : "Criteria";
7
+ const headings = criteriaHeadings(section);
8
+ if (headings.length === 0)
9
+ return `${label} must contain one or more H3 entries`;
10
+ const before = rawSlice(document, { start: section.contentStart, end: headings[0].span.start });
11
+ return before.trim().length === 0 ? null : `${label} may contain only H3 entries`;
12
+ }
13
+ export function decodeCriteria(document, section, context = "contract") {
14
+ const structural = criteriaStructure(document, section, context);
15
+ if (structural !== null)
16
+ throw new TypeError(structural);
17
+ const headings = criteriaHeadings(section);
18
+ const seen = new Set();
19
+ return headings.map((heading, index) => {
20
+ const title = heading.text.trim();
21
+ const key = normalizeTitle(title);
22
+ if (title.length === 0 || seen.has(key)) {
23
+ throw new TypeError(context === "amend"
24
+ ? "criteria operation contains duplicate or empty titles"
25
+ : `duplicate criterion '${title}'`);
26
+ }
27
+ seen.add(key);
28
+ const body = rawSlice(document, {
29
+ start: heading.span.end,
30
+ end: headings[index + 1]?.span.start ?? section.span.end,
31
+ });
32
+ if (body.trim().length === 0) {
33
+ throw new TypeError(context === "amend" ? `criterion '${title}' operation body is empty` : `criterion '${title}' is empty`);
34
+ }
35
+ return { title, body };
36
+ });
37
+ }
@@ -1,8 +1,9 @@
1
1
  import { mintDocumentKey, mintDocumentSegmentKey } from "./keys.js";
2
2
  import { decodeDocumentEnvelope } from "./envelope.js";
3
- import { directChildren, normalizeTitle, rawSlice, sectionContent } from "../markdown/query.js";
3
+ import { criteriaStructure, decodeCriteria } from "./criteria.js";
4
+ import { directChildren, rawSlice, sectionContent } from "../markdown/query.js";
4
5
  import { CONTRACT_SECTIONS, RESERVED_SECTIONS } from "./shape.js";
5
- import { decodeRegion, regionStructure, RegionDocumentError } from "./region.js";
6
+ import { decodeRegionOrRefusal, regionStructure } from "./region.js";
6
7
  import { decodeVerificationDeclarations, VerificationDocumentError } from "./verification.js";
7
8
  function refusal(message) {
8
9
  throw new TypeError(message);
@@ -18,13 +19,6 @@ function requireSections(sections) {
18
19
  function requiredSection(sections, name) {
19
20
  return sections.get(name);
20
21
  }
21
- function criteriaStructure(document, section) {
22
- const headings = directChildren(section, "heading").filter((heading) => heading.level === 3);
23
- if (headings.length === 0)
24
- return "Criteria must contain one or more H3 entries";
25
- const before = rawSlice(document, { start: section.contentStart, end: headings[0].span.start });
26
- return before.trim().length === 0 ? null : "Criteria may contain only H3 entries";
27
- }
28
22
  function verificationStructure(document, section) {
29
23
  const blocks = directChildren(section, "code_block");
30
24
  if (blocks.length === 0)
@@ -62,37 +56,6 @@ function prose(document, section) {
62
56
  refusal(`contract section '${section.title}' is empty`);
63
57
  return value;
64
58
  }
65
- function region(document, section) {
66
- try {
67
- return decodeRegion(document, section);
68
- }
69
- catch (error) {
70
- if (error instanceof RegionDocumentError)
71
- refusal(error.message);
72
- throw error;
73
- }
74
- }
75
- function criteria(document, section) {
76
- const structural = criteriaStructure(document, section);
77
- if (structural !== null)
78
- refusal(structural);
79
- const headings = directChildren(section, "heading").filter((heading) => heading.level === 3);
80
- const seen = new Set();
81
- return headings.map((heading, index) => {
82
- const title = heading.text.trim();
83
- const key = normalizeTitle(title);
84
- if (seen.has(key))
85
- refusal(`duplicate criterion '${title}'`);
86
- seen.add(key);
87
- const body = rawSlice(document, {
88
- start: heading.span.end,
89
- end: headings[index + 1]?.span.start ?? section.span.end,
90
- });
91
- if (body.trim().length === 0)
92
- refusal(`criterion '${title}' is empty`);
93
- return { title, body };
94
- });
95
- }
96
59
  function verification(document, section, options) {
97
60
  try {
98
61
  return decodeVerificationDeclarations(document, section, options);
@@ -129,8 +92,8 @@ export function decodeContractDocument(source, options = {}) {
129
92
  context: prose(document, requiredSection(sections, "context")),
130
93
  objective: prose(document, requiredSection(sections, "objective")),
131
94
  design: prose(document, requiredSection(sections, "design")),
132
- region: region(document, requiredSection(sections, "region")),
133
- criteria: criteria(document, requiredSection(sections, "criteria")),
95
+ region: decodeRegionOrRefusal(document, requiredSection(sections, "region")),
96
+ criteria: decodeCriteria(document, requiredSection(sections, "criteria")),
134
97
  verification: verificationSection === undefined ? [] : verification(document, verificationSection, options),
135
98
  extensions,
136
99
  };
@@ -12,4 +12,9 @@ export declare function regionStructure(section: SectionNode): string | null;
12
12
  /** A whitespace-bearing pattern is almost certainly strayed prose; bind warns and proceeds rather than rejecting. */
13
13
  export declare function regionWarnings(patterns: readonly string[]): readonly string[];
14
14
  export declare function decodeRegion(_document: DocumentNode, section: SectionNode): readonly string[];
15
+ /** Region decoding for body parsers: document errors surface as plain TypeError refusals. */
16
+ export declare function decodeRegionOrRefusal(document: DocumentNode, section: SectionNode): readonly string[];
17
+ export type RegionRelation = "same" | "mine-within-theirs" | "theirs-within-mine" | "intersect";
18
+ export type RegionOverlapPair = readonly [mine: string, theirs: string, relation: RegionRelation];
19
+ export declare function regionsOverlapWithRelation(mine: readonly string[], theirs: readonly string[]): readonly RegionOverlapPair[];
15
20
  export declare function regionsOverlap(mine: readonly string[], theirs: readonly string[]): readonly [string, string][];
@@ -201,16 +201,59 @@ export function decodeRegion(_document, section) {
201
201
  refusal("Region must declare at least one path pattern");
202
202
  return patterns.map((pattern) => compileRegionPattern(pattern).source);
203
203
  }
204
- export function regionsOverlap(mine, theirs) {
204
+ /** Region decoding for body parsers: document errors surface as plain TypeError refusals. */
205
+ export function decodeRegionOrRefusal(document, section) {
206
+ try {
207
+ return decodeRegion(document, section);
208
+ }
209
+ catch (error) {
210
+ if (error instanceof RegionDocumentError)
211
+ throw new TypeError(error.message);
212
+ throw error;
213
+ }
214
+ }
215
+ function literalPrefixWithDeepTail(pattern) {
216
+ if (pattern.segments.at(-1)?.kind !== "deep")
217
+ return null;
218
+ const prefix = pattern.segments.slice(0, -1);
219
+ if (prefix.some((segment) => segment.kind !== "segment" || segment.characters.some((character) => character === "*" || character === "?")))
220
+ return null;
221
+ return prefix.map((segment) => segment.characters.join(""));
222
+ }
223
+ function patternWithin(container, candidate) {
224
+ const prefix = literalPrefixWithDeepTail(container);
225
+ if (prefix === null)
226
+ return false;
227
+ const candidateSegments = candidate.segments;
228
+ if (candidateSegments.length < prefix.length)
229
+ return false;
230
+ return prefix.every((value, index) => {
231
+ const segment = candidateSegments[index];
232
+ return segment?.kind === "segment" && segment.characters.join("") === value;
233
+ });
234
+ }
235
+ function relationOf(mine, theirs) {
236
+ if (mine.source === theirs.source)
237
+ return "same";
238
+ if (patternWithin(theirs, mine))
239
+ return "mine-within-theirs";
240
+ if (patternWithin(mine, theirs))
241
+ return "theirs-within-mine";
242
+ return "intersect";
243
+ }
244
+ export function regionsOverlapWithRelation(mine, theirs) {
205
245
  const myPatterns = mine.map((pattern) => compileRegionPattern(pattern));
206
246
  const theirPatterns = theirs.map((pattern) => compileRegionPattern(pattern));
207
247
  const overlaps = [];
208
248
  for (const myPattern of myPatterns) {
209
249
  for (const theirPattern of theirPatterns) {
210
250
  if (patternsOverlap(myPattern.segments, theirPattern.segments)) {
211
- overlaps.push([myPattern.source, theirPattern.source]);
251
+ overlaps.push([myPattern.source, theirPattern.source, relationOf(myPattern, theirPattern)]);
212
252
  }
213
253
  }
214
254
  }
215
255
  return overlaps;
216
256
  }
257
+ export function regionsOverlap(mine, theirs) {
258
+ return regionsOverlapWithRelation(mine, theirs).map(([minePattern, theirsPattern]) => [minePattern, theirsPattern]);
259
+ }
@@ -31,10 +31,8 @@ function arcSection(arc) {
31
31
  String(arc.seq),
32
32
  "### Title",
33
33
  content(arc.title),
34
- "### Objective",
35
- content(arc.objective),
36
- "### Brief",
37
- content(arc.brief),
34
+ "### Body",
35
+ content(arc.body.replace(/^(?:\r?\n)+/u, "")),
38
36
  ].join("\n\n");
39
37
  }
40
38
  export function renderContractBody(body, currentArc) {
@@ -0,0 +1,26 @@
1
+ /**
2
+ * The one process-facing activity driver for observing Call, Ask and Wait. It owns the live frame's
3
+ * whole lifetime — settled-row emission, redrawable frame, one conclusion and honest close — so the
4
+ * three modes supply only their typed observation port and their native conclusion, never a second frame.
5
+ */
6
+ export declare class ActivityDriver {
7
+ private readonly stream;
8
+ private lines;
9
+ private concluded;
10
+ constructor(stream?: NodeJS.WriteStream);
11
+ /** Emit one settled row block, then redraw the retained live frame beneath it. */
12
+ settle(rows: readonly string[], frame: readonly string[]): void;
13
+ /** Replace the redrawable live frame. Non-TTY streams keep settled rows only. */
14
+ redraw(frame: readonly string[]): void;
15
+ /** Conclude the frame once with its final body and release it. */
16
+ conclude(body: string): void;
17
+ /**
18
+ * Close on failure or cancellation without inventing a conclusion. Any still-in-flight rows are
19
+ * emitted with their unresolved marks so the terminal shows what never settled, then the frame is
20
+ * released; a mode that already concluded contributes no rows and this is a no-op.
21
+ */
22
+ close(inFlight?: readonly string[]): void;
23
+ private write;
24
+ private draw;
25
+ private clear;
26
+ }