@astrosheep/keiyaku 4.6.8 → 4.6.10

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 (253) hide show
  1. package/README.md +40 -14
  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/skills/keiyaku/SKILL.md +5 -6
  27. package/build/skills/keiyaku-akuma/SKILL.md +1 -1
  28. package/build/skills/keiyaku-akuma/references/automation.md +8 -8
  29. package/build/skills/keiyaku-babysit/SKILL.md +1 -1
  30. package/build/skills/keiyaku-bind/SKILL.md +9 -9
  31. package/build/skills/keiyaku-debt/SKILL.md +91 -0
  32. package/build/skills/keiyaku-workflow/SKILL.md +2 -2
  33. package/build/src/akuma/akuma-instance.d.ts +2 -0
  34. package/build/src/akuma/akuma-instance.js +10 -0
  35. package/build/src/akuma/akuma-observe.d.ts +33 -8
  36. package/build/src/akuma/akuma-observe.js +88 -64
  37. package/build/src/akuma/akuma-owner.d.ts +11 -2
  38. package/build/src/akuma/akuma-owner.js +45 -35
  39. package/build/src/akuma/akuma-selection-execution.js +9 -1
  40. package/build/src/akuma/akuma-stream.d.ts +22 -0
  41. package/build/src/akuma/akuma-stream.js +116 -0
  42. package/build/src/akuma/akuma-wait.d.ts +1 -40
  43. package/build/src/akuma/akuma-wait.js +23 -84
  44. package/build/src/akuma/akuma.d.ts +17 -11
  45. package/build/src/akuma/akuma.js +2 -0
  46. package/build/src/akuma/allowed.d.ts +7 -12
  47. package/build/src/akuma/allowed.js +13 -4
  48. package/build/src/akuma/body-supervisor.d.ts +5 -5
  49. package/build/src/akuma/body-supervisor.js +22 -20
  50. package/build/src/akuma/body.js +28 -1
  51. package/build/src/akuma/call-request.d.ts +12 -22
  52. package/build/src/akuma/heart/activity-schema.d.ts +12 -0
  53. package/build/src/akuma/heart/activity-schema.js +6 -0
  54. package/build/src/akuma/heart/index.d.ts +59 -2
  55. package/build/src/akuma/heart/index.js +87 -8
  56. package/build/src/akuma/heart/rows.js +5 -3
  57. package/build/src/akuma/heart/soul.d.ts +9 -0
  58. package/build/src/akuma/heart/soul.js +29 -0
  59. package/build/src/akuma/heart/storage.d.ts +15 -0
  60. package/build/src/akuma/heart/storage.js +55 -0
  61. package/build/src/akuma/heart/timeline.d.ts +7 -0
  62. package/build/src/akuma/heart/timeline.js +10 -0
  63. package/build/src/akuma/index.d.ts +1 -0
  64. package/build/src/akuma/projection.d.ts +25 -0
  65. package/build/src/akuma/projection.js +24 -7
  66. package/build/src/akuma/provider-recipe.d.ts +11 -0
  67. package/build/src/akuma/provider-recipe.js +23 -0
  68. package/build/src/akuma/provider.d.ts +25 -0
  69. package/build/src/akuma/provider.js +99 -7
  70. package/build/src/akuma/providers/acp/events.js +25 -2
  71. package/build/src/akuma/providers/claude/events.js +76 -10
  72. package/build/src/akuma/providers/claude/index.js +2 -5
  73. package/build/src/akuma/providers/codex-app-server/events.js +17 -2
  74. package/build/src/akuma/providers/codex-app-server/index.js +15 -9
  75. package/build/src/akuma/providers/decode.d.ts +8 -0
  76. package/build/src/akuma/providers/decode.js +21 -0
  77. package/build/src/akuma/providers/grok-build/index.js +10 -26
  78. package/build/src/akuma/providers/opencode-sdk/event-stream.d.ts +3 -3
  79. package/build/src/akuma/providers/opencode-sdk/event-stream.js +2 -25
  80. package/build/src/akuma/providers/opencode-sdk/events.d.ts +7 -43
  81. package/build/src/akuma/providers/opencode-sdk/events.js +147 -284
  82. package/build/src/akuma/providers/opencode-sdk/index.js +267 -421
  83. package/build/src/akuma/providers/opencode-sdk/native-http.d.ts +9 -0
  84. package/build/src/akuma/providers/opencode-sdk/native-http.js +69 -0
  85. package/build/src/akuma/providers/opencode-sdk/session.d.ts +42 -36
  86. package/build/src/akuma/providers/opencode-sdk/session.js +75 -82
  87. package/build/src/akuma/providers/paseo/events.d.ts +8 -0
  88. package/build/src/akuma/providers/paseo/events.js +58 -11
  89. package/build/src/akuma/providers/paseo/index.js +11 -7
  90. package/build/src/akuma/providers/pi/events.d.ts +2 -0
  91. package/build/src/akuma/providers/pi/events.js +32 -24
  92. package/build/src/akuma/providers/pi/index.js +21 -35
  93. package/build/src/akuma/request-lifecycle.d.ts +1 -2
  94. package/build/src/akuma/request-lifecycle.js +2 -8
  95. package/build/src/akuma/request-rendezvous.js +38 -55
  96. package/build/src/akuma/request-serve.d.ts +1 -1
  97. package/build/src/akuma/request-serve.js +77 -113
  98. package/build/src/akuma/selection-observation.d.ts +57 -51
  99. package/build/src/akuma/selection-observation.js +3 -3
  100. package/build/src/akuma/turn-drive.d.ts +3 -0
  101. package/build/src/akuma/turn-drive.js +26 -5
  102. package/build/src/akuma-body.js +12 -22
  103. package/build/src/cli/akuma-caller.js +10 -0
  104. package/build/src/cli/commands/akuma-grammar.js +3 -4
  105. package/build/src/cli/commands/akuma.js +13 -51
  106. package/build/src/cli/commands/contract-grammar.d.ts +7 -6
  107. package/build/src/cli/commands/contract-grammar.js +27 -32
  108. package/build/src/cli/commands/contract-help.d.ts +16 -7
  109. package/build/src/cli/commands/contract-help.js +20 -11
  110. package/build/src/cli/commands/contract.js +11 -11
  111. package/build/src/cli/commands/debt-grammar.d.ts +19 -0
  112. package/build/src/cli/commands/debt-grammar.js +323 -0
  113. package/build/src/cli/commands/debt-query.d.ts +5 -0
  114. package/build/src/cli/commands/{task-query.js → debt-query.js} +9 -9
  115. package/build/src/cli/commands/{task.d.ts → debt.d.ts} +2 -2
  116. package/build/src/cli/commands/{task.js → debt.js} +83 -143
  117. package/build/src/cli/coordinates.d.ts +1 -1
  118. package/build/src/cli/coordinates.js +1 -1
  119. package/build/src/cli/parse.d.ts +4 -4
  120. package/build/src/cli/parse.js +17 -16
  121. package/build/src/cli/render/akuma-activity.d.ts +11 -83
  122. package/build/src/cli/render/akuma-activity.js +20 -382
  123. package/build/src/cli/render/catalog.d.ts +2 -2
  124. package/build/src/cli/render/catalog.js +5 -5
  125. package/build/src/cli/render/contract.js +2 -2
  126. package/build/src/cli/render/debt.d.ts +28 -0
  127. package/build/src/cli/render/{task.js → debt.js} +51 -112
  128. package/build/src/cli/render/kanshi.js +28 -28
  129. package/build/src/cli/render/marks.d.ts +5 -5
  130. package/build/src/cli/render/marks.js +4 -10
  131. package/build/src/cli/render/nuke.js +1 -1
  132. package/build/src/cli/runtime.js +3 -3
  133. package/build/src/cli/scan.d.ts +1 -1
  134. package/build/src/cli/usage.d.ts +1 -1
  135. package/build/src/cli/usage.js +4 -4
  136. package/build/src/contract-worktree.js +3 -3
  137. package/build/src/debt/board.d.ts +160 -0
  138. package/build/src/{task → debt}/board.js +89 -89
  139. package/build/src/debt/catalog.d.ts +11 -0
  140. package/build/src/debt/catalog.js +59 -0
  141. package/build/src/{task → debt}/context.d.ts +1 -1
  142. package/build/src/{task → debt}/context.js +1 -1
  143. package/build/src/{task → debt}/created-observation.d.ts +6 -10
  144. package/build/src/{task → debt}/created-observation.js +7 -7
  145. package/build/src/debt/document.d.ts +37 -0
  146. package/build/src/{task → debt}/document.js +37 -37
  147. package/build/src/debt/identity.d.ts +21 -0
  148. package/build/src/{task → debt}/identity.js +35 -35
  149. package/build/src/debt/index.d.ts +111 -0
  150. package/build/src/debt/index.js +203 -0
  151. package/build/src/{task → debt}/input.d.ts +8 -8
  152. package/build/src/{task → debt}/input.js +21 -21
  153. package/build/src/debt/lifecycle-operations.d.ts +6 -0
  154. package/build/src/{task → debt}/lifecycle-operations.js +27 -31
  155. package/build/src/debt/mutation-result.d.ts +981 -0
  156. package/build/src/debt/mutation-result.js +109 -0
  157. package/build/src/debt/mutation.d.ts +424 -0
  158. package/build/src/debt/mutation.js +223 -0
  159. package/build/src/debt/operation-types.d.ts +71 -0
  160. package/build/src/debt/operations.d.ts +28 -0
  161. package/build/src/{task → debt}/operations.js +59 -60
  162. package/build/src/debt/query.d.ts +76 -0
  163. package/build/src/{task → debt}/query.js +55 -55
  164. package/build/src/{task → debt}/store.d.ts +13 -13
  165. package/build/src/{task → debt}/store.js +58 -49
  166. package/build/src/debt/view.d.ts +4 -0
  167. package/build/src/debt/view.js +7 -0
  168. package/build/src/identity/coordinates.d.ts +1 -1
  169. package/build/src/index.d.ts +13 -13
  170. package/build/src/index.js +9 -9
  171. package/build/src/kanshi/index.d.ts +1 -1
  172. package/build/src/kanshi/read.js +33 -33
  173. package/build/src/kanshi/report.d.ts +7 -7
  174. package/build/src/kanshi/select.js +4 -4
  175. package/build/src/library/akumas.d.ts +2 -3
  176. package/build/src/library/bind.d.ts +3 -3
  177. package/build/src/library/bind.js +5 -5
  178. package/build/src/library/contract-creation.js +5 -5
  179. package/build/src/library/contract-execution.js +4 -4
  180. package/build/src/library/contract-types.d.ts +2 -2
  181. package/build/src/library/input.d.ts +2 -2
  182. package/build/src/library/input.js +5 -5
  183. package/build/src/library/invocation.js +2 -2
  184. package/build/src/library/nuke.js +3 -3
  185. package/build/src/library/outcome.d.ts +126 -126
  186. package/build/src/library/outcome.js +3 -3
  187. package/build/src/library/selection.d.ts +1 -4
  188. package/build/src/library/selection.js +11 -62
  189. package/build/src/plugin/public.d.ts +5 -0
  190. package/build/src/plugin/runtime.js +3 -1
  191. package/build/src/runtime/proc/windows-launch.exe +0 -0
  192. package/build/src/settlement/fence.d.ts +3 -3
  193. package/build/src/settlement/fence.js +4 -4
  194. package/build/src/settlement/holder.d.ts +16 -16
  195. package/build/src/settlement/holder.js +69 -63
  196. package/build/src/settlement/settle.d.ts +5 -5
  197. package/build/src/settlement/settle.js +53 -53
  198. package/package.json +12 -6
  199. package/plugins/paseo/plugin/index.server.ts +17 -0
  200. package/plugins/paseo/plugin/paseo-plugin.json +4 -0
  201. package/plugins/paseo/plugin/server/attach.ts +52 -0
  202. package/plugins/paseo/plugin/server/keiyaku.ts +44 -0
  203. package/plugins/paseo/plugin/server/message.ts +60 -0
  204. package/plugins/paseo/plugin/server/mirror.ts +193 -0
  205. package/plugins/paseo/plugin/server/model.ts +14 -0
  206. package/plugins/paseo/plugin/server/provider.ts +276 -0
  207. package/plugins/paseo/plugin/server/sdk-worker.ts +237 -0
  208. package/plugins/paseo/plugin/server/sdk.ts +289 -0
  209. package/plugins/paseo/plugin/server/stop.ts +26 -0
  210. package/plugins/paseo/plugin/server/transport.ts +35 -0
  211. package/plugins/paseo/plugin/shared/attach-rpc.ts +10 -0
  212. package/plugins/paseo/plugin/shared/refresh-rpc.ts +6 -0
  213. package/plugins/paseo/plugin/tsconfig.json +6 -0
  214. package/skills/keiyaku/SKILL.md +5 -6
  215. package/skills/keiyaku-akuma/SKILL.md +1 -1
  216. package/skills/keiyaku-akuma/references/automation.md +8 -8
  217. package/skills/keiyaku-babysit/SKILL.md +1 -1
  218. package/skills/keiyaku-bind/SKILL.md +9 -9
  219. package/skills/keiyaku-debt/SKILL.md +91 -0
  220. package/skills/keiyaku-workflow/SKILL.md +2 -2
  221. package/build/plugins/claude/skills/keiyaku-task/SKILL.md +0 -104
  222. package/build/plugins/codex/skills/keiyaku-task/SKILL.md +0 -104
  223. package/build/plugins/opencode/skills/keiyaku-task/SKILL.md +0 -104
  224. package/build/skills/keiyaku-task/SKILL.md +0 -104
  225. package/build/src/cli/commands/task-grammar.d.ts +0 -19
  226. package/build/src/cli/commands/task-grammar.js +0 -384
  227. package/build/src/cli/commands/task-query.d.ts +0 -5
  228. package/build/src/cli/render/task.d.ts +0 -39
  229. package/build/src/task/board.d.ts +0 -168
  230. package/build/src/task/catalog.d.ts +0 -11
  231. package/build/src/task/catalog.js +0 -59
  232. package/build/src/task/compose-language.d.ts +0 -57
  233. package/build/src/task/compose-language.js +0 -364
  234. package/build/src/task/compose-parser.d.ts +0 -32
  235. package/build/src/task/compose-parser.js +0 -180
  236. package/build/src/task/compose.d.ts +0 -16
  237. package/build/src/task/compose.js +0 -189
  238. package/build/src/task/document.d.ts +0 -39
  239. package/build/src/task/identity.d.ts +0 -21
  240. package/build/src/task/index.d.ts +0 -138
  241. package/build/src/task/index.js +0 -269
  242. package/build/src/task/lifecycle-operations.d.ts +0 -6
  243. package/build/src/task/mutation-result.d.ts +0 -1726
  244. package/build/src/task/mutation-result.js +0 -198
  245. package/build/src/task/mutation.d.ts +0 -590
  246. package/build/src/task/mutation.js +0 -262
  247. package/build/src/task/operation-types.d.ts +0 -71
  248. package/build/src/task/operations.d.ts +0 -28
  249. package/build/src/task/query.d.ts +0 -76
  250. package/build/src/task/view.d.ts +0 -4
  251. package/build/src/task/view.js +0 -7
  252. package/skills/keiyaku-task/SKILL.md +0 -104
  253. /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
- }
@@ -1,104 +0,0 @@
1
- ---
2
- name: keiyaku-task
3
- description: >-
4
- Must read when using Tasks for durable work planning, decomposition, or
5
- dependencies.
6
- ---
7
-
8
- # Keiyaku Task
9
-
10
- A Task is durable planning memory. It records work, decomposition, and
11
- relationships that must remain after the current conversation. Task is an
12
- independent product; it is not a Contract, Arc, Akuma, permission, acceptance
13
- boundary, or fulfillment lifecycle.
14
-
15
- ## 1. When To Use A Task
16
-
17
- Use a Task when the plan or dependency must outlive the current conversation.
18
- Skip it when the work is small and no durable planning memory is needed.
19
-
20
- - Use a `kei` for one independently acceptable outcome.
21
- - Use an Arc for a chapter inside one `kei`.
22
- - Use a Task for decomposition or dependency memory.
23
- - Do not create a Task just to mirror a `kei`.
24
-
25
- A Task may exist without a Contract. Associating a Task with a `kei` does not
26
- transfer the Contract's holder, acceptance, or lifecycle to the Task.
27
-
28
- ## 2. Relationships And Parallel Work
29
-
30
- Independent Tasks may start and progress in parallel when their dependencies
31
- allow it.
32
-
33
- Use the relationships for their actual meanings:
34
-
35
- - `needs` means this Task must wait for another Task to become terminal.
36
- - `parent` groups decomposition; it does not create a dependency.
37
- - `supersedes` points to work replaced by this Task.
38
- - `relates` records a connection without affecting readiness.
39
-
40
- Only `needs` orders work. Do not add it because Tasks touch the same Region or
41
- because one Task is related to another. A terminal Task releases its dependents.
42
- An `on_hold` Task is deliberately paused; it is neither ready nor blocked.
43
-
44
- ## 3. Task Commands
45
-
46
- Create and inspect Tasks:
47
-
48
- ```bash
49
- keiyaku task add "<title>"
50
- keiyaku task add "<title>" --priority 1 --needs <task-id>
51
- keiyaku task show <task-id>
52
- keiyaku task ls
53
- keiyaku task ready
54
- keiyaku task blocked
55
- keiyaku task tree <task-id>
56
- keiyaku task doctor
57
- ```
58
-
59
- Use complete Task IDs for targeted commands. `ls`, `ready`, and `blocked` use
60
- the current namespace; use `--world` to inspect the complete Task world.
61
-
62
- Change lifecycle state:
63
-
64
- ```bash
65
- keiyaku task start <task-id>...
66
- keiyaku task stop <task-id>
67
- keiyaku task hold <task-id>...
68
- keiyaku task resume <task-id>
69
- keiyaku task done <task-id>...
70
- keiyaku task drop <task-id>... --note "<reason>"
71
- ```
72
-
73
- Use `done` when the Task is complete. Use `drop` when it will not be done.
74
- Both terminal states release dependent Tasks. Use `hold` for a deliberate pause,
75
- not for an unresolved dependency; unresolved `needs` appear in `blocked`.
76
-
77
- Update a Task without changing its lifecycle:
78
-
79
- ```bash
80
- keiyaku task update <task-id> --title "<title>"
81
- keiyaku task update <task-id> --body "<body>"
82
- keiyaku task update <task-id> --needs <task-id>
83
- ```
84
-
85
- Use `task compose -` when several Tasks and their relationships should be
86
- planned or admitted together. Use `--plan` to inspect the composition without
87
- writing it.
88
-
89
- ## 4. After Creating A Task
90
-
91
- Read the returned Task identity. Then:
92
-
93
- 1. Start ready work.
94
- 2. Run independent Tasks in parallel.
95
- 3. Add or remove relationships when the plan changes.
96
- 4. Hold work that is deliberately paused.
97
- 5. Mark completed work `done`, or mark abandoned work `drop` with a reason.
98
- 6. Use `ready`, `blocked`, `tree`, or `doctor` to rebuild the current view.
99
-
100
- Task records planning memory. It does not perform the work, claim acceptance,
101
- assign a holder, or decide what a Contract may accept.
102
-
103
- Read `keiyaku-bind` for Contract authoring and `keiyaku-workflow` for Contract
104
- lifecycle.
File without changes