@doist/todoist-cli 1.29.3 → 1.29.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (246) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/package.json +8 -3
  3. package/dist/__mocks__/chalk.d.ts +0 -3
  4. package/dist/__mocks__/chalk.d.ts.map +0 -1
  5. package/dist/__mocks__/chalk.js +0 -8
  6. package/dist/__mocks__/chalk.js.map +0 -1
  7. package/dist/commands/activity.d.ts +0 -3
  8. package/dist/commands/activity.d.ts.map +0 -1
  9. package/dist/commands/activity.js +0 -267
  10. package/dist/commands/activity.js.map +0 -1
  11. package/dist/commands/add.d.ts +0 -3
  12. package/dist/commands/add.d.ts.map +0 -1
  13. package/dist/commands/add.js +0 -36
  14. package/dist/commands/add.js.map +0 -1
  15. package/dist/commands/attachment.d.ts +0 -3
  16. package/dist/commands/attachment.d.ts.map +0 -1
  17. package/dist/commands/attachment.js +0 -156
  18. package/dist/commands/attachment.js.map +0 -1
  19. package/dist/commands/auth.d.ts +0 -3
  20. package/dist/commands/auth.d.ts.map +0 -1
  21. package/dist/commands/auth.js +0 -124
  22. package/dist/commands/auth.js.map +0 -1
  23. package/dist/commands/changelog.d.ts +0 -8
  24. package/dist/commands/changelog.d.ts.map +0 -1
  25. package/dist/commands/changelog.js +0 -92
  26. package/dist/commands/changelog.js.map +0 -1
  27. package/dist/commands/comment.d.ts +0 -3
  28. package/dist/commands/comment.d.ts.map +0 -1
  29. package/dist/commands/comment.js +0 -301
  30. package/dist/commands/comment.js.map +0 -1
  31. package/dist/commands/completed.d.ts +0 -3
  32. package/dist/commands/completed.d.ts.map +0 -1
  33. package/dist/commands/completed.js +0 -107
  34. package/dist/commands/completed.js.map +0 -1
  35. package/dist/commands/completion.d.ts +0 -3
  36. package/dist/commands/completion.d.ts.map +0 -1
  37. package/dist/commands/completion.js +0 -107
  38. package/dist/commands/completion.js.map +0 -1
  39. package/dist/commands/filter.d.ts +0 -5
  40. package/dist/commands/filter.d.ts.map +0 -1
  41. package/dist/commands/filter.js +0 -287
  42. package/dist/commands/filter.js.map +0 -1
  43. package/dist/commands/inbox.d.ts +0 -3
  44. package/dist/commands/inbox.d.ts.map +0 -1
  45. package/dist/commands/inbox.js +0 -25
  46. package/dist/commands/inbox.js.map +0 -1
  47. package/dist/commands/label.d.ts +0 -5
  48. package/dist/commands/label.d.ts.map +0 -1
  49. package/dist/commands/label.js +0 -328
  50. package/dist/commands/label.js.map +0 -1
  51. package/dist/commands/notification.d.ts +0 -3
  52. package/dist/commands/notification.d.ts.map +0 -1
  53. package/dist/commands/notification.js +0 -274
  54. package/dist/commands/notification.js.map +0 -1
  55. package/dist/commands/project.d.ts +0 -5
  56. package/dist/commands/project.d.ts.map +0 -1
  57. package/dist/commands/project.js +0 -528
  58. package/dist/commands/project.js.map +0 -1
  59. package/dist/commands/reminder.d.ts +0 -3
  60. package/dist/commands/reminder.d.ts.map +0 -1
  61. package/dist/commands/reminder.js +0 -271
  62. package/dist/commands/reminder.js.map +0 -1
  63. package/dist/commands/section.d.ts +0 -3
  64. package/dist/commands/section.d.ts.map +0 -1
  65. package/dist/commands/section.js +0 -172
  66. package/dist/commands/section.js.map +0 -1
  67. package/dist/commands/settings.d.ts +0 -12
  68. package/dist/commands/settings.d.ts.map +0 -1
  69. package/dist/commands/settings.js +0 -312
  70. package/dist/commands/settings.js.map +0 -1
  71. package/dist/commands/skill.d.ts +0 -3
  72. package/dist/commands/skill.d.ts.map +0 -1
  73. package/dist/commands/skill.js +0 -127
  74. package/dist/commands/skill.js.map +0 -1
  75. package/dist/commands/stats.d.ts +0 -3
  76. package/dist/commands/stats.d.ts.map +0 -1
  77. package/dist/commands/stats.js +0 -151
  78. package/dist/commands/stats.js.map +0 -1
  79. package/dist/commands/task.d.ts +0 -5
  80. package/dist/commands/task.d.ts.map +0 -1
  81. package/dist/commands/task.js +0 -559
  82. package/dist/commands/task.js.map +0 -1
  83. package/dist/commands/today.d.ts +0 -18
  84. package/dist/commands/today.d.ts.map +0 -1
  85. package/dist/commands/today.js +0 -108
  86. package/dist/commands/today.js.map +0 -1
  87. package/dist/commands/upcoming.d.ts +0 -17
  88. package/dist/commands/upcoming.d.ts.map +0 -1
  89. package/dist/commands/upcoming.js +0 -129
  90. package/dist/commands/upcoming.js.map +0 -1
  91. package/dist/commands/update.d.ts +0 -6
  92. package/dist/commands/update.d.ts.map +0 -1
  93. package/dist/commands/update.js +0 -90
  94. package/dist/commands/update.js.map +0 -1
  95. package/dist/commands/view.d.ts +0 -3
  96. package/dist/commands/view.d.ts.map +0 -1
  97. package/dist/commands/view.js +0 -79
  98. package/dist/commands/view.js.map +0 -1
  99. package/dist/commands/workspace.d.ts +0 -3
  100. package/dist/commands/workspace.d.ts.map +0 -1
  101. package/dist/commands/workspace.js +0 -309
  102. package/dist/commands/workspace.js.map +0 -1
  103. package/dist/index.d.ts +0 -3
  104. package/dist/index.d.ts.map +0 -1
  105. package/dist/index.js +0 -176
  106. package/dist/index.js.map +0 -1
  107. package/dist/lib/api/core.d.ts +0 -13
  108. package/dist/lib/api/core.d.ts.map +0 -1
  109. package/dist/lib/api/core.js +0 -170
  110. package/dist/lib/api/core.js.map +0 -1
  111. package/dist/lib/api/filters.d.ts +0 -19
  112. package/dist/lib/api/filters.d.ts.map +0 -1
  113. package/dist/lib/api/filters.js +0 -60
  114. package/dist/lib/api/filters.js.map +0 -1
  115. package/dist/lib/api/notifications.d.ts +0 -33
  116. package/dist/lib/api/notifications.d.ts.map +0 -1
  117. package/dist/lib/api/notifications.js +0 -94
  118. package/dist/lib/api/notifications.js.map +0 -1
  119. package/dist/lib/api/reminders.d.ts +0 -30
  120. package/dist/lib/api/reminders.d.ts.map +0 -1
  121. package/dist/lib/api/reminders.js +0 -65
  122. package/dist/lib/api/reminders.js.map +0 -1
  123. package/dist/lib/api/stats.d.ts +0 -41
  124. package/dist/lib/api/stats.d.ts.map +0 -1
  125. package/dist/lib/api/stats.js +0 -74
  126. package/dist/lib/api/stats.js.map +0 -1
  127. package/dist/lib/api/uploads.d.ts +0 -10
  128. package/dist/lib/api/uploads.d.ts.map +0 -1
  129. package/dist/lib/api/uploads.js +0 -31
  130. package/dist/lib/api/uploads.js.map +0 -1
  131. package/dist/lib/api/user-settings.d.ts +0 -34
  132. package/dist/lib/api/user-settings.d.ts.map +0 -1
  133. package/dist/lib/api/user-settings.js +0 -58
  134. package/dist/lib/api/user-settings.js.map +0 -1
  135. package/dist/lib/api/workspaces.d.ts +0 -23
  136. package/dist/lib/api/workspaces.d.ts.map +0 -1
  137. package/dist/lib/api/workspaces.js +0 -61
  138. package/dist/lib/api/workspaces.js.map +0 -1
  139. package/dist/lib/auth.d.ts +0 -14
  140. package/dist/lib/auth.d.ts.map +0 -1
  141. package/dist/lib/auth.js +0 -182
  142. package/dist/lib/auth.js.map +0 -1
  143. package/dist/lib/browser.d.ts +0 -2
  144. package/dist/lib/browser.d.ts.map +0 -1
  145. package/dist/lib/browser.js +0 -6
  146. package/dist/lib/browser.js.map +0 -1
  147. package/dist/lib/collaborators.d.ts +0 -29
  148. package/dist/lib/collaborators.d.ts.map +0 -1
  149. package/dist/lib/collaborators.js +0 -184
  150. package/dist/lib/collaborators.js.map +0 -1
  151. package/dist/lib/completion.d.ts +0 -41
  152. package/dist/lib/completion.d.ts.map +0 -1
  153. package/dist/lib/completion.js +0 -191
  154. package/dist/lib/completion.js.map +0 -1
  155. package/dist/lib/dates.d.ts +0 -16
  156. package/dist/lib/dates.d.ts.map +0 -1
  157. package/dist/lib/dates.js +0 -45
  158. package/dist/lib/dates.js.map +0 -1
  159. package/dist/lib/duration.d.ts +0 -14
  160. package/dist/lib/duration.d.ts.map +0 -1
  161. package/dist/lib/duration.js +0 -58
  162. package/dist/lib/duration.js.map +0 -1
  163. package/dist/lib/logger.d.ts +0 -42
  164. package/dist/lib/logger.d.ts.map +0 -1
  165. package/dist/lib/logger.js +0 -227
  166. package/dist/lib/logger.js.map +0 -1
  167. package/dist/lib/markdown.d.ts +0 -3
  168. package/dist/lib/markdown.d.ts.map +0 -1
  169. package/dist/lib/markdown.js +0 -22
  170. package/dist/lib/markdown.js.map +0 -1
  171. package/dist/lib/oauth-server.d.ts +0 -6
  172. package/dist/lib/oauth-server.d.ts.map +0 -1
  173. package/dist/lib/oauth-server.js +0 -773
  174. package/dist/lib/oauth-server.js.map +0 -1
  175. package/dist/lib/oauth.d.ts +0 -3
  176. package/dist/lib/oauth.d.ts.map +0 -1
  177. package/dist/lib/oauth.js +0 -38
  178. package/dist/lib/oauth.js.map +0 -1
  179. package/dist/lib/options.d.ts +0 -16
  180. package/dist/lib/options.d.ts.map +0 -1
  181. package/dist/lib/options.js +0 -2
  182. package/dist/lib/options.js.map +0 -1
  183. package/dist/lib/output.d.ts +0 -39
  184. package/dist/lib/output.d.ts.map +0 -1
  185. package/dist/lib/output.js +0 -311
  186. package/dist/lib/output.js.map +0 -1
  187. package/dist/lib/pagination.d.ts +0 -23
  188. package/dist/lib/pagination.d.ts.map +0 -1
  189. package/dist/lib/pagination.js +0 -26
  190. package/dist/lib/pagination.js.map +0 -1
  191. package/dist/lib/pkce.d.ts +0 -4
  192. package/dist/lib/pkce.d.ts.map +0 -1
  193. package/dist/lib/pkce.js +0 -19
  194. package/dist/lib/pkce.js.map +0 -1
  195. package/dist/lib/progress.d.ts +0 -29
  196. package/dist/lib/progress.d.ts.map +0 -1
  197. package/dist/lib/progress.js +0 -101
  198. package/dist/lib/progress.js.map +0 -1
  199. package/dist/lib/refs.d.ts +0 -52
  200. package/dist/lib/refs.d.ts.map +0 -1
  201. package/dist/lib/refs.js +0 -225
  202. package/dist/lib/refs.js.map +0 -1
  203. package/dist/lib/secure-store.d.ts +0 -11
  204. package/dist/lib/secure-store.d.ts.map +0 -1
  205. package/dist/lib/secure-store.js +0 -57
  206. package/dist/lib/secure-store.js.map +0 -1
  207. package/dist/lib/skills/content.d.ts +0 -4
  208. package/dist/lib/skills/content.d.ts.map +0 -1
  209. package/dist/lib/skills/content.js +0 -418
  210. package/dist/lib/skills/content.js.map +0 -1
  211. package/dist/lib/skills/create-installer.d.ts +0 -10
  212. package/dist/lib/skills/create-installer.d.ts.map +0 -1
  213. package/dist/lib/skills/create-installer.js +0 -77
  214. package/dist/lib/skills/create-installer.js.map +0 -1
  215. package/dist/lib/skills/index.d.ts +0 -6
  216. package/dist/lib/skills/index.d.ts.map +0 -1
  217. package/dist/lib/skills/index.js +0 -40
  218. package/dist/lib/skills/index.js.map +0 -1
  219. package/dist/lib/skills/types.d.ts +0 -11
  220. package/dist/lib/skills/types.d.ts.map +0 -1
  221. package/dist/lib/skills/types.js +0 -2
  222. package/dist/lib/skills/types.js.map +0 -1
  223. package/dist/lib/skills/update-installed.d.ts +0 -7
  224. package/dist/lib/skills/update-installed.d.ts.map +0 -1
  225. package/dist/lib/skills/update-installed.js +0 -23
  226. package/dist/lib/skills/update-installed.js.map +0 -1
  227. package/dist/lib/spinner.d.ts +0 -23
  228. package/dist/lib/spinner.d.ts.map +0 -1
  229. package/dist/lib/spinner.js +0 -138
  230. package/dist/lib/spinner.js.map +0 -1
  231. package/dist/lib/stdin.d.ts +0 -2
  232. package/dist/lib/stdin.d.ts.map +0 -1
  233. package/dist/lib/stdin.js +0 -12
  234. package/dist/lib/stdin.js.map +0 -1
  235. package/dist/lib/task-list.d.ts +0 -31
  236. package/dist/lib/task-list.d.ts.map +0 -1
  237. package/dist/lib/task-list.js +0 -271
  238. package/dist/lib/task-list.js.map +0 -1
  239. package/dist/lib/urls.d.ts +0 -8
  240. package/dist/lib/urls.d.ts.map +0 -1
  241. package/dist/lib/urls.js +0 -26
  242. package/dist/lib/urls.js.map +0 -1
  243. package/dist/postinstall.d.ts +0 -2
  244. package/dist/postinstall.d.ts.map +0 -1
  245. package/dist/postinstall.js +0 -3
  246. package/dist/postinstall.js.map +0 -1
@@ -1,312 +0,0 @@
1
- import chalk from 'chalk';
2
- import { Option } from 'commander';
3
- import { getApi } from '../lib/api/core.js';
4
- import { fetchFilters } from '../lib/api/filters.js';
5
- import { fetchUserSettings, updateUserSettings, } from '../lib/api/user-settings.js';
6
- import { withCaseInsensitiveChoices, withUnvalidatedChoices } from '../lib/completion.js';
7
- import { formatError } from '../lib/output.js';
8
- import { withSpinner } from '../lib/spinner.js';
9
- const THEMES = [
10
- { id: 0, name: 'todoist', label: 'Todoist', isPro: false },
11
- { id: 11, name: 'dark', label: 'Dark', isPro: false },
12
- { id: 2, name: 'moonstone', label: 'Moonstone', isPro: false },
13
- { id: 3, name: 'tangerine', label: 'Tangerine', isPro: false },
14
- { id: 5, name: 'kale', label: 'Kale', isPro: true },
15
- { id: 6, name: 'blueberry', label: 'Blueberry', isPro: true },
16
- { id: 8, name: 'lavender', label: 'Lavender', isPro: true },
17
- { id: 12, name: 'raspberry', label: 'Raspberry', isPro: true },
18
- ];
19
- function formatTheme(themeId) {
20
- const theme = THEMES.find((t) => t.id === themeId);
21
- if (!theme)
22
- return String(themeId);
23
- return theme.isPro ? `${theme.label} (Pro)` : theme.label;
24
- }
25
- function formatThemeList() {
26
- const lines = ['Available themes:'];
27
- for (const theme of THEMES) {
28
- const pro = theme.isPro ? ' (Pro)' : '';
29
- lines.push(` ${theme.name.padEnd(12)} ${theme.label}${pro}`);
30
- }
31
- return lines.join('\n');
32
- }
33
- export function parseTheme(value) {
34
- const theme = THEMES.find((t) => t.name === value);
35
- if (theme)
36
- return theme.id;
37
- throw new Error(`Invalid theme: "${value}"`);
38
- }
39
- function getThemeName(themeId) {
40
- const theme = THEMES.find((t) => t.id === themeId);
41
- return theme?.name ?? 'unknown';
42
- }
43
- function formatDay(day) {
44
- return day;
45
- }
46
- function formatTimeFormat(format) {
47
- return format;
48
- }
49
- function formatDateFormat(format) {
50
- return format;
51
- }
52
- function formatAutoReminder(minutes) {
53
- if (minutes === 0)
54
- return 'none';
55
- if (minutes < 60)
56
- return `${minutes} min`;
57
- const hours = Math.floor(minutes / 60);
58
- const mins = minutes % 60;
59
- if (mins === 0)
60
- return `${hours} hr`;
61
- return `${hours} hr ${mins} min`;
62
- }
63
- function formatBool(value) {
64
- return value ? chalk.green('on') : chalk.dim('off');
65
- }
66
- function parseStartPageRef(startPage) {
67
- const match = startPage.match(/^(project|filter|label)\?id=(.+)$/);
68
- if (!match)
69
- return null;
70
- return { type: match[1], id: match[2] };
71
- }
72
- async function resolveStartPageName(startPage) {
73
- const ref = parseStartPageRef(startPage);
74
- if (!ref)
75
- return null;
76
- try {
77
- const api = await getApi();
78
- switch (ref.type) {
79
- case 'project': {
80
- const project = await api.getProject(ref.id);
81
- return project.name;
82
- }
83
- case 'label': {
84
- const label = await api.getLabel(ref.id);
85
- return label.name;
86
- }
87
- case 'filter': {
88
- const filters = await fetchFilters();
89
- const filter = filters.find((f) => f.id === ref.id);
90
- return filter?.name ?? null;
91
- }
92
- }
93
- }
94
- catch {
95
- return null;
96
- }
97
- }
98
- function formatSettingsView(settings, startPageName) {
99
- const lines = [];
100
- lines.push(chalk.bold('General'));
101
- lines.push(` Timezone: ${settings.timezone}`);
102
- lines.push(` Time format: ${formatTimeFormat(settings.timeFormat)}`);
103
- lines.push(` Date format: ${formatDateFormat(settings.dateFormat)}`);
104
- lines.push(` Week starts: ${formatDay(settings.startDay)}`);
105
- lines.push(` Theme: ${formatTheme(settings.theme)}`);
106
- lines.push(` Auto reminder: ${formatAutoReminder(settings.autoReminder)}`);
107
- lines.push(` Next week: ${formatDay(settings.nextWeek)}`);
108
- const startPageDisplay = startPageName
109
- ? `${settings.startPage} (${startPageName})`
110
- : settings.startPage;
111
- lines.push(` Start page: ${startPageDisplay}`);
112
- lines.push('');
113
- lines.push(chalk.bold('Notifications'));
114
- lines.push(` Push reminders: ${formatBool(settings.reminderPush)}`);
115
- lines.push(` Desktop reminders: ${formatBool(settings.reminderDesktop)}`);
116
- lines.push(` Email reminders: ${formatBool(settings.reminderEmail)}`);
117
- lines.push(` Desktop sound: ${formatBool(settings.completedSoundDesktop)}`);
118
- lines.push(` Mobile sound: ${formatBool(settings.completedSoundMobile)}`);
119
- return lines.join('\n');
120
- }
121
- function formatSettingsForJson(settings, startPageName) {
122
- return {
123
- timezone: settings.timezone,
124
- timeFormat: settings.timeFormat,
125
- dateFormat: settings.dateFormat === 'DD/MM/YYYY' ? 'intl' : 'us',
126
- startDay: settings.startDay.toLowerCase(),
127
- theme: getThemeName(settings.theme),
128
- autoReminder: settings.autoReminder,
129
- nextWeek: settings.nextWeek.toLowerCase(),
130
- startPage: settings.startPage,
131
- startPageName,
132
- reminderPush: settings.reminderPush,
133
- reminderDesktop: settings.reminderDesktop,
134
- reminderEmail: settings.reminderEmail,
135
- completedSoundDesktop: settings.completedSoundDesktop,
136
- completedSoundMobile: settings.completedSoundMobile,
137
- };
138
- }
139
- async function viewSettings(options) {
140
- const { settings, startPageName } = await withSpinner({ text: 'Loading settings...', color: 'blue' }, async () => {
141
- const settings = await fetchUserSettings();
142
- const startPageName = await resolveStartPageName(settings.startPage);
143
- return { settings, startPageName };
144
- });
145
- if (options.json) {
146
- console.log(JSON.stringify(formatSettingsForJson(settings, startPageName), null, 2));
147
- return;
148
- }
149
- console.log(formatSettingsView(settings, startPageName));
150
- }
151
- function parseBoolean(value) {
152
- const v = value.toLowerCase();
153
- if (v === 'true' || v === 'on' || v === '1' || v === 'yes')
154
- return true;
155
- if (v === 'false' || v === 'off' || v === '0' || v === 'no')
156
- return false;
157
- throw new Error(`Invalid boolean value: ${value}`);
158
- }
159
- /** CLI value → TimeFormat string */
160
- const TIME_FORMAT_MAP = {
161
- '12': '12h',
162
- '12h': '12h',
163
- '24': '24h',
164
- '24h': '24h',
165
- };
166
- /** CLI value → DateFormat string */
167
- const DATE_FORMAT_MAP = {
168
- us: 'MM/DD/YYYY',
169
- 'mm-dd-yyyy': 'MM/DD/YYYY',
170
- mdy: 'MM/DD/YYYY',
171
- intl: 'DD/MM/YYYY',
172
- 'dd-mm-yyyy': 'DD/MM/YYYY',
173
- dmy: 'DD/MM/YYYY',
174
- };
175
- /** CLI value → DayOfWeek string */
176
- const DAY_MAP = {
177
- monday: 'Monday',
178
- mon: 'Monday',
179
- tuesday: 'Tuesday',
180
- tue: 'Tuesday',
181
- wednesday: 'Wednesday',
182
- wed: 'Wednesday',
183
- thursday: 'Thursday',
184
- thu: 'Thursday',
185
- friday: 'Friday',
186
- fri: 'Friday',
187
- saturday: 'Saturday',
188
- sat: 'Saturday',
189
- sunday: 'Sunday',
190
- sun: 'Sunday',
191
- };
192
- function boolOption(flags, description) {
193
- return withUnvalidatedChoices(new Option(flags, description), [
194
- 'on',
195
- 'off',
196
- 'true',
197
- 'false',
198
- 'yes',
199
- 'no',
200
- '1',
201
- '0',
202
- ]);
203
- }
204
- export const TIME_FORMAT_CHOICES = Object.keys(TIME_FORMAT_MAP);
205
- export const DATE_FORMAT_CHOICES = Object.keys(DATE_FORMAT_MAP);
206
- export const DAY_CHOICES = Object.keys(DAY_MAP);
207
- export const THEME_CHOICES = THEMES.map((t) => t.name);
208
- export function parseTimeFormat(value) {
209
- const result = TIME_FORMAT_MAP[value];
210
- if (result !== undefined)
211
- return result;
212
- throw new Error(`Invalid time format: "${value}"`);
213
- }
214
- export function parseDateFormat(value) {
215
- const result = DATE_FORMAT_MAP[value.toLowerCase()];
216
- if (result !== undefined)
217
- return result;
218
- throw new Error(`Invalid date format: "${value}"`);
219
- }
220
- export function parseDay(value) {
221
- const result = DAY_MAP[value.toLowerCase()];
222
- if (result !== undefined)
223
- return result;
224
- throw new Error(`Invalid day: "${value}"`);
225
- }
226
- async function update(options) {
227
- const args = {};
228
- if (options.timezone !== undefined) {
229
- args.timezone = options.timezone;
230
- }
231
- if (options.timeFormat !== undefined) {
232
- args.timeFormat = parseTimeFormat(options.timeFormat);
233
- }
234
- if (options.dateFormat !== undefined) {
235
- args.dateFormat = parseDateFormat(options.dateFormat);
236
- }
237
- if (options.startDay !== undefined) {
238
- args.startDay = parseDay(options.startDay);
239
- }
240
- if (options.theme !== undefined) {
241
- args.theme = parseTheme(options.theme);
242
- }
243
- if (options.autoReminder !== undefined) {
244
- const minutes = parseInt(options.autoReminder, 10);
245
- if (Number.isNaN(minutes) || minutes < 0) {
246
- throw new Error(formatError('INVALID_AUTO_REMINDER', 'Auto reminder must be >= 0 minutes.'));
247
- }
248
- args.autoReminder = minutes;
249
- }
250
- if (options.nextWeek !== undefined) {
251
- args.nextWeek = parseDay(options.nextWeek);
252
- }
253
- if (options.startPage !== undefined) {
254
- args.startPage = options.startPage;
255
- }
256
- if (options.reminderPush !== undefined) {
257
- args.reminderPush = parseBoolean(options.reminderPush);
258
- }
259
- if (options.reminderDesktop !== undefined) {
260
- args.reminderDesktop = parseBoolean(options.reminderDesktop);
261
- }
262
- if (options.reminderEmail !== undefined) {
263
- args.reminderEmail = parseBoolean(options.reminderEmail);
264
- }
265
- if (options.completedSoundDesktop !== undefined) {
266
- args.completedSoundDesktop = parseBoolean(options.completedSoundDesktop);
267
- }
268
- if (options.completedSoundMobile !== undefined) {
269
- args.completedSoundMobile = parseBoolean(options.completedSoundMobile);
270
- }
271
- await updateUserSettings(args);
272
- console.log('Settings updated.');
273
- }
274
- export function registerSettingsCommand(program) {
275
- const settings = program.command('settings').description('Manage user settings');
276
- settings
277
- .command('view')
278
- .description('View current settings')
279
- .option('--json', 'Output as JSON')
280
- .action(viewSettings);
281
- settings
282
- .command('update')
283
- .description('Update settings')
284
- .option('--timezone <tz>', 'Timezone (e.g., UTC, Europe/London)')
285
- .addOption(withCaseInsensitiveChoices(new Option('--time-format <format>', 'Time format: 12 or 24'), TIME_FORMAT_CHOICES))
286
- .addOption(withCaseInsensitiveChoices(new Option('--date-format <format>', 'Date format: us (MM-DD) or intl (DD-MM)'), DATE_FORMAT_CHOICES))
287
- .addOption(withCaseInsensitiveChoices(new Option('--start-day <day>', 'Week start: monday, tuesday, etc.'), DAY_CHOICES))
288
- .addOption(withCaseInsensitiveChoices(new Option('--theme <name>', 'Theme: todoist, dark, moonstone, tangerine, etc.'), THEME_CHOICES))
289
- .option('--auto-reminder <min>', 'Default reminder minutes (0 to disable)')
290
- .addOption(withCaseInsensitiveChoices(new Option('--next-week <day>', '"Next week" day: monday, tuesday, etc.'), DAY_CHOICES))
291
- .option('--start-page <page>', 'Default view: inbox, today, or project URL')
292
- .addOption(boolOption('--reminder-push <bool>', 'Push reminders: on/off'))
293
- .addOption(boolOption('--reminder-desktop <bool>', 'Desktop reminders: on/off'))
294
- .addOption(boolOption('--reminder-email <bool>', 'Email reminders: on/off'))
295
- .addOption(boolOption('--completed-sound-desktop <bool>', 'Desktop completion sound: on/off'))
296
- .addOption(boolOption('--completed-sound-mobile <bool>', 'Mobile completion sound: on/off'))
297
- .action(async (options, command) => {
298
- const hasOptions = Object.values(options).some((v) => v !== undefined);
299
- if (!hasOptions) {
300
- command.help();
301
- return;
302
- }
303
- await update(options);
304
- });
305
- settings
306
- .command('themes')
307
- .description('List available themes')
308
- .action(() => {
309
- console.log(formatThemeList());
310
- });
311
- }
312
- //# sourceMappingURL=settings.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"settings.js","sourceRoot":"","sources":["../../src/commands/settings.ts"],"names":[],"mappings":"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"}
@@ -1,3 +0,0 @@
1
- import { Command } from 'commander';
2
- export declare function registerSkillCommand(program: Command): void;
3
- //# sourceMappingURL=skill.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"skill.d.ts","sourceRoot":"","sources":["../../src/commands/skill.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAkInC,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA4C3D"}
@@ -1,127 +0,0 @@
1
- import chalk from 'chalk';
2
- import { formatError } from '../lib/output.js';
3
- import { getInstaller, listAgents, skillInstallers } from '../lib/skills/index.js';
4
- import { updateAllInstalledSkills } from '../lib/skills/update-installed.js';
5
- async function installSkill(agent, options) {
6
- const installer = getInstaller(agent);
7
- if (!installer) {
8
- const available = listAgents().join(', ');
9
- throw new Error(formatError('UNKNOWN_AGENT', `Unknown agent: ${agent}`, [
10
- `Available agents: ${available}`,
11
- ]));
12
- }
13
- const local = options.local ?? false;
14
- const force = options.force ?? false;
15
- await installer.install(local, force);
16
- const filepath = installer.getInstallPath(local);
17
- console.log(chalk.green('✓'), `Installed ${installer.name} skill`);
18
- console.log(chalk.dim(filepath));
19
- }
20
- async function updateAllSkills(options) {
21
- const local = options.local ?? false;
22
- const result = await updateAllInstalledSkills(local);
23
- for (const name of result.updated) {
24
- console.log(chalk.green('✓'), `Updated ${name} skill`);
25
- }
26
- for (const name of result.skipped) {
27
- console.log(chalk.dim(` Skipped ${name} (not installed)`));
28
- }
29
- for (const name of result.errors) {
30
- console.log(chalk.red('✗'), `Failed to update ${name}`);
31
- }
32
- if (result.updated.length === 0 && result.errors.length === 0) {
33
- console.log(chalk.dim('No installed skills found to update.'));
34
- }
35
- }
36
- async function updateSkill(agent, options) {
37
- const installer = getInstaller(agent);
38
- if (!installer) {
39
- const available = listAgents().join(', ');
40
- throw new Error(formatError('UNKNOWN_AGENT', `Unknown agent: ${agent}`, [
41
- `Available agents: ${available}`,
42
- ]));
43
- }
44
- const local = options.local ?? false;
45
- const installed = await installer.isInstalled(local);
46
- if (!installed) {
47
- throw new Error(`Skill is not installed for ${agent}. Use \`td skill install ${agent}${local ? ' --local' : ''}\` first.`);
48
- }
49
- await installer.update(local);
50
- const filepath = installer.getInstallPath(local);
51
- console.log(chalk.green('✓'), `Updated ${installer.name} skill`);
52
- console.log(chalk.dim(filepath));
53
- }
54
- async function uninstallSkill(agent, options) {
55
- const installer = getInstaller(agent);
56
- if (!installer) {
57
- const available = listAgents().join(', ');
58
- throw new Error(formatError('UNKNOWN_AGENT', `Unknown agent: ${agent}`, [
59
- `Available agents: ${available}`,
60
- ]));
61
- }
62
- const local = options.local ?? false;
63
- await installer.uninstall(local);
64
- console.log(chalk.green('✓'), `Uninstalled ${installer.name} skill`);
65
- }
66
- async function listSkills() {
67
- const agents = listAgents();
68
- console.log(chalk.bold('Available agents:'));
69
- console.log('');
70
- for (const agentName of agents) {
71
- const installer = skillInstallers[agentName];
72
- const globalInstalled = await installer.isInstalled(false);
73
- const localInstalled = await installer.isInstalled(true);
74
- const status = [];
75
- if (globalInstalled)
76
- status.push('global');
77
- if (localInstalled)
78
- status.push('local');
79
- const statusStr = status.length > 0 ? chalk.green(`[${status.join(', ')}]`) : chalk.dim('[not installed]');
80
- console.log(` ${agentName}`);
81
- console.log(` ${chalk.dim(installer.description)}`);
82
- console.log(` ${statusStr}`);
83
- console.log('');
84
- }
85
- }
86
- export function registerSkillCommand(program) {
87
- const skill = program.command('skill').description('Manage coding agent skills/integrations');
88
- const installCmd = skill
89
- .command('install [agent]')
90
- .description('Install skill for a coding agent')
91
- .option('--local', 'Install in current project instead of global')
92
- .option('--force', 'Overwrite existing skill file')
93
- .action((agent, options) => {
94
- if (!agent) {
95
- installCmd.help();
96
- return;
97
- }
98
- return installSkill(agent, options);
99
- });
100
- const updateCmd = skill
101
- .command('update [agent]')
102
- .description('Update installed skill to latest version')
103
- .option('--local', 'Update in current project instead of global')
104
- .action((agent, options) => {
105
- if (!agent) {
106
- updateCmd.help();
107
- return;
108
- }
109
- if (agent === 'all') {
110
- return updateAllSkills(options);
111
- }
112
- return updateSkill(agent, options);
113
- });
114
- const uninstallCmd = skill
115
- .command('uninstall [agent]')
116
- .description('Uninstall skill for a coding agent')
117
- .option('--local', 'Remove from current project instead of global')
118
- .action((agent, options) => {
119
- if (!agent) {
120
- uninstallCmd.help();
121
- return;
122
- }
123
- return uninstallSkill(agent, options);
124
- });
125
- skill.command('list').description('List supported agents and install status').action(listSkills);
126
- }
127
- //# sourceMappingURL=skill.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"skill.js","sourceRoot":"","sources":["../../src/commands/skill.ts"],"names":[],"mappings":"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"}
@@ -1,3 +0,0 @@
1
- import { Command } from 'commander';
2
- export declare function registerStatsCommand(program: Command): void;
3
- //# sourceMappingURL=stats.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"stats.d.ts","sourceRoot":"","sources":["../../src/commands/stats.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AA8KnC,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAqB3D"}
@@ -1,151 +0,0 @@
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
@@ -1 +0,0 @@
1
- {"version":3,"file":"stats.js","sourceRoot":"","sources":["../../src/commands/stats.ts"],"names":[],"mappings":"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"}
@@ -1,5 +0,0 @@
1
- import { Command } from 'commander';
2
- import type { ViewOptions } from '../lib/options.js';
3
- export declare function viewTask(ref: string, options: ViewOptions): Promise<void>;
4
- export declare function registerTaskCommand(program: Command): void;
5
- //# sourceMappingURL=task.d.ts.map