@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,3 @@
1
+ import type { Command } from "commander";
2
+ export declare function registerConfigCommands(program: Command): void;
3
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIzC,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA+D7D"}
@@ -0,0 +1,61 @@
1
+ import fs from "node:fs";
2
+ import path from "node:path";
3
+ import { getConfigPath, loadConfig, resolveConfigSources, saveConfig } from "../config.js";
4
+ import { formatJSON } from "../format.js";
5
+ export function registerConfigCommands(program) {
6
+ const config = program.command("config").description("Manage configuration");
7
+ // show
8
+ config
9
+ .command("show")
10
+ .description("Show resolved configuration")
11
+ .action(() => {
12
+ const opts = program.opts();
13
+ const configPath = getConfigPath(opts.config);
14
+ const fileConfig = loadConfig(configPath);
15
+ const sources = resolveConfigSources(opts.config, fileConfig);
16
+ const configExists = fs.existsSync(sources.configPath);
17
+ if (opts.format === "json") {
18
+ console.log(formatJSON({
19
+ configPath: sources.configPath,
20
+ configSource: sources.configSource,
21
+ configExists,
22
+ dataDir: sources.dataDir,
23
+ dataDirSource: sources.dataDirSource,
24
+ }));
25
+ return;
26
+ }
27
+ console.log(`Config file: ${sources.configPath}`);
28
+ console.log(` (${sources.configSource}${configExists ? "" : ", not found"})`);
29
+ console.log(`Data dir: ${sources.dataDir}`);
30
+ console.log(` (${sources.dataDirSource})`);
31
+ });
32
+ // init
33
+ config
34
+ .command("init")
35
+ .description("Create a config file for local development")
36
+ .option("--dir <path>", "directory to create config in", ".todu")
37
+ .action((opts) => {
38
+ const dir = path.resolve(opts.dir);
39
+ const configPath = path.join(dir, "config.yaml");
40
+ if (fs.existsSync(configPath)) {
41
+ console.log(`Config already exists: ${configPath}`);
42
+ return;
43
+ }
44
+ // Create config with data_dir relative to config location
45
+ saveConfig({ data_dir: "./data" }, configPath);
46
+ // Add .gitignore to keep data out of version control
47
+ const gitignorePath = path.join(dir, ".gitignore");
48
+ if (!fs.existsSync(gitignorePath)) {
49
+ fs.writeFileSync(gitignorePath, "# Ignore todu data\ndata/\n", "utf-8");
50
+ console.log(`Created: ${configPath}`);
51
+ console.log(`Created: ${gitignorePath}`);
52
+ }
53
+ else {
54
+ console.log(`Created: ${configPath}`);
55
+ }
56
+ console.log("");
57
+ console.log("Usage:");
58
+ console.log(` todu --config ${configPath} task list`);
59
+ });
60
+ }
61
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,oBAAoB,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC3F,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C,MAAM,UAAU,sBAAsB,CAAC,OAAgB,EAAQ;IAC7D,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,WAAW,CAAC,sBAAsB,CAAC,CAAC;IAE7E,OAAO;IACP,MAAM;SACH,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,6BAA6B,CAAC;SAC1C,MAAM,CAAC,GAAG,EAAE,CAAC;QACZ,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;QAC5B,MAAM,UAAU,GAAG,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC9C,MAAM,UAAU,GAAG,UAAU,CAAC,UAAU,CAAC,CAAC;QAC1C,MAAM,OAAO,GAAG,oBAAoB,CAAC,IAAI,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;QAC9D,MAAM,YAAY,GAAG,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;QAEvD,IAAI,IAAI,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;YAC3B,OAAO,CAAC,GAAG,CACT,UAAU,CAAC;gBACT,UAAU,EAAE,OAAO,CAAC,UAAU;gBAC9B,YAAY,EAAE,OAAO,CAAC,YAAY;gBAClC,YAAY;gBACZ,OAAO,EAAE,OAAO,CAAC,OAAO;gBACxB,aAAa,EAAE,OAAO,CAAC,aAAa;aACrC,CAAC,CACH,CAAC;YACF,OAAO;QACT,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,iBAAiB,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC;QACnD,OAAO,CAAC,GAAG,CAAC,kBAAkB,OAAO,CAAC,YAAY,GAAG,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,aAAa,GAAG,CAAC,CAAC;QAC3F,OAAO,CAAC,GAAG,CAAC,iBAAiB,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;QAChD,OAAO,CAAC,GAAG,CAAC,kBAAkB,OAAO,CAAC,aAAa,GAAG,CAAC,CAAC;IAAA,CACzD,CAAC,CAAC;IAEL,OAAO;IACP,MAAM;SACH,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,4CAA4C,CAAC;SACzD,MAAM,CAAC,cAAc,EAAE,+BAA+B,EAAE,OAAO,CAAC;SAChE,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC;QAChB,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACnC,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,aAAa,CAAC,CAAC;QAEjD,IAAI,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YAC9B,OAAO,CAAC,GAAG,CAAC,0BAA0B,UAAU,EAAE,CAAC,CAAC;YACpD,OAAO;QACT,CAAC;QAED,0DAA0D;QAC1D,UAAU,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,UAAU,CAAC,CAAC;QAE/C,qDAAqD;QACrD,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;QACnD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;YAClC,EAAE,CAAC,aAAa,CAAC,aAAa,EAAE,6BAA6B,EAAE,OAAO,CAAC,CAAC;YACxE,OAAO,CAAC,GAAG,CAAC,YAAY,UAAU,EAAE,CAAC,CAAC;YACtC,OAAO,CAAC,GAAG,CAAC,YAAY,aAAa,EAAE,CAAC,CAAC;QAC3C,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,YAAY,UAAU,EAAE,CAAC,CAAC;QACxC,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACtB,OAAO,CAAC,GAAG,CAAC,mBAAmB,UAAU,YAAY,CAAC,CAAC;IAAA,CACxD,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 registerHabitCommands(program: Command, getTodu: () => Promise<Todu>): void;
4
+ //# sourceMappingURL=habit.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"habit.d.ts","sourceRoot":"","sources":["../../src/commands/habit.ts"],"names":[],"mappings":"AACA,OAAO,EAAoB,KAAK,IAAI,EAAE,MAAM,cAAc,CAAC;AAC3D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA4DzC,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAqa1F"}
@@ -0,0 +1,457 @@
1
+ import { describeSchedule } from "@todu/engine";
2
+ import { formatError, formatJSON, formatTable } from "../format.js";
3
+ const HABIT_COLUMNS = [
4
+ { key: "id", label: "ID" },
5
+ { key: "title", label: "Title" },
6
+ { key: "schedule", label: "Schedule" },
7
+ { key: "nextDue", label: "Next Due" },
8
+ { key: "status", label: "Status" },
9
+ ];
10
+ function habitToRow(h) {
11
+ return {
12
+ id: h.id,
13
+ title: h.title,
14
+ schedule: describeSchedule(h.schedule),
15
+ nextDue: h.nextDue,
16
+ status: h.paused ? "paused" : "active",
17
+ };
18
+ }
19
+ function habitDetail(h) {
20
+ const lines = [
21
+ `ID: ${h.id}`,
22
+ `Title: ${h.title}`,
23
+ `Schedule: ${h.schedule}`,
24
+ ` (${describeSchedule(h.schedule)})`,
25
+ `Timezone: ${h.timezone}`,
26
+ `Status: ${h.paused ? "paused" : "active"}`,
27
+ `Start Date: ${h.startDate}`,
28
+ ];
29
+ if (h.endDate)
30
+ lines.push(`End Date: ${h.endDate}`);
31
+ lines.push(`Next Due: ${h.nextDue}`);
32
+ if (h.description)
33
+ lines.push(`Description: ${h.description}`);
34
+ lines.push(`Created: ${h.createdAt}`);
35
+ lines.push(`Updated: ${h.updatedAt}`);
36
+ return lines.join("\n");
37
+ }
38
+ async function resolveHabit(todu, ref) {
39
+ // Try as ID first
40
+ const getResult = await todu.habit.get(ref);
41
+ if (getResult.ok)
42
+ return { ok: true, value: getResult.value };
43
+ // Try by name
44
+ const listResult = await todu.habit.list();
45
+ if (!listResult.ok)
46
+ return { ok: false, message: formatError(listResult.error) };
47
+ const byName = listResult.value.filter((h) => h.title.toLowerCase() === ref.toLowerCase());
48
+ if (byName.length === 1)
49
+ return { ok: true, value: byName[0] };
50
+ if (byName.length > 1) {
51
+ return { ok: false, message: `Multiple habits match "${ref}". Use the habit ID.` };
52
+ }
53
+ return { ok: false, message: `Habit not found: ${ref}` };
54
+ }
55
+ export function registerHabitCommands(program, getTodu) {
56
+ const habit = program.command("habit").description("Manage habits");
57
+ habit
58
+ .command("create")
59
+ .description("Create a habit")
60
+ .requiredOption("--title <title>", "habit title")
61
+ .requiredOption("--schedule <rrule>", "RRULE recurrence pattern")
62
+ .requiredOption("--timezone <tz>", "IANA timezone")
63
+ .requiredOption("--start-date <date>", "start date (YYYY-MM-DD)")
64
+ .option("--end-date <date>", "end date (YYYY-MM-DD)")
65
+ .option("--description <text>", "habit description")
66
+ .action(async (opts) => {
67
+ const todu = await getTodu();
68
+ try {
69
+ const result = await todu.habit.create({
70
+ title: opts.title,
71
+ schedule: opts.schedule,
72
+ timezone: opts.timezone,
73
+ startDate: opts.startDate,
74
+ endDate: opts.endDate,
75
+ description: opts.description,
76
+ });
77
+ if (!result.ok) {
78
+ console.error(formatError(result.error));
79
+ process.exitCode = 1;
80
+ return;
81
+ }
82
+ const format = program.opts().format;
83
+ if (format === "json") {
84
+ console.log(formatJSON(result.value));
85
+ }
86
+ else {
87
+ console.log(`Created habit: ${result.value.id}`);
88
+ console.log(habitDetail(result.value));
89
+ }
90
+ }
91
+ finally {
92
+ await todu.close();
93
+ }
94
+ });
95
+ habit
96
+ .command("list")
97
+ .description("List habits")
98
+ .option("--active", "show only active habits")
99
+ .option("--paused", "show only paused habits")
100
+ .action(async (opts) => {
101
+ const todu = await getTodu();
102
+ try {
103
+ const filter = {};
104
+ if (opts.active)
105
+ filter.paused = false;
106
+ if (opts.paused)
107
+ filter.paused = true;
108
+ const result = await todu.habit.list(filter);
109
+ if (!result.ok) {
110
+ console.error(formatError(result.error));
111
+ process.exitCode = 1;
112
+ return;
113
+ }
114
+ const format = program.opts().format;
115
+ if (format === "json") {
116
+ console.log(formatJSON(result.value));
117
+ return;
118
+ }
119
+ // Enhance with streak info
120
+ const rows = [];
121
+ for (const h of result.value) {
122
+ const row = habitToRow(h);
123
+ const streak = await todu.habit.streak(h.id);
124
+ if (streak.ok) {
125
+ row.streak = streak.value.current > 0 ? `🔥 ${streak.value.current}` : "0";
126
+ row.today = streak.value.completedToday ? "✅" : "—";
127
+ }
128
+ rows.push(row);
129
+ }
130
+ const columns = [
131
+ ...HABIT_COLUMNS,
132
+ { key: "streak", label: "Streak" },
133
+ { key: "today", label: "Today" },
134
+ ];
135
+ console.log(formatTable(rows, columns));
136
+ }
137
+ finally {
138
+ await todu.close();
139
+ }
140
+ });
141
+ habit
142
+ .command("show <id>")
143
+ .description("Show habit details with streak info")
144
+ .action(async (ref) => {
145
+ const todu = await getTodu();
146
+ try {
147
+ const resolved = await resolveHabit(todu, ref);
148
+ if (!resolved.ok) {
149
+ console.error(resolved.message);
150
+ process.exitCode = 1;
151
+ return;
152
+ }
153
+ const format = program.opts().format;
154
+ if (format === "json") {
155
+ // Include streak in JSON output
156
+ const streak = await todu.habit.streak(resolved.value.id);
157
+ const data = { ...resolved.value };
158
+ if (streak.ok)
159
+ data.streak = streak.value;
160
+ console.log(formatJSON(data));
161
+ return;
162
+ }
163
+ console.log(habitDetail(resolved.value));
164
+ const streak = await todu.habit.streak(resolved.value.id);
165
+ if (streak.ok) {
166
+ console.log("");
167
+ console.log(`Streak: ${streak.value.current > 0 ? `🔥 ${streak.value.current} days` : "0 days"}`);
168
+ console.log(`Longest: ${streak.value.longest} days`);
169
+ console.log(`Today: ${streak.value.completedToday ? "✅ Done" : "— Not done"}`);
170
+ console.log(`Total: ${streak.value.totalCheckins} check-ins`);
171
+ }
172
+ }
173
+ finally {
174
+ await todu.close();
175
+ }
176
+ });
177
+ habit
178
+ .command("update <id>")
179
+ .description("Update a habit")
180
+ .option("--title <title>", "update title")
181
+ .option("--schedule <rrule>", "update RRULE")
182
+ .option("--timezone <tz>", "update timezone")
183
+ .option("--description <text>", "update description")
184
+ .option("--end-date <date>", "update end date")
185
+ .action(async (ref, opts) => {
186
+ const todu = await getTodu();
187
+ try {
188
+ const resolved = await resolveHabit(todu, ref);
189
+ if (!resolved.ok) {
190
+ console.error(resolved.message);
191
+ process.exitCode = 1;
192
+ return;
193
+ }
194
+ const input = {};
195
+ if (opts.title)
196
+ input.title = opts.title;
197
+ if (opts.schedule)
198
+ input.schedule = opts.schedule;
199
+ if (opts.timezone)
200
+ input.timezone = opts.timezone;
201
+ if (opts.description)
202
+ input.description = opts.description;
203
+ if (opts.endDate)
204
+ input.endDate = opts.endDate;
205
+ const result = await todu.habit.update(resolved.value.id, input);
206
+ if (!result.ok) {
207
+ console.error(formatError(result.error));
208
+ process.exitCode = 1;
209
+ return;
210
+ }
211
+ const format = program.opts().format;
212
+ if (format === "json") {
213
+ console.log(formatJSON(result.value));
214
+ }
215
+ else {
216
+ console.log(`Updated habit: ${result.value.id}`);
217
+ }
218
+ }
219
+ finally {
220
+ await todu.close();
221
+ }
222
+ });
223
+ habit
224
+ .command("delete <id>")
225
+ .description("Delete a habit")
226
+ .action(async (ref) => {
227
+ const todu = await getTodu();
228
+ try {
229
+ const resolved = await resolveHabit(todu, ref);
230
+ if (!resolved.ok) {
231
+ console.error(resolved.message);
232
+ process.exitCode = 1;
233
+ return;
234
+ }
235
+ const result = await todu.habit.delete(resolved.value.id);
236
+ if (!result.ok) {
237
+ console.error(formatError(result.error));
238
+ process.exitCode = 1;
239
+ return;
240
+ }
241
+ const format = program.opts().format;
242
+ if (format === "json") {
243
+ console.log(formatJSON({ deleted: resolved.value.id }));
244
+ }
245
+ else {
246
+ console.log(`Deleted habit: ${resolved.value.id}`);
247
+ }
248
+ }
249
+ finally {
250
+ await todu.close();
251
+ }
252
+ });
253
+ habit
254
+ .command("pause <id>")
255
+ .description("Pause a habit")
256
+ .action(async (ref) => {
257
+ const todu = await getTodu();
258
+ try {
259
+ const resolved = await resolveHabit(todu, ref);
260
+ if (!resolved.ok) {
261
+ console.error(resolved.message);
262
+ process.exitCode = 1;
263
+ return;
264
+ }
265
+ const result = await todu.habit.pause(resolved.value.id);
266
+ if (!result.ok) {
267
+ console.error(formatError(result.error));
268
+ process.exitCode = 1;
269
+ return;
270
+ }
271
+ const format = program.opts().format;
272
+ if (format === "json") {
273
+ console.log(formatJSON(result.value));
274
+ }
275
+ else {
276
+ console.log(`Paused habit: ${resolved.value.id}`);
277
+ }
278
+ }
279
+ finally {
280
+ await todu.close();
281
+ }
282
+ });
283
+ habit
284
+ .command("resume <id>")
285
+ .description("Resume a habit")
286
+ .action(async (ref) => {
287
+ const todu = await getTodu();
288
+ try {
289
+ const resolved = await resolveHabit(todu, ref);
290
+ if (!resolved.ok) {
291
+ console.error(resolved.message);
292
+ process.exitCode = 1;
293
+ return;
294
+ }
295
+ const result = await todu.habit.resume(resolved.value.id);
296
+ if (!result.ok) {
297
+ console.error(formatError(result.error));
298
+ process.exitCode = 1;
299
+ return;
300
+ }
301
+ const format = program.opts().format;
302
+ if (format === "json") {
303
+ console.log(formatJSON(result.value));
304
+ }
305
+ else {
306
+ console.log(`Resumed habit: ${resolved.value.id}`);
307
+ }
308
+ }
309
+ finally {
310
+ await todu.close();
311
+ }
312
+ });
313
+ habit
314
+ .command("check <id>")
315
+ .description("Check in for today")
316
+ .action(async (ref) => {
317
+ const todu = await getTodu();
318
+ try {
319
+ const resolved = await resolveHabit(todu, ref);
320
+ if (!resolved.ok) {
321
+ console.error(resolved.message);
322
+ process.exitCode = 1;
323
+ return;
324
+ }
325
+ const result = await todu.habit.check(resolved.value.id);
326
+ if (!result.ok) {
327
+ console.error(formatError(result.error));
328
+ process.exitCode = 1;
329
+ return;
330
+ }
331
+ const format = program.opts().format;
332
+ if (format === "json") {
333
+ console.log(formatJSON(result.value));
334
+ }
335
+ else {
336
+ console.log(`✅ ${resolved.value.title} — checked in for ${result.value.date}`);
337
+ const streak = await todu.habit.streak(resolved.value.id);
338
+ if (streak.ok && streak.value.current > 0) {
339
+ console.log(`🔥 ${streak.value.current} day streak!`);
340
+ }
341
+ }
342
+ }
343
+ finally {
344
+ await todu.close();
345
+ }
346
+ });
347
+ habit
348
+ .command("uncheck <id>")
349
+ .description("Remove today's check-in")
350
+ .action(async (ref) => {
351
+ const todu = await getTodu();
352
+ try {
353
+ const resolved = await resolveHabit(todu, ref);
354
+ if (!resolved.ok) {
355
+ console.error(resolved.message);
356
+ process.exitCode = 1;
357
+ return;
358
+ }
359
+ const result = await todu.habit.uncheck(resolved.value.id);
360
+ if (!result.ok) {
361
+ console.error(formatError(result.error));
362
+ process.exitCode = 1;
363
+ return;
364
+ }
365
+ const format = program.opts().format;
366
+ if (format === "json") {
367
+ console.log(formatJSON({ unchecked: resolved.value.id }));
368
+ }
369
+ else {
370
+ console.log(`Unchecked: ${resolved.value.title}`);
371
+ }
372
+ }
373
+ finally {
374
+ await todu.close();
375
+ }
376
+ });
377
+ habit
378
+ .command("streak <id>")
379
+ .description("Show streak info")
380
+ .action(async (ref) => {
381
+ const todu = await getTodu();
382
+ try {
383
+ const resolved = await resolveHabit(todu, ref);
384
+ if (!resolved.ok) {
385
+ console.error(resolved.message);
386
+ process.exitCode = 1;
387
+ return;
388
+ }
389
+ const result = await todu.habit.streak(resolved.value.id);
390
+ if (!result.ok) {
391
+ console.error(formatError(result.error));
392
+ process.exitCode = 1;
393
+ return;
394
+ }
395
+ const format = program.opts().format;
396
+ if (format === "json") {
397
+ console.log(formatJSON(result.value));
398
+ }
399
+ else {
400
+ console.log(`${resolved.value.title}`);
401
+ console.log(`Current: ${result.value.current > 0 ? `🔥 ${result.value.current} days` : "0 days"}`);
402
+ console.log(`Longest: ${result.value.longest} days`);
403
+ console.log(`Today: ${result.value.completedToday ? "✅ Done" : "— Not done"}`);
404
+ console.log(`Total: ${result.value.totalCheckins} check-ins`);
405
+ }
406
+ }
407
+ finally {
408
+ await todu.close();
409
+ }
410
+ });
411
+ habit
412
+ .command("history <id>")
413
+ .description("Show check-in history")
414
+ .option("--days <days>", "number of days to look back", "30")
415
+ .action(async (ref, opts) => {
416
+ const todu = await getTodu();
417
+ try {
418
+ const resolved = await resolveHabit(todu, ref);
419
+ if (!resolved.ok) {
420
+ console.error(resolved.message);
421
+ process.exitCode = 1;
422
+ return;
423
+ }
424
+ const days = Number.parseInt(opts.days, 10);
425
+ const result = await todu.habit.history(resolved.value.id, days);
426
+ if (!result.ok) {
427
+ console.error(formatError(result.error));
428
+ process.exitCode = 1;
429
+ return;
430
+ }
431
+ const format = program.opts().format;
432
+ if (format === "json") {
433
+ console.log(formatJSON(result.value));
434
+ return;
435
+ }
436
+ if (result.value.length === 0) {
437
+ console.log("No history.");
438
+ return;
439
+ }
440
+ console.log(`${resolved.value.title} — last ${days} days`);
441
+ console.log("");
442
+ const columns = [
443
+ { key: "date", label: "Date" },
444
+ { key: "status", label: "Status" },
445
+ ];
446
+ const rows = result.value.map((entry) => ({
447
+ date: entry.date,
448
+ status: entry.completed ? "✅" : "—",
449
+ }));
450
+ console.log(formatTable(rows, columns));
451
+ }
452
+ finally {
453
+ await todu.close();
454
+ }
455
+ });
456
+ }
457
+ //# sourceMappingURL=habit.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"habit.js","sourceRoot":"","sources":["../../src/commands/habit.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 registerLabelCommands(program: Command, getTodu: () => Promise<Todu>): void;
4
+ //# sourceMappingURL=label.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"label.d.ts","sourceRoot":"","sources":["../../src/commands/label.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA2CzC,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAmH1F"}