@proletariat/cli 0.3.91 → 0.3.93

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 (379) hide show
  1. package/bin/validate-better-sqlite3.cjs +129 -0
  2. package/dist/commands/agent/auth.js +2 -6
  3. package/dist/commands/agent/auth.js.map +1 -1
  4. package/dist/commands/agent/cleanup.js +5 -5
  5. package/dist/commands/agent/cleanup.js.map +1 -1
  6. package/dist/commands/agent/gc.d.ts +17 -0
  7. package/dist/commands/agent/gc.js +75 -0
  8. package/dist/commands/agent/gc.js.map +1 -0
  9. package/dist/commands/agent/list.js +2 -2
  10. package/dist/commands/agent/list.js.map +1 -1
  11. package/dist/commands/agent/shell.js +3 -5
  12. package/dist/commands/agent/shell.js.map +1 -1
  13. package/dist/commands/branch/create.js +2 -2
  14. package/dist/commands/branch/create.js.map +1 -1
  15. package/dist/commands/claude/index.js +4 -4
  16. package/dist/commands/claude/index.js.map +1 -1
  17. package/dist/commands/claude/open.js +12 -6
  18. package/dist/commands/claude/open.js.map +1 -1
  19. package/dist/commands/config/index.js +88 -7
  20. package/dist/commands/config/index.js.map +1 -1
  21. package/dist/commands/db/repair.js +6 -6
  22. package/dist/commands/db/repair.js.map +1 -1
  23. package/dist/commands/docker/clean.js +2 -4
  24. package/dist/commands/docker/clean.js.map +1 -1
  25. package/dist/commands/docker/index.js +2 -4
  26. package/dist/commands/docker/index.js.map +1 -1
  27. package/dist/commands/docker/list.js +2 -4
  28. package/dist/commands/docker/list.js.map +1 -1
  29. package/dist/commands/docker/logs.js +2 -4
  30. package/dist/commands/docker/logs.js.map +1 -1
  31. package/dist/commands/docker/restart.js +2 -4
  32. package/dist/commands/docker/restart.js.map +1 -1
  33. package/dist/commands/docker/shell.js +2 -4
  34. package/dist/commands/docker/shell.js.map +1 -1
  35. package/dist/commands/docker/start.js +2 -4
  36. package/dist/commands/docker/start.js.map +1 -1
  37. package/dist/commands/docker/stop.js +2 -4
  38. package/dist/commands/docker/stop.js.map +1 -1
  39. package/dist/commands/docker/sync.js +2 -4
  40. package/dist/commands/docker/sync.js.map +1 -1
  41. package/dist/commands/execution/config.js +39 -0
  42. package/dist/commands/execution/config.js.map +1 -1
  43. package/dist/commands/execution/list.js +2 -4
  44. package/dist/commands/execution/list.js.map +1 -1
  45. package/dist/commands/execution/logs.js +2 -4
  46. package/dist/commands/execution/logs.js.map +1 -1
  47. package/dist/commands/execution/stop.js +2 -4
  48. package/dist/commands/execution/stop.js.map +1 -1
  49. package/dist/commands/execution/view.js +2 -4
  50. package/dist/commands/execution/view.js.map +1 -1
  51. package/dist/commands/gh/login.js +2 -1
  52. package/dist/commands/gh/login.js.map +1 -1
  53. package/dist/commands/gh/status.js +18 -2
  54. package/dist/commands/gh/status.js.map +1 -1
  55. package/dist/commands/hook/export.d.ts +17 -0
  56. package/dist/commands/hook/export.js +52 -0
  57. package/dist/commands/hook/export.js.map +1 -0
  58. package/dist/commands/hook/fire.d.ts +29 -0
  59. package/dist/commands/hook/fire.js +139 -0
  60. package/dist/commands/hook/fire.js.map +1 -0
  61. package/dist/commands/hook/index.d.ts +14 -0
  62. package/dist/commands/hook/index.js +53 -0
  63. package/dist/commands/hook/index.js.map +1 -0
  64. package/dist/commands/hook/list.d.ts +19 -0
  65. package/dist/commands/hook/list.js +136 -0
  66. package/dist/commands/hook/list.js.map +1 -0
  67. package/dist/commands/hook/preset.d.ts +22 -0
  68. package/dist/commands/hook/preset.js +76 -0
  69. package/dist/commands/hook/preset.js.map +1 -0
  70. package/dist/commands/linear/connect.js.map +1 -1
  71. package/dist/commands/mcp-server.js +2 -3
  72. package/dist/commands/mcp-server.js.map +1 -1
  73. package/dist/commands/orchestrate/index.d.ts +35 -0
  74. package/dist/commands/orchestrate/index.js +267 -0
  75. package/dist/commands/orchestrate/index.js.map +1 -0
  76. package/dist/commands/orchestrator/attach.js +2 -3
  77. package/dist/commands/orchestrator/attach.js.map +1 -1
  78. package/dist/commands/orchestrator/start.js +22 -31
  79. package/dist/commands/orchestrator/start.js.map +1 -1
  80. package/dist/commands/orchestrator/stop.js +21 -26
  81. package/dist/commands/orchestrator/stop.js.map +1 -1
  82. package/dist/commands/qa/index.js +5 -5
  83. package/dist/commands/qa/index.js.map +1 -1
  84. package/dist/commands/session/attach.js +5 -7
  85. package/dist/commands/session/attach.js.map +1 -1
  86. package/dist/commands/session/cleanup.js +2 -4
  87. package/dist/commands/session/cleanup.js.map +1 -1
  88. package/dist/commands/session/exec.js +2 -3
  89. package/dist/commands/session/exec.js.map +1 -1
  90. package/dist/commands/session/health.js +2 -4
  91. package/dist/commands/session/health.js.map +1 -1
  92. package/dist/commands/session/inspect.js +2 -3
  93. package/dist/commands/session/inspect.js.map +1 -1
  94. package/dist/commands/session/list.js +2 -4
  95. package/dist/commands/session/list.js.map +1 -1
  96. package/dist/commands/session/peek.js +3 -6
  97. package/dist/commands/session/peek.js.map +1 -1
  98. package/dist/commands/session/poke.js +2 -4
  99. package/dist/commands/session/poke.js.map +1 -1
  100. package/dist/commands/session/prune.js +2 -4
  101. package/dist/commands/session/prune.js.map +1 -1
  102. package/dist/commands/session/report.js +2 -4
  103. package/dist/commands/session/report.js.map +1 -1
  104. package/dist/commands/session/restart.js +2 -3
  105. package/dist/commands/session/restart.js.map +1 -1
  106. package/dist/commands/shortcut/connect.js.map +1 -1
  107. package/dist/commands/ticket/complete.js +20 -5
  108. package/dist/commands/ticket/complete.js.map +1 -1
  109. package/dist/commands/ticket/create.d.ts +3 -4
  110. package/dist/commands/ticket/create.js +69 -88
  111. package/dist/commands/ticket/create.js.map +1 -1
  112. package/dist/commands/ticket/edit.js +22 -14
  113. package/dist/commands/ticket/edit.js.map +1 -1
  114. package/dist/commands/ticket/reassign.js +35 -6
  115. package/dist/commands/ticket/reassign.js.map +1 -1
  116. package/dist/commands/ticket/resolve.js +15 -5
  117. package/dist/commands/ticket/resolve.js.map +1 -1
  118. package/dist/commands/ticket/update.js +31 -14
  119. package/dist/commands/ticket/update.js.map +1 -1
  120. package/dist/commands/ticket/view.js +9 -5
  121. package/dist/commands/ticket/view.js.map +1 -1
  122. package/dist/commands/trello/configure.js.map +1 -1
  123. package/dist/commands/work/complete.js +2 -3
  124. package/dist/commands/work/complete.js.map +1 -1
  125. package/dist/commands/work/hooks/add.js +2 -4
  126. package/dist/commands/work/hooks/add.js.map +1 -1
  127. package/dist/commands/work/hooks/list.js +2 -4
  128. package/dist/commands/work/hooks/list.js.map +1 -1
  129. package/dist/commands/work/hooks/remove.js +2 -4
  130. package/dist/commands/work/hooks/remove.js.map +1 -1
  131. package/dist/commands/work/hooks/toggle.js +2 -4
  132. package/dist/commands/work/hooks/toggle.js.map +1 -1
  133. package/dist/commands/work/index.js +4 -0
  134. package/dist/commands/work/index.js.map +1 -1
  135. package/dist/commands/work/ready.js +2 -3
  136. package/dist/commands/work/ready.js.map +1 -1
  137. package/dist/commands/work/rebase.d.ts +33 -0
  138. package/dist/commands/work/rebase.js +394 -0
  139. package/dist/commands/work/rebase.js.map +1 -0
  140. package/dist/commands/work/ship.d.ts +1 -0
  141. package/dist/commands/work/ship.js +49 -4
  142. package/dist/commands/work/ship.js.map +1 -1
  143. package/dist/commands/work/spawn.js +2 -4
  144. package/dist/commands/work/spawn.js.map +1 -1
  145. package/dist/commands/work/start.d.ts +7 -0
  146. package/dist/commands/work/start.js +190 -22
  147. package/dist/commands/work/start.js.map +1 -1
  148. package/dist/commands/work/stop.js +2 -4
  149. package/dist/commands/work/stop.js.map +1 -1
  150. package/dist/commands/work/watch.js +2 -4
  151. package/dist/commands/work/watch.js.map +1 -1
  152. package/dist/hooks/init.js +16 -7
  153. package/dist/hooks/init.js.map +1 -1
  154. package/dist/lib/agents/commands.d.ts +9 -3
  155. package/dist/lib/agents/commands.js +103 -88
  156. package/dist/lib/agents/commands.js.map +1 -1
  157. package/dist/lib/asana/config.d.ts +8 -8
  158. package/dist/lib/asana/config.js.map +1 -1
  159. package/dist/lib/asana/mapper.d.ts +2 -2
  160. package/dist/lib/asana/mapper.js.map +1 -1
  161. package/dist/lib/dashboard/server.js +1 -1
  162. package/dist/lib/dashboard/server.js.map +1 -1
  163. package/dist/lib/database/agents.d.ts +62 -4
  164. package/dist/lib/database/agents.js +163 -12
  165. package/dist/lib/database/agents.js.map +1 -1
  166. package/dist/lib/database/db-safety.d.ts +4 -4
  167. package/dist/lib/database/db-safety.js +10 -10
  168. package/dist/lib/database/db-safety.js.map +1 -1
  169. package/dist/lib/database/driver.d.ts +21 -19
  170. package/dist/lib/database/driver.js +21 -20
  171. package/dist/lib/database/driver.js.map +1 -1
  172. package/dist/lib/database/drizzle-schema.d.ts +2 -2
  173. package/dist/lib/database/drizzle-schema.js +2 -1
  174. package/dist/lib/database/drizzle-schema.js.map +1 -1
  175. package/dist/lib/database/drizzle.d.ts +9 -9
  176. package/dist/lib/database/drizzle.js +17 -9
  177. package/dist/lib/database/drizzle.js.map +1 -1
  178. package/dist/lib/database/index.d.ts +1 -1
  179. package/dist/lib/database/index.js +1 -1
  180. package/dist/lib/database/index.js.map +1 -1
  181. package/dist/lib/database/migrations/0001_baseline.js.map +1 -1
  182. package/dist/lib/database/migrations/0002_work_hooks.js.map +1 -1
  183. package/dist/lib/database/migrations/0003_actions_redesign.js.map +1 -1
  184. package/dist/lib/database/migrations/0004_workflow_rules.js.map +1 -1
  185. package/dist/lib/database/migrations/0005_provider_status_mapping.js.map +1 -1
  186. package/dist/lib/database/migrations/0006_drop_theme_names_used.js.map +1 -1
  187. package/dist/lib/database/migrations/0007_add_worktree_columns.js.map +1 -1
  188. package/dist/lib/database/migrations/0008_add_agent_mount_mode.js.map +1 -1
  189. package/dist/lib/database/migrations/0009_create_media_items.js.map +1 -1
  190. package/dist/lib/database/migrations/0010_add_ticket_position.js.map +1 -1
  191. package/dist/lib/database/migrations/0011_add_review_gate.js.map +1 -1
  192. package/dist/lib/database/migrations/0012_add_action_network_allowlist.js.map +1 -1
  193. package/dist/lib/database/migrations/0013_agent_lifecycle_states.d.ts +11 -0
  194. package/dist/lib/database/migrations/0013_agent_lifecycle_states.js +47 -0
  195. package/dist/lib/database/migrations/0013_agent_lifecycle_states.js.map +1 -0
  196. package/dist/lib/database/migrations/0014_agent_work_lifecycle.d.ts +10 -0
  197. package/dist/lib/database/migrations/0014_agent_work_lifecycle.js +31 -0
  198. package/dist/lib/database/migrations/0014_agent_work_lifecycle.js.map +1 -0
  199. package/dist/lib/database/migrations/0015_orchestrate_hooks.d.ts +8 -0
  200. package/dist/lib/database/migrations/0015_orchestrate_hooks.js +35 -0
  201. package/dist/lib/database/migrations/0015_orchestrate_hooks.js.map +1 -0
  202. package/dist/lib/database/migrations/0016_schema_catchup.d.ts +15 -0
  203. package/dist/lib/database/migrations/0016_schema_catchup.js +154 -0
  204. package/dist/lib/database/migrations/0016_schema_catchup.js.map +1 -0
  205. package/dist/lib/database/migrations/index.js +8 -0
  206. package/dist/lib/database/migrations/index.js.map +1 -1
  207. package/dist/lib/database/migrator.d.ts +3 -3
  208. package/dist/lib/database/migrator.js.map +1 -1
  209. package/dist/lib/database/native-validation.d.ts +40 -0
  210. package/dist/lib/database/native-validation.js +123 -0
  211. package/dist/lib/database/native-validation.js.map +1 -0
  212. package/dist/lib/database/pmo-bootstrap.d.ts +2 -2
  213. package/dist/lib/database/pmo-bootstrap.js +28 -6
  214. package/dist/lib/database/pmo-bootstrap.js.map +1 -1
  215. package/dist/lib/database/repositories.js +1 -1
  216. package/dist/lib/database/repositories.js.map +1 -1
  217. package/dist/lib/database/settings-store.d.ts +3 -3
  218. package/dist/lib/database/settings-store.js +2 -2
  219. package/dist/lib/database/settings-store.js.map +1 -1
  220. package/dist/lib/database/themes.js +3 -3
  221. package/dist/lib/database/themes.js.map +1 -1
  222. package/dist/lib/database/workspace-schema.d.ts +1 -1
  223. package/dist/lib/database/workspace-schema.js +3 -1
  224. package/dist/lib/database/workspace-schema.js.map +1 -1
  225. package/dist/lib/database/workspace.d.ts +4 -4
  226. package/dist/lib/database/workspace.js +25 -4
  227. package/dist/lib/database/workspace.js.map +1 -1
  228. package/dist/lib/events/events.d.ts +28 -0
  229. package/dist/lib/events/index.d.ts +1 -1
  230. package/dist/lib/events/index.js.map +1 -1
  231. package/dist/lib/execution/config.d.ts +35 -33
  232. package/dist/lib/execution/config.js +14 -0
  233. package/dist/lib/execution/config.js.map +1 -1
  234. package/dist/lib/execution/devcontainer.d.ts +1 -1
  235. package/dist/lib/execution/devcontainer.js +37 -4
  236. package/dist/lib/execution/devcontainer.js.map +1 -1
  237. package/dist/lib/execution/runners/devcontainer-tmux.js +1 -1
  238. package/dist/lib/execution/runners/devcontainer-tmux.js.map +1 -1
  239. package/dist/lib/execution/runners/devcontainer.js +9 -1
  240. package/dist/lib/execution/runners/devcontainer.js.map +1 -1
  241. package/dist/lib/execution/runners/docker-credentials.d.ts +8 -0
  242. package/dist/lib/execution/runners/docker-credentials.js +20 -3
  243. package/dist/lib/execution/runners/docker-credentials.js.map +1 -1
  244. package/dist/lib/execution/runners/docker-management.d.ts +31 -0
  245. package/dist/lib/execution/runners/docker-management.js +95 -0
  246. package/dist/lib/execution/runners/docker-management.js.map +1 -1
  247. package/dist/lib/execution/runners/index.d.ts +1 -1
  248. package/dist/lib/execution/runners/index.js +1 -1
  249. package/dist/lib/execution/runners/index.js.map +1 -1
  250. package/dist/lib/execution/runners/shared.d.ts +23 -1
  251. package/dist/lib/execution/runners/shared.js +112 -1
  252. package/dist/lib/execution/runners/shared.js.map +1 -1
  253. package/dist/lib/execution/spawner.d.ts +3 -3
  254. package/dist/lib/execution/spawner.js +8 -1
  255. package/dist/lib/execution/spawner.js.map +1 -1
  256. package/dist/lib/execution/storage.d.ts +3 -3
  257. package/dist/lib/execution/storage.js.map +1 -1
  258. package/dist/lib/execution/types.js +2 -2
  259. package/dist/lib/external-issues/mapping-store.d.ts +2 -2
  260. package/dist/lib/external-issues/mapping-store.js.map +1 -1
  261. package/dist/lib/external-issues/outbound-sync.d.ts +3 -3
  262. package/dist/lib/external-issues/outbound-sync.js.map +1 -1
  263. package/dist/lib/jira/config.d.ts +5 -5
  264. package/dist/lib/jira/config.js.map +1 -1
  265. package/dist/lib/linear/client.d.ts +13 -0
  266. package/dist/lib/linear/client.js +37 -0
  267. package/dist/lib/linear/client.js.map +1 -1
  268. package/dist/lib/linear/config.d.ts +8 -8
  269. package/dist/lib/linear/config.js.map +1 -1
  270. package/dist/lib/linear/mapper.d.ts +2 -2
  271. package/dist/lib/linear/mapper.js.map +1 -1
  272. package/dist/lib/mcp/types.d.ts +2 -2
  273. package/dist/lib/monday/config.d.ts +9 -9
  274. package/dist/lib/monday/config.js.map +1 -1
  275. package/dist/lib/monday/mapper.d.ts +2 -2
  276. package/dist/lib/monday/mapper.js.map +1 -1
  277. package/dist/lib/orchestrate/actions.d.ts +20 -0
  278. package/dist/lib/orchestrate/actions.js +194 -0
  279. package/dist/lib/orchestrate/actions.js.map +1 -0
  280. package/dist/lib/orchestrate/config-loader.d.ts +31 -0
  281. package/dist/lib/orchestrate/config-loader.js +201 -0
  282. package/dist/lib/orchestrate/config-loader.js.map +1 -0
  283. package/dist/lib/orchestrate/engine.d.ts +94 -0
  284. package/dist/lib/orchestrate/engine.js +290 -0
  285. package/dist/lib/orchestrate/engine.js.map +1 -0
  286. package/dist/lib/orchestrate/index.d.ts +16 -0
  287. package/dist/lib/orchestrate/index.js +14 -0
  288. package/dist/lib/orchestrate/index.js.map +1 -0
  289. package/dist/lib/orchestrate/poller.d.ts +58 -0
  290. package/dist/lib/orchestrate/poller.js +282 -0
  291. package/dist/lib/orchestrate/poller.js.map +1 -0
  292. package/dist/lib/orchestrate/presets.d.ts +27 -0
  293. package/dist/lib/orchestrate/presets.js +65 -0
  294. package/dist/lib/orchestrate/presets.js.map +1 -0
  295. package/dist/lib/orchestrate/types.d.ts +93 -0
  296. package/dist/lib/orchestrate/types.js +46 -0
  297. package/dist/lib/orchestrate/types.js.map +1 -0
  298. package/dist/lib/pmo/diet.d.ts +3 -3
  299. package/dist/lib/pmo/diet.js.map +1 -1
  300. package/dist/lib/pmo/find-pmo.js +5 -1
  301. package/dist/lib/pmo/find-pmo.js.map +1 -1
  302. package/dist/lib/pmo/index.js +7 -6
  303. package/dist/lib/pmo/index.js.map +1 -1
  304. package/dist/lib/pmo/storage/base.d.ts +15 -15
  305. package/dist/lib/pmo/storage/base.js.map +1 -1
  306. package/dist/lib/pmo/storage/dependencies.js.map +1 -1
  307. package/dist/lib/pmo/storage/helpers.js.map +1 -1
  308. package/dist/lib/pmo/storage/index.d.ts +2 -8
  309. package/dist/lib/pmo/storage/index.js +2 -10
  310. package/dist/lib/pmo/storage/index.js.map +1 -1
  311. package/dist/lib/pmo/storage/projects.js.map +1 -1
  312. package/dist/lib/pmo/storage/roadmaps.js +4 -4
  313. package/dist/lib/pmo/storage/roadmaps.js.map +1 -1
  314. package/dist/lib/pmo/storage/specs.js.map +1 -1
  315. package/dist/lib/pmo/storage/statuses.js +1 -1
  316. package/dist/lib/pmo/storage/statuses.js.map +1 -1
  317. package/dist/lib/pmo/storage/tickets.js +1 -1
  318. package/dist/lib/pmo/storage/tickets.js.map +1 -1
  319. package/dist/lib/pmo/storage/types.d.ts +2 -2
  320. package/dist/lib/pmo/storage/views.js.map +1 -1
  321. package/dist/lib/pr/index.d.ts +28 -0
  322. package/dist/lib/pr/index.js +100 -0
  323. package/dist/lib/pr/index.js.map +1 -1
  324. package/dist/lib/providers/event-emitting-provider.d.ts +4 -2
  325. package/dist/lib/providers/event-emitting-provider.js +12 -0
  326. package/dist/lib/providers/event-emitting-provider.js.map +1 -1
  327. package/dist/lib/providers/index.d.ts +1 -1
  328. package/dist/lib/providers/index.js.map +1 -1
  329. package/dist/lib/providers/linear-provider.d.ts +6 -4
  330. package/dist/lib/providers/linear-provider.js +106 -0
  331. package/dist/lib/providers/linear-provider.js.map +1 -1
  332. package/dist/lib/providers/pmo-provider.d.ts +4 -2
  333. package/dist/lib/providers/pmo-provider.js +26 -0
  334. package/dist/lib/providers/pmo-provider.js.map +1 -1
  335. package/dist/lib/providers/resolver.d.ts +3 -3
  336. package/dist/lib/providers/resolver.js.map +1 -1
  337. package/dist/lib/providers/state-resolution.d.ts +8 -8
  338. package/dist/lib/providers/state-resolution.js.map +1 -1
  339. package/dist/lib/providers/status-mapping.d.ts +2 -2
  340. package/dist/lib/providers/status-mapping.js.map +1 -1
  341. package/dist/lib/providers/trigger-config.d.ts +4 -4
  342. package/dist/lib/providers/trigger-config.js.map +1 -1
  343. package/dist/lib/providers/types.d.ts +31 -3
  344. package/dist/lib/registry/index.js +11 -4
  345. package/dist/lib/registry/index.js.map +1 -1
  346. package/dist/lib/shortcut/config.d.ts +8 -8
  347. package/dist/lib/shortcut/config.js.map +1 -1
  348. package/dist/lib/telemetry/analytics.d.ts +1 -1
  349. package/dist/lib/telemetry/analytics.js +16 -8
  350. package/dist/lib/telemetry/analytics.js.map +1 -1
  351. package/dist/lib/trello/config.d.ts +10 -10
  352. package/dist/lib/trello/config.js.map +1 -1
  353. package/dist/lib/trello/mapper.d.ts +2 -2
  354. package/dist/lib/trello/mapper.js.map +1 -1
  355. package/dist/lib/update-check.d.ts +8 -3
  356. package/dist/lib/update-check.js +16 -5
  357. package/dist/lib/update-check.js.map +1 -1
  358. package/dist/lib/work-lifecycle/action-chaining.d.ts +3 -3
  359. package/dist/lib/work-lifecycle/action-chaining.js.map +1 -1
  360. package/dist/lib/work-lifecycle/hooks/manager.d.ts +3 -3
  361. package/dist/lib/work-lifecycle/hooks/manager.js.map +1 -1
  362. package/dist/lib/work-lifecycle/hooks/storage.d.ts +3 -3
  363. package/dist/lib/work-lifecycle/hooks/storage.js.map +1 -1
  364. package/dist/lib/work-lifecycle/hooks/types.d.ts +3 -2
  365. package/dist/lib/work-lifecycle/hooks/types.js +12 -0
  366. package/dist/lib/work-lifecycle/hooks/types.js.map +1 -1
  367. package/dist/lib/work-lifecycle/post-execution.d.ts +2 -2
  368. package/dist/lib/work-lifecycle/post-execution.js.map +1 -1
  369. package/dist/lib/work-lifecycle/rule-evaluator.d.ts +3 -3
  370. package/dist/lib/work-lifecycle/rule-evaluator.js.map +1 -1
  371. package/dist/lib/work-source/config.d.ts +6 -6
  372. package/dist/lib/work-source/config.js.map +1 -1
  373. package/dist/lib/work-source/provider-sources.d.ts +12 -12
  374. package/dist/lib/work-source/provider-sources.js.map +1 -1
  375. package/oclif.manifest.json +1305 -650
  376. package/package.json +4 -3
  377. package/dist/lib/database/sqlite.d.ts +0 -155
  378. package/dist/lib/database/sqlite.js +0 -358
  379. package/dist/lib/database/sqlite.js.map +0 -1
@@ -3,7 +3,6 @@ import { Args, Flags } from '@oclif/core';
3
3
  import * as fs from 'node:fs';
4
4
  import * as path from 'node:path';
5
5
  import { execSync } from 'node:child_process';
6
- import { SqliteDatabase } from '../../lib/database/sqlite.js';
7
6
  import { PMOCommand, pmoBaseFlags, autoExportToBoard } from '../../lib/pmo/index.js';
8
7
  import { trackAgentSpawned, trackPrimitiveExecuted } from '../../lib/telemetry/analytics.js';
9
8
  import { enrichAgentSession } from '../../lib/telemetry/telemetry-bridge.js';
@@ -13,6 +12,7 @@ import { FlagResolver } from '../../lib/flags/index.js';
13
12
  import { getWorkColumnSetting, findColumnByName, getTicketExternalMetadata, resolveExternalTicketId, resolveReviewGate } from '../../lib/pmo/utils.js';
14
13
  import { styles } from '../../lib/styles.js';
15
14
  import { getWorkspaceInfo, createEphemeralAgent, getTicketTmuxSession, killTmuxSession, findWorktreeForBranch, resolveAgentDir, } from '../../lib/agents/commands.js';
15
+ import { openWorkspaceDatabase } from '../../lib/database/index.js';
16
16
  import { generateBranchName, DEFAULT_EXECUTION_CONFIG, } from '../../lib/execution/types.js';
17
17
  import { runExecution, isDockerRunning, isGitHubTokenAvailable, isDevcontainerCliInstalled, dockerCredentialsExist, getDockerCredentialInfo, isClaudeExecutor, getExecutorDisplayName } from '../../lib/execution/runners.js';
18
18
  import { ExecutionStorage, ContainerStorage } from '../../lib/execution/storage.js';
@@ -41,7 +41,7 @@ function tryGitCommand(cmd, cwd) {
41
41
  return true;
42
42
  }
43
43
  catch {
44
- return false;
44
+ return false; /* git command failed — caller uses boolean to branch logic */
45
45
  }
46
46
  }
47
47
  /**
@@ -137,6 +137,7 @@ function buildExternalSpawnContextMessage(envelope, additionalMessage) {
137
137
  }
138
138
  export default class WorkStart extends PMOCommand {
139
139
  static description = 'Start work on a ticket (launches an agent to implement it)';
140
+ static strict = false; // Allow multiple ticket ID args for batch spawn
140
141
  static examples = [
141
142
  '<%= config.bin %> <%= command.id %> TKT-001',
142
143
  '<%= config.bin %> <%= command.id %> TKT-001 --create-pr # Create PR when work is ready',
@@ -157,10 +158,12 @@ export default class WorkStart extends PMOCommand {
157
158
  '<%= config.bin %> <%= command.id %> --from-issue # Uses workspace default source',
158
159
  '<%= config.bin %> <%= command.id %> TKT-001 --review-gate auto # Ship directly, no approval needed',
159
160
  '<%= config.bin %> <%= command.id %> TKT-001 --review-gate post # Ship then human reviews after',
161
+ '<%= config.bin %> <%= command.id %> PRLT-1085 PRLT-1086 PRLT-1087 --action implement --create-pr # Batch spawn in parallel',
162
+ '<%= config.bin %> <%= command.id %> TKT-001 TKT-002 TKT-003 --max-parallel 2 # Limit concurrent spawns',
160
163
  ];
161
164
  static args = {
162
165
  ticketId: Args.string({
163
- description: 'Ticket ID - prompts with dropdown if not provided',
166
+ description: 'Ticket ID(s) - prompts with dropdown if not provided. Pass multiple IDs for batch spawn.',
164
167
  required: false,
165
168
  }),
166
169
  };
@@ -309,6 +312,10 @@ export default class WorkStart extends PMOCommand {
309
312
  description: 'Repository to mount in agent workspace (can be specified multiple times, first is primary)',
310
313
  multiple: true,
311
314
  }),
315
+ 'max-parallel': Flags.integer({
316
+ description: 'Maximum number of concurrent spawns when starting multiple tickets (default: unlimited)',
317
+ min: 1,
318
+ }),
312
319
  };
313
320
  async findLinkedTicketByEnvelope(projectId, envelope) {
314
321
  const tickets = await this.storage.listTickets(projectId);
@@ -444,7 +451,7 @@ export default class WorkStart extends PMOCommand {
444
451
  };
445
452
  }
446
453
  async execute() {
447
- const { args, flags } = await this.parse(WorkStart);
454
+ const { args, flags, argv } = await this.parse(WorkStart);
448
455
  let projectId = flags.project;
449
456
  // Check for conflicting PR flags
450
457
  if (flags['create-pr'] && flags['no-pr']) {
@@ -492,8 +499,7 @@ export default class WorkStart extends PMOCommand {
492
499
  return handleError('NOT_IN_WORKSPACE', 'Not in a workspace. Run "prlt new" first.');
493
500
  }
494
501
  // Open database for execution storage
495
- const dbPath = path.join(workspaceInfo.path, '.proletariat', 'workspace.db');
496
- const db = new SqliteDatabase(dbPath);
502
+ const db = openWorkspaceDatabase(workspaceInfo.path);
497
503
  const executionStorage = new ExecutionStorage(db);
498
504
  try {
499
505
  // Handle batch mode (--all)
@@ -501,6 +507,12 @@ export default class WorkStart extends PMOCommand {
501
507
  await this.runBatchMode(workspaceInfo, db, executionStorage, flags);
502
508
  return;
503
509
  }
510
+ // Handle multi-ticket batch spawn: prlt work start TICKET1 TICKET2 TICKET3
511
+ const ticketIdArgs = argv.filter(a => !a.startsWith('-'));
512
+ if (ticketIdArgs.length > 1) {
513
+ await this.runMultiTicketBatch(ticketIdArgs, workspaceInfo, db, executionStorage, flags);
514
+ return;
515
+ }
504
516
  // Get ticketId - prompt if not provided
505
517
  let ticketId = args.ticketId;
506
518
  let externalIssueContextMessage;
@@ -1484,9 +1496,10 @@ export default class WorkStart extends PMOCommand {
1484
1496
  this.log(styles.warning('Docker daemon is not running. Start Docker Desktop or use --run-on-host.'));
1485
1497
  this.log('');
1486
1498
  if (flags.yes || !process.stdout.isTTY) {
1487
- // Non-interactive mode: auto-switch to host
1488
- environment = 'host';
1489
- this.log(styles.muted('Switched to host environment (Docker not running).'));
1499
+ // Non-interactive mode: error instead of silently falling back to host
1500
+ db.close();
1501
+ this.error('Cannot start in Docker Docker daemon is not running.\n' +
1502
+ 'Start Docker Desktop, or use --run-on-host to explicitly run on host.');
1490
1503
  }
1491
1504
  else {
1492
1505
  const dockerChoices = [
@@ -1538,10 +1551,10 @@ export default class WorkStart extends PMOCommand {
1538
1551
  const hasCredentials = dockerCredentialsExist();
1539
1552
  if (!hasCredentials) {
1540
1553
  if (flags.yes || !process.stdout.isTTY) {
1541
- // Non-interactive mode: auto-fallback to host
1542
- this.log(styles.warning('⚠️ Saved auth method is "oauth" but no OAuth credentials found.'));
1543
- environment = 'host';
1544
- this.log(styles.muted('Switched to host environment (OAuth credentials missing).'));
1554
+ // Non-interactive mode: error instead of silently falling back to host
1555
+ db.close();
1556
+ this.error('Cannot start in Docker — OAuth credentials not found.\n' +
1557
+ `Run \`${this.config.bin} agent auth\` to set up credentials, or use --run-on-host to explicitly run on host.`);
1545
1558
  }
1546
1559
  else {
1547
1560
  this.log('');
@@ -1563,9 +1576,10 @@ export default class WorkStart extends PMOCommand {
1563
1576
  else {
1564
1577
  // No saved preference and no OAuth credentials — prompt user
1565
1578
  if (flags.yes || !process.stdout.isTTY) {
1566
- // Non-interactive mode: auto-fallback to host
1567
- environment = 'host';
1568
- this.log(styles.warning('⚠️ No OAuth credentials found. Switched to host environment.'));
1579
+ // Non-interactive mode: error instead of silently falling back to host
1580
+ db.close();
1581
+ this.error('Cannot start in Docker OAuth credentials not found.\n' +
1582
+ `Run \`${this.config.bin} agent auth\` to set up credentials, or use --run-on-host to explicitly run on host.`);
1569
1583
  }
1570
1584
  else {
1571
1585
  this.log('');
@@ -2278,6 +2292,158 @@ export default class WorkStart extends PMOCommand {
2278
2292
  throw error;
2279
2293
  }
2280
2294
  }
2295
+ /**
2296
+ * Run multi-ticket batch spawn: prlt work start TICKET1 TICKET2 TICKET3
2297
+ * Spawns agents in parallel with optional --max-parallel concurrency limit.
2298
+ */
2299
+ async runMultiTicketBatch(ticketIds, workspaceInfo, db, executionStorage, flags) {
2300
+ const jsonMode = shouldOutputJson(flags);
2301
+ const maxParallel = flags['max-parallel'] || ticketIds.length;
2302
+ if (!jsonMode) {
2303
+ this.log('');
2304
+ this.log(styles.header(`Batch spawn: ${ticketIds.length} ticket(s)${maxParallel < ticketIds.length ? ` (max ${maxParallel} concurrent)` : ''}`));
2305
+ this.log('');
2306
+ }
2307
+ // Resolve project ID (needed for ticket lookups)
2308
+ let projectId = flags.project;
2309
+ projectId = projectId || await this.requireProject({
2310
+ jsonMode: jsonMode ? { flags, commandName: 'work start', baseCommand: `prlt work start ${ticketIds.join(' ')}` } : undefined,
2311
+ });
2312
+ const tickets = [];
2313
+ for (const rawId of ticketIds) {
2314
+ // Try direct lookup first
2315
+ let ticket = await this.storage.getTicket(rawId);
2316
+ // If not found, try resolving as external ticket ID
2317
+ if (!ticket) {
2318
+ const resolved = resolveExternalTicketId({ id: rawId, metadata: {} });
2319
+ if (resolved !== rawId) {
2320
+ ticket = await this.storage.getTicket(resolved);
2321
+ }
2322
+ }
2323
+ // Still not found — try searching by external key in metadata
2324
+ if (!ticket) {
2325
+ const allTickets = await this.storage.listTickets(projectId);
2326
+ ticket = allTickets.find(t => {
2327
+ const ext = getTicketExternalMetadata(t);
2328
+ return ext.key === rawId;
2329
+ }) ?? null;
2330
+ }
2331
+ if (!ticket) {
2332
+ if (jsonMode) {
2333
+ outputErrorAsJson('TICKET_NOT_FOUND', `Ticket "${rawId}" not found.`, createMetadata('work start', flags));
2334
+ db.close();
2335
+ return;
2336
+ }
2337
+ this.error(`Ticket "${rawId}" not found.`);
2338
+ return; // unreachable but helps TS narrowing
2339
+ }
2340
+ tickets.push({ ticket, originalId: rawId });
2341
+ }
2342
+ // Build start args that apply to all tickets (same flags for all)
2343
+ const buildStartArgs = (ticketId, projId) => {
2344
+ const startArgs = [ticketId, '--project', projId, '--ephemeral'];
2345
+ if (flags.action)
2346
+ startArgs.push('--action', flags.action);
2347
+ if (flags.prompt)
2348
+ startArgs.push('--prompt', flags.prompt);
2349
+ if (flags.message)
2350
+ startArgs.push('--message', flags.message);
2351
+ if (flags.display)
2352
+ startArgs.push('--display', flags.display);
2353
+ if (flags['run-on-host'])
2354
+ startArgs.push('--run-on-host');
2355
+ if (flags.executor)
2356
+ startArgs.push('--executor', flags.executor);
2357
+ if (flags['permission-mode'])
2358
+ startArgs.push('--permission-mode', flags['permission-mode']);
2359
+ if (flags['skip-permissions'])
2360
+ startArgs.push('--skip-permissions');
2361
+ if (flags['create-pr'])
2362
+ startArgs.push('--create-pr');
2363
+ if (flags['no-pr'])
2364
+ startArgs.push('--no-pr');
2365
+ if (flags.session)
2366
+ startArgs.push('--session', flags.session);
2367
+ if (flags.force)
2368
+ startArgs.push('--force');
2369
+ if (flags.focus)
2370
+ startArgs.push('--focus');
2371
+ if (flags.clone)
2372
+ startArgs.push('--clone');
2373
+ if (flags['review-gate'])
2374
+ startArgs.push('--review-gate', flags['review-gate']);
2375
+ if (flags['tool-policy'])
2376
+ startArgs.push('--tool-policy', flags['tool-policy']);
2377
+ if (flags['keep-alive'])
2378
+ startArgs.push('--keep-alive');
2379
+ if (flags.cleanup)
2380
+ startArgs.push('--cleanup', flags.cleanup);
2381
+ if (flags['allow-network'])
2382
+ startArgs.push('--allow-network', flags['allow-network']);
2383
+ if (flags['use-api-key'])
2384
+ startArgs.push('--use-api-key');
2385
+ if (flags.yes)
2386
+ startArgs.push('--yes');
2387
+ return startArgs;
2388
+ };
2389
+ let successCount = 0;
2390
+ let failCount = 0;
2391
+ const executionResults = [];
2392
+ // Spawn agents with concurrency control
2393
+ const spawnOne = async (entry) => {
2394
+ const { ticket, originalId } = entry;
2395
+ try {
2396
+ if (!jsonMode) {
2397
+ this.log(styles.muted(`Starting ${ticket.id}...`));
2398
+ }
2399
+ const startArgs = buildStartArgs(ticket.id, ticket.projectId || projectId);
2400
+ await this.config.runCommand('work:start', startArgs);
2401
+ successCount++;
2402
+ executionResults.push({
2403
+ workId: `WORK-${ticket.id}`,
2404
+ ticketId: ticket.id,
2405
+ agent: 'ephemeral',
2406
+ status: 'running',
2407
+ });
2408
+ }
2409
+ catch (error) {
2410
+ failCount++;
2411
+ if (!jsonMode) {
2412
+ this.log(styles.error(`Failed to start ${originalId}: ${error instanceof Error ? error.message : error}`));
2413
+ }
2414
+ executionResults.push({
2415
+ workId: '',
2416
+ ticketId: ticket.id,
2417
+ agent: '',
2418
+ status: 'failed',
2419
+ });
2420
+ }
2421
+ };
2422
+ // Run with concurrency limit
2423
+ if (maxParallel >= tickets.length) {
2424
+ // Unlimited: spawn all in parallel
2425
+ await Promise.all(tickets.map(entry => spawnOne(entry)));
2426
+ }
2427
+ else {
2428
+ // Limited concurrency: process in batches
2429
+ for (let i = 0; i < tickets.length; i += maxParallel) {
2430
+ const batch = tickets.slice(i, i + maxParallel);
2431
+ // eslint-disable-next-line no-await-in-loop
2432
+ await Promise.all(batch.map(entry => spawnOne(entry)));
2433
+ }
2434
+ }
2435
+ await autoExportToBoard(this.pmoPath, this.storage, () => { });
2436
+ db.close();
2437
+ // Output results
2438
+ if (jsonMode) {
2439
+ const metadata = createMetadata('work start', flags);
2440
+ outputExecutionResultAsJson(executionResults, successCount, failCount, metadata);
2441
+ }
2442
+ else {
2443
+ this.log('');
2444
+ this.log(styles.success(`Batch complete: ${successCount} started, ${failCount} failed`));
2445
+ }
2446
+ }
2281
2447
  /**
2282
2448
  * Run batch mode: spawn work for all unassigned backlog tickets
2283
2449
  */
@@ -2413,9 +2579,10 @@ export default class WorkStart extends PMOCommand {
2413
2579
  this.log(styles.warning('Docker daemon is not running. Start Docker Desktop or use --run-on-host.'));
2414
2580
  this.log('');
2415
2581
  if (!process.stdout.isTTY) {
2416
- // Non-interactive mode: auto-switch to host
2417
- flags['run-on-host'] = true;
2418
- this.log(styles.muted('All agents will run on host (Docker not running).'));
2582
+ // Non-interactive mode: error instead of silently falling back to host
2583
+ db.close();
2584
+ this.error('Cannot start in Docker Docker daemon is not running.\n' +
2585
+ 'Start Docker Desktop, or use --run-on-host to explicitly run on host.');
2419
2586
  }
2420
2587
  else {
2421
2588
  const { dockerAction } = await this.prompt([
@@ -2442,9 +2609,10 @@ export default class WorkStart extends PMOCommand {
2442
2609
  const hasCredentials = dockerCredentialsExist();
2443
2610
  if (!hasCredentials) {
2444
2611
  if (!process.stdout.isTTY) {
2445
- // Non-interactive mode: auto-fallback to host
2446
- this.log(styles.warning('⚠️ No OAuth credentials found. Switched to host environment.'));
2447
- flags['run-on-host'] = true;
2612
+ // Non-interactive mode: error instead of silently falling back to host
2613
+ db.close();
2614
+ this.error('Cannot start in Docker — OAuth credentials not found.\n' +
2615
+ `Run \`${this.config.bin} agent auth\` to set up credentials, or use --run-on-host to explicitly run on host.`);
2448
2616
  }
2449
2617
  else {
2450
2618
  const hasApiKey = !!process.env.ANTHROPIC_API_KEY;