@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,42 +1,12 @@
1
1
  import type { WorldRoot } from "../world.js";
2
- import { type TaskCompositionAlias, type TaskCompositionBodyPreview } from "./compose-language.js";
3
- import { type TaskId } from "./identity.js";
4
- import type { TaskCleanupFailure, TaskRefusal, TaskRetry } from "./operations.js";
5
- export type { TaskCompositionAlias, TaskCompositionBodyPreview } from "./compose-language.js";
2
+ import type { TaskCompositionResult } from "./mutation-result.js";
3
+ import { type AcceptedComposition } from "./compose-language.js";
4
+ export type { TaskCompositionAdmission, TaskCompositionBodyPreview, TaskCompositionPlanAlias, TaskCompositionPlanOrder, } from "./compose-language.js";
5
+ export type { TaskCompositionAlias } from "./compose-language.js";
6
6
  export { taskCompositionNamespaceHeader } from "./compose-language.js";
7
- export type TaskDocumentChange = Readonly<{
8
- taskId: TaskId;
9
- kind: "created" | "updated";
10
- documentDiff: string;
11
- }>;
12
- export type TaskCompositionFacts = Readonly<{
13
- aliases: readonly TaskCompositionAlias[];
14
- admissionOrder: readonly TaskId[];
15
- }>;
16
- export type TaskCompositionResult = Readonly<{
17
- kind: "planned";
18
- aliases: readonly TaskCompositionAlias[];
19
- admissionOrder: readonly TaskId[];
20
- bodies: readonly TaskCompositionBodyPreview[];
21
- }> | Readonly<{
22
- kind: "accepted";
23
- documentChanges: readonly TaskDocumentChange[];
24
- cleanup?: TaskCleanupFailure;
25
- } & TaskCompositionFacts> | Readonly<{
26
- kind: "refused";
27
- refusal: Extract<TaskRefusal, {
28
- kind: "invalid-composition";
29
- }>;
30
- }> | (Readonly<{
31
- kind: "incomplete";
32
- documentChanges: readonly TaskDocumentChange[];
33
- cleanup?: TaskCleanupFailure;
34
- stopped: TaskRefusal | Readonly<{
35
- kind: "retry";
36
- reason: TaskRetry;
37
- }>;
38
- draft: string;
39
- }> & TaskCompositionFacts);
7
+ export type TaskDocumentChange = Readonly<AcceptedComposition["documentChanges"][number]>;
8
+ export type TaskCompositionFacts = Readonly<Pick<AcceptedComposition, "aliases" | "admissionOrder" | "admissions">>;
9
+ export type { TaskCompositionResult } from "./mutation-result.js";
40
10
  export declare function composeTasks(input: Readonly<{
41
11
  world: WorldRoot;
42
12
  markdown: string;
@@ -11,7 +11,7 @@ function currentTimestamp() {
11
11
  return new Date().toISOString();
12
12
  }
13
13
  function facts(plan) {
14
- return { aliases: plan.aliases, admissionOrder: plan.admissionOrder };
14
+ return { aliases: plan.aliases, admissionOrder: plan.admissionOrder, admissions: plannedResult(plan).admissions };
15
15
  }
16
16
  function reference(id, remainingAliases) {
17
17
  const alias = remainingAliases.get(id);
@@ -56,7 +56,25 @@ function recoveryDraft(namespace, remaining) {
56
56
  return `${lines.join("\n")}\n`;
57
57
  }
58
58
  function plannedResult(plan) {
59
- return { kind: "planned", ...facts(plan), bodies: plan.bodies };
59
+ const positions = new Map(plan.tasks.map((task) => [task.after.id, task.index + 1]));
60
+ return {
61
+ kind: "planned",
62
+ aliases: plan.aliases.map(({ alias, taskId }) => ({ alias, position: positions.get(taskId) })),
63
+ admissionOrder: plan.tasks.map((task) => ({
64
+ position: task.index + 1,
65
+ ...(task.kind === "existing" ? { taskId: task.after.id } : {}),
66
+ ...(task.alias === undefined ? {} : { alias: task.alias }),
67
+ })),
68
+ admissions: plan.admissions.map((admission) => admission.kind === "new"
69
+ ? {
70
+ position: admission.position,
71
+ kind: "new",
72
+ ...(admission.alias === undefined ? {} : { alias: admission.alias }),
73
+ title: admission.title,
74
+ }
75
+ : { position: admission.position, kind: "existing", taskId: admission.taskId, title: admission.title }),
76
+ bodies: plan.bodies,
77
+ };
60
78
  }
61
79
  function physicalPlanDiagnostics(plan) {
62
80
  try {
@@ -34,6 +34,5 @@ export declare const createdTaskObservationSchema: z.ZodUnion<readonly [z.ZodObj
34
34
  }, z.core.$strict>]>;
35
35
  export type CreatedTaskObservation = z.infer<typeof createdTaskObservationSchema>;
36
36
  export declare const EMPTY_CREATED_TASK_OBSERVATION: CreatedTaskObservation;
37
- export declare function parseCreatedTaskObservation(value: unknown): CreatedTaskObservation;
38
37
  /** Project Task board rows created by each identity, preserving input order. */
39
38
  export declare function observeCreatedTaskObservations(world: WorldRoot, createdByIds: readonly string[]): Promise<readonly CreatedTaskObservation[]>;
@@ -6,9 +6,6 @@ export const createdTaskObservationSchema = z.union([
6
6
  z.object({ kind: z.literal("failed"), diagnostic: z.string() }).strict(),
7
7
  ]);
8
8
  export const EMPTY_CREATED_TASK_OBSERVATION = { kind: "present", rows: [] };
9
- export function parseCreatedTaskObservation(value) {
10
- return createdTaskObservationSchema.parse(value);
11
- }
12
9
  function observationDiagnostic(error) {
13
10
  return error instanceof Error ? error.message : String(error);
14
11
  }
@@ -22,5 +19,5 @@ export async function observeCreatedTaskObservations(world, createdByIds) {
22
19
  const failed = { kind: "failed", diagnostic: observationDiagnostic(error) };
23
20
  return createdByIds.map(() => failed);
24
21
  }
25
- return createdByIds.map((createdBy) => parseCreatedTaskObservation({ kind: "present", rows: board.selectCreatedBy(createdBy) }));
22
+ return createdByIds.map((createdBy) => ({ kind: "present", rows: board.selectCreatedBy(createdBy) }));
26
23
  }
@@ -1,6 +1,16 @@
1
+ import { z } from "zod";
1
2
  import { type TaskCoordinate, type TaskId } from "./identity.js";
2
- export type TaskState = "open" | "in_progress" | "on_hold" | "done" | "drop";
3
- export type TaskPriority = 0 | 1 | 2 | 3;
3
+ export declare const taskNonblankTextSchema: z.ZodString;
4
+ export declare const taskStateSchema: z.ZodEnum<{
5
+ open: "open";
6
+ in_progress: "in_progress";
7
+ on_hold: "on_hold";
8
+ done: "done";
9
+ drop: "drop";
10
+ }>;
11
+ export declare const taskPrioritySchema: z.ZodUnion<readonly [z.ZodLiteral<0>, z.ZodLiteral<1>, z.ZodLiteral<2>, z.ZodLiteral<3>]>;
12
+ export type TaskState = z.infer<typeof taskStateSchema>;
13
+ export type TaskPriority = z.infer<typeof taskPrioritySchema>;
4
14
  export type TaskDocument = Readonly<{
5
15
  id: TaskId;
6
16
  title: string;
@@ -1,5 +1,9 @@
1
1
  import { isMap, parseDocument, stringify } from "yaml";
2
+ import { z } from "zod";
2
3
  import { formatTaskId, parseTaskId } from "./identity.js";
4
+ export const taskNonblankTextSchema = z.string().refine((value) => value.trim() !== "");
5
+ export const taskStateSchema = z.enum(["open", "in_progress", "on_hold", "done", "drop"]);
6
+ export const taskPrioritySchema = z.union([z.literal(0), z.literal(1), z.literal(2), z.literal(3)]);
3
7
  export class TaskAuthorityCorruptionError extends Error {
4
8
  /** The Task document whose bytes failed decode, when the reader knew its coordinate. */
5
9
  coordinate;
@@ -1,15 +1,18 @@
1
+ import { z } from "zod";
1
2
  import { type ContractId } from "../core/facts/types.js";
2
3
  export type TaskId = `task/${string}`;
3
4
  export type TaskCoordinate = Readonly<{
4
5
  namespace: readonly string[];
5
6
  localId: string;
6
7
  }>;
7
- export declare const TASK_LOCK_ID_BYTES: number;
8
8
  export declare const TASK_LOCAL_ID_BYTES: number;
9
9
  export declare function isTaskSegment(value: string): boolean;
10
10
  export declare function parseTaskId(value: string): TaskCoordinate;
11
11
  export declare function formatTaskId(coordinate: TaskCoordinate): TaskId;
12
12
  export declare function canonicalTaskId(value: string): TaskId;
13
+ export declare const taskIdSchema: z.ZodPipe<z.ZodString, z.ZodTransform<`task/${string}`, string>>;
14
+ export declare const taskNamespaceSchema: z.ZodReadonly<z.ZodArray<z.ZodString>>;
15
+ export declare const taskIdsSchema: z.ZodReadonly<z.ZodArray<z.ZodPipe<z.ZodString, z.ZodTransform<`task/${string}`, string>>>>;
13
16
  export declare function contractNamespace(id: ContractId): readonly string[];
14
17
  export declare function taskAuthorityPath(tasksDirectory: string, coordinate: TaskCoordinate): string;
15
18
  export declare function deriveLocalStem(title: string): string;
@@ -1,14 +1,14 @@
1
+ import { z } from "zod";
1
2
  import { join } from "node:path";
2
3
  import { randomBytes } from "node:crypto";
3
4
  import { contractSegment } from "../core/facts/types.js";
4
5
  import { identityCoordinate, identitySegments } from "../identity/coordinates.js";
5
- import { normalizeIdentityStem } from "../identity/normalize.js";
6
+ import { fitIdentityStem, normalizeIdentityStem } from "../identity/normalize.js";
6
7
  const STEM_CODE_POINTS = 32;
7
8
  const TASK_FILENAME_BYTES = 255;
8
9
  const TASK_EXTENSION_BYTES = Buffer.byteLength(".md");
9
10
  const TASK_LOCK_EXTENSION_BYTES = Buffer.byteLength(".sqlite");
10
11
  const GENERATED_SUFFIX = "-0000";
11
- export const TASK_LOCK_ID_BYTES = TASK_FILENAME_BYTES - TASK_LOCK_EXTENSION_BYTES;
12
12
  export const TASK_LOCAL_ID_BYTES = TASK_FILENAME_BYTES - TASK_EXTENSION_BYTES - TASK_LOCK_EXTENSION_BYTES - Buffer.byteLength(GENERATED_SUFFIX);
13
13
  const GENERATED_STEM_BYTES = TASK_LOCAL_ID_BYTES - Buffer.byteLength(GENERATED_SUFFIX);
14
14
  const WINDOWS_RESERVED = /^(?:con|prn|aux|nul|clock\$|com[1-9]|lpt[1-9])(?:\..*)?$/iu;
@@ -42,6 +42,23 @@ export function canonicalTaskId(value) {
42
42
  throw new TypeError("task ID is not canonical");
43
43
  return id;
44
44
  }
45
+ export const taskIdSchema = z.string().transform((value, context) => {
46
+ try {
47
+ return canonicalTaskId(value);
48
+ }
49
+ catch {
50
+ context.addIssue({ code: "custom", message: "expected canonical TaskId" });
51
+ return z.NEVER;
52
+ }
53
+ });
54
+ export const taskNamespaceSchema = z.array(z.string().refine(isTaskSegment)).readonly();
55
+ export const taskIdsSchema = z
56
+ .array(taskIdSchema)
57
+ .superRefine((ids, context) => {
58
+ if (new Set(ids).size !== ids.length)
59
+ context.addIssue({ code: "custom", message: "TaskIds must be unique" });
60
+ })
61
+ .readonly();
45
62
  export function contractNamespace(id) {
46
63
  return ["kei", contractSegment(id)];
47
64
  }
@@ -64,31 +81,18 @@ export function deriveLocalStem(title) {
64
81
  fitted += `-${word}`;
65
82
  count = candidate;
66
83
  }
67
- return fitPhysicalStem(fitted);
84
+ return fitIdentityStem({ stem: fitted, maxBytes: GENERATED_STEM_BYTES });
68
85
  }
69
86
  export function allocateLocalId(stem, occupied) {
70
87
  const seed = randomBytes(2).readUInt16BE(0);
71
88
  for (let offset = 0; offset <= 0xffff; offset += 1) {
72
89
  const suffix = ((seed + offset) & 0xffff).toString(16).padStart(4, "0");
73
- const candidate = `${fitPhysicalStem(stem, suffix)}-${suffix}`;
90
+ const candidate = fitIdentityStem({ stem, maxBytes: TASK_LOCAL_ID_BYTES, suffix });
74
91
  if (!occupied.has(candidate))
75
92
  return candidate;
76
93
  }
77
94
  throw new Error("task identity hexadecimal suffix space exhausted");
78
95
  }
79
- function fitPhysicalStem(stem, suffix) {
80
- const maxBytes = suffix === undefined ? GENERATED_STEM_BYTES : TASK_LOCAL_ID_BYTES - Buffer.byteLength(`-${suffix}`);
81
- let result = "";
82
- for (const segment of new Intl.Segmenter("und", { granularity: "grapheme" }).segment(stem)) {
83
- if (Buffer.byteLength(result + segment.segment) > maxBytes)
84
- break;
85
- result += segment.segment;
86
- }
87
- result = result.replace(/-+$/u, "");
88
- if (result.length === 0)
89
- throw new TypeError("task title cannot fit the physical filename budget");
90
- return result;
91
- }
92
96
  export function physicalTaskSegment(segment, maxBytes = TASK_LOCAL_ID_BYTES) {
93
97
  if (Buffer.byteLength(segment) <= maxBytes && !WINDOWS_RESERVED.test(segment))
94
98
  return segment;
@@ -1,8 +1,10 @@
1
1
  import type { WorldRoot } from "../world.js";
2
- import { type ExecutionContext, type LibraryExecution } from "../akuma/requests.js";
2
+ import type { NamespaceContextSource, ResolvedNamespaceContext } from "./context.js";
3
+ import { type ExecutionContext } from "../akuma/requests.js";
4
+ import { type TaskLifecycleVerb } from "./mutation.js";
3
5
  export type { WorldRoot } from "../world.js";
4
6
  import { type BlockedTaskRow, type TaskDetailFacts, type TaskDoctorIssue, type TaskRef, type TaskRow, type TaskTreeNode } from "./board.js";
5
- import { type TaskCompositionAlias, type TaskCompositionBodyPreview, type TaskCompositionResult } from "./compose.js";
7
+ import { type TaskCompositionAlias, type TaskCompositionAdmission, type TaskCompositionBodyPreview, type TaskCompositionPlanAlias, type TaskCompositionPlanOrder, type TaskCompositionResult } from "./compose.js";
6
8
  import { TaskAuthorityCorruptionError, type TaskPriority, type TaskState } from "./document.js";
7
9
  import type { TaskId } from "./identity.js";
8
10
  import { type AddTaskDocumentInput, type AddTaskInput, type TaskBatchResult, type TaskCleanupFailure, type TaskCompositionDiagnostic, type TaskMutationResult, type TaskOutcome, type TaskRefusal, type TaskRetry, type TaskUpdateResult, type TaskView, type UpdateTaskInput } from "./operations.js";
@@ -13,26 +15,42 @@ export type TaskDetail = Omit<TaskDetailFacts, "task"> & Readonly<{
13
15
  export type TaskList = TaskOutcome<TaskPage<TaskRow>>;
14
16
  export type BlockedTaskList = TaskOutcome<TaskPage<BlockedTaskRow>>;
15
17
  export type TaskQueryResult = TaskOutcome<TaskPage<TaskQueryRow>>;
16
- export type TaskContextSource = "default-root" | "contract-installed" | "local-override";
17
- export type ResolvedNamespaceContext = Readonly<{
18
- namespace: readonly string[];
19
- source: TaskContextSource;
20
- }>;
18
+ export type TaskContextSource = NamespaceContextSource;
19
+ export type { ResolvedNamespaceContext };
21
20
  export type TaskContextResult = TaskOutcome<ResolvedNamespaceContext>;
22
21
  export type TaskDoctorReport = Readonly<{
23
22
  issues: readonly TaskDoctorIssue[];
24
23
  }>;
25
24
  export type TaskDecompositionTree = TaskOutcome<TaskTreeNode>;
26
- export type { AddTaskDocumentInput, AddTaskInput, BlockedTaskRow, TaskBatchResult, TaskCleanupFailure, TaskCompositionDiagnostic, TaskCompositionAlias, TaskCompositionBodyPreview, TaskCompositionResult, TaskDoctorIssue, TaskId, TaskMutationResult, TaskOutcome, TaskPriority, TaskRef, TaskRefusal, TaskRetry, TaskRow, TaskState, TaskTreeNode, TaskUpdateResult, TaskView, UpdateTaskInput, TaskPage, TaskQueryExpression, TaskQueryPredicate, TaskQueryRow, TaskQuerySort, TaskRelationPredicateField, };
25
+ export type { AddTaskDocumentInput, AddTaskInput, BlockedTaskRow, TaskBatchResult, TaskCleanupFailure, TaskCompositionDiagnostic, TaskCompositionAlias, TaskCompositionAdmission, TaskCompositionBodyPreview, TaskCompositionPlanAlias, TaskCompositionPlanOrder, TaskCompositionResult, TaskDoctorIssue, TaskId, TaskMutationResult, TaskOutcome, TaskPriority, TaskRef, TaskRefusal, TaskRetry, TaskRow, TaskState, TaskTreeNode, TaskUpdateResult, TaskView, UpdateTaskInput, TaskPage, TaskQueryExpression, TaskQueryPredicate, TaskQueryRow, TaskQuerySort, TaskRelationPredicateField, };
27
26
  export type { LibraryExecution } from "../akuma/requests.js";
28
27
  export { TaskAuthorityCorruptionError, TASK_RELATION_PREDICATE_FIELDS };
29
28
  export { observeRecentTaskStatus, type RecentTaskStatusRow } from "./catalog.js";
30
29
  export { taskRowViewLimit } from "./input.js";
30
+ type ComposeValues = Readonly<{
31
+ markdown: string;
32
+ namespace?: readonly string[];
33
+ actor?: string;
34
+ signal?: AbortSignal;
35
+ }>;
36
+ /**
37
+ * The one bound operation table for a captured route. Each entry either calls the
38
+ * local Task operations directly or sends the same validated values as the one
39
+ * forwarded request shape. Validation stays in the handle methods.
40
+ */
41
+ type TaskOperations = Readonly<{
42
+ add(values: AddTaskInput): Promise<TaskMutationResult>;
43
+ addDocument(values: AddTaskDocumentInput): Promise<TaskMutationResult>;
44
+ compose(values: ComposeValues): Promise<TaskCompositionResult>;
45
+ update(id: TaskId, values: UpdateTaskInput): Promise<TaskUpdateResult>;
46
+ lifecycle(id: TaskId, verb: TaskLifecycleVerb, note: string | undefined, signal?: AbortSignal): Promise<TaskMutationResult>;
47
+ batch(verb: TaskLifecycleVerb, ids: readonly TaskId[], note: string | undefined, signal?: AbortSignal): Promise<TaskBatchResult>;
48
+ }>;
31
49
  declare class TaskHandle {
32
50
  readonly id: TaskId;
33
51
  private readonly world;
34
- private readonly execution;
35
- constructor(id: TaskId, world: WorldRoot, execution: ExecutionContext);
52
+ private readonly operations;
53
+ constructor(id: TaskId, world: WorldRoot, operations: TaskOperations);
36
54
  read(): Promise<TaskDetail | null>;
37
55
  tree(): Promise<TaskDecompositionTree>;
38
56
  update(input: UpdateTaskInput): Promise<TaskUpdateResult>;
@@ -61,8 +79,8 @@ declare class TaskHandle {
61
79
  export type Task = TaskHandle;
62
80
  declare class TasksHandle {
63
81
  private readonly world;
64
- private readonly execution;
65
82
  readonly root: WorldRoot;
83
+ private readonly operations;
66
84
  constructor(world: WorldRoot, execution: ExecutionContext);
67
85
  task(input: Readonly<{
68
86
  id: string;
@@ -96,7 +114,7 @@ declare class TasksHandle {
96
114
  }>): Promise<TaskQueryResult>;
97
115
  doctor(): Promise<TaskDoctorReport>;
98
116
  batch(input: Readonly<{
99
- verb: "start" | "done" | "drop" | "hold";
117
+ verb: "start" | "stop" | "done" | "drop" | "hold" | "resume";
100
118
  ids: readonly string[];
101
119
  note?: string;
102
120
  signal?: AbortSignal;
@@ -110,9 +128,11 @@ declare class TasksHandle {
110
128
  }>): Promise<TaskCompositionResult>;
111
129
  }
112
130
  export type Tasks = TasksHandle;
113
- type TasksOfInput = Readonly<{
114
- execution?: LibraryExecution;
115
- }>;
131
+ /**
132
+ * The one Tasks composition. Public `of` fixes local execution; CLI and Body pass their captured
133
+ * internal channel through `tasksWithExecution` instead of a second constructor.
134
+ */
135
+ export declare function tasksWithExecution(world: WorldRoot, execution: ExecutionContext): Tasks;
116
136
  export declare const Tasks: Readonly<{
117
- of(world: WorldRoot, input?: TasksOfInput): Tasks;
137
+ of(world: WorldRoot): Tasks;
118
138
  }>;
@@ -1,15 +1,19 @@
1
- import { executionChannel, libraryExecution, localExecutionContext, } from "../akuma/requests.js";
2
- import { requestForwardedTask } from "./mutation.js";
1
+ import { executionChannel, localExecutionContext } from "../akuma/requests.js";
2
+ import { requestForwardedTask, } from "./mutation.js";
3
3
  import { buildTree, createTaskRelations, diagnoseBoard, } from "./board.js";
4
4
  import { composeTasks, } from "./compose.js";
5
5
  import { TaskAuthorityCorruptionError } from "./document.js";
6
6
  import { addTask, addTaskDocument, batchTasks, blockedTasks, lifecycleTask, listTasks, queryTasks, readTaskDetail, readyTasks, taskView, updateTask, } from "./operations.js";
7
7
  import { readBoard } from "./store.js";
8
8
  import { actor, addInput, closed, namespace, record, signal, sort, taskRowViewLimit, taskId as id, taskIds, text, updateInput, } from "./input.js";
9
- import { normalizeTaskQuery, TASK_RELATION_PREDICATE_FIELDS, } from "./query.js";
9
+ import { normalizeTaskQuery, taskQuerySelection, TASK_RELATION_PREDICATE_FIELDS, } from "./query.js";
10
10
  export { TaskAuthorityCorruptionError, TASK_RELATION_PREDICATE_FIELDS };
11
11
  export { observeRecentTaskStatus } from "./catalog.js";
12
12
  export { taskRowViewLimit } from "./input.js";
13
+ function taskRoute(execution) {
14
+ const channel = executionChannel(execution);
15
+ return channel.kind === "body-request" ? { kind: "forwarded", directory: channel.directory } : { kind: "local" };
16
+ }
13
17
  function forwardTask(directory, world, request, signal) {
14
18
  return requestForwardedTask({
15
19
  directory,
@@ -18,14 +22,66 @@ function forwardTask(directory, world, request, signal) {
18
22
  ...(signal === undefined ? {} : { signal }),
19
23
  });
20
24
  }
25
+ /** The single lifecycle request shapes, keyed once by verb instead of switched per handle. */
26
+ const SINGLE_LIFECYCLE = {
27
+ start: (id) => ({ action: "task.start", id }),
28
+ stop: (id) => ({ action: "task.stop", id }),
29
+ hold: (id) => ({ action: "task.hold", id }),
30
+ resume: (id) => ({ action: "task.resume", id }),
31
+ done: (id, note) => ({ action: "task.done", id, ...(note === undefined ? {} : { note }) }),
32
+ drop: (id, note) => ({ action: "task.drop", id, ...(note === undefined ? {} : { note }) }),
33
+ };
34
+ /** The batch lifecycle request shapes for the same verbs. */
35
+ const BATCH_LIFECYCLE = {
36
+ start: (ids) => ({ action: "task.start", ids }),
37
+ stop: (ids) => ({ action: "task.stop", ids }),
38
+ hold: (ids) => ({ action: "task.hold", ids }),
39
+ resume: (ids) => ({ action: "task.resume", ids }),
40
+ done: (ids, note) => ({ action: "task.done", ids, ...(note === undefined ? {} : { note }) }),
41
+ drop: (ids, note) => ({ action: "task.drop", ids, ...(note === undefined ? {} : { note }) }),
42
+ };
43
+ function taskOperations(world, route) {
44
+ if (route.kind === "forwarded") {
45
+ const { directory } = route;
46
+ return {
47
+ add: (values) => {
48
+ const { actor: _actor, signal, namespace: selected, ...request } = values;
49
+ return forwardTask(directory, world, { action: "task.add", input: { ...request, namespace: selected ?? [] } }, signal);
50
+ },
51
+ addDocument: (values) => forwardTask(directory, world, { action: "task.addDocument", input: { markdown: values.markdown, namespace: values.namespace ?? [] } }, values.signal),
52
+ compose: (values) => forwardTask(directory, world, { action: "task.compose", markdown: values.markdown, namespace: values.namespace ?? [] }, values.signal),
53
+ update: (id, values) => {
54
+ const { signal, ...request } = values;
55
+ return forwardTask(directory, world, { action: "task.update", id, input: request }, signal);
56
+ },
57
+ lifecycle: (id, verb, note, signal) => forwardTask(directory, world, SINGLE_LIFECYCLE[verb](id, note), signal),
58
+ batch: (verb, ids, note, signal) => forwardTask(directory, world, BATCH_LIFECYCLE[verb](ids, note), signal),
59
+ };
60
+ }
61
+ return {
62
+ add: (values) => addTask(world, values),
63
+ addDocument: (values) => addTaskDocument(world, values),
64
+ compose: (values) => composeTasks({
65
+ world,
66
+ markdown: values.markdown,
67
+ ...(values.signal === undefined ? {} : { signal: values.signal }),
68
+ ...(values.actor === undefined ? {} : { actor: values.actor }),
69
+ ...(values.namespace === undefined ? {} : { defaultNamespace: values.namespace }),
70
+ planOnly: false,
71
+ }),
72
+ update: (id, values) => updateTask(world, id, values),
73
+ lifecycle: (id, verb, note, signal) => lifecycleTask(world, id, verb, signal, note),
74
+ batch: (verb, ids, note, signal) => batchTasks(world, verb, ids, signal, note),
75
+ };
76
+ }
21
77
  class TaskHandle {
22
78
  id;
23
79
  world;
24
- execution;
25
- constructor(id, world, execution) {
80
+ operations;
81
+ constructor(id, world, operations) {
26
82
  this.id = id;
27
83
  this.world = world;
28
- this.execution = execution;
84
+ this.operations = operations;
29
85
  }
30
86
  async read() {
31
87
  const facts = await readTaskDetail(this.world, this.id);
@@ -41,37 +97,13 @@ class TaskHandle {
41
97
  : { kind: "accepted", value: node };
42
98
  }
43
99
  update(input) {
44
- const values = updateInput(input);
45
- const { signal: abort, ...request } = values;
46
- const channel = executionChannel(this.execution);
47
- if (channel.kind === "body-request") {
48
- return forwardTask(channel.directory, this.world, { action: "task.update", id: this.id, input: request }, abort);
49
- }
50
- return updateTask(this.world, this.id, values);
100
+ return this.operations.update(this.id, updateInput(input));
51
101
  }
52
102
  lifecycle(verb, input) {
53
103
  const value = record(input ?? {}, `${verb} input`);
54
104
  closed(value, verb === "drop" || verb === "done" ? ["note", "signal"] : ["signal"], `${verb} input`);
55
105
  const note = verb === "drop" || verb === "done" ? text(value.note, "note") : undefined;
56
- const abort = signal(value.signal);
57
- const channel = executionChannel(this.execution);
58
- if (channel.kind === "body-request") {
59
- switch (verb) {
60
- case "start":
61
- return forwardTask(channel.directory, this.world, { action: "task.start", id: this.id }, abort);
62
- case "stop":
63
- return forwardTask(channel.directory, this.world, { action: "task.stop", id: this.id }, abort);
64
- case "hold":
65
- return forwardTask(channel.directory, this.world, { action: "task.hold", id: this.id }, abort);
66
- case "resume":
67
- return forwardTask(channel.directory, this.world, { action: "task.resume", id: this.id }, abort);
68
- case "done":
69
- return forwardTask(channel.directory, this.world, { action: "task.done", id: this.id, ...(note === undefined ? {} : { note }) }, abort);
70
- case "drop":
71
- return forwardTask(channel.directory, this.world, { action: "task.drop", id: this.id, ...(note === undefined ? {} : { note }) }, abort);
72
- }
73
- }
74
- return lifecycleTask(this.world, this.id, verb, abort, note);
106
+ return this.operations.lifecycle(this.id, verb, note, signal(value.signal));
75
107
  }
76
108
  start(input) {
77
109
  return this.lifecycle("start", input);
@@ -94,26 +126,20 @@ class TaskHandle {
94
126
  }
95
127
  class TasksHandle {
96
128
  world;
97
- execution;
98
129
  root;
130
+ operations;
99
131
  constructor(world, execution) {
100
132
  this.world = world;
101
- this.execution = execution;
102
133
  this.root = world;
134
+ this.operations = taskOperations(world, taskRoute(execution));
103
135
  }
104
136
  task(input) {
105
137
  const v = record(input, "task input");
106
138
  closed(v, ["id"], "task input");
107
- return new TaskHandle(id(v.id), this.world, this.execution);
139
+ return new TaskHandle(id(v.id), this.world, this.operations);
108
140
  }
109
141
  add(input) {
110
- const values = addInput(input);
111
- const { actor: _actor, signal: abort, namespace: selected, ...request } = values;
112
- const channel = executionChannel(this.execution);
113
- if (channel.kind === "body-request") {
114
- return forwardTask(channel.directory, this.world, { action: "task.add", input: { ...request, namespace: selected ?? [] } }, abort);
115
- }
116
- return addTask(this.world, values);
142
+ return this.operations.add(addInput(input));
117
143
  }
118
144
  addDocument(input) {
119
145
  const v = record(input, "addDocument input");
@@ -122,17 +148,12 @@ class TasksHandle {
122
148
  if (markdown === undefined)
123
149
  throw new TypeError("markdown is required");
124
150
  const ns = namespace(v.namespace), createdBy = actor(v.actor), abort = signal(v.signal);
125
- const local = {
151
+ return this.operations.addDocument({
126
152
  markdown,
127
153
  ...(ns === undefined ? {} : { namespace: ns }),
128
154
  ...(createdBy === undefined ? {} : { actor: createdBy }),
129
155
  ...(abort === undefined ? {} : { signal: abort }),
130
- };
131
- const channel = executionChannel(this.execution);
132
- if (channel.kind === "body-request") {
133
- return forwardTask(channel.directory, this.world, { action: "task.addDocument", input: { markdown, namespace: ns ?? [] } }, abort);
134
- }
135
- return addTaskDocument(this.world, local);
156
+ });
136
157
  }
137
158
  async list(input = {}) {
138
159
  const v = record(input, "list input");
@@ -167,15 +188,7 @@ class TasksHandle {
167
188
  closed(v, ["where", "scope", "namespace", "sort", "limit"], "query input");
168
189
  if (v.scope !== undefined && v.scope !== "namespace" && v.scope !== "world")
169
190
  throw new TypeError("scope must be namespace or world");
170
- const expression = v.where === undefined
171
- ? {
172
- kind: "and",
173
- terms: [
174
- { kind: "predicate", predicate: { field: "state", operator: "!=", value: "done" } },
175
- { kind: "predicate", predicate: { field: "state", operator: "!=", value: "drop" } },
176
- ],
177
- }
178
- : normalizeTaskQuery(v.where);
191
+ const expression = v.where === undefined ? taskQuerySelection() : normalizeTaskQuery(v.where);
179
192
  const selected = namespace(v.namespace);
180
193
  const selectedLimit = taskRowViewLimit(v.limit);
181
194
  return queryTasks({
@@ -194,7 +207,12 @@ class TasksHandle {
194
207
  const v = record(input, "batch input");
195
208
  closed(v, ["verb", "ids", "note", "signal"], "batch input");
196
209
  const verb = v.verb;
197
- if (verb !== "start" && verb !== "done" && verb !== "drop" && verb !== "hold")
210
+ if (verb !== "start" &&
211
+ verb !== "stop" &&
212
+ verb !== "done" &&
213
+ verb !== "drop" &&
214
+ verb !== "hold" &&
215
+ verb !== "resume")
198
216
  throw new TypeError("batch verb is invalid");
199
217
  const ids = taskIds(v.ids, "ids");
200
218
  if (ids === undefined || ids.length === 0)
@@ -202,21 +220,7 @@ class TasksHandle {
202
220
  const note = text(v.note, "note");
203
221
  if (note !== undefined && verb !== "done" && verb !== "drop")
204
222
  throw new TypeError("batch note is valid only for done or drop");
205
- const abort = signal(v.signal);
206
- const channel = executionChannel(this.execution);
207
- if (channel.kind === "body-request") {
208
- switch (verb) {
209
- case "start":
210
- return forwardTask(channel.directory, this.world, { action: "task.start", ids }, abort);
211
- case "hold":
212
- return forwardTask(channel.directory, this.world, { action: "task.hold", ids }, abort);
213
- case "done":
214
- return forwardTask(channel.directory, this.world, { action: "task.done", ids, ...(note === undefined ? {} : { note }) }, abort);
215
- case "drop":
216
- return forwardTask(channel.directory, this.world, { action: "task.drop", ids, ...(note === undefined ? {} : { note }) }, abort);
217
- }
218
- }
219
- return batchTasks(this.world, verb, ids, abort, note);
223
+ return this.operations.batch(verb, ids, note, signal(v.signal));
220
224
  }
221
225
  compose(input) {
222
226
  const v = record(input, "compose input");
@@ -229,33 +233,36 @@ class TasksHandle {
229
233
  const selected = namespace(v.namespace);
230
234
  const selectedSignal = signal(v.signal);
231
235
  const selectedActor = actor(v.actor);
232
- const local = {
233
- world: this.world,
236
+ if (v.plan === true) {
237
+ // A dry-run plan never leaves the process: it composes locally on any route.
238
+ return composeTasks({
239
+ world: this.world,
240
+ markdown,
241
+ ...(selectedSignal === undefined ? {} : { signal: selectedSignal }),
242
+ ...(selectedActor === undefined ? {} : { actor: selectedActor }),
243
+ ...(selected === undefined ? {} : { defaultNamespace: selected }),
244
+ planOnly: true,
245
+ });
246
+ }
247
+ return this.operations.compose({
234
248
  markdown,
235
- ...(selectedSignal === undefined ? {} : { signal: selectedSignal }),
249
+ ...(selected === undefined ? {} : { namespace: selected }),
236
250
  ...(selectedActor === undefined ? {} : { actor: selectedActor }),
237
- ...(selected === undefined ? {} : { defaultNamespace: selected }),
238
- planOnly: v.plan === true,
239
- };
240
- const channel = executionChannel(this.execution);
241
- if (channel.kind === "body-request" && v.plan !== true) {
242
- return forwardTask(channel.directory, this.world, { action: "task.compose", markdown, namespace: selected ?? [] }, selectedSignal);
243
- }
244
- return composeTasks(local);
251
+ ...(selectedSignal === undefined ? {} : { signal: selectedSignal }),
252
+ });
245
253
  }
246
254
  }
247
- function tasksOfExecution(input) {
248
- if (input === undefined)
249
- return localExecutionContext();
250
- const values = record(input, "Tasks.of input");
251
- closed(values, ["execution"], "Tasks.of input");
252
- return values.execution === undefined ? localExecutionContext() : libraryExecution(values.execution);
255
+ /**
256
+ * The one Tasks composition. Public `of` fixes local execution; CLI and Body pass their captured
257
+ * internal channel through `tasksWithExecution` instead of a second constructor.
258
+ */
259
+ export function tasksWithExecution(world, execution) {
260
+ if (typeof world !== "string")
261
+ throw new TypeError("Tasks.of world must be a WorldRoot");
262
+ return new TasksHandle(world, execution);
253
263
  }
254
264
  export const Tasks = Object.freeze({
255
- of(world, input) {
256
- const execution = tasksOfExecution(input);
257
- if (typeof world !== "string")
258
- throw new TypeError("Tasks.of world must be a WorldRoot");
259
- return new TasksHandle(world, execution);
265
+ of(world) {
266
+ return tasksWithExecution(world, localExecutionContext());
260
267
  },
261
268
  });
@@ -2,5 +2,5 @@ import { type SettledTaskResult, type TaskBatchResult, type TaskLifecycleVerb, t
2
2
  import type { TaskId } from "./identity.js";
3
3
  import type { WorldRoot } from "../world.js";
4
4
  export declare function lifecycleTask(world: WorldRoot, id: TaskId, verb: TaskLifecycleVerb, signal?: AbortSignal, note?: string): Promise<TaskMutationResult>;
5
- export declare function batchTasks(world: WorldRoot, verb: "start" | "done" | "drop" | "hold", ids: readonly TaskId[], signal?: AbortSignal, note?: string): Promise<TaskBatchResult>;
5
+ export declare function batchTasks(world: WorldRoot, verb: TaskLifecycleVerb, ids: readonly TaskId[], signal?: AbortSignal, note?: string): Promise<TaskBatchResult>;
6
6
  export declare function settleTask(world: WorldRoot, id: TaskId): Promise<SettledTaskResult>;