@proletariat/cli 0.1.4 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (526) hide show
  1. package/README.md +510 -255
  2. package/bin/dev.cmd +3 -0
  3. package/bin/dev.js +5 -0
  4. package/bin/run.cmd +3 -0
  5. package/bin/run.js +23 -0
  6. package/dist/commands/action/create.d.ts +21 -0
  7. package/dist/commands/action/create.js +126 -0
  8. package/dist/commands/action/delete.d.ts +17 -0
  9. package/dist/commands/action/delete.js +78 -0
  10. package/dist/commands/action/index.d.ts +15 -0
  11. package/dist/commands/action/index.js +107 -0
  12. package/dist/commands/action/list.d.ts +14 -0
  13. package/dist/commands/action/list.js +89 -0
  14. package/dist/commands/action/run.d.ts +19 -0
  15. package/dist/commands/action/run.js +179 -0
  16. package/dist/commands/action/show.d.ts +15 -0
  17. package/dist/commands/action/show.js +47 -0
  18. package/dist/commands/action/update.d.ts +22 -0
  19. package/dist/commands/action/update.js +168 -0
  20. package/dist/commands/agent/index.d.ts +13 -0
  21. package/dist/commands/agent/index.js +131 -0
  22. package/dist/commands/agent/list.d.ts +7 -0
  23. package/dist/commands/agent/list.js +126 -0
  24. package/dist/commands/agent/login.d.ts +16 -0
  25. package/dist/commands/agent/login.js +146 -0
  26. package/dist/commands/agent/rebuild.d.ts +18 -0
  27. package/dist/commands/agent/rebuild.js +133 -0
  28. package/dist/commands/agent/restart.d.ts +17 -0
  29. package/dist/commands/agent/restart.js +116 -0
  30. package/dist/commands/agent/shell.d.ts +23 -0
  31. package/dist/commands/agent/shell.js +378 -0
  32. package/dist/commands/agent/staff/add.d.ts +15 -0
  33. package/dist/commands/agent/staff/add.js +281 -0
  34. package/dist/commands/agent/staff/index.d.ts +14 -0
  35. package/dist/commands/agent/staff/index.js +90 -0
  36. package/dist/commands/agent/staff/list.d.ts +7 -0
  37. package/dist/commands/agent/staff/list.js +90 -0
  38. package/dist/commands/agent/staff/remove.d.ts +16 -0
  39. package/dist/commands/agent/staff/remove.js +137 -0
  40. package/dist/commands/agent/status.d.ts +17 -0
  41. package/dist/commands/agent/status.js +139 -0
  42. package/dist/commands/agent/temp/cleanup.d.ts +23 -0
  43. package/dist/commands/agent/temp/cleanup.js +388 -0
  44. package/dist/commands/agent/temp/index.d.ts +14 -0
  45. package/dist/commands/agent/temp/index.js +82 -0
  46. package/dist/commands/agent/temp/list.d.ts +7 -0
  47. package/dist/commands/agent/temp/list.js +108 -0
  48. package/dist/commands/agent/themes/add-names.d.ts +10 -0
  49. package/dist/commands/agent/themes/add-names.js +67 -0
  50. package/dist/commands/agent/themes/create.d.ts +13 -0
  51. package/dist/commands/agent/themes/create.js +66 -0
  52. package/dist/commands/agent/themes/index.d.ts +9 -0
  53. package/dist/commands/agent/themes/index.js +194 -0
  54. package/dist/commands/agent/themes/list.d.ts +6 -0
  55. package/dist/commands/agent/themes/list.js +41 -0
  56. package/dist/commands/agent/themes/set.d.ts +12 -0
  57. package/dist/commands/agent/themes/set.js +77 -0
  58. package/dist/commands/agent/visit.d.ts +16 -0
  59. package/dist/commands/agent/visit.js +88 -0
  60. package/dist/commands/autocomplete/setup.d.ts +14 -0
  61. package/dist/commands/autocomplete/setup.js +154 -0
  62. package/dist/commands/board/index.d.ts +17 -0
  63. package/dist/commands/board/index.js +255 -0
  64. package/dist/commands/board/watch.d.ts +13 -0
  65. package/dist/commands/board/watch.js +52 -0
  66. package/dist/commands/branch/create.d.ts +50 -0
  67. package/dist/commands/branch/create.js +624 -0
  68. package/dist/commands/branch/index.d.ts +13 -0
  69. package/dist/commands/branch/index.js +50 -0
  70. package/dist/commands/branch/list.d.ts +17 -0
  71. package/dist/commands/branch/list.js +120 -0
  72. package/dist/commands/branch/validate.d.ts +15 -0
  73. package/dist/commands/branch/validate.js +73 -0
  74. package/dist/commands/commit.d.ts +71 -0
  75. package/dist/commands/commit.js +499 -0
  76. package/dist/commands/docker/clean.d.ts +13 -0
  77. package/dist/commands/docker/clean.js +224 -0
  78. package/dist/commands/docker/index.d.ts +19 -0
  79. package/dist/commands/docker/index.js +274 -0
  80. package/dist/commands/docker/list.d.ts +16 -0
  81. package/dist/commands/docker/list.js +200 -0
  82. package/dist/commands/docker/logs.d.ts +14 -0
  83. package/dist/commands/docker/logs.js +118 -0
  84. package/dist/commands/docker/prune.d.ts +14 -0
  85. package/dist/commands/docker/prune.js +211 -0
  86. package/dist/commands/docker/restart.d.ts +14 -0
  87. package/dist/commands/docker/restart.js +129 -0
  88. package/dist/commands/docker/shell.d.ts +14 -0
  89. package/dist/commands/docker/shell.js +103 -0
  90. package/dist/commands/docker/start.d.ts +12 -0
  91. package/dist/commands/docker/start.js +92 -0
  92. package/dist/commands/docker/status.d.ts +7 -0
  93. package/dist/commands/docker/status.js +40 -0
  94. package/dist/commands/docker/stop.d.ts +14 -0
  95. package/dist/commands/docker/stop.js +134 -0
  96. package/dist/commands/docker/sync.d.ts +15 -0
  97. package/dist/commands/docker/sync.js +112 -0
  98. package/dist/commands/epic/activate.d.ts +13 -0
  99. package/dist/commands/epic/activate.js +118 -0
  100. package/dist/commands/epic/archive.d.ts +14 -0
  101. package/dist/commands/epic/archive.js +132 -0
  102. package/dist/commands/epic/create.d.ts +15 -0
  103. package/dist/commands/epic/create.js +137 -0
  104. package/dist/commands/epic/index.d.ts +13 -0
  105. package/dist/commands/epic/index.js +88 -0
  106. package/dist/commands/epic/link/block.d.ts +14 -0
  107. package/dist/commands/epic/link/block.js +79 -0
  108. package/dist/commands/epic/link/duplicates.d.ts +14 -0
  109. package/dist/commands/epic/link/duplicates.js +66 -0
  110. package/dist/commands/epic/link/index.d.ts +19 -0
  111. package/dist/commands/epic/link/index.js +242 -0
  112. package/dist/commands/epic/link/relates.d.ts +14 -0
  113. package/dist/commands/epic/link/relates.js +66 -0
  114. package/dist/commands/epic/link/remove.d.ts +16 -0
  115. package/dist/commands/epic/link/remove.js +89 -0
  116. package/dist/commands/epic/list.d.ts +11 -0
  117. package/dist/commands/epic/list.js +87 -0
  118. package/dist/commands/epic/move.d.ts +15 -0
  119. package/dist/commands/epic/move.js +184 -0
  120. package/dist/commands/epic/progress.d.ts +16 -0
  121. package/dist/commands/epic/progress.js +166 -0
  122. package/dist/commands/epic/project.d.ts +15 -0
  123. package/dist/commands/epic/project.js +219 -0
  124. package/dist/commands/epic/reorder.d.ts +21 -0
  125. package/dist/commands/epic/reorder.js +160 -0
  126. package/dist/commands/epic/spec.d.ts +15 -0
  127. package/dist/commands/epic/spec.js +191 -0
  128. package/dist/commands/epic/ticket.d.ts +18 -0
  129. package/dist/commands/epic/ticket.js +291 -0
  130. package/dist/commands/epic/view.d.ts +13 -0
  131. package/dist/commands/epic/view.js +117 -0
  132. package/dist/commands/execution/index.d.ts +13 -0
  133. package/dist/commands/execution/index.js +70 -0
  134. package/dist/commands/execution/list.d.ts +15 -0
  135. package/dist/commands/execution/list.js +144 -0
  136. package/dist/commands/execution/logs.d.ts +18 -0
  137. package/dist/commands/execution/logs.js +161 -0
  138. package/dist/commands/execution/stop.d.ts +22 -0
  139. package/dist/commands/execution/stop.js +248 -0
  140. package/dist/commands/gh/index.d.ts +9 -0
  141. package/dist/commands/gh/index.js +53 -0
  142. package/dist/commands/gh/login.d.ts +6 -0
  143. package/dist/commands/gh/login.js +57 -0
  144. package/dist/commands/gh/status.d.ts +6 -0
  145. package/dist/commands/gh/status.js +48 -0
  146. package/dist/commands/gh/token.d.ts +6 -0
  147. package/dist/commands/gh/token.js +59 -0
  148. package/dist/commands/init.d.ts +26 -0
  149. package/dist/commands/init.js +200 -0
  150. package/dist/commands/phase/create.d.ts +22 -0
  151. package/dist/commands/phase/create.js +123 -0
  152. package/dist/commands/phase/delete.d.ts +17 -0
  153. package/dist/commands/phase/delete.js +73 -0
  154. package/dist/commands/phase/list.d.ts +12 -0
  155. package/dist/commands/phase/list.js +76 -0
  156. package/dist/commands/phase/move.d.ts +17 -0
  157. package/dist/commands/phase/move.js +115 -0
  158. package/dist/commands/phase/template/apply.d.ts +17 -0
  159. package/dist/commands/phase/template/apply.js +106 -0
  160. package/dist/commands/phase/template/create.d.ts +16 -0
  161. package/dist/commands/phase/template/create.js +58 -0
  162. package/dist/commands/phase/template/delete.d.ts +17 -0
  163. package/dist/commands/phase/template/delete.js +98 -0
  164. package/dist/commands/phase/template/index.d.ts +15 -0
  165. package/dist/commands/phase/template/index.js +128 -0
  166. package/dist/commands/phase/template/list.d.ts +16 -0
  167. package/dist/commands/phase/template/list.js +95 -0
  168. package/dist/commands/phase/template/update.d.ts +17 -0
  169. package/dist/commands/phase/template/update.js +89 -0
  170. package/dist/commands/phase/update.d.ts +23 -0
  171. package/dist/commands/phase/update.js +174 -0
  172. package/dist/commands/pmo/init.d.ts +25 -0
  173. package/dist/commands/pmo/init.js +341 -0
  174. package/dist/commands/pr/create.d.ts +17 -0
  175. package/dist/commands/pr/create.js +242 -0
  176. package/dist/commands/pr/index.d.ts +9 -0
  177. package/dist/commands/pr/index.js +68 -0
  178. package/dist/commands/pr/link.d.ts +14 -0
  179. package/dist/commands/pr/link.js +212 -0
  180. package/dist/commands/pr/status.d.ts +12 -0
  181. package/dist/commands/pr/status.js +161 -0
  182. package/dist/commands/project/archive.d.ts +17 -0
  183. package/dist/commands/project/archive.js +83 -0
  184. package/dist/commands/project/create.d.ts +22 -0
  185. package/dist/commands/project/create.js +143 -0
  186. package/dist/commands/project/delete.d.ts +17 -0
  187. package/dist/commands/project/delete.js +128 -0
  188. package/dist/commands/project/index.d.ts +13 -0
  189. package/dist/commands/project/index.js +64 -0
  190. package/dist/commands/project/list.d.ts +14 -0
  191. package/dist/commands/project/list.js +96 -0
  192. package/dist/commands/project/spec.d.ts +18 -0
  193. package/dist/commands/project/spec.js +216 -0
  194. package/dist/commands/project/unarchive.d.ts +15 -0
  195. package/dist/commands/project/unarchive.js +35 -0
  196. package/dist/commands/project/view.d.ts +16 -0
  197. package/dist/commands/project/view.js +94 -0
  198. package/dist/commands/repo/add.d.ts +21 -0
  199. package/dist/commands/repo/add.js +118 -0
  200. package/dist/commands/repo/index.d.ts +13 -0
  201. package/dist/commands/repo/index.js +114 -0
  202. package/dist/commands/repo/list.d.ts +13 -0
  203. package/dist/commands/repo/list.js +96 -0
  204. package/dist/commands/repo/remove.d.ts +23 -0
  205. package/dist/commands/repo/remove.js +217 -0
  206. package/dist/commands/repo/view.d.ts +15 -0
  207. package/dist/commands/repo/view.js +99 -0
  208. package/dist/commands/session/attach.d.ts +40 -0
  209. package/dist/commands/session/attach.js +307 -0
  210. package/dist/commands/session/index.d.ts +13 -0
  211. package/dist/commands/session/index.js +64 -0
  212. package/dist/commands/session/list.d.ts +21 -0
  213. package/dist/commands/session/list.js +181 -0
  214. package/dist/commands/spec/create.d.ts +19 -0
  215. package/dist/commands/spec/create.js +130 -0
  216. package/dist/commands/spec/index.d.ts +13 -0
  217. package/dist/commands/spec/index.js +68 -0
  218. package/dist/commands/spec/link/depends.d.ts +14 -0
  219. package/dist/commands/spec/link/depends.js +64 -0
  220. package/dist/commands/spec/link/duplicates.d.ts +14 -0
  221. package/dist/commands/spec/link/duplicates.js +63 -0
  222. package/dist/commands/spec/link/index.d.ts +19 -0
  223. package/dist/commands/spec/link/index.js +200 -0
  224. package/dist/commands/spec/link/relates.d.ts +14 -0
  225. package/dist/commands/spec/link/relates.js +63 -0
  226. package/dist/commands/spec/link/remove.d.ts +16 -0
  227. package/dist/commands/spec/link/remove.js +94 -0
  228. package/dist/commands/spec/list.d.ts +12 -0
  229. package/dist/commands/spec/list.js +75 -0
  230. package/dist/commands/spec/plan.d.ts +15 -0
  231. package/dist/commands/spec/plan.js +108 -0
  232. package/dist/commands/spec/ticket.d.ts +18 -0
  233. package/dist/commands/spec/ticket.js +160 -0
  234. package/dist/commands/spec/view.d.ts +15 -0
  235. package/dist/commands/spec/view.js +163 -0
  236. package/dist/commands/status/create.d.ts +21 -0
  237. package/dist/commands/status/create.js +140 -0
  238. package/dist/commands/status/delete.d.ts +13 -0
  239. package/dist/commands/status/delete.js +77 -0
  240. package/dist/commands/status/index.d.ts +14 -0
  241. package/dist/commands/status/index.js +91 -0
  242. package/dist/commands/status/list.d.ts +12 -0
  243. package/dist/commands/status/list.js +93 -0
  244. package/dist/commands/status/move.d.ts +14 -0
  245. package/dist/commands/status/move.js +120 -0
  246. package/dist/commands/status/update.d.ts +20 -0
  247. package/dist/commands/status/update.js +180 -0
  248. package/dist/commands/template/delete.d.ts +15 -0
  249. package/dist/commands/template/delete.js +142 -0
  250. package/dist/commands/template/index.d.ts +10 -0
  251. package/dist/commands/template/index.js +64 -0
  252. package/dist/commands/template/list.d.ts +18 -0
  253. package/dist/commands/template/list.js +157 -0
  254. package/dist/commands/template/phase/apply.d.ts +14 -0
  255. package/dist/commands/template/phase/apply.js +41 -0
  256. package/dist/commands/template/phase/create.d.ts +12 -0
  257. package/dist/commands/template/phase/create.js +29 -0
  258. package/dist/commands/template/phase/delete.d.ts +13 -0
  259. package/dist/commands/template/phase/delete.js +34 -0
  260. package/dist/commands/template/phase/index.d.ts +10 -0
  261. package/dist/commands/template/phase/index.js +62 -0
  262. package/dist/commands/template/phase/list.d.ts +11 -0
  263. package/dist/commands/template/phase/list.js +34 -0
  264. package/dist/commands/template/phase/update.d.ts +13 -0
  265. package/dist/commands/template/phase/update.js +35 -0
  266. package/dist/commands/template/ticket/apply.d.ts +17 -0
  267. package/dist/commands/template/ticket/apply.js +58 -0
  268. package/dist/commands/template/ticket/delete.d.ts +13 -0
  269. package/dist/commands/template/ticket/delete.js +34 -0
  270. package/dist/commands/template/ticket/index.d.ts +10 -0
  271. package/dist/commands/template/ticket/index.js +62 -0
  272. package/dist/commands/template/ticket/list.d.ts +11 -0
  273. package/dist/commands/template/ticket/list.js +34 -0
  274. package/dist/commands/template/ticket/save.d.ts +13 -0
  275. package/dist/commands/template/ticket/save.js +35 -0
  276. package/dist/commands/ticket/bulk.d.ts +13 -0
  277. package/dist/commands/ticket/bulk.js +145 -0
  278. package/dist/commands/ticket/complete.d.ts +16 -0
  279. package/dist/commands/ticket/complete.js +170 -0
  280. package/dist/commands/ticket/create.d.ts +22 -0
  281. package/dist/commands/ticket/create.js +390 -0
  282. package/dist/commands/ticket/delete.d.ts +16 -0
  283. package/dist/commands/ticket/delete.js +178 -0
  284. package/dist/commands/ticket/edit.d.ts +27 -0
  285. package/dist/commands/ticket/edit.js +322 -0
  286. package/dist/commands/ticket/epic.d.ts +20 -0
  287. package/dist/commands/ticket/epic.js +333 -0
  288. package/dist/commands/ticket/index.d.ts +13 -0
  289. package/dist/commands/ticket/index.js +103 -0
  290. package/dist/commands/ticket/link/block.d.ts +14 -0
  291. package/dist/commands/ticket/link/block.js +94 -0
  292. package/dist/commands/ticket/link/duplicates.d.ts +14 -0
  293. package/dist/commands/ticket/link/duplicates.js +93 -0
  294. package/dist/commands/ticket/link/index.d.ts +19 -0
  295. package/dist/commands/ticket/link/index.js +239 -0
  296. package/dist/commands/ticket/link/relates.d.ts +14 -0
  297. package/dist/commands/ticket/link/relates.js +93 -0
  298. package/dist/commands/ticket/link/remove.d.ts +16 -0
  299. package/dist/commands/ticket/link/remove.js +128 -0
  300. package/dist/commands/ticket/list.d.ts +24 -0
  301. package/dist/commands/ticket/list.js +431 -0
  302. package/dist/commands/ticket/move.d.ts +18 -0
  303. package/dist/commands/ticket/move.js +212 -0
  304. package/dist/commands/ticket/project.d.ts +18 -0
  305. package/dist/commands/ticket/project.js +254 -0
  306. package/dist/commands/ticket/reassign.d.ts +19 -0
  307. package/dist/commands/ticket/reassign.js +279 -0
  308. package/dist/commands/ticket/spec.d.ts +18 -0
  309. package/dist/commands/ticket/spec.js +259 -0
  310. package/dist/commands/ticket/status.d.ts +13 -0
  311. package/dist/commands/ticket/status.js +87 -0
  312. package/dist/commands/ticket/template/apply.d.ts +25 -0
  313. package/dist/commands/ticket/template/apply.js +249 -0
  314. package/dist/commands/ticket/template/create.d.ts +19 -0
  315. package/dist/commands/ticket/template/create.js +210 -0
  316. package/dist/commands/ticket/template/delete.d.ts +17 -0
  317. package/dist/commands/ticket/template/delete.js +92 -0
  318. package/dist/commands/ticket/template/index.d.ts +15 -0
  319. package/dist/commands/ticket/template/index.js +118 -0
  320. package/dist/commands/ticket/template/list.d.ts +16 -0
  321. package/dist/commands/ticket/template/list.js +110 -0
  322. package/dist/commands/ticket/template/save.d.ts +14 -0
  323. package/dist/commands/ticket/template/save.js +110 -0
  324. package/dist/commands/ticket/update.d.ts +18 -0
  325. package/dist/commands/ticket/update.js +325 -0
  326. package/dist/commands/ticket/view.d.ts +13 -0
  327. package/dist/commands/ticket/view.js +80 -0
  328. package/dist/commands/whoami.d.ts +9 -0
  329. package/dist/commands/whoami.js +103 -0
  330. package/dist/commands/work/complete.d.ts +13 -0
  331. package/dist/commands/work/complete.js +121 -0
  332. package/dist/commands/work/index.d.ts +13 -0
  333. package/dist/commands/work/index.js +70 -0
  334. package/dist/commands/work/ready.d.ts +24 -0
  335. package/dist/commands/work/ready.js +290 -0
  336. package/dist/commands/work/revise.d.ts +19 -0
  337. package/dist/commands/work/revise.js +377 -0
  338. package/dist/commands/work/spawn-all.d.ts +17 -0
  339. package/dist/commands/work/spawn-all.js +58 -0
  340. package/dist/commands/work/spawn.d.ts +29 -0
  341. package/dist/commands/work/spawn.js +728 -0
  342. package/dist/commands/work/start.d.ts +39 -0
  343. package/dist/commands/work/start.js +1393 -0
  344. package/dist/commands/work/watch.d.ts +31 -0
  345. package/dist/commands/work/watch.js +359 -0
  346. package/dist/commands/workflow/create.d.ts +18 -0
  347. package/dist/commands/workflow/create.js +119 -0
  348. package/dist/commands/workflow/delete.d.ts +17 -0
  349. package/dist/commands/workflow/delete.js +119 -0
  350. package/dist/commands/workflow/index.d.ts +15 -0
  351. package/dist/commands/workflow/index.js +75 -0
  352. package/dist/commands/workflow/list.d.ts +15 -0
  353. package/dist/commands/workflow/list.js +75 -0
  354. package/dist/commands/workflow/switch.d.ts +13 -0
  355. package/dist/commands/workflow/switch.js +117 -0
  356. package/dist/commands/workflow/view.d.ts +16 -0
  357. package/dist/commands/workflow/view.js +114 -0
  358. package/dist/commands/workspace/add.d.ts +12 -0
  359. package/dist/commands/workspace/add.js +74 -0
  360. package/dist/commands/workspace/list.d.ts +9 -0
  361. package/dist/commands/workspace/list.js +153 -0
  362. package/dist/commands/workspace/remove.d.ts +13 -0
  363. package/dist/commands/workspace/remove.js +98 -0
  364. package/dist/commands/workspace/use.d.ts +12 -0
  365. package/dist/commands/workspace/use.js +111 -0
  366. package/dist/hooks/init.d.ts +11 -0
  367. package/dist/hooks/init.js +57 -0
  368. package/dist/index.d.ts +1 -0
  369. package/dist/index.js +1 -0
  370. package/dist/lib/agents/commands.d.ts +189 -0
  371. package/dist/lib/agents/commands.js +893 -0
  372. package/dist/lib/agents/index.d.ts +54 -0
  373. package/dist/lib/agents/index.js +382 -0
  374. package/dist/lib/branch/index.d.ts +120 -0
  375. package/dist/lib/branch/index.js +334 -0
  376. package/dist/lib/colors.d.ts +94 -0
  377. package/dist/lib/colors.js +68 -0
  378. package/dist/lib/commands/docker-command.d.ts +21 -0
  379. package/dist/lib/commands/docker-command.js +27 -0
  380. package/dist/lib/database/index.d.ts +176 -0
  381. package/dist/lib/database/index.js +581 -0
  382. package/dist/lib/docker/resolve.d.ts +38 -0
  383. package/dist/lib/docker/resolve.js +175 -0
  384. package/dist/lib/execution/config.d.ts +150 -0
  385. package/dist/lib/execution/config.js +541 -0
  386. package/dist/lib/execution/devcontainer.d.ts +85 -0
  387. package/dist/lib/execution/devcontainer.js +594 -0
  388. package/dist/lib/execution/index.d.ts +10 -0
  389. package/dist/lib/execution/index.js +10 -0
  390. package/dist/lib/execution/runners.d.ts +53 -0
  391. package/dist/lib/execution/runners.js +1182 -0
  392. package/dist/lib/execution/spawner.d.ts +85 -0
  393. package/dist/lib/execution/spawner.js +548 -0
  394. package/dist/lib/execution/storage.d.ts +159 -0
  395. package/dist/lib/execution/storage.js +425 -0
  396. package/dist/lib/execution/types.d.ts +145 -0
  397. package/dist/lib/execution/types.js +157 -0
  398. package/dist/lib/init/index.d.ts +75 -0
  399. package/dist/lib/init/index.js +355 -0
  400. package/dist/lib/machine-config.d.ts +170 -0
  401. package/dist/lib/machine-config.js +386 -0
  402. package/dist/lib/pmo/base-command.d.ts +195 -0
  403. package/dist/lib/pmo/base-command.js +319 -0
  404. package/dist/lib/pmo/create-spec-folders.d.ts +43 -0
  405. package/dist/lib/pmo/create-spec-folders.js +64 -0
  406. package/dist/lib/pmo/epic-files.d.ts +56 -0
  407. package/dist/lib/pmo/epic-files.js +195 -0
  408. package/dist/lib/pmo/find-pmo.d.ts +14 -0
  409. package/dist/lib/pmo/find-pmo.js +172 -0
  410. package/dist/lib/pmo/index.d.ts +109 -0
  411. package/dist/lib/pmo/index.js +501 -0
  412. package/dist/lib/pmo/markdown.d.ts +31 -0
  413. package/dist/lib/pmo/markdown.js +245 -0
  414. package/dist/lib/pmo/pmo-context.d.ts +27 -0
  415. package/dist/lib/pmo/pmo-context.js +44 -0
  416. package/dist/lib/pmo/schema.d.ts +82 -0
  417. package/dist/lib/pmo/schema.js +531 -0
  418. package/dist/lib/pmo/spec-parser.d.ts +25 -0
  419. package/dist/lib/pmo/spec-parser.js +205 -0
  420. package/dist/lib/pmo/spec-types.d.ts +43 -0
  421. package/dist/lib/pmo/spec-types.js +7 -0
  422. package/dist/lib/pmo/storage/actions.d.ts +34 -0
  423. package/dist/lib/pmo/storage/actions.js +177 -0
  424. package/dist/lib/pmo/storage/base.d.ts +47 -0
  425. package/dist/lib/pmo/storage/base.js +858 -0
  426. package/dist/lib/pmo/storage/dependencies.d.ts +61 -0
  427. package/dist/lib/pmo/storage/dependencies.js +267 -0
  428. package/dist/lib/pmo/storage/epics.d.ts +46 -0
  429. package/dist/lib/pmo/storage/epics.js +243 -0
  430. package/dist/lib/pmo/storage/helpers.d.ts +33 -0
  431. package/dist/lib/pmo/storage/helpers.js +148 -0
  432. package/dist/lib/pmo/storage/index.d.ts +186 -0
  433. package/dist/lib/pmo/storage/index.js +689 -0
  434. package/dist/lib/pmo/storage/phases.d.ts +65 -0
  435. package/dist/lib/pmo/storage/phases.js +392 -0
  436. package/dist/lib/pmo/storage/projects.d.ts +79 -0
  437. package/dist/lib/pmo/storage/projects.js +303 -0
  438. package/dist/lib/pmo/storage/specs.d.ts +77 -0
  439. package/dist/lib/pmo/storage/specs.js +389 -0
  440. package/dist/lib/pmo/storage/statuses.d.ts +63 -0
  441. package/dist/lib/pmo/storage/statuses.js +404 -0
  442. package/dist/lib/pmo/storage/subtasks.d.ts +37 -0
  443. package/dist/lib/pmo/storage/subtasks.js +184 -0
  444. package/dist/lib/pmo/storage/templates.d.ts +40 -0
  445. package/dist/lib/pmo/storage/templates.js +210 -0
  446. package/dist/lib/pmo/storage/tickets.d.ts +57 -0
  447. package/dist/lib/pmo/storage/tickets.js +453 -0
  448. package/dist/lib/pmo/storage/types.d.ts +200 -0
  449. package/dist/lib/pmo/storage/types.js +5 -0
  450. package/dist/lib/pmo/storage/views.d.ts +44 -0
  451. package/dist/lib/pmo/storage/views.js +355 -0
  452. package/dist/lib/pmo/storage-sqlite.d.ts +7 -0
  453. package/dist/lib/pmo/storage-sqlite.js +7 -0
  454. package/dist/lib/pmo/sync-manager.d.ts +92 -0
  455. package/dist/lib/pmo/sync-manager.js +229 -0
  456. package/dist/lib/pmo/types.d.ts +710 -0
  457. package/dist/lib/pmo/types.js +108 -0
  458. package/dist/lib/pmo/utils.d.ts +122 -0
  459. package/dist/lib/pmo/utils.js +174 -0
  460. package/dist/lib/pmo/watcher.d.ts +43 -0
  461. package/dist/lib/pmo/watcher.js +208 -0
  462. package/dist/lib/pr/index.d.ts +150 -0
  463. package/dist/lib/pr/index.js +483 -0
  464. package/dist/lib/prompt-json.d.ts +231 -0
  465. package/dist/lib/prompt-json.js +213 -0
  466. package/dist/lib/repos/index.d.ts +81 -0
  467. package/dist/lib/repos/index.js +679 -0
  468. package/dist/lib/styles.d.ts +98 -0
  469. package/dist/lib/styles.js +195 -0
  470. package/dist/lib/themes.d.ts +128 -0
  471. package/dist/lib/themes.js +301 -0
  472. package/dist/lib/ui/BoardUI.d.ts +21 -0
  473. package/dist/lib/ui/BoardUI.js +85 -0
  474. package/dist/lib/ui/ClaimTicketUI.d.ts +17 -0
  475. package/dist/lib/ui/ClaimTicketUI.js +64 -0
  476. package/dist/lib/ui/CreateTicketUI.d.ts +13 -0
  477. package/dist/lib/ui/CreateTicketUI.js +101 -0
  478. package/dist/lib/workspace.d.ts +66 -0
  479. package/dist/lib/workspace.js +204 -0
  480. package/oclif.manifest.json +10593 -0
  481. package/package.json +104 -52
  482. package/LICENSE +0 -21
  483. package/dist/bin/prlt.d.ts +0 -11
  484. package/dist/bin/prlt.d.ts.map +0 -1
  485. package/dist/bin/prlt.js +0 -144
  486. package/dist/bin/prlt.js.map +0 -1
  487. package/dist/lib/config/index.d.ts +0 -14
  488. package/dist/lib/config/index.d.ts.map +0 -1
  489. package/dist/lib/config/index.js +0 -139
  490. package/dist/lib/config/index.js.map +0 -1
  491. package/dist/lib/config/upgrade.d.ts +0 -2
  492. package/dist/lib/config/upgrade.d.ts.map +0 -1
  493. package/dist/lib/config/upgrade.js +0 -173
  494. package/dist/lib/config/upgrade.js.map +0 -1
  495. package/dist/lib/themes/index.d.ts +0 -8
  496. package/dist/lib/themes/index.d.ts.map +0 -1
  497. package/dist/lib/themes/index.js +0 -80
  498. package/dist/lib/themes/index.js.map +0 -1
  499. package/dist/lib/utils/helpers.d.ts +0 -4
  500. package/dist/lib/utils/helpers.d.ts.map +0 -1
  501. package/dist/lib/utils/helpers.js +0 -39
  502. package/dist/lib/utils/helpers.js.map +0 -1
  503. package/dist/lib/utils/logger.d.ts +0 -4
  504. package/dist/lib/utils/logger.d.ts.map +0 -1
  505. package/dist/lib/utils/logger.js +0 -28
  506. package/dist/lib/utils/logger.js.map +0 -1
  507. package/dist/lib/workspace/index.d.ts +0 -13
  508. package/dist/lib/workspace/index.d.ts.map +0 -1
  509. package/dist/lib/workspace/index.js +0 -116
  510. package/dist/lib/workspace/index.js.map +0 -1
  511. package/dist/lib/worktree/index.d.ts +0 -7
  512. package/dist/lib/worktree/index.d.ts.map +0 -1
  513. package/dist/lib/worktree/index.js +0 -362
  514. package/dist/lib/worktree/index.js.map +0 -1
  515. package/dist/lib/worktree/migrate.d.ts +0 -2
  516. package/dist/lib/worktree/migrate.d.ts.map +0 -1
  517. package/dist/lib/worktree/migrate.js +0 -212
  518. package/dist/lib/worktree/migrate.js.map +0 -1
  519. package/dist/lib/worktree/repair.d.ts +0 -3
  520. package/dist/lib/worktree/repair.d.ts.map +0 -1
  521. package/dist/lib/worktree/repair.js +0 -140
  522. package/dist/lib/worktree/repair.js.map +0 -1
  523. package/dist/types/index.d.ts +0 -57
  524. package/dist/types/index.d.ts.map +0 -1
  525. package/dist/types/index.js +0 -3
  526. package/dist/types/index.js.map +0 -1
@@ -0,0 +1,501 @@
1
+ import * as fs from 'node:fs';
2
+ import * as path from 'node:path';
3
+ import inquirer from 'inquirer';
4
+ import chalk from 'chalk';
5
+ import { SQLiteStorage } from './storage-sqlite.js';
6
+ import { createSpecFolders } from './create-spec-folders.js';
7
+ import { slugify } from './utils.js';
8
+ import { createDevcontainerConfig } from '../execution/devcontainer.js';
9
+ // Re-export new PMO modules
10
+ export * from './types.js';
11
+ export * from './utils.js';
12
+ export { parseBoard, generateBoardMarkdown, findAddedTickets, findRemovedTickets, findModifiedTickets, } from './markdown.js';
13
+ export { SQLiteStorage } from './storage-sqlite.js';
14
+ export { getStorageWithAutoSync, autoExportToBoard, withAutoExport, autoSyncFromBoard, getBoardPath, getWorkspaceDbPath, } from './sync-manager.js';
15
+ export { startWatcher, runWatcherForeground, } from './watcher.js';
16
+ export { createSpecFolders, getSpecFolderPath, getProjectPath, getProductPath, getEpicsPath, } from './create-spec-folders.js';
17
+ export { findPMO } from './find-pmo.js';
18
+ export { getPMOContext } from './pmo-context.js';
19
+ export { PMOCommand, pmoBaseFlags } from './base-command.js';
20
+ export { PMO_TABLES, PMO_TABLE_SCHEMAS, PMO_INDEXES, PMO_SCHEMA_SQL, EXPECTED_TICKET_COLUMNS, validateTicketSchema, } from './schema.js';
21
+ /**
22
+ * Get available board templates
23
+ */
24
+ export function getBoardTemplates() {
25
+ return {
26
+ // Linear-style: Simple workflow with Planned for scheduled work
27
+ kanban: ['Backlog', 'Planned', 'In Progress', 'Done'],
28
+ // Linear-style with Triage and Review columns
29
+ linear: ['Backlog', 'Triage', 'Todo', 'In Progress', 'In Review', 'Done'],
30
+ // Bug tracking workflow
31
+ 'bug-smash': ['Reported', 'Confirmed', 'Fixing', 'Verifying', 'Fixed'],
32
+ // Founder template: 5-tool backlogs (by work type) + workflow stages
33
+ '5-tool-founder': [
34
+ 'Ship', 'Grow', 'Support', 'Strategy', 'BizOps',
35
+ 'In Progress', 'Review', 'Done'
36
+ ],
37
+ // Go-to-market workflow
38
+ 'gtm': ['Ideation', 'Planning', 'In Development', 'Ready to Launch', 'Launched'],
39
+ // Legacy alias for founder
40
+ founder: [
41
+ 'SHIP BL', 'GROW BL', 'SUPPORT BL', 'BIZOPS BL', 'STRATEGY BL',
42
+ 'Planned', 'In Progress', 'Done', 'Dropped'
43
+ ],
44
+ custom: [] // Will be handled separately
45
+ };
46
+ }
47
+ /**
48
+ * Get column settings for work commands based on board template.
49
+ * These settings determine which columns are used for:
50
+ * - work start: moves ticket to column_in_progress
51
+ * - work ready: moves ticket to column_review
52
+ * - work complete: moves ticket to column_done
53
+ *
54
+ * For custom templates, we try to find matching columns by keyword.
55
+ */
56
+ export function getColumnSettingsForTemplate(template, columns) {
57
+ // Template-specific mappings (Linear-style: planned -> in_progress -> done)
58
+ const templateMappings = {
59
+ kanban: {
60
+ column_planned: 'Planned',
61
+ column_in_progress: 'In Progress',
62
+ column_done: 'Done',
63
+ },
64
+ linear: {
65
+ column_planned: 'Todo',
66
+ column_in_progress: 'In Progress',
67
+ column_done: 'Done',
68
+ },
69
+ 'bug-smash': {
70
+ column_planned: 'Confirmed',
71
+ column_in_progress: 'Fixing',
72
+ column_done: 'Fixed',
73
+ },
74
+ '5-tool-founder': {
75
+ column_planned: 'Ship',
76
+ column_in_progress: 'In Progress',
77
+ column_done: 'Done',
78
+ },
79
+ 'gtm': {
80
+ column_planned: 'Planning',
81
+ column_in_progress: 'In Development',
82
+ column_done: 'Launched',
83
+ },
84
+ founder: {
85
+ column_planned: 'Planned',
86
+ column_in_progress: 'In Progress',
87
+ column_done: 'Done',
88
+ },
89
+ };
90
+ // Use template mapping if available
91
+ if (templateMappings[template]) {
92
+ return templateMappings[template];
93
+ }
94
+ // For custom templates, try to find matching columns by keyword
95
+ const findColumn = (keywords, fallback) => {
96
+ const lowerColumns = columns.map(c => c.toLowerCase());
97
+ for (const keyword of keywords) {
98
+ const idx = lowerColumns.findIndex(c => c.includes(keyword));
99
+ if (idx !== -1)
100
+ return columns[idx];
101
+ }
102
+ return fallback;
103
+ };
104
+ return {
105
+ column_planned: findColumn(['planned', 'ready', 'scheduled', 'todo'], columns[1] || 'Planned'),
106
+ column_in_progress: findColumn(['progress', 'active', 'doing', 'working'], columns[2] || 'In Progress'),
107
+ column_done: findColumn(['done', 'complete', 'finished', 'published', 'shipped'], columns[columns.length - 1] || 'Done'),
108
+ };
109
+ }
110
+ /**
111
+ * Detect repositories in an HQ
112
+ */
113
+ export function detectRepos(hqRoot) {
114
+ const reposDir = path.join(hqRoot, 'repos');
115
+ if (!fs.existsSync(reposDir)) {
116
+ return [];
117
+ }
118
+ const entries = fs.readdirSync(reposDir, { withFileTypes: true });
119
+ return entries
120
+ .filter(entry => entry.isDirectory())
121
+ .map(entry => ({
122
+ name: entry.name,
123
+ path: path.join(reposDir, entry.name),
124
+ }));
125
+ }
126
+ /**
127
+ * Prompt for PMO location (in-repo vs separate)
128
+ */
129
+ export async function promptForPMOLocation(hqRoot) {
130
+ if (!hqRoot) {
131
+ return 'separate';
132
+ }
133
+ const repos = detectRepos(hqRoot);
134
+ if (repos.length === 0) {
135
+ return 'separate';
136
+ }
137
+ else if (repos.length === 1) {
138
+ const { location } = await inquirer.prompt([{
139
+ type: 'list',
140
+ name: 'location',
141
+ message: 'PMO location:',
142
+ choices: [
143
+ {
144
+ name: `Inside repo (${repos[0].name}/pmo)`,
145
+ value: `repo:${repos[0].name}`,
146
+ },
147
+ {
148
+ name: 'Separate from repo (hq/pmo)',
149
+ value: 'separate',
150
+ },
151
+ ],
152
+ default: `repo:${repos[0].name}`,
153
+ }]);
154
+ return location;
155
+ }
156
+ else {
157
+ const { location } = await inquirer.prompt([{
158
+ type: 'list',
159
+ name: 'location',
160
+ message: 'PMO location:',
161
+ choices: [
162
+ {
163
+ name: 'Separate from repos (recommended for multi-repo HQs)',
164
+ value: 'separate',
165
+ },
166
+ new inquirer.Separator(),
167
+ ...repos.map(repo => ({
168
+ name: `Inside ${repo.name} repo`,
169
+ value: `repo:${repo.name}`,
170
+ })),
171
+ ],
172
+ default: 'separate',
173
+ }]);
174
+ return location;
175
+ }
176
+ }
177
+ /**
178
+ * Prompt for board template
179
+ */
180
+ export async function promptForBoardTemplate() {
181
+ const { template } = await inquirer.prompt([{
182
+ type: 'list',
183
+ name: 'template',
184
+ message: 'Choose board template:',
185
+ choices: [
186
+ { name: 'Kanban - Backlog → Planned → In Progress → Done', value: 'kanban' },
187
+ { name: 'Linear - Backlog, Triage, Todo, In Progress, In Review, Done', value: 'linear' },
188
+ { name: 'Bug Smash - Reported → Confirmed → Fixing → Verifying → Fixed', value: 'bug-smash' },
189
+ { name: '5-Tool Founder - Ship, Grow, Support, Strategy, BizOps → In Progress → Review → Done', value: '5-tool-founder' },
190
+ { name: 'GTM - Ideation → Planning → In Development → Ready to Launch → Launched', value: 'gtm' },
191
+ { name: 'Custom (define your own columns)', value: 'custom' },
192
+ ],
193
+ default: 'kanban',
194
+ }]);
195
+ return template;
196
+ }
197
+ /**
198
+ * Prompt for custom columns
199
+ */
200
+ export async function promptForCustomColumns() {
201
+ const { columnsInput } = await inquirer.prompt([{
202
+ type: 'input',
203
+ name: 'columnsInput',
204
+ message: 'Enter column names (comma-separated):',
205
+ default: 'Backlog, In Progress, Done',
206
+ validate: (input) => {
207
+ const cols = input.split(',').map(c => c.trim()).filter(Boolean);
208
+ if (cols.length < 2) {
209
+ return 'Please enter at least 2 columns';
210
+ }
211
+ return true;
212
+ },
213
+ }]);
214
+ return columnsInput.split(',').map((c) => c.trim()).filter(Boolean);
215
+ }
216
+ /**
217
+ * Prompt for board name
218
+ */
219
+ export async function promptForBoardName(defaultName) {
220
+ const { name } = await inquirer.prompt([{
221
+ type: 'input',
222
+ name: 'name',
223
+ message: 'Board name:',
224
+ default: defaultName || 'Project Board',
225
+ }]);
226
+ return name;
227
+ }
228
+ /**
229
+ * Full PMO setup prompt - used by both `prlt init` and `prlt pmo init`
230
+ *
231
+ * PMO is included by default (no prompt) per TKT-469 requirements.
232
+ */
233
+ export async function promptForPMOSetup(hqRoot, hqName) {
234
+ // PMO is always included by default (R5 - no prompt)
235
+ console.log(chalk.blue('\n📋 Setting up PMO (project management)...\n'));
236
+ // PMO location (in-repo vs separate)
237
+ const location = await promptForPMOLocation(hqRoot);
238
+ // Board template
239
+ const boardTemplate = await promptForBoardTemplate();
240
+ // Get columns for template (or prompt for custom)
241
+ let columns = getColumnsForTemplate(boardTemplate);
242
+ if (boardTemplate === 'custom') {
243
+ columns = await promptForCustomColumns();
244
+ }
245
+ // Board name - default to {hqname}-kanban (can be changed later via `prlt project rename`)
246
+ const boardName = hqName ? `${hqName}-kanban` : 'Project Board';
247
+ return {
248
+ includePMO: true,
249
+ boardTemplate,
250
+ storageType: 'sqlite', // Always SQLite now
251
+ location,
252
+ boardName,
253
+ columns,
254
+ };
255
+ }
256
+ /**
257
+ * Get columns for a board template
258
+ */
259
+ export function getColumnsForTemplate(template) {
260
+ const templates = getBoardTemplates();
261
+ return templates[template] || templates.kanban;
262
+ }
263
+ /**
264
+ * Create board content for Obsidian Kanban
265
+ */
266
+ export function createBoardContent(template, boardName) {
267
+ const columns = getColumnsForTemplate(template);
268
+ const icons = {
269
+ // Linear-style workflow
270
+ 'Backlog': '📥',
271
+ 'Planned': '📋',
272
+ 'In Progress': '🚀',
273
+ 'Done': '✅',
274
+ 'Canceled': '🚫',
275
+ // 5-Tool Founder backlogs
276
+ 'SHIP BL': '🚢',
277
+ 'GROW BL': '📈',
278
+ 'SUPPORT BL': '🛟',
279
+ 'BIZOPS BL': '⚙️',
280
+ 'STRATEGY BL': '🎯',
281
+ // 5-Tool Founder workflow
282
+ 'Dropped': '🗑️',
283
+ };
284
+ let content = '---\nkanban-plugin: obsidian-kanban\n---\n\n';
285
+ // Add board title (matches parser expectation for `# Title` line)
286
+ if (boardName) {
287
+ content += `# ${boardName}\n\n`;
288
+ }
289
+ for (const column of columns) {
290
+ const icon = icons[column] || '📋';
291
+ content += `## ${icon} ${column}\n\n`;
292
+ }
293
+ return content;
294
+ }
295
+ /**
296
+ * Determine PMO path based on location setting
297
+ */
298
+ export function determinePMOPath(hqPath, location) {
299
+ if (location === 'separate') {
300
+ return path.join(hqPath, 'pmo');
301
+ }
302
+ else if (location.startsWith('repo:')) {
303
+ const repoName = location.substring(5);
304
+ return path.join(hqPath, 'repos', repoName, 'pmo');
305
+ }
306
+ throw new Error(`Invalid PMO location: ${location}`);
307
+ }
308
+ /**
309
+ * Create PMO structure in HQ
310
+ *
311
+ * Used by both `prlt init` and `prlt pmo init` for consistent behavior.
312
+ *
313
+ * Structure:
314
+ * - PMO data is stored in workspace.db (pmo_* tables)
315
+ * - Boards live in pmo/projects/{id}/board.md
316
+ * - Specs live in pmo/projects/{id}/specs/{active,complete,future,dropped}
317
+ */
318
+ export async function createPMO(options) {
319
+ const { hqPath, location, boardTemplate, boardName, columns, } = options;
320
+ console.log(chalk.blue('Creating PMO structure...'));
321
+ // Determine PMO path based on location
322
+ const pmoPath = determinePMOPath(hqPath, location);
323
+ // Generate project ID from board name
324
+ const projectId = slugify(boardName);
325
+ // Create PMO directory
326
+ fs.mkdirSync(pmoPath, { recursive: true });
327
+ // Initialize workspace.db with PMO tables
328
+ const dbPath = path.join(hqPath, '.proletariat', 'workspace.db');
329
+ if (!fs.existsSync(dbPath)) {
330
+ throw new Error(`workspace.db not found. Run 'prlt init' first.`);
331
+ }
332
+ const storage = new SQLiteStorage(dbPath);
333
+ // Create project
334
+ await storage.createProject({
335
+ id: projectId,
336
+ name: boardName,
337
+ description: `Project for ${boardName}`,
338
+ template: boardTemplate,
339
+ });
340
+ // Initialize board with columns (projectId already created above)
341
+ await storage.init(projectId, {
342
+ name: boardName,
343
+ columns,
344
+ });
345
+ // For custom templates, create statuses from columns
346
+ // (built-in templates have statuses created via applyTemplate in createProject)
347
+ if (boardTemplate === 'custom' && columns) {
348
+ for (let i = 0; i < columns.length; i++) {
349
+ const name = columns[i];
350
+ const nameLower = name.toLowerCase();
351
+ // Infer category from column name
352
+ let category = 'backlog';
353
+ if (nameLower.includes('done') || nameLower.includes('complete') || nameLower.includes('shipped')) {
354
+ category = 'completed';
355
+ }
356
+ else if (nameLower.includes('progress') || nameLower.includes('review') || nameLower.includes('active')) {
357
+ category = 'started';
358
+ }
359
+ else if (nameLower.includes('todo') || nameLower.includes('to do') || nameLower.includes('planned') || nameLower.includes('next')) {
360
+ category = 'unstarted';
361
+ }
362
+ else if (nameLower.includes('cancel') || nameLower.includes('archived')) {
363
+ category = 'canceled';
364
+ }
365
+ // Default: backlog (for first columns, custom backlogs, etc.)
366
+ await storage.createStatus(projectId, {
367
+ name,
368
+ category,
369
+ position: i,
370
+ isDefault: i === 0,
371
+ });
372
+ }
373
+ }
374
+ // Save PMO path and column settings (relative to HQ root for container compatibility)
375
+ try {
376
+ const db = new (await import('better-sqlite3')).default(dbPath);
377
+ // Store relative path from HQ root (e.g., "pmo" or "repos/myrepo/pmo")
378
+ const relativePmoPath = path.relative(hqPath, pmoPath);
379
+ db.prepare('INSERT OR REPLACE INTO pmo_settings (key, value) VALUES (?, ?)').run('pmo_path', relativePmoPath);
380
+ // Set column settings based on template
381
+ // These determine which columns work commands use for transitions
382
+ const columnSettings = getColumnSettingsForTemplate(boardTemplate, columns);
383
+ for (const [key, value] of Object.entries(columnSettings)) {
384
+ db.prepare('INSERT OR REPLACE INTO pmo_settings (key, value) VALUES (?, ?)').run(key, value);
385
+ }
386
+ db.close();
387
+ }
388
+ catch {
389
+ // Ignore if settings table doesn't exist
390
+ }
391
+ await storage.close();
392
+ console.log(chalk.green(' ✓ PMO tables initialized in workspace.db'));
393
+ console.log(chalk.green(` ✓ Project "${projectId}" created`));
394
+ // Create project folder structure: pmo/projects/{projectId}/
395
+ const projectPath = path.join(pmoPath, 'projects', projectId);
396
+ fs.mkdirSync(projectPath, { recursive: true });
397
+ // Create spec folders in project directory
398
+ createSpecFolders(pmoPath, projectId);
399
+ console.log(chalk.green(' ✓ Spec folders created'));
400
+ // Create kanban.md in project directory with board name as title
401
+ const boardFileName = 'kanban.md';
402
+ const boardContent = createBoardContent(boardTemplate, boardName);
403
+ const boardFilePath = path.join(projectPath, boardFileName);
404
+ fs.writeFileSync(boardFilePath, boardContent);
405
+ console.log(chalk.green(` ✓ ${boardFileName} created`));
406
+ // Create README for PMO
407
+ const readmeContent = `# PMO (Project Management Office)
408
+
409
+ ## Template: ${boardTemplate}
410
+
411
+ ## Structure
412
+
413
+ ### product/ - Living Product Definitions
414
+ Specs, requirements, and architecture docs that define WHAT the product should do.
415
+ These don't move through lifecycle - they get updated in place as the product evolves.
416
+
417
+ ### projects/{id}/ - Implementation Work
418
+ Work that flows through a lifecycle to build the product.
419
+
420
+ \`\`\`
421
+ pmo/
422
+ ├── product/ # WHAT (specs, requirements, architecture)
423
+ │ ├── init-commands.md # How init should work
424
+ │ ├── ticket-commands.md # How tickets should work
425
+ │ └── architecture.md # System design
426
+
427
+ └── projects/
428
+ └── {project-id}/
429
+ ├── {project-id}-kanban.md # Kanban board (Obsidian compatible)
430
+ └── epics/ # Implementation work
431
+ ├── draft/ # Planning phase
432
+ ├── active/ # Currently implementing
433
+ └── complete/ # Done
434
+ \`\`\`
435
+
436
+ ## Commands
437
+ \`\`\`bash
438
+ # Create ticket
439
+ prlt ticket create --title "My ticket" --column "Backlog"
440
+
441
+ # List tickets
442
+ prlt ticket list
443
+ prlt ticket list --column "In Progress"
444
+
445
+ # Move ticket
446
+ prlt ticket move <ticket-id> "In Progress"
447
+
448
+ # View board
449
+ prlt board view
450
+ \`\`\`
451
+
452
+ ## Columns
453
+ ${columns.join(', ')}
454
+
455
+ ## Obsidian Setup
456
+ 1. Open this folder as an Obsidian vault
457
+ 2. Install the "Kanban" plugin
458
+ 3. Open ${projectId}-kanban.md and switch to Kanban view
459
+ `;
460
+ fs.writeFileSync(path.join(pmoPath, 'README.md'), readmeContent);
461
+ // Create devcontainer for separate PMO (it's its own repo)
462
+ if (location === 'separate') {
463
+ console.log(chalk.blue('Creating devcontainer config for PMO...'));
464
+ createDevcontainerConfig({
465
+ agentName: 'pmo',
466
+ agentDir: pmoPath,
467
+ repoWorktrees: [], // PMO is the repo itself, no nested worktrees
468
+ });
469
+ console.log(chalk.green(' ✓ Devcontainer config created'));
470
+ }
471
+ const locationDesc = location === 'separate' ? 'hq/pmo' : location.replace('repo:', '') + '/pmo';
472
+ console.log(chalk.green(`✅ PMO created at ${locationDesc} with ${boardTemplate} template`));
473
+ }
474
+ /**
475
+ * Update HQ config to include PMO
476
+ */
477
+ export function updateHQConfigWithPMO(hqPath) {
478
+ const configPath = path.join(hqPath, '.proletariat', 'config.json');
479
+ const config = JSON.parse(fs.readFileSync(configPath, 'utf-8'));
480
+ config.hasPMO = true;
481
+ fs.writeFileSync(configPath, JSON.stringify(config, null, 2));
482
+ }
483
+ /**
484
+ * Check if PMO exists in HQ by checking workspace.db for pmo_projects table
485
+ */
486
+ export function hasPMO(hqPath) {
487
+ const dbPath = path.join(hqPath, '.proletariat', 'workspace.db');
488
+ if (!fs.existsSync(dbPath)) {
489
+ return false;
490
+ }
491
+ try {
492
+ const Database = require('better-sqlite3');
493
+ const db = new Database(dbPath);
494
+ const result = db.prepare("SELECT name FROM sqlite_master WHERE type='table' AND name='pmo_projects'").get();
495
+ db.close();
496
+ return result !== undefined;
497
+ }
498
+ catch {
499
+ return false;
500
+ }
501
+ }
@@ -0,0 +1,31 @@
1
+ /**
2
+ * PMO Markdown Parser and Generator
3
+ *
4
+ * Handles conversion between Obsidian Kanban markdown format and Board objects.
5
+ */
6
+ import { Board, Ticket } from './types.js';
7
+ /**
8
+ * Parse an Obsidian Kanban markdown board into a Board object
9
+ * @param markdown The markdown content
10
+ * @param projectId The project ID to use (defaults to 'default')
11
+ */
12
+ export declare function parseBoard(markdown: string, projectId?: string): Board;
13
+ /**
14
+ * Generate Obsidian Kanban markdown from a Board object
15
+ */
16
+ export declare function generateBoardMarkdown(board: Board): string;
17
+ /**
18
+ * Find tickets that exist in newBoard but not in oldBoard
19
+ */
20
+ export declare function findAddedTickets(oldBoard: Board, newBoard: Board): Ticket[];
21
+ /**
22
+ * Find tickets that exist in oldBoard but not in newBoard
23
+ */
24
+ export declare function findRemovedTickets(oldBoard: Board, newBoard: Board): Ticket[];
25
+ /**
26
+ * Find tickets that changed between boards
27
+ */
28
+ export declare function findModifiedTickets(oldBoard: Board, newBoard: Board): Array<{
29
+ old: Ticket;
30
+ new: Ticket;
31
+ }>;