@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,3 +1,5 @@
1
+ import { contractIdSchema, snapshotIdSchema } from "./identity.js";
2
+ import { z } from "zod";
1
3
  import { StringDecoder } from "node:string_decoder";
2
4
  import { lstat } from "node:fs/promises";
3
5
  import { resolve } from "node:path";
@@ -6,6 +8,32 @@ import { gitObjectId, gitObjectIdForSnapshot, gitRefLocator, mintSnapshotId } fr
6
8
  import { commonGitDirectory, decodeGitNameOnly, readRef, registeredWorktrees } from "./repository.js";
7
9
  import { consumeGitStdout, GitPlumbingError, runGit } from "./process.js";
8
10
  import { captureWorkspaceTree } from "./workspace.js";
11
+ export const checkoutNotFollowableRefusalSchema = z
12
+ .object({
13
+ kind: z.literal("checkout-not-followable"),
14
+ contractId: contractIdSchema,
15
+ target: z.string().refine((value) => value.trim() !== ""),
16
+ path: z.string().refine((value) => value.trim() !== ""),
17
+ reason: z.literal("untracked"),
18
+ paths: z.array(z.string().refine((value) => value.trim() !== "")).readonly(),
19
+ })
20
+ .strict();
21
+ export const targetCheckoutEffectSchema = z
22
+ .object({
23
+ kind: z.literal("target-checkout"),
24
+ path: z.string().refine((value) => value.trim() !== ""),
25
+ target: z.string().refine((value) => value.trim() !== ""),
26
+ action: z.enum(["followed", "recovered"]),
27
+ })
28
+ .strict();
29
+ export const targetCheckoutLagSchema = z
30
+ .object({
31
+ kind: z.literal("target-checkout-retained"),
32
+ path: z.string().refine((value) => value.trim() !== ""),
33
+ target: z.string().refine((value) => value.trim() !== ""),
34
+ diagnostic: z.string().refine((value) => value.trim() !== ""),
35
+ })
36
+ .strict();
9
37
  export async function observeTargetHead(repository, target) {
10
38
  const value = await readRef(repository, target);
11
39
  return value === null ? null : mintSnapshotId(value);
@@ -67,37 +95,6 @@ export async function prepareTargetPlacementChanges(repository, target) {
67
95
  writes.sort((left, right) => (left.path < right.path ? -1 : left.path > right.path ? 1 : 0));
68
96
  return { predecessor: target.expectedOid, candidate: target.newOid, paths, writes };
69
97
  }
70
- async function dryRunRefusal(input, scopes) {
71
- const { repository, contractId, target, path, predecessor, changes } = input;
72
- const pathspecs = changes.paths.map(literalPath);
73
- if (pathspecs.length === 0)
74
- return null;
75
- const unmerged = await gitPaths(repository, path, [
76
- "diff",
77
- "--name-only",
78
- "--diff-filter=U",
79
- "-z",
80
- "--",
81
- ...pathspecs,
82
- ]);
83
- if (unmerged.length > 0)
84
- return checkoutRefusal(contractId, target, path, "unmerged", unmerged);
85
- const staged = await gitPaths(repository, path, [
86
- "diff",
87
- "--cached",
88
- "--name-only",
89
- "-z",
90
- predecessor,
91
- "--",
92
- ...pathspecs,
93
- ]);
94
- if (staged.length > 0)
95
- return checkoutRefusal(contractId, target, path, "staged", staged);
96
- const dirty = await gitPaths(repository, path, ["diff-files", "--name-only", "-z", "--", ...pathspecs]);
97
- if (dirty.length > 0)
98
- return checkoutRefusal(contractId, target, path, "dirty-tracked", dirty);
99
- return await untrackedRefusalWithinScopes(input, scopes, false);
100
- }
101
98
  async function physicalScope(candidatePath, metadata) {
102
99
  const components = candidatePath.split("/");
103
100
  for (let index = 0; index < components.length; index += 1) {
@@ -135,20 +132,12 @@ async function destructionScopes(worktree, writes) {
135
132
  }
136
133
  return [...scopes.values()].sort((left, right) => left.path.localeCompare(right.path));
137
134
  }
138
- function untrackedArgs(ignored) {
139
- return [
140
- "ls-files",
141
- "--others",
142
- ...(ignored ? ["--ignored"] : []),
143
- "--exclude-standard",
144
- "--directory",
145
- "--no-empty",
146
- "-z",
147
- ];
135
+ function untrackedArgs() {
136
+ return ["ls-files", "--others", "--ignored", "--exclude-standard", "--directory", "--no-empty", "-z"];
148
137
  }
149
- async function untrackedRefusalWithinScopes(input, scopes, ignored) {
138
+ async function untrackedRefusalWithinScopes(input, scopes) {
150
139
  const { repository, contractId, target, path } = input;
151
- const args = untrackedArgs(ignored);
140
+ const args = untrackedArgs();
152
141
  const leaves = scopes.filter((scope) => scope.kind === "leaf");
153
142
  if (leaves.length > 0) {
154
143
  const collisions = await gitPaths(repository, path, [
@@ -208,27 +197,25 @@ async function workspaceMatchesTreeOnPaths(repository, path, tree, workspaceTree
208
197
  ...paths.map(literalPath),
209
198
  ])).length === 0);
210
199
  }
200
+ /**
201
+ * A checkout that git cannot carry is judged by the physical follow, which records its own lag.
202
+ * The one collision read-tree cannot report is a candidate write over an ignored worktree entry:
203
+ * git carries that by silently destroying the entry, so it is refused here instead.
204
+ */
211
205
  async function ordinaryPrecheck(repository, contractId, target, path, changes) {
212
206
  const predecessor = gitObjectIdForSnapshot(target.expectedOid);
213
207
  const candidate = gitObjectIdForSnapshot(target.newOid);
214
208
  const observation = { repository, contractId, target, path, predecessor, candidate, changes };
215
- let dryRunError;
216
209
  try {
217
210
  await runGit(repository, ["-C", path, "read-tree", "--dry-run", "-m", "-u", predecessor, candidate]);
218
211
  }
219
212
  catch (error) {
220
213
  if (!(error instanceof GitPlumbingError) || repository.signal?.aborted === true)
221
214
  throw error;
222
- dryRunError = error;
215
+ return null;
223
216
  }
224
217
  const scopes = await destructionScopes(path, changes.writes);
225
- if (dryRunError !== undefined) {
226
- const refusal = await dryRunRefusal(observation, scopes);
227
- if (refusal !== null)
228
- return refusal;
229
- throw dryRunError;
230
- }
231
- return await untrackedRefusalWithinScopes(observation, scopes, true);
218
+ return await untrackedRefusalWithinScopes(observation, scopes);
232
219
  }
233
220
  export async function acquireTargetPlacementFence(repository, target) {
234
221
  const locator = gitRefLocator(target);
@@ -261,6 +248,25 @@ export async function observeTargetPlacement(repository, input, changes) {
261
248
  }
262
249
  return { kind: "ready", arms };
263
250
  }
251
+ export const auditTargetAnswerSchema = z.union([
252
+ z
253
+ .object({
254
+ kind: z.literal("placeable"),
255
+ ref: z.string().refine((value) => value.trim() !== ""),
256
+ head: snapshotIdSchema,
257
+ })
258
+ .strict(),
259
+ z
260
+ .object({
261
+ kind: z.literal("moved"),
262
+ ref: z.string().refine((value) => value.trim() !== ""),
263
+ expected: snapshotIdSchema,
264
+ observed: snapshotIdSchema.nullable(),
265
+ })
266
+ .strict(),
267
+ z.object({ kind: z.literal("refused"), refusal: checkoutNotFollowableRefusalSchema }).strict(),
268
+ z.object({ kind: z.literal("failed"), diagnostic: z.string().refine((value) => value.trim() !== "") }).strict(),
269
+ ]);
264
270
  /** Adjudicate the complete post-Verification audit target answer without placing. */
265
271
  export async function adjudicateAuditTarget(repository, input) {
266
272
  const ref = input.coordinates.target;
@@ -297,17 +303,20 @@ export async function prepareTargetPlacement(repository, state, target, changes)
297
303
  ? observation
298
304
  : { kind: "prepared", placement: { target, arms: observation.arms } };
299
305
  }
300
- export async function followTargetPlacement(repository, prepared) {
306
+ export async function followTargetPlacement(repository, prepared, onPhysical) {
301
307
  const effects = [];
302
308
  const lag = [];
303
309
  const predecessor = gitObjectIdForSnapshot(prepared.target.expectedOid);
304
310
  const candidate = gitObjectIdForSnapshot(prepared.target.newOid);
305
311
  for (const arm of prepared.arms) {
312
+ const beforeEffects = effects.length, beforeLag = lag.length;
306
313
  try {
307
314
  await runGit(repository, ["-C", arm.path, "read-tree", "-m", "-u", predecessor, candidate]);
308
315
  effects.push({ kind: "target-checkout", path: arm.path, target: prepared.target.target, action: "followed" });
309
316
  }
310
317
  catch (error) {
318
+ if (!(error instanceof GitPlumbingError))
319
+ throw error;
311
320
  lag.push({
312
321
  kind: "target-checkout-retained",
313
322
  path: arm.path,
@@ -315,6 +324,7 @@ export async function followTargetPlacement(repository, prepared) {
315
324
  diagnostic: diagnostic(error),
316
325
  });
317
326
  }
327
+ onPhysical?.({ effects: effects.slice(beforeEffects), lag: lag.slice(beforeLag) });
318
328
  }
319
329
  return { effects, lag };
320
330
  }
@@ -377,7 +387,7 @@ async function recoverCheckout(input) {
377
387
  ]);
378
388
  return "recovered";
379
389
  }
380
- export async function recoverTargetPlacement(repository, state) {
390
+ export async function recoverTargetPlacement(repository, state, onPhysical) {
381
391
  const target = state.coordinates.target;
382
392
  const delivery = state.delivery;
383
393
  if (state.terminal?.kind !== "claimed" || target === undefined || delivery === null)
@@ -393,6 +403,7 @@ export async function recoverTargetPlacement(repository, state) {
393
403
  const effects = [];
394
404
  const lag = [];
395
405
  for (const worktree of worktrees) {
406
+ const beforeEffects = effects.length, beforeLag = lag.length;
396
407
  try {
397
408
  const recovery = await recoverCheckout({
398
409
  repository,
@@ -404,6 +415,7 @@ export async function recoverTargetPlacement(repository, state) {
404
415
  });
405
416
  if (recovery === "retained") {
406
417
  lag.push(recoveryLag(worktree.path, target, "target checkout entries are neither predecessor nor candidate"));
418
+ onPhysical?.({ effects: [], lag: lag.slice(beforeLag) });
407
419
  continue;
408
420
  }
409
421
  if (recovery === "recovered") {
@@ -411,8 +423,11 @@ export async function recoverTargetPlacement(repository, state) {
411
423
  }
412
424
  }
413
425
  catch (error) {
426
+ if (!(error instanceof GitPlumbingError))
427
+ throw error;
414
428
  lag.push(recoveryLag(worktree.path, target, diagnostic(error)));
415
429
  }
430
+ onPhysical?.({ effects: effects.slice(beforeEffects), lag: lag.slice(beforeLag) });
416
431
  }
417
432
  return { effects, lag };
418
433
  }
@@ -1,3 +1,4 @@
1
+ import { z } from "zod";
1
2
  import type { Preparation } from "../core/decide.js";
2
3
  import type { ActorId, ContractCoordinates, ContractId, SnapshotId } from "../core/facts/types.js";
3
4
  import { type GitObjectId } from "./identity.js";
@@ -12,34 +13,42 @@ export type TenderCaptureCoordinates = Readonly<{
12
13
  /** Opt-in real-index UU refusal. Omit or false when authorized capture must read current worktree bytes. */
13
14
  rejectUnmerged?: boolean;
14
15
  }>;
15
- export type WorktreeMissingRefusal = Readonly<{
16
- kind: "worktree-missing";
17
- contractId: ContractId;
18
- }>;
19
- export type TenderCaptureRefusal = WorktreeMissingRefusal | Readonly<{
20
- kind: "unmerged-paths";
21
- contractId: ContractId;
22
- paths: readonly string[];
23
- }>;
24
- export type WorkspaceDirtyDelta = Readonly<{
25
- staged: readonly string[];
26
- unstaged: readonly string[];
27
- untracked: readonly string[];
28
- shortStat: Readonly<{
29
- filesChanged: number;
30
- insertions: number;
31
- deletions: number;
32
- }>;
33
- }>;
34
- export type DirtyWorkspaceRefusal = Readonly<{
35
- kind: "dirty-workspace";
36
- contractId: ContractId;
37
- staged: readonly string[];
38
- unstaged: readonly string[];
39
- untracked: readonly string[];
40
- submodules: readonly string[];
41
- shortStat: WorkspaceDirtyDelta["shortStat"];
42
- }>;
16
+ export declare const worktreeMissingRefusalSchema: z.ZodObject<{
17
+ kind: z.ZodLiteral<"worktree-missing">;
18
+ contractId: z.ZodPipe<z.ZodString, z.ZodTransform<ContractId, string>>;
19
+ }, z.core.$strict>;
20
+ type WorktreeMissingRefusal = z.infer<typeof worktreeMissingRefusalSchema>;
21
+ export declare const unmergedPathsRefusalSchema: z.ZodObject<{
22
+ kind: z.ZodLiteral<"unmerged-paths">;
23
+ contractId: z.ZodPipe<z.ZodString, z.ZodTransform<ContractId, string>>;
24
+ paths: z.ZodReadonly<z.ZodArray<z.ZodString>>;
25
+ }, z.core.$strict>;
26
+ export type TenderCaptureRefusal = WorktreeMissingRefusal | z.infer<typeof unmergedPathsRefusalSchema>;
27
+ export declare const workspaceDirtyDeltaSchema: z.ZodObject<{
28
+ staged: z.ZodReadonly<z.ZodArray<z.ZodString>>;
29
+ unstaged: z.ZodReadonly<z.ZodArray<z.ZodString>>;
30
+ untracked: z.ZodReadonly<z.ZodArray<z.ZodString>>;
31
+ shortStat: z.ZodObject<{
32
+ filesChanged: z.ZodNumber;
33
+ insertions: z.ZodNumber;
34
+ deletions: z.ZodNumber;
35
+ }, z.core.$strict>;
36
+ }, z.core.$strict>;
37
+ type WorkspaceDirtyDelta = z.infer<typeof workspaceDirtyDeltaSchema>;
38
+ export declare const dirtyWorkspaceRefusalSchema: z.ZodObject<{
39
+ kind: z.ZodLiteral<"dirty-workspace">;
40
+ contractId: z.ZodPipe<z.ZodString, z.ZodTransform<ContractId, string>>;
41
+ staged: z.ZodReadonly<z.ZodArray<z.ZodString>>;
42
+ unstaged: z.ZodReadonly<z.ZodArray<z.ZodString>>;
43
+ untracked: z.ZodReadonly<z.ZodArray<z.ZodString>>;
44
+ submodules: z.ZodReadonly<z.ZodArray<z.ZodString>>;
45
+ shortStat: z.ZodObject<{
46
+ filesChanged: z.ZodNumber;
47
+ insertions: z.ZodNumber;
48
+ deletions: z.ZodNumber;
49
+ }, z.core.$strict>;
50
+ }, z.core.$strict>;
51
+ export type DirtyWorkspaceRefusal = z.infer<typeof dirtyWorkspaceRefusalSchema>;
43
52
  export type TenderCapture = Readonly<{
44
53
  tree: GitObjectId;
45
54
  head: SnapshotId;
@@ -1,8 +1,47 @@
1
+ import { contractIdSchema } from "./identity.js";
2
+ import { z } from "zod";
1
3
  import { access } from "node:fs/promises";
2
4
  import { gitObjectIdForSnapshot, mintSnapshotId } from "./identity.js";
3
5
  import { decodeGitNumstat, registeredWorktreePaths } from "./repository.js";
4
6
  import { GitPlumbingError, runGit, runGitWithEnvironment } from "./process.js";
5
7
  import { captureWorkspaceTree, unmergedWorkspacePaths, workspaceMergeHead, worktreePath } from "./workspace.js";
8
+ export const worktreeMissingRefusalSchema = z
9
+ .object({ kind: z.literal("worktree-missing"), contractId: contractIdSchema })
10
+ .strict();
11
+ export const unmergedPathsRefusalSchema = z
12
+ .object({
13
+ kind: z.literal("unmerged-paths"),
14
+ contractId: contractIdSchema,
15
+ paths: z.array(z.string().refine((value) => value.trim() !== "")).readonly(),
16
+ })
17
+ .strict();
18
+ export const workspaceDirtyDeltaSchema = z
19
+ .object({
20
+ staged: z.array(z.string()).readonly(),
21
+ unstaged: z.array(z.string()).readonly(),
22
+ untracked: z.array(z.string()).readonly(),
23
+ shortStat: z
24
+ .object({ filesChanged: z.number().int(), insertions: z.number().int(), deletions: z.number().int() })
25
+ .strict(),
26
+ })
27
+ .strict();
28
+ export const dirtyWorkspaceRefusalSchema = z
29
+ .object({
30
+ kind: z.literal("dirty-workspace"),
31
+ contractId: contractIdSchema,
32
+ staged: z.array(z.string().refine((value) => value.trim() !== "")).readonly(),
33
+ unstaged: z.array(z.string().refine((value) => value.trim() !== "")).readonly(),
34
+ untracked: z.array(z.string().refine((value) => value.trim() !== "")).readonly(),
35
+ submodules: z.array(z.string().refine((value) => value.trim() !== "")).readonly(),
36
+ shortStat: z
37
+ .object({
38
+ filesChanged: z.number().int().nonnegative(),
39
+ insertions: z.number().int().nonnegative(),
40
+ deletions: z.number().int().nonnegative(),
41
+ })
42
+ .strict(),
43
+ })
44
+ .strict();
6
45
  async function workspaceExists(repository, path) {
7
46
  const exists = await access(path).then(() => true, () => false);
8
47
  return exists && (await registeredWorktreePaths(repository)).includes(path);
@@ -25,7 +25,9 @@ async function removeTerminalWorktree(repository, topology, path) {
25
25
  try {
26
26
  await runGit(repository, ["worktree", "remove", ...(present ? ["--force"] : []), path]);
27
27
  }
28
- catch {
28
+ catch (error) {
29
+ if (!(error instanceof GitPlumbingError))
30
+ throw error;
29
31
  return { effect: { kind: "worktree", path, action: "unchanged" }, retained: true };
30
32
  }
31
33
  topology.paths.delete(path);
@@ -112,10 +114,10 @@ function fromPrimaryWorktree(repository) {
112
114
  function complete(effects = [], lag = [], hookRuns = []) {
113
115
  return hookRuns.length === 0 ? { effects, lag } : { effects, lag, hookRuns };
114
116
  }
115
- function retainTerminalWorktree(path, retainedLag, { effects, lag, hookRuns }) {
116
- effects.push({ kind: "worktree", path, action: "unchanged" });
117
- lag.push(retainedLag);
118
- return complete(effects, lag, hookRuns);
117
+ function retainTerminalWorktree(path, retainedLag, acc) {
118
+ acc.recordEffect({ kind: "worktree", path, action: "unchanged" });
119
+ acc.recordLag(retainedLag);
120
+ return complete(acc.effects, acc.lag, acc.hookRuns);
119
121
  }
120
122
  async function terminalSealExpectations(channel, state) {
121
123
  const snapshots = terminalSealSnapshots(state);
@@ -144,11 +146,7 @@ async function removeSealedTerminalWorktree({ repository, topology, path, state,
144
146
  snapshot,
145
147
  retention: "ephemeral",
146
148
  };
147
- const existing = acc.effects.findIndex((item) => item.kind === "recovery-snapshot");
148
- if (existing < 0)
149
- acc.effects.push(effect);
150
- else
151
- acc.effects[existing] = effect;
149
+ acc.recordEffect(effect);
152
150
  return { snapshot, workspace };
153
151
  };
154
152
  const before = await observeTerminalWorkspace(repository, path, expected);
@@ -186,7 +184,7 @@ async function removeSealedTerminalWorktree({ repository, topology, path, state,
186
184
  if (removal.retained)
187
185
  return retainTerminalWorktree(path, { kind: "worktree-retained", path }, acc);
188
186
  if (removal.effect !== undefined)
189
- acc.effects.push(removal.effect);
187
+ acc.recordEffect(removal.effect);
190
188
  return null;
191
189
  }
192
190
  async function targetCustodyForClaimedIntegration(repository, state, integration) {
@@ -204,19 +202,19 @@ function sealedTree(expected, snapshot) {
204
202
  throw new Error(`terminal seal tree was not resolved: ${snapshot}`);
205
203
  return tree;
206
204
  }
207
- async function releaseTerminalCustody({ repository, state, resolveSeal, ref, pin, acc: { effects }, }) {
205
+ async function releaseTerminalCustody({ repository, state, resolveSeal, ref, pin, acc, }) {
208
206
  const [deliveryRef, candidatePin] = await Promise.all([readRef(repository, ref), readRef(repository, pin)]);
209
207
  if (deliveryRef === null && candidatePin === null)
210
208
  return;
211
209
  if (state.delivery === null) {
212
210
  const custodian = await snapshotCustodian(repository, state.coordinates.start);
213
211
  if (deliveryRef !== null) {
214
- effects.push(custodian === null
212
+ acc.recordEffect(custodian === null
215
213
  ? retainedRefEffect(ref, deliveryRef)
216
214
  : await removeRefWithCustody(repository, ref, custodian.ref, custodian.oid));
217
215
  }
218
216
  if (candidatePin !== null)
219
- effects.push(await removeRef(repository, pin));
217
+ acc.recordEffect(await removeRef(repository, pin));
220
218
  return;
221
219
  }
222
220
  const tender = state.delivery.data.tenderSnapshot;
@@ -224,29 +222,29 @@ async function releaseTerminalCustody({ repository, state, resolveSeal, ref, pin
224
222
  const target = await targetCustodyForClaimedIntegration(repository, state, integration);
225
223
  if (deliveryRef !== null && target !== null) {
226
224
  if (tender === integration) {
227
- effects.push(await removeRefWithCustody(repository, ref, target.ref, target.oid));
225
+ acc.recordEffect(await removeRefWithCustody(repository, ref, target.ref, target.oid));
228
226
  }
229
227
  else {
230
228
  const expected = await resolveSeal();
231
229
  if (sealedTree(expected, tender) === sealedTree(expected, integration)) {
232
- effects.push(await removeRefWithCustody(repository, ref, target.ref, target.oid));
230
+ acc.recordEffect(await removeRefWithCustody(repository, ref, target.ref, target.oid));
233
231
  }
234
232
  else {
235
- effects.push(retainedRefEffect(ref, deliveryRef));
233
+ acc.recordEffect(retainedRefEffect(ref, deliveryRef));
236
234
  }
237
235
  }
238
236
  }
239
237
  else if (deliveryRef !== null) {
240
- effects.push(retainedRefEffect(ref, deliveryRef));
238
+ acc.recordEffect(retainedRefEffect(ref, deliveryRef));
241
239
  }
242
240
  if (candidatePin !== null) {
243
241
  if (target !== null || (tender === integration && deliveryRef !== null)) {
244
- effects.push(target !== null
242
+ acc.recordEffect(target !== null
245
243
  ? await removeRefWithCustody(repository, pin, target.ref, target.oid)
246
244
  : await removeRefWithCustody(repository, pin, ref, tender));
247
245
  }
248
246
  else {
249
- effects.push(retainedRefEffect(pin, candidatePin));
247
+ acc.recordEffect(retainedRefEffect(pin, candidatePin));
250
248
  }
251
249
  }
252
250
  }
@@ -261,13 +259,13 @@ export async function reconcileTerminalManagedWorktree({ repository, channel, ho
261
259
  return complete(acc.effects, acc.lag, acc.hookRuns);
262
260
  }
263
261
  const expected = await resolveSeal();
264
- acc.effects.push(await updateRef(primary, ref, state.delivery?.data.tenderSnapshot ?? state.coordinates.start));
262
+ acc.recordEffect(await updateRef(primary, ref, state.delivery?.data.tenderSnapshot ?? state.coordinates.start));
265
263
  if (state.delivery !== null) {
266
- acc.effects.push(await updateRef(primary, pin, state.currentIntegration?.snapshot ?? state.delivery.data.integration.snapshot));
264
+ acc.recordEffect(await updateRef(primary, pin, state.currentIntegration?.snapshot ?? state.delivery.data.integration.snapshot));
267
265
  }
268
266
  if (retainTerminalWorktree === true) {
269
267
  if (topology.paths.has(path) && (await pathExists(path))) {
270
- acc.effects.push({ kind: "worktree", path, action: "unchanged" });
268
+ acc.recordEffect({ kind: "worktree", path, action: "unchanged" });
271
269
  }
272
270
  return complete(acc.effects, acc.lag);
273
271
  }
@@ -1,14 +1,16 @@
1
+ import { z } from "zod";
1
2
  import type { ContractState, SnapshotId } from "../core/facts/types.js";
2
3
  import { type GitObjectId } from "./identity.js";
3
4
  import type { GitOid } from "./repository.js";
4
5
  import { type GitRepository } from "./process.js";
5
6
  import { captureWorkspaceTree } from "./workspace.js";
6
- export type UnsealedBytes = Readonly<{
7
- kind: "unsealed-bytes";
8
- path: string;
9
- paths: readonly string[];
10
- head?: SnapshotId;
11
- }>;
7
+ export declare const unsealedBytesSchema: z.ZodObject<{
8
+ kind: z.ZodLiteral<"unsealed-bytes">;
9
+ path: z.ZodString;
10
+ paths: z.ZodReadonly<z.ZodArray<z.ZodString>>;
11
+ head: z.ZodOptional<z.ZodPipe<z.ZodString, z.ZodTransform<SnapshotId, string>>>;
12
+ }, z.core.$strict>;
13
+ type UnsealedBytes = z.infer<typeof unsealedBytesSchema>;
12
14
  export type TerminalSealExpectations = Readonly<{
13
15
  heads: readonly SnapshotId[];
14
16
  trees: readonly GitObjectId[];
@@ -1,6 +1,16 @@
1
+ import { mintedSnapshotInputSchema } from "./identity.js";
2
+ import { z } from "zod";
1
3
  import { gitObjectId, gitObjectIdForSnapshot, mintSnapshotId } from "./identity.js";
2
4
  import { runGit } from "./process.js";
3
5
  import { captureWorkspaceTree } from "./workspace.js";
6
+ export const unsealedBytesSchema = z
7
+ .object({
8
+ kind: z.literal("unsealed-bytes"),
9
+ path: z.string().refine((value) => value.trim() !== ""),
10
+ paths: z.array(z.string().refine((value) => value.trim() !== "")).readonly(),
11
+ head: mintedSnapshotInputSchema.optional(),
12
+ })
13
+ .strict();
4
14
  export function terminalSealSnapshots(state) {
5
15
  return [
6
16
  ...new Set([
@@ -1,3 +1,4 @@
1
+ import { z } from "zod";
1
2
  import type { ContractId, SnapshotId } from "../core/facts/types.js";
2
3
  import { type GitObjectId } from "./identity.js";
3
4
  import { type GitRepository } from "./process.js";
@@ -47,11 +48,12 @@ export type WorkspaceChangeCounts = Readonly<{
47
48
  untracked: number;
48
49
  submodules: number;
49
50
  }>;
50
- export type ConflictRecovery = Readonly<{
51
- materialize: "deliver --materialize-conflict --include-dirty";
52
- deliver: "deliver --include-dirty";
53
- staging: "not-required";
54
- }>;
51
+ export declare const conflictRecoverySchema: z.ZodObject<{
52
+ materialize: z.ZodLiteral<"deliver --materialize-conflict --include-dirty">;
53
+ deliver: z.ZodLiteral<"deliver --include-dirty">;
54
+ staging: z.ZodLiteral<"not-required">;
55
+ }, z.core.$strict>;
56
+ type ConflictRecovery = z.infer<typeof conflictRecoverySchema>;
55
57
  export declare const conflictRecovery: ConflictRecovery;
56
58
  export type ContractWorkspaceMerge = Readonly<{
57
59
  head: SnapshotId;
@@ -73,16 +75,27 @@ export type ContractWorkspaceObservation = Readonly<{
73
75
  kind: "failed";
74
76
  diagnostic: string;
75
77
  }>;
76
- export type ContractTargetLag = Readonly<{
77
- kind: "counted";
78
- behind: number;
79
- subject?: ContractWorkspaceLocation;
80
- }> | Readonly<{
81
- kind: "unknown";
82
- subject?: ContractWorkspaceLocation;
83
- }> | Readonly<{
84
- kind: "none";
85
- }>;
78
+ export declare const worktreeWorkspaceSchema: z.ZodObject<{
79
+ kind: z.ZodLiteral<"worktree">;
80
+ path: z.ZodString;
81
+ }, z.core.$strict>;
82
+ export declare const contractTargetLagSchema: z.ZodUnion<readonly [z.ZodObject<{
83
+ kind: z.ZodLiteral<"none">;
84
+ }, z.core.$strict>, z.ZodObject<{
85
+ kind: z.ZodLiteral<"unknown">;
86
+ subject: z.ZodOptional<z.ZodObject<{
87
+ kind: z.ZodLiteral<"worktree">;
88
+ path: z.ZodString;
89
+ }, z.core.$strict>>;
90
+ }, z.core.$strict>, z.ZodObject<{
91
+ kind: z.ZodLiteral<"counted">;
92
+ behind: z.ZodNumber;
93
+ subject: z.ZodOptional<z.ZodObject<{
94
+ kind: z.ZodLiteral<"worktree">;
95
+ path: z.ZodString;
96
+ }, z.core.$strict>>;
97
+ }, z.core.$strict>]>;
98
+ export type ContractTargetLag = z.infer<typeof contractTargetLagSchema>;
86
99
  export declare function observeWorkspace(repository: GitRepository, location: ContractWorkspaceLocation, workspace: string): Promise<ContractWorkspaceObservation>;
87
100
  export declare function observeTargetLag(repository: GitRepository, workspace: string, head: SnapshotId | null | undefined): Promise<ContractTargetLag>;
88
101
  /** Capture tracked and untracked workspace bytes without changing its real index. */
@@ -114,3 +127,4 @@ export declare function retireConflictHandoff(repository: GitRepository, input:
114
127
  workspace: string;
115
128
  consume: boolean;
116
129
  }>): Promise<HandoffRetirement>;
130
+ export {};
@@ -1,3 +1,4 @@
1
+ import { z } from "zod";
1
2
  import { access, mkdtemp, rm } from "node:fs/promises";
2
3
  import { tmpdir } from "node:os";
3
4
  import { join, resolve } from "node:path";
@@ -193,11 +194,32 @@ export async function workspaceMergeStatePresent(repository, workspace) {
193
194
  export async function unmergedWorkspacePaths(repository, workspace) {
194
195
  return (await workspaceStatus(repository, workspace)).unmergedPaths;
195
196
  }
197
+ export const conflictRecoverySchema = z
198
+ .object({
199
+ materialize: z.literal("deliver --materialize-conflict --include-dirty"),
200
+ deliver: z.literal("deliver --include-dirty"),
201
+ staging: z.literal("not-required"),
202
+ })
203
+ .strict();
196
204
  export const conflictRecovery = Object.freeze({
197
205
  materialize: "deliver --materialize-conflict --include-dirty",
198
206
  deliver: "deliver --include-dirty",
199
207
  staging: "not-required",
200
208
  });
209
+ export const worktreeWorkspaceSchema = z
210
+ .object({ kind: z.literal("worktree"), path: z.string().refine((value) => value.trim() !== "") })
211
+ .strict();
212
+ export const contractTargetLagSchema = z.union([
213
+ z.object({ kind: z.literal("none") }).strict(),
214
+ z.object({ kind: z.literal("unknown"), subject: worktreeWorkspaceSchema.optional() }).strict(),
215
+ z
216
+ .object({
217
+ kind: z.literal("counted"),
218
+ behind: z.number().int().nonnegative(),
219
+ subject: worktreeWorkspaceSchema.optional(),
220
+ })
221
+ .strict(),
222
+ ]);
201
223
  function countsOf(changes) {
202
224
  return {
203
225
  staged: changes.staged.length,
@@ -215,7 +237,9 @@ export async function observeWorkspace(repository, location, workspace) {
215
237
  const merge = head === undefined ? null : { head, unmergedPaths: status.unmergedPaths };
216
238
  return { kind: dirty ? "dirty" : "clean", location, counts, merge };
217
239
  }
218
- catch {
240
+ catch (error) {
241
+ if (!(error instanceof GitPlumbingError))
242
+ throw error;
219
243
  return { kind: "unavailable", location };
220
244
  }
221
245
  }
@@ -233,7 +257,9 @@ export async function observeTargetLag(repository, workspace, head) {
233
257
  return { kind: "unknown", subject };
234
258
  return { kind: "counted", behind: Number(text), subject };
235
259
  }
236
- catch {
260
+ catch (error) {
261
+ if (!(error instanceof GitPlumbingError))
262
+ throw error;
237
263
  return { kind: "unknown", subject };
238
264
  }
239
265
  }