@proletariat/cli 0.3.93 → 0.3.94

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 (374) hide show
  1. package/dist/commands/action/create.d.ts +1 -1
  2. package/dist/commands/action/delete.d.ts +1 -1
  3. package/dist/commands/action/index.d.ts +1 -1
  4. package/dist/commands/action/list.d.ts +1 -1
  5. package/dist/commands/action/run.d.ts +1 -1
  6. package/dist/commands/action/show.d.ts +1 -1
  7. package/dist/commands/action/update.d.ts +1 -1
  8. package/dist/commands/agent/cleanup.d.ts +1 -1
  9. package/dist/commands/agent/gc.d.ts +1 -1
  10. package/dist/commands/agent/index.d.ts +1 -1
  11. package/dist/commands/agent/list.d.ts +1 -1
  12. package/dist/commands/agent/login.d.ts +1 -1
  13. package/dist/commands/agent/rebuild.d.ts +1 -1
  14. package/dist/commands/agent/remove.d.ts +1 -1
  15. package/dist/commands/agent/restart.d.ts +1 -1
  16. package/dist/commands/agent/shell.d.ts +1 -1
  17. package/dist/commands/agent/staff/index.d.ts +1 -1
  18. package/dist/commands/agent/staff/remove.d.ts +1 -1
  19. package/dist/commands/agent/status.d.ts +1 -1
  20. package/dist/commands/agent/visit.d.ts +1 -1
  21. package/dist/commands/asana/import.d.ts +1 -1
  22. package/dist/commands/branch/create.d.ts +1 -1
  23. package/dist/commands/branch/index.d.ts +1 -1
  24. package/dist/commands/branch/list.d.ts +1 -1
  25. package/dist/commands/branch/validate.d.ts +1 -1
  26. package/dist/commands/branch/where.d.ts +1 -1
  27. package/dist/commands/config/index.js +2 -2
  28. package/dist/commands/config/index.js.map +1 -1
  29. package/dist/commands/diet.d.ts +1 -1
  30. package/dist/commands/docker/index.js +2 -0
  31. package/dist/commands/docker/index.js.map +1 -1
  32. package/dist/commands/docker/rebuild-cache.d.ts +12 -0
  33. package/dist/commands/docker/rebuild-cache.js +144 -0
  34. package/dist/commands/docker/rebuild-cache.js.map +1 -0
  35. package/dist/commands/execution/config.d.ts +1 -1
  36. package/dist/commands/execution/index.d.ts +1 -1
  37. package/dist/commands/execution/list.d.ts +1 -1
  38. package/dist/commands/execution/logs.d.ts +1 -1
  39. package/dist/commands/execution/stop.d.ts +1 -1
  40. package/dist/commands/execution/view.d.ts +1 -1
  41. package/dist/commands/hook/export.d.ts +1 -1
  42. package/dist/commands/hook/fire.d.ts +1 -1
  43. package/dist/commands/hook/index.d.ts +1 -1
  44. package/dist/commands/hook/list.d.ts +1 -1
  45. package/dist/commands/hook/preset.d.ts +1 -1
  46. package/dist/commands/linear/auth.d.ts +1 -1
  47. package/dist/commands/linear/connect.d.ts +1 -1
  48. package/dist/commands/linear/import.d.ts +1 -1
  49. package/dist/commands/linear/status.d.ts +1 -1
  50. package/dist/commands/linear/sync.d.ts +1 -1
  51. package/dist/commands/mcp-server.d.ts +8 -2
  52. package/dist/commands/mcp-server.js +15 -28
  53. package/dist/commands/mcp-server.js.map +1 -1
  54. package/dist/commands/monday/connect.d.ts +1 -1
  55. package/dist/commands/monday/sync.d.ts +1 -1
  56. package/dist/commands/orchestrate/index.d.ts +1 -1
  57. package/dist/commands/orchestrator/index.d.ts +1 -1
  58. package/dist/commands/orchestrator/start.d.ts +3 -3
  59. package/dist/commands/orchestrator/start.js +38 -40
  60. package/dist/commands/orchestrator/start.js.map +1 -1
  61. package/dist/commands/pr/checks.d.ts +1 -1
  62. package/dist/commands/pr/close.d.ts +1 -1
  63. package/dist/commands/pr/create.d.ts +1 -1
  64. package/dist/commands/pr/index.d.ts +1 -1
  65. package/dist/commands/pr/link.d.ts +1 -1
  66. package/dist/commands/pr/list.d.ts +1 -1
  67. package/dist/commands/pr/merge.d.ts +1 -1
  68. package/dist/commands/pr/status.d.ts +1 -1
  69. package/dist/commands/pull.d.ts +1 -1
  70. package/dist/commands/repo/add.d.ts +1 -1
  71. package/dist/commands/repo/create.d.ts +1 -1
  72. package/dist/commands/repo/fix-remotes.d.ts +1 -1
  73. package/dist/commands/repo/index.d.ts +1 -1
  74. package/dist/commands/repo/list.d.ts +1 -1
  75. package/dist/commands/repo/remove.d.ts +1 -1
  76. package/dist/commands/repo/view.d.ts +1 -1
  77. package/dist/commands/session/attach.d.ts +1 -1
  78. package/dist/commands/session/cleanup.d.ts +1 -1
  79. package/dist/commands/session/create.d.ts +1 -1
  80. package/dist/commands/session/exec.d.ts +1 -1
  81. package/dist/commands/session/health.d.ts +1 -1
  82. package/dist/commands/session/index.d.ts +1 -1
  83. package/dist/commands/session/inspect.d.ts +1 -1
  84. package/dist/commands/session/list.d.ts +1 -1
  85. package/dist/commands/session/peek.d.ts +1 -1
  86. package/dist/commands/session/prune.d.ts +1 -1
  87. package/dist/commands/session/report.d.ts +1 -1
  88. package/dist/commands/session/restart.d.ts +1 -1
  89. package/dist/commands/shortcut/connect.d.ts +1 -1
  90. package/dist/commands/support/logs.d.ts +1 -1
  91. package/dist/commands/ticket/create.d.ts +1 -1
  92. package/dist/commands/ticket/delete.d.ts +1 -1
  93. package/dist/commands/ticket/edit.d.ts +1 -1
  94. package/dist/commands/ticket/index.d.ts +1 -1
  95. package/dist/commands/ticket/index.js +6 -36
  96. package/dist/commands/ticket/index.js.map +1 -1
  97. package/dist/commands/ticket/list.d.ts +1 -1
  98. package/dist/commands/ticket/move.d.ts +1 -1
  99. package/dist/commands/ticket/show.d.ts +8 -7
  100. package/dist/commands/ticket/show.js +101 -8
  101. package/dist/commands/ticket/show.js.map +1 -1
  102. package/dist/commands/ticket/update.d.ts +1 -1
  103. package/dist/commands/trello/configure.d.ts +1 -1
  104. package/dist/commands/trello/import.d.ts +1 -1
  105. package/dist/commands/trello/sync.d.ts +1 -1
  106. package/dist/commands/work/asana.d.ts +1 -1
  107. package/dist/commands/work/complete.d.ts +1 -1
  108. package/dist/commands/work/groom.d.ts +1 -1
  109. package/dist/commands/work/hooks/add.d.ts +1 -1
  110. package/dist/commands/work/hooks/index.d.ts +1 -1
  111. package/dist/commands/work/hooks/list.d.ts +1 -1
  112. package/dist/commands/work/hooks/remove.d.ts +1 -1
  113. package/dist/commands/work/hooks/toggle.d.ts +1 -1
  114. package/dist/commands/work/implement.d.ts +1 -1
  115. package/dist/commands/work/index.d.ts +1 -1
  116. package/dist/commands/work/jira.d.ts +1 -1
  117. package/dist/commands/work/linear.d.ts +1 -1
  118. package/dist/commands/work/peek.d.ts +1 -1
  119. package/dist/commands/work/ready.d.ts +1 -1
  120. package/dist/commands/work/rebase.d.ts +1 -1
  121. package/dist/commands/work/resolve.d.ts +1 -1
  122. package/dist/commands/work/review.d.ts +1 -1
  123. package/dist/commands/work/ship.d.ts +1 -1
  124. package/dist/commands/work/shortcut.d.ts +1 -1
  125. package/dist/commands/work/source/set.d.ts +1 -1
  126. package/dist/commands/work/source.d.ts +1 -1
  127. package/dist/commands/work/spawn.d.ts +1 -1
  128. package/dist/commands/work/start.d.ts +1 -1
  129. package/dist/commands/work/status.d.ts +1 -1
  130. package/dist/commands/work/stop.d.ts +1 -1
  131. package/dist/commands/work/watch.d.ts +1 -1
  132. package/dist/hooks/init.js +1 -1
  133. package/dist/hooks/init.js.map +1 -1
  134. package/dist/lib/asana/config.js +13 -7
  135. package/dist/lib/asana/config.js.map +1 -1
  136. package/dist/lib/clickup/client.d.ts +92 -0
  137. package/dist/lib/clickup/client.js +150 -0
  138. package/dist/lib/clickup/client.js.map +1 -0
  139. package/dist/lib/clickup/config.d.ts +41 -0
  140. package/dist/lib/clickup/config.js +104 -0
  141. package/dist/lib/clickup/config.js.map +1 -0
  142. package/dist/lib/clickup/index.d.ts +4 -0
  143. package/dist/lib/clickup/index.js +4 -0
  144. package/dist/lib/clickup/index.js.map +1 -0
  145. package/dist/lib/clickup/types.d.ts +104 -0
  146. package/dist/lib/clickup/types.js +34 -0
  147. package/dist/lib/clickup/types.js.map +1 -0
  148. package/dist/lib/database/credential-store.d.ts +64 -0
  149. package/dist/lib/database/credential-store.js +306 -0
  150. package/dist/lib/database/credential-store.js.map +1 -0
  151. package/dist/lib/database/index.d.ts +1 -0
  152. package/dist/lib/database/index.js +2 -0
  153. package/dist/lib/database/index.js.map +1 -1
  154. package/dist/lib/database/pmo-bootstrap.d.ts +7 -0
  155. package/dist/lib/database/pmo-bootstrap.js +45 -20
  156. package/dist/lib/database/pmo-bootstrap.js.map +1 -1
  157. package/dist/lib/database/workspace.js +4 -0
  158. package/dist/lib/database/workspace.js.map +1 -1
  159. package/dist/lib/execution/devcontainer.js +51 -0
  160. package/dist/lib/execution/devcontainer.js.map +1 -1
  161. package/dist/lib/execution/runners/docker-management.d.ts +23 -0
  162. package/dist/lib/execution/runners/docker-management.js +99 -7
  163. package/dist/lib/execution/runners/docker-management.js.map +1 -1
  164. package/dist/lib/execution/session-utils.d.ts +4 -0
  165. package/dist/lib/execution/session-utils.js +34 -24
  166. package/dist/lib/execution/session-utils.js.map +1 -1
  167. package/dist/lib/execution/types.js +1 -1
  168. package/dist/lib/external-issues/types.d.ts +3 -3
  169. package/dist/lib/external-issues/types.js +1 -1
  170. package/dist/lib/external-issues/types.js.map +1 -1
  171. package/dist/lib/jira/config.js +10 -4
  172. package/dist/lib/jira/config.js.map +1 -1
  173. package/dist/lib/linear/config.js +13 -8
  174. package/dist/lib/linear/config.js.map +1 -1
  175. package/dist/lib/mcp/generator.d.ts +26 -0
  176. package/dist/lib/mcp/generator.js +219 -0
  177. package/dist/lib/mcp/generator.js.map +1 -0
  178. package/dist/lib/mcp/index.d.ts +1 -0
  179. package/dist/lib/mcp/index.js +1 -0
  180. package/dist/lib/mcp/index.js.map +1 -1
  181. package/dist/lib/mcp/tools/index.d.ts +0 -11
  182. package/dist/lib/mcp/tools/index.js +0 -11
  183. package/dist/lib/mcp/tools/index.js.map +1 -1
  184. package/dist/lib/mcp/tools/overrides/index.d.ts +23 -0
  185. package/dist/lib/mcp/tools/overrides/index.js +30 -0
  186. package/dist/lib/mcp/tools/overrides/index.js.map +1 -0
  187. package/dist/lib/mcp/tools/overrides/tmux.d.ts +11 -0
  188. package/dist/lib/mcp/tools/overrides/tmux.js +184 -0
  189. package/dist/lib/mcp/tools/overrides/tmux.js.map +1 -0
  190. package/dist/lib/mcp/tools/overrides/work-start.d.ts +12 -0
  191. package/dist/lib/mcp/tools/overrides/work-start.js +108 -0
  192. package/dist/lib/mcp/tools/overrides/work-start.js.map +1 -0
  193. package/dist/lib/mcp/tools/ticket.js +10 -48
  194. package/dist/lib/mcp/tools/ticket.js.map +1 -1
  195. package/dist/lib/monday/config.js +11 -5
  196. package/dist/lib/monday/config.js.map +1 -1
  197. package/dist/lib/pmo/base-command.d.ts +20 -152
  198. package/dist/lib/pmo/base-command.js +32 -198
  199. package/dist/lib/pmo/base-command.js.map +1 -1
  200. package/dist/lib/pmo/index.d.ts +1 -0
  201. package/dist/lib/pmo/index.js +3 -0
  202. package/dist/lib/pmo/index.js.map +1 -1
  203. package/dist/lib/pmo/storage/base.d.ts +0 -18
  204. package/dist/lib/pmo/storage/base.js +0 -231
  205. package/dist/lib/pmo/storage/base.js.map +1 -1
  206. package/dist/lib/pmo/storage/index.d.ts +1 -76
  207. package/dist/lib/pmo/storage/index.js +1 -215
  208. package/dist/lib/pmo/storage/index.js.map +1 -1
  209. package/dist/lib/pmo/storage/tickets.d.ts +2 -2
  210. package/dist/lib/pmo/storage/tickets.js +4 -34
  211. package/dist/lib/pmo/storage/tickets.js.map +1 -1
  212. package/dist/lib/pmo/types.d.ts +0 -37
  213. package/dist/lib/providers/clickup-provider.d.ts +28 -0
  214. package/dist/lib/providers/clickup-provider.js +353 -0
  215. package/dist/lib/providers/clickup-provider.js.map +1 -0
  216. package/dist/lib/providers/resolver.d.ts +1 -1
  217. package/dist/lib/providers/resolver.js +16 -5
  218. package/dist/lib/providers/resolver.js.map +1 -1
  219. package/dist/lib/providers/types.d.ts +1 -1
  220. package/dist/lib/runners/claude-code-runner.js +13 -4
  221. package/dist/lib/runners/claude-code-runner.js.map +1 -1
  222. package/dist/lib/runtime-command.d.ts +219 -0
  223. package/dist/lib/runtime-command.js +320 -0
  224. package/dist/lib/runtime-command.js.map +1 -0
  225. package/dist/lib/shortcut/config.js +13 -7
  226. package/dist/lib/shortcut/config.js.map +1 -1
  227. package/dist/lib/trello/config.js +17 -12
  228. package/dist/lib/trello/config.js.map +1 -1
  229. package/dist/lib/work-lifecycle/events.d.ts +1 -1
  230. package/dist/lib/work-source/config.d.ts +1 -1
  231. package/dist/lib/work-source/config.js +11 -1
  232. package/dist/lib/work-source/config.js.map +1 -1
  233. package/dist/lib/work-source/provider-sources.js +6 -1
  234. package/dist/lib/work-source/provider-sources.js.map +1 -1
  235. package/oclif.manifest.json +3015 -4827
  236. package/package.json +1 -1
  237. package/dist/commands/board/index.d.ts +0 -21
  238. package/dist/commands/board/index.js +0 -263
  239. package/dist/commands/board/index.js.map +0 -1
  240. package/dist/commands/board/view.d.ts +0 -15
  241. package/dist/commands/board/view.js +0 -137
  242. package/dist/commands/board/view.js.map +0 -1
  243. package/dist/commands/board/watch.d.ts +0 -15
  244. package/dist/commands/board/watch.js +0 -59
  245. package/dist/commands/board/watch.js.map +0 -1
  246. package/dist/commands/dashboard/index.d.ts +0 -14
  247. package/dist/commands/dashboard/index.js +0 -117
  248. package/dist/commands/dashboard/index.js.map +0 -1
  249. package/dist/commands/dashboard.d.ts +0 -38
  250. package/dist/commands/dashboard.js +0 -353
  251. package/dist/commands/dashboard.js.map +0 -1
  252. package/dist/commands/pmo/init.d.ts +0 -28
  253. package/dist/commands/pmo/init.js +0 -410
  254. package/dist/commands/pmo/init.js.map +0 -1
  255. package/dist/commands/project/archive.d.ts +0 -18
  256. package/dist/commands/project/archive.js +0 -79
  257. package/dist/commands/project/archive.js.map +0 -1
  258. package/dist/commands/project/create.d.ts +0 -24
  259. package/dist/commands/project/create.js +0 -191
  260. package/dist/commands/project/create.js.map +0 -1
  261. package/dist/commands/project/delete.d.ts +0 -18
  262. package/dist/commands/project/delete.js +0 -115
  263. package/dist/commands/project/delete.js.map +0 -1
  264. package/dist/commands/project/index.d.ts +0 -14
  265. package/dist/commands/project/index.js +0 -60
  266. package/dist/commands/project/index.js.map +0 -1
  267. package/dist/commands/project/list.d.ts +0 -16
  268. package/dist/commands/project/list.js +0 -115
  269. package/dist/commands/project/list.js.map +0 -1
  270. package/dist/commands/project/spec.d.ts +0 -19
  271. package/dist/commands/project/spec.js +0 -218
  272. package/dist/commands/project/spec.js.map +0 -1
  273. package/dist/commands/project/unarchive.d.ts +0 -17
  274. package/dist/commands/project/unarchive.js +0 -55
  275. package/dist/commands/project/unarchive.js.map +0 -1
  276. package/dist/commands/project/update.d.ts +0 -19
  277. package/dist/commands/project/update.js +0 -161
  278. package/dist/commands/project/update.js.map +0 -1
  279. package/dist/commands/project/view.d.ts +0 -17
  280. package/dist/commands/project/view.js +0 -107
  281. package/dist/commands/project/view.js.map +0 -1
  282. package/dist/commands/ticket/bulk.d.ts +0 -14
  283. package/dist/commands/ticket/bulk.js +0 -141
  284. package/dist/commands/ticket/bulk.js.map +0 -1
  285. package/dist/commands/ticket/cancel.d.ts +0 -17
  286. package/dist/commands/ticket/cancel.js +0 -206
  287. package/dist/commands/ticket/cancel.js.map +0 -1
  288. package/dist/commands/ticket/category.d.ts +0 -15
  289. package/dist/commands/ticket/category.js +0 -64
  290. package/dist/commands/ticket/category.js.map +0 -1
  291. package/dist/commands/ticket/complete.d.ts +0 -17
  292. package/dist/commands/ticket/complete.js +0 -193
  293. package/dist/commands/ticket/complete.js.map +0 -1
  294. package/dist/commands/ticket/epic.d.ts +0 -21
  295. package/dist/commands/ticket/epic.js +0 -306
  296. package/dist/commands/ticket/epic.js.map +0 -1
  297. package/dist/commands/ticket/link/block.d.ts +0 -15
  298. package/dist/commands/ticket/link/block.js +0 -96
  299. package/dist/commands/ticket/link/block.js.map +0 -1
  300. package/dist/commands/ticket/link/duplicates.d.ts +0 -15
  301. package/dist/commands/ticket/link/duplicates.js +0 -96
  302. package/dist/commands/ticket/link/duplicates.js.map +0 -1
  303. package/dist/commands/ticket/link/index.d.ts +0 -14
  304. package/dist/commands/ticket/link/index.js +0 -99
  305. package/dist/commands/ticket/link/index.js.map +0 -1
  306. package/dist/commands/ticket/link/relates.d.ts +0 -15
  307. package/dist/commands/ticket/link/relates.js +0 -96
  308. package/dist/commands/ticket/link/relates.js.map +0 -1
  309. package/dist/commands/ticket/project.d.ts +0 -19
  310. package/dist/commands/ticket/project.js +0 -257
  311. package/dist/commands/ticket/project.js.map +0 -1
  312. package/dist/commands/ticket/reassign.d.ts +0 -20
  313. package/dist/commands/ticket/reassign.js +0 -340
  314. package/dist/commands/ticket/reassign.js.map +0 -1
  315. package/dist/commands/ticket/resolve.d.ts +0 -68
  316. package/dist/commands/ticket/resolve.js +0 -306
  317. package/dist/commands/ticket/resolve.js.map +0 -1
  318. package/dist/commands/ticket/spec.d.ts +0 -19
  319. package/dist/commands/ticket/spec.js +0 -260
  320. package/dist/commands/ticket/spec.js.map +0 -1
  321. package/dist/commands/ticket/status.d.ts +0 -14
  322. package/dist/commands/ticket/status.js +0 -84
  323. package/dist/commands/ticket/status.js.map +0 -1
  324. package/dist/commands/ticket/view.d.ts +0 -14
  325. package/dist/commands/ticket/view.js +0 -113
  326. package/dist/commands/ticket/view.js.map +0 -1
  327. package/dist/lib/mcp/tools/board.d.ts +0 -6
  328. package/dist/lib/mcp/tools/board.js +0 -190
  329. package/dist/lib/mcp/tools/board.js.map +0 -1
  330. package/dist/lib/mcp/tools/category.d.ts +0 -6
  331. package/dist/lib/mcp/tools/category.js +0 -85
  332. package/dist/lib/mcp/tools/category.js.map +0 -1
  333. package/dist/lib/mcp/tools/epic.d.ts +0 -6
  334. package/dist/lib/mcp/tools/epic.js +0 -184
  335. package/dist/lib/mcp/tools/epic.js.map +0 -1
  336. package/dist/lib/mcp/tools/label.d.ts +0 -6
  337. package/dist/lib/mcp/tools/label.js +0 -339
  338. package/dist/lib/mcp/tools/label.js.map +0 -1
  339. package/dist/lib/mcp/tools/phase.d.ts +0 -6
  340. package/dist/lib/mcp/tools/phase.js +0 -132
  341. package/dist/lib/mcp/tools/phase.js.map +0 -1
  342. package/dist/lib/mcp/tools/project.d.ts +0 -6
  343. package/dist/lib/mcp/tools/project.js +0 -197
  344. package/dist/lib/mcp/tools/project.js.map +0 -1
  345. package/dist/lib/mcp/tools/roadmap.d.ts +0 -6
  346. package/dist/lib/mcp/tools/roadmap.js +0 -124
  347. package/dist/lib/mcp/tools/roadmap.js.map +0 -1
  348. package/dist/lib/mcp/tools/status.d.ts +0 -6
  349. package/dist/lib/mcp/tools/status.js +0 -110
  350. package/dist/lib/mcp/tools/status.js.map +0 -1
  351. package/dist/lib/mcp/tools/template.d.ts +0 -6
  352. package/dist/lib/mcp/tools/template.js +0 -108
  353. package/dist/lib/mcp/tools/template.js.map +0 -1
  354. package/dist/lib/mcp/tools/view.d.ts +0 -6
  355. package/dist/lib/mcp/tools/view.js +0 -77
  356. package/dist/lib/mcp/tools/view.js.map +0 -1
  357. package/dist/lib/mcp/tools/workflow.d.ts +0 -6
  358. package/dist/lib/mcp/tools/workflow.js +0 -96
  359. package/dist/lib/mcp/tools/workflow.js.map +0 -1
  360. package/dist/lib/pmo/storage/categories.d.ts +0 -50
  361. package/dist/lib/pmo/storage/categories.js +0 -206
  362. package/dist/lib/pmo/storage/categories.js.map +0 -1
  363. package/dist/lib/pmo/storage/labels.d.ts +0 -55
  364. package/dist/lib/pmo/storage/labels.js +0 -347
  365. package/dist/lib/pmo/storage/labels.js.map +0 -1
  366. package/dist/lib/pmo/storage/phases.d.ts +0 -65
  367. package/dist/lib/pmo/storage/phases.js +0 -393
  368. package/dist/lib/pmo/storage/phases.js.map +0 -1
  369. package/dist/lib/pmo/storage/roadmaps.d.ts +0 -64
  370. package/dist/lib/pmo/storage/roadmaps.js +0 -373
  371. package/dist/lib/pmo/storage/roadmaps.js.map +0 -1
  372. package/dist/lib/pmo/storage/views.d.ts +0 -57
  373. package/dist/lib/pmo/storage/views.js +0 -456
  374. package/dist/lib/pmo/storage/views.js.map +0 -1
@@ -1,347 +0,0 @@
1
- /**
2
- * Label storage operations for PMO.
3
- * Handles CRUD for labels, label groups, and ticket-label associations.
4
- * Enforces group exclusivity constraints.
5
- */
6
- import { PMO_TABLES } from '../schema.js';
7
- import { PMOError } from '../types.js';
8
- import { slugify } from '../utils.js';
9
- const T = PMO_TABLES;
10
- export class LabelStorage {
11
- ctx;
12
- constructor(ctx) {
13
- this.ctx = ctx;
14
- }
15
- // ===========================================================================
16
- // Label Group Operations
17
- // ===========================================================================
18
- async listLabelGroups(filter) {
19
- let query = `SELECT * FROM ${T.label_groups} WHERE 1=1`;
20
- const params = [];
21
- if (filter?.search) {
22
- query += ' AND (name LIKE ? OR description LIKE ?)';
23
- params.push(`%${filter.search}%`, `%${filter.search}%`);
24
- }
25
- query += ' ORDER BY position ASC, name ASC';
26
- const rows = this.ctx.db.prepare(query).all(...params);
27
- return rows.map(rowToLabelGroup);
28
- }
29
- async getLabelGroup(id) {
30
- const row = this.ctx.db.prepare(`SELECT * FROM ${T.label_groups} WHERE id = ?`).get(id);
31
- return row ? rowToLabelGroup(row) : null;
32
- }
33
- async getLabelGroupByName(name) {
34
- const row = this.ctx.db.prepare(`SELECT * FROM ${T.label_groups} WHERE LOWER(name) = LOWER(?)`).get(name);
35
- return row ? rowToLabelGroup(row) : null;
36
- }
37
- async createLabelGroup(group) {
38
- const id = group.id || slugify(group.name);
39
- // Check for duplicate name
40
- const existing = await this.getLabelGroupByName(group.name);
41
- if (existing) {
42
- throw new PMOError('CONFLICT', `Label group "${group.name}" already exists`);
43
- }
44
- // Get next position
45
- const maxPos = this.ctx.db.prepare(`SELECT COALESCE(MAX(position), -1) as max_pos FROM ${T.label_groups}`).get();
46
- const now = new Date().toISOString();
47
- this.ctx.db.prepare(`
48
- INSERT INTO ${T.label_groups} (id, name, description, is_exclusive, is_required, position, created_at)
49
- VALUES (?, ?, ?, ?, ?, ?, ?)
50
- `).run(id, group.name, group.description || null, group.isExclusive !== undefined ? (group.isExclusive ? 1 : 0) : 1, group.isRequired !== undefined ? (group.isRequired ? 1 : 0) : 0, group.position ?? maxPos.max_pos + 1, now);
51
- return (await this.getLabelGroup(id));
52
- }
53
- async updateLabelGroup(id, changes) {
54
- const existing = await this.getLabelGroup(id);
55
- if (!existing) {
56
- throw new PMOError('NOT_FOUND', `Label group not found: ${id}`);
57
- }
58
- const updates = [];
59
- const params = [];
60
- if (changes.name !== undefined) {
61
- updates.push('name = ?');
62
- params.push(changes.name);
63
- }
64
- if (changes.description !== undefined) {
65
- updates.push('description = ?');
66
- params.push(changes.description);
67
- }
68
- if (changes.isExclusive !== undefined) {
69
- updates.push('is_exclusive = ?');
70
- params.push(changes.isExclusive ? 1 : 0);
71
- }
72
- if (changes.isRequired !== undefined) {
73
- updates.push('is_required = ?');
74
- params.push(changes.isRequired ? 1 : 0);
75
- }
76
- if (changes.position !== undefined) {
77
- updates.push('position = ?');
78
- params.push(changes.position);
79
- }
80
- if (updates.length > 0) {
81
- params.push(id);
82
- this.ctx.db.prepare(`UPDATE ${T.label_groups} SET ${updates.join(', ')} WHERE id = ?`).run(...params);
83
- }
84
- return (await this.getLabelGroup(id));
85
- }
86
- async deleteLabelGroup(id) {
87
- const existing = await this.getLabelGroup(id);
88
- if (!existing) {
89
- throw new PMOError('NOT_FOUND', `Label group not found: ${id}`);
90
- }
91
- // Labels in this group will have group_id set to NULL (ON DELETE SET NULL)
92
- this.ctx.db.prepare(`DELETE FROM ${T.label_groups} WHERE id = ?`).run(id);
93
- }
94
- // ===========================================================================
95
- // Label Operations
96
- // ===========================================================================
97
- async listLabels(filter) {
98
- let query = `
99
- SELECT l.*, lg.name as group_name
100
- FROM ${T.labels} l
101
- LEFT JOIN ${T.label_groups} lg ON l.group_id = lg.id
102
- WHERE 1=1
103
- `;
104
- const params = [];
105
- if (filter?.groupId) {
106
- query += ' AND l.group_id = ?';
107
- params.push(filter.groupId);
108
- }
109
- if (filter?.search) {
110
- query += ' AND (l.name LIKE ? OR l.description LIKE ?)';
111
- params.push(`%${filter.search}%`, `%${filter.search}%`);
112
- }
113
- if (filter?.isBuiltin !== undefined) {
114
- query += ' AND l.is_builtin = ?';
115
- params.push(filter.isBuiltin ? 1 : 0);
116
- }
117
- query += ' ORDER BY lg.position ASC, l.position ASC, l.name ASC';
118
- const rows = this.ctx.db.prepare(query).all(...params);
119
- return rows.map(rowToLabel);
120
- }
121
- async getLabel(id) {
122
- const row = this.ctx.db.prepare(`
123
- SELECT l.*, lg.name as group_name
124
- FROM ${T.labels} l
125
- LEFT JOIN ${T.label_groups} lg ON l.group_id = lg.id
126
- WHERE l.id = ?
127
- `).get(id);
128
- return row ? rowToLabel(row) : null;
129
- }
130
- async getLabelByName(name, groupId) {
131
- let query = `
132
- SELECT l.*, lg.name as group_name
133
- FROM ${T.labels} l
134
- LEFT JOIN ${T.label_groups} lg ON l.group_id = lg.id
135
- WHERE LOWER(l.name) = LOWER(?)
136
- `;
137
- const params = [name];
138
- if (groupId) {
139
- query += ' AND l.group_id = ?';
140
- params.push(groupId);
141
- }
142
- const row = this.ctx.db.prepare(query).get(...params);
143
- return row ? rowToLabel(row) : null;
144
- }
145
- async createLabel(label) {
146
- const id = label.id || slugify(label.name);
147
- // Validate group if provided
148
- if (label.groupId) {
149
- const group = await this.getLabelGroup(label.groupId);
150
- if (!group) {
151
- throw new PMOError('NOT_FOUND', `Label group not found: ${label.groupId}`);
152
- }
153
- }
154
- // Get next position within group
155
- let maxPos;
156
- if (label.groupId) {
157
- maxPos = this.ctx.db.prepare(`SELECT COALESCE(MAX(position), -1) as max_pos FROM ${T.labels} WHERE group_id = ?`).get(label.groupId);
158
- }
159
- else {
160
- maxPos = this.ctx.db.prepare(`SELECT COALESCE(MAX(position), -1) as max_pos FROM ${T.labels} WHERE group_id IS NULL`).get();
161
- }
162
- const now = new Date().toISOString();
163
- try {
164
- this.ctx.db.prepare(`
165
- INSERT INTO ${T.labels} (id, name, color, description, group_id, position, is_builtin, created_at)
166
- VALUES (?, ?, ?, ?, ?, ?, ?, ?)
167
- `).run(id, label.name, label.color || null, label.description || null, label.groupId || null, label.position ?? maxPos.max_pos + 1, label.isBuiltin ? 1 : 0, now);
168
- }
169
- catch (err) {
170
- if (err instanceof Error && err.message.includes('UNIQUE constraint')) {
171
- throw new PMOError('CONFLICT', `Label "${label.name}" already exists in this group`);
172
- }
173
- throw err;
174
- }
175
- return (await this.getLabel(id));
176
- }
177
- async updateLabel(id, changes) {
178
- const existing = await this.getLabel(id);
179
- if (!existing) {
180
- throw new PMOError('NOT_FOUND', `Label not found: ${id}`);
181
- }
182
- const updates = [];
183
- const params = [];
184
- if (changes.name !== undefined) {
185
- updates.push('name = ?');
186
- params.push(changes.name);
187
- }
188
- if (changes.color !== undefined) {
189
- updates.push('color = ?');
190
- params.push(changes.color);
191
- }
192
- if (changes.description !== undefined) {
193
- updates.push('description = ?');
194
- params.push(changes.description);
195
- }
196
- if (changes.groupId !== undefined) {
197
- updates.push('group_id = ?');
198
- params.push(changes.groupId);
199
- }
200
- if (changes.position !== undefined) {
201
- updates.push('position = ?');
202
- params.push(changes.position);
203
- }
204
- if (updates.length > 0) {
205
- params.push(id);
206
- this.ctx.db.prepare(`UPDATE ${T.labels} SET ${updates.join(', ')} WHERE id = ?`).run(...params);
207
- }
208
- return (await this.getLabel(id));
209
- }
210
- async deleteLabel(id) {
211
- const existing = await this.getLabel(id);
212
- if (!existing) {
213
- throw new PMOError('NOT_FOUND', `Label not found: ${id}`);
214
- }
215
- // ticket_labels rows cascade on delete
216
- this.ctx.db.prepare(`DELETE FROM ${T.labels} WHERE id = ?`).run(id);
217
- }
218
- // ===========================================================================
219
- // Ticket-Label Association Operations
220
- // ===========================================================================
221
- /**
222
- * Add a label to a ticket.
223
- * Enforces group exclusivity: if the label belongs to an exclusive group,
224
- * removes any existing label from the same group first.
225
- */
226
- async addLabelToTicket(ticketId, labelId) {
227
- // Validate ticket exists
228
- const ticket = this.ctx.db.prepare(`SELECT id FROM ${T.tickets} WHERE id = ?`).get(ticketId);
229
- if (!ticket) {
230
- throw new PMOError('NOT_FOUND', `Ticket not found: ${ticketId}`);
231
- }
232
- // Get the label and its group info
233
- const label = await this.getLabel(labelId);
234
- if (!label) {
235
- throw new PMOError('NOT_FOUND', `Label not found: ${labelId}`);
236
- }
237
- // If label belongs to an exclusive group, enforce exclusivity
238
- if (label.groupId) {
239
- const group = await this.getLabelGroup(label.groupId);
240
- if (group?.isExclusive) {
241
- // Remove any existing labels from this group on this ticket
242
- this.ctx.db.prepare(`
243
- DELETE FROM ${T.ticket_labels}
244
- WHERE ticket_id = ? AND label_id IN (
245
- SELECT id FROM ${T.labels} WHERE group_id = ?
246
- )
247
- `).run(ticketId, label.groupId);
248
- }
249
- }
250
- // Add the label (ignore if already exists)
251
- this.ctx.db.prepare(`
252
- INSERT OR IGNORE INTO ${T.ticket_labels} (ticket_id, label_id)
253
- VALUES (?, ?)
254
- `).run(ticketId, labelId);
255
- }
256
- /**
257
- * Remove a label from a ticket.
258
- */
259
- async removeLabelFromTicket(ticketId, labelId) {
260
- const result = this.ctx.db.prepare(`
261
- DELETE FROM ${T.ticket_labels}
262
- WHERE ticket_id = ? AND label_id = ?
263
- `).run(ticketId, labelId);
264
- if (result.changes === 0) {
265
- throw new PMOError('NOT_FOUND', `Label ${labelId} is not applied to ticket ${ticketId}`);
266
- }
267
- }
268
- /**
269
- * Get all labels for a ticket.
270
- */
271
- async getLabelsForTicket(ticketId) {
272
- const rows = this.ctx.db.prepare(`
273
- SELECT l.*, lg.name as group_name
274
- FROM ${T.ticket_labels} tl
275
- JOIN ${T.labels} l ON tl.label_id = l.id
276
- LEFT JOIN ${T.label_groups} lg ON l.group_id = lg.id
277
- WHERE tl.ticket_id = ?
278
- ORDER BY lg.position ASC, l.position ASC
279
- `).all(ticketId);
280
- return rows.map(rowToLabel);
281
- }
282
- /**
283
- * Add a label to a ticket by name.
284
- * Resolves the label name to an ID first.
285
- * If the label name matches a group:label pattern, resolves within that group.
286
- */
287
- async addLabelToTicketByName(ticketId, labelName) {
288
- const label = await this.resolveLabelByName(labelName);
289
- if (!label) {
290
- throw new PMOError('NOT_FOUND', `Label not found: "${labelName}"`);
291
- }
292
- return this.addLabelToTicket(ticketId, label.id);
293
- }
294
- /**
295
- * Remove a label from a ticket by name.
296
- */
297
- async removeLabelFromTicketByName(ticketId, labelName) {
298
- const label = await this.resolveLabelByName(labelName);
299
- if (!label) {
300
- throw new PMOError('NOT_FOUND', `Label not found: "${labelName}"`);
301
- }
302
- return this.removeLabelFromTicket(ticketId, label.id);
303
- }
304
- /**
305
- * Resolve a label by name or group:name pattern.
306
- */
307
- async resolveLabelByName(nameOrPattern) {
308
- // Check for group:label pattern
309
- if (nameOrPattern.includes(':')) {
310
- const [groupName, labelName] = nameOrPattern.split(':', 2);
311
- const group = await this.getLabelGroupByName(groupName);
312
- if (group) {
313
- return this.getLabelByName(labelName, group.id);
314
- }
315
- }
316
- // Try direct name lookup
317
- return this.getLabelByName(nameOrPattern);
318
- }
319
- }
320
- // ===========================================================================
321
- // Row Converters
322
- // ===========================================================================
323
- function rowToLabelGroup(row) {
324
- return {
325
- id: row.id,
326
- name: row.name,
327
- description: row.description || undefined,
328
- isExclusive: row.is_exclusive === 1,
329
- isRequired: row.is_required === 1,
330
- position: row.position,
331
- createdAt: new Date(row.created_at),
332
- };
333
- }
334
- function rowToLabel(row) {
335
- return {
336
- id: row.id,
337
- name: row.name,
338
- color: row.color || undefined,
339
- description: row.description || undefined,
340
- groupId: row.group_id || undefined,
341
- groupName: row.group_name || undefined,
342
- position: row.position,
343
- isBuiltin: row.is_builtin === 1,
344
- createdAt: new Date(row.created_at),
345
- };
346
- }
347
- //# sourceMappingURL=labels.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"labels.js","sourceRoot":"","sources":["../../../../src/lib/pmo/storage/labels.ts"],"names":[],"mappings":"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"}
@@ -1,65 +0,0 @@
1
- /**
2
- * Project phase operations.
3
- */
4
- import { PhaseFilter, PhaseTemplate, PhaseTemplateFilter, ProjectPhase } from '../types.js';
5
- import { StorageContext } from './types.js';
6
- export declare class PhaseStorage {
7
- private ctx;
8
- constructor(ctx: StorageContext);
9
- /**
10
- * List project phases.
11
- */
12
- listPhases(filter?: PhaseFilter): Promise<ProjectPhase[]>;
13
- /**
14
- * Get a phase by ID.
15
- */
16
- getPhase(id: string): Promise<ProjectPhase | null>;
17
- /**
18
- * Create a new phase.
19
- */
20
- createPhase(phase: Partial<ProjectPhase>): Promise<ProjectPhase>;
21
- /**
22
- * Update a phase.
23
- */
24
- updatePhase(id: string, changes: Partial<ProjectPhase>): Promise<ProjectPhase>;
25
- /**
26
- * Delete a phase.
27
- */
28
- deletePhase(id: string): Promise<void>;
29
- /**
30
- * Reorder a phase to a new position.
31
- */
32
- reorderPhase(id: string, newPosition: number): Promise<ProjectPhase>;
33
- /**
34
- * Get the default phase.
35
- */
36
- getDefaultPhase(): Promise<ProjectPhase | null>;
37
- /**
38
- * List phase templates.
39
- */
40
- listPhaseTemplates(filter?: PhaseTemplateFilter): Promise<PhaseTemplate[]>;
41
- /**
42
- * Get a phase template by ID.
43
- */
44
- getPhaseTemplate(id: string): Promise<PhaseTemplate | null>;
45
- /**
46
- * Apply a phase template.
47
- */
48
- applyPhaseTemplate(templateId: string): Promise<ProjectPhase[]>;
49
- /**
50
- * Save current phases as a template.
51
- */
52
- savePhaseTemplate(name: string, description?: string): Promise<PhaseTemplate>;
53
- /**
54
- * Update a phase template.
55
- */
56
- updatePhaseTemplate(id: string, changes: {
57
- name?: string;
58
- description?: string;
59
- }): Promise<PhaseTemplate>;
60
- /**
61
- * Delete a phase template.
62
- */
63
- deletePhaseTemplate(id: string): Promise<void>;
64
- private rowToPhase;
65
- }