@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,689 @@
1
+ /**
2
+ * SQLite Storage Implementation for PMO
3
+ *
4
+ * This is the main facade that delegates to domain-specific storage modules.
5
+ * Uses the unified workspace.db database with pmo_ prefixed tables.
6
+ */
7
+ import Database from 'better-sqlite3';
8
+ import { PMO_TABLES, PMO_SCHEMA_SQL, validateTicketSchema } from '../schema.js';
9
+ import { runMigrations, seedBuiltinWorkflows, seedBuiltinPhases, seedBuiltinPhaseTemplates, seedBuiltinActions, seedBuiltinTicketTemplates, updateBoardTimestamp, } from './base.js';
10
+ import { ProjectStorage } from './projects.js';
11
+ import { TicketStorage } from './tickets.js';
12
+ import { SubtaskStorage, AcceptanceCriteriaStorage } from './subtasks.js';
13
+ import { SpecStorage } from './specs.js';
14
+ import { EpicStorage } from './epics.js';
15
+ import { DependencyStorage } from './dependencies.js';
16
+ import { StatusStorage } from './statuses.js';
17
+ import { TemplateStorage } from './templates.js';
18
+ import { PhaseStorage } from './phases.js';
19
+ import { ActionStorage } from './actions.js';
20
+ import { ViewStorage } from './views.js';
21
+ const T = PMO_TABLES;
22
+ export class SQLiteStorage {
23
+ type = 'sqlite';
24
+ db;
25
+ dbPath;
26
+ // Domain-specific storage modules
27
+ projectStorage;
28
+ ticketStorage;
29
+ subtaskStorage;
30
+ acceptanceCriteriaStorage;
31
+ specStorage;
32
+ epicStorage;
33
+ dependencyStorage;
34
+ statusStorage;
35
+ templateStorage;
36
+ phaseStorage;
37
+ actionStorage;
38
+ viewStorage;
39
+ constructor(dbPath) {
40
+ this.dbPath = dbPath;
41
+ // Open database (creates if doesn't exist)
42
+ this.db = new Database(dbPath);
43
+ this.db.pragma('foreign_keys = ON');
44
+ // Create the storage context shared by all modules
45
+ // Note: projectId is passed explicitly to operations, not stored in context
46
+ const ctx = {
47
+ db: this.db,
48
+ updateBoardTimestamp: (projectId) => updateBoardTimestamp(this.db, projectId),
49
+ };
50
+ // Initialize domain-specific storage modules
51
+ this.projectStorage = new ProjectStorage(ctx);
52
+ this.ticketStorage = new TicketStorage(ctx);
53
+ this.subtaskStorage = new SubtaskStorage(ctx);
54
+ this.acceptanceCriteriaStorage = new AcceptanceCriteriaStorage(ctx);
55
+ this.specStorage = new SpecStorage(ctx);
56
+ this.epicStorage = new EpicStorage(ctx);
57
+ this.dependencyStorage = new DependencyStorage(ctx);
58
+ this.statusStorage = new StatusStorage(ctx);
59
+ this.templateStorage = new TemplateStorage(ctx);
60
+ this.phaseStorage = new PhaseStorage(ctx);
61
+ this.actionStorage = new ActionStorage(ctx);
62
+ this.viewStorage = new ViewStorage(ctx);
63
+ // Ensure PMO tables exist
64
+ this.ensurePMOTables();
65
+ }
66
+ /**
67
+ * Get the underlying database connection.
68
+ */
69
+ getDatabase() {
70
+ return this.db;
71
+ }
72
+ /**
73
+ * Ensure PMO tables exist in the database.
74
+ */
75
+ ensurePMOTables() {
76
+ // Run migrations FIRST for existing databases
77
+ runMigrations(this.db);
78
+ // Create tables and indexes using shared schema
79
+ this.db.exec(PMO_SCHEMA_SQL);
80
+ // Seed built-in data (workflows are the source of truth for status configurations)
81
+ seedBuiltinWorkflows(this.db);
82
+ seedBuiltinPhases(this.db);
83
+ seedBuiltinPhaseTemplates(this.db);
84
+ seedBuiltinActions(this.db);
85
+ seedBuiltinTicketTemplates(this.db);
86
+ // Validate schema
87
+ validateTicketSchema(this.db);
88
+ }
89
+ // ===========================================================================
90
+ // Board Operations
91
+ // ===========================================================================
92
+ async init(projectId, config) {
93
+ return this.projectStorage.init(projectId, config);
94
+ }
95
+ async getBoard(projectId) {
96
+ return this.projectStorage.getBoard(projectId);
97
+ }
98
+ async getBoardMarkdown(projectId) {
99
+ return this.projectStorage.getBoardMarkdown(projectId);
100
+ }
101
+ // ===========================================================================
102
+ // Column Operations (columns are now workflow statuses)
103
+ // ===========================================================================
104
+ getColumnNames(projectId) {
105
+ // Get project's workflow
106
+ const project = this.db.prepare(`
107
+ SELECT workflow_id FROM ${T.projects} WHERE id = ?
108
+ `).get(projectId);
109
+ const workflowId = project?.workflow_id || 'default';
110
+ const rows = this.db.prepare(`
111
+ SELECT name FROM ${T.workflow_statuses}
112
+ WHERE workflow_id = ?
113
+ ORDER BY position
114
+ `).all(workflowId);
115
+ return rows.map((r) => r.name);
116
+ }
117
+ async createColumn(projectId, name, position) {
118
+ // Get project's workflow
119
+ const project = this.db.prepare(`
120
+ SELECT workflow_id FROM ${T.projects} WHERE id = ?
121
+ `).get(projectId);
122
+ const workflowId = project?.workflow_id || 'default';
123
+ // Create a status in the workflow
124
+ const status = await this.statusStorage.createStatus(workflowId, {
125
+ name,
126
+ category: 'unstarted', // Default category for manually created columns
127
+ position,
128
+ });
129
+ return {
130
+ id: status.id,
131
+ name: status.name,
132
+ position: status.position,
133
+ tickets: [],
134
+ };
135
+ }
136
+ async renameColumn(projectId, id, name) {
137
+ const status = await this.statusStorage.updateStatus(id, { name });
138
+ return {
139
+ id: status.id,
140
+ name: status.name,
141
+ position: status.position,
142
+ tickets: [],
143
+ };
144
+ }
145
+ async moveColumn(projectId, id, position) {
146
+ const status = await this.statusStorage.reorderStatus(id, position);
147
+ return {
148
+ id: status.id,
149
+ name: status.name,
150
+ position: status.position,
151
+ tickets: [],
152
+ };
153
+ }
154
+ async deleteColumn(projectId, id, _cascade) {
155
+ return this.statusStorage.deleteStatus(id);
156
+ }
157
+ // ===========================================================================
158
+ // Ticket Operations
159
+ // ===========================================================================
160
+ async createTicket(projectId, ticket) {
161
+ return this.ticketStorage.createTicket(projectId, ticket);
162
+ }
163
+ async getTicket(id) {
164
+ return this.ticketStorage.getTicket(id);
165
+ }
166
+ async getTicketById(id) {
167
+ return this.ticketStorage.getTicketById(id);
168
+ }
169
+ async updateTicket(id, changes) {
170
+ return this.ticketStorage.updateTicket(id, changes);
171
+ }
172
+ async moveTicket(projectId, id, column, position) {
173
+ return this.ticketStorage.moveTicket(projectId, id, column, position);
174
+ }
175
+ async moveTicketToProject(ticketId, newProjectId) {
176
+ return this.ticketStorage.moveTicketToProject(ticketId, newProjectId);
177
+ }
178
+ async deleteTicket(id) {
179
+ return this.ticketStorage.deleteTicket(id);
180
+ }
181
+ async listTickets(projectId, filter) {
182
+ return this.ticketStorage.listTickets(projectId, filter);
183
+ }
184
+ // ===========================================================================
185
+ // Subtask Operations
186
+ // ===========================================================================
187
+ async addSubtask(ticketId, title) {
188
+ return this.subtaskStorage.addSubtask(ticketId, title);
189
+ }
190
+ async toggleSubtask(ticketId, subtaskId) {
191
+ return this.subtaskStorage.toggleSubtask(ticketId, subtaskId);
192
+ }
193
+ async removeSubtask(ticketId, subtaskId) {
194
+ return this.subtaskStorage.removeSubtask(ticketId, subtaskId);
195
+ }
196
+ // ===========================================================================
197
+ // Acceptance Criteria Operations
198
+ // ===========================================================================
199
+ async addAcceptanceCriterion(ticketId, criterion) {
200
+ return this.acceptanceCriteriaStorage.addAcceptanceCriterion(ticketId, criterion);
201
+ }
202
+ async removeAcceptanceCriterion(ticketId, criterionId) {
203
+ return this.acceptanceCriteriaStorage.removeAcceptanceCriterion(ticketId, criterionId);
204
+ }
205
+ async clearAcceptanceCriteria(ticketId) {
206
+ return this.acceptanceCriteriaStorage.clearAcceptanceCriteria(ticketId);
207
+ }
208
+ // ===========================================================================
209
+ // Spec Operations
210
+ // ===========================================================================
211
+ async createSpec(spec) {
212
+ return this.specStorage.createSpec(spec);
213
+ }
214
+ async getSpec(id) {
215
+ return this.specStorage.getSpec(id);
216
+ }
217
+ async listSpecs(filter) {
218
+ return this.specStorage.listSpecs(filter);
219
+ }
220
+ async updateSpec(id, changes) {
221
+ return this.specStorage.updateSpec(id, changes);
222
+ }
223
+ async deleteSpec(id) {
224
+ return this.specStorage.deleteSpec(id);
225
+ }
226
+ async linkTicketToSpec(ticketId, specId) {
227
+ return this.specStorage.linkTicketToSpec(ticketId, specId);
228
+ }
229
+ async unlinkTicketFromSpec(ticketId, specId) {
230
+ return this.specStorage.unlinkTicketFromSpec(ticketId, specId);
231
+ }
232
+ async getTicketsForSpec(projectId, specId) {
233
+ return this.specStorage.getTicketsForSpec(projectId, specId);
234
+ }
235
+ async getSpecsForTicket(ticketId) {
236
+ return this.specStorage.getSpecsForTicket(ticketId);
237
+ }
238
+ async addSpecDependency(specId, dependsOnId) {
239
+ return this.specStorage.addSpecDependency(specId, dependsOnId);
240
+ }
241
+ async removeSpecDependency(specId, dependsOnId) {
242
+ return this.specStorage.removeSpecDependency(specId, dependsOnId);
243
+ }
244
+ async getSpecDependencies(specId) {
245
+ return this.specStorage.getSpecDependencies(specId);
246
+ }
247
+ async getSpecDependents(specId) {
248
+ return this.specStorage.getSpecDependents(specId);
249
+ }
250
+ async linkProjectToSpec(projectId, specId) {
251
+ return this.specStorage.linkProjectToSpec(projectId, specId);
252
+ }
253
+ async unlinkProjectFromSpec(projectId, specId) {
254
+ return this.specStorage.unlinkProjectFromSpec(projectId, specId);
255
+ }
256
+ async getSpecsForProject(projectId) {
257
+ return this.specStorage.getSpecsForProject(projectId);
258
+ }
259
+ async getProjectsForSpec(specId) {
260
+ return this.specStorage.getProjectsForSpec(specId);
261
+ }
262
+ // ===========================================================================
263
+ // Epic Operations
264
+ // ===========================================================================
265
+ async createEpic(projectId, epic) {
266
+ return this.epicStorage.createEpic(projectId, epic);
267
+ }
268
+ async getEpic(id) {
269
+ return this.epicStorage.getEpic(id);
270
+ }
271
+ async listEpics(projectId, filter) {
272
+ return this.epicStorage.listEpics(projectId, filter);
273
+ }
274
+ async reorderEpic(projectId, epicId, newPosition) {
275
+ return this.epicStorage.reorderEpic(projectId, epicId, newPosition);
276
+ }
277
+ async updateEpic(id, changes) {
278
+ return this.epicStorage.updateEpic(id, changes);
279
+ }
280
+ async deleteEpic(id) {
281
+ return this.epicStorage.deleteEpic(id);
282
+ }
283
+ async getTicketsForEpic(projectId, epicId) {
284
+ return this.epicStorage.getTicketsForEpic(projectId, epicId);
285
+ }
286
+ async linkTicketToEpic(ticketId, epicId) {
287
+ return this.epicStorage.linkTicketToEpic(ticketId, epicId);
288
+ }
289
+ async unlinkTicketFromEpic(ticketId) {
290
+ return this.epicStorage.unlinkTicketFromEpic(ticketId);
291
+ }
292
+ // ===========================================================================
293
+ // Dependency Operations
294
+ // ===========================================================================
295
+ async createTicketDependency(ticketId, dependsOnId, type) {
296
+ return this.dependencyStorage.createTicketDependency(ticketId, dependsOnId, type);
297
+ }
298
+ async deleteTicketDependency(ticketId, dependsOnId, type) {
299
+ return this.dependencyStorage.deleteTicketDependency(ticketId, dependsOnId, type);
300
+ }
301
+ async listTicketDependencies(ticketId) {
302
+ return this.dependencyStorage.listTicketDependencies(ticketId);
303
+ }
304
+ async getTicketBlockers(ticketId) {
305
+ return this.dependencyStorage.getTicketBlockers(ticketId);
306
+ }
307
+ async getTicketsBlockedBy(ticketId) {
308
+ return this.dependencyStorage.getTicketsBlockedBy(ticketId);
309
+ }
310
+ async isTicketBlocked(ticketId) {
311
+ return this.dependencyStorage.isTicketBlocked(ticketId);
312
+ }
313
+ async createSpecDependency(specId, dependsOnId, type) {
314
+ return this.dependencyStorage.createSpecDependency(specId, dependsOnId, type);
315
+ }
316
+ async deleteSpecDependency(specId, dependsOnId, type) {
317
+ return this.dependencyStorage.deleteSpecDependency(specId, dependsOnId, type);
318
+ }
319
+ async listSpecDependencies(specId) {
320
+ return this.dependencyStorage.listSpecDependencies(specId);
321
+ }
322
+ async createEpicDependency(epicId, dependsOnId, type) {
323
+ return this.dependencyStorage.createEpicDependency(epicId, dependsOnId, type);
324
+ }
325
+ async deleteEpicDependency(epicId, dependsOnId, type) {
326
+ return this.dependencyStorage.deleteEpicDependency(epicId, dependsOnId, type);
327
+ }
328
+ async listEpicDependencies(epicId) {
329
+ return this.dependencyStorage.listEpicDependencies(epicId);
330
+ }
331
+ async isEpicBlocked(epicId) {
332
+ return this.dependencyStorage.isEpicBlocked(epicId);
333
+ }
334
+ // ===========================================================================
335
+ // Workflow Operations
336
+ // ===========================================================================
337
+ async listWorkflows(filter) {
338
+ return this.statusStorage.listWorkflows(filter);
339
+ }
340
+ async getWorkflow(id) {
341
+ return this.statusStorage.getWorkflow(id);
342
+ }
343
+ async createWorkflow(workflow) {
344
+ return this.statusStorage.createWorkflow(workflow);
345
+ }
346
+ async updateWorkflow(id, changes) {
347
+ return this.statusStorage.updateWorkflow(id, changes);
348
+ }
349
+ async deleteWorkflow(id) {
350
+ return this.statusStorage.deleteWorkflow(id);
351
+ }
352
+ async getProjectWorkflow(projectId) {
353
+ return this.statusStorage.getProjectWorkflow(projectId);
354
+ }
355
+ // ===========================================================================
356
+ // Workflow Status Operations
357
+ // ===========================================================================
358
+ async listStatuses(workflowId) {
359
+ return this.statusStorage.listStatuses(workflowId);
360
+ }
361
+ async getStatus(id) {
362
+ return this.statusStorage.getStatus(id);
363
+ }
364
+ async createStatus(workflowId, status) {
365
+ return this.statusStorage.createStatus(workflowId, status);
366
+ }
367
+ async updateStatus(id, changes) {
368
+ return this.statusStorage.updateStatus(id, changes);
369
+ }
370
+ async deleteStatus(id) {
371
+ return this.statusStorage.deleteStatus(id);
372
+ }
373
+ async reorderStatus(id, newPosition) {
374
+ return this.statusStorage.reorderStatus(id, newPosition);
375
+ }
376
+ async getDefaultStatus(workflowId) {
377
+ return this.statusStorage.getDefaultStatus(workflowId);
378
+ }
379
+ // ===========================================================================
380
+ // Ticket Template Operations
381
+ // ===========================================================================
382
+ // Note: Workflow templates have been removed. Use workflow commands directly
383
+ // (prlt workflow list, prlt workflow create, prlt workflow switch)
384
+ async listTicketTemplates(filter) {
385
+ return this.templateStorage.listTicketTemplates(filter);
386
+ }
387
+ async getTicketTemplate(id) {
388
+ return this.templateStorage.getTicketTemplate(id);
389
+ }
390
+ async createTicketTemplate(template) {
391
+ return this.templateStorage.createTicketTemplate(template);
392
+ }
393
+ async createTicketTemplateFromTicket(ticketId, name, description) {
394
+ return this.templateStorage.createTicketTemplateFromTicket(ticketId, name, description);
395
+ }
396
+ async updateTicketTemplate(id, changes) {
397
+ return this.templateStorage.updateTicketTemplate(id, changes);
398
+ }
399
+ async deleteTicketTemplate(id) {
400
+ return this.templateStorage.deleteTicketTemplate(id);
401
+ }
402
+ // ===========================================================================
403
+ // Phase Operations
404
+ // ===========================================================================
405
+ async listPhases(filter) {
406
+ return this.phaseStorage.listPhases(filter);
407
+ }
408
+ async getPhase(id) {
409
+ return this.phaseStorage.getPhase(id);
410
+ }
411
+ async createPhase(phase) {
412
+ return this.phaseStorage.createPhase(phase);
413
+ }
414
+ async updatePhase(id, changes) {
415
+ return this.phaseStorage.updatePhase(id, changes);
416
+ }
417
+ async deletePhase(id) {
418
+ return this.phaseStorage.deletePhase(id);
419
+ }
420
+ async reorderPhase(id, newPosition) {
421
+ return this.phaseStorage.reorderPhase(id, newPosition);
422
+ }
423
+ async getDefaultPhase() {
424
+ return this.phaseStorage.getDefaultPhase();
425
+ }
426
+ // ===========================================================================
427
+ // Phase Template Operations
428
+ // ===========================================================================
429
+ async listPhaseTemplates(filter) {
430
+ return this.phaseStorage.listPhaseTemplates(filter);
431
+ }
432
+ async getPhaseTemplate(id) {
433
+ return this.phaseStorage.getPhaseTemplate(id);
434
+ }
435
+ async applyPhaseTemplate(templateId) {
436
+ return this.phaseStorage.applyPhaseTemplate(templateId);
437
+ }
438
+ async savePhaseTemplate(name, description) {
439
+ return this.phaseStorage.savePhaseTemplate(name, description);
440
+ }
441
+ async updatePhaseTemplate(id, changes) {
442
+ return this.phaseStorage.updatePhaseTemplate(id, changes);
443
+ }
444
+ async deletePhaseTemplate(id) {
445
+ return this.phaseStorage.deletePhaseTemplate(id);
446
+ }
447
+ // ===========================================================================
448
+ // Action Operations
449
+ // ===========================================================================
450
+ async listActions(filter) {
451
+ return this.actionStorage.listActions(filter);
452
+ }
453
+ async getAction(id) {
454
+ return this.actionStorage.getAction(id);
455
+ }
456
+ async createAction(action) {
457
+ return this.actionStorage.createAction(action);
458
+ }
459
+ async updateAction(id, changes) {
460
+ return this.actionStorage.updateAction(id, changes);
461
+ }
462
+ async deleteAction(id) {
463
+ return this.actionStorage.deleteAction(id);
464
+ }
465
+ async getSuggestedAction(category) {
466
+ return this.actionStorage.getSuggestedAction(category);
467
+ }
468
+ // ===========================================================================
469
+ // Project Operations
470
+ // ===========================================================================
471
+ async createProject(project) {
472
+ return this.projectStorage.createProject(project);
473
+ }
474
+ async getProjectBoard(projectId) {
475
+ return this.projectStorage.getProjectBoard(projectId);
476
+ }
477
+ async listProjectSummaries() {
478
+ return this.projectStorage.listProjectSummaries();
479
+ }
480
+ async deleteProject(projectId) {
481
+ return this.projectStorage.deleteProject(projectId);
482
+ }
483
+ async getProject(id) {
484
+ return this.projectStorage.getProject(id);
485
+ }
486
+ async updateProject(id, changes) {
487
+ return this.projectStorage.updateProject(id, changes);
488
+ }
489
+ async listProjects(filter) {
490
+ return this.projectStorage.listProjects(filter);
491
+ }
492
+ async archiveProject(id) {
493
+ return this.projectStorage.archiveProject(id);
494
+ }
495
+ async unarchiveProject(id) {
496
+ return this.projectStorage.unarchiveProject(id);
497
+ }
498
+ // ===========================================================================
499
+ // Board View Operations
500
+ // ===========================================================================
501
+ async listBoardViews(filter) {
502
+ return this.viewStorage.listBoardViews(filter);
503
+ }
504
+ async getBoardView(id) {
505
+ return this.viewStorage.getBoardView(id);
506
+ }
507
+ async createBoardView(view) {
508
+ return this.viewStorage.createBoardView(view);
509
+ }
510
+ async updateBoardView(id, changes) {
511
+ return this.viewStorage.updateBoardView(id, changes);
512
+ }
513
+ async deleteBoardView(id) {
514
+ return this.viewStorage.deleteBoardView(id);
515
+ }
516
+ async getDefaultBoardView(projectId) {
517
+ return this.viewStorage.getDefaultBoardView(projectId);
518
+ }
519
+ async getBoardWithView(projectId, viewId, filters) {
520
+ return this.viewStorage.getBoardWithView(projectId, viewId, filters);
521
+ }
522
+ // ===========================================================================
523
+ // Sync Operations (no-op for pure SQLite)
524
+ // ===========================================================================
525
+ async pull() {
526
+ return { success: true, changes: 0 };
527
+ }
528
+ async push() {
529
+ return { success: true, changes: 0 };
530
+ }
531
+ async status() {
532
+ return { ahead: 0, behind: 0, conflicts: false };
533
+ }
534
+ // ===========================================================================
535
+ // Rebuild Operations (for git storage sync)
536
+ // ===========================================================================
537
+ rebuildFromBoard(board) {
538
+ const projectId = board.id;
539
+ const T = PMO_TABLES;
540
+ // Clear existing tickets for current project
541
+ this.db.prepare(`DELETE FROM ${T.tickets} WHERE project_id = ?`).run(projectId);
542
+ const now = Date.now();
543
+ const nowIso = new Date(now).toISOString();
544
+ // Get or create project and its workflow
545
+ const existingProject = this.db.prepare(`
546
+ SELECT name, workflow_id FROM ${T.projects} WHERE id = ?
547
+ `).get(projectId);
548
+ const projectName = (board.name === 'Board' && existingProject?.name) ? existingProject.name : board.name;
549
+ let workflowId = existingProject?.workflow_id;
550
+ // If no workflow, create a project-specific one
551
+ if (!workflowId) {
552
+ workflowId = `workflow-${projectId}`;
553
+ this.db.prepare(`
554
+ INSERT OR IGNORE INTO ${T.workflows} (id, name, description, is_builtin, created_at, updated_at)
555
+ VALUES (?, ?, ?, 0, ?, ?)
556
+ `).run(workflowId, `${projectName} Workflow`, `Workflow for ${projectName}`, nowIso, nowIso);
557
+ }
558
+ // Update or insert project with workflow
559
+ this.db.prepare(`
560
+ INSERT OR REPLACE INTO ${T.projects} (id, name, workflow_id, updated_at)
561
+ VALUES (?, ?, ?, ?)
562
+ `).run(projectId, projectName, workflowId, now);
563
+ // Create a map of column name to status id
564
+ const statusMap = new Map();
565
+ // Clear existing statuses for this workflow (only if not builtin)
566
+ const workflow = this.db.prepare(`SELECT is_builtin FROM ${T.workflows} WHERE id = ?`).get(workflowId);
567
+ if (workflow && !workflow.is_builtin) {
568
+ this.db.prepare(`DELETE FROM ${T.workflow_statuses} WHERE workflow_id = ?`).run(workflowId);
569
+ }
570
+ // Create statuses from board columns (if workflow is not builtin)
571
+ if (!workflow?.is_builtin) {
572
+ const insertStatus = this.db.prepare(`
573
+ INSERT OR REPLACE INTO ${T.workflow_statuses} (id, workflow_id, name, category, position, is_default, created_at)
574
+ VALUES (?, ?, ?, ?, ?, ?, ?)
575
+ `);
576
+ for (const column of board.columns) {
577
+ const statusId = `${workflowId}-${column.id}`;
578
+ // Infer category from column name or position
579
+ const category = this.inferCategoryFromColumnName(column.name, column.position, board.columns.length);
580
+ const isDefault = column.position === 0 ? 1 : 0;
581
+ insertStatus.run(statusId, workflowId, column.name, category, column.position, isDefault, nowIso);
582
+ statusMap.set(column.name, statusId);
583
+ }
584
+ }
585
+ else {
586
+ // For builtin workflows, map column names to existing statuses
587
+ const statuses = this.db.prepare(`
588
+ SELECT id, name FROM ${T.workflow_statuses} WHERE workflow_id = ? ORDER BY position
589
+ `).all(workflowId);
590
+ for (const status of statuses) {
591
+ statusMap.set(status.name, status.id);
592
+ }
593
+ }
594
+ // Insert tickets
595
+ const insertTicket = this.db.prepare(`
596
+ INSERT INTO ${T.tickets} (
597
+ id, project_id, title, description, priority, category,
598
+ status_id, owner, assignee, spec_id,
599
+ created_at, updated_at, last_synced_from_spec, last_synced_from_board
600
+ )
601
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
602
+ `);
603
+ const insertSubtask = this.db.prepare(`
604
+ INSERT INTO ${T.subtasks} (id, ticket_id, title, done, position)
605
+ VALUES (?, ?, ?, ?, ?)
606
+ `);
607
+ const insertMeta = this.db.prepare(`
608
+ INSERT INTO ${T.ticket_metadata} (ticket_id, key, value)
609
+ VALUES (?, ?, ?)
610
+ `);
611
+ for (const column of board.columns) {
612
+ const statusId = statusMap.get(column.name);
613
+ for (const ticket of column.tickets) {
614
+ // Insert ticket data with status_id
615
+ insertTicket.run(ticket.id, projectId, ticket.title, ticket.description || null, ticket.priority || null, ticket.category || null, statusId || null, ticket.owner || null, ticket.assignee || null, ticket.specId || null, ticket.createdAt.toISOString(), ticket.updatedAt.toISOString(), ticket.lastSyncedFromSpec || null, ticket.lastSyncedFromBoard || null);
616
+ // Subtasks
617
+ ticket.subtasks.forEach((st, idx) => {
618
+ insertSubtask.run(st.id, ticket.id, st.title, st.done ? 1 : 0, idx);
619
+ });
620
+ // Metadata
621
+ for (const [key, value] of Object.entries(ticket.metadata)) {
622
+ insertMeta.run(ticket.id, key, value);
623
+ }
624
+ }
625
+ }
626
+ }
627
+ /**
628
+ * Infer a status category from column name or position.
629
+ */
630
+ inferCategoryFromColumnName(name, position, totalColumns) {
631
+ const lowerName = name.toLowerCase();
632
+ // Match common column names to categories
633
+ if (lowerName.includes('backlog') || lowerName.includes('icebox'))
634
+ return 'backlog';
635
+ if (lowerName.includes('ready') || lowerName.includes('todo') || lowerName.includes('to do'))
636
+ return 'unstarted';
637
+ if (lowerName.includes('progress') || lowerName.includes('doing') || lowerName.includes('review'))
638
+ return 'started';
639
+ if (lowerName.includes('done') || lowerName.includes('complete') || lowerName.includes('finished'))
640
+ return 'completed';
641
+ if (lowerName.includes('cancel') || lowerName.includes('won\'t'))
642
+ return 'canceled';
643
+ // Fallback: infer from position
644
+ if (position === 0)
645
+ return 'backlog';
646
+ if (position === totalColumns - 1)
647
+ return 'completed';
648
+ if (position <= totalColumns / 2)
649
+ return 'unstarted';
650
+ return 'started';
651
+ }
652
+ // ===========================================================================
653
+ // Lifecycle
654
+ // ===========================================================================
655
+ async close() {
656
+ this.db.close();
657
+ }
658
+ // ===========================================================================
659
+ // Cache Operations (for git storage compatibility)
660
+ // ===========================================================================
661
+ getCacheMetadata() {
662
+ const mtime = this.db.prepare(`SELECT value FROM ${T.cache_metadata} WHERE key = 'boardMtime'`).get();
663
+ const builtAt = this.db.prepare(`SELECT value FROM ${T.cache_metadata} WHERE key = 'cacheBuiltAt'`).get();
664
+ const hash = this.db.prepare(`SELECT value FROM ${T.cache_metadata} WHERE key = 'contentHash'`).get();
665
+ if (!mtime || !builtAt)
666
+ return null;
667
+ return {
668
+ boardMtime: parseInt(mtime.value, 10),
669
+ cacheBuiltAt: parseInt(builtAt.value, 10),
670
+ contentHash: hash?.value,
671
+ };
672
+ }
673
+ setCacheMetadata(metadata) {
674
+ const upsert = this.db.prepare(`
675
+ INSERT OR REPLACE INTO ${T.cache_metadata} (key, value)
676
+ VALUES (?, ?)
677
+ `);
678
+ upsert.run('boardMtime', metadata.boardMtime.toString());
679
+ upsert.run('cacheBuiltAt', metadata.cacheBuiltAt.toString());
680
+ if (metadata.contentHash) {
681
+ upsert.run('contentHash', metadata.contentHash);
682
+ }
683
+ }
684
+ clearCache() {
685
+ this.db.prepare(`DELETE FROM ${T.cache_metadata}`).run();
686
+ }
687
+ }
688
+ // Re-export for backward compatibility
689
+ export { SQLiteStorage as default };