@proletariat/cli 0.3.33 → 0.3.35

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 (404) hide show
  1. package/dist/commands/action/create.d.ts +1 -0
  2. package/dist/commands/action/delete.d.ts +1 -0
  3. package/dist/commands/action/index.d.ts +1 -0
  4. package/dist/commands/action/list.d.ts +1 -0
  5. package/dist/commands/action/list.js +0 -6
  6. package/dist/commands/action/run.d.ts +1 -0
  7. package/dist/commands/action/show.d.ts +1 -0
  8. package/dist/commands/action/update.d.ts +1 -0
  9. package/dist/commands/agent/auth.d.ts +5 -2
  10. package/dist/commands/agent/auth.js +10 -17
  11. package/dist/commands/agent/cleanup.d.ts +2 -1
  12. package/dist/commands/agent/cleanup.js +0 -6
  13. package/dist/commands/agent/discover.d.ts +2 -1
  14. package/dist/commands/agent/discover.js +2 -6
  15. package/dist/commands/agent/index.d.ts +1 -0
  16. package/dist/commands/agent/index.js +11 -9
  17. package/dist/commands/agent/list.d.ts +1 -0
  18. package/dist/commands/agent/login.d.ts +1 -0
  19. package/dist/commands/agent/login.js +1 -7
  20. package/dist/commands/agent/rebuild.d.ts +2 -1
  21. package/dist/commands/agent/rebuild.js +0 -6
  22. package/dist/commands/agent/remove.d.ts +2 -1
  23. package/dist/commands/agent/remove.js +0 -6
  24. package/dist/commands/agent/restart.d.ts +1 -0
  25. package/dist/commands/agent/restart.js +1 -7
  26. package/dist/commands/agent/shell.d.ts +1 -0
  27. package/dist/commands/agent/shell.js +1 -7
  28. package/dist/commands/agent/staff/add.d.ts +1 -0
  29. package/dist/commands/agent/staff/add.js +1 -0
  30. package/dist/commands/agent/staff/index.d.ts +15 -0
  31. package/dist/commands/agent/staff/index.js +83 -0
  32. package/dist/commands/agent/staff/list.d.ts +1 -0
  33. package/dist/commands/agent/staff/list.js +1 -0
  34. package/dist/commands/agent/staff/remove.d.ts +1 -0
  35. package/dist/commands/agent/staff/remove.js +1 -0
  36. package/dist/commands/agent/status.d.ts +1 -0
  37. package/dist/commands/agent/status.js +1 -7
  38. package/dist/commands/agent/themes/add-names.d.ts +1 -0
  39. package/dist/commands/agent/themes/add-names.js +1 -0
  40. package/dist/commands/agent/themes/create.d.ts +1 -0
  41. package/dist/commands/agent/themes/create.js +1 -0
  42. package/dist/commands/agent/themes/index.d.ts +10 -0
  43. package/dist/commands/agent/themes/index.js +144 -0
  44. package/dist/commands/agent/themes/list.d.ts +1 -0
  45. package/dist/commands/agent/themes/list.js +1 -0
  46. package/dist/commands/agent/themes/set.d.ts +1 -0
  47. package/dist/commands/agent/themes/set.js +1 -0
  48. package/dist/commands/agent/visit.d.ts +1 -0
  49. package/dist/commands/agent/visit.js +1 -7
  50. package/dist/commands/agents/themes/add-names.d.ts +1 -0
  51. package/dist/commands/agents/themes/add-names.js +1 -0
  52. package/dist/commands/agents/themes/create.d.ts +1 -0
  53. package/dist/commands/agents/themes/create.js +1 -0
  54. package/dist/commands/agents/themes/list.d.ts +1 -0
  55. package/dist/commands/agents/themes/list.js +1 -0
  56. package/dist/commands/autocomplete/setup.d.ts +1 -0
  57. package/dist/commands/board/index.d.ts +1 -0
  58. package/dist/commands/board/view.d.ts +1 -0
  59. package/dist/commands/board/watch.d.ts +1 -0
  60. package/dist/commands/branch/create.d.ts +1 -0
  61. package/dist/commands/branch/create.js +0 -6
  62. package/dist/commands/branch/index.d.ts +1 -0
  63. package/dist/commands/branch/index.js +0 -7
  64. package/dist/commands/branch/list.d.ts +1 -0
  65. package/dist/commands/branch/validate.d.ts +1 -0
  66. package/dist/commands/branch/where.d.ts +1 -0
  67. package/dist/commands/branch/where.js +3 -9
  68. package/dist/commands/category/create.d.ts +1 -0
  69. package/dist/commands/category/delete.d.ts +1 -0
  70. package/dist/commands/category/index.d.ts +1 -0
  71. package/dist/commands/category/list.d.ts +1 -0
  72. package/dist/commands/category/list.js +2 -2
  73. package/dist/commands/category/rename.d.ts +1 -0
  74. package/dist/commands/claude.d.ts +2 -1
  75. package/dist/commands/claude.js +2 -6
  76. package/dist/commands/commit.d.ts +2 -1
  77. package/dist/commands/commit.js +2 -6
  78. package/dist/commands/config/index.d.ts +2 -1
  79. package/dist/commands/config/index.js +3 -7
  80. package/dist/commands/diet.d.ts +1 -0
  81. package/dist/commands/docker/clean.d.ts +1 -0
  82. package/dist/commands/docker/index.d.ts +1 -0
  83. package/dist/commands/docker/list.d.ts +1 -0
  84. package/dist/commands/docker/logs.d.ts +2 -0
  85. package/dist/commands/docker/logs.js +2 -0
  86. package/dist/commands/docker/prune.d.ts +1 -0
  87. package/dist/commands/docker/restart.d.ts +1 -0
  88. package/dist/commands/docker/shell.d.ts +2 -0
  89. package/dist/commands/docker/shell.js +2 -0
  90. package/dist/commands/docker/start.d.ts +2 -0
  91. package/dist/commands/docker/start.js +2 -0
  92. package/dist/commands/docker/status.d.ts +1 -0
  93. package/dist/commands/docker/stop.d.ts +1 -0
  94. package/dist/commands/epic/activate.d.ts +1 -0
  95. package/dist/commands/epic/activate.js +1 -7
  96. package/dist/commands/epic/archive.d.ts +2 -1
  97. package/dist/commands/epic/archive.js +0 -6
  98. package/dist/commands/epic/create.d.ts +2 -1
  99. package/dist/commands/epic/create.js +0 -6
  100. package/dist/commands/epic/delete.d.ts +1 -0
  101. package/dist/commands/epic/index.d.ts +1 -0
  102. package/dist/commands/epic/index.js +0 -7
  103. package/dist/commands/epic/list.d.ts +1 -0
  104. package/dist/commands/epic/move.d.ts +2 -1
  105. package/dist/commands/epic/move.js +0 -6
  106. package/dist/commands/epic/progress.d.ts +2 -1
  107. package/dist/commands/epic/progress.js +0 -6
  108. package/dist/commands/epic/project.d.ts +2 -1
  109. package/dist/commands/epic/project.js +0 -6
  110. package/dist/commands/epic/reorder.d.ts +1 -0
  111. package/dist/commands/epic/reorder.js +0 -6
  112. package/dist/commands/epic/spec.d.ts +2 -1
  113. package/dist/commands/epic/spec.js +0 -6
  114. package/dist/commands/epic/ticket.d.ts +2 -1
  115. package/dist/commands/epic/ticket.js +0 -6
  116. package/dist/commands/epic/view.d.ts +1 -0
  117. package/dist/commands/epic/view.js +1 -7
  118. package/dist/commands/execution/config.d.ts +2 -1
  119. package/dist/commands/execution/config.js +1 -7
  120. package/dist/commands/execution/index.d.ts +1 -0
  121. package/dist/commands/execution/index.js +1 -8
  122. package/dist/commands/execution/list.d.ts +1 -0
  123. package/dist/commands/execution/logs.d.ts +1 -0
  124. package/dist/commands/execution/logs.js +1 -7
  125. package/dist/commands/execution/stop.d.ts +1 -0
  126. package/dist/commands/execution/stop.js +1 -7
  127. package/dist/commands/execution/view.d.ts +1 -0
  128. package/dist/commands/execution/view.js +2 -8
  129. package/dist/commands/feedback/index.d.ts +1 -0
  130. package/dist/commands/feedback/list.d.ts +1 -0
  131. package/dist/commands/feedback/submit.d.ts +1 -0
  132. package/dist/commands/feedback/view.d.ts +1 -0
  133. package/dist/commands/gh/index.d.ts +1 -0
  134. package/dist/commands/gh/login.d.ts +1 -0
  135. package/dist/commands/gh/status.d.ts +1 -0
  136. package/dist/commands/gh/token.d.ts +1 -0
  137. package/dist/commands/init.d.ts +2 -1
  138. package/dist/commands/init.js +3 -8
  139. package/dist/commands/label/create.d.ts +20 -0
  140. package/dist/commands/label/create.js +56 -0
  141. package/dist/commands/label/delete.d.ts +17 -0
  142. package/dist/commands/label/delete.js +31 -0
  143. package/dist/commands/label/group/create.d.ts +20 -0
  144. package/dist/commands/label/group/create.js +54 -0
  145. package/dist/commands/label/group/list.d.ts +14 -0
  146. package/dist/commands/label/group/list.js +51 -0
  147. package/dist/commands/label/index.d.ts +15 -0
  148. package/dist/commands/label/index.js +58 -0
  149. package/dist/commands/label/list.d.ts +16 -0
  150. package/dist/commands/label/list.js +82 -0
  151. package/dist/commands/link/create.d.ts +1 -0
  152. package/dist/commands/link/create.js +0 -6
  153. package/dist/commands/link/index.d.ts +1 -0
  154. package/dist/commands/link/index.js +1 -7
  155. package/dist/commands/link/list.d.ts +1 -0
  156. package/dist/commands/link/list.js +3 -8
  157. package/dist/commands/link/remove.d.ts +1 -0
  158. package/dist/commands/link/remove.js +0 -6
  159. package/dist/commands/mcp-server.js +2 -1
  160. package/dist/commands/phase/create.d.ts +1 -0
  161. package/dist/commands/phase/create.js +1 -1
  162. package/dist/commands/phase/delete.d.ts +1 -0
  163. package/dist/commands/phase/delete.js +1 -1
  164. package/dist/commands/phase/list.d.ts +1 -0
  165. package/dist/commands/phase/move.d.ts +1 -0
  166. package/dist/commands/phase/move.js +2 -2
  167. package/dist/commands/phase/template/apply.d.ts +26 -0
  168. package/dist/commands/phase/template/apply.js +14 -0
  169. package/dist/commands/phase/template/create.d.ts +23 -0
  170. package/dist/commands/phase/template/create.js +14 -0
  171. package/dist/commands/phase/template/delete.d.ts +18 -0
  172. package/dist/commands/phase/template/delete.js +61 -0
  173. package/dist/commands/phase/template/list.d.ts +17 -0
  174. package/dist/commands/phase/template/list.js +88 -0
  175. package/dist/commands/phase/template/update.d.ts +1 -0
  176. package/dist/commands/phase/template/update.js +1 -0
  177. package/dist/commands/phase/update.d.ts +1 -0
  178. package/dist/commands/phase/update.js +2 -2
  179. package/dist/commands/pmo/init.d.ts +4 -3
  180. package/dist/commands/pmo/init.js +2 -7
  181. package/dist/commands/pr/create.d.ts +1 -0
  182. package/dist/commands/pr/index.d.ts +1 -0
  183. package/dist/commands/pr/link.d.ts +1 -0
  184. package/dist/commands/pr/list.d.ts +1 -0
  185. package/dist/commands/pr/status.d.ts +1 -0
  186. package/dist/commands/priority/add.d.ts +1 -0
  187. package/dist/commands/priority/add.js +1 -1
  188. package/dist/commands/priority/list.d.ts +1 -0
  189. package/dist/commands/priority/remove.d.ts +1 -0
  190. package/dist/commands/priority/set.d.ts +1 -0
  191. package/dist/commands/project/archive.d.ts +1 -0
  192. package/dist/commands/project/create.d.ts +1 -0
  193. package/dist/commands/project/delete.d.ts +1 -0
  194. package/dist/commands/project/index.d.ts +1 -0
  195. package/dist/commands/project/list.d.ts +1 -0
  196. package/dist/commands/project/spec.d.ts +1 -0
  197. package/dist/commands/project/unarchive.d.ts +1 -0
  198. package/dist/commands/project/update.d.ts +1 -0
  199. package/dist/commands/project/update.js +0 -2
  200. package/dist/commands/project/view.d.ts +1 -0
  201. package/dist/commands/pull.d.ts +1 -0
  202. package/dist/commands/repo/add.d.ts +1 -0
  203. package/dist/commands/repo/add.js +0 -6
  204. package/dist/commands/repo/create.d.ts +1 -0
  205. package/dist/commands/repo/index.d.ts +1 -0
  206. package/dist/commands/repo/list.d.ts +1 -0
  207. package/dist/commands/repo/remove.d.ts +1 -0
  208. package/dist/commands/repo/view.d.ts +1 -0
  209. package/dist/commands/roadmap/add-project.d.ts +1 -0
  210. package/dist/commands/roadmap/add-project.js +0 -6
  211. package/dist/commands/roadmap/create.d.ts +1 -0
  212. package/dist/commands/roadmap/create.js +0 -6
  213. package/dist/commands/roadmap/delete.d.ts +1 -0
  214. package/dist/commands/roadmap/delete.js +0 -6
  215. package/dist/commands/roadmap/generate.d.ts +1 -0
  216. package/dist/commands/roadmap/generate.js +1 -8
  217. package/dist/commands/roadmap/index.d.ts +1 -0
  218. package/dist/commands/roadmap/index.js +0 -7
  219. package/dist/commands/roadmap/list.d.ts +1 -0
  220. package/dist/commands/roadmap/remove-project.d.ts +1 -0
  221. package/dist/commands/roadmap/remove-project.js +0 -6
  222. package/dist/commands/roadmap/reorder.d.ts +1 -0
  223. package/dist/commands/roadmap/reorder.js +0 -6
  224. package/dist/commands/roadmap/update.d.ts +1 -0
  225. package/dist/commands/roadmap/update.js +0 -6
  226. package/dist/commands/roadmap/view.d.ts +1 -0
  227. package/dist/commands/roadmap/view.js +1 -7
  228. package/dist/commands/session/attach.d.ts +2 -1
  229. package/dist/commands/session/attach.js +0 -6
  230. package/dist/commands/session/health.d.ts +1 -0
  231. package/dist/commands/session/health.js +1 -1
  232. package/dist/commands/session/index.d.ts +1 -0
  233. package/dist/commands/session/index.js +0 -7
  234. package/dist/commands/session/list.d.ts +1 -0
  235. package/dist/commands/spec/create.d.ts +1 -0
  236. package/dist/commands/spec/delete.d.ts +1 -0
  237. package/dist/commands/spec/edit.d.ts +1 -0
  238. package/dist/commands/spec/index.d.ts +1 -0
  239. package/dist/commands/spec/link/depends.d.ts +18 -0
  240. package/dist/commands/spec/link/depends.js +86 -0
  241. package/dist/commands/spec/link/index.d.ts +17 -0
  242. package/dist/commands/spec/link/index.js +92 -0
  243. package/dist/commands/spec/link/remove.d.ts +18 -0
  244. package/dist/commands/spec/link/remove.js +90 -0
  245. package/dist/commands/spec/list.d.ts +1 -0
  246. package/dist/commands/spec/plan.d.ts +1 -0
  247. package/dist/commands/spec/ticket.d.ts +1 -0
  248. package/dist/commands/spec/view.d.ts +1 -0
  249. package/dist/commands/staff/add.d.ts +3 -2
  250. package/dist/commands/staff/add.js +2 -6
  251. package/dist/commands/staff/index.d.ts +2 -1
  252. package/dist/commands/staff/index.js +0 -6
  253. package/dist/commands/staff/list.d.ts +1 -0
  254. package/dist/commands/staff/remove.d.ts +2 -1
  255. package/dist/commands/staff/remove.js +0 -6
  256. package/dist/commands/status/category.d.ts +1 -0
  257. package/dist/commands/status/create.d.ts +1 -0
  258. package/dist/commands/status/delete.d.ts +1 -0
  259. package/dist/commands/status/index.d.ts +1 -0
  260. package/dist/commands/status/list.d.ts +1 -0
  261. package/dist/commands/status/move.d.ts +1 -0
  262. package/dist/commands/status/update.d.ts +1 -0
  263. package/dist/commands/support/book.d.ts +1 -0
  264. package/dist/commands/support/discord.d.ts +1 -0
  265. package/dist/commands/support/docs.d.ts +1 -0
  266. package/dist/commands/support/index.d.ts +1 -0
  267. package/dist/commands/support/issues.d.ts +1 -0
  268. package/dist/commands/support/logs.d.ts +1 -0
  269. package/dist/commands/support/logs.js +2 -2
  270. package/dist/commands/template/apply.d.ts +1 -0
  271. package/dist/commands/template/apply.js +5 -10
  272. package/dist/commands/template/create.d.ts +1 -0
  273. package/dist/commands/template/create.js +1 -7
  274. package/dist/commands/template/delete.d.ts +1 -0
  275. package/dist/commands/template/delete.js +0 -6
  276. package/dist/commands/template/index.d.ts +1 -0
  277. package/dist/commands/template/index.js +2 -7
  278. package/dist/commands/template/list.d.ts +1 -0
  279. package/dist/commands/template/list.js +1 -7
  280. package/dist/commands/template/save.d.ts +1 -0
  281. package/dist/commands/template/save.js +0 -6
  282. package/dist/commands/template/update.d.ts +1 -0
  283. package/dist/commands/template/update.js +0 -6
  284. package/dist/commands/terminal/title.d.ts +1 -0
  285. package/dist/commands/theme/index.d.ts +1 -0
  286. package/dist/commands/theme/index.js +2 -7
  287. package/dist/commands/theme/list.d.ts +1 -0
  288. package/dist/commands/theme/set.d.ts +1 -0
  289. package/dist/commands/theme/set.js +3 -7
  290. package/dist/commands/ticket/bulk.d.ts +1 -0
  291. package/dist/commands/ticket/bulk.js +0 -7
  292. package/dist/commands/ticket/category.d.ts +1 -0
  293. package/dist/commands/ticket/complete.d.ts +2 -1
  294. package/dist/commands/ticket/complete.js +2 -8
  295. package/dist/commands/ticket/create.d.ts +2 -1
  296. package/dist/commands/ticket/create.js +0 -6
  297. package/dist/commands/ticket/delete.d.ts +2 -1
  298. package/dist/commands/ticket/delete.js +0 -6
  299. package/dist/commands/ticket/edit.d.ts +1 -0
  300. package/dist/commands/ticket/edit.js +0 -6
  301. package/dist/commands/ticket/epic.d.ts +2 -1
  302. package/dist/commands/ticket/epic.js +0 -6
  303. package/dist/commands/ticket/index.d.ts +1 -0
  304. package/dist/commands/ticket/index.js +6 -9
  305. package/dist/commands/ticket/link/block.d.ts +15 -0
  306. package/dist/commands/ticket/link/block.js +95 -0
  307. package/dist/commands/ticket/link/index.d.ts +14 -0
  308. package/dist/commands/ticket/link/index.js +96 -0
  309. package/dist/commands/ticket/list.d.ts +2 -0
  310. package/dist/commands/ticket/list.js +6 -0
  311. package/dist/commands/ticket/move.d.ts +2 -1
  312. package/dist/commands/ticket/move.js +2 -8
  313. package/dist/commands/ticket/project.d.ts +2 -1
  314. package/dist/commands/ticket/project.js +0 -6
  315. package/dist/commands/ticket/reassign.d.ts +2 -1
  316. package/dist/commands/ticket/reassign.js +0 -6
  317. package/dist/commands/ticket/resolve.d.ts +68 -0
  318. package/dist/commands/ticket/resolve.js +294 -0
  319. package/dist/commands/ticket/spec.d.ts +2 -1
  320. package/dist/commands/ticket/spec.js +0 -6
  321. package/dist/commands/ticket/status.d.ts +1 -0
  322. package/dist/commands/ticket/status.js +1 -7
  323. package/dist/commands/ticket/template/apply.d.ts +26 -0
  324. package/dist/commands/ticket/template/apply.js +14 -0
  325. package/dist/commands/ticket/template/delete.d.ts +18 -0
  326. package/dist/commands/ticket/template/delete.js +61 -0
  327. package/dist/commands/ticket/template/list.d.ts +17 -0
  328. package/dist/commands/ticket/template/list.js +77 -0
  329. package/dist/commands/ticket/template/save.d.ts +17 -0
  330. package/dist/commands/ticket/template/save.js +97 -0
  331. package/dist/commands/ticket/update.d.ts +2 -1
  332. package/dist/commands/ticket/update.js +0 -6
  333. package/dist/commands/ticket/view.d.ts +2 -0
  334. package/dist/commands/ticket/view.js +2 -7
  335. package/dist/commands/whoami.d.ts +1 -0
  336. package/dist/commands/work/complete.d.ts +1 -0
  337. package/dist/commands/work/complete.js +1 -7
  338. package/dist/commands/work/index.d.ts +1 -0
  339. package/dist/commands/work/index.js +4 -7
  340. package/dist/commands/work/ready.d.ts +2 -1
  341. package/dist/commands/work/ready.js +38 -14
  342. package/dist/commands/work/resolve.d.ts +15 -0
  343. package/dist/commands/work/resolve.js +76 -0
  344. package/dist/commands/work/revise.d.ts +2 -1
  345. package/dist/commands/work/revise.js +0 -6
  346. package/dist/commands/work/spawn-all.d.ts +2 -1
  347. package/dist/commands/work/spawn-all.js +2 -6
  348. package/dist/commands/work/spawn.d.ts +2 -1
  349. package/dist/commands/work/spawn.js +4 -10
  350. package/dist/commands/work/start.d.ts +3 -1
  351. package/dist/commands/work/start.js +52 -23
  352. package/dist/commands/work/watch.d.ts +2 -1
  353. package/dist/commands/work/watch.js +0 -6
  354. package/dist/commands/workflow/create.d.ts +1 -0
  355. package/dist/commands/workflow/delete.d.ts +1 -0
  356. package/dist/commands/workflow/index.d.ts +1 -0
  357. package/dist/commands/workflow/index.js +1 -7
  358. package/dist/commands/workflow/list.d.ts +1 -0
  359. package/dist/commands/workflow/switch.d.ts +1 -0
  360. package/dist/commands/workflow/view.d.ts +1 -0
  361. package/dist/commands/workspace/add.d.ts +2 -0
  362. package/dist/commands/workspace/add.js +2 -0
  363. package/dist/commands/workspace/list.d.ts +1 -0
  364. package/dist/commands/workspace/list.js +4 -8
  365. package/dist/commands/workspace/prune.d.ts +1 -0
  366. package/dist/commands/workspace/prune.js +4 -6
  367. package/dist/commands/workspace/remove.d.ts +1 -0
  368. package/dist/commands/workspace/remove.js +3 -7
  369. package/dist/commands/workspace/use.d.ts +1 -0
  370. package/dist/commands/workspace/use.js +3 -7
  371. package/dist/lib/database/drizzle-schema.d.ts +1 -1
  372. package/dist/lib/database/index.d.ts +1 -1
  373. package/dist/lib/database/index.js +20 -0
  374. package/dist/lib/execution/devcontainer.js +3 -1
  375. package/dist/lib/execution/runners.d.ts +7 -2
  376. package/dist/lib/execution/runners.js +18 -10
  377. package/dist/lib/execution/types.d.ts +1 -0
  378. package/dist/lib/flags/resolver.js +1 -0
  379. package/dist/lib/mcp/helpers.d.ts +1 -2
  380. package/dist/lib/mcp/tools/diet.js +1 -0
  381. package/dist/lib/mcp/tools/index.d.ts +1 -0
  382. package/dist/lib/mcp/tools/index.js +1 -0
  383. package/dist/lib/mcp/tools/label.d.ts +6 -0
  384. package/dist/lib/mcp/tools/label.js +338 -0
  385. package/dist/lib/mcp/tools/ticket.js +53 -17
  386. package/dist/lib/multiline-input.js +6 -18
  387. package/dist/lib/pmo/base-command.d.ts +4 -2
  388. package/dist/lib/pmo/base-command.js +9 -4
  389. package/dist/lib/pmo/schema.d.ts +6 -0
  390. package/dist/lib/pmo/schema.js +44 -0
  391. package/dist/lib/pmo/storage/base.d.ts +6 -0
  392. package/dist/lib/pmo/storage/base.js +185 -7
  393. package/dist/lib/pmo/storage/index.d.ts +23 -1
  394. package/dist/lib/pmo/storage/index.js +59 -1
  395. package/dist/lib/pmo/storage/labels.d.ts +55 -0
  396. package/dist/lib/pmo/storage/labels.js +346 -0
  397. package/dist/lib/pmo/storage/tickets.js +17 -0
  398. package/dist/lib/pmo/storage/types.d.ts +24 -0
  399. package/dist/lib/pmo/types.d.ts +44 -0
  400. package/dist/lib/pmo/utils.js +1 -1
  401. package/dist/lib/prompt-json.d.ts +5 -2
  402. package/dist/lib/prompt-json.js +4 -4
  403. package/oclif.manifest.json +6571 -3748
  404. package/package.json +1 -1
@@ -10,6 +10,7 @@ export default class TemplateSave extends PMOCommand {
10
10
  'template-name': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
11
11
  description: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
12
12
  json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
13
+ machine: import("@oclif/core/interfaces").BooleanFlag<boolean>;
13
14
  project: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
14
15
  };
15
16
  execute(): Promise<void>;
@@ -28,12 +28,6 @@ export default class TemplateSave extends PMOCommand {
28
28
  char: 'd',
29
29
  description: 'Template description',
30
30
  }),
31
- json: Flags.boolean({
32
- char: 'm',
33
- aliases: ['machine'],
34
- description: 'Output as JSON for AI agents/scripts',
35
- default: false,
36
- }),
37
31
  };
38
32
  async execute() {
39
33
  const { args, flags } = await this.parse(TemplateSave);
@@ -9,6 +9,7 @@ export default class TemplateUpdate extends PMOCommand {
9
9
  name: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
10
10
  description: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
11
11
  json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
12
+ machine: import("@oclif/core/interfaces").BooleanFlag<boolean>;
12
13
  project: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
13
14
  };
14
15
  protected getPMOOptions(): {
@@ -24,12 +24,6 @@ export default class TemplateUpdate extends PMOCommand {
24
24
  char: 'd',
25
25
  description: 'New template description',
26
26
  }),
27
- json: Flags.boolean({
28
- char: 'm',
29
- aliases: ['machine'],
30
- description: 'Output as JSON for AI agents/scripts',
31
- default: false,
32
- }),
33
27
  };
34
28
  getPMOOptions() {
35
29
  return { promptIfMultiple: false };
@@ -7,6 +7,7 @@ export default class TerminalTitle extends PromptCommand {
7
7
  };
8
8
  static flags: {
9
9
  json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
10
+ machine: import("@oclif/core/interfaces").BooleanFlag<boolean>;
10
11
  reset: import("@oclif/core/interfaces").BooleanFlag<boolean>;
11
12
  };
12
13
  run(): Promise<void>;
@@ -4,6 +4,7 @@ export default class Theme extends PromptCommand {
4
4
  static examples: string[];
5
5
  static flags: {
6
6
  json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
7
+ machine: import("@oclif/core/interfaces").BooleanFlag<boolean>;
7
8
  };
8
9
  run(): Promise<void>;
9
10
  }
@@ -1,7 +1,7 @@
1
- import { Flags } from '@oclif/core';
2
1
  import inquirer from 'inquirer';
3
2
  import chalk from 'chalk';
4
3
  import { PromptCommand } from '../../lib/prompt-command.js';
4
+ import { machineOutputFlags } from '../../lib/pmo/index.js';
5
5
  import { getWorkspaceInfo } from '../../lib/agents/commands.js';
6
6
  import { ensureBuiltinThemes } from '../../lib/themes.js';
7
7
  import { getThemes, getAvailableThemeNames } from '../../lib/database/index.js';
@@ -14,12 +14,7 @@ export default class Theme extends PromptCommand {
14
14
  '<%= config.bin %> <%= command.id %> add-names greek-gods zeus athena',
15
15
  ];
16
16
  static flags = {
17
- json: Flags.boolean({
18
- char: 'm',
19
- aliases: ['machine'],
20
- description: 'Output as JSON for AI agents/scripts',
21
- default: false,
22
- }),
17
+ ...machineOutputFlags,
23
18
  };
24
19
  async run() {
25
20
  const { flags } = await this.parse(Theme);
@@ -4,6 +4,7 @@ export default class ThemeList extends Command {
4
4
  static examples: string[];
5
5
  static flags: {
6
6
  json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
7
+ machine: import("@oclif/core/interfaces").BooleanFlag<boolean>;
7
8
  };
8
9
  run(): Promise<void>;
9
10
  }
@@ -7,6 +7,7 @@ export default class ThemeSet extends PromptCommand {
7
7
  };
8
8
  static flags: {
9
9
  json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
10
+ machine: import("@oclif/core/interfaces").BooleanFlag<boolean>;
10
11
  };
11
12
  run(): Promise<void>;
12
13
  }
@@ -1,6 +1,7 @@
1
- import { Args, Flags } from '@oclif/core';
1
+ import { Args } from '@oclif/core';
2
2
  import chalk from 'chalk';
3
3
  import { PromptCommand } from '../../lib/prompt-command.js';
4
+ import { machineOutputFlags } from '../../lib/pmo/index.js';
4
5
  import { getWorkspaceInfo } from '../../lib/agents/commands.js';
5
6
  import { ensureBuiltinThemes } from '../../lib/themes.js';
6
7
  import { getThemes, getAvailableThemeNames, setActiveTheme, getActiveTheme } from '../../lib/database/index.js';
@@ -18,12 +19,7 @@ export default class ThemeSet extends PromptCommand {
18
19
  }),
19
20
  };
20
21
  static flags = {
21
- json: Flags.boolean({
22
- char: 'm',
23
- aliases: ['machine'],
24
- description: 'Output as JSON for AI agents/scripts',
25
- default: false,
26
- }),
22
+ ...machineOutputFlags,
27
23
  };
28
24
  async run() {
29
25
  const { args, flags } = await this.parse(ThemeSet);
@@ -4,6 +4,7 @@ export default class TicketBulk extends PMOCommand {
4
4
  static examples: string[];
5
5
  static flags: {
6
6
  json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
7
+ machine: import("@oclif/core/interfaces").BooleanFlag<boolean>;
7
8
  project: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
8
9
  };
9
10
  protected getPMOOptions(): {
@@ -1,4 +1,3 @@
1
- import { Flags } from '@oclif/core';
2
1
  import inquirer from 'inquirer';
3
2
  import { PMOCommand, pmoBaseFlags } from '../../lib/pmo/index.js';
4
3
  import { styles } from '../../lib/styles.js';
@@ -10,12 +9,6 @@ export default class TicketBulk extends PMOCommand {
10
9
  ];
11
10
  static flags = {
12
11
  ...pmoBaseFlags,
13
- json: Flags.boolean({
14
- char: 'm',
15
- aliases: ['machine'],
16
- description: 'Output prompt configuration as JSON (for AI agents/scripts)',
17
- default: false,
18
- }),
19
12
  };
20
13
  getPMOOptions() {
21
14
  return { promptIfMultiple: false };
@@ -5,6 +5,7 @@ export default class TicketCategory extends PMOCommand {
5
5
  static examples: string[];
6
6
  static flags: {
7
7
  json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
8
+ machine: import("@oclif/core/interfaces").BooleanFlag<boolean>;
8
9
  project: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
9
10
  };
10
11
  protected getPMOOptions(): {
@@ -6,9 +6,10 @@ export default class TicketComplete extends PMOCommand {
6
6
  ticketId: import("@oclif/core/interfaces").Arg<string | undefined, Record<string, unknown>>;
7
7
  };
8
8
  static flags: {
9
- json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
10
9
  bulk: import("@oclif/core/interfaces").BooleanFlag<boolean>;
11
10
  force: import("@oclif/core/interfaces").BooleanFlag<boolean>;
11
+ json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
12
+ machine: import("@oclif/core/interfaces").BooleanFlag<boolean>;
12
13
  project: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
13
14
  };
14
15
  execute(): Promise<void>;
@@ -17,12 +17,6 @@ export default class TicketComplete extends PMOCommand {
17
17
  };
18
18
  static flags = {
19
19
  ...pmoBaseFlags,
20
- json: Flags.boolean({
21
- char: 'm',
22
- aliases: ['machine'],
23
- description: 'Output prompt configuration as JSON (for AI agents/scripts)',
24
- default: false,
25
- }),
26
20
  bulk: Flags.boolean({
27
21
  char: 'b',
28
22
  description: 'Enable bulk mode to complete multiple tickets',
@@ -104,11 +98,11 @@ export default class TicketComplete extends PMOCommand {
104
98
  }
105
99
  async executeBulk(incompleteTickets, doneColumnName, flags) {
106
100
  // Only show header in interactive mode
107
- if (!flags.json) {
101
+ if (!(flags.json || flags.machine)) {
108
102
  this.log(styles.emphasis('✅ Complete Multiple Tickets\n'));
109
103
  }
110
104
  // Agent mode config for prompts
111
- const jsonModeConfig = flags.json ? { flags, commandName: 'ticket complete --bulk' } : null;
105
+ const jsonModeConfig = (flags.json || flags.machine) ? { flags, commandName: 'ticket complete --bulk' } : null;
112
106
  // Select tickets to complete (now agent-compatible!)
113
107
  const { selectedTickets } = await this.prompt([{
114
108
  type: 'checkbox',
@@ -3,7 +3,6 @@ export default class TicketCreate extends PMOCommand {
3
3
  static description: string;
4
4
  static examples: string[];
5
5
  static flags: {
6
- json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
7
6
  title: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
8
7
  column: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
9
8
  priority: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
@@ -16,6 +15,8 @@ export default class TicketCreate extends PMOCommand {
16
15
  template: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
17
16
  labels: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
18
17
  'dry-run': import("@oclif/core/interfaces").BooleanFlag<boolean>;
18
+ json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
19
+ machine: import("@oclif/core/interfaces").BooleanFlag<boolean>;
19
20
  project: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
20
21
  };
21
22
  execute(): Promise<void>;
@@ -24,12 +24,6 @@ export default class TicketCreate extends PMOCommand {
24
24
  ];
25
25
  static flags = {
26
26
  ...pmoBaseFlags,
27
- json: Flags.boolean({
28
- char: 'm',
29
- aliases: ['machine'],
30
- description: 'Output prompt configuration as JSON (for AI agents/scripts)',
31
- default: false,
32
- }),
33
27
  title: Flags.string({
34
28
  char: 't',
35
29
  description: 'Ticket title [required for non-interactive]',
@@ -6,9 +6,10 @@ export default class TicketDelete extends PMOCommand {
6
6
  ticketId: import("@oclif/core/interfaces").Arg<string | undefined, Record<string, unknown>>;
7
7
  };
8
8
  static flags: {
9
- json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
10
9
  force: import("@oclif/core/interfaces").BooleanFlag<boolean>;
11
10
  bulk: import("@oclif/core/interfaces").BooleanFlag<boolean>;
11
+ json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
12
+ machine: import("@oclif/core/interfaces").BooleanFlag<boolean>;
12
13
  project: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
13
14
  };
14
15
  execute(): Promise<void>;
@@ -19,12 +19,6 @@ export default class TicketDelete extends PMOCommand {
19
19
  };
20
20
  static flags = {
21
21
  ...pmoBaseFlags,
22
- json: Flags.boolean({
23
- char: 'm',
24
- aliases: ['machine'],
25
- description: 'Output prompt configuration as JSON (for AI agents/scripts)',
26
- default: false,
27
- }),
28
22
  force: Flags.boolean({
29
23
  char: 'f',
30
24
  description: 'Skip confirmation prompt',
@@ -20,6 +20,7 @@ export default class TicketEdit extends PMOCommand {
20
20
  'clear-ac': import("@oclif/core/interfaces").BooleanFlag<boolean>;
21
21
  interactive: import("@oclif/core/interfaces").BooleanFlag<boolean>;
22
22
  json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
23
+ machine: import("@oclif/core/interfaces").BooleanFlag<boolean>;
23
24
  project: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
24
25
  };
25
26
  execute(): Promise<void>;
@@ -75,12 +75,6 @@ export default class TicketEdit extends PMOCommand {
75
75
  description: 'Interactive mode - prompts for all fields',
76
76
  default: false,
77
77
  }),
78
- json: Flags.boolean({
79
- char: 'm',
80
- aliases: ['machine'],
81
- description: 'Output prompt configuration as JSON (for AI agents/scripts)',
82
- default: false,
83
- }),
84
78
  };
85
79
  async execute() {
86
80
  const { args, flags } = await this.parse(TicketEdit);
@@ -7,12 +7,13 @@ export default class TicketEpic extends PMOCommand {
7
7
  'epic-id': import("@oclif/core/interfaces").Arg<string | undefined, Record<string, unknown>>;
8
8
  };
9
9
  static flags: {
10
- json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
11
10
  unlink: import("@oclif/core/interfaces").BooleanFlag<boolean>;
12
11
  bulk: import("@oclif/core/interfaces").BooleanFlag<boolean>;
13
12
  'to-epic': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
14
13
  'from-epic': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
15
14
  force: import("@oclif/core/interfaces").BooleanFlag<boolean>;
15
+ json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
16
+ machine: import("@oclif/core/interfaces").BooleanFlag<boolean>;
16
17
  project: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
17
18
  };
18
19
  execute(): Promise<void>;
@@ -22,12 +22,6 @@ export default class TicketEpic extends PMOCommand {
22
22
  };
23
23
  static flags = {
24
24
  ...pmoBaseFlags,
25
- json: Flags.boolean({
26
- char: 'm',
27
- aliases: ['machine'],
28
- description: 'Output prompt configuration as JSON (for AI agents/scripts)',
29
- default: false,
30
- }),
31
25
  unlink: Flags.boolean({
32
26
  char: 'u',
33
27
  description: 'Remove epic link instead of adding',
@@ -4,6 +4,7 @@ export default class Ticket extends PMOCommand {
4
4
  static examples: string[];
5
5
  static flags: {
6
6
  json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
7
+ machine: import("@oclif/core/interfaces").BooleanFlag<boolean>;
7
8
  project: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
8
9
  };
9
10
  protected getPMOOptions(): {
@@ -1,4 +1,3 @@
1
- import { Flags } from '@oclif/core';
2
1
  import inquirer from 'inquirer';
3
2
  import { PMOCommand, pmoBaseFlags } from '../../lib/pmo/index.js';
4
3
  import { shouldOutputJson, outputPromptAsJson, createMetadata, buildPromptConfig, } from '../../lib/prompt-json.js';
@@ -9,12 +8,6 @@ export default class Ticket extends PMOCommand {
9
8
  ];
10
9
  static flags = {
11
10
  ...pmoBaseFlags,
12
- json: Flags.boolean({
13
- char: 'm',
14
- aliases: ['machine'],
15
- description: 'Output prompt configuration as JSON (for AI agents/scripts)',
16
- default: false,
17
- }),
18
11
  };
19
12
  getPMOOptions() {
20
13
  return { promptIfMultiple: false };
@@ -35,6 +28,7 @@ export default class Ticket extends PMOCommand {
35
28
  { name: 'Move to different project', value: 'project', command: 'prlt ticket project --json' },
36
29
  { name: 'Assign to epic', value: 'epic', command: 'prlt ticket epic --json' },
37
30
  { name: 'Assign to spec', value: 'spec', command: 'prlt ticket spec --json' },
31
+ { name: 'Resolve questions', value: 'resolve', command: 'prlt ticket resolve --json' },
38
32
  { name: 'Manage dependencies', value: 'link', command: 'prlt link list --json' },
39
33
  { name: 'Manage templates', value: 'templates', command: 'prlt template --json' },
40
34
  { name: 'Delete ticket', value: 'delete', command: 'prlt ticket delete --json' },
@@ -52,11 +46,11 @@ export default class Ticket extends PMOCommand {
52
46
  name: 'action',
53
47
  message: '🎫 ' + message,
54
48
  choices: [
55
- ...menuChoices.slice(0, 10),
49
+ ...menuChoices.slice(0, 11),
56
50
  new inquirer.Separator('──────────────'),
57
- menuChoices[10],
58
51
  menuChoices[11],
59
52
  menuChoices[12],
53
+ menuChoices[13],
60
54
  ],
61
55
  }]);
62
56
  if (action === 'cancel') {
@@ -91,6 +85,9 @@ export default class Ticket extends PMOCommand {
91
85
  case 'spec':
92
86
  await this.config.runCommand('ticket:spec', []);
93
87
  break;
88
+ case 'resolve':
89
+ await this.config.runCommand('ticket:resolve', []);
90
+ break;
94
91
  case 'link':
95
92
  await this.config.runCommand('link', []);
96
93
  break;
@@ -0,0 +1,15 @@
1
+ import { PMOCommand } from '../../../lib/pmo/index.js';
2
+ export default class TicketLinkBlock extends PMOCommand {
3
+ static description: string;
4
+ static examples: string[];
5
+ static args: {
6
+ ticket: import("@oclif/core/interfaces").Arg<string, Record<string, unknown>>;
7
+ blocker: import("@oclif/core/interfaces").Arg<string | undefined, Record<string, unknown>>;
8
+ };
9
+ static flags: {
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
+ execute(): Promise<void>;
15
+ }
@@ -0,0 +1,95 @@
1
+ import { Args } from '@oclif/core';
2
+ import { autoExportToBoard, PMOCommand, pmoBaseFlags } from '../../../lib/pmo/index.js';
3
+ import { styles } from '../../../lib/styles.js';
4
+ import { shouldOutputJson, outputPromptAsJson, outputSuccessAsJson, outputErrorAsJson, createMetadata, buildPromptConfig, } from '../../../lib/prompt-json.js';
5
+ export default class TicketLinkBlock extends PMOCommand {
6
+ static description = 'Add a blocking dependency to a ticket';
7
+ static examples = [
8
+ '<%= config.bin %> <%= command.id %> TKT-001',
9
+ '<%= config.bin %> <%= command.id %> TKT-001 TKT-002',
10
+ '<%= config.bin %> <%= command.id %> TKT-001 --json',
11
+ ];
12
+ static args = {
13
+ ticket: Args.string({
14
+ description: 'Ticket that will be blocked',
15
+ required: true,
16
+ }),
17
+ blocker: Args.string({
18
+ description: 'Ticket that blocks (the blocker)',
19
+ required: false,
20
+ }),
21
+ };
22
+ static flags = {
23
+ ...pmoBaseFlags,
24
+ };
25
+ async execute() {
26
+ const { args, flags } = await this.parse(TicketLinkBlock);
27
+ const jsonMode = shouldOutputJson(flags);
28
+ const projectId = await this.requireProject();
29
+ const handleError = (code, message) => {
30
+ if (jsonMode) {
31
+ outputErrorAsJson(code, message, createMetadata('ticket link block', flags));
32
+ this.exit(1);
33
+ }
34
+ this.error(message);
35
+ };
36
+ // Verify the target ticket exists
37
+ const ticket = await this.storage.getTicket(args.ticket);
38
+ if (!ticket) {
39
+ return handleError('TICKET_NOT_FOUND', `Ticket not found: ${args.ticket}`);
40
+ }
41
+ // If blocker not provided, prompt for selection
42
+ if (!args.blocker) {
43
+ const tickets = await this.storage.listTickets(projectId);
44
+ const otherTickets = tickets.filter(t => t.id !== args.ticket);
45
+ if (otherTickets.length === 0) {
46
+ return handleError('NO_TICKETS', 'No other tickets to select as blocker.');
47
+ }
48
+ const projectFlag = flags.project ? ` -P ${flags.project}` : '';
49
+ const choices = otherTickets.map(t => ({
50
+ name: `${t.id} - ${t.title}`,
51
+ value: t.id,
52
+ command: `prlt ticket link block ${args.ticket} ${t.id}${projectFlag} --json`,
53
+ }));
54
+ const message = `Select ticket that blocks ${args.ticket}:`;
55
+ if (jsonMode) {
56
+ outputPromptAsJson(buildPromptConfig('list', 'blocker', message, choices), createMetadata('ticket link block', flags));
57
+ return;
58
+ }
59
+ const { selected } = await this.prompt([{
60
+ type: 'list',
61
+ name: 'selected',
62
+ message,
63
+ choices,
64
+ }], null);
65
+ args.blocker = selected;
66
+ }
67
+ // Verify blocker exists
68
+ const blockerTicket = await this.storage.getTicket(args.blocker);
69
+ if (!blockerTicket) {
70
+ return handleError('BLOCKER_NOT_FOUND', `Blocker ticket not found: ${args.blocker}`);
71
+ }
72
+ // Create the blocking dependency
73
+ try {
74
+ await this.storage.createTicketDependency(args.ticket, args.blocker, 'blocks');
75
+ await autoExportToBoard(this.pmoPath, this.storage, (msg) => this.log(styles.muted(msg)));
76
+ if (jsonMode) {
77
+ outputSuccessAsJson({
78
+ ticketId: args.ticket,
79
+ blockerId: args.blocker,
80
+ type: 'blocks',
81
+ }, createMetadata('ticket link block', flags));
82
+ return;
83
+ }
84
+ this.log(styles.success(`\n${args.ticket} is now blocked by ${args.blocker}`));
85
+ this.log(styles.muted(` ${ticket.title}`));
86
+ this.log(styles.muted(` blocked by: ${blockerTicket.title}`));
87
+ }
88
+ catch (error) {
89
+ if (error instanceof Error && error.message.includes('already exists')) {
90
+ return handleError('ALREADY_EXISTS', 'Blocking dependency already exists.');
91
+ }
92
+ throw error;
93
+ }
94
+ }
95
+ }
@@ -0,0 +1,14 @@
1
+ import { PMOCommand } from '../../../lib/pmo/index.js';
2
+ export default class TicketLink 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
+ };
8
+ static flags: {
9
+ json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
10
+ machine: import("@oclif/core/interfaces").BooleanFlag<boolean>;
11
+ project: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
12
+ };
13
+ execute(): Promise<void>;
14
+ }
@@ -0,0 +1,96 @@
1
+ import { Args } from '@oclif/core';
2
+ import { PMOCommand, pmoBaseFlags } from '../../../lib/pmo/index.js';
3
+ import { styles } from '../../../lib/styles.js';
4
+ import { shouldOutputJson, outputPromptAsJson, createMetadata, buildPromptConfig, } from '../../../lib/prompt-json.js';
5
+ export default class TicketLink extends PMOCommand {
6
+ static description = 'Manage links (dependencies) for a ticket';
7
+ static examples = [
8
+ '<%= config.bin %> <%= command.id %>',
9
+ '<%= config.bin %> <%= command.id %> TKT-001',
10
+ '<%= config.bin %> <%= command.id %> TKT-001 --json',
11
+ ];
12
+ static args = {
13
+ ticket: Args.string({
14
+ description: 'Ticket ID',
15
+ required: false,
16
+ }),
17
+ };
18
+ static flags = {
19
+ ...pmoBaseFlags,
20
+ };
21
+ async execute() {
22
+ const { args, flags } = await this.parse(TicketLink);
23
+ const jsonMode = shouldOutputJson(flags);
24
+ const projectId = await this.requireProject();
25
+ // If no ticket ID provided, prompt for selection
26
+ if (!args.ticket) {
27
+ const tickets = await this.storage.listTickets(projectId);
28
+ if (tickets.length === 0) {
29
+ this.log(styles.muted('No tickets found.'));
30
+ return;
31
+ }
32
+ const choices = tickets.map(t => ({
33
+ name: `${t.id} - ${t.title}`,
34
+ value: t.id,
35
+ command: `prlt ticket link ${t.id}${flags.project ? ` -P ${flags.project}` : ''} --json`,
36
+ }));
37
+ const message = 'Select a ticket to manage links:';
38
+ if (jsonMode) {
39
+ outputPromptAsJson(buildPromptConfig('list', 'ticket', message, choices), createMetadata('ticket link', flags));
40
+ return;
41
+ }
42
+ const { selected } = await this.prompt([{
43
+ type: 'list',
44
+ name: 'selected',
45
+ message,
46
+ choices,
47
+ }], null);
48
+ args.ticket = selected;
49
+ }
50
+ const ticket = await this.storage.getTicket(args.ticket);
51
+ if (!ticket) {
52
+ this.error(`Ticket not found: ${args.ticket}`);
53
+ }
54
+ // Show link actions submenu
55
+ const projectFlag = flags.project ? ` -P ${flags.project}` : '';
56
+ const menuChoices = [
57
+ { name: 'Add blocker', value: 'block', command: `prlt ticket link block ${args.ticket}${projectFlag} --json` },
58
+ { name: 'View links', value: 'view', command: `prlt link list ${args.ticket}${projectFlag} --json` },
59
+ { name: 'Remove link', value: 'remove', command: `prlt link remove ${args.ticket}${projectFlag} --json` },
60
+ { name: 'Cancel', value: 'cancel', command: '' },
61
+ ];
62
+ const message = `Manage links for ${args.ticket}: ${ticket.title}`;
63
+ if (jsonMode) {
64
+ outputPromptAsJson(buildPromptConfig('list', 'action', message, menuChoices), createMetadata('ticket link', flags));
65
+ return;
66
+ }
67
+ const { action } = await this.prompt([{
68
+ type: 'list',
69
+ name: 'action',
70
+ message,
71
+ choices: menuChoices,
72
+ }], null);
73
+ if (action === 'cancel') {
74
+ this.log(styles.muted('Cancelled.'));
75
+ return;
76
+ }
77
+ switch (action) {
78
+ case 'block': {
79
+ const { default: BlockCommand } = await import('./block.js');
80
+ const cmd = new BlockCommand([args.ticket, ...(flags.project ? ['-P', flags.project] : [])], this.config);
81
+ await cmd.run();
82
+ break;
83
+ }
84
+ case 'view': {
85
+ const { default: LinkListCommand } = await import('../../link/list.js');
86
+ const cmd = new LinkListCommand([args.ticket, ...(flags.project ? ['-P', flags.project] : [])], this.config);
87
+ await cmd.run();
88
+ break;
89
+ }
90
+ case 'remove': {
91
+ this.log(styles.muted('Use: prlt link remove <from> <to>'));
92
+ break;
93
+ }
94
+ }
95
+ }
96
+ }
@@ -11,10 +11,12 @@ export default class TicketList extends Command {
11
11
  search: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
12
12
  format: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
13
13
  all: import("@oclif/core/interfaces").BooleanFlag<boolean>;
14
+ label: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
14
15
  'group-by': import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
15
16
  limit: import("@oclif/core/interfaces").OptionFlag<number | undefined, import("@oclif/core/interfaces").CustomOptions>;
16
17
  offset: import("@oclif/core/interfaces").OptionFlag<number | undefined, import("@oclif/core/interfaces").CustomOptions>;
17
18
  json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
19
+ machine: import("@oclif/core/interfaces").BooleanFlag<boolean>;
18
20
  project: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
19
21
  };
20
22
  run(): Promise<void>;
@@ -55,6 +55,9 @@ export default class TicketList extends Command {
55
55
  description: 'Show tickets across all projects',
56
56
  default: false,
57
57
  }),
58
+ label: Flags.string({
59
+ description: 'Filter by label name',
60
+ }),
58
61
  'group-by': Flags.string({
59
62
  char: 'g',
60
63
  description: 'Group tickets by field',
@@ -106,6 +109,9 @@ export default class TicketList extends Command {
106
109
  if (flags.search) {
107
110
  filter.search = flags.search;
108
111
  }
112
+ if (flags.label) {
113
+ filter.label = flags.label;
114
+ }
109
115
  // Determine projectId for the query
110
116
  const projectId = flags.all ? undefined : (filter.projectId || undefined);
111
117
  // Validate project if specified (not in --all mode)