@astrosheep/keiyaku 4.6.7 → 4.6.9

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 (336) hide show
  1. package/README.md +46 -16
  2. package/build/plugins/claude/.claude-plugin/plugin.json +1 -1
  3. package/build/plugins/claude/skills/keiyaku/SKILL.md +5 -6
  4. package/build/plugins/claude/skills/keiyaku-akuma/SKILL.md +1 -1
  5. package/build/plugins/claude/skills/keiyaku-akuma/references/automation.md +8 -8
  6. package/build/plugins/claude/skills/keiyaku-babysit/SKILL.md +1 -1
  7. package/build/plugins/claude/skills/keiyaku-bind/SKILL.md +9 -9
  8. package/build/plugins/claude/skills/keiyaku-debt/SKILL.md +91 -0
  9. package/build/plugins/claude/skills/keiyaku-workflow/SKILL.md +2 -2
  10. package/build/plugins/codex/.codex-plugin/plugin.json +1 -1
  11. package/build/plugins/codex/skills/keiyaku/SKILL.md +5 -6
  12. package/build/plugins/codex/skills/keiyaku-akuma/SKILL.md +1 -1
  13. package/build/plugins/codex/skills/keiyaku-akuma/references/automation.md +8 -8
  14. package/build/plugins/codex/skills/keiyaku-babysit/SKILL.md +1 -1
  15. package/build/plugins/codex/skills/keiyaku-bind/SKILL.md +9 -9
  16. package/build/plugins/codex/skills/keiyaku-debt/SKILL.md +91 -0
  17. package/build/plugins/codex/skills/keiyaku-workflow/SKILL.md +2 -2
  18. package/build/plugins/opencode/index.js +1 -1
  19. package/build/plugins/opencode/skills/keiyaku/SKILL.md +5 -6
  20. package/build/plugins/opencode/skills/keiyaku-akuma/SKILL.md +1 -1
  21. package/build/plugins/opencode/skills/keiyaku-akuma/references/automation.md +8 -8
  22. package/build/plugins/opencode/skills/keiyaku-babysit/SKILL.md +1 -1
  23. package/build/plugins/opencode/skills/keiyaku-bind/SKILL.md +9 -9
  24. package/build/plugins/opencode/skills/keiyaku-debt/SKILL.md +91 -0
  25. package/build/plugins/opencode/skills/keiyaku-workflow/SKILL.md +2 -2
  26. package/build/plugins/pi/keiyaku.ts +0 -5
  27. package/build/skills/keiyaku/SKILL.md +5 -6
  28. package/build/skills/keiyaku-akuma/SKILL.md +1 -1
  29. package/build/skills/keiyaku-akuma/references/automation.md +8 -8
  30. package/build/skills/keiyaku-babysit/SKILL.md +1 -1
  31. package/build/skills/keiyaku-bind/SKILL.md +9 -9
  32. package/build/skills/keiyaku-debt/SKILL.md +91 -0
  33. package/build/skills/keiyaku-workflow/SKILL.md +2 -2
  34. package/build/src/akuma/akuma-call.d.ts +2 -0
  35. package/build/src/akuma/akuma-call.js +8 -2
  36. package/build/src/akuma/akuma-instance.d.ts +14 -1
  37. package/build/src/akuma/akuma-instance.js +37 -7
  38. package/build/src/akuma/akuma-observe.d.ts +33 -8
  39. package/build/src/akuma/akuma-observe.js +89 -63
  40. package/build/src/akuma/akuma-owner.d.ts +14 -2
  41. package/build/src/akuma/akuma-owner.js +49 -35
  42. package/build/src/akuma/akuma-selection-execution.js +9 -1
  43. package/build/src/akuma/akuma-stream.d.ts +22 -0
  44. package/build/src/akuma/akuma-stream.js +116 -0
  45. package/build/src/akuma/akuma-wait.d.ts +1 -40
  46. package/build/src/akuma/akuma-wait.js +23 -84
  47. package/build/src/akuma/akuma.d.ts +52 -16
  48. package/build/src/akuma/akuma.js +10 -10
  49. package/build/src/akuma/allowed.d.ts +7 -12
  50. package/build/src/akuma/allowed.js +13 -4
  51. package/build/src/akuma/archetype.d.ts +7 -15
  52. package/build/src/akuma/archetype.js +36 -35
  53. package/build/src/akuma/body-supervisor.d.ts +5 -5
  54. package/build/src/akuma/body-supervisor.js +22 -20
  55. package/build/src/akuma/body.d.ts +5 -3
  56. package/build/src/akuma/body.js +57 -8
  57. package/build/src/akuma/call-request.d.ts +30 -32
  58. package/build/src/akuma/call-request.js +10 -3
  59. package/build/src/akuma/caller.d.ts +39 -0
  60. package/build/src/akuma/caller.js +36 -0
  61. package/build/src/akuma/dispatch-association.d.ts +0 -1
  62. package/build/src/akuma/dispatch-association.js +0 -3
  63. package/build/src/akuma/heart/activity-schema.d.ts +12 -0
  64. package/build/src/akuma/heart/activity-schema.js +6 -0
  65. package/build/src/akuma/heart/facts.d.ts +16 -12
  66. package/build/src/akuma/heart/facts.js +8 -0
  67. package/build/src/akuma/heart/index.d.ts +61 -9
  68. package/build/src/akuma/heart/index.js +89 -24
  69. package/build/src/akuma/heart/rows.d.ts +3 -3
  70. package/build/src/akuma/heart/rows.js +5 -3
  71. package/build/src/akuma/heart/soul.d.ts +10 -1
  72. package/build/src/akuma/heart/soul.js +34 -24
  73. package/build/src/akuma/heart/storage.d.ts +20 -0
  74. package/build/src/akuma/heart/storage.js +62 -3
  75. package/build/src/akuma/heart/timeline.d.ts +7 -0
  76. package/build/src/akuma/heart/timeline.js +10 -0
  77. package/build/src/akuma/identity.d.ts +0 -1
  78. package/build/src/akuma/identity.js +2 -5
  79. package/build/src/akuma/index.d.ts +6 -2
  80. package/build/src/akuma/index.js +1 -0
  81. package/build/src/akuma/nuke.js +6 -28
  82. package/build/src/akuma/projection.d.ts +25 -11
  83. package/build/src/akuma/projection.js +24 -7
  84. package/build/src/akuma/provider-recipe.d.ts +18 -6
  85. package/build/src/akuma/provider-recipe.js +24 -1
  86. package/build/src/akuma/provider.d.ts +31 -10
  87. package/build/src/akuma/provider.js +105 -14
  88. package/build/src/akuma/providers/acp/events.js +29 -19
  89. package/build/src/akuma/providers/acp/index.js +2 -3
  90. package/build/src/akuma/providers/claude/events.js +110 -69
  91. package/build/src/akuma/providers/claude/index.d.ts +2 -2
  92. package/build/src/akuma/providers/claude/index.js +4 -8
  93. package/build/src/akuma/providers/codex-app-server/events.js +17 -2
  94. package/build/src/akuma/providers/codex-app-server/index.js +17 -11
  95. package/build/src/akuma/providers/decode.d.ts +33 -0
  96. package/build/src/akuma/providers/decode.js +65 -0
  97. package/build/src/akuma/providers/execution-environment.d.ts +2 -1
  98. package/build/src/akuma/providers/execution-environment.js +3 -0
  99. package/build/src/akuma/providers/grok-build/index.js +16 -48
  100. package/build/src/akuma/providers/index.js +2 -0
  101. package/build/src/akuma/providers/lifecycle.d.ts +9 -0
  102. package/build/src/akuma/providers/lifecycle.js +10 -0
  103. package/build/src/akuma/providers/opencode-sdk/event-stream.d.ts +3 -3
  104. package/build/src/akuma/providers/opencode-sdk/event-stream.js +2 -25
  105. package/build/src/akuma/providers/opencode-sdk/events.d.ts +7 -43
  106. package/build/src/akuma/providers/opencode-sdk/events.js +146 -296
  107. package/build/src/akuma/providers/opencode-sdk/index.js +270 -431
  108. package/build/src/akuma/providers/opencode-sdk/native-http.d.ts +9 -0
  109. package/build/src/akuma/providers/opencode-sdk/native-http.js +69 -0
  110. package/build/src/akuma/providers/opencode-sdk/session.d.ts +42 -36
  111. package/build/src/akuma/providers/opencode-sdk/session.js +75 -84
  112. package/build/src/akuma/providers/paseo/events.d.ts +33 -0
  113. package/build/src/akuma/providers/paseo/events.js +204 -0
  114. package/build/src/akuma/providers/paseo/index.d.ts +9 -0
  115. package/build/src/akuma/providers/paseo/index.js +357 -0
  116. package/build/src/akuma/providers/pi/events.d.ts +2 -0
  117. package/build/src/akuma/providers/pi/events.js +36 -38
  118. package/build/src/akuma/providers/pi/index.js +21 -35
  119. package/build/src/akuma/publication.d.ts +2 -0
  120. package/build/src/akuma/publication.js +5 -0
  121. package/build/src/akuma/request-lifecycle.d.ts +4 -2
  122. package/build/src/akuma/request-lifecycle.js +27 -12
  123. package/build/src/akuma/request-rendezvous.js +38 -55
  124. package/build/src/akuma/request-serve.d.ts +1 -1
  125. package/build/src/akuma/request-serve.js +77 -113
  126. package/build/src/akuma/requests.d.ts +3 -1
  127. package/build/src/akuma/requests.js +32 -0
  128. package/build/src/akuma/selection-observation.d.ts +129 -53
  129. package/build/src/akuma/selection-observation.js +3 -9
  130. package/build/src/akuma/turn-drive.d.ts +3 -0
  131. package/build/src/akuma/turn-drive.js +28 -10
  132. package/build/src/akuma-body.js +12 -22
  133. package/build/src/cli/akuma-caller.d.ts +3 -0
  134. package/build/src/cli/akuma-caller.js +31 -0
  135. package/build/src/cli/commands/akuma-grammar.js +10 -16
  136. package/build/src/cli/commands/akuma.js +25 -55
  137. package/build/src/cli/commands/contract-grammar.d.ts +9 -7
  138. package/build/src/cli/commands/contract-grammar.js +40 -47
  139. package/build/src/cli/commands/contract-help.d.ts +17 -7
  140. package/build/src/cli/commands/contract-help.js +50 -11
  141. package/build/src/cli/commands/contract.js +34 -63
  142. package/build/src/cli/commands/debt-grammar.d.ts +19 -0
  143. package/build/src/cli/commands/debt-grammar.js +323 -0
  144. package/build/src/cli/commands/debt-query.d.ts +5 -0
  145. package/build/src/cli/commands/{task-query.js → debt-query.js} +9 -9
  146. package/build/src/cli/commands/{task.d.ts → debt.d.ts} +2 -2
  147. package/build/src/cli/commands/{task.js → debt.js} +87 -164
  148. package/build/src/cli/coordinates.d.ts +1 -1
  149. package/build/src/cli/coordinates.js +1 -1
  150. package/build/src/cli/parse.d.ts +5 -5
  151. package/build/src/cli/parse.js +17 -16
  152. package/build/src/cli/render/akuma-activity.d.ts +11 -83
  153. package/build/src/cli/render/akuma-activity.js +20 -382
  154. package/build/src/cli/render/catalog.d.ts +4 -7
  155. package/build/src/cli/render/catalog.js +5 -5
  156. package/build/src/cli/render/contract-history.js +3 -6
  157. package/build/src/cli/render/contract.js +17 -52
  158. package/build/src/cli/render/debt.d.ts +28 -0
  159. package/build/src/cli/render/{task.js → debt.js} +55 -133
  160. package/build/src/cli/render/kanshi.js +28 -28
  161. package/build/src/cli/render/marks.d.ts +5 -5
  162. package/build/src/cli/render/marks.js +4 -10
  163. package/build/src/cli/render/nuke.js +1 -1
  164. package/build/src/cli/render/receipt.js +3 -10
  165. package/build/src/cli/runtime.d.ts +1 -1
  166. package/build/src/cli/runtime.js +14 -20
  167. package/build/src/cli/scan.d.ts +1 -1
  168. package/build/src/cli/selectors.d.ts +3 -6
  169. package/build/src/cli/selectors.js +22 -53
  170. package/build/src/cli/usage.d.ts +1 -1
  171. package/build/src/cli/usage.js +4 -4
  172. package/build/src/contract-worktree.js +3 -3
  173. package/build/src/debt/board.d.ts +160 -0
  174. package/build/src/{task → debt}/board.js +89 -89
  175. package/build/src/debt/catalog.d.ts +11 -0
  176. package/build/src/debt/catalog.js +59 -0
  177. package/build/src/{task → debt}/context.d.ts +1 -1
  178. package/build/src/{task → debt}/context.js +1 -1
  179. package/build/src/{task → debt}/created-observation.d.ts +6 -10
  180. package/build/src/{task → debt}/created-observation.js +7 -7
  181. package/build/src/debt/document.d.ts +37 -0
  182. package/build/src/{task → debt}/document.js +37 -37
  183. package/build/src/debt/identity.d.ts +21 -0
  184. package/build/src/{task → debt}/identity.js +35 -35
  185. package/build/src/debt/index.d.ts +111 -0
  186. package/build/src/debt/index.js +203 -0
  187. package/build/src/{task → debt}/input.d.ts +8 -8
  188. package/build/src/{task → debt}/input.js +21 -21
  189. package/build/src/debt/lifecycle-operations.d.ts +6 -0
  190. package/build/src/{task → debt}/lifecycle-operations.js +27 -31
  191. package/build/src/debt/mutation-result.d.ts +981 -0
  192. package/build/src/debt/mutation-result.js +109 -0
  193. package/build/src/debt/mutation.d.ts +424 -0
  194. package/build/src/debt/mutation.js +223 -0
  195. package/build/src/debt/operation-types.d.ts +71 -0
  196. package/build/src/debt/operations.d.ts +28 -0
  197. package/build/src/{task → debt}/operations.js +59 -60
  198. package/build/src/debt/query.d.ts +76 -0
  199. package/build/src/{task → debt}/query.js +55 -55
  200. package/build/src/{task → debt}/store.d.ts +13 -13
  201. package/build/src/{task → debt}/store.js +58 -49
  202. package/build/src/debt/view.d.ts +4 -0
  203. package/build/src/debt/view.js +7 -0
  204. package/build/src/dispatch/index.d.ts +3 -3
  205. package/build/src/dispatch/index.js +1 -2
  206. package/build/src/git/observe.d.ts +6 -2
  207. package/build/src/git/observe.js +6 -2
  208. package/build/src/identity/coordinates.d.ts +1 -1
  209. package/build/src/index.d.ts +17 -17
  210. package/build/src/index.js +11 -11
  211. package/build/src/kanshi/index.d.ts +2 -2
  212. package/build/src/kanshi/read.js +54 -39
  213. package/build/src/kanshi/report.d.ts +7 -7
  214. package/build/src/kanshi/select.js +4 -4
  215. package/build/src/library/address.js +2 -4
  216. package/build/src/library/akuma-creation.d.ts +5 -1
  217. package/build/src/library/akuma-creation.js +27 -47
  218. package/build/src/library/akumas.d.ts +7 -7
  219. package/build/src/library/akumas.js +13 -9
  220. package/build/src/library/bind.d.ts +17 -17
  221. package/build/src/library/bind.js +16 -12
  222. package/build/src/library/contract-address.d.ts +9 -0
  223. package/build/src/library/contract-address.js +71 -0
  224. package/build/src/library/contract-composition.d.ts +4 -7
  225. package/build/src/library/contract-composition.js +6 -18
  226. package/build/src/library/contract-creation.d.ts +3 -5
  227. package/build/src/library/contract-creation.js +24 -22
  228. package/build/src/library/contract-execution.js +21 -26
  229. package/build/src/library/contract-outcomes.d.ts +2 -14
  230. package/build/src/library/contract-outcomes.js +2 -13
  231. package/build/src/library/contract-types.d.ts +38 -4
  232. package/build/src/library/delivery.d.ts +0 -2
  233. package/build/src/library/delivery.js +2 -5
  234. package/build/src/library/input.d.ts +2 -2
  235. package/build/src/library/input.js +5 -5
  236. package/build/src/library/invocation.js +2 -2
  237. package/build/src/library/keiyaku.d.ts +0 -5
  238. package/build/src/library/keiyaku.js +6 -12
  239. package/build/src/library/nuke.js +3 -3
  240. package/build/src/library/outcome.d.ts +626 -625
  241. package/build/src/library/outcome.js +13 -3
  242. package/build/src/library/reconcile.js +8 -16
  243. package/build/src/library/refusal.d.ts +2 -2
  244. package/build/src/library/repo.d.ts +3 -2
  245. package/build/src/library/repo.js +10 -5
  246. package/build/src/library/selection.d.ts +5 -8
  247. package/build/src/library/selection.js +22 -73
  248. package/build/src/plugin/akuma-signals.d.ts +2 -0
  249. package/build/src/plugin/akuma-signals.js +4 -0
  250. package/build/src/plugin/public.d.ts +32 -2
  251. package/build/src/plugin/runtime.js +5 -3
  252. package/build/src/protocol/amend.js +3 -2
  253. package/build/src/protocol/attempt.js +3 -8
  254. package/build/src/protocol/bind.d.ts +2 -2
  255. package/build/src/protocol/bind.js +1 -1
  256. package/build/src/protocol/deliver.js +3 -3
  257. package/build/src/protocol/operations.d.ts +1 -3
  258. package/build/src/protocol/operations.js +0 -8
  259. package/build/src/protocol/outcome.d.ts +1 -2
  260. package/build/src/protocol/outcome.js +1 -13
  261. package/build/src/protocol/placement.js +3 -10
  262. package/build/src/protocol/read/status.js +31 -70
  263. package/build/src/protocol/reintegrate.js +3 -10
  264. package/build/src/protocol/review.js +3 -3
  265. package/build/src/protocol/run.d.ts +5 -1
  266. package/build/src/protocol/run.js +3 -3
  267. package/build/src/runtime/proc/windows-launch.exe +0 -0
  268. package/build/src/settlement/fence.d.ts +3 -3
  269. package/build/src/settlement/fence.js +4 -4
  270. package/build/src/settlement/holder.d.ts +16 -16
  271. package/build/src/settlement/holder.js +69 -63
  272. package/build/src/settlement/settle.d.ts +5 -5
  273. package/build/src/settlement/settle.js +53 -53
  274. package/package.json +19 -9
  275. package/plugins/paseo/plugin/index.server.ts +17 -0
  276. package/plugins/paseo/plugin/paseo-plugin.json +4 -0
  277. package/plugins/paseo/plugin/server/attach.ts +52 -0
  278. package/plugins/paseo/plugin/server/keiyaku.ts +44 -0
  279. package/plugins/paseo/plugin/server/message.ts +60 -0
  280. package/plugins/paseo/plugin/server/mirror.ts +193 -0
  281. package/plugins/paseo/plugin/server/model.ts +14 -0
  282. package/plugins/paseo/plugin/server/provider.ts +276 -0
  283. package/plugins/paseo/plugin/server/sdk-worker.ts +237 -0
  284. package/plugins/paseo/plugin/server/sdk.ts +289 -0
  285. package/plugins/paseo/plugin/server/stop.ts +26 -0
  286. package/plugins/paseo/plugin/server/transport.ts +35 -0
  287. package/plugins/paseo/plugin/shared/attach-rpc.ts +10 -0
  288. package/plugins/paseo/plugin/shared/refresh-rpc.ts +6 -0
  289. package/plugins/paseo/plugin/tsconfig.json +6 -0
  290. package/plugins/pi/keiyaku.ts +57 -0
  291. package/skills/keiyaku/SKILL.md +43 -0
  292. package/skills/keiyaku-akuma/SKILL.md +130 -0
  293. package/skills/keiyaku-akuma/references/automation.md +269 -0
  294. package/skills/keiyaku-babysit/SKILL.md +65 -0
  295. package/skills/keiyaku-bind/SKILL.md +216 -0
  296. package/skills/keiyaku-bind/agents/openai.yaml +4 -0
  297. package/skills/keiyaku-debt/SKILL.md +91 -0
  298. package/skills/keiyaku-workflow/SKILL.md +129 -0
  299. package/build/plugins/claude/skills/keiyaku-task/SKILL.md +0 -104
  300. package/build/plugins/codex/skills/keiyaku-task/SKILL.md +0 -104
  301. package/build/plugins/opencode/skills/keiyaku-task/SKILL.md +0 -104
  302. package/build/skills/keiyaku-task/SKILL.md +0 -104
  303. package/build/src/cli/commands/amend.d.ts +0 -12
  304. package/build/src/cli/commands/amend.js +0 -10
  305. package/build/src/cli/commands/bind.d.ts +0 -11
  306. package/build/src/cli/commands/bind.js +0 -23
  307. package/build/src/cli/commands/task-grammar.d.ts +0 -19
  308. package/build/src/cli/commands/task-grammar.js +0 -384
  309. package/build/src/cli/commands/task-query.d.ts +0 -5
  310. package/build/src/cli/render/task.d.ts +0 -41
  311. package/build/src/dispatch/association.d.ts +0 -1
  312. package/build/src/dispatch/association.js +0 -1
  313. package/build/src/task/board.d.ts +0 -168
  314. package/build/src/task/catalog.d.ts +0 -11
  315. package/build/src/task/catalog.js +0 -59
  316. package/build/src/task/compose-language.d.ts +0 -57
  317. package/build/src/task/compose-language.js +0 -364
  318. package/build/src/task/compose-parser.d.ts +0 -32
  319. package/build/src/task/compose-parser.js +0 -180
  320. package/build/src/task/compose.d.ts +0 -16
  321. package/build/src/task/compose.js +0 -189
  322. package/build/src/task/document.d.ts +0 -39
  323. package/build/src/task/identity.d.ts +0 -21
  324. package/build/src/task/index.d.ts +0 -138
  325. package/build/src/task/index.js +0 -269
  326. package/build/src/task/lifecycle-operations.d.ts +0 -6
  327. package/build/src/task/mutation-result.d.ts +0 -1726
  328. package/build/src/task/mutation-result.js +0 -198
  329. package/build/src/task/mutation.d.ts +0 -590
  330. package/build/src/task/mutation.js +0 -262
  331. package/build/src/task/operation-types.d.ts +0 -71
  332. package/build/src/task/operations.d.ts +0 -28
  333. package/build/src/task/query.d.ts +0 -76
  334. package/build/src/task/view.d.ts +0 -4
  335. package/build/src/task/view.js +0 -7
  336. /package/build/src/{task → debt}/operation-types.js +0 -0
@@ -1,262 +0,0 @@
1
- import { World } from "../world.js";
2
- import { requestBodyCommand } from "../akuma/request-rendezvous.js";
3
- import { eraseRequestCommand, } from "../akuma/request-wire.js";
4
- import { taskIdsSchema, taskNamespaceSchema } from "./identity.js";
5
- import { taskNonblankTextSchema, taskStateSchema, taskPrioritySchema } from "./document.js";
6
- import { taskBatchResultSchema, taskCompositionResultSchema, taskMutationIdSchema, taskMutationResultSchema, taskUpdateResultSchema, } from "./mutation-result.js";
7
- import { z } from "zod";
8
- export const TASK_MUTATION_ACTIONS = Object.freeze([
9
- "task.add",
10
- "task.addDocument",
11
- "task.compose",
12
- "task.done",
13
- "task.drop",
14
- "task.hold",
15
- "task.resume",
16
- "task.start",
17
- "task.stop",
18
- "task.update",
19
- ]);
20
- const taskMutationActionSchema = z.enum(TASK_MUTATION_ACTIONS);
21
- const nonemptyTaskIdsSchema = taskIdsSchema.unwrap().min(1).readonly();
22
- const addInputSchema = z
23
- .object({
24
- title: taskNonblankTextSchema,
25
- namespace: taskNamespaceSchema,
26
- body: z.string().optional(),
27
- note: z.string().optional(),
28
- state: taskStateSchema.optional(),
29
- priority: taskPrioritySchema.optional(),
30
- needs: taskIdsSchema.optional(),
31
- parent: taskMutationIdSchema.nullable().optional(),
32
- supersedes: taskIdsSchema.optional(),
33
- relates: taskIdsSchema.optional(),
34
- })
35
- .strict();
36
- const updateInputSchema = z
37
- .object({
38
- title: taskNonblankTextSchema.optional(),
39
- body: z.string().optional(),
40
- appendBody: z.string().optional(),
41
- note: z.string().optional(),
42
- priority: taskPrioritySchema.optional(),
43
- needs: taskIdsSchema.optional(),
44
- addNeeds: taskIdsSchema.optional(),
45
- dropNeeds: taskIdsSchema.optional(),
46
- parent: taskMutationIdSchema.nullable().optional(),
47
- supersedes: taskIdsSchema.optional(),
48
- addSupersedes: taskIdsSchema.optional(),
49
- dropSupersedes: taskIdsSchema.optional(),
50
- relates: taskIdsSchema.optional(),
51
- addRelates: taskIdsSchema.optional(),
52
- dropRelates: taskIdsSchema.optional(),
53
- })
54
- .strict()
55
- .superRefine((input, context) => {
56
- if (input.body !== undefined && input.appendBody !== undefined)
57
- context.addIssue({ code: "custom", message: "body and appendBody are mutually exclusive" });
58
- if (Object.values(input).every((value) => value === undefined))
59
- context.addIssue({ code: "custom", message: "update requires at least one field change" });
60
- });
61
- const addRequestSchema = z
62
- .object({ input: addInputSchema })
63
- .strict()
64
- .transform(({ input }) => ({ action: "task.add", input }));
65
- const addDocumentRequestSchema = z
66
- .object({ input: z.object({ markdown: z.string(), namespace: taskNamespaceSchema }).strict() })
67
- .strict()
68
- .transform(({ input }) => ({ action: "task.addDocument", input }));
69
- const composeRequestSchema = z
70
- .object({ markdown: z.string(), namespace: taskNamespaceSchema })
71
- .strict()
72
- .transform((request) => ({ action: "task.compose", ...request }));
73
- const updateRequestSchema = z
74
- .object({ id: taskMutationIdSchema, input: updateInputSchema })
75
- .strict()
76
- .transform((request) => ({ action: "task.update", ...request }));
77
- const singleOrBatchRequestSchema = (action) => z.union([
78
- z
79
- .object({ id: taskMutationIdSchema })
80
- .strict()
81
- .transform(({ id }) => ({ action, id })),
82
- z
83
- .object({ ids: nonemptyTaskIdsSchema })
84
- .strict()
85
- .transform(({ ids }) => ({ action, ids })),
86
- ]);
87
- const terminalRequestSchema = (action) => z.union([
88
- z
89
- .object({ id: taskMutationIdSchema, note: z.string().optional() })
90
- .strict()
91
- .transform(({ id, note }) => ({ action, id, ...(note === undefined ? {} : { note }) })),
92
- z
93
- .object({ ids: nonemptyTaskIdsSchema, note: z.string().optional() })
94
- .strict()
95
- .transform(({ ids, note }) => ({ action, ids, ...(note === undefined ? {} : { note }) })),
96
- ]);
97
- const taskRequestSchemas = {
98
- "task.add": addRequestSchema,
99
- "task.addDocument": addDocumentRequestSchema,
100
- "task.compose": composeRequestSchema,
101
- "task.done": terminalRequestSchema("task.done"),
102
- "task.drop": terminalRequestSchema("task.drop"),
103
- "task.hold": singleOrBatchRequestSchema("task.hold"),
104
- "task.resume": singleOrBatchRequestSchema("task.resume"),
105
- "task.start": singleOrBatchRequestSchema("task.start"),
106
- "task.stop": singleOrBatchRequestSchema("task.stop"),
107
- "task.update": updateRequestSchema,
108
- };
109
- const worldPathSchema = z.string().min(1);
110
- const taskBodyRequestSchema = z
111
- .object({ world: worldPathSchema, request: z.union(Object.values(taskRequestSchemas)) })
112
- .strict();
113
- const taskMutationServiceSchema = z.object({ action: taskMutationActionSchema }).strict();
114
- export const forwardedTaskReferenceSchema = z
115
- .object({ kind: z.literal("served-reference"), action: taskMutationActionSchema })
116
- .strict();
117
- function decodeTaskBodyRequest(action, value) {
118
- const parsed = taskBodyRequestSchema.extend({ request: taskRequestSchemas[action] }).safeParse(value);
119
- return parsed.success ? parsed.data : null;
120
- }
121
- function decodeTaskService(action, value) {
122
- const parsed = taskMutationServiceSchema.safeParse(value);
123
- if (!parsed.success || parsed.data.action !== action)
124
- throw new Error(`malformed stored Task service evidence for ${action}`);
125
- return parsed.data;
126
- }
127
- function decodeTaskReference(action, value) {
128
- const parsed = forwardedTaskReferenceSchema.safeParse(value);
129
- if (!parsed.success || parsed.data.action !== action)
130
- throw new Error(`malformed Task service reference for ${action}`);
131
- return parsed.data;
132
- }
133
- /** Task owns forwarded mutation payload, live result, and durable service evidence. */
134
- export function taskMutationRequestProtocol(action, batch) {
135
- return {
136
- action,
137
- encodeRequest: (input) => {
138
- const { action: _action, ...request } = input.request;
139
- return { world: input.world, request };
140
- },
141
- decodeRequest: (value) => decodeTaskBodyRequest(action, value),
142
- encodeResult: (result) => result,
143
- decodeResult: (result) => {
144
- const schema = action === "task.compose"
145
- ? taskCompositionResultSchema
146
- : action === "task.update"
147
- ? taskUpdateResultSchema
148
- : batch === undefined
149
- ? z.union([taskMutationResultSchema, taskBatchResultSchema])
150
- : batch
151
- ? taskBatchResultSchema
152
- : taskMutationResultSchema;
153
- const parsed = schema.safeParse(result);
154
- if (!parsed.success)
155
- throw new Error(`transport integrity: Task ${action} returned an invalid live result`);
156
- return parsed.data;
157
- },
158
- decodeReference: (reference) => decodeTaskReference(action, reference),
159
- isPermitted: (allowed) => allowed.includes(action),
160
- };
161
- }
162
- export function taskMutationRequestCommand(action, port) {
163
- return {
164
- completion: "service",
165
- protocol: taskMutationRequestProtocol(action),
166
- encodeService: (service) => service,
167
- decodeService: (service) => decodeTaskService(action, service),
168
- projectService: (service) => ({ kind: "served-reference", action: service.action }),
169
- execute: async (request, facts) => {
170
- const world = await World.prove(request.world);
171
- const action = request.request.action;
172
- let result;
173
- switch (action) {
174
- case "task.add":
175
- result = await port.add({
176
- world,
177
- options: addTaskOptions(request.request.input, facts.requester, facts.signal),
178
- });
179
- break;
180
- case "task.addDocument":
181
- result = await port.addDocument({
182
- world,
183
- document: { ...request.request.input, actor: facts.requester, signal: facts.signal },
184
- });
185
- break;
186
- case "task.compose":
187
- result = await port.compose({
188
- world,
189
- markdown: request.request.markdown,
190
- defaultNamespace: request.request.namespace,
191
- actor: facts.requester,
192
- signal: facts.signal,
193
- });
194
- break;
195
- case "task.update":
196
- result = await port.update({
197
- world,
198
- id: request.request.id,
199
- options: updateTaskOptions(request.request.input, facts.signal),
200
- });
201
- break;
202
- case "task.start":
203
- case "task.stop":
204
- case "task.hold":
205
- case "task.resume":
206
- case "task.done":
207
- case "task.drop": {
208
- const verb = action.slice("task.".length);
209
- const note = "note" in request.request ? request.request.note : undefined;
210
- result =
211
- "ids" in request.request
212
- ? await port.batch({
213
- world,
214
- verb,
215
- ids: request.request.ids,
216
- ...(note === undefined ? {} : { note }),
217
- signal: facts.signal,
218
- })
219
- : await port.lifecycle({
220
- world,
221
- verb,
222
- id: request.request.id,
223
- ...(note === undefined ? {} : { note }),
224
- signal: facts.signal,
225
- });
226
- break;
227
- }
228
- }
229
- return { kind: "served", result, service: { action } };
230
- },
231
- };
232
- }
233
- export function taskMutationRequestCommands(port) {
234
- return Object.fromEntries(TASK_MUTATION_ACTIONS.map((action) => [action, eraseRequestCommand(taskMutationRequestCommand(action, port))]));
235
- }
236
- export async function requestForwardedTask(input) {
237
- const response = await requestBodyCommand({
238
- directory: input.directory,
239
- ...(input.id === undefined ? {} : { id: input.id }),
240
- command: taskMutationRequestProtocol(input.request.action, "ids" in input.request),
241
- value: { world: input.world, request: input.request },
242
- ...(input.signal === undefined ? {} : { signal: input.signal }),
243
- });
244
- if (response.kind === "reference")
245
- return response.reference;
246
- return response.result;
247
- }
248
- /** Absent optional fields are omitted, never republished as an explicit undefined. */
249
- function definedFields(fields, additions = {}) {
250
- const selected = {};
251
- for (const [key, value] of Object.entries({ ...fields, ...additions })) {
252
- if (value !== undefined)
253
- selected[key] = value;
254
- }
255
- return selected;
256
- }
257
- function addTaskOptions(input, actor, signal) {
258
- return definedFields(input, { actor, signal });
259
- }
260
- function updateTaskOptions(input, signal) {
261
- return definedFields(input, { signal });
262
- }
@@ -1,71 +0,0 @@
1
- import type { TaskPriority, TaskState } from "./document.js";
2
- import type { TaskId } from "./identity.js";
3
- import type { TaskCleanupFailure, TaskRefusal, TaskRetry, TaskView } from "./mutation-result.js";
4
- export type { TaskView, TaskCleanupFailure, TaskCompositionDiagnostic, TaskRefusal, TaskRetry, TaskMutationResult, TaskUpdateResult, TaskBatchResult, } from "./mutation-result.js";
5
- export type TaskOutcome<A> = Readonly<{
6
- kind: "accepted";
7
- value: A;
8
- cleanup?: TaskCleanupFailure;
9
- }> | Readonly<{
10
- kind: "refused";
11
- refusal: TaskRefusal;
12
- }> | Readonly<{
13
- kind: "retry";
14
- reason: TaskRetry;
15
- }>;
16
- export type TaskLifecycleVerb = Extract<TaskRefusal, {
17
- kind: "invalid-lifecycle-transition";
18
- }>["verb"];
19
- export type SettledTaskAction = "done";
20
- export type SettledTaskResult = Readonly<{
21
- kind: "changed";
22
- task: TaskView;
23
- action: SettledTaskAction;
24
- cleanup?: TaskCleanupFailure;
25
- }> | Readonly<{
26
- kind: "unchanged";
27
- }> | Readonly<{
28
- kind: "refused";
29
- refusal: TaskRefusal;
30
- }> | Readonly<{
31
- kind: "retry";
32
- reason: TaskRetry;
33
- }>;
34
- export type AddTaskInput = Readonly<{
35
- title: string;
36
- namespace?: readonly string[];
37
- body?: string;
38
- note?: string;
39
- state?: TaskState;
40
- priority?: TaskPriority;
41
- needs?: readonly TaskId[];
42
- parent?: TaskId | null;
43
- supersedes?: readonly TaskId[];
44
- relates?: readonly TaskId[];
45
- actor?: string;
46
- signal?: AbortSignal;
47
- }>;
48
- export type AddTaskDocumentInput = Readonly<{
49
- markdown: string;
50
- namespace?: readonly string[];
51
- actor?: string;
52
- signal?: AbortSignal;
53
- }>;
54
- export type UpdateTaskInput = Readonly<{
55
- title?: string;
56
- body?: string;
57
- appendBody?: string;
58
- note?: string;
59
- priority?: TaskPriority;
60
- needs?: readonly TaskId[];
61
- addNeeds?: readonly TaskId[];
62
- dropNeeds?: readonly TaskId[];
63
- parent?: TaskId | null;
64
- supersedes?: readonly TaskId[];
65
- addSupersedes?: readonly TaskId[];
66
- dropSupersedes?: readonly TaskId[];
67
- relates?: readonly TaskId[];
68
- addRelates?: readonly TaskId[];
69
- dropRelates?: readonly TaskId[];
70
- signal?: AbortSignal;
71
- }>;
@@ -1,28 +0,0 @@
1
- import { type BlockedTaskRow, type TaskBoardObservation, type TaskDetailFacts, type TaskRow } from "./board.js";
2
- import { type TaskId } from "./identity.js";
3
- import type { WorldRoot } from "../world.js";
4
- import { type TaskPage, type TaskQueryExpression, type TaskQueryRow, type TaskQuerySort } from "./query.js";
5
- export { advanceTaskTimestamp, taskView } from "./view.js";
6
- export type { AddTaskDocumentInput, AddTaskInput, TaskCleanupFailure, SettledTaskResult, TaskBatchResult, TaskCompositionDiagnostic, TaskMutationResult, TaskOutcome, TaskRefusal, TaskRetry, TaskUpdateResult, TaskView, UpdateTaskInput, } from "./operation-types.js";
7
- import type { AddTaskDocumentInput, AddTaskInput, TaskMutationResult, TaskOutcome, TaskUpdateResult, UpdateTaskInput } from "./operation-types.js";
8
- export declare function nukeTask(world: WorldRoot, options?: Readonly<{
9
- timeoutMs?: number;
10
- onRemoved?(count: number): void;
11
- }>): Promise<number>;
12
- export declare function addTask(world: WorldRoot, input: AddTaskInput): Promise<TaskMutationResult>;
13
- export declare function addTaskDocument(world: WorldRoot, input: AddTaskDocumentInput): Promise<TaskMutationResult>;
14
- export declare function updateTask(world: WorldRoot, id: TaskId, input: UpdateTaskInput): Promise<TaskUpdateResult>;
15
- export { batchTasks, lifecycleTask, settleTask } from "./lifecycle-operations.js";
16
- export declare function listTasks(world: WorldRoot, namespace: readonly string[] | undefined, selection: "active" | "closed" | "all", scope?: "namespace" | "world", limit?: number): Promise<TaskOutcome<TaskPage<TaskRow>>>;
17
- export declare function readTaskDetail(world: WorldRoot, id: TaskId): Promise<TaskDetailFacts | null>;
18
- export declare function readyTasks(world: WorldRoot, namespace: readonly string[] | undefined, scope?: "namespace" | "world", parent?: TaskId, limit?: number): Promise<TaskOutcome<TaskPage<TaskRow>>>;
19
- export declare function blockedTasks(world: WorldRoot, namespace: readonly string[] | undefined, scope?: "namespace" | "world", parent?: TaskId, limit?: number): Promise<TaskOutcome<TaskPage<BlockedTaskRow>>>;
20
- export declare function queryTasks(input: Readonly<{
21
- world: WorldRoot;
22
- namespace?: readonly string[];
23
- expression: TaskQueryExpression;
24
- scope?: "namespace" | "world";
25
- sort?: TaskQuerySort;
26
- limit?: number;
27
- }>): Promise<TaskOutcome<TaskPage<TaskQueryRow>>>;
28
- export declare function observeTaskBoard(world: WorldRoot): Promise<TaskBoardObservation>;
@@ -1,76 +0,0 @@
1
- import type { TaskPriority, TaskState } from "./document.js";
2
- import { type TaskId } from "./identity.js";
3
- import type { TaskBoard, TaskRef, TaskRelationProjection, TaskRow } from "./board.js";
4
- import { type BoundedList } from "../bounded-list.js";
5
- export declare const TASK_RELATION_PREDICATE_FIELDS: readonly ["under", "needs", "blocks"];
6
- export type TaskRelationPredicateField = (typeof TASK_RELATION_PREDICATE_FIELDS)[number];
7
- export type TaskQueryPredicate = Readonly<{
8
- field: "state";
9
- operator: "=" | "!=";
10
- value: TaskState;
11
- }> | Readonly<{
12
- field: "priority";
13
- operator: "=" | "!=" | "<" | "<=" | ">" | ">=";
14
- value: TaskPriority;
15
- }> | Readonly<{
16
- field: "title" | "id";
17
- operator: "=" | "!=" | "~";
18
- value: string;
19
- }> | Readonly<{
20
- field: "parent";
21
- operator: "=" | "!=";
22
- value: TaskId | null;
23
- }> | Readonly<{
24
- field: "under" | "needs" | "blocks";
25
- operator: "=" | "!=";
26
- value: TaskId;
27
- }> | Readonly<{
28
- field: "ready" | "blocked";
29
- operator: "=" | "!=";
30
- value: boolean;
31
- }> | Readonly<{
32
- field: "created" | "updated";
33
- operator: "=" | "!=" | "<" | "<=" | ">" | ">=";
34
- value: string;
35
- }>;
36
- export type TaskQueryExpression = Readonly<{
37
- kind: "and" | "or";
38
- terms: readonly TaskQueryExpression[];
39
- }> | Readonly<{
40
- kind: "not";
41
- term: TaskQueryExpression;
42
- }> | Readonly<{
43
- kind: "predicate";
44
- predicate: TaskQueryPredicate;
45
- }>;
46
- export type TaskQuerySort = "priority" | "created" | "updated" | "id";
47
- export type TaskQueryRow = TaskRow & Readonly<{
48
- parent: TaskId | null;
49
- needs: readonly TaskRef[];
50
- blocks: readonly TaskRef[];
51
- createdAt: string;
52
- updatedAt: string;
53
- }>;
54
- export type TaskPage<Row> = BoundedList<Row>;
55
- /** Semantic refusals identify the caller input part; textual offsets belong to the CLI. */
56
- export declare class TaskQueryPredicateError extends TypeError {
57
- readonly part: "field" | "operator" | "value";
58
- constructor(message: string, part: "field" | "operator" | "value");
59
- }
60
- export declare function normalizeTaskQueryPredicate(value: unknown): TaskQueryPredicate;
61
- export declare function normalizeTaskQuery(value: unknown): TaskQueryExpression;
62
- /** CLI selection and native default share Task-owned terminal-state semantics. */
63
- export declare function taskQuerySelection(selection?: "active" | "closed" | "all", where?: TaskQueryExpression): TaskQueryExpression;
64
- export declare function projectQueryRows(board: TaskBoard, relations: TaskRelationProjection, input: Readonly<{
65
- scope: readonly string[] | null;
66
- expression: TaskQueryExpression;
67
- sort?: TaskQuerySort;
68
- }>): readonly TaskQueryRow[];
69
- export declare function projectQuery(board: TaskBoard, relations: TaskRelationProjection, input: Readonly<{
70
- scope: readonly string[] | null;
71
- expression: TaskQueryExpression;
72
- sort?: TaskQuerySort;
73
- limit: number;
74
- }>): TaskPage<TaskQueryRow>;
75
- export declare function underExpression(parent: TaskId): TaskQueryExpression;
76
- export declare function queryUnderTargets(expression: TaskQueryExpression): readonly TaskId[];
@@ -1,4 +0,0 @@
1
- import type { TaskDocument } from "./document.js";
2
- import type { TaskView } from "./operation-types.js";
3
- export declare function taskView(document: TaskDocument): TaskView;
4
- export declare function advanceTaskTimestamp(previous: string, candidate: string): string;
@@ -1,7 +0,0 @@
1
- import { parseTaskId } from "./identity.js";
2
- export function taskView(document) {
3
- return { ...document, namespace: parseTaskId(document.id).namespace };
4
- }
5
- export function advanceTaskTimestamp(previous, candidate) {
6
- return candidate > previous ? candidate : new Date(Date.parse(previous) + 1).toISOString();
7
- }
File without changes