@proletariat/cli 0.3.93 → 0.3.94

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 (374) hide show
  1. package/dist/commands/action/create.d.ts +1 -1
  2. package/dist/commands/action/delete.d.ts +1 -1
  3. package/dist/commands/action/index.d.ts +1 -1
  4. package/dist/commands/action/list.d.ts +1 -1
  5. package/dist/commands/action/run.d.ts +1 -1
  6. package/dist/commands/action/show.d.ts +1 -1
  7. package/dist/commands/action/update.d.ts +1 -1
  8. package/dist/commands/agent/cleanup.d.ts +1 -1
  9. package/dist/commands/agent/gc.d.ts +1 -1
  10. package/dist/commands/agent/index.d.ts +1 -1
  11. package/dist/commands/agent/list.d.ts +1 -1
  12. package/dist/commands/agent/login.d.ts +1 -1
  13. package/dist/commands/agent/rebuild.d.ts +1 -1
  14. package/dist/commands/agent/remove.d.ts +1 -1
  15. package/dist/commands/agent/restart.d.ts +1 -1
  16. package/dist/commands/agent/shell.d.ts +1 -1
  17. package/dist/commands/agent/staff/index.d.ts +1 -1
  18. package/dist/commands/agent/staff/remove.d.ts +1 -1
  19. package/dist/commands/agent/status.d.ts +1 -1
  20. package/dist/commands/agent/visit.d.ts +1 -1
  21. package/dist/commands/asana/import.d.ts +1 -1
  22. package/dist/commands/branch/create.d.ts +1 -1
  23. package/dist/commands/branch/index.d.ts +1 -1
  24. package/dist/commands/branch/list.d.ts +1 -1
  25. package/dist/commands/branch/validate.d.ts +1 -1
  26. package/dist/commands/branch/where.d.ts +1 -1
  27. package/dist/commands/config/index.js +2 -2
  28. package/dist/commands/config/index.js.map +1 -1
  29. package/dist/commands/diet.d.ts +1 -1
  30. package/dist/commands/docker/index.js +2 -0
  31. package/dist/commands/docker/index.js.map +1 -1
  32. package/dist/commands/docker/rebuild-cache.d.ts +12 -0
  33. package/dist/commands/docker/rebuild-cache.js +144 -0
  34. package/dist/commands/docker/rebuild-cache.js.map +1 -0
  35. package/dist/commands/execution/config.d.ts +1 -1
  36. package/dist/commands/execution/index.d.ts +1 -1
  37. package/dist/commands/execution/list.d.ts +1 -1
  38. package/dist/commands/execution/logs.d.ts +1 -1
  39. package/dist/commands/execution/stop.d.ts +1 -1
  40. package/dist/commands/execution/view.d.ts +1 -1
  41. package/dist/commands/hook/export.d.ts +1 -1
  42. package/dist/commands/hook/fire.d.ts +1 -1
  43. package/dist/commands/hook/index.d.ts +1 -1
  44. package/dist/commands/hook/list.d.ts +1 -1
  45. package/dist/commands/hook/preset.d.ts +1 -1
  46. package/dist/commands/linear/auth.d.ts +1 -1
  47. package/dist/commands/linear/connect.d.ts +1 -1
  48. package/dist/commands/linear/import.d.ts +1 -1
  49. package/dist/commands/linear/status.d.ts +1 -1
  50. package/dist/commands/linear/sync.d.ts +1 -1
  51. package/dist/commands/mcp-server.d.ts +8 -2
  52. package/dist/commands/mcp-server.js +15 -28
  53. package/dist/commands/mcp-server.js.map +1 -1
  54. package/dist/commands/monday/connect.d.ts +1 -1
  55. package/dist/commands/monday/sync.d.ts +1 -1
  56. package/dist/commands/orchestrate/index.d.ts +1 -1
  57. package/dist/commands/orchestrator/index.d.ts +1 -1
  58. package/dist/commands/orchestrator/start.d.ts +3 -3
  59. package/dist/commands/orchestrator/start.js +38 -40
  60. package/dist/commands/orchestrator/start.js.map +1 -1
  61. package/dist/commands/pr/checks.d.ts +1 -1
  62. package/dist/commands/pr/close.d.ts +1 -1
  63. package/dist/commands/pr/create.d.ts +1 -1
  64. package/dist/commands/pr/index.d.ts +1 -1
  65. package/dist/commands/pr/link.d.ts +1 -1
  66. package/dist/commands/pr/list.d.ts +1 -1
  67. package/dist/commands/pr/merge.d.ts +1 -1
  68. package/dist/commands/pr/status.d.ts +1 -1
  69. package/dist/commands/pull.d.ts +1 -1
  70. package/dist/commands/repo/add.d.ts +1 -1
  71. package/dist/commands/repo/create.d.ts +1 -1
  72. package/dist/commands/repo/fix-remotes.d.ts +1 -1
  73. package/dist/commands/repo/index.d.ts +1 -1
  74. package/dist/commands/repo/list.d.ts +1 -1
  75. package/dist/commands/repo/remove.d.ts +1 -1
  76. package/dist/commands/repo/view.d.ts +1 -1
  77. package/dist/commands/session/attach.d.ts +1 -1
  78. package/dist/commands/session/cleanup.d.ts +1 -1
  79. package/dist/commands/session/create.d.ts +1 -1
  80. package/dist/commands/session/exec.d.ts +1 -1
  81. package/dist/commands/session/health.d.ts +1 -1
  82. package/dist/commands/session/index.d.ts +1 -1
  83. package/dist/commands/session/inspect.d.ts +1 -1
  84. package/dist/commands/session/list.d.ts +1 -1
  85. package/dist/commands/session/peek.d.ts +1 -1
  86. package/dist/commands/session/prune.d.ts +1 -1
  87. package/dist/commands/session/report.d.ts +1 -1
  88. package/dist/commands/session/restart.d.ts +1 -1
  89. package/dist/commands/shortcut/connect.d.ts +1 -1
  90. package/dist/commands/support/logs.d.ts +1 -1
  91. package/dist/commands/ticket/create.d.ts +1 -1
  92. package/dist/commands/ticket/delete.d.ts +1 -1
  93. package/dist/commands/ticket/edit.d.ts +1 -1
  94. package/dist/commands/ticket/index.d.ts +1 -1
  95. package/dist/commands/ticket/index.js +6 -36
  96. package/dist/commands/ticket/index.js.map +1 -1
  97. package/dist/commands/ticket/list.d.ts +1 -1
  98. package/dist/commands/ticket/move.d.ts +1 -1
  99. package/dist/commands/ticket/show.d.ts +8 -7
  100. package/dist/commands/ticket/show.js +101 -8
  101. package/dist/commands/ticket/show.js.map +1 -1
  102. package/dist/commands/ticket/update.d.ts +1 -1
  103. package/dist/commands/trello/configure.d.ts +1 -1
  104. package/dist/commands/trello/import.d.ts +1 -1
  105. package/dist/commands/trello/sync.d.ts +1 -1
  106. package/dist/commands/work/asana.d.ts +1 -1
  107. package/dist/commands/work/complete.d.ts +1 -1
  108. package/dist/commands/work/groom.d.ts +1 -1
  109. package/dist/commands/work/hooks/add.d.ts +1 -1
  110. package/dist/commands/work/hooks/index.d.ts +1 -1
  111. package/dist/commands/work/hooks/list.d.ts +1 -1
  112. package/dist/commands/work/hooks/remove.d.ts +1 -1
  113. package/dist/commands/work/hooks/toggle.d.ts +1 -1
  114. package/dist/commands/work/implement.d.ts +1 -1
  115. package/dist/commands/work/index.d.ts +1 -1
  116. package/dist/commands/work/jira.d.ts +1 -1
  117. package/dist/commands/work/linear.d.ts +1 -1
  118. package/dist/commands/work/peek.d.ts +1 -1
  119. package/dist/commands/work/ready.d.ts +1 -1
  120. package/dist/commands/work/rebase.d.ts +1 -1
  121. package/dist/commands/work/resolve.d.ts +1 -1
  122. package/dist/commands/work/review.d.ts +1 -1
  123. package/dist/commands/work/ship.d.ts +1 -1
  124. package/dist/commands/work/shortcut.d.ts +1 -1
  125. package/dist/commands/work/source/set.d.ts +1 -1
  126. package/dist/commands/work/source.d.ts +1 -1
  127. package/dist/commands/work/spawn.d.ts +1 -1
  128. package/dist/commands/work/start.d.ts +1 -1
  129. package/dist/commands/work/status.d.ts +1 -1
  130. package/dist/commands/work/stop.d.ts +1 -1
  131. package/dist/commands/work/watch.d.ts +1 -1
  132. package/dist/hooks/init.js +1 -1
  133. package/dist/hooks/init.js.map +1 -1
  134. package/dist/lib/asana/config.js +13 -7
  135. package/dist/lib/asana/config.js.map +1 -1
  136. package/dist/lib/clickup/client.d.ts +92 -0
  137. package/dist/lib/clickup/client.js +150 -0
  138. package/dist/lib/clickup/client.js.map +1 -0
  139. package/dist/lib/clickup/config.d.ts +41 -0
  140. package/dist/lib/clickup/config.js +104 -0
  141. package/dist/lib/clickup/config.js.map +1 -0
  142. package/dist/lib/clickup/index.d.ts +4 -0
  143. package/dist/lib/clickup/index.js +4 -0
  144. package/dist/lib/clickup/index.js.map +1 -0
  145. package/dist/lib/clickup/types.d.ts +104 -0
  146. package/dist/lib/clickup/types.js +34 -0
  147. package/dist/lib/clickup/types.js.map +1 -0
  148. package/dist/lib/database/credential-store.d.ts +64 -0
  149. package/dist/lib/database/credential-store.js +306 -0
  150. package/dist/lib/database/credential-store.js.map +1 -0
  151. package/dist/lib/database/index.d.ts +1 -0
  152. package/dist/lib/database/index.js +2 -0
  153. package/dist/lib/database/index.js.map +1 -1
  154. package/dist/lib/database/pmo-bootstrap.d.ts +7 -0
  155. package/dist/lib/database/pmo-bootstrap.js +45 -20
  156. package/dist/lib/database/pmo-bootstrap.js.map +1 -1
  157. package/dist/lib/database/workspace.js +4 -0
  158. package/dist/lib/database/workspace.js.map +1 -1
  159. package/dist/lib/execution/devcontainer.js +51 -0
  160. package/dist/lib/execution/devcontainer.js.map +1 -1
  161. package/dist/lib/execution/runners/docker-management.d.ts +23 -0
  162. package/dist/lib/execution/runners/docker-management.js +99 -7
  163. package/dist/lib/execution/runners/docker-management.js.map +1 -1
  164. package/dist/lib/execution/session-utils.d.ts +4 -0
  165. package/dist/lib/execution/session-utils.js +34 -24
  166. package/dist/lib/execution/session-utils.js.map +1 -1
  167. package/dist/lib/execution/types.js +1 -1
  168. package/dist/lib/external-issues/types.d.ts +3 -3
  169. package/dist/lib/external-issues/types.js +1 -1
  170. package/dist/lib/external-issues/types.js.map +1 -1
  171. package/dist/lib/jira/config.js +10 -4
  172. package/dist/lib/jira/config.js.map +1 -1
  173. package/dist/lib/linear/config.js +13 -8
  174. package/dist/lib/linear/config.js.map +1 -1
  175. package/dist/lib/mcp/generator.d.ts +26 -0
  176. package/dist/lib/mcp/generator.js +219 -0
  177. package/dist/lib/mcp/generator.js.map +1 -0
  178. package/dist/lib/mcp/index.d.ts +1 -0
  179. package/dist/lib/mcp/index.js +1 -0
  180. package/dist/lib/mcp/index.js.map +1 -1
  181. package/dist/lib/mcp/tools/index.d.ts +0 -11
  182. package/dist/lib/mcp/tools/index.js +0 -11
  183. package/dist/lib/mcp/tools/index.js.map +1 -1
  184. package/dist/lib/mcp/tools/overrides/index.d.ts +23 -0
  185. package/dist/lib/mcp/tools/overrides/index.js +30 -0
  186. package/dist/lib/mcp/tools/overrides/index.js.map +1 -0
  187. package/dist/lib/mcp/tools/overrides/tmux.d.ts +11 -0
  188. package/dist/lib/mcp/tools/overrides/tmux.js +184 -0
  189. package/dist/lib/mcp/tools/overrides/tmux.js.map +1 -0
  190. package/dist/lib/mcp/tools/overrides/work-start.d.ts +12 -0
  191. package/dist/lib/mcp/tools/overrides/work-start.js +108 -0
  192. package/dist/lib/mcp/tools/overrides/work-start.js.map +1 -0
  193. package/dist/lib/mcp/tools/ticket.js +10 -48
  194. package/dist/lib/mcp/tools/ticket.js.map +1 -1
  195. package/dist/lib/monday/config.js +11 -5
  196. package/dist/lib/monday/config.js.map +1 -1
  197. package/dist/lib/pmo/base-command.d.ts +20 -152
  198. package/dist/lib/pmo/base-command.js +32 -198
  199. package/dist/lib/pmo/base-command.js.map +1 -1
  200. package/dist/lib/pmo/index.d.ts +1 -0
  201. package/dist/lib/pmo/index.js +3 -0
  202. package/dist/lib/pmo/index.js.map +1 -1
  203. package/dist/lib/pmo/storage/base.d.ts +0 -18
  204. package/dist/lib/pmo/storage/base.js +0 -231
  205. package/dist/lib/pmo/storage/base.js.map +1 -1
  206. package/dist/lib/pmo/storage/index.d.ts +1 -76
  207. package/dist/lib/pmo/storage/index.js +1 -215
  208. package/dist/lib/pmo/storage/index.js.map +1 -1
  209. package/dist/lib/pmo/storage/tickets.d.ts +2 -2
  210. package/dist/lib/pmo/storage/tickets.js +4 -34
  211. package/dist/lib/pmo/storage/tickets.js.map +1 -1
  212. package/dist/lib/pmo/types.d.ts +0 -37
  213. package/dist/lib/providers/clickup-provider.d.ts +28 -0
  214. package/dist/lib/providers/clickup-provider.js +353 -0
  215. package/dist/lib/providers/clickup-provider.js.map +1 -0
  216. package/dist/lib/providers/resolver.d.ts +1 -1
  217. package/dist/lib/providers/resolver.js +16 -5
  218. package/dist/lib/providers/resolver.js.map +1 -1
  219. package/dist/lib/providers/types.d.ts +1 -1
  220. package/dist/lib/runners/claude-code-runner.js +13 -4
  221. package/dist/lib/runners/claude-code-runner.js.map +1 -1
  222. package/dist/lib/runtime-command.d.ts +219 -0
  223. package/dist/lib/runtime-command.js +320 -0
  224. package/dist/lib/runtime-command.js.map +1 -0
  225. package/dist/lib/shortcut/config.js +13 -7
  226. package/dist/lib/shortcut/config.js.map +1 -1
  227. package/dist/lib/trello/config.js +17 -12
  228. package/dist/lib/trello/config.js.map +1 -1
  229. package/dist/lib/work-lifecycle/events.d.ts +1 -1
  230. package/dist/lib/work-source/config.d.ts +1 -1
  231. package/dist/lib/work-source/config.js +11 -1
  232. package/dist/lib/work-source/config.js.map +1 -1
  233. package/dist/lib/work-source/provider-sources.js +6 -1
  234. package/dist/lib/work-source/provider-sources.js.map +1 -1
  235. package/oclif.manifest.json +3015 -4827
  236. package/package.json +1 -1
  237. package/dist/commands/board/index.d.ts +0 -21
  238. package/dist/commands/board/index.js +0 -263
  239. package/dist/commands/board/index.js.map +0 -1
  240. package/dist/commands/board/view.d.ts +0 -15
  241. package/dist/commands/board/view.js +0 -137
  242. package/dist/commands/board/view.js.map +0 -1
  243. package/dist/commands/board/watch.d.ts +0 -15
  244. package/dist/commands/board/watch.js +0 -59
  245. package/dist/commands/board/watch.js.map +0 -1
  246. package/dist/commands/dashboard/index.d.ts +0 -14
  247. package/dist/commands/dashboard/index.js +0 -117
  248. package/dist/commands/dashboard/index.js.map +0 -1
  249. package/dist/commands/dashboard.d.ts +0 -38
  250. package/dist/commands/dashboard.js +0 -353
  251. package/dist/commands/dashboard.js.map +0 -1
  252. package/dist/commands/pmo/init.d.ts +0 -28
  253. package/dist/commands/pmo/init.js +0 -410
  254. package/dist/commands/pmo/init.js.map +0 -1
  255. package/dist/commands/project/archive.d.ts +0 -18
  256. package/dist/commands/project/archive.js +0 -79
  257. package/dist/commands/project/archive.js.map +0 -1
  258. package/dist/commands/project/create.d.ts +0 -24
  259. package/dist/commands/project/create.js +0 -191
  260. package/dist/commands/project/create.js.map +0 -1
  261. package/dist/commands/project/delete.d.ts +0 -18
  262. package/dist/commands/project/delete.js +0 -115
  263. package/dist/commands/project/delete.js.map +0 -1
  264. package/dist/commands/project/index.d.ts +0 -14
  265. package/dist/commands/project/index.js +0 -60
  266. package/dist/commands/project/index.js.map +0 -1
  267. package/dist/commands/project/list.d.ts +0 -16
  268. package/dist/commands/project/list.js +0 -115
  269. package/dist/commands/project/list.js.map +0 -1
  270. package/dist/commands/project/spec.d.ts +0 -19
  271. package/dist/commands/project/spec.js +0 -218
  272. package/dist/commands/project/spec.js.map +0 -1
  273. package/dist/commands/project/unarchive.d.ts +0 -17
  274. package/dist/commands/project/unarchive.js +0 -55
  275. package/dist/commands/project/unarchive.js.map +0 -1
  276. package/dist/commands/project/update.d.ts +0 -19
  277. package/dist/commands/project/update.js +0 -161
  278. package/dist/commands/project/update.js.map +0 -1
  279. package/dist/commands/project/view.d.ts +0 -17
  280. package/dist/commands/project/view.js +0 -107
  281. package/dist/commands/project/view.js.map +0 -1
  282. package/dist/commands/ticket/bulk.d.ts +0 -14
  283. package/dist/commands/ticket/bulk.js +0 -141
  284. package/dist/commands/ticket/bulk.js.map +0 -1
  285. package/dist/commands/ticket/cancel.d.ts +0 -17
  286. package/dist/commands/ticket/cancel.js +0 -206
  287. package/dist/commands/ticket/cancel.js.map +0 -1
  288. package/dist/commands/ticket/category.d.ts +0 -15
  289. package/dist/commands/ticket/category.js +0 -64
  290. package/dist/commands/ticket/category.js.map +0 -1
  291. package/dist/commands/ticket/complete.d.ts +0 -17
  292. package/dist/commands/ticket/complete.js +0 -193
  293. package/dist/commands/ticket/complete.js.map +0 -1
  294. package/dist/commands/ticket/epic.d.ts +0 -21
  295. package/dist/commands/ticket/epic.js +0 -306
  296. package/dist/commands/ticket/epic.js.map +0 -1
  297. package/dist/commands/ticket/link/block.d.ts +0 -15
  298. package/dist/commands/ticket/link/block.js +0 -96
  299. package/dist/commands/ticket/link/block.js.map +0 -1
  300. package/dist/commands/ticket/link/duplicates.d.ts +0 -15
  301. package/dist/commands/ticket/link/duplicates.js +0 -96
  302. package/dist/commands/ticket/link/duplicates.js.map +0 -1
  303. package/dist/commands/ticket/link/index.d.ts +0 -14
  304. package/dist/commands/ticket/link/index.js +0 -99
  305. package/dist/commands/ticket/link/index.js.map +0 -1
  306. package/dist/commands/ticket/link/relates.d.ts +0 -15
  307. package/dist/commands/ticket/link/relates.js +0 -96
  308. package/dist/commands/ticket/link/relates.js.map +0 -1
  309. package/dist/commands/ticket/project.d.ts +0 -19
  310. package/dist/commands/ticket/project.js +0 -257
  311. package/dist/commands/ticket/project.js.map +0 -1
  312. package/dist/commands/ticket/reassign.d.ts +0 -20
  313. package/dist/commands/ticket/reassign.js +0 -340
  314. package/dist/commands/ticket/reassign.js.map +0 -1
  315. package/dist/commands/ticket/resolve.d.ts +0 -68
  316. package/dist/commands/ticket/resolve.js +0 -306
  317. package/dist/commands/ticket/resolve.js.map +0 -1
  318. package/dist/commands/ticket/spec.d.ts +0 -19
  319. package/dist/commands/ticket/spec.js +0 -260
  320. package/dist/commands/ticket/spec.js.map +0 -1
  321. package/dist/commands/ticket/status.d.ts +0 -14
  322. package/dist/commands/ticket/status.js +0 -84
  323. package/dist/commands/ticket/status.js.map +0 -1
  324. package/dist/commands/ticket/view.d.ts +0 -14
  325. package/dist/commands/ticket/view.js +0 -113
  326. package/dist/commands/ticket/view.js.map +0 -1
  327. package/dist/lib/mcp/tools/board.d.ts +0 -6
  328. package/dist/lib/mcp/tools/board.js +0 -190
  329. package/dist/lib/mcp/tools/board.js.map +0 -1
  330. package/dist/lib/mcp/tools/category.d.ts +0 -6
  331. package/dist/lib/mcp/tools/category.js +0 -85
  332. package/dist/lib/mcp/tools/category.js.map +0 -1
  333. package/dist/lib/mcp/tools/epic.d.ts +0 -6
  334. package/dist/lib/mcp/tools/epic.js +0 -184
  335. package/dist/lib/mcp/tools/epic.js.map +0 -1
  336. package/dist/lib/mcp/tools/label.d.ts +0 -6
  337. package/dist/lib/mcp/tools/label.js +0 -339
  338. package/dist/lib/mcp/tools/label.js.map +0 -1
  339. package/dist/lib/mcp/tools/phase.d.ts +0 -6
  340. package/dist/lib/mcp/tools/phase.js +0 -132
  341. package/dist/lib/mcp/tools/phase.js.map +0 -1
  342. package/dist/lib/mcp/tools/project.d.ts +0 -6
  343. package/dist/lib/mcp/tools/project.js +0 -197
  344. package/dist/lib/mcp/tools/project.js.map +0 -1
  345. package/dist/lib/mcp/tools/roadmap.d.ts +0 -6
  346. package/dist/lib/mcp/tools/roadmap.js +0 -124
  347. package/dist/lib/mcp/tools/roadmap.js.map +0 -1
  348. package/dist/lib/mcp/tools/status.d.ts +0 -6
  349. package/dist/lib/mcp/tools/status.js +0 -110
  350. package/dist/lib/mcp/tools/status.js.map +0 -1
  351. package/dist/lib/mcp/tools/template.d.ts +0 -6
  352. package/dist/lib/mcp/tools/template.js +0 -108
  353. package/dist/lib/mcp/tools/template.js.map +0 -1
  354. package/dist/lib/mcp/tools/view.d.ts +0 -6
  355. package/dist/lib/mcp/tools/view.js +0 -77
  356. package/dist/lib/mcp/tools/view.js.map +0 -1
  357. package/dist/lib/mcp/tools/workflow.d.ts +0 -6
  358. package/dist/lib/mcp/tools/workflow.js +0 -96
  359. package/dist/lib/mcp/tools/workflow.js.map +0 -1
  360. package/dist/lib/pmo/storage/categories.d.ts +0 -50
  361. package/dist/lib/pmo/storage/categories.js +0 -206
  362. package/dist/lib/pmo/storage/categories.js.map +0 -1
  363. package/dist/lib/pmo/storage/labels.d.ts +0 -55
  364. package/dist/lib/pmo/storage/labels.js +0 -347
  365. package/dist/lib/pmo/storage/labels.js.map +0 -1
  366. package/dist/lib/pmo/storage/phases.d.ts +0 -65
  367. package/dist/lib/pmo/storage/phases.js +0 -393
  368. package/dist/lib/pmo/storage/phases.js.map +0 -1
  369. package/dist/lib/pmo/storage/roadmaps.d.ts +0 -64
  370. package/dist/lib/pmo/storage/roadmaps.js +0 -373
  371. package/dist/lib/pmo/storage/roadmaps.js.map +0 -1
  372. package/dist/lib/pmo/storage/views.d.ts +0 -57
  373. package/dist/lib/pmo/storage/views.js +0 -456
  374. package/dist/lib/pmo/storage/views.js.map +0 -1
@@ -1,257 +0,0 @@
1
- import { Args, Flags } from '@oclif/core';
2
- import { PMOCommand, pmoBaseFlags, autoExportToBoard } from '../../lib/pmo/index.js';
3
- import { styles } from '../../lib/styles.js';
4
- import { shouldOutputJson, outputErrorAsJson, createMetadata, } from '../../lib/prompt-json.js';
5
- export default class TicketProject extends PMOCommand {
6
- static description = 'Move ticket(s) to a different project';
7
- static examples = [
8
- '<%= config.bin %> <%= command.id %> TKT-001 new-project',
9
- '<%= config.bin %> <%= command.id %> TKT-001',
10
- '<%= config.bin %> <%= command.id %>',
11
- '<%= config.bin %> <%= command.id %> --bulk --target other-project',
12
- ];
13
- static args = {
14
- ticketId: Args.string({
15
- description: 'Ticket ID',
16
- required: false,
17
- }),
18
- targetProject: Args.string({
19
- description: 'Target project ID',
20
- required: false,
21
- }),
22
- };
23
- static flags = {
24
- ...pmoBaseFlags,
25
- 'keep-epic': Flags.boolean({
26
- description: 'Keep ticket assigned to its epic (if epic is in source project, will unlink)',
27
- default: false,
28
- }),
29
- bulk: Flags.boolean({
30
- char: 'b',
31
- description: 'Enable bulk mode to move multiple tickets',
32
- default: false,
33
- }),
34
- target: Flags.string({
35
- char: 't',
36
- description: 'Target project ID (for bulk mode)',
37
- }),
38
- };
39
- async execute() {
40
- const { args, flags } = await this.parse(TicketProject);
41
- // Check if JSON output mode is active
42
- const jsonMode = shouldOutputJson(flags);
43
- // Bulk mode
44
- if (flags.bulk) {
45
- await this.executeBulk(flags);
46
- return;
47
- }
48
- // Get source project ID
49
- const sourceProjectId = await this.requireProject();
50
- // Get ticket ID
51
- let ticketId = args.ticketId;
52
- if (!ticketId) {
53
- const tickets = await this.storage.listTickets(sourceProjectId);
54
- if (tickets.length === 0) {
55
- if (jsonMode) {
56
- outputErrorAsJson('NO_TICKETS', 'No tickets found in this project.', createMetadata('ticket project', flags));
57
- return;
58
- }
59
- this.log(styles.muted('\nNo tickets found in this project.'));
60
- return;
61
- }
62
- const selected = await this.selectFromList({
63
- message: 'Select ticket to move:',
64
- items: tickets,
65
- getName: (t) => `${t.id} - ${t.title} (${t.statusName})`,
66
- getValue: (t) => t.id,
67
- getCommand: (t) => `prlt ticket project ${t.id} -P ${sourceProjectId} --json`,
68
- jsonMode: jsonMode ? { flags, commandName: 'ticket project' } : null,
69
- });
70
- if (!selected) {
71
- return;
72
- }
73
- ticketId = selected;
74
- }
75
- // Get ticket details
76
- const ticket = await this.storage.getTicket(ticketId);
77
- if (!ticket) {
78
- this.error(`Ticket not found: ${ticketId}`);
79
- }
80
- // Use resolved internal ID for all subsequent operations (external keys like PRLT-xxx resolve to TKT-xxx)
81
- ticketId = ticket.id;
82
- // Get all projects
83
- const projects = await this.storage.listProjects();
84
- const otherProjects = projects.filter(p => p.id !== sourceProjectId);
85
- if (otherProjects.length === 0) {
86
- this.log(styles.muted('\nNo other projects to move to.'));
87
- const actionChoices = [
88
- { id: 'create', name: 'Create a new project' },
89
- { id: 'cancel', name: 'Cancel' },
90
- ];
91
- const action = await this.selectFromList({
92
- message: 'What would you like to do?',
93
- items: actionChoices,
94
- getName: (a) => a.name,
95
- getValue: (a) => a.id,
96
- getCommand: (a) => a.id === 'create' ? 'prlt project create --json' : '',
97
- jsonMode: jsonMode ? { flags, commandName: 'ticket project' } : null,
98
- });
99
- if (action === 'create') {
100
- await this.config.runCommand('project:create', []);
101
- }
102
- return;
103
- }
104
- // Get target project
105
- let targetProjectId = args.targetProject;
106
- if (!targetProjectId) {
107
- const selected = await this.selectFromList({
108
- message: 'Select target project:',
109
- items: otherProjects,
110
- getName: (p) => `${p.id} - ${p.name} (${p.status})`,
111
- getValue: (p) => p.id,
112
- getCommand: (p) => `prlt ticket project ${ticketId} ${p.id} -P ${sourceProjectId} --json`,
113
- jsonMode: jsonMode ? { flags, commandName: 'ticket project' } : null,
114
- });
115
- if (!selected) {
116
- return;
117
- }
118
- targetProjectId = selected;
119
- }
120
- // Validate target project
121
- const targetProject = projects.find(p => p.id === targetProjectId);
122
- if (!targetProject) {
123
- this.error(`Project not found: ${targetProjectId}`);
124
- }
125
- if (targetProjectId === sourceProjectId) {
126
- this.log(styles.muted('\nTicket is already in this project.'));
127
- return;
128
- }
129
- // Check if ticket has an epic
130
- const epicWarning = ticket.epicId && !flags['keep-epic'];
131
- if (epicWarning) {
132
- const epic = await this.storage.getEpic(ticket.epicId);
133
- if (epic && epic.projectId !== targetProjectId) {
134
- this.log(styles.warning(`\nTicket is assigned to epic "${ticket.epicId}" in source project.`));
135
- const actionChoices = [
136
- { id: 'unlink', name: 'Unlink from epic (move ticket only)' },
137
- { id: 'cancel', name: 'Cancel' },
138
- ];
139
- const action = await this.selectFromList({
140
- message: 'How to handle epic assignment?',
141
- items: actionChoices,
142
- getName: (a) => a.name,
143
- getValue: (a) => a.id,
144
- getCommand: (a) => a.id === 'unlink' ? `prlt ticket project ${ticketId} ${targetProjectId} -P ${sourceProjectId} --json` : '',
145
- jsonMode: jsonMode ? { flags, commandName: 'ticket project' } : null,
146
- });
147
- if (action === 'cancel' || !action) {
148
- return;
149
- }
150
- // Unlink from epic before moving
151
- await this.storage.updateTicket(ticketId, { epicId: undefined });
152
- this.log(styles.muted(` Unlinked from epic "${ticket.epicId}"`));
153
- }
154
- }
155
- // Move ticket to new project using the storage method
156
- const movedTicket = await this.storage.moveTicketToProject(ticketId, targetProjectId);
157
- await autoExportToBoard(this.pmoPath, this.storage, (msg) => this.log(styles.muted(msg)));
158
- this.log(styles.success(`\n✅ Moved ticket ${styles.emphasis(ticketId)} to project ${styles.emphasis(targetProjectId)}`));
159
- this.log(styles.muted(` From: ${sourceProjectId}`));
160
- this.log(styles.muted(` To: ${targetProjectId} (column: ${movedTicket.statusName || 'first column'})`));
161
- this.log(styles.muted(`\nView ticket: prlt ticket view ${ticketId}`));
162
- }
163
- async executeBulk(flags) {
164
- const jsonMode = shouldOutputJson(flags);
165
- const jsonModeConfig = jsonMode ? { flags: flags, commandName: 'ticket project' } : null;
166
- this.log(styles.emphasis('📁 Bulk Move Tickets to Project\n'));
167
- // Get source project ID
168
- const sourceProjectId = await this.requireProject();
169
- // Get all tickets in current project
170
- const tickets = await this.storage.listTickets(sourceProjectId);
171
- if (tickets.length === 0) {
172
- this.log(styles.muted('\nNo tickets found in this project.'));
173
- return;
174
- }
175
- // Select tickets
176
- const { selectedTickets } = await this.prompt([{
177
- type: 'checkbox',
178
- name: 'selectedTickets',
179
- message: 'Select tickets to move:',
180
- choices: tickets.map(t => {
181
- const epicLabel = t.epicId ? ` [epic: ${t.epicId}]` : '';
182
- return {
183
- name: `${t.id} - ${t.title} (${t.statusName})${epicLabel}`,
184
- value: t.id,
185
- };
186
- }),
187
- }], jsonModeConfig);
188
- if (selectedTickets.length === 0) {
189
- this.log(styles.muted('No tickets selected.'));
190
- return;
191
- }
192
- // Get target project
193
- const projects = await this.storage.listProjects();
194
- const otherProjects = projects.filter(p => p.id !== sourceProjectId);
195
- if (otherProjects.length === 0) {
196
- this.log(styles.muted('\nNo other projects to move to. Create one with: prlt project create'));
197
- return;
198
- }
199
- let targetProjectId = flags.target;
200
- if (!targetProjectId) {
201
- const { selected } = await this.prompt([{
202
- type: 'list',
203
- name: 'selected',
204
- message: 'Select target project:',
205
- choices: otherProjects.map(p => ({
206
- name: `${p.id} - ${p.name}`,
207
- value: p.id,
208
- command: `prlt ticket project --bulk --target ${p.id} --json`,
209
- })),
210
- }], jsonModeConfig);
211
- targetProjectId = selected;
212
- }
213
- // Validate target project
214
- const targetProject = projects.find(p => p.id === targetProjectId);
215
- if (!targetProject) {
216
- this.error(`Project not found: ${targetProjectId}`);
217
- }
218
- // Check for epic conflicts
219
- const ticketsWithEpics = selectedTickets.filter((id) => {
220
- const t = tickets.find(t => t.id === id);
221
- return t?.epicId;
222
- });
223
- if (ticketsWithEpics.length > 0) {
224
- this.log(styles.warning(`\n${ticketsWithEpics.length} ticket(s) are assigned to epics.`));
225
- const { action } = await this.prompt([{
226
- type: 'list',
227
- name: 'action',
228
- message: 'How to handle epic assignments?',
229
- choices: [
230
- { name: 'Unlink from epics and move', value: 'unlink', command: `prlt ticket project --bulk --target ${targetProjectId} --json` },
231
- { name: 'Cancel', value: 'cancel', command: '' },
232
- ],
233
- }], jsonModeConfig);
234
- if (action === 'cancel') {
235
- return;
236
- }
237
- }
238
- // Move each ticket using the storage method - sequential for clear logging
239
- let lastMovedTicket;
240
- for (const ticketId of selectedTickets) {
241
- const ticket = tickets.find(t => t.id === ticketId);
242
- // Unlink from epic if needed
243
- if (ticket?.epicId) {
244
- // eslint-disable-next-line no-await-in-loop
245
- await this.storage.updateTicket(ticketId, { epicId: undefined });
246
- }
247
- // Move ticket to new project
248
- // eslint-disable-next-line no-await-in-loop
249
- lastMovedTicket = await this.storage.moveTicketToProject(ticketId, targetProjectId);
250
- this.log(styles.success(` Moved ${ticketId} to ${targetProjectId}`));
251
- }
252
- await autoExportToBoard(this.pmoPath, this.storage, (msg) => this.log(styles.muted(msg)));
253
- this.log(styles.success(`\n✅ Moved ${selectedTickets.length} ticket(s) to project "${targetProject.name}"`));
254
- this.log(styles.muted(` Target column: ${lastMovedTicket?.statusName || 'first column'}`));
255
- }
256
- }
257
- //# sourceMappingURL=project.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"project.js","sourceRoot":"","sources":["../../../src/commands/ticket/project.ts"],"names":[],"mappings":"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"}
@@ -1,20 +0,0 @@
1
- import { PMOCommand } from '../../lib/pmo/index.js';
2
- export default class TicketReassign extends PMOCommand {
3
- static description: string;
4
- static examples: string[];
5
- static args: {
6
- ticketId: import("@oclif/core/interfaces").Arg<string | undefined, Record<string, unknown>>;
7
- assignee: import("@oclif/core/interfaces").Arg<string | undefined, Record<string, unknown>>;
8
- };
9
- static flags: {
10
- to: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
11
- from: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
12
- bulk: import("@oclif/core/interfaces").BooleanFlag<boolean>;
13
- force: import("@oclif/core/interfaces").BooleanFlag<boolean>;
14
- json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
15
- machine: import("@oclif/core/interfaces").BooleanFlag<boolean>;
16
- project: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
17
- };
18
- execute(): Promise<void>;
19
- private executeBulk;
20
- }
@@ -1,340 +0,0 @@
1
- import { Args, Flags } from '@oclif/core';
2
- import { PMOCommand, pmoBaseFlags, autoExportToBoard } from '../../lib/pmo/index.js';
3
- import { styles } from '../../lib/styles.js';
4
- import { shouldOutputJson, outputErrorAsJson, createMetadata, } from '../../lib/prompt-json.js';
5
- import { getWorkspaceInfo } from '../../lib/agents/commands.js';
6
- export default class TicketReassign extends PMOCommand {
7
- static description = 'Reassign ticket(s) to a different agent';
8
- static examples = [
9
- '<%= config.bin %> <%= command.id %>',
10
- '<%= config.bin %> <%= command.id %> TKT-001 alice',
11
- '<%= config.bin %> <%= command.id %> --bulk --to alice',
12
- '<%= config.bin %> <%= command.id %> --bulk --from bob --to alice',
13
- '<%= config.bin %> <%= command.id %> --json # Output choices as JSON',
14
- ];
15
- static args = {
16
- ticketId: Args.string({
17
- description: 'Ticket ID - prompts with dropdown if not provided',
18
- required: false,
19
- }),
20
- assignee: Args.string({
21
- description: 'Target agent name',
22
- required: false,
23
- }),
24
- };
25
- static flags = {
26
- ...pmoBaseFlags,
27
- to: Flags.string({
28
- description: 'Target agent name (for bulk mode)',
29
- }),
30
- from: Flags.string({
31
- description: 'Filter tickets by current assignee (bulk mode)',
32
- }),
33
- bulk: Flags.boolean({
34
- char: 'b',
35
- description: 'Enable bulk mode to reassign multiple tickets',
36
- default: false,
37
- }),
38
- force: Flags.boolean({
39
- char: 'f',
40
- description: 'Skip confirmation prompt',
41
- default: false,
42
- }),
43
- };
44
- async execute() {
45
- const { args, flags } = await this.parse(TicketReassign);
46
- const projectId = flags.project;
47
- // Check if JSON output mode is active
48
- const jsonMode = shouldOutputJson(flags);
49
- // Get all tickets
50
- const allTickets = await this.storage.listTickets(projectId);
51
- if (allTickets.length === 0) {
52
- if (jsonMode) {
53
- outputErrorAsJson('NO_TICKETS', 'No tickets found.', createMetadata('ticket reassign', flags));
54
- return;
55
- }
56
- this.log(styles.warning('No tickets found.'));
57
- return;
58
- }
59
- // Get unique assignees from tickets
60
- const assignees = new Set();
61
- for (const ticket of allTickets) {
62
- if (ticket.assignee) {
63
- assignees.add(ticket.assignee);
64
- }
65
- }
66
- // Also get agents from workspace if available
67
- const db = this.storage.db;
68
- try {
69
- const agents = db.prepare(`SELECT name FROM agents`).all();
70
- for (const agent of agents) {
71
- assignees.add(agent.name);
72
- }
73
- }
74
- catch {
75
- // agents table might not exist, ignore
76
- }
77
- // Bulk mode
78
- if (flags.bulk) {
79
- await this.executeBulk(allTickets, Array.from(assignees), flags);
80
- return;
81
- }
82
- // Single ticket mode
83
- let ticketId = args.ticketId;
84
- if (!ticketId) {
85
- const selected = await this.selectFromList({
86
- message: 'Select ticket to reassign:',
87
- items: allTickets,
88
- getName: (t) => `${t.id} - ${t.title} (${t.statusName})`,
89
- getValue: (t) => t.id,
90
- getCommand: (t) => `prlt ticket reassign ${t.id}${projectId ? ` -P ${projectId}` : ''} --json`,
91
- jsonMode: jsonMode ? { flags, commandName: 'ticket reassign' } : null,
92
- });
93
- if (!selected) {
94
- return;
95
- }
96
- ticketId = selected;
97
- }
98
- // Get ticket
99
- const ticket = await this.storage.getTicket(ticketId);
100
- if (!ticket) {
101
- this.error(`Ticket "${ticketId}" not found.`);
102
- }
103
- // Use resolved internal ID for all subsequent operations (external keys like PRLT-xxx resolve to TKT-xxx)
104
- ticketId = ticket.id;
105
- // Get target assignee
106
- let targetAssignee = args.assignee || flags.to;
107
- if (!targetAssignee) {
108
- const jsonModeConfig = jsonMode ? { flags, commandName: 'ticket reassign' } : null;
109
- const { assignee } = await this.prompt([{
110
- type: 'list',
111
- name: 'assignee',
112
- message: `Reassign ${ticketId} to:`,
113
- choices: [
114
- { name: 'None (unassign)', value: '__none__', command: `prlt ticket reassign ${ticketId} none${projectId ? ` -P ${projectId}` : ''} --json` },
115
- ...Array.from(assignees).sort().map(a => ({
116
- name: a === ticket.assignee ? `${a} (current)` : a,
117
- value: a,
118
- command: `prlt ticket reassign ${ticketId} ${a}${projectId ? ` -P ${projectId}` : ''} --json`,
119
- })),
120
- { name: '── Enter custom name ──', value: '__custom__', command: `prlt ticket reassign ${ticketId} <name>${projectId ? ` -P ${projectId}` : ''} --json` },
121
- ],
122
- }], jsonModeConfig);
123
- if (assignee === '__custom__') {
124
- const { customAssignee } = await this.prompt([{
125
- type: 'input',
126
- name: 'customAssignee',
127
- message: 'Enter agent/assignee name:',
128
- validate: (input) => input.length > 0 || 'Name is required',
129
- }], jsonModeConfig);
130
- targetAssignee = customAssignee;
131
- }
132
- else if (assignee === '__none__') {
133
- targetAssignee = undefined;
134
- }
135
- else {
136
- targetAssignee = assignee;
137
- }
138
- }
139
- // Handle special values
140
- if (targetAssignee === 'none' || targetAssignee === 'unassigned') {
141
- targetAssignee = undefined;
142
- }
143
- // Validate agent name if provided directly (not through interactive prompt)
144
- if (targetAssignee && (args.assignee || flags.to)) {
145
- try {
146
- const workspaceInfo = getWorkspaceInfo();
147
- const agent = workspaceInfo.agents.find(a => a.name === targetAssignee);
148
- if (!agent) {
149
- this.error(`Agent "${targetAssignee}" not found. Run 'prlt agent list' to see available agents.`);
150
- }
151
- }
152
- catch {
153
- // Not in a workspace or agents table doesn't exist - skip validation
154
- }
155
- }
156
- // Check if same
157
- if (targetAssignee === ticket.assignee) {
158
- this.log(styles.muted(`Ticket "${ticketId}" is already assigned to "${targetAssignee || 'none'}".`));
159
- return;
160
- }
161
- // Assign through provider (routes to Linear/Jira/PMO as appropriate)
162
- const provider = await this.resolveTicketProvider(ticketId, ticket.projectId || '');
163
- if (targetAssignee) {
164
- const result = await provider.assignTicket(ticketId, targetAssignee);
165
- if (!result.success) {
166
- this.error(`Failed to reassign ticket: ${result.error}`);
167
- }
168
- }
169
- else {
170
- // Unassign: use updateTicket to clear assignee
171
- const result = await provider.updateTicket(ticketId, { assignee: undefined });
172
- if (!result.success) {
173
- this.error(`Failed to unassign ticket: ${result.error}`);
174
- }
175
- }
176
- // Auto-export
177
- await autoExportToBoard(this.pmoPath, this.storage, (msg) => this.log(styles.muted(msg)));
178
- const action = targetAssignee ? `reassigned to ${targetAssignee}` : 'unassigned';
179
- this.log(styles.success(`\n✅ Ticket ${styles.emphasis(ticketId)} ${action}`));
180
- this.log(styles.muted(` Title: ${ticket.title}`));
181
- if (ticket.assignee) {
182
- this.log(styles.muted(` Previous: ${ticket.assignee}`));
183
- }
184
- }
185
- async executeBulk(allTickets, assigneesList, flags) {
186
- const jsonMode = shouldOutputJson(flags);
187
- this.log(styles.emphasis('👤 Reassign Tickets\n'));
188
- // Filter tickets if --from specified
189
- let filteredTickets = allTickets;
190
- if (flags.from) {
191
- if (flags.from === 'none' || flags.from === 'unassigned') {
192
- filteredTickets = allTickets.filter(t => !t.assignee);
193
- }
194
- else {
195
- filteredTickets = allTickets.filter(t => t.assignee === flags.from);
196
- }
197
- }
198
- if (filteredTickets.length === 0) {
199
- this.log(styles.warning('No tickets found matching filter.'));
200
- return;
201
- }
202
- // Select tickets to reassign
203
- const jsonModeConfig = jsonMode ? { flags: flags, commandName: 'ticket reassign' } : null;
204
- const { selectedTickets } = await this.prompt([{
205
- type: 'checkbox',
206
- name: 'selectedTickets',
207
- message: 'Select tickets to reassign:',
208
- choices: filteredTickets.map(t => ({
209
- name: `${t.id} - ${t.title} [Assignee: ${t.assignee || '(none)'}]`,
210
- value: t.id,
211
- })),
212
- }], jsonModeConfig);
213
- if (selectedTickets.length === 0) {
214
- this.log(styles.muted('No tickets selected.'));
215
- return;
216
- }
217
- // Select target assignee
218
- let targetAssignee = flags.to;
219
- if (targetAssignee === undefined) {
220
- const { assignee } = await this.prompt([{
221
- type: 'list',
222
- name: 'assignee',
223
- message: 'Reassign to which agent?',
224
- choices: [
225
- { name: 'None (unassign)', value: '__none__', command: '' },
226
- ...assigneesList.sort().map(a => ({
227
- name: a,
228
- value: a,
229
- command: `prlt ticket reassign --bulk --to ${a} --json`,
230
- })),
231
- { name: '── Enter custom name ──', value: '__custom__', command: '' },
232
- ],
233
- }], jsonModeConfig);
234
- if (assignee === '__custom__') {
235
- const { customAssignee } = await this.prompt([{
236
- type: 'input',
237
- name: 'customAssignee',
238
- message: 'Enter agent/assignee name:',
239
- validate: (input) => input.length > 0 || 'Name is required',
240
- }], jsonModeConfig);
241
- targetAssignee = customAssignee;
242
- }
243
- else if (assignee === '__none__') {
244
- targetAssignee = undefined;
245
- }
246
- else {
247
- targetAssignee = assignee;
248
- }
249
- }
250
- // Handle special values
251
- if (targetAssignee === 'none' || targetAssignee === 'unassigned') {
252
- targetAssignee = undefined;
253
- }
254
- // Validate agent name if provided directly via --to flag (not through interactive prompt)
255
- if (targetAssignee && flags.to) {
256
- try {
257
- const workspaceInfo = getWorkspaceInfo();
258
- const agent = workspaceInfo.agents.find(a => a.name === targetAssignee);
259
- if (!agent) {
260
- this.error(`Agent "${targetAssignee}" not found. Run 'prlt agent list' to see available agents.`);
261
- }
262
- }
263
- catch {
264
- // Not in a workspace or agents table doesn't exist - skip validation
265
- }
266
- }
267
- // Confirmation
268
- if (!flags.force) {
269
- const assigneeLabel = targetAssignee || 'None (unassigning)';
270
- this.log(styles.primary('\nWill reassign to:'));
271
- this.log(styles.primary(` → ${assigneeLabel}\n`));
272
- this.log(styles.primary('Tickets:'));
273
- for (const ticketId of selectedTickets) {
274
- const ticket = filteredTickets.find(t => t.id === ticketId);
275
- this.log(styles.primary(` • ${ticketId}: ${ticket?.title}`));
276
- }
277
- this.log('');
278
- const { confirm } = await this.prompt([{
279
- type: 'list',
280
- name: 'confirm',
281
- message: 'Continue?',
282
- choices: [
283
- { name: 'No, cancel', value: false, command: '' },
284
- { name: 'Yes, reassign tickets', value: true, command: `prlt ticket reassign --bulk --to ${targetAssignee || 'none'} --force --json` }
285
- ],
286
- default: 0
287
- }], jsonModeConfig);
288
- if (!confirm) {
289
- this.log(styles.muted('Operation cancelled.'));
290
- return;
291
- }
292
- }
293
- this.log('');
294
- // Reassign each ticket
295
- let successCount = 0;
296
- let failCount = 0;
297
- // Process sequentially for clear success/failure logging
298
- for (const ticketId of selectedTickets) {
299
- try {
300
- const ticket = filteredTickets.find(t => t.id === ticketId);
301
- // eslint-disable-next-line no-await-in-loop
302
- const provider = await this.resolveTicketProvider(ticketId, ticket?.projectId || '');
303
- let result;
304
- if (targetAssignee) {
305
- // eslint-disable-next-line no-await-in-loop
306
- result = await provider.assignTicket(ticketId, targetAssignee);
307
- }
308
- else {
309
- // eslint-disable-next-line no-await-in-loop
310
- result = await provider.updateTicket(ticketId, { assignee: undefined });
311
- }
312
- if (result.success) {
313
- const action = targetAssignee ? `Reassigned to ${targetAssignee}` : 'Unassigned';
314
- this.log(styles.success(`${ticketId}: ${action}`));
315
- successCount++;
316
- }
317
- else {
318
- this.log(styles.error(`Failed to reassign ${ticketId}: ${result.error}`));
319
- failCount++;
320
- }
321
- }
322
- catch (error) {
323
- this.log(styles.error(`Failed to reassign ${ticketId}: ${error instanceof Error ? error.message : String(error)}`));
324
- failCount++;
325
- }
326
- }
327
- // Auto-export to kanban.md
328
- await autoExportToBoard(this.pmoPath, this.storage, (msg) => this.log(styles.muted(msg)));
329
- // Summary
330
- this.log('');
331
- if (successCount > 0) {
332
- const action = targetAssignee ? 'Reassigned' : 'Unassigned';
333
- this.log(styles.success(`${action} ${successCount} ticket(s)`));
334
- }
335
- if (failCount > 0) {
336
- this.log(styles.error(`Failed to reassign ${failCount} ticket(s)`));
337
- }
338
- }
339
- }
340
- //# sourceMappingURL=reassign.js.map