@proletariat/cli 0.2.0 → 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 +512 -253
  2. package/bin/dev.cmd +3 -0
  3. package/bin/dev.js +5 -0
  4. package/bin/run.cmd +3 -0
  5. package/bin/run.js +23 -0
  6. package/dist/commands/action/create.d.ts +21 -0
  7. package/dist/commands/action/create.js +126 -0
  8. package/dist/commands/action/delete.d.ts +17 -0
  9. package/dist/commands/action/delete.js +78 -0
  10. package/dist/commands/action/index.d.ts +15 -0
  11. package/dist/commands/action/index.js +107 -0
  12. package/dist/commands/action/list.d.ts +14 -0
  13. package/dist/commands/action/list.js +89 -0
  14. package/dist/commands/action/run.d.ts +19 -0
  15. package/dist/commands/action/run.js +179 -0
  16. package/dist/commands/action/show.d.ts +15 -0
  17. package/dist/commands/action/show.js +47 -0
  18. package/dist/commands/action/update.d.ts +22 -0
  19. package/dist/commands/action/update.js +168 -0
  20. package/dist/commands/agent/index.d.ts +13 -0
  21. package/dist/commands/agent/index.js +131 -0
  22. package/dist/commands/agent/list.d.ts +7 -0
  23. package/dist/commands/agent/list.js +126 -0
  24. package/dist/commands/agent/login.d.ts +16 -0
  25. package/dist/commands/agent/login.js +146 -0
  26. package/dist/commands/agent/rebuild.d.ts +18 -0
  27. package/dist/commands/agent/rebuild.js +133 -0
  28. package/dist/commands/agent/restart.d.ts +17 -0
  29. package/dist/commands/agent/restart.js +116 -0
  30. package/dist/commands/agent/shell.d.ts +23 -0
  31. package/dist/commands/agent/shell.js +378 -0
  32. package/dist/commands/agent/staff/add.d.ts +15 -0
  33. package/dist/commands/agent/staff/add.js +281 -0
  34. package/dist/commands/agent/staff/index.d.ts +14 -0
  35. package/dist/commands/agent/staff/index.js +90 -0
  36. package/dist/commands/agent/staff/list.d.ts +7 -0
  37. package/dist/commands/agent/staff/list.js +90 -0
  38. package/dist/commands/agent/staff/remove.d.ts +16 -0
  39. package/dist/commands/agent/staff/remove.js +137 -0
  40. package/dist/commands/agent/status.d.ts +17 -0
  41. package/dist/commands/agent/status.js +139 -0
  42. package/dist/commands/agent/temp/cleanup.d.ts +23 -0
  43. package/dist/commands/agent/temp/cleanup.js +388 -0
  44. package/dist/commands/agent/temp/index.d.ts +14 -0
  45. package/dist/commands/agent/temp/index.js +82 -0
  46. package/dist/commands/agent/temp/list.d.ts +7 -0
  47. package/dist/commands/agent/temp/list.js +108 -0
  48. package/dist/commands/agent/themes/add-names.d.ts +10 -0
  49. package/dist/commands/agent/themes/add-names.js +67 -0
  50. package/dist/commands/agent/themes/create.d.ts +13 -0
  51. package/dist/commands/agent/themes/create.js +66 -0
  52. package/dist/commands/agent/themes/index.d.ts +9 -0
  53. package/dist/commands/agent/themes/index.js +194 -0
  54. package/dist/commands/agent/themes/list.d.ts +6 -0
  55. package/dist/commands/agent/themes/list.js +41 -0
  56. package/dist/commands/agent/themes/set.d.ts +12 -0
  57. package/dist/commands/agent/themes/set.js +77 -0
  58. package/dist/commands/agent/visit.d.ts +16 -0
  59. package/dist/commands/agent/visit.js +88 -0
  60. package/dist/commands/autocomplete/setup.d.ts +14 -0
  61. package/dist/commands/autocomplete/setup.js +154 -0
  62. package/dist/commands/board/index.d.ts +17 -0
  63. package/dist/commands/board/index.js +255 -0
  64. package/dist/commands/board/watch.d.ts +13 -0
  65. package/dist/commands/board/watch.js +52 -0
  66. package/dist/commands/branch/create.d.ts +50 -0
  67. package/dist/commands/branch/create.js +624 -0
  68. package/dist/commands/branch/index.d.ts +13 -0
  69. package/dist/commands/branch/index.js +50 -0
  70. package/dist/commands/branch/list.d.ts +17 -0
  71. package/dist/commands/branch/list.js +120 -0
  72. package/dist/commands/branch/validate.d.ts +15 -0
  73. package/dist/commands/branch/validate.js +73 -0
  74. package/dist/commands/commit.d.ts +71 -0
  75. package/dist/commands/commit.js +499 -0
  76. package/dist/commands/docker/clean.d.ts +13 -0
  77. package/dist/commands/docker/clean.js +224 -0
  78. package/dist/commands/docker/index.d.ts +19 -0
  79. package/dist/commands/docker/index.js +274 -0
  80. package/dist/commands/docker/list.d.ts +16 -0
  81. package/dist/commands/docker/list.js +200 -0
  82. package/dist/commands/docker/logs.d.ts +14 -0
  83. package/dist/commands/docker/logs.js +118 -0
  84. package/dist/commands/docker/prune.d.ts +14 -0
  85. package/dist/commands/docker/prune.js +211 -0
  86. package/dist/commands/docker/restart.d.ts +14 -0
  87. package/dist/commands/docker/restart.js +129 -0
  88. package/dist/commands/docker/shell.d.ts +14 -0
  89. package/dist/commands/docker/shell.js +103 -0
  90. package/dist/commands/docker/start.d.ts +12 -0
  91. package/dist/commands/docker/start.js +92 -0
  92. package/dist/commands/docker/status.d.ts +7 -0
  93. package/dist/commands/docker/status.js +40 -0
  94. package/dist/commands/docker/stop.d.ts +14 -0
  95. package/dist/commands/docker/stop.js +134 -0
  96. package/dist/commands/docker/sync.d.ts +15 -0
  97. package/dist/commands/docker/sync.js +112 -0
  98. package/dist/commands/epic/activate.d.ts +13 -0
  99. package/dist/commands/epic/activate.js +118 -0
  100. package/dist/commands/epic/archive.d.ts +14 -0
  101. package/dist/commands/epic/archive.js +132 -0
  102. package/dist/commands/epic/create.d.ts +15 -0
  103. package/dist/commands/epic/create.js +137 -0
  104. package/dist/commands/epic/index.d.ts +13 -0
  105. package/dist/commands/epic/index.js +88 -0
  106. package/dist/commands/epic/link/block.d.ts +14 -0
  107. package/dist/commands/epic/link/block.js +79 -0
  108. package/dist/commands/epic/link/duplicates.d.ts +14 -0
  109. package/dist/commands/epic/link/duplicates.js +66 -0
  110. package/dist/commands/epic/link/index.d.ts +19 -0
  111. package/dist/commands/epic/link/index.js +242 -0
  112. package/dist/commands/epic/link/relates.d.ts +14 -0
  113. package/dist/commands/epic/link/relates.js +66 -0
  114. package/dist/commands/epic/link/remove.d.ts +16 -0
  115. package/dist/commands/epic/link/remove.js +89 -0
  116. package/dist/commands/epic/list.d.ts +11 -0
  117. package/dist/commands/epic/list.js +87 -0
  118. package/dist/commands/epic/move.d.ts +15 -0
  119. package/dist/commands/epic/move.js +184 -0
  120. package/dist/commands/epic/progress.d.ts +16 -0
  121. package/dist/commands/epic/progress.js +166 -0
  122. package/dist/commands/epic/project.d.ts +15 -0
  123. package/dist/commands/epic/project.js +219 -0
  124. package/dist/commands/epic/reorder.d.ts +21 -0
  125. package/dist/commands/epic/reorder.js +160 -0
  126. package/dist/commands/epic/spec.d.ts +15 -0
  127. package/dist/commands/epic/spec.js +191 -0
  128. package/dist/commands/epic/ticket.d.ts +18 -0
  129. package/dist/commands/epic/ticket.js +291 -0
  130. package/dist/commands/epic/view.d.ts +13 -0
  131. package/dist/commands/epic/view.js +117 -0
  132. package/dist/commands/execution/index.d.ts +13 -0
  133. package/dist/commands/execution/index.js +70 -0
  134. package/dist/commands/execution/list.d.ts +15 -0
  135. package/dist/commands/execution/list.js +144 -0
  136. package/dist/commands/execution/logs.d.ts +18 -0
  137. package/dist/commands/execution/logs.js +161 -0
  138. package/dist/commands/execution/stop.d.ts +22 -0
  139. package/dist/commands/execution/stop.js +248 -0
  140. package/dist/commands/gh/index.d.ts +9 -0
  141. package/dist/commands/gh/index.js +53 -0
  142. package/dist/commands/gh/login.d.ts +6 -0
  143. package/dist/commands/gh/login.js +57 -0
  144. package/dist/commands/gh/status.d.ts +6 -0
  145. package/dist/commands/gh/status.js +48 -0
  146. package/dist/commands/gh/token.d.ts +6 -0
  147. package/dist/commands/gh/token.js +59 -0
  148. package/dist/commands/init.d.ts +26 -0
  149. package/dist/commands/init.js +200 -0
  150. package/dist/commands/phase/create.d.ts +22 -0
  151. package/dist/commands/phase/create.js +123 -0
  152. package/dist/commands/phase/delete.d.ts +17 -0
  153. package/dist/commands/phase/delete.js +73 -0
  154. package/dist/commands/phase/list.d.ts +12 -0
  155. package/dist/commands/phase/list.js +76 -0
  156. package/dist/commands/phase/move.d.ts +17 -0
  157. package/dist/commands/phase/move.js +115 -0
  158. package/dist/commands/phase/template/apply.d.ts +17 -0
  159. package/dist/commands/phase/template/apply.js +106 -0
  160. package/dist/commands/phase/template/create.d.ts +16 -0
  161. package/dist/commands/phase/template/create.js +58 -0
  162. package/dist/commands/phase/template/delete.d.ts +17 -0
  163. package/dist/commands/phase/template/delete.js +98 -0
  164. package/dist/commands/phase/template/index.d.ts +15 -0
  165. package/dist/commands/phase/template/index.js +128 -0
  166. package/dist/commands/phase/template/list.d.ts +16 -0
  167. package/dist/commands/phase/template/list.js +95 -0
  168. package/dist/commands/phase/template/update.d.ts +17 -0
  169. package/dist/commands/phase/template/update.js +89 -0
  170. package/dist/commands/phase/update.d.ts +23 -0
  171. package/dist/commands/phase/update.js +174 -0
  172. package/dist/commands/pmo/init.d.ts +25 -0
  173. package/dist/commands/pmo/init.js +341 -0
  174. package/dist/commands/pr/create.d.ts +17 -0
  175. package/dist/commands/pr/create.js +242 -0
  176. package/dist/commands/pr/index.d.ts +9 -0
  177. package/dist/commands/pr/index.js +68 -0
  178. package/dist/commands/pr/link.d.ts +14 -0
  179. package/dist/commands/pr/link.js +212 -0
  180. package/dist/commands/pr/status.d.ts +12 -0
  181. package/dist/commands/pr/status.js +161 -0
  182. package/dist/commands/project/archive.d.ts +17 -0
  183. package/dist/commands/project/archive.js +83 -0
  184. package/dist/commands/project/create.d.ts +22 -0
  185. package/dist/commands/project/create.js +143 -0
  186. package/dist/commands/project/delete.d.ts +17 -0
  187. package/dist/commands/project/delete.js +128 -0
  188. package/dist/commands/project/index.d.ts +13 -0
  189. package/dist/commands/project/index.js +64 -0
  190. package/dist/commands/project/list.d.ts +14 -0
  191. package/dist/commands/project/list.js +96 -0
  192. package/dist/commands/project/spec.d.ts +18 -0
  193. package/dist/commands/project/spec.js +216 -0
  194. package/dist/commands/project/unarchive.d.ts +15 -0
  195. package/dist/commands/project/unarchive.js +35 -0
  196. package/dist/commands/project/view.d.ts +16 -0
  197. package/dist/commands/project/view.js +94 -0
  198. package/dist/commands/repo/add.d.ts +21 -0
  199. package/dist/commands/repo/add.js +118 -0
  200. package/dist/commands/repo/index.d.ts +13 -0
  201. package/dist/commands/repo/index.js +114 -0
  202. package/dist/commands/repo/list.d.ts +13 -0
  203. package/dist/commands/repo/list.js +96 -0
  204. package/dist/commands/repo/remove.d.ts +23 -0
  205. package/dist/commands/repo/remove.js +217 -0
  206. package/dist/commands/repo/view.d.ts +15 -0
  207. package/dist/commands/repo/view.js +99 -0
  208. package/dist/commands/session/attach.d.ts +40 -0
  209. package/dist/commands/session/attach.js +307 -0
  210. package/dist/commands/session/index.d.ts +13 -0
  211. package/dist/commands/session/index.js +64 -0
  212. package/dist/commands/session/list.d.ts +21 -0
  213. package/dist/commands/session/list.js +181 -0
  214. package/dist/commands/spec/create.d.ts +19 -0
  215. package/dist/commands/spec/create.js +130 -0
  216. package/dist/commands/spec/index.d.ts +13 -0
  217. package/dist/commands/spec/index.js +68 -0
  218. package/dist/commands/spec/link/depends.d.ts +14 -0
  219. package/dist/commands/spec/link/depends.js +64 -0
  220. package/dist/commands/spec/link/duplicates.d.ts +14 -0
  221. package/dist/commands/spec/link/duplicates.js +63 -0
  222. package/dist/commands/spec/link/index.d.ts +19 -0
  223. package/dist/commands/spec/link/index.js +200 -0
  224. package/dist/commands/spec/link/relates.d.ts +14 -0
  225. package/dist/commands/spec/link/relates.js +63 -0
  226. package/dist/commands/spec/link/remove.d.ts +16 -0
  227. package/dist/commands/spec/link/remove.js +94 -0
  228. package/dist/commands/spec/list.d.ts +12 -0
  229. package/dist/commands/spec/list.js +75 -0
  230. package/dist/commands/spec/plan.d.ts +15 -0
  231. package/dist/commands/spec/plan.js +108 -0
  232. package/dist/commands/spec/ticket.d.ts +18 -0
  233. package/dist/commands/spec/ticket.js +160 -0
  234. package/dist/commands/spec/view.d.ts +15 -0
  235. package/dist/commands/spec/view.js +163 -0
  236. package/dist/commands/status/create.d.ts +21 -0
  237. package/dist/commands/status/create.js +140 -0
  238. package/dist/commands/status/delete.d.ts +13 -0
  239. package/dist/commands/status/delete.js +77 -0
  240. package/dist/commands/status/index.d.ts +14 -0
  241. package/dist/commands/status/index.js +91 -0
  242. package/dist/commands/status/list.d.ts +12 -0
  243. package/dist/commands/status/list.js +93 -0
  244. package/dist/commands/status/move.d.ts +14 -0
  245. package/dist/commands/status/move.js +120 -0
  246. package/dist/commands/status/update.d.ts +20 -0
  247. package/dist/commands/status/update.js +180 -0
  248. package/dist/commands/template/delete.d.ts +15 -0
  249. package/dist/commands/template/delete.js +142 -0
  250. package/dist/commands/template/index.d.ts +10 -0
  251. package/dist/commands/template/index.js +64 -0
  252. package/dist/commands/template/list.d.ts +18 -0
  253. package/dist/commands/template/list.js +157 -0
  254. package/dist/commands/template/phase/apply.d.ts +14 -0
  255. package/dist/commands/template/phase/apply.js +41 -0
  256. package/dist/commands/template/phase/create.d.ts +12 -0
  257. package/dist/commands/template/phase/create.js +29 -0
  258. package/dist/commands/template/phase/delete.d.ts +13 -0
  259. package/dist/commands/template/phase/delete.js +34 -0
  260. package/dist/commands/template/phase/index.d.ts +10 -0
  261. package/dist/commands/template/phase/index.js +62 -0
  262. package/dist/commands/template/phase/list.d.ts +11 -0
  263. package/dist/commands/template/phase/list.js +34 -0
  264. package/dist/commands/template/phase/update.d.ts +13 -0
  265. package/dist/commands/template/phase/update.js +35 -0
  266. package/dist/commands/template/ticket/apply.d.ts +17 -0
  267. package/dist/commands/template/ticket/apply.js +58 -0
  268. package/dist/commands/template/ticket/delete.d.ts +13 -0
  269. package/dist/commands/template/ticket/delete.js +34 -0
  270. package/dist/commands/template/ticket/index.d.ts +10 -0
  271. package/dist/commands/template/ticket/index.js +62 -0
  272. package/dist/commands/template/ticket/list.d.ts +11 -0
  273. package/dist/commands/template/ticket/list.js +34 -0
  274. package/dist/commands/template/ticket/save.d.ts +13 -0
  275. package/dist/commands/template/ticket/save.js +35 -0
  276. package/dist/commands/ticket/bulk.d.ts +13 -0
  277. package/dist/commands/ticket/bulk.js +145 -0
  278. package/dist/commands/ticket/complete.d.ts +16 -0
  279. package/dist/commands/ticket/complete.js +170 -0
  280. package/dist/commands/ticket/create.d.ts +22 -0
  281. package/dist/commands/ticket/create.js +390 -0
  282. package/dist/commands/ticket/delete.d.ts +16 -0
  283. package/dist/commands/ticket/delete.js +178 -0
  284. package/dist/commands/ticket/edit.d.ts +27 -0
  285. package/dist/commands/ticket/edit.js +322 -0
  286. package/dist/commands/ticket/epic.d.ts +20 -0
  287. package/dist/commands/ticket/epic.js +333 -0
  288. package/dist/commands/ticket/index.d.ts +13 -0
  289. package/dist/commands/ticket/index.js +103 -0
  290. package/dist/commands/ticket/link/block.d.ts +14 -0
  291. package/dist/commands/ticket/link/block.js +94 -0
  292. package/dist/commands/ticket/link/duplicates.d.ts +14 -0
  293. package/dist/commands/ticket/link/duplicates.js +93 -0
  294. package/dist/commands/ticket/link/index.d.ts +19 -0
  295. package/dist/commands/ticket/link/index.js +239 -0
  296. package/dist/commands/ticket/link/relates.d.ts +14 -0
  297. package/dist/commands/ticket/link/relates.js +93 -0
  298. package/dist/commands/ticket/link/remove.d.ts +16 -0
  299. package/dist/commands/ticket/link/remove.js +128 -0
  300. package/dist/commands/ticket/list.d.ts +24 -0
  301. package/dist/commands/ticket/list.js +431 -0
  302. package/dist/commands/ticket/move.d.ts +18 -0
  303. package/dist/commands/ticket/move.js +212 -0
  304. package/dist/commands/ticket/project.d.ts +18 -0
  305. package/dist/commands/ticket/project.js +254 -0
  306. package/dist/commands/ticket/reassign.d.ts +19 -0
  307. package/dist/commands/ticket/reassign.js +279 -0
  308. package/dist/commands/ticket/spec.d.ts +18 -0
  309. package/dist/commands/ticket/spec.js +259 -0
  310. package/dist/commands/ticket/status.d.ts +13 -0
  311. package/dist/commands/ticket/status.js +87 -0
  312. package/dist/commands/ticket/template/apply.d.ts +25 -0
  313. package/dist/commands/ticket/template/apply.js +249 -0
  314. package/dist/commands/ticket/template/create.d.ts +19 -0
  315. package/dist/commands/ticket/template/create.js +210 -0
  316. package/dist/commands/ticket/template/delete.d.ts +17 -0
  317. package/dist/commands/ticket/template/delete.js +92 -0
  318. package/dist/commands/ticket/template/index.d.ts +15 -0
  319. package/dist/commands/ticket/template/index.js +118 -0
  320. package/dist/commands/ticket/template/list.d.ts +16 -0
  321. package/dist/commands/ticket/template/list.js +110 -0
  322. package/dist/commands/ticket/template/save.d.ts +14 -0
  323. package/dist/commands/ticket/template/save.js +110 -0
  324. package/dist/commands/ticket/update.d.ts +18 -0
  325. package/dist/commands/ticket/update.js +325 -0
  326. package/dist/commands/ticket/view.d.ts +13 -0
  327. package/dist/commands/ticket/view.js +80 -0
  328. package/dist/commands/whoami.d.ts +9 -0
  329. package/dist/commands/whoami.js +103 -0
  330. package/dist/commands/work/complete.d.ts +13 -0
  331. package/dist/commands/work/complete.js +121 -0
  332. package/dist/commands/work/index.d.ts +13 -0
  333. package/dist/commands/work/index.js +70 -0
  334. package/dist/commands/work/ready.d.ts +24 -0
  335. package/dist/commands/work/ready.js +290 -0
  336. package/dist/commands/work/revise.d.ts +19 -0
  337. package/dist/commands/work/revise.js +377 -0
  338. package/dist/commands/work/spawn-all.d.ts +17 -0
  339. package/dist/commands/work/spawn-all.js +58 -0
  340. package/dist/commands/work/spawn.d.ts +29 -0
  341. package/dist/commands/work/spawn.js +728 -0
  342. package/dist/commands/work/start.d.ts +39 -0
  343. package/dist/commands/work/start.js +1393 -0
  344. package/dist/commands/work/watch.d.ts +31 -0
  345. package/dist/commands/work/watch.js +359 -0
  346. package/dist/commands/workflow/create.d.ts +18 -0
  347. package/dist/commands/workflow/create.js +119 -0
  348. package/dist/commands/workflow/delete.d.ts +17 -0
  349. package/dist/commands/workflow/delete.js +119 -0
  350. package/dist/commands/workflow/index.d.ts +15 -0
  351. package/dist/commands/workflow/index.js +75 -0
  352. package/dist/commands/workflow/list.d.ts +15 -0
  353. package/dist/commands/workflow/list.js +75 -0
  354. package/dist/commands/workflow/switch.d.ts +13 -0
  355. package/dist/commands/workflow/switch.js +117 -0
  356. package/dist/commands/workflow/view.d.ts +16 -0
  357. package/dist/commands/workflow/view.js +114 -0
  358. package/dist/commands/workspace/add.d.ts +12 -0
  359. package/dist/commands/workspace/add.js +74 -0
  360. package/dist/commands/workspace/list.d.ts +9 -0
  361. package/dist/commands/workspace/list.js +153 -0
  362. package/dist/commands/workspace/remove.d.ts +13 -0
  363. package/dist/commands/workspace/remove.js +98 -0
  364. package/dist/commands/workspace/use.d.ts +12 -0
  365. package/dist/commands/workspace/use.js +111 -0
  366. package/dist/hooks/init.d.ts +11 -0
  367. package/dist/hooks/init.js +57 -0
  368. package/dist/index.d.ts +1 -0
  369. package/dist/index.js +1 -0
  370. package/dist/lib/agents/commands.d.ts +189 -0
  371. package/dist/lib/agents/commands.js +893 -0
  372. package/dist/lib/agents/index.d.ts +54 -0
  373. package/dist/lib/agents/index.js +382 -0
  374. package/dist/lib/branch/index.d.ts +120 -0
  375. package/dist/lib/branch/index.js +334 -0
  376. package/dist/lib/colors.d.ts +94 -0
  377. package/dist/lib/colors.js +68 -0
  378. package/dist/lib/commands/docker-command.d.ts +21 -0
  379. package/dist/lib/commands/docker-command.js +27 -0
  380. package/dist/lib/database/index.d.ts +176 -0
  381. package/dist/lib/database/index.js +581 -0
  382. package/dist/lib/docker/resolve.d.ts +38 -0
  383. package/dist/lib/docker/resolve.js +175 -0
  384. package/dist/lib/execution/config.d.ts +150 -0
  385. package/dist/lib/execution/config.js +541 -0
  386. package/dist/lib/execution/devcontainer.d.ts +85 -0
  387. package/dist/lib/execution/devcontainer.js +594 -0
  388. package/dist/lib/execution/index.d.ts +10 -0
  389. package/dist/lib/execution/index.js +10 -0
  390. package/dist/lib/execution/runners.d.ts +53 -0
  391. package/dist/lib/execution/runners.js +1182 -0
  392. package/dist/lib/execution/spawner.d.ts +85 -0
  393. package/dist/lib/execution/spawner.js +548 -0
  394. package/dist/lib/execution/storage.d.ts +159 -0
  395. package/dist/lib/execution/storage.js +425 -0
  396. package/dist/lib/execution/types.d.ts +145 -0
  397. package/dist/lib/execution/types.js +157 -0
  398. package/dist/lib/init/index.d.ts +75 -0
  399. package/dist/lib/init/index.js +355 -0
  400. package/dist/lib/machine-config.d.ts +170 -0
  401. package/dist/lib/machine-config.js +386 -0
  402. package/dist/lib/pmo/base-command.d.ts +195 -0
  403. package/dist/lib/pmo/base-command.js +319 -0
  404. package/dist/lib/pmo/create-spec-folders.d.ts +43 -0
  405. package/dist/lib/pmo/create-spec-folders.js +64 -0
  406. package/dist/lib/pmo/epic-files.d.ts +56 -0
  407. package/dist/lib/pmo/epic-files.js +195 -0
  408. package/dist/lib/pmo/find-pmo.d.ts +14 -0
  409. package/dist/lib/pmo/find-pmo.js +172 -0
  410. package/dist/lib/pmo/index.d.ts +109 -0
  411. package/dist/lib/pmo/index.js +501 -0
  412. package/dist/lib/pmo/markdown.d.ts +31 -0
  413. package/dist/lib/pmo/markdown.js +245 -0
  414. package/dist/lib/pmo/pmo-context.d.ts +27 -0
  415. package/dist/lib/pmo/pmo-context.js +44 -0
  416. package/dist/lib/pmo/schema.d.ts +82 -0
  417. package/dist/lib/pmo/schema.js +531 -0
  418. package/dist/lib/pmo/spec-parser.d.ts +25 -0
  419. package/dist/lib/pmo/spec-parser.js +205 -0
  420. package/dist/lib/pmo/spec-types.d.ts +43 -0
  421. package/dist/lib/pmo/spec-types.js +7 -0
  422. package/dist/lib/pmo/storage/actions.d.ts +34 -0
  423. package/dist/lib/pmo/storage/actions.js +177 -0
  424. package/dist/lib/pmo/storage/base.d.ts +47 -0
  425. package/dist/lib/pmo/storage/base.js +858 -0
  426. package/dist/lib/pmo/storage/dependencies.d.ts +61 -0
  427. package/dist/lib/pmo/storage/dependencies.js +267 -0
  428. package/dist/lib/pmo/storage/epics.d.ts +46 -0
  429. package/dist/lib/pmo/storage/epics.js +243 -0
  430. package/dist/lib/pmo/storage/helpers.d.ts +33 -0
  431. package/dist/lib/pmo/storage/helpers.js +148 -0
  432. package/dist/lib/pmo/storage/index.d.ts +186 -0
  433. package/dist/lib/pmo/storage/index.js +689 -0
  434. package/dist/lib/pmo/storage/phases.d.ts +65 -0
  435. package/dist/lib/pmo/storage/phases.js +392 -0
  436. package/dist/lib/pmo/storage/projects.d.ts +79 -0
  437. package/dist/lib/pmo/storage/projects.js +303 -0
  438. package/dist/lib/pmo/storage/specs.d.ts +77 -0
  439. package/dist/lib/pmo/storage/specs.js +389 -0
  440. package/dist/lib/pmo/storage/statuses.d.ts +63 -0
  441. package/dist/lib/pmo/storage/statuses.js +404 -0
  442. package/dist/lib/pmo/storage/subtasks.d.ts +37 -0
  443. package/dist/lib/pmo/storage/subtasks.js +184 -0
  444. package/dist/lib/pmo/storage/templates.d.ts +40 -0
  445. package/dist/lib/pmo/storage/templates.js +210 -0
  446. package/dist/lib/pmo/storage/tickets.d.ts +57 -0
  447. package/dist/lib/pmo/storage/tickets.js +453 -0
  448. package/dist/lib/pmo/storage/types.d.ts +200 -0
  449. package/dist/lib/pmo/storage/types.js +5 -0
  450. package/dist/lib/pmo/storage/views.d.ts +44 -0
  451. package/dist/lib/pmo/storage/views.js +355 -0
  452. package/dist/lib/pmo/storage-sqlite.d.ts +7 -0
  453. package/dist/lib/pmo/storage-sqlite.js +7 -0
  454. package/dist/lib/pmo/sync-manager.d.ts +92 -0
  455. package/dist/lib/pmo/sync-manager.js +229 -0
  456. package/dist/lib/pmo/types.d.ts +710 -0
  457. package/dist/lib/pmo/types.js +108 -0
  458. package/dist/lib/pmo/utils.d.ts +122 -0
  459. package/dist/lib/pmo/utils.js +174 -0
  460. package/dist/lib/pmo/watcher.d.ts +43 -0
  461. package/dist/lib/pmo/watcher.js +208 -0
  462. package/dist/lib/pr/index.d.ts +150 -0
  463. package/dist/lib/pr/index.js +483 -0
  464. package/dist/lib/prompt-json.d.ts +231 -0
  465. package/dist/lib/prompt-json.js +213 -0
  466. package/dist/lib/repos/index.d.ts +81 -0
  467. package/dist/lib/repos/index.js +679 -0
  468. package/dist/lib/styles.d.ts +98 -0
  469. package/dist/lib/styles.js +195 -0
  470. package/dist/lib/themes.d.ts +128 -0
  471. package/dist/lib/themes.js +301 -0
  472. package/dist/lib/ui/BoardUI.d.ts +21 -0
  473. package/dist/lib/ui/BoardUI.js +85 -0
  474. package/dist/lib/ui/ClaimTicketUI.d.ts +17 -0
  475. package/dist/lib/ui/ClaimTicketUI.js +64 -0
  476. package/dist/lib/ui/CreateTicketUI.d.ts +13 -0
  477. package/dist/lib/ui/CreateTicketUI.js +101 -0
  478. package/dist/lib/workspace.d.ts +66 -0
  479. package/dist/lib/workspace.js +204 -0
  480. package/oclif.manifest.json +10593 -0
  481. package/package.json +103 -56
  482. package/LICENSE +0 -21
  483. package/dist/bin/prlt.d.ts +0 -11
  484. package/dist/bin/prlt.d.ts.map +0 -1
  485. package/dist/bin/prlt.js +0 -144
  486. package/dist/bin/prlt.js.map +0 -1
  487. package/dist/lib/config/index.d.ts +0 -14
  488. package/dist/lib/config/index.d.ts.map +0 -1
  489. package/dist/lib/config/index.js +0 -142
  490. package/dist/lib/config/index.js.map +0 -1
  491. package/dist/lib/config/upgrade.d.ts +0 -2
  492. package/dist/lib/config/upgrade.d.ts.map +0 -1
  493. package/dist/lib/config/upgrade.js +0 -248
  494. package/dist/lib/config/upgrade.js.map +0 -1
  495. package/dist/lib/themes/index.d.ts +0 -8
  496. package/dist/lib/themes/index.d.ts.map +0 -1
  497. package/dist/lib/themes/index.js +0 -80
  498. package/dist/lib/themes/index.js.map +0 -1
  499. package/dist/lib/utils/helpers.d.ts +0 -4
  500. package/dist/lib/utils/helpers.d.ts.map +0 -1
  501. package/dist/lib/utils/helpers.js +0 -39
  502. package/dist/lib/utils/helpers.js.map +0 -1
  503. package/dist/lib/utils/logger.d.ts +0 -4
  504. package/dist/lib/utils/logger.d.ts.map +0 -1
  505. package/dist/lib/utils/logger.js +0 -28
  506. package/dist/lib/utils/logger.js.map +0 -1
  507. package/dist/lib/workspace/index.d.ts +0 -13
  508. package/dist/lib/workspace/index.d.ts.map +0 -1
  509. package/dist/lib/workspace/index.js +0 -116
  510. package/dist/lib/workspace/index.js.map +0 -1
  511. package/dist/lib/worktree/index.d.ts +0 -7
  512. package/dist/lib/worktree/index.d.ts.map +0 -1
  513. package/dist/lib/worktree/index.js +0 -362
  514. package/dist/lib/worktree/index.js.map +0 -1
  515. package/dist/lib/worktree/migrate.d.ts +0 -2
  516. package/dist/lib/worktree/migrate.d.ts.map +0 -1
  517. package/dist/lib/worktree/migrate.js +0 -214
  518. package/dist/lib/worktree/migrate.js.map +0 -1
  519. package/dist/lib/worktree/repair.d.ts +0 -3
  520. package/dist/lib/worktree/repair.d.ts.map +0 -1
  521. package/dist/lib/worktree/repair.js +0 -320
  522. package/dist/lib/worktree/repair.js.map +0 -1
  523. package/dist/types/index.d.ts +0 -57
  524. package/dist/types/index.d.ts.map +0 -1
  525. package/dist/types/index.js +0 -3
  526. package/dist/types/index.js.map +0 -1
@@ -0,0 +1,531 @@
1
+ /**
2
+ * PMO Schema - Single Source of Truth
3
+ *
4
+ * All PMO table definitions live here. Both database/index.ts and
5
+ * storage-sqlite.ts import from this file to ensure schema consistency.
6
+ */
7
+ // =============================================================================
8
+ // Table Names (all PMO tables use pmo_ prefix in workspace.db)
9
+ // =============================================================================
10
+ export const PMO_TABLES = {
11
+ projects: 'pmo_projects',
12
+ initiatives: 'pmo_initiatives',
13
+ tickets: 'pmo_tickets',
14
+ board_views: 'pmo_board_views', // Saved board view configurations
15
+ subtasks: 'pmo_subtasks',
16
+ ticket_metadata: 'pmo_ticket_metadata',
17
+ ticket_dependencies: 'pmo_ticket_dependencies',
18
+ ticket_affected_paths: 'pmo_ticket_affected_paths',
19
+ ticket_acceptance_criteria: 'pmo_ticket_acceptance_criteria',
20
+ specs: 'pmo_specs',
21
+ spec_dependencies: 'pmo_spec_dependencies',
22
+ ticket_specs: 'pmo_ticket_specs',
23
+ ticket_assignments: 'pmo_ticket_assignments',
24
+ epics: 'pmo_epics',
25
+ epic_dependencies: 'pmo_epic_dependencies',
26
+ project_specs: 'pmo_project_specs', // Many-to-many: projects ↔ specs (specs are global)
27
+ cache_metadata: 'pmo_cache_metadata',
28
+ settings: 'pmo_settings',
29
+ agent_work: 'agent_work',
30
+ containers: 'containers', // Docker containers per agent
31
+ // Workflow tables (consolidated - workflows are the single source of truth for board columns)
32
+ workflows: 'pmo_workflows', // Shared workflow definitions
33
+ workflow_statuses: 'pmo_workflow_statuses', // Statuses belonging to workflows (= board columns)
34
+ // templates: 'pmo_templates', // REMOVED: workflows are now used directly
35
+ phases: 'pmo_phases', // Project lifecycle phases (workspace-scoped)
36
+ phase_templates: 'pmo_phase_templates', // Phase configuration templates
37
+ actions: 'pmo_actions', // Work actions (reusable agent prompts)
38
+ ticket_templates: 'pmo_ticket_templates', // Ticket templates for quick creation
39
+ // Legacy tables (deprecated, kept for migration)
40
+ columns: 'pmo_columns', // DEPRECATED: use workflow_statuses
41
+ board_tickets: 'pmo_board_tickets', // DEPRECATED: tickets now use status_id directly
42
+ statuses: 'pmo_statuses', // DEPRECATED: use workflow_statuses
43
+ };
44
+ // =============================================================================
45
+ // Individual Table Schemas
46
+ // =============================================================================
47
+ export const PMO_TABLE_SCHEMAS = {
48
+ projects: `
49
+ CREATE TABLE IF NOT EXISTS ${PMO_TABLES.projects} (
50
+ id TEXT PRIMARY KEY,
51
+ name TEXT NOT NULL,
52
+ template TEXT,
53
+ description TEXT,
54
+ status TEXT NOT NULL DEFAULT 'active',
55
+ phase_id TEXT,
56
+ workflow_id TEXT,
57
+ is_archived INTEGER NOT NULL DEFAULT 0,
58
+ target_date TIMESTAMP,
59
+ initiative_id TEXT,
60
+ created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
61
+ updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
62
+ FOREIGN KEY (phase_id) REFERENCES ${PMO_TABLES.phases}(id) ON DELETE SET NULL,
63
+ FOREIGN KEY (workflow_id) REFERENCES ${PMO_TABLES.workflows}(id) ON DELETE SET NULL
64
+ )`,
65
+ initiatives: `
66
+ CREATE TABLE IF NOT EXISTS ${PMO_TABLES.initiatives} (
67
+ id TEXT PRIMARY KEY,
68
+ name TEXT NOT NULL,
69
+ objective TEXT,
70
+ key_results TEXT,
71
+ created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
72
+ updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
73
+ )`,
74
+ // Shared workflow definitions - projects reference these via workflow_id
75
+ workflows: `
76
+ CREATE TABLE IF NOT EXISTS ${PMO_TABLES.workflows} (
77
+ id TEXT PRIMARY KEY,
78
+ name TEXT NOT NULL UNIQUE,
79
+ description TEXT,
80
+ is_builtin INTEGER NOT NULL DEFAULT 0,
81
+ created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
82
+ updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
83
+ )`,
84
+ // Statuses belonging to workflows - these ARE the board columns
85
+ // Each status has a category (backlog, unstarted, started, completed, canceled)
86
+ workflow_statuses: `
87
+ CREATE TABLE IF NOT EXISTS ${PMO_TABLES.workflow_statuses} (
88
+ id TEXT PRIMARY KEY,
89
+ workflow_id TEXT NOT NULL,
90
+ name TEXT NOT NULL,
91
+ category TEXT NOT NULL,
92
+ position INTEGER NOT NULL DEFAULT 0,
93
+ color TEXT,
94
+ description TEXT,
95
+ is_default INTEGER NOT NULL DEFAULT 0,
96
+ created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
97
+ FOREIGN KEY (workflow_id) REFERENCES ${PMO_TABLES.workflows}(id) ON DELETE CASCADE,
98
+ UNIQUE(workflow_id, name)
99
+ )`,
100
+ // DEPRECATED: Legacy columns table - use workflow_statuses instead
101
+ columns: `
102
+ CREATE TABLE IF NOT EXISTS ${PMO_TABLES.columns} (
103
+ id TEXT NOT NULL,
104
+ project_id TEXT NOT NULL DEFAULT 'default',
105
+ name TEXT NOT NULL,
106
+ position INTEGER NOT NULL,
107
+ created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
108
+ PRIMARY KEY (project_id, id)
109
+ )`,
110
+ tickets: `
111
+ CREATE TABLE IF NOT EXISTS ${PMO_TABLES.tickets} (
112
+ id TEXT PRIMARY KEY,
113
+ project_id TEXT NOT NULL DEFAULT 'default',
114
+ title TEXT NOT NULL,
115
+ description TEXT,
116
+ priority TEXT,
117
+ category TEXT,
118
+ status TEXT NOT NULL DEFAULT 'backlog',
119
+ status_id TEXT,
120
+ owner TEXT,
121
+ assignee TEXT,
122
+ branch TEXT,
123
+ spec_id TEXT,
124
+ epic_id TEXT,
125
+ labels TEXT NOT NULL DEFAULT '[]',
126
+ created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
127
+ updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
128
+ last_synced_from_spec TIMESTAMP,
129
+ last_synced_from_board TIMESTAMP,
130
+ FOREIGN KEY (project_id) REFERENCES ${PMO_TABLES.projects}(id) ON DELETE CASCADE,
131
+ FOREIGN KEY (spec_id) REFERENCES ${PMO_TABLES.specs}(id) ON DELETE SET NULL,
132
+ FOREIGN KEY (epic_id) REFERENCES ${PMO_TABLES.epics}(id) ON DELETE SET NULL,
133
+ FOREIGN KEY (status_id) REFERENCES ${PMO_TABLES.workflow_statuses}(id) ON DELETE SET NULL
134
+ )`,
135
+ // DEPRECATED: Legacy board_tickets table - tickets now use status_id directly
136
+ board_tickets: `
137
+ CREATE TABLE IF NOT EXISTS ${PMO_TABLES.board_tickets} (
138
+ project_id TEXT NOT NULL,
139
+ ticket_id TEXT NOT NULL,
140
+ column_id TEXT NOT NULL,
141
+ position INTEGER NOT NULL,
142
+ PRIMARY KEY (project_id, ticket_id),
143
+ FOREIGN KEY (project_id) REFERENCES ${PMO_TABLES.projects}(id) ON DELETE CASCADE,
144
+ FOREIGN KEY (ticket_id) REFERENCES ${PMO_TABLES.tickets}(id) ON DELETE CASCADE,
145
+ FOREIGN KEY (project_id, column_id) REFERENCES ${PMO_TABLES.columns}(project_id, id) ON DELETE CASCADE
146
+ )`,
147
+ // Board views - saved filter/display configurations for projects
148
+ board_views: `
149
+ CREATE TABLE IF NOT EXISTS ${PMO_TABLES.board_views} (
150
+ id TEXT PRIMARY KEY,
151
+ project_id TEXT NOT NULL,
152
+ name TEXT NOT NULL,
153
+ description TEXT,
154
+ is_default INTEGER NOT NULL DEFAULT 0,
155
+ filters TEXT NOT NULL DEFAULT '{}',
156
+ group_by TEXT,
157
+ sort_by TEXT,
158
+ created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
159
+ updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
160
+ FOREIGN KEY (project_id) REFERENCES ${PMO_TABLES.projects}(id) ON DELETE CASCADE,
161
+ UNIQUE(project_id, name)
162
+ )`,
163
+ subtasks: `
164
+ CREATE TABLE IF NOT EXISTS ${PMO_TABLES.subtasks} (
165
+ id TEXT NOT NULL,
166
+ ticket_id TEXT NOT NULL REFERENCES ${PMO_TABLES.tickets}(id) ON DELETE CASCADE,
167
+ title TEXT NOT NULL,
168
+ done INTEGER DEFAULT 0,
169
+ position INTEGER NOT NULL,
170
+ PRIMARY KEY (ticket_id, id)
171
+ )`,
172
+ ticket_metadata: `
173
+ CREATE TABLE IF NOT EXISTS ${PMO_TABLES.ticket_metadata} (
174
+ ticket_id TEXT NOT NULL REFERENCES ${PMO_TABLES.tickets}(id) ON DELETE CASCADE,
175
+ key TEXT NOT NULL,
176
+ value TEXT,
177
+ PRIMARY KEY (ticket_id, key)
178
+ )`,
179
+ // Ticket-to-ticket dependencies (blocks, relates_to, duplicates)
180
+ ticket_dependencies: `
181
+ CREATE TABLE IF NOT EXISTS ${PMO_TABLES.ticket_dependencies} (
182
+ ticket_id TEXT NOT NULL REFERENCES ${PMO_TABLES.tickets}(id) ON DELETE RESTRICT,
183
+ depends_on_ticket_id TEXT NOT NULL REFERENCES ${PMO_TABLES.tickets}(id) ON DELETE RESTRICT,
184
+ dependency_type TEXT NOT NULL DEFAULT 'blocks' CHECK (dependency_type IN ('blocks', 'relates_to', 'duplicates')),
185
+ created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
186
+ PRIMARY KEY (ticket_id, depends_on_ticket_id, dependency_type),
187
+ CHECK (ticket_id != depends_on_ticket_id)
188
+ )`,
189
+ // Agent execution support: file/path scope hints
190
+ ticket_affected_paths: `
191
+ CREATE TABLE IF NOT EXISTS ${PMO_TABLES.ticket_affected_paths} (
192
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
193
+ ticket_id TEXT NOT NULL REFERENCES ${PMO_TABLES.tickets}(id) ON DELETE CASCADE,
194
+ path_pattern TEXT NOT NULL,
195
+ path_type TEXT NOT NULL DEFAULT 'file',
196
+ created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
197
+ )`,
198
+ // Agent execution support: structured acceptance criteria
199
+ ticket_acceptance_criteria: `
200
+ CREATE TABLE IF NOT EXISTS ${PMO_TABLES.ticket_acceptance_criteria} (
201
+ id TEXT NOT NULL,
202
+ ticket_id TEXT NOT NULL REFERENCES ${PMO_TABLES.tickets}(id) ON DELETE CASCADE,
203
+ criterion TEXT NOT NULL,
204
+ verifiable INTEGER DEFAULT 1,
205
+ verified INTEGER DEFAULT 0,
206
+ verified_at TIMESTAMP,
207
+ verified_by TEXT,
208
+ position INTEGER NOT NULL DEFAULT 0,
209
+ PRIMARY KEY (ticket_id, id)
210
+ )`,
211
+ specs: `
212
+ CREATE TABLE IF NOT EXISTS ${PMO_TABLES.specs} (
213
+ id TEXT PRIMARY KEY,
214
+ title TEXT NOT NULL,
215
+ status TEXT DEFAULT 'draft',
216
+ type TEXT,
217
+ tags TEXT,
218
+ depends_on TEXT,
219
+ problem TEXT,
220
+ solution TEXT,
221
+ decisions TEXT,
222
+ not_now TEXT,
223
+ ui_ux TEXT,
224
+ acceptance_criteria TEXT,
225
+ open_questions TEXT,
226
+ requirements_functional TEXT,
227
+ requirements_technical TEXT,
228
+ context TEXT,
229
+ created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
230
+ updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
231
+ )`,
232
+ // Spec-to-spec dependencies (depends_on, relates_to, duplicates)
233
+ spec_dependencies: `
234
+ CREATE TABLE IF NOT EXISTS ${PMO_TABLES.spec_dependencies} (
235
+ spec_id TEXT NOT NULL REFERENCES ${PMO_TABLES.specs}(id) ON DELETE RESTRICT,
236
+ depends_on_spec_id TEXT NOT NULL REFERENCES ${PMO_TABLES.specs}(id) ON DELETE RESTRICT,
237
+ dependency_type TEXT NOT NULL DEFAULT 'depends_on' CHECK (dependency_type IN ('depends_on', 'relates_to', 'duplicates')),
238
+ created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
239
+ PRIMARY KEY (spec_id, depends_on_spec_id, dependency_type),
240
+ CHECK (spec_id != depends_on_spec_id)
241
+ )`,
242
+ ticket_specs: `
243
+ CREATE TABLE IF NOT EXISTS ${PMO_TABLES.ticket_specs} (
244
+ ticket_id TEXT NOT NULL REFERENCES ${PMO_TABLES.tickets}(id) ON DELETE CASCADE,
245
+ spec_id TEXT NOT NULL REFERENCES ${PMO_TABLES.specs}(id) ON DELETE CASCADE,
246
+ PRIMARY KEY (ticket_id, spec_id)
247
+ )`,
248
+ ticket_assignments: `
249
+ CREATE TABLE IF NOT EXISTS ${PMO_TABLES.ticket_assignments} (
250
+ ticket_id TEXT NOT NULL REFERENCES ${PMO_TABLES.tickets}(id) ON DELETE CASCADE,
251
+ agent_name TEXT NOT NULL,
252
+ assigned_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
253
+ PRIMARY KEY (ticket_id, agent_name)
254
+ )`,
255
+ epics: `
256
+ CREATE TABLE IF NOT EXISTS ${PMO_TABLES.epics} (
257
+ id TEXT PRIMARY KEY,
258
+ project_id TEXT NOT NULL,
259
+ title TEXT NOT NULL,
260
+ description TEXT,
261
+ status TEXT NOT NULL DEFAULT 'active',
262
+ position INTEGER NOT NULL DEFAULT 0,
263
+ file_path TEXT,
264
+ spec_id TEXT,
265
+ created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
266
+ updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
267
+ FOREIGN KEY (project_id) REFERENCES ${PMO_TABLES.projects}(id) ON DELETE CASCADE,
268
+ FOREIGN KEY (spec_id) REFERENCES ${PMO_TABLES.specs}(id) ON DELETE SET NULL
269
+ )`,
270
+ // Epic-to-epic dependencies (blocks, relates_to, duplicates)
271
+ epic_dependencies: `
272
+ CREATE TABLE IF NOT EXISTS ${PMO_TABLES.epic_dependencies} (
273
+ epic_id TEXT NOT NULL REFERENCES ${PMO_TABLES.epics}(id) ON DELETE RESTRICT,
274
+ depends_on_epic_id TEXT NOT NULL REFERENCES ${PMO_TABLES.epics}(id) ON DELETE RESTRICT,
275
+ dependency_type TEXT NOT NULL DEFAULT 'blocks' CHECK (dependency_type IN ('blocks', 'relates_to', 'duplicates')),
276
+ created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
277
+ PRIMARY KEY (epic_id, depends_on_epic_id, dependency_type),
278
+ CHECK (epic_id != depends_on_epic_id)
279
+ )`,
280
+ // Project-to-spec associations (many-to-many, specs are global living documents)
281
+ project_specs: `
282
+ CREATE TABLE IF NOT EXISTS ${PMO_TABLES.project_specs} (
283
+ project_id TEXT NOT NULL REFERENCES ${PMO_TABLES.projects}(id) ON DELETE CASCADE,
284
+ spec_id TEXT NOT NULL REFERENCES ${PMO_TABLES.specs}(id) ON DELETE CASCADE,
285
+ created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
286
+ PRIMARY KEY (project_id, spec_id)
287
+ )`,
288
+ cache_metadata: `
289
+ CREATE TABLE IF NOT EXISTS ${PMO_TABLES.cache_metadata} (
290
+ key TEXT PRIMARY KEY,
291
+ value TEXT NOT NULL
292
+ )`,
293
+ settings: `
294
+ CREATE TABLE IF NOT EXISTS ${PMO_TABLES.settings} (
295
+ key TEXT PRIMARY KEY,
296
+ value TEXT NOT NULL
297
+ )`,
298
+ agent_work: `
299
+ CREATE TABLE IF NOT EXISTS ${PMO_TABLES.agent_work} (
300
+ id TEXT PRIMARY KEY,
301
+ ticket_id TEXT NOT NULL,
302
+ agent_name TEXT NOT NULL,
303
+ executor TEXT NOT NULL,
304
+ environment TEXT NOT NULL DEFAULT 'host',
305
+ display_mode TEXT NOT NULL DEFAULT 'terminal',
306
+ sandboxed INTEGER NOT NULL DEFAULT 0,
307
+ status TEXT NOT NULL DEFAULT 'starting',
308
+ branch TEXT,
309
+ pid TEXT,
310
+ container_id TEXT,
311
+ session_id TEXT,
312
+ host TEXT,
313
+ log_path TEXT,
314
+ started_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
315
+ completed_at TIMESTAMP,
316
+ exit_code INTEGER,
317
+ FOREIGN KEY (ticket_id) REFERENCES ${PMO_TABLES.tickets}(id) ON DELETE CASCADE
318
+ )`,
319
+ // Docker containers (per-agent, reused across executions)
320
+ containers: `
321
+ CREATE TABLE IF NOT EXISTS ${PMO_TABLES.containers} (
322
+ id TEXT PRIMARY KEY,
323
+ agent_name TEXT NOT NULL,
324
+ docker_id TEXT NOT NULL,
325
+ docker_name TEXT,
326
+ image TEXT,
327
+ status TEXT NOT NULL DEFAULT 'unknown',
328
+ current_execution_id TEXT,
329
+ created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
330
+ last_seen_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
331
+ FOREIGN KEY (agent_name) REFERENCES agents(name) ON DELETE CASCADE,
332
+ FOREIGN KEY (current_execution_id) REFERENCES ${PMO_TABLES.agent_work}(id) ON DELETE SET NULL
333
+ )`,
334
+ // DEPRECATED: Legacy per-project statuses - use workflow_statuses instead
335
+ // Kept for migration from old schema
336
+ statuses: `
337
+ CREATE TABLE IF NOT EXISTS ${PMO_TABLES.statuses} (
338
+ id TEXT PRIMARY KEY,
339
+ project_id TEXT NOT NULL,
340
+ name TEXT NOT NULL,
341
+ category TEXT NOT NULL,
342
+ position INTEGER NOT NULL DEFAULT 0,
343
+ color TEXT,
344
+ description TEXT,
345
+ is_default INTEGER NOT NULL DEFAULT 0,
346
+ created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
347
+ FOREIGN KEY (project_id) REFERENCES ${PMO_TABLES.projects}(id) ON DELETE CASCADE,
348
+ UNIQUE(project_id, name)
349
+ )`,
350
+ // REMOVED: pmo_templates - workflows are now used directly (no separate template concept)
351
+ // Project lifecycle phases (workspace-scoped, not per-project)
352
+ phases: `
353
+ CREATE TABLE IF NOT EXISTS ${PMO_TABLES.phases} (
354
+ id TEXT PRIMARY KEY,
355
+ name TEXT NOT NULL UNIQUE,
356
+ category TEXT NOT NULL,
357
+ position INTEGER NOT NULL DEFAULT 0,
358
+ color TEXT,
359
+ description TEXT,
360
+ is_default INTEGER NOT NULL DEFAULT 0,
361
+ created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
362
+ )`,
363
+ // Phase templates (preset phase configurations)
364
+ phase_templates: `
365
+ CREATE TABLE IF NOT EXISTS ${PMO_TABLES.phase_templates} (
366
+ id TEXT PRIMARY KEY,
367
+ name TEXT NOT NULL UNIQUE,
368
+ description TEXT,
369
+ is_builtin INTEGER NOT NULL DEFAULT 0,
370
+ phases TEXT NOT NULL,
371
+ created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
372
+ )`,
373
+ actions: `
374
+ CREATE TABLE IF NOT EXISTS ${PMO_TABLES.actions} (
375
+ id TEXT PRIMARY KEY,
376
+ name TEXT NOT NULL UNIQUE,
377
+ description TEXT,
378
+ prompt TEXT NOT NULL,
379
+ end_prompt TEXT,
380
+ suggested_for_categories TEXT,
381
+ default_move_to_category TEXT,
382
+ modifies_code INTEGER NOT NULL DEFAULT 1,
383
+ is_builtin INTEGER NOT NULL DEFAULT 0,
384
+ position INTEGER NOT NULL DEFAULT 0,
385
+ created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
386
+ )`,
387
+ // Ticket templates for quick ticket creation
388
+ ticket_templates: `
389
+ CREATE TABLE IF NOT EXISTS ${PMO_TABLES.ticket_templates} (
390
+ id TEXT PRIMARY KEY,
391
+ name TEXT NOT NULL UNIQUE,
392
+ description TEXT,
393
+ is_builtin INTEGER NOT NULL DEFAULT 0,
394
+ title_pattern TEXT,
395
+ description_template TEXT,
396
+ default_priority TEXT,
397
+ default_category TEXT,
398
+ default_status_id TEXT,
399
+ default_assignee TEXT,
400
+ default_owner TEXT,
401
+ default_labels TEXT NOT NULL DEFAULT '[]',
402
+ suggested_subtasks TEXT NOT NULL DEFAULT '[]',
403
+ created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
404
+ )`,
405
+ };
406
+ // =============================================================================
407
+ // Indexes
408
+ // =============================================================================
409
+ export const PMO_INDEXES = `
410
+ CREATE INDEX IF NOT EXISTS idx_pmo_tickets_project ON ${PMO_TABLES.tickets}(project_id);
411
+ CREATE INDEX IF NOT EXISTS idx_pmo_tickets_status ON ${PMO_TABLES.tickets}(status);
412
+ CREATE INDEX IF NOT EXISTS idx_pmo_tickets_owner ON ${PMO_TABLES.tickets}(owner);
413
+ CREATE INDEX IF NOT EXISTS idx_pmo_tickets_assignee ON ${PMO_TABLES.tickets}(assignee);
414
+ CREATE INDEX IF NOT EXISTS idx_pmo_tickets_spec ON ${PMO_TABLES.tickets}(spec_id);
415
+ CREATE INDEX IF NOT EXISTS idx_pmo_tickets_epic ON ${PMO_TABLES.tickets}(epic_id);
416
+ CREATE INDEX IF NOT EXISTS idx_pmo_tickets_priority ON ${PMO_TABLES.tickets}(priority);
417
+ CREATE INDEX IF NOT EXISTS idx_pmo_tickets_category ON ${PMO_TABLES.tickets}(category);
418
+ CREATE INDEX IF NOT EXISTS idx_pmo_tickets_status_id ON ${PMO_TABLES.tickets}(status_id);
419
+ CREATE INDEX IF NOT EXISTS idx_pmo_subtasks_ticket ON ${PMO_TABLES.subtasks}(ticket_id);
420
+ CREATE INDEX IF NOT EXISTS idx_pmo_ticket_specs_spec ON ${PMO_TABLES.ticket_specs}(spec_id);
421
+ CREATE INDEX IF NOT EXISTS idx_pmo_assignments_agent ON ${PMO_TABLES.ticket_assignments}(agent_name);
422
+ CREATE INDEX IF NOT EXISTS idx_pmo_epics_project ON ${PMO_TABLES.epics}(project_id);
423
+ CREATE INDEX IF NOT EXISTS idx_pmo_epics_spec ON ${PMO_TABLES.epics}(spec_id);
424
+ CREATE INDEX IF NOT EXISTS idx_pmo_epics_position ON ${PMO_TABLES.epics}(project_id, position);
425
+ CREATE INDEX IF NOT EXISTS idx_pmo_projects_initiative ON ${PMO_TABLES.projects}(initiative_id);
426
+ CREATE INDEX IF NOT EXISTS idx_pmo_projects_status ON ${PMO_TABLES.projects}(status);
427
+ CREATE INDEX IF NOT EXISTS idx_pmo_projects_phase ON ${PMO_TABLES.projects}(phase_id);
428
+ CREATE INDEX IF NOT EXISTS idx_pmo_projects_workflow ON ${PMO_TABLES.projects}(workflow_id);
429
+ CREATE INDEX IF NOT EXISTS idx_pmo_projects_archived ON ${PMO_TABLES.projects}(is_archived);
430
+ CREATE INDEX IF NOT EXISTS idx_agent_work_agent ON ${PMO_TABLES.agent_work}(agent_name);
431
+ CREATE INDEX IF NOT EXISTS idx_agent_work_status ON ${PMO_TABLES.agent_work}(status);
432
+ CREATE INDEX IF NOT EXISTS idx_agent_work_ticket ON ${PMO_TABLES.agent_work}(ticket_id);
433
+ CREATE INDEX IF NOT EXISTS idx_containers_agent ON ${PMO_TABLES.containers}(agent_name);
434
+ CREATE INDEX IF NOT EXISTS idx_containers_docker_id ON ${PMO_TABLES.containers}(docker_id);
435
+ CREATE INDEX IF NOT EXISTS idx_containers_status ON ${PMO_TABLES.containers}(status);
436
+ CREATE INDEX IF NOT EXISTS idx_pmo_specs_status ON ${PMO_TABLES.specs}(status);
437
+ CREATE INDEX IF NOT EXISTS idx_pmo_specs_type ON ${PMO_TABLES.specs}(type);
438
+ CREATE INDEX IF NOT EXISTS idx_pmo_spec_deps_depends_on ON ${PMO_TABLES.spec_dependencies}(depends_on_spec_id);
439
+ CREATE INDEX IF NOT EXISTS idx_pmo_ticket_deps_depends_on ON ${PMO_TABLES.ticket_dependencies}(depends_on_ticket_id);
440
+ CREATE INDEX IF NOT EXISTS idx_pmo_epic_deps_depends_on ON ${PMO_TABLES.epic_dependencies}(depends_on_epic_id);
441
+ CREATE INDEX IF NOT EXISTS idx_pmo_project_specs_spec ON ${PMO_TABLES.project_specs}(spec_id);
442
+ CREATE INDEX IF NOT EXISTS idx_pmo_project_specs_project ON ${PMO_TABLES.project_specs}(project_id);
443
+ CREATE INDEX IF NOT EXISTS idx_pmo_ticket_paths_ticket ON ${PMO_TABLES.ticket_affected_paths}(ticket_id);
444
+ CREATE INDEX IF NOT EXISTS idx_pmo_ticket_criteria_ticket ON ${PMO_TABLES.ticket_acceptance_criteria}(ticket_id);
445
+ CREATE INDEX IF NOT EXISTS idx_pmo_phases_category ON ${PMO_TABLES.phases}(category);
446
+ CREATE INDEX IF NOT EXISTS idx_pmo_phases_position ON ${PMO_TABLES.phases}(category, position);
447
+ CREATE INDEX IF NOT EXISTS idx_pmo_board_views_project ON ${PMO_TABLES.board_views}(project_id);
448
+ CREATE INDEX IF NOT EXISTS idx_pmo_board_views_default ON ${PMO_TABLES.board_views}(project_id, is_default);
449
+ CREATE INDEX IF NOT EXISTS idx_pmo_ticket_templates_builtin ON ${PMO_TABLES.ticket_templates}(is_builtin);
450
+ CREATE INDEX IF NOT EXISTS idx_pmo_workflow_statuses_workflow ON ${PMO_TABLES.workflow_statuses}(workflow_id);
451
+ CREATE INDEX IF NOT EXISTS idx_pmo_workflow_statuses_category ON ${PMO_TABLES.workflow_statuses}(workflow_id, category);
452
+ CREATE INDEX IF NOT EXISTS idx_pmo_workflow_statuses_position ON ${PMO_TABLES.workflow_statuses}(workflow_id, position);
453
+ CREATE INDEX IF NOT EXISTS idx_pmo_workflows_builtin ON ${PMO_TABLES.workflows}(is_builtin);
454
+ `;
455
+ // =============================================================================
456
+ // Combined Schema
457
+ // =============================================================================
458
+ /**
459
+ * All PMO table creation statements combined.
460
+ * Order matters due to foreign key dependencies.
461
+ */
462
+ export const PMO_SCHEMA_SQL = [
463
+ PMO_TABLE_SCHEMAS.phases, // Project phases (before projects for FK)
464
+ PMO_TABLE_SCHEMAS.phase_templates, // Phase templates (for preset phase configurations)
465
+ PMO_TABLE_SCHEMAS.workflows, // Shared workflows (before projects for FK)
466
+ PMO_TABLE_SCHEMAS.workflow_statuses, // Workflow statuses (= board columns)
467
+ PMO_TABLE_SCHEMAS.projects,
468
+ PMO_TABLE_SCHEMAS.initiatives,
469
+ // PMO_TABLE_SCHEMAS.templates, // REMOVED: workflows are now used directly
470
+ PMO_TABLE_SCHEMAS.specs, // Must be before tickets (FK reference)
471
+ PMO_TABLE_SCHEMAS.spec_dependencies, // Spec-to-spec dependencies
472
+ PMO_TABLE_SCHEMAS.epics, // Must be before tickets (FK reference)
473
+ PMO_TABLE_SCHEMAS.epic_dependencies, // Epic-to-epic dependencies
474
+ PMO_TABLE_SCHEMAS.project_specs, // Many-to-many project ↔ spec associations
475
+ PMO_TABLE_SCHEMAS.tickets,
476
+ PMO_TABLE_SCHEMAS.board_views, // Saved board view configurations
477
+ PMO_TABLE_SCHEMAS.subtasks,
478
+ PMO_TABLE_SCHEMAS.ticket_metadata,
479
+ PMO_TABLE_SCHEMAS.ticket_dependencies, // Ticket-to-ticket dependencies
480
+ PMO_TABLE_SCHEMAS.ticket_affected_paths, // Agent execution: scope hints
481
+ PMO_TABLE_SCHEMAS.ticket_acceptance_criteria, // Agent execution: structured criteria
482
+ PMO_TABLE_SCHEMAS.ticket_specs,
483
+ PMO_TABLE_SCHEMAS.ticket_assignments,
484
+ PMO_TABLE_SCHEMAS.cache_metadata,
485
+ PMO_TABLE_SCHEMAS.settings,
486
+ PMO_TABLE_SCHEMAS.agent_work, // Execution tracking
487
+ PMO_TABLE_SCHEMAS.containers, // Docker containers per agent
488
+ PMO_TABLE_SCHEMAS.actions, // Work actions (reusable agent prompts)
489
+ PMO_TABLE_SCHEMAS.ticket_templates, // Ticket templates for quick creation
490
+ // Legacy tables (kept for migration, will be dropped after data migrated)
491
+ PMO_TABLE_SCHEMAS.columns, // DEPRECATED
492
+ PMO_TABLE_SCHEMAS.board_tickets, // DEPRECATED
493
+ PMO_TABLE_SCHEMAS.statuses, // DEPRECATED
494
+ PMO_INDEXES,
495
+ ].join(';\n');
496
+ // =============================================================================
497
+ // Expected Columns (for validation)
498
+ // =============================================================================
499
+ export const EXPECTED_TICKET_COLUMNS = [
500
+ 'id',
501
+ 'project_id',
502
+ 'title',
503
+ 'description',
504
+ 'priority',
505
+ 'category',
506
+ 'status',
507
+ 'status_id',
508
+ 'owner',
509
+ 'assignee',
510
+ 'branch',
511
+ 'spec_id',
512
+ 'epic_id',
513
+ 'labels',
514
+ 'created_at',
515
+ 'updated_at',
516
+ 'last_synced_from_spec',
517
+ 'last_synced_from_board',
518
+ ];
519
+ /**
520
+ * Validate that pmo_tickets table has all expected columns.
521
+ * Throws if columns are missing (indicates schema mismatch).
522
+ */
523
+ export function validateTicketSchema(db) {
524
+ const columns = db.pragma(`table_info(${PMO_TABLES.tickets})`);
525
+ const actualColumns = new Set(columns.map((c) => c.name));
526
+ const missing = EXPECTED_TICKET_COLUMNS.filter((c) => !actualColumns.has(c));
527
+ if (missing.length > 0) {
528
+ throw new Error(`Schema mismatch: pmo_tickets is missing columns: ${missing.join(', ')}. ` +
529
+ `Database may need migration or recreation.`);
530
+ }
531
+ }
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Spec Parser
3
+ *
4
+ * Parses markdown spec files into structured data.
5
+ * Uses the new simplified spec format with frontmatter.
6
+ */
7
+ import { ParsedSpec } from './spec-types.js';
8
+ /**
9
+ * Parse a spec markdown file into structured data
10
+ */
11
+ export declare function parseSpecFile(filePath: string): ParsedSpec;
12
+ /**
13
+ * Parse spec content string into structured data
14
+ */
15
+ export declare function parseSpecContent(content: string, filePath?: string): ParsedSpec;
16
+ /**
17
+ * Validate a parsed spec for completeness
18
+ */
19
+ export declare function validateSpec(spec: ParsedSpec): string[];
20
+ /**
21
+ * Convert a parsed spec back to markdown format
22
+ */
23
+ export declare function specToMarkdown(spec: ParsedSpec, options?: {
24
+ includeFrontmatter?: boolean;
25
+ }): string;