youmd 0.9.6 → 0.10.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 (40) hide show
  1. package/dist/commands/machine.d.ts.map +1 -1
  2. package/dist/commands/machine.js +3 -0
  3. package/dist/commands/machine.js.map +1 -1
  4. package/dist/commands/mine.d.ts +46 -0
  5. package/dist/commands/mine.d.ts.map +1 -0
  6. package/dist/commands/mine.js +317 -0
  7. package/dist/commands/mine.js.map +1 -0
  8. package/dist/commands/orchestrate.d.ts.map +1 -1
  9. package/dist/commands/orchestrate.js +33 -0
  10. package/dist/commands/orchestrate.js.map +1 -1
  11. package/dist/commands/prompts.d.ts.map +1 -1
  12. package/dist/commands/prompts.js +5 -2
  13. package/dist/commands/prompts.js.map +1 -1
  14. package/dist/commands/tasks.d.ts +34 -0
  15. package/dist/commands/tasks.d.ts.map +1 -0
  16. package/dist/commands/tasks.js +383 -0
  17. package/dist/commands/tasks.js.map +1 -0
  18. package/dist/index.js +31 -0
  19. package/dist/index.js.map +1 -1
  20. package/dist/lib/orchestrator/approvals.d.ts +21 -0
  21. package/dist/lib/orchestrator/approvals.d.ts.map +1 -0
  22. package/dist/lib/orchestrator/approvals.js +65 -0
  23. package/dist/lib/orchestrator/approvals.js.map +1 -0
  24. package/dist/lib/orchestrator/supervisor.d.ts +41 -0
  25. package/dist/lib/orchestrator/supervisor.d.ts.map +1 -1
  26. package/dist/lib/orchestrator/supervisor.js +49 -0
  27. package/dist/lib/orchestrator/supervisor.js.map +1 -1
  28. package/dist/lib/redact.d.ts +15 -0
  29. package/dist/lib/redact.d.ts.map +1 -0
  30. package/dist/lib/redact.js +62 -0
  31. package/dist/lib/redact.js.map +1 -0
  32. package/dist/lib/remote-executor.d.ts +1 -1
  33. package/dist/lib/remote-executor.d.ts.map +1 -1
  34. package/dist/lib/remote-executor.js +46 -0
  35. package/dist/lib/remote-executor.js.map +1 -1
  36. package/dist/lib/tasksFile.d.ts +79 -0
  37. package/dist/lib/tasksFile.d.ts.map +1 -0
  38. package/dist/lib/tasksFile.js +306 -0
  39. package/dist/lib/tasksFile.js.map +1 -0
  40. package/package.json +1 -1
@@ -0,0 +1,79 @@
1
+ /**
2
+ * Canonical per-project task files: project-context/tasks.json + tasks.md.
3
+ *
4
+ * tasks.json is the machine truth (schema you-md/tasks/v1, fields aligned
5
+ * with the Convex portfolioTasks table so rows round-trip losslessly).
6
+ * tasks.md is the human/agent view, regenerated from tasks.json on every
7
+ * write. Checkbox edits made directly in tasks.md are reconciled back into
8
+ * tasks.json on the next read — tick a box in either file and both agree.
9
+ * Freeform prose in tasks.md between the notes markers is preserved verbatim
10
+ * across regenerations, so watchpoints and context never get clobbered.
11
+ *
12
+ * Legacy freeform tasks.md files (plain checklists with no id comments) are
13
+ * imported automatically on first read: bullets become tasks, nothing is lost.
14
+ */
15
+ export declare const TASKS_SCHEMA = "you-md/tasks/v1";
16
+ export declare const TASK_STATUSES: readonly ["proposed", "open", "in_progress", "done", "snoozed", "cancelled"];
17
+ export declare const TASK_PRIORITIES: readonly ["low", "normal", "high", "urgent"];
18
+ export type TaskStatus = (typeof TASK_STATUSES)[number];
19
+ export type TaskPriority = (typeof TASK_PRIORITIES)[number];
20
+ export interface TaskEntry {
21
+ id: string;
22
+ title: string;
23
+ description?: string;
24
+ status: TaskStatus;
25
+ priority: TaskPriority;
26
+ owner: "human" | "agent";
27
+ ownerLabel?: string;
28
+ tags: string[];
29
+ /** "manual" | "braindump" | "agent" | "github" | "chat" | "legacy-md" | ... */
30
+ source?: string;
31
+ /** What proof means done — the anti-"marked done but not working" field. */
32
+ verify?: string;
33
+ createdAt: string;
34
+ updatedAt: string;
35
+ completedAt?: string;
36
+ /** Convex portfolioTasks id once synced to the platform. */
37
+ remoteId?: string;
38
+ }
39
+ export interface TasksDoc {
40
+ $schema: typeof TASKS_SCHEMA;
41
+ project: string;
42
+ updatedAt: string;
43
+ tasks: TaskEntry[];
44
+ /** Freeform notes preserved in tasks.md between the notes markers. */
45
+ notes?: string;
46
+ }
47
+ export declare function generateTaskId(now?: Date): string;
48
+ export declare function tasksJsonPath(contextDir: string): string;
49
+ export declare function tasksMdPath(contextDir: string): string;
50
+ /** Parse a legacy freeform tasks.md checklist into task entries. */
51
+ export declare function parseLegacyTasksMd(content: string, project: string): TasksDoc;
52
+ /** Render tasks.md from the doc. Deterministic; safe to regenerate. */
53
+ export declare function renderTasksMd(doc: TasksDoc): string;
54
+ /**
55
+ * Reconcile checkbox states in tasks.md back into the doc. Only the checkbox
56
+ * is authoritative in md — a ticked box marks done, an unticked box on a
57
+ * done/cancelled task reopens it. Returns the number of changed tasks.
58
+ */
59
+ export declare function reconcileMdCheckboxes(doc: TasksDoc, mdContent: string): number;
60
+ /**
61
+ * Load the canonical task doc for a project-context directory.
62
+ *
63
+ * - tasks.json exists → parse it, then reconcile tasks.md checkbox edits.
64
+ * - only a legacy tasks.md exists → import it (one-time migration).
65
+ * - neither exists → fresh empty doc.
66
+ */
67
+ export declare function readTasksDoc(contextDir: string, project: string): {
68
+ doc: TasksDoc;
69
+ migrated: boolean;
70
+ reconciled: number;
71
+ };
72
+ /** Write both files atomically-ish: json first (truth), then the md render. */
73
+ export declare function writeTasksDoc(contextDir: string, doc: TasksDoc): void;
74
+ export declare function addTask(doc: TasksDoc, input: Partial<TaskEntry> & {
75
+ title: string;
76
+ }): TaskEntry;
77
+ export declare function findTask(doc: TasksDoc, idOrTitle: string): TaskEntry | undefined;
78
+ export declare function openTasks(doc: TasksDoc): TaskEntry[];
79
+ //# sourceMappingURL=tasksFile.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tasksFile.d.ts","sourceRoot":"","sources":["../../src/lib/tasksFile.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAMH,eAAO,MAAM,YAAY,oBAAoB,CAAC;AAC9C,eAAO,MAAM,aAAa,8EAA+E,CAAC;AAC1G,eAAO,MAAM,eAAe,8CAA+C,CAAC;AAE5E,MAAM,MAAM,UAAU,GAAG,CAAC,OAAO,aAAa,CAAC,CAAC,MAAM,CAAC,CAAC;AACxD,MAAM,MAAM,YAAY,GAAG,CAAC,OAAO,eAAe,CAAC,CAAC,MAAM,CAAC,CAAC;AAE5D,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,UAAU,CAAC;IACnB,QAAQ,EAAE,YAAY,CAAC;IACvB,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC;IACzB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,+EAA+E;IAC/E,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,4EAA4E;IAC5E,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,4DAA4D;IAC5D,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,QAAQ;IACvB,OAAO,EAAE,OAAO,YAAY,CAAC;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,SAAS,EAAE,CAAC;IACnB,sEAAsE;IACtE,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAOD,wBAAgB,cAAc,CAAC,GAAG,OAAa,GAAG,MAAM,CAGvD;AAED,wBAAgB,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAExD;AAED,wBAAgB,WAAW,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAEtD;AAkCD,oEAAoE;AACpE,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,QAAQ,CA6C7E;AAUD,uEAAuE;AACvE,wBAAgB,aAAa,CAAC,GAAG,EAAE,QAAQ,GAAG,MAAM,CA0BnD;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAyB9E;AAUD;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG;IAAE,GAAG,EAAE,QAAQ,CAAC;IAAC,QAAQ,EAAE,OAAO,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,CAuC1H;AAED,+EAA+E;AAC/E,wBAAgB,aAAa,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,EAAE,QAAQ,GAAG,IAAI,CAKrE;AAED,wBAAgB,OAAO,CACrB,GAAG,EAAE,QAAQ,EACb,KAAK,EAAE,OAAO,CAAC,SAAS,CAAC,GAAG;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,GAC5C,SAAS,CAIX;AAED,wBAAgB,QAAQ,CAAC,GAAG,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS,CAOhF;AAED,wBAAgB,SAAS,CAAC,GAAG,EAAE,QAAQ,GAAG,SAAS,EAAE,CAEpD"}
@@ -0,0 +1,306 @@
1
+ "use strict";
2
+ /**
3
+ * Canonical per-project task files: project-context/tasks.json + tasks.md.
4
+ *
5
+ * tasks.json is the machine truth (schema you-md/tasks/v1, fields aligned
6
+ * with the Convex portfolioTasks table so rows round-trip losslessly).
7
+ * tasks.md is the human/agent view, regenerated from tasks.json on every
8
+ * write. Checkbox edits made directly in tasks.md are reconciled back into
9
+ * tasks.json on the next read — tick a box in either file and both agree.
10
+ * Freeform prose in tasks.md between the notes markers is preserved verbatim
11
+ * across regenerations, so watchpoints and context never get clobbered.
12
+ *
13
+ * Legacy freeform tasks.md files (plain checklists with no id comments) are
14
+ * imported automatically on first read: bullets become tasks, nothing is lost.
15
+ */
16
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
17
+ if (k2 === undefined) k2 = k;
18
+ var desc = Object.getOwnPropertyDescriptor(m, k);
19
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
20
+ desc = { enumerable: true, get: function() { return m[k]; } };
21
+ }
22
+ Object.defineProperty(o, k2, desc);
23
+ }) : (function(o, m, k, k2) {
24
+ if (k2 === undefined) k2 = k;
25
+ o[k2] = m[k];
26
+ }));
27
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
28
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
29
+ }) : function(o, v) {
30
+ o["default"] = v;
31
+ });
32
+ var __importStar = (this && this.__importStar) || (function () {
33
+ var ownKeys = function(o) {
34
+ ownKeys = Object.getOwnPropertyNames || function (o) {
35
+ var ar = [];
36
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
37
+ return ar;
38
+ };
39
+ return ownKeys(o);
40
+ };
41
+ return function (mod) {
42
+ if (mod && mod.__esModule) return mod;
43
+ var result = {};
44
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
45
+ __setModuleDefault(result, mod);
46
+ return result;
47
+ };
48
+ })();
49
+ Object.defineProperty(exports, "__esModule", { value: true });
50
+ exports.TASK_PRIORITIES = exports.TASK_STATUSES = exports.TASKS_SCHEMA = void 0;
51
+ exports.generateTaskId = generateTaskId;
52
+ exports.tasksJsonPath = tasksJsonPath;
53
+ exports.tasksMdPath = tasksMdPath;
54
+ exports.parseLegacyTasksMd = parseLegacyTasksMd;
55
+ exports.renderTasksMd = renderTasksMd;
56
+ exports.reconcileMdCheckboxes = reconcileMdCheckboxes;
57
+ exports.readTasksDoc = readTasksDoc;
58
+ exports.writeTasksDoc = writeTasksDoc;
59
+ exports.addTask = addTask;
60
+ exports.findTask = findTask;
61
+ exports.openTasks = openTasks;
62
+ const fs = __importStar(require("fs"));
63
+ const path = __importStar(require("path"));
64
+ const crypto = __importStar(require("crypto"));
65
+ exports.TASKS_SCHEMA = "you-md/tasks/v1";
66
+ exports.TASK_STATUSES = ["proposed", "open", "in_progress", "done", "snoozed", "cancelled"];
67
+ exports.TASK_PRIORITIES = ["low", "normal", "high", "urgent"];
68
+ const NOTES_START = "<!-- notes:start -->";
69
+ const NOTES_END = "<!-- notes:end -->";
70
+ const ID_COMMENT = /<!--\s*id:([A-Za-z0-9_-]+)\s*-->/;
71
+ const OPEN_STATUSES = ["proposed", "open", "in_progress", "snoozed"];
72
+ function generateTaskId(now = new Date()) {
73
+ const stamp = now.toISOString().slice(0, 10).replace(/-/g, "");
74
+ return `t-${stamp}-${crypto.randomBytes(3).toString("hex")}`;
75
+ }
76
+ function tasksJsonPath(contextDir) {
77
+ return path.join(contextDir, "tasks.json");
78
+ }
79
+ function tasksMdPath(contextDir) {
80
+ return path.join(contextDir, "tasks.md");
81
+ }
82
+ function nowIso() {
83
+ return new Date().toISOString();
84
+ }
85
+ function normalizeStatus(raw) {
86
+ return exports.TASK_STATUSES.includes(raw) ? raw : "open";
87
+ }
88
+ function normalizePriority(raw) {
89
+ return exports.TASK_PRIORITIES.includes(raw) ? raw : "normal";
90
+ }
91
+ function normalizeTask(raw) {
92
+ const created = typeof raw.createdAt === "string" ? raw.createdAt : nowIso();
93
+ return {
94
+ id: typeof raw.id === "string" && raw.id ? raw.id : generateTaskId(),
95
+ title: String(raw.title || "").trim() || "(untitled)",
96
+ description: typeof raw.description === "string" ? raw.description : undefined,
97
+ status: normalizeStatus(raw.status),
98
+ priority: normalizePriority(raw.priority),
99
+ owner: raw.owner === "agent" ? "agent" : "human",
100
+ ownerLabel: typeof raw.ownerLabel === "string" ? raw.ownerLabel : undefined,
101
+ tags: Array.isArray(raw.tags) ? raw.tags.map(String) : [],
102
+ source: typeof raw.source === "string" ? raw.source : undefined,
103
+ verify: typeof raw.verify === "string" ? raw.verify : undefined,
104
+ createdAt: created,
105
+ updatedAt: typeof raw.updatedAt === "string" ? raw.updatedAt : created,
106
+ completedAt: typeof raw.completedAt === "string" ? raw.completedAt : undefined,
107
+ remoteId: typeof raw.remoteId === "string" ? raw.remoteId : undefined,
108
+ };
109
+ }
110
+ /** Parse a legacy freeform tasks.md checklist into task entries. */
111
+ function parseLegacyTasksMd(content, project) {
112
+ const tasks = [];
113
+ const now = nowIso();
114
+ const notes = [];
115
+ let inNotes = false;
116
+ for (const line of content.split(/\r?\n/)) {
117
+ const heading = line.match(/^##\s+(.+)$/);
118
+ if (heading) {
119
+ inNotes = /watchpoint|note/i.test(heading[1]);
120
+ if (inNotes)
121
+ notes.push(`### ${heading[1].trim()}`);
122
+ continue;
123
+ }
124
+ if (inNotes) {
125
+ if (line.trim())
126
+ notes.push(line);
127
+ continue;
128
+ }
129
+ const bullet = line.match(/^\s*-\s*\[([ xX])\]\s+(.*)$/);
130
+ if (!bullet)
131
+ continue;
132
+ const done = bullet[1].toLowerCase() === "x";
133
+ // Legacy entries are often paragraph-length; keep the first sentence as
134
+ // the title and the rest as description so nothing is lost.
135
+ const text = bullet[2].trim();
136
+ const splitAt = text.length > 160 ? text.indexOf(". ") : -1;
137
+ const title = splitAt > 0 ? text.slice(0, splitAt + 1) : text;
138
+ const description = splitAt > 0 ? text.slice(splitAt + 2) : undefined;
139
+ tasks.push(normalizeTask({
140
+ title,
141
+ description,
142
+ status: done ? "done" : "open",
143
+ source: "legacy-md",
144
+ createdAt: now,
145
+ completedAt: done ? now : undefined,
146
+ }));
147
+ }
148
+ return {
149
+ $schema: exports.TASKS_SCHEMA,
150
+ project,
151
+ updatedAt: now,
152
+ tasks,
153
+ notes: notes.length ? notes.join("\n") : undefined,
154
+ };
155
+ }
156
+ function statusLabel(task) {
157
+ const bits = [task.status];
158
+ if (task.priority !== "normal")
159
+ bits.push(task.priority);
160
+ if (task.owner === "agent")
161
+ bits.push(task.ownerLabel ? `agent:${task.ownerLabel}` : "agent");
162
+ if (task.tags.length)
163
+ bits.push(task.tags.map((t) => `#${t}`).join(" "));
164
+ return bits.join(" · ");
165
+ }
166
+ /** Render tasks.md from the doc. Deterministic; safe to regenerate. */
167
+ function renderTasksMd(doc) {
168
+ const active = doc.tasks.filter((t) => OPEN_STATUSES.includes(t.status));
169
+ const closed = doc.tasks.filter((t) => !OPEN_STATUSES.includes(t.status));
170
+ const lines = [
171
+ `# Tasks — ${doc.project}`,
172
+ "",
173
+ "<!-- generated from tasks.json (you-md/tasks/v1). Checkbox edits here sync back on next read;",
174
+ " everything else regenerates. Freeform notes live between the notes markers below. -->",
175
+ "",
176
+ `## Active (${active.length})`,
177
+ "",
178
+ ];
179
+ for (const t of active) {
180
+ lines.push(`- [ ] ${t.title} <!-- id:${t.id} -->`);
181
+ lines.push(` ${statusLabel(t)}`);
182
+ if (t.verify)
183
+ lines.push(` verify: ${t.verify}`);
184
+ if (t.description)
185
+ lines.push(` ${t.description}`);
186
+ }
187
+ lines.push("", `## Done (${closed.length})`, "");
188
+ for (const t of closed) {
189
+ const box = t.status === "done" ? "x" : " ";
190
+ const suffix = t.status === "done" ? "" : ` (${t.status})`;
191
+ lines.push(`- [${box}] ${t.title}${suffix} <!-- id:${t.id} -->`);
192
+ }
193
+ lines.push("", NOTES_START, doc.notes || "", NOTES_END, "");
194
+ return lines.join("\n");
195
+ }
196
+ /**
197
+ * Reconcile checkbox states in tasks.md back into the doc. Only the checkbox
198
+ * is authoritative in md — a ticked box marks done, an unticked box on a
199
+ * done/cancelled task reopens it. Returns the number of changed tasks.
200
+ */
201
+ function reconcileMdCheckboxes(doc, mdContent) {
202
+ const byId = new Map(doc.tasks.map((t) => [t.id, t]));
203
+ let changed = 0;
204
+ for (const line of mdContent.split(/\r?\n/)) {
205
+ const bullet = line.match(/^\s*-\s*\[([ xX])\]\s+(.*)$/);
206
+ if (!bullet)
207
+ continue;
208
+ const idMatch = bullet[2].match(ID_COMMENT);
209
+ if (!idMatch)
210
+ continue;
211
+ const task = byId.get(idMatch[1]);
212
+ if (!task)
213
+ continue;
214
+ const checked = bullet[1].toLowerCase() === "x";
215
+ const isOpen = OPEN_STATUSES.includes(task.status);
216
+ if (checked && isOpen) {
217
+ task.status = "done";
218
+ task.completedAt = nowIso();
219
+ task.updatedAt = nowIso();
220
+ changed += 1;
221
+ }
222
+ else if (!checked && task.status === "done") {
223
+ task.status = "open";
224
+ task.completedAt = undefined;
225
+ task.updatedAt = nowIso();
226
+ changed += 1;
227
+ }
228
+ }
229
+ return changed;
230
+ }
231
+ function extractNotes(mdContent) {
232
+ const start = mdContent.indexOf(NOTES_START);
233
+ const end = mdContent.indexOf(NOTES_END);
234
+ if (start === -1 || end === -1 || end <= start)
235
+ return undefined;
236
+ const notes = mdContent.slice(start + NOTES_START.length, end).trim();
237
+ return notes || undefined;
238
+ }
239
+ /**
240
+ * Load the canonical task doc for a project-context directory.
241
+ *
242
+ * - tasks.json exists → parse it, then reconcile tasks.md checkbox edits.
243
+ * - only a legacy tasks.md exists → import it (one-time migration).
244
+ * - neither exists → fresh empty doc.
245
+ */
246
+ function readTasksDoc(contextDir, project) {
247
+ const jsonPath = tasksJsonPath(contextDir);
248
+ const mdPath = tasksMdPath(contextDir);
249
+ if (fs.existsSync(jsonPath)) {
250
+ let parsed;
251
+ try {
252
+ parsed = JSON.parse(fs.readFileSync(jsonPath, "utf-8"));
253
+ }
254
+ catch {
255
+ parsed = {};
256
+ }
257
+ const rawTasks = Array.isArray(parsed.tasks) ? parsed.tasks : [];
258
+ const doc = {
259
+ $schema: exports.TASKS_SCHEMA,
260
+ project: typeof parsed.project === "string" && parsed.project ? parsed.project : project,
261
+ updatedAt: typeof parsed.updatedAt === "string" ? parsed.updatedAt : nowIso(),
262
+ tasks: rawTasks.map(normalizeTask),
263
+ notes: typeof parsed.notes === "string" ? parsed.notes : undefined,
264
+ };
265
+ let reconciled = 0;
266
+ if (fs.existsSync(mdPath)) {
267
+ const md = fs.readFileSync(mdPath, "utf-8");
268
+ reconciled = reconcileMdCheckboxes(doc, md);
269
+ const notes = extractNotes(md);
270
+ if (notes !== undefined)
271
+ doc.notes = notes;
272
+ }
273
+ return { doc, migrated: false, reconciled };
274
+ }
275
+ if (fs.existsSync(mdPath)) {
276
+ const doc = parseLegacyTasksMd(fs.readFileSync(mdPath, "utf-8"), project);
277
+ return { doc, migrated: true, reconciled: 0 };
278
+ }
279
+ return {
280
+ doc: { $schema: exports.TASKS_SCHEMA, project, updatedAt: nowIso(), tasks: [] },
281
+ migrated: false,
282
+ reconciled: 0,
283
+ };
284
+ }
285
+ /** Write both files atomically-ish: json first (truth), then the md render. */
286
+ function writeTasksDoc(contextDir, doc) {
287
+ fs.mkdirSync(contextDir, { recursive: true });
288
+ doc.updatedAt = nowIso();
289
+ fs.writeFileSync(tasksJsonPath(contextDir), JSON.stringify(doc, null, 2) + "\n", "utf-8");
290
+ fs.writeFileSync(tasksMdPath(contextDir), renderTasksMd(doc), "utf-8");
291
+ }
292
+ function addTask(doc, input) {
293
+ const task = normalizeTask({ ...input, createdAt: nowIso() });
294
+ doc.tasks.push(task);
295
+ return task;
296
+ }
297
+ function findTask(doc, idOrTitle) {
298
+ const needle = idOrTitle.trim().toLowerCase();
299
+ return (doc.tasks.find((t) => t.id.toLowerCase() === needle) ||
300
+ doc.tasks.find((t) => t.title.toLowerCase() === needle) ||
301
+ doc.tasks.find((t) => t.title.toLowerCase().includes(needle)));
302
+ }
303
+ function openTasks(doc) {
304
+ return doc.tasks.filter((t) => OPEN_STATUSES.includes(t.status));
305
+ }
306
+ //# sourceMappingURL=tasksFile.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tasksFile.js","sourceRoot":"","sources":["../../src/lib/tasksFile.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;GAaG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+CH,wCAGC;AAED,sCAEC;AAED,kCAEC;AAmCD,gDA6CC;AAWD,sCA0BC;AAOD,sDAyBC;AAiBD,oCAuCC;AAGD,sCAKC;AAED,0BAOC;AAED,4BAOC;AAED,8BAEC;AAnSD,uCAAyB;AACzB,2CAA6B;AAC7B,+CAAiC;AAEpB,QAAA,YAAY,GAAG,iBAAiB,CAAC;AACjC,QAAA,aAAa,GAAG,CAAC,UAAU,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,SAAS,EAAE,WAAW,CAAU,CAAC;AAC7F,QAAA,eAAe,GAAG,CAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAU,CAAC;AAkC5E,MAAM,WAAW,GAAG,sBAAsB,CAAC;AAC3C,MAAM,SAAS,GAAG,oBAAoB,CAAC;AACvC,MAAM,UAAU,GAAG,kCAAkC,CAAC;AACtD,MAAM,aAAa,GAAiB,CAAC,UAAU,EAAE,MAAM,EAAE,aAAa,EAAE,SAAS,CAAC,CAAC;AAEnF,SAAgB,cAAc,CAAC,GAAG,GAAG,IAAI,IAAI,EAAE;IAC7C,MAAM,KAAK,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IAC/D,OAAO,KAAK,KAAK,IAAI,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;AAC/D,CAAC;AAED,SAAgB,aAAa,CAAC,UAAkB;IAC9C,OAAO,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;AAC7C,CAAC;AAED,SAAgB,WAAW,CAAC,UAAkB;IAC5C,OAAO,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;AAC3C,CAAC;AAED,SAAS,MAAM;IACb,OAAO,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;AAClC,CAAC;AAED,SAAS,eAAe,CAAC,GAAY;IACnC,OAAO,qBAAa,CAAC,QAAQ,CAAC,GAAiB,CAAC,CAAC,CAAC,CAAE,GAAkB,CAAC,CAAC,CAAC,MAAM,CAAC;AAClF,CAAC;AAED,SAAS,iBAAiB,CAAC,GAAY;IACrC,OAAO,uBAAe,CAAC,QAAQ,CAAC,GAAmB,CAAC,CAAC,CAAC,CAAE,GAAoB,CAAC,CAAC,CAAC,QAAQ,CAAC;AAC1F,CAAC;AAED,SAAS,aAAa,CAAC,GAA4B;IACjD,MAAM,OAAO,GAAG,OAAO,GAAG,CAAC,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IAC7E,OAAO;QACL,EAAE,EAAE,OAAO,GAAG,CAAC,EAAE,KAAK,QAAQ,IAAI,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,cAAc,EAAE;QACpE,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,YAAY;QACrD,WAAW,EAAE,OAAO,GAAG,CAAC,WAAW,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS;QAC9E,MAAM,EAAE,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC;QACnC,QAAQ,EAAE,iBAAiB,CAAC,GAAG,CAAC,QAAQ,CAAC;QACzC,KAAK,EAAE,GAAG,CAAC,KAAK,KAAK,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO;QAChD,UAAU,EAAE,OAAO,GAAG,CAAC,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS;QAC3E,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE;QACzD,MAAM,EAAE,OAAO,GAAG,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS;QAC/D,MAAM,EAAE,OAAO,GAAG,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS;QAC/D,SAAS,EAAE,OAAO;QAClB,SAAS,EAAE,OAAO,GAAG,CAAC,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO;QACtE,WAAW,EAAE,OAAO,GAAG,CAAC,WAAW,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS;QAC9E,QAAQ,EAAE,OAAO,GAAG,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS;KACtE,CAAC;AACJ,CAAC;AAED,oEAAoE;AACpE,SAAgB,kBAAkB,CAAC,OAAe,EAAE,OAAe;IACjE,MAAM,KAAK,GAAgB,EAAE,CAAC;IAC9B,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC;IACrB,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,IAAI,OAAO,GAAG,KAAK,CAAC;IAEpB,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;QAC1C,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;QAC1C,IAAI,OAAO,EAAE,CAAC;YACZ,OAAO,GAAG,kBAAkB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;YAC9C,IAAI,OAAO;gBAAE,KAAK,CAAC,IAAI,CAAC,OAAO,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YACpD,SAAS;QACX,CAAC;QACD,IAAI,OAAO,EAAE,CAAC;YACZ,IAAI,IAAI,CAAC,IAAI,EAAE;gBAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAClC,SAAS;QACX,CAAC;QACD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,6BAA6B,CAAC,CAAC;QACzD,IAAI,CAAC,MAAM;YAAE,SAAS;QACtB,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,KAAK,GAAG,CAAC;QAC7C,wEAAwE;QACxE,4DAA4D;QAC5D,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAC9B,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5D,MAAM,KAAK,GAAG,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAC9D,MAAM,WAAW,GAAG,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QACtE,KAAK,CAAC,IAAI,CACR,aAAa,CAAC;YACZ,KAAK;YACL,WAAW;YACX,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM;YAC9B,MAAM,EAAE,WAAW;YACnB,SAAS,EAAE,GAAG;YACd,WAAW,EAAE,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS;SACpC,CAAC,CACH,CAAC;IACJ,CAAC;IAED,OAAO;QACL,OAAO,EAAE,oBAAY;QACrB,OAAO;QACP,SAAS,EAAE,GAAG;QACd,KAAK;QACL,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS;KACnD,CAAC;AACJ,CAAC;AAED,SAAS,WAAW,CAAC,IAAe;IAClC,MAAM,IAAI,GAAa,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACrC,IAAI,IAAI,CAAC,QAAQ,KAAK,QAAQ;QAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACzD,IAAI,IAAI,CAAC,KAAK,KAAK,OAAO;QAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;IAC9F,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM;QAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IACzE,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC1B,CAAC;AAED,uEAAuE;AACvE,SAAgB,aAAa,CAAC,GAAa;IACzC,MAAM,MAAM,GAAG,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;IACzE,MAAM,MAAM,GAAG,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;IAC1E,MAAM,KAAK,GAAa;QACtB,aAAa,GAAG,CAAC,OAAO,EAAE;QAC1B,EAAE;QACF,+FAA+F;QAC/F,4FAA4F;QAC5F,EAAE;QACF,cAAc,MAAM,CAAC,MAAM,GAAG;QAC9B,EAAE;KACH,CAAC;IACF,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;QACvB,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,KAAK,YAAY,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;QACnD,KAAK,CAAC,IAAI,CAAC,SAAS,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACtC,IAAI,CAAC,CAAC,MAAM;YAAE,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;QACtD,IAAI,CAAC,CAAC,WAAW;YAAE,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;IAC1D,CAAC;IACD,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,YAAY,MAAM,CAAC,MAAM,GAAG,EAAE,EAAE,CAAC,CAAC;IACjD,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;QACvB,MAAM,GAAG,GAAG,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;QAC5C,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,CAAC;QAC3D,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,CAAC,KAAK,GAAG,MAAM,YAAY,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;IACnE,CAAC;IACD,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,WAAW,EAAE,GAAG,CAAC,KAAK,IAAI,EAAE,EAAE,SAAS,EAAE,EAAE,CAAC,CAAC;IAC5D,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED;;;;GAIG;AACH,SAAgB,qBAAqB,CAAC,GAAa,EAAE,SAAiB;IACpE,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IACtD,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,KAAK,MAAM,IAAI,IAAI,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;QAC5C,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,6BAA6B,CAAC,CAAC;QACzD,IAAI,CAAC,MAAM;YAAE,SAAS;QACtB,MAAM,OAAO,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QAC5C,IAAI,CAAC,OAAO;YAAE,SAAS;QACvB,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;QAClC,IAAI,CAAC,IAAI;YAAE,SAAS;QACpB,MAAM,OAAO,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,KAAK,GAAG,CAAC;QAChD,MAAM,MAAM,GAAG,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACnD,IAAI,OAAO,IAAI,MAAM,EAAE,CAAC;YACtB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;YACrB,IAAI,CAAC,WAAW,GAAG,MAAM,EAAE,CAAC;YAC5B,IAAI,CAAC,SAAS,GAAG,MAAM,EAAE,CAAC;YAC1B,OAAO,IAAI,CAAC,CAAC;QACf,CAAC;aAAM,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;YAC9C,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;YACrB,IAAI,CAAC,WAAW,GAAG,SAAS,CAAC;YAC7B,IAAI,CAAC,SAAS,GAAG,MAAM,EAAE,CAAC;YAC1B,OAAO,IAAI,CAAC,CAAC;QACf,CAAC;IACH,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,YAAY,CAAC,SAAiB;IACrC,MAAM,KAAK,GAAG,SAAS,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;IAC7C,MAAM,GAAG,GAAG,SAAS,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IACzC,IAAI,KAAK,KAAK,CAAC,CAAC,IAAI,GAAG,KAAK,CAAC,CAAC,IAAI,GAAG,IAAI,KAAK;QAAE,OAAO,SAAS,CAAC;IACjE,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,KAAK,GAAG,WAAW,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;IACtE,OAAO,KAAK,IAAI,SAAS,CAAC;AAC5B,CAAC;AAED;;;;;;GAMG;AACH,SAAgB,YAAY,CAAC,UAAkB,EAAE,OAAe;IAC9D,MAAM,QAAQ,GAAG,aAAa,CAAC,UAAU,CAAC,CAAC;IAC3C,MAAM,MAAM,GAAG,WAAW,CAAC,UAAU,CAAC,CAAC;IAEvC,IAAI,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC5B,IAAI,MAA+B,CAAC;QACpC,IAAI,CAAC;YACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC;QAC1D,CAAC;QAAC,MAAM,CAAC;YACP,MAAM,GAAG,EAAE,CAAC;QACd,CAAC;QACD,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAE,MAAM,CAAC,KAAmC,CAAC,CAAC,CAAC,EAAE,CAAC;QAChG,MAAM,GAAG,GAAa;YACpB,OAAO,EAAE,oBAAY;YACrB,OAAO,EAAE,OAAO,MAAM,CAAC,OAAO,KAAK,QAAQ,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO;YACxF,SAAS,EAAE,OAAO,MAAM,CAAC,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,EAAE;YAC7E,KAAK,EAAE,QAAQ,CAAC,GAAG,CAAC,aAAa,CAAC;YAClC,KAAK,EAAE,OAAO,MAAM,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS;SACnE,CAAC;QACF,IAAI,UAAU,GAAG,CAAC,CAAC;QACnB,IAAI,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;YAC1B,MAAM,EAAE,GAAG,EAAE,CAAC,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;YAC5C,UAAU,GAAG,qBAAqB,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;YAC5C,MAAM,KAAK,GAAG,YAAY,CAAC,EAAE,CAAC,CAAC;YAC/B,IAAI,KAAK,KAAK,SAAS;gBAAE,GAAG,CAAC,KAAK,GAAG,KAAK,CAAC;QAC7C,CAAC;QACD,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC;IAC9C,CAAC;IAED,IAAI,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;QAC1B,MAAM,GAAG,GAAG,kBAAkB,CAAC,EAAE,CAAC,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,CAAC;QAC1E,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,EAAE,CAAC;IAChD,CAAC;IAED,OAAO;QACL,GAAG,EAAE,EAAE,OAAO,EAAE,oBAAY,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE;QACvE,QAAQ,EAAE,KAAK;QACf,UAAU,EAAE,CAAC;KACd,CAAC;AACJ,CAAC;AAED,+EAA+E;AAC/E,SAAgB,aAAa,CAAC,UAAkB,EAAE,GAAa;IAC7D,EAAE,CAAC,SAAS,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC9C,GAAG,CAAC,SAAS,GAAG,MAAM,EAAE,CAAC;IACzB,EAAE,CAAC,aAAa,CAAC,aAAa,CAAC,UAAU,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,OAAO,CAAC,CAAC;IAC1F,EAAE,CAAC,aAAa,CAAC,WAAW,CAAC,UAAU,CAAC,EAAE,aAAa,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,CAAC;AACzE,CAAC;AAED,SAAgB,OAAO,CACrB,GAAa,EACb,KAA6C;IAE7C,MAAM,IAAI,GAAG,aAAa,CAAC,EAAE,GAAG,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC;IAC9D,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACrB,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAgB,QAAQ,CAAC,GAAa,EAAE,SAAiB;IACvD,MAAM,MAAM,GAAG,SAAS,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC9C,OAAO,CACL,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,WAAW,EAAE,KAAK,MAAM,CAAC;QACpD,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE,KAAK,MAAM,CAAC;QACvD,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAC9D,CAAC;AACJ,CAAC;AAED,SAAgB,SAAS,CAAC,GAAa;IACrC,OAAO,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;AACnE,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "youmd",
3
- "version": "0.9.6",
3
+ "version": "0.10.0",
4
4
  "description": "Identity context protocol for the agent internet — an MCP where the context is you. CLI for the You.md platform.",
5
5
  "bin": {
6
6
  "you": "dist/you.js",