@overdeck/desktop 0.45.13 → 0.45.16

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 (336) hide show
  1. package/package.json +1 -1
  2. package/server/{acceptance-criteria-CfujPRrz.js → acceptance-criteria-BZ_nQS1f.js} +2 -2
  3. package/server/{advancing-selfheal-Bn5QiLtn.js → advancing-selfheal-DJYAvGv-.js} +6 -5
  4. package/server/{agent-gc-Cl9Nm0Zu.js → agent-gc-D0wDIeV1.js} +3 -3
  5. package/server/{agent-state-C6Rm6FPR.js → agent-state-lGvgPP4m.js} +1 -1
  6. package/server/{agent-state-service-U8feBf8t.js → agent-state-service-CZrayD_G.js} +1 -1
  7. package/server/{agent-state-service-JhFzYCP_.js → agent-state-service-DFslS5go.js} +9 -52
  8. package/server/{agents-DqQa4Dq_.js → agents-B9GwfCyp.js} +155 -153
  9. package/server/{agents-CxbuBjID.js → agents-CEcaxSkR.js} +1 -1
  10. package/server/{archive-planning-CPitEZo4.js → archive-planning-CbghE9-o.js} +5 -5
  11. package/server/{archive-planning-DmpT1_14.js → archive-planning-CoyIbgGK.js} +1 -1
  12. package/server/{artifact-index-jobs-sMnNtPhy.js → artifact-index-jobs-CcSrUoSE.js} +2 -2
  13. package/server/auto-commit-IW-eik_b.js +3 -0
  14. package/server/{backlog-auto-trigger-Cf9C8fwD.js → backlog-auto-trigger-BfgDsII0.js} +3 -3
  15. package/server/{bd-process-lock-D1aJxeYv.js → bd-process-lock-XAXAet9O.js} +32 -11
  16. package/server/{beads-CivpXztb.js → beads-B1u04n3o.js} +1 -1
  17. package/server/{beads-DRoj6-e1.js → beads-BeSMEjGT.js} +96 -196
  18. package/server/{beads-query-tOsAYP5h.js → beads-query-Dl4FhT8J.js} +24 -99
  19. package/server/beads-restore-BUItPOjI.js +23 -0
  20. package/server/behavior-BTpYbAv4.js +10 -0
  21. package/server/{briefing-freshness-BL3Q6p7R.js → briefing-freshness-DESTCWo-.js} +4 -4
  22. package/server/{checkpoint-manager-DCxjQvP_.js → checkpoint-manager-BwFdegJF.js} +2 -2
  23. package/server/{checkpoint-manager-j5URlFY7.js → checkpoint-manager-DWSXooZV.js} +1 -1
  24. package/server/checkpoint-worker.js +1 -1
  25. package/server/{checkpoints-BoX1H2Hf.js → checkpoints-BtUonbs3.js} +2 -2
  26. package/server/{checkpoints-Bu_M_Q9W.js → checkpoints-fjadfOKF.js} +1 -1
  27. package/server/{claude-hooks-provision-D-jGXmu1.js → claude-hooks-provision-DAtxutOs.js} +132 -114
  28. package/server/claude-hooks-provision-DiK62u0k.js +3 -0
  29. package/server/{claude-permissions-DxIjkOVl.js → claude-permissions-CThLgf8d.js} +2 -2
  30. package/server/{claude-settings-overlay-BPDS6GfE.js → claude-settings-overlay-BF9MPIwx.js} +2 -2
  31. package/server/{claude-settings-overlay-5b9X2S0C.js → claude-settings-overlay-Dx_Uqcmv.js} +1 -1
  32. package/server/{cli-s7bPWy-E.js → cli-ByKIIMfT.js} +9 -9
  33. package/server/cli-D9cUTbBr.js +3 -0
  34. package/server/{cliproxy-BituqWtR.js → cliproxy-B4c1BUvs.js} +2 -2
  35. package/server/{cliproxy-D3sHB0sI.js → cliproxy-C_GuT5DU.js} +1 -1
  36. package/server/{close-issue-CrBE7voz.js → close-issue-BOuLKr6e.js} +5 -5
  37. package/server/{closed-issue-reaper-BRQBc7Xa.js → closed-issue-reaper-CksfuiFD.js} +1 -1
  38. package/server/{closed-issue-reaper-DX9mYUji.js → closed-issue-reaper-DCAYzNXW.js} +102 -30
  39. package/server/{codex-Bi1ITSOo.js → codex-BYPz6ZdF.js} +1 -1
  40. package/server/{codex-CO0HrK3j.js → codex-BbqIRZjd.js} +6 -5
  41. package/server/{behavior-D3d2mVyD.js → codex-parser-mFYZh8vR.js} +3 -9
  42. package/server/{compact-beads-DUkCUFxA.js → compact-beads-CyJtoXJi.js} +15 -8
  43. package/server/{compact-beads-CrA8-k10.js → compact-beads-N00E4EVa.js} +1 -1
  44. package/server/{config-DsCxzjXK.js → config-DVLdmnMJ.js} +2 -2
  45. package/server/{config-B4_d7z7z.js → config-Dj6N8EP9.js} +1 -1
  46. package/server/{config-yaml-C_djSurJ.js → config-yaml-cNOZcEww.js} +118 -23
  47. package/server/{conflict-gate-D47Kl78u.js → conflict-gate-BMKm_5DV.js} +3 -3
  48. package/server/{conflict-gate-CpOn9KC-.js → conflict-gate-CuXUv-bP.js} +1 -1
  49. package/server/{context-layers-CHl3Nroz.js → context-layers-CeAwSYNt.js} +2 -2
  50. package/server/{context-layers-BNhUBTkf.js → context-layers-c0JqYHcS.js} +3 -3
  51. package/server/{control-settings-KyYNXZLv.js → control-settings-D4EFsRBd.js} +4 -4
  52. package/server/{conversation-compaction-D3aS5PnS.js → conversation-compaction-BCggyih4.js} +8 -8
  53. package/server/{conversation-compaction-D4Wed1BJ.js → conversation-compaction-kHVfVRg3.js} +1 -1
  54. package/server/{conversation-service-CFZIjs-M.js → conversation-service-B8LFQQm1.js} +6 -5
  55. package/server/{conversation-service-DcDB5usR.js → conversation-service-BTzObqGi.js} +1 -1
  56. package/server/{conversations-BSOU5qnu.js → conversations-B-lcHv-5.js} +4 -4
  57. package/server/{conversations-BbDPrz89.js → conversations-BM7zlXjr.js} +1 -1
  58. package/server/{cost-BE_ulOrw.js → cost-BcpRQ-7o.js} +3 -3
  59. package/server/{cost-CaiG63FG.js → cost-D9kPIY_5.js} +2 -2
  60. package/server/{cost-sync-D6AX8jv-.js → cost-sync-DF6odxK9.js} +3 -3
  61. package/server/{dag-BQFtXOuJ.js → dag-DKI3sOmX.js} +3 -3
  62. package/server/{dangerous-git-ops-04Ba-Qu3.js → dangerous-git-ops-Bn18PEcN.js} +1 -1
  63. package/server/dashboard-db-worker.js +6 -6
  64. package/server/{deacon-Bz-6Wjmn.js → deacon-DONuopff.js} +3 -3
  65. package/server/{deacon-2EvA9Ci3.js → deacon-DdARMjZq.js} +188 -1601
  66. package/server/{deacon-swarm-DYYOzHRH.js → deacon-swarm-BNGkmYR_.js} +12 -105
  67. package/server/deacon-swarm-CvdFekIO.js +2 -0
  68. package/server/deacon.js +7 -7
  69. package/server/{devcontainer-renderer-Dx0C7VWJ.js → devcontainer-renderer-C-34Sxyz.js} +3 -3
  70. package/server/{dist-ya66D9ze.js → dist-BMXvKiZP.js} +1 -1
  71. package/server/dist-BNwrgsUO.js +3 -0
  72. package/server/{dist-src-Byxt1ifL.js → dist-src-BgGUblXg.js} +1 -1
  73. package/server/{docker-D2TbXDO6.js → docker-apZ9pBYw.js} +67 -28
  74. package/server/{ensure-devcontainer-BTiMfFp5.js → ensure-devcontainer-Bqi1EF1P.js} +4 -4
  75. package/server/{ensure-devcontainer-BIShzs3M.js → ensure-devcontainer-Dq3KoOIl.js} +1 -1
  76. package/server/{esm-shims-DiV9jHa_.js → esm-shims-BEjvINX3.js} +1 -1
  77. package/server/{event-store-C02Gprug.js → event-store-CqDgfbAs.js} +1 -1
  78. package/server/{event-store-C71x6h0i.js → event-store-D89fMfXS.js} +3 -3
  79. package/server/{events-BFDuPV6n.js → events-S_C0pvl6.js} +3 -3
  80. package/server/{events-D2gP2-Yv.js → events-rIGncmP1.js} +1 -1
  81. package/server/export-BJHSVwKP.js +87 -0
  82. package/server/{factory-ByfbrCab.js → factory-DV18m0rc.js} +5 -5
  83. package/server/{feature-registry-population-CSH66UO8.js → feature-registry-population-CqZSnqQi.js} +4 -4
  84. package/server/{feature-registry-storage-DW7dUefc.js → feature-registry-storage-BeXmNBwK.js} +2 -2
  85. package/server/{features-x_aLR7U9.js → features-u5XeMaOK.js} +2 -2
  86. package/server/{feedback-target-BFo9fScH.js → feedback-target-CwyWf0Dg.js} +6 -6
  87. package/server/{feedback-target-C4VMPTZu.js → feedback-target-DDG1PWl3.js} +1 -1
  88. package/server/{feedback-writer-DCyd75yJ.js → feedback-writer-BsJiw5aT.js} +1 -1
  89. package/server/{feedback-writer-B9ZqnnX3.js → feedback-writer-D20HSXre.js} +4 -4
  90. package/server/{flywheel-DwQCoZQG.js → flywheel-9Y1X7IM-.js} +13 -13
  91. package/server/{flywheel-D9NKvWqb.js → flywheel-Dczmgchd.js} +23 -15
  92. package/server/{flywheel-DB48X7Nn.js → flywheel-RCnHAgc4.js} +1 -1
  93. package/server/{flywheel-merge-order-DrjmFXg4.js → flywheel-merge-order-CtCYsFJP.js} +7 -7
  94. package/server/{flywheel-merge-order-f1bi5XIf.js → flywheel-merge-order-DEtEd3aK.js} +1 -1
  95. package/server/forge-8y6aEPTB.js +2 -0
  96. package/server/{forge-C-SoKy8U.js → forge-DFDThFil.js} +2 -2
  97. package/server/{from-fu7ZumnY.js → from-NSJypkI8.js} +1 -1
  98. package/server/{fts-db-CL-YzSRG.js → fts-db-C5A_TTOM.js} +2 -2
  99. package/server/{fts-operations-Bylu5NjM.js → fts-operations-DvCSimfU.js} +2 -2
  100. package/server/{git-utils-Ym380hJZ.js → git-utils-C0neHvQx.js} +1 -1
  101. package/server/{git-utils-C8koBs8j.js → git-utils-Dr0L7mFk.js} +2 -2
  102. package/server/{github-app-DIr70YLg.js → github-app-Bwt9lK4A.js} +1 -1
  103. package/server/{github-app-DhycHVLF.js → github-app-u9-SX7Gc.js} +2 -2
  104. package/server/{github-client-7gkcXcBS.js → github-client-Btyy3uan.js} +3 -3
  105. package/server/{github-client-Ji9lUTNF.js → github-client-Do3k-N1W.js} +1 -1
  106. package/server/{github-pr-lookup-rt7T9FwA.js → github-pr-lookup-DOF1U2WW.js} +2 -2
  107. package/server/{harness-resolve-CvGXUnAF.js → harness-resolve-C6g2R0Cd.js} +3 -3
  108. package/server/{health-events-D4E1DLN-.js → health-events-B4u-2a9m.js} +2 -2
  109. package/server/{health-events-DDfkoO5a.js → health-events-Bos3sk5g.js} +1 -1
  110. package/server/{hooks-D_6pAbuJ.js → hooks-BCoOjL_R.js} +2 -2
  111. package/server/{hooks-DvdnCVv6.js → hooks-uEr8WTx_.js} +1 -1
  112. package/server/{hume-DkVOs1Qi.js → hume-BqxYKbUf.js} +2 -2
  113. package/server/hume-CerGi2RH.js +3 -0
  114. package/server/{idle-stack-reaper-cDRXDpgE.js → idle-stack-reaper-DbZ8ukMd.js} +2 -2
  115. package/server/{idle-stack-reaper-DNbV9-fj.js → idle-stack-reaper-H0W6XtHh.js} +1 -1
  116. package/server/{infra-Clew3DpF.js → infra-Ba9mS6e6.js} +3 -3
  117. package/server/{injection-QCIHOpk6.js → injection-C1DKXeIZ.js} +1 -1
  118. package/server/{injection-ql0Nddcn.js → injection-yrMBxzVq.js} +7 -7
  119. package/server/{inspect-agent-DY18KEx4.js → inspect-agent-B-mnb4uh.js} +9 -9
  120. package/server/inspect-agent-CWkeAB7J.js +2 -0
  121. package/server/{internal-token-C90jBp-y.js → internal-token-BPYEaXFh.js} +1 -1
  122. package/server/{internal-token-BeXjPLKy.js → internal-token-BtqSbKTx.js} +2 -2
  123. package/server/{io-CbAFXQge.js → io-VEGSAqsd.js} +15 -22
  124. package/server/{issue-closed-BYC2TCk-.js → issue-closed-BxcePXL-.js} +4 -4
  125. package/server/{issue-lifecycle-BoJa6qIt.js → issue-lifecycle--8MRxrG1.js} +22 -22
  126. package/server/{issue-lifecycle-CLHbj8RS.js → issue-lifecycle-CdMUauyb.js} +1 -1
  127. package/server/{issue-service-singleton-BS9NENuR.js → issue-service-singleton-CkTUI-eu.js} +10 -10
  128. package/server/{issue-service-singleton-3g_CCY-1.js → issue-service-singleton-MZsDhAob.js} +1 -1
  129. package/server/{issues-BPcqPqfV.js → issues-CBAsuoAO.js} +2 -2
  130. package/server/jsonl-parser-BUW5_sSK.js +245 -0
  131. package/server/{label-cleanup-CwiCSZrb.js → label-cleanup-htK6fBRU.js} +3 -3
  132. package/server/{layers-OHHLphl0.js → layers-jjL16At6.js} +2 -2
  133. package/server/{lifecycle-B8IdvUbt.js → lifecycle-Ck2UR27D.js} +7 -7
  134. package/server/{lifecycle-io-BMCH1Bxg.js → lifecycle-io-DXv8Utct.js} +1 -1
  135. package/server/{lifecycle-io-C73m5e6R.js → lifecycle-io-IehcRt2v.js} +36 -47
  136. package/server/{linear-client-BMxgycoy.js → linear-client-By7hjwuN.js} +1 -1
  137. package/server/{linear-client-CgQlM4aT.js → linear-client-D9cSQfvD.js} +3 -3
  138. package/server/memory-fts-worker.js +1 -1
  139. package/server/{merge-BRkVaIx-.js → merge-BLcEZNXz.js} +1 -1
  140. package/server/{merge-B7Oi-g6k.js → merge-BN8FGJ2q.js} +3 -3
  141. package/server/{merge-agent-DNFFsiEm.js → merge-agent-B3u2szOL.js} +29 -29
  142. package/server/{merge-agent-Bwm34MZ5.js → merge-agent-ejC7Wos8.js} +1 -1
  143. package/server/{merge-batch-BpYXUaqJ.js → merge-batch-DyqlgYGp.js} +1 -1
  144. package/server/{merge-blockers-DIOZmqdK.js → merge-blockers-cq-aS2KG.js} +2 -2
  145. package/server/merge-ops-CFkQtXEj.js +2 -0
  146. package/server/{merge-rebase-C8WH39MB.js → merge-rebase-Dl7yIxtV.js} +2 -2
  147. package/server/{merge-set-CsEE2CyQ.js → merge-set-CZ9Nbay0.js} +3 -3
  148. package/server/{merge-set-DOsBTBQc.js → merge-set-Dy0D0r3i.js} +1 -1
  149. package/server/{merge-sync-CcLM2vwW.js → merge-sync-CG9kDCdT.js} +1 -1
  150. package/server/{merge-sync-C2B322Ot.js → merge-sync-D7jWLgCC.js} +2 -2
  151. package/server/{merge-train-BIm7-7cy.js → merge-train-CH33XJOH.js} +3 -3
  152. package/server/{merge-train-deps-DG1oQ2DT.js → merge-train-deps-JoVdGnOg.js} +4 -4
  153. package/server/{merge-verification-BAbjxEd5.js → merge-verification-D4wTChdX.js} +4 -4
  154. package/server/{multipart-parser-jKtKAXtl.js → multipart-parser-Csn8U-K9.js} +2 -2
  155. package/server/{no-resume-mode-yrPEQ_pC.js → no-resume-mode-Gh5R_YLF.js} +1 -1
  156. package/server/node_modules/.package-lock.json +1 -1
  157. package/server/{orphan-proposed-reconciler-BqVGaOIj.js → orphan-proposed-reconciler-BIcNu4tl.js} +1 -1
  158. package/server/{orphan-proposed-reconciler-zHrwJ3xr.js → orphan-proposed-reconciler-DI_IS1p_.js} +15 -39
  159. package/server/package-lock.json +2 -2
  160. package/server/package.json +1 -1
  161. package/server/{pan-dir-BlNrLzW7.js → pan-dir-CQIfKG8c.js} +4 -4
  162. package/server/{paths-CiVeo4N_.js → paths-Blj6A9AJ.js} +2 -2
  163. package/server/{pickup-KLRUhThD.js → pickup-BtvRBbvI.js} +1 -1
  164. package/server/{pipeline-notifier-nkWCe042.js → pipeline-notifier-BH4PAi-w.js} +1 -1
  165. package/server/{pipeline-notifier-DBF6dHxH.js → pipeline-notifier-D_WYtEwl.js} +2 -2
  166. package/server/project-pipelines-jMTitpeO.js +162 -0
  167. package/server/projects-CrBE6IhN.js +3 -0
  168. package/server/{prompts-CXbQvevY.js → prompts-B3njaImU.js} +2 -2
  169. package/server/{providers-CUdAb5Qu.js → providers-BbEyFhPX.js} +7 -7
  170. package/server/providers-DnPxkHoG.js +3 -0
  171. package/server/public/assets/chunk-BO2N2NFS-3qh9TUJi.js +103 -0
  172. package/server/public/assets/{diagram-OG6HWLK6-NACO1xW5.js → diagram-OG6HWLK6-D8UVTPj7.js} +1 -1
  173. package/server/public/assets/{dist-DQD-ZjQY.js → dist-BvLLn1YC.js} +3 -3
  174. package/server/public/assets/{dist-D1FjqGgm.js → dist-CyubL7Wj.js} +1 -1
  175. package/server/public/assets/{ganttDiagram-6RSMTGT7-CEMAKgmE.js → ganttDiagram-6RSMTGT7-BI4E1LbQ.js} +1 -1
  176. package/server/public/assets/{highlighted-body-OFNGDK62-D5lC7FW8.js → highlighted-body-OFNGDK62-D_bapWkF.js} +1 -1
  177. package/server/public/assets/index-BAZxZ-8I.js +796 -0
  178. package/server/public/assets/index-FBG3JBfq.css +1 -0
  179. package/server/public/assets/{linear-DDHAMRPB.js → linear-CEdobObr.js} +1 -1
  180. package/server/public/assets/mermaid-GHXKKRXX-BYP8MI37.js +1 -0
  181. package/server/public/assets/{pieDiagram-4H26LBE5-DwBdeKBb.js → pieDiagram-4H26LBE5-DT79L01f.js} +1 -1
  182. package/server/public/assets/{prod-DAZt0c4G.js → prod-CR_K2DFV.js} +4 -4
  183. package/server/public/assets/{quadrantDiagram-W4KKPZXB-CNDLp-_m.js → quadrantDiagram-W4KKPZXB-BEkKXXrL.js} +1 -1
  184. package/server/public/assets/{sankeyDiagram-5OEKKPKP-oIUL_uO1.js → sankeyDiagram-5OEKKPKP-BxSCqn-j.js} +1 -1
  185. package/server/public/assets/{xychartDiagram-2RQKCTM6-B-IM6Cck.js → xychartDiagram-2RQKCTM6-DicwJGG_.js} +1 -1
  186. package/server/public/index.html +2 -2
  187. package/server/{pull-requests-DZ-V7_LB.js → pull-requests-43LPDfM8.js} +1 -1
  188. package/server/{pull-requests-kTRl7cWC.js → pull-requests-DyUkQl4W.js} +3 -3
  189. package/server/{rally-xCTZ-UcI.js → rally-BtWjybOa.js} +3 -3
  190. package/server/{rally-api-jOk4vit_.js → rally-api-B-YA_oXx.js} +1 -1
  191. package/server/{rally-api-DpZo3WwF.js → rally-api-B-osULNL.js} +2 -2
  192. package/server/{rally-client-BQjm3aaq.js → rally-client-CzFymP7P.js} +1 -1
  193. package/server/{rally-client-CoWZeVEj.js → rally-client-sErNQBO0.js} +5 -5
  194. package/server/rally-oggyp4cs.js +3 -0
  195. package/server/{reap-terminal-sessions-CAmURC2h.js → reap-terminal-sessions-2s-fvilz.js} +1 -1
  196. package/server/{reap-terminal-sessions-BwJb2DLJ.js → reap-terminal-sessions-DnDQ7pf9.js} +1 -1
  197. package/server/{rebuild-stack-BZ7j27xY.js → rebuild-stack-CoU-HqZj.js} +6 -6
  198. package/server/{rebuild-stack-r-cxcr26.js → rebuild-stack-nGD_nPZo.js} +1 -1
  199. package/server/{reconstruct-cache-13EkMg_i.js → reconstruct-cache-Wj8GrYB0.js} +6 -6
  200. package/server/record-lEYK__LD.js +3 -0
  201. package/server/recovery-trip-BT7nb9OV.js +98 -0
  202. package/server/{release-engine-YLTnEO_K.js → release-engine-CBLQXDlH.js} +5 -5
  203. package/server/{release-set-DwvT_Opu.js → release-set-BNiqi7hy.js} +3 -3
  204. package/server/{remote-B062S1Kc.js → remote-DW_TWQnr.js} +3 -3
  205. package/server/{remote-9u9WL0NJ.js → remote-DcO9An_f.js} +3 -3
  206. package/server/{remote-agents-BBTg-vLT.js → remote-agents-C4cyxHQS.js} +6 -6
  207. package/server/{remote-agents-B4eWgwNd.js → remote-agents-Cv-U-_V8.js} +1 -1
  208. package/server/{remote-completion-B0rmBnbL.js → remote-completion-PhXGGFQy.js} +13 -13
  209. package/server/resolver-C7dLn8OK.js +158 -0
  210. package/server/resume-BYZBIab-.js +3 -0
  211. package/server/{review-agent-tfR5RDzG.js → review-agent-Dn-yn7Zj.js} +23 -23
  212. package/server/{review-agent-Bf9XjLnl.js → review-agent-u5q3ip7H.js} +1 -1
  213. package/server/{review-artifacts-D0_IE6DQ.js → review-artifacts-D4T04aYI.js} +6 -6
  214. package/server/{review-context-CXO5ml5D.js → review-context-Rc0VDLG_.js} +8 -8
  215. package/server/{review-monitor-DfFUSx0J.js → review-monitor-BC--miCO.js} +2 -2
  216. package/server/{review-status-B0Axo-Ma.js → review-status-CG0iDuWa.js} +1 -1
  217. package/server/{review-status-BcfwcAcO.js → review-status-Dc1l4dVz.js} +18 -18
  218. package/server/{review-status-enrichment-Cp5kFTGl.js → review-status-enrichment-C1a1OG_1.js} +3 -3
  219. package/server/{review-status-sync-CEFty1pW.js → review-status-sync-CAr-hfnJ.js} +2 -2
  220. package/server/{review-status-sync-Bc0c_u12.js → review-status-sync-CfSixhhX.js} +1 -1
  221. package/server/{review-verdict-feedback-BOKRLLDf.js → review-verdict-feedback-CVDbIDBe.js} +7 -7
  222. package/server/{review-verdict-feedback-BnGtT0vN.js → review-verdict-feedback-D2Q960wX.js} +1 -1
  223. package/server/{rollup-BVqFuiS9.js → rollup-CakjztPl.js} +1 -1
  224. package/server/{rollup-C22QDVxh.js → rollup-DctoIu-A.js} +8 -8
  225. package/server/{scanner-BLCnuXqY.js → scanner-BTM1jc_u.js} +7 -7
  226. package/server/{sequence-io-BozlUb6f.js → sequence-io-pnoIDGv4.js} +4 -4
  227. package/server/{sequencer-agent-BEDEHfd2.js → sequencer-agent-9Soi-WL-.js} +10 -6
  228. package/server/server.js +1239 -1836
  229. package/server/{service-C8jKYZ0w.js → service-DfTVoqJg.js} +1668 -1408
  230. package/server/{session-fork-BDGksK4e.js → session-fork-C4jAFHj8.js} +2 -2
  231. package/server/session-history-DanhhiCw.js +168 -0
  232. package/server/{settings-CSLhh6qR.js → settings-Cuc12oP_.js} +2 -2
  233. package/server/settings-Cy7SCFO9.js +2 -0
  234. package/server/{settings-DrRQCren.js → settings-DfT3f86D.js} +3 -3
  235. package/server/{shadow-engineering-BMcBN-Of.js → shadow-engineering-bKuKTCn-.js} +3 -3
  236. package/server/{shadow-state-CHqWHD3T.js → shadow-state-CVHpRWlb.js} +1 -1
  237. package/server/{shadow-state-B4ayC7nx.js → shadow-state-DJz6_pb_.js} +2 -2
  238. package/server/{ship-log-CDVmOlZP.js → ship-log-CwqPFfqx.js} +1 -1
  239. package/server/{smart-compaction-V9DBrGcr.js → smart-compaction-B4KlpZGN.js} +1 -1
  240. package/server/{smart-compaction-C-F5sP9P.js → smart-compaction-CiWfGfRZ.js} +7 -7
  241. package/server/{spawn-planning-session-dSpOU0lP.js → spawn-planning-session-CU-DwyDl.js} +15 -15
  242. package/server/{spawn-planning-session-Bz4_JES2.js → spawn-planning-session-D5N3RuLG.js} +1 -1
  243. package/server/{specialist-completion-Coz3eTSr.js → specialist-completion-CJcv-NXH.js} +1 -1
  244. package/server/{specialist-context-fmb03vXQ.js → specialist-context-B2HlbNxS.js} +5 -5
  245. package/server/{specialist-handoff-logger-B9HK_lRu.js → specialist-handoff-logger-CQyF1ygu.js} +2 -2
  246. package/server/{specialist-logs-B24R2B9Y.js → specialist-logs-CdcUpfjj.js} +3 -3
  247. package/server/{specialists-CL7E8yUg.js → specialists-CFgw_0Q6.js} +1657 -113
  248. package/server/{specialists-BGNZ0_ZW.js → specialists-CwzFdapR.js} +20 -256
  249. package/server/{specialists-B6f5-5nG.js → specialists-D7AcFi1u.js} +1 -1
  250. package/server/{specialists-Chvvwf5z.js → specialists-k22_Btaq.js} +1 -1
  251. package/server/specs-RzcDgozr.js +3 -0
  252. package/server/{src-DGAEtABV.js → src-B4TTzNSr.js} +84 -2
  253. package/server/{src-BVxZuHMg.js → src-BvpMg4EB.js} +3 -3
  254. package/server/{src-D-VXCC9C.js → src-D4YUZrwR.js} +6 -6
  255. package/server/{stack-health-C-le5erA.js → stack-health-CSgcYcr8.js} +2 -2
  256. package/server/{stack-health-BKbTTOT2.js → stack-health-DVN7zRnL.js} +1 -1
  257. package/server/{state-home-CoyWsECg.js → state-home-CEvD_v5F.js} +6 -6
  258. package/server/{state-mapping-BvAgFK8n.js → state-mapping-C13UaCL7.js} +1 -1
  259. package/server/stuck-remediation-CxsyxwFO.js +1513 -0
  260. package/server/stuck-remediation-nTIvhGOR.js +2 -0
  261. package/server/{summary-fork-BF_0vxrq.js → summary-fork-CnRMPCYd.js} +2 -2
  262. package/server/{summary-fork-BlE30Q-I.js → summary-fork-gKSoFAnK.js} +8 -8
  263. package/server/{supervisor-BSeML_p0.js → supervisor-CZMs8s0M.js} +2 -2
  264. package/server/supervisor-CfX192ma.js +2 -0
  265. package/server/{swarm-readiness-CQ4sjrXc.js → swarm-readiness-h6-pwY8w.js} +3 -3
  266. package/server/{system-prerequisites-DnmLYOnU.js → system-prerequisites-DZZTi2G6.js} +1 -1
  267. package/server/{teardown-workspace-CpcjDrZ4.js → teardown-workspace-B4D-oCVg.js} +37 -68
  268. package/server/{test-agent-queue-Bq298zZl.js → test-agent-queue-CnuYku4B.js} +6 -6
  269. package/server/{test-verdict-CCDd25uN.js → test-verdict-CRsPpByy.js} +1 -1
  270. package/server/{test-verdict-Bm4uv_AA.js → test-verdict-CXMLATGc.js} +1 -1
  271. package/server/{tldr-daemon-Rn1Zue0P.js → tldr-daemon-CgZQ3jmZ.js} +1 -1
  272. package/server/{tldr-daemon-CaSUXd9r.js → tldr-daemon-CuA8hz21.js} +2 -2
  273. package/server/{tmux-CbcrkUx5.js → tmux-By8E_Yv_.js} +1 -1
  274. package/server/{tmux-BVc-NeKM.js → tmux-C3g9VFcg.js} +2 -2
  275. package/server/{token-D2OC_9ms.js → token-g_sJ19g3.js} +2 -2
  276. package/server/token-util-C9u4An3K.js +3 -0
  277. package/server/{token-util-CROoF5ic.js → token-util-DiwnnbJo.js} +1 -1
  278. package/server/{tracker-config-EsBoOWEy.js → tracker-config-BzfVj41Z.js} +1 -1
  279. package/server/{tracker-config-C1Y_2CIo.js → tracker-config-dQxC15vH.js} +2 -2
  280. package/server/{tracker-utils-lph9C3Pw.js → tracker-utils--z8FLSWn.js} +2 -2
  281. package/server/{tracker-utils-DSb9cfrF.js → tracker-utils-DkKyRT0H.js} +1 -1
  282. package/server/{traefik-connect-5EP1WS_Z.js → traefik-connect-CZYB3dlm.js} +1 -1
  283. package/server/{tunnel-BFBCeo97.js → tunnel-BpWZs0Jy.js} +3 -3
  284. package/server/{tunnel-DDe-ATFF.js → tunnel-CN2px87h.js} +1 -1
  285. package/server/{typed-errors-DSPn_xWP.js → typed-errors-CrN1AByg.js} +1 -1
  286. package/server/{typed-errors-BEJhbjJg.js → typed-errors-sLpGfegz.js} +1 -1
  287. package/server/{types-CE1m_daD.js → types-BLS_Zbmd.js} +1 -1
  288. package/server/{types-B5u3NxMl.js → types-tlXf80x3.js} +1 -1
  289. package/server/{uat-train-DtKHHy1U.js → uat-train-BRo6DM7p.js} +24 -24
  290. package/server/{uat-train-8T24rPzc.js → uat-train-utGVmqdm.js} +1 -1
  291. package/server/{validation-lyudzPvD.js → validation-CsPVsoA0.js} +4 -4
  292. package/server/{validation-COOXwNXU.js → validation-Dq_wwcw3.js} +1 -1
  293. package/server/{verification-runner-DO0nYTJx.js → verification-runner-CMT5WRMS.js} +12 -12
  294. package/server/{verification-runner-Dd1FX8Qk.js → verification-runner-D0Uh-9jc.js} +1 -1
  295. package/server/{vtt-parser-C57tEF7-.js → vtt-parser-C_XPlifj.js} +1 -1
  296. package/server/{work-agent-prompt-B2F3ZwKm.js → work-agent-prompt-ZTAb2Hyf.js} +12 -12
  297. package/server/workflows-BLwxUMP7.js +2 -0
  298. package/server/{workflows-Clz_AFwR.js → workflows-CXRwhw_o.js} +14 -14
  299. package/server/{workspace-D0rCFemz.js → workspace-9UEsKuiP.js} +1 -1
  300. package/server/{workspace-CY_2-Ddv.js → workspace-CNfuj1-5.js} +3 -3
  301. package/server/{workspace-config-DA8U97k9.js → workspace-config-ChWOECy0.js} +1 -1
  302. package/server/{workspace-manager-BIfpzqdU.js → workspace-manager-BO-6k3sP.js} +1 -1
  303. package/server/{workspace-manager-D6NgGkiF.js → workspace-manager-D8AByFIT.js} +13 -13
  304. package/server/{workspace-metadata-C8yn8kAH.js → workspace-metadata-CvC268MN.js} +2 -2
  305. package/server/{workspace-metadata-DfgR40YU.js → workspace-metadata-DZiJtnuF.js} +1 -1
  306. package/server/{workspaces-DOeHyKmA.js → workspaces-D-uIoqbg.js} +104 -122
  307. package/server/writer-BUweuRPx.js +3 -0
  308. package/server/writer-CrP2xuBn.js +251 -0
  309. package/sync-sources/hooks/ask-user-question-hook +7 -1
  310. package/sync-sources/hooks/record-cost-event.js +4 -3
  311. package/sync-sources/hooks/record-cost-event.js.map +1 -1
  312. package/server/agent-runtime-mirror-DrWxopNA.js +0 -37
  313. package/server/auto-commit-wZ9X7Isd.js +0 -3
  314. package/server/bd-mutex-BItGvLQ8.js +0 -35
  315. package/server/beads-restore-CMbDSB5R.js +0 -60
  316. package/server/cli-CqgiSAU8.js +0 -3
  317. package/server/deacon-swarm-B8pgK2a7.js +0 -2
  318. package/server/dist-BYSj075e.js +0 -3
  319. package/server/forge-CUCYK7h_.js +0 -2
  320. package/server/hume-x9voULey.js +0 -3
  321. package/server/inspect-agent-D8UBDgfR.js +0 -2
  322. package/server/merge-ops-B7m-hBEZ.js +0 -2
  323. package/server/projects-BqRMlDOv.js +0 -3
  324. package/server/providers-gZ0cUgQM.js +0 -3
  325. package/server/public/assets/chunk-BO2N2NFS-C-6y8VFI.js +0 -103
  326. package/server/public/assets/index-BDqWyuZQ.js +0 -796
  327. package/server/public/assets/index-CZiADHcL.css +0 -1
  328. package/server/public/assets/mermaid-GHXKKRXX-DRM2ANcR.js +0 -1
  329. package/server/rally-CRteqXe0.js +0 -3
  330. package/server/record-CJsjvRO4.js +0 -3
  331. package/server/resume-R7xkSmLW.js +0 -3
  332. package/server/settings-CSaXtkoA.js +0 -2
  333. package/server/specs-oaaYaA5c.js +0 -3
  334. package/server/supervisor-03Tj_Wra.js +0 -2
  335. package/server/token-util-xNaV-00f.js +0 -3
  336. package/server/workflows-B4fIN8VP.js +0 -2
@@ -1,18 +1,18 @@
1
1
  import { n as __esmMin } from "./rolldown-runtime-DNCzzKnI.js";
2
2
  import { a as init_activity_logger, t as emitActivityDetailedSync } from "./activity-logger-pcbf-e30.js";
3
- import { a as init_event_store, i as initEventStore } from "./event-store-C71x6h0i.js";
4
- import { d as getMaxTurnDiffSummariesPerAgent, f as isTerminalTurnDiffSummaryStatus, l as INITIAL_READ_MODEL_STATE, p as trimTurnDiffSummaries, t as init_src, u as applyEvent } from "./src-DGAEtABV.js";
5
- import { A as listOverdeckAgentStatesSync, k as init_agent_state_sync } from "./review-status-BcfwcAcO.js";
6
- import { a as resolveSessionContextBriefingPath, d as init_agents, o as AgentsResolver, r as init_briefing_freshness } from "./briefing-freshness-BL3Q6p7R.js";
7
- import { f as resolveStatusFile, i as init_paths } from "./paths-CiVeo4N_.js";
8
- import { n as listFeatureRegistryEntries, t as init_feature_registry_storage } from "./feature-registry-storage-DW7dUefc.js";
9
- import { h as listCheckpoints, m as init_checkpoint_manager, s as diffCheckpointFiles, t as captureCheckpoint } from "./checkpoint-manager-DCxjQvP_.js";
10
- import { c as TrackerNotConfigured, d as init_typed_errors } from "./typed-errors-BEJhbjJg.js";
11
- import { i as init_linear_client, r as LinearClientOptionalLive, t as LinearClient } from "./linear-client-CgQlM4aT.js";
12
- import { i as init_github_client, r as GitHubClientOptionalLive, t as GitHubClient } from "./github-client-7gkcXcBS.js";
13
- import { i as init_rally_client, n as RallyClientLive, t as RallyClient } from "./rally-client-CoWZeVEj.js";
14
- import { a as resolveTrackerTypeSync, i as resolveGitHubIssueSync, n as init_tracker_utils } from "./tracker-utils-lph9C3Pw.js";
15
- import { n as init_issue_service_singleton, t as getSharedIssueService } from "./issue-service-singleton-BS9NENuR.js";
3
+ import { a as init_event_store, i as initEventStore } from "./event-store-D89fMfXS.js";
4
+ import { d as getMaxTurnDiffSummariesPerAgent, f as isTerminalTurnDiffSummaryStatus, l as INITIAL_READ_MODEL_STATE, p as trimTurnDiffSummaries, t as init_src, u as applyEvent } from "./src-B4TTzNSr.js";
5
+ import { A as listOverdeckAgentStatesSync, k as init_agent_state_sync } from "./review-status-Dc1l4dVz.js";
6
+ import { a as resolveSessionContextBriefingPath, d as init_agents, o as AgentsResolver, r as init_briefing_freshness } from "./briefing-freshness-DESTCWo-.js";
7
+ import { f as resolveStatusFile, i as init_paths } from "./paths-Blj6A9AJ.js";
8
+ import { n as listFeatureRegistryEntries, t as init_feature_registry_storage } from "./feature-registry-storage-BeXmNBwK.js";
9
+ import { h as listCheckpoints, m as init_checkpoint_manager, s as diffCheckpointFiles, t as captureCheckpoint } from "./checkpoint-manager-BwFdegJF.js";
10
+ import { c as TrackerNotConfigured, d as init_typed_errors } from "./typed-errors-sLpGfegz.js";
11
+ import { i as init_linear_client, r as LinearClientOptionalLive, t as LinearClient } from "./linear-client-D9cSQfvD.js";
12
+ import { i as init_github_client, r as GitHubClientOptionalLive, t as GitHubClient } from "./github-client-Btyy3uan.js";
13
+ import { i as init_rally_client, n as RallyClientLive, t as RallyClient } from "./rally-client-sErNQBO0.js";
14
+ import { a as resolveTrackerTypeSync, i as resolveGitHubIssueSync, n as init_tracker_utils } from "./tracker-utils--z8FLSWn.js";
15
+ import { n as init_issue_service_singleton, t as getSharedIssueService } from "./issue-service-singleton-CkTUI-eu.js";
16
16
  import { dirname } from "node:path";
17
17
  import { Context, Effect, Layer, Option, Queue, Stream } from "effect";
18
18
  import { basename as basename$1, dirname as dirname$1, join as join$1, resolve as resolve$1 } from "path";
@@ -293,7 +293,7 @@ var init_read_model = __esmMin((() => {
293
293
  };
294
294
  const getSnapshot = Effect.gen(function* () {
295
295
  try {
296
- const { getSharedIssueService } = yield* Effect.promise(() => import("./issue-service-singleton-3g_CCY-1.js"));
296
+ const { getSharedIssueService } = yield* Effect.promise(() => import("./issue-service-singleton-MZsDhAob.js"));
297
297
  const currentIssues = cleanIssues(getSharedIssueService().getIssues());
298
298
  if (currentIssues.length > 0 || state.issuesRaw.length === 0) state = {
299
299
  ...state,
@@ -318,13 +318,13 @@ var init_read_model = __esmMin((() => {
318
318
  const getAgentIdBySessionId = (sessionId) => Effect.sync(() => state.agentIdBySessionId[sessionId] ?? null);
319
319
  const agentsResolver = yield* AgentsResolver;
320
320
  yield* Effect.gen(function* () {
321
- const { reconstructCacheAuto } = yield* Effect.promise(() => import("./reconstruct-cache-13EkMg_i.js"));
321
+ const { reconstructCacheAuto } = yield* Effect.promise(() => import("./reconstruct-cache-Wj8GrYB0.js"));
322
322
  const [overdeckAgents, result] = yield* Effect.all([agentsResolver.list({}), Effect.promise(() => reconstructCacheAuto())]);
323
323
  const agentsById = Object.fromEntries(overdeckAgents.map((a) => [a.id, agentSnapshotFromOverdeck(a)]));
324
324
  let sequence = 0;
325
325
  let recentActivity = [];
326
326
  try {
327
- const { getEventStore } = yield* Effect.promise(() => import("./event-store-C02Gprug.js"));
327
+ const { getEventStore } = yield* Effect.promise(() => import("./event-store-CqDgfbAs.js"));
328
328
  const eventStore = getEventStore();
329
329
  sequence = eventStore.getLatestSequence();
330
330
  recentActivity = activityEntriesFromStoredEvents(eventStore.queryByType("activity.entry", MAX_SNAPSHOT_ACTIVITY_ENTRIES));
@@ -340,7 +340,7 @@ var init_read_model = __esmMin((() => {
340
340
  console.log(`[ReadModel] Bootstrapped from local database: ${Object.keys(agentsById).length} agents, ${Object.keys(result.reviewStatusByIssueId).length} review statuses, ${result.issuesEnumerated} in-flight issue(s), seq=${sequence}`);
341
341
  (async () => {
342
342
  try {
343
- const { listCheckpoints, diffCheckpointFiles, getCheckpointTimestamp, deleteLegacyCheckpointRefs } = await import("./checkpoint-manager-j5URlFY7.js");
343
+ const { listCheckpoints, diffCheckpointFiles, getCheckpointTimestamp, deleteLegacyCheckpointRefs } = await import("./checkpoint-manager-DWSXooZV.js");
344
344
  const agents = Object.values(state.agentsById);
345
345
  const firstAgentWithWorkspace = agents.find((a) => a.workspace);
346
346
  if (firstAgentWithWorkspace?.workspace) {
@@ -397,7 +397,7 @@ var init_read_model = __esmMin((() => {
397
397
  }
398
398
  })();
399
399
  try {
400
- const { getSharedIssueService } = yield* Effect.promise(() => import("./issue-service-singleton-3g_CCY-1.js"));
400
+ const { getSharedIssueService } = yield* Effect.promise(() => import("./issue-service-singleton-MZsDhAob.js"));
401
401
  const issueService = getSharedIssueService();
402
402
  const mergeT0 = performance.now();
403
403
  const currentIssues = cleanIssues(issueService.getIssues());
@@ -421,7 +421,7 @@ var init_read_model = __esmMin((() => {
421
421
  issuesRaw: cleaned
422
422
  };
423
423
  try {
424
- if (!_cachedEventStore) import("./event-store-C02Gprug.js").then(({ getEventStore }) => {
424
+ if (!_cachedEventStore) import("./event-store-CqDgfbAs.js").then(({ getEventStore }) => {
425
425
  _cachedEventStore = getEventStore();
426
426
  try {
427
427
  _cachedEventStore.emitOnly({
@@ -437,7 +437,7 @@ var init_read_model = __esmMin((() => {
437
437
  payload: { issues: cleaned }
438
438
  });
439
439
  } catch {}
440
- import("./backlog-auto-trigger-Cf9C8fwD.js").then(({ triggerDebouncedIncrementalPass }) => {
440
+ import("./backlog-auto-trigger-BfgDsII0.js").then(({ triggerDebouncedIncrementalPass }) => {
441
441
  triggerDebouncedIncrementalPass(process.cwd());
442
442
  }).catch(() => {});
443
443
  });
@@ -1386,7 +1386,7 @@ var init_issue_lifecycle = __esmMin((() => {
1386
1386
  }));
1387
1387
  IssueLifecycleWithClientLive = IssueLifecycleLive.pipe(Layer.provide(LinearClientOptionalLive), Layer.provide(GitHubClientOptionalLive), Layer.provide(Layer.effect(RallyClient, Effect.gen(function* () {
1388
1388
  return yield* Effect.gen(function* () {
1389
- const { getRallyConfig } = yield* Effect.promise(() => import("./tracker-config-EsBoOWEy.js"));
1389
+ const { getRallyConfig } = yield* Effect.promise(() => import("./tracker-config-BzfVj41Z.js"));
1390
1390
  if (!getRallyConfig()) {
1391
1391
  const fail = () => Effect.fail(new TrackerNotConfigured({ tracker: "rally" }));
1392
1392
  return {
@@ -1403,4 +1403,4 @@ var init_issue_lifecycle = __esmMin((() => {
1403
1403
  //#endregion
1404
1404
  export { init_queue_position as _, EventStoreService as a, ReadModelService as c, init_read_model as d, toAgentResolution as f, findPositionInQueueSync as g, computeQueuePositionFromStatusSync as h, init_issue_lifecycle as i, ReadModelServiceLive as l, toRole as m, IssueLifecycleLive as n, EventStoreServiceLive as o, toAgentStatus as p, IssueLifecycleWithClientLive as r, init_domain_services as s, IssueLifecycle as t, getClosedIssueIdsForReadSource as u };
1405
1405
 
1406
- //# sourceMappingURL=issue-lifecycle-BoJa6qIt.js.map
1406
+ //# sourceMappingURL=issue-lifecycle--8MRxrG1.js.map
@@ -1,3 +1,3 @@
1
- import { i as init_issue_lifecycle, n as IssueLifecycleLive, r as IssueLifecycleWithClientLive, t as IssueLifecycle } from "./issue-lifecycle-BoJa6qIt.js";
1
+ import { i as init_issue_lifecycle, n as IssueLifecycleLive, r as IssueLifecycleWithClientLive, t as IssueLifecycle } from "./issue-lifecycle--8MRxrG1.js";
2
2
  init_issue_lifecycle();
3
3
  export { IssueLifecycle, IssueLifecycleLive, IssueLifecycleWithClientLive };
@@ -1,11 +1,11 @@
1
1
  import { n as __esmMin, r as __exportAll } from "./rolldown-runtime-DNCzzKnI.js";
2
- import { Gn as resolveProjectFromIssueSync, Nn as init_projects, f as loadConfigSync, t as init_config_yaml } from "./config-yaml-C_djSurJ.js";
2
+ import { Fn as init_projects, f as loadConfigSync, qn as resolveProjectFromIssueSync, t as init_config_yaml } from "./config-yaml-cNOZcEww.js";
3
3
  import { n as openDatabase, t as init_driver } from "./driver-D-HBOQa_.js";
4
- import { c as init_review_status, d as loadReviewStatusesForIssues } from "./review-status-BcfwcAcO.js";
5
- import { a as init_tracker_config, n as getLinearApiKey, o as validateRallyConfig, r as getRallyConfig, t as getGitHubConfig } from "./tracker-config-C1Y_2CIo.js";
6
- import { n as init_dist_src, t as Octokit } from "./dist-src-Byxt1ifL.js";
7
- import { n as mapGitHubStateToCanonical, t as init_state_mapping } from "./state-mapping-BvAgFK8n.js";
8
- import { o as init_io, p as readWorkspacePlan, r as findPlan } from "./io-CbAFXQge.js";
4
+ import { c as init_review_status, d as loadReviewStatusesForIssues } from "./review-status-Dc1l4dVz.js";
5
+ import { a as init_tracker_config, n as getLinearApiKey, o as validateRallyConfig, r as getRallyConfig, t as getGitHubConfig } from "./tracker-config-dQxC15vH.js";
6
+ import { n as init_dist_src, t as Octokit } from "./dist-src-BgGUblXg.js";
7
+ import { n as mapGitHubStateToCanonical, t as init_state_mapping } from "./state-mapping-C13UaCL7.js";
8
+ import { o as init_io, p as readWorkspacePlan, r as findPlan } from "./io-VEGSAqsd.js";
9
9
  import { Effect } from "effect";
10
10
  import { existsSync } from "fs";
11
11
  import { join } from "path";
@@ -865,7 +865,7 @@ var init_issue_data_service = __esmMin((() => {
865
865
  async ensureShadowStateLoaded() {
866
866
  if (this.shadowStateModule) return;
867
867
  try {
868
- this.shadowStateModule = await import("./shadow-state-CHqWHD3T.js");
868
+ this.shadowStateModule = await import("./shadow-state-CVHpRWlb.js");
869
869
  await this.refreshShadowStatesCache();
870
870
  } catch {}
871
871
  }
@@ -1408,8 +1408,8 @@ var init_issue_data_service = __esmMin((() => {
1408
1408
  }
1409
1409
  if (!this.cache.isStale("rally", "issues") && this.trackers.rally.lastFetchedIssues.length > 0) return;
1410
1410
  try {
1411
- const { RallyTracker } = await import("./rally-CRteqXe0.js");
1412
- const { findProjectsByRallyProject } = await import("./projects-BqRMlDOv.js");
1411
+ const { RallyTracker } = await import("./rally-oggyp4cs.js");
1412
+ const { findProjectsByRallyProject } = await import("./projects-CrBE6IhN.js");
1413
1413
  const rallyProjects = findProjectsByRallyProject();
1414
1414
  let allFormatted = [];
1415
1415
  if (rallyProjects.length > 0) {
@@ -1504,4 +1504,4 @@ var init_issue_service_singleton = __esmMin((() => {
1504
1504
  //#endregion
1505
1505
  export { CacheService as a, startSharedIssueService as i, init_issue_service_singleton as n, init_cache_service as o, issue_service_singleton_exports as r, parseIntegerHeader as s, getSharedIssueService as t };
1506
1506
 
1507
- //# sourceMappingURL=issue-service-singleton-BS9NENuR.js.map
1507
+ //# sourceMappingURL=issue-service-singleton-CkTUI-eu.js.map
@@ -1,3 +1,3 @@
1
- import { i as startSharedIssueService, n as init_issue_service_singleton, t as getSharedIssueService } from "./issue-service-singleton-BS9NENuR.js";
1
+ import { i as startSharedIssueService, n as init_issue_service_singleton, t as getSharedIssueService } from "./issue-service-singleton-CkTUI-eu.js";
2
2
  init_issue_service_singleton();
3
3
  export { getSharedIssueService, startSharedIssueService };
@@ -1,5 +1,5 @@
1
1
  import { n as __esmMin } from "./rolldown-runtime-DNCzzKnI.js";
2
- import { _ as integer, a as EventBus, c as Records, f as init_infra, h as text, m as sqliteTable, p as init_sqlite_core, r as Db, v as init_drizzle_orm, x as eq } from "./infra-Clew3DpF.js";
2
+ import { _ as integer, a as EventBus, c as Records, f as init_infra, h as text, m as sqliteTable, p as init_sqlite_core, r as Db, v as init_drizzle_orm, x as eq } from "./infra-Ba9mS6e6.js";
3
3
  import { Context, Effect, Layer, Schema } from "effect";
4
4
  import { HttpApiEndpoint, HttpApiGroup } from "effect/unstable/httpapi";
5
5
  //#region ../../lib/overdeck/issues.ts
@@ -350,4 +350,4 @@ var init_issues = __esmMin((() => {
350
350
  //#endregion
351
351
  export { init_issues as n, IssueId as t };
352
352
 
353
- //# sourceMappingURL=issues-BPcqPqfV.js.map
353
+ //# sourceMappingURL=issues-CBAsuoAO.js.map
@@ -0,0 +1,245 @@
1
+ import { n as __esmMin } from "./rolldown-runtime-DNCzzKnI.js";
2
+ import { Br as encodeClaudeProjectDir, Jr as init_paths, xr as init_errors } from "./config-yaml-cNOZcEww.js";
3
+ import { o as getPricingSync, s as init_cost, t as calculateCostSync } from "./cost-D9kPIY_5.js";
4
+ import "effect";
5
+ import { existsSync, readFileSync, readdirSync, statSync } from "fs";
6
+ import { basename, join } from "path";
7
+ import { homedir } from "os";
8
+ //#region ../../lib/cost-parsers/jsonl-parser.ts
9
+ /**
10
+ * Claude Code JSONL Parser
11
+ *
12
+ * Parse token usage from Claude Code session files.
13
+ * Session files are stored at: ~/.claude/projects/<project-path-hash>/<session-id>.jsonl
14
+ */
15
+ function getClaudeProjectsDir() {
16
+ return process.env.CLAUDE_PROJECTS_DIR || join(homedir(), ".claude", "projects");
17
+ }
18
+ /**
19
+ * Get all Claude Code project directories
20
+ */
21
+ function getProjectDirsSync() {
22
+ const claudeProjectsDir = getClaudeProjectsDir();
23
+ if (!existsSync(claudeProjectsDir)) return [];
24
+ return readdirSync(claudeProjectsDir).map((name) => join(claudeProjectsDir, name)).filter((path) => {
25
+ try {
26
+ return statSync(path).isDirectory();
27
+ } catch {
28
+ return false;
29
+ }
30
+ });
31
+ }
32
+ /**
33
+ * Get session JSONL files for a project directory
34
+ */
35
+ function getSessionFilesSync(projectDir) {
36
+ if (!existsSync(projectDir)) return [];
37
+ return readdirSync(projectDir).filter((name) => name.endsWith(".jsonl")).map((name) => join(projectDir, name)).sort((a, b) => {
38
+ try {
39
+ return statSync(b).mtime.getTime() - statSync(a).mtime.getTime();
40
+ } catch {
41
+ return 0;
42
+ }
43
+ });
44
+ }
45
+ /**
46
+ * Get all session files across all projects
47
+ */
48
+ function getAllSessionFilesSync() {
49
+ const files = [];
50
+ for (const projectDir of getProjectDirsSync()) files.push(...getSessionFilesSync(projectDir));
51
+ return files.sort((a, b) => {
52
+ try {
53
+ return statSync(b).mtime.getTime() - statSync(a).mtime.getTime();
54
+ } catch {
55
+ return 0;
56
+ }
57
+ });
58
+ }
59
+ /**
60
+ * Normalize model name for pricing lookup
61
+ */
62
+ function normalizeModelName(model) {
63
+ if (model.includes("claude")) {
64
+ let normalizedModel = model;
65
+ if (model.includes("fable-5") || model.includes("fable.5") || model.includes("fable")) normalizedModel = "claude-fable-5";
66
+ if (model.includes("opus-4-8") || model.includes("opus-4.8")) normalizedModel = "claude-opus-4-8";
67
+ else if (model.includes("opus-4-7") || model.includes("opus-4.7")) normalizedModel = "claude-opus-4-7";
68
+ else if (model.includes("opus-4-6") || model.includes("opus-4.6")) normalizedModel = "claude-opus-4-6";
69
+ else if (model.includes("opus-4-1") || model.includes("opus-4.1")) normalizedModel = "claude-opus-4-1";
70
+ else if (model.includes("opus-4") || model.includes("opus")) normalizedModel = "claude-opus-4";
71
+ if (model.includes("sonnet-5") || model.includes("sonnet.5")) normalizedModel = "claude-sonnet-5";
72
+ else if (model.includes("sonnet-4-6") || model.includes("sonnet-4.6")) normalizedModel = "claude-sonnet-4-6";
73
+ else if (model.includes("sonnet-4-5") || model.includes("sonnet-4.5")) normalizedModel = "claude-sonnet-4-6";
74
+ else if (model.includes("sonnet-4") || model.includes("sonnet")) normalizedModel = "claude-sonnet-4";
75
+ if (model.includes("haiku-4-5") || model.includes("haiku-4.5")) normalizedModel = "claude-haiku-4-5";
76
+ else if (model.includes("haiku-3")) normalizedModel = "claude-haiku-3";
77
+ else if (model.includes("haiku")) normalizedModel = "claude-haiku-4-5";
78
+ return {
79
+ provider: "anthropic",
80
+ model: normalizedModel
81
+ };
82
+ }
83
+ if (model.includes("gpt")) return {
84
+ provider: "openai",
85
+ model
86
+ };
87
+ if (model.includes("gemini")) return {
88
+ provider: "google",
89
+ model
90
+ };
91
+ if (model.includes("minimax")) return {
92
+ provider: "custom",
93
+ model
94
+ };
95
+ return {
96
+ provider: "anthropic",
97
+ model: "claude-sonnet-4"
98
+ };
99
+ }
100
+ /**
101
+ * Parse a Claude Code session JSONL file and extract usage with per-message cost calculation
102
+ *
103
+ * This function calculates costs accurately for sessions that span multiple models
104
+ * (e.g., when Claude Max auto-upgrades from Sonnet to Opus mid-conversation).
105
+ *
106
+ * Cost Calculation:
107
+ * - `cost_v2`: Accurate per-message pricing. Each message is costed using its own model's pricing.
108
+ * - `cost`: DEPRECATED. Uses first model's pricing for all messages (kept for backward compatibility).
109
+ *
110
+ * Model Display:
111
+ * - Single model: "claude-sonnet-4-6" (normalized name)
112
+ * - Multiple models: "claude-sonnet-4-6 → claude-opus-4-6" (progression of normalized names)
113
+ *
114
+ * Model Breakdown:
115
+ * - Keys are exact model IDs (e.g., "claude-sonnet-4-5-20250929")
116
+ * - Values contain per-model cost, token counts, and message count
117
+ *
118
+ * @param sessionFile - Path to the .jsonl session file
119
+ * @returns Session usage summary with accurate multi-model costing, or null if no usage found
120
+ */
121
+ function parseClaudeSessionSync(sessionFile) {
122
+ if (!existsSync(sessionFile)) return null;
123
+ const lines = readFileSync(sessionFile, "utf-8").split("\n").filter((line) => line.trim());
124
+ let sessionId = "";
125
+ let startTime = "";
126
+ let endTime = "";
127
+ let primaryModel = "";
128
+ let messageCount = 0;
129
+ const totalUsage = {
130
+ inputTokens: 0,
131
+ outputTokens: 0,
132
+ cacheReadTokens: 0,
133
+ cacheWriteTokens: 0
134
+ };
135
+ const modelBreakdown = {};
136
+ let totalCostV2 = 0;
137
+ const countedUsageIds = /* @__PURE__ */ new Set();
138
+ for (const line of lines) try {
139
+ const msg = JSON.parse(line);
140
+ if (msg.sessionId && !sessionId) sessionId = msg.sessionId;
141
+ if (msg.timestamp) {
142
+ if (!startTime || msg.timestamp < startTime) startTime = msg.timestamp;
143
+ if (!endTime || msg.timestamp > endTime) endTime = msg.timestamp;
144
+ }
145
+ const usage = msg.message?.usage || msg.usage;
146
+ const modelId = msg.message?.model || msg.model;
147
+ const usageId = msg.requestId ?? msg.message?.id;
148
+ if (usage && (usageId === void 0 || !countedUsageIds.has(usageId))) {
149
+ if (usageId !== void 0) countedUsageIds.add(usageId);
150
+ totalUsage.inputTokens += usage.input_tokens || 0;
151
+ totalUsage.outputTokens += usage.output_tokens || 0;
152
+ totalUsage.cacheReadTokens = (totalUsage.cacheReadTokens || 0) + (usage.cache_read_input_tokens || 0);
153
+ totalUsage.cacheWriteTokens = (totalUsage.cacheWriteTokens || 0) + (usage.cache_creation_input_tokens || 0);
154
+ messageCount++;
155
+ if (modelId) {
156
+ const { provider, model: normalizedModel } = normalizeModelName(modelId);
157
+ const pricing = getPricingSync(provider, normalizedModel);
158
+ if (pricing) {
159
+ const msgUsage = {
160
+ inputTokens: usage.input_tokens || 0,
161
+ outputTokens: usage.output_tokens || 0,
162
+ cacheReadTokens: usage.cache_read_input_tokens || 0,
163
+ cacheWriteTokens: usage.cache_creation_input_tokens || 0,
164
+ cacheTTL: usage.cache_creation?.ephemeral_1h_input_tokens && !usage.cache_creation?.ephemeral_5m_input_tokens ? "1h" : "5m"
165
+ };
166
+ const msgCost = calculateCostSync(msgUsage, pricing);
167
+ totalCostV2 += msgCost;
168
+ if (!modelBreakdown[modelId]) modelBreakdown[modelId] = {
169
+ cost: 0,
170
+ inputTokens: 0,
171
+ outputTokens: 0,
172
+ messageCount: 0
173
+ };
174
+ modelBreakdown[modelId].cost += msgCost;
175
+ modelBreakdown[modelId].inputTokens += msgUsage.inputTokens;
176
+ modelBreakdown[modelId].outputTokens += msgUsage.outputTokens;
177
+ modelBreakdown[modelId].cacheReadTokens = (modelBreakdown[modelId].cacheReadTokens || 0) + (msgUsage.cacheReadTokens || 0);
178
+ modelBreakdown[modelId].cacheWriteTokens = (modelBreakdown[modelId].cacheWriteTokens || 0) + (msgUsage.cacheWriteTokens || 0);
179
+ modelBreakdown[modelId].messageCount++;
180
+ }
181
+ }
182
+ }
183
+ if (modelId && !primaryModel) primaryModel = modelId;
184
+ } catch {}
185
+ if (totalUsage.inputTokens === 0 && totalUsage.outputTokens === 0) return null;
186
+ if (!sessionId) sessionId = basename(sessionFile, ".jsonl");
187
+ if (!primaryModel) primaryModel = "claude-sonnet-4";
188
+ const normalizedModels = Object.keys(modelBreakdown).map((id) => normalizeModelName(id).model);
189
+ const modelDisplay = normalizedModels.length > 0 ? normalizedModels.length > 1 ? normalizedModels.join(" → ") : normalizedModels[0] : normalizeModelName(primaryModel).model;
190
+ const { provider, model } = normalizeModelName(primaryModel);
191
+ const pricing = getPricingSync(provider, model);
192
+ const cost = pricing ? calculateCostSync(totalUsage, pricing) : 0;
193
+ return {
194
+ sessionId,
195
+ sessionFile,
196
+ startTime: startTime || (/* @__PURE__ */ new Date()).toISOString(),
197
+ endTime: endTime || (/* @__PURE__ */ new Date()).toISOString(),
198
+ model: modelDisplay,
199
+ usage: totalUsage,
200
+ cost,
201
+ cost_v2: totalCostV2 > 0 ? totalCostV2 : void 0,
202
+ messageCount,
203
+ modelBreakdown: Object.keys(modelBreakdown).length > 0 ? modelBreakdown : void 0
204
+ };
205
+ }
206
+ /**
207
+ * Get the active session model for a workspace
208
+ * Returns the full model ID (e.g., "claude-sonnet-4-5-20250929") from the most recent session file
209
+ *
210
+ * NOTE: Claude Max can auto-upgrade models mid-session (e.g., Sonnet → Opus).
211
+ * We read from the END of the file to get the CURRENT model, not the initial one.
212
+ */
213
+ function getActiveSessionModelSync(workspacePath) {
214
+ try {
215
+ const projectDirName = encodeClaudeProjectDir(workspacePath);
216
+ const sessions = getSessionFilesSync(join(getClaudeProjectsDir(), projectDirName));
217
+ if (sessions.length === 0) return null;
218
+ const mostRecentSession = sessions[0];
219
+ const lines = readFileSync(mostRecentSession, "utf-8").split("\n").filter((line) => line.trim());
220
+ const searchLines = lines.slice(-100);
221
+ for (let i = searchLines.length - 1; i >= 0; i--) try {
222
+ const msg = JSON.parse(searchLines[i]);
223
+ const model = msg.message?.model || msg.model;
224
+ if (model && model !== "<synthetic>") return model;
225
+ } catch {}
226
+ for (let i = 0; i < Math.min(lines.length, 10); i++) try {
227
+ const msg = JSON.parse(lines[i]);
228
+ const model = msg.message?.model || msg.model;
229
+ if (model && model !== "<synthetic>") return model;
230
+ } catch {}
231
+ return null;
232
+ } catch (error) {
233
+ console.warn("Failed to get active session model:", error);
234
+ return null;
235
+ }
236
+ }
237
+ var init_jsonl_parser = __esmMin((() => {
238
+ init_paths();
239
+ init_cost();
240
+ init_errors();
241
+ }));
242
+ //#endregion
243
+ export { init_jsonl_parser as a, getSessionFilesSync as i, getAllSessionFilesSync as n, normalizeModelName as o, getProjectDirsSync as r, parseClaudeSessionSync as s, getActiveSessionModelSync as t };
244
+
245
+ //# sourceMappingURL=jsonl-parser-BUW5_sSK.js.map
@@ -1,6 +1,6 @@
1
1
  import { n as __esmMin } from "./rolldown-runtime-DNCzzKnI.js";
2
- import { $n as extractPrefixSync, Qn as extractNumberSync, er as init_issue_id } from "./config-yaml-C_djSurJ.js";
3
- import { a as stepSkipped, i as stepOk, n as init_types, r as stepFailed, t as getLinearApiKey } from "./types-B5u3NxMl.js";
2
+ import { er as extractNumberSync, nr as init_issue_id, tr as extractPrefixSync } from "./config-yaml-cNOZcEww.js";
3
+ import { a as stepSkipped, i as stepOk, n as init_types, r as stepFailed, t as getLinearApiKey } from "./types-tlXf80x3.js";
4
4
  import { Effect } from "effect";
5
5
  import { exec } from "child_process";
6
6
  import { promisify } from "util";
@@ -106,4 +106,4 @@ __esmMin((() => {
106
106
  }))();
107
107
  export { cleanupMergedLabels };
108
108
 
109
- //# sourceMappingURL=label-cleanup-CwiCSZrb.js.map
109
+ //# sourceMappingURL=label-cleanup-htK6fBRU.js.map
@@ -1,5 +1,5 @@
1
1
  import { n as __esmMin } from "./rolldown-runtime-DNCzzKnI.js";
2
- import { Hr as init_paths, Vr as getOverdeckHome } from "./config-yaml-C_djSurJ.js";
2
+ import { Jr as init_paths, qr as getOverdeckHome } from "./config-yaml-cNOZcEww.js";
3
3
  import { existsSync, mkdirSync, writeFileSync } from "fs";
4
4
  import { join } from "path";
5
5
  //#region ../../lib/context-layers/layers.ts
@@ -90,4 +90,4 @@ This file is committed to the repo; \`workspace.md\` is not.
90
90
  //#endregion
91
91
  export { globalContextFile as a, legacyWorkspaceContextFile as c, projectContextFile as d, resolveProjectContextFile as f, workspaceContextFile as h, globalContextDir as i, piGlobalContextFile as l, workspaceContextDir as m, codexGlobalContextFile as n, init_layers as o, resolveWorkspaceContextFile as p, ensureProjectLayer as r, legacyProjectContextFile as s, PROJECT_STARTER as t, projectContextDir as u };
92
92
 
93
- //# sourceMappingURL=layers-OHHLphl0.js.map
93
+ //# sourceMappingURL=layers-jjL16At6.js.map
@@ -1,9 +1,9 @@
1
- import { o as init_archive_planning, t as archivePlanning } from "./archive-planning-CPitEZo4.js";
2
- import { a as stepSkipped, i as stepOk, n as init_types, r as stepFailed } from "./types-B5u3NxMl.js";
3
- import { t as closeIssue } from "./close-issue-CrBE7voz.js";
4
- import { t as teardownWorkspace } from "./teardown-workspace-CpcjDrZ4.js";
5
- import { n as init_compact_beads, t as compactBeads } from "./compact-beads-DUkCUFxA.js";
6
- import { a as deepWipe, i as closeOut, n as cancelIssueWorkflow, o as resetToTodo, r as close, t as approve } from "./workflows-Clz_AFwR.js";
1
+ import { o as init_archive_planning, t as archivePlanning } from "./archive-planning-CbghE9-o.js";
2
+ import { a as stepSkipped, i as stepOk, n as init_types, r as stepFailed } from "./types-tlXf80x3.js";
3
+ import { t as closeIssue } from "./close-issue-BOuLKr6e.js";
4
+ import { t as teardownWorkspace } from "./teardown-workspace-B4D-oCVg.js";
5
+ import { n as init_compact_beads, t as compactBeads } from "./compact-beads-CyJtoXJi.js";
6
+ import { a as deepWipe, i as closeOut, n as cancelIssueWorkflow, o as resetToTodo, r as close, t as approve } from "./workflows-CXRwhw_o.js";
7
7
  //#region ../../lib/lifecycle/index.ts
8
8
  init_types();
9
9
  init_archive_planning();
@@ -11,4 +11,4 @@ init_compact_beads();
11
11
  //#endregion
12
12
  export { approve, archivePlanning, cancelIssueWorkflow, close, closeIssue, closeOut, compactBeads, deepWipe, resetToTodo, stepFailed, stepOk, stepSkipped, teardownWorkspace };
13
13
 
14
- //# sourceMappingURL=lifecycle-B8IdvUbt.js.map
14
+ //# sourceMappingURL=lifecycle-Ck2UR27D.js.map
@@ -1,3 +1,3 @@
1
- import { a as init_lifecycle_io, s as transitionVBriefOnMain } from "./lifecycle-io-C73m5e6R.js";
1
+ import { a as init_lifecycle_io, s as transitionVBriefOnMain } from "./lifecycle-io-IehcRt2v.js";
2
2
  init_lifecycle_io();
3
3
  export { transitionVBriefOnMain };
@@ -1,12 +1,10 @@
1
1
  import { n as __esmMin } from "./rolldown-runtime-DNCzzKnI.js";
2
- import { Ot as init_record, Pt as readRecordContinueViewSync, bt as clearRecordFeedbackSync, gt as appendSessionEntrySync, lr as FsError, mt as appendFeedbackEntrySync, yr as init_errors } from "./config-yaml-C_djSurJ.js";
3
- import { B as slugify, D as updateSpecStatus, F as ensureVBriefDirsSync, I as generateVBriefFilename, L as init_lifecycle, M as invalidateVBriefIndex, P as VBRIEF_LIFECYCLE_DIRS, R as parseVBriefFilename, T as init_specs, d as readPlanSync, g as serializeVBriefDocument, j as init_vbrief_index, l as normalizeVBriefEnvelope, o as init_io, w as getProjectPanPaths, z as resolveVBriefDir } from "./io-CbAFXQge.js";
4
- import { t as init_pan_dir } from "./pan-dir-BlNrLzW7.js";
2
+ import { Ft as readRecordContinueViewSync, _t as appendSessionEntrySync, an as queueAutoCommit, dr as FsError, ht as appendFeedbackEntrySync, in as init_auto_commit, kt as init_record, rn as flushAutoCommits, xr as init_errors, xt as clearRecordFeedbackSync } from "./config-yaml-cNOZcEww.js";
3
+ import { A as init_vbrief_index, F as generateVBriefFilename, I as init_lifecycle, L as parseVBriefFilename, N as VBRIEF_LIFECYCLE_DIRS, P as ensureVBriefDirsSync, R as resolveVBriefDir, T as init_specs, d as readPlanSync, g as serializeVBriefDocument, j as invalidateVBriefIndex, l as normalizeVBriefEnvelope, o as init_io, w as getProjectPanPaths, z as slugify } from "./io-VEGSAqsd.js";
4
+ import { t as init_pan_dir } from "./pan-dir-CQIfKG8c.js";
5
5
  import { Effect } from "effect";
6
6
  import { existsSync, mkdirSync, readFileSync, readdirSync, renameSync, unlinkSync, writeFileSync } from "fs";
7
7
  import { basename, join } from "path";
8
- import { exec, spawn } from "child_process";
9
- import { promisify } from "util";
10
8
  //#region ../../lib/vbrief/lifecycle-io.ts
11
9
  /**
12
10
  * vBRIEF Lifecycle IO
@@ -33,6 +31,24 @@ function readSpecFileSync(path) {
33
31
  if (!parsed || typeof parsed !== "object") return null;
34
32
  return parsed;
35
33
  }
34
+ function updateSpecStatusSync(projectRoot, issueId, newStatus) {
35
+ const existing = findSpecByIssueSync(projectRoot, issueId);
36
+ if (!existing) return null;
37
+ if (existing.status === newStatus) return existing;
38
+ const nextDocument = {
39
+ ...existing.document,
40
+ status: newStatus
41
+ };
42
+ const tmp = `${existing.path}.tmp`;
43
+ writeFileSync(tmp, serializeVBriefDocument(nextDocument), "utf-8");
44
+ renameSync(tmp, existing.path);
45
+ invalidateVBriefIndex(projectRoot);
46
+ return {
47
+ ...existing,
48
+ status: newStatus,
49
+ document: nextDocument
50
+ };
51
+ }
36
52
  function writeSpecForIssueSync(projectRoot, doc, status, filename) {
37
53
  const { specsDir } = getProjectPanPaths(projectRoot);
38
54
  if (!existsSync(specsDir)) mkdirSync(specsDir, { recursive: true });
@@ -160,10 +176,6 @@ function updatePlanStatus(filePath, newStatus) {
160
176
  writeFileSync(tmp, serializeVBriefDocument(doc), "utf-8");
161
177
  renameSync(tmp, filePath);
162
178
  }
163
- async function runGitAdd(cwd, paths) {
164
- if (paths.length === 0) return;
165
- await execAsync(`git add -A -- ${paths.map((p) => `"${p.replace(/"/g, "\\\"")}"`).join(" ")}`, { cwd });
166
- }
167
179
  async function transitionVBriefOnMainPromise(projectRoot, issueId, targetDir, newStatus, commitMessage) {
168
180
  const found = findVBriefByIssueSync(projectRoot, issueId);
169
181
  if (!found) throw new Error(`No vBRIEF found for issue ${issueId} under ${projectRoot}`);
@@ -174,48 +186,25 @@ async function transitionVBriefOnMainPromise(projectRoot, issueId, targetDir, ne
174
186
  const needsStatus = ensuredSpec.document.plan.status !== newStatus;
175
187
  let toPath = ensuredSpec.path;
176
188
  if (needsMove) {
177
- const updatedSpec = await Effect.runPromise(updateSpecStatus(projectRoot, issueId, targetDir));
189
+ const updatedSpec = updateSpecStatusSync(projectRoot, issueId, targetDir);
178
190
  if (!updatedSpec) throw new Error(`Failed to update pan spec lifecycle status for ${issueId}`);
179
191
  toPath = updatedSpec.path;
180
192
  }
181
193
  if (needsStatus) updatePlanStatus(toPath, newStatus);
182
194
  const changed = ensured.createdPanSpec || needsMove || needsStatus;
183
195
  let committed = false;
184
- if (changed) try {
185
- const { stdout: branchStdout } = await execAsync("git rev-parse --abbrev-ref HEAD", {
186
- cwd: projectRoot,
187
- encoding: "utf-8"
196
+ if (changed) {
197
+ const stageList = [toPath];
198
+ if (ensured.removedLegacyPath) stageList.push(ensured.removedLegacyPath);
199
+ queueAutoCommit({
200
+ projectRoot,
201
+ paths: stageList,
202
+ subject: commitMessage
188
203
  });
189
- if (branchStdout.trim() === "main") {
190
- const stageList = [toPath];
191
- if (ensured.removedLegacyPath) stageList.push(ensured.removedLegacyPath);
192
- await runGitAdd(projectRoot, stageList);
193
- const quotedAll = stageList.map((p) => `"${p.replace(/"/g, "\\\"")}"`).join(" ");
194
- try {
195
- await execAsync(`git diff --cached --quiet -- ${quotedAll}`, {
196
- cwd: projectRoot,
197
- encoding: "utf-8"
198
- });
199
- } catch {
200
- await execAsync(`git commit -m ${JSON.stringify(commitMessage)} -- ${quotedAll}`, {
201
- cwd: projectRoot,
202
- encoding: "utf-8"
203
- });
204
- committed = true;
205
- try {
206
- const { stdout: remotes } = await execAsync("git remote", {
207
- cwd: projectRoot,
208
- encoding: "utf-8"
209
- });
210
- if (remotes.trim()) spawn("git", ["push"], {
211
- cwd: projectRoot,
212
- detached: true,
213
- stdio: "ignore"
214
- }).unref();
215
- } catch {}
216
- }
217
- }
218
- } catch {}
204
+ const flushed = await Effect.runPromise(flushAutoCommits(projectRoot));
205
+ committed = flushed.committed;
206
+ if (flushed.pushed === false) throw new Error(flushed.reason ?? `Spec transition for ${issueId} was committed but not pushed`);
207
+ }
219
208
  if (changed) invalidateVBriefIndex(projectRoot);
220
209
  return {
221
210
  fromDir: found.lifecycleDir,
@@ -253,7 +242,7 @@ function clearFeedbackForIssue(projectRoot, issueId) {
253
242
  path: projectRoot
254
243
  }, issueId);
255
244
  }
256
- var execAsync, transitionVBriefOnMain;
245
+ var transitionVBriefOnMain;
257
246
  var init_lifecycle_io = __esmMin((() => {
258
247
  init_pan_dir();
259
248
  init_lifecycle();
@@ -262,7 +251,7 @@ var init_lifecycle_io = __esmMin((() => {
262
251
  init_specs();
263
252
  init_record();
264
253
  init_errors();
265
- execAsync = promisify(exec);
254
+ init_auto_commit();
266
255
  transitionVBriefOnMain = (projectRoot, issueId, targetDir, newStatus, commitMessage) => Effect.tryPromise({
267
256
  try: () => transitionVBriefOnMainPromise(projectRoot, issueId, targetDir, newStatus, commitMessage),
268
257
  catch: (cause) => new FsError({
@@ -275,4 +264,4 @@ var init_lifecycle_io = __esmMin((() => {
275
264
  //#endregion
276
265
  export { init_lifecycle_io as a, updatePlanStatus as c, findVBriefByIssueSync as i, appendFeedbackEntryForIssue as n, readContinueStateForIssue as o, clearFeedbackForIssue as r, transitionVBriefOnMain as s, appendContinueSessionEntryForIssue as t };
277
266
 
278
- //# sourceMappingURL=lifecycle-io-C73m5e6R.js.map
267
+ //# sourceMappingURL=lifecycle-io-IehcRt2v.js.map
@@ -1,3 +1,3 @@
1
- import { i as init_linear_client, n as LinearClientLive, r as LinearClientOptionalLive, t as LinearClient } from "./linear-client-CgQlM4aT.js";
1
+ import { i as init_linear_client, n as LinearClientLive, r as LinearClientOptionalLive, t as LinearClient } from "./linear-client-D9cSQfvD.js";
2
2
  init_linear_client();
3
3
  export { LinearClient, LinearClientLive, LinearClientOptionalLive };
@@ -1,6 +1,6 @@
1
1
  import { n as __esmMin } from "./rolldown-runtime-DNCzzKnI.js";
2
- import { a as init_tracker_config, n as getLinearApiKey } from "./tracker-config-C1Y_2CIo.js";
3
- import { c as TrackerNotConfigured, d as init_typed_errors, i as IssueNotFound, o as RateLimited, s as TrackerApiError } from "./typed-errors-BEJhbjJg.js";
2
+ import { a as init_tracker_config, n as getLinearApiKey } from "./tracker-config-dQxC15vH.js";
3
+ import { c as TrackerNotConfigured, d as init_typed_errors, i as IssueNotFound, o as RateLimited, s as TrackerApiError } from "./typed-errors-sLpGfegz.js";
4
4
  import { Context, Duration, Effect, Layer, Schedule } from "effect";
5
5
  import { LinearClient } from "@linear/sdk";
6
6
  //#region services/linear-client.ts
@@ -192,4 +192,4 @@ var init_linear_client = __esmMin((() => {
192
192
  //#endregion
193
193
  export { init_linear_client as i, LinearClientLive as n, LinearClientOptionalLive as r, LinearClient$1 as t };
194
194
 
195
- //# sourceMappingURL=linear-client-CgQlM4aT.js.map
195
+ //# sourceMappingURL=linear-client-D9cSQfvD.js.map