@curie-agent/core 0.4.2 → 0.4.4

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 (54) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/src/compaction.d.ts +76 -0
  3. package/dist/src/compaction.d.ts.map +1 -0
  4. package/dist/src/compaction.js +229 -0
  5. package/dist/src/compaction.js.map +1 -0
  6. package/dist/src/context-budget.d.ts +72 -0
  7. package/dist/src/context-budget.d.ts.map +1 -0
  8. package/dist/src/context-budget.js +132 -0
  9. package/dist/src/context-budget.js.map +1 -0
  10. package/dist/src/event-bus.d.ts +20 -0
  11. package/dist/src/event-bus.d.ts.map +1 -1
  12. package/dist/src/event-bus.js.map +1 -1
  13. package/dist/src/index.d.ts +8 -5
  14. package/dist/src/index.d.ts.map +1 -1
  15. package/dist/src/index.js +6 -4
  16. package/dist/src/index.js.map +1 -1
  17. package/dist/src/reminder-parser.d.ts +6 -0
  18. package/dist/src/reminder-parser.d.ts.map +1 -1
  19. package/dist/src/reminder-parser.js +85 -105
  20. package/dist/src/reminder-parser.js.map +1 -1
  21. package/dist/src/settings.d.ts +13 -0
  22. package/dist/src/settings.d.ts.map +1 -1
  23. package/dist/src/settings.js +37 -12
  24. package/dist/src/settings.js.map +1 -1
  25. package/dist/src/subagent-executor.d.ts +8 -0
  26. package/dist/src/subagent-executor.d.ts.map +1 -1
  27. package/dist/src/subagent-executor.js +20 -6
  28. package/dist/src/subagent-executor.js.map +1 -1
  29. package/dist/src/task-manager.d.ts +53 -12
  30. package/dist/src/task-manager.d.ts.map +1 -1
  31. package/dist/src/task-manager.js +225 -124
  32. package/dist/src/task-manager.js.map +1 -1
  33. package/dist/src/task-migration.d.ts +29 -2
  34. package/dist/src/task-migration.d.ts.map +1 -1
  35. package/dist/src/task-migration.js +115 -7
  36. package/dist/src/task-migration.js.map +1 -1
  37. package/dist/src/turn-loop.d.ts +22 -2
  38. package/dist/src/turn-loop.d.ts.map +1 -1
  39. package/dist/src/turn-loop.js +222 -95
  40. package/dist/src/turn-loop.js.map +1 -1
  41. package/package.json +1 -1
  42. package/templates/settings.json +100 -91
  43. package/dist/src/cron-manager.d.ts +0 -92
  44. package/dist/src/cron-manager.d.ts.map +0 -1
  45. package/dist/src/cron-manager.js +0 -410
  46. package/dist/src/cron-manager.js.map +0 -1
  47. package/dist/src/task-executor.d.ts +0 -31
  48. package/dist/src/task-executor.d.ts.map +0 -1
  49. package/dist/src/task-executor.js +0 -91
  50. package/dist/src/task-executor.js.map +0 -1
  51. package/dist/src/token-monitor.d.ts +0 -50
  52. package/dist/src/token-monitor.d.ts.map +0 -1
  53. package/dist/src/token-monitor.js +0 -119
  54. package/dist/src/token-monitor.js.map +0 -1
@@ -1,19 +1,30 @@
1
1
  /**
2
- * Unified task manager — replaces CronManager as the primary task store.
2
+ * Unified task manager — the single owner of the task store.
3
3
  * Manages tasks across both personal (~/.curie-agent/tasks.json) and project (<cwd>/tasks.json) scopes.
4
+ *
5
+ * Two invariants matter here:
6
+ * 1. Nothing is ever deleted automatically. Only explicit user actions
7
+ * (`removeTask`, `clearCompleted`) drop a task.
8
+ * 2. Every write goes through `mutate()`, which re-reads the file if another
9
+ * process touched it since our last read. Without this, two in-memory
10
+ * copies of the task array silently overwrite each other's work.
4
11
  */
5
- import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs';
12
+ import { existsSync, mkdirSync, readFileSync, renameSync, statSync, writeFileSync } from 'node:fs';
6
13
  import { homedir } from 'node:os';
7
- import { dirname, join } from 'node:path';
8
- import { scheduleLabel, createTaskDefaults, generateTaskId, taskTimestamp, pickNextSchedule, computeNextFire } from './unified-task.js';
14
+ import { dirname, join, resolve } from 'node:path';
15
+ import { scheduleLabel, generateTaskId, taskTimestamp, pickNextSchedule, computeNextFire } from './unified-task.js';
9
16
  // ---------------------------------------------------------------------------
10
17
  // Constants
11
18
  // ---------------------------------------------------------------------------
12
19
  const DEFAULT_FILE = join(homedir(), '.curie-agent', 'tasks.json');
13
- const DEFAULT_TTL_MS = 7 * 24 * 60 * 60 * 1000; // 7 days
20
+ /** Minimum length accepted for an ID-prefix lookup. */
21
+ const MIN_PREFIX_LENGTH = 4;
14
22
  // ---------------------------------------------------------------------------
15
23
  // File I/O helpers
16
24
  // ---------------------------------------------------------------------------
25
+ function emptyFile() {
26
+ return { $schema: 'tasks.schema.json', version: 1, tasks: [] };
27
+ }
17
28
  function loadTasksFile(filePath) {
18
29
  if (existsSync(filePath)) {
19
30
  try {
@@ -26,108 +37,163 @@ function loadTasksFile(filePath) {
26
37
  /* corrupt — start fresh */
27
38
  }
28
39
  }
29
- return { $schema: 'tasks.schema.json', version: 1, tasks: [] };
40
+ return emptyFile();
30
41
  }
42
+ /** Write via temp file + rename so a crash mid-write can't truncate the store. */
31
43
  function saveTasksFile(data, filePath) {
32
44
  const dir = dirname(filePath);
33
45
  if (!existsSync(dir)) {
34
46
  mkdirSync(dir, { recursive: true });
35
47
  }
36
- writeFileSync(filePath, JSON.stringify(data, null, 2), 'utf-8');
48
+ const tmpPath = `${filePath}.tmp`;
49
+ writeFileSync(tmpPath, JSON.stringify(data, null, 2), 'utf-8');
50
+ renameSync(tmpPath, filePath);
51
+ }
52
+ /**
53
+ * Cheap fingerprint of the file on disk. mtime alone can collide when two
54
+ * writes land inside the same millisecond, so size is folded in.
55
+ */
56
+ function fingerprint(filePath) {
57
+ try {
58
+ const stat = statSync(filePath);
59
+ return `${String(stat.mtimeMs)}:${String(stat.size)}`;
60
+ }
61
+ catch {
62
+ return '';
63
+ }
37
64
  }
38
65
  // ---------------------------------------------------------------------------
39
66
  // TaskManager class
40
67
  // ---------------------------------------------------------------------------
41
68
  export class TaskManager {
42
69
  data;
43
- /** TTL for pruning completed tasks. */
44
- ttlMs;
45
70
  /** File path for persistence. */
46
71
  filePath;
72
+ /** Fingerprint of the file as of our last read/write — used to detect foreign writes. */
73
+ seenFingerprint = '';
47
74
  /** Set of task IDs currently being executed (prevents re-firing). */
48
75
  executing = new Set();
49
- constructor(optTtlOrPath, optFilePath) {
50
- if (typeof optTtlOrPath === 'string') {
51
- this.filePath = optTtlOrPath;
52
- this.ttlMs = DEFAULT_TTL_MS;
53
- }
54
- else {
55
- this.ttlMs = optTtlOrPath ?? DEFAULT_TTL_MS;
56
- this.filePath = optFilePath ?? DEFAULT_FILE;
57
- }
76
+ constructor(filePath = DEFAULT_FILE) {
77
+ this.filePath = filePath;
58
78
  this.data = loadTasksFile(this.filePath);
59
- this.pruneOld(Date.now() - this.ttlMs);
79
+ this.seenFingerprint = fingerprint(this.filePath);
60
80
  }
61
81
  /** Reload the file from disk. */
62
82
  load() {
63
83
  this.data = loadTasksFile(this.filePath);
84
+ this.seenFingerprint = fingerprint(this.filePath);
64
85
  return this.data;
65
86
  }
66
- /** Persist to disk. */
87
+ /**
88
+ * Persist the in-memory array as-is. Prefer the mutating methods below —
89
+ * they reload first, so they can't clobber another writer's changes.
90
+ */
67
91
  save() {
68
92
  saveTasksFile(this.data, this.filePath);
93
+ this.seenFingerprint = fingerprint(this.filePath);
94
+ }
95
+ /** Re-read the file if someone else wrote it since we last looked. */
96
+ refreshIfStale() {
97
+ const current = fingerprint(this.filePath);
98
+ if (current !== '' && current !== this.seenFingerprint) {
99
+ this.data = loadTasksFile(this.filePath);
100
+ this.seenFingerprint = current;
101
+ }
102
+ }
103
+ /**
104
+ * The only write path: reload-if-stale → mutate → persist.
105
+ * All lookups must happen inside `fn`, since a refresh replaces the array.
106
+ */
107
+ mutate(fn) {
108
+ this.refreshIfStale();
109
+ const result = fn();
110
+ this.save();
111
+ return result;
69
112
  }
70
113
  // -----------------------------------------------------------------------
71
114
  // Creation
72
115
  // -----------------------------------------------------------------------
73
116
  /** Create a new task with the given mode and scope. */
74
117
  create(options) {
75
- const defaults = createTaskDefaults(options.mode, options.scope);
76
- const task = {
77
- id: generateTaskId(),
78
- title: options.title,
79
- description: options.description ?? '',
80
- status: 'scheduled_at' in options && options.scheduled_at ? (options.mode === 'human' ? 'todo' : 'pending') : defaults.status,
81
- priority: options.priority ?? 'medium',
82
- tags: options.tags ?? [],
83
- mode: options.mode,
84
- scheduled_at: options.scheduled_at,
85
- frequency: options.frequency ?? null,
86
- scope: options.scope,
87
- metadata: options.metadata,
88
- order: this.data.tasks.length,
89
- created_at: taskTimestamp(),
90
- completed_at: undefined,
91
- };
92
- if (task.status === 'done' || task.status === 'canceled') {
93
- task.completed_at = taskTimestamp();
94
- }
95
- this.data.tasks.push(task);
96
- this.save();
97
- return task;
118
+ return this.mutate(() => {
119
+ const task = {
120
+ id: generateTaskId(),
121
+ title: options.title,
122
+ description: options.description ?? '',
123
+ // human tasks land on the todo list; agent/notify tasks wait for the scheduler
124
+ status: options.mode === 'human' ? 'todo' : 'pending',
125
+ priority: options.priority ?? 'medium',
126
+ tags: options.tags ?? [],
127
+ mode: options.mode,
128
+ scheduled_at: options.scheduled_at,
129
+ frequency: options.frequency ?? null,
130
+ scope: options.scope,
131
+ metadata: options.metadata,
132
+ order: this.data.tasks.length,
133
+ created_at: taskTimestamp(),
134
+ completed_at: undefined,
135
+ };
136
+ this.data.tasks.push(task);
137
+ return task;
138
+ });
98
139
  }
99
140
  // -----------------------------------------------------------------------
100
141
  // Status updates
101
142
  // -----------------------------------------------------------------------
102
143
  /** Update a task's status and set completed_at if terminal. */
103
144
  updateTaskStatus(id, status) {
104
- const task = this.findTask(id);
105
- if (!task)
106
- return false;
107
- const oldStatus = task.status;
108
- task.status = status;
109
- const terminalStatuses = ['done', 'canceled', 'completed', 'failed'];
110
- if (terminalStatuses.includes(status)) {
111
- task.completed_at = taskTimestamp();
112
- }
113
- // For recurring auto tasks with frequency, reset to pending instead of done
114
- if (task.frequency && status === 'done') {
115
- task.status = 'pending';
116
- delete task.completed_at;
117
- }
118
- this.save();
119
- return true;
145
+ return this.mutate(() => {
146
+ const task = this.findTask(id);
147
+ if (!task)
148
+ return false;
149
+ task.status = status;
150
+ const terminalStatuses = ['done', 'canceled', 'completed', 'failed'];
151
+ if (terminalStatuses.includes(status)) {
152
+ task.completed_at = taskTimestamp();
153
+ }
154
+ // Recurring tasks never reach a terminal state they re-arm instead.
155
+ if (task.frequency && status === 'done') {
156
+ task.status = 'pending';
157
+ delete task.completed_at;
158
+ }
159
+ return true;
160
+ });
120
161
  }
121
162
  /** Advance through the manual task lifecycle (todo → in_progress → done). */
122
163
  setTaskStatus(id, status) {
123
164
  return this.updateTaskStatus(id, status);
124
165
  }
166
+ /**
167
+ * Apply a partial patch to a task. Use this instead of mutating the object
168
+ * returned by `findTask()` and calling `save()` — that pattern races.
169
+ */
170
+ updateTask(id, patch) {
171
+ return this.mutate(() => {
172
+ const task = this.findTask(id);
173
+ if (!task)
174
+ return undefined;
175
+ Object.assign(task, patch);
176
+ return task;
177
+ });
178
+ }
125
179
  // -----------------------------------------------------------------------
126
180
  // Query
127
181
  // -----------------------------------------------------------------------
128
- /** Find a single task by ID. */
182
+ /**
183
+ * Find a single task by ID. Falls back to a unique prefix match, so the
184
+ * truncated IDs shown by `/todo list` and `/cron list` are usable directly.
185
+ * Ambiguous prefixes resolve to undefined rather than an arbitrary task.
186
+ */
129
187
  findTask(id) {
130
- return this.data.tasks.find((t) => t.id === id);
188
+ if (!id)
189
+ return undefined;
190
+ const exact = this.data.tasks.find((t) => t.id === id);
191
+ if (exact)
192
+ return exact;
193
+ if (id.length < MIN_PREFIX_LENGTH)
194
+ return undefined;
195
+ const matches = this.data.tasks.filter((t) => t.id.startsWith(id));
196
+ return matches.length === 1 ? matches[0] : undefined;
131
197
  }
132
198
  /** List tasks with optional filters. */
133
199
  list(options) {
@@ -151,7 +217,7 @@ export class TaskManager {
151
217
  });
152
218
  return tasks;
153
219
  }
154
- /** Get pending scheduled tasks that are due (mode=auto or notify with scheduled_at <= now). */
220
+ /** Get pending scheduled tasks that are due (mode=agent or notify with scheduled_at <= now). */
155
221
  getNextTasks(now) {
156
222
  const reference = now ?? Date.now();
157
223
  return this.data.tasks.filter((t) => {
@@ -169,13 +235,16 @@ export class TaskManager {
169
235
  // -----------------------------------------------------------------------
170
236
  /** Mark a task as currently executing. */
171
237
  markExecuting(id) {
172
- const task = this.findTask(id);
173
- if (!task)
174
- return false;
175
- task.status = 'executing';
176
- this.executing.add(id);
177
- this.save();
178
- return true;
238
+ const marked = this.mutate(() => {
239
+ const task = this.findTask(id);
240
+ if (!task)
241
+ return false;
242
+ task.status = 'executing';
243
+ return true;
244
+ });
245
+ if (marked)
246
+ this.executing.add(id);
247
+ return marked;
179
248
  }
180
249
  /** Clear executing flag for a task. */
181
250
  clearExecuting(id) {
@@ -186,35 +255,60 @@ export class TaskManager {
186
255
  // -----------------------------------------------------------------------
187
256
  /** Cancel (soft-delete) a pending/fired task. */
188
257
  cancelTask(id) {
189
- const task = this.findTask(id);
190
- if (!task)
191
- return false;
192
- task.status = 'canceled';
193
- task.completed_at = taskTimestamp();
194
- this.save();
195
- return true;
258
+ return this.mutate(() => {
259
+ const task = this.findTask(id);
260
+ if (!task)
261
+ return false;
262
+ task.status = 'canceled';
263
+ task.completed_at = taskTimestamp();
264
+ return true;
265
+ });
196
266
  }
197
- /** Remove completed/fired/failed tasks (hard-delete). */
267
+ /**
268
+ * Remove completed/canceled/failed tasks (hard-delete).
269
+ * Explicit user action only — nothing calls this on a timer.
270
+ */
198
271
  clearCompleted() {
199
- const before = this.data.tasks.length;
200
- this.data.tasks = this.data.tasks.filter((t) => t.status !== 'done' && t.status !== 'canceled' && t.status !== 'completed' && t.status !== 'failed');
201
- const removed = before - this.data.tasks.length;
202
- if (removed > 0) {
203
- // Renormalize orders after removal
204
- this.renormalizeOrders();
205
- this.save();
206
- }
207
- return removed;
272
+ return this.mutate(() => {
273
+ const before = this.data.tasks.length;
274
+ this.data.tasks = this.data.tasks.filter((t) => t.status !== 'done' && t.status !== 'canceled' && t.status !== 'completed' && t.status !== 'failed');
275
+ const removed = before - this.data.tasks.length;
276
+ if (removed > 0) {
277
+ this.renormalizeOrders();
278
+ }
279
+ return removed;
280
+ });
208
281
  }
209
282
  /** Remove a task permanently. */
210
283
  removeTask(id) {
211
- const idx = this.data.tasks.findIndex((t) => t.id === id);
212
- if (idx === -1)
213
- return false;
214
- this.data.tasks.splice(idx, 1);
215
- this.renormalizeOrders();
216
- this.save();
217
- return true;
284
+ return this.mutate(() => {
285
+ const task = this.findTask(id);
286
+ if (!task)
287
+ return false;
288
+ const idx = this.data.tasks.indexOf(task);
289
+ if (idx === -1)
290
+ return false;
291
+ this.data.tasks.splice(idx, 1);
292
+ this.renormalizeOrders();
293
+ return true;
294
+ });
295
+ }
296
+ /** Reorder tasks to match the given ID sequence. IDs not listed keep their relative order. */
297
+ reorder(ids) {
298
+ return this.mutate(() => {
299
+ const rank = new Map();
300
+ ids.forEach((id, i) => {
301
+ const task = this.findTask(id);
302
+ if (task)
303
+ rank.set(task.id, i);
304
+ });
305
+ if (rank.size === 0)
306
+ return 0;
307
+ const fallback = rank.size;
308
+ this.data.tasks.sort((a, b) => (rank.get(a.id) ?? fallback + a.order) - (rank.get(b.id) ?? fallback + b.order));
309
+ this.renormalizeOrders();
310
+ return rank.size;
311
+ });
218
312
  }
219
313
  /** Renormalize the `order` field for all tasks in scope. */
220
314
  renormalizeOrders() {
@@ -223,29 +317,6 @@ export class TaskManager {
223
317
  task.order = order++;
224
318
  }
225
319
  }
226
- // -----------------------------------------------------------------------
227
- // Pruning
228
- // -----------------------------------------------------------------------
229
- /** Remove completed tasks older than the cutoff. Pending/pending-like tasks always kept. */
230
- pruneOld(cutoff) {
231
- const before = this.data.tasks.length;
232
- this.data.tasks = this.data.tasks.filter((t) => t.status === 'pending' || (t.scheduled_at && t.scheduled_at > cutoff) || t.created_at > new Date(cutoff).toISOString());
233
- // Actually, prune by timestamp: keep pending tasks forever, remove old completed ones
234
- this.data.tasks = this.data.tasks.filter((t) => {
235
- if (t.status === 'pending')
236
- return true;
237
- if (!t.completed_at)
238
- return t.created_at > new Date(cutoff).toISOString();
239
- const completedTime = new Date(t.completed_at).getTime();
240
- return completedTime >= cutoff;
241
- });
242
- const removed = before - this.data.tasks.length;
243
- if (removed > 0) {
244
- this.renormalizeOrders();
245
- this.save();
246
- }
247
- return removed;
248
- }
249
320
  /** Count of pending tasks. */
250
321
  get pendingCount() {
251
322
  return this.data.tasks.filter((t) => t.status === 'pending').length;
@@ -253,20 +324,24 @@ export class TaskManager {
253
324
  // -----------------------------------------------------------------------
254
325
  // Heartbeat helpers
255
326
  // -----------------------------------------------------------------------
256
- /** Check if a task is a recurring heartbeat (auto mode with frequency). */
327
+ /** Check if a task is a recurring heartbeat (agent mode with a frequency). */
257
328
  isHeartbeat(task) {
258
- return task.mode === 'agent' && task.frequency !== null;
329
+ return task.mode === 'agent' && task.frequency !== null && task.frequency !== undefined;
259
330
  }
260
331
  /** Get all pending heartbeat tasks. */
261
332
  getHeartbeats() {
262
- return this.data.tasks.filter((t) => t.mode === 'agent' && t.frequency !== null && t.status === 'pending');
333
+ return this.data.tasks.filter((t) => t.mode === 'agent' && t.frequency !== null && t.frequency !== undefined && t.status === 'pending');
263
334
  }
264
335
  // -----------------------------------------------------------------------
265
336
  // Heartbeat schedule management
266
337
  // -----------------------------------------------------------------------
267
338
  /**
268
339
  * Evaluate all five heartbeat schedule settings and ensure exactly one
269
- * pending auto+frequency task exists in the store. Called after settings change.
340
+ * pending agent+frequency task exists in the store. Called after settings change.
341
+ *
342
+ * If the winning schedule is unchanged, `scheduled_at` is left alone —
343
+ * recomputing it from "now" on every config change silently skips the slot
344
+ * the user was waiting for.
270
345
  */
271
346
  rescheduleFromSettings(settings, now) {
272
347
  const ref = now ?? Date.now();
@@ -279,10 +354,14 @@ export class TaskManager {
279
354
  this.updateTaskStatus(extra.id, 'canceled');
280
355
  }
281
356
  if (primary) {
282
- primary.frequency = picked;
283
- primary.title = `Heartbeat: ${scheduleLabel(picked.type)}`;
284
- primary.scheduled_at = computeNextFire(picked, ref);
285
- this.save();
357
+ const alreadyArmed = primary.frequency?.type === picked.type && primary.frequency.value === picked.value;
358
+ if (alreadyArmed)
359
+ return;
360
+ this.updateTask(primary.id, {
361
+ frequency: picked,
362
+ title: `Heartbeat: ${scheduleLabel(picked.type)}`,
363
+ scheduled_at: computeNextFire(picked, ref),
364
+ });
286
365
  }
287
366
  else {
288
367
  this.create({
@@ -305,4 +384,26 @@ export class TaskManager {
305
384
  return count;
306
385
  }
307
386
  }
387
+ // ---------------------------------------------------------------------------
388
+ // Process-shared instances
389
+ // ---------------------------------------------------------------------------
390
+ const instances = new Map();
391
+ /**
392
+ * Get the process-shared TaskManager for a store path. Every writer in a
393
+ * process must go through this — separate instances hold separate copies of
394
+ * the task array and overwrite each other on save.
395
+ */
396
+ export function getTaskManager(filePath) {
397
+ const key = resolve(filePath ?? DEFAULT_FILE);
398
+ let instance = instances.get(key);
399
+ if (!instance) {
400
+ instance = new TaskManager(key);
401
+ instances.set(key, instance);
402
+ }
403
+ return instance;
404
+ }
405
+ /** Drop all memoized instances. Test helper. */
406
+ export function resetTaskManagers() {
407
+ instances.clear();
408
+ }
308
409
  //# sourceMappingURL=task-manager.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"task-manager.js","sourceRoot":"","sources":["../../src/task-manager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"task-manager.js","sourceRoot":"","sources":["../../src/task-manager.ts"],"names":[],"mappings":"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"}
@@ -1,10 +1,37 @@
1
1
  /**
2
- * Migration utility: reads old todo.json and cron.json, writes tasks.json.
3
- * Runs once — if tasks.json already exists, migration is skipped.
2
+ * Migration utilities.
3
+ *
4
+ * - `migrateTasks()` — one-shot merge of legacy todo.json + cron.json into tasks.json.
5
+ * - `repairTaskShapes()` — idempotent in-place fix-up of tasks written by older
6
+ * versions, run on every startup.
4
7
  */
5
8
  import type { TasksFile } from './unified-task.js';
6
9
  /**
7
10
  * Main migration: merges todo.json and cron.json into tasks.json.
8
11
  */
9
12
  export declare function migrateTasks(oldTodoPath?: string, oldCronPath?: string, newTasksPath?: string): TasksFile | null;
13
+ export interface RepairReport {
14
+ /** Tasks whose `mode` was renamed. */
15
+ modesRenamed: number;
16
+ /** Scheduled non-human tasks lifted out of an unfireable status. */
17
+ statusesFixed: number;
18
+ /** Missing/invalid scalar fields given defaults. */
19
+ fieldsFilled: number;
20
+ /** Modes we did not recognise and deliberately left alone. */
21
+ unknownModes: string[];
22
+ }
23
+ /**
24
+ * Repair tasks written by older versions, in place.
25
+ *
26
+ * Two shapes exist in real stores and neither can ever fire:
27
+ * - `mode: 'auto'` — renamed to `'agent'`. `normalizeTask()` in the Todo tool
28
+ * coerces unrecognised modes to `'human'`, which silently demoted scheduled
29
+ * tasks into inert todo-list items.
30
+ * - a scheduled `agent`/`notify` task sitting on `status: 'todo'` — the
31
+ * scheduler only ever looks at `'pending'`.
32
+ *
33
+ * Unknown modes are reported, not rewritten — a silent coercion is what caused
34
+ * the original data loss.
35
+ */
36
+ export declare function repairTaskShapes(tasksPath?: string): RepairReport | null;
10
37
  //# sourceMappingURL=task-migration.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"task-migration.d.ts","sourceRoot":"","sources":["../../src/task-migration.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,OAAO,KAAK,EAAkD,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAqGnG;;GAEG;AACH,wBAAgB,YAAY,CAAC,WAAW,CAAC,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CA0EhH"}
1
+ {"version":3,"file":"task-migration.d.ts","sourceRoot":"","sources":["../../src/task-migration.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAMH,OAAO,KAAK,EAAkD,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAqGnG;;GAEG;AACH,wBAAgB,YAAY,CAAC,WAAW,CAAC,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CA4EhH;AAYD,MAAM,WAAW,YAAY;IAC3B,sCAAsC;IACtC,YAAY,EAAE,MAAM,CAAC;IACrB,oEAAoE;IACpE,aAAa,EAAE,MAAM,CAAC;IACtB,oDAAoD;IACpD,YAAY,EAAE,MAAM,CAAC;IACrB,8DAA8D;IAC9D,YAAY,EAAE,MAAM,EAAE,CAAC;CACxB;AAOD;;;;;;;;;;;;GAYG;AACH,wBAAgB,gBAAgB,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI,CA8ExE"}