@todu/engine 0.1.1 → 0.2.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.
package/dist/notes.js CHANGED
@@ -1,28 +1,188 @@
1
1
  import crypto from "node:crypto";
2
2
  import { createNoteId, createNotesDocument, err, notFound, ok, validateCreateNoteInput, validateUpdateNoteInput, } from "@todu/core";
3
+ const NOTES_DIAGNOSTICS_ENV = "TODU_NOTES_DIAGNOSTICS";
3
4
  // ============================================================================
4
- // Note namespace — CRUD on NotesDocument
5
+ // Note namespace — CRUD on partitioned NotesDocument buckets
5
6
  // ============================================================================
6
7
  export function createNoteNamespace(catalog, repo) {
7
- /**
8
- * Get or create the global NotesDocument.
9
- */
10
- async function getOrCreateNotesDoc() {
11
- const catalogDoc = catalog.doc();
12
- const existingDocId = catalogDoc?.notesDocId;
13
- if (existingDocId) {
14
- return await repo.find(existingDocId);
8
+ function diagnosticsEnabled() {
9
+ const value = process.env[NOTES_DIAGNOSTICS_ENV];
10
+ return value === "1" || value?.toLowerCase() === "true";
11
+ }
12
+ function emitDiagnostic(event, payload) {
13
+ if (!diagnosticsEnabled())
14
+ return;
15
+ console.info(`[notes] ${event} ${JSON.stringify(payload)}`);
16
+ }
17
+ function noteBucketKeyForNote(note) {
18
+ if (note.entityType && note.entityId) {
19
+ return `entity:${note.entityType}:${note.entityId}`;
15
20
  }
21
+ // Standalone notes partition by month (YYYY-MM)
22
+ return `journal:${note.createdAt.slice(0, 7)}`;
23
+ }
24
+ function noteBucketKeyForFilter(filter) {
25
+ if (filter.entityType && filter.entityId) {
26
+ return `entity:${filter.entityType}:${filter.entityId}`;
27
+ }
28
+ return null;
29
+ }
30
+ async function getBucketHandle(bucketKey) {
31
+ const catalogDoc = catalog.doc();
32
+ const docId = catalogDoc?.notesBucketDocIds?.[bucketKey];
33
+ if (!docId)
34
+ return null;
35
+ return repo.find(docId);
36
+ }
37
+ async function getOrCreateBucketHandle(bucketKey) {
38
+ const existing = await getBucketHandle(bucketKey);
39
+ if (existing)
40
+ return existing;
16
41
  const handle = repo.create();
17
42
  const template = createNotesDocument();
18
43
  handle.change((doc) => {
19
44
  doc.notes = template.notes;
20
45
  });
21
46
  catalog.change((doc) => {
22
- doc.notesDocId = handle.documentId;
47
+ if (doc.notesBucketDocIds === undefined || doc.notesBucketDocIds === null) {
48
+ doc.notesBucketDocIds = {};
49
+ }
50
+ doc.notesBucketDocIds[bucketKey] = handle.documentId;
23
51
  });
24
52
  return handle;
25
53
  }
54
+ function appendNotesWithoutDuplicates(handle, notes) {
55
+ handle.change((doc) => {
56
+ const existingIds = new Set(doc.notes.map((note) => note.id));
57
+ for (const note of notes) {
58
+ if (!existingIds.has(note.id)) {
59
+ doc.notes.push(toStorageNote(note));
60
+ existingIds.add(note.id);
61
+ }
62
+ }
63
+ });
64
+ }
65
+ async function migrateLegacyGlobalNotesDoc() {
66
+ const catalogDoc = catalog.doc();
67
+ if (!catalogDoc?.notesDocId)
68
+ return;
69
+ const legacyHandle = await repo.find(catalogDoc.notesDocId);
70
+ const legacyDoc = legacyHandle.doc();
71
+ const notesToMigrate = legacyDoc?.notes.map(cloneNote) ?? [];
72
+ if (notesToMigrate.length === 0) {
73
+ catalog.change((doc) => {
74
+ delete doc.notesDocId;
75
+ });
76
+ return;
77
+ }
78
+ const byBucket = new Map();
79
+ for (const note of notesToMigrate) {
80
+ const bucketKey = noteBucketKeyForNote(note);
81
+ const bucketNotes = byBucket.get(bucketKey);
82
+ if (bucketNotes) {
83
+ bucketNotes.push(note);
84
+ }
85
+ else {
86
+ byBucket.set(bucketKey, [note]);
87
+ }
88
+ }
89
+ for (const [bucketKey, notes] of byBucket) {
90
+ const bucketHandle = await getOrCreateBucketHandle(bucketKey);
91
+ appendNotesWithoutDuplicates(bucketHandle, notes);
92
+ }
93
+ catalog.change((doc) => {
94
+ if (doc.noteBucketByNoteId === undefined || doc.noteBucketByNoteId === null) {
95
+ doc.noteBucketByNoteId = {};
96
+ }
97
+ for (const note of notesToMigrate) {
98
+ doc.noteBucketByNoteId[note.id] = noteBucketKeyForNote(note);
99
+ }
100
+ delete doc.notesDocId;
101
+ });
102
+ // Remove migrated entries from legacy doc to avoid future duplicate migrations.
103
+ legacyHandle.change((doc) => {
104
+ doc.notes.splice(0, doc.notes.length);
105
+ });
106
+ emitDiagnostic("legacy-migration", {
107
+ migratedNoteCount: notesToMigrate.length,
108
+ targetBucketCount: byBucket.size,
109
+ });
110
+ }
111
+ async function ensurePartitionModelReady() {
112
+ const catalogDoc = catalog.doc();
113
+ if (!catalogDoc)
114
+ return;
115
+ if (catalogDoc.notesBucketDocIds === undefined ||
116
+ catalogDoc.notesBucketDocIds === null ||
117
+ catalogDoc.noteBucketByNoteId === undefined ||
118
+ catalogDoc.noteBucketByNoteId === null) {
119
+ catalog.change((doc) => {
120
+ if (doc.notesBucketDocIds === undefined || doc.notesBucketDocIds === null) {
121
+ doc.notesBucketDocIds = {};
122
+ }
123
+ if (doc.noteBucketByNoteId === undefined || doc.noteBucketByNoteId === null) {
124
+ doc.noteBucketByNoteId = {};
125
+ }
126
+ });
127
+ }
128
+ await migrateLegacyGlobalNotesDoc();
129
+ }
130
+ async function findNoteLocation(id) {
131
+ const catalogDoc = catalog.doc();
132
+ if (!catalogDoc)
133
+ return null;
134
+ const indexedBucketKey = catalogDoc.noteBucketByNoteId?.[id];
135
+ if (indexedBucketKey) {
136
+ const handle = await getBucketHandle(indexedBucketKey);
137
+ const notesDoc = handle?.doc();
138
+ if (handle && notesDoc) {
139
+ const index = notesDoc.notes.findIndex((n) => n.id === id);
140
+ if (index !== -1) {
141
+ return { bucketKey: indexedBucketKey, handle, index };
142
+ }
143
+ }
144
+ // Repair stale index entry.
145
+ catalog.change((doc) => {
146
+ if (!doc.noteBucketByNoteId)
147
+ return;
148
+ delete doc.noteBucketByNoteId[id];
149
+ });
150
+ }
151
+ for (const [bucketKey, docId] of Object.entries(catalogDoc.notesBucketDocIds ?? {})) {
152
+ const handle = await repo.find(docId);
153
+ const notesDoc = handle.doc();
154
+ if (!notesDoc)
155
+ continue;
156
+ const index = notesDoc.notes.findIndex((n) => n.id === id);
157
+ if (index === -1)
158
+ continue;
159
+ catalog.change((doc) => {
160
+ if (doc.noteBucketByNoteId === undefined || doc.noteBucketByNoteId === null) {
161
+ doc.noteBucketByNoteId = {};
162
+ }
163
+ doc.noteBucketByNoteId[id] = bucketKey;
164
+ });
165
+ return { bucketKey, handle, index };
166
+ }
167
+ return null;
168
+ }
169
+ function listBucketKeys(filter) {
170
+ const catalogDoc = catalog.doc();
171
+ if (!catalogDoc?.notesBucketDocIds)
172
+ return [];
173
+ const allBucketKeys = Object.keys(catalogDoc.notesBucketDocIds);
174
+ if (!filter)
175
+ return allBucketKeys;
176
+ const exactEntityBucketKey = noteBucketKeyForFilter(filter);
177
+ if (exactEntityBucketKey) {
178
+ return catalogDoc.notesBucketDocIds[exactEntityBucketKey] ? [exactEntityBucketKey] : [];
179
+ }
180
+ if (filter.entityType) {
181
+ const prefix = `entity:${filter.entityType}:`;
182
+ return allBucketKeys.filter((bucketKey) => bucketKey.startsWith(prefix));
183
+ }
184
+ return allBucketKeys;
185
+ }
26
186
  /**
27
187
  * Verify that an entity exists (task or project).
28
188
  */
@@ -50,6 +210,7 @@ export function createNoteNamespace(catalog, repo) {
50
210
  const validationErr = validateCreateNoteInput(input);
51
211
  if (validationErr)
52
212
  return err(validationErr);
213
+ await ensurePartitionModelReady();
53
214
  // Verify entity exists if attached
54
215
  if (input.entityType && input.entityId) {
55
216
  const exists = await entityExists(input.entityType, input.entityId);
@@ -70,21 +231,35 @@ export function createNoteNamespace(catalog, repo) {
70
231
  note.entityType = input.entityType;
71
232
  if (input.entityId !== undefined)
72
233
  note.entityId = input.entityId;
73
- const notesHandle = await getOrCreateNotesDoc();
74
- notesHandle.change((doc) => {
75
- doc.notes.push(note);
234
+ const bucketKey = noteBucketKeyForNote(note);
235
+ const notesHandle = await getOrCreateBucketHandle(bucketKey);
236
+ appendNotesWithoutDuplicates(notesHandle, [note]);
237
+ catalog.change((doc) => {
238
+ if (doc.noteBucketByNoteId === undefined || doc.noteBucketByNoteId === null) {
239
+ doc.noteBucketByNoteId = {};
240
+ }
241
+ doc.noteBucketByNoteId[id] = bucketKey;
242
+ });
243
+ emitDiagnostic("create", {
244
+ noteId: id,
245
+ bucketKey,
76
246
  });
77
247
  return ok(note);
78
248
  },
79
249
  async list(filter) {
80
- const catalogDoc = catalog.doc();
81
- if (!catalogDoc?.notesDocId)
82
- return ok([]);
83
- const notesHandle = await repo.find(catalogDoc.notesDocId);
84
- const notesDoc = notesHandle.doc();
85
- if (!notesDoc)
250
+ await ensurePartitionModelReady();
251
+ const bucketKeys = listBucketKeys(filter);
252
+ if (bucketKeys.length === 0)
86
253
  return ok([]);
87
- let notes = notesDoc.notes.map(cloneNote);
254
+ const allNotes = [];
255
+ for (const bucketKey of bucketKeys) {
256
+ const bucketHandle = await getBucketHandle(bucketKey);
257
+ const bucketDoc = bucketHandle?.doc();
258
+ if (!bucketDoc)
259
+ continue;
260
+ allNotes.push(...bucketDoc.notes.map(cloneNote));
261
+ }
262
+ let notes = allNotes;
88
263
  // Apply filters
89
264
  if (filter?.entityType) {
90
265
  notes = notes.filter((n) => n.entityType === filter.entityType);
@@ -93,31 +268,33 @@ export function createNoteNamespace(catalog, repo) {
93
268
  notes = notes.filter((n) => n.entityId === filter.entityId);
94
269
  }
95
270
  if (filter?.tag) {
96
- notes = notes.filter((n) => n.tags.includes(filter.tag));
271
+ const tag = filter.tag;
272
+ notes = notes.filter((n) => n.tags.includes(tag));
97
273
  }
98
274
  if (filter?.author) {
99
- notes = notes.filter((n) => n.author === filter.author);
275
+ const author = filter.author;
276
+ notes = notes.filter((n) => n.author === author);
100
277
  }
101
278
  // Sort by createdAt desc (newest first)
102
279
  notes.sort((a, b) => b.createdAt.localeCompare(a.createdAt));
280
+ emitDiagnostic("list", {
281
+ bucketCount: bucketKeys.length,
282
+ resultCount: notes.length,
283
+ entityType: filter?.entityType,
284
+ hasEntityId: filter?.entityId !== undefined,
285
+ });
103
286
  return ok(notes);
104
287
  },
105
288
  async update(id, input) {
106
289
  const validationErr = validateUpdateNoteInput(input);
107
290
  if (validationErr)
108
291
  return err(validationErr);
109
- const catalogDoc = catalog.doc();
110
- if (!catalogDoc?.notesDocId)
292
+ await ensurePartitionModelReady();
293
+ const location = await findNoteLocation(id);
294
+ if (!location)
111
295
  return err(notFound("note", id));
112
- const notesHandle = await repo.find(catalogDoc.notesDocId);
113
- const notesDoc = notesHandle.doc();
114
- if (!notesDoc)
115
- return err(notFound("note", id));
116
- const index = notesDoc.notes.findIndex((n) => n.id === id);
117
- if (index === -1)
118
- return err(notFound("note", id));
119
- notesHandle.change((doc) => {
120
- const note = doc.notes[index];
296
+ location.handle.change((doc) => {
297
+ const note = doc.notes[location.index];
121
298
  if (input.content !== undefined)
122
299
  note.content = input.content.trim();
123
300
  if (input.tags !== undefined) {
@@ -128,36 +305,58 @@ export function createNoteNamespace(catalog, repo) {
128
305
  note.tags.push(tag);
129
306
  }
130
307
  });
131
- const updated = notesHandle.doc().notes[index];
308
+ const updated = location.handle.doc()?.notes[location.index];
309
+ if (!updated)
310
+ return err(notFound("note", id));
311
+ emitDiagnostic("update", {
312
+ noteId: id,
313
+ bucketKey: location.bucketKey,
314
+ });
132
315
  return ok(cloneNote(updated));
133
316
  },
134
317
  async delete(id) {
135
- const catalogDoc = catalog.doc();
136
- if (!catalogDoc?.notesDocId)
137
- return err(notFound("note", id));
138
- const notesHandle = await repo.find(catalogDoc.notesDocId);
139
- const notesDoc = notesHandle.doc();
140
- if (!notesDoc)
141
- return err(notFound("note", id));
142
- const index = notesDoc.notes.findIndex((n) => n.id === id);
143
- if (index === -1)
318
+ await ensurePartitionModelReady();
319
+ const location = await findNoteLocation(id);
320
+ if (!location)
144
321
  return err(notFound("note", id));
145
- notesHandle.change((doc) => {
146
- doc.notes.splice(index, 1);
322
+ location.handle.change((doc) => {
323
+ doc.notes.splice(location.index, 1);
324
+ });
325
+ const bucketIsEmpty = (location.handle.doc()?.notes.length ?? 0) === 0;
326
+ catalog.change((doc) => {
327
+ if (doc.noteBucketByNoteId !== undefined && doc.noteBucketByNoteId !== null) {
328
+ delete doc.noteBucketByNoteId[id];
329
+ }
330
+ if (bucketIsEmpty &&
331
+ doc.notesBucketDocIds !== undefined &&
332
+ doc.notesBucketDocIds !== null) {
333
+ delete doc.notesBucketDocIds[location.bucketKey];
334
+ }
335
+ });
336
+ emitDiagnostic("delete", {
337
+ noteId: id,
338
+ bucketKey: location.bucketKey,
339
+ bucketDeleted: bucketIsEmpty,
147
340
  });
148
341
  return ok(undefined);
149
342
  },
150
343
  };
151
344
  }
152
- function cloneNote(n) {
153
- return {
345
+ function toStorageNote(n) {
346
+ const note = {
154
347
  id: n.id,
155
348
  content: n.content,
156
349
  author: n.author,
157
- entityType: n.entityType,
158
- entityId: n.entityId,
159
350
  tags: [...n.tags],
160
351
  createdAt: n.createdAt,
161
352
  };
353
+ if (n.entityType !== undefined)
354
+ note.entityType = n.entityType;
355
+ if (n.entityId !== undefined)
356
+ note.entityId = n.entityId;
357
+ return note;
358
+ }
359
+ function cloneNote(n) {
360
+ return toStorageNote(n);
162
361
  }
163
362
  //# sourceMappingURL=notes.js.map
package/dist/notes.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"notes.js","sourceRoot":"","sources":["../src/notes.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"notes.js","sourceRoot":"","sources":["../src/notes.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,aAAa,CAAC;AAEjC,OAAO,EAGL,YAAY,EACZ,mBAAmB,EACnB,GAAG,EAKH,QAAQ,EACR,EAAE,EAIF,uBAAuB,EACvB,uBAAuB,GACxB,MAAM,YAAY,CAAC;AAGpB,MAAM,qBAAqB,GAAG,wBAAwB,CAAC;AAQvD,+EAA+E;AAC/E,+DAA6D;AAC7D,+EAA+E;AAE/E,MAAM,UAAU,mBAAmB,CACjC,OAAmC,EACnC,IAAU,EACK;IACf,SAAS,kBAAkB,GAAY;QACrC,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;QACjD,OAAO,KAAK,KAAK,GAAG,IAAI,KAAK,EAAE,WAAW,EAAE,KAAK,MAAM,CAAC;IAAA,CACzD;IAED,SAAS,cAAc,CAAC,KAAa,EAAE,OAAgC,EAAQ;QAC7E,IAAI,CAAC,kBAAkB,EAAE;YAAE,OAAO;QAClC,OAAO,CAAC,IAAI,CAAC,WAAW,KAAK,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAAA,CAC7D;IAED,SAAS,oBAAoB,CAAC,IAAU,EAAU;QAChD,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YACrC,OAAO,UAAU,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;QACtD,CAAC;QAED,gDAAgD;QAChD,OAAO,WAAW,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;IAAA,CAChD;IAED,SAAS,sBAAsB,CAAC,MAAkB,EAAiB;QACjE,IAAI,MAAM,CAAC,UAAU,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;YACzC,OAAO,UAAU,MAAM,CAAC,UAAU,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;QAC1D,CAAC;QACD,OAAO,IAAI,CAAC;IAAA,CACb;IAED,KAAK,UAAU,eAAe,CAAC,SAAiB,EAA4C;QAC1F,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;QACjC,MAAM,KAAK,GAAG,UAAU,EAAE,iBAAiB,EAAE,CAAC,SAAS,CAAC,CAAC;QACzD,IAAI,CAAC,KAAK;YAAE,OAAO,IAAI,CAAC;QACxB,OAAO,IAAI,CAAC,IAAI,CAAgB,KAAmB,CAAC,CAAC;IAAA,CACtD;IAED,KAAK,UAAU,uBAAuB,CAAC,SAAiB,EAAqC;QAC3F,MAAM,QAAQ,GAAG,MAAM,eAAe,CAAC,SAAS,CAAC,CAAC;QAClD,IAAI,QAAQ;YAAE,OAAO,QAAQ,CAAC;QAE9B,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAiB,CAAC;QAC5C,MAAM,QAAQ,GAAG,mBAAmB,EAAE,CAAC;QACvC,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC;YACrB,GAAG,CAAC,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC;QAAA,CAC5B,CAAC,CAAC;QAEH,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC;YACtB,IAAI,GAAG,CAAC,iBAAiB,KAAK,SAAS,IAAI,GAAG,CAAC,iBAAiB,KAAK,IAAI,EAAE,CAAC;gBAC1E,GAAG,CAAC,iBAAiB,GAAG,EAAE,CAAC;YAC7B,CAAC;YACD,GAAG,CAAC,iBAAiB,CAAC,SAAS,CAAC,GAAG,MAAM,CAAC,UAAU,CAAC;QAAA,CACtD,CAAC,CAAC;QAEH,OAAO,MAAM,CAAC;IAAA,CACf;IAED,SAAS,4BAA4B,CAAC,MAAgC,EAAE,KAAa,EAAQ;QAC3F,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC;YACrB,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;YAC9D,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;gBACzB,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;oBAC9B,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC;oBACpC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBAC3B,CAAC;YACH,CAAC;QAAA,CACF,CAAC,CAAC;IAAA,CACJ;IAED,KAAK,UAAU,2BAA2B,GAAkB;QAC1D,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;QACjC,IAAI,CAAC,UAAU,EAAE,UAAU;YAAE,OAAO;QAEpC,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,IAAI,CAAgB,UAAU,CAAC,UAAwB,CAAC,CAAC;QACzF,MAAM,SAAS,GAAG,YAAY,CAAC,GAAG,EAAE,CAAC;QACrC,MAAM,cAAc,GAAG,SAAS,EAAE,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;QAE7D,IAAI,cAAc,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAChC,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC;gBACtB,OAAO,GAAG,CAAC,UAAU,CAAC;YAAA,CACvB,CAAC,CAAC;YACH,OAAO;QACT,CAAC;QAED,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAkB,CAAC;QAC3C,KAAK,MAAM,IAAI,IAAI,cAAc,EAAE,CAAC;YAClC,MAAM,SAAS,GAAG,oBAAoB,CAAC,IAAI,CAAC,CAAC;YAC7C,MAAM,WAAW,GAAG,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;YAC5C,IAAI,WAAW,EAAE,CAAC;gBAChB,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACzB,CAAC;iBAAM,CAAC;gBACN,QAAQ,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;YAClC,CAAC;QACH,CAAC;QAED,KAAK,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,IAAI,QAAQ,EAAE,CAAC;YAC1C,MAAM,YAAY,GAAG,MAAM,uBAAuB,CAAC,SAAS,CAAC,CAAC;YAC9D,4BAA4B,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;QACpD,CAAC;QAED,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC;YACtB,IAAI,GAAG,CAAC,kBAAkB,KAAK,SAAS,IAAI,GAAG,CAAC,kBAAkB,KAAK,IAAI,EAAE,CAAC;gBAC5E,GAAG,CAAC,kBAAkB,GAAG,EAAE,CAAC;YAC9B,CAAC;YAED,KAAK,MAAM,IAAI,IAAI,cAAc,EAAE,CAAC;gBAClC,GAAG,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,oBAAoB,CAAC,IAAI,CAAC,CAAC;YAC/D,CAAC;YAED,OAAO,GAAG,CAAC,UAAU,CAAC;QAAA,CACvB,CAAC,CAAC;QAEH,gFAAgF;QAChF,YAAY,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC;YAC3B,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAAA,CACvC,CAAC,CAAC;QAEH,cAAc,CAAC,kBAAkB,EAAE;YACjC,iBAAiB,EAAE,cAAc,CAAC,MAAM;YACxC,iBAAiB,EAAE,QAAQ,CAAC,IAAI;SACjC,CAAC,CAAC;IAAA,CACJ;IAED,KAAK,UAAU,yBAAyB,GAAkB;QACxD,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;QACjC,IAAI,CAAC,UAAU;YAAE,OAAO;QAExB,IACE,UAAU,CAAC,iBAAiB,KAAK,SAAS;YAC1C,UAAU,CAAC,iBAAiB,KAAK,IAAI;YACrC,UAAU,CAAC,kBAAkB,KAAK,SAAS;YAC3C,UAAU,CAAC,kBAAkB,KAAK,IAAI,EACtC,CAAC;YACD,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC;gBACtB,IAAI,GAAG,CAAC,iBAAiB,KAAK,SAAS,IAAI,GAAG,CAAC,iBAAiB,KAAK,IAAI,EAAE,CAAC;oBAC1E,GAAG,CAAC,iBAAiB,GAAG,EAAE,CAAC;gBAC7B,CAAC;gBACD,IAAI,GAAG,CAAC,kBAAkB,KAAK,SAAS,IAAI,GAAG,CAAC,kBAAkB,KAAK,IAAI,EAAE,CAAC;oBAC5E,GAAG,CAAC,kBAAkB,GAAG,EAAE,CAAC;gBAC9B,CAAC;YAAA,CACF,CAAC,CAAC;QACL,CAAC;QAED,MAAM,2BAA2B,EAAE,CAAC;IAAA,CACrC;IAED,KAAK,UAAU,gBAAgB,CAAC,EAAU,EAAgC;QACxE,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;QACjC,IAAI,CAAC,UAAU;YAAE,OAAO,IAAI,CAAC;QAE7B,MAAM,gBAAgB,GAAG,UAAU,CAAC,kBAAkB,EAAE,CAAC,EAAE,CAAC,CAAC;QAC7D,IAAI,gBAAgB,EAAE,CAAC;YACrB,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,gBAAgB,CAAC,CAAC;YACvD,MAAM,QAAQ,GAAG,MAAM,EAAE,GAAG,EAAE,CAAC;YAC/B,IAAI,MAAM,IAAI,QAAQ,EAAE,CAAC;gBACvB,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;gBAC3D,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE,CAAC;oBACjB,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;gBACxD,CAAC;YACH,CAAC;YAED,4BAA4B;YAC5B,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC;gBACtB,IAAI,CAAC,GAAG,CAAC,kBAAkB;oBAAE,OAAO;gBACpC,OAAO,GAAG,CAAC,kBAAkB,CAAC,EAAE,CAAC,CAAC;YAAA,CACnC,CAAC,CAAC;QACL,CAAC;QAED,KAAK,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,iBAAiB,IAAI,EAAE,CAAC,EAAE,CAAC;YACpF,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,IAAI,CAAgB,KAAmB,CAAC,CAAC;YACnE,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,EAAE,CAAC;YAC9B,IAAI,CAAC,QAAQ;gBAAE,SAAS;YAExB,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;YAC3D,IAAI,KAAK,KAAK,CAAC,CAAC;gBAAE,SAAS;YAE3B,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC;gBACtB,IAAI,GAAG,CAAC,kBAAkB,KAAK,SAAS,IAAI,GAAG,CAAC,kBAAkB,KAAK,IAAI,EAAE,CAAC;oBAC5E,GAAG,CAAC,kBAAkB,GAAG,EAAE,CAAC;gBAC9B,CAAC;gBACD,GAAG,CAAC,kBAAkB,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC;YAAA,CACxC,CAAC,CAAC;YAEH,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;QACtC,CAAC;QAED,OAAO,IAAI,CAAC;IAAA,CACb;IAED,SAAS,cAAc,CAAC,MAAmB,EAAY;QACrD,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;QACjC,IAAI,CAAC,UAAU,EAAE,iBAAiB;YAAE,OAAO,EAAE,CAAC;QAE9C,MAAM,aAAa,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAC;QAEhE,IAAI,CAAC,MAAM;YAAE,OAAO,aAAa,CAAC;QAElC,MAAM,oBAAoB,GAAG,sBAAsB,CAAC,MAAM,CAAC,CAAC;QAC5D,IAAI,oBAAoB,EAAE,CAAC;YACzB,OAAO,UAAU,CAAC,iBAAiB,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC1F,CAAC;QAED,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;YACtB,MAAM,MAAM,GAAG,UAAU,MAAM,CAAC,UAAU,GAAG,CAAC;YAC9C,OAAO,aAAa,CAAC,MAAM,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;QAC3E,CAAC;QAED,OAAO,aAAa,CAAC;IAAA,CACtB;IAED;;OAEG;IACH,KAAK,UAAU,YAAY,CAAC,UAAkB,EAAE,QAAgB,EAAoB;QAClF,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;QACjC,IAAI,CAAC,UAAU;YAAE,OAAO,KAAK,CAAC;QAE9B,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;YAC7B,OAAO,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,QAAQ,CAAC,CAAC;QAC5D,CAAC;QAED,IAAI,UAAU,KAAK,MAAM,EAAE,CAAC;YAC1B,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,cAAc,CAAC,EAAE,CAAC;gBAC7D,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,IAAI,CAAmB,KAAmB,CAAC,CAAC;gBACtE,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,EAAE,CAAC;gBACzB,IAAI,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,QAAQ,CAAC;oBAAE,OAAO,IAAI,CAAC;YAC7D,CAAC;YACD,OAAO,KAAK,CAAC;QACf,CAAC;QAED,+CAA+C;QAC/C,OAAO,IAAI,CAAC;IAAA,CACb;IAED,OAAO;QACL,KAAK,CAAC,MAAM,CAAC,KAAsB,EAAyB;YAC1D,MAAM,aAAa,GAAG,uBAAuB,CAAC,KAAK,CAAC,CAAC;YACrD,IAAI,aAAa;gBAAE,OAAO,GAAG,CAAC,aAAa,CAAC,CAAC;YAE7C,MAAM,yBAAyB,EAAE,CAAC;YAElC,mCAAmC;YACnC,IAAI,KAAK,CAAC,UAAU,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;gBACvC,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;gBACpE,IAAI,CAAC,MAAM,EAAE,CAAC;oBACZ,OAAO,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;gBACzD,CAAC;YACH,CAAC;YAED,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;YACrC,MAAM,EAAE,GAAG,YAAY,CAAC,QAAQ,MAAM,CAAC,UAAU,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;YAEnE,MAAM,IAAI,GAAS;gBACjB,EAAE;gBACF,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE;gBAC7B,MAAM,EAAE,KAAK,CAAC,MAAM,IAAI,MAAM;gBAC9B,IAAI,EAAE,KAAK,CAAC,IAAI,IAAI,EAAE;gBACtB,SAAS,EAAE,GAAG;aACf,CAAC;YACF,IAAI,KAAK,CAAC,UAAU,KAAK,SAAS;gBAAE,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC,UAAU,CAAC;YACvE,IAAI,KAAK,CAAC,QAAQ,KAAK,SAAS;gBAAE,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC;YAEjE,MAAM,SAAS,GAAG,oBAAoB,CAAC,IAAI,CAAC,CAAC;YAC7C,MAAM,WAAW,GAAG,MAAM,uBAAuB,CAAC,SAAS,CAAC,CAAC;YAC7D,4BAA4B,CAAC,WAAW,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;YAElD,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC;gBACtB,IAAI,GAAG,CAAC,kBAAkB,KAAK,SAAS,IAAI,GAAG,CAAC,kBAAkB,KAAK,IAAI,EAAE,CAAC;oBAC5E,GAAG,CAAC,kBAAkB,GAAG,EAAE,CAAC;gBAC9B,CAAC;gBACD,GAAG,CAAC,kBAAkB,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC;YAAA,CACxC,CAAC,CAAC;YAEH,cAAc,CAAC,QAAQ,EAAE;gBACvB,MAAM,EAAE,EAAE;gBACV,SAAS;aACV,CAAC,CAAC;YAEH,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC;QAAA,CACjB;QAED,KAAK,CAAC,IAAI,CAAC,MAAmB,EAA2B;YACvD,MAAM,yBAAyB,EAAE,CAAC;YAElC,MAAM,UAAU,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;YAC1C,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC;gBAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC;YAE3C,MAAM,QAAQ,GAAW,EAAE,CAAC;YAE5B,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;gBACnC,MAAM,YAAY,GAAG,MAAM,eAAe,CAAC,SAAS,CAAC,CAAC;gBACtD,MAAM,SAAS,GAAG,YAAY,EAAE,GAAG,EAAE,CAAC;gBACtC,IAAI,CAAC,SAAS;oBAAE,SAAS;gBAEzB,QAAQ,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC;YACnD,CAAC;YAED,IAAI,KAAK,GAAG,QAAQ,CAAC;YAErB,gBAAgB;YAChB,IAAI,MAAM,EAAE,UAAU,EAAE,CAAC;gBACvB,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,KAAK,MAAM,CAAC,UAAU,CAAC,CAAC;YAClE,CAAC;YACD,IAAI,MAAM,EAAE,QAAQ,EAAE,CAAC;gBACrB,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,MAAM,CAAC,QAAQ,CAAC,CAAC;YAC9D,CAAC;YACD,IAAI,MAAM,EAAE,GAAG,EAAE,CAAC;gBAChB,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC;gBACvB,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;YACpD,CAAC;YACD,IAAI,MAAM,EAAE,MAAM,EAAE,CAAC;gBACnB,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;gBAC7B,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC;YACnD,CAAC;YAED,wCAAwC;YACxC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;YAE7D,cAAc,CAAC,MAAM,EAAE;gBACrB,WAAW,EAAE,UAAU,CAAC,MAAM;gBAC9B,WAAW,EAAE,KAAK,CAAC,MAAM;gBACzB,UAAU,EAAE,MAAM,EAAE,UAAU;gBAC9B,WAAW,EAAE,MAAM,EAAE,QAAQ,KAAK,SAAS;aAC5C,CAAC,CAAC;YAEH,OAAO,EAAE,CAAC,KAAK,CAAC,CAAC;QAAA,CAClB;QAED,KAAK,CAAC,MAAM,CAAC,EAAU,EAAE,KAAsB,EAAyB;YACtE,MAAM,aAAa,GAAG,uBAAuB,CAAC,KAAK,CAAC,CAAC;YACrD,IAAI,aAAa;gBAAE,OAAO,GAAG,CAAC,aAAa,CAAC,CAAC;YAE7C,MAAM,yBAAyB,EAAE,CAAC;YAElC,MAAM,QAAQ,GAAG,MAAM,gBAAgB,CAAC,EAAE,CAAC,CAAC;YAC5C,IAAI,CAAC,QAAQ;gBAAE,OAAO,GAAG,CAAC,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC;YAEhD,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC;gBAC9B,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;gBACvC,IAAI,KAAK,CAAC,OAAO,KAAK,SAAS;oBAAE,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;gBACrE,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;oBAC7B,8DAA8D;oBAC9D,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC;wBAAE,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;oBAC7C,KAAK,MAAM,GAAG,IAAI,KAAK,CAAC,IAAI;wBAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBACpD,CAAC;YAAA,CACF,CAAC,CAAC;YAEH,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAC,GAAG,EAAE,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;YAC7D,IAAI,CAAC,OAAO;gBAAE,OAAO,GAAG,CAAC,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC;YAE/C,cAAc,CAAC,QAAQ,EAAE;gBACvB,MAAM,EAAE,EAAE;gBACV,SAAS,EAAE,QAAQ,CAAC,SAAS;aAC9B,CAAC,CAAC;YAEH,OAAO,EAAE,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC;QAAA,CAC/B;QAED,KAAK,CAAC,MAAM,CAAC,EAAU,EAAyB;YAC9C,MAAM,yBAAyB,EAAE,CAAC;YAElC,MAAM,QAAQ,GAAG,MAAM,gBAAgB,CAAC,EAAE,CAAC,CAAC;YAC5C,IAAI,CAAC,QAAQ;gBAAE,OAAO,GAAG,CAAC,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC;YAEhD,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC;gBAC9B,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;YAAA,CACrC,CAAC,CAAC;YAEH,MAAM,aAAa,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,EAAE,EAAE,KAAK,CAAC,MAAM,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC;YAEvE,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC;gBACtB,IAAI,GAAG,CAAC,kBAAkB,KAAK,SAAS,IAAI,GAAG,CAAC,kBAAkB,KAAK,IAAI,EAAE,CAAC;oBAC5E,OAAO,GAAG,CAAC,kBAAkB,CAAC,EAAE,CAAC,CAAC;gBACpC,CAAC;gBAED,IACE,aAAa;oBACb,GAAG,CAAC,iBAAiB,KAAK,SAAS;oBACnC,GAAG,CAAC,iBAAiB,KAAK,IAAI,EAC9B,CAAC;oBACD,OAAO,GAAG,CAAC,iBAAiB,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;gBACnD,CAAC;YAAA,CACF,CAAC,CAAC;YAEH,cAAc,CAAC,QAAQ,EAAE;gBACvB,MAAM,EAAE,EAAE;gBACV,SAAS,EAAE,QAAQ,CAAC,SAAS;gBAC7B,aAAa,EAAE,aAAa;aAC7B,CAAC,CAAC;YAEH,OAAO,EAAE,CAAC,SAAS,CAAC,CAAC;QAAA,CACtB;KACF,CAAC;AAAA,CACH;AAED,SAAS,aAAa,CAAC,CAAO,EAAQ;IACpC,MAAM,IAAI,GAAS;QACjB,EAAE,EAAE,CAAC,CAAC,EAAE;QACR,OAAO,EAAE,CAAC,CAAC,OAAO;QAClB,MAAM,EAAE,CAAC,CAAC,MAAM;QAChB,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;QACjB,SAAS,EAAE,CAAC,CAAC,SAAS;KACvB,CAAC;IAEF,IAAI,CAAC,CAAC,UAAU,KAAK,SAAS;QAAE,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC,UAAU,CAAC;IAC/D,IAAI,CAAC,CAAC,QAAQ,KAAK,SAAS;QAAE,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC;IAEzD,OAAO,IAAI,CAAC;AAAA,CACb;AAED,SAAS,SAAS,CAAC,CAAO,EAAQ;IAChC,OAAO,aAAa,CAAC,CAAC,CAAC,CAAC;AAAA,CACzB"}
@@ -47,16 +47,12 @@ export declare function clearProcessors(): void;
47
47
  */
48
48
  export declare function getRegisteredProcessors(): string[];
49
49
  /**
50
- * Process all due templates and habits.
50
+ * Process registered template processors.
51
51
  *
52
- * Called during createTodu() initialization. Runs each registered
53
- * processor in sequence. Each processor is responsible for:
54
- * 1. Reading its items from the catalog
55
- * 2. Checking which are due (nextDue <= today, not paused)
56
- * 3. Performing the appropriate action (generate tasks, advance nextDue, etc.)
57
- *
58
- * This function is the single entry point — no daemon, no polling,
59
- * no on-complete triggers. Just process on access.
52
+ * Processors run in registration order. Callers may exclude processor types
53
+ * (for example, skipping recurring during client startup).
60
54
  */
61
- export declare function processTemplates(catalog: DocHandle<CatalogDocument>): Promise<void>;
55
+ export declare function processTemplates(catalog: DocHandle<CatalogDocument>, options?: {
56
+ excludeTypes?: string[];
57
+ }): Promise<void>;
62
58
  //# sourceMappingURL=scheduling.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"scheduling.d.ts","sourceRoot":"","sources":["../src/scheduling.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAMlD;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;;GAIG;AACH,MAAM,WAAW,iBAAiB;IAChC,sDAAsD;IACtD,OAAO,EAAE,SAAS,CAAC,eAAe,CAAC,CAAC;CACrC;AAED;;;;;;GAMG;AACH,MAAM,MAAM,iBAAiB,GAAG,CAAC,OAAO,EAAE,iBAAiB,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;AAQhF;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,iBAAiB,GAAG,IAAI,CAElF;AAED;;;GAGG;AACH,wBAAgB,eAAe,IAAI,IAAI,CAEtC;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,IAAI,MAAM,EAAE,CAElD;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,gBAAgB,CAAC,OAAO,EAAE,SAAS,CAAC,eAAe,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAiBzF"}
1
+ {"version":3,"file":"scheduling.d.ts","sourceRoot":"","sources":["../src/scheduling.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAMlD;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;;GAIG;AACH,MAAM,WAAW,iBAAiB;IAChC,sDAAsD;IACtD,OAAO,EAAE,SAAS,CAAC,eAAe,CAAC,CAAC;CACrC;AAED;;;;;;GAMG;AACH,MAAM,MAAM,iBAAiB,GAAG,CAAC,OAAO,EAAE,iBAAiB,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;AAQhF;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,iBAAiB,GAAG,IAAI,CAElF;AAED;;;GAGG;AACH,wBAAgB,eAAe,IAAI,IAAI,CAEtC;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,IAAI,MAAM,EAAE,CAElD;AAED;;;;;GAKG;AACH,wBAAsB,gBAAgB,CACpC,OAAO,EAAE,SAAS,CAAC,eAAe,CAAC,EACnC,OAAO,GAAE;IACP,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;CACpB,GACL,OAAO,CAAC,IAAI,CAAC,CAyBf"}
@@ -28,21 +28,19 @@ export function getRegisteredProcessors() {
28
28
  return Array.from(processors.keys());
29
29
  }
30
30
  /**
31
- * Process all due templates and habits.
31
+ * Process registered template processors.
32
32
  *
33
- * Called during createTodu() initialization. Runs each registered
34
- * processor in sequence. Each processor is responsible for:
35
- * 1. Reading its items from the catalog
36
- * 2. Checking which are due (nextDue <= today, not paused)
37
- * 3. Performing the appropriate action (generate tasks, advance nextDue, etc.)
38
- *
39
- * This function is the single entry point — no daemon, no polling,
40
- * no on-complete triggers. Just process on access.
33
+ * Processors run in registration order. Callers may exclude processor types
34
+ * (for example, skipping recurring during client startup).
41
35
  */
42
- export async function processTemplates(catalog) {
36
+ export async function processTemplates(catalog, options = {}) {
43
37
  if (processors.size === 0)
44
38
  return;
39
+ const excluded = new Set((options.excludeTypes ?? []).map((type) => type.trim()).filter((type) => type.length > 0));
45
40
  for (const [type, processor] of processors) {
41
+ if (excluded.has(type)) {
42
+ continue;
43
+ }
46
44
  try {
47
45
  const context = {
48
46
  catalog,
@@ -1 +1 @@
1
- {"version":3,"file":"scheduling.js","sourceRoot":"","sources":["../src/scheduling.ts"],"names":[],"mappings":"AAsCA;;;GAGG;AACH,MAAM,UAAU,GAAmC,IAAI,GAAG,EAAE,CAAC;AAE7D;;;;;;GAMG;AACH,MAAM,UAAU,iBAAiB,CAAC,IAAY,EAAE,SAA4B,EAAQ;IAClF,UAAU,CAAC,GAAG,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;AAAA,CACjC;AAED;;;GAGG;AACH,MAAM,UAAU,eAAe,GAAS;IACtC,UAAU,CAAC,KAAK,EAAE,CAAC;AAAA,CACpB;AAED;;;GAGG;AACH,MAAM,UAAU,uBAAuB,GAAa;IAClD,OAAO,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC;AAAA,CACtC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,OAAmC,EAAiB;IACzF,IAAI,UAAU,CAAC,IAAI,KAAK,CAAC;QAAE,OAAO;IAElC,KAAK,MAAM,CAAC,IAAI,EAAE,SAAS,CAAC,IAAI,UAAU,EAAE,CAAC;QAC3C,IAAI,CAAC;YACH,MAAM,OAAO,GAAsB;gBACjC,OAAO;aACR,CAAC;YACF,MAAM,SAAS,CAAC,OAAO,CAAC,CAAC;QAC3B,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,sEAAoE;YACpE,OAAO,CAAC,KAAK,CACX,2BAA2B,IAAI,WAAW,EAC1C,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAC3C,CAAC;QACJ,CAAC;IACH,CAAC;AAAA,CACF"}
1
+ {"version":3,"file":"scheduling.js","sourceRoot":"","sources":["../src/scheduling.ts"],"names":[],"mappings":"AAsCA;;;GAGG;AACH,MAAM,UAAU,GAAmC,IAAI,GAAG,EAAE,CAAC;AAE7D;;;;;;GAMG;AACH,MAAM,UAAU,iBAAiB,CAAC,IAAY,EAAE,SAA4B,EAAQ;IAClF,UAAU,CAAC,GAAG,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;AAAA,CACjC;AAED;;;GAGG;AACH,MAAM,UAAU,eAAe,GAAS;IACtC,UAAU,CAAC,KAAK,EAAE,CAAC;AAAA,CACpB;AAED;;;GAGG;AACH,MAAM,UAAU,uBAAuB,GAAa;IAClD,OAAO,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC;AAAA,CACtC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,OAAmC,EACnC,OAAO,GAEH,EAAE,EACS;IACf,IAAI,UAAU,CAAC,IAAI,KAAK,CAAC;QAAE,OAAO;IAElC,MAAM,QAAQ,GAAG,IAAI,GAAG,CACtB,CAAC,OAAO,CAAC,YAAY,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAC1F,CAAC;IAEF,KAAK,MAAM,CAAC,IAAI,EAAE,SAAS,CAAC,IAAI,UAAU,EAAE,CAAC;QAC3C,IAAI,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YACvB,SAAS;QACX,CAAC;QAED,IAAI,CAAC;YACH,MAAM,OAAO,GAAsB;gBACjC,OAAO;aACR,CAAC;YACF,MAAM,SAAS,CAAC,OAAO,CAAC,CAAC;QAC3B,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,sEAAoE;YACpE,OAAO,CAAC,KAAK,CACX,2BAA2B,IAAI,WAAW,EAC1C,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAC3C,CAAC;QACJ,CAAC;IACH,CAAC;AAAA,CACF"}
package/dist/storage.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import type { DocHandle } from "@automerge/automerge-repo";
1
+ import type { DocHandle, DocumentId } from "@automerge/automerge-repo";
2
2
  import { Repo } from "@automerge/automerge-repo";
3
3
  import { type CatalogDocument } from "@todu/core";
4
4
  export interface Storage {
@@ -11,11 +11,49 @@ export interface Storage {
11
11
  /** Shut down the repo */
12
12
  close(): Promise<void>;
13
13
  }
14
+ export interface CatalogJoinSwitch {
15
+ /** Catalog marker that was active before this switch started */
16
+ previousCatalogId: DocumentId | null;
17
+ /** Target catalog marker requested by join */
18
+ targetCatalogId: DocumentId;
19
+ /** Finalize the switch after join validation/sync succeeds */
20
+ commit(): void;
21
+ /** Restore prior catalog marker if the join attempt fails */
22
+ rollback(): void;
23
+ }
24
+ /**
25
+ * Begin a catalog marker switch for join flows.
26
+ *
27
+ * This is the storage-layer entrypoint that explicit join workflows use.
28
+ * The caller should:
29
+ * 1) validate target catalog reachability,
30
+ * 2) perform switch-dependent work,
31
+ * 3) call commit() on success or rollback() on failure.
32
+ */
33
+ export declare function beginCatalogJoinSwitch(storagePath: string, targetCatalogId: DocumentId): CatalogJoinSwitch;
14
34
  /**
15
- * Initialize storage: create data directory, set up Automerge repo,
16
- * and load or create the catalog document.
35
+ * Initialize persistent storage for bootstrap flows.
36
+ *
37
+ * Bootstrap behavior:
38
+ * - No marker: create initial catalog
39
+ * - Existing marker: load that catalog
40
+ * - Existing but unreachable marker: fail (do not implicitly create a new catalog)
41
+ */
42
+ export declare function initBootstrapStorage(storagePath: string, repo?: Repo): Promise<Storage>;
43
+ /**
44
+ * Initialize persistent storage for explicit join flows.
45
+ *
46
+ * Join behavior:
47
+ * - Requires the target catalog to be reachable
48
+ * - Never creates a fresh catalog implicitly
49
+ */
50
+ export declare function initJoinStorage(storagePath: string, targetCatalogId: DocumentId, repo?: Repo): Promise<Storage>;
51
+ /**
52
+ * Backward-compatible storage initialization entrypoint.
53
+ *
54
+ * Defaults to bootstrap semantics.
17
55
  */
18
- export declare function initStorage(storagePath: string): Promise<Storage>;
56
+ export declare function initStorage(storagePath: string, repo?: Repo): Promise<Storage>;
19
57
  /**
20
58
  * Initialize ephemeral storage with no filesystem persistence.
21
59
  * Used by CLI when syncing with a running Electron instance.
@@ -1 +1 @@
1
- {"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../src/storage.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAc,MAAM,2BAA2B,CAAC;AACvE,OAAO,EAAE,IAAI,EAAE,MAAM,2BAA2B,CAAC;AAEjD,OAAO,EAEL,KAAK,eAAe,EAGrB,MAAM,YAAY,CAAC;AAwCpB,MAAM,WAAW,OAAO;IACtB,kCAAkC;IAClC,IAAI,EAAE,IAAI,CAAC;IAEX,kCAAkC;IAClC,OAAO,EAAE,SAAS,CAAC,eAAe,CAAC,CAAC;IAEpC,oEAAoE;IACpE,SAAS,EAAE,OAAO,CAAC;IAEnB,yBAAyB;IACzB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB;AAED;;;GAGG;AACH,wBAAsB,WAAW,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAqBvE;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,oBAAoB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CACtE,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC,GAAG;IACzB,gFAAgF;IAChF,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;CACjC,CACF,CAwDA"}
1
+ {"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../src/storage.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AACvE,OAAO,EAAE,IAAI,EAAE,MAAM,2BAA2B,CAAC;AAEjD,OAAO,EAEL,KAAK,eAAe,EAGrB,MAAM,YAAY,CAAC;AA8CpB,MAAM,WAAW,OAAO;IACtB,kCAAkC;IAClC,IAAI,EAAE,IAAI,CAAC;IAEX,kCAAkC;IAClC,OAAO,EAAE,SAAS,CAAC,eAAe,CAAC,CAAC;IAEpC,oEAAoE;IACpE,SAAS,EAAE,OAAO,CAAC;IAEnB,yBAAyB;IACzB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB;AAED,MAAM,WAAW,iBAAiB;IAChC,gEAAgE;IAChE,iBAAiB,EAAE,UAAU,GAAG,IAAI,CAAC;IAErC,8CAA8C;IAC9C,eAAe,EAAE,UAAU,CAAC;IAE5B,8DAA8D;IAC9D,MAAM,IAAI,IAAI,CAAC;IAEf,6DAA6D;IAC7D,QAAQ,IAAI,IAAI,CAAC;CAClB;AAED;;;;;;;;GAQG;AACH,wBAAgB,sBAAsB,CACpC,WAAW,EAAE,MAAM,EACnB,eAAe,EAAE,UAAU,GAC1B,iBAAiB,CAsBnB;AAED;;;;;;;GAOG;AACH,wBAAsB,oBAAoB,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,CAmB7F;AAED;;;;;;GAMG;AACH,wBAAsB,eAAe,CACnC,WAAW,EAAE,MAAM,EACnB,eAAe,EAAE,UAAU,EAC3B,IAAI,CAAC,EAAE,IAAI,GACV,OAAO,CAAC,OAAO,CAAC,CAmBlB;AAED;;;;GAIG;AACH,wBAAsB,WAAW,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,CAEpF;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,oBAAoB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CACtE,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC,GAAG;IACzB,gFAAgF;IAChF,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;CACjC,CACF,CAwDA"}