@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,2 +1,2 @@
1
- import { t as handleIssueStatusChangedClosed } from "./closed-issue-reaper-DX9mYUji.js";
1
+ import { t as handleIssueStatusChangedClosed } from "./closed-issue-reaper-DCAYzNXW.js";
2
2
  export { handleIssueStatusChangedClosed };
@@ -1,12 +1,12 @@
1
- import { Ft as resolveProjectForIssue, Hr as init_paths, Ln as listProjectsSync, Nn as init_projects, Ot as init_record, br as AGENTS_DIR, er as init_issue_id } from "./config-yaml-C_djSurJ.js";
1
+ import { Fn as init_projects, It as resolveProjectForIssue, Jr as init_paths, Sr as AGENTS_DIR, kt as init_record, nr as init_issue_id, zn as listProjectsSync } from "./config-yaml-cNOZcEww.js";
2
2
  import { a as init_activity_logger, n as emitActivityEntrySync } from "./activity-logger-pcbf-e30.js";
3
- import { O as listSessionNames, w as killSession, x as init_tmux } from "./tmux-BVc-NeKM.js";
4
- import { c as init_review_status, u as loadReviewStatuses } from "./review-status-BcfwcAcO.js";
5
- import { K as stopAgent, Z as listRunningAgents, t as init_agents } from "./agents-DqQa4Dq_.js";
6
- import { i as teardownWorkspaceDockerByNamePromise, n as init_docker } from "./docker-D2TbXDO6.js";
7
- import { l as init_prd_locations, o as init_archive_planning } from "./archive-planning-CPitEZo4.js";
8
- import { n as init_issue_closed, r as isIssueClosed } from "./issue-closed-BYC2TCk-.js";
9
- import "./close-issue-CrBE7voz.js";
3
+ import { O as listSessionNames, w as killSession, x as init_tmux } from "./tmux-C3g9VFcg.js";
4
+ import { c as init_review_status, u as loadReviewStatuses } from "./review-status-Dc1l4dVz.js";
5
+ import { K as stopAgent, Z as listRunningAgents, t as init_agents } from "./agents-B9GwfCyp.js";
6
+ import { i as teardownWorkspaceDockerByNamePromise, n as init_docker } from "./docker-apZ9pBYw.js";
7
+ import { l as init_prd_locations, o as init_archive_planning } from "./archive-planning-CbghE9-o.js";
8
+ import { n as init_issue_closed, r as isIssueClosed } from "./issue-closed-BxcePXL-.js";
9
+ import "./close-issue-BOuLKr6e.js";
10
10
  import { join } from "node:path";
11
11
  import { Data, Effect } from "effect";
12
12
  import "fs";
@@ -29,7 +29,50 @@ init_review_status();
29
29
  init_archive_planning();
30
30
  init_docker();
31
31
  init_issue_id();
32
- const execAsync$1 = promisify$1(exec$1);
32
+ const execAsync$2 = promisify$1(exec$1);
33
+ const ARTIFACT_PATH_PREFIXES = [
34
+ ".pan/",
35
+ ".planning/",
36
+ "docs/prds/",
37
+ ".overdeck/"
38
+ ];
39
+ const ARTIFACT_EXCLUSIONS = ARTIFACT_PATH_PREFIXES.map((prefix) => `':!${prefix.slice(0, -1)}'`).join(" ");
40
+ /**
41
+ * Squash-merge detection via the forge. A squash-merged branch is never an
42
+ * ancestor of main and its three-dot diff never empties (the pre-squash
43
+ * commits stay visible against the merge-base), so pure-git checks report it
44
+ * unmerged forever. The merged PR is the authoritative record: if a merged PR
45
+ * has this branch as head, its merge commit landed on main, and the branch has
46
+ * no post-merge code commits, the branch is merged. Returns false on any
47
+ * failure (no gh, GitLab remote, no PR) so callers fall through conservatively.
48
+ */
49
+ async function isSquashMergedViaPr(branchName, tipRef, projectPath) {
50
+ try {
51
+ const { stdout } = await execAsync$2(`gh pr list --head "${branchName}" --state merged --json headRefOid,mergeCommit --limit 1`, {
52
+ cwd: projectPath,
53
+ encoding: "utf-8",
54
+ timeout: 15e3
55
+ });
56
+ const pr = JSON.parse(stdout)[0];
57
+ if (!pr?.headRefOid || !pr.mergeCommit?.oid) return false;
58
+ await execAsync$2(`git merge-base --is-ancestor ${pr.mergeCommit.oid} main`, {
59
+ cwd: projectPath,
60
+ encoding: "utf-8"
61
+ });
62
+ const { stdout: tipSha } = await execAsync$2(`git rev-parse "${tipRef}"`, {
63
+ cwd: projectPath,
64
+ encoding: "utf-8"
65
+ });
66
+ if (tipSha.trim() === pr.headRefOid) return true;
67
+ const { stdout: filesOut } = await execAsync$2(`git log ${pr.headRefOid}..${tipRef} --name-only --pretty=format:`, {
68
+ cwd: projectPath,
69
+ encoding: "utf-8"
70
+ });
71
+ return filesOut.split("\n").map((line) => line.trim()).filter(Boolean).every((file) => ARTIFACT_PATH_PREFIXES.some((prefix) => file.startsWith(prefix)));
72
+ } catch {
73
+ return false;
74
+ }
75
+ }
33
76
  /**
34
77
  * Check if a feature branch has been merged into main.
35
78
  *
@@ -42,7 +85,7 @@ async function isBranchMerged(branchName, projectPath) {
42
85
  try {
43
86
  const issueId = branchName.replace("feature/", "").toUpperCase();
44
87
  if (loadReviewStatuses()[issueId]?.mergeStatus === "merged") {
45
- const { stdout: aheadOfMain } = await execAsync$1(`git log main..${branchName} --oneline 2>/dev/null || true`, {
88
+ const { stdout: aheadOfMain } = await execAsync$2(`git log main..${branchName} --oneline 2>/dev/null || true`, {
46
89
  cwd: projectPath,
47
90
  encoding: "utf-8"
48
91
  });
@@ -52,12 +95,12 @@ async function isBranchMerged(branchName, projectPath) {
52
95
  };
53
96
  }
54
97
  } catch {}
55
- const { stdout: branchExists } = await execAsync$1(`git branch --list "${branchName}" 2>/dev/null || true`, {
98
+ const { stdout: branchExists } = await execAsync$2(`git branch --list "${branchName}" 2>/dev/null || true`, {
56
99
  cwd: projectPath,
57
100
  encoding: "utf-8"
58
101
  });
59
102
  if (branchExists.trim()) try {
60
- await execAsync$1(`git merge-base --is-ancestor ${branchName} main`, {
103
+ await execAsync$2(`git merge-base --is-ancestor ${branchName} main`, {
61
104
  cwd: projectPath,
62
105
  encoding: "utf-8"
63
106
  });
@@ -67,7 +110,7 @@ async function isBranchMerged(branchName, projectPath) {
67
110
  };
68
111
  } catch {
69
112
  try {
70
- const { stdout: codeDiff } = await execAsync$1(`git diff main...${branchName} -- ':!.planning' ':!docs/prds' ':!.overdeck/prompts' 2>/dev/null || true`, {
113
+ const { stdout: codeDiff } = await execAsync$2(`git diff main...${branchName} -- ${ARTIFACT_EXCLUSIONS} 2>/dev/null || true`, {
71
114
  cwd: projectPath,
72
115
  encoding: "utf-8"
73
116
  });
@@ -76,7 +119,11 @@ async function isBranchMerged(branchName, projectPath) {
76
119
  message: "Code changes squash-merged to main (only planning artifacts remain on branch)"
77
120
  };
78
121
  } catch {}
79
- const { stdout: unmerged } = await execAsync$1(`git log main..${branchName} --oneline 2>/dev/null || true`, {
122
+ if (await isSquashMergedViaPr(branchName, branchName, projectPath)) return {
123
+ status: "merged",
124
+ message: `Merged PR found for ${branchName} (squash merge)`
125
+ };
126
+ const { stdout: unmerged } = await execAsync$2(`git log main..${branchName} --oneline 2>/dev/null || true`, {
80
127
  cwd: projectPath,
81
128
  encoding: "utf-8"
82
129
  });
@@ -85,14 +132,14 @@ async function isBranchMerged(branchName, projectPath) {
85
132
  message: `${unmerged.trim() ? unmerged.trim().split("\n").length : 0} unmerged commit(s) on ${branchName}. Merge before closing out.`
86
133
  };
87
134
  }
88
- const { stdout: remoteBranch } = await execAsync$1(`git ls-remote --heads origin "${branchName}" 2>/dev/null || true`, {
135
+ const { stdout: remoteBranch } = await execAsync$2(`git ls-remote --heads origin "${branchName}" 2>/dev/null || true`, {
89
136
  cwd: projectPath,
90
137
  encoding: "utf-8"
91
138
  });
92
139
  if (remoteBranch.trim()) {
93
- await execAsync$1(`git fetch origin ${branchName}`, { cwd: projectPath }).catch(() => {});
140
+ await execAsync$2(`git fetch origin ${branchName}`, { cwd: projectPath }).catch(() => {});
94
141
  try {
95
- await execAsync$1(`git merge-base --is-ancestor origin/${branchName} main`, {
142
+ await execAsync$2(`git merge-base --is-ancestor origin/${branchName} main`, {
96
143
  cwd: projectPath,
97
144
  encoding: "utf-8"
98
145
  });
@@ -102,7 +149,7 @@ async function isBranchMerged(branchName, projectPath) {
102
149
  };
103
150
  } catch {
104
151
  try {
105
- const { stdout: codeDiff } = await execAsync$1(`git diff main...origin/${branchName} -- ':!.planning' ':!docs/prds' ':!.overdeck/prompts' 2>/dev/null || true`, {
152
+ const { stdout: codeDiff } = await execAsync$2(`git diff main...origin/${branchName} -- ${ARTIFACT_EXCLUSIONS} 2>/dev/null || true`, {
106
153
  cwd: projectPath,
107
154
  encoding: "utf-8"
108
155
  });
@@ -111,7 +158,11 @@ async function isBranchMerged(branchName, projectPath) {
111
158
  message: "Remote code changes squash-merged to main (only planning artifacts remain on branch)"
112
159
  };
113
160
  } catch {}
114
- const { stdout: remoteUnmerged } = await execAsync$1(`git log main..origin/${branchName} --oneline 2>/dev/null || true`, {
161
+ if (await isSquashMergedViaPr(branchName, `origin/${branchName}`, projectPath)) return {
162
+ status: "merged",
163
+ message: `Merged PR found for ${branchName} (squash merge)`
164
+ };
165
+ const { stdout: remoteUnmerged } = await execAsync$2(`git log main..origin/${branchName} --oneline 2>/dev/null || true`, {
115
166
  cwd: projectPath,
116
167
  encoding: "utf-8"
117
168
  });
@@ -132,7 +183,7 @@ Data.TaggedError("CloseOutError");
132
183
  init_paths();
133
184
  init_tmux();
134
185
  init_docker();
135
- const execAsync = promisify(exec);
186
+ const execAsync$1 = promisify(exec);
136
187
  function escapeRegex(value) {
137
188
  return value.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
138
189
  }
@@ -156,19 +207,19 @@ async function reapIssueResidue(projectPath, issueId) {
156
207
  } catch {}
157
208
  }
158
209
  } catch {}
159
- if ((await isBranchMerged(branchName, projectPath)).status === "unmerged") {
160
- actions.push(`skipped reap for ${issueId} — branch unmerged`);
161
- return actions;
162
- }
163
210
  try {
164
- if ((await teardownWorkspaceDockerByNamePromise(issueLower)).networkRemoved) actions.push(`removed Docker stack overdeck-feature-${issueLower}`);
165
- else actions.push(`Docker network overdeck-feature-${issueLower}_devnet still present`);
211
+ if ((await teardownWorkspaceDockerByNamePromise(issueLower)).networkRemoved) actions.push(`removed Docker stack for feature-${issueLower}`);
212
+ else actions.push(`Docker network for feature-${issueLower} still present`);
166
213
  } catch (err) {
167
214
  actions.push(`Docker teardown failed for ${issueId}: ${err.message}`);
168
215
  }
216
+ if ((await isBranchMerged(branchName, projectPath)).status === "unmerged") {
217
+ actions.push(`skipped disk reap for ${issueId} — branch unmerged`);
218
+ return actions;
219
+ }
169
220
  const workspacePath = join(projectPath, "workspaces", `feature-${issueLower}`);
170
221
  if (existsSync$1(workspacePath)) try {
171
- await execAsync(`git worktree remove "${workspacePath}" --force`, { cwd: projectPath });
222
+ await execAsync$1(`git worktree remove "${workspacePath}" --force`, { cwd: projectPath });
172
223
  actions.push(`removed workspace ${workspacePath}`);
173
224
  } catch {
174
225
  try {
@@ -180,11 +231,11 @@ async function reapIssueResidue(projectPath, issueId) {
180
231
  } catch {}
181
232
  }
182
233
  try {
183
- await execAsync(`git branch -D "${branchName}"`, { cwd: projectPath });
234
+ await execAsync$1(`git branch -D "${branchName}"`, { cwd: projectPath });
184
235
  actions.push(`deleted local branch ${branchName}`);
185
236
  } catch {}
186
237
  try {
187
- await execAsync(`git push origin --delete "${branchName}"`, { cwd: projectPath });
238
+ await execAsync$1(`git push origin --delete "${branchName}"`, { cwd: projectPath });
188
239
  actions.push(`deleted remote branch ${branchName}`);
189
240
  } catch {}
190
241
  for (const agentDirName of [`agent-${issueLower}`, `planning-${issueLower}`]) {
@@ -216,6 +267,23 @@ function issueIdFromAgentDir(entryName) {
216
267
  const match = entryName.match(/^agent-([a-z]+-\d+)$/i);
217
268
  return match ? match[1].toUpperCase() : null;
218
269
  }
270
+ const execAsync = promisify(exec);
271
+ async function listFeatureDevnetIssueIds() {
272
+ try {
273
+ const { stdout } = await execAsync(`docker network ls --format '{{.Name}}'`, {
274
+ encoding: "utf-8",
275
+ timeout: 3e4
276
+ });
277
+ const issueIds = /* @__PURE__ */ new Set();
278
+ for (const name of stdout.trim().split("\n")) {
279
+ const match = name.match(/-feature-([a-z]+-\d+)_devnet$/i);
280
+ if (match) issueIds.add(match[1].toUpperCase());
281
+ }
282
+ return [...issueIds];
283
+ } catch {
284
+ return [];
285
+ }
286
+ }
219
287
  async function isClosedIssue(issueId, closedChecks) {
220
288
  let promise = closedChecks.get(issueId);
221
289
  if (!promise) {
@@ -337,9 +405,13 @@ async function reconcileClosedIssueAgents() {
337
405
  if (!await isClosedIssue(issueId, closedChecks)) continue;
338
406
  await reapResolvedIssueResidue(issueId, actions, reapedIssueKeys);
339
407
  }
408
+ for (const issueId of await listFeatureDevnetIssueIds()) {
409
+ if (!await isClosedIssue(issueId, closedChecks)) continue;
410
+ await reapResolvedIssueResidue(issueId, actions, reapedIssueKeys);
411
+ }
340
412
  return actions;
341
413
  }
342
414
  //#endregion
343
415
  export { reconcileClosedIssueAgents as n, handleIssueStatusChangedClosed as t };
344
416
 
345
- //# sourceMappingURL=closed-issue-reaper-DX9mYUji.js.map
417
+ //# sourceMappingURL=closed-issue-reaper-DCAYzNXW.js.map
@@ -1,3 +1,3 @@
1
- import { a as extractThreadIdFromRollout, c as initCodexHome, d as waitForCodexRollout, f as writeThreadId, l as init_codex, o as findLatestRollout, s as findRolloutPath } from "./codex-CO0HrK3j.js";
1
+ import { a as extractThreadIdFromRollout, c as initCodexHome, d as waitForCodexRollout, f as writeThreadId, l as init_codex, o as findLatestRollout, s as findRolloutPath } from "./codex-BbqIRZjd.js";
2
2
  init_codex();
3
3
  export { extractThreadIdFromRollout, findLatestRollout, findRolloutPath, initCodexHome, waitForCodexRollout, writeThreadId };
@@ -1,8 +1,9 @@
1
1
  import { n as __esmMin } from "./rolldown-runtime-DNCzzKnI.js";
2
- import { yr as init_errors } from "./config-yaml-C_djSurJ.js";
3
- import { A as listSessionsSync, L as sessionExists, o as createSession, w as killSession, x as init_tmux } from "./tmux-BVc-NeKM.js";
4
- import { r as CODEX_BEHAVIOR } from "./src-DGAEtABV.js";
5
- import { i as parseCodexSessionSync, n as init_codex_parser, t as init_behavior } from "./behavior-D3d2mVyD.js";
2
+ import { xr as init_errors } from "./config-yaml-cNOZcEww.js";
3
+ import { A as listSessionsSync, L as sessionExists, o as createSession, w as killSession, x as init_tmux } from "./tmux-C3g9VFcg.js";
4
+ import { r as CODEX_BEHAVIOR } from "./src-B4TTzNSr.js";
5
+ import { r as parseCodexSessionSync, t as init_codex_parser } from "./codex-parser-mFYZh8vR.js";
6
+ import { t as init_behavior } from "./behavior-BTpYbAv4.js";
6
7
  import { basename, join } from "node:path";
7
8
  import { Effect } from "effect";
8
9
  import { homedir } from "node:os";
@@ -498,4 +499,4 @@ var init_codex = __esmMin((() => {
498
499
  //#endregion
499
500
  export { extractThreadIdFromRollout as a, initCodexHome as c, waitForCodexRollout as d, writeThreadId as f, createCodexRuntimeSync as i, init_codex as l, CodexSpawnTimeout as n, findLatestRollout as o, codexHome as r, findRolloutPath as s, CodexRuntimeSync as t, toCodexSandboxValue as u };
500
501
 
501
- //# sourceMappingURL=codex-CO0HrK3j.js.map
502
+ //# sourceMappingURL=codex-BbqIRZjd.js.map
@@ -1,6 +1,5 @@
1
1
  import { n as __esmMin } from "./rolldown-runtime-DNCzzKnI.js";
2
- import { t as init_src } from "./src-DGAEtABV.js";
3
- import { o as getPricingSync, s as init_cost } from "./cost-CaiG63FG.js";
2
+ import { o as getPricingSync, s as init_cost } from "./cost-D9kPIY_5.js";
4
3
  import { existsSync, readFileSync } from "node:fs";
5
4
  //#region ../../lib/cost-parsers/codex-parser.ts
6
5
  /**
@@ -243,11 +242,6 @@ var init_codex_parser = __esmMin((() => {
243
242
  init_cost();
244
243
  }));
245
244
  //#endregion
246
- //#region ../../lib/runtimes/behavior.ts
247
- var init_behavior = __esmMin((() => {
248
- init_src();
249
- }));
250
- //#endregion
251
- export { parseCodexSessionSync as i, init_codex_parser as n, parseCodexSessionCostEventsSync as r, init_behavior as t };
245
+ export { parseCodexSessionCostEventsSync as n, parseCodexSessionSync as r, init_codex_parser as t };
252
246
 
253
- //# sourceMappingURL=behavior-D3d2mVyD.js.map
247
+ //# sourceMappingURL=codex-parser-mFYZh8vR.js.map
@@ -1,6 +1,6 @@
1
1
  import { n as __esmMin } from "./rolldown-runtime-DNCzzKnI.js";
2
- import { fn as init_state_read_home, pn as resolveStateReadHomeSync } from "./config-yaml-C_djSurJ.js";
3
- import { a as stepSkipped, i as stepOk, n as init_types, r as stepFailed } from "./types-B5u3NxMl.js";
2
+ import { hn as resolveStateReadHomeSync, mn as init_state_read_home } from "./config-yaml-cNOZcEww.js";
3
+ import { a as stepSkipped, i as stepOk, n as init_types, r as stepFailed } from "./types-tlXf80x3.js";
4
4
  import { Effect } from "effect";
5
5
  import { existsSync } from "fs";
6
6
  import { join } from "path";
@@ -43,12 +43,19 @@ async function compactBeadsImpl(ctx, opts) {
43
43
  });
44
44
  const count = parseInt(countOutput.trim(), 10) || 0;
45
45
  if (count === 0) return stepSkipped(step, ["No closed beads older than " + days + " days"]);
46
- await execAsync(`bd admin compact --days ${days}`, {
47
- cwd: operationRoot,
48
- encoding: "utf-8"
49
- });
46
+ const { runMutationBatch } = await import("./writer-BUweuRPx.js");
47
+ const compacted = await runMutationBatch({
48
+ project: { workspacePath: operationRoot },
49
+ reason: `compact beads older than ${days} days`
50
+ }, (bd) => bd.mutate([
51
+ "admin",
52
+ "compact",
53
+ "--days",
54
+ String(days)
55
+ ]));
56
+ if (!compacted.ok) return stepFailed(step, compacted.message);
50
57
  if (stateHome.migrated) {
51
- const { flushAutoCommits, queueBeadsAutoCommit } = await import("./auto-commit-wZ9X7Isd.js");
58
+ const { flushAutoCommits, queueBeadsAutoCommit } = await import("./auto-commit-IW-eik_b.js");
52
59
  queueBeadsAutoCommit(ctx.projectPath);
53
60
  const result = await Effect.runPromise(flushAutoCommits(ctx.projectPath));
54
61
  return result.committed ? stepOk(step, [`Compacted ${count} closed beads and committed through overdeck-state`]) : stepFailed(step, `Compacted beads but state write door refused commit: ${result.reason ?? "unknown"}`);
@@ -84,4 +91,4 @@ var init_compact_beads = __esmMin((() => {
84
91
  //#endregion
85
92
  export { init_compact_beads as n, compactBeads as t };
86
93
 
87
- //# sourceMappingURL=compact-beads-DUkCUFxA.js.map
94
+ //# sourceMappingURL=compact-beads-CyJtoXJi.js.map
@@ -1,3 +1,3 @@
1
- import { n as init_compact_beads, t as compactBeads } from "./compact-beads-DUkCUFxA.js";
1
+ import { n as init_compact_beads, t as compactBeads } from "./compact-beads-CyJtoXJi.js";
2
2
  init_compact_beads();
3
3
  export { compactBeads };
@@ -1,5 +1,5 @@
1
1
  import { n as __esmMin } from "./rolldown-runtime-DNCzzKnI.js";
2
- import { Er as CONFIG_FILE, Hr as init_paths, f as loadConfigSync$1, lr as FsError, t as init_config_yaml, yr as init_errors } from "./config-yaml-C_djSurJ.js";
2
+ import { Jr as init_paths, Or as CONFIG_FILE, dr as FsError, f as loadConfigSync$1, t as init_config_yaml, xr as init_errors } from "./config-yaml-cNOZcEww.js";
3
3
  import { t as require_toml } from "./toml-CeLDATih.js";
4
4
  import { Effect } from "effect";
5
5
  import { existsSync, promises, readFileSync, writeFileSync } from "fs";
@@ -253,4 +253,4 @@ var init_config = __esmMin((() => {
253
253
  //#endregion
254
254
  export { saveConfigSync as _, getConversationsConfigSync as a, getDefaultConfig as c, getDevrootPathSync as d, init_config as f, saveConfig as g, normalizeRemoteConfig as h, getConversationsConfig as i, getDefaultConfigSync as l, loadConfigSync as m, findDevrootForProject as n, getDashboardApiUrl as o, loadConfig as p, findDevrootForProjectSync as r, getDashboardApiUrlSync as s, checkDevrootDeprecation as t, getDevrootPath as u };
255
255
 
256
- //# sourceMappingURL=config-DsCxzjXK.js.map
256
+ //# sourceMappingURL=config-DVLdmnMJ.js.map
@@ -1,3 +1,3 @@
1
- import { _ as saveConfigSync, a as getConversationsConfigSync, c as getDefaultConfig, d as getDevrootPathSync, f as init_config, g as saveConfig, h as normalizeRemoteConfig, i as getConversationsConfig, l as getDefaultConfigSync, m as loadConfigSync, n as findDevrootForProject, o as getDashboardApiUrl, p as loadConfig, r as findDevrootForProjectSync, s as getDashboardApiUrlSync, t as checkDevrootDeprecation, u as getDevrootPath } from "./config-DsCxzjXK.js";
1
+ import { _ as saveConfigSync, a as getConversationsConfigSync, c as getDefaultConfig, d as getDevrootPathSync, f as init_config, g as saveConfig, h as normalizeRemoteConfig, i as getConversationsConfig, l as getDefaultConfigSync, m as loadConfigSync, n as findDevrootForProject, o as getDashboardApiUrl, p as loadConfig, r as findDevrootForProjectSync, s as getDashboardApiUrlSync, t as checkDevrootDeprecation, u as getDevrootPath } from "./config-DVLdmnMJ.js";
2
2
  init_config();
3
3
  export { checkDevrootDeprecation, findDevrootForProject, findDevrootForProjectSync, getConversationsConfig, getConversationsConfigSync, getDashboardApiUrl, getDashboardApiUrlSync, getDefaultConfig, getDefaultConfigSync, getDevrootPath, getDevrootPathSync, loadConfig, loadConfigSync, normalizeRemoteConfig, saveConfig, saveConfigSync };
@@ -61,6 +61,28 @@ function resolveOhmypiExtensionPath() {
61
61
  for (const candidate of ohmypiExtensionCandidates()) if (existsSync(candidate)) return candidate;
62
62
  return null;
63
63
  }
64
+ function getDocsPaths(overrides = {}) {
65
+ const docsDir = overrides.docsDir ?? join$1(overrides.overdeckHome ?? getOverdeckHome(), "docs");
66
+ return {
67
+ docsDir,
68
+ indexPath: overrides.indexPath ?? join$1(docsDir, "index.sqlite"),
69
+ budgetStatePath: overrides.budgetStatePath ?? join$1(docsDir, "budget-state.json"),
70
+ disableStatePath: overrides.disableStatePath ?? join$1(docsDir, "disable-state.json"),
71
+ telemetryPath: overrides.telemetryPath ?? join$1(docsDir, "telemetry.jsonl")
72
+ };
73
+ }
74
+ function getDocsIndexPath(overrides = {}) {
75
+ return getDocsPaths(overrides).indexPath;
76
+ }
77
+ function getDocsBudgetStatePath(overrides = {}) {
78
+ return getDocsPaths(overrides).budgetStatePath;
79
+ }
80
+ function getDocsDisableStatePath(overrides = {}) {
81
+ return getDocsPaths(overrides).disableStatePath;
82
+ }
83
+ function getDocsTelemetryPath(overrides = {}) {
84
+ return getDocsPaths(overrides).telemetryPath;
85
+ }
64
86
  /**
65
87
  * Detect if running from a overdeck checkout (vs an installed package).
66
88
  *
@@ -7634,11 +7656,12 @@ var init_state_plane = __esmMin((() => {
7634
7656
  * periodic manual "chore: sync workspace state" passes from the operator and
7635
7657
  * making the project repo stay perpetually dirty.
7636
7658
  *
7637
- * This module exposes a fire-and-forget commit primitive that the pan-dir
7659
+ * This module exposes a serialized write-through commit primitive that pan-dir
7638
7660
  * writers call after they update a file. Commits are:
7639
- * - fixed-window coalesced (default 10m) so a burst of writes becomes one commit
7661
+ * - scheduled immediately by default so every state update reaches git + origin
7662
+ * - optionally fixed-window coalesced when OVERDECK_STATE_FLUSH_WINDOW_MS is set
7640
7663
  * - serialized within a process so the git index is never contested
7641
- * - best-effort: failures are logged and never thrown back to the caller
7664
+ * - best-effort for synchronous callers: failures are logged and reported by flushes
7642
7665
  * - main-only: feature branches have their own commit cadence owned by agents
7643
7666
  *
7644
7667
  * Cross-machine concern: when an agent's state is canonical on `main`, moving
@@ -7648,7 +7671,7 @@ var init_state_plane = __esmMin((() => {
7648
7671
  function parseStateFlushWindowMs(value) {
7649
7672
  if (!value) return DEFAULT_STATE_FLUSH_WINDOW_MS;
7650
7673
  const parsed = Number(value);
7651
- if (!Number.isFinite(parsed) || parsed <= 0) return DEFAULT_STATE_FLUSH_WINDOW_MS;
7674
+ if (!Number.isFinite(parsed) || parsed < 0) return DEFAULT_STATE_FLUSH_WINDOW_MS;
7652
7675
  return parsed;
7653
7676
  }
7654
7677
  function parsePositiveInteger(value, fallback) {
@@ -7702,9 +7725,10 @@ function isGitError(value) {
7702
7725
  return typeof value === "object" && value !== null && "_tag" in value && value._tag === "GitError";
7703
7726
  }
7704
7727
  /**
7705
- * Queue an auto-commit for one or more files. Returns immediately; the actual
7706
- * git commit happens at the end of the fixed flush window. Multiple calls for
7707
- * the same project root inside the window coalesce without extending it.
7728
+ * Queue an auto-commit for one or more files. Returns immediately; by default
7729
+ * the serialized commit starts on the next timer turn. An explicit positive
7730
+ * OVERDECK_STATE_FLUSH_WINDOW_MS retains fixed-window coalescing for operators
7731
+ * who knowingly trade durability latency for fewer commits.
7708
7732
  *
7709
7733
  * PAN-1908: `repoRoot` allows committing files to a different git checkout
7710
7734
  * than the project root (e.g., a declared infra repo for per-issue permanent
@@ -7771,6 +7795,40 @@ function queueBeadsAutoCommit(projectRoot) {
7771
7795
  });
7772
7796
  }
7773
7797
  /**
7798
+ * PAN-2516 belt-and-suspenders reconciliation for state writes that predate or
7799
+ * bypassed the canonical writer. Patrols commit only the owned spec/record
7800
+ * surfaces; unrelated source or operator changes are never staged.
7801
+ */
7802
+ function reconcileStatePlaneDrift(projectRoot) {
7803
+ const project = findProjectByPathSync(projectRoot);
7804
+ const stateHome = project ? resolveStateReadHomeSync(project) : null;
7805
+ const gitRoot = stateHome?.migrated ? stateHome.root : projectRoot;
7806
+ const ownedPaths = stateHome?.migrated ? ["specs", "records"] : [".pan/specs", ".pan/records"];
7807
+ return Effect.gen(function* () {
7808
+ const paths = (yield* runGit([
7809
+ "status",
7810
+ "--porcelain=v1",
7811
+ "--untracked-files=all",
7812
+ "--",
7813
+ ...ownedPaths
7814
+ ], gitRoot).pipe(Effect.match({
7815
+ onSuccess: (result) => result.stdout,
7816
+ onFailure: () => ""
7817
+ }))).split("\n").map((line) => line.trimEnd()).filter(Boolean).map((line) => line.slice(3)).map((path) => path.includes(" -> ") ? path.split(" -> ").at(-1) : path).map((path) => join$1(gitRoot, path));
7818
+ if (paths.length === 0) return {
7819
+ committed: false,
7820
+ reason: "no state-plane drift"
7821
+ };
7822
+ queueAutoCommit({
7823
+ projectRoot,
7824
+ repoRoot: gitRoot,
7825
+ paths,
7826
+ subject: `chore(state): reconcile ${paths.length} pending spec/record update(s)`
7827
+ });
7828
+ return yield* flushAutoCommits(projectRoot);
7829
+ });
7830
+ }
7831
+ /**
7774
7832
  * Force a flush of any pending commits for `projectRoot`. Returns an Effect that
7775
7833
  * resolves after the commit attempt (success or no-op).
7776
7834
  */
@@ -7900,13 +7958,28 @@ function doCommit(projectRoot, batch) {
7900
7958
  }
7901
7959
  }));
7902
7960
  if (typeof commitOk !== "boolean") return commitOk;
7903
- yield* maybePushStateCommit(gitRoot, branch);
7904
- return { committed: true };
7961
+ const push = yield* maybePushStateCommit(gitRoot, branch);
7962
+ if (push && !push.pushed) return {
7963
+ committed: true,
7964
+ pushed: false,
7965
+ reason: push.reason
7966
+ };
7967
+ return {
7968
+ committed: true,
7969
+ pushed: push?.pushed
7970
+ };
7905
7971
  });
7906
7972
  }
7907
7973
  function maybePushStateCommit(gitRoot, branch) {
7908
- if (process.env.OVERDECK_STATE_AUTOPUSH === "0") return Effect.void;
7909
- return pushStateBranch(gitRoot, branch);
7974
+ if (process.env.OVERDECK_STATE_AUTOPUSH === "0") return Effect.succeed(null);
7975
+ return runGit([
7976
+ "remote",
7977
+ "get-url",
7978
+ "origin"
7979
+ ], gitRoot).pipe(Effect.matchEffect({
7980
+ onFailure: () => Effect.succeed(null),
7981
+ onSuccess: () => pushStateBranch(gitRoot, branch)
7982
+ }));
7910
7983
  }
7911
7984
  function pushStateBranch(gitRoot, branch) {
7912
7985
  if (branch === "main") return pushOriginMain(gitRoot, branch, false);
@@ -7916,10 +7989,14 @@ function pushStateBranch(gitRoot, branch) {
7916
7989
  "origin",
7917
7990
  branch
7918
7991
  ], gitRoot, timeoutMs).pipe(Effect.matchEffect({
7919
- onSuccess: () => Effect.void,
7992
+ onSuccess: () => Effect.succeed({ pushed: true }),
7920
7993
  onFailure: (err) => {
7921
- warnAutoPush(branch, `push failed: ${err.stderr || err._tag}`);
7922
- return Effect.void;
7994
+ const message = err.stderr || err._tag;
7995
+ warnAutoPush(branch, `push failed: ${message}`);
7996
+ return Effect.succeed({
7997
+ pushed: false,
7998
+ reason: `push failed: ${message}`
7999
+ });
7923
8000
  }
7924
8001
  }));
7925
8002
  }
@@ -7929,12 +8006,15 @@ function pushOriginMain(gitRoot, branch, retry) {
7929
8006
  "origin",
7930
8007
  "main"
7931
8008
  ], gitRoot, parsePositiveInteger(process.env.OVERDECK_STATE_PUSH_TIMEOUT_MS, DEFAULT_STATE_PUSH_TIMEOUT_MS)).pipe(Effect.matchEffect({
7932
- onSuccess: () => Effect.void,
8009
+ onSuccess: () => Effect.succeed({ pushed: true }),
7933
8010
  onFailure: (err) => {
7934
8011
  const message = err.stderr || err._tag;
7935
8012
  if (!retry && isNonFastForwardPushError(message)) return rebaseLegacyMainAndRetry(gitRoot, branch);
7936
8013
  warnAutoPush(branch, `push failed: ${message}`);
7937
- return Effect.void;
8014
+ return Effect.succeed({
8015
+ pushed: false,
8016
+ reason: `push failed: ${message}`
8017
+ });
7938
8018
  }
7939
8019
  }));
7940
8020
  }
@@ -7948,15 +8028,25 @@ function rebaseLegacyMainAndRetry(gitRoot, branch) {
7948
8028
  ], gitRoot, timeoutMs).pipe(Effect.match({
7949
8029
  onSuccess: () => true,
7950
8030
  onFailure: () => false
7951
- }))) || !(yield* isWorkingTreeClean(gitRoot, branch))) return;
8031
+ }))) || !(yield* isWorkingTreeClean(gitRoot, branch))) return {
8032
+ pushed: false,
8033
+ reason: "push rejected and reconciliation preconditions failed"
8034
+ };
7952
8035
  if (!(yield* areLocalAheadCommitsStatePlaneOnly(gitRoot, branch))) {
7953
8036
  warnAutoPush(branch, "non-fast-forward push rejected and at least one local-ahead commit is not state-plane-only; leaving local main ahead of origin/main");
7954
- return;
8037
+ return {
8038
+ pushed: false,
8039
+ reason: "push rejected with non-state local commits"
8040
+ };
7955
8041
  }
7956
8042
  if (yield* runGitWithTimeout(["rebase", "origin/main"], gitRoot, timeoutMs).pipe(Effect.match({
7957
8043
  onSuccess: () => true,
7958
8044
  onFailure: () => false
7959
- }))) yield* pushOriginMain(gitRoot, branch, true);
8045
+ }))) return yield* pushOriginMain(gitRoot, branch, true);
8046
+ return {
8047
+ pushed: false,
8048
+ reason: "push rejected and state rebase failed"
8049
+ };
7960
8050
  });
7961
8051
  }
7962
8052
  function areLocalAheadCommitsStatePlaneOnly(gitRoot, branch) {
@@ -8036,7 +8126,7 @@ var init_auto_commit = __esmMin((() => {
8036
8126
  init_state_migration_lock();
8037
8127
  init_state_plane();
8038
8128
  spawnerLayer = NodeChildProcessSpawner.layer.pipe(Layer.provide(Layer.mergeAll(NodeFileSystem.layer, NodePath.layer)));
8039
- DEFAULT_STATE_FLUSH_WINDOW_MS = 600 * 1e3;
8129
+ DEFAULT_STATE_FLUSH_WINDOW_MS = 0;
8040
8130
  STATE_FLUSH_WINDOW_MS = parseStateFlushWindowMs(process.env.OVERDECK_STATE_FLUSH_WINDOW_MS);
8041
8131
  DEFAULT_STATE_PUSH_TIMEOUT_MS = 3e4;
8042
8132
  AUTO_COMMIT_EXCLUDED_PATHS = [
@@ -8246,6 +8336,7 @@ function queueIssueRecordCommit(project, issueId, recordPath) {
8246
8336
  paths: [recordPath],
8247
8337
  subject: `chore(records): update ${issueId.toUpperCase()} per-issue record`
8248
8338
  });
8339
+ return basePath;
8249
8340
  }
8250
8341
  /** Build this node's owner URI: pan://host[:port]. */
8251
8342
  function buildOwnUri() {
@@ -10981,8 +11072,9 @@ var init_harness_policy = __esmMin((() => {
10981
11072
  ALLOWED = { allowed: true };
10982
11073
  OHMYPI_ANTHROPIC_SUBSCRIPTION_BLOCK = {
10983
11074
  allowed: false,
10984
- reason: "ohmypi cannot run Anthropic models when authenticated via Claude Code subscription. Switch the Anthropic provider to API-key auth, or pick a non-Anthropic model for ohmypi."
11075
+ reason: "Claude Code subscription Terms of Service restrict Anthropic models to the Claude Code harness — ohmypi cannot run Anthropic models under subscription auth. To proceed, switch the Anthropic provider to API-key auth, or pick a non-Anthropic model for ohmypi."
10985
11076
  };
11077
+ OHMYPI_ANTHROPIC_SUBSCRIPTION_BLOCK.reason;
10986
11078
  SUBSCRIPTION_ONLY_MODEL_BLOCK = {
10987
11079
  allowed: false,
10988
11080
  reason: "This OpenAI model needs a ChatGPT/Codex subscription sign-in — it is not served by the plain OpenAI API key. Run `codex login` on the host (workspace containers inherit the host sign-in), or pick a different model."
@@ -11605,6 +11697,9 @@ function mergeDocsConfig(result, config) {
11605
11697
  if (docs.classifier.timeout_ms !== void 0) result.classifier.timeoutMs = docs.classifier.timeout_ms;
11606
11698
  }
11607
11699
  }
11700
+ function getDefaultDocsConfig() {
11701
+ return cloneDocsConfig(DEFAULT_CONFIG.docs);
11702
+ }
11608
11703
  function mergeTtsConfig(result, config) {
11609
11704
  const tts = config?.tts;
11610
11705
  if (!tts) return;
@@ -14522,6 +14617,6 @@ var init_config_yaml = __esmMin((() => {
14522
14617
  init_load();
14523
14618
  }));
14524
14619
  //#endregion
14525
- export { getModelCapabilitySync as $, extractPrefixSync as $n, writeStatusOverridesSync as $t, KIMI_PLATFORM_BASE_URL as A, getSpecialistRetention as An, PROJECT_DOCS_SUBDIR as Ar, queueIssueRecordCommit as At, qualifyPiModel as B, projects_exports as Bn, getLegacyHome as Br, writeRecordBeadsMapping as Bt, resolveTieredExecutionEnabled as C, findProjectsByRallyProject as Cn, CACHE_AGENTS_DIR as Cr, getIssueRecordBasePath as Ct, canUseModelWithAuthSync as D, getProjectSync as Dn, COSTS_DIR as Dr, getProjectConfigFromWorkspacePath as Dt, canUseHarnessSync as E, getProjectSwarmHotspots as En, CONFIG_FILE as Er, getIssueWorkspacePath as Et, getKimiAnthropicBaseUrl as F, initializeProjectsConfigSync as Fn, SKILLS_DIR as Fr, resolveProjectForIssue as Ft, init_registry as G, resolveProjectFromIssueSync as Gn, resolveOhmypiExtensionPath as Gr, writeRecordHazardsSync as Gt, ensureOpenAICompatibleProxyRunning as H, registerProjectSync as Hn, init_paths as Hr, writeRecordDecisions as Ht, getProviderEnvSync as I, listProjects as In, SYNC_SOURCES as Ir, writeAgentHarnessModel as It, computeModelOrigin as J, saveProjectsConfigSync as Jn, writeRecordScopeDriftSync as Jt, DEFAULT_ROLES as K, resolveProjectPath as Kn, sessionFilePath as Kr, writeRecordResumePoint as Kt, getProviderForModelSync as L, listProjectsSync as Ln, TRAEFIK_DIR as Lr, writeAgentHarnessModelSync as Lt, UnknownModelError as M, hasProjectsSync as Mn, PROJECT_PRDS_COMPLETED_SUBDIR as Mr, readIssueRecordForWorkspaceSync as Mt, clearCredentialFileAuthSync as N, init_projects as Nn, PROJECT_PRDS_PLANNED_SUBDIR as Nr, readIssueRecordSync as Nt, init_harness_policy as O, getSpecialistConfig as On, LOGS_DIR as Or, init_record as Ot, getBuiltInDefaultHarness as P, initializeProjectsConfig as Pn, PROJECT_PRDS_SUBDIR as Pr, readRecordContinueViewSync as Pt, MODEL_DEPRECATIONS as Q, extractNumberSync as Qn, writeStatusOverrideSync as Qt, init_providers as R, loadProjectsConfig as Rn, encodeClaudeProjectDir as Rr, writeIssueRecordForWorkspaceSync as Rt, init_tier_table as S, findProjectByTeamSync as Sn, BIN_DIR as Sr, ensureIssueRecordSync as St, validateTieredExecutionConfig as T, getProject as Tn, CLAUDE_DIR as Tr, getIssueRecordPathForWorkspace as Tt, init_openai_compatible_proxy as U, resolveInfraRepo as Un, isDevMode as Ur, writeRecordDecisionsSync as Ut, setupCredentialFileAuthSync as V, registerProject as Vn, getOverdeckHome as Vr, writeRecordBeadsMappingSync as Vt, defaultBackgroundAiFeatures as W, resolveProjectFromIssue as Wn, packageRoot as Wr, writeRecordHazards as Wt, resolveModel as X, unregisterProject as Xn, writeRecordTieredExecutionOverrideSync as Xt, init_roles as Y, setProjectAutoMergeDefaultSync as Yn, writeRecordTieredExecutionOverride as Yt, MODEL_CAPABILITIES as Z, unregisterProjectSync as Zn, writeStatusOverride as Zt, getDefaultTtsDaemonConfig as _, createDefaultProjectsConfig as _n, TrackerError as _r, buildOwnUri as _t, getConversationsConfigSync as a, queueBeadsAutoCommit as an, require_dist as ar, fmix32 as at, TIERED_EXECUTION_DIFFICULTIES as b, findProjectByPathSync as bn, AGENTS_DIR as br, clearRecordFeedbackSync as bt, isClaudeCodeChannelsEnabled as c, getMainDivergence as cn, ConfigError as cr, COMPLIANCE_MODES as ct, loadConfigNoMigration as d, isStatePlanePath as dn, GitHubApiError as dr, RECORD_DIRNAME as dt, deriveProjectRoot as en, init_issue_id as er, getModelEffortLevelsSync as et, loadConfigSync as f, init_state_read_home as fn, InvalidAgentIdError as fr, RECORD_SCHEMA_VERSION as ft, mergeConfigs as g, PROJECTS_CONFIG_FILE as gn, TmuxError as gr, appendSessionEntrySync as gt, jsYaml as h, init_project_key as hn, ProcessSpawnError as hr, appendSessionEntry as ht, getConversationsConfig as i, queueAutoCommit as in, resolveIssueIdSync as ir, resolveModelIdSync as it, PROVIDERS as j, hasProjects as jn, PROJECT_PRDS_ACTIVE_SUBDIR as jr, readIssueRecord as jt, KIMI_CODING_BASE_URL as k, getSpecialistPromptOverride as kn, OVERDECK_HOME as kr, markRecordPipelineClosedOutSync as kt, isClaudeCodeChannelsMcpEnabled as l, init_state_plane as ln, FsError as lr, PARENT_MODEL_REF as lt, init_js_yaml as m, shouldCommitLegacyWorkspaceArtifacts as mn, MergeConflictError as mr, appendFeedbackEntrySync as mt, clearConfigCache as n, flushAutoCommits as nn, parseIssueIdSync as nr, init_model_capabilities as nt, getGlobalConfigPath as o, STATE_BRANCH_PATHS as on, CheckpointError as or, fnv1a32 as ot, updateConversationsConfig as p, resolveStateReadHomeSync as pn, LinearApiError as pr, appendFeedbackEntry as pt, DEFAULT_WORKHORSES as q, saveProjectsConfig as qn, writeRecordResumePointSync as qt, getConversationSearchConfigSync as r, init_auto_commit as rn, resolveBareNumericIdSync as rr, modelSupportsImagesSync as rt, init_load as s, STATE_PLANE_PATHS as sn, ClaudeCredentialParseError as sr, init_percent as st, init_config_yaml as t, flushAllPendingAutoCommits as tn, normalizeIssueIdSync as tr, hasModelCapabilitySync as tt, isTldrEnabledSync as u, isStatePlaneOnlyStatus as un, GitError as ur, ROLE_EFFORTS as ut, mergeTtsDaemonConfigs as v, extractTeamPrefix as vn, VcsError as vr, claimIssueOwner as vt, resolveTieredExecutionEnabledForIssue as w, getIssuePrefix as wn, CACHE_RULES_DIR as wr, getIssueRecordPath as wt, TieredExecutionConfigError as x, findProjectByTeam as xn, ARCHIVES_DIR as xr, ensureIssueRecord as xt, DEFAULT_TIERED_EXECUTION_CONFIG as y, findProjectByPath as yn, init_errors as yr, clearIssueOwner as yt, piProviderForModel as z, loadProjectsConfigSync as zn, getHandoffsDir as zr, writeIssueRecordSync as zt };
14620
+ export { MODEL_DEPRECATIONS as $, unregisterProjectSync as $n, writeStatusOverrideSync as $t, KIMI_CODING_BASE_URL as A, getSpecialistConfig as An, LOGS_DIR as Ar, markRecordPipelineClosedOutSync as At, piProviderForModel as B, loadProjectsConfig as Bn, encodeClaudeProjectDir as Br, writeIssueRecordSync as Bt, init_tier_table as C, findProjectByTeam as Cn, ARCHIVES_DIR as Cr, ensureIssueRecordSync as Ct, canUseHarnessSync as D, getProject as Dn, CLAUDE_DIR as Dr, getIssueWorkspacePath as Dt, validateTieredExecutionConfig as E, getIssuePrefix as En, CACHE_RULES_DIR as Er, getIssueRecordPathForWorkspace as Et, getBuiltInDefaultHarness as F, init_projects as Fn, PROJECT_PRDS_PLANNED_SUBDIR as Fr, readRecordContinueViewSync as Ft, defaultBackgroundAiFeatures as G, resolveInfraRepo as Gn, getHandoffsDir as Gr, writeRecordHazards as Gt, setupCredentialFileAuthSync as H, projects_exports as Hn, getDocsDisableStatePath as Hr, writeRecordBeadsMappingSync as Ht, getKimiAnthropicBaseUrl as I, initializeProjectsConfig as In, PROJECT_PRDS_SUBDIR as Ir, resolveProjectForIssue as It, DEFAULT_WORKHORSES as J, resolveProjectPath as Jn, init_paths as Jr, writeRecordResumePointSync as Jt, init_registry as K, resolveProjectFromIssue as Kn, getLegacyHome as Kr, writeRecordHazardsSync as Kt, getProviderEnvSync as L, initializeProjectsConfigSync as Ln, SKILLS_DIR as Lr, writeAgentHarnessModel as Lt, PROVIDERS as M, getSpecialistRetention as Mn, PROJECT_DOCS_SUBDIR as Mr, readIssueRecord as Mt, UnknownModelError as N, hasProjects as Nn, PROJECT_PRDS_ACTIVE_SUBDIR as Nr, readIssueRecordForWorkspaceSync as Nt, canUseModelWithAuthSync as O, getProjectSwarmHotspots as On, CONFIG_FILE as Or, getProjectConfigFromWorkspacePath as Ot, clearCredentialFileAuthSync as P, hasProjectsSync as Pn, PROJECT_PRDS_COMPLETED_SUBDIR as Pr, readIssueRecordSync as Pt, MODEL_CAPABILITIES as Q, unregisterProject as Qn, sessionFilePath as Qr, writeStatusOverride as Qt, getProviderForModelSync as R, listProjects as Rn, SYNC_SOURCES as Rr, writeAgentHarnessModelSync as Rt, TieredExecutionConfigError as S, findProjectByPathSync as Sn, AGENTS_DIR as Sr, ensureIssueRecord as St, resolveTieredExecutionEnabledForIssue as T, findProjectsByRallyProject as Tn, CACHE_AGENTS_DIR as Tr, getIssueRecordPath as Tt, ensureOpenAICompatibleProxyRunning as U, registerProject as Un, getDocsIndexPath as Ur, writeRecordDecisions as Ut, qualifyPiModel as V, loadProjectsConfigSync as Vn, getDocsBudgetStatePath as Vr, writeRecordBeadsMapping as Vt, init_openai_compatible_proxy as W, registerProjectSync as Wn, getDocsTelemetryPath as Wr, writeRecordDecisionsSync as Wt, init_roles as X, saveProjectsConfigSync as Xn, packageRoot as Xr, writeRecordTieredExecutionOverride as Xt, computeModelOrigin as Y, saveProjectsConfig as Yn, isDevMode as Yr, writeRecordScopeDriftSync as Yt, resolveModel as Z, setProjectAutoMergeDefaultSync as Zn, resolveOhmypiExtensionPath as Zr, writeRecordTieredExecutionOverrideSync as Zt, getDefaultDocsConfig as _, init_project_key as _n, ProcessSpawnError as _r, appendSessionEntrySync as _t, getConversationsConfigSync as a, queueAutoCommit as an, resolveBareNumericIdSync as ar, resolveModelIdSync as at, DEFAULT_TIERED_EXECUTION_CONFIG as b, extractTeamPrefix as bn, VcsError as br, clearIssueOwner as bt, isClaudeCodeChannelsEnabled as c, STATE_BRANCH_PATHS as cn, CheckpointError as cr, init_percent as ct, loadConfigNoMigration as d, init_state_plane as dn, FsError as dr, ROLE_EFFORTS as dt, writeStatusOverridesSync as en, extractNumberSync as er, getModelCapabilitySync as et, loadConfigSync as f, isStatePlaneOnlyStatus as fn, GitError as fr, RECORD_DIRNAME as ft, mergeConfigs as g, shouldCommitLegacyWorkspaceArtifacts as gn, MergeConflictError as gr, appendSessionEntry as gt, jsYaml as h, resolveStateReadHomeSync as hn, LinearApiError as hr, appendFeedbackEntrySync as ht, getConversationsConfig as i, init_auto_commit as in, parseIssueIdSync as ir, modelSupportsImagesSync as it, KIMI_PLATFORM_BASE_URL as j, getSpecialistPromptOverride as jn, OVERDECK_HOME as jr, queueIssueRecordCommit as jt, init_harness_policy as k, getProjectSync as kn, COSTS_DIR as kr, init_record as kt, isClaudeCodeChannelsMcpEnabled as l, STATE_PLANE_PATHS as ln, ClaudeCredentialParseError as lr, COMPLIANCE_MODES as lt, init_js_yaml as m, init_state_read_home as mn, InvalidAgentIdError as mr, appendFeedbackEntry as mt, clearConfigCache as n, flushAllPendingAutoCommits as nn, init_issue_id as nr, hasModelCapabilitySync as nt, getGlobalConfigPath as o, queueBeadsAutoCommit as on, resolveIssueIdSync as or, fmix32 as ot, updateConversationsConfig as p, isStatePlanePath as pn, GitHubApiError as pr, RECORD_SCHEMA_VERSION as pt, DEFAULT_ROLES as q, resolveProjectFromIssueSync as qn, getOverdeckHome as qr, writeRecordResumePoint as qt, getConversationSearchConfigSync as r, flushAutoCommits as rn, normalizeIssueIdSync as rr, init_model_capabilities as rt, init_load as s, reconcileStatePlaneDrift as sn, require_dist as sr, fnv1a32 as st, init_config_yaml as t, deriveProjectRoot as tn, extractPrefixSync as tr, getModelEffortLevelsSync as tt, isTldrEnabledSync as u, getMainDivergence as un, ConfigError as ur, PARENT_MODEL_REF as ut, getDefaultTtsDaemonConfig as v, PROJECTS_CONFIG_FILE as vn, TmuxError as vr, buildOwnUri as vt, resolveTieredExecutionEnabled as w, findProjectByTeamSync as wn, BIN_DIR as wr, getIssueRecordBasePath as wt, TIERED_EXECUTION_DIFFICULTIES as x, findProjectByPath as xn, init_errors as xr, clearRecordFeedbackSync as xt, mergeTtsDaemonConfigs as y, createDefaultProjectsConfig as yn, TrackerError as yr, claimIssueOwner as yt, init_providers as z, listProjectsSync as zn, TRAEFIK_DIR as zr, writeIssueRecordForWorkspaceSync as zt };
14526
14621
 
14527
- //# sourceMappingURL=config-yaml-C_djSurJ.js.map
14622
+ //# sourceMappingURL=config-yaml-cNOZcEww.js.map