@doist/todoist-cli 1.29.2 → 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 (248) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/package.json +11 -4
  3. package/scripts/check-skill-sync.js +40 -0
  4. package/scripts/sync-skill.js +28 -0
  5. package/dist/__mocks__/chalk.d.ts +0 -3
  6. package/dist/__mocks__/chalk.d.ts.map +0 -1
  7. package/dist/__mocks__/chalk.js +0 -8
  8. package/dist/__mocks__/chalk.js.map +0 -1
  9. package/dist/commands/activity.d.ts +0 -3
  10. package/dist/commands/activity.d.ts.map +0 -1
  11. package/dist/commands/activity.js +0 -267
  12. package/dist/commands/activity.js.map +0 -1
  13. package/dist/commands/add.d.ts +0 -3
  14. package/dist/commands/add.d.ts.map +0 -1
  15. package/dist/commands/add.js +0 -36
  16. package/dist/commands/add.js.map +0 -1
  17. package/dist/commands/attachment.d.ts +0 -3
  18. package/dist/commands/attachment.d.ts.map +0 -1
  19. package/dist/commands/attachment.js +0 -156
  20. package/dist/commands/attachment.js.map +0 -1
  21. package/dist/commands/auth.d.ts +0 -3
  22. package/dist/commands/auth.d.ts.map +0 -1
  23. package/dist/commands/auth.js +0 -124
  24. package/dist/commands/auth.js.map +0 -1
  25. package/dist/commands/changelog.d.ts +0 -8
  26. package/dist/commands/changelog.d.ts.map +0 -1
  27. package/dist/commands/changelog.js +0 -92
  28. package/dist/commands/changelog.js.map +0 -1
  29. package/dist/commands/comment.d.ts +0 -3
  30. package/dist/commands/comment.d.ts.map +0 -1
  31. package/dist/commands/comment.js +0 -301
  32. package/dist/commands/comment.js.map +0 -1
  33. package/dist/commands/completed.d.ts +0 -3
  34. package/dist/commands/completed.d.ts.map +0 -1
  35. package/dist/commands/completed.js +0 -107
  36. package/dist/commands/completed.js.map +0 -1
  37. package/dist/commands/completion.d.ts +0 -3
  38. package/dist/commands/completion.d.ts.map +0 -1
  39. package/dist/commands/completion.js +0 -107
  40. package/dist/commands/completion.js.map +0 -1
  41. package/dist/commands/filter.d.ts +0 -5
  42. package/dist/commands/filter.d.ts.map +0 -1
  43. package/dist/commands/filter.js +0 -287
  44. package/dist/commands/filter.js.map +0 -1
  45. package/dist/commands/inbox.d.ts +0 -3
  46. package/dist/commands/inbox.d.ts.map +0 -1
  47. package/dist/commands/inbox.js +0 -25
  48. package/dist/commands/inbox.js.map +0 -1
  49. package/dist/commands/label.d.ts +0 -5
  50. package/dist/commands/label.d.ts.map +0 -1
  51. package/dist/commands/label.js +0 -328
  52. package/dist/commands/label.js.map +0 -1
  53. package/dist/commands/notification.d.ts +0 -3
  54. package/dist/commands/notification.d.ts.map +0 -1
  55. package/dist/commands/notification.js +0 -274
  56. package/dist/commands/notification.js.map +0 -1
  57. package/dist/commands/project.d.ts +0 -5
  58. package/dist/commands/project.d.ts.map +0 -1
  59. package/dist/commands/project.js +0 -528
  60. package/dist/commands/project.js.map +0 -1
  61. package/dist/commands/reminder.d.ts +0 -3
  62. package/dist/commands/reminder.d.ts.map +0 -1
  63. package/dist/commands/reminder.js +0 -271
  64. package/dist/commands/reminder.js.map +0 -1
  65. package/dist/commands/section.d.ts +0 -3
  66. package/dist/commands/section.d.ts.map +0 -1
  67. package/dist/commands/section.js +0 -172
  68. package/dist/commands/section.js.map +0 -1
  69. package/dist/commands/settings.d.ts +0 -12
  70. package/dist/commands/settings.d.ts.map +0 -1
  71. package/dist/commands/settings.js +0 -312
  72. package/dist/commands/settings.js.map +0 -1
  73. package/dist/commands/skill.d.ts +0 -3
  74. package/dist/commands/skill.d.ts.map +0 -1
  75. package/dist/commands/skill.js +0 -127
  76. package/dist/commands/skill.js.map +0 -1
  77. package/dist/commands/stats.d.ts +0 -3
  78. package/dist/commands/stats.d.ts.map +0 -1
  79. package/dist/commands/stats.js +0 -151
  80. package/dist/commands/stats.js.map +0 -1
  81. package/dist/commands/task.d.ts +0 -5
  82. package/dist/commands/task.d.ts.map +0 -1
  83. package/dist/commands/task.js +0 -559
  84. package/dist/commands/task.js.map +0 -1
  85. package/dist/commands/today.d.ts +0 -18
  86. package/dist/commands/today.d.ts.map +0 -1
  87. package/dist/commands/today.js +0 -108
  88. package/dist/commands/today.js.map +0 -1
  89. package/dist/commands/upcoming.d.ts +0 -17
  90. package/dist/commands/upcoming.d.ts.map +0 -1
  91. package/dist/commands/upcoming.js +0 -129
  92. package/dist/commands/upcoming.js.map +0 -1
  93. package/dist/commands/update.d.ts +0 -6
  94. package/dist/commands/update.d.ts.map +0 -1
  95. package/dist/commands/update.js +0 -90
  96. package/dist/commands/update.js.map +0 -1
  97. package/dist/commands/view.d.ts +0 -3
  98. package/dist/commands/view.d.ts.map +0 -1
  99. package/dist/commands/view.js +0 -79
  100. package/dist/commands/view.js.map +0 -1
  101. package/dist/commands/workspace.d.ts +0 -3
  102. package/dist/commands/workspace.d.ts.map +0 -1
  103. package/dist/commands/workspace.js +0 -309
  104. package/dist/commands/workspace.js.map +0 -1
  105. package/dist/index.d.ts +0 -3
  106. package/dist/index.d.ts.map +0 -1
  107. package/dist/index.js +0 -176
  108. package/dist/index.js.map +0 -1
  109. package/dist/lib/api/core.d.ts +0 -13
  110. package/dist/lib/api/core.d.ts.map +0 -1
  111. package/dist/lib/api/core.js +0 -170
  112. package/dist/lib/api/core.js.map +0 -1
  113. package/dist/lib/api/filters.d.ts +0 -19
  114. package/dist/lib/api/filters.d.ts.map +0 -1
  115. package/dist/lib/api/filters.js +0 -60
  116. package/dist/lib/api/filters.js.map +0 -1
  117. package/dist/lib/api/notifications.d.ts +0 -33
  118. package/dist/lib/api/notifications.d.ts.map +0 -1
  119. package/dist/lib/api/notifications.js +0 -94
  120. package/dist/lib/api/notifications.js.map +0 -1
  121. package/dist/lib/api/reminders.d.ts +0 -30
  122. package/dist/lib/api/reminders.d.ts.map +0 -1
  123. package/dist/lib/api/reminders.js +0 -65
  124. package/dist/lib/api/reminders.js.map +0 -1
  125. package/dist/lib/api/stats.d.ts +0 -41
  126. package/dist/lib/api/stats.d.ts.map +0 -1
  127. package/dist/lib/api/stats.js +0 -74
  128. package/dist/lib/api/stats.js.map +0 -1
  129. package/dist/lib/api/uploads.d.ts +0 -10
  130. package/dist/lib/api/uploads.d.ts.map +0 -1
  131. package/dist/lib/api/uploads.js +0 -31
  132. package/dist/lib/api/uploads.js.map +0 -1
  133. package/dist/lib/api/user-settings.d.ts +0 -34
  134. package/dist/lib/api/user-settings.d.ts.map +0 -1
  135. package/dist/lib/api/user-settings.js +0 -58
  136. package/dist/lib/api/user-settings.js.map +0 -1
  137. package/dist/lib/api/workspaces.d.ts +0 -23
  138. package/dist/lib/api/workspaces.d.ts.map +0 -1
  139. package/dist/lib/api/workspaces.js +0 -61
  140. package/dist/lib/api/workspaces.js.map +0 -1
  141. package/dist/lib/auth.d.ts +0 -14
  142. package/dist/lib/auth.d.ts.map +0 -1
  143. package/dist/lib/auth.js +0 -182
  144. package/dist/lib/auth.js.map +0 -1
  145. package/dist/lib/browser.d.ts +0 -2
  146. package/dist/lib/browser.d.ts.map +0 -1
  147. package/dist/lib/browser.js +0 -6
  148. package/dist/lib/browser.js.map +0 -1
  149. package/dist/lib/collaborators.d.ts +0 -29
  150. package/dist/lib/collaborators.d.ts.map +0 -1
  151. package/dist/lib/collaborators.js +0 -184
  152. package/dist/lib/collaborators.js.map +0 -1
  153. package/dist/lib/completion.d.ts +0 -41
  154. package/dist/lib/completion.d.ts.map +0 -1
  155. package/dist/lib/completion.js +0 -191
  156. package/dist/lib/completion.js.map +0 -1
  157. package/dist/lib/dates.d.ts +0 -16
  158. package/dist/lib/dates.d.ts.map +0 -1
  159. package/dist/lib/dates.js +0 -45
  160. package/dist/lib/dates.js.map +0 -1
  161. package/dist/lib/duration.d.ts +0 -14
  162. package/dist/lib/duration.d.ts.map +0 -1
  163. package/dist/lib/duration.js +0 -58
  164. package/dist/lib/duration.js.map +0 -1
  165. package/dist/lib/logger.d.ts +0 -42
  166. package/dist/lib/logger.d.ts.map +0 -1
  167. package/dist/lib/logger.js +0 -227
  168. package/dist/lib/logger.js.map +0 -1
  169. package/dist/lib/markdown.d.ts +0 -3
  170. package/dist/lib/markdown.d.ts.map +0 -1
  171. package/dist/lib/markdown.js +0 -22
  172. package/dist/lib/markdown.js.map +0 -1
  173. package/dist/lib/oauth-server.d.ts +0 -6
  174. package/dist/lib/oauth-server.d.ts.map +0 -1
  175. package/dist/lib/oauth-server.js +0 -773
  176. package/dist/lib/oauth-server.js.map +0 -1
  177. package/dist/lib/oauth.d.ts +0 -3
  178. package/dist/lib/oauth.d.ts.map +0 -1
  179. package/dist/lib/oauth.js +0 -38
  180. package/dist/lib/oauth.js.map +0 -1
  181. package/dist/lib/options.d.ts +0 -16
  182. package/dist/lib/options.d.ts.map +0 -1
  183. package/dist/lib/options.js +0 -2
  184. package/dist/lib/options.js.map +0 -1
  185. package/dist/lib/output.d.ts +0 -39
  186. package/dist/lib/output.d.ts.map +0 -1
  187. package/dist/lib/output.js +0 -311
  188. package/dist/lib/output.js.map +0 -1
  189. package/dist/lib/pagination.d.ts +0 -23
  190. package/dist/lib/pagination.d.ts.map +0 -1
  191. package/dist/lib/pagination.js +0 -26
  192. package/dist/lib/pagination.js.map +0 -1
  193. package/dist/lib/pkce.d.ts +0 -4
  194. package/dist/lib/pkce.d.ts.map +0 -1
  195. package/dist/lib/pkce.js +0 -19
  196. package/dist/lib/pkce.js.map +0 -1
  197. package/dist/lib/progress.d.ts +0 -29
  198. package/dist/lib/progress.d.ts.map +0 -1
  199. package/dist/lib/progress.js +0 -101
  200. package/dist/lib/progress.js.map +0 -1
  201. package/dist/lib/refs.d.ts +0 -52
  202. package/dist/lib/refs.d.ts.map +0 -1
  203. package/dist/lib/refs.js +0 -225
  204. package/dist/lib/refs.js.map +0 -1
  205. package/dist/lib/secure-store.d.ts +0 -11
  206. package/dist/lib/secure-store.d.ts.map +0 -1
  207. package/dist/lib/secure-store.js +0 -57
  208. package/dist/lib/secure-store.js.map +0 -1
  209. package/dist/lib/skills/content.d.ts +0 -4
  210. package/dist/lib/skills/content.d.ts.map +0 -1
  211. package/dist/lib/skills/content.js +0 -415
  212. package/dist/lib/skills/content.js.map +0 -1
  213. package/dist/lib/skills/create-installer.d.ts +0 -9
  214. package/dist/lib/skills/create-installer.d.ts.map +0 -1
  215. package/dist/lib/skills/create-installer.js +0 -77
  216. package/dist/lib/skills/create-installer.js.map +0 -1
  217. package/dist/lib/skills/index.d.ts +0 -6
  218. package/dist/lib/skills/index.d.ts.map +0 -1
  219. package/dist/lib/skills/index.js +0 -40
  220. package/dist/lib/skills/index.js.map +0 -1
  221. package/dist/lib/skills/types.d.ts +0 -11
  222. package/dist/lib/skills/types.d.ts.map +0 -1
  223. package/dist/lib/skills/types.js +0 -2
  224. package/dist/lib/skills/types.js.map +0 -1
  225. package/dist/lib/skills/update-installed.d.ts +0 -7
  226. package/dist/lib/skills/update-installed.d.ts.map +0 -1
  227. package/dist/lib/skills/update-installed.js +0 -23
  228. package/dist/lib/skills/update-installed.js.map +0 -1
  229. package/dist/lib/spinner.d.ts +0 -23
  230. package/dist/lib/spinner.d.ts.map +0 -1
  231. package/dist/lib/spinner.js +0 -138
  232. package/dist/lib/spinner.js.map +0 -1
  233. package/dist/lib/stdin.d.ts +0 -2
  234. package/dist/lib/stdin.d.ts.map +0 -1
  235. package/dist/lib/stdin.js +0 -12
  236. package/dist/lib/stdin.js.map +0 -1
  237. package/dist/lib/task-list.d.ts +0 -31
  238. package/dist/lib/task-list.d.ts.map +0 -1
  239. package/dist/lib/task-list.js +0 -271
  240. package/dist/lib/task-list.js.map +0 -1
  241. package/dist/lib/urls.d.ts +0 -8
  242. package/dist/lib/urls.d.ts.map +0 -1
  243. package/dist/lib/urls.js +0 -26
  244. package/dist/lib/urls.js.map +0 -1
  245. package/dist/postinstall.d.ts +0 -2
  246. package/dist/postinstall.d.ts.map +0 -1
  247. package/dist/postinstall.js +0 -3
  248. package/dist/postinstall.js.map +0 -1
package/CHANGELOG.md CHANGED
@@ -1,3 +1,9 @@
1
+ ## [1.29.4](https://github.com/Doist/todoist-cli/compare/v1.29.3...v1.29.4) (2026-03-29)
2
+
3
+ ### Bug Fixes
4
+
5
+ * use Node 22 for release workflow ([#190](https://github.com/Doist/todoist-cli/issues/190)) ([00e4c00](https://github.com/Doist/todoist-cli/commit/00e4c0097c4e48758fd9a45019e453acd3b4b47d))
6
+
1
7
  # Changelog
2
8
 
3
9
  All notable changes to this project will be documented in this file.
@@ -5,6 +11,14 @@ All notable changes to this project will be documented in this file.
5
11
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6
12
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
13
 
14
+ ## [1.29.3](https://github.com/Doist/todoist-cli/compare/v1.29.2...v1.29.3) (2026-03-26)
15
+
16
+
17
+ ### Bug Fixes
18
+
19
+ * address skills.sh Snyk security audit findings ([#183](https://github.com/Doist/todoist-cli/issues/183)) ([353a3df](https://github.com/Doist/todoist-cli/commit/353a3df4378eddb7db6eb010d47c70b902cf2f67))
20
+ * upgrade Todoist SDK for proxy env var support ([#185](https://github.com/Doist/todoist-cli/issues/185)) ([d128fb9](https://github.com/Doist/todoist-cli/commit/d128fb9baaef8791bcd325ba00730ec5f958cc50))
21
+
8
22
  ## [1.29.2](https://github.com/Doist/todoist-cli/compare/v1.29.1...v1.29.2) (2026-03-25)
9
23
 
10
24
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@doist/todoist-cli",
3
- "version": "1.29.2",
3
+ "version": "1.29.4",
4
4
  "description": "TypeScript CLI for Todoist",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -17,6 +17,8 @@
17
17
  "format": "oxfmt",
18
18
  "format:check": "oxfmt --check",
19
19
  "postinstall": "node scripts/postinstall.js",
20
+ "check:skill-sync": "node scripts/check-skill-sync.js",
21
+ "sync:skill": "node scripts/sync-skill.js",
20
22
  "test": "vitest run",
21
23
  "test:watch": "vitest"
22
24
  },
@@ -38,10 +40,11 @@
38
40
  },
39
41
  "preferGlobal": true,
40
42
  "publishConfig": {
41
- "access": "public"
43
+ "access": "public",
44
+ "provenance": true
42
45
  },
43
46
  "engines": {
44
- "node": ">=20"
47
+ "node": ">=20.18.1"
45
48
  },
46
49
  "files": [
47
50
  "dist",
@@ -49,7 +52,7 @@
49
52
  "CHANGELOG.md"
50
53
  ],
51
54
  "dependencies": {
52
- "@doist/todoist-api-typescript": "7.2.0",
55
+ "@doist/todoist-api-typescript": "7.7.0",
53
56
  "@napi-rs/keyring": "1.2.0",
54
57
  "@pnpm/tabtab": "0.5.4",
55
58
  "chalk": "5.6.2",
@@ -61,11 +64,15 @@
61
64
  "yocto-spinner": "1.1.0"
62
65
  },
63
66
  "devDependencies": {
67
+ "@semantic-release/changelog": "6.0.3",
68
+ "@semantic-release/git": "10.0.1",
64
69
  "@types/marked-terminal": "6.1.1",
65
70
  "@types/node": "25.5.0",
71
+ "conventional-changelog-conventionalcommits": "9.3.0",
66
72
  "lefthook": "2.1.4",
67
73
  "oxfmt": "0.41.0",
68
74
  "oxlint": "1.56.0",
75
+ "semantic-release": "25.0.3",
69
76
  "typescript": "6.0.2",
70
77
  "vitest": "4.1.0"
71
78
  }
@@ -0,0 +1,40 @@
1
+ #!/usr/bin/env node
2
+
3
+ /**
4
+ * Verifies that skills/todoist-cli/SKILL.md is in sync with the generated
5
+ * skill content from src/lib/skills/content.ts.
6
+ *
7
+ * Requires `npm run build` to have been run first.
8
+ */
9
+
10
+ import { readFile } from 'node:fs/promises'
11
+ import { dirname, join } from 'node:path'
12
+ import { fileURLToPath, pathToFileURL } from 'node:url'
13
+
14
+ const root = join(dirname(fileURLToPath(import.meta.url)), '..')
15
+
16
+ try {
17
+ const modulePath = pathToFileURL(join(root, 'dist/lib/skills/create-installer.js')).href
18
+ const { generateSkillFile } = await import(modulePath)
19
+ const expected = generateSkillFile()
20
+ const actual = await readFile(join(root, 'skills/todoist-cli/SKILL.md'), 'utf-8')
21
+
22
+ if (actual !== expected) {
23
+ console.error(
24
+ 'ERROR: skills/todoist-cli/SKILL.md is out of sync with src/lib/skills/content.ts',
25
+ )
26
+ console.error('')
27
+ console.error('To fix, run:')
28
+ console.error(' npm run build && npm run sync:skill')
29
+ process.exit(1)
30
+ }
31
+
32
+ console.log('skills/todoist-cli/SKILL.md is in sync with content.ts')
33
+ } catch (err) {
34
+ if (err.code === 'ERR_MODULE_NOT_FOUND') {
35
+ console.error('ERROR: dist/ not found. Run `npm run build` first.')
36
+ } else {
37
+ console.error(err)
38
+ }
39
+ process.exit(1)
40
+ }
@@ -0,0 +1,28 @@
1
+ #!/usr/bin/env node
2
+
3
+ /**
4
+ * Regenerates skills/todoist-cli/SKILL.md from the built skill content.
5
+ *
6
+ * Requires `npm run build` to have been run first.
7
+ */
8
+
9
+ import { writeFile } from 'node:fs/promises'
10
+ import { dirname, join } from 'node:path'
11
+ import { fileURLToPath, pathToFileURL } from 'node:url'
12
+
13
+ const root = join(dirname(fileURLToPath(import.meta.url)), '..')
14
+
15
+ try {
16
+ const modulePath = pathToFileURL(join(root, 'dist/lib/skills/create-installer.js')).href
17
+ const { generateSkillFile } = await import(modulePath)
18
+ const content = generateSkillFile()
19
+ await writeFile(join(root, 'skills/todoist-cli/SKILL.md'), content, 'utf-8')
20
+ console.log('skills/todoist-cli/SKILL.md has been regenerated')
21
+ } catch (err) {
22
+ if (err.code === 'ERR_MODULE_NOT_FOUND') {
23
+ console.error('ERROR: dist/ not found. Run `npm run build` first.')
24
+ } else {
25
+ console.error(err)
26
+ }
27
+ process.exit(1)
28
+ }
@@ -1,3 +0,0 @@
1
- declare const _default: (text: string) => string;
2
- export default _default;
3
- //# sourceMappingURL=chalk.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"chalk.d.ts","sourceRoot":"","sources":["../../src/__mocks__/chalk.ts"],"names":[],"mappings":"+BAA2B,MAAM;AAQjC,wBAAiC"}
@@ -1,8 +0,0 @@
1
- const passthrough = (text) => text;
2
- function createChalkProxy() {
3
- return new Proxy(passthrough, {
4
- get: () => createChalkProxy(),
5
- });
6
- }
7
- export default createChalkProxy();
8
- //# sourceMappingURL=chalk.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"chalk.js","sourceRoot":"","sources":["../../src/__mocks__/chalk.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,GAAG,CAAC,IAAY,EAAE,EAAE,CAAC,IAAI,CAAA;AAE1C,SAAS,gBAAgB;IACrB,OAAO,IAAI,KAAK,CAAC,WAAW,EAAE;QAC1B,GAAG,EAAE,GAAG,EAAE,CAAC,gBAAgB,EAAE;KAChC,CAAuB,CAAA;AAC5B,CAAC;AAED,eAAe,gBAAgB,EAAE,CAAA"}
@@ -1,3 +0,0 @@
1
- import { Command } from 'commander';
2
- export declare function registerActivityCommand(program: Command): void;
3
- //# sourceMappingURL=activity.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"activity.d.ts","sourceRoot":"","sources":["../../src/commands/activity.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAU,MAAM,WAAW,CAAA;AAiM3C,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA+K9D"}
@@ -1,267 +0,0 @@
1
- import chalk from 'chalk';
2
- import { Option } from 'commander';
3
- import { getApi, getCurrentUserId, isWorkspaceProject } from '../lib/api/core.js';
4
- import { formatUserShortName } from '../lib/collaborators.js';
5
- import { withCaseInsensitiveChoices } from '../lib/completion.js';
6
- import { formatPaginatedJson, formatPaginatedNdjson } from '../lib/output.js';
7
- import { paginate } from '../lib/pagination.js';
8
- import { extractId, isIdRef, resolveProjectId } from '../lib/refs.js';
9
- const ACTIVITY_LIMIT = 100;
10
- const EVENT_COLORS = {
11
- added: chalk.green,
12
- completed: chalk.green,
13
- updated: chalk.yellow,
14
- deleted: chalk.red,
15
- uncompleted: chalk.yellow,
16
- archived: chalk.gray,
17
- unarchived: chalk.cyan,
18
- shared: chalk.magenta,
19
- left: chalk.gray,
20
- reordered: chalk.cyan,
21
- moved: chalk.cyan,
22
- };
23
- const OBJECT_TYPE_LABELS = {
24
- task: 'task',
25
- item: 'task',
26
- comment: 'comment',
27
- note: 'comment',
28
- project: 'project',
29
- };
30
- const EVENT_CHOICES = Object.keys(EVENT_COLORS);
31
- const OBJECT_TYPE_CHOICES = [...new Set(Object.values(OBJECT_TYPE_LABELS))];
32
- function formatEventType(eventType) {
33
- const colorFn = EVENT_COLORS[eventType] || chalk.white;
34
- return colorFn(eventType.padEnd(11));
35
- }
36
- function formatObjectType(objectType) {
37
- const label = OBJECT_TYPE_LABELS[objectType] || objectType;
38
- return chalk.dim(label.padEnd(8));
39
- }
40
- function formatEventDate(eventDate) {
41
- const date = new Date(eventDate);
42
- const month = String(date.getMonth() + 1).padStart(2, '0');
43
- const day = String(date.getDate()).padStart(2, '0');
44
- const hours = String(date.getHours()).padStart(2, '0');
45
- const minutes = String(date.getMinutes()).padStart(2, '0');
46
- return chalk.dim(`${month}-${day} ${hours}:${minutes}`);
47
- }
48
- function getEventContent(event) {
49
- const extra = event.extraData;
50
- if (extra?.content) {
51
- return String(extra.content);
52
- }
53
- if (extra?.name) {
54
- return String(extra.name);
55
- }
56
- if (extra?.last_content) {
57
- return String(extra.last_content);
58
- }
59
- if (extra?.last_name) {
60
- return String(extra.last_name);
61
- }
62
- return `id:${event.objectId}`;
63
- }
64
- function truncateContent(content, maxLength = 100) {
65
- const firstLine = content.split('\n')[0];
66
- if (firstLine.length <= maxLength) {
67
- return firstLine;
68
- }
69
- return `${firstLine.slice(0, maxLength - 3)}...`;
70
- }
71
- function formatActivityRow(event, projectName, initiatorName, showInitiator = false) {
72
- const date = formatEventDate(event.eventDate);
73
- const eventType = formatEventType(event.eventType);
74
- const objectType = formatObjectType(event.objectType);
75
- const content = getEventContent(event);
76
- const metaParts = [date, eventType, objectType];
77
- if (projectName) {
78
- metaParts.push(chalk.cyan(projectName));
79
- }
80
- if (showInitiator && initiatorName) {
81
- metaParts.push(chalk.magenta(`by ${initiatorName}`));
82
- }
83
- const line1 = ` ${metaParts.join(' ')}`;
84
- const line2 = ` ${truncateContent(content)}`;
85
- return `${line1}\n${line2}`;
86
- }
87
- function normalizeInlineText(text) {
88
- return text.replace(/\s+/g, ' ').trim();
89
- }
90
- function formatMarkdownDay(eventDate) {
91
- const date = new Date(eventDate);
92
- const year = date.getFullYear();
93
- const month = String(date.getMonth() + 1).padStart(2, '0');
94
- const day = String(date.getDate()).padStart(2, '0');
95
- return `${year}-${month}-${day}`;
96
- }
97
- function formatMarkdownTime(eventDate) {
98
- const date = new Date(eventDate);
99
- const hours = String(date.getHours()).padStart(2, '0');
100
- const minutes = String(date.getMinutes()).padStart(2, '0');
101
- return `${hours}:${minutes}`;
102
- }
103
- function formatActivityMarkdown(events, projects, userNames, nextCursor) {
104
- const sortedEvents = [...events].sort((a, b) => new Date(b.eventDate).getTime() - new Date(a.eventDate).getTime());
105
- const lines = ['# Activity Log'];
106
- let currentDay = null;
107
- for (const event of sortedEvents) {
108
- const day = formatMarkdownDay(event.eventDate);
109
- if (day !== currentDay) {
110
- lines.push('', `## ${day}`, '');
111
- currentDay = day;
112
- }
113
- const objectType = OBJECT_TYPE_LABELS[event.objectType] || event.objectType;
114
- const content = normalizeInlineText(getEventContent(event));
115
- const parts = [
116
- `- ${formatMarkdownTime(event.eventDate)} - ${event.eventType} ${objectType}: ${content}`,
117
- ];
118
- if (event.parentProjectId) {
119
- const projectName = projects.get(event.parentProjectId)?.name;
120
- if (projectName) {
121
- parts.push(`(project: ${normalizeInlineText(projectName)})`);
122
- }
123
- }
124
- if (event.initiatorId && userNames.size > 0) {
125
- const fullName = userNames.get(event.initiatorId);
126
- if (fullName) {
127
- parts.push(`(by: ${normalizeInlineText(formatUserShortName(fullName))})`);
128
- }
129
- }
130
- lines.push(parts.join(' '));
131
- }
132
- if (nextCursor) {
133
- lines.push('', '> Note: More items exist. Use --cursor to paginate, or narrow results with --since/--until.');
134
- }
135
- return lines.join('\n');
136
- }
137
- export function registerActivityCommand(program) {
138
- program
139
- .command('activity')
140
- .description('View activity logs')
141
- .option('--since <date>', 'Start date (YYYY-MM-DD)')
142
- .option('--until <date>', 'End date (YYYY-MM-DD)')
143
- .addOption(withCaseInsensitiveChoices(new Option('--type <type>', 'Filter by object type (task, comment, project)'), OBJECT_TYPE_CHOICES))
144
- .addOption(withCaseInsensitiveChoices(new Option('--event <type>', 'Filter by event type'), EVENT_CHOICES))
145
- .option('--project <name>', 'Filter by project')
146
- .option('--by <user>', 'Filter by initiator (use "me" for yourself)')
147
- .option('--limit <n>', `Limit results (default: ${ACTIVITY_LIMIT})`)
148
- .option('--cursor <cursor>', 'Continue from cursor')
149
- .option('--markdown', 'Output as raw Markdown')
150
- .option('--json', 'Output as JSON')
151
- .option('--ndjson', 'Output as newline-delimited JSON')
152
- .option('--full', 'Include all fields in JSON output')
153
- .action(async (options) => {
154
- const selectedOutputFormats = [options.markdown, options.json, options.ndjson].filter(Boolean).length;
155
- if (selectedOutputFormats > 1) {
156
- throw new Error('Options --markdown, --json, and --ndjson are mutually exclusive.');
157
- }
158
- const api = await getApi();
159
- let projectId;
160
- if (options.project) {
161
- projectId = await resolveProjectId(api, options.project);
162
- }
163
- let initiatorId;
164
- if (options.by) {
165
- if (options.by.toLowerCase() === 'me') {
166
- initiatorId = await getCurrentUserId();
167
- }
168
- else if (isIdRef(options.by)) {
169
- initiatorId = extractId(options.by);
170
- }
171
- else {
172
- initiatorId = options.by;
173
- }
174
- }
175
- const targetLimit = options.limit ? parseInt(options.limit, 10) : ACTIVITY_LIMIT;
176
- const { results: events, nextCursor } = await paginate(async (cursor, limit) => {
177
- const objectEventTypes = options.type || options.event
178
- ? `${options.type ?? ''}:${options.event ?? ''}`
179
- : undefined;
180
- const resp = await api.getActivityLogs({
181
- dateFrom: options.since ? new Date(options.since) : undefined,
182
- dateTo: options.until ? new Date(options.until) : undefined,
183
- objectEventTypes,
184
- parentProjectId: projectId,
185
- initiatorId,
186
- cursor: cursor ?? undefined,
187
- limit,
188
- });
189
- return { results: resp.results, nextCursor: resp.nextCursor };
190
- }, { limit: targetLimit, startCursor: options.cursor });
191
- if (options.json) {
192
- console.log(formatPaginatedJson({ results: events, nextCursor }, undefined, options.full));
193
- return;
194
- }
195
- if (options.ndjson) {
196
- console.log(formatPaginatedNdjson({ results: events, nextCursor }, undefined, options.full));
197
- return;
198
- }
199
- if (events.length === 0) {
200
- if (options.markdown) {
201
- const lines = ['# Activity Log'];
202
- if (nextCursor) {
203
- lines.push('', '> Note: More items exist. Use --cursor to paginate, or narrow results with --since/--until.');
204
- }
205
- console.log(lines.join('\n'));
206
- return;
207
- }
208
- console.log('No activity found.');
209
- if (nextCursor) {
210
- console.log(chalk.dim('\n... more items exist. Use --cursor to paginate, or narrow results with --since/--until.'));
211
- }
212
- return;
213
- }
214
- const { results: allProjects } = await api.getProjects();
215
- const projects = new Map(allProjects.map((p) => [p.id, p]));
216
- const workspaceIds = new Set();
217
- for (const event of events) {
218
- if (!event.parentProjectId)
219
- continue;
220
- const proj = projects.get(event.parentProjectId);
221
- if (proj && isWorkspaceProject(proj)) {
222
- workspaceIds.add(proj.workspaceId);
223
- }
224
- }
225
- const userNames = new Map();
226
- for (const wsId of workspaceIds) {
227
- let cursor;
228
- while (true) {
229
- const response = await api.getWorkspaceUsers({
230
- workspaceId: parseInt(wsId, 10),
231
- cursor,
232
- limit: 200,
233
- });
234
- for (const user of response.workspaceUsers) {
235
- userNames.set(user.userId, user.fullName);
236
- }
237
- if (!response.hasMore || !response.nextCursor)
238
- break;
239
- cursor = response.nextCursor;
240
- }
241
- }
242
- if (options.markdown) {
243
- console.log(formatActivityMarkdown(events, projects, userNames, nextCursor));
244
- return;
245
- }
246
- console.log(chalk.bold(`Activity (${events.length})`));
247
- console.log('');
248
- for (const event of events) {
249
- const projectName = event.parentProjectId
250
- ? projects.get(event.parentProjectId)?.name
251
- : undefined;
252
- let initiatorName = null;
253
- if (event.initiatorId && userNames.size > 0) {
254
- const fullName = userNames.get(event.initiatorId);
255
- if (fullName) {
256
- initiatorName = formatUserShortName(fullName);
257
- }
258
- }
259
- console.log(formatActivityRow(event, projectName, initiatorName, userNames.size > 0));
260
- console.log('');
261
- }
262
- if (nextCursor) {
263
- console.log(chalk.dim('\n... more items exist. Use --cursor to paginate, or narrow results with --since/--until.'));
264
- }
265
- });
266
- }
267
- //# sourceMappingURL=activity.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"activity.js","sourceRoot":"","sources":["../../src/commands/activity.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,EAAW,MAAM,EAAE,MAAM,WAAW,CAAA;AAC3C,OAAO,EAAE,MAAM,EAAE,gBAAgB,EAAE,kBAAkB,EAAgB,MAAM,oBAAoB,CAAA;AAC/F,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAA;AAC7D,OAAO,EAAE,0BAA0B,EAAE,MAAM,sBAAsB,CAAA;AACjE,OAAO,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAA;AAC7E,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAA;AAC/C,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAA;AAiBrE,MAAM,cAAc,GAAG,GAAG,CAAA;AAE1B,MAAM,YAAY,GAA0C;IACxD,KAAK,EAAE,KAAK,CAAC,KAAK;IAClB,SAAS,EAAE,KAAK,CAAC,KAAK;IACtB,OAAO,EAAE,KAAK,CAAC,MAAM;IACrB,OAAO,EAAE,KAAK,CAAC,GAAG;IAClB,WAAW,EAAE,KAAK,CAAC,MAAM;IACzB,QAAQ,EAAE,KAAK,CAAC,IAAI;IACpB,UAAU,EAAE,KAAK,CAAC,IAAI;IACtB,MAAM,EAAE,KAAK,CAAC,OAAO;IACrB,IAAI,EAAE,KAAK,CAAC,IAAI;IAChB,SAAS,EAAE,KAAK,CAAC,IAAI;IACrB,KAAK,EAAE,KAAK,CAAC,IAAI;CACpB,CAAA;AAED,MAAM,kBAAkB,GAA2B;IAC/C,IAAI,EAAE,MAAM;IACZ,IAAI,EAAE,MAAM;IACZ,OAAO,EAAE,SAAS;IAClB,IAAI,EAAE,SAAS;IACf,OAAO,EAAE,SAAS;CACrB,CAAA;AAED,MAAM,aAAa,GAAG,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA;AAC/C,MAAM,mBAAmB,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAA;AAE3E,SAAS,eAAe,CAAC,SAAiB;IACtC,MAAM,OAAO,GAAG,YAAY,CAAC,SAAS,CAAC,IAAI,KAAK,CAAC,KAAK,CAAA;IACtD,OAAO,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAA;AACxC,CAAC;AAED,SAAS,gBAAgB,CAAC,UAAkB;IACxC,MAAM,KAAK,GAAG,kBAAkB,CAAC,UAAU,CAAC,IAAI,UAAU,CAAA;IAC1D,OAAO,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAA;AACrC,CAAC;AAED,SAAS,eAAe,CAAC,SAAiB;IACtC,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,SAAS,CAAC,CAAA;IAChC,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA;IAC1D,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA;IACnD,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA;IACtD,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA;IAC1D,OAAO,KAAK,CAAC,GAAG,CAAC,GAAG,KAAK,IAAI,GAAG,IAAI,KAAK,IAAI,OAAO,EAAE,CAAC,CAAA;AAC3D,CAAC;AAED,SAAS,eAAe,CAAC,KAAoB;IACzC,MAAM,KAAK,GAAG,KAAK,CAAC,SAA2C,CAAA;IAE/D,IAAI,KAAK,EAAE,OAAO,EAAE,CAAC;QACjB,OAAO,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;IAChC,CAAC;IACD,IAAI,KAAK,EAAE,IAAI,EAAE,CAAC;QACd,OAAO,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;IAC7B,CAAC;IACD,IAAI,KAAK,EAAE,YAAY,EAAE,CAAC;QACtB,OAAO,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,CAAA;IACrC,CAAC;IACD,IAAI,KAAK,EAAE,SAAS,EAAE,CAAC;QACnB,OAAO,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAA;IAClC,CAAC;IAED,OAAO,MAAM,KAAK,CAAC,QAAQ,EAAE,CAAA;AACjC,CAAC;AAED,SAAS,eAAe,CAAC,OAAe,EAAE,SAAS,GAAG,GAAG;IACrD,MAAM,SAAS,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAA;IACxC,IAAI,SAAS,CAAC,MAAM,IAAI,SAAS,EAAE,CAAC;QAChC,OAAO,SAAS,CAAA;IACpB,CAAC;IACD,OAAO,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,GAAG,CAAC,CAAC,KAAK,CAAA;AACpD,CAAC;AAED,SAAS,iBAAiB,CACtB,KAAoB,EACpB,WAAoB,EACpB,aAA6B,EAC7B,aAAa,GAAG,KAAK;IAErB,MAAM,IAAI,GAAG,eAAe,CAAC,KAAK,CAAC,SAAS,CAAC,CAAA;IAC7C,MAAM,SAAS,GAAG,eAAe,CAAC,KAAK,CAAC,SAAS,CAAC,CAAA;IAClD,MAAM,UAAU,GAAG,gBAAgB,CAAC,KAAK,CAAC,UAAU,CAAC,CAAA;IACrD,MAAM,OAAO,GAAG,eAAe,CAAC,KAAK,CAAC,CAAA;IAEtC,MAAM,SAAS,GAAG,CAAC,IAAI,EAAE,SAAS,EAAE,UAAU,CAAC,CAAA;IAC/C,IAAI,WAAW,EAAE,CAAC;QACd,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAA;IAC3C,CAAC;IACD,IAAI,aAAa,IAAI,aAAa,EAAE,CAAC;QACjC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,aAAa,EAAE,CAAC,CAAC,CAAA;IACxD,CAAC;IAED,MAAM,KAAK,GAAG,KAAK,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAA;IACzC,MAAM,KAAK,GAAG,OAAO,eAAe,CAAC,OAAO,CAAC,EAAE,CAAA;IAE/C,OAAO,GAAG,KAAK,KAAK,KAAK,EAAE,CAAA;AAC/B,CAAC;AAED,SAAS,mBAAmB,CAAC,IAAY;IACrC,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAA;AAC3C,CAAC;AAED,SAAS,iBAAiB,CAAC,SAAiB;IACxC,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,SAAS,CAAC,CAAA;IAChC,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,EAAE,CAAA;IAC/B,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA;IAC1D,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA;IACnD,OAAO,GAAG,IAAI,IAAI,KAAK,IAAI,GAAG,EAAE,CAAA;AACpC,CAAC;AAED,SAAS,kBAAkB,CAAC,SAAiB;IACzC,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,SAAS,CAAC,CAAA;IAChC,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA;IACtD,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA;IAC1D,OAAO,GAAG,KAAK,IAAI,OAAO,EAAE,CAAA;AAChC,CAAC;AAED,SAAS,sBAAsB,CAC3B,MAAuB,EACvB,QAA8B,EAC9B,SAA8B,EAC9B,UAA0B;IAE1B,MAAM,YAAY,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC,IAAI,CACjC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,CAC9E,CAAA;IAED,MAAM,KAAK,GAAa,CAAC,gBAAgB,CAAC,CAAA;IAC1C,IAAI,UAAU,GAAkB,IAAI,CAAA;IAEpC,KAAK,MAAM,KAAK,IAAI,YAAY,EAAE,CAAC;QAC/B,MAAM,GAAG,GAAG,iBAAiB,CAAC,KAAK,CAAC,SAAS,CAAC,CAAA;QAC9C,IAAI,GAAG,KAAK,UAAU,EAAE,CAAC;YACrB,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,MAAM,GAAG,EAAE,EAAE,EAAE,CAAC,CAAA;YAC/B,UAAU,GAAG,GAAG,CAAA;QACpB,CAAC;QAED,MAAM,UAAU,GAAG,kBAAkB,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,KAAK,CAAC,UAAU,CAAA;QAC3E,MAAM,OAAO,GAAG,mBAAmB,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,CAAA;QAC3D,MAAM,KAAK,GAAG;YACV,KAAK,kBAAkB,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC,SAAS,IAAI,UAAU,KAAK,OAAO,EAAE;SAC5F,CAAA;QAED,IAAI,KAAK,CAAC,eAAe,EAAE,CAAC;YACxB,MAAM,WAAW,GAAG,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,eAAe,CAAC,EAAE,IAAI,CAAA;YAC7D,IAAI,WAAW,EAAE,CAAC;gBACd,KAAK,CAAC,IAAI,CAAC,aAAa,mBAAmB,CAAC,WAAW,CAAC,GAAG,CAAC,CAAA;YAChE,CAAC;QACL,CAAC;QAED,IAAI,KAAK,CAAC,WAAW,IAAI,SAAS,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;YAC1C,MAAM,QAAQ,GAAG,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,CAAA;YACjD,IAAI,QAAQ,EAAE,CAAC;gBACX,KAAK,CAAC,IAAI,CAAC,QAAQ,mBAAmB,CAAC,mBAAmB,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAA;YAC7E,CAAC;QACL,CAAC;QAED,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAA;IAC/B,CAAC;IAED,IAAI,UAAU,EAAE,CAAC;QACb,KAAK,CAAC,IAAI,CACN,EAAE,EACF,6FAA6F,CAChG,CAAA;IACL,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AAC3B,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,OAAgB;IACpD,OAAO;SACF,OAAO,CAAC,UAAU,CAAC;SACnB,WAAW,CAAC,oBAAoB,CAAC;SACjC,MAAM,CAAC,gBAAgB,EAAE,yBAAyB,CAAC;SACnD,MAAM,CAAC,gBAAgB,EAAE,uBAAuB,CAAC;SACjD,SAAS,CACN,0BAA0B,CACtB,IAAI,MAAM,CAAC,eAAe,EAAE,gDAAgD,CAAC,EAC7E,mBAAmB,CACtB,CACJ;SACA,SAAS,CACN,0BAA0B,CACtB,IAAI,MAAM,CAAC,gBAAgB,EAAE,sBAAsB,CAAC,EACpD,aAAa,CAChB,CACJ;SACA,MAAM,CAAC,kBAAkB,EAAE,mBAAmB,CAAC;SAC/C,MAAM,CAAC,aAAa,EAAE,6CAA6C,CAAC;SACpE,MAAM,CAAC,aAAa,EAAE,2BAA2B,cAAc,GAAG,CAAC;SACnE,MAAM,CAAC,mBAAmB,EAAE,sBAAsB,CAAC;SACnD,MAAM,CAAC,YAAY,EAAE,wBAAwB,CAAC;SAC9C,MAAM,CAAC,QAAQ,EAAE,gBAAgB,CAAC;SAClC,MAAM,CAAC,UAAU,EAAE,kCAAkC,CAAC;SACtD,MAAM,CAAC,QAAQ,EAAE,mCAAmC,CAAC;SACrD,MAAM,CAAC,KAAK,EAAE,OAAwB,EAAE,EAAE;QACvC,MAAM,qBAAqB,GAAG,CAAC,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,CACjF,OAAO,CACV,CAAC,MAAM,CAAA;QACR,IAAI,qBAAqB,GAAG,CAAC,EAAE,CAAC;YAC5B,MAAM,IAAI,KAAK,CAAC,kEAAkE,CAAC,CAAA;QACvF,CAAC;QAED,MAAM,GAAG,GAAG,MAAM,MAAM,EAAE,CAAA;QAE1B,IAAI,SAA6B,CAAA;QACjC,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;YAClB,SAAS,GAAG,MAAM,gBAAgB,CAAC,GAAG,EAAE,OAAO,CAAC,OAAO,CAAC,CAAA;QAC5D,CAAC;QAED,IAAI,WAA+B,CAAA;QACnC,IAAI,OAAO,CAAC,EAAE,EAAE,CAAC;YACb,IAAI,OAAO,CAAC,EAAE,CAAC,WAAW,EAAE,KAAK,IAAI,EAAE,CAAC;gBACpC,WAAW,GAAG,MAAM,gBAAgB,EAAE,CAAA;YAC1C,CAAC;iBAAM,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC;gBAC7B,WAAW,GAAG,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;YACvC,CAAC;iBAAM,CAAC;gBACJ,WAAW,GAAG,OAAO,CAAC,EAAE,CAAA;YAC5B,CAAC;QACL,CAAC;QAED,MAAM,WAAW,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,cAAc,CAAA;QAEhF,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,QAAQ,CAClD,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE;YACpB,MAAM,gBAAgB,GAClB,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,KAAK;gBACzB,CAAC,CAAE,GAAG,OAAO,CAAC,IAAI,IAAI,EAAE,IAAI,OAAO,CAAC,KAAK,IAAI,EAAE,EAA8B;gBAC7E,CAAC,CAAC,SAAS,CAAA;YACnB,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,eAAe,CAAC;gBACnC,QAAQ,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS;gBAC7D,MAAM,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS;gBAC3D,gBAAgB;gBAChB,eAAe,EAAE,SAAS;gBAC1B,WAAW;gBACX,MAAM,EAAE,MAAM,IAAI,SAAS;gBAC3B,KAAK;aACR,CAAC,CAAA;YACF,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,CAAA;QACjE,CAAC,EACD,EAAE,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,OAAO,CAAC,MAAM,EAAE,CACtD,CAAA;QAED,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YACf,OAAO,CAAC,GAAG,CACP,mBAAmB,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,EAAE,SAAS,EAAE,OAAO,CAAC,IAAI,CAAC,CAChF,CAAA;YACD,OAAM;QACV,CAAC;QAED,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;YACjB,OAAO,CAAC,GAAG,CACP,qBAAqB,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,EAAE,SAAS,EAAE,OAAO,CAAC,IAAI,CAAC,CAClF,CAAA;YACD,OAAM;QACV,CAAC;QAED,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACtB,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;gBACnB,MAAM,KAAK,GAAG,CAAC,gBAAgB,CAAC,CAAA;gBAChC,IAAI,UAAU,EAAE,CAAC;oBACb,KAAK,CAAC,IAAI,CACN,EAAE,EACF,6FAA6F,CAChG,CAAA;gBACL,CAAC;gBACD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAA;gBAC7B,OAAM;YACV,CAAC;YACD,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAA;YACjC,IAAI,UAAU,EAAE,CAAC;gBACb,OAAO,CAAC,GAAG,CACP,KAAK,CAAC,GAAG,CACL,2FAA2F,CAC9F,CACJ,CAAA;YACL,CAAC;YACD,OAAM;QACV,CAAC;QAED,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,GAAG,MAAM,GAAG,CAAC,WAAW,EAAE,CAAA;QACxD,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAkB,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAA;QAE5E,MAAM,YAAY,GAAG,IAAI,GAAG,EAAU,CAAA;QACtC,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YACzB,IAAI,CAAC,KAAK,CAAC,eAAe;gBAAE,SAAQ;YACpC,MAAM,IAAI,GAAG,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,eAAe,CAAC,CAAA;YAChD,IAAI,IAAI,IAAI,kBAAkB,CAAC,IAAI,CAAC,EAAE,CAAC;gBACnC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;YACtC,CAAC;QACL,CAAC;QAED,MAAM,SAAS,GAAG,IAAI,GAAG,EAAkB,CAAA;QAC3C,KAAK,MAAM,IAAI,IAAI,YAAY,EAAE,CAAC;YAC9B,IAAI,MAA0B,CAAA;YAC9B,OAAO,IAAI,EAAE,CAAC;gBACV,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,iBAAiB,CAAC;oBACzC,WAAW,EAAE,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC;oBAC/B,MAAM;oBACN,KAAK,EAAE,GAAG;iBACb,CAAC,CAAA;gBACF,KAAK,MAAM,IAAI,IAAI,QAAQ,CAAC,cAAc,EAAE,CAAC;oBACzC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAA;gBAC7C,CAAC;gBACD,IAAI,CAAC,QAAQ,CAAC,OAAO,IAAI,CAAC,QAAQ,CAAC,UAAU;oBAAE,MAAK;gBACpD,MAAM,GAAG,QAAQ,CAAC,UAAU,CAAA;YAChC,CAAC;QACL,CAAC;QAED,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;YACnB,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC,CAAA;YAC5E,OAAM;QACV,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;QACtD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;QAEf,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YACzB,MAAM,WAAW,GAAG,KAAK,CAAC,eAAe;gBACrC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,eAAe,CAAC,EAAE,IAAI;gBAC3C,CAAC,CAAC,SAAS,CAAA;YAEf,IAAI,aAAa,GAAkB,IAAI,CAAA;YACvC,IAAI,KAAK,CAAC,WAAW,IAAI,SAAS,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;gBAC1C,MAAM,QAAQ,GAAG,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,CAAA;gBACjD,IAAI,QAAQ,EAAE,CAAC;oBACX,aAAa,GAAG,mBAAmB,CAAC,QAAQ,CAAC,CAAA;gBACjD,CAAC;YACL,CAAC;YAED,OAAO,CAAC,GAAG,CACP,iBAAiB,CAAC,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,SAAS,CAAC,IAAI,GAAG,CAAC,CAAC,CAC3E,CAAA;YACD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;QACnB,CAAC;QAED,IAAI,UAAU,EAAE,CAAC;YACb,OAAO,CAAC,GAAG,CACP,KAAK,CAAC,GAAG,CACL,2FAA2F,CAC9F,CACJ,CAAA;QACL,CAAC;IACL,CAAC,CAAC,CAAA;AACV,CAAC"}
@@ -1,3 +0,0 @@
1
- import { Command } from 'commander';
2
- export declare function registerAddCommand(program: Command): void;
3
- //# sourceMappingURL=add.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"add.d.ts","sourceRoot":"","sources":["../../src/commands/add.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAUnC,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAmCzD"}
@@ -1,36 +0,0 @@
1
- import chalk from 'chalk';
2
- import { getApi } from '../lib/api/core.js';
3
- import { resolveAssigneeId } from '../lib/collaborators.js';
4
- import { formatDue, printDryRun } from '../lib/output.js';
5
- export function registerAddCommand(program) {
6
- const addCmd = program
7
- .command('add [text]')
8
- .description('Quick add with natural language (human shorthand; agents should use "task add")')
9
- .option('--assignee <ref>', 'Assign to user (name, email, id:xxx, or "me")')
10
- .option('--dry-run', 'Preview what would happen without executing')
11
- .action(async (text, options) => {
12
- if (!text) {
13
- addCmd.help();
14
- return;
15
- }
16
- if (options.dryRun) {
17
- printDryRun('quick add task', {
18
- Text: text,
19
- Assignee: options.assignee,
20
- });
21
- return;
22
- }
23
- const api = await getApi();
24
- let task = await api.quickAddTask({ text });
25
- if (options.assignee) {
26
- const project = await api.getProject(task.projectId);
27
- const assigneeId = await resolveAssigneeId(api, options.assignee, project);
28
- task = await api.updateTask(task.id, { assigneeId });
29
- }
30
- console.log(`Created: ${task.content}`);
31
- if (task.due)
32
- console.log(`Due: ${formatDue(task.due)}`);
33
- console.log(chalk.dim(`ID: ${task.id}`));
34
- });
35
- }
36
- //# sourceMappingURL=add.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"add.js","sourceRoot":"","sources":["../../src/commands/add.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAA;AAC3C,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAA;AAC3D,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAOzD,MAAM,UAAU,kBAAkB,CAAC,OAAgB;IAC/C,MAAM,MAAM,GAAG,OAAO;SACjB,OAAO,CAAC,YAAY,CAAC;SACrB,WAAW,CACR,iFAAiF,CACpF;SACA,MAAM,CAAC,kBAAkB,EAAE,+CAA+C,CAAC;SAC3E,MAAM,CAAC,WAAW,EAAE,6CAA6C,CAAC;SAClE,MAAM,CAAC,KAAK,EAAE,IAAwB,EAAE,OAAmB,EAAE,EAAE;QAC5D,IAAI,CAAC,IAAI,EAAE,CAAC;YACR,MAAM,CAAC,IAAI,EAAE,CAAA;YACb,OAAM;QACV,CAAC;QAED,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;YACjB,WAAW,CAAC,gBAAgB,EAAE;gBAC1B,IAAI,EAAE,IAAI;gBACV,QAAQ,EAAE,OAAO,CAAC,QAAQ;aAC7B,CAAC,CAAA;YACF,OAAM;QACV,CAAC;QAED,MAAM,GAAG,GAAG,MAAM,MAAM,EAAE,CAAA;QAC1B,IAAI,IAAI,GAAG,MAAM,GAAG,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,CAAC,CAAA;QAE3C,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;YACnB,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;YACpD,MAAM,UAAU,GAAG,MAAM,iBAAiB,CAAC,GAAG,EAAE,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAA;YAC1E,IAAI,GAAG,MAAM,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,UAAU,EAAE,CAAC,CAAA;QACxD,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,CAAC,OAAO,EAAE,CAAC,CAAA;QACvC,IAAI,IAAI,CAAC,GAAG;YAAE,OAAO,CAAC,GAAG,CAAC,QAAQ,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;QACxD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAA;IAC5C,CAAC,CAAC,CAAA;AACV,CAAC"}
@@ -1,3 +0,0 @@
1
- import { Command } from 'commander';
2
- export declare function registerAttachmentCommand(program: Command): void;
3
- //# sourceMappingURL=attachment.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"attachment.d.ts","sourceRoot":"","sources":["../../src/commands/attachment.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AA0KnC,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAchE"}