@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,40 +1,17 @@
1
- import { executionReceipt } from "./execution-result.js";
2
- import { decodeExecutionEvent, observeExecution } from "../protocol/execution-observation.js";
3
- import { contractId, snapshotId } from "../core/facts/types.js";
4
- import { AkumaBodyRequestError, requestBodyCommand } from "../akuma/request-rendezvous.js";
5
- import { eraseRequestCommand, } from "../akuma/request-wire.js";
6
- import { auditReportSchema, auditResultSchema, deliveryResultSchema, reviewResultSchema, } from "./mutation.js";
7
- import { decodeContractLiveFailure, encodeContractLiveFailure } from "./refusal.js";
8
1
  import { isAbsolute, resolve } from "node:path";
9
2
  import { z } from "zod";
3
+ import { AkumaBodyRequestError, requestBodyCommand } from "../akuma/request-rendezvous.js";
4
+ import { eraseRequestCommand, } from "../akuma/request-wire.js";
5
+ import { auditReportSchema } from "../protocol/audit.js";
6
+ import { materializedConflictSchema } from "../protocol/deliver.js";
7
+ import { decodeExecutionObservation, observeExecution, } from "../protocol/execution-observation.js";
8
+ import { contractIdSchema } from "../protocol/operations.js";
9
+ import { deliveryValueSchema } from "./delivery.js";
10
+ import { InvocationAccumulator } from "./invocation.js";
11
+ import { decodeFailureWire, encodeFailureWire, KeiyakuError, outcomeSchema, project, reviewSchema } from "./outcome.js";
10
12
  const absolutePathSchema = z.string().refine((value) => isAbsolute(value) && resolve(value) === value);
11
13
  const nonblankStringSchema = z.string().refine((value) => value.trim() !== "");
12
- const contractIdSchema = z.string().transform((value, context) => {
13
- try {
14
- return contractId(value);
15
- }
16
- catch {
17
- context.addIssue({ code: "custom", message: "expected ContractId" });
18
- return z.NEVER;
19
- }
20
- });
21
- const snapshotIdSchema = z.string().transform((value, context) => {
22
- try {
23
- return snapshotId(value);
24
- }
25
- catch {
26
- context.addIssue({ code: "custom", message: "expected SnapshotId" });
27
- return z.NEVER;
28
- }
29
- });
30
14
  const contractRequestBaseSchema = z.object({ repoRoot: absolutePathSchema, contractId: contractIdSchema }).strict();
31
- const conflictRecoverySchema = z
32
- .object({
33
- materialize: z.literal("deliver --materialize-conflict --include-dirty"),
34
- deliver: z.literal("deliver --include-dirty"),
35
- staging: z.literal("not-required"),
36
- })
37
- .strict();
38
15
  const auditRequestSchema = contractRequestBaseSchema
39
16
  .extend({
40
17
  includeDirty: z.boolean(),
@@ -76,26 +53,12 @@ const reviewReferenceSchema = z
76
53
  reviewFactId: nonblankStringSchema,
77
54
  })
78
55
  .strict();
79
- const materializedHandoffServiceSchema = z
80
- .object({
56
+ const materializedHandoffReferenceSchema = materializedConflictSchema;
57
+ const materializedHandoffServiceSchema = materializedConflictSchema
58
+ .extend({
81
59
  kind: z.literal("materialized-handoff"),
82
60
  repoRoot: absolutePathSchema,
83
61
  contractId: contractIdSchema,
84
- targetHead: snapshotIdSchema,
85
- handoffBase: snapshotIdSchema,
86
- recovery: conflictRecoverySchema,
87
- conflictPaths: z.array(nonblankStringSchema).transform((paths) => Object.freeze(paths)),
88
- workspace: z.object({ kind: z.literal("worktree"), path: nonblankStringSchema }).strict(),
89
- })
90
- .strict();
91
- const materializedHandoffReferenceSchema = z
92
- .object({
93
- kind: z.literal("integration-conflict-materialized"),
94
- targetHead: snapshotIdSchema,
95
- handoffBase: snapshotIdSchema,
96
- recovery: conflictRecoverySchema,
97
- conflictPaths: z.array(nonblankStringSchema).transform((paths) => Object.freeze(paths)),
98
- workspace: z.object({ kind: z.literal("worktree"), path: nonblankStringSchema }).strict(),
99
62
  })
100
63
  .strict();
101
64
  const contractServiceSchema = z.union([
@@ -144,86 +107,102 @@ function executionObservation(facts) {
144
107
  return {};
145
108
  return { observe: (event) => facts.progress?.(event) };
146
109
  }
110
+ function acceptedDeliveryEvidence(result) {
111
+ const leading = result.value.leading;
112
+ if (leading === undefined)
113
+ throw new Error("accepted delivery is missing its leading admission evidence");
114
+ return leading.fact;
115
+ }
116
+ function acceptedReviewEvidence(result, contractId) {
117
+ const review = result.facts.findLast((fact) => fact.contract === contractId && fact.kind === "attestation" && fact.data.gate === "reviewed");
118
+ if (review === undefined)
119
+ throw new Error("accepted review is missing its addressed journal fact");
120
+ return review.entry;
121
+ }
147
122
  async function executeContractRequest(request, facts, port) {
148
123
  const observation = executionObservation(facts);
149
124
  if (request.action === "contract.audit") {
150
- const served = await port.audit({
125
+ const result = await port.audit({
151
126
  ...request,
152
127
  ...observation,
153
128
  requester: facts.requester,
154
129
  signal: facts.signal,
155
130
  });
156
- if (served.auditReport === undefined)
157
- throw new Error(`Contract ${request.action} completed without durable service evidence`);
131
+ if (result.kind !== "accepted")
132
+ return { kind: "voided", outcome: result };
158
133
  return {
159
- result: served.result,
134
+ kind: "served",
135
+ result,
160
136
  service: {
161
137
  kind: "audit-report",
162
138
  repoRoot: request.repoRoot,
163
139
  contractId: request.contractId,
164
- report: served.auditReport,
140
+ report: result.value,
165
141
  },
166
142
  };
167
143
  }
168
144
  if (request.action === "contract.deliver") {
169
- const served = await port.deliver({
145
+ const result = await port.deliver({
170
146
  ...request,
171
147
  ...observation,
172
148
  overwrite: request.overwrite ?? false,
173
149
  requester: facts.requester,
174
150
  signal: facts.signal,
175
151
  });
176
- if ("kind" in served.result && served.result.kind === "integration-conflict-materialized") {
152
+ if (result.kind === "refused" || result.kind === "retry")
153
+ return { kind: "voided", outcome: result };
154
+ if (result.kind === "handoff") {
177
155
  return {
178
- result: served.result,
156
+ kind: "served",
157
+ result,
179
158
  service: {
180
159
  kind: "materialized-handoff",
181
160
  repoRoot: request.repoRoot,
182
161
  contractId: request.contractId,
183
- targetHead: served.result.targetHead,
184
- handoffBase: served.result.handoffBase,
185
- recovery: served.result.recovery,
186
- conflictPaths: served.result.conflictPaths,
187
- workspace: served.result.workspace,
162
+ targetHead: result.value.targetHead,
163
+ handoffBase: result.value.handoffBase,
164
+ recovery: result.value.recovery,
165
+ conflictPaths: result.value.conflictPaths,
166
+ workspace: result.value.workspace,
188
167
  },
189
168
  };
190
169
  }
191
- if (served.deliveryFactId === undefined)
192
- throw new Error(`Contract ${request.action} completed without durable service evidence`);
193
170
  return {
194
- result: served.result,
171
+ kind: "served",
172
+ result,
195
173
  service: {
196
174
  kind: "accepted-reference",
197
175
  repoRoot: request.repoRoot,
198
176
  contractId: request.contractId,
199
- deliveryFactId: served.deliveryFactId,
177
+ deliveryFactId: acceptedDeliveryEvidence(result),
200
178
  },
201
179
  };
202
180
  }
203
- const served = await port.review({
181
+ const result = await port.review({
204
182
  ...request,
205
183
  ...observation,
206
184
  requester: facts.requester,
207
185
  signal: facts.signal,
208
186
  });
209
- if (served.reviewFactId === undefined)
210
- throw new Error(`Contract ${request.action} completed without durable service evidence`);
187
+ if (result.kind !== "accepted")
188
+ return { kind: "voided", outcome: result };
211
189
  return {
212
- result: served.result,
190
+ kind: "served",
191
+ result,
213
192
  service: {
214
193
  kind: "accepted-reference",
215
194
  repoRoot: request.repoRoot,
216
195
  contractId: request.contractId,
217
- reviewFactId: served.reviewFactId,
196
+ reviewFactId: acceptedReviewEvidence(result, request.contractId),
218
197
  },
219
198
  };
220
199
  }
221
200
  function decodedContractResult(action, value) {
222
201
  const schema = action === "contract.audit"
223
- ? auditResultSchema
202
+ ? outcomeSchema("audit", auditReportSchema)
224
203
  : action === "contract.deliver"
225
- ? deliveryResultSchema
226
- : reviewResultSchema;
204
+ ? outcomeSchema("deliver", deliveryValueSchema, materializedHandoffReferenceSchema)
205
+ : outcomeSchema("review", reviewSchema);
227
206
  const parsed = schema.safeParse(value);
228
207
  if (!parsed.success)
229
208
  throw new Error(`transport integrity: Contract ${action} returned an invalid live result`);
@@ -240,8 +219,8 @@ export function contractRequestProtocol(action) {
240
219
  decodeRequest: (value) => decodeContractRequest(action, value),
241
220
  encodeResult: (value) => value,
242
221
  decodeResult: (value) => decodedContractResult(action, value),
243
- encodeFailure: encodeContractLiveFailure,
244
- decodeFailure: decodeContractLiveFailure,
222
+ encodeFailure: encodeFailureWire,
223
+ decodeFailure: (value) => decodeFailureWire(value),
245
224
  decodeReference: (reference) => decodeContractReference(action, reference),
246
225
  isPermitted: (allowed) => allowed.includes(action),
247
226
  };
@@ -271,7 +250,7 @@ export async function requestForwardedContractLive(input) {
271
250
  value: input.request,
272
251
  onProgress: (value) => {
273
252
  try {
274
- observeExecution(input.observe, decodeExecutionEvent(value));
253
+ observeExecution(input.observe, decodeExecutionObservation(value));
275
254
  }
276
255
  catch {
277
256
  observeExecution(input.observe, { kind: "progress-dropped", count: 1 });
@@ -279,23 +258,35 @@ export async function requestForwardedContractLive(input) {
279
258
  },
280
259
  onProgressGap: (count) => observeExecution(input.observe, { kind: "progress-dropped", count }),
281
260
  ...(input.signal === undefined ? {} : { signal: input.signal }),
282
- }).catch((error) => {
283
- if (error instanceof AkumaBodyRequestError &&
284
- error.outcome === "unproven" &&
285
- error.cause instanceof Error &&
286
- executionReceipt(error.cause) !== undefined) {
287
- Object.defineProperties(error.cause, {
288
- requestId: { value: error.requestId, enumerable: false },
289
- action: { value: error.action, enumerable: false },
290
- requestOutcome: { value: error.outcome, enumerable: false },
291
- });
292
- throw error.cause;
293
- }
294
- throw error;
295
- });
261
+ }).catch((error) => mapForwardedContractFailure(error, input.request));
296
262
  if (response.kind === "reference") {
297
263
  throw new Error(`transport integrity: request ${response.requestId} action ${response.action} returned a durable reference without a live result`);
298
264
  }
299
265
  return response.result;
300
266
  }
301
- export { executeLocalDelivery, executeLocalReview, executeForwardedAudit, executeForwardedDeliver, executeForwardedReview, } from "./contract-forwarding.js";
267
+ /** Map durable request disposition without reconstructing an expired owner answer. */
268
+ export function mapForwardedContractFailure(error, request) {
269
+ if (error instanceof AkumaBodyRequestError && error.outcome === "voided") {
270
+ const operation = request.action === "contract.audit" ? "audit" : request.action === "contract.review" ? "review" : "deliver";
271
+ const projected = project(operation, new InvocationAccumulator().snapshot(), {
272
+ kind: "retry",
273
+ contract: request.contractId,
274
+ reason: { kind: "owner-reason-unavailable", diagnostic: error.diagnostic },
275
+ });
276
+ if (projected.kind === "failed")
277
+ throw projected.error;
278
+ return { kind: "returned", result: projected.outcome };
279
+ }
280
+ if (error instanceof AkumaBodyRequestError &&
281
+ error.outcome === "unproven" &&
282
+ error.cause instanceof Error &&
283
+ error.cause instanceof KeiyakuError) {
284
+ Object.defineProperties(error.cause, {
285
+ requestId: { value: error.requestId, enumerable: false },
286
+ action: { value: error.action, enumerable: false },
287
+ requestOutcome: { value: error.outcome, enumerable: false },
288
+ });
289
+ throw error.cause;
290
+ }
291
+ throw error;
292
+ }
@@ -0,0 +1,71 @@
1
+ /** @architectureCompositionRoot */
2
+ import type { ContractId, Gate } from "../core/facts/types.js";
3
+ import type { AuditReport } from "../protocol/audit.js";
4
+ import type { ExecutionObserver } from "../protocol/execution-observation.js";
5
+ import type { IntentOutcome, IntentRetry } from "../protocol/operations.js";
6
+ import type { ContractWorkspaceLocation } from "../workspace-place.js";
7
+ import type { Delivery, DeliveryValue } from "./delivery.js";
8
+ import type { InvocationAccumulator } from "./invocation.js";
9
+ import type { Keiyaku } from "./keiyaku.js";
10
+ import type { ContractVerb, HandoffOutcome, OperationOutcome, OutcomeProjection, Review } from "./outcome.js";
11
+ import type { OperationRefusals } from "./refusal.js";
12
+ import type { AmendRegionObservation, RegionObservation } from "./region.js";
13
+ export type BindValue = Readonly<{
14
+ keiyaku: Keiyaku;
15
+ workspace?: ContractWorkspaceLocation;
16
+ warnings?: readonly string[];
17
+ }> & RegionObservation;
18
+ export type AmendValue = Readonly<{
19
+ documentDiff: string;
20
+ changes: Readonly<{
21
+ gates?: readonly Gate[];
22
+ after?: readonly ContractId[];
23
+ }>;
24
+ }> & AmendRegionObservation;
25
+ export type BindOutcome = OperationOutcome<"bind", BindValue, OperationRefusals["bind"]>;
26
+ export type AmendOutcome = OperationOutcome<"amend", AmendValue, OperationRefusals["amend"]>;
27
+ export type DeliverOutcome = OperationOutcome<"deliver", Delivery & DeliveryValue, OperationRefusals["deliver"]> | HandoffOutcome;
28
+ export type ReviewOutcome = OperationOutcome<"review", Review, OperationRefusals["review"]>;
29
+ export type AuditOutcome = OperationOutcome<"audit", AuditReport, OperationRefusals["audit"]>;
30
+ export type ArcOutcome = OperationOutcome<"arc", void, OperationRefusals["arc"]>;
31
+ export type AbandonOutcome = OperationOutcome<"abandon", void, OperationRefusals["abandon"]>;
32
+ export type MutationObservation = Readonly<{
33
+ observe?: ExecutionObserver;
34
+ }>;
35
+ export type AuditInput = Readonly<{
36
+ includeDirty?: boolean;
37
+ showDiff?: boolean;
38
+ signal?: AbortSignal;
39
+ }>;
40
+ export type BindResult = BindOutcome;
41
+ type AcceptedIntent<Value> = Extract<IntentOutcome<Value>, {
42
+ kind: "accepted";
43
+ }>;
44
+ type Admission<Value, Refusal> = Readonly<{
45
+ kind: "accepted";
46
+ accepted: AcceptedIntent<Value>;
47
+ }> | Readonly<{
48
+ kind: "refused";
49
+ refusal: Refusal;
50
+ }> | Readonly<{
51
+ kind: "retry";
52
+ reason: IntentRetry;
53
+ }>;
54
+ export declare function admissionOf<Value, Refusal>(outcome: IntentOutcome<Value, Refusal>): Admission<Value, Refusal>;
55
+ /** The refused/retry arms are value-agnostic, so every operation can return them unchanged. */
56
+ type ExpectedProjection<Refusal> = Readonly<{
57
+ kind: "refused";
58
+ contract?: ContractId;
59
+ refusal: Refusal;
60
+ }> | Readonly<{
61
+ kind: "retry";
62
+ contract?: ContractId;
63
+ reason: IntentRetry;
64
+ }>;
65
+ export declare function expected<Refusal>(contract: ContractId | undefined, admission: Exclude<Admission<unknown, Refusal>, {
66
+ kind: "accepted";
67
+ }>): ExpectedProjection<Refusal>;
68
+ export declare function acceptedOutcome<Operation extends ContractVerb, Value>(operation: Operation, contract: ContractId, accumulator: InvocationAccumulator, value: Value): OutcomeProjection<Operation, Value, never>;
69
+ export declare function conclusions(value: object): Readonly<Record<string, unknown>>;
70
+ export declare function retainAdmission<Value>(accumulator: InvocationAccumulator, contract: ContractId, leading: AcceptedIntent<Value>, verificationResidueRecorded: boolean): void;
71
+ export {};
@@ -0,0 +1,32 @@
1
+ export function admissionOf(outcome) {
2
+ if (outcome.kind === "accepted")
3
+ return { kind: "accepted", accepted: outcome };
4
+ return outcome.kind === "refused"
5
+ ? { kind: "refused", refusal: outcome.refusal }
6
+ : { kind: "retry", reason: outcome.reason };
7
+ }
8
+ export function expected(contract, admission) {
9
+ return admission.kind === "refused"
10
+ ? {
11
+ kind: "refused",
12
+ ...(contract === undefined ? {} : { contract }),
13
+ refusal: admission.refusal,
14
+ }
15
+ : { kind: "retry", ...(contract === undefined ? {} : { contract }), reason: admission.reason };
16
+ }
17
+ export function acceptedOutcome(operation, contract, accumulator, value) {
18
+ void operation;
19
+ const head = accumulator.head(contract);
20
+ if (head === undefined)
21
+ throw new Error("missing leading admission receipt");
22
+ return { kind: "accepted", contract, head, value };
23
+ }
24
+ export function conclusions(value) {
25
+ return value;
26
+ }
27
+ export function retainAdmission(accumulator, contract, leading, verificationResidueRecorded) {
28
+ accumulator.recordPublication(contract, leading.head, leading.facts);
29
+ accumulator.recordResidue(contract, leading);
30
+ if (!verificationResidueRecorded)
31
+ accumulator.recordVerification(contract, undefined, leading);
32
+ }
@@ -0,0 +1,25 @@
1
+ /** @architectureCompositionRoot */
2
+ import { type ActorId, type Gate } from "../core/facts/types.js";
3
+ import { type WorktreeHooks } from "../git/hooks.js";
4
+ import { type Settings } from "../settings.js";
5
+ import type { LocalContractComposition } from "./contract-types.js";
6
+ /** The one immutable Contract-local composition captured at construction. */
7
+ export type LocalContractCompositionCapture = Readonly<{
8
+ settings?: Settings;
9
+ actor?: ActorId;
10
+ }>;
11
+ /**
12
+ * Hooks, freshness, and gate bundles are read from the captured Settings only at the operation
13
+ * that consumes them. Bare core (omitted Settings) keeps empty hooks, false freshness, and
14
+ * literal gate words; a broken selected namespace fails before any admission.
15
+ */
16
+ export declare function derivedHooks(composition: LocalContractCompositionCapture): WorktreeHooks;
17
+ /** The two Settings-derived Contract policies one mutating operation may consume. */
18
+ export declare function derivedContractPolicy(composition: LocalContractCompositionCapture): Readonly<{
19
+ hooks: WorktreeHooks;
20
+ requireBranchesToBeUpToDate: boolean;
21
+ }>;
22
+ export declare function gateNames(value: unknown): readonly string[] | undefined;
23
+ /** Bare words and configured bundles share validation, first-seen accumulation, and freezing. */
24
+ export declare function derivedGates(composition: LocalContractCompositionCapture, names: readonly string[] | undefined): readonly Gate[];
25
+ export declare function captureLocalContractComposition(input?: LocalContractComposition): LocalContractCompositionCapture;
@@ -0,0 +1,135 @@
1
+ /** @architectureCompositionRoot */
2
+ import { gate, gateWord } from "../core/facts/types.js";
3
+ import { EMPTY_WORKTREE_HOOKS, worktreeHooksFrom } from "../git/hooks.js";
4
+ import { SettingsError } from "../settings.js";
5
+ import { actorOption, requireInput } from "./input.js";
6
+ import { KeiyakuError } from "./outcome.js";
7
+ /** One scoped Settings lookup: its native failure stays the cause of caller-invalid input. */
8
+ function settingsScopedFailure(error) {
9
+ if (error instanceof SettingsError)
10
+ throw new KeiyakuError("invalid-input", error.message, { cause: error });
11
+ throw error;
12
+ }
13
+ /**
14
+ * Hooks, freshness, and gate bundles are read from the captured Settings only at the operation
15
+ * that consumes them. Bare core (omitted Settings) keeps empty hooks, false freshness, and
16
+ * literal gate words; a broken selected namespace fails before any admission.
17
+ */
18
+ export function derivedHooks(composition) {
19
+ if (composition.settings === undefined)
20
+ return EMPTY_WORKTREE_HOOKS;
21
+ try {
22
+ return worktreeHooksFrom({ settings: composition.settings });
23
+ }
24
+ catch (error) {
25
+ return settingsScopedFailure(error);
26
+ }
27
+ }
28
+ function derivedFreshness(composition) {
29
+ if (composition.settings === undefined)
30
+ return false;
31
+ try {
32
+ const view = composition.settings.namespace("git");
33
+ if (view.kind === "failed")
34
+ namespaceFailure(view);
35
+ for (const entry of view.entries) {
36
+ if (entry.name !== "requireBranchesToBeUpToDate") {
37
+ throw new SettingsError(`git has unknown entry: ${entry.name}`);
38
+ }
39
+ }
40
+ const selected = view.entries.find((entry) => entry.name === "requireBranchesToBeUpToDate");
41
+ if (selected === undefined)
42
+ return false;
43
+ if (typeof selected.value !== "boolean") {
44
+ throw new SettingsError("git.requireBranchesToBeUpToDate must be a boolean");
45
+ }
46
+ return selected.value;
47
+ }
48
+ catch (error) {
49
+ return settingsScopedFailure(error);
50
+ }
51
+ }
52
+ /** The two Settings-derived Contract policies one mutating operation may consume. */
53
+ export function derivedContractPolicy(composition) {
54
+ return { hooks: derivedHooks(composition), requireBranchesToBeUpToDate: derivedFreshness(composition) };
55
+ }
56
+ export function gateNames(value) {
57
+ if (value === undefined)
58
+ return undefined;
59
+ if (!Array.isArray(value))
60
+ throw new TypeError("gates must be an array");
61
+ return value.map((item, index) => {
62
+ if (typeof item !== "string")
63
+ throw new TypeError(`gates[${index}] must be a string`);
64
+ return item;
65
+ });
66
+ }
67
+ function namespaceFailure(view) {
68
+ throw new SettingsError(view.failures.map((failure) => `${failure.scope}: ${failure.diagnostic}`).join("; "));
69
+ }
70
+ function gateValue(value, message, configured) {
71
+ if (!gateWord(value)) {
72
+ if (configured)
73
+ throw new SettingsError(message);
74
+ throw new KeiyakuError("invalid-input", message, { cause: new TypeError(message) });
75
+ }
76
+ return gate(value);
77
+ }
78
+ function bundleGates(name, value) {
79
+ if (value === null || typeof value !== "object" || Array.isArray(value)) {
80
+ throw new SettingsError(`gate bundle '${name}' must be an object`);
81
+ }
82
+ const bundle = value;
83
+ if (bundle.kind !== "bundle") {
84
+ throw new SettingsError(`gate bundle '${name}' has unsupported kind: ${String(bundle.kind)}`);
85
+ }
86
+ for (const field of Object.keys(bundle)) {
87
+ if (field !== "kind" && field !== "gates") {
88
+ throw new SettingsError(`gate bundle '${name}' has unknown field: ${field}`);
89
+ }
90
+ }
91
+ if (!Array.isArray(bundle.gates))
92
+ throw new SettingsError(`gate bundle '${name}'.gates must be an array`);
93
+ return bundle.gates.map((value) => gateValue(value, `gate bundle '${name}' contains an invalid gate word`, true));
94
+ }
95
+ /** Bare words and configured bundles share validation, first-seen accumulation, and freezing. */
96
+ export function derivedGates(composition, names) {
97
+ const settings = composition.settings;
98
+ const configured = settings !== undefined;
99
+ try {
100
+ const selected = (names ?? (configured ? ["default"] : [])).map((name, index) => gateValue(name, configured
101
+ ? "gate or bundle name must match ^[a-z][a-z0-9-]{0,63}$"
102
+ : `gates[${index}] must match ^[a-z][a-z0-9-]{0,63}$`, configured));
103
+ // Explicit empty selection never looks up a namespace.
104
+ if (selected.length === 0)
105
+ return Object.freeze([]);
106
+ const view = settings?.namespace("gates");
107
+ if (view?.kind === "failed")
108
+ namespaceFailure(view);
109
+ const expanded = new Set();
110
+ for (const name of selected) {
111
+ const entry = view?.entries.find((entry) => entry.name === name);
112
+ const gates = entry === undefined
113
+ ? [configured && names === undefined ? gate("reviewed") : name]
114
+ : bundleGates(name, entry.value);
115
+ for (const value of gates)
116
+ expanded.add(value);
117
+ }
118
+ return Object.freeze([...expanded]);
119
+ }
120
+ catch (error) {
121
+ return settingsScopedFailure(error);
122
+ }
123
+ }
124
+ export function captureLocalContractComposition(input) {
125
+ const values = requireInput(input === undefined ? {} : input, "Keiyaku.with input", ["settings", "actor"]);
126
+ const actor = actorOption(values.actor).actor;
127
+ const settings = values.settings;
128
+ if (settings !== undefined && (settings === null || typeof settings !== "object")) {
129
+ throw new TypeError("Keiyaku.with settings must be a Settings value");
130
+ }
131
+ return Object.freeze({
132
+ ...(actor === undefined ? {} : { actor }),
133
+ ...(settings === undefined ? {} : { settings: settings }),
134
+ });
135
+ }
@@ -1,26 +1,14 @@
1
- import type { ContractId, JournalEntry, SnapshotId } from "../core/facts/types.js";
2
- import type { ContractFileEffect, ContractFileLag } from "../contract-worktree.js";
3
- import type { ReconcileReport as ProtocolReconcileReport } from "../protocol/reconcile.js";
1
+ import type { AttestationData, ContractId, JournalEntry, SnapshotId } from "../core/facts/types.js";
4
2
  import type { Dispatch } from "../dispatch/index.js";
5
- import type { Gate, WorktreeHooks } from "./configuration.js";
6
- import type { AmendRegionObservation, RegionObservation } from "./region.js";
7
- import type { Repo } from "./repo.js";
8
- import type { MutationResult } from "./mutation.js";
9
- import type { SettlementReport } from "../settlement/settle.js";
10
- import type { AttestationVerdict } from "./contract.js";
11
- import type { Keiyaku } from "./contract-handle.js";
12
3
  import type { ContractBoard, ContractRow } from "../protocol/read/status.js";
4
+ import type { Settings } from "../settings.js";
13
5
  import type { TaskId } from "../task/identity.js";
14
- import type { ContractWorkspaceLocation } from "../workspace-place.js";
15
- export type BindResult = Readonly<Omit<MutationResult<Keiyaku>, "value"> & {
16
- keiyaku: Keiyaku;
17
- workspace?: ContractWorkspaceLocation;
18
- warnings?: readonly string[];
19
- } & RegionObservation>;
20
- export type Fact = JournalEntry;
6
+ import type { Repo } from "./repo.js";
7
+ /** Public gate words remain ordinary strings; private policy interprets them. */
8
+ export type Gate = string;
21
9
  export type ContractHistoryEvent = Readonly<{
22
10
  source: "journal";
23
- fact: Fact;
11
+ fact: JournalEntry;
24
12
  }> | Readonly<{
25
13
  source: "dispatch";
26
14
  dispatch: Dispatch;
@@ -28,19 +16,13 @@ export type ContractHistoryEvent = Readonly<{
28
16
  export type ContractHistory = Readonly<{
29
17
  id: ContractId;
30
18
  state: SnapshotId;
19
+ workspace?: Readonly<{
20
+ kind: "worktree";
21
+ path: string;
22
+ }>;
31
23
  events: readonly ContractHistoryEvent[];
32
24
  }>;
33
- export type TopologyEffect = ProtocolReconcileReport["effects"][number] | ContractFileEffect;
34
- export type Lag = ProtocolReconcileReport["lag"][number] | ContractFileLag;
35
- export type AmendResult = Readonly<MutationResult<void> & {
36
- documentDiff: string;
37
- }> & AmendRegionObservation;
38
- export type ReconcileReport = Readonly<{
39
- effects: readonly (ProtocolReconcileReport["effects"][number] | ContractFileEffect)[];
40
- lag: readonly (ProtocolReconcileReport["lag"][number] | ContractFileLag)[];
41
- settlement: SettlementReport;
42
- }>;
43
- export type MarkdownBindInput = Readonly<{
25
+ type MarkdownBindInput = Readonly<{
44
26
  repo: Repo;
45
27
  markdown: string;
46
28
  task?: TaskId;
@@ -48,31 +30,28 @@ export type MarkdownBindInput = Readonly<{
48
30
  workspace?: "worktree";
49
31
  actor?: string;
50
32
  after?: readonly ContractId[];
51
- gates?: readonly Gate[];
52
- hooks?: WorktreeHooks;
33
+ gates?: readonly string[];
53
34
  }>;
54
- export type ForkBindInput = Readonly<{
35
+ type ForkBindInput = Readonly<{
55
36
  repo: Repo;
56
37
  forkOf: ContractId;
57
38
  target?: string;
58
39
  workspace?: "worktree";
59
40
  actor?: string;
60
- hooks?: WorktreeHooks;
61
41
  }>;
62
42
  export type BindInput = MarkdownBindInput | ForkBindInput;
63
43
  type ActorOptions = Readonly<{
64
44
  actor?: string;
65
- hooks?: WorktreeHooks;
66
45
  }>;
46
+ /** Contract-local composition: one captured Settings selection and the operation actor. */
67
47
  export type LocalContractComposition = Readonly<{
48
+ settings?: Settings;
68
49
  actor?: string;
69
- hooks?: WorktreeHooks;
70
- requireBranchesToBeUpToDate?: boolean;
71
50
  }>;
72
51
  export type AmendInput = ActorOptions & Readonly<{
73
52
  markdown?: string;
74
53
  after?: readonly ContractId[];
75
- gates?: readonly Gate[];
54
+ gates?: readonly string[];
76
55
  }>;
77
56
  export type ArcInput = ActorOptions & Readonly<{
78
57
  markdown: string;
@@ -94,7 +73,7 @@ export type KeiyakuSelectInput = Readonly<{
94
73
  id: ContractId;
95
74
  }>;
96
75
  export type ReviewInput = Readonly<{
97
- verdict: AttestationVerdict;
76
+ verdict: AttestationData["verdict"];
98
77
  summary?: string;
99
78
  signal?: AbortSignal;
100
79
  }>;