@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,191 +0,0 @@
1
- import { Flags, Args } from '@oclif/core';
2
- import * as fs from 'node:fs';
3
- import * as path from 'node:path';
4
- import { createBoardContent, createSpecFolders, PMOCommand, pmoBaseFlags, BUILTIN_TEMPLATES } from '../../lib/pmo/index.js';
5
- import { styles } from '../../lib/styles.js';
6
- import { slugify } from '../../lib/pmo/utils.js';
7
- import { shouldOutputJson, outputPromptAsJson, outputSuccessAsJson, outputErrorAsJson, outputDryRunSuccessAsJson, outputDryRunErrorsAsJson, createMetadata, buildFormPromptConfig, } from '../../lib/prompt-json.js';
8
- // Build template options dynamically from shared definitions
9
- const TEMPLATE_IDS = BUILTIN_TEMPLATES.map(t => t.id);
10
- export default class ProjectCreate extends PMOCommand {
11
- static description = 'Create a new project in the PMO';
12
- static examples = [
13
- '<%= config.bin %> <%= command.id %> "My New Project"',
14
- '<%= config.bin %> <%= command.id %> --name "Mobile App" --description "iOS and Android app"',
15
- '<%= config.bin %> <%= command.id %> -i # Interactive mode',
16
- '<%= config.bin %> <%= command.id %> --name "Test" --dry-run --json # Validate without creating',
17
- ];
18
- static args = {
19
- name: Args.string({
20
- description: 'Project name',
21
- required: false,
22
- }),
23
- };
24
- static flags = {
25
- ...pmoBaseFlags,
26
- name: Flags.string({
27
- char: 'n',
28
- description: 'Project name [required for non-interactive]',
29
- }),
30
- id: Flags.string({
31
- description: 'Custom project ID (auto-generated from name if not provided)',
32
- }),
33
- description: Flags.string({
34
- char: 'd',
35
- description: 'Project description',
36
- }),
37
- template: Flags.string({
38
- char: 't',
39
- description: 'Workflow template',
40
- options: TEMPLATE_IDS,
41
- default: 'kanban',
42
- }),
43
- interactive: Flags.boolean({
44
- char: 'i',
45
- description: 'Interactive mode',
46
- default: false,
47
- }),
48
- 'dry-run': Flags.boolean({
49
- description: 'Validate inputs without creating project (use with --json for structured output)',
50
- default: false,
51
- }),
52
- };
53
- getPMOOptions() {
54
- return { promptIfMultiple: false };
55
- }
56
- async execute() {
57
- const { args, flags } = await this.parse(ProjectCreate);
58
- // Check if JSON output mode is active
59
- const jsonMode = shouldOutputJson(flags);
60
- // Get project data first (before storage so prompts work)
61
- let projectData;
62
- if (flags.interactive || (!args.name && !flags.name)) {
63
- // Build choices dynamically from shared template definitions
64
- const templateChoices = BUILTIN_TEMPLATES.map(t => ({
65
- name: `${t.name} - ${t.statuses.map(s => s.name).join(' → ')}`,
66
- value: t.id,
67
- }));
68
- // Define fields once - single source of truth for both JSON and interactive modes
69
- const fields = [
70
- { type: 'input', name: 'name', message: 'Project name:', default: flags.name },
71
- { type: 'input', name: 'id', message: 'Project ID (leave blank to auto-generate):' },
72
- { type: 'input', name: 'description', message: 'Description (optional):', default: flags.description },
73
- { type: 'list', name: 'template', message: 'Workflow template:', choices: templateChoices, default: flags.template || 'kanban' },
74
- ];
75
- // In JSON mode, output form prompt for project creation
76
- if (jsonMode) {
77
- outputPromptAsJson(buildFormPromptConfig(fields), createMetadata('project create', flags));
78
- return;
79
- }
80
- projectData = await this.promptProjectData(fields);
81
- }
82
- else {
83
- projectData = {
84
- name: args.name || flags.name,
85
- id: flags.id,
86
- description: flags.description,
87
- template: flags.template || 'kanban',
88
- };
89
- }
90
- const projectId = projectData.id || slugify(projectData.name);
91
- // Check if project already exists
92
- const existing = await this.storage.getProject(projectId);
93
- if (existing) {
94
- if (flags['dry-run']) {
95
- if (jsonMode) {
96
- outputDryRunErrorsAsJson([{ field: 'id', error: `Project "${projectId}" already exists` }], createMetadata('project create', flags));
97
- return;
98
- }
99
- }
100
- if (jsonMode) {
101
- outputErrorAsJson('PROJECT_EXISTS', `Project "${projectId}" already exists.`, createMetadata('project create', flags));
102
- return;
103
- }
104
- this.error(`Project "${projectId}" already exists.`);
105
- }
106
- // Get the statuses from the workflow (for dry-run preview)
107
- const statuses = await this.storage.listStatuses(projectData.template);
108
- // Handle dry-run: show what would be created without actually creating
109
- if (flags['dry-run']) {
110
- const wouldCreate = {
111
- id: projectId,
112
- name: projectData.name,
113
- template: projectData.template,
114
- statuses: statuses.map(s => s.name),
115
- ...(projectData.description && { description: projectData.description }),
116
- };
117
- if (jsonMode) {
118
- outputDryRunSuccessAsJson('project', wouldCreate, createMetadata('project create', flags));
119
- return;
120
- }
121
- // Human-readable dry-run output
122
- this.log(styles.warning('\n[DRY RUN] Would create project:'));
123
- this.log(styles.muted(` ID: ${projectId}`));
124
- this.log(styles.muted(` Name: ${projectData.name}`));
125
- this.log(styles.muted(` Template: ${projectData.template}`));
126
- this.log(styles.muted(` Statuses: ${statuses.map(s => s.name).join(' → ')}`));
127
- if (projectData.description) {
128
- this.log(styles.muted(` Description: ${projectData.description}`));
129
- }
130
- this.log(styles.muted('\n(No project was created)'));
131
- return;
132
- }
133
- // Create project in database
134
- const project = await this.storage.createProject({
135
- id: projectId,
136
- name: projectData.name,
137
- description: projectData.description,
138
- template: projectData.template,
139
- });
140
- // Create project folder structure: pmo/projects/{projectId}/
141
- const projectPath = path.join(this.pmoPath, 'projects', projectId);
142
- fs.mkdirSync(projectPath, { recursive: true });
143
- // Create kanban.md in project directory with project name as board name
144
- const boardContent = createBoardContent(projectData.template, projectData.name);
145
- const boardPath = path.join(projectPath, 'kanban.md');
146
- fs.writeFileSync(boardPath, boardContent);
147
- // Create spec folders in project directory
148
- const specsPath = createSpecFolders(this.pmoPath, projectId);
149
- // In JSON mode, output success with project details
150
- if (jsonMode) {
151
- outputSuccessAsJson({
152
- id: project.id,
153
- name: project.name,
154
- template: projectData.template,
155
- statuses: statuses.map(s => s.name),
156
- boardPath: path.relative(process.cwd(), boardPath),
157
- specsPath: path.relative(process.cwd(), specsPath),
158
- }, createMetadata('project create', flags));
159
- return;
160
- }
161
- this.log(styles.success(`\nCreated project "${styles.emphasis(project.name)}"`));
162
- this.log(styles.muted(` ID: ${project.id}`));
163
- this.log(styles.muted(` Template: ${projectData.template}`));
164
- this.log(styles.muted(` Statuses: ${statuses.map(s => s.name).join(' → ')}`));
165
- this.log(styles.muted(` Board: ${path.relative(process.cwd(), boardPath)}`));
166
- this.log(styles.muted(` Specs: ${path.relative(process.cwd(), specsPath)}/`));
167
- this.log(styles.muted(`\nSwitch to this project:`));
168
- this.log(styles.muted(` prlt ticket list --project ${project.id}`));
169
- this.log(styles.muted(` prlt project view ${project.id}`));
170
- }
171
- async promptProjectData(fields) {
172
- // Build inquirer prompts from fields, adding validators and dynamic defaults
173
- const answers = await this.prompt(fields.map(field => ({
174
- ...field,
175
- validate: field.name === 'name'
176
- ? ((input) => String(input).length > 0 || 'Name is required')
177
- : undefined,
178
- // Dynamic default for id based on name
179
- default: field.name === 'id'
180
- ? ((answers) => slugify(answers.name))
181
- : field.default,
182
- })), null);
183
- return {
184
- name: answers.name,
185
- id: answers.id || undefined,
186
- description: answers.description || undefined,
187
- template: answers.template,
188
- };
189
- }
190
- }
191
- //# sourceMappingURL=create.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"create.js","sourceRoot":"","sources":["../../../src/commands/project/create.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,UAAU,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC5H,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EACL,gBAAgB,EAChB,kBAAkB,EAClB,mBAAmB,EACnB,iBAAiB,EACjB,yBAAyB,EACzB,wBAAwB,EACxB,cAAc,EACd,qBAAqB,GAEtB,MAAM,0BAA0B,CAAC;AAElC,6DAA6D;AAC7D,MAAM,YAAY,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;AAEtD,MAAM,CAAC,OAAO,OAAO,aAAc,SAAQ,UAAU;IACnD,MAAM,CAAC,WAAW,GAAG,iCAAiC,CAAC;IAEvD,MAAM,CAAC,QAAQ,GAAG;QAChB,sDAAsD;QACtD,6FAA6F;QAC7F,4DAA4D;QAC5D,iGAAiG;KAClG,CAAC;IAEF,MAAM,CAAC,IAAI,GAAG;QACZ,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC;YAChB,WAAW,EAAE,cAAc;YAC3B,QAAQ,EAAE,KAAK;SAChB,CAAC;KACH,CAAC;IAEF,MAAM,CAAC,KAAK,GAAG;QACb,GAAG,YAAY;QACf,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC;YACjB,IAAI,EAAE,GAAG;YACT,WAAW,EAAE,6CAA6C;SAC3D,CAAC;QACF,EAAE,EAAE,KAAK,CAAC,MAAM,CAAC;YACf,WAAW,EAAE,8DAA8D;SAC5E,CAAC;QACF,WAAW,EAAE,KAAK,CAAC,MAAM,CAAC;YACxB,IAAI,EAAE,GAAG;YACT,WAAW,EAAE,qBAAqB;SACnC,CAAC;QACF,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC;YACrB,IAAI,EAAE,GAAG;YACT,WAAW,EAAE,mBAAmB;YAChC,OAAO,EAAE,YAAY;YACrB,OAAO,EAAE,QAAQ;SAClB,CAAC;QACF,WAAW,EAAE,KAAK,CAAC,OAAO,CAAC;YACzB,IAAI,EAAE,GAAG;YACT,WAAW,EAAE,kBAAkB;YAC/B,OAAO,EAAE,KAAK;SACf,CAAC;QACF,SAAS,EAAE,KAAK,CAAC,OAAO,CAAC;YACvB,WAAW,EAAE,kFAAkF;YAC/F,OAAO,EAAE,KAAK;SACf,CAAC;KACH,CAAC;IAEQ,aAAa;QACrB,OAAO,EAAE,gBAAgB,EAAE,KAAK,EAAE,CAAC;IACrC,CAAC;IAED,KAAK,CAAC,OAAO;QACX,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;QAExD,sCAAsC;QACtC,MAAM,QAAQ,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC;QAEzC,0DAA0D;QAC1D,IAAI,WAKH,CAAC;QAEF,IAAI,KAAK,CAAC,WAAW,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;YACrD,6DAA6D;YAC7D,MAAM,eAAe,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;gBAClD,IAAI,EAAE,GAAG,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;gBAC9D,KAAK,EAAE,CAAC,CAAC,EAAE;aACZ,CAAC,CAAC,CAAC;YAEJ,kFAAkF;YAClF,MAAM,MAAM,GAAgB;gBAC1B,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,eAAe,EAAE,OAAO,EAAE,KAAK,CAAC,IAAI,EAAE;gBAC9E,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,4CAA4C,EAAE;gBACpF,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,yBAAyB,EAAE,OAAO,EAAE,KAAK,CAAC,WAAW,EAAE;gBACtG,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,oBAAoB,EAAE,OAAO,EAAE,eAAe,EAAE,OAAO,EAAE,KAAK,CAAC,QAAQ,IAAI,QAAQ,EAAE;aACjI,CAAC;YAEF,wDAAwD;YACxD,IAAI,QAAQ,EAAE,CAAC;gBACb,kBAAkB,CAChB,qBAAqB,CAAC,MAAM,CAAC,EAC7B,cAAc,CAAC,gBAAgB,EAAE,KAAK,CAAC,CACxC,CAAC;gBACF,OAAM;YACR,CAAC;YAED,WAAW,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;QACrD,CAAC;aAAM,CAAC;YACN,WAAW,GAAG;gBACZ,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,KAAK,CAAC,IAAK;gBAC9B,EAAE,EAAE,KAAK,CAAC,EAAE;gBACZ,WAAW,EAAE,KAAK,CAAC,WAAW;gBAC9B,QAAQ,EAAE,KAAK,CAAC,QAAQ,IAAI,QAAQ;aACrC,CAAC;QACJ,CAAC;QAED,MAAM,SAAS,GAAG,WAAW,CAAC,EAAE,IAAI,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QAE9D,kCAAkC;QAClC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;QAC1D,IAAI,QAAQ,EAAE,CAAC;YACb,IAAI,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC;gBACrB,IAAI,QAAQ,EAAE,CAAC;oBACb,wBAAwB,CACtB,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,YAAY,SAAS,kBAAkB,EAAE,CAAC,EACjE,cAAc,CAAC,gBAAgB,EAAE,KAAK,CAAC,CACxC,CAAC;oBACF,OAAM;gBACR,CAAC;YACH,CAAC;YACD,IAAI,QAAQ,EAAE,CAAC;gBACb,iBAAiB,CAAC,gBAAgB,EAAE,YAAY,SAAS,mBAAmB,EAAE,cAAc,CAAC,gBAAgB,EAAE,KAAK,CAAC,CAAC,CAAC;gBACvH,OAAM;YACR,CAAC;YACD,IAAI,CAAC,KAAK,CAAC,YAAY,SAAS,mBAAmB,CAAC,CAAC;QACvD,CAAC;QAED,2DAA2D;QAC3D,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;QAEvE,uEAAuE;QACvE,IAAI,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC;YACrB,MAAM,WAAW,GAAG;gBAClB,EAAE,EAAE,SAAS;gBACb,IAAI,EAAE,WAAW,CAAC,IAAI;gBACtB,QAAQ,EAAE,WAAW,CAAC,QAAQ;gBAC9B,QAAQ,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;gBACnC,GAAG,CAAC,WAAW,CAAC,WAAW,IAAI,EAAE,WAAW,EAAE,WAAW,CAAC,WAAW,EAAE,CAAC;aACzE,CAAC;YAEF,IAAI,QAAQ,EAAE,CAAC;gBACb,yBAAyB,CAAC,SAAS,EAAE,WAAW,EAAE,cAAc,CAAC,gBAAgB,EAAE,KAAK,CAAC,CAAC,CAAC;gBAC3F,OAAM;YACR,CAAC;YAED,gCAAgC;YAChC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,mCAAmC,CAAC,CAAC,CAAC;YAC9D,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,SAAS,EAAE,CAAC,CAAC,CAAC;YAC9C,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,YAAY,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;YACvD,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,gBAAgB,WAAW,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;YAC/D,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,gBAAgB,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;YAChF,IAAI,WAAW,CAAC,WAAW,EAAE,CAAC;gBAC5B,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,mBAAmB,WAAW,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;YACvE,CAAC;YACD,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,4BAA4B,CAAC,CAAC,CAAC;YACrD,OAAO;QACT,CAAC;QAED,6BAA6B;QAC7B,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC;YAC/C,EAAE,EAAE,SAAS;YACb,IAAI,EAAE,WAAW,CAAC,IAAI;YACtB,WAAW,EAAE,WAAW,CAAC,WAAW;YACpC,QAAQ,EAAE,WAAW,CAAC,QAAQ;SAC/B,CAAC,CAAC;QAEH,6DAA6D;QAC7D,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC;QACnE,EAAE,CAAC,SAAS,CAAC,WAAW,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAE/C,wEAAwE;QACxE,MAAM,YAAY,GAAG,kBAAkB,CAAC,WAAW,CAAC,QAAQ,EAAE,WAAW,CAAC,IAAI,CAAC,CAAC;QAChF,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;QACtD,EAAE,CAAC,aAAa,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;QAE1C,2CAA2C;QAC3C,MAAM,SAAS,GAAG,iBAAiB,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;QAE7D,oDAAoD;QACpD,IAAI,QAAQ,EAAE,CAAC;YACb,mBAAmB,CACjB;gBACE,EAAE,EAAE,OAAO,CAAC,EAAE;gBACd,IAAI,EAAE,OAAO,CAAC,IAAI;gBAClB,QAAQ,EAAE,WAAW,CAAC,QAAQ;gBAC9B,QAAQ,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;gBACnC,SAAS,EAAE,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,SAAS,CAAC;gBAClD,SAAS,EAAE,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,SAAS,CAAC;aACnD,EACD,cAAc,CAAC,gBAAgB,EAAE,KAAK,CAAC,CACxC,CAAC;YACF,OAAO;QACT,CAAC;QAED,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,sBAAsB,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;QACjF,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;QAC9C,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,eAAe,WAAW,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;QAC9D,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,eAAe,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;QAC/E,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,YAAY,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC;QAC9E,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,YAAY,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;QAC/E,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,2BAA2B,CAAC,CAAC,CAAC;QACpD,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,gCAAgC,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;QACrE,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,uBAAuB,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;IAC9D,CAAC;IAEO,KAAK,CAAC,iBAAiB,CAC7B,MAAmB;QAOnB,6EAA6E;QAC7E,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,MAAM,CAK9B,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YACtB,GAAG,KAAK;YACR,QAAQ,EAAE,KAAK,CAAC,IAAI,KAAK,MAAM;gBAC7B,CAAC,CAAC,CAAC,CAAC,KAAc,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,CAAC,IAAI,kBAAkB,CAAC;gBACtE,CAAC,CAAC,SAAS;YACb,uCAAuC;YACvC,OAAO,EAAE,KAAK,CAAC,IAAI,KAAK,IAAI;gBAC1B,CAAC,CAAC,CAAC,CAAC,OAAyB,EAAE,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;gBACxD,CAAC,CAAC,KAAK,CAAC,OAAO;SAClB,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;QAEX,OAAO;YACL,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,EAAE,EAAE,OAAO,CAAC,EAAE,IAAI,SAAS;YAC3B,WAAW,EAAE,OAAO,CAAC,WAAW,IAAI,SAAS;YAC7C,QAAQ,EAAE,OAAO,CAAC,QAAQ;SAC3B,CAAC;IACJ,CAAC"}
@@ -1,18 +0,0 @@
1
- import { PMOCommand } from '../../lib/pmo/index.js';
2
- export default class ProjectDelete extends PMOCommand {
3
- static description: string;
4
- static examples: string[];
5
- static args: {
6
- id: import("@oclif/core/interfaces").Arg<string | undefined, Record<string, unknown>>;
7
- };
8
- static flags: {
9
- force: import("@oclif/core/interfaces").BooleanFlag<boolean>;
10
- json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
11
- machine: import("@oclif/core/interfaces").BooleanFlag<boolean>;
12
- project: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
13
- };
14
- protected getPMOOptions(): {
15
- promptIfMultiple: boolean;
16
- };
17
- execute(): Promise<void>;
18
- }
@@ -1,115 +0,0 @@
1
- import { Args, Flags } from '@oclif/core';
2
- import * as fs from 'node:fs';
3
- import * as path from 'node:path';
4
- import { PMOCommand, pmoBaseFlags } from '../../lib/pmo/index.js';
5
- import { styles } from '../../lib/styles.js';
6
- import { shouldOutputJson, outputErrorAsJson, outputSuccessAsJson, createMetadata, } from '../../lib/prompt-json.js';
7
- export default class ProjectDelete extends PMOCommand {
8
- static description = 'Delete a project from the PMO';
9
- static examples = [
10
- '<%= config.bin %> <%= command.id %> my-project',
11
- '<%= config.bin %> <%= command.id %> my-project --force',
12
- ];
13
- static args = {
14
- id: Args.string({
15
- description: 'Project ID to delete - prompts with dropdown if not provided',
16
- required: false,
17
- }),
18
- };
19
- static flags = {
20
- ...pmoBaseFlags,
21
- force: Flags.boolean({
22
- char: 'f',
23
- description: 'Skip confirmation prompt',
24
- default: false,
25
- }),
26
- };
27
- getPMOOptions() {
28
- return { promptIfMultiple: false };
29
- }
30
- async execute() {
31
- const { args, flags } = await this.parse(ProjectDelete);
32
- // Check if JSON output mode is active
33
- const jsonMode = shouldOutputJson(flags);
34
- // Helper to handle errors in JSON mode
35
- const handleError = (code, message) => {
36
- if (jsonMode) {
37
- outputErrorAsJson(code, message, createMetadata('project delete', flags));
38
- return;
39
- }
40
- this.error(message);
41
- };
42
- // Agent mode config for prompts
43
- const agentConfig = jsonMode ? { flags, commandName: 'project delete' } : null;
44
- // Get project ID - prompt if not provided
45
- let projectId = args.id;
46
- if (!projectId) {
47
- const projects = await this.storage.listProjects();
48
- if (projects.length === 0) {
49
- return handleError('NO_PROJECTS', 'No projects found.');
50
- }
51
- const deletableProjects = projects.filter(p => p.id !== 'default');
52
- if (deletableProjects.length === 0) {
53
- return handleError('NO_DELETABLE_PROJECTS', 'No deletable projects found. Cannot delete the default project.');
54
- }
55
- const { selectedProjectId } = await this.prompt([{
56
- type: 'list',
57
- name: 'selectedProjectId',
58
- message: 'Select project to delete:',
59
- choices: deletableProjects.map(p => ({
60
- name: `${p.id} - ${p.name}`,
61
- value: p.id,
62
- command: `prlt project delete ${p.id} --json`,
63
- })),
64
- }], agentConfig);
65
- projectId = selectedProjectId;
66
- }
67
- if (projectId === 'default') {
68
- return handleError('CANNOT_DELETE_DEFAULT', 'Cannot delete the default project.');
69
- }
70
- // Check if project exists
71
- const project = await this.storage.getProject(projectId);
72
- if (!project) {
73
- return handleError('PROJECT_NOT_FOUND', `Project "${projectId}" not found.`);
74
- }
75
- // Get ticket count
76
- const tickets = await this.storage.listTickets(projectId);
77
- const ticketCount = tickets.length;
78
- // Confirm deletion
79
- if (!flags.force) {
80
- const message = ticketCount > 0
81
- ? `Delete project "${project.name}" and its ${ticketCount} ticket(s)?`
82
- : `Delete project "${project.name}"?`;
83
- const { confirm } = await this.prompt([{
84
- type: 'list',
85
- name: 'confirm',
86
- message,
87
- choices: [
88
- { name: 'No, cancel', value: false, command: '' },
89
- { name: 'Yes, delete', value: true, command: `prlt project delete ${projectId} --force --json` },
90
- ],
91
- }], agentConfig);
92
- if (!confirm) {
93
- this.log(styles.muted('Cancelled.'));
94
- return;
95
- }
96
- }
97
- // Delete project from database
98
- await this.storage.deleteProject(projectId);
99
- // Delete entire project folder: pmo/projects/{projectId}/
100
- // This includes board.md and specs/ directory
101
- const projectPath = path.join(this.pmoPath, 'projects', projectId);
102
- if (fs.existsSync(projectPath)) {
103
- fs.rmSync(projectPath, { recursive: true, force: true });
104
- }
105
- if (jsonMode) {
106
- outputSuccessAsJson({ projectId: project.id, projectName: project.name, deleted: true, ticketsRemoved: ticketCount }, createMetadata('project delete', flags));
107
- return;
108
- }
109
- this.log(styles.success(`Deleted project "${project.name}"`));
110
- if (ticketCount > 0) {
111
- this.log(styles.muted(` (${ticketCount} ticket(s) removed)`));
112
- }
113
- }
114
- }
115
- //# sourceMappingURL=delete.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"delete.js","sourceRoot":"","sources":["../../../src/commands/project/delete.ts"],"names":[],"mappings":"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"}
@@ -1,14 +0,0 @@
1
- import { PMOCommand } from '../../lib/pmo/index.js';
2
- export default class Project extends PMOCommand {
3
- static description: string;
4
- static examples: string[];
5
- static flags: {
6
- json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
7
- machine: import("@oclif/core/interfaces").BooleanFlag<boolean>;
8
- project: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
9
- };
10
- protected getPMOOptions(): {
11
- promptIfMultiple: boolean;
12
- };
13
- execute(): Promise<void>;
14
- }
@@ -1,60 +0,0 @@
1
- import { PMOCommand, pmoBaseFlags } from '../../lib/pmo/index.js';
2
- import { shouldOutputJson } from '../../lib/prompt-json.js';
3
- export default class Project extends PMOCommand {
4
- static description = 'Interactive menu for project operations';
5
- static examples = [
6
- '<%= config.bin %> <%= command.id %>',
7
- ];
8
- static flags = {
9
- ...pmoBaseFlags,
10
- };
11
- getPMOOptions() {
12
- return { promptIfMultiple: false };
13
- }
14
- async execute() {
15
- const { flags } = await this.parse(Project);
16
- // Check if JSON output mode is active
17
- const jsonMode = shouldOutputJson(flags);
18
- // Define choices once, use for both JSON and interactive modes
19
- // Each choice includes the full command for AI agents to execute
20
- const menuChoices = [
21
- { id: 'create', name: 'Create new project', command: 'prlt project create --json' },
22
- { id: 'list', name: 'List all projects', command: 'prlt project list --format json' },
23
- { id: 'view', name: 'View project board', command: 'prlt project view --json' },
24
- { id: 'spec', name: 'Manage project specs', command: 'prlt project spec --json' },
25
- { id: 'delete', name: 'Delete project', command: 'prlt project delete --json' },
26
- { id: 'cancel', name: 'Cancel', command: '' },
27
- ];
28
- const message = 'Project Operations - What would you like to do?';
29
- const action = await this.selectFromList({
30
- message,
31
- items: menuChoices,
32
- getName: (c) => c.name,
33
- getValue: (c) => c.id,
34
- getCommand: (c) => c.command,
35
- jsonMode: jsonMode ? { flags, commandName: 'project' } : null,
36
- });
37
- if (action === 'cancel' || !action) {
38
- return;
39
- }
40
- // Run the selected subcommand
41
- switch (action) {
42
- case 'create':
43
- await this.config.runCommand('project:create', []);
44
- break;
45
- case 'list':
46
- await this.config.runCommand('project:list', []);
47
- break;
48
- case 'view':
49
- await this.config.runCommand('project:view', []);
50
- break;
51
- case 'spec':
52
- await this.config.runCommand('project:spec', []);
53
- break;
54
- case 'delete':
55
- await this.config.runCommand('project:delete', []);
56
- break;
57
- }
58
- }
59
- }
60
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/project/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAClE,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAE5D,MAAM,CAAC,OAAO,OAAO,OAAQ,SAAQ,UAAU;IAC7C,MAAM,CAAC,WAAW,GAAG,yCAAyC,CAAC;IAE/D,MAAM,CAAC,QAAQ,GAAG;QAChB,qCAAqC;KACtC,CAAC;IAEF,MAAM,CAAC,KAAK,GAAG;QACb,GAAG,YAAY;KAChB,CAAC;IAEQ,aAAa;QACrB,OAAO,EAAE,gBAAgB,EAAE,KAAK,EAAE,CAAC;IACrC,CAAC;IAED,KAAK,CAAC,OAAO;QACX,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAE5C,sCAAsC;QACtC,MAAM,QAAQ,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC;QAEzC,+DAA+D;QAC/D,iEAAiE;QACjE,MAAM,WAAW,GAAG;YAClB,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,oBAAoB,EAAE,OAAO,EAAE,4BAA4B,EAAE;YACnF,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,mBAAmB,EAAE,OAAO,EAAE,iCAAiC,EAAE;YACrF,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,oBAAoB,EAAE,OAAO,EAAE,0BAA0B,EAAE;YAC/E,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,sBAAsB,EAAE,OAAO,EAAE,0BAA0B,EAAE;YACjF,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,gBAAgB,EAAE,OAAO,EAAE,4BAA4B,EAAE;YAC/E,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,EAAE;SAC9C,CAAC;QACF,MAAM,OAAO,GAAG,iDAAiD,CAAC;QAElE,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC;YACvC,OAAO;YACP,KAAK,EAAE,WAAW;YAClB,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI;YACtB,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE;YACrB,UAAU,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO;YAC5B,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,IAAI;SAC9D,CAAC,CAAC;QAEH,IAAI,MAAM,KAAK,QAAQ,IAAI,CAAC,MAAM,EAAE,CAAC;YACnC,OAAO;QACT,CAAC;QAED,8BAA8B;QAC9B,QAAQ,MAAM,EAAE,CAAC;YACf,KAAK,QAAQ;gBACX,MAAM,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,gBAAgB,EAAE,EAAE,CAAC,CAAC;gBACnD,MAAM;YACR,KAAK,MAAM;gBACT,MAAM,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC;gBACjD,MAAM;YACR,KAAK,MAAM;gBACT,MAAM,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC;gBACjD,MAAM;YACR,KAAK,MAAM;gBACT,MAAM,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC;gBACjD,MAAM;YACR,KAAK,QAAQ;gBACX,MAAM,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,gBAAgB,EAAE,EAAE,CAAC,CAAC;gBACnD,MAAM;QACV,CAAC;IACH,CAAC"}
@@ -1,16 +0,0 @@
1
- import { PMOCommand } from '../../lib/pmo/index.js';
2
- export default class ProjectList extends PMOCommand {
3
- static description: string;
4
- static examples: string[];
5
- static flags: {
6
- archived: import("@oclif/core/interfaces").BooleanFlag<boolean>;
7
- all: import("@oclif/core/interfaces").BooleanFlag<boolean>;
8
- json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
9
- machine: import("@oclif/core/interfaces").BooleanFlag<boolean>;
10
- project: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
11
- };
12
- protected getPMOOptions(): {
13
- promptIfMultiple: boolean;
14
- };
15
- execute(): Promise<void>;
16
- }
@@ -1,115 +0,0 @@
1
- import { Flags } from '@oclif/core';
2
- import { PMOCommand, pmoBaseFlags } from '../../lib/pmo/index.js';
3
- import { styles } from '../../lib/styles.js';
4
- import { shouldOutputJson, outputSuccessAsJson, createMetadata, } from '../../lib/prompt-json.js';
5
- export default class ProjectList extends PMOCommand {
6
- static description = 'List all projects in the PMO';
7
- static examples = [
8
- '<%= config.bin %> <%= command.id %>',
9
- '<%= config.bin %> <%= command.id %> --archived',
10
- '<%= config.bin %> <%= command.id %> --all',
11
- ];
12
- static flags = {
13
- ...pmoBaseFlags,
14
- archived: Flags.boolean({
15
- char: 'a',
16
- description: 'Show only archived projects',
17
- default: false,
18
- }),
19
- all: Flags.boolean({
20
- description: 'Show all projects (including archived)',
21
- default: false,
22
- }),
23
- };
24
- getPMOOptions() {
25
- return { promptIfMultiple: false };
26
- }
27
- async execute() {
28
- const { flags } = await this.parse(ProjectList);
29
- // Check if JSON output mode is active
30
- const jsonMode = shouldOutputJson(flags);
31
- // Determine filter based on flags
32
- let isArchived;
33
- if (flags.archived) {
34
- isArchived = true;
35
- }
36
- else if (!flags.all) {
37
- isArchived = false; // Default: show only non-archived
38
- }
39
- // If --all, isArchived is undefined (show both)
40
- const projects = await this.storage.listProjects({ isArchived });
41
- // Get phases for display
42
- const phases = await this.storage.listPhases();
43
- const phaseMap = new Map(phases.map(p => [p.id, p]));
44
- // Get ticket counts using listProjectSummaries
45
- const summaries = await this.storage.listProjectSummaries();
46
- const ticketCountMap = new Map(summaries.map(s => [s.id, s.ticketCount]));
47
- // JSON mode: output structured data
48
- if (jsonMode) {
49
- const projectData = projects.map(p => ({
50
- id: p.id,
51
- name: p.name,
52
- description: p.description,
53
- isArchived: p.isArchived,
54
- isDefault: p.id === 'default',
55
- ticketCount: ticketCountMap.get(p.id) ?? 0,
56
- phase: p.phaseId ? phaseMap.get(p.phaseId)?.name : undefined,
57
- phaseId: p.phaseId,
58
- }));
59
- outputSuccessAsJson({ projects: projectData }, createMetadata('project list', flags));
60
- return;
61
- }
62
- if (projects.length === 0) {
63
- if (flags.archived) {
64
- this.log(styles.muted('No archived projects found.'));
65
- }
66
- else if (flags.all) {
67
- this.log(styles.muted('No projects found. Create one with: prlt project create'));
68
- }
69
- else {
70
- this.log(styles.muted('No active projects found. Create one with: prlt project create'));
71
- // Check if there are archived projects
72
- const archivedProjects = await this.storage.listProjects({ isArchived: true });
73
- if (archivedProjects.length > 0) {
74
- this.log(styles.muted(`(${archivedProjects.length} archived project${archivedProjects.length > 1 ? 's' : ''} hidden. Use --archived to view)`));
75
- }
76
- }
77
- return;
78
- }
79
- const title = flags.archived ? 'Archived Projects' : flags.all ? 'All Projects' : 'Projects';
80
- this.log(styles.title(`\n${title}\n`));
81
- for (const project of projects) {
82
- const isDefault = project.id === 'default';
83
- const markers = [];
84
- if (isDefault)
85
- markers.push(styles.success('default'));
86
- if (project.isArchived)
87
- markers.push(styles.muted('archived'));
88
- const markerStr = markers.length > 0 ? ` (${markers.join(', ')})` : '';
89
- this.log(` ${styles.emphasis(project.name)}${markerStr}`);
90
- this.log(styles.muted(` ID: ${project.id}`));
91
- // Show ticket count
92
- const ticketCount = ticketCountMap.get(project.id) ?? 0;
93
- this.log(styles.muted(` Tickets: ${ticketCount}`));
94
- // Show phase if set
95
- if (project.phaseId) {
96
- const phase = phaseMap.get(project.phaseId);
97
- if (phase) {
98
- this.log(styles.muted(` Phase: ${phase.name}`));
99
- }
100
- }
101
- if (project.description) {
102
- this.log(styles.muted(` ${project.description}`));
103
- }
104
- this.log('');
105
- }
106
- // Show hint about archived projects when viewing active
107
- if (!flags.archived && !flags.all) {
108
- const archivedProjects = await this.storage.listProjects({ isArchived: true });
109
- if (archivedProjects.length > 0) {
110
- this.log(styles.muted(`(${archivedProjects.length} archived project${archivedProjects.length > 1 ? 's' : ''} hidden. Use --archived to view)`));
111
- }
112
- }
113
- }
114
- }
115
- //# sourceMappingURL=list.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"list.js","sourceRoot":"","sources":["../../../src/commands/project/list.ts"],"names":[],"mappings":"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"}
@@ -1,19 +0,0 @@
1
- import { PMOCommand } from '../../lib/pmo/index.js';
2
- export default class ProjectSpec extends PMOCommand {
3
- static description: string;
4
- static examples: string[];
5
- static args: {
6
- projectId: import("@oclif/core/interfaces").Arg<string | undefined, Record<string, unknown>>;
7
- };
8
- static flags: {
9
- add: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
10
- remove: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
11
- json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
12
- machine: import("@oclif/core/interfaces").BooleanFlag<boolean>;
13
- project: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
14
- };
15
- protected getPMOOptions(): {
16
- promptIfMultiple: boolean;
17
- };
18
- execute(): Promise<void>;
19
- }