@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,363 @@
1
+ import { completeTaskForever, getApi } from '../lib/api/core.js';
2
+ import { openInBrowser } from '../lib/browser.js';
3
+ import { parseDuration } from '../lib/duration.js';
4
+ import { formatError, formatJson, formatTaskView } from '../lib/output.js';
5
+ import { taskUrl } from '../lib/urls.js';
6
+ function applyDuration(args, durationStr) {
7
+ const minutes = parseDuration(durationStr);
8
+ if (minutes === null) {
9
+ throw new Error(formatError('INVALID_DURATION', `Invalid duration format: "${durationStr}"`, [
10
+ 'Examples: 30m, 1h, 2h15m, 1 hour 30 minutes',
11
+ ]));
12
+ }
13
+ args.duration = minutes;
14
+ args.durationUnit = 'minute';
15
+ }
16
+ import { resolveAssigneeId } from '../lib/collaborators.js';
17
+ import { extractId, isIdRef, requireIdRef, resolveParentTaskId, resolveProjectId, resolveProjectRef, resolveSectionId, resolveTaskRef, } from '../lib/refs.js';
18
+ import { listTasksForProject, parsePriority } from '../lib/task-list.js';
19
+ async function listTasks(options) {
20
+ const api = await getApi();
21
+ let projectId = null;
22
+ if (options.project) {
23
+ projectId = await resolveProjectId(api, options.project);
24
+ }
25
+ let parentId;
26
+ if (options.parent) {
27
+ const parentTask = await resolveTaskRef(api, options.parent);
28
+ parentId = parentTask.id;
29
+ if (!projectId)
30
+ projectId = parentTask.projectId;
31
+ }
32
+ await listTasksForProject(projectId, { ...options, parent: parentId });
33
+ }
34
+ async function viewTask(ref, options) {
35
+ const api = await getApi();
36
+ const task = await resolveTaskRef(api, ref);
37
+ if (options.json) {
38
+ console.log(formatJson(task, 'task', options.full, true));
39
+ return;
40
+ }
41
+ const { results: projects } = await api.getProjects();
42
+ const project = projects.find((p) => p.id === task.projectId);
43
+ let parentTask;
44
+ if (task.parentId) {
45
+ parentTask = await api.getTask(task.parentId);
46
+ }
47
+ const { results: subtasks } = await api.getTasks({ parentId: task.id });
48
+ const subtaskCount = subtasks.length;
49
+ console.log(formatTaskView({
50
+ task,
51
+ project,
52
+ parentTask,
53
+ subtaskCount,
54
+ full: options.full,
55
+ raw: options.raw,
56
+ }));
57
+ }
58
+ async function completeTask(ref, options) {
59
+ const api = await getApi();
60
+ const task = await resolveTaskRef(api, ref);
61
+ if (task.checked) {
62
+ console.log('Task already completed.');
63
+ return;
64
+ }
65
+ if (task.isUncompletable) {
66
+ console.log('Task is uncompletable (reference item).');
67
+ return;
68
+ }
69
+ if (options.forever) {
70
+ const isRecurring = task.due?.isRecurring ?? false;
71
+ if (!isRecurring) {
72
+ console.log('Task is not recurring, completing normally.');
73
+ }
74
+ await completeTaskForever(task.id);
75
+ console.log(`Completed forever: ${task.content}`);
76
+ return;
77
+ }
78
+ await api.closeTask(task.id);
79
+ console.log(`Completed: ${task.content}`);
80
+ }
81
+ async function uncompleteTask(ref) {
82
+ const api = await getApi();
83
+ const id = requireIdRef(ref, 'task');
84
+ await api.reopenTask(id);
85
+ console.log(`Reopened task ${id}`);
86
+ }
87
+ async function deleteTask(ref, options) {
88
+ const api = await getApi();
89
+ const task = await resolveTaskRef(api, ref);
90
+ if (!options.yes) {
91
+ console.log(`Would delete: ${task.content}`);
92
+ console.log('Use --yes to confirm.');
93
+ return;
94
+ }
95
+ await api.deleteTask(task.id);
96
+ console.log(`Deleted: ${task.content}`);
97
+ }
98
+ async function addTask(options) {
99
+ const api = await getApi();
100
+ const args = {
101
+ content: options.content,
102
+ };
103
+ if (options.due) {
104
+ args.dueString = options.due;
105
+ }
106
+ if (options.deadline) {
107
+ args.deadlineDate = options.deadline;
108
+ }
109
+ if (options.priority) {
110
+ args.priority = parsePriority(options.priority);
111
+ }
112
+ let project = null;
113
+ if (options.project) {
114
+ project = await resolveProjectRef(api, options.project);
115
+ args.projectId = project.id;
116
+ }
117
+ if (options.section) {
118
+ args.sectionId = requireIdRef(options.section, 'section');
119
+ }
120
+ if (options.labels) {
121
+ args.labels = options.labels.split(',').map((l) => l.trim());
122
+ }
123
+ if (options.parent) {
124
+ if (isIdRef(options.parent)) {
125
+ args.parentId = extractId(options.parent);
126
+ }
127
+ else {
128
+ if (!args.projectId) {
129
+ throw new Error(formatError('PROJECT_REQUIRED', 'The --project flag is required when using --parent with a task name.', ['Use id:xxx format to specify parent by ID without a project.']));
130
+ }
131
+ args.parentId = await resolveParentTaskId(api, options.parent, args.projectId, args.sectionId);
132
+ }
133
+ }
134
+ if (options.description) {
135
+ args.description = options.description;
136
+ }
137
+ if (options.assignee) {
138
+ if (!project) {
139
+ throw new Error(formatError('PROJECT_REQUIRED', 'The --project flag is required when using --assignee.'));
140
+ }
141
+ args.assigneeId = await resolveAssigneeId(api, options.assignee, project);
142
+ }
143
+ if (options.duration) {
144
+ applyDuration(args, options.duration);
145
+ }
146
+ const task = await api.addTask(args);
147
+ console.log(`Created: ${task.content}`);
148
+ if (task.due)
149
+ console.log(`Due: ${task.due.string || task.due.date}`);
150
+ if (task.deadline)
151
+ console.log(`Deadline: ${task.deadline.date}`);
152
+ console.log(`ID: ${task.id}`);
153
+ }
154
+ async function updateTask(ref, options) {
155
+ const api = await getApi();
156
+ const task = await resolveTaskRef(api, ref);
157
+ const args = {};
158
+ if (options.content)
159
+ args.content = options.content;
160
+ if (options.due)
161
+ args.dueString = options.due;
162
+ if (options.deadline === false) {
163
+ args.deadlineDate = null;
164
+ }
165
+ else if (options.deadline) {
166
+ args.deadlineDate = options.deadline;
167
+ }
168
+ if (options.priority)
169
+ args.priority = parsePriority(options.priority);
170
+ if (options.labels)
171
+ args.labels = options.labels.split(',').map((l) => l.trim());
172
+ if (options.description)
173
+ args.description = options.description;
174
+ if (options.unassign) {
175
+ args.assigneeId = null;
176
+ }
177
+ else if (options.assignee) {
178
+ const project = await api.getProject(task.projectId);
179
+ args.assigneeId = await resolveAssigneeId(api, options.assignee, project);
180
+ }
181
+ if (options.duration) {
182
+ applyDuration(args, options.duration);
183
+ }
184
+ const updated = await api.updateTask(task.id, args);
185
+ console.log(`Updated: ${updated.content}`);
186
+ }
187
+ async function moveTask(ref, options) {
188
+ const wantsNoParent = options.parent === false;
189
+ const wantsNoSection = options.section === false;
190
+ const hasDestination = options.project || options.section || options.parent || wantsNoParent || wantsNoSection;
191
+ if (!hasDestination) {
192
+ throw new Error(formatError('MISSING_DESTINATION', 'At least one of --project, --section, --parent, --no-parent, or --no-section is required.'));
193
+ }
194
+ const api = await getApi();
195
+ const task = await resolveTaskRef(api, ref);
196
+ if (wantsNoParent || wantsNoSection) {
197
+ const targetProjectId = options.project
198
+ ? await resolveProjectId(api, options.project)
199
+ : task.projectId;
200
+ await api.moveTask(task.id, { projectId: targetProjectId });
201
+ console.log(`Moved: ${task.content}`);
202
+ return;
203
+ }
204
+ const targetProjectId = options.project
205
+ ? await resolveProjectId(api, options.project)
206
+ : task.projectId;
207
+ let targetSectionId;
208
+ if (options.section) {
209
+ targetSectionId = await resolveSectionId(api, options.section, targetProjectId);
210
+ }
211
+ if (options.parent) {
212
+ const parentId = await resolveParentTaskId(api, options.parent, targetProjectId, targetSectionId ?? task.sectionId ?? undefined);
213
+ await api.moveTask(task.id, { parentId });
214
+ }
215
+ else if (targetSectionId) {
216
+ await api.moveTask(task.id, { sectionId: targetSectionId });
217
+ }
218
+ else {
219
+ await api.moveTask(task.id, { projectId: targetProjectId });
220
+ }
221
+ console.log(`Moved: ${task.content}`);
222
+ }
223
+ async function browseTask(ref) {
224
+ const api = await getApi();
225
+ const task = await resolveTaskRef(api, ref);
226
+ await openInBrowser(taskUrl(task.id));
227
+ }
228
+ export function registerTaskCommand(program) {
229
+ const task = program.command('task').description('Manage tasks');
230
+ task.command('list')
231
+ .description('List tasks')
232
+ .option('--project <name>', 'Filter by project name or id:xxx')
233
+ .option('--parent <ref>', 'Filter subtasks of a parent task')
234
+ .option('--label <name>', 'Filter by label (comma-separated for multiple)')
235
+ .option('--priority <p1-p4>', 'Filter by priority')
236
+ .option('--due <date>', 'Filter by due date (today, overdue, or YYYY-MM-DD)')
237
+ .option('--filter <query>', 'Raw Todoist filter query')
238
+ .option('--assignee <ref>', 'Filter by assignee (me or id:xxx)')
239
+ .option('--unassigned', 'Show only unassigned tasks')
240
+ .option('--workspace <name>', 'Filter to tasks in workspace')
241
+ .option('--personal', 'Filter to tasks in personal projects')
242
+ .option('--limit <n>', 'Limit number of results (default: 300)')
243
+ .option('--cursor <cursor>', 'Continue from cursor')
244
+ .option('--all', 'Fetch all results (no limit)')
245
+ .option('--json', 'Output as JSON')
246
+ .option('--ndjson', 'Output as newline-delimited JSON')
247
+ .option('--full', 'Include all fields in JSON output')
248
+ .option('--raw', 'Disable markdown rendering')
249
+ .option('--show-urls', 'Show web app URLs for each task')
250
+ .action(listTasks);
251
+ const viewCmd = task
252
+ .command('view [ref]')
253
+ .description('View task details')
254
+ .option('--json', 'Output as JSON')
255
+ .option('--full', 'Include all fields in output')
256
+ .option('--raw', 'Disable markdown rendering')
257
+ .action((ref, options) => {
258
+ if (!ref) {
259
+ viewCmd.help();
260
+ return;
261
+ }
262
+ return viewTask(ref, options);
263
+ });
264
+ const completeCmd = task
265
+ .command('complete [ref]')
266
+ .description('Complete a task')
267
+ .option('--forever', 'Complete recurring task permanently (stops recurrence)')
268
+ .action((ref, options) => {
269
+ if (!ref) {
270
+ completeCmd.help();
271
+ return;
272
+ }
273
+ return completeTask(ref, options);
274
+ });
275
+ const uncompleteCmd = task
276
+ .command('uncomplete [ref]')
277
+ .description('Reopen a completed task (requires id:xxx)')
278
+ .action((ref) => {
279
+ if (!ref) {
280
+ uncompleteCmd.help();
281
+ return;
282
+ }
283
+ return uncompleteTask(ref);
284
+ });
285
+ const deleteCmd = task
286
+ .command('delete [ref]')
287
+ .description('Delete a task')
288
+ .option('--yes', 'Confirm deletion')
289
+ .action((ref, options) => {
290
+ if (!ref) {
291
+ deleteCmd.help();
292
+ return;
293
+ }
294
+ return deleteTask(ref, options);
295
+ });
296
+ const addCmd = task
297
+ .command('add')
298
+ .description('Add a task with explicit flags')
299
+ .option('--content <text>', 'Task content (required)')
300
+ .option('--due <date>', 'Due date (natural language or YYYY-MM-DD)')
301
+ .option('--deadline <date>', 'Deadline date (YYYY-MM-DD)')
302
+ .option('--priority <p1-p4>', 'Priority level')
303
+ .option('--project <name>', 'Project name or id:xxx')
304
+ .option('--section <id>', 'Section ID')
305
+ .option('--labels <a,b>', 'Comma-separated labels')
306
+ .option('--parent <ref>', 'Parent task reference')
307
+ .option('--description <text>', 'Task description')
308
+ .option('--assignee <ref>', 'Assign to user (name, email, id:xxx, or "me")')
309
+ .option('--duration <time>', 'Duration (e.g., 30m, 1h, 2h15m)')
310
+ .action((options) => {
311
+ if (!options.content) {
312
+ addCmd.help();
313
+ return;
314
+ }
315
+ return addTask(options);
316
+ });
317
+ const updateCmd = task
318
+ .command('update [ref]')
319
+ .description('Update a task')
320
+ .option('--content <text>', 'New content')
321
+ .option('--due <date>', 'New due date')
322
+ .option('--deadline <date>', 'Deadline date (YYYY-MM-DD)')
323
+ .option('--no-deadline', 'Remove deadline')
324
+ .option('--priority <p1-p4>', 'New priority')
325
+ .option('--labels <a,b>', 'New labels (replaces existing)')
326
+ .option('--description <text>', 'New description')
327
+ .option('--assignee <ref>', 'Assign to user (name, email, id:xxx, or "me")')
328
+ .option('--unassign', 'Remove assignee')
329
+ .option('--duration <time>', 'Duration (e.g., 30m, 1h, 2h15m)')
330
+ .action((ref, options) => {
331
+ if (!ref) {
332
+ updateCmd.help();
333
+ return;
334
+ }
335
+ return updateTask(ref, options);
336
+ });
337
+ const moveCmd = task
338
+ .command('move [ref]')
339
+ .description('Move task to project/section/parent')
340
+ .option('--project <ref>', 'Target project (name or id:xxx)')
341
+ .option('--section <ref>', 'Target section (name or id:xxx)')
342
+ .option('--parent <ref>', 'Parent task (name or id:xxx)')
343
+ .option('--no-parent', 'Remove parent (move to project root)')
344
+ .option('--no-section', 'Remove section (move to project root)')
345
+ .action((ref, options) => {
346
+ if (!ref) {
347
+ moveCmd.help();
348
+ return;
349
+ }
350
+ return moveTask(ref, options);
351
+ });
352
+ const browseCmd = task
353
+ .command('browse [ref]')
354
+ .description('Open task in browser')
355
+ .action((ref) => {
356
+ if (!ref) {
357
+ browseCmd.help();
358
+ return;
359
+ }
360
+ return browseTask(ref);
361
+ });
362
+ }
363
+ //# sourceMappingURL=task.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task.js","sourceRoot":"","sources":["../../src/commands/task.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare function registerTodayCommand(program: Command): void;
3
+ //# sourceMappingURL=today.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"today.d.ts","sourceRoot":"","sources":["../../src/commands/today.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AA2BnC,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAgI3D"}
@@ -0,0 +1,97 @@
1
+ import chalk from 'chalk';
2
+ import { getApi, getCurrentUserId } from '../lib/api/core.js';
3
+ import { CollaboratorCache, formatAssignee } from '../lib/collaborators.js';
4
+ import { getLocalDate } from '../lib/dates.js';
5
+ import { formatNextCursorFooter, formatPaginatedJson, formatPaginatedNdjson, formatTaskRow, } from '../lib/output.js';
6
+ import { LIMITS, paginate } from '../lib/pagination.js';
7
+ import { filterByWorkspaceOrPersonal } from '../lib/task-list.js';
8
+ export function registerTodayCommand(program) {
9
+ program
10
+ .command('today')
11
+ .description('Show tasks due today and overdue')
12
+ .option('--limit <n>', 'Limit number of results (default: 300)')
13
+ .option('--cursor <cursor>', 'Continue from cursor')
14
+ .option('--all', 'Fetch all results (no limit)')
15
+ .option('--any-assignee', 'Show tasks assigned to anyone (default: only me/unassigned)')
16
+ .option('--workspace <name>', 'Filter to tasks in workspace')
17
+ .option('--personal', 'Filter to tasks in personal projects')
18
+ .option('--json', 'Output as JSON')
19
+ .option('--ndjson', 'Output as newline-delimited JSON')
20
+ .option('--full', 'Include all fields in JSON output')
21
+ .option('--raw', 'Disable markdown rendering')
22
+ .option('--show-urls', 'Show web app URLs for each task')
23
+ .action(async (options) => {
24
+ const api = await getApi();
25
+ const targetLimit = options.all
26
+ ? Number.MAX_SAFE_INTEGER
27
+ : options.limit
28
+ ? parseInt(options.limit, 10)
29
+ : LIMITS.tasks;
30
+ const { results: tasks, nextCursor } = await paginate((cursor, limit) => api.getTasks({ cursor: cursor ?? undefined, limit }), { limit: targetLimit, startCursor: options.cursor });
31
+ const today = getLocalDate(0);
32
+ let filteredTasks = tasks;
33
+ if (!options.anyAssignee) {
34
+ const currentUserId = await getCurrentUserId();
35
+ filteredTasks = tasks.filter((t) => !t.responsibleUid || t.responsibleUid === currentUserId);
36
+ }
37
+ const filterResult = await filterByWorkspaceOrPersonal(api, filteredTasks, options.workspace, options.personal);
38
+ filteredTasks = filterResult.tasks;
39
+ const overdue = filteredTasks.filter((t) => t.due && t.due.date < today);
40
+ const dueToday = filteredTasks.filter((t) => t.due?.date === today);
41
+ const allTodayTasks = [...overdue, ...dueToday];
42
+ if (options.json) {
43
+ console.log(formatPaginatedJson({ results: allTodayTasks, nextCursor }, 'task', options.full, options.showUrls));
44
+ return;
45
+ }
46
+ if (options.ndjson) {
47
+ console.log(formatPaginatedNdjson({ results: allTodayTasks, nextCursor }, 'task', options.full, options.showUrls));
48
+ return;
49
+ }
50
+ const collaboratorCache = new CollaboratorCache();
51
+ await collaboratorCache.preload(api, allTodayTasks, filterResult.projects);
52
+ if (overdue.length === 0 && dueToday.length === 0) {
53
+ console.log('No tasks due today.');
54
+ console.log(formatNextCursorFooter(nextCursor));
55
+ return;
56
+ }
57
+ const { projects } = filterResult;
58
+ if (overdue.length > 0) {
59
+ console.log(chalk.red.bold(`Overdue (${overdue.length})`));
60
+ for (const task of overdue) {
61
+ const assignee = formatAssignee({
62
+ userId: task.responsibleUid,
63
+ projectId: task.projectId,
64
+ projects,
65
+ cache: collaboratorCache,
66
+ });
67
+ console.log(formatTaskRow({
68
+ task,
69
+ projectName: projects.get(task.projectId)?.name,
70
+ assignee: assignee ?? undefined,
71
+ raw: options.raw,
72
+ showUrl: options.showUrls,
73
+ }));
74
+ console.log('');
75
+ }
76
+ }
77
+ console.log(chalk.bold(`Today (${dueToday.length})`));
78
+ for (const task of dueToday) {
79
+ const assignee = formatAssignee({
80
+ userId: task.responsibleUid,
81
+ projectId: task.projectId,
82
+ projects,
83
+ cache: collaboratorCache,
84
+ });
85
+ console.log(formatTaskRow({
86
+ task,
87
+ projectName: projects.get(task.projectId)?.name,
88
+ assignee: assignee ?? undefined,
89
+ raw: options.raw,
90
+ showUrl: options.showUrls,
91
+ }));
92
+ console.log('');
93
+ }
94
+ console.log(formatNextCursorFooter(nextCursor));
95
+ });
96
+ }
97
+ //# sourceMappingURL=today.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"today.js","sourceRoot":"","sources":["../../src/commands/today.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare function registerUpcomingCommand(program: Command): void;
3
+ //# sourceMappingURL=upcoming.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"upcoming.d.ts","sourceRoot":"","sources":["../../src/commands/upcoming.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AA0BnC,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAyJ9D"}
@@ -0,0 +1,121 @@
1
+ import chalk from 'chalk';
2
+ import { getApi, getCurrentUserId } from '../lib/api/core.js';
3
+ import { CollaboratorCache, formatAssignee } from '../lib/collaborators.js';
4
+ import { formatDateHeader, getLocalDate } from '../lib/dates.js';
5
+ import { formatNextCursorFooter, formatPaginatedJson, formatPaginatedNdjson, formatTaskRow, } from '../lib/output.js';
6
+ import { LIMITS, paginate } from '../lib/pagination.js';
7
+ import { filterByWorkspaceOrPersonal } from '../lib/task-list.js';
8
+ export function registerUpcomingCommand(program) {
9
+ program
10
+ .command('upcoming [days]')
11
+ .description('Show tasks due in the next N days (default: 7)')
12
+ .option('--limit <n>', 'Limit number of results (default: 300)')
13
+ .option('--cursor <cursor>', 'Continue from cursor')
14
+ .option('--all', 'Fetch all results (no limit)')
15
+ .option('--any-assignee', 'Show tasks assigned to anyone (default: only me/unassigned)')
16
+ .option('--workspace <name>', 'Filter to tasks in workspace')
17
+ .option('--personal', 'Filter to tasks in personal projects')
18
+ .option('--json', 'Output as JSON')
19
+ .option('--ndjson', 'Output as newline-delimited JSON')
20
+ .option('--full', 'Include all fields in JSON output')
21
+ .option('--show-urls', 'Show web app URLs for each task')
22
+ .action(async (daysArg, options) => {
23
+ const days = daysArg ? parseInt(daysArg, 10) : 7;
24
+ if (Number.isNaN(days) || days < 1) {
25
+ console.error('Days must be a positive number');
26
+ process.exitCode = 1;
27
+ return;
28
+ }
29
+ const api = await getApi();
30
+ const targetLimit = options.all
31
+ ? Number.MAX_SAFE_INTEGER
32
+ : options.limit
33
+ ? parseInt(options.limit, 10)
34
+ : LIMITS.tasks;
35
+ const { results: tasks, nextCursor } = await paginate((cursor, limit) => api.getTasks({ cursor: cursor ?? undefined, limit }), { limit: targetLimit, startCursor: options.cursor });
36
+ const today = getLocalDate(0);
37
+ const endDate = getLocalDate(days);
38
+ let filteredTasks = tasks;
39
+ if (!options.anyAssignee) {
40
+ const currentUserId = await getCurrentUserId();
41
+ filteredTasks = tasks.filter((t) => !t.responsibleUid || t.responsibleUid === currentUserId);
42
+ }
43
+ const filterResult = await filterByWorkspaceOrPersonal(api, filteredTasks, options.workspace, options.personal);
44
+ filteredTasks = filterResult.tasks;
45
+ const relevantTasks = filteredTasks.filter((t) => t.due && t.due.date < endDate);
46
+ if (options.json) {
47
+ console.log(formatPaginatedJson({ results: relevantTasks, nextCursor }, 'task', options.full, options.showUrls));
48
+ return;
49
+ }
50
+ if (options.ndjson) {
51
+ console.log(formatPaginatedNdjson({ results: relevantTasks, nextCursor }, 'task', options.full, options.showUrls));
52
+ return;
53
+ }
54
+ const { projects } = filterResult;
55
+ const collaboratorCache = new CollaboratorCache();
56
+ await collaboratorCache.preload(api, relevantTasks, projects);
57
+ if (relevantTasks.length === 0) {
58
+ console.log(`No tasks due in the next ${days} day${days === 1 ? '' : 's'}.`);
59
+ console.log(formatNextCursorFooter(nextCursor));
60
+ return;
61
+ }
62
+ const overdue = [];
63
+ const byDate = new Map();
64
+ for (const task of relevantTasks) {
65
+ const dueDate = task.due?.date;
66
+ if (!dueDate)
67
+ continue; // Skip tasks without due dates
68
+ if (dueDate < today) {
69
+ overdue.push(task);
70
+ }
71
+ else {
72
+ const list = byDate.get(dueDate) || [];
73
+ list.push(task);
74
+ byDate.set(dueDate, list);
75
+ }
76
+ }
77
+ if (overdue.length > 0) {
78
+ console.log(chalk.red.bold(`Overdue (${overdue.length})`));
79
+ for (const task of overdue) {
80
+ const assignee = formatAssignee({
81
+ userId: task.responsibleUid,
82
+ projectId: task.projectId,
83
+ projects,
84
+ cache: collaboratorCache,
85
+ });
86
+ console.log(formatTaskRow({
87
+ task,
88
+ projectName: projects.get(task.projectId)?.name,
89
+ assignee: assignee ?? undefined,
90
+ showUrl: options.showUrls,
91
+ }));
92
+ console.log('');
93
+ }
94
+ }
95
+ const sortedDates = Array.from(byDate.keys()).sort();
96
+ for (const date of sortedDates) {
97
+ const dateTasks = byDate.get(date);
98
+ if (!dateTasks)
99
+ continue; // Should not happen since date comes from keys()
100
+ const header = formatDateHeader(date, today);
101
+ console.log(chalk.bold(`${header} (${dateTasks.length})`));
102
+ for (const task of dateTasks) {
103
+ const assignee = formatAssignee({
104
+ userId: task.responsibleUid,
105
+ projectId: task.projectId,
106
+ projects,
107
+ cache: collaboratorCache,
108
+ });
109
+ console.log(formatTaskRow({
110
+ task,
111
+ projectName: projects.get(task.projectId)?.name,
112
+ assignee: assignee ?? undefined,
113
+ showUrl: options.showUrls,
114
+ }));
115
+ console.log('');
116
+ }
117
+ }
118
+ console.log(formatNextCursorFooter(nextCursor));
119
+ });
120
+ }
121
+ //# sourceMappingURL=upcoming.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"upcoming.js","sourceRoot":"","sources":["../../src/commands/upcoming.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare function registerWorkspaceCommand(program: Command): void;
3
+ //# sourceMappingURL=workspace.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workspace.d.ts","sourceRoot":"","sources":["../../src/commands/workspace.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAsTnC,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAwD/D"}