@todu/cli 0.1.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 (45) hide show
  1. package/dist/commands/config.d.ts +3 -0
  2. package/dist/commands/config.d.ts.map +1 -0
  3. package/dist/commands/config.js +61 -0
  4. package/dist/commands/config.js.map +1 -0
  5. package/dist/commands/habit.d.ts +4 -0
  6. package/dist/commands/habit.d.ts.map +1 -0
  7. package/dist/commands/habit.js +457 -0
  8. package/dist/commands/habit.js.map +1 -0
  9. package/dist/commands/label.d.ts +4 -0
  10. package/dist/commands/label.d.ts.map +1 -0
  11. package/dist/commands/label.js +156 -0
  12. package/dist/commands/label.js.map +1 -0
  13. package/dist/commands/note.d.ts +4 -0
  14. package/dist/commands/note.d.ts.map +1 -0
  15. package/dist/commands/note.js +190 -0
  16. package/dist/commands/note.js.map +1 -0
  17. package/dist/commands/project.d.ts +4 -0
  18. package/dist/commands/project.d.ts.map +1 -0
  19. package/dist/commands/project.js +220 -0
  20. package/dist/commands/project.js.map +1 -0
  21. package/dist/commands/recurring.d.ts +4 -0
  22. package/dist/commands/recurring.d.ts.map +1 -0
  23. package/dist/commands/recurring.js +449 -0
  24. package/dist/commands/recurring.js.map +1 -0
  25. package/dist/commands/sync.d.ts +4 -0
  26. package/dist/commands/sync.d.ts.map +1 -0
  27. package/dist/commands/sync.js +30 -0
  28. package/dist/commands/sync.js.map +1 -0
  29. package/dist/commands/task.d.ts +4 -0
  30. package/dist/commands/task.d.ts.map +1 -0
  31. package/dist/commands/task.js +387 -0
  32. package/dist/commands/task.js.map +1 -0
  33. package/dist/config.d.ts +13 -0
  34. package/dist/config.d.ts.map +1 -0
  35. package/dist/config.js +28 -0
  36. package/dist/config.js.map +1 -0
  37. package/dist/format.d.ts +27 -0
  38. package/dist/format.d.ts.map +1 -0
  39. package/dist/format.js +97 -0
  40. package/dist/format.js.map +1 -0
  41. package/dist/index.d.ts +3 -0
  42. package/dist/index.d.ts.map +1 -0
  43. package/dist/index.js +49 -0
  44. package/dist/index.js.map +1 -0
  45. package/package.json +42 -0
@@ -0,0 +1,449 @@
1
+ import { createProjectId, createRecurringId } from "@todu/core";
2
+ import { describeSchedule } from "@todu/engine";
3
+ import { colorPriority, formatError, formatJSON, formatTable } from "../format.js";
4
+ const TEMPLATE_COLUMNS = [
5
+ { key: "id", label: "ID" },
6
+ { key: "title", label: "Title" },
7
+ { key: "schedule", label: "Schedule" },
8
+ { key: "project", label: "Project" },
9
+ { key: "priority", label: "Priority", colorize: colorPriority },
10
+ { key: "nextDue", label: "Next Due" },
11
+ { key: "status", label: "Status" },
12
+ ];
13
+ function templateToRow(t, projectName) {
14
+ return {
15
+ id: t.id,
16
+ title: t.title,
17
+ schedule: describeSchedule(t.schedule),
18
+ project: projectName ?? t.projectId,
19
+ priority: t.priority,
20
+ nextDue: t.nextDue,
21
+ status: t.paused ? "paused" : "active",
22
+ };
23
+ }
24
+ function templateDetail(t, projectName) {
25
+ const lines = [
26
+ `ID: ${t.id}`,
27
+ `Title: ${t.title}`,
28
+ `Schedule: ${t.schedule}`,
29
+ ` (${describeSchedule(t.schedule)})`,
30
+ `Timezone: ${t.timezone}`,
31
+ `Project: ${projectName ?? t.projectId}`,
32
+ `Priority: ${t.priority}`,
33
+ `Status: ${t.paused ? "paused" : "active"}`,
34
+ `Start Date: ${t.startDate}`,
35
+ ];
36
+ if (t.endDate)
37
+ lines.push(`End Date: ${t.endDate}`);
38
+ lines.push(`Next Due: ${t.nextDue}`);
39
+ if (t.labels.length > 0)
40
+ lines.push(`Labels: ${t.labels.join(", ")}`);
41
+ if (t.description)
42
+ lines.push(`Description: ${t.description}`);
43
+ if (t.skippedDates.length > 0)
44
+ lines.push(`Skipped: ${t.skippedDates.join(", ")}`);
45
+ lines.push(`Created: ${t.createdAt}`);
46
+ lines.push(`Updated: ${t.updatedAt}`);
47
+ return lines.join("\n");
48
+ }
49
+ async function resolveTemplate(todu, ref) {
50
+ // Try as ID first
51
+ const getResult = await todu.recurring.get(ref);
52
+ if (getResult.ok)
53
+ return { ok: true, value: getResult.value };
54
+ // Try by name
55
+ const listResult = await todu.recurring.list();
56
+ if (!listResult.ok)
57
+ return { ok: false, message: formatError(listResult.error) };
58
+ const byName = listResult.value.filter((t) => t.title.toLowerCase() === ref.toLowerCase());
59
+ if (byName.length === 1)
60
+ return { ok: true, value: byName[0] };
61
+ if (byName.length > 1) {
62
+ return { ok: false, message: `Multiple templates match "${ref}". Use the template ID.` };
63
+ }
64
+ return { ok: false, message: `Recurring template not found: ${ref}` };
65
+ }
66
+ async function getProjectName(todu, projectId) {
67
+ const result = await todu.project.list();
68
+ if (!result.ok)
69
+ return projectId;
70
+ const project = result.value.find((p) => p.id === projectId);
71
+ return project?.name ?? projectId;
72
+ }
73
+ async function resolveProjectId(todu, ref) {
74
+ const result = await todu.project.list();
75
+ if (!result.ok)
76
+ return { ok: false, message: formatError(result.error) };
77
+ // Try by ID
78
+ const byId = result.value.find((p) => p.id === ref);
79
+ if (byId)
80
+ return { ok: true, value: byId.id };
81
+ // Try by name
82
+ const byName = result.value.filter((p) => p.name.toLowerCase() === ref.toLowerCase());
83
+ if (byName.length === 1)
84
+ return { ok: true, value: byName[0].id };
85
+ if (byName.length > 1) {
86
+ return { ok: false, message: `Multiple projects match "${ref}". Use the project ID.` };
87
+ }
88
+ return { ok: false, message: `Project not found: ${ref}` };
89
+ }
90
+ export function registerRecurringCommands(program, getTodu) {
91
+ const recurring = program.command("recurring").description("Manage recurring task templates");
92
+ recurring
93
+ .command("create")
94
+ .description("Create a recurring template")
95
+ .requiredOption("--title <title>", "template title")
96
+ .requiredOption("--schedule <rrule>", "RRULE recurrence pattern")
97
+ .requiredOption("--project <project>", "project name or ID")
98
+ .requiredOption("--timezone <tz>", "IANA timezone")
99
+ .requiredOption("--start-date <date>", "start date (YYYY-MM-DD)")
100
+ .option("--end-date <date>", "end date (YYYY-MM-DD)")
101
+ .option("--priority <priority>", "priority (low, medium, high)")
102
+ .option("--description <text>", "template description")
103
+ .option("--label <labels...>", "labels to apply to generated tasks")
104
+ .action(async (opts) => {
105
+ const todu = await getTodu();
106
+ try {
107
+ const projectRes = await resolveProjectId(todu, opts.project);
108
+ if (!projectRes.ok) {
109
+ console.error(projectRes.message);
110
+ process.exitCode = 1;
111
+ return;
112
+ }
113
+ const result = await todu.recurring.create({
114
+ title: opts.title,
115
+ schedule: opts.schedule,
116
+ timezone: opts.timezone,
117
+ startDate: opts.startDate,
118
+ projectId: createProjectId(projectRes.value),
119
+ description: opts.description,
120
+ priority: opts.priority,
121
+ endDate: opts.endDate,
122
+ labels: opts.label,
123
+ });
124
+ if (!result.ok) {
125
+ console.error(formatError(result.error));
126
+ process.exitCode = 1;
127
+ return;
128
+ }
129
+ const format = program.opts().format;
130
+ if (format === "json") {
131
+ console.log(formatJSON(result.value));
132
+ }
133
+ else {
134
+ const projectName = await getProjectName(todu, result.value.projectId);
135
+ console.log(`Created recurring template: ${result.value.id}`);
136
+ console.log(templateDetail(result.value, projectName));
137
+ }
138
+ }
139
+ finally {
140
+ await todu.close();
141
+ }
142
+ });
143
+ recurring
144
+ .command("list")
145
+ .description("List recurring templates")
146
+ .option("--active", "show only active templates")
147
+ .option("--paused", "show only paused templates")
148
+ .option("--project <project>", "filter by project")
149
+ .action(async (opts) => {
150
+ const todu = await getTodu();
151
+ try {
152
+ let projectId;
153
+ if (opts.project) {
154
+ const res = await resolveProjectId(todu, opts.project);
155
+ if (!res.ok) {
156
+ console.error(res.message);
157
+ process.exitCode = 1;
158
+ return;
159
+ }
160
+ projectId = res.value;
161
+ }
162
+ const filter = {};
163
+ if (opts.active)
164
+ filter.paused = false;
165
+ if (opts.paused)
166
+ filter.paused = true;
167
+ if (projectId)
168
+ filter.projectId = createProjectId(projectId);
169
+ const result = await todu.recurring.list(filter);
170
+ if (!result.ok) {
171
+ console.error(formatError(result.error));
172
+ process.exitCode = 1;
173
+ return;
174
+ }
175
+ const format = program.opts().format;
176
+ if (format === "json") {
177
+ console.log(formatJSON(result.value));
178
+ return;
179
+ }
180
+ // Get project names for display
181
+ const projects = await todu.project.list();
182
+ const projectNames = {};
183
+ if (projects.ok) {
184
+ for (const p of projects.value) {
185
+ projectNames[p.id] = p.name;
186
+ }
187
+ }
188
+ const rows = result.value.map((t) => templateToRow(t, projectNames[t.projectId]));
189
+ console.log(formatTable(rows, TEMPLATE_COLUMNS));
190
+ }
191
+ finally {
192
+ await todu.close();
193
+ }
194
+ });
195
+ recurring
196
+ .command("show <id>")
197
+ .description("Show recurring template details")
198
+ .action(async (ref) => {
199
+ const todu = await getTodu();
200
+ try {
201
+ const resolved = await resolveTemplate(todu, ref);
202
+ if (!resolved.ok) {
203
+ console.error(resolved.message);
204
+ process.exitCode = 1;
205
+ return;
206
+ }
207
+ const format = program.opts().format;
208
+ if (format === "json") {
209
+ console.log(formatJSON(resolved.value));
210
+ return;
211
+ }
212
+ const projectName = await getProjectName(todu, resolved.value.projectId);
213
+ console.log(templateDetail(resolved.value, projectName));
214
+ }
215
+ finally {
216
+ await todu.close();
217
+ }
218
+ });
219
+ recurring
220
+ .command("update <id>")
221
+ .description("Update a recurring template")
222
+ .option("--title <title>", "update title")
223
+ .option("--schedule <rrule>", "update RRULE")
224
+ .option("--timezone <tz>", "update timezone")
225
+ .option("--priority <priority>", "update priority")
226
+ .option("--description <text>", "update description")
227
+ .option("--end-date <date>", "update end date")
228
+ .option("--label <labels...>", "replace labels")
229
+ .option("--project <project>", "move to different project")
230
+ .action(async (ref, opts) => {
231
+ const todu = await getTodu();
232
+ try {
233
+ const resolved = await resolveTemplate(todu, ref);
234
+ if (!resolved.ok) {
235
+ console.error(resolved.message);
236
+ process.exitCode = 1;
237
+ return;
238
+ }
239
+ const input = {};
240
+ if (opts.title)
241
+ input.title = opts.title;
242
+ if (opts.schedule)
243
+ input.schedule = opts.schedule;
244
+ if (opts.timezone)
245
+ input.timezone = opts.timezone;
246
+ if (opts.priority)
247
+ input.priority = opts.priority;
248
+ if (opts.description)
249
+ input.description = opts.description;
250
+ if (opts.endDate)
251
+ input.endDate = opts.endDate;
252
+ if (opts.label)
253
+ input.labels = opts.label;
254
+ if (opts.project) {
255
+ const projectRes = await resolveProjectId(todu, opts.project);
256
+ if (!projectRes.ok) {
257
+ console.error(projectRes.message);
258
+ process.exitCode = 1;
259
+ return;
260
+ }
261
+ input.projectId = createProjectId(projectRes.value);
262
+ }
263
+ const result = await todu.recurring.update(resolved.value.id, input);
264
+ if (!result.ok) {
265
+ console.error(formatError(result.error));
266
+ process.exitCode = 1;
267
+ return;
268
+ }
269
+ const format = program.opts().format;
270
+ if (format === "json") {
271
+ console.log(formatJSON(result.value));
272
+ }
273
+ else {
274
+ console.log(`Updated recurring template: ${result.value.id}`);
275
+ }
276
+ }
277
+ finally {
278
+ await todu.close();
279
+ }
280
+ });
281
+ recurring
282
+ .command("delete <id>")
283
+ .description("Delete a recurring template")
284
+ .action(async (ref) => {
285
+ const todu = await getTodu();
286
+ try {
287
+ const resolved = await resolveTemplate(todu, ref);
288
+ if (!resolved.ok) {
289
+ console.error(resolved.message);
290
+ process.exitCode = 1;
291
+ return;
292
+ }
293
+ const result = await todu.recurring.delete(resolved.value.id);
294
+ if (!result.ok) {
295
+ console.error(formatError(result.error));
296
+ process.exitCode = 1;
297
+ return;
298
+ }
299
+ const format = program.opts().format;
300
+ if (format === "json") {
301
+ console.log(formatJSON({ deleted: resolved.value.id }));
302
+ }
303
+ else {
304
+ console.log(`Deleted recurring template: ${resolved.value.id}`);
305
+ }
306
+ }
307
+ finally {
308
+ await todu.close();
309
+ }
310
+ });
311
+ recurring
312
+ .command("pause <id>")
313
+ .description("Pause a recurring template")
314
+ .action(async (ref) => {
315
+ const todu = await getTodu();
316
+ try {
317
+ const resolved = await resolveTemplate(todu, ref);
318
+ if (!resolved.ok) {
319
+ console.error(resolved.message);
320
+ process.exitCode = 1;
321
+ return;
322
+ }
323
+ const result = await todu.recurring.pause(resolved.value.id);
324
+ if (!result.ok) {
325
+ console.error(formatError(result.error));
326
+ process.exitCode = 1;
327
+ return;
328
+ }
329
+ const format = program.opts().format;
330
+ if (format === "json") {
331
+ console.log(formatJSON(result.value));
332
+ }
333
+ else {
334
+ console.log(`Paused recurring template: ${resolved.value.id}`);
335
+ }
336
+ }
337
+ finally {
338
+ await todu.close();
339
+ }
340
+ });
341
+ recurring
342
+ .command("resume <id>")
343
+ .description("Resume a recurring template")
344
+ .action(async (ref) => {
345
+ const todu = await getTodu();
346
+ try {
347
+ const resolved = await resolveTemplate(todu, ref);
348
+ if (!resolved.ok) {
349
+ console.error(resolved.message);
350
+ process.exitCode = 1;
351
+ return;
352
+ }
353
+ const result = await todu.recurring.resume(resolved.value.id);
354
+ if (!result.ok) {
355
+ console.error(formatError(result.error));
356
+ process.exitCode = 1;
357
+ return;
358
+ }
359
+ const format = program.opts().format;
360
+ if (format === "json") {
361
+ console.log(formatJSON(result.value));
362
+ }
363
+ else {
364
+ console.log(`Resumed recurring template: ${resolved.value.id}`);
365
+ }
366
+ }
367
+ finally {
368
+ await todu.close();
369
+ }
370
+ });
371
+ recurring
372
+ .command("upcoming")
373
+ .description("Show projected future occurrences (no tasks created)")
374
+ .option("--days <days>", "number of days to look ahead", "14")
375
+ .option("--template <id>", "filter by template ID")
376
+ .action(async (opts) => {
377
+ const todu = await getTodu();
378
+ try {
379
+ const options = {
380
+ days: Number.parseInt(opts.days, 10),
381
+ };
382
+ if (opts.template) {
383
+ options.templateId = createRecurringId(opts.template);
384
+ }
385
+ const result = await todu.recurring.upcoming(options);
386
+ if (!result.ok) {
387
+ console.error(formatError(result.error));
388
+ process.exitCode = 1;
389
+ return;
390
+ }
391
+ const format = program.opts().format;
392
+ if (format === "json") {
393
+ console.log(formatJSON(result.value));
394
+ return;
395
+ }
396
+ if (result.value.length === 0) {
397
+ console.log("No upcoming occurrences.");
398
+ return;
399
+ }
400
+ const upcomingColumns = [
401
+ { key: "date", label: "Date" },
402
+ { key: "title", label: "Title" },
403
+ { key: "priority", label: "Priority", colorize: colorPriority },
404
+ { key: "schedule", label: "Schedule" },
405
+ ];
406
+ const rows = result.value.map((o) => ({
407
+ date: o.date,
408
+ title: o.title,
409
+ priority: o.priority,
410
+ schedule: o.schedule,
411
+ }));
412
+ console.log(formatTable(rows, upcomingColumns));
413
+ }
414
+ finally {
415
+ await todu.close();
416
+ }
417
+ });
418
+ recurring
419
+ .command("generate <id> <date>")
420
+ .description("Create a task for a specific future date (early materialization)")
421
+ .action(async (ref, date) => {
422
+ const todu = await getTodu();
423
+ try {
424
+ const resolved = await resolveTemplate(todu, ref);
425
+ if (!resolved.ok) {
426
+ console.error(resolved.message);
427
+ process.exitCode = 1;
428
+ return;
429
+ }
430
+ const result = await todu.recurring.generate(resolved.value.id, date);
431
+ if (!result.ok) {
432
+ console.error(formatError(result.error));
433
+ process.exitCode = 1;
434
+ return;
435
+ }
436
+ const format = program.opts().format;
437
+ if (format === "json") {
438
+ console.log(formatJSON(result.value));
439
+ }
440
+ else {
441
+ console.log(`Generated task: ${result.value.id} (${result.value.title} on ${date})`);
442
+ }
443
+ }
444
+ finally {
445
+ await todu.close();
446
+ }
447
+ });
448
+ }
449
+ //# sourceMappingURL=recurring.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recurring.js","sourceRoot":"","sources":["../../src/commands/recurring.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { Todu } from "@todu/engine";
2
+ import type { Command } from "commander";
3
+ export declare function registerSyncCommands(program: Command, getTodu: () => Promise<Todu>): void;
4
+ //# sourceMappingURL=sync.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sync.d.ts","sourceRoot":"","sources":["../../src/commands/sync.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGzC,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CA6BzF"}
@@ -0,0 +1,30 @@
1
+ import { formatJSON } from "../format.js";
2
+ export function registerSyncCommands(program, getTodu) {
3
+ const sync = program.command("sync").description("Sync status and control");
4
+ sync
5
+ .command("status")
6
+ .description("Show sync status")
7
+ .action(async () => {
8
+ const todu = await getTodu();
9
+ try {
10
+ const status = todu.sync.status();
11
+ const opts = program.opts();
12
+ if (opts.format === "json") {
13
+ console.log(formatJSON(status));
14
+ return;
15
+ }
16
+ console.log(`Local Mode: ${status.local.mode}`);
17
+ console.log(`Remote Sync: ${status.remote.state}`);
18
+ if (status.remote.server) {
19
+ console.log(`Server: ${status.remote.server}`);
20
+ }
21
+ if (status.remote.lastSync) {
22
+ console.log(`Last Sync: ${status.remote.lastSync}`);
23
+ }
24
+ }
25
+ finally {
26
+ await todu.close();
27
+ }
28
+ });
29
+ }
30
+ //# sourceMappingURL=sync.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sync.js","sourceRoot":"","sources":["../../src/commands/sync.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C,MAAM,UAAU,oBAAoB,CAAC,OAAgB,EAAE,OAA4B,EAAQ;IACzF,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,WAAW,CAAC,yBAAyB,CAAC,CAAC;IAE5E,IAAI;SACD,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,kBAAkB,CAAC;SAC/B,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC;QAClB,MAAM,IAAI,GAAG,MAAM,OAAO,EAAE,CAAC;QAC7B,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YAClC,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;YAE5B,IAAI,IAAI,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;gBAC3B,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;gBAChC,OAAO;YACT,CAAC;YAED,OAAO,CAAC,GAAG,CAAC,iBAAiB,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;YAClD,OAAO,CAAC,GAAG,CAAC,iBAAiB,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;YACpD,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;gBACzB,OAAO,CAAC,GAAG,CAAC,iBAAiB,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;YACvD,CAAC;YACD,IAAI,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;gBAC3B,OAAO,CAAC,GAAG,CAAC,iBAAiB,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;YACzD,CAAC;QACH,CAAC;gBAAS,CAAC;YACT,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;QACrB,CAAC;IAAA,CACF,CAAC,CAAC;AAAA,CACN"}
@@ -0,0 +1,4 @@
1
+ import type { Todu } from "@todu/engine";
2
+ import type { Command } from "commander";
3
+ export declare function registerTaskCommands(program: Command, getTodu: () => Promise<Todu>): void;
4
+ //# sourceMappingURL=task.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task.d.ts","sourceRoot":"","sources":["../../src/commands/task.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA6EzC,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAsUzF"}