@blxzer/cursor-trellis-core 0.5.0-beta.4 → 0.5.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 (197) hide show
  1. package/channel.d.ts +1 -0
  2. package/channel.js +1 -0
  3. package/index.d.ts +1 -0
  4. package/index.js +1 -0
  5. package/package.json +27 -47
  6. package/task.d.ts +1 -0
  7. package/task.js +1 -0
  8. package/testing.d.ts +1 -0
  9. package/testing.js +1 -0
  10. package/dist/channel/api/assert.d.ts +0 -3
  11. package/dist/channel/api/assert.d.ts.map +0 -1
  12. package/dist/channel/api/assert.js +0 -11
  13. package/dist/channel/api/assert.js.map +0 -1
  14. package/dist/channel/api/context.d.ts +0 -21
  15. package/dist/channel/api/context.d.ts.map +0 -1
  16. package/dist/channel/api/context.js +0 -99
  17. package/dist/channel/api/context.js.map +0 -1
  18. package/dist/channel/api/create.d.ts +0 -9
  19. package/dist/channel/api/create.d.ts.map +0 -1
  20. package/dist/channel/api/create.js +0 -104
  21. package/dist/channel/api/create.js.map +0 -1
  22. package/dist/channel/api/inbox.d.ts +0 -51
  23. package/dist/channel/api/inbox.d.ts.map +0 -1
  24. package/dist/channel/api/inbox.js +0 -176
  25. package/dist/channel/api/inbox.js.map +0 -1
  26. package/dist/channel/api/interrupt.d.ts +0 -31
  27. package/dist/channel/api/interrupt.d.ts.map +0 -1
  28. package/dist/channel/api/interrupt.js +0 -102
  29. package/dist/channel/api/interrupt.js.map +0 -1
  30. package/dist/channel/api/post-thread.d.ts +0 -14
  31. package/dist/channel/api/post-thread.d.ts.map +0 -1
  32. package/dist/channel/api/post-thread.js +0 -109
  33. package/dist/channel/api/post-thread.js.map +0 -1
  34. package/dist/channel/api/read.d.ts +0 -17
  35. package/dist/channel/api/read.d.ts.map +0 -1
  36. package/dist/channel/api/read.js +0 -44
  37. package/dist/channel/api/read.js.map +0 -1
  38. package/dist/channel/api/resolve.d.ts +0 -21
  39. package/dist/channel/api/resolve.d.ts.map +0 -1
  40. package/dist/channel/api/resolve.js +0 -28
  41. package/dist/channel/api/resolve.js.map +0 -1
  42. package/dist/channel/api/runtime.d.ts +0 -70
  43. package/dist/channel/api/runtime.d.ts.map +0 -1
  44. package/dist/channel/api/runtime.js +0 -11
  45. package/dist/channel/api/runtime.js.map +0 -1
  46. package/dist/channel/api/send.d.ts +0 -4
  47. package/dist/channel/api/send.d.ts.map +0 -1
  48. package/dist/channel/api/send.js +0 -52
  49. package/dist/channel/api/send.js.map +0 -1
  50. package/dist/channel/api/spawn.d.ts +0 -13
  51. package/dist/channel/api/spawn.d.ts.map +0 -1
  52. package/dist/channel/api/spawn.js +0 -54
  53. package/dist/channel/api/spawn.js.map +0 -1
  54. package/dist/channel/api/title.d.ts +0 -5
  55. package/dist/channel/api/title.d.ts.map +0 -1
  56. package/dist/channel/api/title.js +0 -40
  57. package/dist/channel/api/title.js.map +0 -1
  58. package/dist/channel/api/types.d.ts +0 -65
  59. package/dist/channel/api/types.d.ts.map +0 -1
  60. package/dist/channel/api/types.js +0 -2
  61. package/dist/channel/api/types.js.map +0 -1
  62. package/dist/channel/api/watch-channels.d.ts +0 -40
  63. package/dist/channel/api/watch-channels.d.ts.map +0 -1
  64. package/dist/channel/api/watch-channels.js +0 -143
  65. package/dist/channel/api/watch-channels.js.map +0 -1
  66. package/dist/channel/api/watch.d.ts +0 -11
  67. package/dist/channel/api/watch.d.ts.map +0 -1
  68. package/dist/channel/api/watch.js +0 -17
  69. package/dist/channel/api/watch.js.map +0 -1
  70. package/dist/channel/api/workers.d.ts +0 -69
  71. package/dist/channel/api/workers.d.ts.map +0 -1
  72. package/dist/channel/api/workers.js +0 -145
  73. package/dist/channel/api/workers.js.map +0 -1
  74. package/dist/channel/index.d.ts +0 -38
  75. package/dist/channel/index.d.ts.map +0 -1
  76. package/dist/channel/index.js +0 -23
  77. package/dist/channel/index.js.map +0 -1
  78. package/dist/channel/internal/store/channel-metadata.d.ts +0 -23
  79. package/dist/channel/internal/store/channel-metadata.d.ts.map +0 -1
  80. package/dist/channel/internal/store/channel-metadata.js +0 -94
  81. package/dist/channel/internal/store/channel-metadata.js.map +0 -1
  82. package/dist/channel/internal/store/delivery.d.ts +0 -27
  83. package/dist/channel/internal/store/delivery.d.ts.map +0 -1
  84. package/dist/channel/internal/store/delivery.js +0 -37
  85. package/dist/channel/internal/store/delivery.js.map +0 -1
  86. package/dist/channel/internal/store/events.d.ts +0 -215
  87. package/dist/channel/internal/store/events.d.ts.map +0 -1
  88. package/dist/channel/internal/store/events.js +0 -206
  89. package/dist/channel/internal/store/events.js.map +0 -1
  90. package/dist/channel/internal/store/filter.d.ts +0 -21
  91. package/dist/channel/internal/store/filter.d.ts.map +0 -1
  92. package/dist/channel/internal/store/filter.js +0 -75
  93. package/dist/channel/internal/store/filter.js.map +0 -1
  94. package/dist/channel/internal/store/inbox.d.ts +0 -17
  95. package/dist/channel/internal/store/inbox.d.ts.map +0 -1
  96. package/dist/channel/internal/store/inbox.js +0 -30
  97. package/dist/channel/internal/store/inbox.js.map +0 -1
  98. package/dist/channel/internal/store/lock.d.ts +0 -17
  99. package/dist/channel/internal/store/lock.d.ts.map +0 -1
  100. package/dist/channel/internal/store/lock.js +0 -88
  101. package/dist/channel/internal/store/lock.js.map +0 -1
  102. package/dist/channel/internal/store/paths.d.ts +0 -43
  103. package/dist/channel/internal/store/paths.d.ts.map +0 -1
  104. package/dist/channel/internal/store/paths.js +0 -233
  105. package/dist/channel/internal/store/paths.js.map +0 -1
  106. package/dist/channel/internal/store/schema.d.ts +0 -77
  107. package/dist/channel/internal/store/schema.d.ts.map +0 -1
  108. package/dist/channel/internal/store/schema.js +0 -127
  109. package/dist/channel/internal/store/schema.js.map +0 -1
  110. package/dist/channel/internal/store/seq.d.ts +0 -12
  111. package/dist/channel/internal/store/seq.d.ts.map +0 -1
  112. package/dist/channel/internal/store/seq.js +0 -133
  113. package/dist/channel/internal/store/seq.js.map +0 -1
  114. package/dist/channel/internal/store/thread-state.d.ts +0 -37
  115. package/dist/channel/internal/store/thread-state.d.ts.map +0 -1
  116. package/dist/channel/internal/store/thread-state.js +0 -206
  117. package/dist/channel/internal/store/thread-state.js.map +0 -1
  118. package/dist/channel/internal/store/watch.d.ts +0 -10
  119. package/dist/channel/internal/store/watch.d.ts.map +0 -1
  120. package/dist/channel/internal/store/watch.js +0 -122
  121. package/dist/channel/internal/store/watch.js.map +0 -1
  122. package/dist/channel/internal/store/worker-state.d.ts +0 -56
  123. package/dist/channel/internal/store/worker-state.d.ts.map +0 -1
  124. package/dist/channel/internal/store/worker-state.js +0 -220
  125. package/dist/channel/internal/store/worker-state.js.map +0 -1
  126. package/dist/index.d.ts +0 -3
  127. package/dist/index.d.ts.map +0 -1
  128. package/dist/index.js +0 -7
  129. package/dist/index.js.map +0 -1
  130. package/dist/task/adapter-middleware.d.ts +0 -118
  131. package/dist/task/adapter-middleware.d.ts.map +0 -1
  132. package/dist/task/adapter-middleware.js +0 -508
  133. package/dist/task/adapter-middleware.js.map +0 -1
  134. package/dist/task/contract-migrate.d.ts +0 -29
  135. package/dist/task/contract-migrate.d.ts.map +0 -1
  136. package/dist/task/contract-migrate.js +0 -207
  137. package/dist/task/contract-migrate.js.map +0 -1
  138. package/dist/task/full-quality.d.ts +0 -89
  139. package/dist/task/full-quality.d.ts.map +0 -1
  140. package/dist/task/full-quality.js +0 -379
  141. package/dist/task/full-quality.js.map +0 -1
  142. package/dist/task/index.d.ts +0 -31
  143. package/dist/task/index.d.ts.map +0 -1
  144. package/dist/task/index.js +0 -20
  145. package/dist/task/index.js.map +0 -1
  146. package/dist/task/kernel-cli.d.ts +0 -44
  147. package/dist/task/kernel-cli.d.ts.map +0 -1
  148. package/dist/task/kernel-cli.js +0 -287
  149. package/dist/task/kernel-cli.js.map +0 -1
  150. package/dist/task/kernel-contract.d.ts +0 -113
  151. package/dist/task/kernel-contract.d.ts.map +0 -1
  152. package/dist/task/kernel-contract.js +0 -332
  153. package/dist/task/kernel-contract.js.map +0 -1
  154. package/dist/task/kernel-store.d.ts +0 -99
  155. package/dist/task/kernel-store.d.ts.map +0 -1
  156. package/dist/task/kernel-store.js +0 -735
  157. package/dist/task/kernel-store.js.map +0 -1
  158. package/dist/task/kernel-surface.d.ts +0 -39
  159. package/dist/task/kernel-surface.d.ts.map +0 -1
  160. package/dist/task/kernel-surface.js +0 -73
  161. package/dist/task/kernel-surface.js.map +0 -1
  162. package/dist/task/lite-context-pack.d.ts +0 -71
  163. package/dist/task/lite-context-pack.d.ts.map +0 -1
  164. package/dist/task/lite-context-pack.js +0 -175
  165. package/dist/task/lite-context-pack.js.map +0 -1
  166. package/dist/task/ondemand-topology.d.ts +0 -108
  167. package/dist/task/ondemand-topology.d.ts.map +0 -1
  168. package/dist/task/ondemand-topology.js +0 -453
  169. package/dist/task/ondemand-topology.js.map +0 -1
  170. package/dist/task/p36-artifact-migrate.d.ts +0 -61
  171. package/dist/task/p36-artifact-migrate.d.ts.map +0 -1
  172. package/dist/task/p36-artifact-migrate.js +0 -336
  173. package/dist/task/p36-artifact-migrate.js.map +0 -1
  174. package/dist/task/p36-wave-c.d.ts +0 -39
  175. package/dist/task/p36-wave-c.d.ts.map +0 -1
  176. package/dist/task/p36-wave-c.js +0 -100
  177. package/dist/task/p36-wave-c.js.map +0 -1
  178. package/dist/task/paths.d.ts +0 -37
  179. package/dist/task/paths.d.ts.map +0 -1
  180. package/dist/task/paths.js +0 -49
  181. package/dist/task/paths.js.map +0 -1
  182. package/dist/task/phase.d.ts +0 -27
  183. package/dist/task/phase.d.ts.map +0 -1
  184. package/dist/task/phase.js +0 -24
  185. package/dist/task/phase.js.map +0 -1
  186. package/dist/task/records.d.ts +0 -48
  187. package/dist/task/records.d.ts.map +0 -1
  188. package/dist/task/records.js +0 -100
  189. package/dist/task/records.js.map +0 -1
  190. package/dist/task/schema.d.ts +0 -77
  191. package/dist/task/schema.d.ts.map +0 -1
  192. package/dist/task/schema.js +0 -220
  193. package/dist/task/schema.js.map +0 -1
  194. package/dist/testing/index.d.ts +0 -2
  195. package/dist/testing/index.d.ts.map +0 -1
  196. package/dist/testing/index.js +0 -4
  197. package/dist/testing/index.js.map +0 -1
@@ -1,48 +0,0 @@
1
- import { emptyTaskRecord, type TrellisTaskRecord } from "./schema.js";
2
- export interface LoadTaskRecordOptions {
3
- /** Absolute or repo-relative directory containing `task.json`. */
4
- taskDir: string;
5
- /** Optional repo root used to resolve relative `taskDir` values. */
6
- cwd?: string;
7
- }
8
- export interface WriteTaskRecordOptions {
9
- /** Absolute or repo-relative directory containing `task.json`. */
10
- taskDir: string;
11
- /** Canonical record to persist. Unknown fields on disk are preserved. */
12
- record: TrellisTaskRecord;
13
- /** Optional repo root used to resolve relative `taskDir` values. */
14
- cwd?: string;
15
- /**
16
- * Non-canonical projection fields owned by a Kernel Command
17
- * (`execution_approval`, `quality_gate_results`, …). Canonical keys are ignored.
18
- */
19
- extra?: Record<string, unknown>;
20
- }
21
- /**
22
- * Read a task.json file and return a canonicalized record.
23
- *
24
- * Unknown fields on disk that are not part of the canonical 24-field
25
- * shape are NOT returned — `loadTaskRecord` is the structured public API.
26
- * To preserve unknown fields across a load/write cycle, callers should
27
- * use {@link writeTaskRecord}, which merges canonical updates on top of
28
- * the on-disk JSON object instead of overwriting it.
29
- */
30
- export declare function loadTaskRecord(options: LoadTaskRecordOptions): TrellisTaskRecord;
31
- /**
32
- * Write a task.json file with canonical field ordering. Unknown fields
33
- * already present on disk are preserved verbatim — only the canonical
34
- * fields are overwritten by `record`. Field order: canonical fields
35
- * first (in `TASK_RECORD_FIELD_ORDER`), then any preserved unknown
36
- * fields in their original insertion order. If an existing `task.json` is
37
- * present but cannot be parsed as a JSON object, the write is rejected instead
38
- * of silently replacing potentially recoverable local data.
39
- *
40
- * The directory containing `task.json` is created if it does not exist.
41
- *
42
- * Stage 2 (P28/P30): Kernel Commands may call this for same-command
43
- * legacy projection. Do not add another packages/core `writeFileSync`
44
- * primitive for `task.json`.
45
- */
46
- export declare function writeTaskRecord(options: WriteTaskRecordOptions): void;
47
- export { emptyTaskRecord };
48
- //# sourceMappingURL=records.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"records.d.ts","sourceRoot":"","sources":["../../src/task/records.ts"],"names":[],"mappings":"AAGA,OAAO,EAEL,eAAe,EAGf,KAAK,iBAAiB,EACvB,MAAM,aAAa,CAAC;AAIrB,MAAM,WAAW,qBAAqB;IACpC,kEAAkE;IAClE,OAAO,EAAE,MAAM,CAAC;IAChB,oEAAoE;IACpE,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,sBAAsB;IACrC,kEAAkE;IAClE,OAAO,EAAE,MAAM,CAAC;IAChB,yEAAyE;IACzE,MAAM,EAAE,iBAAiB,CAAC;IAC1B,oEAAoE;IACpE,GAAG,CAAC,EAAE,MAAM,CAAC;IACb;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACjC;AAED;;;;;;;;GAQG;AACH,wBAAgB,cAAc,CAC5B,OAAO,EAAE,qBAAqB,GAC7B,iBAAiB,CAYnB;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,sBAAsB,GAAG,IAAI,CA4BrE;AAoCD,OAAO,EAAE,eAAe,EAAE,CAAC"}
@@ -1,100 +0,0 @@
1
- import fs from "node:fs";
2
- import path from "node:path";
3
- import { TASK_RECORD_FIELD_ORDER, emptyTaskRecord, isPlainObject, taskRecordSchema, } from "./schema.js";
4
- const TASK_JSON_BASENAME = "task.json";
5
- /**
6
- * Read a task.json file and return a canonicalized record.
7
- *
8
- * Unknown fields on disk that are not part of the canonical 24-field
9
- * shape are NOT returned — `loadTaskRecord` is the structured public API.
10
- * To preserve unknown fields across a load/write cycle, callers should
11
- * use {@link writeTaskRecord}, which merges canonical updates on top of
12
- * the on-disk JSON object instead of overwriting it.
13
- */
14
- export function loadTaskRecord(options) {
15
- const file = resolveTaskJsonPath(options.taskDir, options.cwd);
16
- const raw = fs.readFileSync(file, "utf-8");
17
- let parsed;
18
- try {
19
- parsed = JSON.parse(raw);
20
- }
21
- catch (err) {
22
- throw new Error(`Failed to parse ${file}: ${err instanceof Error ? err.message : err}`);
23
- }
24
- return taskRecordSchema.parse(parsed);
25
- }
26
- /**
27
- * Write a task.json file with canonical field ordering. Unknown fields
28
- * already present on disk are preserved verbatim — only the canonical
29
- * fields are overwritten by `record`. Field order: canonical fields
30
- * first (in `TASK_RECORD_FIELD_ORDER`), then any preserved unknown
31
- * fields in their original insertion order. If an existing `task.json` is
32
- * present but cannot be parsed as a JSON object, the write is rejected instead
33
- * of silently replacing potentially recoverable local data.
34
- *
35
- * The directory containing `task.json` is created if it does not exist.
36
- *
37
- * Stage 2 (P28/P30): Kernel Commands may call this for same-command
38
- * legacy projection. Do not add another packages/core `writeFileSync`
39
- * primitive for `task.json`.
40
- */
41
- export function writeTaskRecord(options) {
42
- const record = taskRecordSchema.parse(options.record);
43
- const file = resolveTaskJsonPath(options.taskDir, options.cwd);
44
- fs.mkdirSync(path.dirname(file), { recursive: true });
45
- const existing = readExistingObject(file);
46
- const out = {};
47
- const recordBag = record;
48
- for (const field of TASK_RECORD_FIELD_ORDER) {
49
- out[field] = recordBag[field];
50
- }
51
- if (options.extra) {
52
- for (const [key, value] of Object.entries(options.extra)) {
53
- if (TASK_RECORD_FIELD_ORDER.includes(key))
54
- continue;
55
- out[key] = value;
56
- }
57
- }
58
- if (existing) {
59
- for (const key of Object.keys(existing)) {
60
- if (!(key in out)) {
61
- out[key] = existing[key];
62
- }
63
- }
64
- }
65
- const json = JSON.stringify(out, null, 2) + "\n";
66
- fs.writeFileSync(file, json, "utf-8");
67
- }
68
- function readExistingObject(file) {
69
- let raw;
70
- try {
71
- raw = fs.readFileSync(file, "utf-8");
72
- }
73
- catch (err) {
74
- if (err.code === "ENOENT")
75
- return null;
76
- throw err;
77
- }
78
- let parsed;
79
- try {
80
- parsed = JSON.parse(raw);
81
- }
82
- catch (err) {
83
- throw new Error(`Refusing to overwrite corrupt ${file}: ${err instanceof Error ? err.message : String(err)}`);
84
- }
85
- if (!isPlainObject(parsed)) {
86
- throw new Error(`Refusing to overwrite non-object task record at ${file}`);
87
- }
88
- return parsed;
89
- }
90
- function resolveTaskJsonPath(taskDir, cwd) {
91
- if (path.isAbsolute(taskDir)) {
92
- return path.join(taskDir, TASK_JSON_BASENAME);
93
- }
94
- const base = cwd ?? process.cwd();
95
- return path.join(path.resolve(base, taskDir), TASK_JSON_BASENAME);
96
- }
97
- // Re-exported so callers can build a starter record without hitting the
98
- // schema module directly.
99
- export { emptyTaskRecord };
100
- //# sourceMappingURL=records.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"records.js","sourceRoot":"","sources":["../../src/task/records.ts"],"names":[],"mappings":"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"}
@@ -1,77 +0,0 @@
1
- /**
2
- * Canonical task.json shape — single source of truth for Trellis tasks.
3
- *
4
- * The runtime Python writer is `.trellis/scripts/common/task_store.py`
5
- * (`cmd_create`). The 24-field shape and field order below mirror that
6
- * writer exactly so every TS and Python entry point produces structurally
7
- * identical task.json files.
8
- *
9
- * Downstream consumers (CLI bootstrap, migration tooling, external Node
10
- * services) should depend on this type instead of redefining their own
11
- * task.json shape.
12
- */
13
- export interface TrellisTaskRecord {
14
- id: string;
15
- name: string;
16
- title: string;
17
- description: string;
18
- status: string;
19
- dev_type: string | null;
20
- scope: string | null;
21
- package: string | null;
22
- priority: string;
23
- creator: string;
24
- assignee: string;
25
- createdAt: string;
26
- completedAt: string | null;
27
- branch: string | null;
28
- base_branch: string | null;
29
- worktree_path: string | null;
30
- commit: string | null;
31
- pr_url: string | null;
32
- subtasks: string[];
33
- children: string[];
34
- parent: string | null;
35
- relatedFiles: string[];
36
- notes: string;
37
- meta: Record<string, unknown>;
38
- }
39
- /**
40
- * Canonical task field order — matches `task_store.py::cmd_create`. Used
41
- * by `writeTaskRecord` so the on-disk JSON layout is deterministic.
42
- */
43
- export declare const TASK_RECORD_FIELD_ORDER: readonly ["id", "name", "title", "description", "status", "dev_type", "scope", "package", "priority", "creator", "assignee", "createdAt", "completedAt", "branch", "base_branch", "worktree_path", "commit", "pr_url", "subtasks", "children", "parent", "relatedFiles", "notes", "meta"];
44
- export type TaskRecordField = (typeof TASK_RECORD_FIELD_ORDER)[number];
45
- /**
46
- * Lightweight runtime schema for {@link TrellisTaskRecord}. Zero-dep on
47
- * purpose — `taskRecordSchema.parse(input)` returns a canonicalized
48
- * record, throwing on shape violations; `taskRecordSchema.safeParse`
49
- * returns a result discriminated by `success`.
50
- *
51
- * All canonical fields are required; older partial records are rejected rather
52
- * than backfilled with defaults. Unknown fields on the input are intentionally
53
- * omitted from this structured output. `writeTaskRecord` preserves unknown
54
- * fields already present on disk by merging canonical updates over the existing
55
- * JSON object.
56
- */
57
- export declare const taskRecordSchema: {
58
- readonly parse: (input: unknown) => TrellisTaskRecord;
59
- readonly safeParse: (input: unknown) => {
60
- success: true;
61
- data: TrellisTaskRecord;
62
- } | {
63
- success: false;
64
- error: Error;
65
- };
66
- };
67
- /**
68
- * Produce a fully-populated canonical-shape {@link TrellisTaskRecord}.
69
- *
70
- * All 24 fields are present in canonical order. `overrides` shallow-merges
71
- * over the defaults — callers supply per-task values (id, name, title,
72
- * assignee, createdAt, etc.) and leave null-default fields untouched
73
- * unless they have a real value.
74
- */
75
- export declare function emptyTaskRecord(overrides?: Partial<TrellisTaskRecord>): TrellisTaskRecord;
76
- export declare function isPlainObject(value: unknown): value is Record<string, unknown>;
77
- //# sourceMappingURL=schema.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/task/schema.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC/B;AAED;;;GAGG;AACH,eAAO,MAAM,uBAAuB,2RAyBqB,CAAC;AAE1D,MAAM,MAAM,eAAe,GAAG,CAAC,OAAO,uBAAuB,CAAC,CAAC,MAAM,CAAC,CAAC;AAkCvE;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,gBAAgB;4BACd,OAAO,KAAG,iBAAiB;gCAI/B,OAAO,KAEZ;QAAE,OAAO,EAAE,IAAI,CAAC;QAAC,IAAI,EAAE,iBAAiB,CAAA;KAAE,GAC1C;QAAE,OAAO,EAAE,KAAK,CAAC;QAAC,KAAK,EAAE,KAAK,CAAA;KAAE;CAU5B,CAAC;AAwDX;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAC7B,SAAS,GAAE,OAAO,CAAC,iBAAiB,CAAM,GACzC,iBAAiB,CA0CnB;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAO9E"}
@@ -1,220 +0,0 @@
1
- /**
2
- * Canonical task field order — matches `task_store.py::cmd_create`. Used
3
- * by `writeTaskRecord` so the on-disk JSON layout is deterministic.
4
- */
5
- export const TASK_RECORD_FIELD_ORDER = [
6
- "id",
7
- "name",
8
- "title",
9
- "description",
10
- "status",
11
- "dev_type",
12
- "scope",
13
- "package",
14
- "priority",
15
- "creator",
16
- "assignee",
17
- "createdAt",
18
- "completedAt",
19
- "branch",
20
- "base_branch",
21
- "worktree_path",
22
- "commit",
23
- "pr_url",
24
- "subtasks",
25
- "children",
26
- "parent",
27
- "relatedFiles",
28
- "notes",
29
- "meta",
30
- ];
31
- const STRING_FIELDS = new Set([
32
- "id",
33
- "name",
34
- "title",
35
- "description",
36
- "status",
37
- "priority",
38
- "creator",
39
- "assignee",
40
- "createdAt",
41
- "notes",
42
- ]);
43
- const NULLABLE_STRING_FIELDS = new Set([
44
- "dev_type",
45
- "scope",
46
- "package",
47
- "completedAt",
48
- "branch",
49
- "base_branch",
50
- "worktree_path",
51
- "commit",
52
- "pr_url",
53
- "parent",
54
- ]);
55
- const STRING_ARRAY_FIELDS = new Set([
56
- "subtasks",
57
- "children",
58
- "relatedFiles",
59
- ]);
60
- /**
61
- * Lightweight runtime schema for {@link TrellisTaskRecord}. Zero-dep on
62
- * purpose — `taskRecordSchema.parse(input)` returns a canonicalized
63
- * record, throwing on shape violations; `taskRecordSchema.safeParse`
64
- * returns a result discriminated by `success`.
65
- *
66
- * All canonical fields are required; older partial records are rejected rather
67
- * than backfilled with defaults. Unknown fields on the input are intentionally
68
- * omitted from this structured output. `writeTaskRecord` preserves unknown
69
- * fields already present on disk by merging canonical updates over the existing
70
- * JSON object.
71
- */
72
- export const taskRecordSchema = {
73
- parse(input) {
74
- return parseTaskRecord(input);
75
- },
76
- safeParse(input) {
77
- try {
78
- return { success: true, data: parseTaskRecord(input) };
79
- }
80
- catch (err) {
81
- return {
82
- success: false,
83
- error: err instanceof Error ? err : new Error(String(err)),
84
- };
85
- }
86
- },
87
- };
88
- function parseTaskRecord(input) {
89
- if (!isPlainObject(input)) {
90
- throw new Error("task record must be a JSON object");
91
- }
92
- const out = emptyTaskRecord();
93
- for (const field of TASK_RECORD_FIELD_ORDER) {
94
- if (!(field in input)) {
95
- throw new Error(`task.${field} is required`);
96
- }
97
- const value = input[field];
98
- assignField(out, field, value);
99
- }
100
- return out;
101
- }
102
- function assignField(record, field, value) {
103
- const bag = record;
104
- if (STRING_FIELDS.has(field)) {
105
- if (typeof value !== "string") {
106
- throw new Error(`task.${field} must be a string`);
107
- }
108
- bag[field] = value;
109
- return;
110
- }
111
- if (NULLABLE_STRING_FIELDS.has(field)) {
112
- if (value !== null && typeof value !== "string") {
113
- throw new Error(`task.${field} must be a string or null`);
114
- }
115
- bag[field] = value;
116
- return;
117
- }
118
- if (STRING_ARRAY_FIELDS.has(field)) {
119
- if (!Array.isArray(value) || value.some((v) => typeof v !== "string")) {
120
- throw new Error(`task.${field} must be an array of strings`);
121
- }
122
- bag[field] = [...value];
123
- return;
124
- }
125
- if (field === "meta") {
126
- if (!isPlainObject(value)) {
127
- throw new Error("task.meta must be a JSON object");
128
- }
129
- record.meta = cloneJsonObject(value, "task.meta");
130
- return;
131
- }
132
- // Should be unreachable given the field sets cover every canonical field.
133
- /* c8 ignore next */
134
- throw new Error(`unknown canonical task field: ${field}`);
135
- }
136
- /**
137
- * Produce a fully-populated canonical-shape {@link TrellisTaskRecord}.
138
- *
139
- * All 24 fields are present in canonical order. `overrides` shallow-merges
140
- * over the defaults — callers supply per-task values (id, name, title,
141
- * assignee, createdAt, etc.) and leave null-default fields untouched
142
- * unless they have a real value.
143
- */
144
- export function emptyTaskRecord(overrides = {}) {
145
- const today = new Date().toISOString().split("T")[0] ?? "";
146
- const base = {
147
- id: "",
148
- name: "",
149
- title: "",
150
- description: "",
151
- status: "planning",
152
- dev_type: null,
153
- scope: null,
154
- package: null,
155
- priority: "P2",
156
- creator: "",
157
- assignee: "",
158
- createdAt: today,
159
- completedAt: null,
160
- branch: null,
161
- base_branch: null,
162
- worktree_path: null,
163
- commit: null,
164
- pr_url: null,
165
- subtasks: [],
166
- children: [],
167
- parent: null,
168
- relatedFiles: [],
169
- notes: "",
170
- meta: {},
171
- };
172
- const record = { ...base, ...overrides };
173
- if (overrides.subtasks !== undefined) {
174
- record.subtasks = [...overrides.subtasks];
175
- }
176
- if (overrides.children !== undefined) {
177
- record.children = [...overrides.children];
178
- }
179
- if (overrides.relatedFiles !== undefined) {
180
- record.relatedFiles = [...overrides.relatedFiles];
181
- }
182
- if (overrides.meta !== undefined) {
183
- record.meta = cloneJsonObject(overrides.meta, "task.meta");
184
- }
185
- return record;
186
- }
187
- export function isPlainObject(value) {
188
- return (typeof value === "object" &&
189
- value !== null &&
190
- !Array.isArray(value) &&
191
- Object.getPrototypeOf(value) === Object.prototype);
192
- }
193
- function cloneJsonObject(value, path) {
194
- const out = {};
195
- for (const [key, child] of Object.entries(value)) {
196
- out[key] = cloneJsonValue(child, `${path}.${key}`);
197
- }
198
- return out;
199
- }
200
- function cloneJsonValue(value, path) {
201
- if (value === null ||
202
- typeof value === "string" ||
203
- typeof value === "boolean") {
204
- return value;
205
- }
206
- if (typeof value === "number") {
207
- if (!Number.isFinite(value)) {
208
- throw new Error(`${path} must be a finite JSON number`);
209
- }
210
- return value;
211
- }
212
- if (Array.isArray(value)) {
213
- return value.map((item, index) => cloneJsonValue(item, `${path}[${index}]`));
214
- }
215
- if (isPlainObject(value)) {
216
- return cloneJsonObject(value, path);
217
- }
218
- throw new Error(`${path} must contain only JSON values`);
219
- }
220
- //# sourceMappingURL=schema.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/task/schema.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/testing/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,CAAC"}
@@ -1,4 +0,0 @@
1
- // Testing helpers placeholder. Exposes nothing in P0; reserved for the
2
- // public testing surface in later phases.
3
- export {};
4
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/testing/index.ts"],"names":[],"mappings":"AAAA,uEAAuE;AACvE,0CAA0C"}