@doist/todoist-cli 1.41.0 → 1.43.0-next.1

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 (69) hide show
  1. package/CHANGELOG.md +7 -0
  2. package/dist/commands/auth/index.js +1 -1
  3. package/dist/commands/auth/index.js.map +1 -1
  4. package/dist/commands/auth/status.js +1 -1
  5. package/dist/commands/auth/status.js.map +1 -1
  6. package/dist/commands/backup/download.d.ts +6 -0
  7. package/dist/commands/backup/download.d.ts.map +1 -0
  8. package/dist/commands/backup/download.js +28 -0
  9. package/dist/commands/backup/download.js.map +1 -0
  10. package/dist/commands/backup/helpers.d.ts +3 -0
  11. package/dist/commands/backup/helpers.d.ts.map +1 -0
  12. package/dist/commands/backup/helpers.js +12 -0
  13. package/dist/commands/backup/helpers.js.map +1 -0
  14. package/dist/commands/backup/index.d.ts +3 -0
  15. package/dist/commands/backup/index.d.ts.map +1 -0
  16. package/dist/commands/backup/index.js +30 -0
  17. package/dist/commands/backup/index.js.map +1 -0
  18. package/dist/commands/backup/list.d.ts +7 -0
  19. package/dist/commands/backup/list.d.ts.map +1 -0
  20. package/dist/commands/backup/list.js +25 -0
  21. package/dist/commands/backup/list.js.map +1 -0
  22. package/dist/commands/{completed.d.ts → completed/index.d.ts} +1 -1
  23. package/dist/commands/completed/index.d.ts.map +1 -0
  24. package/dist/commands/completed/index.js +28 -0
  25. package/dist/commands/completed/index.js.map +1 -0
  26. package/dist/commands/completed/list.d.ts +10 -0
  27. package/dist/commands/completed/list.d.ts.map +1 -0
  28. package/dist/commands/completed/list.js +109 -0
  29. package/dist/commands/completed/list.js.map +1 -0
  30. package/dist/commands/goal.d.ts +3 -0
  31. package/dist/commands/goal.d.ts.map +1 -0
  32. package/dist/commands/goal.js +344 -0
  33. package/dist/commands/goal.js.map +1 -0
  34. package/dist/index.js +13 -2
  35. package/dist/index.js.map +1 -1
  36. package/dist/lib/api/core.d.ts.map +1 -1
  37. package/dist/lib/api/core.js +13 -3
  38. package/dist/lib/api/core.js.map +1 -1
  39. package/dist/lib/oauth.d.ts +2 -2
  40. package/dist/lib/oauth.d.ts.map +1 -1
  41. package/dist/lib/oauth.js +2 -2
  42. package/dist/lib/oauth.js.map +1 -1
  43. package/dist/lib/output.d.ts +1 -1
  44. package/dist/lib/output.d.ts.map +1 -1
  45. package/dist/lib/output.js +14 -0
  46. package/dist/lib/output.js.map +1 -1
  47. package/dist/lib/pagination.d.ts +1 -0
  48. package/dist/lib/pagination.d.ts.map +1 -1
  49. package/dist/lib/pagination.js +1 -0
  50. package/dist/lib/pagination.js.map +1 -1
  51. package/dist/lib/permissions.d.ts.map +1 -1
  52. package/dist/lib/permissions.js +4 -0
  53. package/dist/lib/permissions.js.map +1 -1
  54. package/dist/lib/refs.d.ts +2 -1
  55. package/dist/lib/refs.d.ts.map +1 -1
  56. package/dist/lib/refs.js +5 -0
  57. package/dist/lib/refs.js.map +1 -1
  58. package/dist/lib/skills/content.d.ts +1 -1
  59. package/dist/lib/skills/content.d.ts.map +1 -1
  60. package/dist/lib/skills/content.js +29 -2
  61. package/dist/lib/skills/content.js.map +1 -1
  62. package/dist/lib/urls.d.ts +2 -0
  63. package/dist/lib/urls.d.ts.map +1 -1
  64. package/dist/lib/urls.js +6 -0
  65. package/dist/lib/urls.js.map +1 -1
  66. package/package.json +2 -2
  67. package/dist/commands/completed.d.ts.map +0 -1
  68. package/dist/commands/completed.js +0 -108
  69. package/dist/commands/completed.js.map +0 -1
package/CHANGELOG.md CHANGED
@@ -1,3 +1,10 @@
1
+ ## [1.42.0](https://github.com/Doist/todoist-cli/compare/v1.41.0...v1.42.0) (2026-04-11)
2
+
3
+ ### Features
4
+
5
+ * add backup list and download commands ([#253](https://github.com/Doist/todoist-cli/issues/253)) ([36de53a](https://github.com/Doist/todoist-cli/commit/36de53a491b874ca7e5b5f702b22d2b046d4ec54))
6
+ * add completed task search ([#252](https://github.com/Doist/todoist-cli/issues/252)) ([7023ce0](https://github.com/Doist/todoist-cli/commit/7023ce0b15ffe6ccb655f1e464ee23c9ef306630))
7
+
1
8
  ## [1.41.0](https://github.com/Doist/todoist-cli/compare/v1.40.0...v1.41.0) (2026-04-11)
2
9
 
3
10
  ### Features
@@ -6,7 +6,7 @@ export function registerAuthCommand(program) {
6
6
  const auth = program.command('auth').description('Manage authentication');
7
7
  auth.command('login')
8
8
  .description('Authenticate with Todoist via OAuth')
9
- .option('--read-only', 'Authenticate with read-only scope (data:read)')
9
+ .option('--read-only', 'Authenticate with read-only scope (data:read,backups:read)')
10
10
  .action(loginWithOAuth);
11
11
  auth.command('token [token]')
12
12
  .description('Save API token for CLI authentication')
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/auth/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAC3C,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACpC,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AACxC,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAE3C,MAAM,UAAU,mBAAmB,CAAC,OAAgB;IAChD,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,WAAW,CAAC,uBAAuB,CAAC,CAAA;IAEzE,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC;SAChB,WAAW,CAAC,qCAAqC,CAAC;SAClD,MAAM,CAAC,aAAa,EAAE,+CAA+C,CAAC;SACtE,MAAM,CAAC,cAAc,CAAC,CAAA;IAE3B,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC;SACxB,WAAW,CAAC,uCAAuC,CAAC;SACpD,MAAM,CAAC,cAAc,CAAC,CAAA;IAE3B,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,oCAAoC,CAAC;SACjD,MAAM,CAAC,QAAQ,EAAE,gBAAgB,CAAC;SAClC,MAAM,CAAC,UAAU,CAAC,CAAA;IAEvB,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,WAAW,CAAC,mCAAmC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;AAC1F,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/auth/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAC3C,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACpC,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AACxC,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAE3C,MAAM,UAAU,mBAAmB,CAAC,OAAgB;IAChD,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,WAAW,CAAC,uBAAuB,CAAC,CAAA;IAEzE,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC;SAChB,WAAW,CAAC,qCAAqC,CAAC;SAClD,MAAM,CAAC,aAAa,EAAE,4DAA4D,CAAC;SACnF,MAAM,CAAC,cAAc,CAAC,CAAA;IAE3B,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC;SACxB,WAAW,CAAC,uCAAuC,CAAC;SACpD,MAAM,CAAC,cAAc,CAAC,CAAA;IAE3B,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,oCAAoC,CAAC;SACjD,MAAM,CAAC,QAAQ,EAAE,gBAAgB,CAAC;SAClC,MAAM,CAAC,UAAU,CAAC,CAAA;IAEvB,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,WAAW,CAAC,mCAAmC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;AAC1F,CAAC"}
@@ -3,7 +3,7 @@ import { getApi } from '../../lib/api/core.js';
3
3
  import { getAuthMetadata } from '../../lib/auth.js';
4
4
  function formatAuthMode(authMode, authScope) {
5
5
  if (authMode === 'read-only') {
6
- return `read-only (OAuth scope ${authScope ?? 'data:read'})`;
6
+ return `read-only (OAuth scope ${authScope ?? 'data:read,backups:read'})`;
7
7
  }
8
8
  if (authMode === 'read-write') {
9
9
  return 'read-write';
@@ -1 +1 @@
1
- {"version":3,"file":"status.js","sourceRoot":"","sources":["../../../src/commands/auth/status.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAA;AAC9C,OAAO,EAAiB,eAAe,EAAE,MAAM,mBAAmB,CAAA;AAElE,SAAS,cAAc,CAAC,QAAkB,EAAE,SAAkB;IAC1D,IAAI,QAAQ,KAAK,WAAW,EAAE,CAAC;QAC3B,OAAO,0BAA0B,SAAS,IAAI,WAAW,GAAG,CAAA;IAChE,CAAC;IACD,IAAI,QAAQ,KAAK,YAAY,EAAE,CAAC;QAC5B,OAAO,YAAY,CAAA;IACvB,CAAC;IACD,OAAO,0DAA0D,CAAA;AACrE,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,OAA2B;IACxD,MAAM,GAAG,GAAG,MAAM,MAAM,EAAE,CAAA;IAC1B,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,OAAO,EAAE,CAAA;IAChC,MAAM,QAAQ,GAAG,MAAM,eAAe,EAAE,CAAA;IACxC,MAAM,SAAS,GAAG,cAAc,CAAC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAA;IAEvE,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;QACf,OAAO,CAAC,GAAG,CACP,IAAI,CAAC,SAAS,CACV;YACI,EAAE,EAAE,IAAI,CAAC,EAAE;YACX,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,QAAQ,EAAE,QAAQ,CAAC,QAAQ;YAC3B,SAAS,EAAE,QAAQ,CAAC,SAAS;SAChC,EACD,IAAI,EACJ,CAAC,CACJ,CACJ,CAAA;IACL,CAAC;SAAM,CAAC;QACJ,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,eAAe,CAAC,CAAA;QAC9C,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,CAAC,KAAK,EAAE,CAAC,CAAA;QACrC,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAA;QACxC,OAAO,CAAC,GAAG,CAAC,YAAY,SAAS,EAAE,CAAC,CAAA;IACxC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"status.js","sourceRoot":"","sources":["../../../src/commands/auth/status.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAA;AAC9C,OAAO,EAAiB,eAAe,EAAE,MAAM,mBAAmB,CAAA;AAElE,SAAS,cAAc,CAAC,QAAkB,EAAE,SAAkB;IAC1D,IAAI,QAAQ,KAAK,WAAW,EAAE,CAAC;QAC3B,OAAO,0BAA0B,SAAS,IAAI,wBAAwB,GAAG,CAAA;IAC7E,CAAC;IACD,IAAI,QAAQ,KAAK,YAAY,EAAE,CAAC;QAC5B,OAAO,YAAY,CAAA;IACvB,CAAC;IACD,OAAO,0DAA0D,CAAA;AACrE,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,OAA2B;IACxD,MAAM,GAAG,GAAG,MAAM,MAAM,EAAE,CAAA;IAC1B,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,OAAO,EAAE,CAAA;IAChC,MAAM,QAAQ,GAAG,MAAM,eAAe,EAAE,CAAA;IACxC,MAAM,SAAS,GAAG,cAAc,CAAC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAA;IAEvE,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;QACf,OAAO,CAAC,GAAG,CACP,IAAI,CAAC,SAAS,CACV;YACI,EAAE,EAAE,IAAI,CAAC,EAAE;YACX,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,QAAQ,EAAE,QAAQ,CAAC,QAAQ;YAC3B,SAAS,EAAE,QAAQ,CAAC,SAAS;SAChC,EACD,IAAI,EACJ,CAAC,CACJ,CACJ,CAAA;IACL,CAAC;SAAM,CAAC;QACJ,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,eAAe,CAAC,CAAA;QAC9C,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,CAAC,KAAK,EAAE,CAAC,CAAA;QACrC,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAA;QACxC,OAAO,CAAC,GAAG,CAAC,YAAY,SAAS,EAAE,CAAC,CAAA;IACxC,CAAC;AACL,CAAC"}
@@ -0,0 +1,6 @@
1
+ interface DownloadBackupOptions {
2
+ outputFile: string;
3
+ }
4
+ export declare function downloadBackup(version: string, options: DownloadBackupOptions): Promise<void>;
5
+ export {};
6
+ //# sourceMappingURL=download.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"download.d.ts","sourceRoot":"","sources":["../../../src/commands/backup/download.ts"],"names":[],"mappings":"AAOA,UAAU,qBAAqB;IAC3B,UAAU,EAAE,MAAM,CAAA;CACrB;AAED,wBAAsB,cAAc,CAChC,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,qBAAqB,GAC/B,OAAO,CAAC,IAAI,CAAC,CA4Bf"}
@@ -0,0 +1,28 @@
1
+ import fs from 'node:fs';
2
+ import path from 'node:path';
3
+ import { getApi } from '../../lib/api/core.js';
4
+ import { CliError } from '../../lib/errors.js';
5
+ import { isQuiet } from '../../lib/global-args.js';
6
+ import { fetchBackups } from './helpers.js';
7
+ export async function downloadBackup(version, options) {
8
+ const api = await getApi();
9
+ const backups = await fetchBackups(api);
10
+ const backup = backups.find((b) => b.version === version);
11
+ if (!backup) {
12
+ throw new CliError('NOT_FOUND', `Backup version "${version}" not found`, [
13
+ 'Run `td backup list` to see available backup versions',
14
+ ]);
15
+ }
16
+ const response = await api.downloadBackup({ file: backup.url });
17
+ if (!response.ok) {
18
+ throw new CliError('API_ERROR', `Failed to download backup: ${response.status} ${response.statusText}`);
19
+ }
20
+ const arrayBuffer = await response.arrayBuffer();
21
+ const buffer = Buffer.from(arrayBuffer);
22
+ const outputPath = path.resolve(options.outputFile);
23
+ fs.writeFileSync(outputPath, buffer);
24
+ if (!isQuiet()) {
25
+ console.log(`Backup written to ${outputPath}`);
26
+ }
27
+ }
28
+ //# sourceMappingURL=download.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"download.js","sourceRoot":"","sources":["../../../src/commands/backup/download.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAA;AACxB,OAAO,IAAI,MAAM,WAAW,CAAA;AAC5B,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAA;AAC9C,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAA;AAC9C,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAA;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAM3C,MAAM,CAAC,KAAK,UAAU,cAAc,CAChC,OAAe,EACf,OAA8B;IAE9B,MAAM,GAAG,GAAG,MAAM,MAAM,EAAE,CAAA;IAC1B,MAAM,OAAO,GAAG,MAAM,YAAY,CAAC,GAAG,CAAC,CAAA;IAEvC,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,KAAK,OAAO,CAAC,CAAA;IACzD,IAAI,CAAC,MAAM,EAAE,CAAC;QACV,MAAM,IAAI,QAAQ,CAAC,WAAW,EAAE,mBAAmB,OAAO,aAAa,EAAE;YACrE,uDAAuD;SAC1D,CAAC,CAAA;IACN,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,cAAc,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,GAAG,EAAE,CAAC,CAAA;IAC/D,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACf,MAAM,IAAI,QAAQ,CACd,WAAW,EACX,8BAA8B,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,UAAU,EAAE,CACzE,CAAA;IACL,CAAC;IAED,MAAM,WAAW,GAAG,MAAM,QAAQ,CAAC,WAAW,EAAE,CAAA;IAChD,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;IAEvC,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,CAAA;IACnD,EAAE,CAAC,aAAa,CAAC,UAAU,EAAE,MAAM,CAAC,CAAA;IAEpC,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC;QACb,OAAO,CAAC,GAAG,CAAC,qBAAqB,UAAU,EAAE,CAAC,CAAA;IAClD,CAAC;AACL,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { Backup, TodoistApi } from '@doist/todoist-sdk';
2
+ export declare function fetchBackups(api: TodoistApi): Promise<Backup[]>;
3
+ //# sourceMappingURL=helpers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../../src/commands/backup/helpers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAA;AAI5D,wBAAsB,YAAY,CAAC,GAAG,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CASrE"}
@@ -0,0 +1,12 @@
1
+ import { getAuthMetadata } from '../../lib/auth.js';
2
+ import { CliError } from '../../lib/errors.js';
3
+ export async function fetchBackups(api) {
4
+ const metadata = await getAuthMetadata();
5
+ if (metadata.authScope && !metadata.authScope.includes('backups:read')) {
6
+ throw new CliError('AUTH_ERROR', 'Your current token is missing the backups:read scope', [
7
+ 'Re-authenticate to grant backup access: td auth login',
8
+ ]);
9
+ }
10
+ return api.getBackups();
11
+ }
12
+ //# sourceMappingURL=helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../../src/commands/backup/helpers.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AACnD,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAA;AAE9C,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,GAAe;IAC9C,MAAM,QAAQ,GAAG,MAAM,eAAe,EAAE,CAAA;IACxC,IAAI,QAAQ,CAAC,SAAS,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC;QACrE,MAAM,IAAI,QAAQ,CAAC,YAAY,EAAE,sDAAsD,EAAE;YACrF,uDAAuD;SAC1D,CAAC,CAAA;IACN,CAAC;IAED,OAAO,GAAG,CAAC,UAAU,EAAE,CAAA;AAC3B,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare function registerBackupCommand(program: Command): void;
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/backup/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAInC,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA+B5D"}
@@ -0,0 +1,30 @@
1
+ import { downloadBackup } from './download.js';
2
+ import { listBackups } from './list.js';
3
+ export function registerBackupCommand(program) {
4
+ const backup = program
5
+ .command('backup')
6
+ .description('Manage backups')
7
+ .addHelpText('after', `
8
+ Examples:
9
+ td backup list
10
+ td backup list --json
11
+ td backup download "2024-01-15_12:00" --output-file backup.zip`);
12
+ backup
13
+ .command('list')
14
+ .description('List available backups')
15
+ .option('--json', 'Output as JSON')
16
+ .option('--ndjson', 'Output as newline-delimited JSON')
17
+ .action(listBackups);
18
+ const downloadCmd = backup
19
+ .command('download [version]')
20
+ .description('Download a backup file')
21
+ .requiredOption('--output-file <path>', 'Output file path')
22
+ .action((version, options) => {
23
+ if (!version) {
24
+ downloadCmd.help();
25
+ return;
26
+ }
27
+ return downloadBackup(version, options);
28
+ });
29
+ }
30
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/backup/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAA;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAA;AAEvC,MAAM,UAAU,qBAAqB,CAAC,OAAgB;IAClD,MAAM,MAAM,GAAG,OAAO;SACjB,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,gBAAgB,CAAC;SAC7B,WAAW,CACR,OAAO,EACP;;;;iEAIqD,CACxD,CAAA;IAEL,MAAM;SACD,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,wBAAwB,CAAC;SACrC,MAAM,CAAC,QAAQ,EAAE,gBAAgB,CAAC;SAClC,MAAM,CAAC,UAAU,EAAE,kCAAkC,CAAC;SACtD,MAAM,CAAC,WAAW,CAAC,CAAA;IAExB,MAAM,WAAW,GAAG,MAAM;SACrB,OAAO,CAAC,oBAAoB,CAAC;SAC7B,WAAW,CAAC,wBAAwB,CAAC;SACrC,cAAc,CAAC,sBAAsB,EAAE,kBAAkB,CAAC;SAC1D,MAAM,CAAC,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE;QACzB,IAAI,CAAC,OAAO,EAAE,CAAC;YACX,WAAW,CAAC,IAAI,EAAE,CAAA;YAClB,OAAM;QACV,CAAC;QACD,OAAO,cAAc,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;IAC3C,CAAC,CAAC,CAAA;AACV,CAAC"}
@@ -0,0 +1,7 @@
1
+ interface ListBackupsOptions {
2
+ json?: boolean;
3
+ ndjson?: boolean;
4
+ }
5
+ export declare function listBackups(options: ListBackupsOptions): Promise<void>;
6
+ export {};
7
+ //# sourceMappingURL=list.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../../src/commands/backup/list.ts"],"names":[],"mappings":"AAKA,UAAU,kBAAkB;IACxB,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,MAAM,CAAC,EAAE,OAAO,CAAA;CACnB;AAED,wBAAsB,WAAW,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CAuB5E"}
@@ -0,0 +1,25 @@
1
+ import chalk from 'chalk';
2
+ import { getApi } from '../../lib/api/core.js';
3
+ import { formatPaginatedJson, formatPaginatedNdjson } from '../../lib/output.js';
4
+ import { fetchBackups } from './helpers.js';
5
+ export async function listBackups(options) {
6
+ const api = await getApi();
7
+ const backups = await fetchBackups(api);
8
+ const paginated = { results: backups, nextCursor: null };
9
+ if (options.json) {
10
+ console.log(formatPaginatedJson(paginated));
11
+ return;
12
+ }
13
+ if (options.ndjson) {
14
+ console.log(formatPaginatedNdjson(paginated));
15
+ return;
16
+ }
17
+ if (backups.length === 0) {
18
+ console.log('No backups found.');
19
+ return;
20
+ }
21
+ for (const backup of backups) {
22
+ console.log(`${backup.version} ${chalk.dim(backup.url)}`);
23
+ }
24
+ }
25
+ //# sourceMappingURL=list.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list.js","sourceRoot":"","sources":["../../../src/commands/backup/list.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAA;AAC9C,OAAO,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAA;AAChF,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAO3C,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,OAA2B;IACzD,MAAM,GAAG,GAAG,MAAM,MAAM,EAAE,CAAA;IAC1B,MAAM,OAAO,GAAG,MAAM,YAAY,CAAC,GAAG,CAAC,CAAA;IACvC,MAAM,SAAS,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,CAAA;IAExD,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;QACf,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,SAAS,CAAC,CAAC,CAAA;QAC3C,OAAM;IACV,CAAC;IAED,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QACjB,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,SAAS,CAAC,CAAC,CAAA;QAC7C,OAAM;IACV,CAAC;IAED,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAA;QAChC,OAAM;IACV,CAAC;IAED,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC3B,OAAO,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,OAAO,KAAK,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;IAC9D,CAAC;AACL,CAAC"}
@@ -1,3 +1,3 @@
1
1
  import { Command } from 'commander';
2
2
  export declare function registerCompletedCommand(program: Command): void;
3
- //# sourceMappingURL=completed.d.ts.map
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/completed/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAInC,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA4B/D"}
@@ -0,0 +1,28 @@
1
+ import { CURSOR_DESCRIPTION } from '../../lib/constants.js';
2
+ import { listCompleted } from './list.js';
3
+ export function registerCompletedCommand(program) {
4
+ const completed = program
5
+ .command('completed')
6
+ .description('Show completed tasks')
7
+ .addHelpText('after', `
8
+ Examples:
9
+ td completed list
10
+ td completed list --since 2024-01-01 --until 2024-01-31
11
+ td completed list --search "meeting notes"`);
12
+ completed
13
+ .command('list', { isDefault: true })
14
+ .description('List completed tasks, or search by query')
15
+ .option('--search <query>', 'Search completed tasks by query')
16
+ .option('--since <date>', 'Start date (YYYY-MM-DD), default: today')
17
+ .option('--until <date>', 'End date (YYYY-MM-DD), default: tomorrow')
18
+ .option('--project <name>', 'Filter by project')
19
+ .option('--limit <n>', 'Limit number of results (default: 300)')
20
+ .option('--cursor <cursor>', CURSOR_DESCRIPTION)
21
+ .option('--all', 'Fetch all results (no limit)')
22
+ .option('--json', 'Output as JSON')
23
+ .option('--ndjson', 'Output as newline-delimited JSON')
24
+ .option('--full', 'Include all fields in JSON output')
25
+ .option('--show-urls', 'Show web app URLs for each task')
26
+ .action(listCompleted);
27
+ }
28
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/completed/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAA;AAC3D,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAA;AAEzC,MAAM,UAAU,wBAAwB,CAAC,OAAgB;IACrD,MAAM,SAAS,GAAG,OAAO;SACpB,OAAO,CAAC,WAAW,CAAC;SACpB,WAAW,CAAC,sBAAsB,CAAC;SACnC,WAAW,CACR,OAAO,EACP;;;;6CAIiC,CACpC,CAAA;IAEL,SAAS;SACJ,OAAO,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;SACpC,WAAW,CAAC,0CAA0C,CAAC;SACvD,MAAM,CAAC,kBAAkB,EAAE,iCAAiC,CAAC;SAC7D,MAAM,CAAC,gBAAgB,EAAE,yCAAyC,CAAC;SACnE,MAAM,CAAC,gBAAgB,EAAE,0CAA0C,CAAC;SACpE,MAAM,CAAC,kBAAkB,EAAE,mBAAmB,CAAC;SAC/C,MAAM,CAAC,aAAa,EAAE,wCAAwC,CAAC;SAC/D,MAAM,CAAC,mBAAmB,EAAE,kBAAkB,CAAC;SAC/C,MAAM,CAAC,OAAO,EAAE,8BAA8B,CAAC;SAC/C,MAAM,CAAC,QAAQ,EAAE,gBAAgB,CAAC;SAClC,MAAM,CAAC,UAAU,EAAE,kCAAkC,CAAC;SACtD,MAAM,CAAC,QAAQ,EAAE,mCAAmC,CAAC;SACrD,MAAM,CAAC,aAAa,EAAE,iCAAiC,CAAC;SACxD,MAAM,CAAC,aAAa,CAAC,CAAA;AAC9B,CAAC"}
@@ -0,0 +1,10 @@
1
+ import type { PaginatedViewOptions } from '../../lib/options.js';
2
+ interface CompletedListOptions extends PaginatedViewOptions {
3
+ since?: string;
4
+ until?: string;
5
+ project?: string;
6
+ search?: string;
7
+ }
8
+ export declare function listCompleted(options: CompletedListOptions): Promise<void>;
9
+ export {};
10
+ //# sourceMappingURL=list.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../../src/commands/completed/list.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAA;AAUhE,UAAU,oBAAqB,SAAQ,oBAAoB;IACvD,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,MAAM,CAAC,EAAE,MAAM,CAAA;CAClB;AAQD,wBAAsB,aAAa,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,IAAI,CAAC,CAoJhF"}
@@ -0,0 +1,109 @@
1
+ import chalk from 'chalk';
2
+ import { getApi } from '../../lib/api/core.js';
3
+ import { CollaboratorCache, formatAssignee } from '../../lib/collaborators.js';
4
+ import { CliError } from '../../lib/errors.js';
5
+ import { formatNextCursorFooter, formatPaginatedJson, formatPaginatedNdjson, formatTaskRow, } from '../../lib/output.js';
6
+ import { LIMITS, paginate } from '../../lib/pagination.js';
7
+ import { resolveProjectId } from '../../lib/refs.js';
8
+ function getLocalDate(daysOffset = 0) {
9
+ const date = new Date();
10
+ date.setDate(date.getDate() + daysOffset);
11
+ return `${date.getFullYear()}-${String(date.getMonth() + 1).padStart(2, '0')}-${String(date.getDate()).padStart(2, '0')}`;
12
+ }
13
+ export async function listCompleted(options) {
14
+ const isSearch = options.search !== undefined;
15
+ if (isSearch && !options.search) {
16
+ throw new CliError('INVALID_SEARCH', 'Search query cannot be empty');
17
+ }
18
+ if (isSearch && (options.since || options.until || options.project)) {
19
+ throw new CliError('CONFLICTING_OPTIONS', 'Cannot use --since, --until, or --project with --search');
20
+ }
21
+ const api = await getApi();
22
+ const targetLimit = options.all
23
+ ? Number.MAX_SAFE_INTEGER
24
+ : options.limit
25
+ ? parseInt(options.limit, 10)
26
+ : LIMITS.tasks;
27
+ const since = isSearch ? undefined : (options.since ?? getLocalDate(0));
28
+ const until = isSearch ? undefined : (options.until ?? getLocalDate(1));
29
+ let projectId;
30
+ if (!isSearch && options.project) {
31
+ projectId = await resolveProjectId(api, options.project);
32
+ }
33
+ const { results: tasks, nextCursor } = await paginate(async (cursor, limit) => {
34
+ if (isSearch) {
35
+ const resp = await api.searchCompletedTasks({
36
+ query: options.search,
37
+ cursor: cursor ?? undefined,
38
+ limit,
39
+ });
40
+ return { results: resp.items, nextCursor: resp.nextCursor };
41
+ }
42
+ const resp = await api.getCompletedTasksByCompletionDate({
43
+ since: since,
44
+ until: until,
45
+ projectId,
46
+ cursor: cursor ?? undefined,
47
+ limit,
48
+ });
49
+ return { results: resp.items, nextCursor: resp.nextCursor };
50
+ }, { limit: targetLimit, startCursor: options.cursor });
51
+ if (tasks.length === 0) {
52
+ if (options.json) {
53
+ console.log(formatPaginatedJson({ results: [], nextCursor }, 'task', options.full, options.showUrls));
54
+ }
55
+ else if (options.ndjson) {
56
+ console.log(formatPaginatedNdjson({ results: [], nextCursor }, 'task', options.full, options.showUrls));
57
+ }
58
+ else {
59
+ console.log(isSearch ? 'No matching completed tasks.' : 'No completed tasks in this period.');
60
+ console.log(formatNextCursorFooter(nextCursor));
61
+ }
62
+ return;
63
+ }
64
+ const { results: allProjects } = await api.getProjects();
65
+ const projects = new Map(allProjects.map((p) => [p.id, p]));
66
+ const collaboratorCache = new CollaboratorCache();
67
+ await collaboratorCache.preload(api, tasks, projects);
68
+ const getAssigneeName = (task) => {
69
+ return formatAssignee({
70
+ userId: task.responsibleUid,
71
+ projectId: task.projectId,
72
+ projects,
73
+ cache: collaboratorCache,
74
+ });
75
+ };
76
+ if (options.json) {
77
+ const tasksWithAssignee = tasks.map((task) => ({
78
+ ...task,
79
+ responsibleName: getAssigneeName(task),
80
+ }));
81
+ console.log(formatPaginatedJson({ results: tasksWithAssignee, nextCursor }, 'task', options.full, options.showUrls));
82
+ return;
83
+ }
84
+ if (options.ndjson) {
85
+ const tasksWithAssignee = tasks.map((task) => ({
86
+ ...task,
87
+ responsibleName: getAssigneeName(task),
88
+ }));
89
+ console.log(formatPaginatedNdjson({ results: tasksWithAssignee, nextCursor }, 'task', options.full, options.showUrls));
90
+ return;
91
+ }
92
+ const header = isSearch
93
+ ? chalk.bold(`Completed (${tasks.length}) - search: "${options.search}"`)
94
+ : chalk.bold(`Completed (${tasks.length}) - ${since === until ? since : `${since} to ${until}`}`);
95
+ console.log(header);
96
+ console.log('');
97
+ for (const task of tasks) {
98
+ const projectName = projects.get(task.projectId)?.name;
99
+ console.log(formatTaskRow({
100
+ task,
101
+ projectName,
102
+ assignee: getAssigneeName(task) ?? undefined,
103
+ showUrl: options.showUrls,
104
+ }));
105
+ console.log('');
106
+ }
107
+ console.log(formatNextCursorFooter(nextCursor));
108
+ }
109
+ //# sourceMappingURL=list.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list.js","sourceRoot":"","sources":["../../../src/commands/completed/list.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare function registerGoalCommand(program: Command): void;
3
+ //# sourceMappingURL=goal.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"goal.d.ts","sourceRoot":"","sources":["../../src/commands/goal.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAsUnC,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAyH1D"}