@proletariat/cli 0.2.0 → 0.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (526) hide show
  1. package/README.md +561 -251
  2. package/bin/dev.cmd +3 -0
  3. package/bin/dev.js +5 -0
  4. package/bin/run.cmd +3 -0
  5. package/bin/run.js +23 -0
  6. package/dist/commands/action/create.d.ts +21 -0
  7. package/dist/commands/action/create.js +126 -0
  8. package/dist/commands/action/delete.d.ts +17 -0
  9. package/dist/commands/action/delete.js +78 -0
  10. package/dist/commands/action/index.d.ts +15 -0
  11. package/dist/commands/action/index.js +107 -0
  12. package/dist/commands/action/list.d.ts +14 -0
  13. package/dist/commands/action/list.js +89 -0
  14. package/dist/commands/action/run.d.ts +19 -0
  15. package/dist/commands/action/run.js +179 -0
  16. package/dist/commands/action/show.d.ts +15 -0
  17. package/dist/commands/action/show.js +47 -0
  18. package/dist/commands/action/update.d.ts +22 -0
  19. package/dist/commands/action/update.js +168 -0
  20. package/dist/commands/agent/index.d.ts +13 -0
  21. package/dist/commands/agent/index.js +131 -0
  22. package/dist/commands/agent/list.d.ts +7 -0
  23. package/dist/commands/agent/list.js +126 -0
  24. package/dist/commands/agent/login.d.ts +16 -0
  25. package/dist/commands/agent/login.js +146 -0
  26. package/dist/commands/agent/rebuild.d.ts +18 -0
  27. package/dist/commands/agent/rebuild.js +133 -0
  28. package/dist/commands/agent/restart.d.ts +17 -0
  29. package/dist/commands/agent/restart.js +116 -0
  30. package/dist/commands/agent/shell.d.ts +23 -0
  31. package/dist/commands/agent/shell.js +378 -0
  32. package/dist/commands/agent/staff/add.d.ts +15 -0
  33. package/dist/commands/agent/staff/add.js +281 -0
  34. package/dist/commands/agent/staff/index.d.ts +14 -0
  35. package/dist/commands/agent/staff/index.js +90 -0
  36. package/dist/commands/agent/staff/list.d.ts +7 -0
  37. package/dist/commands/agent/staff/list.js +90 -0
  38. package/dist/commands/agent/staff/remove.d.ts +16 -0
  39. package/dist/commands/agent/staff/remove.js +137 -0
  40. package/dist/commands/agent/status.d.ts +17 -0
  41. package/dist/commands/agent/status.js +139 -0
  42. package/dist/commands/agent/temp/cleanup.d.ts +23 -0
  43. package/dist/commands/agent/temp/cleanup.js +388 -0
  44. package/dist/commands/agent/temp/index.d.ts +14 -0
  45. package/dist/commands/agent/temp/index.js +82 -0
  46. package/dist/commands/agent/temp/list.d.ts +7 -0
  47. package/dist/commands/agent/temp/list.js +108 -0
  48. package/dist/commands/agent/themes/add-names.d.ts +10 -0
  49. package/dist/commands/agent/themes/add-names.js +67 -0
  50. package/dist/commands/agent/themes/create.d.ts +13 -0
  51. package/dist/commands/agent/themes/create.js +66 -0
  52. package/dist/commands/agent/themes/index.d.ts +9 -0
  53. package/dist/commands/agent/themes/index.js +194 -0
  54. package/dist/commands/agent/themes/list.d.ts +6 -0
  55. package/dist/commands/agent/themes/list.js +41 -0
  56. package/dist/commands/agent/themes/set.d.ts +12 -0
  57. package/dist/commands/agent/themes/set.js +77 -0
  58. package/dist/commands/agent/visit.d.ts +16 -0
  59. package/dist/commands/agent/visit.js +88 -0
  60. package/dist/commands/autocomplete/setup.d.ts +14 -0
  61. package/dist/commands/autocomplete/setup.js +154 -0
  62. package/dist/commands/board/index.d.ts +17 -0
  63. package/dist/commands/board/index.js +255 -0
  64. package/dist/commands/board/watch.d.ts +13 -0
  65. package/dist/commands/board/watch.js +52 -0
  66. package/dist/commands/branch/create.d.ts +50 -0
  67. package/dist/commands/branch/create.js +624 -0
  68. package/dist/commands/branch/index.d.ts +13 -0
  69. package/dist/commands/branch/index.js +50 -0
  70. package/dist/commands/branch/list.d.ts +17 -0
  71. package/dist/commands/branch/list.js +120 -0
  72. package/dist/commands/branch/validate.d.ts +15 -0
  73. package/dist/commands/branch/validate.js +73 -0
  74. package/dist/commands/commit.d.ts +71 -0
  75. package/dist/commands/commit.js +499 -0
  76. package/dist/commands/docker/clean.d.ts +13 -0
  77. package/dist/commands/docker/clean.js +224 -0
  78. package/dist/commands/docker/index.d.ts +19 -0
  79. package/dist/commands/docker/index.js +274 -0
  80. package/dist/commands/docker/list.d.ts +16 -0
  81. package/dist/commands/docker/list.js +200 -0
  82. package/dist/commands/docker/logs.d.ts +14 -0
  83. package/dist/commands/docker/logs.js +118 -0
  84. package/dist/commands/docker/prune.d.ts +14 -0
  85. package/dist/commands/docker/prune.js +211 -0
  86. package/dist/commands/docker/restart.d.ts +14 -0
  87. package/dist/commands/docker/restart.js +129 -0
  88. package/dist/commands/docker/shell.d.ts +14 -0
  89. package/dist/commands/docker/shell.js +103 -0
  90. package/dist/commands/docker/start.d.ts +12 -0
  91. package/dist/commands/docker/start.js +92 -0
  92. package/dist/commands/docker/status.d.ts +7 -0
  93. package/dist/commands/docker/status.js +40 -0
  94. package/dist/commands/docker/stop.d.ts +14 -0
  95. package/dist/commands/docker/stop.js +134 -0
  96. package/dist/commands/docker/sync.d.ts +15 -0
  97. package/dist/commands/docker/sync.js +112 -0
  98. package/dist/commands/epic/activate.d.ts +13 -0
  99. package/dist/commands/epic/activate.js +118 -0
  100. package/dist/commands/epic/archive.d.ts +14 -0
  101. package/dist/commands/epic/archive.js +132 -0
  102. package/dist/commands/epic/create.d.ts +15 -0
  103. package/dist/commands/epic/create.js +137 -0
  104. package/dist/commands/epic/index.d.ts +13 -0
  105. package/dist/commands/epic/index.js +88 -0
  106. package/dist/commands/epic/link/block.d.ts +14 -0
  107. package/dist/commands/epic/link/block.js +79 -0
  108. package/dist/commands/epic/link/duplicates.d.ts +14 -0
  109. package/dist/commands/epic/link/duplicates.js +66 -0
  110. package/dist/commands/epic/link/index.d.ts +19 -0
  111. package/dist/commands/epic/link/index.js +242 -0
  112. package/dist/commands/epic/link/relates.d.ts +14 -0
  113. package/dist/commands/epic/link/relates.js +66 -0
  114. package/dist/commands/epic/link/remove.d.ts +16 -0
  115. package/dist/commands/epic/link/remove.js +89 -0
  116. package/dist/commands/epic/list.d.ts +11 -0
  117. package/dist/commands/epic/list.js +87 -0
  118. package/dist/commands/epic/move.d.ts +15 -0
  119. package/dist/commands/epic/move.js +184 -0
  120. package/dist/commands/epic/progress.d.ts +16 -0
  121. package/dist/commands/epic/progress.js +166 -0
  122. package/dist/commands/epic/project.d.ts +15 -0
  123. package/dist/commands/epic/project.js +219 -0
  124. package/dist/commands/epic/reorder.d.ts +21 -0
  125. package/dist/commands/epic/reorder.js +160 -0
  126. package/dist/commands/epic/spec.d.ts +15 -0
  127. package/dist/commands/epic/spec.js +191 -0
  128. package/dist/commands/epic/ticket.d.ts +18 -0
  129. package/dist/commands/epic/ticket.js +291 -0
  130. package/dist/commands/epic/view.d.ts +13 -0
  131. package/dist/commands/epic/view.js +117 -0
  132. package/dist/commands/execution/index.d.ts +13 -0
  133. package/dist/commands/execution/index.js +70 -0
  134. package/dist/commands/execution/list.d.ts +15 -0
  135. package/dist/commands/execution/list.js +144 -0
  136. package/dist/commands/execution/logs.d.ts +18 -0
  137. package/dist/commands/execution/logs.js +161 -0
  138. package/dist/commands/execution/stop.d.ts +22 -0
  139. package/dist/commands/execution/stop.js +248 -0
  140. package/dist/commands/gh/index.d.ts +9 -0
  141. package/dist/commands/gh/index.js +53 -0
  142. package/dist/commands/gh/login.d.ts +6 -0
  143. package/dist/commands/gh/login.js +57 -0
  144. package/dist/commands/gh/status.d.ts +6 -0
  145. package/dist/commands/gh/status.js +48 -0
  146. package/dist/commands/gh/token.d.ts +6 -0
  147. package/dist/commands/gh/token.js +59 -0
  148. package/dist/commands/init.d.ts +26 -0
  149. package/dist/commands/init.js +200 -0
  150. package/dist/commands/phase/create.d.ts +22 -0
  151. package/dist/commands/phase/create.js +123 -0
  152. package/dist/commands/phase/delete.d.ts +17 -0
  153. package/dist/commands/phase/delete.js +73 -0
  154. package/dist/commands/phase/list.d.ts +12 -0
  155. package/dist/commands/phase/list.js +76 -0
  156. package/dist/commands/phase/move.d.ts +17 -0
  157. package/dist/commands/phase/move.js +115 -0
  158. package/dist/commands/phase/template/apply.d.ts +17 -0
  159. package/dist/commands/phase/template/apply.js +106 -0
  160. package/dist/commands/phase/template/create.d.ts +16 -0
  161. package/dist/commands/phase/template/create.js +58 -0
  162. package/dist/commands/phase/template/delete.d.ts +17 -0
  163. package/dist/commands/phase/template/delete.js +98 -0
  164. package/dist/commands/phase/template/index.d.ts +15 -0
  165. package/dist/commands/phase/template/index.js +128 -0
  166. package/dist/commands/phase/template/list.d.ts +16 -0
  167. package/dist/commands/phase/template/list.js +95 -0
  168. package/dist/commands/phase/template/update.d.ts +17 -0
  169. package/dist/commands/phase/template/update.js +89 -0
  170. package/dist/commands/phase/update.d.ts +23 -0
  171. package/dist/commands/phase/update.js +174 -0
  172. package/dist/commands/pmo/init.d.ts +25 -0
  173. package/dist/commands/pmo/init.js +341 -0
  174. package/dist/commands/pr/create.d.ts +17 -0
  175. package/dist/commands/pr/create.js +242 -0
  176. package/dist/commands/pr/index.d.ts +9 -0
  177. package/dist/commands/pr/index.js +68 -0
  178. package/dist/commands/pr/link.d.ts +14 -0
  179. package/dist/commands/pr/link.js +212 -0
  180. package/dist/commands/pr/status.d.ts +12 -0
  181. package/dist/commands/pr/status.js +161 -0
  182. package/dist/commands/project/archive.d.ts +17 -0
  183. package/dist/commands/project/archive.js +83 -0
  184. package/dist/commands/project/create.d.ts +22 -0
  185. package/dist/commands/project/create.js +143 -0
  186. package/dist/commands/project/delete.d.ts +17 -0
  187. package/dist/commands/project/delete.js +128 -0
  188. package/dist/commands/project/index.d.ts +13 -0
  189. package/dist/commands/project/index.js +64 -0
  190. package/dist/commands/project/list.d.ts +14 -0
  191. package/dist/commands/project/list.js +96 -0
  192. package/dist/commands/project/spec.d.ts +18 -0
  193. package/dist/commands/project/spec.js +216 -0
  194. package/dist/commands/project/unarchive.d.ts +15 -0
  195. package/dist/commands/project/unarchive.js +35 -0
  196. package/dist/commands/project/view.d.ts +16 -0
  197. package/dist/commands/project/view.js +94 -0
  198. package/dist/commands/repo/add.d.ts +21 -0
  199. package/dist/commands/repo/add.js +118 -0
  200. package/dist/commands/repo/index.d.ts +13 -0
  201. package/dist/commands/repo/index.js +114 -0
  202. package/dist/commands/repo/list.d.ts +13 -0
  203. package/dist/commands/repo/list.js +96 -0
  204. package/dist/commands/repo/remove.d.ts +23 -0
  205. package/dist/commands/repo/remove.js +217 -0
  206. package/dist/commands/repo/view.d.ts +15 -0
  207. package/dist/commands/repo/view.js +99 -0
  208. package/dist/commands/session/attach.d.ts +40 -0
  209. package/dist/commands/session/attach.js +307 -0
  210. package/dist/commands/session/index.d.ts +13 -0
  211. package/dist/commands/session/index.js +64 -0
  212. package/dist/commands/session/list.d.ts +21 -0
  213. package/dist/commands/session/list.js +181 -0
  214. package/dist/commands/spec/create.d.ts +19 -0
  215. package/dist/commands/spec/create.js +130 -0
  216. package/dist/commands/spec/index.d.ts +13 -0
  217. package/dist/commands/spec/index.js +68 -0
  218. package/dist/commands/spec/link/depends.d.ts +14 -0
  219. package/dist/commands/spec/link/depends.js +64 -0
  220. package/dist/commands/spec/link/duplicates.d.ts +14 -0
  221. package/dist/commands/spec/link/duplicates.js +63 -0
  222. package/dist/commands/spec/link/index.d.ts +19 -0
  223. package/dist/commands/spec/link/index.js +200 -0
  224. package/dist/commands/spec/link/relates.d.ts +14 -0
  225. package/dist/commands/spec/link/relates.js +63 -0
  226. package/dist/commands/spec/link/remove.d.ts +16 -0
  227. package/dist/commands/spec/link/remove.js +94 -0
  228. package/dist/commands/spec/list.d.ts +12 -0
  229. package/dist/commands/spec/list.js +75 -0
  230. package/dist/commands/spec/plan.d.ts +15 -0
  231. package/dist/commands/spec/plan.js +108 -0
  232. package/dist/commands/spec/ticket.d.ts +18 -0
  233. package/dist/commands/spec/ticket.js +160 -0
  234. package/dist/commands/spec/view.d.ts +15 -0
  235. package/dist/commands/spec/view.js +163 -0
  236. package/dist/commands/status/create.d.ts +21 -0
  237. package/dist/commands/status/create.js +140 -0
  238. package/dist/commands/status/delete.d.ts +13 -0
  239. package/dist/commands/status/delete.js +77 -0
  240. package/dist/commands/status/index.d.ts +14 -0
  241. package/dist/commands/status/index.js +91 -0
  242. package/dist/commands/status/list.d.ts +12 -0
  243. package/dist/commands/status/list.js +93 -0
  244. package/dist/commands/status/move.d.ts +14 -0
  245. package/dist/commands/status/move.js +120 -0
  246. package/dist/commands/status/update.d.ts +20 -0
  247. package/dist/commands/status/update.js +180 -0
  248. package/dist/commands/template/delete.d.ts +15 -0
  249. package/dist/commands/template/delete.js +142 -0
  250. package/dist/commands/template/index.d.ts +10 -0
  251. package/dist/commands/template/index.js +64 -0
  252. package/dist/commands/template/list.d.ts +18 -0
  253. package/dist/commands/template/list.js +157 -0
  254. package/dist/commands/template/phase/apply.d.ts +14 -0
  255. package/dist/commands/template/phase/apply.js +41 -0
  256. package/dist/commands/template/phase/create.d.ts +12 -0
  257. package/dist/commands/template/phase/create.js +29 -0
  258. package/dist/commands/template/phase/delete.d.ts +13 -0
  259. package/dist/commands/template/phase/delete.js +34 -0
  260. package/dist/commands/template/phase/index.d.ts +10 -0
  261. package/dist/commands/template/phase/index.js +62 -0
  262. package/dist/commands/template/phase/list.d.ts +11 -0
  263. package/dist/commands/template/phase/list.js +34 -0
  264. package/dist/commands/template/phase/update.d.ts +13 -0
  265. package/dist/commands/template/phase/update.js +35 -0
  266. package/dist/commands/template/ticket/apply.d.ts +17 -0
  267. package/dist/commands/template/ticket/apply.js +58 -0
  268. package/dist/commands/template/ticket/delete.d.ts +13 -0
  269. package/dist/commands/template/ticket/delete.js +34 -0
  270. package/dist/commands/template/ticket/index.d.ts +10 -0
  271. package/dist/commands/template/ticket/index.js +62 -0
  272. package/dist/commands/template/ticket/list.d.ts +11 -0
  273. package/dist/commands/template/ticket/list.js +34 -0
  274. package/dist/commands/template/ticket/save.d.ts +13 -0
  275. package/dist/commands/template/ticket/save.js +35 -0
  276. package/dist/commands/ticket/bulk.d.ts +13 -0
  277. package/dist/commands/ticket/bulk.js +145 -0
  278. package/dist/commands/ticket/complete.d.ts +16 -0
  279. package/dist/commands/ticket/complete.js +170 -0
  280. package/dist/commands/ticket/create.d.ts +22 -0
  281. package/dist/commands/ticket/create.js +390 -0
  282. package/dist/commands/ticket/delete.d.ts +16 -0
  283. package/dist/commands/ticket/delete.js +178 -0
  284. package/dist/commands/ticket/edit.d.ts +27 -0
  285. package/dist/commands/ticket/edit.js +322 -0
  286. package/dist/commands/ticket/epic.d.ts +20 -0
  287. package/dist/commands/ticket/epic.js +333 -0
  288. package/dist/commands/ticket/index.d.ts +13 -0
  289. package/dist/commands/ticket/index.js +103 -0
  290. package/dist/commands/ticket/link/block.d.ts +14 -0
  291. package/dist/commands/ticket/link/block.js +94 -0
  292. package/dist/commands/ticket/link/duplicates.d.ts +14 -0
  293. package/dist/commands/ticket/link/duplicates.js +93 -0
  294. package/dist/commands/ticket/link/index.d.ts +19 -0
  295. package/dist/commands/ticket/link/index.js +239 -0
  296. package/dist/commands/ticket/link/relates.d.ts +14 -0
  297. package/dist/commands/ticket/link/relates.js +93 -0
  298. package/dist/commands/ticket/link/remove.d.ts +16 -0
  299. package/dist/commands/ticket/link/remove.js +128 -0
  300. package/dist/commands/ticket/list.d.ts +24 -0
  301. package/dist/commands/ticket/list.js +431 -0
  302. package/dist/commands/ticket/move.d.ts +18 -0
  303. package/dist/commands/ticket/move.js +212 -0
  304. package/dist/commands/ticket/project.d.ts +18 -0
  305. package/dist/commands/ticket/project.js +254 -0
  306. package/dist/commands/ticket/reassign.d.ts +19 -0
  307. package/dist/commands/ticket/reassign.js +279 -0
  308. package/dist/commands/ticket/spec.d.ts +18 -0
  309. package/dist/commands/ticket/spec.js +259 -0
  310. package/dist/commands/ticket/status.d.ts +13 -0
  311. package/dist/commands/ticket/status.js +87 -0
  312. package/dist/commands/ticket/template/apply.d.ts +25 -0
  313. package/dist/commands/ticket/template/apply.js +249 -0
  314. package/dist/commands/ticket/template/create.d.ts +19 -0
  315. package/dist/commands/ticket/template/create.js +210 -0
  316. package/dist/commands/ticket/template/delete.d.ts +17 -0
  317. package/dist/commands/ticket/template/delete.js +92 -0
  318. package/dist/commands/ticket/template/index.d.ts +15 -0
  319. package/dist/commands/ticket/template/index.js +118 -0
  320. package/dist/commands/ticket/template/list.d.ts +16 -0
  321. package/dist/commands/ticket/template/list.js +110 -0
  322. package/dist/commands/ticket/template/save.d.ts +14 -0
  323. package/dist/commands/ticket/template/save.js +110 -0
  324. package/dist/commands/ticket/update.d.ts +18 -0
  325. package/dist/commands/ticket/update.js +325 -0
  326. package/dist/commands/ticket/view.d.ts +13 -0
  327. package/dist/commands/ticket/view.js +80 -0
  328. package/dist/commands/whoami.d.ts +9 -0
  329. package/dist/commands/whoami.js +103 -0
  330. package/dist/commands/work/complete.d.ts +13 -0
  331. package/dist/commands/work/complete.js +121 -0
  332. package/dist/commands/work/index.d.ts +13 -0
  333. package/dist/commands/work/index.js +70 -0
  334. package/dist/commands/work/ready.d.ts +24 -0
  335. package/dist/commands/work/ready.js +290 -0
  336. package/dist/commands/work/revise.d.ts +19 -0
  337. package/dist/commands/work/revise.js +377 -0
  338. package/dist/commands/work/spawn-all.d.ts +17 -0
  339. package/dist/commands/work/spawn-all.js +58 -0
  340. package/dist/commands/work/spawn.d.ts +29 -0
  341. package/dist/commands/work/spawn.js +728 -0
  342. package/dist/commands/work/start.d.ts +39 -0
  343. package/dist/commands/work/start.js +1393 -0
  344. package/dist/commands/work/watch.d.ts +31 -0
  345. package/dist/commands/work/watch.js +359 -0
  346. package/dist/commands/workflow/create.d.ts +18 -0
  347. package/dist/commands/workflow/create.js +119 -0
  348. package/dist/commands/workflow/delete.d.ts +17 -0
  349. package/dist/commands/workflow/delete.js +119 -0
  350. package/dist/commands/workflow/index.d.ts +15 -0
  351. package/dist/commands/workflow/index.js +75 -0
  352. package/dist/commands/workflow/list.d.ts +15 -0
  353. package/dist/commands/workflow/list.js +75 -0
  354. package/dist/commands/workflow/switch.d.ts +13 -0
  355. package/dist/commands/workflow/switch.js +117 -0
  356. package/dist/commands/workflow/view.d.ts +16 -0
  357. package/dist/commands/workflow/view.js +114 -0
  358. package/dist/commands/workspace/add.d.ts +12 -0
  359. package/dist/commands/workspace/add.js +74 -0
  360. package/dist/commands/workspace/list.d.ts +9 -0
  361. package/dist/commands/workspace/list.js +153 -0
  362. package/dist/commands/workspace/remove.d.ts +13 -0
  363. package/dist/commands/workspace/remove.js +98 -0
  364. package/dist/commands/workspace/use.d.ts +12 -0
  365. package/dist/commands/workspace/use.js +111 -0
  366. package/dist/hooks/init.d.ts +11 -0
  367. package/dist/hooks/init.js +57 -0
  368. package/dist/index.d.ts +1 -0
  369. package/dist/index.js +1 -0
  370. package/dist/lib/agents/commands.d.ts +189 -0
  371. package/dist/lib/agents/commands.js +893 -0
  372. package/dist/lib/agents/index.d.ts +54 -0
  373. package/dist/lib/agents/index.js +382 -0
  374. package/dist/lib/branch/index.d.ts +120 -0
  375. package/dist/lib/branch/index.js +334 -0
  376. package/dist/lib/colors.d.ts +94 -0
  377. package/dist/lib/colors.js +68 -0
  378. package/dist/lib/commands/docker-command.d.ts +21 -0
  379. package/dist/lib/commands/docker-command.js +27 -0
  380. package/dist/lib/database/index.d.ts +176 -0
  381. package/dist/lib/database/index.js +581 -0
  382. package/dist/lib/docker/resolve.d.ts +38 -0
  383. package/dist/lib/docker/resolve.js +175 -0
  384. package/dist/lib/execution/config.d.ts +150 -0
  385. package/dist/lib/execution/config.js +541 -0
  386. package/dist/lib/execution/devcontainer.d.ts +85 -0
  387. package/dist/lib/execution/devcontainer.js +594 -0
  388. package/dist/lib/execution/index.d.ts +10 -0
  389. package/dist/lib/execution/index.js +10 -0
  390. package/dist/lib/execution/runners.d.ts +53 -0
  391. package/dist/lib/execution/runners.js +1182 -0
  392. package/dist/lib/execution/spawner.d.ts +85 -0
  393. package/dist/lib/execution/spawner.js +548 -0
  394. package/dist/lib/execution/storage.d.ts +159 -0
  395. package/dist/lib/execution/storage.js +425 -0
  396. package/dist/lib/execution/types.d.ts +145 -0
  397. package/dist/lib/execution/types.js +157 -0
  398. package/dist/lib/init/index.d.ts +75 -0
  399. package/dist/lib/init/index.js +355 -0
  400. package/dist/lib/machine-config.d.ts +170 -0
  401. package/dist/lib/machine-config.js +386 -0
  402. package/dist/lib/pmo/base-command.d.ts +195 -0
  403. package/dist/lib/pmo/base-command.js +319 -0
  404. package/dist/lib/pmo/create-spec-folders.d.ts +43 -0
  405. package/dist/lib/pmo/create-spec-folders.js +64 -0
  406. package/dist/lib/pmo/epic-files.d.ts +56 -0
  407. package/dist/lib/pmo/epic-files.js +195 -0
  408. package/dist/lib/pmo/find-pmo.d.ts +14 -0
  409. package/dist/lib/pmo/find-pmo.js +172 -0
  410. package/dist/lib/pmo/index.d.ts +109 -0
  411. package/dist/lib/pmo/index.js +501 -0
  412. package/dist/lib/pmo/markdown.d.ts +31 -0
  413. package/dist/lib/pmo/markdown.js +245 -0
  414. package/dist/lib/pmo/pmo-context.d.ts +27 -0
  415. package/dist/lib/pmo/pmo-context.js +44 -0
  416. package/dist/lib/pmo/schema.d.ts +82 -0
  417. package/dist/lib/pmo/schema.js +531 -0
  418. package/dist/lib/pmo/spec-parser.d.ts +25 -0
  419. package/dist/lib/pmo/spec-parser.js +205 -0
  420. package/dist/lib/pmo/spec-types.d.ts +43 -0
  421. package/dist/lib/pmo/spec-types.js +7 -0
  422. package/dist/lib/pmo/storage/actions.d.ts +34 -0
  423. package/dist/lib/pmo/storage/actions.js +177 -0
  424. package/dist/lib/pmo/storage/base.d.ts +47 -0
  425. package/dist/lib/pmo/storage/base.js +858 -0
  426. package/dist/lib/pmo/storage/dependencies.d.ts +61 -0
  427. package/dist/lib/pmo/storage/dependencies.js +267 -0
  428. package/dist/lib/pmo/storage/epics.d.ts +46 -0
  429. package/dist/lib/pmo/storage/epics.js +243 -0
  430. package/dist/lib/pmo/storage/helpers.d.ts +33 -0
  431. package/dist/lib/pmo/storage/helpers.js +148 -0
  432. package/dist/lib/pmo/storage/index.d.ts +186 -0
  433. package/dist/lib/pmo/storage/index.js +689 -0
  434. package/dist/lib/pmo/storage/phases.d.ts +65 -0
  435. package/dist/lib/pmo/storage/phases.js +392 -0
  436. package/dist/lib/pmo/storage/projects.d.ts +79 -0
  437. package/dist/lib/pmo/storage/projects.js +303 -0
  438. package/dist/lib/pmo/storage/specs.d.ts +77 -0
  439. package/dist/lib/pmo/storage/specs.js +389 -0
  440. package/dist/lib/pmo/storage/statuses.d.ts +63 -0
  441. package/dist/lib/pmo/storage/statuses.js +404 -0
  442. package/dist/lib/pmo/storage/subtasks.d.ts +37 -0
  443. package/dist/lib/pmo/storage/subtasks.js +184 -0
  444. package/dist/lib/pmo/storage/templates.d.ts +40 -0
  445. package/dist/lib/pmo/storage/templates.js +210 -0
  446. package/dist/lib/pmo/storage/tickets.d.ts +57 -0
  447. package/dist/lib/pmo/storage/tickets.js +453 -0
  448. package/dist/lib/pmo/storage/types.d.ts +200 -0
  449. package/dist/lib/pmo/storage/types.js +5 -0
  450. package/dist/lib/pmo/storage/views.d.ts +44 -0
  451. package/dist/lib/pmo/storage/views.js +355 -0
  452. package/dist/lib/pmo/storage-sqlite.d.ts +7 -0
  453. package/dist/lib/pmo/storage-sqlite.js +7 -0
  454. package/dist/lib/pmo/sync-manager.d.ts +92 -0
  455. package/dist/lib/pmo/sync-manager.js +229 -0
  456. package/dist/lib/pmo/types.d.ts +710 -0
  457. package/dist/lib/pmo/types.js +108 -0
  458. package/dist/lib/pmo/utils.d.ts +122 -0
  459. package/dist/lib/pmo/utils.js +174 -0
  460. package/dist/lib/pmo/watcher.d.ts +43 -0
  461. package/dist/lib/pmo/watcher.js +208 -0
  462. package/dist/lib/pr/index.d.ts +150 -0
  463. package/dist/lib/pr/index.js +483 -0
  464. package/dist/lib/prompt-json.d.ts +231 -0
  465. package/dist/lib/prompt-json.js +213 -0
  466. package/dist/lib/repos/index.d.ts +81 -0
  467. package/dist/lib/repos/index.js +679 -0
  468. package/dist/lib/styles.d.ts +98 -0
  469. package/dist/lib/styles.js +195 -0
  470. package/dist/lib/themes.d.ts +128 -0
  471. package/dist/lib/themes.js +301 -0
  472. package/dist/lib/ui/BoardUI.d.ts +21 -0
  473. package/dist/lib/ui/BoardUI.js +85 -0
  474. package/dist/lib/ui/ClaimTicketUI.d.ts +17 -0
  475. package/dist/lib/ui/ClaimTicketUI.js +64 -0
  476. package/dist/lib/ui/CreateTicketUI.d.ts +13 -0
  477. package/dist/lib/ui/CreateTicketUI.js +101 -0
  478. package/dist/lib/workspace.d.ts +66 -0
  479. package/dist/lib/workspace.js +204 -0
  480. package/oclif.manifest.json +10593 -0
  481. package/package.json +103 -56
  482. package/LICENSE +0 -21
  483. package/dist/bin/prlt.d.ts +0 -11
  484. package/dist/bin/prlt.d.ts.map +0 -1
  485. package/dist/bin/prlt.js +0 -144
  486. package/dist/bin/prlt.js.map +0 -1
  487. package/dist/lib/config/index.d.ts +0 -14
  488. package/dist/lib/config/index.d.ts.map +0 -1
  489. package/dist/lib/config/index.js +0 -142
  490. package/dist/lib/config/index.js.map +0 -1
  491. package/dist/lib/config/upgrade.d.ts +0 -2
  492. package/dist/lib/config/upgrade.d.ts.map +0 -1
  493. package/dist/lib/config/upgrade.js +0 -248
  494. package/dist/lib/config/upgrade.js.map +0 -1
  495. package/dist/lib/themes/index.d.ts +0 -8
  496. package/dist/lib/themes/index.d.ts.map +0 -1
  497. package/dist/lib/themes/index.js +0 -80
  498. package/dist/lib/themes/index.js.map +0 -1
  499. package/dist/lib/utils/helpers.d.ts +0 -4
  500. package/dist/lib/utils/helpers.d.ts.map +0 -1
  501. package/dist/lib/utils/helpers.js +0 -39
  502. package/dist/lib/utils/helpers.js.map +0 -1
  503. package/dist/lib/utils/logger.d.ts +0 -4
  504. package/dist/lib/utils/logger.d.ts.map +0 -1
  505. package/dist/lib/utils/logger.js +0 -28
  506. package/dist/lib/utils/logger.js.map +0 -1
  507. package/dist/lib/workspace/index.d.ts +0 -13
  508. package/dist/lib/workspace/index.d.ts.map +0 -1
  509. package/dist/lib/workspace/index.js +0 -116
  510. package/dist/lib/workspace/index.js.map +0 -1
  511. package/dist/lib/worktree/index.d.ts +0 -7
  512. package/dist/lib/worktree/index.d.ts.map +0 -1
  513. package/dist/lib/worktree/index.js +0 -362
  514. package/dist/lib/worktree/index.js.map +0 -1
  515. package/dist/lib/worktree/migrate.d.ts +0 -2
  516. package/dist/lib/worktree/migrate.d.ts.map +0 -1
  517. package/dist/lib/worktree/migrate.js +0 -214
  518. package/dist/lib/worktree/migrate.js.map +0 -1
  519. package/dist/lib/worktree/repair.d.ts +0 -3
  520. package/dist/lib/worktree/repair.d.ts.map +0 -1
  521. package/dist/lib/worktree/repair.js +0 -320
  522. package/dist/lib/worktree/repair.js.map +0 -1
  523. package/dist/types/index.d.ts +0 -57
  524. package/dist/types/index.d.ts.map +0 -1
  525. package/dist/types/index.js +0 -3
  526. package/dist/types/index.js.map +0 -1
@@ -0,0 +1,210 @@
1
+ import { Args, Flags } from '@oclif/core';
2
+ import inquirer from 'inquirer';
3
+ import { PMOCommand, pmoBaseFlags } from '../../../lib/pmo/index.js';
4
+ import { PRIORITIES, PRIORITY_LABELS, TICKET_CATEGORIES } from '../../../lib/pmo/types.js';
5
+ import { styles } from '../../../lib/styles.js';
6
+ export default class TicketTemplateCreate extends PMOCommand {
7
+ static description = 'Create a new ticket template from scratch';
8
+ static examples = [
9
+ '<%= config.bin %> <%= command.id %> "Bug Report"',
10
+ '<%= config.bin %> <%= command.id %> "Feature Request" -d "Template for new features"',
11
+ '<%= config.bin %> <%= command.id %> "Task" --title-pattern "[TASK] " --priority P2',
12
+ ];
13
+ static args = {
14
+ name: Args.string({
15
+ description: 'Template name',
16
+ required: false,
17
+ }),
18
+ };
19
+ static flags = {
20
+ ...pmoBaseFlags,
21
+ description: Flags.string({
22
+ char: 'd',
23
+ description: 'Template description',
24
+ }),
25
+ 'title-pattern': Flags.string({
26
+ description: 'Default title prefix/pattern (e.g., "[BUG] ")',
27
+ }),
28
+ priority: Flags.string({
29
+ char: 'p',
30
+ description: 'Default priority',
31
+ options: [...PRIORITIES],
32
+ }),
33
+ category: Flags.string({
34
+ char: 'c',
35
+ description: 'Default category',
36
+ options: [...TICKET_CATEGORIES],
37
+ }),
38
+ };
39
+ getPMOOptions() {
40
+ return { promptIfMultiple: false };
41
+ }
42
+ async execute() {
43
+ const { args, flags } = await this.parse(TicketTemplateCreate);
44
+ // Get template name
45
+ let name = args.name;
46
+ if (!name) {
47
+ const { templateName } = await inquirer.prompt([{
48
+ type: 'input',
49
+ name: 'templateName',
50
+ message: 'Template name:',
51
+ validate: (input) => input.length > 0 || 'Name is required',
52
+ }]);
53
+ name = templateName;
54
+ }
55
+ // Get description if not provided
56
+ let description = flags.description;
57
+ if (description === undefined) {
58
+ const { templateDescription } = await inquirer.prompt([{
59
+ type: 'input',
60
+ name: 'templateDescription',
61
+ message: 'Description (optional):',
62
+ }]);
63
+ description = templateDescription || undefined;
64
+ }
65
+ // Get title pattern
66
+ let titlePattern = flags['title-pattern'];
67
+ if (titlePattern === undefined) {
68
+ const { pattern } = await inquirer.prompt([{
69
+ type: 'input',
70
+ name: 'pattern',
71
+ message: 'Title prefix/pattern (optional, e.g., "[BUG] "):',
72
+ }]);
73
+ titlePattern = pattern || undefined;
74
+ }
75
+ // Get default priority
76
+ let priority = flags.priority;
77
+ if (priority === undefined) {
78
+ const { selectedPriority } = await inquirer.prompt([{
79
+ type: 'list',
80
+ name: 'selectedPriority',
81
+ message: 'Default priority:',
82
+ choices: [
83
+ { name: 'None', value: '' },
84
+ ...PRIORITIES.map(p => ({ name: PRIORITY_LABELS[p], value: p })),
85
+ ],
86
+ }]);
87
+ priority = selectedPriority || undefined;
88
+ }
89
+ // Get default category
90
+ let category = flags.category;
91
+ if (category === undefined) {
92
+ const { selectedCategory } = await inquirer.prompt([{
93
+ type: 'list',
94
+ name: 'selectedCategory',
95
+ message: 'Default category:',
96
+ choices: [
97
+ { name: 'None', value: '' },
98
+ ...TICKET_CATEGORIES.map(c => ({ name: c, value: c })),
99
+ ],
100
+ }]);
101
+ category = selectedCategory || undefined;
102
+ }
103
+ // Ask about description template
104
+ const { wantDescriptionTemplate } = await inquirer.prompt([{
105
+ type: 'list',
106
+ name: 'wantDescriptionTemplate',
107
+ message: 'Add a description template?',
108
+ choices: [
109
+ { name: 'No', value: false },
110
+ { name: 'Yes', value: true },
111
+ ],
112
+ }]);
113
+ let descriptionTemplate;
114
+ if (wantDescriptionTemplate) {
115
+ const { template } = await inquirer.prompt([{
116
+ type: 'editor',
117
+ name: 'template',
118
+ message: 'Description template (opens editor):',
119
+ default: `## Summary\n\n## Details\n\n## Acceptance Criteria\n- [ ] \n`,
120
+ }]);
121
+ descriptionTemplate = template || undefined;
122
+ }
123
+ // Ask about default subtasks
124
+ const subtasks = [];
125
+ const { wantSubtasks } = await inquirer.prompt([{
126
+ type: 'list',
127
+ name: 'wantSubtasks',
128
+ message: 'Add default subtasks?',
129
+ choices: [
130
+ { name: 'No', value: false },
131
+ { name: 'Yes', value: true },
132
+ ],
133
+ }]);
134
+ if (wantSubtasks) {
135
+ let addMore = true;
136
+ while (addMore) {
137
+ const { subtaskTitle } = await inquirer.prompt([{
138
+ type: 'input',
139
+ name: 'subtaskTitle',
140
+ message: 'Subtask title:',
141
+ validate: (input) => input.length > 0 || 'Title is required',
142
+ }]);
143
+ subtasks.push(subtaskTitle);
144
+ const { another } = await inquirer.prompt([{
145
+ type: 'list',
146
+ name: 'another',
147
+ message: 'Add another subtask?',
148
+ choices: [
149
+ { name: 'No', value: false },
150
+ { name: 'Yes', value: true },
151
+ ],
152
+ }]);
153
+ addMore = another;
154
+ }
155
+ }
156
+ // Show preview
157
+ this.log(`\n${styles.emphasis('Template Preview:')}`);
158
+ this.log(styles.muted(` Name: ${name}`));
159
+ if (description) {
160
+ this.log(styles.muted(` Description: ${description}`));
161
+ }
162
+ if (titlePattern) {
163
+ this.log(styles.muted(` Title pattern: ${titlePattern}`));
164
+ }
165
+ if (priority) {
166
+ this.log(styles.muted(` Default priority: ${PRIORITY_LABELS[priority] || priority}`));
167
+ }
168
+ if (category) {
169
+ this.log(styles.muted(` Default category: ${category}`));
170
+ }
171
+ if (descriptionTemplate) {
172
+ this.log(styles.muted(` Description template: (custom)`));
173
+ }
174
+ if (subtasks.length > 0) {
175
+ this.log(styles.muted(` Default subtasks:`));
176
+ for (const subtask of subtasks) {
177
+ this.log(styles.muted(` - ${subtask}`));
178
+ }
179
+ }
180
+ // Confirm creation
181
+ const { confirm } = await inquirer.prompt([{
182
+ type: 'list',
183
+ name: 'confirm',
184
+ message: 'Create this template?',
185
+ choices: [
186
+ { name: 'Yes', value: true },
187
+ { name: 'No', value: false },
188
+ ],
189
+ }]);
190
+ if (!confirm) {
191
+ this.log(styles.muted('Cancelled.'));
192
+ return;
193
+ }
194
+ // Create the template
195
+ const template = await this.storage.createTicketTemplate({
196
+ name: name,
197
+ description,
198
+ titlePattern,
199
+ defaultPriority: priority,
200
+ defaultCategory: category,
201
+ descriptionTemplate,
202
+ suggestedSubtasks: subtasks.map(title => ({ title })),
203
+ defaultLabels: [],
204
+ });
205
+ this.log(styles.success(`\nCreated template "${styles.emphasis(template.name)}"`));
206
+ this.log(styles.muted(` ID: ${template.id}`));
207
+ this.log('');
208
+ this.log(styles.muted(`Create ticket from template: prlt ticket template apply ${template.id}`));
209
+ }
210
+ }
@@ -0,0 +1,17 @@
1
+ import { PMOCommand } from '../../../lib/pmo/index.js';
2
+ export default class TicketTemplateDelete 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
+ json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
10
+ force: import("@oclif/core/interfaces").BooleanFlag<boolean>;
11
+ project: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
12
+ };
13
+ protected getPMOOptions(): {
14
+ promptIfMultiple: boolean;
15
+ };
16
+ execute(): Promise<void>;
17
+ }
@@ -0,0 +1,92 @@
1
+ import { Flags, Args } from '@oclif/core';
2
+ import inquirer from 'inquirer';
3
+ import { PMOCommand, pmoBaseFlags } from '../../../lib/pmo/index.js';
4
+ import { styles } from '../../../lib/styles.js';
5
+ import { shouldOutputJson, outputErrorAsJson, createMetadata, } from '../../../lib/prompt-json.js';
6
+ export default class TicketTemplateDelete extends PMOCommand {
7
+ static description = 'Delete a ticket template';
8
+ static examples = [
9
+ '<%= config.bin %> <%= command.id %> my-template',
10
+ '<%= config.bin %> <%= command.id %> my-template --force',
11
+ ];
12
+ static args = {
13
+ id: Args.string({
14
+ description: 'Template ID to delete',
15
+ required: false,
16
+ }),
17
+ };
18
+ static flags = {
19
+ ...pmoBaseFlags,
20
+ json: Flags.boolean({
21
+ description: 'Output prompt configuration as JSON (for AI agents/scripts)',
22
+ default: false,
23
+ }),
24
+ force: Flags.boolean({
25
+ char: 'f',
26
+ description: 'Skip confirmation',
27
+ default: false,
28
+ }),
29
+ };
30
+ getPMOOptions() {
31
+ return { promptIfMultiple: false };
32
+ }
33
+ async execute() {
34
+ const { args, flags } = await this.parse(TicketTemplateDelete);
35
+ // Check if JSON output mode is active
36
+ const jsonMode = shouldOutputJson(flags);
37
+ // Helper to handle errors in JSON mode
38
+ const handleError = (code, message) => {
39
+ if (jsonMode) {
40
+ outputErrorAsJson(code, message, createMetadata('ticket template delete', flags));
41
+ this.exit(1);
42
+ }
43
+ this.error(message);
44
+ };
45
+ // Get template - prompt for selection if not provided
46
+ let templateId = args.id;
47
+ if (!templateId) {
48
+ const templates = await this.storage.listTicketTemplates();
49
+ const deletableTemplates = templates.filter(t => !t.isBuiltin);
50
+ if (deletableTemplates.length === 0) {
51
+ return handleError('NO_TEMPLATES', `No deletable ticket templates found (built-in templates cannot be deleted).`);
52
+ }
53
+ const { selectedTemplate } = await inquirer.prompt([{
54
+ type: 'list',
55
+ name: 'selectedTemplate',
56
+ message: 'Select a template to delete:',
57
+ choices: deletableTemplates.map(t => ({
58
+ name: `${t.name}${t.description ? ` - ${t.description}` : ''}`,
59
+ value: t.id,
60
+ })),
61
+ }]);
62
+ templateId = selectedTemplate;
63
+ }
64
+ const template = await this.storage.getTicketTemplate(templateId);
65
+ if (!template) {
66
+ return handleError('TEMPLATE_NOT_FOUND', `Template "${templateId}" not found.\nRun 'prlt ticket template list' to see available templates.`);
67
+ }
68
+ if (template.isBuiltin) {
69
+ return handleError('CANNOT_DELETE_BUILTIN', 'Cannot delete built-in templates.');
70
+ }
71
+ if (!flags.force) {
72
+ const confirmChoices = [
73
+ { id: 'no', name: 'No, cancel' },
74
+ { id: 'yes', name: `Yes, delete "${template.name}"` },
75
+ ];
76
+ const confirm = await this.selectFromList({
77
+ message: `Delete template "${template.name}"?`,
78
+ items: confirmChoices,
79
+ getName: (c) => c.name,
80
+ getValue: (c) => c.id,
81
+ getCommand: (c) => c.id === 'yes' ? `prlt ticket template delete ${templateId} --force` : '',
82
+ jsonMode: jsonMode ? { flags, commandName: 'ticket template delete' } : null,
83
+ });
84
+ if (confirm !== 'yes') {
85
+ this.log(styles.muted('Cancelled.'));
86
+ return;
87
+ }
88
+ }
89
+ await this.storage.deleteTicketTemplate(templateId);
90
+ this.log(styles.success(`\nDeleted template "${template.name}"`));
91
+ }
92
+ }
@@ -0,0 +1,15 @@
1
+ import { PMOCommand } from '../../../lib/pmo/index.js';
2
+ export default class TicketTemplateIndex extends PMOCommand {
3
+ static description: string;
4
+ static aliases: string[];
5
+ static examples: string[];
6
+ static flags: {
7
+ json: 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
+ private selectTemplate;
15
+ }
@@ -0,0 +1,118 @@
1
+ import { Flags } from '@oclif/core';
2
+ import inquirer from 'inquirer';
3
+ import { PMOCommand, pmoBaseFlags } from '../../../lib/pmo/index.js';
4
+ import { styles } from '../../../lib/styles.js';
5
+ import { shouldOutputJson, } from '../../../lib/prompt-json.js';
6
+ export default class TicketTemplateIndex extends PMOCommand {
7
+ static description = 'Interactive menu for ticket template operations';
8
+ static aliases = ['ticket:templates'];
9
+ static examples = [
10
+ '<%= config.bin %> <%= command.id %>',
11
+ ];
12
+ static flags = {
13
+ ...pmoBaseFlags,
14
+ json: Flags.boolean({
15
+ description: 'Output prompt configuration as JSON (for AI agents/scripts)',
16
+ default: false,
17
+ }),
18
+ };
19
+ getPMOOptions() {
20
+ return { promptIfMultiple: false };
21
+ }
22
+ async execute() {
23
+ const { flags } = await this.parse(TicketTemplateIndex);
24
+ // Check if JSON output mode is active
25
+ const jsonMode = shouldOutputJson(flags);
26
+ // Define choices once, use for both JSON and interactive modes
27
+ const menuChoices = [
28
+ { id: 'list', name: 'List available templates', command: 'prlt ticket template list --format json' },
29
+ { id: 'create', name: 'Create new template', command: 'prlt ticket template create --json' },
30
+ { id: 'apply', name: 'Create ticket from template', command: 'prlt ticket template apply --json' },
31
+ { id: 'save', name: 'Save ticket as template', command: 'prlt ticket template save --json' },
32
+ { id: 'delete', name: 'Delete template', command: 'prlt ticket template delete --json' },
33
+ { id: 'cancel', name: 'Cancel', command: '' },
34
+ ];
35
+ const message = 'Ticket Templates - What would you like to do?';
36
+ const action = await this.selectFromList({
37
+ message: 'šŸ“‹ ' + message,
38
+ items: menuChoices,
39
+ getName: (c) => c.name,
40
+ getValue: (c) => c.id,
41
+ getCommand: (c) => c.command,
42
+ jsonMode: jsonMode ? { flags, commandName: 'ticket template' } : null,
43
+ });
44
+ if (action === 'cancel' || !action) {
45
+ return;
46
+ }
47
+ // Run the selected subcommand
48
+ switch (action) {
49
+ case 'list':
50
+ await this.config.runCommand('ticket:template:list', []);
51
+ break;
52
+ case 'create':
53
+ await this.config.runCommand('ticket:template:create', []);
54
+ break;
55
+ case 'apply': {
56
+ const templateId = await this.selectTemplate('Select template to use:');
57
+ if (templateId) {
58
+ await this.config.runCommand('ticket:template:apply', [templateId, '--interactive']);
59
+ }
60
+ break;
61
+ }
62
+ case 'save': {
63
+ // Prompt for ticket ID and template name
64
+ const saveAnswers = await inquirer.prompt([
65
+ {
66
+ type: 'input',
67
+ name: 'ticketId',
68
+ message: 'Ticket ID to save as template:',
69
+ validate: (input) => input.length > 0 || 'Ticket ID is required',
70
+ },
71
+ {
72
+ type: 'input',
73
+ name: 'name',
74
+ message: 'Template name:',
75
+ validate: (input) => input.length > 0 || 'Name is required',
76
+ },
77
+ ]);
78
+ await this.config.runCommand('ticket:template:save', [saveAnswers.ticketId, saveAnswers.name]);
79
+ break;
80
+ }
81
+ case 'delete': {
82
+ const customTemplates = (await this.storage.listTicketTemplates()).filter(t => !t.isBuiltin);
83
+ if (customTemplates.length === 0) {
84
+ this.log(styles.muted('No custom templates to delete. Built-in templates cannot be deleted.'));
85
+ return;
86
+ }
87
+ const templateId = await this.selectTemplate('Select template to delete:', true);
88
+ if (templateId) {
89
+ await this.config.runCommand('ticket:template:delete', [templateId]);
90
+ }
91
+ break;
92
+ }
93
+ }
94
+ }
95
+ async selectTemplate(message, customOnly = false) {
96
+ let templates = await this.storage.listTicketTemplates();
97
+ if (customOnly) {
98
+ templates = templates.filter(t => !t.isBuiltin);
99
+ }
100
+ if (templates.length === 0) {
101
+ this.log(styles.muted('No templates found.'));
102
+ return null;
103
+ }
104
+ const templateChoices = templates.map(t => ({
105
+ id: t.id,
106
+ name: `${t.name} (${t.id})${t.isBuiltin ? '' : ' [custom]'}`,
107
+ }));
108
+ const selected = await this.selectFromList({
109
+ message,
110
+ items: templateChoices,
111
+ getName: (t) => t.name,
112
+ getValue: (t) => t.id,
113
+ getCommand: (t) => `prlt ticket template apply ${t.id} --json`,
114
+ allowCancel: true,
115
+ });
116
+ return selected;
117
+ }
118
+ }
@@ -0,0 +1,16 @@
1
+ import { PMOCommand } from '../../../lib/pmo/index.js';
2
+ export default class TicketTemplateList extends PMOCommand {
3
+ static description: string;
4
+ static examples: string[];
5
+ static flags: {
6
+ builtin: import("@oclif/core/interfaces").BooleanFlag<boolean>;
7
+ custom: import("@oclif/core/interfaces").BooleanFlag<boolean>;
8
+ json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
9
+ project: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
10
+ };
11
+ protected getPMOOptions(): {
12
+ promptIfMultiple: boolean;
13
+ };
14
+ execute(): Promise<void>;
15
+ private printTemplate;
16
+ }
@@ -0,0 +1,110 @@
1
+ import { Flags } from '@oclif/core';
2
+ import { PMOCommand, pmoBaseFlags } from '../../../lib/pmo/index.js';
3
+ import { styles } from '../../../lib/styles.js';
4
+ export default class TicketTemplateList extends PMOCommand {
5
+ static description = 'List available ticket templates';
6
+ static examples = [
7
+ '<%= config.bin %> <%= command.id %>',
8
+ '<%= config.bin %> <%= command.id %> --builtin # Only built-in templates',
9
+ '<%= config.bin %> <%= command.id %> --custom # Only custom templates',
10
+ '<%= config.bin %> <%= command.id %> --json # Output as JSON',
11
+ ];
12
+ static flags = {
13
+ ...pmoBaseFlags,
14
+ builtin: Flags.boolean({
15
+ description: 'Show only built-in templates',
16
+ exclusive: ['custom'],
17
+ }),
18
+ custom: Flags.boolean({
19
+ description: 'Show only custom templates',
20
+ exclusive: ['builtin'],
21
+ }),
22
+ json: Flags.boolean({
23
+ description: 'Output as JSON',
24
+ default: false,
25
+ }),
26
+ };
27
+ getPMOOptions() {
28
+ return { promptIfMultiple: false };
29
+ }
30
+ async execute() {
31
+ const { flags } = await this.parse(TicketTemplateList);
32
+ let filter;
33
+ if (flags.builtin)
34
+ filter = { isBuiltin: true };
35
+ if (flags.custom)
36
+ filter = { isBuiltin: false };
37
+ const templates = await this.storage.listTicketTemplates(filter);
38
+ if (flags.json) {
39
+ this.log(JSON.stringify(templates, null, 2));
40
+ return;
41
+ }
42
+ if (templates.length === 0) {
43
+ this.log(styles.muted('\nNo ticket templates found.'));
44
+ this.log(styles.muted('Create one: prlt ticket template save <ticket-id> "Template Name"'));
45
+ return;
46
+ }
47
+ this.log(`\nšŸ“‹ ${styles.emphasis('Ticket Templates')}`);
48
+ this.log('═'.repeat(60));
49
+ // Group by builtin vs custom
50
+ const builtinTemplates = templates.filter(t => t.isBuiltin);
51
+ const customTemplates = templates.filter(t => !t.isBuiltin);
52
+ if (builtinTemplates.length > 0 && !flags.custom) {
53
+ this.log(`\n${styles.emphasis('Built-in Templates')}`);
54
+ this.log('─'.repeat(40));
55
+ for (const template of builtinTemplates) {
56
+ this.printTemplate(template);
57
+ }
58
+ }
59
+ if (customTemplates.length > 0 && !flags.builtin) {
60
+ this.log(`\n${styles.emphasis('Custom Templates')}`);
61
+ this.log('─'.repeat(40));
62
+ for (const template of customTemplates) {
63
+ this.printTemplate(template);
64
+ }
65
+ }
66
+ this.log('');
67
+ this.log(styles.muted('Create ticket from template: prlt ticket template apply <template-id>'));
68
+ this.log('');
69
+ }
70
+ printTemplate(template) {
71
+ this.log(`\n ${styles.emphasis(template.name)} ${styles.muted(`(${template.id})`)}`);
72
+ if (template.description) {
73
+ this.log(` ${styles.muted(template.description)}`);
74
+ }
75
+ // Show template details - first line
76
+ const details = [];
77
+ if (template.defaultPriority) {
78
+ details.push(`Priority: ${template.defaultPriority}`);
79
+ }
80
+ if (template.defaultCategory) {
81
+ details.push(`Category: ${template.defaultCategory}`);
82
+ }
83
+ if (template.suggestedSubtasks.length > 0) {
84
+ details.push(`Subtasks: ${template.suggestedSubtasks.length}`);
85
+ }
86
+ if (details.length > 0) {
87
+ this.log(` ${styles.muted(details.join(' | '))}`);
88
+ }
89
+ // Show additional details - second line
90
+ const details2 = [];
91
+ if (template.defaultStatusId) {
92
+ details2.push(`Status: ${template.defaultStatusId}`);
93
+ }
94
+ if (template.defaultAssignee) {
95
+ details2.push(`Assignee: ${template.defaultAssignee}`);
96
+ }
97
+ if (template.defaultOwner) {
98
+ details2.push(`Owner: ${template.defaultOwner}`);
99
+ }
100
+ if (template.defaultLabels && template.defaultLabels.length > 0) {
101
+ details2.push(`Labels: ${template.defaultLabels.join(', ')}`);
102
+ }
103
+ if (details2.length > 0) {
104
+ this.log(` ${styles.muted(details2.join(' | '))}`);
105
+ }
106
+ if (template.titlePattern) {
107
+ this.log(` ${styles.muted(`Title: "${template.titlePattern}"`)}`);
108
+ }
109
+ }
110
+ }
@@ -0,0 +1,14 @@
1
+ import { PMOCommand } from '../../../lib/pmo/index.js';
2
+ export default class TicketTemplateSave extends PMOCommand {
3
+ static description: string;
4
+ static examples: string[];
5
+ static args: {
6
+ ticket: import("@oclif/core/interfaces").Arg<string | undefined, Record<string, unknown>>;
7
+ name: import("@oclif/core/interfaces").Arg<string | undefined, Record<string, unknown>>;
8
+ };
9
+ static flags: {
10
+ description: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
11
+ project: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
12
+ };
13
+ execute(): Promise<void>;
14
+ }