@proletariat/cli 0.3.92 → 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 (588) 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/auth.js +2 -6
  9. package/dist/commands/agent/auth.js.map +1 -1
  10. package/dist/commands/agent/cleanup.d.ts +1 -1
  11. package/dist/commands/agent/cleanup.js +5 -5
  12. package/dist/commands/agent/cleanup.js.map +1 -1
  13. package/dist/commands/{project/list.d.ts → agent/gc.d.ts} +4 -3
  14. package/dist/commands/agent/gc.js +75 -0
  15. package/dist/commands/agent/gc.js.map +1 -0
  16. package/dist/commands/agent/index.d.ts +1 -1
  17. package/dist/commands/agent/list.d.ts +1 -1
  18. package/dist/commands/agent/list.js +2 -2
  19. package/dist/commands/agent/list.js.map +1 -1
  20. package/dist/commands/agent/login.d.ts +1 -1
  21. package/dist/commands/agent/rebuild.d.ts +1 -1
  22. package/dist/commands/agent/remove.d.ts +1 -1
  23. package/dist/commands/agent/restart.d.ts +1 -1
  24. package/dist/commands/agent/shell.d.ts +1 -1
  25. package/dist/commands/agent/shell.js +3 -5
  26. package/dist/commands/agent/shell.js.map +1 -1
  27. package/dist/commands/agent/staff/index.d.ts +1 -1
  28. package/dist/commands/agent/staff/remove.d.ts +1 -1
  29. package/dist/commands/agent/status.d.ts +1 -1
  30. package/dist/commands/agent/visit.d.ts +1 -1
  31. package/dist/commands/asana/import.d.ts +1 -1
  32. package/dist/commands/branch/create.d.ts +1 -1
  33. package/dist/commands/branch/create.js +2 -2
  34. package/dist/commands/branch/create.js.map +1 -1
  35. package/dist/commands/branch/index.d.ts +1 -1
  36. package/dist/commands/branch/list.d.ts +1 -1
  37. package/dist/commands/branch/validate.d.ts +1 -1
  38. package/dist/commands/branch/where.d.ts +1 -1
  39. package/dist/commands/claude/index.js +2 -2
  40. package/dist/commands/claude/index.js.map +1 -1
  41. package/dist/commands/claude/open.js +11 -5
  42. package/dist/commands/claude/open.js.map +1 -1
  43. package/dist/commands/config/index.js +88 -7
  44. package/dist/commands/config/index.js.map +1 -1
  45. package/dist/commands/db/repair.js +2 -2
  46. package/dist/commands/db/repair.js.map +1 -1
  47. package/dist/commands/diet.d.ts +1 -1
  48. package/dist/commands/docker/clean.js +2 -4
  49. package/dist/commands/docker/clean.js.map +1 -1
  50. package/dist/commands/docker/index.js +4 -4
  51. package/dist/commands/docker/index.js.map +1 -1
  52. package/dist/commands/docker/list.js +2 -4
  53. package/dist/commands/docker/list.js.map +1 -1
  54. package/dist/commands/docker/logs.js +2 -4
  55. package/dist/commands/docker/logs.js.map +1 -1
  56. package/dist/commands/docker/rebuild-cache.d.ts +12 -0
  57. package/dist/commands/docker/rebuild-cache.js +144 -0
  58. package/dist/commands/docker/rebuild-cache.js.map +1 -0
  59. package/dist/commands/docker/restart.js +2 -4
  60. package/dist/commands/docker/restart.js.map +1 -1
  61. package/dist/commands/docker/shell.js +2 -4
  62. package/dist/commands/docker/shell.js.map +1 -1
  63. package/dist/commands/docker/start.js +2 -4
  64. package/dist/commands/docker/start.js.map +1 -1
  65. package/dist/commands/docker/stop.js +2 -4
  66. package/dist/commands/docker/stop.js.map +1 -1
  67. package/dist/commands/docker/sync.js +2 -4
  68. package/dist/commands/docker/sync.js.map +1 -1
  69. package/dist/commands/execution/config.d.ts +1 -1
  70. package/dist/commands/execution/config.js +39 -0
  71. package/dist/commands/execution/config.js.map +1 -1
  72. package/dist/commands/execution/index.d.ts +1 -1
  73. package/dist/commands/execution/list.d.ts +1 -1
  74. package/dist/commands/execution/list.js +2 -4
  75. package/dist/commands/execution/list.js.map +1 -1
  76. package/dist/commands/execution/logs.d.ts +1 -1
  77. package/dist/commands/execution/logs.js +2 -4
  78. package/dist/commands/execution/logs.js.map +1 -1
  79. package/dist/commands/execution/stop.d.ts +1 -1
  80. package/dist/commands/execution/stop.js +2 -4
  81. package/dist/commands/execution/stop.js.map +1 -1
  82. package/dist/commands/execution/view.d.ts +1 -1
  83. package/dist/commands/execution/view.js +2 -4
  84. package/dist/commands/execution/view.js.map +1 -1
  85. package/dist/commands/gh/login.js +2 -1
  86. package/dist/commands/gh/login.js.map +1 -1
  87. package/dist/commands/gh/status.js +18 -2
  88. package/dist/commands/gh/status.js.map +1 -1
  89. package/dist/commands/{ticket/bulk.d.ts → hook/export.d.ts} +8 -5
  90. package/dist/commands/hook/export.js +52 -0
  91. package/dist/commands/hook/export.js.map +1 -0
  92. package/dist/commands/hook/fire.d.ts +29 -0
  93. package/dist/commands/hook/fire.js +139 -0
  94. package/dist/commands/hook/fire.js.map +1 -0
  95. package/dist/commands/{project → hook}/index.d.ts +5 -5
  96. package/dist/commands/hook/index.js +53 -0
  97. package/dist/commands/hook/index.js.map +1 -0
  98. package/dist/commands/{board/index.d.ts → hook/list.d.ts} +10 -12
  99. package/dist/commands/hook/list.js +136 -0
  100. package/dist/commands/hook/list.js.map +1 -0
  101. package/dist/commands/{project/archive.d.ts → hook/preset.d.ts} +11 -7
  102. package/dist/commands/hook/preset.js +76 -0
  103. package/dist/commands/hook/preset.js.map +1 -0
  104. package/dist/commands/linear/auth.d.ts +1 -1
  105. package/dist/commands/linear/connect.d.ts +1 -1
  106. package/dist/commands/linear/import.d.ts +1 -1
  107. package/dist/commands/linear/status.d.ts +1 -1
  108. package/dist/commands/linear/sync.d.ts +1 -1
  109. package/dist/commands/mcp-server.d.ts +8 -2
  110. package/dist/commands/mcp-server.js +17 -31
  111. package/dist/commands/mcp-server.js.map +1 -1
  112. package/dist/commands/monday/connect.d.ts +1 -1
  113. package/dist/commands/monday/sync.d.ts +1 -1
  114. package/dist/commands/orchestrate/index.d.ts +35 -0
  115. package/dist/commands/orchestrate/index.js +267 -0
  116. package/dist/commands/orchestrate/index.js.map +1 -0
  117. package/dist/commands/orchestrator/attach.js +2 -3
  118. package/dist/commands/orchestrator/attach.js.map +1 -1
  119. package/dist/commands/orchestrator/index.d.ts +1 -1
  120. package/dist/commands/orchestrator/start.d.ts +3 -3
  121. package/dist/commands/orchestrator/start.js +32 -43
  122. package/dist/commands/orchestrator/start.js.map +1 -1
  123. package/dist/commands/orchestrator/stop.js +21 -26
  124. package/dist/commands/orchestrator/stop.js.map +1 -1
  125. package/dist/commands/pr/checks.d.ts +1 -1
  126. package/dist/commands/pr/close.d.ts +1 -1
  127. package/dist/commands/pr/create.d.ts +1 -1
  128. package/dist/commands/pr/index.d.ts +1 -1
  129. package/dist/commands/pr/link.d.ts +1 -1
  130. package/dist/commands/pr/list.d.ts +1 -1
  131. package/dist/commands/pr/merge.d.ts +1 -1
  132. package/dist/commands/pr/status.d.ts +1 -1
  133. package/dist/commands/pull.d.ts +1 -1
  134. package/dist/commands/qa/index.js +3 -3
  135. package/dist/commands/qa/index.js.map +1 -1
  136. package/dist/commands/repo/add.d.ts +1 -1
  137. package/dist/commands/repo/create.d.ts +1 -1
  138. package/dist/commands/repo/fix-remotes.d.ts +1 -1
  139. package/dist/commands/repo/index.d.ts +1 -1
  140. package/dist/commands/repo/list.d.ts +1 -1
  141. package/dist/commands/repo/remove.d.ts +1 -1
  142. package/dist/commands/repo/view.d.ts +1 -1
  143. package/dist/commands/session/attach.d.ts +1 -1
  144. package/dist/commands/session/attach.js +5 -7
  145. package/dist/commands/session/attach.js.map +1 -1
  146. package/dist/commands/session/cleanup.d.ts +1 -1
  147. package/dist/commands/session/cleanup.js +2 -4
  148. package/dist/commands/session/cleanup.js.map +1 -1
  149. package/dist/commands/session/create.d.ts +1 -1
  150. package/dist/commands/session/exec.d.ts +1 -1
  151. package/dist/commands/session/exec.js +2 -3
  152. package/dist/commands/session/exec.js.map +1 -1
  153. package/dist/commands/session/health.d.ts +1 -1
  154. package/dist/commands/session/health.js +2 -4
  155. package/dist/commands/session/health.js.map +1 -1
  156. package/dist/commands/session/index.d.ts +1 -1
  157. package/dist/commands/session/inspect.d.ts +1 -1
  158. package/dist/commands/session/inspect.js +2 -3
  159. package/dist/commands/session/inspect.js.map +1 -1
  160. package/dist/commands/session/list.d.ts +1 -1
  161. package/dist/commands/session/list.js +2 -4
  162. package/dist/commands/session/list.js.map +1 -1
  163. package/dist/commands/session/peek.d.ts +1 -1
  164. package/dist/commands/session/peek.js +3 -6
  165. package/dist/commands/session/peek.js.map +1 -1
  166. package/dist/commands/session/poke.js +2 -4
  167. package/dist/commands/session/poke.js.map +1 -1
  168. package/dist/commands/session/prune.d.ts +1 -1
  169. package/dist/commands/session/prune.js +2 -4
  170. package/dist/commands/session/prune.js.map +1 -1
  171. package/dist/commands/session/report.d.ts +1 -1
  172. package/dist/commands/session/report.js +2 -4
  173. package/dist/commands/session/report.js.map +1 -1
  174. package/dist/commands/session/restart.d.ts +1 -1
  175. package/dist/commands/session/restart.js +2 -3
  176. package/dist/commands/session/restart.js.map +1 -1
  177. package/dist/commands/shortcut/connect.d.ts +1 -1
  178. package/dist/commands/support/logs.d.ts +1 -1
  179. package/dist/commands/ticket/create.d.ts +4 -5
  180. package/dist/commands/ticket/create.js +69 -88
  181. package/dist/commands/ticket/create.js.map +1 -1
  182. package/dist/commands/ticket/delete.d.ts +1 -1
  183. package/dist/commands/ticket/edit.d.ts +1 -1
  184. package/dist/commands/ticket/edit.js +22 -14
  185. package/dist/commands/ticket/edit.js.map +1 -1
  186. package/dist/commands/ticket/index.d.ts +1 -1
  187. package/dist/commands/ticket/index.js +6 -36
  188. package/dist/commands/ticket/index.js.map +1 -1
  189. package/dist/commands/ticket/list.d.ts +1 -1
  190. package/dist/commands/ticket/move.d.ts +1 -1
  191. package/dist/commands/ticket/show.d.ts +8 -7
  192. package/dist/commands/ticket/show.js +101 -8
  193. package/dist/commands/ticket/show.js.map +1 -1
  194. package/dist/commands/ticket/update.d.ts +1 -1
  195. package/dist/commands/ticket/update.js +31 -14
  196. package/dist/commands/ticket/update.js.map +1 -1
  197. package/dist/commands/trello/configure.d.ts +1 -1
  198. package/dist/commands/trello/import.d.ts +1 -1
  199. package/dist/commands/trello/sync.d.ts +1 -1
  200. package/dist/commands/work/asana.d.ts +1 -1
  201. package/dist/commands/work/complete.d.ts +1 -1
  202. package/dist/commands/work/complete.js +2 -3
  203. package/dist/commands/work/complete.js.map +1 -1
  204. package/dist/commands/work/groom.d.ts +1 -1
  205. package/dist/commands/work/hooks/add.d.ts +1 -1
  206. package/dist/commands/work/hooks/add.js +2 -4
  207. package/dist/commands/work/hooks/add.js.map +1 -1
  208. package/dist/commands/work/hooks/index.d.ts +1 -1
  209. package/dist/commands/work/hooks/list.d.ts +1 -1
  210. package/dist/commands/work/hooks/list.js +2 -4
  211. package/dist/commands/work/hooks/list.js.map +1 -1
  212. package/dist/commands/work/hooks/remove.d.ts +1 -1
  213. package/dist/commands/work/hooks/remove.js +2 -4
  214. package/dist/commands/work/hooks/remove.js.map +1 -1
  215. package/dist/commands/work/hooks/toggle.d.ts +1 -1
  216. package/dist/commands/work/hooks/toggle.js +2 -4
  217. package/dist/commands/work/hooks/toggle.js.map +1 -1
  218. package/dist/commands/work/implement.d.ts +1 -1
  219. package/dist/commands/work/index.d.ts +1 -1
  220. package/dist/commands/work/index.js +4 -0
  221. package/dist/commands/work/index.js.map +1 -1
  222. package/dist/commands/work/jira.d.ts +1 -1
  223. package/dist/commands/work/linear.d.ts +1 -1
  224. package/dist/commands/work/peek.d.ts +1 -1
  225. package/dist/commands/work/ready.d.ts +1 -1
  226. package/dist/commands/work/ready.js +2 -3
  227. package/dist/commands/work/ready.js.map +1 -1
  228. package/dist/commands/work/rebase.d.ts +33 -0
  229. package/dist/commands/work/rebase.js +394 -0
  230. package/dist/commands/work/rebase.js.map +1 -0
  231. package/dist/commands/work/resolve.d.ts +1 -1
  232. package/dist/commands/work/review.d.ts +1 -1
  233. package/dist/commands/work/ship.d.ts +2 -1
  234. package/dist/commands/work/ship.js +49 -4
  235. package/dist/commands/work/ship.js.map +1 -1
  236. package/dist/commands/work/shortcut.d.ts +1 -1
  237. package/dist/commands/work/source/set.d.ts +1 -1
  238. package/dist/commands/work/source.d.ts +1 -1
  239. package/dist/commands/work/spawn.d.ts +1 -1
  240. package/dist/commands/work/spawn.js +2 -4
  241. package/dist/commands/work/spawn.js.map +1 -1
  242. package/dist/commands/work/start.d.ts +8 -1
  243. package/dist/commands/work/start.js +190 -22
  244. package/dist/commands/work/start.js.map +1 -1
  245. package/dist/commands/work/status.d.ts +1 -1
  246. package/dist/commands/work/stop.d.ts +1 -1
  247. package/dist/commands/work/stop.js +2 -4
  248. package/dist/commands/work/stop.js.map +1 -1
  249. package/dist/commands/work/watch.d.ts +1 -1
  250. package/dist/commands/work/watch.js +2 -4
  251. package/dist/commands/work/watch.js.map +1 -1
  252. package/dist/hooks/init.js +2 -2
  253. package/dist/hooks/init.js.map +1 -1
  254. package/dist/lib/agents/commands.d.ts +9 -3
  255. package/dist/lib/agents/commands.js +103 -88
  256. package/dist/lib/agents/commands.js.map +1 -1
  257. package/dist/lib/asana/config.js +13 -7
  258. package/dist/lib/asana/config.js.map +1 -1
  259. package/dist/lib/clickup/client.d.ts +92 -0
  260. package/dist/lib/clickup/client.js +150 -0
  261. package/dist/lib/clickup/client.js.map +1 -0
  262. package/dist/lib/clickup/config.d.ts +41 -0
  263. package/dist/lib/clickup/config.js +104 -0
  264. package/dist/lib/clickup/config.js.map +1 -0
  265. package/dist/lib/clickup/index.d.ts +4 -0
  266. package/dist/lib/clickup/index.js +4 -0
  267. package/dist/lib/clickup/index.js.map +1 -0
  268. package/dist/lib/clickup/types.d.ts +104 -0
  269. package/dist/lib/clickup/types.js +34 -0
  270. package/dist/lib/clickup/types.js.map +1 -0
  271. package/dist/lib/dashboard/server.js +1 -1
  272. package/dist/lib/dashboard/server.js.map +1 -1
  273. package/dist/lib/database/agents.d.ts +62 -4
  274. package/dist/lib/database/agents.js +161 -8
  275. package/dist/lib/database/agents.js.map +1 -1
  276. package/dist/lib/database/credential-store.d.ts +64 -0
  277. package/dist/lib/database/credential-store.js +306 -0
  278. package/dist/lib/database/credential-store.js.map +1 -0
  279. package/dist/lib/database/db-safety.js +4 -4
  280. package/dist/lib/database/db-safety.js.map +1 -1
  281. package/dist/lib/database/drizzle-schema.d.ts +2 -2
  282. package/dist/lib/database/drizzle-schema.js +2 -1
  283. package/dist/lib/database/drizzle-schema.js.map +1 -1
  284. package/dist/lib/database/index.d.ts +2 -1
  285. package/dist/lib/database/index.js +3 -1
  286. package/dist/lib/database/index.js.map +1 -1
  287. package/dist/lib/database/migrations/0013_agent_lifecycle_states.d.ts +11 -0
  288. package/dist/lib/database/migrations/0013_agent_lifecycle_states.js +47 -0
  289. package/dist/lib/database/migrations/0013_agent_lifecycle_states.js.map +1 -0
  290. package/dist/lib/database/migrations/0014_agent_work_lifecycle.d.ts +10 -0
  291. package/dist/lib/database/migrations/0014_agent_work_lifecycle.js +31 -0
  292. package/dist/lib/database/migrations/0014_agent_work_lifecycle.js.map +1 -0
  293. package/dist/lib/database/migrations/0015_orchestrate_hooks.d.ts +8 -0
  294. package/dist/lib/database/migrations/0015_orchestrate_hooks.js +35 -0
  295. package/dist/lib/database/migrations/0015_orchestrate_hooks.js.map +1 -0
  296. package/dist/lib/database/migrations/0016_schema_catchup.d.ts +15 -0
  297. package/dist/lib/database/migrations/0016_schema_catchup.js +154 -0
  298. package/dist/lib/database/migrations/0016_schema_catchup.js.map +1 -0
  299. package/dist/lib/database/migrations/index.js +8 -0
  300. package/dist/lib/database/migrations/index.js.map +1 -1
  301. package/dist/lib/database/pmo-bootstrap.d.ts +7 -0
  302. package/dist/lib/database/pmo-bootstrap.js +47 -22
  303. package/dist/lib/database/pmo-bootstrap.js.map +1 -1
  304. package/dist/lib/database/workspace-schema.d.ts +1 -1
  305. package/dist/lib/database/workspace-schema.js +3 -1
  306. package/dist/lib/database/workspace-schema.js.map +1 -1
  307. package/dist/lib/database/workspace.js +4 -0
  308. package/dist/lib/database/workspace.js.map +1 -1
  309. package/dist/lib/events/events.d.ts +28 -0
  310. package/dist/lib/events/index.d.ts +1 -1
  311. package/dist/lib/events/index.js.map +1 -1
  312. package/dist/lib/execution/config.d.ts +2 -0
  313. package/dist/lib/execution/config.js +14 -0
  314. package/dist/lib/execution/config.js.map +1 -1
  315. package/dist/lib/execution/devcontainer.js +51 -0
  316. package/dist/lib/execution/devcontainer.js.map +1 -1
  317. package/dist/lib/execution/runners/devcontainer-tmux.js +1 -1
  318. package/dist/lib/execution/runners/devcontainer-tmux.js.map +1 -1
  319. package/dist/lib/execution/runners/devcontainer.js +9 -1
  320. package/dist/lib/execution/runners/devcontainer.js.map +1 -1
  321. package/dist/lib/execution/runners/docker-credentials.d.ts +8 -0
  322. package/dist/lib/execution/runners/docker-credentials.js +20 -3
  323. package/dist/lib/execution/runners/docker-credentials.js.map +1 -1
  324. package/dist/lib/execution/runners/docker-management.d.ts +54 -0
  325. package/dist/lib/execution/runners/docker-management.js +194 -7
  326. package/dist/lib/execution/runners/docker-management.js.map +1 -1
  327. package/dist/lib/execution/runners/index.d.ts +1 -1
  328. package/dist/lib/execution/runners/index.js +1 -1
  329. package/dist/lib/execution/runners/index.js.map +1 -1
  330. package/dist/lib/execution/runners/shared.d.ts +23 -1
  331. package/dist/lib/execution/runners/shared.js +112 -1
  332. package/dist/lib/execution/runners/shared.js.map +1 -1
  333. package/dist/lib/execution/session-utils.d.ts +4 -0
  334. package/dist/lib/execution/session-utils.js +34 -24
  335. package/dist/lib/execution/session-utils.js.map +1 -1
  336. package/dist/lib/execution/spawner.js +8 -1
  337. package/dist/lib/execution/spawner.js.map +1 -1
  338. package/dist/lib/execution/types.js +1 -1
  339. package/dist/lib/external-issues/types.d.ts +3 -3
  340. package/dist/lib/external-issues/types.js +1 -1
  341. package/dist/lib/external-issues/types.js.map +1 -1
  342. package/dist/lib/jira/config.js +10 -4
  343. package/dist/lib/jira/config.js.map +1 -1
  344. package/dist/lib/linear/client.d.ts +13 -0
  345. package/dist/lib/linear/client.js +37 -0
  346. package/dist/lib/linear/client.js.map +1 -1
  347. package/dist/lib/linear/config.js +13 -8
  348. package/dist/lib/linear/config.js.map +1 -1
  349. package/dist/lib/mcp/generator.d.ts +26 -0
  350. package/dist/lib/mcp/generator.js +219 -0
  351. package/dist/lib/mcp/generator.js.map +1 -0
  352. package/dist/lib/mcp/index.d.ts +1 -0
  353. package/dist/lib/mcp/index.js +1 -0
  354. package/dist/lib/mcp/index.js.map +1 -1
  355. package/dist/lib/mcp/tools/index.d.ts +0 -11
  356. package/dist/lib/mcp/tools/index.js +0 -11
  357. package/dist/lib/mcp/tools/index.js.map +1 -1
  358. package/dist/lib/mcp/tools/overrides/index.d.ts +23 -0
  359. package/dist/lib/mcp/tools/overrides/index.js +30 -0
  360. package/dist/lib/mcp/tools/overrides/index.js.map +1 -0
  361. package/dist/lib/mcp/tools/overrides/tmux.d.ts +11 -0
  362. package/dist/lib/mcp/tools/overrides/tmux.js +184 -0
  363. package/dist/lib/mcp/tools/overrides/tmux.js.map +1 -0
  364. package/dist/lib/mcp/tools/overrides/work-start.d.ts +12 -0
  365. package/dist/lib/mcp/tools/overrides/work-start.js +108 -0
  366. package/dist/lib/mcp/tools/overrides/work-start.js.map +1 -0
  367. package/dist/lib/mcp/tools/ticket.js +10 -48
  368. package/dist/lib/mcp/tools/ticket.js.map +1 -1
  369. package/dist/lib/monday/config.js +11 -5
  370. package/dist/lib/monday/config.js.map +1 -1
  371. package/dist/lib/orchestrate/actions.d.ts +20 -0
  372. package/dist/lib/orchestrate/actions.js +194 -0
  373. package/dist/lib/orchestrate/actions.js.map +1 -0
  374. package/dist/lib/orchestrate/config-loader.d.ts +31 -0
  375. package/dist/lib/orchestrate/config-loader.js +201 -0
  376. package/dist/lib/orchestrate/config-loader.js.map +1 -0
  377. package/dist/lib/orchestrate/engine.d.ts +94 -0
  378. package/dist/lib/orchestrate/engine.js +290 -0
  379. package/dist/lib/orchestrate/engine.js.map +1 -0
  380. package/dist/lib/orchestrate/index.d.ts +16 -0
  381. package/dist/lib/orchestrate/index.js +14 -0
  382. package/dist/lib/orchestrate/index.js.map +1 -0
  383. package/dist/lib/orchestrate/poller.d.ts +58 -0
  384. package/dist/lib/orchestrate/poller.js +282 -0
  385. package/dist/lib/orchestrate/poller.js.map +1 -0
  386. package/dist/lib/orchestrate/presets.d.ts +27 -0
  387. package/dist/lib/orchestrate/presets.js +65 -0
  388. package/dist/lib/orchestrate/presets.js.map +1 -0
  389. package/dist/lib/orchestrate/types.d.ts +93 -0
  390. package/dist/lib/orchestrate/types.js +46 -0
  391. package/dist/lib/orchestrate/types.js.map +1 -0
  392. package/dist/lib/pmo/base-command.d.ts +20 -152
  393. package/dist/lib/pmo/base-command.js +32 -198
  394. package/dist/lib/pmo/base-command.js.map +1 -1
  395. package/dist/lib/pmo/index.d.ts +1 -0
  396. package/dist/lib/pmo/index.js +3 -0
  397. package/dist/lib/pmo/index.js.map +1 -1
  398. package/dist/lib/pmo/storage/base.d.ts +0 -18
  399. package/dist/lib/pmo/storage/base.js +0 -231
  400. package/dist/lib/pmo/storage/base.js.map +1 -1
  401. package/dist/lib/pmo/storage/index.d.ts +1 -76
  402. package/dist/lib/pmo/storage/index.js +1 -215
  403. package/dist/lib/pmo/storage/index.js.map +1 -1
  404. package/dist/lib/pmo/storage/specs.js.map +1 -1
  405. package/dist/lib/pmo/storage/tickets.d.ts +2 -2
  406. package/dist/lib/pmo/storage/tickets.js +4 -34
  407. package/dist/lib/pmo/storage/tickets.js.map +1 -1
  408. package/dist/lib/pmo/types.d.ts +0 -37
  409. package/dist/lib/pr/index.d.ts +28 -0
  410. package/dist/lib/pr/index.js +100 -0
  411. package/dist/lib/pr/index.js.map +1 -1
  412. package/dist/lib/providers/clickup-provider.d.ts +28 -0
  413. package/dist/lib/providers/clickup-provider.js +353 -0
  414. package/dist/lib/providers/clickup-provider.js.map +1 -0
  415. package/dist/lib/providers/event-emitting-provider.d.ts +4 -2
  416. package/dist/lib/providers/event-emitting-provider.js +12 -0
  417. package/dist/lib/providers/event-emitting-provider.js.map +1 -1
  418. package/dist/lib/providers/index.d.ts +1 -1
  419. package/dist/lib/providers/index.js.map +1 -1
  420. package/dist/lib/providers/linear-provider.d.ts +4 -2
  421. package/dist/lib/providers/linear-provider.js +106 -0
  422. package/dist/lib/providers/linear-provider.js.map +1 -1
  423. package/dist/lib/providers/pmo-provider.d.ts +4 -2
  424. package/dist/lib/providers/pmo-provider.js +26 -0
  425. package/dist/lib/providers/pmo-provider.js.map +1 -1
  426. package/dist/lib/providers/resolver.d.ts +1 -1
  427. package/dist/lib/providers/resolver.js +16 -5
  428. package/dist/lib/providers/resolver.js.map +1 -1
  429. package/dist/lib/providers/types.d.ts +31 -2
  430. package/dist/lib/runners/claude-code-runner.js +13 -4
  431. package/dist/lib/runners/claude-code-runner.js.map +1 -1
  432. package/dist/lib/runtime-command.d.ts +219 -0
  433. package/dist/lib/runtime-command.js +320 -0
  434. package/dist/lib/runtime-command.js.map +1 -0
  435. package/dist/lib/shortcut/config.js +13 -7
  436. package/dist/lib/shortcut/config.js.map +1 -1
  437. package/dist/lib/telemetry/analytics.d.ts +1 -1
  438. package/dist/lib/telemetry/analytics.js +16 -8
  439. package/dist/lib/telemetry/analytics.js.map +1 -1
  440. package/dist/lib/trello/config.js +17 -12
  441. package/dist/lib/trello/config.js.map +1 -1
  442. package/dist/lib/update-check.d.ts +8 -3
  443. package/dist/lib/update-check.js +16 -5
  444. package/dist/lib/update-check.js.map +1 -1
  445. package/dist/lib/work-lifecycle/events.d.ts +1 -1
  446. package/dist/lib/work-lifecycle/hooks/types.d.ts +3 -2
  447. package/dist/lib/work-lifecycle/hooks/types.js +12 -0
  448. package/dist/lib/work-lifecycle/hooks/types.js.map +1 -1
  449. package/dist/lib/work-source/config.d.ts +1 -1
  450. package/dist/lib/work-source/config.js +11 -1
  451. package/dist/lib/work-source/config.js.map +1 -1
  452. package/dist/lib/work-source/provider-sources.js +6 -1
  453. package/dist/lib/work-source/provider-sources.js.map +1 -1
  454. package/oclif.manifest.json +2682 -3839
  455. package/package.json +1 -1
  456. package/dist/commands/board/index.js +0 -263
  457. package/dist/commands/board/index.js.map +0 -1
  458. package/dist/commands/board/view.d.ts +0 -15
  459. package/dist/commands/board/view.js +0 -137
  460. package/dist/commands/board/view.js.map +0 -1
  461. package/dist/commands/board/watch.d.ts +0 -15
  462. package/dist/commands/board/watch.js +0 -59
  463. package/dist/commands/board/watch.js.map +0 -1
  464. package/dist/commands/dashboard/index.d.ts +0 -14
  465. package/dist/commands/dashboard/index.js +0 -117
  466. package/dist/commands/dashboard/index.js.map +0 -1
  467. package/dist/commands/dashboard.d.ts +0 -38
  468. package/dist/commands/dashboard.js +0 -353
  469. package/dist/commands/dashboard.js.map +0 -1
  470. package/dist/commands/pmo/init.d.ts +0 -28
  471. package/dist/commands/pmo/init.js +0 -410
  472. package/dist/commands/pmo/init.js.map +0 -1
  473. package/dist/commands/project/archive.js +0 -79
  474. package/dist/commands/project/archive.js.map +0 -1
  475. package/dist/commands/project/create.d.ts +0 -24
  476. package/dist/commands/project/create.js +0 -191
  477. package/dist/commands/project/create.js.map +0 -1
  478. package/dist/commands/project/delete.d.ts +0 -18
  479. package/dist/commands/project/delete.js +0 -115
  480. package/dist/commands/project/delete.js.map +0 -1
  481. package/dist/commands/project/index.js +0 -60
  482. package/dist/commands/project/index.js.map +0 -1
  483. package/dist/commands/project/list.js +0 -115
  484. package/dist/commands/project/list.js.map +0 -1
  485. package/dist/commands/project/spec.d.ts +0 -19
  486. package/dist/commands/project/spec.js +0 -218
  487. package/dist/commands/project/spec.js.map +0 -1
  488. package/dist/commands/project/unarchive.d.ts +0 -17
  489. package/dist/commands/project/unarchive.js +0 -55
  490. package/dist/commands/project/unarchive.js.map +0 -1
  491. package/dist/commands/project/update.d.ts +0 -19
  492. package/dist/commands/project/update.js +0 -161
  493. package/dist/commands/project/update.js.map +0 -1
  494. package/dist/commands/project/view.d.ts +0 -17
  495. package/dist/commands/project/view.js +0 -107
  496. package/dist/commands/project/view.js.map +0 -1
  497. package/dist/commands/ticket/bulk.js +0 -141
  498. package/dist/commands/ticket/bulk.js.map +0 -1
  499. package/dist/commands/ticket/cancel.d.ts +0 -17
  500. package/dist/commands/ticket/cancel.js +0 -206
  501. package/dist/commands/ticket/cancel.js.map +0 -1
  502. package/dist/commands/ticket/category.d.ts +0 -15
  503. package/dist/commands/ticket/category.js +0 -64
  504. package/dist/commands/ticket/category.js.map +0 -1
  505. package/dist/commands/ticket/complete.d.ts +0 -17
  506. package/dist/commands/ticket/complete.js +0 -178
  507. package/dist/commands/ticket/complete.js.map +0 -1
  508. package/dist/commands/ticket/epic.d.ts +0 -21
  509. package/dist/commands/ticket/epic.js +0 -306
  510. package/dist/commands/ticket/epic.js.map +0 -1
  511. package/dist/commands/ticket/link/block.d.ts +0 -15
  512. package/dist/commands/ticket/link/block.js +0 -96
  513. package/dist/commands/ticket/link/block.js.map +0 -1
  514. package/dist/commands/ticket/link/duplicates.d.ts +0 -15
  515. package/dist/commands/ticket/link/duplicates.js +0 -96
  516. package/dist/commands/ticket/link/duplicates.js.map +0 -1
  517. package/dist/commands/ticket/link/index.d.ts +0 -14
  518. package/dist/commands/ticket/link/index.js +0 -99
  519. package/dist/commands/ticket/link/index.js.map +0 -1
  520. package/dist/commands/ticket/link/relates.d.ts +0 -15
  521. package/dist/commands/ticket/link/relates.js +0 -96
  522. package/dist/commands/ticket/link/relates.js.map +0 -1
  523. package/dist/commands/ticket/project.d.ts +0 -19
  524. package/dist/commands/ticket/project.js +0 -257
  525. package/dist/commands/ticket/project.js.map +0 -1
  526. package/dist/commands/ticket/reassign.d.ts +0 -20
  527. package/dist/commands/ticket/reassign.js +0 -311
  528. package/dist/commands/ticket/reassign.js.map +0 -1
  529. package/dist/commands/ticket/resolve.d.ts +0 -68
  530. package/dist/commands/ticket/resolve.js +0 -296
  531. package/dist/commands/ticket/resolve.js.map +0 -1
  532. package/dist/commands/ticket/spec.d.ts +0 -19
  533. package/dist/commands/ticket/spec.js +0 -260
  534. package/dist/commands/ticket/spec.js.map +0 -1
  535. package/dist/commands/ticket/status.d.ts +0 -14
  536. package/dist/commands/ticket/status.js +0 -84
  537. package/dist/commands/ticket/status.js.map +0 -1
  538. package/dist/commands/ticket/view.d.ts +0 -14
  539. package/dist/commands/ticket/view.js +0 -109
  540. package/dist/commands/ticket/view.js.map +0 -1
  541. package/dist/lib/mcp/tools/board.d.ts +0 -6
  542. package/dist/lib/mcp/tools/board.js +0 -190
  543. package/dist/lib/mcp/tools/board.js.map +0 -1
  544. package/dist/lib/mcp/tools/category.d.ts +0 -6
  545. package/dist/lib/mcp/tools/category.js +0 -85
  546. package/dist/lib/mcp/tools/category.js.map +0 -1
  547. package/dist/lib/mcp/tools/epic.d.ts +0 -6
  548. package/dist/lib/mcp/tools/epic.js +0 -184
  549. package/dist/lib/mcp/tools/epic.js.map +0 -1
  550. package/dist/lib/mcp/tools/label.d.ts +0 -6
  551. package/dist/lib/mcp/tools/label.js +0 -339
  552. package/dist/lib/mcp/tools/label.js.map +0 -1
  553. package/dist/lib/mcp/tools/phase.d.ts +0 -6
  554. package/dist/lib/mcp/tools/phase.js +0 -132
  555. package/dist/lib/mcp/tools/phase.js.map +0 -1
  556. package/dist/lib/mcp/tools/project.d.ts +0 -6
  557. package/dist/lib/mcp/tools/project.js +0 -197
  558. package/dist/lib/mcp/tools/project.js.map +0 -1
  559. package/dist/lib/mcp/tools/roadmap.d.ts +0 -6
  560. package/dist/lib/mcp/tools/roadmap.js +0 -124
  561. package/dist/lib/mcp/tools/roadmap.js.map +0 -1
  562. package/dist/lib/mcp/tools/status.d.ts +0 -6
  563. package/dist/lib/mcp/tools/status.js +0 -110
  564. package/dist/lib/mcp/tools/status.js.map +0 -1
  565. package/dist/lib/mcp/tools/template.d.ts +0 -6
  566. package/dist/lib/mcp/tools/template.js +0 -108
  567. package/dist/lib/mcp/tools/template.js.map +0 -1
  568. package/dist/lib/mcp/tools/view.d.ts +0 -6
  569. package/dist/lib/mcp/tools/view.js +0 -77
  570. package/dist/lib/mcp/tools/view.js.map +0 -1
  571. package/dist/lib/mcp/tools/workflow.d.ts +0 -6
  572. package/dist/lib/mcp/tools/workflow.js +0 -96
  573. package/dist/lib/mcp/tools/workflow.js.map +0 -1
  574. package/dist/lib/pmo/storage/categories.d.ts +0 -50
  575. package/dist/lib/pmo/storage/categories.js +0 -206
  576. package/dist/lib/pmo/storage/categories.js.map +0 -1
  577. package/dist/lib/pmo/storage/labels.d.ts +0 -55
  578. package/dist/lib/pmo/storage/labels.js +0 -347
  579. package/dist/lib/pmo/storage/labels.js.map +0 -1
  580. package/dist/lib/pmo/storage/phases.d.ts +0 -65
  581. package/dist/lib/pmo/storage/phases.js +0 -393
  582. package/dist/lib/pmo/storage/phases.js.map +0 -1
  583. package/dist/lib/pmo/storage/roadmaps.d.ts +0 -64
  584. package/dist/lib/pmo/storage/roadmaps.js +0 -373
  585. package/dist/lib/pmo/storage/roadmaps.js.map +0 -1
  586. package/dist/lib/pmo/storage/views.d.ts +0 -57
  587. package/dist/lib/pmo/storage/views.js +0 -456
  588. package/dist/lib/pmo/storage/views.js.map +0 -1
@@ -1,68 +0,0 @@
1
- import { PMOCommand } from '../../lib/pmo/index.js';
2
- /**
3
- * Canonical question format regex for parsing Q1/Q2/etc from descriptions.
4
- *
5
- * Matches patterns like:
6
- * **Q1:** What should the timeout be?
7
- * **Q2:** Should we use REST or GraphQL?
8
- * Q1: What should the timeout be?
9
- * Q3: How should errors be handled?
10
- *
11
- * Captures:
12
- * - Group 1: Question number (e.g., "1", "2")
13
- * - Group 2: Question text
14
- */
15
- export declare const QUESTION_REGEX: RegExp;
16
- /**
17
- * Canonical answer format for resolved questions.
18
- *
19
- * Matches patterns like:
20
- * **A1:** Use 30 minute timeout
21
- * A1: Use 30 minute timeout
22
- */
23
- export declare const ANSWER_REGEX: RegExp;
24
- export interface ParsedQuestion {
25
- /** Question number (e.g., 1, 2, 3) */
26
- number: number;
27
- /** The question text */
28
- text: string;
29
- /** Line index in the description where the question appears */
30
- lineIndex: number;
31
- /** Whether this question already has an answer */
32
- answered: boolean;
33
- }
34
- /**
35
- * Parse questions (Q1/Q2/etc) from a ticket description.
36
- *
37
- * @param description - The ticket description markdown
38
- * @returns Array of parsed questions
39
- */
40
- export declare function parseQuestions(description: string): ParsedQuestion[];
41
- /**
42
- * Rewrite a ticket description by injecting answers below each question.
43
- *
44
- * For each answered question, inserts a line like:
45
- * **A1:** The answer text
46
- *
47
- * If an answer already exists for that question, it is replaced.
48
- *
49
- * @param description - The original ticket description
50
- * @param answers - Map of question number to answer text
51
- * @returns The rewritten description
52
- */
53
- export declare function rewriteDescription(description: string, answers: Map<number, string>): string;
54
- export default class TicketResolve extends PMOCommand {
55
- static description: string;
56
- static examples: string[];
57
- static strict: boolean;
58
- static args: {
59
- ticketId: import("@oclif/core/interfaces").Arg<string | undefined, Record<string, unknown>>;
60
- };
61
- static flags: {
62
- json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
63
- machine: import("@oclif/core/interfaces").BooleanFlag<boolean>;
64
- project: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
65
- };
66
- execute(): Promise<void>;
67
- private resolveTicket;
68
- }
@@ -1,296 +0,0 @@
1
- import { Args, Flags } from '@oclif/core';
2
- import { autoExportToBoard, PMOCommand, pmoBaseFlags } from '../../lib/pmo/index.js';
3
- import { styles } from '../../lib/styles.js';
4
- import { shouldOutputJson, outputErrorAsJson, outputSuccessAsJson, createMetadata, } from '../../lib/prompt-json.js';
5
- /**
6
- * Canonical question format regex for parsing Q1/Q2/etc from descriptions.
7
- *
8
- * Matches patterns like:
9
- * **Q1:** What should the timeout be?
10
- * **Q2:** Should we use REST or GraphQL?
11
- * Q1: What should the timeout be?
12
- * Q3: How should errors be handled?
13
- *
14
- * Captures:
15
- * - Group 1: Question number (e.g., "1", "2")
16
- * - Group 2: Question text
17
- */
18
- export const QUESTION_REGEX = /^\*{0,2}Q(\d+)[.:]\*{0,2}\s*(.+)$/;
19
- /**
20
- * Canonical answer format for resolved questions.
21
- *
22
- * Matches patterns like:
23
- * **A1:** Use 30 minute timeout
24
- * A1: Use 30 minute timeout
25
- */
26
- export const ANSWER_REGEX = /^\*{0,2}A(\d+)[.:]\*{0,2}\s*(.+)$/;
27
- /**
28
- * Parse questions (Q1/Q2/etc) from a ticket description.
29
- *
30
- * @param description - The ticket description markdown
31
- * @returns Array of parsed questions
32
- */
33
- export function parseQuestions(description) {
34
- if (!description)
35
- return [];
36
- const lines = description.split('\n');
37
- const questions = [];
38
- // First pass: find all questions
39
- for (let i = 0; i < lines.length; i++) {
40
- const match = lines[i].trim().match(QUESTION_REGEX);
41
- if (match) {
42
- questions.push({
43
- number: parseInt(match[1], 10),
44
- text: match[2].trim(),
45
- lineIndex: i,
46
- answered: false,
47
- });
48
- }
49
- }
50
- // Second pass: check which questions already have answers
51
- for (const question of questions) {
52
- for (let i = 0; i < lines.length; i++) {
53
- const match = lines[i].trim().match(ANSWER_REGEX);
54
- if (match && parseInt(match[1], 10) === question.number) {
55
- question.answered = true;
56
- break;
57
- }
58
- }
59
- }
60
- return questions;
61
- }
62
- /**
63
- * Rewrite a ticket description by injecting answers below each question.
64
- *
65
- * For each answered question, inserts a line like:
66
- * **A1:** The answer text
67
- *
68
- * If an answer already exists for that question, it is replaced.
69
- *
70
- * @param description - The original ticket description
71
- * @param answers - Map of question number to answer text
72
- * @returns The rewritten description
73
- */
74
- export function rewriteDescription(description, answers) {
75
- if (!description || answers.size === 0)
76
- return description;
77
- const lines = description.split('\n');
78
- const result = [];
79
- for (let i = 0; i < lines.length; i++) {
80
- const trimmed = lines[i].trim();
81
- // Check if this line is an existing answer that we're replacing
82
- const answerMatch = trimmed.match(ANSWER_REGEX);
83
- if (answerMatch) {
84
- const answerNum = parseInt(answerMatch[1], 10);
85
- if (answers.has(answerNum)) {
86
- // Replace this existing answer with the new one
87
- result.push(`**A${answerNum}:** ${answers.get(answerNum)}`);
88
- answers.delete(answerNum); // Mark as handled
89
- continue;
90
- }
91
- }
92
- // Check if this line is a question
93
- const questionMatch = trimmed.match(QUESTION_REGEX);
94
- if (questionMatch) {
95
- const questionNum = parseInt(questionMatch[1], 10);
96
- result.push(lines[i]); // Keep the question line as-is
97
- // Check if the next line is already an answer for this question
98
- const nextLine = i + 1 < lines.length ? lines[i + 1].trim() : '';
99
- const nextAnswerMatch = nextLine.match(ANSWER_REGEX);
100
- if (nextAnswerMatch && parseInt(nextAnswerMatch[1], 10) === questionNum) {
101
- // Next line is the answer - it will be handled in the next iteration
102
- continue;
103
- }
104
- // Insert answer if we have one and it hasn't been handled yet
105
- if (answers.has(questionNum)) {
106
- result.push(`**A${questionNum}:** ${answers.get(questionNum)}`);
107
- answers.delete(questionNum);
108
- }
109
- continue;
110
- }
111
- result.push(lines[i]);
112
- }
113
- return result.join('\n');
114
- }
115
- export default class TicketResolve extends PMOCommand {
116
- static description = 'Resolve ambiguity questions on tickets flagged by groom';
117
- static examples = [
118
- '<%= config.bin %> <%= command.id %> TKT-001',
119
- '<%= config.bin %> <%= command.id %> TKT-001 TKT-002',
120
- '<%= config.bin %> <%= command.id %> # Interactive picker for needs-clarification tickets',
121
- ];
122
- static strict = false;
123
- static args = {
124
- ticketId: Args.string({
125
- description: 'Ticket ID(s) to resolve - prompts with picker if not provided',
126
- required: false,
127
- }),
128
- };
129
- static flags = {
130
- ...pmoBaseFlags,
131
- json: Flags.boolean({
132
- char: 'm',
133
- aliases: ['machine'],
134
- description: 'Output prompt configuration as JSON (for AI agents/scripts)',
135
- default: false,
136
- }),
137
- };
138
- async execute() {
139
- const { flags, argv } = await this.parse(TicketResolve);
140
- const projectId = flags.project;
141
- const jsonMode = shouldOutputJson(flags);
142
- const handleError = (code, message) => {
143
- if (jsonMode) {
144
- outputErrorAsJson(code, message, createMetadata('ticket resolve', flags));
145
- return;
146
- }
147
- this.error(message);
148
- };
149
- // Collect ticket IDs from argv (supports multiple args)
150
- let ticketIds = argv.filter(a => !a.startsWith('-'));
151
- if (ticketIds.length === 0) {
152
- // No tickets specified - show picker of needs-clarification tickets
153
- const allTickets = await this.storage.listTickets(projectId);
154
- const clarificationTickets = allTickets.filter((t) => t.labels.includes('needs-clarification') ||
155
- t.statusName?.toLowerCase() === 'needs clarification');
156
- if (clarificationTickets.length === 0) {
157
- return handleError('NO_TICKETS', 'No tickets need clarification. Run "prlt work start --action groom" to groom tickets first.');
158
- }
159
- const selected = await this.selectFromList({
160
- message: 'Select ticket to resolve:',
161
- items: clarificationTickets,
162
- getName: (t) => `${t.id} - ${t.title} (${t.statusName})`,
163
- getValue: (t) => t.id,
164
- getCommand: (t) => `prlt ticket resolve ${t.id}${projectId ? ` -P ${projectId}` : ''} --json`,
165
- jsonMode: jsonMode ? { flags, commandName: 'ticket resolve' } : null,
166
- });
167
- if (!selected) {
168
- return;
169
- }
170
- ticketIds = [selected];
171
- }
172
- // Process each ticket
173
- for (const ticketId of ticketIds) {
174
- // eslint-disable-next-line no-await-in-loop
175
- await this.resolveTicket(ticketId, jsonMode, flags);
176
- }
177
- }
178
- async resolveTicket(ticketId, jsonMode, flags) {
179
- const handleError = (code, message) => {
180
- if (jsonMode) {
181
- outputErrorAsJson(code, message, createMetadata('ticket resolve', flags));
182
- return;
183
- }
184
- this.error(message);
185
- };
186
- // Fetch the ticket
187
- const ticket = await this.storage.getTicket(ticketId);
188
- if (!ticket) {
189
- return handleError('TICKET_NOT_FOUND', `Ticket "${ticketId}" not found.`);
190
- }
191
- // Use resolved internal ID for all subsequent operations (external keys like PRLT-xxx resolve to TKT-xxx)
192
- ticketId = ticket.id;
193
- // Parse questions from description
194
- const questions = parseQuestions(ticket.description || '');
195
- const unanswered = questions.filter((q) => !q.answered);
196
- if (unanswered.length === 0) {
197
- if (questions.length === 0) {
198
- this.log(styles.warning(`\nNo questions found in ${styles.emphasis(ticketId)}. Nothing to resolve.`));
199
- }
200
- else {
201
- this.log(styles.success(`\nAll questions in ${styles.emphasis(ticketId)} are already answered.`));
202
- }
203
- return;
204
- }
205
- // JSON mode: output all questions for agent interaction
206
- if (jsonMode) {
207
- const questionData = unanswered.map((q) => ({
208
- number: q.number,
209
- text: q.text,
210
- flag: `--a${q.number}`,
211
- }));
212
- outputSuccessAsJson({
213
- ticketId,
214
- title: ticket.title,
215
- questions: questionData,
216
- hint: `Answer questions by running: prlt ticket resolve ${ticketId} --json and providing answers interactively, or use prlt ticket edit to update the description directly.`,
217
- }, createMetadata('ticket resolve', flags));
218
- return;
219
- }
220
- this.log(styles.title(`\nResolving ${unanswered.length} question(s) for ${styles.emphasis(ticketId)} - ${ticket.title}\n`));
221
- // Interactive mode: prompt for each answer
222
- const answers = new Map();
223
- let cancelled = false;
224
- for (const question of unanswered) {
225
- this.log(styles.emphasis(` Q${question.number}: ${question.text}`));
226
- // eslint-disable-next-line no-await-in-loop
227
- const { answer } = await this.prompt([
228
- {
229
- type: 'input',
230
- name: 'answer',
231
- message: ` A${question.number}:`,
232
- validate: (input) => {
233
- if (!String(input).trim())
234
- return 'Please provide an answer (or type "skip" to skip)';
235
- return true;
236
- },
237
- },
238
- ], null);
239
- if (answer.toLowerCase() === 'cancel') {
240
- cancelled = true;
241
- this.log(styles.warning('\nResolution cancelled.'));
242
- break;
243
- }
244
- if (answer.toLowerCase() !== 'skip') {
245
- answers.set(question.number, answer.trim());
246
- }
247
- this.log(''); // Blank line between questions
248
- }
249
- if (cancelled || answers.size === 0) {
250
- if (!cancelled) {
251
- this.log(styles.muted('\nNo answers provided. Nothing changed.'));
252
- }
253
- return;
254
- }
255
- // Rewrite description with answers
256
- const newDescription = rewriteDescription(ticket.description || '', answers);
257
- // Update the ticket description
258
- await this.storage.updateTicket(ticketId, { description: newDescription });
259
- // Label management: remove needs-clarification, add ready
260
- const currentLabels = [...ticket.labels];
261
- const updatedLabels = currentLabels.filter((l) => l !== 'needs-clarification');
262
- const allAnswered = answers.size === unanswered.length;
263
- if (allAnswered && !updatedLabels.includes('ready')) {
264
- updatedLabels.push('ready');
265
- }
266
- if (JSON.stringify(updatedLabels) !== JSON.stringify(currentLabels)) {
267
- await this.storage.updateTicket(ticketId, { labels: updatedLabels });
268
- }
269
- // Move to Ready column if all questions answered and ticket has a project
270
- if (allAnswered && ticket.projectId) {
271
- try {
272
- const project = await this.storage.getProject(ticket.projectId);
273
- if (project?.workflowId) {
274
- const statuses = await this.storage.listStatuses(project.workflowId);
275
- // Find the "Ready" status (or first unstarted status that isn't "Needs Clarification")
276
- const readyStatus = statuses.find((s) => s.name.toLowerCase() === 'ready' ||
277
- (s.category === 'unstarted' && s.name.toLowerCase() !== 'needs clarification'));
278
- if (readyStatus && readyStatus.name !== ticket.statusName) {
279
- await this.storage.moveTicket(ticket.projectId, ticketId, readyStatus.name);
280
- this.log(styles.muted(` Moved to column: ${readyStatus.name}`));
281
- }
282
- }
283
- }
284
- catch {
285
- // Non-fatal: column move is best-effort
286
- }
287
- }
288
- // Auto-export to board.md
289
- await autoExportToBoard(this.pmoPath, this.storage, (msg) => this.log(styles.muted(msg)));
290
- this.log(styles.success(`\n✅ Resolved ${answers.size}/${unanswered.length} question(s) on ${styles.emphasis(ticketId)}`));
291
- if (allAnswered) {
292
- this.log(styles.muted(' Label: needs-clarification → ready'));
293
- }
294
- }
295
- }
296
- //# sourceMappingURL=resolve.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"resolve.js","sourceRoot":"","sources":["../../../src/commands/ticket/resolve.ts"],"names":[],"mappings":"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"}
@@ -1,19 +0,0 @@
1
- import { PMOCommand } from '../../lib/pmo/index.js';
2
- export default class TicketSpec extends PMOCommand {
3
- static description: string;
4
- static examples: string[];
5
- static args: {
6
- ticketId: import("@oclif/core/interfaces").Arg<string | undefined, Record<string, unknown>>;
7
- specId: import("@oclif/core/interfaces").Arg<string | undefined, Record<string, unknown>>;
8
- };
9
- static flags: {
10
- unlink: import("@oclif/core/interfaces").BooleanFlag<boolean>;
11
- bulk: import("@oclif/core/interfaces").BooleanFlag<boolean>;
12
- spec: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
13
- json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
14
- machine: import("@oclif/core/interfaces").BooleanFlag<boolean>;
15
- project: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
16
- };
17
- execute(): Promise<void>;
18
- private executeBulk;
19
- }
@@ -1,260 +0,0 @@
1
- import { Args, Flags } from '@oclif/core';
2
- import { PMOCommand, pmoBaseFlags, autoExportToBoard } from '../../lib/pmo/index.js';
3
- import { styles } from '../../lib/styles.js';
4
- import { shouldOutputJson, outputErrorAsJson, createMetadata, } from '../../lib/prompt-json.js';
5
- export default class TicketSpec extends PMOCommand {
6
- static description = 'Assign a spec to ticket(s)';
7
- static examples = [
8
- '<%= config.bin %> <%= command.id %> TKT-001 SPEC-001',
9
- '<%= config.bin %> <%= command.id %> TKT-001',
10
- '<%= config.bin %> <%= command.id %>',
11
- '<%= config.bin %> <%= command.id %> TKT-001 --unlink',
12
- '<%= config.bin %> <%= command.id %> --bulk --spec SPEC-001',
13
- ];
14
- static args = {
15
- ticketId: Args.string({
16
- description: 'Ticket ID',
17
- required: false,
18
- }),
19
- specId: Args.string({
20
- description: 'Spec ID to link',
21
- required: false,
22
- }),
23
- };
24
- static flags = {
25
- ...pmoBaseFlags,
26
- unlink: Flags.boolean({
27
- char: 'u',
28
- description: 'Remove spec from ticket instead of adding',
29
- default: false,
30
- }),
31
- bulk: Flags.boolean({
32
- char: 'b',
33
- description: 'Enable bulk mode to assign spec to multiple tickets',
34
- default: false,
35
- }),
36
- spec: Flags.string({
37
- char: 's',
38
- description: 'Spec ID to assign (for bulk mode)',
39
- }),
40
- };
41
- async execute() {
42
- const { args, flags } = await this.parse(TicketSpec);
43
- const projectId = flags.project;
44
- // Check if JSON output mode is active
45
- const jsonMode = shouldOutputJson(flags);
46
- // Bulk mode
47
- if (flags.bulk) {
48
- await this.executeBulk(flags, projectId);
49
- return;
50
- }
51
- // Get all tickets
52
- const tickets = await this.storage.listTickets(projectId);
53
- if (tickets.length === 0) {
54
- if (jsonMode) {
55
- outputErrorAsJson('NO_TICKETS', 'No tickets found.', createMetadata('ticket spec', flags));
56
- return;
57
- }
58
- this.log(styles.muted('\nNo tickets found. Create one with: prlt ticket create'));
59
- return;
60
- }
61
- let ticketId = args.ticketId;
62
- // If no ticket ID provided, prompt for selection
63
- if (!ticketId) {
64
- const ticketChoices = tickets.map(t => {
65
- const specLabel = t.specId ? ` [spec: ${t.specId}]` : '';
66
- return {
67
- id: t.id,
68
- name: `${t.id} - ${t.title}${specLabel}`,
69
- };
70
- });
71
- const selected = await this.selectFromList({
72
- message: 'Select ticket:',
73
- items: ticketChoices,
74
- getName: (t) => t.name,
75
- getValue: (t) => t.id,
76
- getCommand: (t) => `prlt ticket spec ${t.id}${projectId ? ` -P ${projectId}` : ''} --json`,
77
- jsonMode: jsonMode ? { flags, commandName: 'ticket spec' } : null,
78
- });
79
- if (!selected) {
80
- return;
81
- }
82
- ticketId = selected;
83
- }
84
- // Validate ticket exists
85
- const ticket = tickets.find(t => t.id === ticketId);
86
- if (!ticket) {
87
- this.error(`Ticket not found: ${ticketId}`);
88
- }
89
- // Handle unlink
90
- if (flags.unlink) {
91
- if (!ticket.specId) {
92
- this.log(styles.muted(`\nTicket ${ticketId} is not linked to any spec.`));
93
- }
94
- else {
95
- const oldSpecId = ticket.specId;
96
- await this.storage.updateTicket(ticketId, { specId: undefined });
97
- await autoExportToBoard(this.pmoPath, this.storage, (msg) => this.log(styles.muted(msg)));
98
- this.log(styles.success(`\n✅ Unlinked spec "${styles.emphasis(oldSpecId)}" from ticket ${styles.emphasis(ticketId)}`));
99
- }
100
- return;
101
- }
102
- // Get all specs
103
- const specs = await this.storage.listSpecs();
104
- if (specs.length === 0) {
105
- this.log(styles.muted('\nNo specs found.'));
106
- const actionChoices = [
107
- { id: 'create', name: 'Create a new spec' },
108
- { id: 'cancel', name: 'Cancel' },
109
- ];
110
- const action = await this.selectFromList({
111
- message: 'What would you like to do?',
112
- items: actionChoices,
113
- getName: (a) => a.name,
114
- getValue: (a) => a.id,
115
- getCommand: (a) => a.id === 'create' ? 'prlt spec create --json' : '',
116
- jsonMode: jsonMode ? { flags, commandName: 'ticket spec' } : null,
117
- });
118
- if (action === 'create') {
119
- await this.config.runCommand('spec:create', []);
120
- }
121
- return;
122
- }
123
- let specId = args.specId;
124
- // If no spec ID provided, prompt for selection
125
- if (!specId) {
126
- const selected = await this.selectFromList({
127
- message: `Select spec to link to ${ticketId}:`,
128
- items: specs,
129
- getName: (s) => `${s.id} - ${s.title} (${s.status})`,
130
- getValue: (s) => s.id,
131
- getCommand: (s) => `prlt ticket spec ${ticketId} ${s.id}${projectId ? ` -P ${projectId}` : ''} --json`,
132
- jsonMode: jsonMode ? { flags, commandName: 'ticket spec' } : null,
133
- });
134
- if (!selected) {
135
- return;
136
- }
137
- specId = selected;
138
- }
139
- // Validate spec exists
140
- const spec = specs.find(s => s.id === specId);
141
- if (!spec) {
142
- this.error(`Spec not found: ${specId}`);
143
- }
144
- // Check if already linked
145
- if (ticket.specId === specId) {
146
- this.log(styles.muted(`\nTicket "${ticketId}" is already linked to spec "${specId}".`));
147
- return;
148
- }
149
- // Warn if ticket has different spec
150
- if (ticket.specId) {
151
- this.log(styles.warning(`Ticket "${ticketId}" is currently linked to spec "${ticket.specId}"`));
152
- this.log(styles.muted(`This will replace the existing spec link.`));
153
- }
154
- // Reconciliation: Check if ticket's epic has a different spec
155
- if (ticket.epicId) {
156
- const epic = await this.storage.getEpic(ticket.epicId);
157
- if (epic?.specId && epic.specId !== specId) {
158
- this.log(styles.warning(`\n⚠️ Epic "${ticket.epicId}" uses spec "${epic.specId}", but you're assigning "${specId}" to this ticket.`));
159
- const actionChoices = [
160
- { id: 'proceed', name: `Proceed anyway (ticket will have different spec than epic)` },
161
- { id: 'use_epic', name: `Use epic's spec instead (${epic.specId})` },
162
- { id: 'cancel', name: 'Cancel' },
163
- ];
164
- const action = await this.selectFromList({
165
- message: 'How to handle spec mismatch?',
166
- items: actionChoices,
167
- getName: (a) => a.name,
168
- getValue: (a) => a.id,
169
- getCommand: (a) => a.id === 'use_epic' ? `prlt ticket spec ${ticketId} ${epic.specId}${projectId ? ` -P ${projectId}` : ''} --json` : `prlt ticket spec ${ticketId} ${specId}${projectId ? ` -P ${projectId}` : ''} --json`,
170
- jsonMode: jsonMode ? { flags, commandName: 'ticket spec' } : null,
171
- });
172
- if (action === 'cancel' || !action) {
173
- return;
174
- }
175
- if (action === 'use_epic') {
176
- specId = epic.specId;
177
- }
178
- }
179
- }
180
- // Link spec to ticket
181
- await this.storage.updateTicket(ticketId, { specId });
182
- await autoExportToBoard(this.pmoPath, this.storage, (msg) => this.log(styles.muted(msg)));
183
- this.log(styles.success(`\n✅ Linked ticket ${styles.emphasis(ticketId)} to spec ${styles.emphasis(specId)}`));
184
- this.log(styles.muted(` Spec: ${spec.title}`));
185
- this.log(styles.muted(`\nView ticket: prlt ticket view ${ticketId}`));
186
- }
187
- async executeBulk(flags, projectId) {
188
- const jsonMode = shouldOutputJson(flags);
189
- const jsonModeConfig = jsonMode ? { flags: flags, commandName: 'ticket spec' } : null;
190
- this.log(styles.emphasis('📄 Bulk Assign Spec to Tickets\n'));
191
- // Get all tickets
192
- const tickets = await this.storage.listTickets(projectId);
193
- if (tickets.length === 0) {
194
- this.log(styles.muted('\nNo tickets found.'));
195
- return;
196
- }
197
- // Select tickets
198
- const { selectedTickets } = await this.prompt([{
199
- type: 'checkbox',
200
- name: 'selectedTickets',
201
- message: 'Select tickets to update:',
202
- choices: tickets.map(t => {
203
- const specLabel = t.specId ? ` [spec: ${t.specId}]` : '';
204
- return {
205
- name: `${t.id} - ${t.title}${specLabel}`,
206
- value: t.id,
207
- };
208
- }),
209
- }], jsonModeConfig);
210
- if (selectedTickets.length === 0) {
211
- this.log(styles.muted('No tickets selected.'));
212
- return;
213
- }
214
- // Handle unlink - sequential for clear logging
215
- if (flags.unlink) {
216
- for (const ticketId of selectedTickets) {
217
- // eslint-disable-next-line no-await-in-loop
218
- await this.storage.updateTicket(ticketId, { specId: undefined });
219
- this.log(styles.success(` Unlinked spec from ${ticketId}`));
220
- }
221
- await autoExportToBoard(this.pmoPath, this.storage, (msg) => this.log(styles.muted(msg)));
222
- this.log(styles.success(`\n✅ Unlinked spec from ${selectedTickets.length} ticket(s)`));
223
- return;
224
- }
225
- // Get spec to assign
226
- let specId = flags.spec;
227
- if (!specId) {
228
- const specs = await this.storage.listSpecs();
229
- if (specs.length === 0) {
230
- this.log(styles.muted('\nNo specs found. Create one with: prlt spec create'));
231
- return;
232
- }
233
- const { selected } = await this.prompt([{
234
- type: 'list',
235
- name: 'selected',
236
- message: 'Select spec to assign:',
237
- choices: specs.map(s => ({
238
- name: `${s.id} - ${s.title} (${s.status})`,
239
- value: s.id,
240
- command: `prlt ticket spec --bulk --spec ${s.id} --json`,
241
- })),
242
- }], jsonModeConfig);
243
- specId = selected;
244
- }
245
- // Validate spec
246
- const spec = await this.storage.getSpec(specId);
247
- if (!spec) {
248
- this.error(`Spec not found: ${specId}`);
249
- }
250
- // Assign spec to all selected tickets - sequential for clear logging
251
- for (const ticketId of selectedTickets) {
252
- // eslint-disable-next-line no-await-in-loop
253
- await this.storage.updateTicket(ticketId, { specId });
254
- this.log(styles.success(` Linked ${ticketId} to ${specId}`));
255
- }
256
- await autoExportToBoard(this.pmoPath, this.storage, (msg) => this.log(styles.muted(msg)));
257
- this.log(styles.success(`\n✅ Linked ${selectedTickets.length} ticket(s) to spec "${spec.title}"`));
258
- }
259
- }
260
- //# sourceMappingURL=spec.js.map