@proletariat/cli 0.3.81 → 0.3.82

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 (370) hide show
  1. package/README.md +2 -46
  2. package/dist/commands/action/run.js +2 -2
  3. package/dist/commands/action/run.js.map +1 -1
  4. package/dist/commands/agent/staff/add.d.ts +17 -1
  5. package/dist/commands/agent/staff/add.js +274 -1
  6. package/dist/commands/agent/staff/add.js.map +1 -1
  7. package/dist/commands/agent/staff/list.d.ts +10 -1
  8. package/dist/commands/agent/staff/list.js +103 -1
  9. package/dist/commands/agent/staff/list.js.map +1 -1
  10. package/dist/commands/agent/staff/remove.d.ts +18 -1
  11. package/dist/commands/agent/staff/remove.js +143 -1
  12. package/dist/commands/agent/staff/remove.js.map +1 -1
  13. package/dist/commands/{epic/activate.d.ts → pr/close.d.ts} +8 -2
  14. package/dist/commands/pr/close.js +157 -0
  15. package/dist/commands/pr/close.js.map +1 -0
  16. package/dist/commands/pr/index.js +6 -2
  17. package/dist/commands/pr/index.js.map +1 -1
  18. package/dist/commands/pr/list.d.ts +1 -0
  19. package/dist/commands/pr/list.js +37 -3
  20. package/dist/commands/pr/list.js.map +1 -1
  21. package/dist/commands/pr/merge.js +1 -1
  22. package/dist/commands/pr/merge.js.map +1 -1
  23. package/dist/commands/pr/status.js +33 -1
  24. package/dist/commands/pr/status.js.map +1 -1
  25. package/dist/commands/self-update.d.ts +7 -14
  26. package/dist/commands/self-update.js +11 -179
  27. package/dist/commands/self-update.js.map +1 -1
  28. package/dist/commands/{workflow/switch.d.ts → ticket/cancel.d.ts} +4 -2
  29. package/dist/commands/ticket/cancel.js +204 -0
  30. package/dist/commands/ticket/cancel.js.map +1 -0
  31. package/dist/commands/ticket/link/index.js +0 -12
  32. package/dist/commands/ticket/link/index.js.map +1 -1
  33. package/dist/commands/ticket/move.d.ts +1 -0
  34. package/dist/commands/ticket/move.js +10 -3
  35. package/dist/commands/ticket/move.js.map +1 -1
  36. package/dist/commands/update.d.ts +18 -0
  37. package/dist/commands/update.js +184 -0
  38. package/dist/commands/update.js.map +1 -0
  39. package/dist/lib/database/index.js +0 -134
  40. package/dist/lib/database/index.js.map +1 -1
  41. package/dist/lib/database/migrations/0006_drop_theme_names_used.d.ts +8 -0
  42. package/dist/lib/database/migrations/0006_drop_theme_names_used.js +30 -0
  43. package/dist/lib/database/migrations/0006_drop_theme_names_used.js.map +1 -0
  44. package/dist/lib/database/migrations/0007_add_worktree_columns.d.ts +8 -0
  45. package/dist/lib/database/migrations/0007_add_worktree_columns.js +24 -0
  46. package/dist/lib/database/migrations/0007_add_worktree_columns.js.map +1 -0
  47. package/dist/lib/database/migrations/0008_add_agent_mount_mode.d.ts +8 -0
  48. package/dist/lib/database/migrations/0008_add_agent_mount_mode.js +18 -0
  49. package/dist/lib/database/migrations/0008_add_agent_mount_mode.js.map +1 -0
  50. package/dist/lib/database/migrations/0009_create_media_items.d.ts +7 -0
  51. package/dist/lib/database/migrations/0009_create_media_items.js +29 -0
  52. package/dist/lib/database/migrations/0009_create_media_items.js.map +1 -0
  53. package/dist/lib/database/migrations/0010_add_ticket_position.d.ts +9 -0
  54. package/dist/lib/database/migrations/0010_add_ticket_position.js +44 -0
  55. package/dist/lib/database/migrations/0010_add_ticket_position.js.map +1 -0
  56. package/dist/lib/database/migrations/index.js +10 -0
  57. package/dist/lib/database/migrations/index.js.map +1 -1
  58. package/dist/lib/events/events.d.ts +2 -1
  59. package/dist/lib/pmo/storage/dependencies.js +45 -21
  60. package/dist/lib/pmo/storage/dependencies.js.map +1 -1
  61. package/dist/lib/pmo/storage/statuses.d.ts +2 -0
  62. package/dist/lib/pmo/storage/statuses.js +209 -150
  63. package/dist/lib/pmo/storage/statuses.js.map +1 -1
  64. package/dist/lib/pr/index.d.ts +14 -0
  65. package/dist/lib/pr/index.js +48 -0
  66. package/dist/lib/pr/index.js.map +1 -1
  67. package/dist/lib/update-check.js +1 -1
  68. package/dist/lib/update-check.js.map +1 -1
  69. package/dist/lib/update-prompt.js +1 -1
  70. package/dist/lib/work-lifecycle/events.d.ts +11 -0
  71. package/oclif.manifest.json +4789 -11452
  72. package/package.json +1 -1
  73. package/dist/commands/agents/index.d.ts +0 -11
  74. package/dist/commands/agents/index.js +0 -105
  75. package/dist/commands/agents/index.js.map +0 -1
  76. package/dist/commands/agents/themes/add-names.d.ts +0 -1
  77. package/dist/commands/agents/themes/add-names.js +0 -2
  78. package/dist/commands/agents/themes/add-names.js.map +0 -1
  79. package/dist/commands/agents/themes/create.d.ts +0 -1
  80. package/dist/commands/agents/themes/create.js +0 -2
  81. package/dist/commands/agents/themes/create.js.map +0 -1
  82. package/dist/commands/agents/themes/list.d.ts +0 -1
  83. package/dist/commands/agents/themes/list.js +0 -2
  84. package/dist/commands/agents/themes/list.js.map +0 -1
  85. package/dist/commands/category/create.d.ts +0 -19
  86. package/dist/commands/category/create.js +0 -130
  87. package/dist/commands/category/create.js.map +0 -1
  88. package/dist/commands/category/delete.d.ts +0 -18
  89. package/dist/commands/category/delete.js +0 -124
  90. package/dist/commands/category/delete.js.map +0 -1
  91. package/dist/commands/category/index.d.ts +0 -16
  92. package/dist/commands/category/index.js +0 -88
  93. package/dist/commands/category/index.js.map +0 -1
  94. package/dist/commands/category/list.d.ts +0 -19
  95. package/dist/commands/category/list.js +0 -111
  96. package/dist/commands/category/list.js.map +0 -1
  97. package/dist/commands/category/rename.d.ts +0 -19
  98. package/dist/commands/category/rename.js +0 -160
  99. package/dist/commands/category/rename.js.map +0 -1
  100. package/dist/commands/epic/activate.js +0 -107
  101. package/dist/commands/epic/activate.js.map +0 -1
  102. package/dist/commands/epic/archive.d.ts +0 -15
  103. package/dist/commands/epic/archive.js +0 -118
  104. package/dist/commands/epic/archive.js.map +0 -1
  105. package/dist/commands/epic/create.d.ts +0 -17
  106. package/dist/commands/epic/create.js +0 -179
  107. package/dist/commands/epic/create.js.map +0 -1
  108. package/dist/commands/epic/delete.d.ts +0 -15
  109. package/dist/commands/epic/delete.js +0 -129
  110. package/dist/commands/epic/delete.js.map +0 -1
  111. package/dist/commands/epic/index.d.ts +0 -14
  112. package/dist/commands/epic/index.js +0 -88
  113. package/dist/commands/epic/index.js.map +0 -1
  114. package/dist/commands/epic/list.d.ts +0 -13
  115. package/dist/commands/epic/list.js +0 -103
  116. package/dist/commands/epic/list.js.map +0 -1
  117. package/dist/commands/epic/move.d.ts +0 -16
  118. package/dist/commands/epic/move.js +0 -162
  119. package/dist/commands/epic/move.js.map +0 -1
  120. package/dist/commands/epic/progress.d.ts +0 -17
  121. package/dist/commands/epic/progress.js +0 -170
  122. package/dist/commands/epic/progress.js.map +0 -1
  123. package/dist/commands/epic/project.d.ts +0 -16
  124. package/dist/commands/epic/project.js +0 -199
  125. package/dist/commands/epic/project.js.map +0 -1
  126. package/dist/commands/epic/reorder.d.ts +0 -22
  127. package/dist/commands/epic/reorder.js +0 -152
  128. package/dist/commands/epic/reorder.js.map +0 -1
  129. package/dist/commands/epic/show.d.ts +0 -13
  130. package/dist/commands/epic/show.js +0 -17
  131. package/dist/commands/epic/show.js.map +0 -1
  132. package/dist/commands/epic/spec.d.ts +0 -17
  133. package/dist/commands/epic/spec.js +0 -189
  134. package/dist/commands/epic/spec.js.map +0 -1
  135. package/dist/commands/epic/ticket.d.ts +0 -21
  136. package/dist/commands/epic/ticket.js +0 -300
  137. package/dist/commands/epic/ticket.js.map +0 -1
  138. package/dist/commands/epic/view.d.ts +0 -14
  139. package/dist/commands/epic/view.js +0 -141
  140. package/dist/commands/epic/view.js.map +0 -1
  141. package/dist/commands/execution/kill.d.ts +0 -12
  142. package/dist/commands/execution/kill.js +0 -18
  143. package/dist/commands/execution/kill.js.map +0 -1
  144. package/dist/commands/label/create.d.ts +0 -20
  145. package/dist/commands/label/create.js +0 -58
  146. package/dist/commands/label/create.js.map +0 -1
  147. package/dist/commands/label/delete.d.ts +0 -17
  148. package/dist/commands/label/delete.js +0 -33
  149. package/dist/commands/label/delete.js.map +0 -1
  150. package/dist/commands/label/group/create.d.ts +0 -20
  151. package/dist/commands/label/group/create.js +0 -56
  152. package/dist/commands/label/group/create.js.map +0 -1
  153. package/dist/commands/label/group/list.d.ts +0 -14
  154. package/dist/commands/label/group/list.js +0 -53
  155. package/dist/commands/label/group/list.js.map +0 -1
  156. package/dist/commands/label/index.d.ts +0 -15
  157. package/dist/commands/label/index.js +0 -59
  158. package/dist/commands/label/index.js.map +0 -1
  159. package/dist/commands/label/list.d.ts +0 -16
  160. package/dist/commands/label/list.js +0 -84
  161. package/dist/commands/label/list.js.map +0 -1
  162. package/dist/commands/link/create.d.ts +0 -16
  163. package/dist/commands/link/create.js +0 -136
  164. package/dist/commands/link/create.js.map +0 -1
  165. package/dist/commands/link/index.d.ts +0 -14
  166. package/dist/commands/link/index.js +0 -82
  167. package/dist/commands/link/index.js.map +0 -1
  168. package/dist/commands/link/list.d.ts +0 -18
  169. package/dist/commands/link/list.js +0 -178
  170. package/dist/commands/link/list.js.map +0 -1
  171. package/dist/commands/link/remove.d.ts +0 -16
  172. package/dist/commands/link/remove.js +0 -115
  173. package/dist/commands/link/remove.js.map +0 -1
  174. package/dist/commands/media/add.d.ts +0 -19
  175. package/dist/commands/media/add.js +0 -98
  176. package/dist/commands/media/add.js.map +0 -1
  177. package/dist/commands/media/index.d.ts +0 -14
  178. package/dist/commands/media/index.js +0 -93
  179. package/dist/commands/media/index.js.map +0 -1
  180. package/dist/commands/media/list.d.ts +0 -15
  181. package/dist/commands/media/list.js +0 -94
  182. package/dist/commands/media/list.js.map +0 -1
  183. package/dist/commands/media/preprocess.d.ts +0 -19
  184. package/dist/commands/media/preprocess.js +0 -91
  185. package/dist/commands/media/preprocess.js.map +0 -1
  186. package/dist/commands/media/remove.d.ts +0 -18
  187. package/dist/commands/media/remove.js +0 -105
  188. package/dist/commands/media/remove.js.map +0 -1
  189. package/dist/commands/media/show.d.ts +0 -17
  190. package/dist/commands/media/show.js +0 -122
  191. package/dist/commands/media/show.js.map +0 -1
  192. package/dist/commands/phase/create.d.ts +0 -22
  193. package/dist/commands/phase/create.js +0 -165
  194. package/dist/commands/phase/create.js.map +0 -1
  195. package/dist/commands/phase/delete.d.ts +0 -18
  196. package/dist/commands/phase/delete.js +0 -75
  197. package/dist/commands/phase/delete.js.map +0 -1
  198. package/dist/commands/phase/list.d.ts +0 -13
  199. package/dist/commands/phase/list.js +0 -75
  200. package/dist/commands/phase/list.js.map +0 -1
  201. package/dist/commands/phase/move.d.ts +0 -18
  202. package/dist/commands/phase/move.js +0 -124
  203. package/dist/commands/phase/move.js.map +0 -1
  204. package/dist/commands/phase/template/apply.d.ts +0 -26
  205. package/dist/commands/phase/template/apply.js +0 -15
  206. package/dist/commands/phase/template/apply.js.map +0 -1
  207. package/dist/commands/phase/template/create.d.ts +0 -23
  208. package/dist/commands/phase/template/create.js +0 -15
  209. package/dist/commands/phase/template/create.js.map +0 -1
  210. package/dist/commands/phase/template/delete.d.ts +0 -18
  211. package/dist/commands/phase/template/delete.js +0 -63
  212. package/dist/commands/phase/template/delete.js.map +0 -1
  213. package/dist/commands/phase/template/list.d.ts +0 -17
  214. package/dist/commands/phase/template/list.js +0 -90
  215. package/dist/commands/phase/template/list.js.map +0 -1
  216. package/dist/commands/phase/template/update.d.ts +0 -1
  217. package/dist/commands/phase/template/update.js +0 -2
  218. package/dist/commands/phase/template/update.js.map +0 -1
  219. package/dist/commands/phase/update.d.ts +0 -23
  220. package/dist/commands/phase/update.js +0 -209
  221. package/dist/commands/phase/update.js.map +0 -1
  222. package/dist/commands/priority/add.d.ts +0 -16
  223. package/dist/commands/priority/add.js +0 -71
  224. package/dist/commands/priority/add.js.map +0 -1
  225. package/dist/commands/priority/list.d.ts +0 -11
  226. package/dist/commands/priority/list.js +0 -35
  227. package/dist/commands/priority/list.js.map +0 -1
  228. package/dist/commands/priority/remove.d.ts +0 -14
  229. package/dist/commands/priority/remove.js +0 -55
  230. package/dist/commands/priority/remove.js.map +0 -1
  231. package/dist/commands/priority/set.d.ts +0 -15
  232. package/dist/commands/priority/set.js +0 -61
  233. package/dist/commands/priority/set.js.map +0 -1
  234. package/dist/commands/roadmap/add-project.d.ts +0 -19
  235. package/dist/commands/roadmap/add-project.js +0 -119
  236. package/dist/commands/roadmap/add-project.js.map +0 -1
  237. package/dist/commands/roadmap/create.d.ts +0 -22
  238. package/dist/commands/roadmap/create.js +0 -168
  239. package/dist/commands/roadmap/create.js.map +0 -1
  240. package/dist/commands/roadmap/delete.d.ts +0 -18
  241. package/dist/commands/roadmap/delete.js +0 -96
  242. package/dist/commands/roadmap/delete.js.map +0 -1
  243. package/dist/commands/roadmap/generate.d.ts +0 -24
  244. package/dist/commands/roadmap/generate.js +0 -201
  245. package/dist/commands/roadmap/generate.js.map +0 -1
  246. package/dist/commands/roadmap/index.d.ts +0 -14
  247. package/dist/commands/roadmap/index.js +0 -57
  248. package/dist/commands/roadmap/index.js.map +0 -1
  249. package/dist/commands/roadmap/list.d.ts +0 -14
  250. package/dist/commands/roadmap/list.js +0 -58
  251. package/dist/commands/roadmap/list.js.map +0 -1
  252. package/dist/commands/roadmap/remove-project.d.ts +0 -19
  253. package/dist/commands/roadmap/remove-project.js +0 -124
  254. package/dist/commands/roadmap/remove-project.js.map +0 -1
  255. package/dist/commands/roadmap/reorder.d.ts +0 -18
  256. package/dist/commands/roadmap/reorder.js +0 -147
  257. package/dist/commands/roadmap/reorder.js.map +0 -1
  258. package/dist/commands/roadmap/update.d.ts +0 -20
  259. package/dist/commands/roadmap/update.js +0 -134
  260. package/dist/commands/roadmap/update.js.map +0 -1
  261. package/dist/commands/roadmap/view.d.ts +0 -17
  262. package/dist/commands/roadmap/view.js +0 -93
  263. package/dist/commands/roadmap/view.js.map +0 -1
  264. package/dist/commands/staff/add.d.ts +0 -17
  265. package/dist/commands/staff/add.js +0 -275
  266. package/dist/commands/staff/add.js.map +0 -1
  267. package/dist/commands/staff/index.d.ts +0 -15
  268. package/dist/commands/staff/index.js +0 -88
  269. package/dist/commands/staff/index.js.map +0 -1
  270. package/dist/commands/staff/list.d.ts +0 -10
  271. package/dist/commands/staff/list.js +0 -104
  272. package/dist/commands/staff/list.js.map +0 -1
  273. package/dist/commands/staff/remove.d.ts +0 -18
  274. package/dist/commands/staff/remove.js +0 -144
  275. package/dist/commands/staff/remove.js.map +0 -1
  276. package/dist/commands/status/category.d.ts +0 -15
  277. package/dist/commands/status/category.js +0 -64
  278. package/dist/commands/status/category.js.map +0 -1
  279. package/dist/commands/status/create.d.ts +0 -21
  280. package/dist/commands/status/create.js +0 -161
  281. package/dist/commands/status/create.js.map +0 -1
  282. package/dist/commands/status/delete.d.ts +0 -14
  283. package/dist/commands/status/delete.js +0 -86
  284. package/dist/commands/status/delete.js.map +0 -1
  285. package/dist/commands/status/index.d.ts +0 -15
  286. package/dist/commands/status/index.js +0 -98
  287. package/dist/commands/status/index.js.map +0 -1
  288. package/dist/commands/status/list.d.ts +0 -13
  289. package/dist/commands/status/list.js +0 -97
  290. package/dist/commands/status/list.js.map +0 -1
  291. package/dist/commands/status/move.d.ts +0 -15
  292. package/dist/commands/status/move.js +0 -126
  293. package/dist/commands/status/move.js.map +0 -1
  294. package/dist/commands/status/update.d.ts +0 -20
  295. package/dist/commands/status/update.js +0 -214
  296. package/dist/commands/status/update.js.map +0 -1
  297. package/dist/commands/template/apply.d.ts +0 -28
  298. package/dist/commands/template/apply.js +0 -258
  299. package/dist/commands/template/apply.js.map +0 -1
  300. package/dist/commands/template/create.d.ts +0 -28
  301. package/dist/commands/template/create.js +0 -238
  302. package/dist/commands/template/create.js.map +0 -1
  303. package/dist/commands/template/delete.d.ts +0 -16
  304. package/dist/commands/template/delete.js +0 -141
  305. package/dist/commands/template/delete.js.map +0 -1
  306. package/dist/commands/template/index.d.ts +0 -11
  307. package/dist/commands/template/index.js +0 -65
  308. package/dist/commands/template/index.js.map +0 -1
  309. package/dist/commands/template/list.d.ts +0 -19
  310. package/dist/commands/template/list.js +0 -155
  311. package/dist/commands/template/list.js.map +0 -1
  312. package/dist/commands/template/save.d.ts +0 -17
  313. package/dist/commands/template/save.js +0 -101
  314. package/dist/commands/template/save.js.map +0 -1
  315. package/dist/commands/template/update.d.ts +0 -19
  316. package/dist/commands/template/update.js +0 -94
  317. package/dist/commands/template/update.js.map +0 -1
  318. package/dist/commands/ticket/template/apply.d.ts +0 -26
  319. package/dist/commands/ticket/template/apply.js +0 -15
  320. package/dist/commands/ticket/template/apply.js.map +0 -1
  321. package/dist/commands/ticket/template/delete.d.ts +0 -18
  322. package/dist/commands/ticket/template/delete.js +0 -63
  323. package/dist/commands/ticket/template/delete.js.map +0 -1
  324. package/dist/commands/ticket/template/list.d.ts +0 -17
  325. package/dist/commands/ticket/template/list.js +0 -79
  326. package/dist/commands/ticket/template/list.js.map +0 -1
  327. package/dist/commands/ticket/template/save.d.ts +0 -17
  328. package/dist/commands/ticket/template/save.js +0 -99
  329. package/dist/commands/ticket/template/save.js.map +0 -1
  330. package/dist/commands/work/spawn-all.d.ts +0 -19
  331. package/dist/commands/work/spawn-all.js +0 -64
  332. package/dist/commands/work/spawn-all.js.map +0 -1
  333. package/dist/commands/workflow/create.d.ts +0 -19
  334. package/dist/commands/workflow/create.js +0 -118
  335. package/dist/commands/workflow/create.js.map +0 -1
  336. package/dist/commands/workflow/delete.d.ts +0 -18
  337. package/dist/commands/workflow/delete.js +0 -108
  338. package/dist/commands/workflow/delete.js.map +0 -1
  339. package/dist/commands/workflow/index.d.ts +0 -16
  340. package/dist/commands/workflow/index.js +0 -73
  341. package/dist/commands/workflow/index.js.map +0 -1
  342. package/dist/commands/workflow/list.d.ts +0 -16
  343. package/dist/commands/workflow/list.js +0 -73
  344. package/dist/commands/workflow/list.js.map +0 -1
  345. package/dist/commands/workflow/setup.d.ts +0 -24
  346. package/dist/commands/workflow/setup.js +0 -351
  347. package/dist/commands/workflow/setup.js.map +0 -1
  348. package/dist/commands/workflow/show.d.ts +0 -13
  349. package/dist/commands/workflow/show.js +0 -17
  350. package/dist/commands/workflow/show.js.map +0 -1
  351. package/dist/commands/workflow/switch.js +0 -144
  352. package/dist/commands/workflow/switch.js.map +0 -1
  353. package/dist/commands/workflow/view.d.ts +0 -17
  354. package/dist/commands/workflow/view.js +0 -106
  355. package/dist/commands/workflow/view.js.map +0 -1
  356. package/dist/commands/workflow-rule/create.d.ts +0 -19
  357. package/dist/commands/workflow-rule/create.js +0 -141
  358. package/dist/commands/workflow-rule/create.js.map +0 -1
  359. package/dist/commands/workflow-rule/delete.d.ts +0 -18
  360. package/dist/commands/workflow-rule/delete.js +0 -72
  361. package/dist/commands/workflow-rule/delete.js.map +0 -1
  362. package/dist/commands/workflow-rule/index.d.ts +0 -16
  363. package/dist/commands/workflow-rule/index.js +0 -83
  364. package/dist/commands/workflow-rule/index.js.map +0 -1
  365. package/dist/commands/workflow-rule/list.d.ts +0 -17
  366. package/dist/commands/workflow-rule/list.js +0 -72
  367. package/dist/commands/workflow-rule/list.js.map +0 -1
  368. package/dist/commands/workflow-rule/update.d.ts +0 -22
  369. package/dist/commands/workflow-rule/update.js +0 -84
  370. package/dist/commands/workflow-rule/update.js.map +0 -1
@@ -1,82 +0,0 @@
1
- import { 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, outputPromptAsJson, createMetadata, buildPromptConfig, } from '../../lib/prompt-json.js';
6
- export default class Link extends PMOCommand {
7
- static description = 'Manage links (dependencies) between entities';
8
- static examples = [
9
- '<%= config.bin %> <%= command.id %> create TKT-001 TKT-002 --type blocks',
10
- '<%= config.bin %> <%= command.id %> list TKT-001',
11
- '<%= config.bin %> <%= command.id %> remove TKT-001 TKT-002',
12
- ];
13
- static args = {
14
- action: Args.string({
15
- description: 'Action to perform',
16
- options: ['create', 'list', 'remove'],
17
- required: false,
18
- }),
19
- };
20
- static flags = {
21
- ...pmoBaseFlags,
22
- };
23
- async execute() {
24
- const { args, flags } = await this.parse(Link);
25
- const jsonMode = shouldOutputJson(flags);
26
- let action = args.action;
27
- if (!action) {
28
- const menuChoices = [
29
- { name: 'Create a new link', value: 'create', command: 'prlt link create --help' },
30
- { name: 'List links for an entity', value: 'list', command: 'prlt link list --help' },
31
- { name: 'Remove a link', value: 'remove', command: 'prlt link remove --help' },
32
- { name: 'Cancel', value: 'cancel', command: '' },
33
- ];
34
- const message = 'What would you like to do?';
35
- if (jsonMode) {
36
- outputPromptAsJson(buildPromptConfig('list', 'action', message, menuChoices), createMetadata('link', flags));
37
- return;
38
- }
39
- const { selected } = await this.prompt([{
40
- type: 'list',
41
- name: 'selected',
42
- message,
43
- choices: [
44
- ...menuChoices.slice(0, 3).map(c => ({ name: c.name, value: c.value })),
45
- new inquirer.Separator(),
46
- { name: menuChoices[3].name, value: menuChoices[3].value }
47
- ]
48
- }], null);
49
- if (selected === 'cancel') {
50
- this.log(styles.muted('\nCancelled.'));
51
- return;
52
- }
53
- action = selected;
54
- }
55
- // Show help for the selected action
56
- this.log(styles.muted(`\nUsage:`));
57
- switch (action) {
58
- case 'create':
59
- this.log(' prlt link create <from> <to> --type <blocks|relates|duplicates|depends>');
60
- this.log('');
61
- this.log('Examples:');
62
- this.log(' prlt link create TKT-001 TKT-002 --type blocks # TKT-001 is blocked by TKT-002');
63
- this.log(' prlt link create SPEC-001 SPEC-002 --type depends # SPEC-001 depends on SPEC-002');
64
- break;
65
- case 'list':
66
- this.log(' prlt link list <entity-id>');
67
- this.log('');
68
- this.log('Examples:');
69
- this.log(' prlt link list TKT-001 # List links for ticket');
70
- this.log(' prlt link list SPEC-001 --all # Include reverse links');
71
- break;
72
- case 'remove':
73
- this.log(' prlt link remove <from> <to>');
74
- this.log('');
75
- this.log('Examples:');
76
- this.log(' prlt link remove TKT-001 TKT-002');
77
- this.log(' prlt link remove SPEC-001 SPEC-002 --type depends');
78
- break;
79
- }
80
- }
81
- }
82
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/link/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,aAAa,CAAA;AAClC,OAAO,QAAQ,MAAM,UAAU,CAAA;AAC/B,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAA;AACjE,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAA;AAC5C,OAAO,EACL,gBAAgB,EAChB,kBAAkB,EAClB,cAAc,EACd,iBAAiB,GAClB,MAAM,0BAA0B,CAAA;AAEjC,MAAM,CAAC,OAAO,OAAO,IAAK,SAAQ,UAAU;IAC1C,MAAM,CAAC,WAAW,GAAG,8CAA8C,CAAA;IAEnE,MAAM,CAAC,QAAQ,GAAG;QAChB,0EAA0E;QAC1E,kDAAkD;QAClD,4DAA4D;KAC7D,CAAA;IAED,MAAM,CAAC,IAAI,GAAG;QACZ,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC;YAClB,WAAW,EAAE,mBAAmB;YAChC,OAAO,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC;YACrC,QAAQ,EAAE,KAAK;SAChB,CAAC;KACH,CAAA;IAED,MAAM,CAAC,KAAK,GAAG;QACb,GAAG,YAAY;KAChB,CAAA;IAED,KAAK,CAAC,OAAO;QACX,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;QAE9C,MAAM,QAAQ,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAA;QAExC,IAAI,MAAM,GAAG,IAAI,CAAC,MAAM,CAAA;QAExB,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,WAAW,GAAG;gBAClB,EAAE,IAAI,EAAE,mBAAmB,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,yBAAyB,EAAE;gBAClF,EAAE,IAAI,EAAE,0BAA0B,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,uBAAuB,EAAE;gBACrF,EAAE,IAAI,EAAE,eAAe,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,yBAAyB,EAAE;gBAC9E,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,EAAE;aACjD,CAAA;YACD,MAAM,OAAO,GAAG,4BAA4B,CAAA;YAE5C,IAAI,QAAQ,EAAE,CAAC;gBACb,kBAAkB,CAChB,iBAAiB,CAAC,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,WAAW,CAAC,EACzD,cAAc,CAAC,MAAM,EAAE,KAAK,CAAC,CAC9B,CAAA;gBACD,OAAM;YACR,CAAC;YAED,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,IAAI,CAAC,MAAM,CAAuB,CAAC;oBAC5D,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,UAAU;oBAChB,OAAO;oBACP,OAAO,EAAE;wBACP,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;wBACvE,IAAI,QAAQ,CAAC,SAAS,EAAE;wBACxB,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE;qBAC3D;iBACF,CAAC,EAAE,IAAI,CAAC,CAAA;YAET,IAAI,QAAQ,KAAK,QAAQ,EAAE,CAAC;gBAC1B,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,CAAA;gBACtC,OAAM;YACR,CAAC;YAED,MAAM,GAAG,QAAQ,CAAA;QACnB,CAAC;QAED,oCAAoC;QACpC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAA;QAClC,QAAQ,MAAM,EAAE,CAAC;YACf,KAAK,QAAQ;gBACX,IAAI,CAAC,GAAG,CAAC,2EAA2E,CAAC,CAAA;gBACrF,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;gBACZ,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,CAAA;gBACrB,IAAI,CAAC,GAAG,CAAC,oFAAoF,CAAC,CAAA;gBAC9F,IAAI,CAAC,GAAG,CAAC,oFAAoF,CAAC,CAAA;gBAC9F,MAAK;YACP,KAAK,MAAM;gBACT,IAAI,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAA;gBACxC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;gBACZ,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,CAAA;gBACrB,IAAI,CAAC,GAAG,CAAC,wDAAwD,CAAC,CAAA;gBAClE,IAAI,CAAC,GAAG,CAAC,yDAAyD,CAAC,CAAA;gBACnE,MAAK;YACP,KAAK,QAAQ;gBACX,IAAI,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAA;gBAC1C,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;gBACZ,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,CAAA;gBACrB,IAAI,CAAC,GAAG,CAAC,oCAAoC,CAAC,CAAA;gBAC9C,IAAI,CAAC,GAAG,CAAC,qDAAqD,CAAC,CAAA;gBAC/D,MAAK;QACT,CAAC;IACH,CAAC"}
@@ -1,18 +0,0 @@
1
- import { PMOCommand } from '../../lib/pmo/index.js';
2
- export default class LinkList extends PMOCommand {
3
- static description: string;
4
- static examples: string[];
5
- static args: {
6
- id: import("@oclif/core/interfaces").Arg<string, Record<string, unknown>>;
7
- };
8
- static flags: {
9
- all: import("@oclif/core/interfaces").BooleanFlag<boolean>;
10
- json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
11
- machine: import("@oclif/core/interfaces").BooleanFlag<boolean>;
12
- project: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
13
- };
14
- execute(): Promise<void>;
15
- private listTicketLinks;
16
- private listSpecLinks;
17
- private listEpicLinks;
18
- }
@@ -1,178 +0,0 @@
1
- /* eslint-disable no-await-in-loop */
2
- import { Args, Flags } from '@oclif/core';
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
- /**
7
- * Infer entity type from ID prefix
8
- */
9
- function inferEntityType(id) {
10
- const upper = id.toUpperCase();
11
- if (upper.startsWith('TKT-'))
12
- return 'ticket';
13
- if (upper.startsWith('SPEC-'))
14
- return 'spec';
15
- if (upper.startsWith('EPIC-'))
16
- return 'epic';
17
- return null;
18
- }
19
- export default class LinkList extends PMOCommand {
20
- static description = 'List all links (dependencies) for an entity';
21
- static examples = [
22
- '<%= config.bin %> <%= command.id %> TKT-001 # List ticket links',
23
- '<%= config.bin %> <%= command.id %> SPEC-001 # List spec links',
24
- '<%= config.bin %> <%= command.id %> EPIC-001 # List epic links',
25
- '<%= config.bin %> <%= command.id %> TKT-001 --all # Include reverse links',
26
- ];
27
- static args = {
28
- id: Args.string({
29
- description: 'Entity ID (TKT-xxx, SPEC-xxx, or EPIC-xxx)',
30
- required: true,
31
- }),
32
- };
33
- static flags = {
34
- ...pmoBaseFlags,
35
- all: Flags.boolean({
36
- char: 'a',
37
- description: 'Show all links including reverse dependencies (what blocks this, what this blocks)',
38
- default: false,
39
- }),
40
- };
41
- async execute() {
42
- const { args, flags } = await this.parse(LinkList);
43
- const jsonMode = shouldOutputJson(flags);
44
- const handleError = (code, message) => {
45
- if (jsonMode) {
46
- outputErrorAsJson(code, message, createMetadata('link list', flags));
47
- return;
48
- }
49
- this.error(message);
50
- };
51
- const entityType = inferEntityType(args.id);
52
- if (!entityType) {
53
- return handleError('INVALID_ID', `Cannot infer entity type from "${args.id}". Use TKT-, SPEC-, or EPIC- prefix.`);
54
- }
55
- if (entityType === 'ticket') {
56
- await this.listTicketLinks(args.id, flags.all);
57
- }
58
- else if (entityType === 'spec') {
59
- await this.listSpecLinks(args.id, flags.all);
60
- }
61
- else if (entityType === 'epic') {
62
- await this.listEpicLinks(args.id, flags.all);
63
- }
64
- }
65
- async listTicketLinks(ticketId, showAll) {
66
- const ticket = await this.storage.getTicket(ticketId);
67
- if (!ticket) {
68
- this.error(`Ticket not found: ${ticketId}`);
69
- }
70
- const dependencies = await this.storage.listTicketDependencies(ticketId);
71
- const blockers = await this.storage.getTicketBlockers(ticketId);
72
- const isBlocked = await this.storage.isTicketBlocked(ticketId);
73
- this.log(`\n${styles.emphasis(ticket.id)}: ${ticket.title}`);
74
- if (isBlocked) {
75
- this.log(styles.warning(' Status: BLOCKED'));
76
- }
77
- if (blockers.length > 0) {
78
- this.log(styles.muted('\n Blocked by:'));
79
- for (const blocker of blockers) {
80
- const status = blocker.status === 'done' ? styles.success('done') : styles.warning(blocker.status);
81
- this.log(` - ${blocker.id}: ${blocker.title} (${status})`);
82
- }
83
- }
84
- const otherDeps = dependencies.filter(d => d.dependencyType !== 'blocks');
85
- if (otherDeps.length > 0) {
86
- this.log(styles.muted('\n Related:'));
87
- const relatedTickets = await Promise.all(otherDeps.map(async (dep) => ({
88
- dep,
89
- ticket: await this.storage.getTicket(dep.dependsOnTicketId)
90
- })));
91
- for (const { dep, ticket: relatedTicket } of relatedTickets) {
92
- if (relatedTicket) {
93
- this.log(` - ${dep.dependencyType}: ${relatedTicket.id} - ${relatedTicket.title}`);
94
- }
95
- }
96
- }
97
- if (showAll) {
98
- const blockedBy = await this.storage.getTicketsBlockedBy(ticketId);
99
- if (blockedBy.length > 0) {
100
- this.log(styles.muted('\n Blocking:'));
101
- for (const blocked of blockedBy) {
102
- this.log(` - ${blocked.id}: ${blocked.title} (${blocked.status})`);
103
- }
104
- }
105
- }
106
- if (dependencies.length === 0 && blockers.length === 0) {
107
- this.log(styles.muted('\n No links.'));
108
- }
109
- this.log('');
110
- }
111
- async listSpecLinks(specId, _showAll) {
112
- const spec = await this.storage.getSpec(specId);
113
- if (!spec) {
114
- this.error(`Spec not found: ${specId}`);
115
- }
116
- const dependencies = await this.storage.listSpecDependencies(specId);
117
- this.log(`\n${styles.emphasis(spec.id)}: ${spec.title}`);
118
- if (dependencies.length === 0) {
119
- this.log(styles.muted('\n No links.'));
120
- this.log('');
121
- return;
122
- }
123
- // Group by type
124
- const byType = {};
125
- for (const dep of dependencies) {
126
- if (!byType[dep.dependencyType])
127
- byType[dep.dependencyType] = [];
128
- byType[dep.dependencyType].push(dep);
129
- }
130
- for (const [depType, deps] of Object.entries(byType)) {
131
- this.log(styles.muted(`\n ${depType}:`));
132
- for (const dep of deps) {
133
- const targetSpec = await this.storage.getSpec(dep.dependsOnSpecId);
134
- if (targetSpec) {
135
- this.log(` - ${targetSpec.id}: ${targetSpec.title}`);
136
- }
137
- }
138
- }
139
- this.log('');
140
- }
141
- async listEpicLinks(epicId, _showAll) {
142
- const epic = await this.storage.getEpic(epicId);
143
- if (!epic) {
144
- this.error(`Epic not found: ${epicId}`);
145
- }
146
- const dependencies = await this.storage.listEpicDependencies(epicId);
147
- this.log(`\n${styles.emphasis(epic.id)}: ${epic.title}`);
148
- // Show blocking dependencies
149
- const blockingDeps = dependencies.filter(d => d.dependencyType === 'blocks');
150
- if (blockingDeps.length > 0) {
151
- this.log(styles.muted('\n Blocked by:'));
152
- for (const dep of blockingDeps) {
153
- const blocker = await this.storage.getEpic(dep.dependsOnEpicId);
154
- if (blocker) {
155
- const status = blocker.status === 'complete' ? styles.success('done') : styles.warning(blocker.status);
156
- this.log(` - ${blocker.id}: ${blocker.title} (${status})`);
157
- }
158
- }
159
- }
160
- const otherDeps = dependencies.filter(d => d.dependencyType !== 'blocks');
161
- if (otherDeps.length > 0) {
162
- this.log(styles.muted('\n Related:'));
163
- for (const dep of otherDeps) {
164
- const targetEpic = await this.storage.getEpic(dep.dependsOnEpicId);
165
- if (targetEpic) {
166
- this.log(` - ${dep.dependencyType}: ${targetEpic.id} - ${targetEpic.title}`);
167
- }
168
- }
169
- }
170
- // Note: showAll would show reverse dependencies, but we don't have getEpicsBlockedBy
171
- // For now, we just show the epic's own dependencies
172
- if (dependencies.length === 0) {
173
- this.log(styles.muted('\n No links.'));
174
- }
175
- this.log('');
176
- }
177
- }
178
- //# sourceMappingURL=list.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"list.js","sourceRoot":"","sources":["../../../src/commands/link/list.ts"],"names":[],"mappings":"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"}
@@ -1,16 +0,0 @@
1
- import { PMOCommand } from '../../lib/pmo/index.js';
2
- export default class LinkRemove extends PMOCommand {
3
- static description: string;
4
- static examples: string[];
5
- static args: {
6
- from: import("@oclif/core/interfaces").Arg<string, Record<string, unknown>>;
7
- to: import("@oclif/core/interfaces").Arg<string, Record<string, unknown>>;
8
- };
9
- static flags: {
10
- type: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
11
- json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
12
- machine: import("@oclif/core/interfaces").BooleanFlag<boolean>;
13
- project: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
14
- };
15
- execute(): Promise<void>;
16
- }
@@ -1,115 +0,0 @@
1
- import { Args, Flags } from '@oclif/core';
2
- import { autoExportToBoard, PMOCommand, pmoBaseFlags } from '../../lib/pmo/index.js';
3
- import { styles } from '../../lib/styles.js';
4
- import { shouldOutputJson, outputErrorAsJson, createMetadata, } from '../../lib/prompt-json.js';
5
- /**
6
- * Infer entity type from ID prefix
7
- */
8
- function inferEntityType(id) {
9
- const upper = id.toUpperCase();
10
- if (upper.startsWith('TKT-'))
11
- return 'ticket';
12
- if (upper.startsWith('SPEC-'))
13
- return 'spec';
14
- if (upper.startsWith('EPIC-'))
15
- return 'epic';
16
- return null;
17
- }
18
- export default class LinkRemove extends PMOCommand {
19
- static description = 'Remove a link (dependency) between two entities';
20
- static examples = [
21
- '<%= config.bin %> <%= command.id %> TKT-001 TKT-002 # Remove link between tickets',
22
- '<%= config.bin %> <%= command.id %> SPEC-001 SPEC-002 # Remove link between specs',
23
- '<%= config.bin %> <%= command.id %> EPIC-001 EPIC-002 # Remove link between epics',
24
- ];
25
- static args = {
26
- from: Args.string({
27
- description: 'Source entity ID (TKT-xxx, SPEC-xxx, or EPIC-xxx)',
28
- required: true,
29
- }),
30
- to: Args.string({
31
- description: 'Target entity ID',
32
- required: true,
33
- }),
34
- };
35
- static flags = {
36
- ...pmoBaseFlags,
37
- type: Flags.string({
38
- char: 't',
39
- description: 'Link type to remove (if not specified, removes any link)',
40
- options: ['blocks', 'relates', 'duplicates', 'depends'],
41
- }),
42
- };
43
- async execute() {
44
- const { args, flags } = await this.parse(LinkRemove);
45
- const jsonMode = shouldOutputJson(flags);
46
- const handleError = (code, message) => {
47
- if (jsonMode) {
48
- outputErrorAsJson(code, message, createMetadata('link remove', flags));
49
- return;
50
- }
51
- this.error(message);
52
- };
53
- const fromType = inferEntityType(args.from);
54
- const toType = inferEntityType(args.to);
55
- if (!fromType) {
56
- return handleError('INVALID_FROM_ID', `Cannot infer entity type from "${args.from}". Use TKT-, SPEC-, or EPIC- prefix.`);
57
- }
58
- if (!toType) {
59
- return handleError('INVALID_TO_ID', `Cannot infer entity type from "${args.to}". Use TKT-, SPEC-, or EPIC- prefix.`);
60
- }
61
- if (fromType !== toType) {
62
- return handleError('TYPE_MISMATCH', `Cannot link different entity types: ${fromType} and ${toType}`);
63
- }
64
- // Map the link type to the storage dependency type
65
- const linkType = flags.type;
66
- const dependencyType = linkType === 'relates' ? 'relates_to' :
67
- linkType === 'depends' ? 'depends_on' : linkType;
68
- try {
69
- if (fromType === 'ticket') {
70
- const ticket = await this.storage.getTicket(args.from);
71
- if (!ticket)
72
- return handleError('FROM_NOT_FOUND', `Ticket not found: ${args.from}`);
73
- const targetTicket = await this.storage.getTicket(args.to);
74
- if (!targetTicket)
75
- return handleError('TO_NOT_FOUND', `Ticket not found: ${args.to}`);
76
- await this.storage.deleteTicketDependency(args.from, args.to, dependencyType);
77
- await autoExportToBoard(this.pmoPath, this.storage, (msg) => this.log(styles.muted(msg)));
78
- this.log(styles.success(`\n✅ Link removed: ${styles.emphasis(args.from)} → ${styles.emphasis(args.to)}`));
79
- this.log(styles.muted(` ${ticket.title} no longer linked to ${targetTicket.title}`));
80
- }
81
- else if (fromType === 'spec') {
82
- const spec = await this.storage.getSpec(args.from);
83
- if (!spec)
84
- return handleError('FROM_NOT_FOUND', `Spec not found: ${args.from}`);
85
- const targetSpec = await this.storage.getSpec(args.to);
86
- if (!targetSpec)
87
- return handleError('TO_NOT_FOUND', `Spec not found: ${args.to}`);
88
- await this.storage.deleteSpecDependency(args.from, args.to, dependencyType);
89
- this.log(styles.success(`\n✅ Link removed: ${styles.emphasis(args.from)} → ${styles.emphasis(args.to)}`));
90
- this.log(styles.muted(` ${spec.title} no longer linked to ${targetSpec.title}`));
91
- }
92
- else if (fromType === 'epic') {
93
- const epic = await this.storage.getEpic(args.from);
94
- if (!epic)
95
- return handleError('FROM_NOT_FOUND', `Epic not found: ${args.from}`);
96
- const targetEpic = await this.storage.getEpic(args.to);
97
- if (!targetEpic)
98
- return handleError('TO_NOT_FOUND', `Epic not found: ${args.to}`);
99
- await this.storage.deleteEpicDependency(args.from, args.to, dependencyType);
100
- await autoExportToBoard(this.pmoPath, this.storage, (msg) => this.log(styles.muted(msg)));
101
- this.log(styles.success(`\n✅ Link removed: ${styles.emphasis(args.from)} → ${styles.emphasis(args.to)}`));
102
- this.log(styles.muted(` ${epic.title} no longer linked to ${targetEpic.title}`));
103
- }
104
- }
105
- catch (error) {
106
- if (error instanceof Error) {
107
- if (error.message.includes('not found')) {
108
- return handleError('LINK_NOT_FOUND', 'Link not found');
109
- }
110
- }
111
- throw error;
112
- }
113
- }
114
- }
115
- //# sourceMappingURL=remove.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"remove.js","sourceRoot":"","sources":["../../../src/commands/link/remove.ts"],"names":[],"mappings":"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"}
@@ -1,19 +0,0 @@
1
- import { PMOCommand } from '../../lib/pmo/index.js';
2
- export default class Add extends PMOCommand {
3
- static description: string;
4
- static examples: string[];
5
- static args: {
6
- path: import("@oclif/core/interfaces").Arg<string | undefined, Record<string, unknown>>;
7
- };
8
- static flags: {
9
- interval: import("@oclif/core/interfaces").OptionFlag<number, import("@oclif/core/interfaces").CustomOptions>;
10
- transcribe: import("@oclif/core/interfaces").BooleanFlag<boolean>;
11
- json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
12
- machine: import("@oclif/core/interfaces").BooleanFlag<boolean>;
13
- project: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
14
- };
15
- protected getPMOOptions(): {
16
- promptIfMultiple: boolean;
17
- };
18
- execute(): Promise<void>;
19
- }
@@ -1,98 +0,0 @@
1
- import { Args, Flags } from '@oclif/core';
2
- import { PMOCommand, pmoBaseFlags } from '../../lib/pmo/index.js';
3
- import { colors, format } from '../../lib/colors.js';
4
- import { findHQRoot } from '../../lib/repos/index.js';
5
- import { addMedia, isFfmpegInstalled } from '../../lib/media/index.js';
6
- import { shouldOutputJson, outputErrorAsJson, createMetadata, } from '../../lib/prompt-json.js';
7
- export default class Add extends PMOCommand {
8
- static description = 'Add a video or audio file to the HQ for preprocessing';
9
- static examples = [
10
- '<%= config.bin %> <%= command.id %> /path/to/video.mp4',
11
- '<%= config.bin %> <%= command.id %> /path/to/video.mp4 --interval 60',
12
- '<%= config.bin %> <%= command.id %> /path/to/audio.mp3 --no-transcribe',
13
- ];
14
- static args = {
15
- path: Args.string({
16
- description: 'Path to the media file (video or audio)',
17
- required: false,
18
- }),
19
- };
20
- static flags = {
21
- ...pmoBaseFlags,
22
- interval: Flags.integer({
23
- char: 'i',
24
- description: 'Frame extraction interval in seconds',
25
- default: 30,
26
- }),
27
- transcribe: Flags.boolean({
28
- description: 'Generate transcript using whisper',
29
- default: true,
30
- allowNo: true,
31
- }),
32
- };
33
- getPMOOptions() {
34
- return { promptIfMultiple: false };
35
- }
36
- async execute() {
37
- const { args, flags } = await this.parse(Add);
38
- const jsonMode = shouldOutputJson(flags);
39
- const handleError = (code, message) => {
40
- if (jsonMode) {
41
- outputErrorAsJson(code, message, createMetadata('media add', flags));
42
- return;
43
- }
44
- this.error(message);
45
- };
46
- const hqPath = findHQRoot();
47
- if (!hqPath) {
48
- return handleError('NOT_IN_HQ', 'Not in an HQ directory. Run "prlt new" first.');
49
- }
50
- if (!isFfmpegInstalled()) {
51
- return handleError('FFMPEG_NOT_INSTALLED', 'ffmpeg is not installed. Install it with: brew install ffmpeg');
52
- }
53
- let filePath;
54
- if (args.path) {
55
- filePath = args.path;
56
- }
57
- else {
58
- if (jsonMode) {
59
- const agentConfig = { flags, commandName: 'media add' };
60
- await this.prompt([{
61
- type: 'input',
62
- name: 'path',
63
- message: 'Enter path to media file:',
64
- }], agentConfig);
65
- return;
66
- }
67
- const { path: inputPath } = await this.prompt([{
68
- type: 'input',
69
- name: 'path',
70
- message: 'Enter path to media file (video or audio):',
71
- }]);
72
- if (!inputPath || !inputPath.trim()) {
73
- this.log(colors.textMuted('Operation cancelled.'));
74
- return;
75
- }
76
- filePath = inputPath.trim();
77
- }
78
- this.log(colors.primary(`\n🎬 Adding media: ${filePath}\n`));
79
- const result = await addMedia(hqPath, filePath, {
80
- interval: flags.interval,
81
- transcribe: flags.transcribe,
82
- });
83
- if (result.success) {
84
- this.log('');
85
- this.log(format.success(`Media "${result.name}" added and preprocessed`));
86
- this.log(colors.textMuted(` Location: media/${result.name}/`));
87
- this.log(colors.textMuted(` View details: prlt media show ${result.name}`));
88
- }
89
- else {
90
- if (jsonMode) {
91
- outputErrorAsJson('ADD_FAILED', `Failed to add media: ${result.error}`, createMetadata('media add', flags));
92
- return;
93
- }
94
- this.error(`Failed to add media: ${result.error}`);
95
- }
96
- }
97
- }
98
- //# sourceMappingURL=add.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"add.js","sourceRoot":"","sources":["../../../src/commands/media/add.ts"],"names":[],"mappings":"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"}
@@ -1,14 +0,0 @@
1
- import { PMOCommand } from '../../lib/pmo/index.js';
2
- export default class Media extends PMOCommand {
3
- static description: string;
4
- static examples: string[];
5
- static flags: {
6
- json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
7
- machine: import("@oclif/core/interfaces").BooleanFlag<boolean>;
8
- project: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
9
- };
10
- protected getPMOOptions(): {
11
- promptIfMultiple: boolean;
12
- };
13
- execute(): Promise<void>;
14
- }