@proletariat/cli 0.1.4 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (526) hide show
  1. package/README.md +510 -255
  2. package/bin/dev.cmd +3 -0
  3. package/bin/dev.js +5 -0
  4. package/bin/run.cmd +3 -0
  5. package/bin/run.js +23 -0
  6. package/dist/commands/action/create.d.ts +21 -0
  7. package/dist/commands/action/create.js +126 -0
  8. package/dist/commands/action/delete.d.ts +17 -0
  9. package/dist/commands/action/delete.js +78 -0
  10. package/dist/commands/action/index.d.ts +15 -0
  11. package/dist/commands/action/index.js +107 -0
  12. package/dist/commands/action/list.d.ts +14 -0
  13. package/dist/commands/action/list.js +89 -0
  14. package/dist/commands/action/run.d.ts +19 -0
  15. package/dist/commands/action/run.js +179 -0
  16. package/dist/commands/action/show.d.ts +15 -0
  17. package/dist/commands/action/show.js +47 -0
  18. package/dist/commands/action/update.d.ts +22 -0
  19. package/dist/commands/action/update.js +168 -0
  20. package/dist/commands/agent/index.d.ts +13 -0
  21. package/dist/commands/agent/index.js +131 -0
  22. package/dist/commands/agent/list.d.ts +7 -0
  23. package/dist/commands/agent/list.js +126 -0
  24. package/dist/commands/agent/login.d.ts +16 -0
  25. package/dist/commands/agent/login.js +146 -0
  26. package/dist/commands/agent/rebuild.d.ts +18 -0
  27. package/dist/commands/agent/rebuild.js +133 -0
  28. package/dist/commands/agent/restart.d.ts +17 -0
  29. package/dist/commands/agent/restart.js +116 -0
  30. package/dist/commands/agent/shell.d.ts +23 -0
  31. package/dist/commands/agent/shell.js +378 -0
  32. package/dist/commands/agent/staff/add.d.ts +15 -0
  33. package/dist/commands/agent/staff/add.js +281 -0
  34. package/dist/commands/agent/staff/index.d.ts +14 -0
  35. package/dist/commands/agent/staff/index.js +90 -0
  36. package/dist/commands/agent/staff/list.d.ts +7 -0
  37. package/dist/commands/agent/staff/list.js +90 -0
  38. package/dist/commands/agent/staff/remove.d.ts +16 -0
  39. package/dist/commands/agent/staff/remove.js +137 -0
  40. package/dist/commands/agent/status.d.ts +17 -0
  41. package/dist/commands/agent/status.js +139 -0
  42. package/dist/commands/agent/temp/cleanup.d.ts +23 -0
  43. package/dist/commands/agent/temp/cleanup.js +388 -0
  44. package/dist/commands/agent/temp/index.d.ts +14 -0
  45. package/dist/commands/agent/temp/index.js +82 -0
  46. package/dist/commands/agent/temp/list.d.ts +7 -0
  47. package/dist/commands/agent/temp/list.js +108 -0
  48. package/dist/commands/agent/themes/add-names.d.ts +10 -0
  49. package/dist/commands/agent/themes/add-names.js +67 -0
  50. package/dist/commands/agent/themes/create.d.ts +13 -0
  51. package/dist/commands/agent/themes/create.js +66 -0
  52. package/dist/commands/agent/themes/index.d.ts +9 -0
  53. package/dist/commands/agent/themes/index.js +194 -0
  54. package/dist/commands/agent/themes/list.d.ts +6 -0
  55. package/dist/commands/agent/themes/list.js +41 -0
  56. package/dist/commands/agent/themes/set.d.ts +12 -0
  57. package/dist/commands/agent/themes/set.js +77 -0
  58. package/dist/commands/agent/visit.d.ts +16 -0
  59. package/dist/commands/agent/visit.js +88 -0
  60. package/dist/commands/autocomplete/setup.d.ts +14 -0
  61. package/dist/commands/autocomplete/setup.js +154 -0
  62. package/dist/commands/board/index.d.ts +17 -0
  63. package/dist/commands/board/index.js +255 -0
  64. package/dist/commands/board/watch.d.ts +13 -0
  65. package/dist/commands/board/watch.js +52 -0
  66. package/dist/commands/branch/create.d.ts +50 -0
  67. package/dist/commands/branch/create.js +624 -0
  68. package/dist/commands/branch/index.d.ts +13 -0
  69. package/dist/commands/branch/index.js +50 -0
  70. package/dist/commands/branch/list.d.ts +17 -0
  71. package/dist/commands/branch/list.js +120 -0
  72. package/dist/commands/branch/validate.d.ts +15 -0
  73. package/dist/commands/branch/validate.js +73 -0
  74. package/dist/commands/commit.d.ts +71 -0
  75. package/dist/commands/commit.js +499 -0
  76. package/dist/commands/docker/clean.d.ts +13 -0
  77. package/dist/commands/docker/clean.js +224 -0
  78. package/dist/commands/docker/index.d.ts +19 -0
  79. package/dist/commands/docker/index.js +274 -0
  80. package/dist/commands/docker/list.d.ts +16 -0
  81. package/dist/commands/docker/list.js +200 -0
  82. package/dist/commands/docker/logs.d.ts +14 -0
  83. package/dist/commands/docker/logs.js +118 -0
  84. package/dist/commands/docker/prune.d.ts +14 -0
  85. package/dist/commands/docker/prune.js +211 -0
  86. package/dist/commands/docker/restart.d.ts +14 -0
  87. package/dist/commands/docker/restart.js +129 -0
  88. package/dist/commands/docker/shell.d.ts +14 -0
  89. package/dist/commands/docker/shell.js +103 -0
  90. package/dist/commands/docker/start.d.ts +12 -0
  91. package/dist/commands/docker/start.js +92 -0
  92. package/dist/commands/docker/status.d.ts +7 -0
  93. package/dist/commands/docker/status.js +40 -0
  94. package/dist/commands/docker/stop.d.ts +14 -0
  95. package/dist/commands/docker/stop.js +134 -0
  96. package/dist/commands/docker/sync.d.ts +15 -0
  97. package/dist/commands/docker/sync.js +112 -0
  98. package/dist/commands/epic/activate.d.ts +13 -0
  99. package/dist/commands/epic/activate.js +118 -0
  100. package/dist/commands/epic/archive.d.ts +14 -0
  101. package/dist/commands/epic/archive.js +132 -0
  102. package/dist/commands/epic/create.d.ts +15 -0
  103. package/dist/commands/epic/create.js +137 -0
  104. package/dist/commands/epic/index.d.ts +13 -0
  105. package/dist/commands/epic/index.js +88 -0
  106. package/dist/commands/epic/link/block.d.ts +14 -0
  107. package/dist/commands/epic/link/block.js +79 -0
  108. package/dist/commands/epic/link/duplicates.d.ts +14 -0
  109. package/dist/commands/epic/link/duplicates.js +66 -0
  110. package/dist/commands/epic/link/index.d.ts +19 -0
  111. package/dist/commands/epic/link/index.js +242 -0
  112. package/dist/commands/epic/link/relates.d.ts +14 -0
  113. package/dist/commands/epic/link/relates.js +66 -0
  114. package/dist/commands/epic/link/remove.d.ts +16 -0
  115. package/dist/commands/epic/link/remove.js +89 -0
  116. package/dist/commands/epic/list.d.ts +11 -0
  117. package/dist/commands/epic/list.js +87 -0
  118. package/dist/commands/epic/move.d.ts +15 -0
  119. package/dist/commands/epic/move.js +184 -0
  120. package/dist/commands/epic/progress.d.ts +16 -0
  121. package/dist/commands/epic/progress.js +166 -0
  122. package/dist/commands/epic/project.d.ts +15 -0
  123. package/dist/commands/epic/project.js +219 -0
  124. package/dist/commands/epic/reorder.d.ts +21 -0
  125. package/dist/commands/epic/reorder.js +160 -0
  126. package/dist/commands/epic/spec.d.ts +15 -0
  127. package/dist/commands/epic/spec.js +191 -0
  128. package/dist/commands/epic/ticket.d.ts +18 -0
  129. package/dist/commands/epic/ticket.js +291 -0
  130. package/dist/commands/epic/view.d.ts +13 -0
  131. package/dist/commands/epic/view.js +117 -0
  132. package/dist/commands/execution/index.d.ts +13 -0
  133. package/dist/commands/execution/index.js +70 -0
  134. package/dist/commands/execution/list.d.ts +15 -0
  135. package/dist/commands/execution/list.js +144 -0
  136. package/dist/commands/execution/logs.d.ts +18 -0
  137. package/dist/commands/execution/logs.js +161 -0
  138. package/dist/commands/execution/stop.d.ts +22 -0
  139. package/dist/commands/execution/stop.js +248 -0
  140. package/dist/commands/gh/index.d.ts +9 -0
  141. package/dist/commands/gh/index.js +53 -0
  142. package/dist/commands/gh/login.d.ts +6 -0
  143. package/dist/commands/gh/login.js +57 -0
  144. package/dist/commands/gh/status.d.ts +6 -0
  145. package/dist/commands/gh/status.js +48 -0
  146. package/dist/commands/gh/token.d.ts +6 -0
  147. package/dist/commands/gh/token.js +59 -0
  148. package/dist/commands/init.d.ts +26 -0
  149. package/dist/commands/init.js +200 -0
  150. package/dist/commands/phase/create.d.ts +22 -0
  151. package/dist/commands/phase/create.js +123 -0
  152. package/dist/commands/phase/delete.d.ts +17 -0
  153. package/dist/commands/phase/delete.js +73 -0
  154. package/dist/commands/phase/list.d.ts +12 -0
  155. package/dist/commands/phase/list.js +76 -0
  156. package/dist/commands/phase/move.d.ts +17 -0
  157. package/dist/commands/phase/move.js +115 -0
  158. package/dist/commands/phase/template/apply.d.ts +17 -0
  159. package/dist/commands/phase/template/apply.js +106 -0
  160. package/dist/commands/phase/template/create.d.ts +16 -0
  161. package/dist/commands/phase/template/create.js +58 -0
  162. package/dist/commands/phase/template/delete.d.ts +17 -0
  163. package/dist/commands/phase/template/delete.js +98 -0
  164. package/dist/commands/phase/template/index.d.ts +15 -0
  165. package/dist/commands/phase/template/index.js +128 -0
  166. package/dist/commands/phase/template/list.d.ts +16 -0
  167. package/dist/commands/phase/template/list.js +95 -0
  168. package/dist/commands/phase/template/update.d.ts +17 -0
  169. package/dist/commands/phase/template/update.js +89 -0
  170. package/dist/commands/phase/update.d.ts +23 -0
  171. package/dist/commands/phase/update.js +174 -0
  172. package/dist/commands/pmo/init.d.ts +25 -0
  173. package/dist/commands/pmo/init.js +341 -0
  174. package/dist/commands/pr/create.d.ts +17 -0
  175. package/dist/commands/pr/create.js +242 -0
  176. package/dist/commands/pr/index.d.ts +9 -0
  177. package/dist/commands/pr/index.js +68 -0
  178. package/dist/commands/pr/link.d.ts +14 -0
  179. package/dist/commands/pr/link.js +212 -0
  180. package/dist/commands/pr/status.d.ts +12 -0
  181. package/dist/commands/pr/status.js +161 -0
  182. package/dist/commands/project/archive.d.ts +17 -0
  183. package/dist/commands/project/archive.js +83 -0
  184. package/dist/commands/project/create.d.ts +22 -0
  185. package/dist/commands/project/create.js +143 -0
  186. package/dist/commands/project/delete.d.ts +17 -0
  187. package/dist/commands/project/delete.js +128 -0
  188. package/dist/commands/project/index.d.ts +13 -0
  189. package/dist/commands/project/index.js +64 -0
  190. package/dist/commands/project/list.d.ts +14 -0
  191. package/dist/commands/project/list.js +96 -0
  192. package/dist/commands/project/spec.d.ts +18 -0
  193. package/dist/commands/project/spec.js +216 -0
  194. package/dist/commands/project/unarchive.d.ts +15 -0
  195. package/dist/commands/project/unarchive.js +35 -0
  196. package/dist/commands/project/view.d.ts +16 -0
  197. package/dist/commands/project/view.js +94 -0
  198. package/dist/commands/repo/add.d.ts +21 -0
  199. package/dist/commands/repo/add.js +118 -0
  200. package/dist/commands/repo/index.d.ts +13 -0
  201. package/dist/commands/repo/index.js +114 -0
  202. package/dist/commands/repo/list.d.ts +13 -0
  203. package/dist/commands/repo/list.js +96 -0
  204. package/dist/commands/repo/remove.d.ts +23 -0
  205. package/dist/commands/repo/remove.js +217 -0
  206. package/dist/commands/repo/view.d.ts +15 -0
  207. package/dist/commands/repo/view.js +99 -0
  208. package/dist/commands/session/attach.d.ts +40 -0
  209. package/dist/commands/session/attach.js +307 -0
  210. package/dist/commands/session/index.d.ts +13 -0
  211. package/dist/commands/session/index.js +64 -0
  212. package/dist/commands/session/list.d.ts +21 -0
  213. package/dist/commands/session/list.js +181 -0
  214. package/dist/commands/spec/create.d.ts +19 -0
  215. package/dist/commands/spec/create.js +130 -0
  216. package/dist/commands/spec/index.d.ts +13 -0
  217. package/dist/commands/spec/index.js +68 -0
  218. package/dist/commands/spec/link/depends.d.ts +14 -0
  219. package/dist/commands/spec/link/depends.js +64 -0
  220. package/dist/commands/spec/link/duplicates.d.ts +14 -0
  221. package/dist/commands/spec/link/duplicates.js +63 -0
  222. package/dist/commands/spec/link/index.d.ts +19 -0
  223. package/dist/commands/spec/link/index.js +200 -0
  224. package/dist/commands/spec/link/relates.d.ts +14 -0
  225. package/dist/commands/spec/link/relates.js +63 -0
  226. package/dist/commands/spec/link/remove.d.ts +16 -0
  227. package/dist/commands/spec/link/remove.js +94 -0
  228. package/dist/commands/spec/list.d.ts +12 -0
  229. package/dist/commands/spec/list.js +75 -0
  230. package/dist/commands/spec/plan.d.ts +15 -0
  231. package/dist/commands/spec/plan.js +108 -0
  232. package/dist/commands/spec/ticket.d.ts +18 -0
  233. package/dist/commands/spec/ticket.js +160 -0
  234. package/dist/commands/spec/view.d.ts +15 -0
  235. package/dist/commands/spec/view.js +163 -0
  236. package/dist/commands/status/create.d.ts +21 -0
  237. package/dist/commands/status/create.js +140 -0
  238. package/dist/commands/status/delete.d.ts +13 -0
  239. package/dist/commands/status/delete.js +77 -0
  240. package/dist/commands/status/index.d.ts +14 -0
  241. package/dist/commands/status/index.js +91 -0
  242. package/dist/commands/status/list.d.ts +12 -0
  243. package/dist/commands/status/list.js +93 -0
  244. package/dist/commands/status/move.d.ts +14 -0
  245. package/dist/commands/status/move.js +120 -0
  246. package/dist/commands/status/update.d.ts +20 -0
  247. package/dist/commands/status/update.js +180 -0
  248. package/dist/commands/template/delete.d.ts +15 -0
  249. package/dist/commands/template/delete.js +142 -0
  250. package/dist/commands/template/index.d.ts +10 -0
  251. package/dist/commands/template/index.js +64 -0
  252. package/dist/commands/template/list.d.ts +18 -0
  253. package/dist/commands/template/list.js +157 -0
  254. package/dist/commands/template/phase/apply.d.ts +14 -0
  255. package/dist/commands/template/phase/apply.js +41 -0
  256. package/dist/commands/template/phase/create.d.ts +12 -0
  257. package/dist/commands/template/phase/create.js +29 -0
  258. package/dist/commands/template/phase/delete.d.ts +13 -0
  259. package/dist/commands/template/phase/delete.js +34 -0
  260. package/dist/commands/template/phase/index.d.ts +10 -0
  261. package/dist/commands/template/phase/index.js +62 -0
  262. package/dist/commands/template/phase/list.d.ts +11 -0
  263. package/dist/commands/template/phase/list.js +34 -0
  264. package/dist/commands/template/phase/update.d.ts +13 -0
  265. package/dist/commands/template/phase/update.js +35 -0
  266. package/dist/commands/template/ticket/apply.d.ts +17 -0
  267. package/dist/commands/template/ticket/apply.js +58 -0
  268. package/dist/commands/template/ticket/delete.d.ts +13 -0
  269. package/dist/commands/template/ticket/delete.js +34 -0
  270. package/dist/commands/template/ticket/index.d.ts +10 -0
  271. package/dist/commands/template/ticket/index.js +62 -0
  272. package/dist/commands/template/ticket/list.d.ts +11 -0
  273. package/dist/commands/template/ticket/list.js +34 -0
  274. package/dist/commands/template/ticket/save.d.ts +13 -0
  275. package/dist/commands/template/ticket/save.js +35 -0
  276. package/dist/commands/ticket/bulk.d.ts +13 -0
  277. package/dist/commands/ticket/bulk.js +145 -0
  278. package/dist/commands/ticket/complete.d.ts +16 -0
  279. package/dist/commands/ticket/complete.js +170 -0
  280. package/dist/commands/ticket/create.d.ts +22 -0
  281. package/dist/commands/ticket/create.js +390 -0
  282. package/dist/commands/ticket/delete.d.ts +16 -0
  283. package/dist/commands/ticket/delete.js +178 -0
  284. package/dist/commands/ticket/edit.d.ts +27 -0
  285. package/dist/commands/ticket/edit.js +322 -0
  286. package/dist/commands/ticket/epic.d.ts +20 -0
  287. package/dist/commands/ticket/epic.js +333 -0
  288. package/dist/commands/ticket/index.d.ts +13 -0
  289. package/dist/commands/ticket/index.js +103 -0
  290. package/dist/commands/ticket/link/block.d.ts +14 -0
  291. package/dist/commands/ticket/link/block.js +94 -0
  292. package/dist/commands/ticket/link/duplicates.d.ts +14 -0
  293. package/dist/commands/ticket/link/duplicates.js +93 -0
  294. package/dist/commands/ticket/link/index.d.ts +19 -0
  295. package/dist/commands/ticket/link/index.js +239 -0
  296. package/dist/commands/ticket/link/relates.d.ts +14 -0
  297. package/dist/commands/ticket/link/relates.js +93 -0
  298. package/dist/commands/ticket/link/remove.d.ts +16 -0
  299. package/dist/commands/ticket/link/remove.js +128 -0
  300. package/dist/commands/ticket/list.d.ts +24 -0
  301. package/dist/commands/ticket/list.js +431 -0
  302. package/dist/commands/ticket/move.d.ts +18 -0
  303. package/dist/commands/ticket/move.js +212 -0
  304. package/dist/commands/ticket/project.d.ts +18 -0
  305. package/dist/commands/ticket/project.js +254 -0
  306. package/dist/commands/ticket/reassign.d.ts +19 -0
  307. package/dist/commands/ticket/reassign.js +279 -0
  308. package/dist/commands/ticket/spec.d.ts +18 -0
  309. package/dist/commands/ticket/spec.js +259 -0
  310. package/dist/commands/ticket/status.d.ts +13 -0
  311. package/dist/commands/ticket/status.js +87 -0
  312. package/dist/commands/ticket/template/apply.d.ts +25 -0
  313. package/dist/commands/ticket/template/apply.js +249 -0
  314. package/dist/commands/ticket/template/create.d.ts +19 -0
  315. package/dist/commands/ticket/template/create.js +210 -0
  316. package/dist/commands/ticket/template/delete.d.ts +17 -0
  317. package/dist/commands/ticket/template/delete.js +92 -0
  318. package/dist/commands/ticket/template/index.d.ts +15 -0
  319. package/dist/commands/ticket/template/index.js +118 -0
  320. package/dist/commands/ticket/template/list.d.ts +16 -0
  321. package/dist/commands/ticket/template/list.js +110 -0
  322. package/dist/commands/ticket/template/save.d.ts +14 -0
  323. package/dist/commands/ticket/template/save.js +110 -0
  324. package/dist/commands/ticket/update.d.ts +18 -0
  325. package/dist/commands/ticket/update.js +325 -0
  326. package/dist/commands/ticket/view.d.ts +13 -0
  327. package/dist/commands/ticket/view.js +80 -0
  328. package/dist/commands/whoami.d.ts +9 -0
  329. package/dist/commands/whoami.js +103 -0
  330. package/dist/commands/work/complete.d.ts +13 -0
  331. package/dist/commands/work/complete.js +121 -0
  332. package/dist/commands/work/index.d.ts +13 -0
  333. package/dist/commands/work/index.js +70 -0
  334. package/dist/commands/work/ready.d.ts +24 -0
  335. package/dist/commands/work/ready.js +290 -0
  336. package/dist/commands/work/revise.d.ts +19 -0
  337. package/dist/commands/work/revise.js +377 -0
  338. package/dist/commands/work/spawn-all.d.ts +17 -0
  339. package/dist/commands/work/spawn-all.js +58 -0
  340. package/dist/commands/work/spawn.d.ts +29 -0
  341. package/dist/commands/work/spawn.js +728 -0
  342. package/dist/commands/work/start.d.ts +39 -0
  343. package/dist/commands/work/start.js +1393 -0
  344. package/dist/commands/work/watch.d.ts +31 -0
  345. package/dist/commands/work/watch.js +359 -0
  346. package/dist/commands/workflow/create.d.ts +18 -0
  347. package/dist/commands/workflow/create.js +119 -0
  348. package/dist/commands/workflow/delete.d.ts +17 -0
  349. package/dist/commands/workflow/delete.js +119 -0
  350. package/dist/commands/workflow/index.d.ts +15 -0
  351. package/dist/commands/workflow/index.js +75 -0
  352. package/dist/commands/workflow/list.d.ts +15 -0
  353. package/dist/commands/workflow/list.js +75 -0
  354. package/dist/commands/workflow/switch.d.ts +13 -0
  355. package/dist/commands/workflow/switch.js +117 -0
  356. package/dist/commands/workflow/view.d.ts +16 -0
  357. package/dist/commands/workflow/view.js +114 -0
  358. package/dist/commands/workspace/add.d.ts +12 -0
  359. package/dist/commands/workspace/add.js +74 -0
  360. package/dist/commands/workspace/list.d.ts +9 -0
  361. package/dist/commands/workspace/list.js +153 -0
  362. package/dist/commands/workspace/remove.d.ts +13 -0
  363. package/dist/commands/workspace/remove.js +98 -0
  364. package/dist/commands/workspace/use.d.ts +12 -0
  365. package/dist/commands/workspace/use.js +111 -0
  366. package/dist/hooks/init.d.ts +11 -0
  367. package/dist/hooks/init.js +57 -0
  368. package/dist/index.d.ts +1 -0
  369. package/dist/index.js +1 -0
  370. package/dist/lib/agents/commands.d.ts +189 -0
  371. package/dist/lib/agents/commands.js +893 -0
  372. package/dist/lib/agents/index.d.ts +54 -0
  373. package/dist/lib/agents/index.js +382 -0
  374. package/dist/lib/branch/index.d.ts +120 -0
  375. package/dist/lib/branch/index.js +334 -0
  376. package/dist/lib/colors.d.ts +94 -0
  377. package/dist/lib/colors.js +68 -0
  378. package/dist/lib/commands/docker-command.d.ts +21 -0
  379. package/dist/lib/commands/docker-command.js +27 -0
  380. package/dist/lib/database/index.d.ts +176 -0
  381. package/dist/lib/database/index.js +581 -0
  382. package/dist/lib/docker/resolve.d.ts +38 -0
  383. package/dist/lib/docker/resolve.js +175 -0
  384. package/dist/lib/execution/config.d.ts +150 -0
  385. package/dist/lib/execution/config.js +541 -0
  386. package/dist/lib/execution/devcontainer.d.ts +85 -0
  387. package/dist/lib/execution/devcontainer.js +594 -0
  388. package/dist/lib/execution/index.d.ts +10 -0
  389. package/dist/lib/execution/index.js +10 -0
  390. package/dist/lib/execution/runners.d.ts +53 -0
  391. package/dist/lib/execution/runners.js +1182 -0
  392. package/dist/lib/execution/spawner.d.ts +85 -0
  393. package/dist/lib/execution/spawner.js +548 -0
  394. package/dist/lib/execution/storage.d.ts +159 -0
  395. package/dist/lib/execution/storage.js +425 -0
  396. package/dist/lib/execution/types.d.ts +145 -0
  397. package/dist/lib/execution/types.js +157 -0
  398. package/dist/lib/init/index.d.ts +75 -0
  399. package/dist/lib/init/index.js +355 -0
  400. package/dist/lib/machine-config.d.ts +170 -0
  401. package/dist/lib/machine-config.js +386 -0
  402. package/dist/lib/pmo/base-command.d.ts +195 -0
  403. package/dist/lib/pmo/base-command.js +319 -0
  404. package/dist/lib/pmo/create-spec-folders.d.ts +43 -0
  405. package/dist/lib/pmo/create-spec-folders.js +64 -0
  406. package/dist/lib/pmo/epic-files.d.ts +56 -0
  407. package/dist/lib/pmo/epic-files.js +195 -0
  408. package/dist/lib/pmo/find-pmo.d.ts +14 -0
  409. package/dist/lib/pmo/find-pmo.js +172 -0
  410. package/dist/lib/pmo/index.d.ts +109 -0
  411. package/dist/lib/pmo/index.js +501 -0
  412. package/dist/lib/pmo/markdown.d.ts +31 -0
  413. package/dist/lib/pmo/markdown.js +245 -0
  414. package/dist/lib/pmo/pmo-context.d.ts +27 -0
  415. package/dist/lib/pmo/pmo-context.js +44 -0
  416. package/dist/lib/pmo/schema.d.ts +82 -0
  417. package/dist/lib/pmo/schema.js +531 -0
  418. package/dist/lib/pmo/spec-parser.d.ts +25 -0
  419. package/dist/lib/pmo/spec-parser.js +205 -0
  420. package/dist/lib/pmo/spec-types.d.ts +43 -0
  421. package/dist/lib/pmo/spec-types.js +7 -0
  422. package/dist/lib/pmo/storage/actions.d.ts +34 -0
  423. package/dist/lib/pmo/storage/actions.js +177 -0
  424. package/dist/lib/pmo/storage/base.d.ts +47 -0
  425. package/dist/lib/pmo/storage/base.js +858 -0
  426. package/dist/lib/pmo/storage/dependencies.d.ts +61 -0
  427. package/dist/lib/pmo/storage/dependencies.js +267 -0
  428. package/dist/lib/pmo/storage/epics.d.ts +46 -0
  429. package/dist/lib/pmo/storage/epics.js +243 -0
  430. package/dist/lib/pmo/storage/helpers.d.ts +33 -0
  431. package/dist/lib/pmo/storage/helpers.js +148 -0
  432. package/dist/lib/pmo/storage/index.d.ts +186 -0
  433. package/dist/lib/pmo/storage/index.js +689 -0
  434. package/dist/lib/pmo/storage/phases.d.ts +65 -0
  435. package/dist/lib/pmo/storage/phases.js +392 -0
  436. package/dist/lib/pmo/storage/projects.d.ts +79 -0
  437. package/dist/lib/pmo/storage/projects.js +303 -0
  438. package/dist/lib/pmo/storage/specs.d.ts +77 -0
  439. package/dist/lib/pmo/storage/specs.js +389 -0
  440. package/dist/lib/pmo/storage/statuses.d.ts +63 -0
  441. package/dist/lib/pmo/storage/statuses.js +404 -0
  442. package/dist/lib/pmo/storage/subtasks.d.ts +37 -0
  443. package/dist/lib/pmo/storage/subtasks.js +184 -0
  444. package/dist/lib/pmo/storage/templates.d.ts +40 -0
  445. package/dist/lib/pmo/storage/templates.js +210 -0
  446. package/dist/lib/pmo/storage/tickets.d.ts +57 -0
  447. package/dist/lib/pmo/storage/tickets.js +453 -0
  448. package/dist/lib/pmo/storage/types.d.ts +200 -0
  449. package/dist/lib/pmo/storage/types.js +5 -0
  450. package/dist/lib/pmo/storage/views.d.ts +44 -0
  451. package/dist/lib/pmo/storage/views.js +355 -0
  452. package/dist/lib/pmo/storage-sqlite.d.ts +7 -0
  453. package/dist/lib/pmo/storage-sqlite.js +7 -0
  454. package/dist/lib/pmo/sync-manager.d.ts +92 -0
  455. package/dist/lib/pmo/sync-manager.js +229 -0
  456. package/dist/lib/pmo/types.d.ts +710 -0
  457. package/dist/lib/pmo/types.js +108 -0
  458. package/dist/lib/pmo/utils.d.ts +122 -0
  459. package/dist/lib/pmo/utils.js +174 -0
  460. package/dist/lib/pmo/watcher.d.ts +43 -0
  461. package/dist/lib/pmo/watcher.js +208 -0
  462. package/dist/lib/pr/index.d.ts +150 -0
  463. package/dist/lib/pr/index.js +483 -0
  464. package/dist/lib/prompt-json.d.ts +231 -0
  465. package/dist/lib/prompt-json.js +213 -0
  466. package/dist/lib/repos/index.d.ts +81 -0
  467. package/dist/lib/repos/index.js +679 -0
  468. package/dist/lib/styles.d.ts +98 -0
  469. package/dist/lib/styles.js +195 -0
  470. package/dist/lib/themes.d.ts +128 -0
  471. package/dist/lib/themes.js +301 -0
  472. package/dist/lib/ui/BoardUI.d.ts +21 -0
  473. package/dist/lib/ui/BoardUI.js +85 -0
  474. package/dist/lib/ui/ClaimTicketUI.d.ts +17 -0
  475. package/dist/lib/ui/ClaimTicketUI.js +64 -0
  476. package/dist/lib/ui/CreateTicketUI.d.ts +13 -0
  477. package/dist/lib/ui/CreateTicketUI.js +101 -0
  478. package/dist/lib/workspace.d.ts +66 -0
  479. package/dist/lib/workspace.js +204 -0
  480. package/oclif.manifest.json +10593 -0
  481. package/package.json +104 -52
  482. package/LICENSE +0 -21
  483. package/dist/bin/prlt.d.ts +0 -11
  484. package/dist/bin/prlt.d.ts.map +0 -1
  485. package/dist/bin/prlt.js +0 -144
  486. package/dist/bin/prlt.js.map +0 -1
  487. package/dist/lib/config/index.d.ts +0 -14
  488. package/dist/lib/config/index.d.ts.map +0 -1
  489. package/dist/lib/config/index.js +0 -139
  490. package/dist/lib/config/index.js.map +0 -1
  491. package/dist/lib/config/upgrade.d.ts +0 -2
  492. package/dist/lib/config/upgrade.d.ts.map +0 -1
  493. package/dist/lib/config/upgrade.js +0 -173
  494. package/dist/lib/config/upgrade.js.map +0 -1
  495. package/dist/lib/themes/index.d.ts +0 -8
  496. package/dist/lib/themes/index.d.ts.map +0 -1
  497. package/dist/lib/themes/index.js +0 -80
  498. package/dist/lib/themes/index.js.map +0 -1
  499. package/dist/lib/utils/helpers.d.ts +0 -4
  500. package/dist/lib/utils/helpers.d.ts.map +0 -1
  501. package/dist/lib/utils/helpers.js +0 -39
  502. package/dist/lib/utils/helpers.js.map +0 -1
  503. package/dist/lib/utils/logger.d.ts +0 -4
  504. package/dist/lib/utils/logger.d.ts.map +0 -1
  505. package/dist/lib/utils/logger.js +0 -28
  506. package/dist/lib/utils/logger.js.map +0 -1
  507. package/dist/lib/workspace/index.d.ts +0 -13
  508. package/dist/lib/workspace/index.d.ts.map +0 -1
  509. package/dist/lib/workspace/index.js +0 -116
  510. package/dist/lib/workspace/index.js.map +0 -1
  511. package/dist/lib/worktree/index.d.ts +0 -7
  512. package/dist/lib/worktree/index.d.ts.map +0 -1
  513. package/dist/lib/worktree/index.js +0 -362
  514. package/dist/lib/worktree/index.js.map +0 -1
  515. package/dist/lib/worktree/migrate.d.ts +0 -2
  516. package/dist/lib/worktree/migrate.d.ts.map +0 -1
  517. package/dist/lib/worktree/migrate.js +0 -212
  518. package/dist/lib/worktree/migrate.js.map +0 -1
  519. package/dist/lib/worktree/repair.d.ts +0 -3
  520. package/dist/lib/worktree/repair.d.ts.map +0 -1
  521. package/dist/lib/worktree/repair.js +0 -140
  522. package/dist/lib/worktree/repair.js.map +0 -1
  523. package/dist/types/index.d.ts +0 -57
  524. package/dist/types/index.d.ts.map +0 -1
  525. package/dist/types/index.js +0 -3
  526. package/dist/types/index.js.map +0 -1
@@ -0,0 +1,65 @@
1
+ /**
2
+ * Project phase operations.
3
+ */
4
+ import { PhaseFilter, PhaseTemplate, PhaseTemplateFilter, ProjectPhase } from '../types.js';
5
+ import { StorageContext } from './types.js';
6
+ export declare class PhaseStorage {
7
+ private ctx;
8
+ constructor(ctx: StorageContext);
9
+ /**
10
+ * List project phases.
11
+ */
12
+ listPhases(filter?: PhaseFilter): Promise<ProjectPhase[]>;
13
+ /**
14
+ * Get a phase by ID.
15
+ */
16
+ getPhase(id: string): Promise<ProjectPhase | null>;
17
+ /**
18
+ * Create a new phase.
19
+ */
20
+ createPhase(phase: Partial<ProjectPhase>): Promise<ProjectPhase>;
21
+ /**
22
+ * Update a phase.
23
+ */
24
+ updatePhase(id: string, changes: Partial<ProjectPhase>): Promise<ProjectPhase>;
25
+ /**
26
+ * Delete a phase.
27
+ */
28
+ deletePhase(id: string): Promise<void>;
29
+ /**
30
+ * Reorder a phase to a new position.
31
+ */
32
+ reorderPhase(id: string, newPosition: number): Promise<ProjectPhase>;
33
+ /**
34
+ * Get the default phase.
35
+ */
36
+ getDefaultPhase(): Promise<ProjectPhase | null>;
37
+ /**
38
+ * List phase templates.
39
+ */
40
+ listPhaseTemplates(filter?: PhaseTemplateFilter): Promise<PhaseTemplate[]>;
41
+ /**
42
+ * Get a phase template by ID.
43
+ */
44
+ getPhaseTemplate(id: string): Promise<PhaseTemplate | null>;
45
+ /**
46
+ * Apply a phase template.
47
+ */
48
+ applyPhaseTemplate(templateId: string): Promise<ProjectPhase[]>;
49
+ /**
50
+ * Save current phases as a template.
51
+ */
52
+ savePhaseTemplate(name: string, description?: string): Promise<PhaseTemplate>;
53
+ /**
54
+ * Update a phase template.
55
+ */
56
+ updatePhaseTemplate(id: string, changes: {
57
+ name?: string;
58
+ description?: string;
59
+ }): Promise<PhaseTemplate>;
60
+ /**
61
+ * Delete a phase template.
62
+ */
63
+ deletePhaseTemplate(id: string): Promise<void>;
64
+ private rowToPhase;
65
+ }
@@ -0,0 +1,392 @@
1
+ /**
2
+ * Project phase operations.
3
+ */
4
+ import { PMO_TABLES } from '../schema.js';
5
+ import { PMOError, STATE_CATEGORY_ORDER, } from '../types.js';
6
+ import { slugify } from '../utils.js';
7
+ const T = PMO_TABLES;
8
+ export class PhaseStorage {
9
+ ctx;
10
+ constructor(ctx) {
11
+ this.ctx = ctx;
12
+ }
13
+ // =========================================================================
14
+ // Project Phases
15
+ // =========================================================================
16
+ /**
17
+ * List project phases.
18
+ */
19
+ async listPhases(filter) {
20
+ let sql = `SELECT * FROM ${T.phases}`;
21
+ const conditions = [];
22
+ const params = [];
23
+ if (filter?.category) {
24
+ conditions.push('category = ?');
25
+ params.push(filter.category);
26
+ }
27
+ if (filter?.search) {
28
+ conditions.push('(name LIKE ? OR description LIKE ?)');
29
+ const searchTerm = `%${filter.search}%`;
30
+ params.push(searchTerm, searchTerm);
31
+ }
32
+ if (conditions.length > 0) {
33
+ sql += ' WHERE ' + conditions.join(' AND ');
34
+ }
35
+ sql += ` ORDER BY
36
+ CASE category
37
+ WHEN 'backlog' THEN 0
38
+ WHEN 'unstarted' THEN 1
39
+ WHEN 'started' THEN 2
40
+ WHEN 'completed' THEN 3
41
+ WHEN 'canceled' THEN 4
42
+ END,
43
+ position`;
44
+ const rows = this.ctx.db.prepare(sql).all(...params);
45
+ return rows.map((row) => this.rowToPhase(row));
46
+ }
47
+ /**
48
+ * Get a phase by ID.
49
+ */
50
+ async getPhase(id) {
51
+ const row = this.ctx.db.prepare(`SELECT * FROM ${T.phases} WHERE id = ?`).get(id);
52
+ if (!row)
53
+ return null;
54
+ return this.rowToPhase(row);
55
+ }
56
+ /**
57
+ * Create a new phase.
58
+ */
59
+ async createPhase(phase) {
60
+ if (!phase.name) {
61
+ throw new PMOError('INVALID', 'Phase name is required');
62
+ }
63
+ if (!phase.category) {
64
+ throw new PMOError('INVALID', 'Phase category is required');
65
+ }
66
+ if (!STATE_CATEGORY_ORDER.includes(phase.category)) {
67
+ throw new PMOError('INVALID', `Invalid category: ${phase.category}. Must be one of: ${STATE_CATEGORY_ORDER.join(', ')}`);
68
+ }
69
+ // Check for duplicate name
70
+ const existing = this.ctx.db.prepare(`
71
+ SELECT id FROM ${T.phases} WHERE LOWER(name) = LOWER(?)
72
+ `).get(phase.name);
73
+ if (existing) {
74
+ throw new PMOError('CONFLICT', `Phase "${phase.name}" already exists`);
75
+ }
76
+ // Get next position within category
77
+ const maxPos = this.ctx.db.prepare(`
78
+ SELECT MAX(position) as max FROM ${T.phases} WHERE category = ?
79
+ `).get(phase.category);
80
+ const position = phase.position ?? (maxPos.max !== null ? maxPos.max + 1 : 0);
81
+ const id = phase.id || slugify(phase.name);
82
+ const now = new Date().toISOString();
83
+ // If setting as default, unset other defaults first
84
+ if (phase.isDefault) {
85
+ this.ctx.db.prepare(`UPDATE ${T.phases} SET is_default = 0`).run();
86
+ }
87
+ this.ctx.db.prepare(`
88
+ INSERT INTO ${T.phases} (id, name, category, position, color, description, is_default, created_at)
89
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?)
90
+ `).run(id, phase.name, phase.category, position, phase.color || null, phase.description || null, phase.isDefault ? 1 : 0, now);
91
+ return (await this.getPhase(id));
92
+ }
93
+ /**
94
+ * Update a phase.
95
+ */
96
+ async updatePhase(id, changes) {
97
+ const existing = await this.getPhase(id);
98
+ if (!existing) {
99
+ throw new PMOError('NOT_FOUND', `Phase not found: ${id}`);
100
+ }
101
+ if (changes.category &&
102
+ !STATE_CATEGORY_ORDER.includes(changes.category)) {
103
+ throw new PMOError('INVALID', `Invalid category: ${changes.category}. Must be one of: ${STATE_CATEGORY_ORDER.join(', ')}`);
104
+ }
105
+ // Check for duplicate name if name is changing
106
+ if (changes.name &&
107
+ changes.name.toLowerCase() !== existing.name.toLowerCase()) {
108
+ const dup = this.ctx.db.prepare(`
109
+ SELECT id FROM ${T.phases} WHERE LOWER(name) = LOWER(?) AND id != ?
110
+ `).get(changes.name, id);
111
+ if (dup) {
112
+ throw new PMOError('CONFLICT', `Phase "${changes.name}" already exists`);
113
+ }
114
+ }
115
+ const updates = [];
116
+ const params = [];
117
+ if (changes.name !== undefined) {
118
+ updates.push('name = ?');
119
+ params.push(changes.name);
120
+ }
121
+ if (changes.category !== undefined) {
122
+ updates.push('category = ?');
123
+ params.push(changes.category);
124
+ }
125
+ if (changes.position !== undefined) {
126
+ updates.push('position = ?');
127
+ params.push(changes.position);
128
+ }
129
+ if (changes.color !== undefined) {
130
+ updates.push('color = ?');
131
+ params.push(changes.color || null);
132
+ }
133
+ if (changes.description !== undefined) {
134
+ updates.push('description = ?');
135
+ params.push(changes.description || null);
136
+ }
137
+ if (changes.isDefault !== undefined) {
138
+ updates.push('is_default = ?');
139
+ params.push(changes.isDefault ? 1 : 0);
140
+ if (changes.isDefault) {
141
+ this.ctx.db.prepare(`UPDATE ${T.phases} SET is_default = 0 WHERE id != ?`).run(id);
142
+ }
143
+ }
144
+ if (updates.length > 0) {
145
+ params.push(id);
146
+ this.ctx.db.prepare(`UPDATE ${T.phases} SET ${updates.join(', ')} WHERE id = ?`).run(...params);
147
+ }
148
+ return (await this.getPhase(id));
149
+ }
150
+ /**
151
+ * Delete a phase.
152
+ */
153
+ async deletePhase(id) {
154
+ const existing = await this.getPhase(id);
155
+ if (!existing) {
156
+ throw new PMOError('NOT_FOUND', `Phase not found: ${id}`);
157
+ }
158
+ // Check if any projects use this phase
159
+ const projectCount = this.ctx.db.prepare(`
160
+ SELECT COUNT(*) as count FROM ${T.projects} WHERE phase_id = ?
161
+ `).get(id);
162
+ if (projectCount.count > 0) {
163
+ throw new PMOError('CONFLICT', `Cannot delete phase "${existing.name}" - ${projectCount.count} project(s) are using it`);
164
+ }
165
+ this.ctx.db.prepare(`DELETE FROM ${T.phases} WHERE id = ?`).run(id);
166
+ }
167
+ /**
168
+ * Reorder a phase to a new position.
169
+ */
170
+ async reorderPhase(id, newPosition) {
171
+ const phase = await this.getPhase(id);
172
+ if (!phase) {
173
+ throw new PMOError('NOT_FOUND', `Phase not found: ${id}`);
174
+ }
175
+ const oldPosition = phase.position;
176
+ if (newPosition === oldPosition) {
177
+ return phase;
178
+ }
179
+ if (newPosition < oldPosition) {
180
+ this.ctx.db.prepare(`
181
+ UPDATE ${T.phases}
182
+ SET position = position + 1
183
+ WHERE category = ? AND position >= ? AND position < ? AND id != ?
184
+ `).run(phase.category, newPosition, oldPosition, id);
185
+ }
186
+ else {
187
+ this.ctx.db.prepare(`
188
+ UPDATE ${T.phases}
189
+ SET position = position - 1
190
+ WHERE category = ? AND position > ? AND position <= ? AND id != ?
191
+ `).run(phase.category, oldPosition, newPosition, id);
192
+ }
193
+ this.ctx.db.prepare(`UPDATE ${T.phases} SET position = ? WHERE id = ?`).run(newPosition, id);
194
+ return (await this.getPhase(id));
195
+ }
196
+ /**
197
+ * Get the default phase.
198
+ */
199
+ async getDefaultPhase() {
200
+ const row = this.ctx.db.prepare(`SELECT * FROM ${T.phases} WHERE is_default = 1`).get();
201
+ if (!row) {
202
+ // Fallback to first phase
203
+ const firstRow = this.ctx.db.prepare(`
204
+ SELECT * FROM ${T.phases}
205
+ ORDER BY
206
+ CASE category WHEN 'backlog' THEN 0 WHEN 'unstarted' THEN 1 WHEN 'started' THEN 2 WHEN 'completed' THEN 3 WHEN 'canceled' THEN 4 END,
207
+ position
208
+ LIMIT 1
209
+ `).get();
210
+ if (!firstRow)
211
+ return null;
212
+ return this.rowToPhase(firstRow);
213
+ }
214
+ return this.rowToPhase(row);
215
+ }
216
+ // =========================================================================
217
+ // Phase Templates
218
+ // =========================================================================
219
+ /**
220
+ * List phase templates.
221
+ */
222
+ async listPhaseTemplates(filter) {
223
+ let query = `SELECT * FROM ${T.phase_templates} WHERE 1=1`;
224
+ const params = [];
225
+ if (filter?.isBuiltin !== undefined) {
226
+ query += ' AND is_builtin = ?';
227
+ params.push(filter.isBuiltin ? 1 : 0);
228
+ }
229
+ if (filter?.search) {
230
+ query += ' AND (name LIKE ? OR description LIKE ?)';
231
+ params.push(`%${filter.search}%`, `%${filter.search}%`);
232
+ }
233
+ query += ' ORDER BY is_builtin DESC, name';
234
+ const rows = this.ctx.db.prepare(query).all(...params);
235
+ return rows.map((row) => ({
236
+ id: row.id,
237
+ name: row.name,
238
+ description: row.description || undefined,
239
+ isBuiltin: row.is_builtin === 1,
240
+ phases: JSON.parse(row.phases),
241
+ createdAt: new Date(row.created_at),
242
+ }));
243
+ }
244
+ /**
245
+ * Get a phase template by ID.
246
+ */
247
+ async getPhaseTemplate(id) {
248
+ const row = this.ctx.db.prepare(`
249
+ SELECT * FROM ${T.phase_templates} WHERE id = ?
250
+ `).get(id);
251
+ if (!row)
252
+ return null;
253
+ return {
254
+ id: row.id,
255
+ name: row.name,
256
+ description: row.description || undefined,
257
+ isBuiltin: row.is_builtin === 1,
258
+ phases: JSON.parse(row.phases),
259
+ createdAt: new Date(row.created_at),
260
+ };
261
+ }
262
+ /**
263
+ * Apply a phase template.
264
+ */
265
+ async applyPhaseTemplate(templateId) {
266
+ const template = await this.getPhaseTemplate(templateId);
267
+ if (!template) {
268
+ throw new PMOError('NOT_FOUND', `Phase template not found: ${templateId}`);
269
+ }
270
+ // Delete existing phases
271
+ this.ctx.db.prepare(`DELETE FROM ${T.phases}`).run();
272
+ // Create new phases from template
273
+ const now = new Date().toISOString();
274
+ const insertPhase = this.ctx.db.prepare(`
275
+ INSERT INTO ${T.phases} (id, name, category, position, description, is_default, created_at)
276
+ VALUES (?, ?, ?, ?, ?, ?, ?)
277
+ `);
278
+ const createdPhases = [];
279
+ for (const templatePhase of template.phases) {
280
+ const id = slugify(templatePhase.name);
281
+ insertPhase.run(id, templatePhase.name, templatePhase.category, templatePhase.position, templatePhase.description || null, templatePhase.isDefault ? 1 : 0, now);
282
+ createdPhases.push({
283
+ id,
284
+ name: templatePhase.name,
285
+ category: templatePhase.category,
286
+ position: templatePhase.position,
287
+ description: templatePhase.description,
288
+ isDefault: templatePhase.isDefault || false,
289
+ createdAt: new Date(now),
290
+ });
291
+ }
292
+ return createdPhases;
293
+ }
294
+ /**
295
+ * Save current phases as a template.
296
+ */
297
+ async savePhaseTemplate(name, description) {
298
+ // Get current phases
299
+ const phases = await this.listPhases();
300
+ if (phases.length === 0) {
301
+ throw new PMOError('INVALID', 'No phases to save as template');
302
+ }
303
+ // Check for duplicate name
304
+ const existing = this.ctx.db.prepare(`
305
+ SELECT id FROM ${T.phase_templates} WHERE LOWER(name) = LOWER(?)
306
+ `).get(name);
307
+ if (existing) {
308
+ throw new PMOError('CONFLICT', `Phase template "${name}" already exists`);
309
+ }
310
+ const id = slugify(name);
311
+ const now = new Date().toISOString();
312
+ // Convert phases to template format
313
+ const templatePhases = phases.map((p) => ({
314
+ name: p.name,
315
+ category: p.category,
316
+ position: p.position,
317
+ description: p.description,
318
+ isDefault: p.isDefault,
319
+ }));
320
+ this.ctx.db.prepare(`
321
+ INSERT INTO ${T.phase_templates} (id, name, description, is_builtin, phases, created_at)
322
+ VALUES (?, ?, ?, 0, ?, ?)
323
+ `).run(id, name, description || null, JSON.stringify(templatePhases), now);
324
+ return {
325
+ id,
326
+ name,
327
+ description,
328
+ isBuiltin: false,
329
+ phases: templatePhases,
330
+ createdAt: new Date(now),
331
+ };
332
+ }
333
+ /**
334
+ * Update a phase template.
335
+ */
336
+ async updatePhaseTemplate(id, changes) {
337
+ const existing = await this.getPhaseTemplate(id);
338
+ if (!existing) {
339
+ throw new PMOError('NOT_FOUND', `Phase template not found: ${id}`);
340
+ }
341
+ if (existing.isBuiltin) {
342
+ throw new PMOError('INVALID', 'Cannot modify built-in templates');
343
+ }
344
+ const updates = [];
345
+ const params = [];
346
+ if (changes.name !== undefined) {
347
+ const dup = this.ctx.db.prepare(`
348
+ SELECT id FROM ${T.phase_templates}
349
+ WHERE LOWER(name) = LOWER(?) AND id != ?
350
+ `).get(changes.name, id);
351
+ if (dup) {
352
+ throw new PMOError('CONFLICT', `Phase template "${changes.name}" already exists`);
353
+ }
354
+ updates.push('name = ?');
355
+ params.push(changes.name);
356
+ }
357
+ if (changes.description !== undefined) {
358
+ updates.push('description = ?');
359
+ params.push(changes.description || null);
360
+ }
361
+ if (updates.length > 0) {
362
+ params.push(id);
363
+ this.ctx.db.prepare(`UPDATE ${T.phase_templates} SET ${updates.join(', ')} WHERE id = ?`).run(...params);
364
+ }
365
+ return (await this.getPhaseTemplate(id));
366
+ }
367
+ /**
368
+ * Delete a phase template.
369
+ */
370
+ async deletePhaseTemplate(id) {
371
+ const existing = await this.getPhaseTemplate(id);
372
+ if (!existing) {
373
+ throw new PMOError('NOT_FOUND', `Phase template not found: ${id}`);
374
+ }
375
+ if (existing.isBuiltin) {
376
+ throw new PMOError('INVALID', 'Cannot delete built-in templates');
377
+ }
378
+ this.ctx.db.prepare(`DELETE FROM ${T.phase_templates} WHERE id = ?`).run(id);
379
+ }
380
+ rowToPhase(row) {
381
+ return {
382
+ id: row.id,
383
+ name: row.name,
384
+ category: row.category,
385
+ position: row.position,
386
+ color: row.color || undefined,
387
+ description: row.description || undefined,
388
+ isDefault: row.is_default === 1,
389
+ createdAt: new Date(row.created_at),
390
+ };
391
+ }
392
+ }
@@ -0,0 +1,79 @@
1
+ /**
2
+ * Project operations.
3
+ * Board columns are now derived from workflow statuses (single source of truth).
4
+ */
5
+ import { Board, BoardConfig, Project, ProjectFilter } from '../types.js';
6
+ import { StorageContext } from './types.js';
7
+ export declare class ProjectStorage {
8
+ private ctx;
9
+ constructor(ctx: StorageContext);
10
+ /**
11
+ * Initialize a project with a workflow.
12
+ * @deprecated Use createProject with a template instead.
13
+ */
14
+ init(projectId: string, config: BoardConfig): Promise<Board>;
15
+ /**
16
+ * Get the project board.
17
+ * Columns are derived from the project's workflow statuses.
18
+ * Tickets are sorted by priority (P0 first) then created_at (oldest first).
19
+ */
20
+ getBoard(projectId: string): Promise<Board>;
21
+ /**
22
+ * Get the board as markdown.
23
+ */
24
+ getBoardMarkdown(projectId: string): Promise<string>;
25
+ /**
26
+ * Create a new project.
27
+ * Assigns a workflow based on the workflow ID (defaults to 'default' workflow).
28
+ */
29
+ createProject(project: {
30
+ id?: string;
31
+ name: string;
32
+ template?: string;
33
+ description?: string;
34
+ }): Promise<Board>;
35
+ /**
36
+ * Get project board by ID.
37
+ */
38
+ getProjectBoard(projectId: string): Promise<Board | null>;
39
+ /**
40
+ * Get tickets for a status (column).
41
+ * Tickets are sorted by priority (P0 first) then created_at (oldest first).
42
+ */
43
+ private getTicketsForStatus;
44
+ /**
45
+ * List project summaries.
46
+ */
47
+ listProjectSummaries(): Promise<Array<{
48
+ id: string;
49
+ name: string;
50
+ template: string | null;
51
+ description: string | null;
52
+ ticketCount: number;
53
+ }>>;
54
+ /**
55
+ * Delete a project.
56
+ */
57
+ deleteProject(projectId: string): Promise<void>;
58
+ /**
59
+ * Get a project by ID.
60
+ */
61
+ getProject(id: string): Promise<Project | null>;
62
+ /**
63
+ * Update a project.
64
+ */
65
+ updateProject(id: string, changes: Partial<Project>): Promise<Project>;
66
+ /**
67
+ * List projects with optional filter.
68
+ */
69
+ listProjects(filter?: ProjectFilter): Promise<Project[]>;
70
+ /**
71
+ * Archive a project.
72
+ */
73
+ archiveProject(id: string): Promise<Project>;
74
+ /**
75
+ * Unarchive a project.
76
+ */
77
+ unarchiveProject(id: string): Promise<Project>;
78
+ private rowToProject;
79
+ }