@proletariat/cli 0.3.72 → 0.3.73

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 (391) hide show
  1. package/dist/commands/action/create.js +1 -0
  2. package/dist/commands/action/create.js.map +1 -1
  3. package/dist/commands/action/delete.js +1 -1
  4. package/dist/commands/action/delete.js.map +1 -1
  5. package/dist/commands/action/run.js +1 -1
  6. package/dist/commands/action/run.js.map +1 -1
  7. package/dist/commands/action/show.js +1 -0
  8. package/dist/commands/action/show.js.map +1 -1
  9. package/dist/commands/action/update.js +1 -1
  10. package/dist/commands/action/update.js.map +1 -1
  11. package/dist/commands/agent/auth.js +4 -0
  12. package/dist/commands/agent/auth.js.map +1 -1
  13. package/dist/commands/agent/cleanup.js +1 -1
  14. package/dist/commands/agent/cleanup.js.map +1 -1
  15. package/dist/commands/agent/discover.js +1 -0
  16. package/dist/commands/agent/discover.js.map +1 -1
  17. package/dist/commands/agent/index.js +2 -0
  18. package/dist/commands/agent/index.js.map +1 -1
  19. package/dist/commands/agent/rebuild.js +1 -1
  20. package/dist/commands/agent/rebuild.js.map +1 -1
  21. package/dist/commands/agent/remove.js +1 -1
  22. package/dist/commands/agent/remove.js.map +1 -1
  23. package/dist/commands/agent/restart.js +1 -1
  24. package/dist/commands/agent/restart.js.map +1 -1
  25. package/dist/commands/agent/visit.js +1 -1
  26. package/dist/commands/agent/visit.js.map +1 -1
  27. package/dist/commands/asana/connect.js +6 -5
  28. package/dist/commands/asana/connect.js.map +1 -1
  29. package/dist/commands/asana/import.js +4 -4
  30. package/dist/commands/asana/import.js.map +1 -1
  31. package/dist/commands/asana/sync.js +3 -3
  32. package/dist/commands/asana/sync.js.map +1 -1
  33. package/dist/commands/autocomplete/setup.js +2 -1
  34. package/dist/commands/autocomplete/setup.js.map +1 -1
  35. package/dist/commands/board/index.js +1 -0
  36. package/dist/commands/board/index.js.map +1 -1
  37. package/dist/commands/board/view.js +1 -1
  38. package/dist/commands/board/view.js.map +1 -1
  39. package/dist/commands/branch/create.js +1 -1
  40. package/dist/commands/branch/create.js.map +1 -1
  41. package/dist/commands/branch/validate.js +2 -0
  42. package/dist/commands/branch/validate.js.map +1 -1
  43. package/dist/commands/branch/where.js +1 -0
  44. package/dist/commands/branch/where.js.map +1 -1
  45. package/dist/commands/category/create.js +3 -0
  46. package/dist/commands/category/create.js.map +1 -1
  47. package/dist/commands/category/delete.js +3 -0
  48. package/dist/commands/category/delete.js.map +1 -1
  49. package/dist/commands/category/rename.js +6 -0
  50. package/dist/commands/category/rename.js.map +1 -1
  51. package/dist/commands/claude/index.js +5 -5
  52. package/dist/commands/claude/index.js.map +1 -1
  53. package/dist/commands/claude/open.js +5 -0
  54. package/dist/commands/claude/open.js.map +1 -1
  55. package/dist/commands/commit.js +1 -1
  56. package/dist/commands/commit.js.map +1 -1
  57. package/dist/commands/config/index.js +6 -1
  58. package/dist/commands/config/index.js.map +1 -1
  59. package/dist/commands/dashboard.js +1 -0
  60. package/dist/commands/dashboard.js.map +1 -1
  61. package/dist/commands/diet.js +1 -0
  62. package/dist/commands/diet.js.map +1 -1
  63. package/dist/commands/docker/clean.js +2 -0
  64. package/dist/commands/docker/clean.js.map +1 -1
  65. package/dist/commands/docker/index.js +1 -0
  66. package/dist/commands/docker/index.js.map +1 -1
  67. package/dist/commands/docker/logs.js +6 -0
  68. package/dist/commands/docker/logs.js.map +1 -1
  69. package/dist/commands/docker/prune.js +1 -0
  70. package/dist/commands/docker/prune.js.map +1 -1
  71. package/dist/commands/docker/restart.js +5 -0
  72. package/dist/commands/docker/restart.js.map +1 -1
  73. package/dist/commands/docker/start.js +4 -0
  74. package/dist/commands/docker/start.js.map +1 -1
  75. package/dist/commands/docker/stop.js +4 -0
  76. package/dist/commands/docker/stop.js.map +1 -1
  77. package/dist/commands/epic/activate.js +1 -1
  78. package/dist/commands/epic/activate.js.map +1 -1
  79. package/dist/commands/epic/archive.js +1 -1
  80. package/dist/commands/epic/archive.js.map +1 -1
  81. package/dist/commands/epic/create.js +4 -0
  82. package/dist/commands/epic/create.js.map +1 -1
  83. package/dist/commands/epic/delete.js +1 -1
  84. package/dist/commands/epic/delete.js.map +1 -1
  85. package/dist/commands/epic/move.js +1 -1
  86. package/dist/commands/epic/move.js.map +1 -1
  87. package/dist/commands/epic/progress.js +1 -0
  88. package/dist/commands/epic/progress.js.map +1 -1
  89. package/dist/commands/epic/project.js +1 -1
  90. package/dist/commands/epic/project.js.map +1 -1
  91. package/dist/commands/epic/reorder.js +1 -1
  92. package/dist/commands/epic/reorder.js.map +1 -1
  93. package/dist/commands/epic/spec.js +1 -1
  94. package/dist/commands/epic/spec.js.map +1 -1
  95. package/dist/commands/epic/ticket.js +1 -1
  96. package/dist/commands/epic/ticket.js.map +1 -1
  97. package/dist/commands/epic/view.js +1 -1
  98. package/dist/commands/epic/view.js.map +1 -1
  99. package/dist/commands/execution/config.js +7 -1
  100. package/dist/commands/execution/config.js.map +1 -1
  101. package/dist/commands/execution/list.js +1 -0
  102. package/dist/commands/execution/list.js.map +1 -1
  103. package/dist/commands/execution/logs.js +1 -0
  104. package/dist/commands/execution/logs.js.map +1 -1
  105. package/dist/commands/execution/stop.js +2 -0
  106. package/dist/commands/execution/stop.js.map +1 -1
  107. package/dist/commands/execution/view.js +3 -1
  108. package/dist/commands/execution/view.js.map +1 -1
  109. package/dist/commands/feedback/list.js +2 -0
  110. package/dist/commands/feedback/list.js.map +1 -1
  111. package/dist/commands/feedback/submit.js +2 -0
  112. package/dist/commands/feedback/submit.js.map +1 -1
  113. package/dist/commands/feedback/view.js +2 -0
  114. package/dist/commands/feedback/view.js.map +1 -1
  115. package/dist/commands/gh/login.js +1 -1
  116. package/dist/commands/gh/login.js.map +1 -1
  117. package/dist/commands/gh/token.js +1 -1
  118. package/dist/commands/gh/token.js.map +1 -1
  119. package/dist/commands/linear/auth.js +4 -4
  120. package/dist/commands/linear/auth.js.map +1 -1
  121. package/dist/commands/linear/connect.js +10 -5
  122. package/dist/commands/linear/connect.js.map +1 -1
  123. package/dist/commands/linear/import.js +4 -3
  124. package/dist/commands/linear/import.js.map +1 -1
  125. package/dist/commands/linear/sync.js +3 -3
  126. package/dist/commands/linear/sync.js.map +1 -1
  127. package/dist/commands/link/create.js +1 -1
  128. package/dist/commands/link/create.js.map +1 -1
  129. package/dist/commands/link/list.js +1 -1
  130. package/dist/commands/link/list.js.map +1 -1
  131. package/dist/commands/link/remove.js +1 -1
  132. package/dist/commands/link/remove.js.map +1 -1
  133. package/dist/commands/media/add.js +2 -1
  134. package/dist/commands/media/add.js.map +1 -1
  135. package/dist/commands/media/index.js +2 -0
  136. package/dist/commands/media/index.js.map +1 -1
  137. package/dist/commands/media/list.js +1 -0
  138. package/dist/commands/media/list.js.map +1 -1
  139. package/dist/commands/media/preprocess.js +1 -1
  140. package/dist/commands/media/preprocess.js.map +1 -1
  141. package/dist/commands/media/remove.js +2 -1
  142. package/dist/commands/media/remove.js.map +1 -1
  143. package/dist/commands/media/show.js +1 -1
  144. package/dist/commands/media/show.js.map +1 -1
  145. package/dist/commands/monday/connect.js +4 -4
  146. package/dist/commands/monday/connect.js.map +1 -1
  147. package/dist/commands/monday/sync.js +4 -4
  148. package/dist/commands/monday/sync.js.map +1 -1
  149. package/dist/commands/new.js +1 -0
  150. package/dist/commands/new.js.map +1 -1
  151. package/dist/commands/orchestrator/start.js +2 -0
  152. package/dist/commands/orchestrator/start.js.map +1 -1
  153. package/dist/commands/phase/delete.js +1 -1
  154. package/dist/commands/phase/delete.js.map +1 -1
  155. package/dist/commands/phase/move.js +1 -1
  156. package/dist/commands/phase/move.js.map +1 -1
  157. package/dist/commands/phase/template/delete.js +1 -0
  158. package/dist/commands/phase/template/delete.js.map +1 -1
  159. package/dist/commands/phase/update.js +1 -1
  160. package/dist/commands/phase/update.js.map +1 -1
  161. package/dist/commands/pmo/init.js +2 -2
  162. package/dist/commands/pmo/init.js.map +1 -1
  163. package/dist/commands/pr/checks.js +1 -1
  164. package/dist/commands/pr/checks.js.map +1 -1
  165. package/dist/commands/pr/create.js +1 -1
  166. package/dist/commands/pr/create.js.map +1 -1
  167. package/dist/commands/pr/index.js +1 -1
  168. package/dist/commands/pr/index.js.map +1 -1
  169. package/dist/commands/pr/link.js +3 -3
  170. package/dist/commands/pr/link.js.map +1 -1
  171. package/dist/commands/pr/list.js +1 -1
  172. package/dist/commands/pr/list.js.map +1 -1
  173. package/dist/commands/pr/merge.js +1 -1
  174. package/dist/commands/pr/merge.js.map +1 -1
  175. package/dist/commands/pr/status.js +1 -1
  176. package/dist/commands/pr/status.js.map +1 -1
  177. package/dist/commands/priority/add.js +2 -2
  178. package/dist/commands/priority/add.js.map +1 -1
  179. package/dist/commands/priority/remove.js +2 -2
  180. package/dist/commands/priority/remove.js.map +1 -1
  181. package/dist/commands/priority/set.js +2 -2
  182. package/dist/commands/priority/set.js.map +1 -1
  183. package/dist/commands/project/archive.js +1 -1
  184. package/dist/commands/project/archive.js.map +1 -1
  185. package/dist/commands/project/create.js +4 -0
  186. package/dist/commands/project/create.js.map +1 -1
  187. package/dist/commands/project/delete.js +1 -1
  188. package/dist/commands/project/delete.js.map +1 -1
  189. package/dist/commands/project/spec.js +1 -1
  190. package/dist/commands/project/spec.js.map +1 -1
  191. package/dist/commands/project/unarchive.js +1 -1
  192. package/dist/commands/project/unarchive.js.map +1 -1
  193. package/dist/commands/project/update.js +1 -1
  194. package/dist/commands/project/update.js.map +1 -1
  195. package/dist/commands/project/view.js +1 -1
  196. package/dist/commands/project/view.js.map +1 -1
  197. package/dist/commands/pull.js +3 -0
  198. package/dist/commands/pull.js.map +1 -1
  199. package/dist/commands/qa/index.js +4 -4
  200. package/dist/commands/qa/index.js.map +1 -1
  201. package/dist/commands/repo/add.js +1 -1
  202. package/dist/commands/repo/add.js.map +1 -1
  203. package/dist/commands/repo/create.js +1 -1
  204. package/dist/commands/repo/create.js.map +1 -1
  205. package/dist/commands/repo/remove.js +2 -2
  206. package/dist/commands/repo/remove.js.map +1 -1
  207. package/dist/commands/repo/view.js +1 -1
  208. package/dist/commands/repo/view.js.map +1 -1
  209. package/dist/commands/roadmap/create.js +1 -0
  210. package/dist/commands/roadmap/create.js.map +1 -1
  211. package/dist/commands/session/create.js +4 -0
  212. package/dist/commands/session/create.js.map +1 -1
  213. package/dist/commands/session/exec.js +4 -0
  214. package/dist/commands/session/exec.js.map +1 -1
  215. package/dist/commands/session/health.js +2 -0
  216. package/dist/commands/session/health.js.map +1 -1
  217. package/dist/commands/session/inspect.js +3 -0
  218. package/dist/commands/session/inspect.js.map +1 -1
  219. package/dist/commands/session/peek.js +1 -0
  220. package/dist/commands/session/peek.js.map +1 -1
  221. package/dist/commands/session/restart.js +4 -0
  222. package/dist/commands/session/restart.js.map +1 -1
  223. package/dist/commands/shortcut/connect.js +4 -4
  224. package/dist/commands/shortcut/connect.js.map +1 -1
  225. package/dist/commands/staff/remove.js +1 -1
  226. package/dist/commands/staff/remove.js.map +1 -1
  227. package/dist/commands/status/delete.js +2 -1
  228. package/dist/commands/status/delete.js.map +1 -1
  229. package/dist/commands/status/list.js +1 -0
  230. package/dist/commands/status/list.js.map +1 -1
  231. package/dist/commands/status/move.js +2 -1
  232. package/dist/commands/status/move.js.map +1 -1
  233. package/dist/commands/status/update.js +1 -1
  234. package/dist/commands/status/update.js.map +1 -1
  235. package/dist/commands/telemetry/disable.js +1 -0
  236. package/dist/commands/telemetry/disable.js.map +1 -1
  237. package/dist/commands/telemetry/enable.js +1 -0
  238. package/dist/commands/telemetry/enable.js.map +1 -1
  239. package/dist/commands/telemetry/index.js +1 -0
  240. package/dist/commands/telemetry/index.js.map +1 -1
  241. package/dist/commands/template/apply.js +2 -2
  242. package/dist/commands/template/apply.js.map +1 -1
  243. package/dist/commands/template/delete.js +1 -0
  244. package/dist/commands/template/delete.js.map +1 -1
  245. package/dist/commands/template/save.js +1 -0
  246. package/dist/commands/template/save.js.map +1 -1
  247. package/dist/commands/template/update.js +1 -0
  248. package/dist/commands/template/update.js.map +1 -1
  249. package/dist/commands/ticket/complete.js +1 -1
  250. package/dist/commands/ticket/complete.js.map +1 -1
  251. package/dist/commands/ticket/create.js +14 -4
  252. package/dist/commands/ticket/create.js.map +1 -1
  253. package/dist/commands/ticket/delete.js +23 -8
  254. package/dist/commands/ticket/delete.js.map +1 -1
  255. package/dist/commands/ticket/edit.js +2 -2
  256. package/dist/commands/ticket/edit.js.map +1 -1
  257. package/dist/commands/ticket/link/block.js +1 -1
  258. package/dist/commands/ticket/link/block.js.map +1 -1
  259. package/dist/commands/ticket/link/duplicates.js +1 -1
  260. package/dist/commands/ticket/link/duplicates.js.map +1 -1
  261. package/dist/commands/ticket/link/relates.js +1 -1
  262. package/dist/commands/ticket/link/relates.js.map +1 -1
  263. package/dist/commands/ticket/list.d.ts +0 -8
  264. package/dist/commands/ticket/list.js +15 -121
  265. package/dist/commands/ticket/list.js.map +1 -1
  266. package/dist/commands/ticket/move.js +34 -7
  267. package/dist/commands/ticket/move.js.map +1 -1
  268. package/dist/commands/ticket/resolve.js +2 -2
  269. package/dist/commands/ticket/resolve.js.map +1 -1
  270. package/dist/commands/ticket/status.js +1 -1
  271. package/dist/commands/ticket/status.js.map +1 -1
  272. package/dist/commands/ticket/template/delete.js +1 -0
  273. package/dist/commands/ticket/template/delete.js.map +1 -1
  274. package/dist/commands/ticket/template/save.js +1 -0
  275. package/dist/commands/ticket/template/save.js.map +1 -1
  276. package/dist/commands/ticket/update.js +1 -0
  277. package/dist/commands/ticket/update.js.map +1 -1
  278. package/dist/commands/ticket/view.js +1 -1
  279. package/dist/commands/ticket/view.js.map +1 -1
  280. package/dist/commands/tools/add.js +6 -0
  281. package/dist/commands/tools/add.js.map +1 -1
  282. package/dist/commands/tools/remove.js +3 -0
  283. package/dist/commands/tools/remove.js.map +1 -1
  284. package/dist/commands/trello/configure.js +5 -5
  285. package/dist/commands/trello/configure.js.map +1 -1
  286. package/dist/commands/trello/import.js +4 -4
  287. package/dist/commands/trello/import.js.map +1 -1
  288. package/dist/commands/trello/sync.js +3 -3
  289. package/dist/commands/trello/sync.js.map +1 -1
  290. package/dist/commands/version/bump.js +3 -0
  291. package/dist/commands/version/bump.js.map +1 -1
  292. package/dist/commands/work/complete.js +34 -1
  293. package/dist/commands/work/complete.js.map +1 -1
  294. package/dist/commands/work/hooks/add.js +7 -0
  295. package/dist/commands/work/hooks/add.js.map +1 -1
  296. package/dist/commands/work/hooks/list.js +2 -0
  297. package/dist/commands/work/hooks/list.js.map +1 -1
  298. package/dist/commands/work/hooks/remove.js +4 -0
  299. package/dist/commands/work/hooks/remove.js.map +1 -1
  300. package/dist/commands/work/hooks/toggle.js +4 -0
  301. package/dist/commands/work/hooks/toggle.js.map +1 -1
  302. package/dist/commands/work/ready.js +44 -5
  303. package/dist/commands/work/ready.js.map +1 -1
  304. package/dist/commands/work/resolve.js +1 -1
  305. package/dist/commands/work/resolve.js.map +1 -1
  306. package/dist/commands/work/review.js +3 -1
  307. package/dist/commands/work/review.js.map +1 -1
  308. package/dist/commands/work/revise.js +1 -1
  309. package/dist/commands/work/revise.js.map +1 -1
  310. package/dist/commands/work/source/set.js +3 -0
  311. package/dist/commands/work/source/set.js.map +1 -1
  312. package/dist/commands/work/source.js +1 -0
  313. package/dist/commands/work/source.js.map +1 -1
  314. package/dist/commands/work/spawn.js +2 -1
  315. package/dist/commands/work/spawn.js.map +1 -1
  316. package/dist/commands/work/start.js +71 -18
  317. package/dist/commands/work/start.js.map +1 -1
  318. package/dist/commands/work/watch.js +1 -1
  319. package/dist/commands/work/watch.js.map +1 -1
  320. package/dist/commands/workflow/delete.js +1 -1
  321. package/dist/commands/workflow/delete.js.map +1 -1
  322. package/dist/commands/workflow/setup.js +5 -0
  323. package/dist/commands/workflow/setup.js.map +1 -1
  324. package/dist/commands/workflow/switch.js +1 -1
  325. package/dist/commands/workflow/switch.js.map +1 -1
  326. package/dist/commands/workflow/view.js +1 -1
  327. package/dist/commands/workflow/view.js.map +1 -1
  328. package/dist/commands/workflow-rule/create.js +1 -0
  329. package/dist/commands/workflow-rule/create.js.map +1 -1
  330. package/dist/commands/workflow-rule/delete.js +1 -1
  331. package/dist/commands/workflow-rule/delete.js.map +1 -1
  332. package/dist/commands/workflow-rule/update.js +1 -1
  333. package/dist/commands/workflow-rule/update.js.map +1 -1
  334. package/dist/commands/workspace/add.js +5 -0
  335. package/dist/commands/workspace/add.js.map +1 -1
  336. package/dist/commands/workspace/remove.js +1 -1
  337. package/dist/commands/workspace/remove.js.map +1 -1
  338. package/dist/hooks/init.js +35 -7
  339. package/dist/hooks/init.js.map +1 -1
  340. package/dist/hooks/postrun.d.ts +6 -4
  341. package/dist/hooks/postrun.js +25 -18
  342. package/dist/hooks/postrun.js.map +1 -1
  343. package/dist/lib/execution/commit-validation.d.ts +58 -0
  344. package/dist/lib/execution/commit-validation.js +252 -0
  345. package/dist/lib/execution/commit-validation.js.map +1 -0
  346. package/dist/lib/execution/config.js +3 -0
  347. package/dist/lib/execution/config.js.map +1 -1
  348. package/dist/lib/execution/storage.d.ts +20 -3
  349. package/dist/lib/execution/storage.js +27 -6
  350. package/dist/lib/execution/storage.js.map +1 -1
  351. package/dist/lib/flags/resolver.js +3 -6
  352. package/dist/lib/flags/resolver.js.map +1 -1
  353. package/dist/lib/linear/client.d.ts +4 -0
  354. package/dist/lib/linear/client.js +12 -0
  355. package/dist/lib/linear/client.js.map +1 -1
  356. package/dist/lib/onboarding/wizard.js +3 -3
  357. package/dist/lib/onboarding/wizard.js.map +1 -1
  358. package/dist/lib/pmo/base-command.d.ts +21 -1
  359. package/dist/lib/pmo/base-command.js +28 -4
  360. package/dist/lib/pmo/base-command.js.map +1 -1
  361. package/dist/lib/prompt-command.js +1 -1
  362. package/dist/lib/prompt-command.js.map +1 -1
  363. package/dist/lib/prompt-json.d.ts +19 -11
  364. package/dist/lib/prompt-json.js +32 -17
  365. package/dist/lib/prompt-json.js.map +1 -1
  366. package/dist/lib/providers/index.d.ts +11 -0
  367. package/dist/lib/providers/index.js +11 -0
  368. package/dist/lib/providers/index.js.map +1 -0
  369. package/dist/lib/providers/linear-provider.d.ts +26 -0
  370. package/dist/lib/providers/linear-provider.js +339 -0
  371. package/dist/lib/providers/linear-provider.js.map +1 -0
  372. package/dist/lib/providers/pmo-provider.d.ts +20 -0
  373. package/dist/lib/providers/pmo-provider.js +83 -0
  374. package/dist/lib/providers/pmo-provider.js.map +1 -0
  375. package/dist/lib/providers/resolver.d.ts +44 -0
  376. package/dist/lib/providers/resolver.js +82 -0
  377. package/dist/lib/providers/resolver.js.map +1 -0
  378. package/dist/lib/providers/types.d.ts +136 -0
  379. package/dist/lib/providers/types.js +12 -0
  380. package/dist/lib/providers/types.js.map +1 -0
  381. package/dist/lib/update-prompt.d.ts +3 -3
  382. package/dist/lib/update-prompt.js +15 -10
  383. package/dist/lib/update-prompt.js.map +1 -1
  384. package/dist/lib/work-lifecycle/index.d.ts +1 -0
  385. package/dist/lib/work-lifecycle/index.js +1 -0
  386. package/dist/lib/work-lifecycle/index.js.map +1 -1
  387. package/dist/lib/work-lifecycle/post-execution.d.ts +40 -9
  388. package/dist/lib/work-lifecycle/post-execution.js +61 -9
  389. package/dist/lib/work-lifecycle/post-execution.js.map +1 -1
  390. package/oclif.manifest.json +1886 -1886
  391. package/package.json +1 -1
@@ -0,0 +1,136 @@
1
+ /**
2
+ * Ticket Provider Interface
3
+ *
4
+ * Unified interface for all ticket operations across providers.
5
+ * Whether the ticket lives in local PMO, Linear, Jira, or another system,
6
+ * the same provider interface routes to the right backend.
7
+ *
8
+ * The local PMO is just the default provider for users without integrations,
9
+ * not a cache layer.
10
+ */
11
+ import type { StateCategory, Ticket, TicketFilter, CreateTicketInput } from '../pmo/types.js';
12
+ /**
13
+ * Supported provider names for ticket operations.
14
+ */
15
+ export type TicketProviderName = 'pmo' | 'linear' | 'jira' | 'asana' | 'shortcut' | 'trello';
16
+ /**
17
+ * Generic result of a provider operation.
18
+ */
19
+ export interface ProviderResult {
20
+ /** Whether the operation succeeded */
21
+ success: boolean;
22
+ /** The provider that handled the operation */
23
+ provider: TicketProviderName;
24
+ /** Error message if the operation failed */
25
+ error?: string;
26
+ }
27
+ /**
28
+ * Result of a provider moveTicket operation.
29
+ */
30
+ export interface ProviderMoveResult extends ProviderResult {
31
+ }
32
+ /**
33
+ * Result of a provider deleteTicket operation.
34
+ */
35
+ export interface ProviderDeleteResult extends ProviderResult {
36
+ }
37
+ /**
38
+ * Result of a provider listTickets operation.
39
+ */
40
+ export interface ProviderListResult extends ProviderResult {
41
+ /** Tickets returned by the provider */
42
+ tickets: Ticket[];
43
+ }
44
+ /**
45
+ * Result of a provider createTicket operation.
46
+ */
47
+ export interface ProviderCreateResult extends ProviderResult {
48
+ /** The created ticket */
49
+ ticket?: Ticket;
50
+ }
51
+ /**
52
+ * Result of a provider getTicket operation.
53
+ */
54
+ export interface ProviderGetResult extends ProviderResult {
55
+ /** The retrieved ticket */
56
+ ticket?: Ticket | null;
57
+ }
58
+ /**
59
+ * Ticket provider interface — same contract for all backends.
60
+ *
61
+ * Implementations:
62
+ * - PMOTicketProvider: writes to local SQLite (emits ticket:status_changed)
63
+ * - LinearTicketProvider: calls Linear API, then updates local PMO
64
+ */
65
+ export interface TicketProvider {
66
+ /** Which provider this is */
67
+ readonly name: TicketProviderName;
68
+ /**
69
+ * Move a ticket to a new state.
70
+ *
71
+ * @param ticketId - The PMO ticket ID (e.g., "TKT-142")
72
+ * @param newState - The target state name (e.g., "Review")
73
+ * @returns Result of the move operation
74
+ */
75
+ moveTicket(ticketId: string, newState: string): Promise<ProviderMoveResult>;
76
+ /**
77
+ * Delete a ticket.
78
+ *
79
+ * @param ticketId - The PMO ticket ID (e.g., "TKT-142")
80
+ * @returns Result of the delete operation
81
+ */
82
+ deleteTicket(ticketId: string): Promise<ProviderDeleteResult>;
83
+ /**
84
+ * List tickets, optionally filtered.
85
+ *
86
+ * @param projectId - Optional project scope
87
+ * @param filter - Optional filters (column, priority, search, etc.)
88
+ * @returns Result with tickets array
89
+ */
90
+ listTickets(projectId?: string, filter?: TicketFilter): Promise<ProviderListResult>;
91
+ /**
92
+ * Create a ticket.
93
+ *
94
+ * @param projectId - The project to create the ticket in
95
+ * @param input - Ticket creation input
96
+ * @returns Result with the created ticket
97
+ */
98
+ createTicket(projectId: string, input: CreateTicketInput): Promise<ProviderCreateResult>;
99
+ /**
100
+ * Get a single ticket by ID.
101
+ *
102
+ * @param ticketId - The ticket ID
103
+ * @returns Result with the ticket (or null if not found)
104
+ */
105
+ getTicket(ticketId: string): Promise<ProviderGetResult>;
106
+ }
107
+ /**
108
+ * Context needed to resolve and create a ticket provider.
109
+ */
110
+ export interface ProviderContext {
111
+ /** Ticket's external source (from metadata), e.g., 'linear' */
112
+ externalSource?: string | null;
113
+ /** Ticket's external ID in the source system */
114
+ externalId?: string | null;
115
+ /** Ticket's project ID in the PMO */
116
+ projectId?: string | null;
117
+ /** Ticket's current status category */
118
+ statusCategory?: StateCategory | null;
119
+ }
120
+ /**
121
+ * Storage interface required by providers.
122
+ * SQLiteStorage satisfies this interface.
123
+ */
124
+ export interface ProviderStorage {
125
+ getTicket: (id: string) => Promise<Ticket | null>;
126
+ getProjectBoard: (projectId: string) => Promise<{
127
+ columns: Array<{
128
+ name: string;
129
+ }>;
130
+ } | null>;
131
+ moveTicket: (projectId: string, ticketId: string, columnName: string, position?: number) => Promise<Ticket>;
132
+ deleteTicket: (id: string) => Promise<void>;
133
+ listTickets: (projectId: string | undefined, filter?: TicketFilter) => Promise<Ticket[]>;
134
+ createTicket: (projectId: string, input: CreateTicketInput) => Promise<Ticket>;
135
+ getDatabase: () => import('better-sqlite3').Database;
136
+ }
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Ticket Provider Interface
3
+ *
4
+ * Unified interface for all ticket operations across providers.
5
+ * Whether the ticket lives in local PMO, Linear, Jira, or another system,
6
+ * the same provider interface routes to the right backend.
7
+ *
8
+ * The local PMO is just the default provider for users without integrations,
9
+ * not a cache layer.
10
+ */
11
+ export {};
12
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/lib/providers/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG"}
@@ -48,8 +48,8 @@ export declare function showUpdatePrompt(info: UpdateInfo): Promise<UpdateAction
48
48
  * 3. If an update is available, show interactive prompt
49
49
  * 4. Handle the user's choice
50
50
  *
51
- * Returns true if the process should continue (skip/skip_version),
52
- * or never returns (update now process.exit).
51
+ * Returns 'continue' if the command should proceed, or 'stop' if the
52
+ * init hook should halt (e.g., after an update attempt).
53
53
  */
54
- export declare function handleUpdatePrompt(info: UpdateInfo): Promise<void>;
54
+ export declare function handleUpdatePrompt(info: UpdateInfo): Promise<'continue' | 'stop'>;
55
55
  export {};
@@ -129,8 +129,10 @@ export async function showUpdatePrompt(info) {
129
129
  // Action handlers
130
130
  // ---------------------------------------------------------------------------
131
131
  /**
132
- * Execute the update command, then exit.
132
+ * Execute the update command, then signal the caller to stop.
133
133
  * Runs synchronously so the user sees output in real time.
134
+ * Returns 'updated' on success or 'failed' on failure, so the
135
+ * init hook can exit cleanly through oclif lifecycle.
134
136
  */
135
137
  async function executeUpdate(info) {
136
138
  console.log('');
@@ -143,7 +145,7 @@ async function executeUpdate(info) {
143
145
  });
144
146
  console.log('');
145
147
  console.log('Update complete! Run your command again to use the new version.');
146
- process.exit(0);
148
+ return 'updated';
147
149
  }
148
150
  catch {
149
151
  console.error('');
@@ -153,7 +155,7 @@ async function executeUpdate(info) {
153
155
  if (info.packageManager === 'brew' && info.staleTap?.isStale) {
154
156
  await printStaleTapGuidance();
155
157
  }
156
- process.exit(1);
158
+ return 'failed';
157
159
  }
158
160
  }
159
161
  // ---------------------------------------------------------------------------
@@ -166,23 +168,25 @@ async function executeUpdate(info) {
166
168
  * 3. If an update is available, show interactive prompt
167
169
  * 4. Handle the user's choice
168
170
  *
169
- * Returns true if the process should continue (skip/skip_version),
170
- * or never returns (update now process.exit).
171
+ * Returns 'continue' if the command should proceed, or 'stop' if the
172
+ * init hook should halt (e.g., after an update attempt).
171
173
  */
172
174
  export async function handleUpdatePrompt(info) {
173
175
  if (shouldSuppressPrompt())
174
- return;
176
+ return 'continue';
175
177
  // Show stale tap guidance when detected (even if no version update is cached)
176
178
  if (info.staleTap?.isStale) {
177
179
  await printStaleTapGuidance();
178
180
  }
179
181
  if (!info.updateAvailable)
180
- return;
182
+ return 'continue';
181
183
  const action = await showUpdatePrompt(info);
182
184
  switch (action) {
183
- case 'update':
184
- await executeUpdate(info);
185
- break; // unreachable executeUpdate calls process.exit
185
+ case 'update': {
186
+ const result = await executeUpdate(info);
187
+ process.exitCode = result === 'updated' ? 0 : 1;
188
+ return 'stop';
189
+ }
186
190
  case 'skip':
187
191
  // Session-only dismiss — do nothing, just continue
188
192
  break;
@@ -192,5 +196,6 @@ export async function handleUpdatePrompt(info) {
192
196
  }
193
197
  break;
194
198
  }
199
+ return 'continue';
195
200
  }
196
201
  //# sourceMappingURL=update-prompt.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"update-prompt.js","sourceRoot":"","sources":["../../src/lib/update-prompt.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"update-prompt.js","sourceRoot":"","sources":["../../src/lib/update-prompt.ts"],"names":[],"mappings":"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"}
@@ -9,5 +9,6 @@ export type { WorkEventSource, WorkStartedEvent, WorkStatusChangedEvent, WorkPRC
9
9
  export { WorkLifecycleAdapter, initWorkLifecycleAdapter, stopWorkLifecycleAdapter, } from './adapter.js';
10
10
  export { initHookManager, stopHookManager, } from './hooks/index.js';
11
11
  export { handlePostExecutionTransition, type PostExecutionContext, type PostExecutionResult, } from './post-execution.js';
12
+ export { validateCommits, tryValidateCommits, type CommitValidationResult, } from '../execution/commit-validation.js';
12
13
  export { WorkflowRuleEvaluator, initWorkflowRuleEvaluator, stopWorkflowRuleEvaluator, } from './rule-evaluator.js';
13
14
  export { ActionChainingHandler, initActionChaining, stopActionChaining, } from './action-chaining.js';
@@ -8,6 +8,7 @@
8
8
  export { WorkLifecycleAdapter, initWorkLifecycleAdapter, stopWorkLifecycleAdapter, } from './adapter.js';
9
9
  export { initHookManager, stopHookManager, } from './hooks/index.js';
10
10
  export { handlePostExecutionTransition, } from './post-execution.js';
11
+ export { validateCommits, tryValidateCommits, } from '../execution/commit-validation.js';
11
12
  export { WorkflowRuleEvaluator, initWorkflowRuleEvaluator, stopWorkflowRuleEvaluator, } from './rule-evaluator.js';
12
13
  export { ActionChainingHandler, initActionChaining, stopActionChaining, } from './action-chaining.js';
13
14
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/lib/work-lifecycle/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAUH,OAAO,EACL,oBAAoB,EACpB,wBAAwB,EACxB,wBAAwB,GACzB,MAAM,cAAc,CAAA;AAErB,OAAO,EACL,eAAe,EACf,eAAe,GAChB,MAAM,kBAAkB,CAAA;AAEzB,OAAO,EACL,6BAA6B,GAG9B,MAAM,qBAAqB,CAAA;AAE5B,OAAO,EACL,qBAAqB,EACrB,yBAAyB,EACzB,yBAAyB,GAC1B,MAAM,qBAAqB,CAAA;AAE5B,OAAO,EACL,qBAAqB,EACrB,kBAAkB,EAClB,kBAAkB,GACnB,MAAM,sBAAsB,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/lib/work-lifecycle/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAUH,OAAO,EACL,oBAAoB,EACpB,wBAAwB,EACxB,wBAAwB,GACzB,MAAM,cAAc,CAAA;AAErB,OAAO,EACL,eAAe,EACf,eAAe,GAChB,MAAM,kBAAkB,CAAA;AAEzB,OAAO,EACL,6BAA6B,GAG9B,MAAM,qBAAqB,CAAA;AAE5B,OAAO,EACL,eAAe,EACf,kBAAkB,GAEnB,MAAM,mCAAmC,CAAA;AAE1C,OAAO,EACL,qBAAqB,EACrB,yBAAyB,EACzB,yBAAyB,GAC1B,MAAM,qBAAqB,CAAA;AAE5B,OAAO,EACL,qBAAqB,EACrB,kBAAkB,EAClB,kBAAkB,GACnB,MAAM,sBAAsB,CAAA"}
@@ -5,22 +5,47 @@
5
5
  * Primary use case: when the implement action completes and a PR was created,
6
6
  * automatically move the ticket from In Progress to Review.
7
7
  *
8
- * This hook replaces the need for a separate "create-pr" action. The implement
9
- * action's endPrompt handles PR creation via `prlt work ready --pr`, and this
10
- * hook ensures the state transition happens systematically.
8
+ * Includes commit validation (PRLT-984): before auto-transitioning, checks that
9
+ * meaningful code was committed on the branch. Prevents agents that only wrote
10
+ * boilerplate (README) from being marked as ready for review.
11
+ *
12
+ * Uses the provider abstraction to write directly to the configured provider
13
+ * (Linear, Jira, etc.) — not through the local PMO as a cache layer.
14
+ * The local PMO is just the default provider for users without integrations.
11
15
  */
12
16
  import Database from 'better-sqlite3';
13
17
  import type { StateCategory } from '../pmo/types.js';
18
+ import type { ProviderStorage } from '../providers/types.js';
19
+ import { type CommitValidationResult } from '../execution/commit-validation.js';
14
20
  export interface PostExecutionContext {
15
21
  ticketId: string;
16
22
  actionId?: string;
23
+ /** Agent name — used to resolve the agent's repository for commit validation */
24
+ agentName?: string;
25
+ /** Branch name — used for commit validation */
26
+ branch?: string;
27
+ /** Agent directory path — used to find the git repository */
28
+ agentDir?: string;
29
+ /** Repo worktree names within agentDir */
30
+ repoWorktrees?: string[];
17
31
  }
18
32
  export interface PostExecutionResult {
19
33
  transitioned: boolean;
20
34
  fromState?: string;
21
35
  toState?: string;
36
+ /** Which provider handled the transition */
37
+ provider?: string;
38
+ /** Error from the provider (transition may have partially succeeded) */
39
+ providerError?: string;
40
+ /** Commit validation result (PRLT-984) — present when validation was attempted */
41
+ validation?: CommitValidationResult;
42
+ /** True if the transition was blocked by commit validation */
43
+ blockedByValidation?: boolean;
22
44
  }
23
- /** Minimal storage interface for post-execution transitions. */
45
+ /**
46
+ * Minimal storage interface for post-execution transitions.
47
+ * @deprecated Use ProviderStorage from providers/types.ts instead.
48
+ */
24
49
  export interface PostExecutionStorage {
25
50
  getTicket: (id: string) => Promise<{
26
51
  id: string;
@@ -42,13 +67,19 @@ export interface PostExecutionStorage {
42
67
  * When an execution completes and the ticket:
43
68
  * 1. Is in a "started" category (e.g., In Progress)
44
69
  * 2. Has a PR URL in its metadata
70
+ * 3. Has meaningful code committed (not just boilerplate) — PRLT-984
71
+ *
72
+ * Then automatically move the ticket to the Review column via the appropriate
73
+ * provider (Linear, Jira, or local PMO).
45
74
  *
46
- * Then automatically move the ticket to the Review column.
47
- * If no PR was created, the ticket stays in its current state.
75
+ * Provider resolution:
76
+ * - If the ticket has an external_source (e.g., 'linear') and that provider
77
+ * is configured, write directly to that provider's API.
78
+ * - Otherwise, write to the local PMO (default for users without integrations).
48
79
  *
49
- * @param context - Execution context with ticket and optional action info
80
+ * @param context - Execution context with ticket and optional action/agent info
50
81
  * @param storage - PMO storage instance for ticket operations
51
- * @param db - Database for work column settings
82
+ * @param db - Database for work column settings and provider config
52
83
  * @returns Result indicating whether a transition occurred
53
84
  */
54
- export declare function handlePostExecutionTransition(context: PostExecutionContext, storage: PostExecutionStorage, db: Database.Database): Promise<PostExecutionResult>;
85
+ export declare function handlePostExecutionTransition(context: PostExecutionContext, storage: PostExecutionStorage | ProviderStorage, db: Database.Database): Promise<PostExecutionResult>;
@@ -5,24 +5,36 @@
5
5
  * Primary use case: when the implement action completes and a PR was created,
6
6
  * automatically move the ticket from In Progress to Review.
7
7
  *
8
- * This hook replaces the need for a separate "create-pr" action. The implement
9
- * action's endPrompt handles PR creation via `prlt work ready --pr`, and this
10
- * hook ensures the state transition happens systematically.
8
+ * Includes commit validation (PRLT-984): before auto-transitioning, checks that
9
+ * meaningful code was committed on the branch. Prevents agents that only wrote
10
+ * boilerplate (README) from being marked as ready for review.
11
+ *
12
+ * Uses the provider abstraction to write directly to the configured provider
13
+ * (Linear, Jira, etc.) — not through the local PMO as a cache layer.
14
+ * The local PMO is just the default provider for users without integrations.
11
15
  */
12
16
  import { getWorkColumnSetting, findColumnByName } from '../pmo/utils.js';
17
+ import { resolveTicketProvider } from '../providers/resolver.js';
18
+ import { tryValidateCommits } from '../execution/commit-validation.js';
13
19
  /**
14
20
  * Check if a completed execution should trigger an automatic state transition.
15
21
  *
16
22
  * When an execution completes and the ticket:
17
23
  * 1. Is in a "started" category (e.g., In Progress)
18
24
  * 2. Has a PR URL in its metadata
25
+ * 3. Has meaningful code committed (not just boilerplate) — PRLT-984
26
+ *
27
+ * Then automatically move the ticket to the Review column via the appropriate
28
+ * provider (Linear, Jira, or local PMO).
19
29
  *
20
- * Then automatically move the ticket to the Review column.
21
- * If no PR was created, the ticket stays in its current state.
30
+ * Provider resolution:
31
+ * - If the ticket has an external_source (e.g., 'linear') and that provider
32
+ * is configured, write directly to that provider's API.
33
+ * - Otherwise, write to the local PMO (default for users without integrations).
22
34
  *
23
- * @param context - Execution context with ticket and optional action info
35
+ * @param context - Execution context with ticket and optional action/agent info
24
36
  * @param storage - PMO storage instance for ticket operations
25
- * @param db - Database for work column settings
37
+ * @param db - Database for work column settings and provider config
26
38
  * @returns Result indicating whether a transition occurred
27
39
  */
28
40
  export async function handlePostExecutionTransition(context, storage, db) {
@@ -40,6 +52,30 @@ export async function handlePostExecutionTransition(context, storage, db) {
40
52
  if (!prUrl) {
41
53
  return { transitioned: false };
42
54
  }
55
+ // PRLT-984: Validate that meaningful code was committed before transitioning.
56
+ // If agent info is available (branch + agentDir), run commit validation.
57
+ // If validation fails, block the auto-transition.
58
+ let validation;
59
+ if (context.branch && context.agentDir) {
60
+ try {
61
+ const result = tryValidateCommits(context.agentDir, context.branch, context.repoWorktrees);
62
+ if (result) {
63
+ validation = result;
64
+ if (!result.passed) {
65
+ return {
66
+ transitioned: false,
67
+ fromState: ticket.statusName,
68
+ validation,
69
+ blockedByValidation: true,
70
+ };
71
+ }
72
+ }
73
+ }
74
+ catch {
75
+ // Non-fatal: validation failure shouldn't block everything.
76
+ // If we can't validate, allow the transition to proceed.
77
+ }
78
+ }
43
79
  // Get the Review column name
44
80
  const targetColumnName = getWorkColumnSetting(db, 'review');
45
81
  // Get board columns to find the review column
@@ -56,13 +92,29 @@ export async function handlePostExecutionTransition(context, storage, db) {
56
92
  if (ticket.statusName === reviewColumn) {
57
93
  return { transitioned: false };
58
94
  }
59
- // Move ticket to Review
95
+ // Resolve the appropriate provider for this ticket
96
+ // Cast to ProviderStorage — at runtime the actual object is SQLiteStorage
97
+ // which implements the full interface. For post-execution, only moveTicket is used.
98
+ const provider = resolveTicketProvider(context.ticketId, ticket.projectId, db, storage, ticket.metadata);
99
+ // Move ticket via the provider
60
100
  const previousState = ticket.statusName;
61
- await storage.moveTicket(ticket.projectId, context.ticketId, reviewColumn);
101
+ const moveResult = await provider.moveTicket(context.ticketId, reviewColumn);
102
+ if (!moveResult.success) {
103
+ return {
104
+ transitioned: false,
105
+ fromState: previousState,
106
+ toState: reviewColumn,
107
+ provider: moveResult.provider,
108
+ providerError: moveResult.error,
109
+ validation,
110
+ };
111
+ }
62
112
  return {
63
113
  transitioned: true,
64
114
  fromState: previousState,
65
115
  toState: reviewColumn,
116
+ provider: moveResult.provider,
117
+ validation,
66
118
  };
67
119
  }
68
120
  //# sourceMappingURL=post-execution.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"post-execution.js","sourceRoot":"","sources":["../../../src/lib/work-lifecycle/post-execution.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAGH,OAAO,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAA;AA6BxE;;;;;;;;;;;;;;GAcG;AACH,MAAM,CAAC,KAAK,UAAU,6BAA6B,CACjD,OAA6B,EAC7B,OAA6B,EAC7B,EAAqB;IAErB,sDAAsD;IACtD,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAA;IACxD,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;QACjC,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,CAAA;IAChC,CAAC;IAED,gFAAgF;IAChF,IAAI,MAAM,CAAC,cAAc,KAAK,SAAS,EAAE,CAAC;QACxC,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,CAAA;IAChC,CAAC;IAED,+DAA+D;IAC/D,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAA;IACrC,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,CAAA;IAChC,CAAC;IAED,6BAA6B;IAC7B,MAAM,gBAAgB,GAAG,oBAAoB,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAA;IAE3D,8CAA8C;IAC9C,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,eAAe,CAAC,MAAM,CAAC,SAAS,CAAC,CAAA;IAC7D,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,CAAA;IAChC,CAAC;IAED,MAAM,WAAW,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;IACtD,MAAM,YAAY,GAAG,gBAAgB,CAAC,WAAW,EAAE,gBAAgB,CAAC,CAAA;IACpE,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,CAAA;IAChC,CAAC;IAED,2BAA2B;IAC3B,IAAI,MAAM,CAAC,UAAU,KAAK,YAAY,EAAE,CAAC;QACvC,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,CAAA;IAChC,CAAC;IAED,wBAAwB;IACxB,MAAM,aAAa,GAAG,MAAM,CAAC,UAAU,CAAA;IACvC,MAAM,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAA;IAE1E,OAAO;QACL,YAAY,EAAE,IAAI;QAClB,SAAS,EAAE,aAAa;QACxB,OAAO,EAAE,YAAY;KACtB,CAAA;AACH,CAAC"}
1
+ {"version":3,"file":"post-execution.js","sourceRoot":"","sources":["../../../src/lib/work-lifecycle/post-execution.ts"],"names":[],"mappings":"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"}