@doist/todoist-cli 1.1.2

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 (170) hide show
  1. package/README.md +76 -0
  2. package/dist/commands/activity.d.ts +3 -0
  3. package/dist/commands/activity.d.ts.map +1 -0
  4. package/dist/commands/activity.js +193 -0
  5. package/dist/commands/activity.js.map +1 -0
  6. package/dist/commands/add.d.ts +3 -0
  7. package/dist/commands/add.d.ts.map +1 -0
  8. package/dist/commands/add.js +28 -0
  9. package/dist/commands/add.js.map +1 -0
  10. package/dist/commands/auth.d.ts +3 -0
  11. package/dist/commands/auth.d.ts.map +1 -0
  12. package/dist/commands/auth.js +62 -0
  13. package/dist/commands/auth.js.map +1 -0
  14. package/dist/commands/comment.d.ts +3 -0
  15. package/dist/commands/comment.d.ts.map +1 -0
  16. package/dist/commands/comment.js +251 -0
  17. package/dist/commands/comment.js.map +1 -0
  18. package/dist/commands/completed.d.ts +3 -0
  19. package/dist/commands/completed.d.ts.map +1 -0
  20. package/dist/commands/completed.js +74 -0
  21. package/dist/commands/completed.js.map +1 -0
  22. package/dist/commands/filter.d.ts +3 -0
  23. package/dist/commands/filter.d.ts.map +1 -0
  24. package/dist/commands/filter.js +249 -0
  25. package/dist/commands/filter.js.map +1 -0
  26. package/dist/commands/inbox.d.ts +3 -0
  27. package/dist/commands/inbox.d.ts.map +1 -0
  28. package/dist/commands/inbox.js +23 -0
  29. package/dist/commands/inbox.js.map +1 -0
  30. package/dist/commands/label.d.ts +3 -0
  31. package/dist/commands/label.d.ts.map +1 -0
  32. package/dist/commands/label.js +196 -0
  33. package/dist/commands/label.js.map +1 -0
  34. package/dist/commands/notification.d.ts +3 -0
  35. package/dist/commands/notification.d.ts.map +1 -0
  36. package/dist/commands/notification.js +274 -0
  37. package/dist/commands/notification.js.map +1 -0
  38. package/dist/commands/project.d.ts +3 -0
  39. package/dist/commands/project.d.ts.map +1 -0
  40. package/dist/commands/project.js +364 -0
  41. package/dist/commands/project.js.map +1 -0
  42. package/dist/commands/reminder.d.ts +3 -0
  43. package/dist/commands/reminder.d.ts.map +1 -0
  44. package/dist/commands/reminder.js +225 -0
  45. package/dist/commands/reminder.js.map +1 -0
  46. package/dist/commands/section.d.ts +3 -0
  47. package/dist/commands/section.d.ts.map +1 -0
  48. package/dist/commands/section.js +138 -0
  49. package/dist/commands/section.js.map +1 -0
  50. package/dist/commands/settings.d.ts +3 -0
  51. package/dist/commands/settings.d.ts.map +1 -0
  52. package/dist/commands/settings.js +250 -0
  53. package/dist/commands/settings.js.map +1 -0
  54. package/dist/commands/stats.d.ts +3 -0
  55. package/dist/commands/stats.d.ts.map +1 -0
  56. package/dist/commands/stats.js +151 -0
  57. package/dist/commands/stats.js.map +1 -0
  58. package/dist/commands/task.d.ts +3 -0
  59. package/dist/commands/task.d.ts.map +1 -0
  60. package/dist/commands/task.js +363 -0
  61. package/dist/commands/task.js.map +1 -0
  62. package/dist/commands/today.d.ts +3 -0
  63. package/dist/commands/today.d.ts.map +1 -0
  64. package/dist/commands/today.js +97 -0
  65. package/dist/commands/today.js.map +1 -0
  66. package/dist/commands/upcoming.d.ts +3 -0
  67. package/dist/commands/upcoming.d.ts.map +1 -0
  68. package/dist/commands/upcoming.js +121 -0
  69. package/dist/commands/upcoming.js.map +1 -0
  70. package/dist/commands/workspace.d.ts +3 -0
  71. package/dist/commands/workspace.d.ts.map +1 -0
  72. package/dist/commands/workspace.js +289 -0
  73. package/dist/commands/workspace.js.map +1 -0
  74. package/dist/index.d.ts +3 -0
  75. package/dist/index.d.ts.map +1 -0
  76. package/dist/index.js +53 -0
  77. package/dist/index.js.map +1 -0
  78. package/dist/lib/api/core.d.ts +40 -0
  79. package/dist/lib/api/core.d.ts.map +1 -0
  80. package/dist/lib/api/core.js +142 -0
  81. package/dist/lib/api/core.js.map +1 -0
  82. package/dist/lib/api/filters.d.ts +26 -0
  83. package/dist/lib/api/filters.d.ts.map +1 -0
  84. package/dist/lib/api/filters.js +86 -0
  85. package/dist/lib/api/filters.js.map +1 -0
  86. package/dist/lib/api/notifications.d.ts +33 -0
  87. package/dist/lib/api/notifications.d.ts.map +1 -0
  88. package/dist/lib/api/notifications.js +112 -0
  89. package/dist/lib/api/notifications.js.map +1 -0
  90. package/dist/lib/api/reminders.d.ts +30 -0
  91. package/dist/lib/api/reminders.d.ts.map +1 -0
  92. package/dist/lib/api/reminders.js +79 -0
  93. package/dist/lib/api/reminders.js.map +1 -0
  94. package/dist/lib/api/stats.d.ts +41 -0
  95. package/dist/lib/api/stats.d.ts.map +1 -0
  96. package/dist/lib/api/stats.js +79 -0
  97. package/dist/lib/api/stats.js.map +1 -0
  98. package/dist/lib/api/uploads.d.ts +10 -0
  99. package/dist/lib/api/uploads.d.ts.map +1 -0
  100. package/dist/lib/api/uploads.js +31 -0
  101. package/dist/lib/api/uploads.js.map +1 -0
  102. package/dist/lib/api/user-settings.d.ts +33 -0
  103. package/dist/lib/api/user-settings.d.ts.map +1 -0
  104. package/dist/lib/api/user-settings.js +90 -0
  105. package/dist/lib/api/user-settings.js.map +1 -0
  106. package/dist/lib/api/workspaces.d.ts +23 -0
  107. package/dist/lib/api/workspaces.d.ts.map +1 -0
  108. package/dist/lib/api/workspaces.js +67 -0
  109. package/dist/lib/api/workspaces.js.map +1 -0
  110. package/dist/lib/auth.d.ts +4 -0
  111. package/dist/lib/auth.d.ts.map +1 -0
  112. package/dist/lib/auth.js +66 -0
  113. package/dist/lib/auth.js.map +1 -0
  114. package/dist/lib/browser.d.ts +2 -0
  115. package/dist/lib/browser.d.ts.map +1 -0
  116. package/dist/lib/browser.js +6 -0
  117. package/dist/lib/browser.js.map +1 -0
  118. package/dist/lib/collaborators.d.ts +29 -0
  119. package/dist/lib/collaborators.d.ts.map +1 -0
  120. package/dist/lib/collaborators.js +184 -0
  121. package/dist/lib/collaborators.js.map +1 -0
  122. package/dist/lib/dates.d.ts +3 -0
  123. package/dist/lib/dates.d.ts.map +1 -0
  124. package/dist/lib/dates.js +20 -0
  125. package/dist/lib/dates.js.map +1 -0
  126. package/dist/lib/duration.d.ts +14 -0
  127. package/dist/lib/duration.d.ts.map +1 -0
  128. package/dist/lib/duration.js +58 -0
  129. package/dist/lib/duration.js.map +1 -0
  130. package/dist/lib/markdown.d.ts +2 -0
  131. package/dist/lib/markdown.d.ts.map +1 -0
  132. package/dist/lib/markdown.js +14 -0
  133. package/dist/lib/markdown.js.map +1 -0
  134. package/dist/lib/oauth-server.d.ts +6 -0
  135. package/dist/lib/oauth-server.d.ts.map +1 -0
  136. package/dist/lib/oauth-server.js +141 -0
  137. package/dist/lib/oauth-server.js.map +1 -0
  138. package/dist/lib/oauth.d.ts +3 -0
  139. package/dist/lib/oauth.d.ts.map +1 -0
  140. package/dist/lib/oauth.js +38 -0
  141. package/dist/lib/oauth.js.map +1 -0
  142. package/dist/lib/output.d.ts +36 -0
  143. package/dist/lib/output.d.ts.map +1 -0
  144. package/dist/lib/output.js +293 -0
  145. package/dist/lib/output.js.map +1 -0
  146. package/dist/lib/pagination.d.ts +23 -0
  147. package/dist/lib/pagination.d.ts.map +1 -0
  148. package/dist/lib/pagination.js +26 -0
  149. package/dist/lib/pagination.js.map +1 -0
  150. package/dist/lib/pkce.d.ts +4 -0
  151. package/dist/lib/pkce.d.ts.map +1 -0
  152. package/dist/lib/pkce.js +19 -0
  153. package/dist/lib/pkce.js.map +1 -0
  154. package/dist/lib/refs.d.ts +13 -0
  155. package/dist/lib/refs.d.ts.map +1 -0
  156. package/dist/lib/refs.js +117 -0
  157. package/dist/lib/refs.js.map +1 -0
  158. package/dist/lib/spinner.d.ts +20 -0
  159. package/dist/lib/spinner.d.ts.map +1 -0
  160. package/dist/lib/spinner.js +70 -0
  161. package/dist/lib/spinner.js.map +1 -0
  162. package/dist/lib/task-list.d.ts +28 -0
  163. package/dist/lib/task-list.d.ts.map +1 -0
  164. package/dist/lib/task-list.js +234 -0
  165. package/dist/lib/task-list.js.map +1 -0
  166. package/dist/lib/urls.d.ts +8 -0
  167. package/dist/lib/urls.d.ts.map +1 -0
  168. package/dist/lib/urls.js +26 -0
  169. package/dist/lib/urls.js.map +1 -0
  170. package/package.json +66 -0
@@ -0,0 +1,138 @@
1
+ import chalk from 'chalk';
2
+ import { getApi } from '../lib/api/core.js';
3
+ import { openInBrowser } from '../lib/browser.js';
4
+ import { formatError, formatNextCursorFooter, formatPaginatedJson, formatPaginatedNdjson, } from '../lib/output.js';
5
+ import { LIMITS, paginate } from '../lib/pagination.js';
6
+ import { requireIdRef, resolveProjectId } from '../lib/refs.js';
7
+ import { sectionUrl } from '../lib/urls.js';
8
+ async function listSections(projectRef, options) {
9
+ const api = await getApi();
10
+ const projectId = await resolveProjectId(api, projectRef);
11
+ const targetLimit = options.all
12
+ ? Number.MAX_SAFE_INTEGER
13
+ : options.limit
14
+ ? parseInt(options.limit, 10)
15
+ : LIMITS.sections;
16
+ const { results: sections, nextCursor } = await paginate((cursor, limit) => api.getSections({ projectId, cursor: cursor ?? undefined, limit }), { limit: targetLimit });
17
+ if (options.json) {
18
+ console.log(formatPaginatedJson({ results: sections, nextCursor }, 'section', options.full, options.showUrls));
19
+ return;
20
+ }
21
+ if (options.ndjson) {
22
+ console.log(formatPaginatedNdjson({ results: sections, nextCursor }, 'section', options.full, options.showUrls));
23
+ return;
24
+ }
25
+ if (sections.length === 0) {
26
+ console.log('No sections.');
27
+ return;
28
+ }
29
+ for (const section of sections) {
30
+ const id = chalk.dim(section.id);
31
+ console.log(`${id} ${section.name}`);
32
+ if (options.showUrls) {
33
+ console.log(` ${chalk.dim(sectionUrl(section.id))}`);
34
+ }
35
+ }
36
+ console.log(formatNextCursorFooter(nextCursor));
37
+ }
38
+ async function createSection(options) {
39
+ const api = await getApi();
40
+ const projectId = await resolveProjectId(api, options.project);
41
+ const section = await api.addSection({
42
+ name: options.name,
43
+ projectId,
44
+ });
45
+ console.log(`Created: ${section.name}`);
46
+ console.log(chalk.dim(`ID: ${section.id}`));
47
+ }
48
+ async function deleteSection(sectionId, options) {
49
+ const api = await getApi();
50
+ const id = requireIdRef(sectionId, 'section');
51
+ const section = await api.getSection(id);
52
+ const { results: tasks } = await api.getTasks({ sectionId: id });
53
+ if (tasks.length > 0) {
54
+ throw new Error(formatError('HAS_TASKS', `Cannot delete section: ${tasks.length} uncompleted task${tasks.length === 1 ? '' : 's'} remain.`));
55
+ }
56
+ if (!options.yes) {
57
+ console.log(`Would delete section: ${section.name}`);
58
+ console.log('Use --yes to confirm.');
59
+ return;
60
+ }
61
+ await api.deleteSection(id);
62
+ console.log(`Deleted section: ${section.name}`);
63
+ }
64
+ async function updateSection(sectionId, options) {
65
+ const api = await getApi();
66
+ const id = requireIdRef(sectionId, 'section');
67
+ const section = await api.getSection(id);
68
+ const updated = await api.updateSection(id, { name: options.name });
69
+ console.log(`Updated: ${section.name} → ${updated.name}`);
70
+ }
71
+ async function browseSection(sectionId) {
72
+ const id = requireIdRef(sectionId, 'section');
73
+ await openInBrowser(sectionUrl(id));
74
+ }
75
+ export function registerSectionCommand(program) {
76
+ const section = program.command('section').description('Manage project sections');
77
+ const listCmd = section
78
+ .command('list [project]')
79
+ .description('List sections in a project')
80
+ .option('--limit <n>', 'Limit number of results (default: 300)')
81
+ .option('--all', 'Fetch all results (no limit)')
82
+ .option('--json', 'Output as JSON')
83
+ .option('--ndjson', 'Output as newline-delimited JSON')
84
+ .option('--full', 'Include all fields in JSON output')
85
+ .option('--show-urls', 'Show web app URLs for each section')
86
+ .action((project, options) => {
87
+ if (!project) {
88
+ listCmd.help();
89
+ return;
90
+ }
91
+ return listSections(project, options);
92
+ });
93
+ const createCmd = section
94
+ .command('create')
95
+ .description('Create a section')
96
+ .option('--name <name>', 'Section name (required)')
97
+ .option('--project <name>', 'Project name or id:xxx (required)')
98
+ .action((options) => {
99
+ if (!options.name || !options.project) {
100
+ createCmd.help();
101
+ return;
102
+ }
103
+ return createSection(options);
104
+ });
105
+ const deleteCmd = section
106
+ .command('delete [id]')
107
+ .description('Delete a section')
108
+ .option('--yes', 'Confirm deletion')
109
+ .action((id, options) => {
110
+ if (!id) {
111
+ deleteCmd.help();
112
+ return;
113
+ }
114
+ return deleteSection(id, options);
115
+ });
116
+ const updateCmd = section
117
+ .command('update [id]')
118
+ .description('Update a section')
119
+ .option('--name <name>', 'New section name (required)')
120
+ .action((id, options) => {
121
+ if (!id || !options.name) {
122
+ updateCmd.help();
123
+ return;
124
+ }
125
+ return updateSection(id, options);
126
+ });
127
+ const browseCmd = section
128
+ .command('browse [id]')
129
+ .description('Open section in browser (requires id:xxx)')
130
+ .action((id) => {
131
+ if (!id) {
132
+ browseCmd.help();
133
+ return;
134
+ }
135
+ return browseSection(id);
136
+ });
137
+ }
138
+ //# sourceMappingURL=section.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"section.js","sourceRoot":"","sources":["../../src/commands/section.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare function registerSettingsCommand(program: Command): void;
3
+ //# sourceMappingURL=settings.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"settings.d.ts","sourceRoot":"","sources":["../../src/commands/settings.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAiQnC,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAwC9D"}
@@ -0,0 +1,250 @@
1
+ import chalk from 'chalk';
2
+ import { fetchUserSettings, updateUserSettings, } from '../lib/api/user-settings.js';
3
+ import { formatError } from '../lib/output.js';
4
+ const DAY_NAMES = {
5
+ 1: 'Monday',
6
+ 2: 'Tuesday',
7
+ 3: 'Wednesday',
8
+ 4: 'Thursday',
9
+ 5: 'Friday',
10
+ 6: 'Saturday',
11
+ 7: 'Sunday',
12
+ };
13
+ const THEMES = [
14
+ { id: 0, name: 'todoist', label: 'Todoist', isPro: false },
15
+ { id: 11, name: 'dark', label: 'Dark', isPro: false },
16
+ { id: 2, name: 'moonstone', label: 'Moonstone', isPro: false },
17
+ { id: 3, name: 'tangerine', label: 'Tangerine', isPro: false },
18
+ { id: 5, name: 'kale', label: 'Kale', isPro: true },
19
+ { id: 6, name: 'blueberry', label: 'Blueberry', isPro: true },
20
+ { id: 8, name: 'lavender', label: 'Lavender', isPro: true },
21
+ { id: 12, name: 'raspberry', label: 'Raspberry', isPro: true },
22
+ ];
23
+ function formatTheme(themeId) {
24
+ const theme = THEMES.find((t) => t.id === themeId);
25
+ if (!theme)
26
+ return String(themeId);
27
+ return theme.isPro ? `${theme.label} (Pro)` : theme.label;
28
+ }
29
+ function formatThemeList() {
30
+ const lines = ['Available themes:'];
31
+ for (const theme of THEMES) {
32
+ const pro = theme.isPro ? ' (Pro)' : '';
33
+ lines.push(` ${theme.name.padEnd(12)} ${theme.label}${pro}`);
34
+ }
35
+ return lines.join('\n');
36
+ }
37
+ function parseTheme(value) {
38
+ const v = value.toLowerCase();
39
+ const theme = THEMES.find((t) => t.name === v || t.label.toLowerCase() === v);
40
+ if (theme)
41
+ return theme.id;
42
+ throw new Error(`Invalid theme: ${value}\n\n${formatThemeList()}`);
43
+ }
44
+ function getThemeName(themeId) {
45
+ const theme = THEMES.find((t) => t.id === themeId);
46
+ return theme?.name ?? 'unknown';
47
+ }
48
+ function formatDay(day) {
49
+ return DAY_NAMES[day] ?? String(day);
50
+ }
51
+ function formatTimeFormat(format) {
52
+ return format === 0 ? '24h' : '12h';
53
+ }
54
+ function formatDateFormat(format) {
55
+ return format === 0 ? 'DD-MM-YYYY' : 'MM-DD-YYYY';
56
+ }
57
+ function formatAutoReminder(minutes) {
58
+ if (minutes === 0)
59
+ return 'none';
60
+ if (minutes < 60)
61
+ return `${minutes} min`;
62
+ const hours = Math.floor(minutes / 60);
63
+ const mins = minutes % 60;
64
+ if (mins === 0)
65
+ return `${hours} hr`;
66
+ return `${hours} hr ${mins} min`;
67
+ }
68
+ function formatBool(value) {
69
+ return value ? chalk.green('on') : chalk.dim('off');
70
+ }
71
+ function formatSettingsView(settings) {
72
+ const lines = [];
73
+ lines.push(chalk.bold('General'));
74
+ lines.push(` Timezone: ${settings.timezone}`);
75
+ lines.push(` Time format: ${formatTimeFormat(settings.timeFormat)}`);
76
+ lines.push(` Date format: ${formatDateFormat(settings.dateFormat)}`);
77
+ lines.push(` Week starts: ${formatDay(settings.startDay)}`);
78
+ lines.push(` Theme: ${formatTheme(settings.theme)}`);
79
+ lines.push(` Auto reminder: ${formatAutoReminder(settings.autoReminder)}`);
80
+ lines.push(` Next week: ${formatDay(settings.nextWeek)}`);
81
+ lines.push(` Start page: ${settings.startPage}`);
82
+ lines.push('');
83
+ lines.push(chalk.bold('Notifications'));
84
+ lines.push(` Push reminders: ${formatBool(settings.reminderPush)}`);
85
+ lines.push(` Desktop reminders: ${formatBool(settings.reminderDesktop)}`);
86
+ lines.push(` Email reminders: ${formatBool(settings.reminderEmail)}`);
87
+ lines.push(` Desktop sound: ${formatBool(settings.completedSoundDesktop)}`);
88
+ lines.push(` Mobile sound: ${formatBool(settings.completedSoundMobile)}`);
89
+ return lines.join('\n');
90
+ }
91
+ function formatSettingsForJson(settings) {
92
+ return {
93
+ timezone: settings.timezone,
94
+ timeFormat: settings.timeFormat === 0 ? '24h' : '12h',
95
+ dateFormat: settings.dateFormat === 0 ? 'intl' : 'us',
96
+ startDay: getDayName(settings.startDay),
97
+ theme: getThemeName(settings.theme),
98
+ autoReminder: settings.autoReminder,
99
+ nextWeek: getDayName(settings.nextWeek),
100
+ startPage: settings.startPage,
101
+ reminderPush: settings.reminderPush,
102
+ reminderDesktop: settings.reminderDesktop,
103
+ reminderEmail: settings.reminderEmail,
104
+ completedSoundDesktop: settings.completedSoundDesktop,
105
+ completedSoundMobile: settings.completedSoundMobile,
106
+ };
107
+ }
108
+ async function viewSettings(options) {
109
+ const settings = await fetchUserSettings();
110
+ if (options.json) {
111
+ console.log(JSON.stringify(formatSettingsForJson(settings), null, 2));
112
+ return;
113
+ }
114
+ console.log(formatSettingsView(settings));
115
+ }
116
+ function parseBoolean(value) {
117
+ const v = value.toLowerCase();
118
+ if (v === 'true' || v === 'on' || v === '1' || v === 'yes')
119
+ return true;
120
+ if (v === 'false' || v === 'off' || v === '0' || v === 'no')
121
+ return false;
122
+ throw new Error(`Invalid boolean value: ${value}`);
123
+ }
124
+ function parseTimeFormat(value) {
125
+ if (value === '24' || value === '24h')
126
+ return 0;
127
+ if (value === '12' || value === '12h')
128
+ return 1;
129
+ throw new Error(`Invalid time format: ${value}. Use 12 or 24.`);
130
+ }
131
+ function parseDateFormat(value) {
132
+ const v = value.toLowerCase();
133
+ if (v === 'intl' || v === 'dd-mm-yyyy' || v === 'dmy')
134
+ return 0;
135
+ if (v === 'us' || v === 'mm-dd-yyyy' || v === 'mdy')
136
+ return 1;
137
+ throw new Error(`Invalid date format: ${value}. Use us or intl.`);
138
+ }
139
+ const DAY_MAP = {
140
+ monday: 1,
141
+ mon: 1,
142
+ tuesday: 2,
143
+ tue: 2,
144
+ wednesday: 3,
145
+ wed: 3,
146
+ thursday: 4,
147
+ thu: 4,
148
+ friday: 5,
149
+ fri: 5,
150
+ saturday: 6,
151
+ sat: 6,
152
+ sunday: 7,
153
+ sun: 7,
154
+ };
155
+ function parseDay(value) {
156
+ const day = DAY_MAP[value.toLowerCase()];
157
+ if (day !== undefined)
158
+ return day;
159
+ throw new Error(`Invalid day: ${value}. Use: monday, tuesday, wednesday, thursday, friday, saturday, sunday (or mon, tue, etc.)`);
160
+ }
161
+ function getDayName(day) {
162
+ return DAY_NAMES[day]?.toLowerCase() ?? 'unknown';
163
+ }
164
+ async function update(options) {
165
+ const args = {};
166
+ if (options.timezone !== undefined) {
167
+ args.timezone = options.timezone;
168
+ }
169
+ if (options.timeFormat !== undefined) {
170
+ args.timeFormat = parseTimeFormat(options.timeFormat);
171
+ }
172
+ if (options.dateFormat !== undefined) {
173
+ args.dateFormat = parseDateFormat(options.dateFormat);
174
+ }
175
+ if (options.startDay !== undefined) {
176
+ args.startDay = parseDay(options.startDay);
177
+ }
178
+ if (options.theme !== undefined) {
179
+ args.theme = parseTheme(options.theme);
180
+ }
181
+ if (options.autoReminder !== undefined) {
182
+ const minutes = parseInt(options.autoReminder, 10);
183
+ if (Number.isNaN(minutes) || minutes < 0) {
184
+ throw new Error(formatError('INVALID_AUTO_REMINDER', 'Auto reminder must be >= 0 minutes.'));
185
+ }
186
+ args.autoReminder = minutes;
187
+ }
188
+ if (options.nextWeek !== undefined) {
189
+ args.nextWeek = parseDay(options.nextWeek);
190
+ }
191
+ if (options.startPage !== undefined) {
192
+ args.startPage = options.startPage;
193
+ }
194
+ if (options.reminderPush !== undefined) {
195
+ args.reminderPush = parseBoolean(options.reminderPush);
196
+ }
197
+ if (options.reminderDesktop !== undefined) {
198
+ args.reminderDesktop = parseBoolean(options.reminderDesktop);
199
+ }
200
+ if (options.reminderEmail !== undefined) {
201
+ args.reminderEmail = parseBoolean(options.reminderEmail);
202
+ }
203
+ if (options.completedSoundDesktop !== undefined) {
204
+ args.completedSoundDesktop = parseBoolean(options.completedSoundDesktop);
205
+ }
206
+ if (options.completedSoundMobile !== undefined) {
207
+ args.completedSoundMobile = parseBoolean(options.completedSoundMobile);
208
+ }
209
+ await updateUserSettings(args);
210
+ console.log('Settings updated.');
211
+ }
212
+ export function registerSettingsCommand(program) {
213
+ const settings = program.command('settings').description('Manage user settings');
214
+ settings
215
+ .command('view')
216
+ .description('View current settings')
217
+ .option('--json', 'Output as JSON')
218
+ .action(viewSettings);
219
+ settings
220
+ .command('update')
221
+ .description('Update settings')
222
+ .option('--timezone <tz>', 'Timezone (e.g., UTC, Europe/London)')
223
+ .option('--time-format <format>', 'Time format: 12 or 24')
224
+ .option('--date-format <format>', 'Date format: us (MM-DD) or intl (DD-MM)')
225
+ .option('--start-day <day>', 'Week start: monday, tuesday, etc.')
226
+ .option('--theme <name>', 'Theme: todoist, dark, moonstone, tangerine, etc.')
227
+ .option('--auto-reminder <min>', 'Default reminder minutes (0 to disable)')
228
+ .option('--next-week <day>', '"Next week" day: monday, tuesday, etc.')
229
+ .option('--start-page <page>', 'Default view: inbox, today, or project URL')
230
+ .option('--reminder-push <bool>', 'Push reminders: on/off')
231
+ .option('--reminder-desktop <bool>', 'Desktop reminders: on/off')
232
+ .option('--reminder-email <bool>', 'Email reminders: on/off')
233
+ .option('--completed-sound-desktop <bool>', 'Desktop completion sound: on/off')
234
+ .option('--completed-sound-mobile <bool>', 'Mobile completion sound: on/off')
235
+ .action(async (options, command) => {
236
+ const hasOptions = Object.values(options).some((v) => v !== undefined);
237
+ if (!hasOptions) {
238
+ command.help();
239
+ return;
240
+ }
241
+ await update(options);
242
+ });
243
+ settings
244
+ .command('themes')
245
+ .description('List available themes')
246
+ .action(() => {
247
+ console.log(formatThemeList());
248
+ });
249
+ }
250
+ //# sourceMappingURL=settings.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"settings.js","sourceRoot":"","sources":["../../src/commands/settings.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,OAAO,EACH,iBAAiB,EAEjB,kBAAkB,GACrB,MAAM,6BAA6B,CAAA;AACpC,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAE9C,MAAM,SAAS,GAA2B;IACtC,CAAC,EAAE,QAAQ;IACX,CAAC,EAAE,SAAS;IACZ,CAAC,EAAE,WAAW;IACd,CAAC,EAAE,UAAU;IACb,CAAC,EAAE,QAAQ;IACX,CAAC,EAAE,UAAU;IACb,CAAC,EAAE,QAAQ;CACd,CAAA;AAED,MAAM,MAAM,GAAkE;IAC1E,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,EAAE;IAC1D,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE;IACrD,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,KAAK,EAAE;IAC9D,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,KAAK,EAAE;IAC9D,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE;IACnD,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,IAAI,EAAE;IAC7D,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,IAAI,EAAE;IAC3D,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,IAAI,EAAE;CACjE,CAAA;AAED,SAAS,WAAW,CAAC,OAAe;IAChC,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,OAAO,CAAC,CAAA;IAClD,IAAI,CAAC,KAAK;QAAE,OAAO,MAAM,CAAC,OAAO,CAAC,CAAA;IAClC,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAA;AAC7D,CAAC;AAED,SAAS,eAAe;IACpB,MAAM,KAAK,GAAG,CAAC,mBAAmB,CAAC,CAAA;IACnC,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QACzB,MAAM,GAAG,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAA;QACvC,KAAK,CAAC,IAAI,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,KAAK,CAAC,KAAK,GAAG,GAAG,EAAE,CAAC,CAAA;IACjE,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AAC3B,CAAC;AAED,SAAS,UAAU,CAAC,KAAa;IAC7B,MAAM,CAAC,GAAG,KAAK,CAAC,WAAW,EAAE,CAAA;IAC7B,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC,CAAA;IAC7E,IAAI,KAAK;QAAE,OAAO,KAAK,CAAC,EAAE,CAAA;IAE1B,MAAM,IAAI,KAAK,CAAC,kBAAkB,KAAK,OAAO,eAAe,EAAE,EAAE,CAAC,CAAA;AACtE,CAAC;AAED,SAAS,YAAY,CAAC,OAAe;IACjC,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,OAAO,CAAC,CAAA;IAClD,OAAO,KAAK,EAAE,IAAI,IAAI,SAAS,CAAA;AACnC,CAAC;AAED,SAAS,SAAS,CAAC,GAAW;IAC1B,OAAO,SAAS,CAAC,GAAG,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAA;AACxC,CAAC;AAED,SAAS,gBAAgB,CAAC,MAAc;IACpC,OAAO,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAA;AACvC,CAAC;AAED,SAAS,gBAAgB,CAAC,MAAc;IACpC,OAAO,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,YAAY,CAAA;AACrD,CAAC;AAED,SAAS,kBAAkB,CAAC,OAAe;IACvC,IAAI,OAAO,KAAK,CAAC;QAAE,OAAO,MAAM,CAAA;IAChC,IAAI,OAAO,GAAG,EAAE;QAAE,OAAO,GAAG,OAAO,MAAM,CAAA;IACzC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,EAAE,CAAC,CAAA;IACtC,MAAM,IAAI,GAAG,OAAO,GAAG,EAAE,CAAA;IACzB,IAAI,IAAI,KAAK,CAAC;QAAE,OAAO,GAAG,KAAK,KAAK,CAAA;IACpC,OAAO,GAAG,KAAK,OAAO,IAAI,MAAM,CAAA;AACpC,CAAC;AAED,SAAS,UAAU,CAAC,KAAc;IAC9B,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;AACvD,CAAC;AAED,SAAS,kBAAkB,CAAC,QAAsB;IAC9C,MAAM,KAAK,GAAa,EAAE,CAAA;IAE1B,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAA;IACjC,KAAK,CAAC,IAAI,CAAC,qBAAqB,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAA;IACpD,KAAK,CAAC,IAAI,CAAC,qBAAqB,gBAAgB,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC,CAAA;IACxE,KAAK,CAAC,IAAI,CAAC,qBAAqB,gBAAgB,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC,CAAA;IACxE,KAAK,CAAC,IAAI,CAAC,qBAAqB,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAA;IAC/D,KAAK,CAAC,IAAI,CAAC,qBAAqB,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;IAC9D,KAAK,CAAC,IAAI,CAAC,qBAAqB,kBAAkB,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC,CAAA;IAC5E,KAAK,CAAC,IAAI,CAAC,qBAAqB,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAA;IAC/D,KAAK,CAAC,IAAI,CAAC,qBAAqB,QAAQ,CAAC,SAAS,EAAE,CAAC,CAAA;IACrD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IACd,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAA;IACvC,KAAK,CAAC,IAAI,CAAC,yBAAyB,UAAU,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC,CAAA;IACxE,KAAK,CAAC,IAAI,CAAC,yBAAyB,UAAU,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC,CAAA;IAC3E,KAAK,CAAC,IAAI,CAAC,yBAAyB,UAAU,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC,CAAA;IACzE,KAAK,CAAC,IAAI,CAAC,yBAAyB,UAAU,CAAC,QAAQ,CAAC,qBAAqB,CAAC,EAAE,CAAC,CAAA;IACjF,KAAK,CAAC,IAAI,CAAC,yBAAyB,UAAU,CAAC,QAAQ,CAAC,oBAAoB,CAAC,EAAE,CAAC,CAAA;IAEhF,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AAC3B,CAAC;AAMD,SAAS,qBAAqB,CAAC,QAAsB;IACjD,OAAO;QACH,QAAQ,EAAE,QAAQ,CAAC,QAAQ;QAC3B,UAAU,EAAE,QAAQ,CAAC,UAAU,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK;QACrD,UAAU,EAAE,QAAQ,CAAC,UAAU,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI;QACrD,QAAQ,EAAE,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC;QACvC,KAAK,EAAE,YAAY,CAAC,QAAQ,CAAC,KAAK,CAAC;QACnC,YAAY,EAAE,QAAQ,CAAC,YAAY;QACnC,QAAQ,EAAE,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC;QACvC,SAAS,EAAE,QAAQ,CAAC,SAAS;QAC7B,YAAY,EAAE,QAAQ,CAAC,YAAY;QACnC,eAAe,EAAE,QAAQ,CAAC,eAAe;QACzC,aAAa,EAAE,QAAQ,CAAC,aAAa;QACrC,qBAAqB,EAAE,QAAQ,CAAC,qBAAqB;QACrD,oBAAoB,EAAE,QAAQ,CAAC,oBAAoB;KACtD,CAAA;AACL,CAAC;AAED,KAAK,UAAU,YAAY,CAAC,OAAoB;IAC5C,MAAM,QAAQ,GAAG,MAAM,iBAAiB,EAAE,CAAA;IAE1C,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;QACf,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,qBAAqB,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAA;QACrE,OAAM;IACV,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,QAAQ,CAAC,CAAC,CAAA;AAC7C,CAAC;AAED,SAAS,YAAY,CAAC,KAAa;IAC/B,MAAM,CAAC,GAAG,KAAK,CAAC,WAAW,EAAE,CAAA;IAC7B,IAAI,CAAC,KAAK,MAAM,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,KAAK;QAAE,OAAO,IAAI,CAAA;IACvE,IAAI,CAAC,KAAK,OAAO,IAAI,CAAC,KAAK,KAAK,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI;QAAE,OAAO,KAAK,CAAA;IACzE,MAAM,IAAI,KAAK,CAAC,0BAA0B,KAAK,EAAE,CAAC,CAAA;AACtD,CAAC;AAED,SAAS,eAAe,CAAC,KAAa;IAClC,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,KAAK;QAAE,OAAO,CAAC,CAAA;IAC/C,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,KAAK;QAAE,OAAO,CAAC,CAAA;IAC/C,MAAM,IAAI,KAAK,CAAC,wBAAwB,KAAK,iBAAiB,CAAC,CAAA;AACnE,CAAC;AAED,SAAS,eAAe,CAAC,KAAa;IAClC,MAAM,CAAC,GAAG,KAAK,CAAC,WAAW,EAAE,CAAA;IAC7B,IAAI,CAAC,KAAK,MAAM,IAAI,CAAC,KAAK,YAAY,IAAI,CAAC,KAAK,KAAK;QAAE,OAAO,CAAC,CAAA;IAC/D,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,YAAY,IAAI,CAAC,KAAK,KAAK;QAAE,OAAO,CAAC,CAAA;IAC7D,MAAM,IAAI,KAAK,CAAC,wBAAwB,KAAK,mBAAmB,CAAC,CAAA;AACrE,CAAC;AAED,MAAM,OAAO,GAA2B;IACpC,MAAM,EAAE,CAAC;IACT,GAAG,EAAE,CAAC;IACN,OAAO,EAAE,CAAC;IACV,GAAG,EAAE,CAAC;IACN,SAAS,EAAE,CAAC;IACZ,GAAG,EAAE,CAAC;IACN,QAAQ,EAAE,CAAC;IACX,GAAG,EAAE,CAAC;IACN,MAAM,EAAE,CAAC;IACT,GAAG,EAAE,CAAC;IACN,QAAQ,EAAE,CAAC;IACX,GAAG,EAAE,CAAC;IACN,MAAM,EAAE,CAAC;IACT,GAAG,EAAE,CAAC;CACT,CAAA;AAED,SAAS,QAAQ,CAAC,KAAa;IAC3B,MAAM,GAAG,GAAG,OAAO,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CAAA;IACxC,IAAI,GAAG,KAAK,SAAS;QAAE,OAAO,GAAG,CAAA;IAEjC,MAAM,IAAI,KAAK,CACX,gBAAgB,KAAK,2FAA2F,CACnH,CAAA;AACL,CAAC;AAED,SAAS,UAAU,CAAC,GAAW;IAC3B,OAAO,SAAS,CAAC,GAAG,CAAC,EAAE,WAAW,EAAE,IAAI,SAAS,CAAA;AACrD,CAAC;AAkBD,KAAK,UAAU,MAAM,CAAC,OAAsB;IACxC,MAAM,IAAI,GAA6C,EAAE,CAAA;IAEzD,IAAI,OAAO,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;QACjC,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAA;IACpC,CAAC;IACD,IAAI,OAAO,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;QACnC,IAAI,CAAC,UAAU,GAAG,eAAe,CAAC,OAAO,CAAC,UAAU,CAAC,CAAA;IACzD,CAAC;IACD,IAAI,OAAO,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;QACnC,IAAI,CAAC,UAAU,GAAG,eAAe,CAAC,OAAO,CAAC,UAAU,CAAC,CAAA;IACzD,CAAC;IACD,IAAI,OAAO,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;QACjC,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAA;IAC9C,CAAC;IACD,IAAI,OAAO,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;QAC9B,IAAI,CAAC,KAAK,GAAG,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;IAC1C,CAAC;IACD,IAAI,OAAO,CAAC,YAAY,KAAK,SAAS,EAAE,CAAC;QACrC,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC,CAAA;QAClD,IAAI,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,OAAO,GAAG,CAAC,EAAE,CAAC;YACvC,MAAM,IAAI,KAAK,CACX,WAAW,CAAC,uBAAuB,EAAE,qCAAqC,CAAC,CAC9E,CAAA;QACL,CAAC;QACD,IAAI,CAAC,YAAY,GAAG,OAAO,CAAA;IAC/B,CAAC;IACD,IAAI,OAAO,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;QACjC,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAA;IAC9C,CAAC;IACD,IAAI,OAAO,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;QAClC,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,CAAA;IACtC,CAAC;IACD,IAAI,OAAO,CAAC,YAAY,KAAK,SAAS,EAAE,CAAC;QACrC,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC,OAAO,CAAC,YAAY,CAAC,CAAA;IAC1D,CAAC;IACD,IAAI,OAAO,CAAC,eAAe,KAAK,SAAS,EAAE,CAAC;QACxC,IAAI,CAAC,eAAe,GAAG,YAAY,CAAC,OAAO,CAAC,eAAe,CAAC,CAAA;IAChE,CAAC;IACD,IAAI,OAAO,CAAC,aAAa,KAAK,SAAS,EAAE,CAAC;QACtC,IAAI,CAAC,aAAa,GAAG,YAAY,CAAC,OAAO,CAAC,aAAa,CAAC,CAAA;IAC5D,CAAC;IACD,IAAI,OAAO,CAAC,qBAAqB,KAAK,SAAS,EAAE,CAAC;QAC9C,IAAI,CAAC,qBAAqB,GAAG,YAAY,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAA;IAC5E,CAAC;IACD,IAAI,OAAO,CAAC,oBAAoB,KAAK,SAAS,EAAE,CAAC;QAC7C,IAAI,CAAC,oBAAoB,GAAG,YAAY,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAA;IAC1E,CAAC;IAED,MAAM,kBAAkB,CAAC,IAAI,CAAC,CAAA;IAC9B,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAA;AACpC,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,OAAgB;IACpD,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,WAAW,CAAC,sBAAsB,CAAC,CAAA;IAEhF,QAAQ;SACH,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,uBAAuB,CAAC;SACpC,MAAM,CAAC,QAAQ,EAAE,gBAAgB,CAAC;SAClC,MAAM,CAAC,YAAY,CAAC,CAAA;IAEzB,QAAQ;SACH,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,iBAAiB,CAAC;SAC9B,MAAM,CAAC,iBAAiB,EAAE,qCAAqC,CAAC;SAChE,MAAM,CAAC,wBAAwB,EAAE,uBAAuB,CAAC;SACzD,MAAM,CAAC,wBAAwB,EAAE,yCAAyC,CAAC;SAC3E,MAAM,CAAC,mBAAmB,EAAE,mCAAmC,CAAC;SAChE,MAAM,CAAC,gBAAgB,EAAE,kDAAkD,CAAC;SAC5E,MAAM,CAAC,uBAAuB,EAAE,yCAAyC,CAAC;SAC1E,MAAM,CAAC,mBAAmB,EAAE,wCAAwC,CAAC;SACrE,MAAM,CAAC,qBAAqB,EAAE,4CAA4C,CAAC;SAC3E,MAAM,CAAC,wBAAwB,EAAE,wBAAwB,CAAC;SAC1D,MAAM,CAAC,2BAA2B,EAAE,2BAA2B,CAAC;SAChE,MAAM,CAAC,yBAAyB,EAAE,yBAAyB,CAAC;SAC5D,MAAM,CAAC,kCAAkC,EAAE,kCAAkC,CAAC;SAC9E,MAAM,CAAC,iCAAiC,EAAE,iCAAiC,CAAC;SAC5E,MAAM,CAAC,KAAK,EAAE,OAAsB,EAAE,OAAgB,EAAE,EAAE;QACvD,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,SAAS,CAAC,CAAA;QACtE,IAAI,CAAC,UAAU,EAAE,CAAC;YACd,OAAO,CAAC,IAAI,EAAE,CAAA;YACd,OAAM;QACV,CAAC;QACD,MAAM,MAAM,CAAC,OAAO,CAAC,CAAA;IACzB,CAAC,CAAC,CAAA;IAEN,QAAQ;SACH,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,uBAAuB,CAAC;SACpC,MAAM,CAAC,GAAG,EAAE;QACT,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,CAAC,CAAA;IAClC,CAAC,CAAC,CAAA;AACV,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare function registerStatsCommand(program: Command): void;
3
+ //# sourceMappingURL=stats.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stats.d.ts","sourceRoot":"","sources":["../../src/commands/stats.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAkLnC,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAqB3D"}
@@ -0,0 +1,151 @@
1
+ import chalk from 'chalk';
2
+ import { fetchProductivityStats, updateGoals, } from '../lib/api/stats.js';
3
+ function formatTrend(trend) {
4
+ switch (trend) {
5
+ case 'up':
6
+ return chalk.green('\u2191');
7
+ case 'down':
8
+ return chalk.red('\u2193');
9
+ default:
10
+ return '';
11
+ }
12
+ }
13
+ function formatStreak(current, max) {
14
+ if (current.count === 0 && max.count === 0)
15
+ return chalk.dim('none');
16
+ const best = max.count > current.count ? ` (best: ${max.count})` : '';
17
+ return `${current.count}${best}`;
18
+ }
19
+ function formatGoalProgress(completed, goal, label) {
20
+ if (goal === 0)
21
+ return chalk.dim('no goal set');
22
+ const ratio = `${completed}/${goal}`;
23
+ const met = completed >= goal;
24
+ const progress = met ? chalk.green(ratio) : chalk.yellow(ratio);
25
+ return `${progress} ${label}`;
26
+ }
27
+ function getTodayCompleted(stats) {
28
+ const today = new Date().toISOString().slice(0, 10);
29
+ const todayItem = stats.daysItems.find((d) => d.date === today);
30
+ return todayItem?.totalCompleted ?? 0;
31
+ }
32
+ function getThisWeekCompleted(stats) {
33
+ if (stats.weekItems.length === 0)
34
+ return 0;
35
+ return stats.weekItems[0].totalCompleted;
36
+ }
37
+ function formatStatsView(stats) {
38
+ const lines = [];
39
+ const { goals } = stats;
40
+ if (goals.vacationMode) {
41
+ lines.push(chalk.yellow('Vacation mode is on'));
42
+ lines.push('');
43
+ }
44
+ const trend = formatTrend(stats.karmaTrend);
45
+ lines.push(`Karma: ${stats.karma.toLocaleString()} ${trend}`);
46
+ lines.push('');
47
+ const todayCompleted = getTodayCompleted(stats);
48
+ const weekCompleted = getThisWeekCompleted(stats);
49
+ const dailyProgress = formatGoalProgress(todayCompleted, goals.dailyGoal, 'today');
50
+ const dailyStreak = formatStreak(goals.currentDailyStreak, goals.maxDailyStreak);
51
+ lines.push(`Daily: ${goals.dailyGoal} tasks ${dailyProgress.padEnd(20)} streak: ${dailyStreak}`);
52
+ const weeklyProgress = formatGoalProgress(weekCompleted, goals.weeklyGoal, 'this week');
53
+ const weeklyStreak = formatStreak(goals.currentWeeklyStreak, goals.maxWeeklyStreak);
54
+ lines.push(`Weekly: ${goals.weeklyGoal} tasks ${weeklyProgress.padEnd(20)} streak: ${weeklyStreak}`);
55
+ lines.push('');
56
+ lines.push(`Completed: ${stats.completedCount.toLocaleString()} total`);
57
+ return lines.join('\n');
58
+ }
59
+ function formatStatsJson(stats, full) {
60
+ const base = {
61
+ karma: stats.karma,
62
+ karmaTrend: stats.karmaTrend,
63
+ completedCount: stats.completedCount,
64
+ goals: {
65
+ dailyGoal: stats.goals.dailyGoal,
66
+ weeklyGoal: stats.goals.weeklyGoal,
67
+ currentDailyStreak: stats.goals.currentDailyStreak,
68
+ currentWeeklyStreak: stats.goals.currentWeeklyStreak,
69
+ maxDailyStreak: stats.goals.maxDailyStreak,
70
+ maxWeeklyStreak: stats.goals.maxWeeklyStreak,
71
+ vacationMode: stats.goals.vacationMode,
72
+ },
73
+ };
74
+ if (!full)
75
+ return base;
76
+ return {
77
+ ...base,
78
+ karmaLastUpdate: stats.karmaLastUpdate,
79
+ goals: {
80
+ ...base.goals,
81
+ karmaDisabled: stats.goals.karmaDisabled,
82
+ ignoreDays: stats.goals.ignoreDays,
83
+ },
84
+ daysItems: stats.daysItems,
85
+ weekItems: stats.weekItems,
86
+ };
87
+ }
88
+ async function viewStats(options) {
89
+ const stats = await fetchProductivityStats();
90
+ if (options.json) {
91
+ console.log(JSON.stringify(formatStatsJson(stats, options.full ?? false), null, 2));
92
+ return;
93
+ }
94
+ console.log(formatStatsView(stats));
95
+ }
96
+ async function goalsCommand(options, command) {
97
+ const hasOptions = options.daily !== undefined || options.weekly !== undefined;
98
+ if (!hasOptions) {
99
+ command.help();
100
+ return;
101
+ }
102
+ const args = {};
103
+ if (options.daily !== undefined) {
104
+ const daily = parseInt(options.daily, 10);
105
+ if (Number.isNaN(daily) || daily < 0) {
106
+ throw new Error('Daily goal must be a non-negative number.');
107
+ }
108
+ args.dailyGoal = daily;
109
+ }
110
+ if (options.weekly !== undefined) {
111
+ const weekly = parseInt(options.weekly, 10);
112
+ if (Number.isNaN(weekly) || weekly < 0) {
113
+ throw new Error('Weekly goal must be a non-negative number.');
114
+ }
115
+ args.weeklyGoal = weekly;
116
+ }
117
+ await updateGoals(args);
118
+ console.log('Goals updated.');
119
+ }
120
+ async function vacationCommand(options, command) {
121
+ if (options.on && options.off) {
122
+ throw new Error('Cannot use both --on and --off.');
123
+ }
124
+ if (!options.on && !options.off) {
125
+ command.help();
126
+ return;
127
+ }
128
+ await updateGoals({ vacationMode: options.on === true });
129
+ console.log(options.on ? 'Vacation mode enabled.' : 'Vacation mode disabled.');
130
+ }
131
+ export function registerStatsCommand(program) {
132
+ const stats = program
133
+ .command('stats')
134
+ .description('View productivity stats and karma')
135
+ .option('--json', 'Output as JSON')
136
+ .option('--full', 'Include all fields in JSON output')
137
+ .action(viewStats);
138
+ stats
139
+ .command('goals')
140
+ .description('Update daily/weekly goals')
141
+ .option('--daily <n>', 'Set daily goal (tasks per day)')
142
+ .option('--weekly <n>', 'Set weekly goal (tasks per week)')
143
+ .action(goalsCommand);
144
+ stats
145
+ .command('vacation')
146
+ .description('Toggle vacation mode')
147
+ .option('--on', 'Enable vacation mode')
148
+ .option('--off', 'Disable vacation mode')
149
+ .action(vacationCommand);
150
+ }
151
+ //# sourceMappingURL=stats.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stats.js","sourceRoot":"","sources":["../../src/commands/stats.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare function registerTaskCommand(program: Command): void;
3
+ //# sourceMappingURL=task.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task.d.ts","sourceRoot":"","sources":["../../src/commands/task.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAiWnC,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA+I1D"}