@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,10 +1,8 @@
1
- import { chmod, lstat, readFile, unlink } from "node:fs/promises";
1
+ import { z } from "zod";
2
+ import { chmod, lstat, readFile } from "node:fs/promises";
2
3
  import { join } from "node:path";
3
- import { acquireSqliteTransactionLock } from "./coordination/sqlite-transaction-lock.js";
4
4
  import { repairDerivedFile } from "./coordination/durable-file.js";
5
- import { contractId } from "./core/facts/types.js";
6
- import { CONTRACT_DELIVERER_SKILL, CONTRACT_REVIEWER_SKILL, CONTRACT_ONBOARDING_SKILL, renderContractAppointment, renderContractGuidance, } from "./contract-guidance.js";
7
- import { worktreeGitDirectory, worktreeRoot } from "./git/repository.js";
5
+ import { CONTRACT_DELIVERER_SKILL, CONTRACT_REVIEWER_SKILL, CONTRACT_ONBOARDING_SKILL, renderContractGuidance, } from "./contract-guidance.js";
8
6
  import { GitPlumbingError, runGit } from "./git/process.js";
9
7
  import { worktreePath } from "./git/workspace.js";
10
8
  import { appointmentFor, placeRegisterPath } from "./workspace-place.js";
@@ -18,22 +16,21 @@ const SEAT_SKILLS = [
18
16
  ["keiyaku-deliver", CONTRACT_DELIVERER_SKILL],
19
17
  ["keiyaku-review", CONTRACT_REVIEWER_SKILL],
20
18
  ];
21
- export function decodeContractFileLag(value) {
22
- if (value === null || typeof value !== "object" || Array.isArray(value))
23
- throw new Error("malformed contract-file lag");
24
- const object = value;
25
- if (object.kind !== "contract-file-failed")
26
- throw new Error("malformed contract-file lag");
27
- if (Object.keys(object).some((key) => key !== "kind" && key !== "worktree" && key !== "path" && key !== "diagnostic"))
28
- throw new Error("malformed contract-file lag");
29
- if (typeof object.worktree !== "string" || object.worktree.trim() === "")
30
- throw new Error("malformed contract-file lag");
31
- if (typeof object.path !== "string" || object.path.trim() === "")
32
- throw new Error("malformed contract-file lag");
33
- if (typeof object.diagnostic !== "string" || object.diagnostic.trim() === "")
34
- throw new Error("malformed contract-file lag");
35
- return { kind: "contract-file-failed", worktree: object.worktree, path: object.path, diagnostic: object.diagnostic };
36
- }
19
+ export const contractFileEffectSchema = z
20
+ .object({
21
+ kind: z.literal("contract-file"),
22
+ path: z.string().refine((value) => value.trim() !== ""),
23
+ action: z.enum(["created", "updated", "unchanged", "removed"]),
24
+ })
25
+ .strict();
26
+ export const contractFileLagSchema = z
27
+ .object({
28
+ kind: z.literal("contract-file-failed"),
29
+ worktree: z.string().refine((value) => value.trim() !== ""),
30
+ path: z.string().refine((value) => value.trim() !== ""),
31
+ diagnostic: z.string().refine((value) => value.trim() !== ""),
32
+ })
33
+ .strict();
37
34
  async function isTracked(repository, relativePath) {
38
35
  try {
39
36
  await runGit(repository, ["ls-files", "--error-unmatch", "--", relativePath]);
@@ -48,55 +45,6 @@ async function isTracked(repository, relativePath) {
48
45
  function generatedPath(worktree, name) {
49
46
  return join(worktree, ".keiyaku", name);
50
47
  }
51
- function appointedContract(bytes) {
52
- const lines = bytes.split(/\r?\n/u), close = lines.indexOf("---", 1);
53
- if (lines[0] !== "---" || (close !== 2 && close !== 3) || !lines[1]?.startsWith("contract: "))
54
- return undefined;
55
- if (close === 3 && !lines[2]?.startsWith("description: "))
56
- return undefined;
57
- try {
58
- return contractId(lines[1].slice("contract: ".length));
59
- }
60
- catch {
61
- return undefined;
62
- }
63
- }
64
- export async function readContractAppointment(repository) {
65
- const path = generatedPath(await worktreeRoot(repository), "KEIYAKU.md");
66
- const stat = await lstat(path).catch((error) => error.code === "ENOENT" ? undefined : Promise.reject(error));
67
- if (stat === undefined)
68
- return { kind: "absent", path };
69
- if (!stat.isFile() || stat.isSymbolicLink())
70
- return { kind: "invalid", path };
71
- const contract = appointedContract(await readFile(path, "utf8"));
72
- return contract === undefined ? { kind: "invalid", path } : { kind: "appointed", path, contract };
73
- }
74
- export async function withContractWorktreeAppointment(repository, action) {
75
- const root = await worktreeRoot(repository);
76
- const lock = await acquireSqliteTransactionLock({
77
- path: join(await worktreeGitDirectory(repository, root), "keiyaku", "contract-worktree.sqlite"),
78
- mode: "immediate",
79
- });
80
- try {
81
- return await action();
82
- }
83
- finally {
84
- lock.close();
85
- }
86
- }
87
- export async function releaseContractWorktree(repository, contract) {
88
- const appointment = await readContractAppointment(repository);
89
- if (appointment.kind !== "appointed" || appointment.contract !== contract)
90
- return;
91
- if ((await readFile(appointment.path, "utf8")) !== renderContractAppointment(contract))
92
- return;
93
- try {
94
- await unlink(appointment.path);
95
- }
96
- catch {
97
- /* reservation cleanup is best effort */
98
- }
99
- }
100
48
  async function repair(repository, worktree, relativePath, bytes) {
101
49
  const path = join(worktree, relativePath);
102
50
  if (await isTracked(repository, relativePath))
@@ -1,5 +1,5 @@
1
1
  export declare function syncDirectory(path: string): void;
2
2
  export declare function replaceFileDurably(path: string, bytes: string | Uint8Array): Promise<void>;
3
- export type DerivedFileAction = "created" | "updated" | "unchanged";
4
- export declare function createFileDurablyExclusive(path: string, bytes: string | Uint8Array, mode?: number): Promise<boolean>;
3
+ type DerivedFileAction = "created" | "updated" | "unchanged";
5
4
  export declare function repairDerivedFile(path: string, bytes: string | Uint8Array): Promise<DerivedFileAction>;
5
+ export {};
@@ -42,33 +42,6 @@ export async function replaceFileDurably(path, bytes) {
42
42
  }
43
43
  }
44
44
  }
45
- export async function createFileDurablyExclusive(path, bytes, mode = 0o600) {
46
- const parent = dirname(path);
47
- await mkdir(parent, { recursive: true });
48
- let descriptor;
49
- try {
50
- descriptor = openSync(path, "wx", mode);
51
- writeFileSync(descriptor, bytes);
52
- fsyncSync(descriptor);
53
- closeSync(descriptor);
54
- descriptor = undefined;
55
- syncDirectory(parent);
56
- return true;
57
- }
58
- catch (error) {
59
- if (descriptor !== undefined)
60
- closeSync(descriptor);
61
- if (error.code === "EEXIST")
62
- return false;
63
- try {
64
- await unlink(path);
65
- }
66
- catch {
67
- /* absent or best-effort cleanup */
68
- }
69
- throw error;
70
- }
71
- }
72
45
  export async function repairDerivedFile(path, bytes) {
73
46
  const expected = Buffer.from(bytes);
74
47
  await mkdir(dirname(path), { recursive: true });
@@ -1,6 +1,5 @@
1
- import type { DeliverData, JournalEntry } from "./types.js";
1
+ import type { JournalEntry } from "./types.js";
2
2
  /** Validate one in-memory journal value with the persisted-fact authority. */
3
3
  export declare function decodeJournalEntry(value: unknown): JournalEntry;
4
- export declare function decodeDeliverData(value: unknown): DeliverData;
5
4
  export declare function encodeEntry(entry: JournalEntry): string;
6
5
  export declare function decodeJournal(journal: string): JournalEntry[];
@@ -131,7 +131,8 @@ function validateAttestation(value, path) {
131
131
  }
132
132
  function validateArc(value, path) {
133
133
  const object = requireRecord(value, path);
134
- requireKeys(object, ["seq", "title", "objective", "brief"], path);
134
+ const freeform = "body" in object;
135
+ requireKeys(object, freeform ? ["seq", "title", "body"] : ["seq", "title", "objective", "brief"], path);
135
136
  const seq = object.seq;
136
137
  if (typeof seq !== "number" || !Number.isSafeInteger(seq) || seq < 1) {
137
138
  fail(`${path}.seq`, "expected a positive safe integer");
@@ -139,8 +140,9 @@ function validateArc(value, path) {
139
140
  return {
140
141
  seq,
141
142
  title: stringValue(object.title, `${path}.title`),
142
- objective: stringValue(object.objective, `${path}.objective`),
143
- brief: stringValue(object.brief, `${path}.brief`),
143
+ body: freeform
144
+ ? stringValue(object.body, `${path}.body`, false)
145
+ : `${stringValue(object.objective, `${path}.objective`)}\n\n${stringValue(object.brief, `${path}.brief`)}`,
144
146
  };
145
147
  }
146
148
  function validateData(kind, value) {
@@ -239,9 +241,6 @@ function validateEntry(value) {
239
241
  export function decodeJournalEntry(value) {
240
242
  return validateEntry(value);
241
243
  }
242
- export function decodeDeliverData(value) {
243
- return validateData("deliver", value);
244
- }
245
244
  function canonicalValue(value) {
246
245
  if (value === null)
247
246
  return "null";
@@ -281,7 +280,7 @@ function decodeEntry(line) {
281
280
  throw new AuthorityCorruptionError("journal entry is not valid JSON", { cause: error });
282
281
  }
283
282
  const entry = validateEntry(value);
284
- if (canonicalJson(entry) !== body)
283
+ if (canonicalJson(value) !== body)
285
284
  throw new AuthorityCorruptionError("journal entry is not canonical");
286
285
  return entry;
287
286
  }
@@ -21,7 +21,6 @@ export type GateReport = Readonly<{
21
21
  gate: Gate;
22
22
  current: GateCurrent;
23
23
  }>;
24
- export declare function decodeGateReport(value: unknown): GateReport;
25
24
  export type GateReports = Readonly<{
26
25
  reports: readonly GateReport[];
27
26
  satisfied: boolean;
@@ -1,86 +1,4 @@
1
1
  import { dependencyKeys, currentSubjectPredicate } from "../subject.js";
2
- import { gate } from "./types.js";
3
- function fail() {
4
- throw new Error("malformed gate report");
5
- }
6
- function object(value) {
7
- if (value === null || typeof value !== "object" || Array.isArray(value))
8
- fail();
9
- return value;
10
- }
11
- function decodeAttestedGateCurrent(current) {
12
- for (const key of Object.keys(current)) {
13
- if (key !== "kind" && key !== "verdict" && key !== "at" && key !== "summary")
14
- fail();
15
- }
16
- if (current.kind !== "attested")
17
- fail();
18
- if (current.verdict !== "satisfied" && current.verdict !== "unsatisfied")
19
- fail();
20
- if (typeof current.at !== "string")
21
- fail();
22
- return {
23
- kind: "attested",
24
- verdict: current.verdict,
25
- at: current.at,
26
- ...(current.summary === undefined
27
- ? {}
28
- : { summary: typeof current.summary === "string" ? current.summary : fail() }),
29
- };
30
- }
31
- function decodeStaleReason(value) {
32
- const reasonObject = object(value);
33
- for (const key of Object.keys(reasonObject)) {
34
- if (key !== "kind" && key !== "target" && key !== "previousChange" && key !== "currentChange")
35
- fail();
36
- }
37
- if (reasonObject.kind !== "candidate-content-changed" ||
38
- (reasonObject.target !== undefined && typeof reasonObject.target !== "string") ||
39
- typeof reasonObject.previousChange !== "string" ||
40
- typeof reasonObject.currentChange !== "string")
41
- fail();
42
- return {
43
- kind: "candidate-content-changed",
44
- ...(reasonObject.target === undefined ? {} : { target: reasonObject.target }),
45
- previousChange: reasonObject.previousChange,
46
- currentChange: reasonObject.currentChange,
47
- };
48
- }
49
- function decodeGateCurrent(value) {
50
- const current = object(value);
51
- if (current.kind === "missing") {
52
- if (Object.keys(current).length !== 1)
53
- fail();
54
- return { kind: "missing" };
55
- }
56
- if (current.kind === "stale") {
57
- if (current.priorVerdict !== "satisfied" && current.priorVerdict !== "unsatisfied")
58
- fail();
59
- const reason = current.reason === undefined ? undefined : decodeStaleReason(current.reason);
60
- if (Object.keys(current).length !== (reason === undefined ? 2 : 3))
61
- fail();
62
- return { kind: "stale", priorVerdict: current.priorVerdict, ...(reason === undefined ? {} : { reason }) };
63
- }
64
- return decodeAttestedGateCurrent(current);
65
- }
66
- export function decodeGateReport(value) {
67
- const record = object(value);
68
- if (!("gate" in record) || !("current" in record))
69
- fail();
70
- for (const key of Object.keys(record))
71
- if (key !== "gate" && key !== "current")
72
- fail();
73
- let decodedGate;
74
- try {
75
- if (typeof record.gate !== "string")
76
- fail();
77
- decodedGate = gate(record.gate);
78
- }
79
- catch {
80
- fail();
81
- }
82
- return { gate: decodedGate, current: decodeGateCurrent(record.current) };
83
- }
84
2
  function staleReason(state, previous) {
85
3
  const target = state.coordinates.target;
86
4
  const currentChange = state.currentIntegration?.changeId ?? state.delivery?.data.integration.changeId;
@@ -102,8 +102,7 @@ export type ClaimedData = Readonly<{
102
102
  export type ArcData = Readonly<{
103
103
  seq: number;
104
104
  title: string;
105
- objective: string;
106
- brief: string;
105
+ body: string;
107
106
  }>;
108
107
  export type AbandonedData = Readonly<{
109
108
  note?: string;
@@ -1,4 +1,5 @@
1
1
  import type { DecideInput, OfferDecision } from "../decide.js";
2
+ import { type ActiveContractRefusal } from "../facts/observation.js";
2
3
  import { type ActorId, type ContractId } from "../facts/types.js";
3
4
  export type AbandonInput = Readonly<{
4
5
  contractId: ContractId;
@@ -6,9 +7,4 @@ export type AbandonInput = Readonly<{
6
7
  at: string;
7
8
  note?: string;
8
9
  }>;
9
- export type AbandonRefusal = Readonly<{
10
- kind: "contract-missing" | "terminal";
11
- contractId: ContractId;
12
- }>;
13
- export declare function decodeAbandonRefusal(value: unknown): AbandonRefusal;
14
- export declare function decideAbandon({ input, attempt, observation, }: DecideInput<AbandonInput>): OfferDecision<AbandonRefusal>;
10
+ export declare function decideAbandon({ input, attempt, observation, }: DecideInput<AbandonInput>): OfferDecision<ActiveContractRefusal>;
@@ -1,20 +1,4 @@
1
1
  import { activeContract } from "../facts/observation.js";
2
- import { contractId } from "../facts/types.js";
3
- export function decodeAbandonRefusal(value) {
4
- if (value === null || typeof value !== "object" || Array.isArray(value))
5
- throw new Error("malformed abandon refusal");
6
- const object = value;
7
- if (object.kind !== "contract-missing" && object.kind !== "terminal")
8
- throw new Error("malformed abandon refusal");
9
- if (Object.keys(object).some((key) => key !== "kind" && key !== "contractId"))
10
- throw new Error("malformed abandon refusal");
11
- try {
12
- return { kind: object.kind, contractId: contractId(String(object.contractId)) };
13
- }
14
- catch {
15
- throw new Error("malformed abandon refusal");
16
- }
17
- }
18
2
  export function decideAbandon({ input, attempt, observation, }) {
19
3
  const id = input.contractId;
20
4
  const current = activeContract(observation, id);
@@ -11,5 +11,4 @@ export type AmendRefusal = Readonly<{
11
11
  kind: "contract-missing" | "terminal" | "terms-moved" | "unknown-prerequisite" | "cyclic-prerequisite";
12
12
  contractId: ContractId;
13
13
  }>;
14
- export declare function decodeAmendRefusal(value: unknown): AmendRefusal;
15
14
  export declare function decideAmend<Failure>({ input, attempt, observation, }: DecideInput<AmendInput<Failure>>): OfferDecision<AmendRefusal | Failure>;
@@ -1,25 +1,5 @@
1
1
  import { prerequisitesReach, samePrerequisites } from "../facts/eligibility.js";
2
2
  import { activeContract, prerequisiteStatus } from "../facts/observation.js";
3
- import { contractId, } from "../facts/types.js";
4
- export function decodeAmendRefusal(value) {
5
- if (value === null || typeof value !== "object" || Array.isArray(value))
6
- throw new Error("malformed amend refusal");
7
- const object = value;
8
- if (object.kind !== "contract-missing" &&
9
- object.kind !== "terminal" &&
10
- object.kind !== "terms-moved" &&
11
- object.kind !== "unknown-prerequisite" &&
12
- object.kind !== "cyclic-prerequisite")
13
- throw new Error("malformed amend refusal");
14
- if (Object.keys(object).some((key) => key !== "kind" && key !== "contractId"))
15
- throw new Error("malformed amend refusal");
16
- try {
17
- return { kind: object.kind, contractId: contractId(String(object.contractId)) };
18
- }
19
- catch {
20
- throw new Error("malformed amend refusal");
21
- }
22
- }
23
3
  export function decideAmend({ input, attempt, observation, }) {
24
4
  const id = input.contractId;
25
5
  const current = activeContract(observation, id);
@@ -1,14 +1,13 @@
1
1
  import type { DecideInput, OfferDecision } from "../decide.js";
2
- import { type ActorId, type ArcData, type ContractId } from "../facts/types.js";
2
+ import { type ActiveContractRefusal } from "../facts/observation.js";
3
+ import { type ActorId, type ContractId } from "../facts/types.js";
3
4
  export type ArcInput = Readonly<{
4
5
  contractId: ContractId;
5
6
  actor?: ActorId;
6
7
  at: string;
7
- data: Readonly<Omit<ArcData, "seq">>;
8
+ data: Readonly<{
9
+ title: string;
10
+ body: string;
11
+ }>;
8
12
  }>;
9
- export type ArcRefusal = Readonly<{
10
- kind: "contract-missing" | "terminal";
11
- contractId: ContractId;
12
- }>;
13
- export declare function decodeArcRefusal(value: unknown): ArcRefusal;
14
- export declare function decideArc({ input, attempt, observation }: DecideInput<ArcInput>): OfferDecision<ArcRefusal>;
13
+ export declare function decideArc({ input, attempt, observation, }: DecideInput<ArcInput>): OfferDecision<ActiveContractRefusal>;
@@ -1,21 +1,5 @@
1
1
  import { activeContract } from "../facts/observation.js";
2
- import { contractId } from "../facts/types.js";
3
- export function decodeArcRefusal(value) {
4
- if (value === null || typeof value !== "object" || Array.isArray(value))
5
- throw new Error("malformed arc refusal");
6
- const object = value;
7
- if (object.kind !== "contract-missing" && object.kind !== "terminal")
8
- throw new Error("malformed arc refusal");
9
- if (Object.keys(object).some((key) => key !== "kind" && key !== "contractId"))
10
- throw new Error("malformed arc refusal");
11
- try {
12
- return { kind: object.kind, contractId: contractId(String(object.contractId)) };
13
- }
14
- catch {
15
- throw new Error("malformed arc refusal");
16
- }
17
- }
18
- export function decideArc({ input, attempt, observation }) {
2
+ export function decideArc({ input, attempt, observation, }) {
19
3
  const id = input.contractId;
20
4
  const current = activeContract(observation, id);
21
5
  if ("kind" in current)
@@ -30,8 +14,7 @@ export function decideArc({ input, attempt, observation }) {
30
14
  data: {
31
15
  seq: (current.currentArc?.data.seq ?? 0) + 1,
32
16
  title: input.data.title,
33
- objective: input.data.objective,
34
- brief: input.data.brief,
17
+ body: input.data.body,
35
18
  },
36
19
  };
37
20
  return {
@@ -1,4 +1,5 @@
1
1
  import type { DecideInput, OfferDecision, Preparation } from "../decide.js";
2
+ import { type ActiveContractRefusal } from "../facts/observation.js";
2
3
  import { type ActorId, type AttestationData, type ContractId } from "../facts/types.js";
3
4
  export type AttestationInput<Failure = never> = Readonly<{
4
5
  contractId: ContractId;
@@ -6,9 +7,4 @@ export type AttestationInput<Failure = never> = Readonly<{
6
7
  at: string;
7
8
  preparation?: Preparation<AttestationData, Failure>;
8
9
  }>;
9
- export type AttestationRefusal = Readonly<{
10
- kind: "contract-missing" | "terminal";
11
- contractId: ContractId;
12
- }>;
13
- export declare function decodeAttestationRefusal(value: unknown): AttestationRefusal;
14
- export declare function decideAttestation<Failure>({ input, attempt, observation, }: DecideInput<AttestationInput<Failure>>): OfferDecision<AttestationRefusal | Failure>;
10
+ export declare function decideAttestation<Failure>({ input, attempt, observation, }: DecideInput<AttestationInput<Failure>>): OfferDecision<ActiveContractRefusal | Failure>;
@@ -1,20 +1,4 @@
1
1
  import { activeContract } from "../facts/observation.js";
2
- import { contractId } from "../facts/types.js";
3
- export function decodeAttestationRefusal(value) {
4
- if (value === null || typeof value !== "object" || Array.isArray(value))
5
- throw new Error("malformed attestation refusal");
6
- const object = value;
7
- if (object.kind !== "contract-missing" && object.kind !== "terminal")
8
- throw new Error("malformed attestation refusal");
9
- if (Object.keys(object).some((key) => key !== "kind" && key !== "contractId"))
10
- throw new Error("malformed attestation refusal");
11
- try {
12
- return { kind: object.kind, contractId: contractId(String(object.contractId)) };
13
- }
14
- catch {
15
- throw new Error("malformed attestation refusal");
16
- }
17
- }
18
2
  export function decideAttestation({ input, attempt, observation, }) {
19
3
  const state = activeContract(observation, input.contractId);
20
4
  if ("kind" in state)
@@ -10,5 +10,4 @@ export type BindRefusal = Readonly<{
10
10
  kind: "contract-exists" | "invalid-after" | "unknown-prerequisite";
11
11
  contractId: ContractId;
12
12
  }>;
13
- export declare function decodeBindRefusal(value: unknown): BindRefusal;
14
13
  export declare function decideBind<Failure>({ input, attempt, observation, }: DecideInput<BindInput<Failure>>): OfferDecision<BindRefusal | Failure>;
@@ -1,20 +1,4 @@
1
1
  import { contractState, prerequisiteStatus } from "../facts/observation.js";
2
- import { contractId } from "../facts/types.js";
3
- export function decodeBindRefusal(value) {
4
- if (value === null || typeof value !== "object" || Array.isArray(value))
5
- throw new Error("malformed bind refusal");
6
- const object = value;
7
- if (object.kind !== "contract-exists" && object.kind !== "invalid-after" && object.kind !== "unknown-prerequisite")
8
- throw new Error("malformed bind refusal");
9
- if (Object.keys(object).some((key) => key !== "kind" && key !== "contractId"))
10
- throw new Error("malformed bind refusal");
11
- try {
12
- return { kind: object.kind, contractId: contractId(String(object.contractId)) };
13
- }
14
- catch {
15
- throw new Error("malformed bind refusal");
16
- }
17
- }
18
2
  export function decideBind({ input, attempt, observation, }) {
19
3
  const id = input.contractId;
20
4
  const current = contractState(observation, id);
@@ -10,5 +10,4 @@ export type DeliverRefusal = Readonly<{
10
10
  kind: "contract-missing" | "terminal" | "document-moved";
11
11
  contractId: ContractId;
12
12
  }>;
13
- export declare function decodeDeliverRefusal(value: unknown): DeliverRefusal;
14
13
  export declare function decideDeliver<Failure>({ input, attempt, observation, }: DecideInput<DeliverInput<Failure>>): OfferDecision<DeliverRefusal | Failure>;
@@ -1,20 +1,4 @@
1
1
  import { activeContract, documentIsCurrent } from "../facts/observation.js";
2
- import { contractId } from "../facts/types.js";
3
- export function decodeDeliverRefusal(value) {
4
- if (value === null || typeof value !== "object" || Array.isArray(value))
5
- throw new Error("malformed deliver refusal");
6
- const object = value;
7
- if (object.kind !== "contract-missing" && object.kind !== "terminal" && object.kind !== "document-moved")
8
- throw new Error("malformed deliver refusal");
9
- if (Object.keys(object).some((key) => key !== "kind" && key !== "contractId"))
10
- throw new Error("malformed deliver refusal");
11
- try {
12
- return { kind: object.kind, contractId: contractId(String(object.contractId)) };
13
- }
14
- catch {
15
- throw new Error("malformed deliver refusal");
16
- }
17
- }
18
2
  export function decideDeliver({ input, attempt, observation, }) {
19
3
  const state = activeContract(observation, input.contractId);
20
4
  if ("kind" in state)
@@ -17,11 +17,12 @@ export type PlacementRefusal = Readonly<{
17
17
  kind: "gates-unsatisfied";
18
18
  contractId: ContractId;
19
19
  unmet: readonly GateReport[];
20
+ /** The reference the refused placement attempted to advance, when the Contract has one. */
21
+ target?: string;
20
22
  }> | Readonly<{
21
23
  kind: "prerequisites-unsatisfied";
22
24
  contractId: ContractId;
23
25
  unmet: readonly UnmetPrerequisite[];
24
26
  }>;
25
- export declare function decodePlacementRefusal(value: unknown): PlacementRefusal;
26
27
  export declare function decidePlacement({ input, attempt, observation, }: DecideInput<PlacementInput>): OfferDecision<PlacementRefusal>;
27
28
  export {};
@@ -1,62 +1,5 @@
1
- import { decodeGateReport, gateReports } from "../facts/gate.js";
1
+ import { gateReports } from "../facts/gate.js";
2
2
  import { activeContract, contractState } from "../facts/observation.js";
3
- import { contractId } from "../facts/types.js";
4
- export function decodePlacementRefusal(value) {
5
- if (value === null || typeof value !== "object" || Array.isArray(value))
6
- throw new Error("malformed placement refusal");
7
- const object = value;
8
- if (object.kind === "contract-missing" || object.kind === "delivery-missing" || object.kind === "terminal") {
9
- if (Object.keys(object).some((key) => key !== "kind" && key !== "contractId"))
10
- throw new Error("malformed placement refusal");
11
- try {
12
- return { kind: object.kind, contractId: contractId(String(object.contractId)) };
13
- }
14
- catch {
15
- throw new Error("malformed placement refusal");
16
- }
17
- }
18
- if (object.kind === "gates-unsatisfied") {
19
- if (Object.keys(object).some((key) => key !== "kind" && key !== "contractId" && key !== "unmet"))
20
- throw new Error("malformed placement refusal");
21
- if (!Array.isArray(object.unmet))
22
- throw new Error("malformed placement refusal");
23
- try {
24
- return {
25
- kind: "gates-unsatisfied",
26
- contractId: contractId(String(object.contractId)),
27
- unmet: object.unmet.map(decodeGateReport),
28
- };
29
- }
30
- catch {
31
- throw new Error("malformed placement refusal");
32
- }
33
- }
34
- if (object.kind !== "prerequisites-unsatisfied")
35
- throw new Error("malformed placement refusal");
36
- if (Object.keys(object).some((key) => key !== "kind" && key !== "contractId" && key !== "unmet"))
37
- throw new Error("malformed placement refusal");
38
- if (!Array.isArray(object.unmet))
39
- throw new Error("malformed placement refusal");
40
- try {
41
- return {
42
- kind: "prerequisites-unsatisfied",
43
- contractId: contractId(String(object.contractId)),
44
- unmet: object.unmet.map((item) => {
45
- if (item === null || typeof item !== "object" || Array.isArray(item))
46
- throw new Error("malformed placement refusal");
47
- const unmet = item;
48
- if (Object.keys(unmet).some((key) => key !== "contractId" && key !== "state"))
49
- throw new Error("malformed placement refusal");
50
- if (unmet.state !== "missing" && unmet.state !== "active" && unmet.state !== "abandoned")
51
- throw new Error("malformed placement refusal");
52
- return { contractId: contractId(String(unmet.contractId)), state: unmet.state };
53
- }),
54
- };
55
- }
56
- catch {
57
- throw new Error("malformed placement refusal");
58
- }
59
- }
60
3
  function unmetPrerequisites(prerequisites, observation) {
61
4
  const unmet = [];
62
5
  for (const contractId of prerequisites) {
@@ -90,7 +33,15 @@ export function decidePlacement({ input, attempt, observation, }) {
90
33
  const gates = gateReports(current);
91
34
  if (!gates.satisfied) {
92
35
  const unmetGates = gates.reports.filter((report) => report.current.kind !== "attested" || report.current.verdict !== "satisfied");
93
- return { kind: "refused", refusal: { kind: "gates-unsatisfied", contractId: id, unmet: unmetGates } };
36
+ return {
37
+ kind: "refused",
38
+ refusal: {
39
+ kind: "gates-unsatisfied",
40
+ contractId: id,
41
+ unmet: unmetGates,
42
+ ...(current.coordinates.target === undefined ? {} : { target: current.coordinates.target }),
43
+ },
44
+ };
94
45
  }
95
46
  const claimed = {
96
47
  v: 1,