@proletariat/cli 0.3.52 → 0.3.54

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 (854) hide show
  1. package/README.md +39 -7
  2. package/bin/run.js +21 -11
  3. package/bin/validate-better-sqlite3.cjs +17 -6
  4. package/dist/commands/action/create.js +1 -0
  5. package/dist/commands/action/create.js.map +1 -0
  6. package/dist/commands/action/delete.js +1 -0
  7. package/dist/commands/action/delete.js.map +1 -0
  8. package/dist/commands/action/index.js +1 -0
  9. package/dist/commands/action/index.js.map +1 -0
  10. package/dist/commands/action/list.js +1 -0
  11. package/dist/commands/action/list.js.map +1 -0
  12. package/dist/commands/action/run.js +1 -0
  13. package/dist/commands/action/run.js.map +1 -0
  14. package/dist/commands/action/show.js +1 -0
  15. package/dist/commands/action/show.js.map +1 -0
  16. package/dist/commands/action/update.js +1 -0
  17. package/dist/commands/action/update.js.map +1 -0
  18. package/dist/commands/agent/auth.js +1 -0
  19. package/dist/commands/agent/auth.js.map +1 -0
  20. package/dist/commands/agent/cleanup.js +1 -0
  21. package/dist/commands/agent/cleanup.js.map +1 -0
  22. package/dist/commands/agent/discover.js +1 -0
  23. package/dist/commands/agent/discover.js.map +1 -0
  24. package/dist/commands/agent/index.js +1 -0
  25. package/dist/commands/agent/index.js.map +1 -0
  26. package/dist/commands/agent/list.js +1 -0
  27. package/dist/commands/agent/list.js.map +1 -0
  28. package/dist/commands/agent/login.js +1 -0
  29. package/dist/commands/agent/login.js.map +1 -0
  30. package/dist/commands/agent/rebuild.js +1 -0
  31. package/dist/commands/agent/rebuild.js.map +1 -0
  32. package/dist/commands/agent/remove.js +1 -0
  33. package/dist/commands/agent/remove.js.map +1 -0
  34. package/dist/commands/agent/restart.js +1 -0
  35. package/dist/commands/agent/restart.js.map +1 -0
  36. package/dist/commands/agent/shell.js +5 -1
  37. package/dist/commands/agent/shell.js.map +1 -0
  38. package/dist/commands/agent/staff/add.js +1 -0
  39. package/dist/commands/agent/staff/add.js.map +1 -0
  40. package/dist/commands/agent/staff/index.js +1 -0
  41. package/dist/commands/agent/staff/index.js.map +1 -0
  42. package/dist/commands/agent/staff/list.js +1 -0
  43. package/dist/commands/agent/staff/list.js.map +1 -0
  44. package/dist/commands/agent/staff/remove.js +1 -0
  45. package/dist/commands/agent/staff/remove.js.map +1 -0
  46. package/dist/commands/agent/status.js +1 -0
  47. package/dist/commands/agent/status.js.map +1 -0
  48. package/dist/commands/agent/themes/add-names.js +1 -0
  49. package/dist/commands/agent/themes/add-names.js.map +1 -0
  50. package/dist/commands/agent/themes/create.js +1 -0
  51. package/dist/commands/agent/themes/create.js.map +1 -0
  52. package/dist/commands/agent/themes/index.js +1 -0
  53. package/dist/commands/agent/themes/index.js.map +1 -0
  54. package/dist/commands/agent/themes/list.js +1 -0
  55. package/dist/commands/agent/themes/list.js.map +1 -0
  56. package/dist/commands/agent/themes/set.js +1 -0
  57. package/dist/commands/agent/themes/set.js.map +1 -0
  58. package/dist/commands/agent/visit.js +1 -0
  59. package/dist/commands/agent/visit.js.map +1 -0
  60. package/dist/commands/agents/themes/add-names.js +1 -0
  61. package/dist/commands/agents/themes/add-names.js.map +1 -0
  62. package/dist/commands/agents/themes/create.js +1 -0
  63. package/dist/commands/agents/themes/create.js.map +1 -0
  64. package/dist/commands/agents/themes/list.js +1 -0
  65. package/dist/commands/agents/themes/list.js.map +1 -0
  66. package/dist/commands/asana/connect.js +1 -0
  67. package/dist/commands/asana/connect.js.map +1 -0
  68. package/dist/commands/asana/sync.js +1 -0
  69. package/dist/commands/asana/sync.js.map +1 -0
  70. package/dist/commands/autocomplete/setup.js +1 -0
  71. package/dist/commands/autocomplete/setup.js.map +1 -0
  72. package/dist/commands/board/index.js +1 -0
  73. package/dist/commands/board/index.js.map +1 -0
  74. package/dist/commands/board/view.js +1 -0
  75. package/dist/commands/board/view.js.map +1 -0
  76. package/dist/commands/board/watch.js +1 -0
  77. package/dist/commands/board/watch.js.map +1 -0
  78. package/dist/commands/branch/create.js +1 -0
  79. package/dist/commands/branch/create.js.map +1 -0
  80. package/dist/commands/branch/index.js +1 -0
  81. package/dist/commands/branch/index.js.map +1 -0
  82. package/dist/commands/branch/list.js +1 -0
  83. package/dist/commands/branch/list.js.map +1 -0
  84. package/dist/commands/branch/validate.js +1 -0
  85. package/dist/commands/branch/validate.js.map +1 -0
  86. package/dist/commands/branch/where.js +1 -0
  87. package/dist/commands/branch/where.js.map +1 -0
  88. package/dist/commands/caffeinate/index.js +1 -0
  89. package/dist/commands/caffeinate/index.js.map +1 -0
  90. package/dist/commands/caffeinate/start.js +1 -0
  91. package/dist/commands/caffeinate/start.js.map +1 -0
  92. package/dist/commands/caffeinate/status.js +1 -0
  93. package/dist/commands/caffeinate/status.js.map +1 -0
  94. package/dist/commands/caffeinate/stop.js +1 -0
  95. package/dist/commands/caffeinate/stop.js.map +1 -0
  96. package/dist/commands/category/create.js +1 -0
  97. package/dist/commands/category/create.js.map +1 -0
  98. package/dist/commands/category/delete.js +1 -0
  99. package/dist/commands/category/delete.js.map +1 -0
  100. package/dist/commands/category/index.js +1 -0
  101. package/dist/commands/category/index.js.map +1 -0
  102. package/dist/commands/category/list.js +1 -0
  103. package/dist/commands/category/list.js.map +1 -0
  104. package/dist/commands/category/rename.js +1 -0
  105. package/dist/commands/category/rename.js.map +1 -0
  106. package/dist/commands/claude/index.js +11 -5
  107. package/dist/commands/claude/index.js.map +1 -0
  108. package/dist/commands/claude/open.js +1 -0
  109. package/dist/commands/claude/open.js.map +1 -0
  110. package/dist/commands/commit.js +1 -0
  111. package/dist/commands/commit.js.map +1 -0
  112. package/dist/commands/config/index.js +1 -0
  113. package/dist/commands/config/index.js.map +1 -0
  114. package/dist/commands/diet.js +1 -0
  115. package/dist/commands/diet.js.map +1 -0
  116. package/dist/commands/docker/clean.js +1 -0
  117. package/dist/commands/docker/clean.js.map +1 -0
  118. package/dist/commands/docker/index.js +1 -0
  119. package/dist/commands/docker/index.js.map +1 -0
  120. package/dist/commands/docker/list.js +1 -0
  121. package/dist/commands/docker/list.js.map +1 -0
  122. package/dist/commands/docker/logs.js +4 -1
  123. package/dist/commands/docker/logs.js.map +1 -0
  124. package/dist/commands/docker/prune.js +1 -0
  125. package/dist/commands/docker/prune.js.map +1 -0
  126. package/dist/commands/docker/restart.js +1 -0
  127. package/dist/commands/docker/restart.js.map +1 -0
  128. package/dist/commands/docker/shell.js +4 -1
  129. package/dist/commands/docker/shell.js.map +1 -0
  130. package/dist/commands/docker/start.js +1 -0
  131. package/dist/commands/docker/start.js.map +1 -0
  132. package/dist/commands/docker/status.js +1 -0
  133. package/dist/commands/docker/status.js.map +1 -0
  134. package/dist/commands/docker/stop.js +1 -0
  135. package/dist/commands/docker/stop.js.map +1 -0
  136. package/dist/commands/docker/sync.js +1 -0
  137. package/dist/commands/docker/sync.js.map +1 -0
  138. package/dist/commands/epic/activate.js +1 -0
  139. package/dist/commands/epic/activate.js.map +1 -0
  140. package/dist/commands/epic/archive.js +1 -0
  141. package/dist/commands/epic/archive.js.map +1 -0
  142. package/dist/commands/epic/create.js +1 -0
  143. package/dist/commands/epic/create.js.map +1 -0
  144. package/dist/commands/epic/delete.js +1 -0
  145. package/dist/commands/epic/delete.js.map +1 -0
  146. package/dist/commands/epic/index.js +1 -0
  147. package/dist/commands/epic/index.js.map +1 -0
  148. package/dist/commands/epic/list.js +1 -0
  149. package/dist/commands/epic/list.js.map +1 -0
  150. package/dist/commands/epic/move.js +1 -0
  151. package/dist/commands/epic/move.js.map +1 -0
  152. package/dist/commands/epic/progress.js +1 -0
  153. package/dist/commands/epic/progress.js.map +1 -0
  154. package/dist/commands/epic/project.js +1 -0
  155. package/dist/commands/epic/project.js.map +1 -0
  156. package/dist/commands/epic/reorder.js +1 -0
  157. package/dist/commands/epic/reorder.js.map +1 -0
  158. package/dist/commands/epic/show.js +1 -0
  159. package/dist/commands/epic/show.js.map +1 -0
  160. package/dist/commands/epic/spec.js +1 -0
  161. package/dist/commands/epic/spec.js.map +1 -0
  162. package/dist/commands/epic/ticket.js +1 -0
  163. package/dist/commands/epic/ticket.js.map +1 -0
  164. package/dist/commands/epic/view.js +1 -0
  165. package/dist/commands/epic/view.js.map +1 -0
  166. package/dist/commands/execution/config.js +1 -0
  167. package/dist/commands/execution/config.js.map +1 -0
  168. package/dist/commands/execution/index.js +1 -0
  169. package/dist/commands/execution/index.js.map +1 -0
  170. package/dist/commands/execution/kill.js +1 -0
  171. package/dist/commands/execution/kill.js.map +1 -0
  172. package/dist/commands/execution/list.js +1 -0
  173. package/dist/commands/execution/list.js.map +1 -0
  174. package/dist/commands/execution/logs.js +4 -5
  175. package/dist/commands/execution/logs.js.map +1 -0
  176. package/dist/commands/execution/stop.js +1 -0
  177. package/dist/commands/execution/stop.js.map +1 -0
  178. package/dist/commands/execution/view.js +1 -0
  179. package/dist/commands/execution/view.js.map +1 -0
  180. package/dist/commands/feedback/index.js +1 -0
  181. package/dist/commands/feedback/index.js.map +1 -0
  182. package/dist/commands/feedback/list.js +1 -0
  183. package/dist/commands/feedback/list.js.map +1 -0
  184. package/dist/commands/feedback/submit.js +1 -0
  185. package/dist/commands/feedback/submit.js.map +1 -0
  186. package/dist/commands/feedback/view.js +1 -0
  187. package/dist/commands/feedback/view.js.map +1 -0
  188. package/dist/commands/gh/index.js +1 -0
  189. package/dist/commands/gh/index.js.map +1 -0
  190. package/dist/commands/gh/login.js +4 -1
  191. package/dist/commands/gh/login.js.map +1 -0
  192. package/dist/commands/gh/status.js +1 -0
  193. package/dist/commands/gh/status.js.map +1 -0
  194. package/dist/commands/gh/token.js +1 -0
  195. package/dist/commands/gh/token.js.map +1 -0
  196. package/dist/commands/init.js +1 -0
  197. package/dist/commands/init.js.map +1 -0
  198. package/dist/commands/label/create.js +1 -0
  199. package/dist/commands/label/create.js.map +1 -0
  200. package/dist/commands/label/delete.js +1 -0
  201. package/dist/commands/label/delete.js.map +1 -0
  202. package/dist/commands/label/group/create.js +1 -0
  203. package/dist/commands/label/group/create.js.map +1 -0
  204. package/dist/commands/label/group/list.js +1 -0
  205. package/dist/commands/label/group/list.js.map +1 -0
  206. package/dist/commands/label/index.js +1 -0
  207. package/dist/commands/label/index.js.map +1 -0
  208. package/dist/commands/label/list.js +1 -0
  209. package/dist/commands/label/list.js.map +1 -0
  210. package/dist/commands/linear/auth.d.ts +1 -0
  211. package/dist/commands/linear/auth.js +7 -5
  212. package/dist/commands/linear/auth.js.map +1 -0
  213. package/dist/commands/linear/connect.d.ts +17 -0
  214. package/dist/commands/linear/connect.js +298 -0
  215. package/dist/commands/linear/connect.js.map +1 -0
  216. package/dist/commands/linear/import.js +3 -2
  217. package/dist/commands/linear/import.js.map +1 -0
  218. package/dist/commands/linear/status.js +42 -5
  219. package/dist/commands/linear/status.js.map +1 -0
  220. package/dist/commands/linear/sync.js +3 -2
  221. package/dist/commands/linear/sync.js.map +1 -0
  222. package/dist/commands/link/create.js +1 -0
  223. package/dist/commands/link/create.js.map +1 -0
  224. package/dist/commands/link/index.js +1 -0
  225. package/dist/commands/link/index.js.map +1 -0
  226. package/dist/commands/link/list.js +1 -0
  227. package/dist/commands/link/list.js.map +1 -0
  228. package/dist/commands/link/remove.js +1 -0
  229. package/dist/commands/link/remove.js.map +1 -0
  230. package/dist/commands/mcp-server.js +1 -0
  231. package/dist/commands/mcp-server.js.map +1 -0
  232. package/dist/commands/monday/connect.js +1 -0
  233. package/dist/commands/monday/connect.js.map +1 -0
  234. package/dist/commands/monday/sync.js +1 -0
  235. package/dist/commands/monday/sync.js.map +1 -0
  236. package/dist/commands/orchestrator/attach.js +50 -13
  237. package/dist/commands/orchestrator/attach.js.map +1 -0
  238. package/dist/commands/orchestrator/index.js +1 -0
  239. package/dist/commands/orchestrator/index.js.map +1 -0
  240. package/dist/commands/orchestrator/start.d.ts +9 -0
  241. package/dist/commands/orchestrator/start.js +55 -15
  242. package/dist/commands/orchestrator/start.js.map +1 -0
  243. package/dist/commands/orchestrator/status.js +63 -28
  244. package/dist/commands/orchestrator/status.js.map +1 -0
  245. package/dist/commands/orchestrator/stop.js +65 -17
  246. package/dist/commands/orchestrator/stop.js.map +1 -0
  247. package/dist/commands/phase/create.js +1 -0
  248. package/dist/commands/phase/create.js.map +1 -0
  249. package/dist/commands/phase/delete.js +1 -0
  250. package/dist/commands/phase/delete.js.map +1 -0
  251. package/dist/commands/phase/list.js +1 -0
  252. package/dist/commands/phase/list.js.map +1 -0
  253. package/dist/commands/phase/move.js +1 -0
  254. package/dist/commands/phase/move.js.map +1 -0
  255. package/dist/commands/phase/template/apply.js +1 -0
  256. package/dist/commands/phase/template/apply.js.map +1 -0
  257. package/dist/commands/phase/template/create.js +1 -0
  258. package/dist/commands/phase/template/create.js.map +1 -0
  259. package/dist/commands/phase/template/delete.js +1 -0
  260. package/dist/commands/phase/template/delete.js.map +1 -0
  261. package/dist/commands/phase/template/list.js +1 -0
  262. package/dist/commands/phase/template/list.js.map +1 -0
  263. package/dist/commands/phase/template/update.js +1 -0
  264. package/dist/commands/phase/template/update.js.map +1 -0
  265. package/dist/commands/phase/update.js +1 -0
  266. package/dist/commands/phase/update.js.map +1 -0
  267. package/dist/commands/pmo/init.js +1 -0
  268. package/dist/commands/pmo/init.js.map +1 -0
  269. package/dist/commands/pr/create.js +4 -0
  270. package/dist/commands/pr/create.js.map +1 -0
  271. package/dist/commands/pr/index.js +1 -0
  272. package/dist/commands/pr/index.js.map +1 -0
  273. package/dist/commands/pr/link.js +1 -0
  274. package/dist/commands/pr/link.js.map +1 -0
  275. package/dist/commands/pr/list.js +1 -0
  276. package/dist/commands/pr/list.js.map +1 -0
  277. package/dist/commands/pr/status.js +1 -0
  278. package/dist/commands/pr/status.js.map +1 -0
  279. package/dist/commands/priority/add.js +1 -0
  280. package/dist/commands/priority/add.js.map +1 -0
  281. package/dist/commands/priority/list.js +1 -0
  282. package/dist/commands/priority/list.js.map +1 -0
  283. package/dist/commands/priority/remove.js +1 -0
  284. package/dist/commands/priority/remove.js.map +1 -0
  285. package/dist/commands/priority/set.js +1 -0
  286. package/dist/commands/priority/set.js.map +1 -0
  287. package/dist/commands/project/archive.js +1 -0
  288. package/dist/commands/project/archive.js.map +1 -0
  289. package/dist/commands/project/create.js +1 -0
  290. package/dist/commands/project/create.js.map +1 -0
  291. package/dist/commands/project/delete.js +1 -0
  292. package/dist/commands/project/delete.js.map +1 -0
  293. package/dist/commands/project/index.js +1 -0
  294. package/dist/commands/project/index.js.map +1 -0
  295. package/dist/commands/project/list.js +1 -0
  296. package/dist/commands/project/list.js.map +1 -0
  297. package/dist/commands/project/spec.js +1 -0
  298. package/dist/commands/project/spec.js.map +1 -0
  299. package/dist/commands/project/unarchive.js +1 -0
  300. package/dist/commands/project/unarchive.js.map +1 -0
  301. package/dist/commands/project/update.js +1 -0
  302. package/dist/commands/project/update.js.map +1 -0
  303. package/dist/commands/project/view.js +1 -0
  304. package/dist/commands/project/view.js.map +1 -0
  305. package/dist/commands/pull.js +1 -0
  306. package/dist/commands/pull.js.map +1 -0
  307. package/dist/commands/qa/index.js +11 -5
  308. package/dist/commands/qa/index.js.map +1 -0
  309. package/dist/commands/repo/add.js +1 -0
  310. package/dist/commands/repo/add.js.map +1 -0
  311. package/dist/commands/repo/create.js +1 -0
  312. package/dist/commands/repo/create.js.map +1 -0
  313. package/dist/commands/repo/index.js +1 -0
  314. package/dist/commands/repo/index.js.map +1 -0
  315. package/dist/commands/repo/list.js +1 -0
  316. package/dist/commands/repo/list.js.map +1 -0
  317. package/dist/commands/repo/remove.js +1 -0
  318. package/dist/commands/repo/remove.js.map +1 -0
  319. package/dist/commands/repo/view.js +1 -0
  320. package/dist/commands/repo/view.js.map +1 -0
  321. package/dist/commands/roadmap/add-project.js +1 -0
  322. package/dist/commands/roadmap/add-project.js.map +1 -0
  323. package/dist/commands/roadmap/create.js +1 -0
  324. package/dist/commands/roadmap/create.js.map +1 -0
  325. package/dist/commands/roadmap/delete.js +1 -0
  326. package/dist/commands/roadmap/delete.js.map +1 -0
  327. package/dist/commands/roadmap/generate.js +1 -0
  328. package/dist/commands/roadmap/generate.js.map +1 -0
  329. package/dist/commands/roadmap/index.js +1 -0
  330. package/dist/commands/roadmap/index.js.map +1 -0
  331. package/dist/commands/roadmap/list.js +1 -0
  332. package/dist/commands/roadmap/list.js.map +1 -0
  333. package/dist/commands/roadmap/remove-project.js +1 -0
  334. package/dist/commands/roadmap/remove-project.js.map +1 -0
  335. package/dist/commands/roadmap/reorder.js +1 -0
  336. package/dist/commands/roadmap/reorder.js.map +1 -0
  337. package/dist/commands/roadmap/update.js +1 -0
  338. package/dist/commands/roadmap/update.js.map +1 -0
  339. package/dist/commands/roadmap/view.js +1 -0
  340. package/dist/commands/roadmap/view.js.map +1 -0
  341. package/dist/commands/session/attach.js +1 -0
  342. package/dist/commands/session/attach.js.map +1 -0
  343. package/dist/commands/session/create.js +2 -1
  344. package/dist/commands/session/create.js.map +1 -0
  345. package/dist/commands/session/health.js +5 -7
  346. package/dist/commands/session/health.js.map +1 -0
  347. package/dist/commands/session/index.js +1 -0
  348. package/dist/commands/session/index.js.map +1 -0
  349. package/dist/commands/session/list.js +1 -0
  350. package/dist/commands/session/list.js.map +1 -0
  351. package/dist/commands/session/peek.js +1 -0
  352. package/dist/commands/session/peek.js.map +1 -0
  353. package/dist/commands/session/poke.js +20 -1
  354. package/dist/commands/session/poke.js.map +1 -0
  355. package/dist/commands/spec/create.js +1 -0
  356. package/dist/commands/spec/create.js.map +1 -0
  357. package/dist/commands/spec/delete.js +1 -0
  358. package/dist/commands/spec/delete.js.map +1 -0
  359. package/dist/commands/spec/edit.js +1 -0
  360. package/dist/commands/spec/edit.js.map +1 -0
  361. package/dist/commands/spec/index.js +1 -0
  362. package/dist/commands/spec/index.js.map +1 -0
  363. package/dist/commands/spec/link/depends.js +1 -0
  364. package/dist/commands/spec/link/depends.js.map +1 -0
  365. package/dist/commands/spec/link/index.js +1 -0
  366. package/dist/commands/spec/link/index.js.map +1 -0
  367. package/dist/commands/spec/link/remove.js +1 -0
  368. package/dist/commands/spec/link/remove.js.map +1 -0
  369. package/dist/commands/spec/list.js +1 -0
  370. package/dist/commands/spec/list.js.map +1 -0
  371. package/dist/commands/spec/plan.js +1 -0
  372. package/dist/commands/spec/plan.js.map +1 -0
  373. package/dist/commands/spec/ticket.js +1 -0
  374. package/dist/commands/spec/ticket.js.map +1 -0
  375. package/dist/commands/spec/view.js +1 -0
  376. package/dist/commands/spec/view.js.map +1 -0
  377. package/dist/commands/staff/add.js +1 -0
  378. package/dist/commands/staff/add.js.map +1 -0
  379. package/dist/commands/staff/index.js +1 -0
  380. package/dist/commands/staff/index.js.map +1 -0
  381. package/dist/commands/staff/list.js +1 -0
  382. package/dist/commands/staff/list.js.map +1 -0
  383. package/dist/commands/staff/remove.js +1 -0
  384. package/dist/commands/staff/remove.js.map +1 -0
  385. package/dist/commands/status/category.js +1 -0
  386. package/dist/commands/status/category.js.map +1 -0
  387. package/dist/commands/status/create.js +1 -0
  388. package/dist/commands/status/create.js.map +1 -0
  389. package/dist/commands/status/delete.js +1 -0
  390. package/dist/commands/status/delete.js.map +1 -0
  391. package/dist/commands/status/index.js +1 -0
  392. package/dist/commands/status/index.js.map +1 -0
  393. package/dist/commands/status/list.js +1 -0
  394. package/dist/commands/status/list.js.map +1 -0
  395. package/dist/commands/status/move.js +1 -0
  396. package/dist/commands/status/move.js.map +1 -0
  397. package/dist/commands/status/update.js +1 -0
  398. package/dist/commands/status/update.js.map +1 -0
  399. package/dist/commands/support/book.js +1 -0
  400. package/dist/commands/support/book.js.map +1 -0
  401. package/dist/commands/support/discord.js +1 -0
  402. package/dist/commands/support/discord.js.map +1 -0
  403. package/dist/commands/support/docs.js +1 -0
  404. package/dist/commands/support/docs.js.map +1 -0
  405. package/dist/commands/support/index.js +1 -0
  406. package/dist/commands/support/index.js.map +1 -0
  407. package/dist/commands/support/issues.js +1 -0
  408. package/dist/commands/support/issues.js.map +1 -0
  409. package/dist/commands/support/logs.js +1 -0
  410. package/dist/commands/support/logs.js.map +1 -0
  411. package/dist/commands/telemetry/disable.d.ts +10 -0
  412. package/dist/commands/telemetry/disable.js +27 -0
  413. package/dist/commands/telemetry/disable.js.map +1 -0
  414. package/dist/commands/telemetry/enable.d.ts +10 -0
  415. package/dist/commands/telemetry/enable.js +27 -0
  416. package/dist/commands/telemetry/enable.js.map +1 -0
  417. package/dist/commands/telemetry/index.d.ts +10 -0
  418. package/dist/commands/telemetry/index.js +41 -0
  419. package/dist/commands/telemetry/index.js.map +1 -0
  420. package/dist/commands/telemetry/status.d.ts +10 -0
  421. package/dist/commands/telemetry/status.js +42 -0
  422. package/dist/commands/telemetry/status.js.map +1 -0
  423. package/dist/commands/template/apply.js +1 -0
  424. package/dist/commands/template/apply.js.map +1 -0
  425. package/dist/commands/template/create.js +1 -0
  426. package/dist/commands/template/create.js.map +1 -0
  427. package/dist/commands/template/delete.js +1 -0
  428. package/dist/commands/template/delete.js.map +1 -0
  429. package/dist/commands/template/index.js +1 -0
  430. package/dist/commands/template/index.js.map +1 -0
  431. package/dist/commands/template/list.js +1 -0
  432. package/dist/commands/template/list.js.map +1 -0
  433. package/dist/commands/template/save.js +1 -0
  434. package/dist/commands/template/save.js.map +1 -0
  435. package/dist/commands/template/update.js +1 -0
  436. package/dist/commands/template/update.js.map +1 -0
  437. package/dist/commands/terminal/title.js +1 -0
  438. package/dist/commands/terminal/title.js.map +1 -0
  439. package/dist/commands/theme/add-names.js +1 -0
  440. package/dist/commands/theme/add-names.js.map +1 -0
  441. package/dist/commands/theme/create.js +1 -0
  442. package/dist/commands/theme/create.js.map +1 -0
  443. package/dist/commands/theme/index.js +1 -0
  444. package/dist/commands/theme/index.js.map +1 -0
  445. package/dist/commands/theme/list.js +1 -0
  446. package/dist/commands/theme/list.js.map +1 -0
  447. package/dist/commands/theme/set.js +1 -0
  448. package/dist/commands/theme/set.js.map +1 -0
  449. package/dist/commands/ticket/bulk.js +1 -0
  450. package/dist/commands/ticket/bulk.js.map +1 -0
  451. package/dist/commands/ticket/category.js +1 -0
  452. package/dist/commands/ticket/category.js.map +1 -0
  453. package/dist/commands/ticket/complete.js +1 -0
  454. package/dist/commands/ticket/complete.js.map +1 -0
  455. package/dist/commands/ticket/create.js +1 -0
  456. package/dist/commands/ticket/create.js.map +1 -0
  457. package/dist/commands/ticket/delete.js +1 -0
  458. package/dist/commands/ticket/delete.js.map +1 -0
  459. package/dist/commands/ticket/edit.js +1 -0
  460. package/dist/commands/ticket/edit.js.map +1 -0
  461. package/dist/commands/ticket/epic.js +1 -0
  462. package/dist/commands/ticket/epic.js.map +1 -0
  463. package/dist/commands/ticket/index.js +1 -0
  464. package/dist/commands/ticket/index.js.map +1 -0
  465. package/dist/commands/ticket/link/block.js +1 -0
  466. package/dist/commands/ticket/link/block.js.map +1 -0
  467. package/dist/commands/ticket/link/duplicates.js +1 -0
  468. package/dist/commands/ticket/link/duplicates.js.map +1 -0
  469. package/dist/commands/ticket/link/index.js +1 -0
  470. package/dist/commands/ticket/link/index.js.map +1 -0
  471. package/dist/commands/ticket/link/relates.js +1 -0
  472. package/dist/commands/ticket/link/relates.js.map +1 -0
  473. package/dist/commands/ticket/list.js +1 -0
  474. package/dist/commands/ticket/list.js.map +1 -0
  475. package/dist/commands/ticket/move.js +1 -0
  476. package/dist/commands/ticket/move.js.map +1 -0
  477. package/dist/commands/ticket/project.js +1 -0
  478. package/dist/commands/ticket/project.js.map +1 -0
  479. package/dist/commands/ticket/reassign.js +1 -0
  480. package/dist/commands/ticket/reassign.js.map +1 -0
  481. package/dist/commands/ticket/resolve.js +1 -0
  482. package/dist/commands/ticket/resolve.js.map +1 -0
  483. package/dist/commands/ticket/show.js +1 -0
  484. package/dist/commands/ticket/show.js.map +1 -0
  485. package/dist/commands/ticket/spec.js +1 -0
  486. package/dist/commands/ticket/spec.js.map +1 -0
  487. package/dist/commands/ticket/status.js +1 -0
  488. package/dist/commands/ticket/status.js.map +1 -0
  489. package/dist/commands/ticket/template/apply.js +1 -0
  490. package/dist/commands/ticket/template/apply.js.map +1 -0
  491. package/dist/commands/ticket/template/delete.js +1 -0
  492. package/dist/commands/ticket/template/delete.js.map +1 -0
  493. package/dist/commands/ticket/template/list.js +1 -0
  494. package/dist/commands/ticket/template/list.js.map +1 -0
  495. package/dist/commands/ticket/template/save.js +1 -0
  496. package/dist/commands/ticket/template/save.js.map +1 -0
  497. package/dist/commands/ticket/update.js +1 -0
  498. package/dist/commands/ticket/update.js.map +1 -0
  499. package/dist/commands/ticket/view.js +1 -0
  500. package/dist/commands/ticket/view.js.map +1 -0
  501. package/dist/commands/whoami.js +1 -0
  502. package/dist/commands/whoami.js.map +1 -0
  503. package/dist/commands/work/complete.js +6 -0
  504. package/dist/commands/work/complete.js.map +1 -0
  505. package/dist/commands/work/index.js +1 -0
  506. package/dist/commands/work/index.js.map +1 -0
  507. package/dist/commands/work/jira.js +2 -1
  508. package/dist/commands/work/jira.js.map +1 -0
  509. package/dist/commands/work/linear.js +2 -1
  510. package/dist/commands/work/linear.js.map +1 -0
  511. package/dist/commands/work/ready.js +1 -0
  512. package/dist/commands/work/ready.js.map +1 -0
  513. package/dist/commands/work/resolve.js +1 -0
  514. package/dist/commands/work/resolve.js.map +1 -0
  515. package/dist/commands/work/review.js +2 -1
  516. package/dist/commands/work/review.js.map +1 -0
  517. package/dist/commands/work/revise.js +2 -1
  518. package/dist/commands/work/revise.js.map +1 -0
  519. package/dist/commands/work/source/set.js +1 -0
  520. package/dist/commands/work/source/set.js.map +1 -0
  521. package/dist/commands/work/source.js +1 -0
  522. package/dist/commands/work/source.js.map +1 -0
  523. package/dist/commands/work/spawn-all.js +2 -1
  524. package/dist/commands/work/spawn-all.js.map +1 -0
  525. package/dist/commands/work/spawn.d.ts +5 -0
  526. package/dist/commands/work/spawn.js +274 -29
  527. package/dist/commands/work/spawn.js.map +1 -0
  528. package/dist/commands/work/start.d.ts +1 -0
  529. package/dist/commands/work/start.js +388 -235
  530. package/dist/commands/work/start.js.map +1 -0
  531. package/dist/commands/work/status.js +1 -0
  532. package/dist/commands/work/status.js.map +1 -0
  533. package/dist/commands/work/watch.js +5 -8
  534. package/dist/commands/work/watch.js.map +1 -0
  535. package/dist/commands/workflow/create.js +1 -0
  536. package/dist/commands/workflow/create.js.map +1 -0
  537. package/dist/commands/workflow/delete.js +1 -0
  538. package/dist/commands/workflow/delete.js.map +1 -0
  539. package/dist/commands/workflow/index.js +1 -0
  540. package/dist/commands/workflow/index.js.map +1 -0
  541. package/dist/commands/workflow/list.js +1 -0
  542. package/dist/commands/workflow/list.js.map +1 -0
  543. package/dist/commands/workflow/show.js +1 -0
  544. package/dist/commands/workflow/show.js.map +1 -0
  545. package/dist/commands/workflow/switch.js +1 -0
  546. package/dist/commands/workflow/switch.js.map +1 -0
  547. package/dist/commands/workflow/view.js +1 -0
  548. package/dist/commands/workflow/view.js.map +1 -0
  549. package/dist/commands/workspace/add.js +1 -0
  550. package/dist/commands/workspace/add.js.map +1 -0
  551. package/dist/commands/workspace/list.js +1 -0
  552. package/dist/commands/workspace/list.js.map +1 -0
  553. package/dist/commands/workspace/prune.js +1 -0
  554. package/dist/commands/workspace/prune.js.map +1 -0
  555. package/dist/commands/workspace/remove.js +1 -0
  556. package/dist/commands/workspace/remove.js.map +1 -0
  557. package/dist/commands/workspace/use.js +1 -0
  558. package/dist/commands/workspace/use.js.map +1 -0
  559. package/dist/hooks/init.d.ts +6 -1
  560. package/dist/hooks/init.js +34 -2
  561. package/dist/hooks/init.js.map +1 -0
  562. package/dist/hooks/postrun.d.ts +9 -0
  563. package/dist/hooks/postrun.js +30 -0
  564. package/dist/hooks/postrun.js.map +1 -0
  565. package/dist/index.js +1 -0
  566. package/dist/index.js.map +1 -0
  567. package/dist/lib/agents/commands.js +1 -0
  568. package/dist/lib/agents/commands.js.map +1 -0
  569. package/dist/lib/agents/index.js +1 -0
  570. package/dist/lib/agents/index.js.map +1 -0
  571. package/dist/lib/asana/client.js +1 -0
  572. package/dist/lib/asana/client.js.map +1 -0
  573. package/dist/lib/asana/config.js +1 -0
  574. package/dist/lib/asana/config.js.map +1 -0
  575. package/dist/lib/asana/index.js +1 -0
  576. package/dist/lib/asana/index.js.map +1 -0
  577. package/dist/lib/asana/mapper.js +1 -0
  578. package/dist/lib/asana/mapper.js.map +1 -0
  579. package/dist/lib/asana/sync.js +1 -0
  580. package/dist/lib/asana/sync.js.map +1 -0
  581. package/dist/lib/asana/types.js +1 -0
  582. package/dist/lib/asana/types.js.map +1 -0
  583. package/dist/lib/branch/index.js +1 -0
  584. package/dist/lib/branch/index.js.map +1 -0
  585. package/dist/lib/caffeinate.js +1 -0
  586. package/dist/lib/caffeinate.js.map +1 -0
  587. package/dist/lib/colors.js +1 -0
  588. package/dist/lib/colors.js.map +1 -0
  589. package/dist/lib/commands/docker-command.js +1 -0
  590. package/dist/lib/commands/docker-command.js.map +1 -0
  591. package/dist/lib/database/drizzle-schema.js +1 -0
  592. package/dist/lib/database/drizzle-schema.js.map +1 -0
  593. package/dist/lib/database/drizzle.js +10 -1
  594. package/dist/lib/database/drizzle.js.map +1 -0
  595. package/dist/lib/database/index.js +42 -5
  596. package/dist/lib/database/index.js.map +1 -0
  597. package/dist/lib/database/native-validation.d.ts +17 -0
  598. package/dist/lib/database/native-validation.js +51 -6
  599. package/dist/lib/database/native-validation.js.map +1 -0
  600. package/dist/lib/docker/resolve.js +1 -0
  601. package/dist/lib/docker/resolve.js.map +1 -0
  602. package/dist/lib/execution/codex-adapter.js +1 -0
  603. package/dist/lib/execution/codex-adapter.js.map +1 -0
  604. package/dist/lib/execution/config.js +1 -0
  605. package/dist/lib/execution/config.js.map +1 -0
  606. package/dist/lib/execution/context.js +1 -0
  607. package/dist/lib/execution/context.js.map +1 -0
  608. package/dist/lib/execution/devcontainer.js +1 -0
  609. package/dist/lib/execution/devcontainer.js.map +1 -0
  610. package/dist/lib/execution/index.js +1 -0
  611. package/dist/lib/execution/index.js.map +1 -0
  612. package/dist/lib/execution/runners.d.ts +4 -3
  613. package/dist/lib/execution/runners.js +84 -25
  614. package/dist/lib/execution/runners.js.map +1 -0
  615. package/dist/lib/execution/session-utils.js +1 -0
  616. package/dist/lib/execution/session-utils.js.map +1 -0
  617. package/dist/lib/execution/spawner.js +1 -0
  618. package/dist/lib/execution/spawner.js.map +1 -0
  619. package/dist/lib/execution/storage.js +1 -0
  620. package/dist/lib/execution/storage.js.map +1 -0
  621. package/dist/lib/execution/types.d.ts +3 -1
  622. package/dist/lib/execution/types.js +1 -0
  623. package/dist/lib/execution/types.js.map +1 -0
  624. package/dist/lib/external-issues/adapters.js +1 -0
  625. package/dist/lib/external-issues/adapters.js.map +1 -0
  626. package/dist/lib/external-issues/index.d.ts +1 -0
  627. package/dist/lib/external-issues/index.js +3 -0
  628. package/dist/lib/external-issues/index.js.map +1 -0
  629. package/dist/lib/external-issues/jira.js +1 -0
  630. package/dist/lib/external-issues/jira.js.map +1 -0
  631. package/dist/lib/external-issues/linear.js +13 -0
  632. package/dist/lib/external-issues/linear.js.map +1 -0
  633. package/dist/lib/external-issues/mapper.js +1 -0
  634. package/dist/lib/external-issues/mapper.js.map +1 -0
  635. package/dist/lib/external-issues/mapping-store.js +1 -0
  636. package/dist/lib/external-issues/mapping-store.js.map +1 -0
  637. package/dist/lib/external-issues/redact.d.ts +50 -0
  638. package/dist/lib/external-issues/redact.js +130 -0
  639. package/dist/lib/external-issues/redact.js.map +1 -0
  640. package/dist/lib/external-issues/types.d.ts +1 -1
  641. package/dist/lib/external-issues/types.js +1 -0
  642. package/dist/lib/external-issues/types.js.map +1 -0
  643. package/dist/lib/external-issues/validation.js +1 -0
  644. package/dist/lib/external-issues/validation.js.map +1 -0
  645. package/dist/lib/external-issues/work-start.js +1 -0
  646. package/dist/lib/external-issues/work-start.js.map +1 -0
  647. package/dist/lib/flags/index.js +1 -0
  648. package/dist/lib/flags/index.js.map +1 -0
  649. package/dist/lib/flags/resolver.js +4 -2
  650. package/dist/lib/flags/resolver.js.map +1 -0
  651. package/dist/lib/init/index.js +1 -0
  652. package/dist/lib/init/index.js.map +1 -0
  653. package/dist/lib/jira/config.d.ts +33 -0
  654. package/dist/lib/jira/config.js +97 -0
  655. package/dist/lib/jira/config.js.map +1 -0
  656. package/dist/lib/jira/index.d.ts +7 -0
  657. package/dist/lib/jira/index.js +7 -0
  658. package/dist/lib/jira/index.js.map +1 -0
  659. package/dist/lib/linear/client.js +1 -0
  660. package/dist/lib/linear/client.js.map +1 -0
  661. package/dist/lib/linear/config.js +1 -0
  662. package/dist/lib/linear/config.js.map +1 -0
  663. package/dist/lib/linear/index.js +1 -0
  664. package/dist/lib/linear/index.js.map +1 -0
  665. package/dist/lib/linear/mapper.js +1 -0
  666. package/dist/lib/linear/mapper.js.map +1 -0
  667. package/dist/lib/linear/sync.js +1 -0
  668. package/dist/lib/linear/sync.js.map +1 -0
  669. package/dist/lib/linear/types.js +1 -0
  670. package/dist/lib/linear/types.js.map +1 -0
  671. package/dist/lib/machine-config.js +1 -0
  672. package/dist/lib/machine-config.js.map +1 -0
  673. package/dist/lib/mcp/helpers.js +1 -0
  674. package/dist/lib/mcp/helpers.js.map +1 -0
  675. package/dist/lib/mcp/index.js +1 -0
  676. package/dist/lib/mcp/index.js.map +1 -0
  677. package/dist/lib/mcp/tools/action.js +1 -0
  678. package/dist/lib/mcp/tools/action.js.map +1 -0
  679. package/dist/lib/mcp/tools/board.js +1 -0
  680. package/dist/lib/mcp/tools/board.js.map +1 -0
  681. package/dist/lib/mcp/tools/category.js +1 -0
  682. package/dist/lib/mcp/tools/category.js.map +1 -0
  683. package/dist/lib/mcp/tools/cli-passthrough.js +1 -0
  684. package/dist/lib/mcp/tools/cli-passthrough.js.map +1 -0
  685. package/dist/lib/mcp/tools/diet.js +1 -0
  686. package/dist/lib/mcp/tools/diet.js.map +1 -0
  687. package/dist/lib/mcp/tools/epic.js +1 -0
  688. package/dist/lib/mcp/tools/epic.js.map +1 -0
  689. package/dist/lib/mcp/tools/index.js +1 -0
  690. package/dist/lib/mcp/tools/index.js.map +1 -0
  691. package/dist/lib/mcp/tools/label.js +1 -0
  692. package/dist/lib/mcp/tools/label.js.map +1 -0
  693. package/dist/lib/mcp/tools/phase.js +1 -0
  694. package/dist/lib/mcp/tools/phase.js.map +1 -0
  695. package/dist/lib/mcp/tools/project.js +1 -0
  696. package/dist/lib/mcp/tools/project.js.map +1 -0
  697. package/dist/lib/mcp/tools/roadmap.js +1 -0
  698. package/dist/lib/mcp/tools/roadmap.js.map +1 -0
  699. package/dist/lib/mcp/tools/spec.js +1 -0
  700. package/dist/lib/mcp/tools/spec.js.map +1 -0
  701. package/dist/lib/mcp/tools/status.js +1 -0
  702. package/dist/lib/mcp/tools/status.js.map +1 -0
  703. package/dist/lib/mcp/tools/template.js +1 -0
  704. package/dist/lib/mcp/tools/template.js.map +1 -0
  705. package/dist/lib/mcp/tools/ticket.js +1 -0
  706. package/dist/lib/mcp/tools/ticket.js.map +1 -0
  707. package/dist/lib/mcp/tools/tmux.js +1 -0
  708. package/dist/lib/mcp/tools/tmux.js.map +1 -0
  709. package/dist/lib/mcp/tools/view.js +1 -0
  710. package/dist/lib/mcp/tools/view.js.map +1 -0
  711. package/dist/lib/mcp/tools/work.js +1 -0
  712. package/dist/lib/mcp/tools/work.js.map +1 -0
  713. package/dist/lib/mcp/tools/workflow.js +1 -0
  714. package/dist/lib/mcp/tools/workflow.js.map +1 -0
  715. package/dist/lib/mcp/types.js +1 -0
  716. package/dist/lib/mcp/types.js.map +1 -0
  717. package/dist/lib/monday/client.js +1 -0
  718. package/dist/lib/monday/client.js.map +1 -0
  719. package/dist/lib/monday/config.js +1 -0
  720. package/dist/lib/monday/config.js.map +1 -0
  721. package/dist/lib/monday/index.js +1 -0
  722. package/dist/lib/monday/index.js.map +1 -0
  723. package/dist/lib/monday/mapper.js +1 -0
  724. package/dist/lib/monday/mapper.js.map +1 -0
  725. package/dist/lib/monday/sync.js +1 -0
  726. package/dist/lib/monday/sync.js.map +1 -0
  727. package/dist/lib/monday/types.js +1 -0
  728. package/dist/lib/monday/types.js.map +1 -0
  729. package/dist/lib/multiline-input.js +1 -0
  730. package/dist/lib/multiline-input.js.map +1 -0
  731. package/dist/lib/pmo/base-command.js +8 -6
  732. package/dist/lib/pmo/base-command.js.map +1 -0
  733. package/dist/lib/pmo/create-spec-folders.js +1 -0
  734. package/dist/lib/pmo/create-spec-folders.js.map +1 -0
  735. package/dist/lib/pmo/diet.js +1 -0
  736. package/dist/lib/pmo/diet.js.map +1 -0
  737. package/dist/lib/pmo/epic-files.js +1 -0
  738. package/dist/lib/pmo/epic-files.js.map +1 -0
  739. package/dist/lib/pmo/find-pmo.js +6 -1
  740. package/dist/lib/pmo/find-pmo.js.map +1 -0
  741. package/dist/lib/pmo/index.js +1 -0
  742. package/dist/lib/pmo/index.js.map +1 -0
  743. package/dist/lib/pmo/markdown.js +1 -0
  744. package/dist/lib/pmo/markdown.js.map +1 -0
  745. package/dist/lib/pmo/pmo-context.js +1 -0
  746. package/dist/lib/pmo/pmo-context.js.map +1 -0
  747. package/dist/lib/pmo/schema.js +1 -0
  748. package/dist/lib/pmo/schema.js.map +1 -0
  749. package/dist/lib/pmo/spec-parser.js +1 -0
  750. package/dist/lib/pmo/spec-parser.js.map +1 -0
  751. package/dist/lib/pmo/spec-types.js +1 -0
  752. package/dist/lib/pmo/spec-types.js.map +1 -0
  753. package/dist/lib/pmo/storage/actions.js +1 -0
  754. package/dist/lib/pmo/storage/actions.js.map +1 -0
  755. package/dist/lib/pmo/storage/base.js +1 -0
  756. package/dist/lib/pmo/storage/base.js.map +1 -0
  757. package/dist/lib/pmo/storage/categories.js +1 -0
  758. package/dist/lib/pmo/storage/categories.js.map +1 -0
  759. package/dist/lib/pmo/storage/dependencies.js +1 -0
  760. package/dist/lib/pmo/storage/dependencies.js.map +1 -0
  761. package/dist/lib/pmo/storage/epics.js +1 -0
  762. package/dist/lib/pmo/storage/epics.js.map +1 -0
  763. package/dist/lib/pmo/storage/helpers.js +1 -0
  764. package/dist/lib/pmo/storage/helpers.js.map +1 -0
  765. package/dist/lib/pmo/storage/index.js +1 -0
  766. package/dist/lib/pmo/storage/index.js.map +1 -0
  767. package/dist/lib/pmo/storage/labels.js +1 -0
  768. package/dist/lib/pmo/storage/labels.js.map +1 -0
  769. package/dist/lib/pmo/storage/phases.js +1 -0
  770. package/dist/lib/pmo/storage/phases.js.map +1 -0
  771. package/dist/lib/pmo/storage/projects.js +1 -0
  772. package/dist/lib/pmo/storage/projects.js.map +1 -0
  773. package/dist/lib/pmo/storage/roadmaps.js +1 -0
  774. package/dist/lib/pmo/storage/roadmaps.js.map +1 -0
  775. package/dist/lib/pmo/storage/specs.js +1 -0
  776. package/dist/lib/pmo/storage/specs.js.map +1 -0
  777. package/dist/lib/pmo/storage/statuses.js +1 -0
  778. package/dist/lib/pmo/storage/statuses.js.map +1 -0
  779. package/dist/lib/pmo/storage/subtasks.js +1 -0
  780. package/dist/lib/pmo/storage/subtasks.js.map +1 -0
  781. package/dist/lib/pmo/storage/templates.js +1 -0
  782. package/dist/lib/pmo/storage/templates.js.map +1 -0
  783. package/dist/lib/pmo/storage/tickets.js +1 -0
  784. package/dist/lib/pmo/storage/tickets.js.map +1 -0
  785. package/dist/lib/pmo/storage/types.js +1 -0
  786. package/dist/lib/pmo/storage/types.js.map +1 -0
  787. package/dist/lib/pmo/storage/views.js +1 -0
  788. package/dist/lib/pmo/storage/views.js.map +1 -0
  789. package/dist/lib/pmo/storage-sqlite.js +1 -0
  790. package/dist/lib/pmo/storage-sqlite.js.map +1 -0
  791. package/dist/lib/pmo/sync-manager.js +1 -0
  792. package/dist/lib/pmo/sync-manager.js.map +1 -0
  793. package/dist/lib/pmo/templates-builtin.js +1 -0
  794. package/dist/lib/pmo/templates-builtin.js.map +1 -0
  795. package/dist/lib/pmo/types.js +1 -0
  796. package/dist/lib/pmo/types.js.map +1 -0
  797. package/dist/lib/pmo/utils.js +1 -0
  798. package/dist/lib/pmo/utils.js.map +1 -0
  799. package/dist/lib/pmo/watcher.d.ts +1 -1
  800. package/dist/lib/pmo/watcher.js +6 -7
  801. package/dist/lib/pmo/watcher.js.map +1 -0
  802. package/dist/lib/pr/index.js +1 -0
  803. package/dist/lib/pr/index.js.map +1 -0
  804. package/dist/lib/prompt-command.js +4 -2
  805. package/dist/lib/prompt-command.js.map +1 -0
  806. package/dist/lib/prompt-json.d.ts +5 -0
  807. package/dist/lib/prompt-json.js +1 -0
  808. package/dist/lib/prompt-json.js.map +1 -0
  809. package/dist/lib/repos/git.js +1 -0
  810. package/dist/lib/repos/git.js.map +1 -0
  811. package/dist/lib/repos/index.js +1 -0
  812. package/dist/lib/repos/index.js.map +1 -0
  813. package/dist/lib/signal-handler.d.ts +59 -0
  814. package/dist/lib/signal-handler.js +156 -0
  815. package/dist/lib/signal-handler.js.map +1 -0
  816. package/dist/lib/string-utils.js +1 -0
  817. package/dist/lib/string-utils.js.map +1 -0
  818. package/dist/lib/styles.js +1 -0
  819. package/dist/lib/styles.js.map +1 -0
  820. package/dist/lib/telemetry/analytics.d.ts +105 -0
  821. package/dist/lib/telemetry/analytics.js +289 -0
  822. package/dist/lib/telemetry/analytics.js.map +1 -0
  823. package/dist/lib/telemetry/feature-flags.d.ts +53 -0
  824. package/dist/lib/telemetry/feature-flags.js +83 -0
  825. package/dist/lib/telemetry/feature-flags.js.map +1 -0
  826. package/dist/lib/telemetry.d.ts +63 -0
  827. package/dist/lib/telemetry.js +217 -0
  828. package/dist/lib/telemetry.js.map +1 -0
  829. package/dist/lib/terminal.js +1 -0
  830. package/dist/lib/terminal.js.map +1 -0
  831. package/dist/lib/themes.js +1 -0
  832. package/dist/lib/themes.js.map +1 -0
  833. package/dist/lib/ui/BoardUI.js +1 -0
  834. package/dist/lib/ui/BoardUI.js.map +1 -0
  835. package/dist/lib/ui/ClaimTicketUI.js +1 -0
  836. package/dist/lib/ui/ClaimTicketUI.js.map +1 -0
  837. package/dist/lib/ui/CreateTicketUI.js +1 -0
  838. package/dist/lib/ui/CreateTicketUI.js.map +1 -0
  839. package/dist/lib/update-check.d.ts +83 -0
  840. package/dist/lib/update-check.js +275 -0
  841. package/dist/lib/update-check.js.map +1 -0
  842. package/dist/lib/update-prompt.d.ts +47 -0
  843. package/dist/lib/update-prompt.js +163 -0
  844. package/dist/lib/update-prompt.js.map +1 -0
  845. package/dist/lib/work-source/config.js +9 -0
  846. package/dist/lib/work-source/config.js.map +1 -0
  847. package/dist/lib/work-source/index.js +1 -0
  848. package/dist/lib/work-source/index.js.map +1 -0
  849. package/dist/lib/workspace-config.js +1 -0
  850. package/dist/lib/workspace-config.js.map +1 -0
  851. package/dist/lib/workspace.js +1 -0
  852. package/dist/lib/workspace.js.map +1 -0
  853. package/oclif.manifest.json +3540 -3282
  854. package/package.json +10 -10
@@ -5,6 +5,7 @@ import * as path from 'node:path';
5
5
  import { execSync } from 'node:child_process';
6
6
  import Database from 'better-sqlite3';
7
7
  import { PMOCommand, pmoBaseFlags, autoExportToBoard } from '../../lib/pmo/index.js';
8
+ import { trackAgentSpawned } from '../../lib/telemetry/analytics.js';
8
9
  import { shouldOutputJson, outputErrorAsJson, createMetadata, outputConfirmationNeededAsJson, outputExecutionResultAsJson, } from '../../lib/prompt-json.js';
9
10
  import { FlagResolver } from '../../lib/flags/index.js';
10
11
  import { getWorkColumnSetting, findColumnByName } from '../../lib/pmo/utils.js';
@@ -21,6 +22,7 @@ import { buildLinearMetadata, buildLinearSpawnContextMessage, buildLinearTicketD
21
22
  import { buildJiraMetadata, buildJiraSpawnContextMessage, buildJiraTicketDescription, getJiraIssueByKey, } from '../../lib/external-issues/jira.js';
22
23
  import { resolveMirrorToPmo } from '../../lib/external-issues/work-start.js';
23
24
  import { ExternalIssueAdapterError } from '../../lib/external-issues/types.js';
25
+ import { loadActiveWorkSource, saveActiveWorkSource, } from '../../lib/work-source/index.js';
24
26
  /**
25
27
  * Try to execute a git command, return true if successful
26
28
  */
@@ -127,6 +129,9 @@ export default class WorkStart extends PMOCommand {
127
129
  '<%= config.bin %> <%= command.id %> TKT-001 --prompt "Add unit tests for the API" # Custom prompt',
128
130
  '<%= config.bin %> <%= command.id %> --from-issue --source linear --key ENG-123',
129
131
  '<%= config.bin %> <%= command.id %> --from-issue --source jira --key PROJ-123 --mirror-to-pmo',
132
+ '<%= config.bin %> <%= command.id %> --from linear:ENG-123 # Unified: provider:key shorthand',
133
+ '<%= config.bin %> <%= command.id %> --from jira:PROJ-123 # Unified: Jira shorthand',
134
+ '<%= config.bin %> <%= command.id %> --from-issue # Uses workspace active source',
130
135
  ];
131
136
  static args = {
132
137
  ticketId: Args.string({
@@ -144,7 +149,7 @@ export default class WorkStart extends PMOCommand {
144
149
  executor: Flags.string({
145
150
  char: 'e',
146
151
  description: 'Override executor',
147
- options: ['claude-code', 'codex', 'aider', 'custom'],
152
+ options: ['claude-code', 'codex', 'custom'],
148
153
  }),
149
154
  action: Flags.string({
150
155
  char: 'A',
@@ -157,6 +162,9 @@ export default class WorkStart extends PMOCommand {
157
162
  message: Flags.string({
158
163
  description: 'Additional instructions appended to any action prompt',
159
164
  }),
165
+ from: Flags.string({
166
+ description: 'External issue ref in provider:key format (e.g., linear:ENG-123, jira:PROJ-456). Shorthand for --from-issue --source X --key Y.',
167
+ }),
160
168
  'from-issue': Flags.boolean({
161
169
  description: 'Start from external issue source instead of internal ticket id',
162
170
  default: false,
@@ -294,6 +302,15 @@ export default class WorkStart extends PMOCommand {
294
302
  async resolveIssueSourceAndKey(input, jsonMode) {
295
303
  let source = input.source;
296
304
  let key = input.key;
305
+ let sourceResolutionMethod = 'flag';
306
+ // If no explicit source flag, try workspace active source
307
+ if (!isIssueSource(source) && input.db) {
308
+ const activeSource = loadActiveWorkSource(input.db);
309
+ if (activeSource && isIssueSource(activeSource.provider)) {
310
+ source = activeSource.provider;
311
+ sourceResolutionMethod = 'active-source';
312
+ }
313
+ }
297
314
  const sourceResolver = new FlagResolver({
298
315
  commandName: 'work start',
299
316
  baseCommand: 'prlt work start --from-issue',
@@ -307,18 +324,25 @@ export default class WorkStart extends PMOCommand {
307
324
  default: isIssueSource(source) ? source : undefined,
308
325
  when: () => !isIssueSource(source),
309
326
  choices: () => [
310
- { name: 'Linear', value: 'linear', command: 'prlt work start --from-issue --source linear --json' },
311
- { name: 'Jira', value: 'jira', command: 'prlt work start --from-issue --source jira --json' },
327
+ { name: 'Linear', value: 'linear', command: 'prlt work start --from linear:ISSUE-KEY --json' },
328
+ { name: 'Jira', value: 'jira', command: 'prlt work start --from jira:ISSUE-KEY --json' },
312
329
  ],
313
330
  });
314
331
  const sourceResult = await sourceResolver.resolve();
315
- source = source ?? sourceResult.source;
332
+ if (!isIssueSource(source)) {
333
+ source = sourceResult.source;
334
+ sourceResolutionMethod = 'interactive';
335
+ // Persist selected source as default
336
+ if (input.db && isIssueSource(source)) {
337
+ saveActiveWorkSource(input.db, { provider: source });
338
+ }
339
+ }
316
340
  if (!isIssueSource(source)) {
317
341
  throw new Error('Invalid source');
318
342
  }
319
343
  const keyResolver = new FlagResolver({
320
344
  commandName: 'work start',
321
- baseCommand: `prlt work start --from-issue --source ${source}`,
345
+ baseCommand: `prlt work start --from ${source}:`,
322
346
  jsonMode,
323
347
  flags: {},
324
348
  });
@@ -335,7 +359,11 @@ export default class WorkStart extends PMOCommand {
335
359
  if (!resolvedKey) {
336
360
  throw new Error('Issue key is required');
337
361
  }
338
- return { source, key: resolvedKey };
362
+ return {
363
+ source,
364
+ key: resolvedKey,
365
+ sourceResolution: { method: sourceResolutionMethod, provider: source },
366
+ };
339
367
  }
340
368
  async execute() {
341
369
  const { args, flags } = await this.parse(WorkStart);
@@ -392,22 +420,49 @@ export default class WorkStart extends PMOCommand {
392
420
  let externalIssueContextMessage;
393
421
  let fromIssueMirror;
394
422
  let fromIssueMirrorSource;
395
- if (flags['from-issue']) {
423
+ let sourceResolutionMeta;
424
+ // Handle --from shorthand: parse provider:key into source + key
425
+ let fromFlag = flags.from;
426
+ let fromIssueActive = flags['from-issue'];
427
+ if (fromFlag) {
428
+ if (flags['from-issue'] || flags.source || flags.key) {
429
+ db.close();
430
+ return handleError('CONFLICTING_FLAGS', '--from cannot be used with --from-issue, --source, or --key. Use either --from provider:key or --from-issue --source X --key Y.');
431
+ }
432
+ fromIssueActive = true;
433
+ // Parse provider:key from --from value
434
+ const colonIndex = fromFlag.indexOf(':');
435
+ if (colonIndex !== -1) {
436
+ flags.source = fromFlag.slice(0, colonIndex).toLowerCase();
437
+ flags.key = fromFlag.slice(colonIndex + 1).trim();
438
+ }
439
+ else {
440
+ // Provider only, no key - will prompt for key
441
+ flags.source = fromFlag.toLowerCase();
442
+ }
443
+ }
444
+ if (fromIssueActive) {
396
445
  if (ticketId) {
397
446
  db.close();
398
- return handleError('INVALID_FLAGS', 'Cannot provide a ticket ID positional argument when using --from-issue.');
447
+ return handleError('INVALID_FLAGS', 'Cannot provide a ticket ID positional argument when using --from-issue or --from.');
399
448
  }
449
+ const fromBaseCmd = fromFlag ? `prlt work start --from ${fromFlag}` : 'prlt work start --from-issue';
400
450
  projectId = projectId || await this.requireProject({
401
451
  jsonMode: {
402
452
  flags,
403
453
  commandName: 'work start',
404
- baseCommand: 'prlt work start --from-issue',
454
+ baseCommand: fromBaseCmd,
405
455
  },
406
456
  });
407
457
  const sourceAndKey = await this.resolveIssueSourceAndKey({
408
458
  source: flags.source,
409
459
  key: flags.key,
460
+ db,
410
461
  }, jsonMode);
462
+ sourceResolutionMeta = sourceAndKey.sourceResolution;
463
+ if (!jsonMode && sourceResolutionMeta.method !== 'flag') {
464
+ this.log(styles.muted(`Source resolved via ${sourceResolutionMeta.method}: ${sourceResolutionMeta.provider}`));
465
+ }
411
466
  const envMirrorDefault = parseBooleanSetting(process.env.PRLT_MIRROR_TO_PMO_DEFAULT);
412
467
  const configMirrorDefault = getMirrorToPmoDefault(db);
413
468
  const mirrorResolution = resolveMirrorToPmo({
@@ -509,9 +564,12 @@ export default class WorkStart extends PMOCommand {
509
564
  url: externalMetadata.url ?? null,
510
565
  };
511
566
  }
512
- if (flags['from-issue']) {
567
+ if (fromIssueActive) {
513
568
  metadata.mirrorToPmo = fromIssueMirror ?? null;
514
569
  metadata.mirrorToPmoSource = fromIssueMirrorSource ?? null;
570
+ if (sourceResolutionMeta) {
571
+ metadata.sourceResolution = sourceResolutionMeta;
572
+ }
515
573
  }
516
574
  // Build the confirm command with --yes
517
575
  let confirmCmd = `prlt work start ${ticketId}`;
@@ -569,12 +627,14 @@ export default class WorkStart extends PMOCommand {
569
627
  if (isBlocked && !flags.force) {
570
628
  const blockers = await this.storage.getTicketBlockers(ticketId);
571
629
  const incompleteBlockers = blockers.filter(b => b.status !== 'done' && b.status !== 'canceled');
572
- this.log('');
573
- this.log(styles.warning(`⚠️ ${ticketId} is blocked by:`));
574
- for (const blocker of incompleteBlockers) {
575
- this.log(styles.muted(` - ${blocker.id}: ${blocker.title} (${blocker.status})`));
630
+ if (!jsonMode) {
631
+ this.log('');
632
+ this.log(styles.warning(`⚠️ ${ticketId} is blocked by:`));
633
+ for (const blocker of incompleteBlockers) {
634
+ this.log(styles.muted(` - ${blocker.id}: ${blocker.title} (${blocker.status})`));
635
+ }
636
+ this.log('');
576
637
  }
577
- this.log('');
578
638
  // Use FlagResolver for blocked ticket confirmation
579
639
  const blockedResolver = new FlagResolver({
580
640
  commandName: 'work start',
@@ -602,8 +662,10 @@ export default class WorkStart extends PMOCommand {
602
662
  // Check for existing tmux session for this ticket
603
663
  const existingSession = getTicketTmuxSession(ticketId);
604
664
  if (existingSession && !flags.force) {
605
- this.log('');
606
- this.log(styles.warning(`Ticket ${ticketId} has an active tmux session (${existingSession.agent})`));
665
+ if (!jsonMode) {
666
+ this.log('');
667
+ this.log(styles.warning(`Ticket ${ticketId} has an active tmux session (${existingSession.agent})`));
668
+ }
607
669
  // Use FlagResolver for session action
608
670
  const sessionResolver = new FlagResolver({
609
671
  commandName: 'work start',
@@ -631,7 +693,7 @@ export default class WorkStart extends PMOCommand {
631
693
  }
632
694
  if (sessionAction === 'attach') {
633
695
  // Attach to existing session
634
- execSync(`tmux attach -t "${existingSession.sessionName}"`, { stdio: 'inherit' });
696
+ execSync(`tmux attach -d -t "${existingSession.sessionName}"`, { stdio: 'inherit' });
635
697
  db.close();
636
698
  return;
637
699
  }
@@ -696,12 +758,15 @@ export default class WorkStart extends PMOCommand {
696
758
  // No agent specified - default to creating ephemeral agent (new behavior)
697
759
  // Or prompt for agent selection if staff agents exist
698
760
  // Get staff agents that exist on disk (warns about missing directories)
699
- const activeStaffAgents = getActiveStaffAgents(workspaceInfo, (msg) => this.log(msg));
761
+ const activeStaffAgents = getActiveStaffAgents(workspaceInfo, (msg) => {
762
+ if (!jsonMode)
763
+ this.log(msg);
764
+ });
700
765
  if (activeStaffAgents.length > 0) {
701
766
  // Clean up stale executions before checking availability (TKT-604)
702
767
  // This fixes agents appearing as "busy" when their sessions have terminated
703
768
  const cleanedUp = executionStorage.cleanupStaleExecutions();
704
- if (cleanedUp > 0) {
769
+ if (cleanedUp > 0 && !jsonMode) {
705
770
  this.log(styles.muted(` Cleaned up ${cleanedUp} stale execution(s)`));
706
771
  }
707
772
  // Get list of busy agents (already running something)
@@ -744,16 +809,19 @@ export default class WorkStart extends PMOCommand {
744
809
  const selectedAgent = agentResult.selectedAgent;
745
810
  if (selectedAgent === '__ephemeral__') {
746
811
  // Create ephemeral agent
747
- this.log(styles.muted('Creating ephemeral agent...'));
812
+ if (!jsonMode)
813
+ this.log(styles.muted('Creating ephemeral agent...'));
748
814
  const ephemeralResult = await createEphemeralAgent(workspaceInfo, {
749
815
  skipDevcontainer: flags['run-on-host'],
750
- log: (msg) => this.log(msg),
816
+ log: (msg) => { if (!jsonMode)
817
+ this.log(msg); },
751
818
  mountMode: flags.clone ? 'clone' : 'worktree',
752
819
  });
753
820
  agentName = ephemeralResult.name;
754
821
  agentWorktreePath = ephemeralResult.worktreePath;
755
822
  isEphemeralAgent = true;
756
- this.log(styles.success(`Created ephemeral agent: ${agentName}`));
823
+ if (!jsonMode)
824
+ this.log(styles.success(`Created ephemeral agent: ${agentName}`));
757
825
  }
758
826
  else {
759
827
  agentName = selectedAgent;
@@ -761,16 +829,19 @@ export default class WorkStart extends PMOCommand {
761
829
  }
762
830
  else {
763
831
  // No pre-registered agents - create ephemeral agent by default
764
- this.log(styles.muted('Creating ephemeral agent...'));
832
+ if (!jsonMode)
833
+ this.log(styles.muted('Creating ephemeral agent...'));
765
834
  const ephemeralResult = await createEphemeralAgent(workspaceInfo, {
766
835
  skipDevcontainer: flags['run-on-host'],
767
- log: (msg) => this.log(msg),
836
+ log: (msg) => { if (!jsonMode)
837
+ this.log(msg); },
768
838
  mountMode: flags.clone ? 'clone' : 'worktree',
769
839
  });
770
840
  agentName = ephemeralResult.name;
771
841
  agentWorktreePath = ephemeralResult.worktreePath;
772
842
  isEphemeralAgent = true;
773
- this.log(styles.success(`Created ephemeral agent: ${agentName}`));
843
+ if (!jsonMode)
844
+ this.log(styles.success(`Created ephemeral agent: ${agentName}`));
774
845
  }
775
846
  }
776
847
  // At this point agentName is guaranteed to be set
@@ -784,7 +855,7 @@ export default class WorkStart extends PMOCommand {
784
855
  }
785
856
  // Check for running execution on this ticket (warning only, allows parallel work)
786
857
  const runningExecution = executionStorage.getRunningExecution(ticketId);
787
- if (runningExecution) {
858
+ if (runningExecution && !jsonMode) {
788
859
  this.log(styles.warning(`⚠️ Ticket "${ticketId}" already has work in progress: ${runningExecution.id}`));
789
860
  this.log(styles.muted(` Starting parallel execution. Note: status updates may conflict.`));
790
861
  }
@@ -829,16 +900,18 @@ export default class WorkStart extends PMOCommand {
829
900
  const { getAgentGitStatus, pushAgentWork } = await import('../../lib/agents/commands.js');
830
901
  const gitStatus = getAgentGitStatus(workspaceInfo, assignedAgent);
831
902
  if (gitStatus.hasUnsavedWork) {
832
- this.log(styles.warning(`\n⚠️ Agent "${assignedAgent}" has unsaved work:`));
833
- for (const wt of gitStatus.worktrees) {
834
- if (wt.hasUncommittedChanges) {
835
- this.log(styles.muted(` ${wt.repoName}: ${wt.uncommittedFiles.length} uncommitted file(s)`));
836
- }
837
- if (wt.hasUnpushedCommits) {
838
- this.log(styles.muted(` ${wt.repoName}: ${wt.unpushedCount} unpushed commit(s) on ${wt.branch}`));
903
+ if (!jsonMode) {
904
+ this.log(styles.warning(`\n⚠️ Agent "${assignedAgent}" has unsaved work:`));
905
+ for (const wt of gitStatus.worktrees) {
906
+ if (wt.hasUncommittedChanges) {
907
+ this.log(styles.muted(` ${wt.repoName}: ${wt.uncommittedFiles.length} uncommitted file(s)`));
908
+ }
909
+ if (wt.hasUnpushedCommits) {
910
+ this.log(styles.muted(` ${wt.repoName}: ${wt.unpushedCount} unpushed commit(s) on ${wt.branch}`));
911
+ }
839
912
  }
913
+ this.log('');
840
914
  }
841
- this.log('');
842
915
  // Use FlagResolver for unsaved work action
843
916
  const unsavedResolver = new FlagResolver({
844
917
  commandName: 'work start',
@@ -1261,96 +1334,139 @@ export default class WorkStart extends PMOCommand {
1261
1334
  // Auth method resolution for devcontainer environment
1262
1335
  // Only needed for Claude Code executor - other executors handle auth differently
1263
1336
  if (environment === 'devcontainer' && !useApiKey && isClaudeExecutor(executor)) {
1264
- // Check for saved auth method preference
1265
- const savedAuthMethod = getAuthMethod(db);
1266
- const hasApiKey = !!process.env.ANTHROPIC_API_KEY;
1267
- if (savedAuthMethod === 'apikey') {
1268
- // Saved preference: API key — validate it's still set
1269
- if (!hasApiKey) {
1270
- this.log('');
1271
- this.log(styles.warning('⚠️ Saved auth method is "apikey" but ANTHROPIC_API_KEY is not set in your environment.'));
1272
- this.log(styles.muted(' Set the env var or run "' + this.config.bin + ' agent auth" to switch to OAuth.'));
1273
- db.close();
1274
- return;
1337
+ // First, verify Docker daemon is actually running before checking credentials.
1338
+ // dockerCredentialsExist() runs a Docker command that fails silently when the daemon
1339
+ // is down, which would trigger a misleading OAuth credentials warning.
1340
+ if (!isDockerRunning()) {
1341
+ this.log('');
1342
+ this.log(styles.warning('Docker daemon is not running. Start Docker Desktop or use --run-on-host.'));
1343
+ this.log('');
1344
+ if (jsonMode && flags.yes) {
1345
+ // In JSON mode with --yes, auto-switch to host
1346
+ environment = 'host';
1347
+ this.log(styles.muted('Switched to host environment (Docker not running).'));
1275
1348
  }
1276
- useApiKey = true;
1277
- }
1278
- else if (savedAuthMethod === 'oauth') {
1279
- // Saved preference: OAuth validate credentials exist
1280
- const hasCredentials = dockerCredentialsExist();
1281
- if (!hasCredentials) {
1282
- this.log('');
1283
- this.log(styles.warning('⚠️ Saved auth method is "oauth" but no OAuth credentials found.'));
1284
- this.log(styles.muted(' Run "' + this.config.bin + ' agent auth" to authenticate.'));
1285
- db.close();
1286
- return;
1349
+ else {
1350
+ const dockerChoices = [
1351
+ { name: '💻 Switch to host environment', value: 'host' },
1352
+ { name: '✗ Cancel', value: 'cancel' },
1353
+ ];
1354
+ const dockerMessage = 'Docker is not running. What would you like to do?';
1355
+ const dockerResolver = new FlagResolver({
1356
+ commandName: 'work start',
1357
+ baseCommand: `prlt work start ${ticketId}`,
1358
+ jsonMode,
1359
+ flags: {},
1360
+ });
1361
+ dockerResolver.addPrompt({
1362
+ flagName: 'dockerAction',
1363
+ type: 'list',
1364
+ message: dockerMessage,
1365
+ choices: () => dockerChoices,
1366
+ });
1367
+ const dockerResult = await dockerResolver.resolve();
1368
+ const dockerAction = dockerResult.dockerAction;
1369
+ if (dockerAction === 'cancel') {
1370
+ db.close();
1371
+ this.log(styles.muted('Cancelled.'));
1372
+ return;
1373
+ }
1374
+ environment = 'host';
1375
+ this.log(styles.muted('Switched to host environment.'));
1287
1376
  }
1288
- // OAuth credentials valid — continue (useApiKey stays false)
1289
1377
  }
1290
- else {
1291
- // No saved preference — show auth method menu
1292
- const hasCredentials = dockerCredentialsExist();
1293
- if (hasCredentials) {
1294
- // OAuth credentials exist, use them silently (no menu needed)
1295
- // useApiKey stays false
1378
+ // Only check credentials if Docker is running and still using devcontainer
1379
+ if (environment === 'devcontainer') {
1380
+ // Check for saved auth method preference
1381
+ const savedAuthMethod = getAuthMethod(db);
1382
+ const hasApiKey = !!process.env.ANTHROPIC_API_KEY;
1383
+ if (savedAuthMethod === 'apikey') {
1384
+ // Saved preference: API key — validate it's still set
1385
+ if (!hasApiKey) {
1386
+ this.log('');
1387
+ this.log(styles.warning('⚠️ Saved auth method is "apikey" but ANTHROPIC_API_KEY is not set in your environment.'));
1388
+ this.log(styles.muted(' Set the env var or run "' + this.config.bin + ' agent auth" to switch to OAuth.'));
1389
+ db.close();
1390
+ return;
1391
+ }
1392
+ useApiKey = true;
1393
+ }
1394
+ else if (savedAuthMethod === 'oauth') {
1395
+ // Saved preference: OAuth — validate credentials exist
1396
+ const hasCredentials = dockerCredentialsExist();
1397
+ if (!hasCredentials) {
1398
+ this.log('');
1399
+ this.log(styles.warning('⚠️ Saved auth method is "oauth" but no OAuth credentials found.'));
1400
+ this.log(styles.muted(' Run "' + this.config.bin + ' agent auth" to authenticate.'));
1401
+ db.close();
1402
+ return;
1403
+ }
1404
+ // OAuth credentials valid — continue (useApiKey stays false)
1296
1405
  }
1297
1406
  else {
1298
- // No saved preference and no OAuth credentials — prompt user
1299
- // In JSON mode with --yes, continue anyway (agent can run /login)
1300
- if (jsonMode && flags.yes) {
1301
- // Continue without prompting - agent will need to handle auth
1407
+ // No saved preference show auth method menu
1408
+ const hasCredentials = dockerCredentialsExist();
1409
+ if (hasCredentials) {
1410
+ // OAuth credentials exist, use them silently (no menu needed)
1411
+ // useApiKey stays false
1302
1412
  }
1303
1413
  else {
1304
- this.log('');
1305
- this.log(styles.warning('⚠️ No Claude Code OAuth credentials found for Docker containers'));
1306
- this.log(styles.muted(' Agents need credentials to authenticate with Claude.'));
1307
- this.log('');
1308
- // Build auth method choices
1309
- const authChoices = [
1310
- { name: `🔐 OAuth (recommended — uses Max subscription)`, value: 'oauth' },
1311
- ];
1312
- if (hasApiKey) {
1313
- authChoices.push({ name: '🔑 API key (uses API credits, not Max subscription)', value: 'apikey' });
1414
+ // No saved preference and no OAuth credentials — prompt user
1415
+ // In JSON mode with --yes, continue anyway (agent can run /login)
1416
+ if (jsonMode && flags.yes) {
1417
+ // Continue without prompting - agent will need to handle auth
1314
1418
  }
1315
- authChoices.push({ name: '💻 Switch to host environment instead', value: 'host' }, { name: '✗ Cancel', value: 'cancel' });
1316
- // Use FlagResolver for auth method selection
1317
- const authResolver = new FlagResolver({
1318
- commandName: 'work start',
1319
- baseCommand: `prlt work start ${ticketId}`,
1320
- jsonMode,
1321
- flags: {},
1322
- });
1323
- authResolver.addPrompt({
1324
- flagName: 'authAction',
1325
- type: 'list',
1326
- message: 'How should the agent authenticate with Claude?',
1327
- choices: () => authChoices,
1328
- });
1329
- const authResult = await authResolver.resolve();
1330
- const authAction = authResult.authAction;
1331
- if (authAction === 'cancel') {
1332
- db.close();
1333
- this.log(styles.muted('Cancelled.'));
1334
- return;
1335
- }
1336
- if (authAction === 'host') {
1337
- environment = 'host';
1338
- this.log(styles.muted('Switched to host environment.'));
1339
- }
1340
- else if (authAction === 'apikey') {
1341
- useApiKey = true;
1342
- this.log(styles.warning('Using ANTHROPIC_API_KEY — this will consume API credits.'));
1343
- this.log(styles.muted(`Run "${this.config.bin} agent auth" to set up OAuth and use your Max subscription instead.`));
1344
- this.log('');
1345
- }
1346
- else if (authAction === 'oauth') {
1419
+ else {
1347
1420
  this.log('');
1348
- this.log(styles.primary(`Opening ${this.config.bin} agent auth in new tab...`));
1421
+ this.log(styles.warning('⚠️ No Claude Code OAuth credentials found for Docker containers'));
1422
+ this.log(styles.muted(' Agents need credentials to authenticate with Claude.'));
1349
1423
  this.log('');
1350
- // Open auth in a new terminal tab
1351
- const authCmd = `${process.argv[1]} agent auth`;
1352
- try {
1353
- execSync(`osascript -e '
1424
+ // Build auth method choices
1425
+ const authChoices = [
1426
+ { name: `🔐 OAuth (recommended — uses Max subscription)`, value: 'oauth' },
1427
+ ];
1428
+ if (hasApiKey) {
1429
+ authChoices.push({ name: '🔑 API key (uses API credits, not Max subscription)', value: 'apikey' });
1430
+ }
1431
+ authChoices.push({ name: '💻 Switch to host environment instead', value: 'host' }, { name: '✗ Cancel', value: 'cancel' });
1432
+ // Use FlagResolver for auth method selection
1433
+ const authResolver = new FlagResolver({
1434
+ commandName: 'work start',
1435
+ baseCommand: `prlt work start ${ticketId}`,
1436
+ jsonMode,
1437
+ flags: {},
1438
+ });
1439
+ authResolver.addPrompt({
1440
+ flagName: 'authAction',
1441
+ type: 'list',
1442
+ message: 'How should the agent authenticate with Claude?',
1443
+ choices: () => authChoices,
1444
+ });
1445
+ const authResult = await authResolver.resolve();
1446
+ const authAction = authResult.authAction;
1447
+ if (authAction === 'cancel') {
1448
+ db.close();
1449
+ this.log(styles.muted('Cancelled.'));
1450
+ return;
1451
+ }
1452
+ if (authAction === 'host') {
1453
+ environment = 'host';
1454
+ this.log(styles.muted('Switched to host environment.'));
1455
+ }
1456
+ else if (authAction === 'apikey') {
1457
+ useApiKey = true;
1458
+ this.log(styles.warning('Using ANTHROPIC_API_KEY — this will consume API credits.'));
1459
+ this.log(styles.muted(`Run "${this.config.bin} agent auth" to set up OAuth and use your Max subscription instead.`));
1460
+ this.log('');
1461
+ }
1462
+ else if (authAction === 'oauth') {
1463
+ this.log('');
1464
+ this.log(styles.primary(`Opening ${this.config.bin} agent auth in new tab...`));
1465
+ this.log('');
1466
+ // Open auth in a new terminal tab
1467
+ const authCmd = `${process.argv[1]} agent auth`;
1468
+ try {
1469
+ execSync(`osascript -e '
1354
1470
  tell application "iTerm"
1355
1471
  tell current window
1356
1472
  create tab with default profile
@@ -1360,69 +1476,70 @@ export default class WorkStart extends PMOCommand {
1360
1476
  end tell
1361
1477
  end tell
1362
1478
  '`);
1363
- }
1364
- catch {
1365
- // Fallback: try Terminal.app
1366
- try {
1367
- execSync(`osascript -e 'tell application "Terminal" to do script "${authCmd}"'`);
1368
1479
  }
1369
1480
  catch {
1370
- this.log(styles.warning('Could not open new terminal tab.'));
1371
- this.log(styles.muted(`Please run manually: ${authCmd}`));
1481
+ // Fallback: try Terminal.app
1482
+ try {
1483
+ execSync(`osascript -e 'tell application "Terminal" to do script "${authCmd}"'`);
1484
+ }
1485
+ catch {
1486
+ this.log(styles.warning('Could not open new terminal tab.'));
1487
+ this.log(styles.muted(`Please run manually: ${authCmd}`));
1488
+ }
1372
1489
  }
1373
- }
1374
- this.log(styles.muted('Complete the /login flow in the new tab, then press Enter here...'));
1375
- this.log('');
1376
- // Wait for user to complete auth
1377
- await this.prompt([{
1378
- type: 'input',
1379
- name: 'done',
1380
- message: 'Press Enter when authentication is complete:',
1381
- }]);
1382
- // Check if credentials now exist
1383
- if (!dockerCredentialsExist()) {
1490
+ this.log(styles.muted('Complete the /login flow in the new tab, then press Enter here...'));
1384
1491
  this.log('');
1385
- this.log(styles.warning('Authentication did not complete. No credentials found.'));
1386
- db.close();
1387
- return;
1388
- }
1389
- const info = getDockerCredentialInfo();
1390
- this.log('');
1391
- this.log(styles.success('✓ Credentials configured'));
1392
- if (info) {
1393
- this.log(styles.muted(` Subscription: ${info.subscriptionType || 'unknown'}`));
1394
- this.log(styles.muted(` Expires: ${info.expiresAt.toLocaleDateString()}`));
1395
- }
1396
- this.log('');
1397
- }
1398
- // Prompt "Save as default?" after a successful auth method choice
1399
- // (only if they chose oauth or apikey, not host/cancel)
1400
- if (authAction === 'oauth' || authAction === 'apikey') {
1401
- const saveChoices = [
1402
- { name: 'Yes skip this menu next time', value: true },
1403
- { name: 'No — ask me each time', value: false },
1404
- ];
1405
- const saveMessage = 'Save as default auth method?';
1406
- const saveResolver = new FlagResolver({
1407
- commandName: 'work start',
1408
- baseCommand: `prlt work start ${ticketId}`,
1409
- jsonMode,
1410
- flags: {},
1411
- });
1412
- saveResolver.addPrompt({
1413
- flagName: 'saveDefault',
1414
- type: 'list',
1415
- message: saveMessage,
1416
- default: true,
1417
- choices: () => saveChoices,
1418
- });
1419
- const saveResult = await saveResolver.resolve();
1420
- if (saveResult.saveDefault) {
1421
- const methodToSave = authAction === 'apikey' ? 'apikey' : 'oauth';
1422
- saveAuthMethod(db, methodToSave);
1423
- this.log(styles.muted(`Auth method saved: ${methodToSave}. Will skip this menu next time.`));
1492
+ // Wait for user to complete auth
1493
+ await this.prompt([{
1494
+ type: 'input',
1495
+ name: 'done',
1496
+ message: 'Press Enter when authentication is complete:',
1497
+ }]);
1498
+ // Check if credentials now exist
1499
+ if (!dockerCredentialsExist()) {
1500
+ this.log('');
1501
+ this.log(styles.warning('Authentication did not complete. No credentials found.'));
1502
+ db.close();
1503
+ return;
1504
+ }
1505
+ const info = getDockerCredentialInfo();
1506
+ this.log('');
1507
+ this.log(styles.success(' Credentials configured'));
1508
+ if (info) {
1509
+ this.log(styles.muted(` Subscription: ${info.subscriptionType || 'unknown'}`));
1510
+ this.log(styles.muted(` Expires: ${info.expiresAt.toLocaleDateString()}`));
1511
+ }
1424
1512
  this.log('');
1425
1513
  }
1514
+ // Prompt "Save as default?" after a successful auth method choice
1515
+ // (only if they chose oauth or apikey, not host/cancel)
1516
+ if (authAction === 'oauth' || authAction === 'apikey') {
1517
+ const saveChoices = [
1518
+ { name: 'Yes — skip this menu next time', value: true },
1519
+ { name: 'No — ask me each time', value: false },
1520
+ ];
1521
+ const saveMessage = 'Save as default auth method?';
1522
+ const saveResolver = new FlagResolver({
1523
+ commandName: 'work start',
1524
+ baseCommand: `prlt work start ${ticketId}`,
1525
+ jsonMode,
1526
+ flags: {},
1527
+ });
1528
+ saveResolver.addPrompt({
1529
+ flagName: 'saveDefault',
1530
+ type: 'list',
1531
+ message: saveMessage,
1532
+ default: true,
1533
+ choices: () => saveChoices,
1534
+ });
1535
+ const saveResult = await saveResolver.resolve();
1536
+ if (saveResult.saveDefault) {
1537
+ const methodToSave = authAction === 'apikey' ? 'apikey' : 'oauth';
1538
+ saveAuthMethod(db, methodToSave);
1539
+ this.log(styles.muted(`Auth method saved: ${methodToSave}. Will skip this menu next time.`));
1540
+ this.log('');
1541
+ }
1542
+ }
1426
1543
  }
1427
1544
  }
1428
1545
  }
@@ -1819,6 +1936,13 @@ export default class WorkStart extends PMOCommand {
1819
1936
  sessionManager: environment === 'devcontainer' ? sessionManager : undefined,
1820
1937
  });
1821
1938
  if (result.success) {
1939
+ // Track agent spawn analytics
1940
+ trackAgentSpawned({
1941
+ executor,
1942
+ environment,
1943
+ action: context.actionId || 'implement',
1944
+ ephemeral: isEphemeralAgent,
1945
+ });
1822
1946
  // Update execution record with process info
1823
1947
  executionStorage.updateStatus(execution.id, 'running');
1824
1948
  executionStorage.updateProcessInfo(execution.id, {
@@ -2015,52 +2139,79 @@ export default class WorkStart extends PMOCommand {
2015
2139
  let batchUseApiKey = false;
2016
2140
  // Credential check only applies to Claude Code executor
2017
2141
  if (anyUseDevcontainer && isClaudeExecutor(batchExecutor)) {
2018
- const hasCredentials = dockerCredentialsExist();
2019
- if (!hasCredentials) {
2020
- const hasApiKey = !!process.env.ANTHROPIC_API_KEY;
2142
+ // First, verify Docker daemon is actually running before checking credentials.
2143
+ // dockerCredentialsExist() runs a Docker command that fails silently when the daemon
2144
+ // is down, which would trigger a misleading OAuth credentials warning.
2145
+ if (!isDockerRunning()) {
2021
2146
  this.log('');
2022
- this.log(styles.warning('⚠️ No Claude Code OAuth credentials found for Docker containers'));
2023
- this.log(styles.muted(' Agents need credentials to authenticate with Claude.'));
2147
+ this.log(styles.warning('Docker daemon is not running. Start Docker Desktop or use --run-on-host.'));
2024
2148
  this.log('');
2025
- // Build choices based on available options
2026
- const batchAuthChoices = [
2027
- { name: `🔐 Run ${this.config.bin} agent auth now (recommended — uses Max subscription)`, value: 'auth', command: `${this.config.bin} agent auth` },
2028
- ];
2029
- if (hasApiKey) {
2030
- batchAuthChoices.push({ name: '🔑 Use ANTHROPIC_API_KEY (⚠️ uses API credits, not Max subscription)', value: 'apikey', command: '' });
2031
- }
2032
- batchAuthChoices.push({ name: '💻 Run all agents on host instead (--run-on-host)', value: 'host', command: 'prlt work start --all --run-on-host --json' }, { name: '✗ Cancel', value: 'cancel', command: '' });
2033
- const { authAction } = await this.prompt([
2149
+ const { dockerAction } = await this.prompt([
2034
2150
  {
2035
2151
  type: 'list',
2036
- name: 'authAction',
2037
- message: 'What would you like to do?',
2038
- choices: batchAuthChoices,
2152
+ name: 'dockerAction',
2153
+ message: 'Docker is not running. What would you like to do?',
2154
+ choices: [
2155
+ { name: '💻 Run all agents on host instead (--run-on-host)', value: 'host', command: 'prlt work start --all --run-on-host --json' },
2156
+ { name: '✗ Cancel', value: 'cancel', command: '' },
2157
+ ],
2039
2158
  },
2040
2159
  ], batchJsonModeConfig);
2041
- if (authAction === 'cancel') {
2160
+ if (dockerAction === 'cancel') {
2042
2161
  db.close();
2043
2162
  this.log(styles.muted('Cancelled.'));
2044
2163
  return;
2045
2164
  }
2046
- if (authAction === 'host') {
2047
- flags['run-on-host'] = true;
2048
- this.log(styles.muted('All agents will run on host.'));
2049
- }
2050
- else if (authAction === 'apikey') {
2051
- batchUseApiKey = true;
2052
- this.log(styles.warning('Using ANTHROPIC_API_KEY this will consume API credits.'));
2053
- this.log(styles.muted(`Run "${this.config.bin} agent auth" to set up OAuth and use your Max subscription instead.`));
2054
- this.log('');
2055
- }
2056
- else if (authAction === 'auth') {
2165
+ flags['run-on-host'] = true;
2166
+ this.log(styles.muted('All agents will run on host.'));
2167
+ }
2168
+ if (!flags['run-on-host']) {
2169
+ const hasCredentials = dockerCredentialsExist();
2170
+ if (!hasCredentials) {
2171
+ const hasApiKey = !!process.env.ANTHROPIC_API_KEY;
2057
2172
  this.log('');
2058
- this.log(styles.primary(`Opening ${this.config.bin} agent auth in new tab...`));
2173
+ this.log(styles.warning('⚠️ No Claude Code OAuth credentials found for Docker containers'));
2174
+ this.log(styles.muted(' Agents need credentials to authenticate with Claude.'));
2059
2175
  this.log('');
2060
- // Open auth in a new terminal tab
2061
- const authCmd = `${process.argv[1]} agent auth`;
2062
- try {
2063
- execSync(`osascript -e '
2176
+ // Build choices based on available options
2177
+ const batchAuthChoices = [
2178
+ { name: `🔐 Run ${this.config.bin} agent auth now (recommended — uses Max subscription)`, value: 'auth', command: `${this.config.bin} agent auth` },
2179
+ ];
2180
+ if (hasApiKey) {
2181
+ batchAuthChoices.push({ name: '🔑 Use ANTHROPIC_API_KEY (⚠️ uses API credits, not Max subscription)', value: 'apikey', command: '' });
2182
+ }
2183
+ batchAuthChoices.push({ name: '💻 Run all agents on host instead (--run-on-host)', value: 'host', command: 'prlt work start --all --run-on-host --json' }, { name: '✗ Cancel', value: 'cancel', command: '' });
2184
+ const { authAction } = await this.prompt([
2185
+ {
2186
+ type: 'list',
2187
+ name: 'authAction',
2188
+ message: 'What would you like to do?',
2189
+ choices: batchAuthChoices,
2190
+ },
2191
+ ], batchJsonModeConfig);
2192
+ if (authAction === 'cancel') {
2193
+ db.close();
2194
+ this.log(styles.muted('Cancelled.'));
2195
+ return;
2196
+ }
2197
+ if (authAction === 'host') {
2198
+ flags['run-on-host'] = true;
2199
+ this.log(styles.muted('All agents will run on host.'));
2200
+ }
2201
+ else if (authAction === 'apikey') {
2202
+ batchUseApiKey = true;
2203
+ this.log(styles.warning('Using ANTHROPIC_API_KEY — this will consume API credits.'));
2204
+ this.log(styles.muted(`Run "${this.config.bin} agent auth" to set up OAuth and use your Max subscription instead.`));
2205
+ this.log('');
2206
+ }
2207
+ else if (authAction === 'auth') {
2208
+ this.log('');
2209
+ this.log(styles.primary(`Opening ${this.config.bin} agent auth in new tab...`));
2210
+ this.log('');
2211
+ // Open auth in a new terminal tab
2212
+ const authCmd = `${process.argv[1]} agent auth`;
2213
+ try {
2214
+ execSync(`osascript -e '
2064
2215
  tell application "iTerm"
2065
2216
  tell current window
2066
2217
  create tab with default profile
@@ -2070,40 +2221,41 @@ export default class WorkStart extends PMOCommand {
2070
2221
  end tell
2071
2222
  end tell
2072
2223
  '`);
2073
- }
2074
- catch {
2075
- // Fallback: try Terminal.app
2076
- try {
2077
- execSync(`osascript -e 'tell application "Terminal" to do script "${authCmd}"'`);
2078
2224
  }
2079
2225
  catch {
2080
- this.log(styles.warning('Could not open new terminal tab.'));
2081
- this.log(styles.muted(`Please run manually: ${authCmd}`));
2226
+ // Fallback: try Terminal.app
2227
+ try {
2228
+ execSync(`osascript -e 'tell application "Terminal" to do script "${authCmd}"'`);
2229
+ }
2230
+ catch {
2231
+ this.log(styles.warning('Could not open new terminal tab.'));
2232
+ this.log(styles.muted(`Please run manually: ${authCmd}`));
2233
+ }
2234
+ }
2235
+ this.log(styles.muted('Complete the /login flow in the new tab, then press Enter here...'));
2236
+ this.log('');
2237
+ // Wait for user to complete auth
2238
+ await this.prompt([{
2239
+ type: 'input',
2240
+ name: 'done',
2241
+ message: 'Press Enter when authentication is complete:',
2242
+ }], batchJsonModeConfig);
2243
+ // Check if credentials now exist
2244
+ if (!dockerCredentialsExist()) {
2245
+ this.log('');
2246
+ this.log(styles.warning('Authentication did not complete. No credentials found.'));
2247
+ db.close();
2248
+ return;
2249
+ }
2250
+ const info = getDockerCredentialInfo();
2251
+ this.log('');
2252
+ this.log(styles.success('✓ Credentials configured'));
2253
+ if (info) {
2254
+ this.log(styles.muted(` Subscription: ${info.subscriptionType || 'unknown'}`));
2255
+ this.log(styles.muted(` Expires: ${info.expiresAt.toLocaleDateString()}`));
2082
2256
  }
2083
- }
2084
- this.log(styles.muted('Complete the /login flow in the new tab, then press Enter here...'));
2085
- this.log('');
2086
- // Wait for user to complete auth
2087
- await this.prompt([{
2088
- type: 'input',
2089
- name: 'done',
2090
- message: 'Press Enter when authentication is complete:',
2091
- }], batchJsonModeConfig);
2092
- // Check if credentials now exist
2093
- if (!dockerCredentialsExist()) {
2094
2257
  this.log('');
2095
- this.log(styles.warning('Authentication did not complete. No credentials found.'));
2096
- db.close();
2097
- return;
2098
- }
2099
- const info = getDockerCredentialInfo();
2100
- this.log('');
2101
- this.log(styles.success('✓ Credentials configured'));
2102
- if (info) {
2103
- this.log(styles.muted(` Subscription: ${info.subscriptionType || 'unknown'}`));
2104
- this.log(styles.muted(` Expires: ${info.expiresAt.toLocaleDateString()}`));
2105
2258
  }
2106
- this.log('');
2107
2259
  }
2108
2260
  }
2109
2261
  }
@@ -2315,3 +2467,4 @@ export default class WorkStart extends PMOCommand {
2315
2467
  }
2316
2468
  }
2317
2469
  }
2470
+ //# sourceMappingURL=start.js.map