@astrosheep/keiyaku 2.9.13 → 4.0.0

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 (670) hide show
  1. package/README.md +10 -130
  2. package/build/integrations/marketplace/.agents/plugins/marketplace.json +12 -0
  3. package/build/integrations/marketplace/.claude-plugin/marketplace.json +5 -0
  4. package/build/integrations/marketplace/plugins/keiyaku/.claude-plugin/plugin.json +7 -0
  5. package/build/integrations/marketplace/plugins/keiyaku/.codex-plugin/plugin.json +18 -0
  6. package/build/integrations/marketplace/plugins/keiyaku/opencode.js +16 -0
  7. package/build/integrations/marketplace/plugins/keiyaku/package.json +8 -0
  8. package/build/integrations/marketplace/plugins/keiyaku/skills/keiyaku/SKILL.md +34 -0
  9. package/build/integrations/marketplace/plugins/keiyaku/skills/keiyaku-akuma/SKILL.md +50 -0
  10. package/build/integrations/marketplace/plugins/keiyaku/skills/keiyaku-task/SKILL.md +62 -0
  11. package/build/integrations/marketplace/plugins/keiyaku/skills/keiyaku-workflow/SKILL.md +72 -0
  12. package/build/src/akuma/activity.d.ts +66 -0
  13. package/build/src/akuma/activity.js +139 -0
  14. package/build/src/akuma/akuma.d.ts +116 -0
  15. package/build/src/akuma/akuma.js +382 -0
  16. package/build/src/akuma/archetype.d.ts +31 -0
  17. package/build/src/akuma/archetype.js +188 -0
  18. package/build/src/akuma/body.d.ts +20 -0
  19. package/build/src/akuma/body.js +305 -0
  20. package/build/src/akuma/heart/facts.d.ts +150 -0
  21. package/build/src/akuma/heart/facts.js +9 -0
  22. package/build/src/akuma/heart/index.d.ts +78 -0
  23. package/build/src/akuma/heart/index.js +361 -0
  24. package/build/src/akuma/heart/rows.d.ts +189 -0
  25. package/build/src/akuma/heart/rows.js +319 -0
  26. package/build/src/akuma/heart/schema.d.ts +5 -0
  27. package/build/src/akuma/heart/schema.js +113 -0
  28. package/build/src/akuma/identity.d.ts +46 -0
  29. package/build/src/akuma/identity.js +89 -0
  30. package/build/src/akuma/index.d.ts +7 -0
  31. package/build/src/akuma/index.js +3 -0
  32. package/build/src/akuma/provider.d.ts +123 -0
  33. package/build/src/akuma/provider.js +235 -0
  34. package/build/src/akuma/providers/claude.d.ts +84 -0
  35. package/build/src/akuma/providers/claude.js +305 -0
  36. package/build/src/akuma/providers/codex-app-server/events.d.ts +110 -0
  37. package/build/src/akuma/providers/codex-app-server/events.js +337 -0
  38. package/build/src/akuma/providers/codex-app-server/index.d.ts +27 -0
  39. package/build/src/akuma/providers/codex-app-server/index.js +162 -0
  40. package/build/src/akuma/providers/index.d.ts +4 -0
  41. package/build/src/akuma/providers/index.js +71 -0
  42. package/build/src/akuma/publication.d.ts +10 -0
  43. package/build/src/akuma/publication.js +107 -0
  44. package/build/src/akuma/requests.d.ts +46 -0
  45. package/build/src/akuma/requests.js +388 -0
  46. package/build/src/alias/index.d.ts +17 -0
  47. package/build/src/alias/index.js +104 -0
  48. package/build/src/body/amend.d.ts +2 -0
  49. package/build/src/body/amend.js +289 -0
  50. package/build/src/body/arc.d.ts +2 -0
  51. package/build/src/body/arc.js +54 -0
  52. package/build/src/body/decode.d.ts +4 -0
  53. package/build/src/body/decode.js +146 -0
  54. package/build/src/body/keys.d.ts +4 -0
  55. package/build/src/body/keys.js +11 -0
  56. package/build/src/body/region.d.ts +6 -0
  57. package/build/src/body/region.js +139 -0
  58. package/build/src/body/render.d.ts +4 -0
  59. package/build/src/body/render.js +73 -0
  60. package/build/src/body/shape.d.ts +29 -0
  61. package/build/src/body/shape.js +16 -0
  62. package/build/src/body/types.d.ts +28 -0
  63. package/build/src/body/verification.d.ts +7 -0
  64. package/build/src/body/verification.js +25 -0
  65. package/build/src/cli/accepted.d.ts +16 -0
  66. package/build/src/cli/accepted.js +65 -0
  67. package/build/src/cli/actor.d.ts +8 -0
  68. package/build/src/cli/actor.js +11 -0
  69. package/build/src/cli/commands/akuma-invoke.d.ts +53 -0
  70. package/build/src/cli/commands/akuma-invoke.js +68 -0
  71. package/build/src/cli/commands/akuma.d.ts +42 -0
  72. package/build/src/cli/commands/akuma.js +224 -0
  73. package/build/src/cli/commands/amend.d.ts +13 -0
  74. package/build/src/cli/commands/amend.js +13 -0
  75. package/build/src/cli/commands/bind.d.ts +12 -0
  76. package/build/src/cli/commands/bind.js +17 -0
  77. package/build/src/cli/commands/install.d.ts +25 -0
  78. package/build/src/cli/commands/install.js +103 -0
  79. package/build/src/cli/commands/task-invoke.d.ts +9 -0
  80. package/build/src/cli/commands/task-invoke.js +92 -0
  81. package/build/src/cli/commands/task.d.ts +16 -0
  82. package/build/src/cli/commands/task.js +144 -0
  83. package/build/src/cli/index.d.ts +2 -0
  84. package/build/src/cli/index.js +3 -0
  85. package/build/src/cli/invoke.d.ts +17 -0
  86. package/build/src/cli/invoke.js +265 -0
  87. package/build/src/cli/main.d.ts +1 -0
  88. package/build/src/cli/main.js +79 -0
  89. package/build/src/cli/parse.d.ts +210 -0
  90. package/build/src/cli/parse.js +375 -0
  91. package/build/src/cli/render/akuma-tool.d.ts +11 -0
  92. package/build/src/cli/render/akuma-tool.js +68 -0
  93. package/build/src/cli/render/akuma.d.ts +6 -0
  94. package/build/src/cli/render/akuma.js +254 -0
  95. package/build/src/cli/render/board.d.ts +2 -0
  96. package/build/src/cli/render/board.js +4 -0
  97. package/build/src/cli/render/contract.d.ts +4 -0
  98. package/build/src/cli/render/contract.js +69 -0
  99. package/build/src/cli/render/kanshi.d.ts +3 -0
  100. package/build/src/cli/render/kanshi.js +204 -0
  101. package/build/src/cli/render/refusal.d.ts +2 -0
  102. package/build/src/cli/render/refusal.js +4 -0
  103. package/build/src/cli/render/settings.d.ts +3 -0
  104. package/build/src/cli/render/settings.js +30 -0
  105. package/build/src/cli/render/task.d.ts +6 -0
  106. package/build/src/cli/render/task.js +105 -0
  107. package/build/src/cli/render/terminal.d.ts +10 -0
  108. package/build/src/cli/render/terminal.js +76 -0
  109. package/build/src/cli/render/text.d.ts +3 -0
  110. package/build/src/cli/render/text.js +15 -0
  111. package/build/src/cli/result.d.ts +55 -0
  112. package/build/src/cli/selectors.d.ts +9 -0
  113. package/build/src/cli/selectors.js +66 -0
  114. package/build/src/cli/usage.d.ts +6 -0
  115. package/build/src/cli/usage.js +19 -0
  116. package/build/src/context-root.d.ts +4 -0
  117. package/build/src/context-root.js +15 -0
  118. package/build/src/coordination/durable-file.d.ts +1 -0
  119. package/build/src/coordination/durable-file.js +36 -0
  120. package/build/src/coordination/sqlite-transaction-lock.d.ts +14 -0
  121. package/build/src/coordination/sqlite-transaction-lock.js +119 -0
  122. package/build/src/core/decide.d.ts +45 -0
  123. package/build/src/core/facts/codec.d.ts +3 -0
  124. package/build/src/core/facts/codec.js +258 -0
  125. package/build/src/core/facts/eligibility.d.ts +16 -0
  126. package/build/src/core/facts/eligibility.js +75 -0
  127. package/build/src/core/facts/errors.d.ts +3 -0
  128. package/build/src/core/facts/errors.js +6 -0
  129. package/build/src/core/facts/fold.d.ts +2 -0
  130. package/build/src/core/facts/fold.js +97 -0
  131. package/build/src/core/facts/gate.d.ts +24 -0
  132. package/build/src/core/facts/gate.js +52 -0
  133. package/build/src/core/facts/observation.d.ts +12 -0
  134. package/build/src/core/facts/observation.js +23 -0
  135. package/build/src/core/facts/offer.d.ts +21 -0
  136. package/build/src/core/facts/types.d.ts +130 -0
  137. package/build/src/core/facts/types.js +66 -0
  138. package/build/src/core/subject.d.ts +21 -0
  139. package/build/src/core/subject.js +89 -0
  140. package/build/src/core/verbs/abandon.d.ts +13 -0
  141. package/build/src/core/verbs/abandon.js +17 -0
  142. package/build/src/core/verbs/amend.d.ts +14 -0
  143. package/build/src/core/verbs/amend.js +56 -0
  144. package/build/src/core/verbs/arc.d.ts +13 -0
  145. package/build/src/core/verbs/arc.js +25 -0
  146. package/build/src/core/verbs/attestation.d.ts +13 -0
  147. package/build/src/core/verbs/attestation.js +21 -0
  148. package/build/src/core/verbs/bind.d.ts +13 -0
  149. package/build/src/core/verbs/bind.js +40 -0
  150. package/build/src/core/verbs/deliver.d.ts +13 -0
  151. package/build/src/core/verbs/deliver.js +26 -0
  152. package/build/src/core/verbs/placement.d.ts +13 -0
  153. package/build/src/core/verbs/placement.js +42 -0
  154. package/build/src/dispatch/index.d.ts +31 -0
  155. package/build/src/dispatch/index.js +159 -0
  156. package/build/src/git/admission.d.ts +18 -0
  157. package/build/src/git/admission.js +116 -0
  158. package/build/src/git/delivery.d.ts +20 -0
  159. package/build/src/git/delivery.js +109 -0
  160. package/build/src/git/hooks.d.ts +34 -0
  161. package/build/src/git/hooks.js +258 -0
  162. package/build/src/git/identity.d.ts +13 -0
  163. package/build/src/git/identity.js +28 -0
  164. package/build/src/git/observe.d.ts +38 -0
  165. package/build/src/git/observe.js +227 -0
  166. package/build/src/git/reconcile.d.ts +49 -0
  167. package/build/src/git/reconcile.js +223 -0
  168. package/build/src/git/repository.d.ts +80 -0
  169. package/build/src/git/repository.js +456 -0
  170. package/build/src/git/tree.d.ts +34 -0
  171. package/build/src/git/tree.js +112 -0
  172. package/build/src/git/verification.d.ts +14 -0
  173. package/build/src/git/verification.js +56 -0
  174. package/build/src/identity/coordinates.d.ts +9 -0
  175. package/build/src/identity/coordinates.js +20 -0
  176. package/build/src/identity/normalize.d.ts +8 -0
  177. package/build/src/identity/normalize.js +45 -0
  178. package/build/src/identity/selector.d.ts +6 -0
  179. package/build/src/identity/selector.js +7 -0
  180. package/build/src/index.d.ts +4 -0
  181. package/build/src/index.js +2 -0
  182. package/build/src/kanshi/index.d.ts +5 -0
  183. package/build/src/kanshi/index.js +2 -0
  184. package/build/src/kanshi/read.d.ts +5 -0
  185. package/build/src/kanshi/read.js +100 -0
  186. package/build/src/kanshi/report.d.ts +35 -0
  187. package/build/src/kanshi/select.d.ts +8 -0
  188. package/build/src/kanshi/select.js +21 -0
  189. package/build/src/library/akuma-creation.d.ts +79 -0
  190. package/build/src/library/akuma-creation.js +151 -0
  191. package/build/src/library/configuration.d.ts +26 -0
  192. package/build/src/library/configuration.js +100 -0
  193. package/build/src/library/contract.d.ts +145 -0
  194. package/build/src/library/contract.js +325 -0
  195. package/build/src/library/input.d.ts +13 -0
  196. package/build/src/library/input.js +82 -0
  197. package/build/src/library/keiyaku.d.ts +28 -0
  198. package/build/src/library/keiyaku.js +16 -0
  199. package/build/src/library/region.d.ts +17 -0
  200. package/build/src/library/region.js +30 -0
  201. package/build/src/library/repo.d.ts +33 -0
  202. package/build/src/library/repo.js +61 -0
  203. package/build/src/markdown/diff.d.ts +1 -0
  204. package/build/src/markdown/diff.js +4 -0
  205. package/build/src/markdown/lex.d.ts +3 -0
  206. package/build/src/markdown/lex.js +221 -0
  207. package/build/src/markdown/parse.d.ts +2 -0
  208. package/build/src/markdown/parse.js +221 -0
  209. package/build/src/markdown/query.d.ts +21 -0
  210. package/build/src/markdown/query.js +51 -0
  211. package/build/src/markdown/types.d.ts +118 -0
  212. package/build/src/markdown/types.js +6 -0
  213. package/build/src/protocol/attempt.d.ts +36 -0
  214. package/build/src/protocol/attempt.js +119 -0
  215. package/build/src/protocol/bind.d.ts +25 -0
  216. package/build/src/protocol/bind.js +62 -0
  217. package/build/src/protocol/intent.d.ts +52 -0
  218. package/build/src/protocol/intent.js +129 -0
  219. package/build/src/protocol/operations.d.ts +140 -0
  220. package/build/src/protocol/operations.js +373 -0
  221. package/build/src/protocol/outcome.d.ts +18 -0
  222. package/build/src/protocol/outcome.js +15 -0
  223. package/build/src/protocol/read/audit.d.ts +25 -0
  224. package/build/src/protocol/read/audit.js +39 -0
  225. package/build/src/protocol/read/documents.d.ts +8 -0
  226. package/build/src/protocol/read/documents.js +16 -0
  227. package/build/src/protocol/read/status.d.ts +38 -0
  228. package/build/src/protocol/read/status.js +47 -0
  229. package/build/src/protocol/run.d.ts +39 -0
  230. package/build/src/protocol/run.js +36 -0
  231. package/build/src/runtime/proc/line-rpc.d.ts +37 -0
  232. package/build/src/runtime/proc/line-rpc.js +124 -0
  233. package/build/src/runtime/proc/run.d.ts +54 -0
  234. package/build/src/runtime/proc/run.js +200 -0
  235. package/build/src/settings.d.ts +45 -0
  236. package/build/src/settings.js +99 -0
  237. package/build/src/settlement/holder.d.ts +15 -0
  238. package/build/src/settlement/holder.js +113 -0
  239. package/build/src/settlement/settle.d.ts +36 -0
  240. package/build/src/settlement/settle.js +91 -0
  241. package/build/src/task/board.d.ts +65 -0
  242. package/build/src/task/board.js +155 -0
  243. package/build/src/task/compose.d.ts +25 -0
  244. package/build/src/task/compose.js +232 -0
  245. package/build/src/task/context.d.ts +4 -0
  246. package/build/src/task/context.js +56 -0
  247. package/build/src/task/document.d.ts +24 -0
  248. package/build/src/task/document.js +118 -0
  249. package/build/src/task/identity.d.ts +12 -0
  250. package/build/src/task/identity.js +47 -0
  251. package/build/src/task/index.d.ts +90 -0
  252. package/build/src/task/index.js +179 -0
  253. package/build/src/task/operations.d.ts +115 -0
  254. package/build/src/task/operations.js +194 -0
  255. package/build/src/task/store.d.ts +22 -0
  256. package/build/src/task/store.js +114 -0
  257. package/build/src/verification/declaration.d.ts +22 -0
  258. package/build/src/verification/declaration.js +14 -0
  259. package/build/src/verification/producer.d.ts +23 -0
  260. package/build/src/verification/producer.js +54 -0
  261. package/package.json +62 -44
  262. package/build/.tsbuildinfo +0 -1
  263. package/build/agents/call-terms.js +0 -32
  264. package/build/agents/harness/activity-values.js +0 -70
  265. package/build/agents/harness/control-types.js +0 -18
  266. package/build/agents/harness/event-channel.js +0 -213
  267. package/build/agents/harness/event-persistence.js +0 -220
  268. package/build/agents/harness/events.js +0 -48
  269. package/build/agents/harness/execution-handle.js +0 -172
  270. package/build/agents/harness/index.js +0 -11
  271. package/build/agents/harness/outcome-error.js +0 -81
  272. package/build/agents/harness/outcome.js +0 -220
  273. package/build/agents/harness/projection.js +0 -369
  274. package/build/agents/harness/provider-adapter.js +0 -58
  275. package/build/agents/harness/router.js +0 -30
  276. package/build/agents/harness/runtime.js +0 -85
  277. package/build/agents/harness/session.js +0 -15
  278. package/build/agents/launch-snapshot/model.js +0 -127
  279. package/build/agents/launch-snapshot/parse-helpers.js +0 -114
  280. package/build/agents/launch-snapshot/resolve.js +0 -46
  281. package/build/agents/opencode-sdk.js +0 -159
  282. package/build/agents/providers/claude-agent-sdk/adapter.js +0 -396
  283. package/build/agents/providers/claude-agent-sdk/events.js +0 -218
  284. package/build/agents/providers/claude-agent-sdk/registration.js +0 -225
  285. package/build/agents/providers/claude-agent-sdk/session-schema.js +0 -2
  286. package/build/agents/providers/claude-agent-sdk/session.js +0 -172
  287. package/build/agents/providers/codex-app-server/adapter.js +0 -387
  288. package/build/agents/providers/codex-app-server/events.js +0 -492
  289. package/build/agents/providers/codex-app-server/identity.js +0 -1
  290. package/build/agents/providers/codex-app-server/policy.js +0 -29
  291. package/build/agents/providers/codex-app-server/registration.js +0 -259
  292. package/build/agents/providers/codex-app-server/session-schema.js +0 -6
  293. package/build/agents/providers/codex-app-server/session.js +0 -273
  294. package/build/agents/providers/event-type-tail.js +0 -16
  295. package/build/agents/providers/opencode-sdk/adapter.js +0 -402
  296. package/build/agents/providers/opencode-sdk/events.js +0 -380
  297. package/build/agents/providers/opencode-sdk/registration.js +0 -146
  298. package/build/agents/providers/opencode-sdk/session-schema.js +0 -2
  299. package/build/agents/providers/opencode-sdk/session.js +0 -187
  300. package/build/agents/providers/pi/adapter.js +0 -285
  301. package/build/agents/providers/pi/checkpoint.js +0 -49
  302. package/build/agents/providers/pi/events.js +0 -285
  303. package/build/agents/providers/pi/registration.js +0 -160
  304. package/build/agents/providers/pi/session-schema.js +0 -6
  305. package/build/agents/providers/registration.js +0 -7
  306. package/build/agents/providers/registry.js +0 -76
  307. package/build/agents/selector.js +0 -120
  308. package/build/agents/session.js +0 -29
  309. package/build/agents/string-tail-buffer.js +0 -44
  310. package/build/agents/types.js +0 -30
  311. package/build/artifact-directories.js +0 -22
  312. package/build/cli/commands/akuma/akuma/handler.js +0 -5
  313. package/build/cli/commands/akuma/akuma/meta.js +0 -17
  314. package/build/cli/commands/akuma/catalog.js +0 -10
  315. package/build/cli/commands/akuma/list/handler.js +0 -15
  316. package/build/cli/commands/akuma/list/meta-list.js +0 -12
  317. package/build/cli/commands/akuma/list/meta-ls.js +0 -9
  318. package/build/cli/commands/akuma/show/handler.js +0 -27
  319. package/build/cli/commands/akuma/show/meta.js +0 -8
  320. package/build/cli/commands/akuma.js +0 -186
  321. package/build/cli/commands/contract/amend/handler.js +0 -17
  322. package/build/cli/commands/contract/amend/meta.js +0 -13
  323. package/build/cli/commands/contract/arc/handler.js +0 -16
  324. package/build/cli/commands/contract/arc/meta.js +0 -28
  325. package/build/cli/commands/contract/audit/handler.js +0 -42
  326. package/build/cli/commands/contract/audit/meta.js +0 -17
  327. package/build/cli/commands/contract/bind/handler.js +0 -39
  328. package/build/cli/commands/contract/bind/meta.js +0 -96
  329. package/build/cli/commands/contract/catalog.js +0 -18
  330. package/build/cli/commands/contract/forfeit/handler.js +0 -17
  331. package/build/cli/commands/contract/forfeit/meta.js +0 -12
  332. package/build/cli/commands/contract/log/handler.js +0 -12
  333. package/build/cli/commands/contract/log/meta.js +0 -12
  334. package/build/cli/commands/contract/petition/handler.js +0 -64
  335. package/build/cli/commands/contract/petition/meta.js +0 -23
  336. package/build/cli/commands/contract/renew/handler.js +0 -65
  337. package/build/cli/commands/contract/renew/meta.js +0 -19
  338. package/build/cli/commands/metadata.js +0 -68
  339. package/build/cli/commands/projection/call/handler.js +0 -43
  340. package/build/cli/commands/projection/call/meta.js +0 -12
  341. package/build/cli/commands/projection/catalog.js +0 -16
  342. package/build/cli/commands/projection/fork/handler.js +0 -61
  343. package/build/cli/commands/projection/fork/meta.js +0 -12
  344. package/build/cli/commands/projection/history/handler.js +0 -65
  345. package/build/cli/commands/projection/history/meta.js +0 -9
  346. package/build/cli/commands/projection/kill/handler.js +0 -20
  347. package/build/cli/commands/projection/kill/meta.js +0 -11
  348. package/build/cli/commands/projection/shared.js +0 -27
  349. package/build/cli/commands/projection/status/handler.js +0 -42
  350. package/build/cli/commands/projection/status/meta.js +0 -20
  351. package/build/cli/commands/projection/tell/handler.js +0 -32
  352. package/build/cli/commands/projection/tell/meta.js +0 -12
  353. package/build/cli/commands/projection/wait/handler.js +0 -80
  354. package/build/cli/commands/projection/wait/meta.js +0 -16
  355. package/build/cli/commands/registry.js +0 -48
  356. package/build/cli/commands/shared.js +0 -74
  357. package/build/cli/commands/skills/catalog.js +0 -6
  358. package/build/cli/commands/skills/install/handler.js +0 -7
  359. package/build/cli/commands/skills/install/meta.js +0 -9
  360. package/build/cli/commands/skills/skills/handler.js +0 -4
  361. package/build/cli/commands/skills/skills/meta.js +0 -10
  362. package/build/cli/commands/system/catalog.js +0 -10
  363. package/build/cli/commands/system/completion/handler.js +0 -10
  364. package/build/cli/commands/system/completion/meta.js +0 -9
  365. package/build/cli/commands/system/dump-env/handler.js +0 -3
  366. package/build/cli/commands/system/dump-env/meta.js +0 -10
  367. package/build/cli/commands/system/guide/handler.js +0 -4
  368. package/build/cli/commands/system/guide/meta.js +0 -9
  369. package/build/cli/commands/task/add/handler.js +0 -38
  370. package/build/cli/commands/task/add/meta.js +0 -31
  371. package/build/cli/commands/task/catalog.js +0 -32
  372. package/build/cli/commands/task/compose/handler.js +0 -18
  373. package/build/cli/commands/task/compose/meta.js +0 -10
  374. package/build/cli/commands/task/doctor/handler.js +0 -3
  375. package/build/cli/commands/task/doctor/meta.js +0 -8
  376. package/build/cli/commands/task/done/handler.js +0 -10
  377. package/build/cli/commands/task/done/meta.js +0 -8
  378. package/build/cli/commands/task/drop/handler.js +0 -8
  379. package/build/cli/commands/task/drop/meta.js +0 -11
  380. package/build/cli/commands/task/hold/handler.js +0 -3
  381. package/build/cli/commands/task/hold/meta.js +0 -8
  382. package/build/cli/commands/task/log/handler.js +0 -12
  383. package/build/cli/commands/task/log/meta.js +0 -8
  384. package/build/cli/commands/task/ls/handler.js +0 -17
  385. package/build/cli/commands/task/ls/meta.js +0 -8
  386. package/build/cli/commands/task/note/handler.js +0 -6
  387. package/build/cli/commands/task/note/meta.js +0 -11
  388. package/build/cli/commands/task/resume/handler.js +0 -3
  389. package/build/cli/commands/task/resume/meta.js +0 -8
  390. package/build/cli/commands/task/shared.js +0 -181
  391. package/build/cli/commands/task/show/handler.js +0 -13
  392. package/build/cli/commands/task/show/meta.js +0 -8
  393. package/build/cli/commands/task/start/handler.js +0 -3
  394. package/build/cli/commands/task/start/meta.js +0 -8
  395. package/build/cli/commands/task/stop/handler.js +0 -10
  396. package/build/cli/commands/task/stop/meta.js +0 -8
  397. package/build/cli/commands/task/task/handler.js +0 -5
  398. package/build/cli/commands/task/task/meta.js +0 -11
  399. package/build/cli/commands/task/update/handler.js +0 -21
  400. package/build/cli/commands/task/update/meta.js +0 -12
  401. package/build/cli/commands/verification/handler.js +0 -43
  402. package/build/cli/commands/verification/meta.js +0 -13
  403. package/build/cli/completion.js +0 -91
  404. package/build/cli/draft-artifact.js +0 -50
  405. package/build/cli/flags.js +0 -321
  406. package/build/cli/help.js +0 -99
  407. package/build/cli/index.js +0 -333
  408. package/build/cli/missing-subcommand.js +0 -7
  409. package/build/cli/output-stream-error-policy.js +0 -31
  410. package/build/cli/parse-flags.js +0 -301
  411. package/build/cli/parse-metadata.js +0 -132
  412. package/build/cli/parse-selectors.js +0 -83
  413. package/build/cli/parse.js +0 -250
  414. package/build/cli/projection-address.js +0 -105
  415. package/build/cli/render/address.js +0 -101
  416. package/build/cli/render/amendment-warning.js +0 -8
  417. package/build/cli/render/arc.js +0 -88
  418. package/build/cli/render/audit.js +0 -440
  419. package/build/cli/render/call.js +0 -70
  420. package/build/cli/render/compact-text.js +0 -3
  421. package/build/cli/render/errors.js +0 -101
  422. package/build/cli/render/format.js +0 -226
  423. package/build/cli/render/kanshi.js +0 -300
  424. package/build/cli/render/kill.js +0 -9
  425. package/build/cli/render/lifecycle.js +0 -56
  426. package/build/cli/render/line-width.js +0 -103
  427. package/build/cli/render/misc.js +0 -84
  428. package/build/cli/render/path-prefix-compaction.js +0 -131
  429. package/build/cli/render/petition.js +0 -85
  430. package/build/cli/render/projection-activity.js +0 -332
  431. package/build/cli/render/projection-history.js +0 -77
  432. package/build/cli/render/response-style.js +0 -27
  433. package/build/cli/render/shared.js +0 -232
  434. package/build/cli/render/skills.js +0 -10
  435. package/build/cli/render/status-indicator.js +0 -47
  436. package/build/cli/render/status.js +0 -243
  437. package/build/cli/render/success-response.js +0 -95
  438. package/build/cli/render/task.js +0 -175
  439. package/build/cli/render/tell.js +0 -11
  440. package/build/cli/render/terminal-failure.js +0 -65
  441. package/build/cli/render/tool-command-normalization.js +0 -137
  442. package/build/cli/render/tool-ledger-rollup.js +0 -74
  443. package/build/cli/render/tool-presentation.js +0 -98
  444. package/build/cli/render/types.js +0 -2
  445. package/build/cli/render/verification.js +0 -23
  446. package/build/cli/render/wait.js +0 -343
  447. package/build/cli/skills-install.js +0 -348
  448. package/build/cli/subagent-guard.js +0 -25
  449. package/build/cli/types.js +0 -2
  450. package/build/config/akuma-loader.js +0 -240
  451. package/build/config/env-keys.js +0 -57
  452. package/build/config/env.js +0 -304
  453. package/build/config/provider-policy-ownership.js +0 -10
  454. package/build/config/settings/disease.js +0 -33
  455. package/build/config/settings/knobs.js +0 -14
  456. package/build/config/settings/loader.js +0 -275
  457. package/build/config/settings/provider-instance-fields.js +0 -51
  458. package/build/config/settings/schema.js +0 -113
  459. package/build/core/address-carrier.js +0 -89
  460. package/build/core/addressing.js +0 -407
  461. package/build/core/amend.js +0 -321
  462. package/build/core/amendment-criteria.js +0 -17
  463. package/build/core/amendment-warning.js +0 -10
  464. package/build/core/arc.js +0 -293
  465. package/build/core/atomic-publish.js +0 -64
  466. package/build/core/audit/candidate.js +0 -141
  467. package/build/core/audit/coordinates.js +0 -230
  468. package/build/core/audit/evidence.js +0 -156
  469. package/build/core/audit/facade.js +0 -65
  470. package/build/core/audit/readiness.js +0 -4
  471. package/build/core/audit/report.js +0 -38
  472. package/build/core/audit.js +0 -1
  473. package/build/core/bind-reconciliation.js +0 -409
  474. package/build/core/bind-workspace.js +0 -115
  475. package/build/core/bind.js +0 -503
  476. package/build/core/call/call.js +0 -235
  477. package/build/core/call/context.js +0 -210
  478. package/build/core/call/execution.js +0 -255
  479. package/build/core/call/prompt.js +0 -27
  480. package/build/core/call/reference.js +0 -24
  481. package/build/core/call-persist.js +0 -76
  482. package/build/core/command-markdown.js +0 -45
  483. package/build/core/context.js +0 -104
  484. package/build/core/contract-carrier-runtime.js +0 -512
  485. package/build/core/contract-carrier.js +0 -353
  486. package/build/core/contract-view.js +0 -319
  487. package/build/core/contract.js +0 -19
  488. package/build/core/derived-replay.js +0 -340
  489. package/build/core/draft.js +0 -400
  490. package/build/core/execution-coordinate.js +0 -46
  491. package/build/core/execution-pact.js +0 -126
  492. package/build/core/forfeit.js +0 -132
  493. package/build/core/hints.js +0 -34
  494. package/build/core/identifier-slug.js +0 -116
  495. package/build/core/ids.js +0 -90
  496. package/build/core/lifecycle-history.js +0 -48
  497. package/build/core/lifecycle-recovery.js +0 -122
  498. package/build/core/lifecycle-runner.js +0 -377
  499. package/build/core/log.js +0 -50
  500. package/build/core/markdown/lex.js +0 -274
  501. package/build/core/markdown/parser.js +0 -260
  502. package/build/core/markdown/render.js +0 -68
  503. package/build/core/markdown/sections.js +0 -80
  504. package/build/core/markdown/titles.js +0 -9
  505. package/build/core/markdown/types.js +0 -6
  506. package/build/core/outcome-base.js +0 -185
  507. package/build/core/places.js +0 -175
  508. package/build/core/projection/akuma-name.js +0 -43
  509. package/build/core/projection/generation/database.js +0 -473
  510. package/build/core/projection/generation/identity.js +0 -84
  511. package/build/core/projection/generation/ledger.js +0 -91
  512. package/build/core/projection/generation/model.js +0 -261
  513. package/build/core/projection/generation/projection-generation-continuation.js +0 -84
  514. package/build/core/projection/generation/projection-generation-doorbell.js +0 -88
  515. package/build/core/projection/generation/projection-generation-execution.js +0 -241
  516. package/build/core/projection/generation/projection-generation-identity.js +0 -21
  517. package/build/core/projection/generation/projection-generation-launcher.js +0 -154
  518. package/build/core/projection/generation/projection-generation-process.js +0 -47
  519. package/build/core/projection/generation/projection-generation-runner.js +0 -489
  520. package/build/core/projection/generation/projection-generation-runtime.js +0 -46
  521. package/build/core/projection/generation/protocol.js +0 -68
  522. package/build/core/projection/generation/store.js +0 -108
  523. package/build/core/projection/generation/transitions.js +0 -463
  524. package/build/core/projection/heart.js +0 -9
  525. package/build/core/projection/index.js +0 -28
  526. package/build/core/projection/projection-activity.js +0 -273
  527. package/build/core/projection/projection-alias.js +0 -131
  528. package/build/core/projection/projection-coordinate.js +0 -61
  529. package/build/core/projection/projection-core.js +0 -127
  530. package/build/core/projection/projection-execution-observer.js +0 -270
  531. package/build/core/projection/projection-history.js +0 -474
  532. package/build/core/projection/projection-identity.js +0 -11
  533. package/build/core/projection/projection-kill.js +0 -112
  534. package/build/core/projection/projection-life-observer.js +0 -101
  535. package/build/core/projection/projection-mint.js +0 -170
  536. package/build/core/projection/projection-status-observation.js +0 -434
  537. package/build/core/projection/projection-status.js +0 -442
  538. package/build/core/projection/projection-terminal-failure.js +0 -111
  539. package/build/core/projection/projection-wait.js +0 -337
  540. package/build/core/projection/projection-wake.js +0 -298
  541. package/build/core/projection/tell/launch-store.js +0 -244
  542. package/build/core/projection/tell/model.js +0 -98
  543. package/build/core/projection/tell/store.js +0 -245
  544. package/build/core/provider-loader-ports.js +0 -4
  545. package/build/core/registry.js +0 -100
  546. package/build/core/renew-build.js +0 -554
  547. package/build/core/renew-plan.js +0 -264
  548. package/build/core/renew-rewrite.js +0 -118
  549. package/build/core/renew.js +0 -345
  550. package/build/core/repository-ledger/accepted-fold-read.js +0 -22
  551. package/build/core/repository-ledger/accepted-tail.js +0 -116
  552. package/build/core/repository-ledger/admission.js +0 -38
  553. package/build/core/repository-ledger/authoritative-transaction.js +0 -1
  554. package/build/core/repository-ledger/claim-evidence.js +0 -147
  555. package/build/core/repository-ledger/codec.js +0 -303
  556. package/build/core/repository-ledger/current-state-store.js +0 -968
  557. package/build/core/repository-ledger/fold-repository.js +0 -374
  558. package/build/core/repository-ledger/fold.js +0 -248
  559. package/build/core/repository-ledger/git-object-store.js +0 -243
  560. package/build/core/repository-ledger/history-read.js +0 -15
  561. package/build/core/repository-ledger/identity.js +0 -60
  562. package/build/core/repository-ledger/incremental-read.js +0 -153
  563. package/build/core/repository-ledger/index.js +0 -15
  564. package/build/core/repository-ledger/inventory-plan.js +0 -75
  565. package/build/core/repository-ledger/inventory.js +0 -310
  566. package/build/core/repository-ledger/publication-admission.js +0 -125
  567. package/build/core/repository-ledger/publication.js +0 -353
  568. package/build/core/repository-ledger/read-model.js +0 -517
  569. package/build/core/repository-ledger/transaction-membership.js +0 -78
  570. package/build/core/repository-ledger/traversal.js +0 -404
  571. package/build/core/repository-ledger/write-transaction.js +0 -346
  572. package/build/core/response-artifact-catalog-sqlite.js +0 -112
  573. package/build/core/response-artifact-catalog.js +0 -7
  574. package/build/core/response-artifact-id.js +0 -5
  575. package/build/core/run-control/connection-bound-close.js +0 -41
  576. package/build/core/run-control/detached-lease-bootstrap.js +0 -208
  577. package/build/core/run-control/detached-process.js +0 -14
  578. package/build/core/run-control/index.js +0 -6
  579. package/build/core/run-control/process-tree.js +0 -139
  580. package/build/core/run-control/runner-lease.js +0 -172
  581. package/build/core/run-control/sqlite-process-lifetime-lock.js +0 -174
  582. package/build/core/scope.js +0 -416
  583. package/build/core/seal.js +0 -364
  584. package/build/core/settlement/claim-delivery.js +0 -82
  585. package/build/core/settlement/claim.js +0 -258
  586. package/build/core/settlement/index.js +0 -19
  587. package/build/core/settlement/petition-claim-gates.js +0 -247
  588. package/build/core/settlement/petition-forfeit.js +0 -46
  589. package/build/core/settlement/petition-head-guard.js +0 -12
  590. package/build/core/settlement/petition-io.js +0 -1
  591. package/build/core/settlement/petition-preview.js +0 -125
  592. package/build/core/settlement/petition-window.js +0 -50
  593. package/build/core/settlement/petition.js +0 -315
  594. package/build/core/settlement/queue-read-model.js +0 -120
  595. package/build/core/settlement/queue-seat-allocation.js +0 -65
  596. package/build/core/settlement/queue.js +0 -6
  597. package/build/core/settlement/settlement.js +0 -385
  598. package/build/core/settlement/verdict.js +0 -126
  599. package/build/core/settlement/verification.js +0 -554
  600. package/build/core/status/board.js +0 -455
  601. package/build/core/status/drift.js +0 -113
  602. package/build/core/status/lifecycle.js +0 -11
  603. package/build/core/stored-agent-event.js +0 -129
  604. package/build/core/structured-query.js +0 -23
  605. package/build/core/target-ref.js +0 -10
  606. package/build/core/task/board.js +0 -248
  607. package/build/core/task/commands.js +0 -401
  608. package/build/core/task/compose.js +0 -328
  609. package/build/core/task/coordinate.js +0 -56
  610. package/build/core/task/document.js +0 -273
  611. package/build/core/task/index.js +0 -16
  612. package/build/core/task/model.js +0 -8
  613. package/build/core/task/query.js +0 -204
  614. package/build/core/task/settlement-git.js +0 -423
  615. package/build/core/task/settlement-policy.js +0 -137
  616. package/build/core/task/source-board.js +0 -104
  617. package/build/core/task/source-model.js +0 -1
  618. package/build/core/task/task-bind-preparation.js +0 -243
  619. package/build/core/task/task-contract.js +0 -371
  620. package/build/core/task/task-doctor.js +0 -14
  621. package/build/core/task/task-file-transaction.js +0 -171
  622. package/build/core/task/task-git-actor.js +0 -33
  623. package/build/core/task/task-git-runtime.js +0 -97
  624. package/build/core/task/task-git-store.js +0 -400
  625. package/build/core/task/task-repository.js +0 -1
  626. package/build/core/task/task-store-repository.js +0 -97
  627. package/build/core/task/task-store.js +0 -1
  628. package/build/core/task/task-worktree.js +0 -25
  629. package/build/core/task/task.js +0 -7
  630. package/build/core/task/tree.js +0 -37
  631. package/build/core/task/validation.js +0 -48
  632. package/build/core/transcripts.js +0 -485
  633. package/build/core/validation.js +0 -17
  634. package/build/core/verification-declaration.js +0 -95
  635. package/build/core/worktree-bootstrap.js +0 -195
  636. package/build/core/worktree-path.js +0 -371
  637. package/build/errno.js +0 -3
  638. package/build/flow-error.js +0 -191
  639. package/build/fs/durability.js +0 -27
  640. package/build/fs/path-coordinate.js +0 -16
  641. package/build/generated/version.js +0 -3
  642. package/build/git/branches.js +0 -84
  643. package/build/git/commits.js +0 -151
  644. package/build/git/core.js +0 -86
  645. package/build/git/diff/parsers.js +0 -181
  646. package/build/git/diff/pathspec.js +0 -3
  647. package/build/git/diff/preview.js +0 -38
  648. package/build/git/diff/read.js +0 -105
  649. package/build/git/diff/structured.js +0 -127
  650. package/build/git/diff/types.js +0 -1
  651. package/build/git/path-coordinate.js +0 -17
  652. package/build/git/process.js +0 -229
  653. package/build/git/refs.js +0 -250
  654. package/build/git/staging.js +0 -79
  655. package/build/git/streaming-batch.js +0 -354
  656. package/build/git/worktree.js +0 -175
  657. package/build/index.js +0 -67
  658. package/build/keiyaku-constants.js +0 -2
  659. package/build/keiyaku.js +0 -30
  660. package/build/telemetry/debug-log.js +0 -40
  661. package/build/telemetry/logger.js +0 -48
  662. package/skills/keiyaku/SKILL.md +0 -46
  663. package/skills/keiyaku-akuma/SKILL.md +0 -97
  664. package/skills/keiyaku-task/SKILL.md +0 -118
  665. package/skills/keiyaku-workflow/SKILL.md +0 -191
  666. /package/build/{agents/launch-snapshot → src/body}/types.js +0 -0
  667. /package/build/{agents/providers/claude-agent-sdk/terms.js → src/cli/result.js} +0 -0
  668. /package/build/{agents/providers/codex-app-server/terms.js → src/core/decide.js} +0 -0
  669. /package/build/{agents/providers/opencode-sdk/terms.js → src/core/facts/offer.js} +0 -0
  670. /package/build/{agents/providers/pi/terms.js → src/kanshi/report.js} +0 -0
@@ -0,0 +1,232 @@
1
+ import { documentDiff } from "../markdown/diff.js";
2
+ import { readNamespaceContext } from "./context.js";
3
+ import { relationProblem } from "./board.js";
4
+ import { serializeTaskDocument } from "./document.js";
5
+ import { allocateLocalId, deriveLocalStem, formatTaskId, parseTaskId, sameNamespace } from "./identity.js";
6
+ import { authorityPath, readBoard, replaceAuthority, withTaskLocks } from "./store.js";
7
+ function failure(diagnostic) { return { kind: "invalid-composition", diagnostic }; }
8
+ function parseNamespace(value) {
9
+ if (value === "")
10
+ return [];
11
+ const coordinate = parseTaskId(`task/${value}/placeholder`);
12
+ return coordinate.namespace;
13
+ }
14
+ function assignment(token) {
15
+ const matched = /^(parent|needs|supersedes|relates|pri|body)(\+=|=)(.*)$/u.exec(token);
16
+ if (matched === null)
17
+ return null;
18
+ const field = matched[1], append = matched[2] === "+=", value = matched[3];
19
+ if (append && (field === "parent" || field === "pri" || field === "body"))
20
+ throw new TypeError(`${field} does not accept +=`);
21
+ if (field === "body" && (append || value !== ""))
22
+ throw new TypeError("body accepts only bare body=");
23
+ return { field, append, value };
24
+ }
25
+ function parseNode(text, depth, index) {
26
+ const tokens = text.split(/ +/u);
27
+ if (text.startsWith("+ ")) {
28
+ const values = tokens.slice(1);
29
+ const at = values.findIndex((token) => assignment(token) !== null);
30
+ const title = values.slice(0, at < 0 ? values.length : at).join(" ");
31
+ if (title.trim().length === 0)
32
+ throw new TypeError("compose + node requires a title");
33
+ return { index, depth, kind: "new", title, assignments: (at < 0 ? [] : values.slice(at)).map((token) => assignment(token) ?? (() => { throw new TypeError(`invalid assignment token: ${token}`); })()) };
34
+ }
35
+ const [rawId, ...rest] = tokens;
36
+ if (rawId === undefined || !rawId.startsWith("@task/"))
37
+ throw new TypeError("compose node must begin with + or @task/");
38
+ const id = `task/${rawId.slice(1).slice(5)}`;
39
+ parseTaskId(id);
40
+ return { index, depth, kind: "existing", id, assignments: rest.map((token) => assignment(token) ?? (() => { throw new TypeError(`invalid assignment token: ${token}`); })()) };
41
+ }
42
+ function parseSketch(markdown) {
43
+ try {
44
+ const lines = markdown.replace(/\r\n?/gu, "\n").split("\n");
45
+ let namespace;
46
+ let start = 0;
47
+ if (lines[0]?.startsWith("ns=")) {
48
+ namespace = parseNamespace(lines[0].slice(3));
49
+ start = 1;
50
+ }
51
+ const mutable = [];
52
+ for (let line = start; line < lines.length; line += 1) {
53
+ const raw = lines[line];
54
+ if (line === lines.length - 1 && raw === "")
55
+ continue;
56
+ const leading = /^(?:\t| )*/u.exec(raw)[0].replace(/\t/gu, " ");
57
+ const text = raw.slice(/^(?:\t| )*/u.exec(raw)[0].length);
58
+ const nodeLine = text.startsWith("+ ") || text.startsWith("@task/");
59
+ if (nodeLine) {
60
+ if (leading.length % 2 !== 0)
61
+ throw new TypeError(`compose line ${line + 1} has invalid indentation`);
62
+ const depth = leading.length / 2;
63
+ if (depth > 0 && !mutable.some((entry) => entry.node.depth === depth - 1))
64
+ throw new TypeError(`compose line ${line + 1} skips a parent depth`);
65
+ mutable.push({ node: parseNode(text, depth, mutable.length), body: [] });
66
+ continue;
67
+ }
68
+ const current = mutable.at(-1);
69
+ if (current === undefined) {
70
+ if (text.trim() === "")
71
+ continue;
72
+ throw new TypeError(`compose line ${line + 1} has body before a node`);
73
+ }
74
+ current.body.push(text.startsWith("\\") ? text.slice(1) : text);
75
+ }
76
+ const nodes = mutable.map(({ node, body }) => ({ ...node, ...(body.length === 0 ? {} : { body: body.join("\n") }) }));
77
+ return { ...(namespace === undefined ? {} : { namespace }), nodes };
78
+ }
79
+ catch (error) {
80
+ return failure(error instanceof Error ? error.message : String(error));
81
+ }
82
+ }
83
+ function ids(value) {
84
+ if (value === "")
85
+ return [];
86
+ const parsed = value.split(",").map((raw) => { if (!raw.startsWith("@task/"))
87
+ throw new TypeError("relation values must be @TaskId"); const id = raw.slice(1); parseTaskId(id); return id; });
88
+ if (new Set(parsed).size !== parsed.length)
89
+ throw new TypeError("relation values must not contain duplicates");
90
+ return parsed;
91
+ }
92
+ function scalarId(value) { const values = ids(value); if (values.length > 1)
93
+ throw new TypeError("parent accepts at most one TaskId"); return values[0] ?? null; }
94
+ function changed(current, value, append) {
95
+ return append ? [...current, ...value.filter((id) => !current.includes(id))] : value;
96
+ }
97
+ function applyAssignments(document, assignments, body) {
98
+ let next = document;
99
+ const seen = new Set();
100
+ for (const item of assignments) {
101
+ const mode = `${item.field}:${item.append}`;
102
+ if (seen.has(mode) || [...seen].some((value) => value.startsWith(`${item.field}:`) && value !== mode))
103
+ throw new TypeError(`duplicate compose assignment: ${item.field}`);
104
+ seen.add(mode);
105
+ if (item.field === "pri") {
106
+ const priority = Number(item.value);
107
+ if (!Number.isInteger(priority) || priority < 0 || priority > 3)
108
+ throw new TypeError("pri must be 0..3");
109
+ next = { ...next, priority: priority };
110
+ }
111
+ else if (item.field === "parent")
112
+ next = { ...next, parent: scalarId(item.value) };
113
+ else if (item.field === "body")
114
+ next = { ...next, body: "" };
115
+ else
116
+ next = { ...next, [item.field]: changed(next[item.field], ids(item.value), item.append) };
117
+ }
118
+ return body === undefined ? next : { ...next, body };
119
+ }
120
+ function currentTimestamp() { return new Date().toISOString(); }
121
+ function advancedTimestamp(previous, current) { return current > previous ? current : new Date(Date.parse(previous) + 1).toISOString(); }
122
+ function plan(sketch, board, defaultNamespace, at) {
123
+ try {
124
+ const namespace = sketch.namespace ?? defaultNamespace;
125
+ const occupied = new Set([...board.tasks.values()].flatMap((task) => {
126
+ const coordinate = parseTaskId(task.id);
127
+ return sameNamespace(coordinate.namespace, namespace) ? [coordinate.localId] : [];
128
+ }));
129
+ const allocations = new Map();
130
+ for (const node of sketch.nodes)
131
+ if (node.kind === "new") {
132
+ const localId = allocateLocalId(deriveLocalStem(node.title), occupied);
133
+ occupied.add(localId);
134
+ const coordinate = { namespace, localId };
135
+ allocations.set(node.index, { id: formatTaskId(coordinate), title: node.title, state: "open", priority: 2, needs: [], parent: null, supersedes: [], relates: [], note: "", createdAt: at, updatedAt: at, body: "" });
136
+ }
137
+ const all = new Map(board.tasks);
138
+ for (const allocated of allocations.values())
139
+ all.set(allocated.id, allocated);
140
+ const byDepth = [], addressed = new Set();
141
+ const planned = [];
142
+ for (const node of sketch.nodes) {
143
+ const before = node.kind === "new" ? null : board.tasks.get(node.id) ?? null;
144
+ let current = node.kind === "new" ? allocations.get(node.index) : all.get(node.id);
145
+ if (current === undefined)
146
+ throw new TypeError(`compose task does not exist: ${node.id}`);
147
+ if (addressed.has(current.id))
148
+ throw new TypeError(`compose addresses ${current.id} more than once`);
149
+ addressed.add(current.id);
150
+ if (node.depth > 0) {
151
+ const parent = byDepth[node.depth - 1];
152
+ if (parent === undefined)
153
+ throw new TypeError("compose parent is unavailable");
154
+ if (node.assignments.some((item) => item.field === "parent"))
155
+ throw new TypeError("indented node cannot also assign parent");
156
+ current = { ...current, parent };
157
+ }
158
+ current = applyAssignments(current, node.assignments, node.body);
159
+ if (before !== null && !Buffer.from(serializeTaskDocument(current)).equals(Buffer.from(serializeTaskDocument(before))))
160
+ current = { ...current, updatedAt: advancedTimestamp(before.updatedAt, at) };
161
+ byDepth[node.depth] = current.id;
162
+ byDepth.length = node.depth + 1;
163
+ all.set(current.id, current);
164
+ planned.push({ node, before, after: current });
165
+ }
166
+ for (const item of planned) {
167
+ const problem = relationProblem({ tasks: all }, item.before, item.after);
168
+ if (problem !== null)
169
+ return failure(problem);
170
+ }
171
+ return planned;
172
+ }
173
+ catch (error) {
174
+ return failure(error instanceof Error ? error.message : String(error));
175
+ }
176
+ }
177
+ function ref(id) { return `@${id}`; }
178
+ function bodyLines(body) { return body.split("\n").map((line) => /^[\\]|^\+ |^@task\//u.test(line) ? `\\${line}` : line); }
179
+ function draft(namespace, remaining) {
180
+ const lines = [`ns=${namespace.join("/")}`];
181
+ for (const item of remaining) {
182
+ const task = item.after;
183
+ const assignments = [
184
+ `pri=${task.priority}`, `needs=${task.needs.map(ref).join(",")}`, `parent=${task.parent === null ? "" : ref(task.parent)}`,
185
+ `supersedes=${task.supersedes.map(ref).join(",")}`, `relates=${task.relates.map(ref).join(",")}`,
186
+ ];
187
+ lines.push(`${item.node.kind === "new" ? `+ ${task.title}` : ref(task.id)} ${assignments.join(" ")}${task.body === "" ? " body=" : ""}`);
188
+ if (task.body !== "")
189
+ lines.push(...bodyLines(task.body));
190
+ }
191
+ return `${lines.join("\n")}\n`;
192
+ }
193
+ export async function composeTasks(world, markdown, signal) {
194
+ const sketch = parseSketch(markdown);
195
+ if ("kind" in sketch)
196
+ return { kind: "refused", refusal: sketch };
197
+ const at = currentTimestamp();
198
+ const context = sketch.namespace ?? readNamespaceContext(world.root);
199
+ if (context === "malformed")
200
+ return { kind: "refused", refusal: { kind: "invalid-namespace-context", path: `${world.root}/.keiyaku/namespace/current` } };
201
+ const namespace = context === "absent" ? [] : context;
202
+ const initial = readBoard(world);
203
+ const planned = plan(sketch, initial.board, namespace, at);
204
+ if ("kind" in planned)
205
+ return { kind: "refused", refusal: planned };
206
+ const ordered = [...planned].sort((a, b) => Buffer.compare(Buffer.from(a.after.id), Buffer.from(b.after.id)));
207
+ const allocation = sketch.nodes.some((node) => node.kind === "new");
208
+ const result = await withTaskLocks({ world, allocation, ids: ordered.map((item) => item.after.id), ...(signal === undefined ? {} : { signal }) }, async () => {
209
+ const fresh = readBoard(world);
210
+ const replanned = plan(sketch, fresh.board, namespace, at);
211
+ if ("kind" in replanned)
212
+ return { kind: "refused", refusal: replanned };
213
+ const queue = [...replanned].sort((a, b) => Buffer.compare(Buffer.from(a.after.id), Buffer.from(b.after.id))), changes = [];
214
+ for (let index = 0; index < queue.length; index += 1) {
215
+ signal?.throwIfAborted();
216
+ const item = queue[index], path = authorityPath(world, item.after.id);
217
+ const beforeBytes = item.before === null ? null : fresh.bytes.get(item.after.id) ?? null;
218
+ const afterBytes = serializeTaskDocument(item.after);
219
+ const before = beforeBytes === null ? "" : Buffer.from(beforeBytes).toString("utf8"), after = Buffer.from(afterBytes).toString("utf8");
220
+ if (before === after)
221
+ continue;
222
+ if (replaceAuthority({ path, expected: beforeBytes, next: afterBytes }) !== "replaced")
223
+ return {
224
+ kind: "incomplete", documentChanges: changes, stopped: { kind: "retry", reason: "concurrent-modification" }, draft: draft(namespace, queue.slice(index)),
225
+ };
226
+ const label = `${item.after.id}.md`;
227
+ changes.push({ taskId: item.after.id, kind: item.before === null ? "created" : "updated", documentDiff: documentDiff(label, label, before, after) });
228
+ }
229
+ return { kind: "accepted", documentChanges: changes };
230
+ });
231
+ return result === "busy" ? { kind: "incomplete", documentChanges: [], stopped: { kind: "retry", reason: "busy" }, draft: draft(namespace, ordered) } : result;
232
+ }
@@ -0,0 +1,4 @@
1
+ export type NamespaceContextRead = readonly string[] | "absent" | "malformed";
2
+ export declare function readNamespaceContext(root: string): NamespaceContextRead;
3
+ export declare function installNamespaceContext(root: string, segments: readonly string[]): void;
4
+ export declare function repairNamespaceContext(root: string, segments: readonly string[]): "kept" | "installed";
@@ -0,0 +1,56 @@
1
+ import { lstatSync, mkdirSync, readFileSync, } from "node:fs";
2
+ import { join } from "node:path";
3
+ import { replaceFileDurably } from "../coordination/durable-file.js";
4
+ import { normalizeIdentityStem } from "../identity/normalize.js";
5
+ function directory(root) { return join(root, ".keiyaku", "namespace"); }
6
+ function currentPath(root) { return join(directory(root), "current"); }
7
+ function ignorePath(root) { return join(directory(root), ".gitignore"); }
8
+ function validNamespaceSegments(value) {
9
+ return Array.isArray(value) && value.every((segment) => typeof segment === "string"
10
+ && segment.length > 0 && normalizeIdentityStem({ source: segment }) === segment
11
+ && !segment.includes("/") && segment !== "." && segment !== "..");
12
+ }
13
+ export function readNamespaceContext(root) {
14
+ let bytes;
15
+ try {
16
+ const path = currentPath(root), stat = lstatSync(path);
17
+ if (!stat.isFile() || stat.isSymbolicLink())
18
+ return "malformed";
19
+ bytes = readFileSync(path, "utf8");
20
+ }
21
+ catch (error) {
22
+ if (error.code === "ENOENT")
23
+ return "absent";
24
+ throw error;
25
+ }
26
+ if (!bytes.endsWith("\n") || bytes.slice(0, -1).includes("\n"))
27
+ return "malformed";
28
+ const content = bytes.slice(0, -1);
29
+ const segments = content === "" ? [] : content.split("/");
30
+ return validNamespaceSegments(segments) ? segments : "malformed";
31
+ }
32
+ export function installNamespaceContext(root, segments) {
33
+ if (!validNamespaceSegments(segments))
34
+ throw new TypeError("namespace must contain normalized segments");
35
+ const parent = directory(root);
36
+ mkdirSync(parent, { recursive: true });
37
+ installIgnore(root);
38
+ replaceFileDurably(currentPath(root), `${segments.join("/")}\n`);
39
+ }
40
+ function installIgnore(root) {
41
+ const ignore = ignorePath(root);
42
+ const stat = lstatSync(ignore, { throwIfNoEntry: false });
43
+ if (stat !== undefined && (!stat.isFile() || stat.isSymbolicLink()))
44
+ throw new Error(`namespace ignore is not a regular file: ${ignore}`);
45
+ if (stat === undefined || readFileSync(ignore, "utf8") !== "*\n")
46
+ replaceFileDurably(ignore, "*\n");
47
+ }
48
+ export function repairNamespaceContext(root, segments) {
49
+ const current = readNamespaceContext(root);
50
+ if (Array.isArray(current)) {
51
+ installIgnore(root);
52
+ return "kept";
53
+ }
54
+ installNamespaceContext(root, segments);
55
+ return "installed";
56
+ }
@@ -0,0 +1,24 @@
1
+ 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;
4
+ export type TaskDocument = Readonly<{
5
+ id: TaskId;
6
+ title: string;
7
+ state: TaskState;
8
+ priority: TaskPriority;
9
+ needs: readonly TaskId[];
10
+ parent: TaskId | null;
11
+ supersedes: readonly TaskId[];
12
+ relates: readonly TaskId[];
13
+ note: string;
14
+ createdAt: string;
15
+ updatedAt: string;
16
+ body: string;
17
+ }>;
18
+ export type TaskCreationDocument = Omit<TaskDocument, "id" | "createdAt" | "updatedAt">;
19
+ export declare class TaskAuthorityCorruptionError extends Error {
20
+ constructor(message: string, options?: ErrorOptions);
21
+ }
22
+ export declare function parseTaskDocument(bytes: Uint8Array, expected: TaskCoordinate): TaskDocument;
23
+ export declare function parseTaskCreationDocument(markdown: string): TaskCreationDocument;
24
+ export declare function serializeTaskDocument(document: TaskDocument): Uint8Array;
@@ -0,0 +1,118 @@
1
+ import { isMap, parseDocument, stringify } from "yaml";
2
+ import { formatTaskId, parseTaskId } from "./identity.js";
3
+ export class TaskAuthorityCorruptionError extends Error {
4
+ constructor(message, options) { super(message, options); this.name = "TaskAuthorityCorruptionError"; }
5
+ }
6
+ const STATES = new Set(["open", "in_progress", "on_hold", "done", "drop"]);
7
+ const STORED_KEYS = ["id", "title", "state", "priority", "needs", "parent", "supersedes", "relates", "note", "createdAt", "updatedAt"];
8
+ const CREATION_KEYS = ["title", "state", "priority", "needs", "parent", "supersedes", "relates", "note"];
9
+ function frontMatter(markdown, fail) {
10
+ if (!markdown.startsWith("---\n"))
11
+ fail("task document must begin with YAML front matter");
12
+ const end = markdown.indexOf("\n---\n", 4);
13
+ if (end < 0)
14
+ fail("task document front matter is not closed");
15
+ const source = markdown.slice(4, end);
16
+ const parsed = parseDocument(source, { merge: false, prettyErrors: false, strict: true, uniqueKeys: true });
17
+ if (parsed.errors.length > 0 || parsed.warnings.length > 0 || !isMap(parsed.contents)) {
18
+ fail("task front matter must be one strict YAML mapping", parsed.errors[0]);
19
+ }
20
+ const value = parsed.toJS({ maxAliasCount: 0 });
21
+ if (typeof value !== "object" || value === null || Array.isArray(value))
22
+ fail("task front matter must be a mapping");
23
+ return { value: value, body: markdown.slice(end + 5) };
24
+ }
25
+ function closed(value, allowed, required, fail) {
26
+ for (const key of Object.keys(value))
27
+ if (!allowed.includes(key))
28
+ fail(`unknown task front matter key: ${key}`);
29
+ for (const key of required)
30
+ if (!Object.hasOwn(value, key))
31
+ fail(`task front matter is missing ${key}`);
32
+ }
33
+ function title(value, fail) {
34
+ if (typeof value !== "string" || value.trim().length === 0)
35
+ fail("task title must be a nonblank string");
36
+ return value;
37
+ }
38
+ function priority(value, fail) {
39
+ if (!Number.isInteger(value) || typeof value !== "number" || value < 0 || value > 3)
40
+ fail("task priority must be 0, 1, 2, or 3");
41
+ return value;
42
+ }
43
+ function state(value, fail) {
44
+ if (typeof value !== "string" || !STATES.has(value))
45
+ fail("task state is invalid");
46
+ return value;
47
+ }
48
+ function timestamp(value, field, fail) {
49
+ const milliseconds = typeof value === "string" ? Date.parse(value) : Number.NaN;
50
+ if (typeof value !== "string" || !Number.isFinite(milliseconds) || new Date(milliseconds).toISOString() !== value)
51
+ fail(`${field} must be a canonical UTC ISO timestamp`);
52
+ return value;
53
+ }
54
+ function taskId(value, field, fail) {
55
+ if (typeof value !== "string")
56
+ fail(`${field} must be a TaskId`);
57
+ try {
58
+ parseTaskId(value);
59
+ return value;
60
+ }
61
+ catch {
62
+ return fail(`${field} must be a canonical TaskId`);
63
+ }
64
+ }
65
+ function taskIds(value, field, fail) {
66
+ if (!Array.isArray(value))
67
+ fail(`${field} must be an array`);
68
+ const ids = value.map((item) => taskId(item, field, fail));
69
+ if (new Set(ids).size !== ids.length)
70
+ fail(`${field} must not contain duplicates`);
71
+ return ids;
72
+ }
73
+ function nullableTaskId(value, field, fail) {
74
+ return value === null ? null : taskId(value, field, fail);
75
+ }
76
+ function fields(value, body, fail) {
77
+ return {
78
+ title: title(value.title, fail),
79
+ priority: priority(value.priority, fail),
80
+ needs: taskIds(value.needs, "needs", fail),
81
+ parent: nullableTaskId(value.parent, "parent", fail),
82
+ supersedes: taskIds(value.supersedes, "supersedes", fail),
83
+ relates: taskIds(value.relates, "relates", fail),
84
+ note: typeof value.note === "string" ? value.note : fail("note must be a string"),
85
+ body,
86
+ };
87
+ }
88
+ export function parseTaskDocument(bytes, expected) {
89
+ const fail = (message, cause) => { throw new TaskAuthorityCorruptionError(message, cause === undefined ? {} : { cause }); };
90
+ const { value, body } = frontMatter(Buffer.from(bytes).toString("utf8"), fail);
91
+ closed(value, STORED_KEYS, STORED_KEYS, fail);
92
+ const id = taskId(value.id, "id", fail);
93
+ if (id !== formatTaskId(expected))
94
+ fail(`task document ID ${id} does not match its authority path`);
95
+ const createdAt = timestamp(value.createdAt, "createdAt", fail), updatedAt = timestamp(value.updatedAt, "updatedAt", fail);
96
+ if (Date.parse(updatedAt) < Date.parse(createdAt))
97
+ fail("updatedAt must not precede createdAt");
98
+ return { id, state: state(value.state, fail), createdAt, updatedAt, ...fields(value, body, fail) };
99
+ }
100
+ export function parseTaskCreationDocument(markdown) {
101
+ const fail = (message) => { throw new TypeError(message); };
102
+ const { value, body } = frontMatter(markdown, fail);
103
+ closed(value, CREATION_KEYS, ["title"], fail);
104
+ const complete = {
105
+ state: "open", priority: 2, needs: [], parent: null, supersedes: [], relates: [], note: "",
106
+ ...value,
107
+ };
108
+ return { state: state(complete.state, fail), ...fields(complete, body, fail) };
109
+ }
110
+ export function serializeTaskDocument(document) {
111
+ const value = {
112
+ id: document.id, title: document.title, state: document.state, priority: document.priority,
113
+ needs: [...document.needs], parent: document.parent, supersedes: [...document.supersedes],
114
+ relates: [...document.relates], note: document.note, createdAt: document.createdAt,
115
+ updatedAt: document.updatedAt,
116
+ };
117
+ return Buffer.from(`---\n${stringify(value, { lineWidth: 0 })}---\n${document.body}`);
118
+ }
@@ -0,0 +1,12 @@
1
+ export type TaskId = `task/${string}`;
2
+ export type TaskCoordinate = Readonly<{
3
+ namespace: readonly string[];
4
+ localId: string;
5
+ }>;
6
+ export declare function isTaskSegment(value: string): boolean;
7
+ export declare function parseTaskId(value: string): TaskCoordinate;
8
+ export declare function formatTaskId(coordinate: TaskCoordinate): TaskId;
9
+ export declare function taskAuthorityPath(tasksDirectory: string, coordinate: TaskCoordinate): string;
10
+ export declare function deriveLocalStem(title: string): string;
11
+ export declare function allocateLocalId(stem: string, occupied: ReadonlySet<string>): string;
12
+ export declare function sameNamespace(left: readonly string[], right: readonly string[]): boolean;
@@ -0,0 +1,47 @@
1
+ import { join } from "node:path";
2
+ import { identityCoordinate, identitySegments } from "../identity/coordinates.js";
3
+ import { fitIdentityStem, normalizeIdentityStem } from "../identity/normalize.js";
4
+ const STEM_BYTES = 48;
5
+ export function isTaskSegment(value) {
6
+ return value.length > 0 && value !== "." && value !== ".." && !value.includes("/")
7
+ && normalizeIdentityStem({ source: value }) === value;
8
+ }
9
+ export function parseTaskId(value) {
10
+ let segments;
11
+ try {
12
+ segments = identitySegments({ family: "task", value });
13
+ }
14
+ catch {
15
+ throw new TypeError("task ID must be task/<local-id> or task/<namespace...>/<local-id>");
16
+ }
17
+ if (!segments.every(isTaskSegment))
18
+ throw new TypeError("task ID contains a noncanonical segment");
19
+ return { namespace: segments.slice(0, -1), localId: segments.at(-1) };
20
+ }
21
+ export function formatTaskId(coordinate) {
22
+ if (![...coordinate.namespace, coordinate.localId].every(isTaskSegment))
23
+ throw new TypeError("task coordinate contains a noncanonical segment");
24
+ return identityCoordinate({ family: "task", segments: [...coordinate.namespace, coordinate.localId] });
25
+ }
26
+ export function taskAuthorityPath(tasksDirectory, coordinate) {
27
+ return join(tasksDirectory, ...coordinate.namespace, `${coordinate.localId}.md`);
28
+ }
29
+ export function deriveLocalStem(title) {
30
+ const stem = normalizeIdentityStem({ source: title });
31
+ if (stem.length === 0)
32
+ throw new TypeError("task title must contain a normalized identity segment");
33
+ return fitIdentityStem({ stem, maxBytes: STEM_BYTES });
34
+ }
35
+ export function allocateLocalId(stem, occupied) {
36
+ if (!occupied.has(stem))
37
+ return stem;
38
+ for (let suffix = 2; Number.isSafeInteger(suffix); suffix += 1) {
39
+ const candidate = fitIdentityStem({ stem, maxBytes: STEM_BYTES, suffix: String(suffix) });
40
+ if (!occupied.has(candidate))
41
+ return candidate;
42
+ }
43
+ throw new Error("task identity collision ordinal exceeded the safe integer range");
44
+ }
45
+ export function sameNamespace(left, right) {
46
+ return left.length === right.length && left.every((segment, index) => segment === right[index]);
47
+ }
@@ -0,0 +1,90 @@
1
+ import { type BlockedTaskRow, type TaskDetailFacts, type TaskDoctorIssue, type TaskRow, type TaskTreeNode } from "./board.js";
2
+ import { type TaskCompositionResult } from "./compose.js";
3
+ import { TaskAuthorityCorruptionError, type TaskPriority, type TaskState } from "./document.js";
4
+ import { type TaskId } from "./identity.js";
5
+ import { type AddTaskDocumentInput, type AddTaskInput, type TaskBatchResult, type TaskMutationResult, type TaskOutcome, type TaskRefusal, type TaskRetry, type TaskUpdateResult, type TaskView, type UpdateTaskInput } from "./operations.js";
6
+ import { type TaskWorld } from "./store.js";
7
+ export type TaskDetail = Omit<TaskDetailFacts, "task"> & Readonly<{
8
+ task: TaskView;
9
+ }>;
10
+ export type TaskList = TaskOutcome<readonly TaskRow[]>;
11
+ export type BlockedTaskList = TaskOutcome<readonly BlockedTaskRow[]>;
12
+ export type TaskNamespaceResult = TaskOutcome<readonly string[]>;
13
+ export type TaskDoctorReport = Readonly<{
14
+ issues: readonly TaskDoctorIssue[];
15
+ }>;
16
+ export type TaskDependencyTree = TaskOutcome<TaskTreeNode>;
17
+ export type { AddTaskDocumentInput, AddTaskInput, BlockedTaskRow, TaskBatchResult, TaskCompositionResult, TaskDoctorIssue, TaskId, TaskMutationResult, TaskOutcome, TaskPriority, TaskRefusal, TaskRetry, TaskRow, TaskState, TaskUpdateResult, TaskView, UpdateTaskInput };
18
+ export { TaskAuthorityCorruptionError };
19
+ declare class TaskHandle {
20
+ readonly id: TaskId;
21
+ private readonly world;
22
+ constructor(id: TaskId, world: TaskWorld);
23
+ read(): Promise<TaskDetail | null>;
24
+ tree(input?: Readonly<{
25
+ full?: boolean;
26
+ }>): Promise<TaskDependencyTree>;
27
+ update(input: UpdateTaskInput): Promise<TaskUpdateResult>;
28
+ private lifecycle;
29
+ start(input?: {
30
+ signal?: AbortSignal;
31
+ }): Promise<TaskMutationResult>;
32
+ stop(input?: {
33
+ signal?: AbortSignal;
34
+ }): Promise<TaskMutationResult>;
35
+ hold(input?: {
36
+ signal?: AbortSignal;
37
+ }): Promise<TaskMutationResult>;
38
+ resume(input?: {
39
+ signal?: AbortSignal;
40
+ }): Promise<TaskMutationResult>;
41
+ done(input?: {
42
+ signal?: AbortSignal;
43
+ }): Promise<TaskMutationResult>;
44
+ drop(input?: {
45
+ note?: string;
46
+ signal?: AbortSignal;
47
+ }): Promise<TaskMutationResult>;
48
+ }
49
+ export type Task = TaskHandle;
50
+ declare class TasksHandle {
51
+ readonly root: string;
52
+ private readonly world;
53
+ constructor(path?: string);
54
+ namespace(): Promise<TaskNamespaceResult>;
55
+ setNamespace(input: Readonly<{
56
+ namespace: readonly string[];
57
+ }>): Promise<void>;
58
+ task(input: Readonly<{
59
+ id: string;
60
+ }>): Task;
61
+ add(input: AddTaskInput): Promise<TaskMutationResult>;
62
+ addDocument(input: AddTaskDocumentInput): Promise<TaskMutationResult>;
63
+ list(input?: Readonly<{
64
+ selection?: "active" | "closed" | "all";
65
+ scope?: "namespace" | "world";
66
+ }>): Promise<TaskList>;
67
+ ready(input?: Readonly<{
68
+ scope?: "namespace" | "world";
69
+ }>): Promise<TaskList>;
70
+ blocked(input?: Readonly<{
71
+ scope?: "namespace" | "world";
72
+ }>): Promise<BlockedTaskList>;
73
+ doctor(): Promise<TaskDoctorReport>;
74
+ batch(input: Readonly<{
75
+ verb: "done" | "drop" | "hold";
76
+ ids: readonly string[];
77
+ note?: string;
78
+ signal?: AbortSignal;
79
+ }>): Promise<TaskBatchResult>;
80
+ compose(input: Readonly<{
81
+ markdown: string;
82
+ signal?: AbortSignal;
83
+ }>): Promise<TaskCompositionResult>;
84
+ }
85
+ export type Tasks = TasksHandle;
86
+ export declare const Tasks: Readonly<{
87
+ at(input?: Readonly<{
88
+ path?: string;
89
+ }>): Tasks;
90
+ }>;