@mindfoldhq/trellis 0.6.0-beta.12 → 0.6.0-beta.14

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 (59) hide show
  1. package/dist/commands/channel/adapters/codex.d.ts +8 -1
  2. package/dist/commands/channel/adapters/codex.d.ts.map +1 -1
  3. package/dist/commands/channel/adapters/codex.js +45 -12
  4. package/dist/commands/channel/adapters/codex.js.map +1 -1
  5. package/dist/commands/channel/context.d.ts +16 -0
  6. package/dist/commands/channel/context.d.ts.map +1 -0
  7. package/dist/commands/channel/context.js +83 -0
  8. package/dist/commands/channel/context.js.map +1 -0
  9. package/dist/commands/channel/create.d.ts +10 -8
  10. package/dist/commands/channel/create.d.ts.map +1 -1
  11. package/dist/commands/channel/create.js +22 -97
  12. package/dist/commands/channel/create.js.map +1 -1
  13. package/dist/commands/channel/index.d.ts.map +1 -1
  14. package/dist/commands/channel/index.js +117 -12
  15. package/dist/commands/channel/index.js.map +1 -1
  16. package/dist/commands/channel/list.js +14 -16
  17. package/dist/commands/channel/list.js.map +1 -1
  18. package/dist/commands/channel/messages.js +8 -10
  19. package/dist/commands/channel/messages.js.map +1 -1
  20. package/dist/commands/channel/send.d.ts.map +1 -1
  21. package/dist/commands/channel/send.js +15 -28
  22. package/dist/commands/channel/send.js.map +1 -1
  23. package/dist/commands/channel/store/events.d.ts +28 -64
  24. package/dist/commands/channel/store/events.d.ts.map +1 -1
  25. package/dist/commands/channel/store/events.js +27 -48
  26. package/dist/commands/channel/store/events.js.map +1 -1
  27. package/dist/commands/channel/store/filter.d.ts +2 -32
  28. package/dist/commands/channel/store/filter.d.ts.map +1 -1
  29. package/dist/commands/channel/store/filter.js +1 -62
  30. package/dist/commands/channel/store/filter.js.map +1 -1
  31. package/dist/commands/channel/store/schema.d.ts +25 -34
  32. package/dist/commands/channel/store/schema.d.ts.map +1 -1
  33. package/dist/commands/channel/store/schema.js +25 -82
  34. package/dist/commands/channel/store/schema.js.map +1 -1
  35. package/dist/commands/channel/store/thread-state.d.ts +3 -17
  36. package/dist/commands/channel/store/thread-state.d.ts.map +1 -1
  37. package/dist/commands/channel/store/thread-state.js +1 -66
  38. package/dist/commands/channel/store/thread-state.js.map +1 -1
  39. package/dist/commands/channel/text-body.d.ts +13 -0
  40. package/dist/commands/channel/text-body.d.ts.map +1 -0
  41. package/dist/commands/channel/text-body.js +47 -0
  42. package/dist/commands/channel/text-body.js.map +1 -0
  43. package/dist/commands/channel/threads.d.ts +11 -0
  44. package/dist/commands/channel/threads.d.ts.map +1 -1
  45. package/dist/commands/channel/threads.js +56 -46
  46. package/dist/commands/channel/threads.js.map +1 -1
  47. package/dist/commands/channel/title.d.ts +12 -0
  48. package/dist/commands/channel/title.d.ts.map +1 -0
  49. package/dist/commands/channel/title.js +24 -0
  50. package/dist/commands/channel/title.js.map +1 -0
  51. package/dist/migrations/manifests/0.6.0-beta.13.json +9 -0
  52. package/dist/migrations/manifests/0.6.0-beta.14.json +9 -0
  53. package/dist/templates/markdown/spec/guides/code-reuse-thinking-guide.md.txt +1 -2
  54. package/dist/templates/markdown/spec/guides/cross-layer-thinking-guide.md.txt +5 -5
  55. package/dist/utils/task-json.d.ts +9 -42
  56. package/dist/utils/task-json.d.ts.map +1 -1
  57. package/dist/utils/task-json.js +8 -45
  58. package/dist/utils/task-json.js.map +1 -1
  59. package/package.json +9 -8
@@ -1,31 +1,4 @@
1
- import { isThreadEvent, } from "./events.js";
2
- import { asLinkedContextEntries, asStringArray, } from "./schema.js";
3
- export function reduceThreads(events) {
4
- const states = new Map();
5
- for (const ev of events) {
6
- if (!isThreadEvent(ev))
7
- continue;
8
- const key = ev.thread;
9
- const current = states.get(key) ??
10
- {
11
- thread: key,
12
- status: "open",
13
- labels: [],
14
- assignees: [],
15
- lastSeq: ev.seq,
16
- comments: 0,
17
- };
18
- if (typeof ev.ts === "string")
19
- current.updatedAt = ev.ts;
20
- if (!current.openedAt && typeof ev.ts === "string") {
21
- current.openedAt = ev.ts;
22
- }
23
- current.lastSeq = ev.seq;
24
- applyThreadAction(current, ev);
25
- states.set(key, current);
26
- }
27
- return [...states.values()].sort((a, b) => (b.updatedAt ?? "").localeCompare(a.updatedAt ?? ""));
28
- }
1
+ export { reduceThreads, buildThreadAliasResolver, collectThreadTimeline, } from "@mindfoldhq/trellis-core/channel";
29
2
  export function formatThreadBoard(states) {
30
3
  if (states.length === 0)
31
4
  return ["(no threads)"];
@@ -40,42 +13,4 @@ export function formatThreadBoard(states) {
40
13
  }),
41
14
  ];
42
15
  }
43
- function applyThreadAction(current, ev) {
44
- switch (ev.action) {
45
- case "opened":
46
- current.status = typeof ev.status === "string" ? ev.status : "open";
47
- if (typeof ev.title === "string")
48
- current.title = ev.title;
49
- if (typeof ev.description === "string") {
50
- current.description = ev.description;
51
- }
52
- current.linkedContext =
53
- asLinkedContextEntries(ev.linkedContext) ?? current.linkedContext;
54
- current.labels = asStringArray(ev.labels) ?? current.labels;
55
- current.assignees = asStringArray(ev.assignees) ?? current.assignees;
56
- return;
57
- case "comment":
58
- current.comments += 1;
59
- return;
60
- case "status":
61
- if (typeof ev.status === "string")
62
- current.status = ev.status;
63
- return;
64
- case "labels":
65
- current.labels = asStringArray(ev.labels) ?? current.labels;
66
- return;
67
- case "assignees":
68
- current.assignees = asStringArray(ev.assignees) ?? current.assignees;
69
- return;
70
- case "summary":
71
- if (typeof ev.summary === "string")
72
- current.summary = ev.summary;
73
- return;
74
- case "processed":
75
- current.status = typeof ev.status === "string" ? ev.status : "processed";
76
- return;
77
- default:
78
- return;
79
- }
80
- }
81
16
  //# sourceMappingURL=thread-state.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"thread-state.js","sourceRoot":"","sources":["../../../../src/commands/channel/store/thread-state.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"thread-state.js","sourceRoot":"","sources":["../../../../src/commands/channel/store/thread-state.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,aAAa,EACb,wBAAwB,EACxB,qBAAqB,GACtB,MAAM,kCAAkC,CAAC;AAS1C,MAAM,UAAU,iBAAiB,CAAC,MAAqB;IACrD,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,CAAC,cAAc,CAAC,CAAC;IACjD,OAAO;QACL,uBAAuB;QACvB,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;YACtB,MAAM,MAAM,GACV,KAAK,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACrE,MAAM,SAAS,GACb,KAAK,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC;gBACxB,CAAC,CAAC,cAAc,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;gBAC3C,CAAC,CAAC,EAAE,CAAC;YACT,OAAO,GAAG,KAAK,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM,KAAK,KAAK,CAAC,KAAK,IAAI,EAAE,GAAG,MAAM,GAAG,SAAS,EAAE,CAAC;QACvF,CAAC,CAAC;KACH,CAAC;AACJ,CAAC"}
@@ -0,0 +1,13 @@
1
+ export interface ChannelTextBodyOptions {
2
+ text?: string;
3
+ stdin?: boolean;
4
+ textFile?: string;
5
+ }
6
+ interface ResolveChannelTextBodyOptions {
7
+ required: boolean;
8
+ missingMessage: string;
9
+ emptyMessage: string;
10
+ }
11
+ export declare function resolveChannelTextBody(opts: ChannelTextBodyOptions, resolveOpts: ResolveChannelTextBodyOptions): Promise<string | undefined>;
12
+ export {};
13
+ //# sourceMappingURL=text-body.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"text-body.d.ts","sourceRoot":"","sources":["../../../src/commands/channel/text-body.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,sBAAsB;IACrC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,UAAU,6BAA6B;IACrC,QAAQ,EAAE,OAAO,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,wBAAsB,sBAAsB,CAC1C,IAAI,EAAE,sBAAsB,EAC5B,WAAW,EAAE,6BAA6B,GACzC,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAU7B"}
@@ -0,0 +1,47 @@
1
+ import fs from "node:fs";
2
+ export async function resolveChannelTextBody(opts, resolveOpts) {
3
+ const raw = await readChannelTextBody(opts);
4
+ if (raw === undefined) {
5
+ if (resolveOpts.required)
6
+ throw new Error(resolveOpts.missingMessage);
7
+ return undefined;
8
+ }
9
+ const text = raw.trimEnd();
10
+ if (!text)
11
+ throw new Error(resolveOpts.emptyMessage);
12
+ return text;
13
+ }
14
+ async function readChannelTextBody(opts) {
15
+ if (opts.text !== undefined && opts.text !== "")
16
+ return opts.text;
17
+ if (opts.textFile)
18
+ return fs.readFileSync(opts.textFile, "utf-8");
19
+ if (opts.stdin)
20
+ return await readStdin();
21
+ return undefined;
22
+ }
23
+ async function readStdin() {
24
+ return await new Promise((resolve, reject) => {
25
+ let buf = "";
26
+ const onData = (chunk) => {
27
+ buf += chunk.toString("utf-8");
28
+ };
29
+ const cleanup = () => {
30
+ process.stdin.off("data", onData);
31
+ process.stdin.off("end", onEnd);
32
+ process.stdin.off("error", onError);
33
+ };
34
+ const onEnd = () => {
35
+ cleanup();
36
+ resolve(buf);
37
+ };
38
+ const onError = (err) => {
39
+ cleanup();
40
+ reject(err);
41
+ };
42
+ process.stdin.on("data", onData);
43
+ process.stdin.once("end", onEnd);
44
+ process.stdin.once("error", onError);
45
+ });
46
+ }
47
+ //# sourceMappingURL=text-body.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"text-body.js","sourceRoot":"","sources":["../../../src/commands/channel/text-body.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AAczB,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC1C,IAA4B,EAC5B,WAA0C;IAE1C,MAAM,GAAG,GAAG,MAAM,mBAAmB,CAAC,IAAI,CAAC,CAAC;IAC5C,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;QACtB,IAAI,WAAW,CAAC,QAAQ;YAAE,MAAM,IAAI,KAAK,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC;QACtE,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,IAAI,GAAG,GAAG,CAAC,OAAO,EAAE,CAAC;IAC3B,IAAI,CAAC,IAAI;QAAE,MAAM,IAAI,KAAK,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;IACrD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,KAAK,UAAU,mBAAmB,CAChC,IAA4B;IAE5B,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,IAAI,KAAK,EAAE;QAAE,OAAO,IAAI,CAAC,IAAI,CAAC;IAClE,IAAI,IAAI,CAAC,QAAQ;QAAE,OAAO,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAClE,IAAI,IAAI,CAAC,KAAK;QAAE,OAAO,MAAM,SAAS,EAAE,CAAC;IACzC,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,KAAK,UAAU,SAAS;IACtB,OAAO,MAAM,IAAI,OAAO,CAAS,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACnD,IAAI,GAAG,GAAG,EAAE,CAAC;QACb,MAAM,MAAM,GAAG,CAAC,KAAa,EAAQ,EAAE;YACrC,GAAG,IAAI,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QACjC,CAAC,CAAC;QACF,MAAM,OAAO,GAAG,GAAS,EAAE;YACzB,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;YAClC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;YAChC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACtC,CAAC,CAAC;QACF,MAAM,KAAK,GAAG,GAAS,EAAE;YACvB,OAAO,EAAE,CAAC;YACV,OAAO,CAAC,GAAG,CAAC,CAAC;QACf,CAAC,CAAC;QACF,MAAM,OAAO,GAAG,CAAC,GAAU,EAAQ,EAAE;YACnC,OAAO,EAAE,CAAC;YACV,MAAM,CAAC,GAAG,CAAC,CAAC;QACd,CAAC,CAAC;QAEF,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACjC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QACjC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -4,12 +4,18 @@ export interface ThreadPostOptions {
4
4
  thread?: string;
5
5
  title?: string;
6
6
  text?: string;
7
+ stdin?: boolean;
8
+ textFile?: string;
7
9
  description?: string;
8
10
  status?: string;
9
11
  labels?: string;
10
12
  assignees?: string;
11
13
  summary?: string;
12
14
  scope?: string;
15
+ /** New canonical flag list. */
16
+ contextFile?: string[];
17
+ contextRaw?: string[];
18
+ /** Legacy aliases accepted while users migrate scripts. */
13
19
  linkedContextFile?: string[];
14
20
  linkedContextRaw?: string[];
15
21
  }
@@ -22,7 +28,12 @@ export interface ThreadShowOptions {
22
28
  scope?: string;
23
29
  raw?: boolean;
24
30
  }
31
+ export interface ThreadRenameOptions {
32
+ as: string;
33
+ scope?: string;
34
+ }
25
35
  export declare function channelThreadPost(channelName: string, opts: ThreadPostOptions): Promise<void>;
26
36
  export declare function channelThreadsList(channelName: string, opts: ThreadsOptions): Promise<void>;
27
37
  export declare function channelThreadShow(channelName: string, threadKey: string, opts: ThreadShowOptions): Promise<void>;
38
+ export declare function channelThreadRename(channelName: string, oldThread: string, newThread: string, opts: ThreadRenameOptions): Promise<void>;
28
39
  //# sourceMappingURL=threads.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"threads.d.ts","sourceRoot":"","sources":["../../../src/commands/channel/threads.ts"],"names":[],"mappings":"AAkBA,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC7B,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;CAC7B;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,EAAE,OAAO,CAAC;CACf;AAED,MAAM,WAAW,iBAAiB;IAChC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,OAAO,CAAC;CACf;AAED,wBAAsB,iBAAiB,CACrC,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,iBAAiB,GACtB,OAAO,CAAC,IAAI,CAAC,CAuCf;AAED,wBAAsB,kBAAkB,CACtC,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,cAAc,GACnB,OAAO,CAAC,IAAI,CAAC,CAkBf;AAED,wBAAsB,iBAAiB,CACrC,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,iBAAiB,GACtB,OAAO,CAAC,IAAI,CAAC,CAgCf"}
1
+ {"version":3,"file":"threads.d.ts","sourceRoot":"","sources":["../../../src/commands/channel/threads.ts"],"names":[],"mappings":"AAqBA,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,+BAA+B;IAC/B,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,2DAA2D;IAC3D,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC7B,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;CAC7B;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,EAAE,OAAO,CAAC;CACf;AAED,MAAM,WAAW,iBAAiB;IAChC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,OAAO,CAAC;CACf;AAED,MAAM,WAAW,mBAAmB;IAClC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,wBAAsB,iBAAiB,CACrC,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,iBAAiB,GACtB,OAAO,CAAC,IAAI,CAAC,CAwCf;AAED,wBAAsB,kBAAkB,CACtC,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,cAAc,GACnB,OAAO,CAAC,IAAI,CAAC,CAaf;AAED,wBAAsB,iBAAiB,CACrC,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,iBAAiB,GACtB,OAAO,CAAC,IAAI,CAAC,CA2Bf;AAED,wBAAsB,mBAAmB,CACvC,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,mBAAmB,GACxB,OAAO,CAAC,IAAI,CAAC,CAWf"}
@@ -1,45 +1,47 @@
1
- import { appendEvent, isThreadEvent, readChannelEvents, readChannelMetadata, } from "./store/events.js";
2
- import { resolveExistingChannelRef } from "./store/paths.js";
3
- import { normalizeThreadKey, parseCsv, parseChannelScope, parseLinkedContext, parseThreadAction, } from "./store/schema.js";
4
- import { formatThreadBoard, reduceThreads } from "./store/thread-state.js";
1
+ import { buildContextEntries, listThreads as coreListThreads, showThread as coreShowThread, postThread as corePostThread, reduceThreads, renameThread as coreRenameThread, } from "@mindfoldhq/trellis-core/channel";
2
+ import { parseChannelScope, parseThreadAction, } from "./store/schema.js";
3
+ import { parseCsv } from "./store/schema.js";
4
+ import { formatThreadBoard } from "./store/thread-state.js";
5
+ import { resolveChannelTextBody } from "./text-body.js";
5
6
  export async function channelThreadPost(channelName, opts) {
6
- const ref = resolveExistingChannelRef(channelName, {
7
- scope: parseChannelScope(opts.scope),
8
- });
9
- const metadata = await readChannelMetadata(channelName, ref.project);
10
- if (metadata.type !== "thread") {
11
- throw new Error(`Channel '${channelName}' is type '${metadata.type}'. 'post' requires a thread channel.`);
7
+ const parsed = parseThreadAction(opts.action);
8
+ if (parsed === "rename") {
9
+ throw new Error("Use `trellis channel thread rename <channel> <old> <new>` instead of `post rename`.");
12
10
  }
13
- const action = parseThreadAction(opts.action);
14
- const thread = resolveThreadKey(action, opts.thread);
15
- const linkedContext = parseLinkedContext(opts.linkedContextFile, opts.linkedContextRaw);
11
+ const action = parsed;
12
+ const context = buildContextEntries([...(opts.contextFile ?? []), ...(opts.linkedContextFile ?? [])], [...(opts.contextRaw ?? []), ...(opts.linkedContextRaw ?? [])]);
16
13
  const labels = parseCsv(opts.labels);
17
14
  const assignees = parseCsv(opts.assignees);
18
- const event = await appendEvent(channelName, {
19
- kind: "thread",
15
+ const text = await resolveChannelTextBody(opts, {
16
+ required: false,
17
+ missingMessage: "No text provided (use --text, --stdin, or --text-file)",
18
+ emptyMessage: "Empty thread event text",
19
+ });
20
+ const scope = parseChannelScope(opts.scope);
21
+ const event = await corePostThread({
22
+ channel: channelName,
20
23
  by: opts.as,
21
24
  action,
22
- thread,
25
+ thread: opts.thread ?? "",
26
+ ...(scope !== undefined ? { scope } : {}),
23
27
  ...(opts.title ? { title: opts.title } : {}),
24
- ...(opts.text ? { text: opts.text } : {}),
28
+ ...(text !== undefined ? { text } : {}),
25
29
  ...(opts.description ? { description: opts.description } : {}),
26
30
  ...(opts.status ? { status: opts.status } : {}),
27
31
  ...(labels ? { labels } : {}),
28
32
  ...(assignees ? { assignees } : {}),
29
33
  ...(opts.summary ? { summary: opts.summary } : {}),
30
- ...(linkedContext ? { linkedContext } : {}),
31
- }, ref.project);
34
+ ...(context ? { context } : {}),
35
+ origin: "cli",
36
+ });
32
37
  console.log(JSON.stringify(event));
33
38
  }
34
39
  export async function channelThreadsList(channelName, opts) {
35
- const ref = resolveExistingChannelRef(channelName, {
36
- scope: parseChannelScope(opts.scope),
37
- });
38
- const metadata = await readChannelMetadata(channelName, ref.project);
39
- if (metadata.type !== "thread") {
40
- throw new Error(`Channel '${channelName}' is type '${metadata.type}'. 'threads' requires a thread channel.`);
41
- }
42
- const states = reduceThreads(await readChannelEvents(channelName, ref.project)).filter((state) => (opts.status ? state.status === opts.status : true));
40
+ const scope = parseChannelScope(opts.scope);
41
+ const states = (await coreListThreads({
42
+ channel: channelName,
43
+ ...(scope !== undefined ? { scope } : {}),
44
+ })).filter((state) => (opts.status ? state.status === opts.status : true));
43
45
  if (opts.raw) {
44
46
  for (const state of states)
45
47
  console.log(JSON.stringify(state));
@@ -49,22 +51,19 @@ export async function channelThreadsList(channelName, opts) {
49
51
  console.log(line);
50
52
  }
51
53
  export async function channelThreadShow(channelName, threadKey, opts) {
52
- const ref = resolveExistingChannelRef(channelName, {
53
- scope: parseChannelScope(opts.scope),
54
+ const scope = parseChannelScope(opts.scope);
55
+ const events = await coreShowThread({
56
+ channel: channelName,
57
+ thread: threadKey,
58
+ ...(scope !== undefined ? { scope } : {}),
54
59
  });
55
- const metadata = await readChannelMetadata(channelName, ref.project);
56
- if (metadata.type !== "thread") {
57
- throw new Error(`Channel '${channelName}' is type '${metadata.type}'. 'thread' requires a thread channel.`);
58
- }
59
- const thread = normalizeThreadKey(threadKey);
60
- const events = (await readChannelEvents(channelName, ref.project)).filter((ev) => isThreadEvent(ev) && ev.thread === thread);
61
60
  if (opts.raw) {
62
61
  for (const ev of events)
63
62
  console.log(JSON.stringify(ev));
64
63
  return;
65
64
  }
66
65
  if (events.length === 0) {
67
- throw new Error(`Thread '${thread}' not found in channel '${channelName}'`);
66
+ throw new Error(`Thread '${threadKey}' not found in channel '${channelName}'`);
68
67
  }
69
68
  const state = reduceThreads(events)[0];
70
69
  console.log(`${state.thread} [${state.status}] ${state.title ?? ""}`.trimEnd());
@@ -78,19 +77,30 @@ export async function channelThreadShow(channelName, threadKey, opts) {
78
77
  if (state.summary)
79
78
  console.log(`summary: ${state.summary}`);
80
79
  for (const ev of events)
81
- printThreadEvent(ev);
80
+ printTimelineEvent(ev);
82
81
  }
83
- function resolveThreadKey(action, value) {
84
- if (value)
85
- return normalizeThreadKey(value);
86
- if (action === "opened")
87
- return `thread-${Date.now().toString(36)}`;
88
- throw new Error("--thread is required unless action is 'opened'");
82
+ export async function channelThreadRename(channelName, oldThread, newThread, opts) {
83
+ const scope = parseChannelScope(opts.scope);
84
+ const event = await coreRenameThread({
85
+ channel: channelName,
86
+ by: opts.as,
87
+ thread: oldThread,
88
+ newThread,
89
+ ...(scope !== undefined ? { scope } : {}),
90
+ origin: "cli",
91
+ });
92
+ console.log(JSON.stringify(event));
89
93
  }
90
- function printThreadEvent(ev) {
94
+ function printTimelineEvent(ev) {
91
95
  const ts = ev.ts.slice(0, 19).replace("T", " ");
96
+ if (ev.kind === "thread") {
97
+ const action = ev.action ?? "?";
98
+ const text = ev.text ? ` ${ev.text}` : "";
99
+ console.log(` ${ts} ${action} by=${ev.by}${text}`);
100
+ return;
101
+ }
102
+ // context event
92
103
  const action = ev.action ?? "?";
93
- const text = ev.text ? ` ${ev.text}` : "";
94
- console.log(` ${ts} ${action} by=${ev.by}${text}`);
104
+ console.log(` ${ts} context-${action} by=${ev.by}`);
95
105
  }
96
106
  //# sourceMappingURL=threads.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"threads.js","sourceRoot":"","sources":["../../../src/commands/channel/threads.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"threads.js","sourceRoot":"","sources":["../../../src/commands/channel/threads.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ export interface TitleSetCliOptions {
2
+ as?: string;
3
+ title: string;
4
+ scope?: string;
5
+ }
6
+ export interface TitleClearCliOptions {
7
+ as?: string;
8
+ scope?: string;
9
+ }
10
+ export declare function channelTitleSet(channelName: string, opts: TitleSetCliOptions): Promise<void>;
11
+ export declare function channelTitleClear(channelName: string, opts: TitleClearCliOptions): Promise<void>;
12
+ //# sourceMappingURL=title.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"title.d.ts","sourceRoot":"","sources":["../../../src/commands/channel/title.ts"],"names":[],"mappings":"AAQA,MAAM,WAAW,kBAAkB;IACjC,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,oBAAoB;IACnC,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,wBAAsB,eAAe,CACnC,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,kBAAkB,GACvB,OAAO,CAAC,IAAI,CAAC,CAUf;AAED,wBAAsB,iBAAiB,CACrC,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,oBAAoB,GACzB,OAAO,CAAC,IAAI,CAAC,CASf"}
@@ -0,0 +1,24 @@
1
+ import { clearChannelTitle, setChannelTitle, } from "@mindfoldhq/trellis-core/channel";
2
+ import { parseChannelScope } from "./store/schema.js";
3
+ export async function channelTitleSet(channelName, opts) {
4
+ const scope = parseChannelScope(opts.scope);
5
+ const event = await setChannelTitle({
6
+ channel: channelName,
7
+ by: opts.as ?? "main",
8
+ title: opts.title,
9
+ ...(scope !== undefined ? { scope } : {}),
10
+ origin: "cli",
11
+ });
12
+ console.log(JSON.stringify(event));
13
+ }
14
+ export async function channelTitleClear(channelName, opts) {
15
+ const scope = parseChannelScope(opts.scope);
16
+ const event = await clearChannelTitle({
17
+ channel: channelName,
18
+ by: opts.as ?? "main",
19
+ ...(scope !== undefined ? { scope } : {}),
20
+ origin: "cli",
21
+ });
22
+ console.log(JSON.stringify(event));
23
+ }
24
+ //# sourceMappingURL=title.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"title.js","sourceRoot":"","sources":["../../../src/commands/channel/title.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iBAAiB,EACjB,eAAe,GAEhB,MAAM,kCAAkC,CAAC;AAE1C,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAatD,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,WAAmB,EACnB,IAAwB;IAExB,MAAM,KAAK,GAA6B,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACtE,MAAM,KAAK,GAAG,MAAM,eAAe,CAAC;QAClC,OAAO,EAAE,WAAW;QACpB,EAAE,EAAE,IAAI,CAAC,EAAE,IAAI,MAAM;QACrB,KAAK,EAAE,IAAI,CAAC,KAAK;QACjB,GAAG,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACzC,MAAM,EAAE,KAAK;KACd,CAAC,CAAC;IACH,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;AACrC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,WAAmB,EACnB,IAA0B;IAE1B,MAAM,KAAK,GAA6B,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACtE,MAAM,KAAK,GAAG,MAAM,iBAAiB,CAAC;QACpC,OAAO,EAAE,WAAW;QACpB,EAAE,EAAE,IAAI,CAAC,EAAE,IAAI,MAAM;QACrB,GAAG,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACzC,MAAM,EAAE,KAAK;KACd,CAAC,CAAC;IACH,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;AACrC,CAAC"}
@@ -0,0 +1,9 @@
1
+ {
2
+ "version": "0.6.0-beta.13",
3
+ "description": "Beta patch: add the trellis-core SDK package, finalize thread channel naming/context commands, and publish core with the CLI.",
4
+ "breaking": true,
5
+ "recommendMigrate": false,
6
+ "changelog": "**Enhancements:**\n- feat(core): add `@mindfoldhq/trellis-core` with public `channel`, `task`, and `testing` exports for Node consumers.\n- feat(channel): use `trellis channel create --type threads` for thread channels and add `trellis channel context`, `trellis channel title`, and `trellis channel thread rename`.\n- feat(channel): add `--context-file` and `--context-raw` as canonical context flags while accepting `--linked-context-*` aliases.\n\n**Internal:**\n- chore(release): publish `@mindfoldhq/trellis-core` before `@mindfoldhq/trellis` with one version, one dist-tag, provenance, and packed CLI dependency checks.",
7
+ "migrations": [],
8
+ "notes": "Beta users should replace `trellis channel create --type thread` with `trellis channel create --type threads`. Run `trellis update` to pull in the core SDK-backed channel commands. No file migration is required."
9
+ }
@@ -0,0 +1,9 @@
1
+ {
2
+ "version": "0.6.0-beta.14",
3
+ "description": "Beta patch: classify Codex channel streamed deltas and verify published packages on public npm after CI publish.",
4
+ "breaking": false,
5
+ "recommendMigrate": false,
6
+ "changelog": "**Bug Fixes:**\n- fix(channel): add `detail.kind`, `detail.stream_id`, and `detail.phase` to Codex `item/agentMessage/delta` progress events so consumers can split interleaved output and commentary streams.\n\n**Internal:**\n- chore(release): verify `@mindfoldhq/trellis` and `@mindfoldhq/trellis-core` are visible on the public npm registry after CI publish.",
7
+ "migrations": [],
8
+ "notes": "Run `npm install -g @mindfoldhq/trellis@beta` and `trellis update` to use the Codex channel stream metadata fix. No file migration is required."
9
+ }
@@ -64,8 +64,7 @@ grep -r "keyword" .
64
64
 
65
65
  ```typescript
66
66
  const description = (ev as { description?: string }).description;
67
- const linkedContext = (ev as { linkedContext?: LinkedContextEntry[] })
68
- .linkedContext;
67
+ const context = (ev as { context?: ContextEntry[] }).context;
69
68
  ```
70
69
 
71
70
  This is duplicated contract logic even when the code is only two lines. Each
@@ -252,8 +252,8 @@ CLI input → event writer → events.jsonl → reader → filter → reducer
252
252
  use the same filter model
253
253
 
254
254
  **Real-world example**: Thread channels added `kind: "thread"`, `description`,
255
- `linkedContext`, labels, and `lastSeq`. The first implementation replayed state
256
- correctly, but several commands still re-parsed event payload fields with local
257
- casts. The fix was to make `store/events.ts` own `ThreadChannelEvent`,
258
- `isThreadEvent`, and `metadataFromCreateEvent`, while `store/thread-state.ts`
259
- became the only replay reducer.
255
+ `context`, labels, and `lastSeq`. The first implementation replayed thread
256
+ state correctly, but several commands still re-parsed event payload fields with
257
+ local casts. The fix was to make the core event layer own `ThreadChannelEvent`
258
+ and `isThreadEvent`, make `reduceChannelMetadata` the only channel metadata
259
+ projection, and make `reduceThreads` the only thread replay reducer.
@@ -1,46 +1,13 @@
1
1
  /**
2
- * Canonical task.json shape — single source of truth shared by all TS writers.
2
+ * Canonical task.json shape — single source of truth shared by all TS
3
+ * writers. The canonical types and factory now live in the
4
+ * `@mindfoldhq/trellis-core` task API; this module re-exports them under
5
+ * the legacy `TaskJson` / `emptyTaskJson` names for CLI call sites.
3
6
  *
4
- * The runtime Python writer is `.trellis/scripts/common/task_store.py` in
5
- * `cmd_create` (lines ~147-172). This TS factory mirrors that 24-field shape
6
- * so bootstrap tasks (trellis init) and migration tasks (trellis update
7
- * --migrate) produce structurally identical task.json files.
8
- *
9
- * Field names, order, and null defaults match task_store.py exactly.
10
- */
11
- export interface TaskJson {
12
- id: string;
13
- name: string;
14
- title: string;
15
- description: string;
16
- status: string;
17
- dev_type: string | null;
18
- scope: string | null;
19
- package: string | null;
20
- priority: string;
21
- creator: string;
22
- assignee: string;
23
- createdAt: string;
24
- completedAt: string | null;
25
- branch: string | null;
26
- base_branch: string | null;
27
- worktree_path: string | null;
28
- commit: string | null;
29
- pr_url: string | null;
30
- subtasks: string[];
31
- children: string[];
32
- parent: string | null;
33
- relatedFiles: string[];
34
- notes: string;
35
- meta: Record<string, unknown>;
36
- }
37
- /**
38
- * Produce a fully-populated canonical-shape TaskJson.
39
- *
40
- * All 24 fields are emitted in canonical order. `overrides` shallow-merges on
41
- * top — callers should supply the per-task values (id, name, title, assignee,
42
- * createdAt, etc.) and leave null-default fields untouched unless they have a
43
- * real value.
7
+ * New code should prefer `TrellisTaskRecord` / `emptyTaskRecord` from
8
+ * `@mindfoldhq/trellis-core/task` directly.
44
9
  */
45
- export declare function emptyTaskJson(overrides?: Partial<TaskJson>): TaskJson;
10
+ import { emptyTaskRecord, type TrellisTaskRecord } from "@mindfoldhq/trellis-core/task";
11
+ export type TaskJson = TrellisTaskRecord;
12
+ export declare const emptyTaskJson: typeof emptyTaskRecord;
46
13
  //# sourceMappingURL=task-json.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"task-json.d.ts","sourceRoot":"","sources":["../../src/utils/task-json.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,MAAM,WAAW,QAAQ;IACvB,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;;;;;;;GAOG;AACH,wBAAgB,aAAa,CAAC,SAAS,GAAE,OAAO,CAAC,QAAQ,CAAM,GAAG,QAAQ,CA6BzE"}
1
+ {"version":3,"file":"task-json.d.ts","sourceRoot":"","sources":["../../src/utils/task-json.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EACL,eAAe,EACf,KAAK,iBAAiB,EACvB,MAAM,+BAA+B,CAAC;AAEvC,MAAM,MAAM,QAAQ,GAAG,iBAAiB,CAAC;AAEzC,eAAO,MAAM,aAAa,wBAAkB,CAAC"}
@@ -1,49 +1,12 @@
1
1
  /**
2
- * Canonical task.json shape — single source of truth shared by all TS writers.
2
+ * Canonical task.json shape — single source of truth shared by all TS
3
+ * writers. The canonical types and factory now live in the
4
+ * `@mindfoldhq/trellis-core` task API; this module re-exports them under
5
+ * the legacy `TaskJson` / `emptyTaskJson` names for CLI call sites.
3
6
  *
4
- * The runtime Python writer is `.trellis/scripts/common/task_store.py` in
5
- * `cmd_create` (lines ~147-172). This TS factory mirrors that 24-field shape
6
- * so bootstrap tasks (trellis init) and migration tasks (trellis update
7
- * --migrate) produce structurally identical task.json files.
8
- *
9
- * Field names, order, and null defaults match task_store.py exactly.
10
- */
11
- /**
12
- * Produce a fully-populated canonical-shape TaskJson.
13
- *
14
- * All 24 fields are emitted in canonical order. `overrides` shallow-merges on
15
- * top — callers should supply the per-task values (id, name, title, assignee,
16
- * createdAt, etc.) and leave null-default fields untouched unless they have a
17
- * real value.
7
+ * New code should prefer `TrellisTaskRecord` / `emptyTaskRecord` from
8
+ * `@mindfoldhq/trellis-core/task` directly.
18
9
  */
19
- export function emptyTaskJson(overrides = {}) {
20
- const today = new Date().toISOString().split("T")[0];
21
- const base = {
22
- id: "",
23
- name: "",
24
- title: "",
25
- description: "",
26
- status: "planning",
27
- dev_type: null,
28
- scope: null,
29
- package: null,
30
- priority: "P2",
31
- creator: "",
32
- assignee: "",
33
- createdAt: today,
34
- completedAt: null,
35
- branch: null,
36
- base_branch: null,
37
- worktree_path: null,
38
- commit: null,
39
- pr_url: null,
40
- subtasks: [],
41
- children: [],
42
- parent: null,
43
- relatedFiles: [],
44
- notes: "",
45
- meta: {},
46
- };
47
- return { ...base, ...overrides };
48
- }
10
+ import { emptyTaskRecord, } from "@mindfoldhq/trellis-core/task";
11
+ export const emptyTaskJson = emptyTaskRecord;
49
12
  //# sourceMappingURL=task-json.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"task-json.js","sourceRoot":"","sources":["../../src/utils/task-json.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AA6BH;;;;;;;GAOG;AACH,MAAM,UAAU,aAAa,CAAC,YAA+B,EAAE;IAC7D,MAAM,KAAK,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACrD,MAAM,IAAI,GAAa;QACrB,EAAE,EAAE,EAAE;QACN,IAAI,EAAE,EAAE;QACR,KAAK,EAAE,EAAE;QACT,WAAW,EAAE,EAAE;QACf,MAAM,EAAE,UAAU;QAClB,QAAQ,EAAE,IAAI;QACd,KAAK,EAAE,IAAI;QACX,OAAO,EAAE,IAAI;QACb,QAAQ,EAAE,IAAI;QACd,OAAO,EAAE,EAAE;QACX,QAAQ,EAAE,EAAE;QACZ,SAAS,EAAE,KAAK;QAChB,WAAW,EAAE,IAAI;QACjB,MAAM,EAAE,IAAI;QACZ,WAAW,EAAE,IAAI;QACjB,aAAa,EAAE,IAAI;QACnB,MAAM,EAAE,IAAI;QACZ,MAAM,EAAE,IAAI;QACZ,QAAQ,EAAE,EAAE;QACZ,QAAQ,EAAE,EAAE;QACZ,MAAM,EAAE,IAAI;QACZ,YAAY,EAAE,EAAE;QAChB,KAAK,EAAE,EAAE;QACT,IAAI,EAAE,EAAE;KACT,CAAC;IACF,OAAO,EAAE,GAAG,IAAI,EAAE,GAAG,SAAS,EAAE,CAAC;AACnC,CAAC"}
1
+ {"version":3,"file":"task-json.js","sourceRoot":"","sources":["../../src/utils/task-json.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EACL,eAAe,GAEhB,MAAM,+BAA+B,CAAC;AAIvC,MAAM,CAAC,MAAM,aAAa,GAAG,eAAe,CAAC"}