@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,245 @@
1
+ /**
2
+ * PMO Markdown Parser and Generator
3
+ *
4
+ * Handles conversion between Obsidian Kanban markdown format and Board objects.
5
+ */
6
+ import { slugify } from './utils.js';
7
+ // =============================================================================
8
+ // Parser
9
+ // =============================================================================
10
+ /**
11
+ * Parse an Obsidian Kanban markdown board into a Board object
12
+ * @param markdown The markdown content
13
+ * @param projectId The project ID to use (defaults to 'default')
14
+ */
15
+ export function parseBoard(markdown, projectId = 'default') {
16
+ const lines = markdown.split('\n');
17
+ const board = {
18
+ id: projectId,
19
+ name: 'Board',
20
+ columns: [],
21
+ updatedAt: new Date(),
22
+ };
23
+ let currentColumn = null;
24
+ let currentTicket = null;
25
+ let inDescription = false;
26
+ let descriptionLines = [];
27
+ for (let i = 0; i < lines.length; i++) {
28
+ const line = lines[i];
29
+ // Board title: # Title (optional)
30
+ if (line.startsWith('# ')) {
31
+ board.name = line.slice(2).trim();
32
+ continue;
33
+ }
34
+ // Column header: ## Column Name (with optional emoji)
35
+ if (line.startsWith('## ')) {
36
+ // Save previous ticket's description
37
+ if (currentTicket && descriptionLines.length > 0) {
38
+ currentTicket.description = descriptionLines.join('\n').trim();
39
+ descriptionLines = [];
40
+ }
41
+ // Remove emoji prefix if present (e.g., "📥 Backlog" -> "Backlog")
42
+ let columnName = line.slice(3).trim();
43
+ const emojiMatch = columnName.match(/^[\p{Emoji}\s]+/u);
44
+ if (emojiMatch) {
45
+ columnName = columnName.slice(emojiMatch[0].length).trim();
46
+ }
47
+ currentColumn = {
48
+ id: slugify(columnName),
49
+ name: columnName,
50
+ position: board.columns.length,
51
+ tickets: [],
52
+ };
53
+ board.columns.push(currentColumn);
54
+ currentTicket = null;
55
+ inDescription = false;
56
+ continue;
57
+ }
58
+ // Ticket: - [ ] **ID** [[ID]] Title or - [ ] Title
59
+ // Note: ID pattern is case-insensitive to handle both TKT-054 and tkt-054
60
+ const ticketMatch = line.match(/^- \[[ x]\] (?:\*\*([a-zA-Z0-9-]+)\*\* \[\[\1\]\] )?(.+)$/i);
61
+ if (ticketMatch && currentColumn) {
62
+ // Save previous ticket's description
63
+ if (currentTicket && descriptionLines.length > 0) {
64
+ currentTicket.description = descriptionLines.join('\n').trim();
65
+ descriptionLines = [];
66
+ }
67
+ const id = ticketMatch[1] || slugify(ticketMatch[2]);
68
+ const title = ticketMatch[2];
69
+ currentTicket = {
70
+ id,
71
+ title: title.trim(),
72
+ statusId: '', // Will be resolved when syncing to DB
73
+ statusCategory: 'backlog', // Default status category when parsing from board
74
+ statusName: currentColumn.name,
75
+ position: currentColumn.tickets.length,
76
+ subtasks: [],
77
+ labels: [],
78
+ metadata: {},
79
+ createdAt: new Date(),
80
+ updatedAt: new Date(),
81
+ };
82
+ currentColumn.tickets.push(currentTicket);
83
+ inDescription = false;
84
+ continue;
85
+ }
86
+ // Metadata: **Key:** Value (indented)
87
+ const metaMatch = line.match(/^\s+\*\*(.+?):\*\*\s*(.*)$/);
88
+ if (metaMatch && currentTicket) {
89
+ const [, key, value] = metaMatch;
90
+ const trimmedValue = value.trim();
91
+ switch (key) {
92
+ case 'Priority':
93
+ currentTicket.priority = trimmedValue;
94
+ break;
95
+ case 'Category':
96
+ currentTicket.category = trimmedValue;
97
+ break;
98
+ case 'Spec': {
99
+ // Parse spec: [[spec-id]] (single spec per ticket)
100
+ const specMatch = trimmedValue.match(/\[\[([^\]|]+)(?:\|[^\]]+)?\]\]/);
101
+ if (specMatch) {
102
+ currentTicket.specId = specMatch[1];
103
+ }
104
+ break;
105
+ }
106
+ default:
107
+ currentTicket.metadata[key] = trimmedValue;
108
+ }
109
+ continue;
110
+ }
111
+ // Separator: *** (marks start of description/subtasks)
112
+ if (line.trim() === '***' && currentTicket) {
113
+ inDescription = true;
114
+ continue;
115
+ }
116
+ // Subtask: - [ ] or - [x] (indented under ticket)
117
+ const subtaskMatch = line.match(/^\s+- \[([ x])\] (.+)$/);
118
+ if (subtaskMatch && currentTicket) {
119
+ currentTicket.subtasks.push({
120
+ id: slugify(subtaskMatch[2]),
121
+ title: subtaskMatch[2].trim(),
122
+ done: subtaskMatch[1] === 'x',
123
+ });
124
+ continue;
125
+ }
126
+ // Description text (after *** separator, indented)
127
+ if (inDescription && currentTicket) {
128
+ const trimmedLine = line.replace(/^\s{6}/, ''); // Remove 6-space indent
129
+ if (trimmedLine || descriptionLines.length > 0) {
130
+ descriptionLines.push(trimmedLine);
131
+ }
132
+ }
133
+ }
134
+ // Save last ticket's description
135
+ if (currentTicket && descriptionLines.length > 0) {
136
+ currentTicket.description = descriptionLines.join('\n').trim();
137
+ }
138
+ return board;
139
+ }
140
+ // =============================================================================
141
+ // Generator
142
+ // =============================================================================
143
+ /**
144
+ * Generate Obsidian Kanban markdown from a Board object
145
+ */
146
+ export function generateBoardMarkdown(board) {
147
+ const lines = [];
148
+ // Frontmatter for Obsidian Kanban plugin
149
+ lines.push('---');
150
+ lines.push('kanban-plugin: basic');
151
+ lines.push('---');
152
+ lines.push('');
153
+ // Board title
154
+ lines.push(`# ${board.name}`);
155
+ lines.push('');
156
+ for (const column of board.columns) {
157
+ // Column header
158
+ lines.push(`## ${column.name}`);
159
+ lines.push('');
160
+ for (const ticket of column.tickets) {
161
+ // Ticket header with bold ID, wikilink, and title
162
+ lines.push(`- [ ] **${ticket.id}** [[${ticket.id}]] ${ticket.title}`);
163
+ // Metadata
164
+ if (ticket.priority) {
165
+ lines.push(` **Priority:** ${ticket.priority}`);
166
+ }
167
+ if (ticket.category) {
168
+ lines.push(` **Category:** ${ticket.category}`);
169
+ }
170
+ if (ticket.specId) {
171
+ lines.push(` **Spec:** [[${ticket.specId}]]`);
172
+ }
173
+ for (const [key, value] of Object.entries(ticket.metadata)) {
174
+ lines.push(` **${key}:** ${value}`);
175
+ }
176
+ // Separator and description/subtasks
177
+ if (ticket.description || ticket.subtasks.length > 0) {
178
+ lines.push(` ***`);
179
+ }
180
+ if (ticket.description) {
181
+ // Indent each line of description
182
+ const descLines = ticket.description.split('\n');
183
+ for (const descLine of descLines) {
184
+ lines.push(` ${descLine}`);
185
+ }
186
+ }
187
+ // Subtasks
188
+ for (const subtask of ticket.subtasks) {
189
+ const checkbox = subtask.done ? '[x]' : '[ ]';
190
+ lines.push(` - ${checkbox} ${subtask.title}`);
191
+ }
192
+ lines.push('');
193
+ }
194
+ }
195
+ return lines.join('\n');
196
+ }
197
+ // =============================================================================
198
+ // Diff/Merge Utilities
199
+ // =============================================================================
200
+ /**
201
+ * Find tickets that exist in newBoard but not in oldBoard
202
+ */
203
+ export function findAddedTickets(oldBoard, newBoard) {
204
+ const oldIds = new Set(oldBoard.columns.flatMap((c) => c.tickets.map((t) => t.id)));
205
+ return newBoard.columns.flatMap((c) => c.tickets.filter((t) => !oldIds.has(t.id)));
206
+ }
207
+ /**
208
+ * Find tickets that exist in oldBoard but not in newBoard
209
+ */
210
+ export function findRemovedTickets(oldBoard, newBoard) {
211
+ const newIds = new Set(newBoard.columns.flatMap((c) => c.tickets.map((t) => t.id)));
212
+ return oldBoard.columns.flatMap((c) => c.tickets.filter((t) => !newIds.has(t.id)));
213
+ }
214
+ /**
215
+ * Find tickets that changed between boards
216
+ */
217
+ export function findModifiedTickets(oldBoard, newBoard) {
218
+ const oldTickets = new Map();
219
+ oldBoard.columns.forEach((c) => c.tickets.forEach((t) => oldTickets.set(t.id, t)));
220
+ const modified = [];
221
+ for (const column of newBoard.columns) {
222
+ for (const ticket of column.tickets) {
223
+ const oldTicket = oldTickets.get(ticket.id);
224
+ if (oldTicket && !ticketsEqual(oldTicket, ticket)) {
225
+ modified.push({ old: oldTicket, new: ticket });
226
+ }
227
+ }
228
+ }
229
+ return modified;
230
+ }
231
+ /**
232
+ * Check if two tickets are equal (ignoring timestamps)
233
+ */
234
+ function ticketsEqual(a, b) {
235
+ return (a.id === b.id &&
236
+ a.title === b.title &&
237
+ a.statusName === b.statusName &&
238
+ a.position === b.position &&
239
+ a.priority === b.priority &&
240
+ a.category === b.category &&
241
+ a.description === b.description &&
242
+ a.specId === b.specId &&
243
+ JSON.stringify(a.subtasks) === JSON.stringify(b.subtasks) &&
244
+ JSON.stringify(a.metadata) === JSON.stringify(b.metadata));
245
+ }
@@ -0,0 +1,27 @@
1
+ import { SQLiteStorage } from './index.js';
2
+ /**
3
+ * PMO context for commands.
4
+ * Note: Storage is project-agnostic. projectId is passed explicitly to operations.
5
+ */
6
+ export interface PMOContext {
7
+ pmoPath: string;
8
+ storage: SQLiteStorage;
9
+ storageType: 'sqlite' | 'git';
10
+ }
11
+ export interface GetPMOContextOptions {
12
+ logger?: (msg: string) => void;
13
+ }
14
+ /**
15
+ * Get PMO context (path, storage) without requiring config.json
16
+ * Reads everything from workspace.db instead
17
+ *
18
+ * Note: Storage is project-agnostic. Commands pass projectId explicitly to operations.
19
+ * For project-scoped operations, commands should either:
20
+ * - Derive project from an entity (e.g., ticket.projectId)
21
+ * - Call requireProject() to prompt user for selection
22
+ *
23
+ * @param options - Configuration options
24
+ * @param options.logger - Optional logging function
25
+ * @returns PMO context with storage and metadata
26
+ */
27
+ export declare function getPMOContext(options?: GetPMOContextOptions): Promise<PMOContext>;
@@ -0,0 +1,44 @@
1
+ import * as path from 'node:path';
2
+ import * as fs from 'node:fs';
3
+ import { getStorageWithAutoSync } from './index.js';
4
+ import { findPMO } from './find-pmo.js';
5
+ import { warnIfMultipleHQs } from '../workspace.js';
6
+ // Track if we've already warned about multiple HQs this session
7
+ let hasWarnedAboutMultipleHQs = false;
8
+ /**
9
+ * Get PMO context (path, storage) without requiring config.json
10
+ * Reads everything from workspace.db instead
11
+ *
12
+ * Note: Storage is project-agnostic. Commands pass projectId explicitly to operations.
13
+ * For project-scoped operations, commands should either:
14
+ * - Derive project from an entity (e.g., ticket.projectId)
15
+ * - Call requireProject() to prompt user for selection
16
+ *
17
+ * @param options - Configuration options
18
+ * @param options.logger - Optional logging function
19
+ * @returns PMO context with storage and metadata
20
+ */
21
+ export async function getPMOContext(options) {
22
+ const logger = options?.logger;
23
+ // Find PMO
24
+ const pmoPath = findPMO();
25
+ if (!pmoPath) {
26
+ throw new Error('PMO not found. Run "prlt pmo init" first.');
27
+ }
28
+ // Warn once per session if multiple HQ workspaces detected
29
+ if (!hasWarnedAboutMultipleHQs) {
30
+ warnIfMultipleHQs();
31
+ hasWarnedAboutMultipleHQs = true;
32
+ }
33
+ // Detect sync mode: 'git' enables multi-machine sync via git push/pull of board.md
34
+ // Note: Storage is always SQLite (workspace.db). This flag controls sync strategy.
35
+ const gitPath = path.join(pmoPath, '.git');
36
+ const storageType = fs.existsSync(gitPath) ? 'git' : 'sqlite';
37
+ // Get storage - project-agnostic, projectId passed to operations explicitly
38
+ const storage = getStorageWithAutoSync(pmoPath, storageType, logger);
39
+ return {
40
+ pmoPath,
41
+ storage,
42
+ storageType,
43
+ };
44
+ }
@@ -0,0 +1,82 @@
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
+ export declare const PMO_TABLES: {
8
+ readonly projects: "pmo_projects";
9
+ readonly initiatives: "pmo_initiatives";
10
+ readonly tickets: "pmo_tickets";
11
+ readonly board_views: "pmo_board_views";
12
+ readonly subtasks: "pmo_subtasks";
13
+ readonly ticket_metadata: "pmo_ticket_metadata";
14
+ readonly ticket_dependencies: "pmo_ticket_dependencies";
15
+ readonly ticket_affected_paths: "pmo_ticket_affected_paths";
16
+ readonly ticket_acceptance_criteria: "pmo_ticket_acceptance_criteria";
17
+ readonly specs: "pmo_specs";
18
+ readonly spec_dependencies: "pmo_spec_dependencies";
19
+ readonly ticket_specs: "pmo_ticket_specs";
20
+ readonly ticket_assignments: "pmo_ticket_assignments";
21
+ readonly epics: "pmo_epics";
22
+ readonly epic_dependencies: "pmo_epic_dependencies";
23
+ readonly project_specs: "pmo_project_specs";
24
+ readonly cache_metadata: "pmo_cache_metadata";
25
+ readonly settings: "pmo_settings";
26
+ readonly agent_work: "agent_work";
27
+ readonly containers: "containers";
28
+ readonly workflows: "pmo_workflows";
29
+ readonly workflow_statuses: "pmo_workflow_statuses";
30
+ readonly phases: "pmo_phases";
31
+ readonly phase_templates: "pmo_phase_templates";
32
+ readonly actions: "pmo_actions";
33
+ readonly ticket_templates: "pmo_ticket_templates";
34
+ readonly columns: "pmo_columns";
35
+ readonly board_tickets: "pmo_board_tickets";
36
+ readonly statuses: "pmo_statuses";
37
+ };
38
+ export declare const PMO_TABLE_SCHEMAS: {
39
+ readonly projects: "\n CREATE TABLE IF NOT EXISTS pmo_projects (\n id TEXT PRIMARY KEY,\n name TEXT NOT NULL,\n template TEXT,\n description TEXT,\n status TEXT NOT NULL DEFAULT 'active',\n phase_id TEXT,\n workflow_id TEXT,\n is_archived INTEGER NOT NULL DEFAULT 0,\n target_date TIMESTAMP,\n initiative_id TEXT,\n created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,\n updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,\n FOREIGN KEY (phase_id) REFERENCES pmo_phases(id) ON DELETE SET NULL,\n FOREIGN KEY (workflow_id) REFERENCES pmo_workflows(id) ON DELETE SET NULL\n )";
40
+ readonly initiatives: "\n CREATE TABLE IF NOT EXISTS pmo_initiatives (\n id TEXT PRIMARY KEY,\n name TEXT NOT NULL,\n objective TEXT,\n key_results TEXT,\n created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,\n updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP\n )";
41
+ readonly workflows: "\n CREATE TABLE IF NOT EXISTS pmo_workflows (\n id TEXT PRIMARY KEY,\n name TEXT NOT NULL UNIQUE,\n description TEXT,\n is_builtin INTEGER NOT NULL DEFAULT 0,\n created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,\n updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP\n )";
42
+ readonly workflow_statuses: "\n CREATE TABLE IF NOT EXISTS pmo_workflow_statuses (\n id TEXT PRIMARY KEY,\n workflow_id TEXT NOT NULL,\n name TEXT NOT NULL,\n category TEXT NOT NULL,\n position INTEGER NOT NULL DEFAULT 0,\n color TEXT,\n description TEXT,\n is_default INTEGER NOT NULL DEFAULT 0,\n created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,\n FOREIGN KEY (workflow_id) REFERENCES pmo_workflows(id) ON DELETE CASCADE,\n UNIQUE(workflow_id, name)\n )";
43
+ readonly columns: "\n CREATE TABLE IF NOT EXISTS pmo_columns (\n id TEXT NOT NULL,\n project_id TEXT NOT NULL DEFAULT 'default',\n name TEXT NOT NULL,\n position INTEGER NOT NULL,\n created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,\n PRIMARY KEY (project_id, id)\n )";
44
+ readonly tickets: "\n CREATE TABLE IF NOT EXISTS pmo_tickets (\n id TEXT PRIMARY KEY,\n project_id TEXT NOT NULL DEFAULT 'default',\n title TEXT NOT NULL,\n description TEXT,\n priority TEXT,\n category TEXT,\n status TEXT NOT NULL DEFAULT 'backlog',\n status_id TEXT,\n owner TEXT,\n assignee TEXT,\n branch TEXT,\n spec_id TEXT,\n epic_id TEXT,\n labels TEXT NOT NULL DEFAULT '[]',\n created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,\n updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,\n last_synced_from_spec TIMESTAMP,\n last_synced_from_board TIMESTAMP,\n FOREIGN KEY (project_id) REFERENCES pmo_projects(id) ON DELETE CASCADE,\n FOREIGN KEY (spec_id) REFERENCES pmo_specs(id) ON DELETE SET NULL,\n FOREIGN KEY (epic_id) REFERENCES pmo_epics(id) ON DELETE SET NULL,\n FOREIGN KEY (status_id) REFERENCES pmo_workflow_statuses(id) ON DELETE SET NULL\n )";
45
+ readonly board_tickets: "\n CREATE TABLE IF NOT EXISTS pmo_board_tickets (\n project_id TEXT NOT NULL,\n ticket_id TEXT NOT NULL,\n column_id TEXT NOT NULL,\n position INTEGER NOT NULL,\n PRIMARY KEY (project_id, ticket_id),\n FOREIGN KEY (project_id) REFERENCES pmo_projects(id) ON DELETE CASCADE,\n FOREIGN KEY (ticket_id) REFERENCES pmo_tickets(id) ON DELETE CASCADE,\n FOREIGN KEY (project_id, column_id) REFERENCES pmo_columns(project_id, id) ON DELETE CASCADE\n )";
46
+ readonly board_views: "\n CREATE TABLE IF NOT EXISTS pmo_board_views (\n id TEXT PRIMARY KEY,\n project_id TEXT NOT NULL,\n name TEXT NOT NULL,\n description TEXT,\n is_default INTEGER NOT NULL DEFAULT 0,\n filters TEXT NOT NULL DEFAULT '{}',\n group_by TEXT,\n sort_by TEXT,\n created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,\n updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,\n FOREIGN KEY (project_id) REFERENCES pmo_projects(id) ON DELETE CASCADE,\n UNIQUE(project_id, name)\n )";
47
+ readonly subtasks: "\n CREATE TABLE IF NOT EXISTS pmo_subtasks (\n id TEXT NOT NULL,\n ticket_id TEXT NOT NULL REFERENCES pmo_tickets(id) ON DELETE CASCADE,\n title TEXT NOT NULL,\n done INTEGER DEFAULT 0,\n position INTEGER NOT NULL,\n PRIMARY KEY (ticket_id, id)\n )";
48
+ readonly ticket_metadata: "\n CREATE TABLE IF NOT EXISTS pmo_ticket_metadata (\n ticket_id TEXT NOT NULL REFERENCES pmo_tickets(id) ON DELETE CASCADE,\n key TEXT NOT NULL,\n value TEXT,\n PRIMARY KEY (ticket_id, key)\n )";
49
+ readonly ticket_dependencies: "\n CREATE TABLE IF NOT EXISTS pmo_ticket_dependencies (\n ticket_id TEXT NOT NULL REFERENCES pmo_tickets(id) ON DELETE RESTRICT,\n depends_on_ticket_id TEXT NOT NULL REFERENCES pmo_tickets(id) ON DELETE RESTRICT,\n dependency_type TEXT NOT NULL DEFAULT 'blocks' CHECK (dependency_type IN ('blocks', 'relates_to', 'duplicates')),\n created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,\n PRIMARY KEY (ticket_id, depends_on_ticket_id, dependency_type),\n CHECK (ticket_id != depends_on_ticket_id)\n )";
50
+ readonly ticket_affected_paths: "\n CREATE TABLE IF NOT EXISTS pmo_ticket_affected_paths (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n ticket_id TEXT NOT NULL REFERENCES pmo_tickets(id) ON DELETE CASCADE,\n path_pattern TEXT NOT NULL,\n path_type TEXT NOT NULL DEFAULT 'file',\n created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP\n )";
51
+ readonly ticket_acceptance_criteria: "\n CREATE TABLE IF NOT EXISTS pmo_ticket_acceptance_criteria (\n id TEXT NOT NULL,\n ticket_id TEXT NOT NULL REFERENCES pmo_tickets(id) ON DELETE CASCADE,\n criterion TEXT NOT NULL,\n verifiable INTEGER DEFAULT 1,\n verified INTEGER DEFAULT 0,\n verified_at TIMESTAMP,\n verified_by TEXT,\n position INTEGER NOT NULL DEFAULT 0,\n PRIMARY KEY (ticket_id, id)\n )";
52
+ readonly specs: "\n CREATE TABLE IF NOT EXISTS pmo_specs (\n id TEXT PRIMARY KEY,\n title TEXT NOT NULL,\n status TEXT DEFAULT 'draft',\n type TEXT,\n tags TEXT,\n depends_on TEXT,\n problem TEXT,\n solution TEXT,\n decisions TEXT,\n not_now TEXT,\n ui_ux TEXT,\n acceptance_criteria TEXT,\n open_questions TEXT,\n requirements_functional TEXT,\n requirements_technical TEXT,\n context TEXT,\n created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,\n updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP\n )";
53
+ readonly spec_dependencies: "\n CREATE TABLE IF NOT EXISTS pmo_spec_dependencies (\n spec_id TEXT NOT NULL REFERENCES pmo_specs(id) ON DELETE RESTRICT,\n depends_on_spec_id TEXT NOT NULL REFERENCES pmo_specs(id) ON DELETE RESTRICT,\n dependency_type TEXT NOT NULL DEFAULT 'depends_on' CHECK (dependency_type IN ('depends_on', 'relates_to', 'duplicates')),\n created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,\n PRIMARY KEY (spec_id, depends_on_spec_id, dependency_type),\n CHECK (spec_id != depends_on_spec_id)\n )";
54
+ readonly ticket_specs: "\n CREATE TABLE IF NOT EXISTS pmo_ticket_specs (\n ticket_id TEXT NOT NULL REFERENCES pmo_tickets(id) ON DELETE CASCADE,\n spec_id TEXT NOT NULL REFERENCES pmo_specs(id) ON DELETE CASCADE,\n PRIMARY KEY (ticket_id, spec_id)\n )";
55
+ readonly ticket_assignments: "\n CREATE TABLE IF NOT EXISTS pmo_ticket_assignments (\n ticket_id TEXT NOT NULL REFERENCES pmo_tickets(id) ON DELETE CASCADE,\n agent_name TEXT NOT NULL,\n assigned_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,\n PRIMARY KEY (ticket_id, agent_name)\n )";
56
+ readonly epics: "\n CREATE TABLE IF NOT EXISTS pmo_epics (\n id TEXT PRIMARY KEY,\n project_id TEXT NOT NULL,\n title TEXT NOT NULL,\n description TEXT,\n status TEXT NOT NULL DEFAULT 'active',\n position INTEGER NOT NULL DEFAULT 0,\n file_path TEXT,\n spec_id TEXT,\n created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,\n updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,\n FOREIGN KEY (project_id) REFERENCES pmo_projects(id) ON DELETE CASCADE,\n FOREIGN KEY (spec_id) REFERENCES pmo_specs(id) ON DELETE SET NULL\n )";
57
+ readonly epic_dependencies: "\n CREATE TABLE IF NOT EXISTS pmo_epic_dependencies (\n epic_id TEXT NOT NULL REFERENCES pmo_epics(id) ON DELETE RESTRICT,\n depends_on_epic_id TEXT NOT NULL REFERENCES pmo_epics(id) ON DELETE RESTRICT,\n dependency_type TEXT NOT NULL DEFAULT 'blocks' CHECK (dependency_type IN ('blocks', 'relates_to', 'duplicates')),\n created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,\n PRIMARY KEY (epic_id, depends_on_epic_id, dependency_type),\n CHECK (epic_id != depends_on_epic_id)\n )";
58
+ readonly project_specs: "\n CREATE TABLE IF NOT EXISTS pmo_project_specs (\n project_id TEXT NOT NULL REFERENCES pmo_projects(id) ON DELETE CASCADE,\n spec_id TEXT NOT NULL REFERENCES pmo_specs(id) ON DELETE CASCADE,\n created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,\n PRIMARY KEY (project_id, spec_id)\n )";
59
+ readonly cache_metadata: "\n CREATE TABLE IF NOT EXISTS pmo_cache_metadata (\n key TEXT PRIMARY KEY,\n value TEXT NOT NULL\n )";
60
+ readonly settings: "\n CREATE TABLE IF NOT EXISTS pmo_settings (\n key TEXT PRIMARY KEY,\n value TEXT NOT NULL\n )";
61
+ readonly agent_work: "\n CREATE TABLE IF NOT EXISTS agent_work (\n id TEXT PRIMARY KEY,\n ticket_id TEXT NOT NULL,\n agent_name TEXT NOT NULL,\n executor TEXT NOT NULL,\n environment TEXT NOT NULL DEFAULT 'host',\n display_mode TEXT NOT NULL DEFAULT 'terminal',\n sandboxed INTEGER NOT NULL DEFAULT 0,\n status TEXT NOT NULL DEFAULT 'starting',\n branch TEXT,\n pid TEXT,\n container_id TEXT,\n session_id TEXT,\n host TEXT,\n log_path TEXT,\n started_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,\n completed_at TIMESTAMP,\n exit_code INTEGER,\n FOREIGN KEY (ticket_id) REFERENCES pmo_tickets(id) ON DELETE CASCADE\n )";
62
+ readonly containers: "\n CREATE TABLE IF NOT EXISTS containers (\n id TEXT PRIMARY KEY,\n agent_name TEXT NOT NULL,\n docker_id TEXT NOT NULL,\n docker_name TEXT,\n image TEXT,\n status TEXT NOT NULL DEFAULT 'unknown',\n current_execution_id TEXT,\n created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,\n last_seen_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,\n FOREIGN KEY (agent_name) REFERENCES agents(name) ON DELETE CASCADE,\n FOREIGN KEY (current_execution_id) REFERENCES agent_work(id) ON DELETE SET NULL\n )";
63
+ readonly statuses: "\n CREATE TABLE IF NOT EXISTS pmo_statuses (\n id TEXT PRIMARY KEY,\n project_id TEXT NOT NULL,\n name TEXT NOT NULL,\n category TEXT NOT NULL,\n position INTEGER NOT NULL DEFAULT 0,\n color TEXT,\n description TEXT,\n is_default INTEGER NOT NULL DEFAULT 0,\n created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,\n FOREIGN KEY (project_id) REFERENCES pmo_projects(id) ON DELETE CASCADE,\n UNIQUE(project_id, name)\n )";
64
+ readonly phases: "\n CREATE TABLE IF NOT EXISTS pmo_phases (\n id TEXT PRIMARY KEY,\n name TEXT NOT NULL UNIQUE,\n category TEXT NOT NULL,\n position INTEGER NOT NULL DEFAULT 0,\n color TEXT,\n description TEXT,\n is_default INTEGER NOT NULL DEFAULT 0,\n created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP\n )";
65
+ readonly phase_templates: "\n CREATE TABLE IF NOT EXISTS pmo_phase_templates (\n id TEXT PRIMARY KEY,\n name TEXT NOT NULL UNIQUE,\n description TEXT,\n is_builtin INTEGER NOT NULL DEFAULT 0,\n phases TEXT NOT NULL,\n created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP\n )";
66
+ readonly actions: "\n CREATE TABLE IF NOT EXISTS pmo_actions (\n id TEXT PRIMARY KEY,\n name TEXT NOT NULL UNIQUE,\n description TEXT,\n prompt TEXT NOT NULL,\n end_prompt TEXT,\n suggested_for_categories TEXT,\n default_move_to_category TEXT,\n modifies_code INTEGER NOT NULL DEFAULT 1,\n is_builtin INTEGER NOT NULL DEFAULT 0,\n position INTEGER NOT NULL DEFAULT 0,\n created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP\n )";
67
+ readonly ticket_templates: "\n CREATE TABLE IF NOT EXISTS pmo_ticket_templates (\n id TEXT PRIMARY KEY,\n name TEXT NOT NULL UNIQUE,\n description TEXT,\n is_builtin INTEGER NOT NULL DEFAULT 0,\n title_pattern TEXT,\n description_template TEXT,\n default_priority TEXT,\n default_category TEXT,\n default_status_id TEXT,\n default_assignee TEXT,\n default_owner TEXT,\n default_labels TEXT NOT NULL DEFAULT '[]',\n suggested_subtasks TEXT NOT NULL DEFAULT '[]',\n created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP\n )";
68
+ };
69
+ export declare const PMO_INDEXES: string;
70
+ /**
71
+ * All PMO table creation statements combined.
72
+ * Order matters due to foreign key dependencies.
73
+ */
74
+ export declare const PMO_SCHEMA_SQL: string;
75
+ export declare const EXPECTED_TICKET_COLUMNS: readonly ["id", "project_id", "title", "description", "priority", "category", "status", "status_id", "owner", "assignee", "branch", "spec_id", "epic_id", "labels", "created_at", "updated_at", "last_synced_from_spec", "last_synced_from_board"];
76
+ /**
77
+ * Validate that pmo_tickets table has all expected columns.
78
+ * Throws if columns are missing (indicates schema mismatch).
79
+ */
80
+ export declare function validateTicketSchema(db: {
81
+ pragma: (sql: string) => unknown;
82
+ }): void;