@overdeck/desktop 0.45.21 → 0.45.23

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 (387) hide show
  1. package/package.json +1 -1
  2. package/server/{acceptance-criteria-CJIFA8Vg.js → acceptance-criteria-DOA0KgXx.js} +5 -5
  3. package/server/{advancing-selfheal-CPOBO5ZS.js → advancing-selfheal-BBu6DSNm.js} +6 -6
  4. package/server/{agent-gc-D6PUckBB.js → agent-gc-BV1q_2EV.js} +4 -4
  5. package/server/agent-state-Bg0lhqwj.js +3 -0
  6. package/server/{agent-state-service-DHwemt96.js → agent-state-service-CnzFKSAQ.js} +1 -1
  7. package/server/{agent-state-service-6MFQqnFy.js → agent-state-service-HoK8U4jW.js} +5 -5
  8. package/server/{agents-DbrHWunF.js → agents-B4Bjbkfv.js} +4 -4
  9. package/server/agents-FlIgQ3ql.js +3 -0
  10. package/server/{archive-planning-BOnwJq8M.js → archive-planning-DYrYojxl.js} +31 -7
  11. package/server/{archive-planning-MPpvQJL4.js → archive-planning-zkJb3BeM.js} +1 -1
  12. package/server/{artifact-index-jobs-BOoySTKD.js → artifact-index-jobs-C-xy7Z5v.js} +2 -2
  13. package/server/{backlog-auto-trigger-BUaFI44J.js → backlog-auto-trigger-GtG71X8H.js} +3 -3
  14. package/server/{behavior-Dg-D8eBG.js → behavior-B_-4EKF3.js} +2 -2
  15. package/server/{briefing-freshness-OouGbJ7d.js → briefing-freshness-DWdW7vUm.js} +2 -2
  16. package/server/{build-info-27NlbKhV.js → build-info-BT096lEl.js} +3 -3
  17. package/server/{build-info-Cv6CI7Gu.js → build-info-DgTqZkL5.js} +1 -1
  18. package/server/{checkpoint-manager-C7mFCY_E.js → checkpoint-manager-B7Bt29J0.js} +1 -1
  19. package/server/{checkpoint-manager-D64fCC4p.js → checkpoint-manager-DDqcGyu8.js} +2 -2
  20. package/server/checkpoint-worker.js +1 -1
  21. package/server/{checkpoints-Vh-J15ge.js → checkpoints-C-AXLfYT.js} +2 -2
  22. package/server/{checkpoints-DwZqT2qQ.js → checkpoints-CpgCjAlN.js} +1 -1
  23. package/server/{claude-hooks-provision-CS5W_dhI.js → claude-hooks-provision-C8wdRnN1.js} +1 -1
  24. package/server/{claude-hooks-provision-BVLGfHrv.js → claude-hooks-provision-but-_qGY.js} +2 -2
  25. package/server/{claude-permissions-C2OrLYKL.js → claude-permissions-H_5wHQZQ.js} +2 -2
  26. package/server/{claude-settings-overlay-DWXjafJh.js → claude-settings-overlay-BTENVmYf.js} +1 -1
  27. package/server/{claude-settings-overlay-DX-fMFpC.js → claude-settings-overlay-CbSz0Dvb.js} +2 -2
  28. package/server/cli-BsVIHwzC.js +3 -0
  29. package/server/{cli-mvpEOb3w.js → cli-vBeXbPrq.js} +9 -9
  30. package/server/{cliproxy-Dvsr4ZkW.js → cliproxy-Bgb2XCqi.js} +2 -2
  31. package/server/{cliproxy-7g1nObvB.js → cliproxy-DW0V86F8.js} +1 -1
  32. package/server/{close-issue-8F6uawYj.js → close-issue-Dn_4c4G8.js} +5 -5
  33. package/server/{closed-issue-reaper-BhV-r-tC.js → closed-issue-reaper-CWpY2uBw.js} +1 -1
  34. package/server/{closed-issue-reaper-BaYQYF6w.js → closed-issue-reaper-hANY_ehE.js} +9 -9
  35. package/server/codex-Dg7Is5yb.js +3 -0
  36. package/server/{codex-D_UBEOwL.js → codex-TmSi-yTv.js} +30 -8
  37. package/server/{codex-parser-BTzlOZiV.js → codex-parser-C4gSH-IR.js} +2 -2
  38. package/server/{config-CrduXs4a.js → config-CCvjQf27.js} +2 -2
  39. package/server/{config-nAB_F-Gp.js → config-DUIhMN_T.js} +1 -1
  40. package/server/{config-G1TOMJZA.js → config-DjLOdbgT.js} +2 -2
  41. package/server/{config-yaml-Ciyp2mYe.js → config-yaml-DvyMuOle.js} +177 -211
  42. package/server/{conflict-gate-BKalpcjL.js → conflict-gate-BSJkNTdp.js} +1 -1
  43. package/server/{conflict-gate-BLUNMs1i.js → conflict-gate-CmrYpa47.js} +3 -3
  44. package/server/{context-layers-YNpf6Q_I.js → context-layers-B3Nt58jl.js} +2 -2
  45. package/server/{context-layers-Cg9ZgVfx.js → context-layers-ZYFcWiyc.js} +3 -3
  46. package/server/{control-settings-D_79A6gp.js → control-settings-aP1ANIlI.js} +4 -4
  47. package/server/{conversation-compaction-DiuZbIUB.js → conversation-compaction-CNbTLB86.js} +8 -8
  48. package/server/{conversation-compaction-CMIeWW4_.js → conversation-compaction-DiG5zWQq.js} +1 -1
  49. package/server/{conversation-service-DQybSPUK.js → conversation-service-Du-MTNpJ.js} +6 -6
  50. package/server/{conversation-service-CWk8mEym.js → conversation-service-Up7FEzIC.js} +1 -1
  51. package/server/{conversations-BJ-t3BRm.js → conversations-6mPANqvL.js} +1 -1
  52. package/server/{conversations-BUgGvqVL.js → conversations-DbOs1e9Q.js} +4 -4
  53. package/server/{cost-jJ2cgDcG.js → cost-CW4WSe72.js} +3 -3
  54. package/server/{cost-Drm7qeD5.js → cost-Ca0YTWDw.js} +18 -2
  55. package/server/{cost-sync-DzHP6zaR.js → cost-sync-C0VdGme1.js} +3 -3
  56. package/server/{dag-DIji6O2b.js → dag-CdOjJVDT.js} +9 -9
  57. package/server/{dangerous-git-ops-BebB-61h.js → dangerous-git-ops-CT-IypG3.js} +1 -1
  58. package/server/dashboard-db-worker.js +7 -7
  59. package/server/{deacon-pleYrvIm.js → deacon-DYSEJb48.js} +3 -3
  60. package/server/{deacon-nudge-log-C5VCKtyi.js → deacon-nudge-log-Bjg8U4Y9.js} +3 -3
  61. package/server/{deacon-1s7bM5zn.js → deacon-pRnyD5w9.js} +1133 -474
  62. package/server/deacon-swarm-9jRLS5Ke.js +2 -0
  63. package/server/{deacon-swarm-DmA3rJ7k.js → deacon-swarm-DftYRDo8.js} +17 -17
  64. package/server/deacon.js +8 -8
  65. package/server/{deploy-patrol-DmM6F-yw.js → deploy-patrol-Bjsho_ha.js} +136 -19
  66. package/server/{deploy-window-ClLq1RYf.js → deploy-window-CM6W1-c6.js} +1 -1
  67. package/server/{deploy-window-jw4S_Y-c.js → deploy-window-DeP_OIRk.js} +77 -10
  68. package/server/{dev-supervisor-Do2Stz49.js → dev-supervisor-BpMoHlkR.js} +2 -2
  69. package/server/{devcontainer-renderer-D8ylupco.js → devcontainer-renderer-CtUgrVKW.js} +3 -3
  70. package/server/dist-Bd3vn0Hw.js +3 -0
  71. package/server/{dist-yfR7G1BL.js → dist-DyRx4cI7.js} +1 -1
  72. package/server/{docker-ClwPQaba.js → docker-BK7HIcBj.js} +2 -2
  73. package/server/{dod-BLphkhjs.js → dod-BrSfUHm0.js} +1 -1
  74. package/server/{ensure-devcontainer-BA3bICoY.js → ensure-devcontainer-DRqaAkBR.js} +1 -1
  75. package/server/{ensure-devcontainer-CFpQatOc.js → ensure-devcontainer-DseivYEy.js} +4 -4
  76. package/server/{esm-shims-BZw-fTQ6.js → esm-shims-CbI3BVkl.js} +1 -1
  77. package/server/{event-store-DABarGNz.js → event-store-Cr5PQwFC.js} +1 -1
  78. package/server/{event-store-BVnON3vf.js → event-store-tdiY5eDZ.js} +3 -3
  79. package/server/{events-CmERlnwn.js → events-CC1dgUpx.js} +3 -3
  80. package/server/{events-LGeUehYW.js → events-CvvGK6LT.js} +1 -1
  81. package/server/{factory-CQNprtHe.js → factory-CynerjXO.js} +50 -13
  82. package/server/{feature-registry-population-D9Z3tYSa.js → feature-registry-population-B0pmAz0a.js} +4 -4
  83. package/server/{feature-registry-storage-BWymOgXE.js → feature-registry-storage-_wUBRD3J.js} +2 -2
  84. package/server/{features--fOza5g5.js → features-Dhxz-wLc.js} +2 -2
  85. package/server/{feedback-target-Dqik2WTe.js → feedback-target-CPS15Vte.js} +7 -7
  86. package/server/{feedback-target-Dn9vfPpz.js → feedback-target-iygZwmMc.js} +1 -1
  87. package/server/{feedback-writer-Wlq5-qgS.js → feedback-writer-C9b6ccN1.js} +6 -5
  88. package/server/{feedback-writer-DDQNV8uc.js → feedback-writer-qmiMbqTZ.js} +1 -1
  89. package/server/{flywheel-Q-38YhZG.js → flywheel-DMCUzDWg.js} +1 -1
  90. package/server/{flywheel-1Wd8WDlh.js → flywheel-DSSpWmqF.js} +13 -13
  91. package/server/{flywheel-DPUc8r3V.js → flywheel-DcBkQvgE.js} +14 -14
  92. package/server/{flywheel-merge-order-CeBuX0EJ.js → flywheel-merge-order-C-6zRLvM.js} +1 -1
  93. package/server/{flywheel-merge-order-4SqOXFAr.js → flywheel-merge-order-DxbQKE1d.js} +8 -8
  94. package/server/forge-B-ZWyTRm.js +2 -0
  95. package/server/{forge-DBbDpiYc.js → forge-Ch9gCFod.js} +2 -2
  96. package/server/{from-hh6vTBGl.js → from-CJ_aH5jD.js} +1 -1
  97. package/server/{fts-db-6ponMie2.js → fts-db-CKgg0VKg.js} +2 -2
  98. package/server/{fts-operations-KIRK165y.js → fts-operations-BrL_VTRr.js} +2 -2
  99. package/server/git-utils-BVa07a4a.js +198 -0
  100. package/server/{git-utils-DmF5xkj8.js → git-utils-Dry_Ka_D.js} +1 -1
  101. package/server/{github-app-B3yfECo8.js → github-app-CMBdIFBQ.js} +11 -3
  102. package/server/{github-app-CeSVFL6C.js → github-app-CPfoFAdV.js} +1 -1
  103. package/server/{github-client-Dslipypz.js → github-client--XVlDpwM.js} +2 -2
  104. package/server/{github-client-4A6FgA8O.js → github-client-B4QsdE-X.js} +1 -1
  105. package/server/{github-pr-lookup-DBP0YHMr.js → github-pr-lookup-BRbDW-qk.js} +2 -2
  106. package/server/harness-binary-CVio2m-u.js +106 -0
  107. package/server/{harness-resolve-BGpO-OVM.js → harness-resolve-qHJBhy3Z.js} +9 -15
  108. package/server/{health-events-CZGZ5I-A.js → health-events-C9B8y1Hm.js} +2 -2
  109. package/server/{health-events-CnwV_SSz.js → health-events-CpfvuVmm.js} +1 -1
  110. package/server/{hooks-CoNscX84.js → hooks-DUXw8A0-.js} +2 -2
  111. package/server/{hooks-DvX33gY_.js → hooks-ltecuFqZ.js} +1 -1
  112. package/server/{hume-DSJt5eA_.js → hume-BEq0bUDg.js} +2 -2
  113. package/server/hume-B_DbflNM.js +3 -0
  114. package/server/{idle-stack-reaper-5DVRoY6P.js → idle-stack-reaper-D7w9t3fE.js} +1 -1
  115. package/server/{idle-stack-reaper-BfL8HqYy.js → idle-stack-reaper-w1ISSlhs.js} +2 -2
  116. package/server/{in-flight-guard-tVGiI5ee.js → in-flight-guard-aQ1IxeI3.js} +2 -2
  117. package/server/{infra-DN2wSxle.js → infra-CzaSOgul.js} +4 -4
  118. package/server/{injection-DtlT8Akv.js → injection-DZ0PfYa4.js} +7 -7
  119. package/server/{injection-DK9zh_HL.js → injection-oNZeoDhL.js} +1 -1
  120. package/server/{inspect-agent-DKByUS_F.js → inspect-agent-DJKLWcVT.js} +15 -11
  121. package/server/inspect-agent-ch-F-5Ci.js +2 -0
  122. package/server/{internal-token-DhfFiwW7.js → internal-token-Bb4XeV2x.js} +2 -2
  123. package/server/{internal-token-7bYL5v6K.js → internal-token-DXdfprGr.js} +1 -1
  124. package/server/{io-BiM-7Zsx.js → io-B3_AHDfr.js} +160 -184
  125. package/server/{issue-closed-Dfw3QDyZ.js → issue-closed-zhdvQicO.js} +7 -7
  126. package/server/{issue-lifecycle-B7HZWnTA.js → issue-lifecycle-CreaCkjW.js} +22 -22
  127. package/server/{issue-lifecycle-ytsEdDlK.js → issue-lifecycle-Dy4vd0Oa.js} +1 -1
  128. package/server/{issue-service-singleton-CPESc4Or.js → issue-service-singleton-B5ushCvE.js} +8 -8
  129. package/server/{issue-service-singleton-D5EB5eYr.js → issue-service-singleton-DabvBWUp.js} +1 -1
  130. package/server/{issues-XYtFMxrH.js → issues-B6ToV6x1.js} +2 -2
  131. package/server/{jsonl-parser-DJV2eZUP.js → jsonl-parser-Dhflo1SH.js} +3 -3
  132. package/server/{label-cleanup-CJ4m8iRU.js → label-cleanup-BKPJm4Hv.js} +3 -3
  133. package/server/{label-reconciler-CNf3Ylm3.js → label-reconciler-DdWbHEBu.js} +4 -4
  134. package/server/{launcher-generator-5DJRiovn.js → launcher-generator-CHVm7bGT.js} +10 -9
  135. package/server/{layers-cZx7ibtV.js → layers-DzxSTGNA.js} +2 -2
  136. package/server/lifecycle-DfeyBDwA.js +121 -0
  137. package/server/lifecycle-io-Bsnr2K4F.js +3 -0
  138. package/server/{lifecycle-io-DMurK4oM.js → lifecycle-io-D8iNBcux.js} +37 -37
  139. package/server/{lifecycle-CE7619Xw.js → lifecycle-sycO16hj.js} +6 -6
  140. package/server/{linear-client-BLyN-NiP.js → linear-client-D4zqMnX7.js} +2 -2
  141. package/server/{linear-client-Bj1l4FOA.js → linear-client-DqhDQO9k.js} +1 -1
  142. package/server/memory-fts-worker.js +1 -1
  143. package/server/{merge-hSC2BENe.js → merge-C_ZEhbqI.js} +3 -3
  144. package/server/{merge-CwX2_AWm.js → merge-DK23JEdS.js} +1 -1
  145. package/server/{merge-agent-CnORPiri.js → merge-agent-BQM3a8z5.js} +1 -1
  146. package/server/{merge-agent-DnBsms_V.js → merge-agent-XrB80vfT.js} +369 -213
  147. package/server/{merge-batch-C2w2U2eK.js → merge-batch-Bwoyr8Je.js} +1 -1
  148. package/server/{merge-blockers-DhRgh76x.js → merge-blockers-BsFjGrQ8.js} +2 -2
  149. package/server/merge-ops-DlB1IM0Y.js +2 -0
  150. package/server/{merge-rebase-CE-ZyOMY.js → merge-rebase-C1KIVr0s.js} +2 -2
  151. package/server/{merge-set-D7YNU1ZB.js → merge-set-DLz0MkGT.js} +3 -3
  152. package/server/{merge-set-DHkzPCJU.js → merge-set-DnSYdBEp.js} +1 -1
  153. package/server/{merge-sync-De1FYva5.js → merge-sync-DZ9dojJn.js} +2 -2
  154. package/server/{merge-sync-CpGA9Kg7.js → merge-sync-SSv3E-pl.js} +1 -1
  155. package/server/{merge-train-SvkRJZ-k.js → merge-train-DxDfBTjr.js} +3 -3
  156. package/server/{merge-train-deps-CECJTElu.js → merge-train-deps-CyYQUksx.js} +4 -4
  157. package/server/{merge-verification-B3meGcXF.js → merge-verification-CSizH3HY.js} +4 -4
  158. package/server/{multipart-parser-ByTMgYV5.js → multipart-parser-Dt8YPN5S.js} +2 -2
  159. package/server/{no-resume-mode-BnInAFKs.js → no-resume-mode-Cx3K0hHi.js} +11 -8
  160. package/server/node_modules/.package-lock.json +5 -5
  161. package/server/node_modules/@effect/platform-node/node_modules/@effect/platform-node-shared/README.md +3 -3
  162. package/server/node_modules/@effect/platform-node/node_modules/@effect/platform-node-shared/dist/NodeChildProcessSpawner.d.ts.map +1 -1
  163. package/server/node_modules/@effect/platform-node/node_modules/@effect/platform-node-shared/dist/NodeChildProcessSpawner.js +2 -2
  164. package/server/node_modules/@effect/platform-node/node_modules/@effect/platform-node-shared/dist/NodeChildProcessSpawner.js.map +1 -1
  165. package/server/node_modules/@effect/platform-node/node_modules/@effect/platform-node-shared/package.json +5 -5
  166. package/server/node_modules/@effect/platform-node/node_modules/@effect/platform-node-shared/src/NodeChildProcessSpawner.ts +6 -8
  167. package/server/{orphan-proposed-reconciler-CAfuWTA1.js → orphan-proposed-reconciler-BTkDrl4R.js} +1 -1
  168. package/server/{orphan-proposed-reconciler-AxAGUouN.js → orphan-proposed-reconciler-neK8dHQk.js} +23 -14
  169. package/server/package-lock.json +6 -6
  170. package/server/package.json +1 -1
  171. package/server/{pan-dir-Rw17YjT1.js → pan-dir-DeVUgwA7.js} +78 -58
  172. package/server/{paths-FP8v3lTz.js → paths-_zEts6wc.js} +2 -2
  173. package/server/{pickup-xi3KTLaJ.js → pickup-Dd0Znxxy.js} +2 -2
  174. package/server/{pipeline-membership-BtKMNY7v.js → pipeline-membership-0HaEGDlH.js} +190 -68
  175. package/server/{pipeline-notifier-dQ-U4NSb.js → pipeline-notifier-6iCJplFZ.js} +1 -1
  176. package/server/{pipeline-notifier-BM2HLF7B.js → pipeline-notifier-D0ykk59O.js} +2 -2
  177. package/server/{project-pipelines-B59NfN44.js → project-pipelines-2sK1apsO.js} +2 -2
  178. package/server/projects-9SkRpES9.js +3 -0
  179. package/server/{prompts-CbqaVjbe.js → prompts-Dp4Tpk39.js} +2 -2
  180. package/server/providers-DKkBXhxU.js +3 -0
  181. package/server/{providers-d3pwXGVE.js → providers-DV7ec8l7.js} +7 -7
  182. package/server/public/assets/{chunk-BO2N2NFS-BxYSL7J-.js → chunk-BO2N2NFS-CltymLRg.js} +4 -4
  183. package/server/public/assets/{diagram-OG6HWLK6-C_F9Q2as.js → diagram-OG6HWLK6-D2f6pjgA.js} +1 -1
  184. package/server/public/assets/{dist-DQNg4CiF.js → dist-BWR4qFiV.js} +1 -1
  185. package/server/public/assets/{dist-CLSlc6cV.js → dist-DEmlBBNQ.js} +3 -3
  186. package/server/public/assets/{ganttDiagram-6RSMTGT7-Cq0my-0C.js → ganttDiagram-6RSMTGT7-DnfiViPK.js} +1 -1
  187. package/server/public/assets/{highlighted-body-OFNGDK62-eZC03dGh.js → highlighted-body-OFNGDK62-B8Wrmj9H.js} +1 -1
  188. package/server/public/assets/index-CUr1xv8w.css +1 -0
  189. package/server/public/assets/{index-SLYGA8AQ.js → index-CsSuZQBI.js} +148 -145
  190. package/server/public/assets/{linear-6Fi3qnGg.js → linear-C9zFQpkX.js} +1 -1
  191. package/server/public/assets/mermaid-GHXKKRXX-BUAB8hqt.js +1 -0
  192. package/server/public/assets/{pieDiagram-4H26LBE5-Dpmc6xsv.js → pieDiagram-4H26LBE5-lR8H7Yjd.js} +1 -1
  193. package/server/public/assets/{prod-ojHllFvN.js → prod-B1jCQihw.js} +4 -4
  194. package/server/public/assets/{quadrantDiagram-W4KKPZXB-Ulr9gON5.js → quadrantDiagram-W4KKPZXB-CVQ2guem.js} +1 -1
  195. package/server/public/assets/{sankeyDiagram-5OEKKPKP-CwdHGXfL.js → sankeyDiagram-5OEKKPKP-eD1RB4gm.js} +1 -1
  196. package/server/public/assets/{xychartDiagram-2RQKCTM6-r-bEDzJh.js → xychartDiagram-2RQKCTM6-ChEC6dQn.js} +1 -1
  197. package/server/public/index.html +54 -10
  198. package/server/{pull-requests-D3N6HQzI.js → pull-requests--Ib2jTgy.js} +1 -1
  199. package/server/{pull-requests-CjjPj7v6.js → pull-requests-CXIhdCYD.js} +13 -11
  200. package/server/{queries-B5hl7lMQ.js → queries-6d7Cdtm7.js} +723 -110
  201. package/server/{rally-Dp0Gb1DN.js → rally-B708-nZn.js} +3 -3
  202. package/server/{rally-api-DGaFz5L5.js → rally-api-nY0ZANw3.js} +2 -2
  203. package/server/{rally-api-CKr0O4DJ.js → rally-api-yjQ0TfHd.js} +1 -1
  204. package/server/{rally-client-SVbjGvqj.js → rally-client-B1EJhfV0.js} +4 -4
  205. package/server/{rally-client-Cqf6EX_r.js → rally-client-CULK2XAY.js} +1 -1
  206. package/server/rally-njs_mJrt.js +3 -0
  207. package/server/reap-terminal-sessions-MWnqdLCJ.js +4 -0
  208. package/server/{reap-terminal-sessions-CjqRAGw7.js → reap-terminal-sessions-N3BTkmX_.js} +11 -28
  209. package/server/{rebuild-stack-DHqCLvLX.js → rebuild-stack-Dp4eLkt4.js} +6 -6
  210. package/server/{rebuild-stack-DjdpALr1.js → rebuild-stack-kA7XngID.js} +1 -1
  211. package/server/{reconstruct-cache-BqrCQt0o.js → reconstruct-cache-uWbZfjms.js} +6 -6
  212. package/server/record-t6V-3Dcj.js +3 -0
  213. package/server/{record-update-BlB8mpKO.js → record-update-DACtKh6_.js} +1 -1
  214. package/server/record-update-Dq0t2uBG.js +310 -0
  215. package/server/{recovery-trip-l1Hsi37x.js → recovery-trip-BJtIQuag.js} +2 -2
  216. package/server/{release-engine-CSI4K6Oj.js → release-engine-DZpmGGzb.js} +5 -5
  217. package/server/{release-set-BywwggrE.js → release-set-hnXd_kga.js} +3 -3
  218. package/server/{remote-DYziAkiZ.js → remote-4tiENDaI.js} +3 -3
  219. package/server/{remote-cnoeuDWn.js → remote-Br-ZWVIP.js} +3 -3
  220. package/server/{remote-agents-BNORDWAX.js → remote-agents-CRCg1L4H.js} +1 -1
  221. package/server/{remote-agents-CZ2rc8I0.js → remote-agents-nmty1mLu.js} +6 -6
  222. package/server/{remote-completion-W67FNQ-A.js → remote-completion-BbWNd10K.js} +13 -13
  223. package/server/resume-CcKqnTvE.js +3 -0
  224. package/server/{review-agent-CSswH985.js → review-agent-DJRO8EG8.js} +1 -1
  225. package/server/{review-agent-CqSqSHkU.js → review-agent-sKkE1FEL.js} +23 -23
  226. package/server/{review-artifacts-BBgnd5df.js → review-artifacts-BLbSC4ke.js} +5 -5
  227. package/server/{review-context-Ctp9BdNJ.js → review-context-BgX3lcCx.js} +9 -9
  228. package/server/{review-status-CCgPVK1h.js → review-status-A7quS5KJ.js} +56 -39
  229. package/server/review-status-C6n6-9f_.js +3 -0
  230. package/server/{review-status-enrichment-DtDRGpst.js → review-status-enrichment-tbOn_A_u.js} +3 -3
  231. package/server/review-status-source-CxuEjLGg.js +39 -0
  232. package/server/{review-status-sync-jnLgd04F.js → review-status-sync-BhSQ0d0l.js} +2 -2
  233. package/server/{review-status-sync-C792ksoJ.js → review-status-sync-To3-iS-N.js} +1 -1
  234. package/server/{review-verdict-feedback-D5lW0o3k.js → review-verdict-feedback-C1Kg8n7t.js} +1 -1
  235. package/server/{review-verdict-feedback-CMsIpTpy.js → review-verdict-feedback-CTRNtzXO.js} +7 -7
  236. package/server/{rollup-B3kQmNpl.js → rollup-B53Y81xK.js} +1 -1
  237. package/server/{rollup-CLj_AK9f.js → rollup-WA0VD-Rr.js} +8 -8
  238. package/server/{scanner-C4NeC4FE.js → scanner-D2743cp8.js} +11 -7
  239. package/server/{sequence-io-Ce-6grIY.js → sequence-io-Cg0zYj_E.js} +4 -4
  240. package/server/{sequencer-agent-Bpz0yGmG.js → sequencer-agent-BGY8gjg-.js} +5 -5
  241. package/server/server.js +1348 -963
  242. package/server/{service-CqAY8Kmk.js → service-DCpB_SGd.js} +154 -51
  243. package/server/{session-fork-uNo4rMRA.js → session-fork-BQ8_6H32.js} +2 -2
  244. package/server/{session-history-DUehL3KN.js → session-history-CVZDpS3c.js} +4 -4
  245. package/server/{settings-DP2OYLXL.js → settings-BZ5m1UCl.js} +3 -3
  246. package/server/settings-D0OSwos5.js +2 -0
  247. package/server/{settings-D9grjmaP.js → settings-ylxwqwQG.js} +2 -2
  248. package/server/{shadow-engineering-Bi_oIMtF.js → shadow-engineering-BlxG6Xye.js} +3 -3
  249. package/server/{shadow-state-CDxEuPlE.js → shadow-state-C2_epgx2.js} +1 -1
  250. package/server/{shadow-state-a_ztFBJe.js → shadow-state-Dh-HzF2J.js} +2 -2
  251. package/server/{shadow-utils-CyOg6_Xq.js → shadow-utils-4bvjn9b3.js} +2 -2
  252. package/server/{ship-log-DDcueaIR.js → ship-log-ClSMIzZX.js} +1 -1
  253. package/server/{smart-compaction-C1_VVLEd.js → smart-compaction-CHIxLr_d.js} +1 -1
  254. package/server/{smart-compaction--Oj65Uov.js → smart-compaction-r4pHQBIr.js} +7 -7
  255. package/server/{spawn-planning-session-AiUSsBnH.js → spawn-planning-session-DWAorh2B.js} +25 -20
  256. package/server/{spawn-planning-session-LFtK2QCE.js → spawn-planning-session-KC_UduxD.js} +1 -1
  257. package/server/{specialist-completion-qOgqdqXH.js → specialist-completion-BXhav38U.js} +1 -1
  258. package/server/{specialist-context-gjj8Z4Ii.js → specialist-context-DtrYvGJ-.js} +5 -5
  259. package/server/{specialist-handoff-logger-BsBNvVZv.js → specialist-handoff-logger-C45ouoZ6.js} +2 -2
  260. package/server/{specialist-logs-CSLtvPx6.js → specialist-logs-DJ3RzKxW.js} +3 -3
  261. package/server/{specialists-D0VBf8g_.js → specialists-D5fRZXmN.js} +1 -1
  262. package/server/specialists-DVj0hvaL.js +3 -0
  263. package/server/{specialists-CYRwELzc.js → specialists-DyFeedjn.js} +66 -76
  264. package/server/{specialists-DAegTvRt.js → specialists-JVO00bs7.js} +374 -220
  265. package/server/specs-nN45DG2X.js +3 -0
  266. package/server/{src-OLoJhUiJ.js → src-CG9mCkP6.js} +6 -6
  267. package/server/{src-BqTcrfO_.js → src-CMTQGyCK.js} +3 -3
  268. package/server/{src-Dpq1yFIl.js → src-U7_kTPEE.js} +338 -4
  269. package/server/{stack-health-I713ELld.js → stack-health-Df0YEZKa.js} +1 -1
  270. package/server/{stack-health-DV_f-lK0.js → stack-health-puygdaMd.js} +2 -2
  271. package/server/{stale-task-claims-CQSKZVq0.js → stale-task-claims-BbFwCTb0.js} +4 -4
  272. package/server/{staleness-BbsGxmF2.js → staleness-Bpy41ngS.js} +15 -3
  273. package/server/{staleness-zGp4P1hd.js → staleness-Cbl_w4Bw.js} +1 -1
  274. package/server/{state-home-DixkE-up.js → state-home-CIGjwNfJ.js} +119 -54
  275. package/server/state-migrate-Dkzaxvny.js +487 -0
  276. package/server/{stuck-remediation-BWkK_O7A.js → stuck-remediation-CzEov_fq.js} +27 -21
  277. package/server/{stuck-remediation-CTPRC2S5.js → stuck-remediation-sY_MHHgQ.js} +1 -1
  278. package/server/{substrate-bug-weights-service-DXd0ID83.js → substrate-bug-weights-service-BH66lhm7.js} +3 -3
  279. package/server/{summary-fork-CdLn8Chr.js → summary-fork-D8bXjCr7.js} +2 -2
  280. package/server/{summary-fork-f3DpgjXh.js → summary-fork-DHhJIsAL.js} +8 -8
  281. package/server/{supervisor-Ch8CDuoF.js → supervisor-BO-Zk_h-.js} +3 -3
  282. package/server/supervisor-BPy-o1A8.js +2 -0
  283. package/server/{swarm-readiness-C9P2iPap.js → swarm-readiness-CQ_fwUWF.js} +4 -4
  284. package/server/{system-prerequisites-DkoQBn1q.js → system-prerequisites-Bza0ffAh.js} +24 -44
  285. package/server/{teardown-workspace-D-5yMyit.js → teardown-workspace-CEgauF4U.js} +15 -15
  286. package/server/{test-agent-queue-BwpUpu-o.js → test-agent-queue-DXDt0Xa-.js} +7 -7
  287. package/server/{test-verdict-BRiSu7eW.js → test-verdict-CmUBK5cT.js} +1 -1
  288. package/server/{test-verdict-BQ1yx7d4.js → test-verdict-DFjjIHR5.js} +1 -1
  289. package/server/{tldr-daemon-DjxP5g6Y.js → tldr-daemon-BDtLOIlO.js} +2 -2
  290. package/server/{tldr-daemon-BJA7TkqS.js → tldr-daemon-DL566HbH.js} +1 -1
  291. package/server/tmux-DoThH6aj.js +3 -0
  292. package/server/{tmux-y1blSxks.js → tmux-ftABRAmc.js} +76 -44
  293. package/server/{token-LUrbM9sU.js → token-CsOhvw42.js} +2 -2
  294. package/server/{token-util-BZaDAQ8S.js → token-util-CTmczIfW.js} +1 -1
  295. package/server/token-util-DrHg8abn.js +3 -0
  296. package/server/{tracker-config-DSFZBdXP.js → tracker-config-B4itFzDo.js} +2 -2
  297. package/server/{tracker-utils-WtP_V-yn.js → tracker-utils-BePq_oj-.js} +1 -1
  298. package/server/{tracker-utils-DiceZN3a.js → tracker-utils-tnxxqROg.js} +2 -2
  299. package/server/{traefik-connect-BXqfOP4-.js → traefik-connect-m73vGebA.js} +1 -1
  300. package/server/{tunnel-DTng1rfQ.js → tunnel-B2vxjx_b.js} +3 -3
  301. package/server/{tunnel-WcJImbAC.js → tunnel-Cgj-IGIl.js} +1 -1
  302. package/server/{types-BjaZ1oqH.js → types-BBNjPcqU.js} +1 -1
  303. package/server/{types-DqeBMmJN.js → types-hraoaQIp.js} +1 -1
  304. package/server/{uat-train-BpLnp7Cx.js → uat-train-CuEn0t9M.js} +28 -28
  305. package/server/{uat-train-Wismge7h.js → uat-train-cKfM-_WW.js} +1 -1
  306. package/server/{validation-BA4e5EGm.js → validation-B5JxoPUS.js} +259 -9
  307. package/server/{validation-CUWamZ4X.js → validation-CIi6pnI2.js} +1 -1
  308. package/server/{verification-artifact-Dr_0g9nb.js → verification-artifact-BcnIbigL.js} +1 -1
  309. package/server/{verification-artifact-CrbI4tJE.js → verification-artifact-C-lIHfUa.js} +1 -1
  310. package/server/{verification-runner-gAzh3cVD.js → verification-runner-Br0S_Ous.js} +103 -37
  311. package/server/{verification-runner-Dcksl_P-.js → verification-runner-CDj4lD4t.js} +1 -1
  312. package/server/{vtt-parser-3VZKsmSm.js → vtt-parser-DKpNNW5i.js} +1 -1
  313. package/server/{work-agent-prompt-ULdcANl5.js → work-agent-prompt-Yb2bd3Fq.js} +16 -15
  314. package/server/{workflows-B8ROFlfw.js → workflows-C9WmILql.js} +39 -77
  315. package/server/workflows-D90rMOya.js +2 -0
  316. package/server/{workspace-DhTDA8nB.js → workspace-BVl4rihN.js} +3 -3
  317. package/server/{workspace-DSjUJaJN.js → workspace-DuUdndHe.js} +1 -1
  318. package/server/{workspace-config-BAAsAv-o.js → workspace-config-cEGcO6UT.js} +1 -1
  319. package/server/{workspace-manager-CcujONCR.js → workspace-manager-ZTdJAy9M.js} +1 -1
  320. package/server/{workspace-manager-DsN52IMG.js → workspace-manager-hLUv3ADC.js} +23 -16
  321. package/server/{workspace-metadata-DIL5_U4c.js → workspace-metadata-CskwzzhL.js} +2 -2
  322. package/server/{workspace-metadata-CftOpNLs.js → workspace-metadata-DNpMixRq.js} +1 -1
  323. package/server/{workspaces-Dmlh1YXm.js → workspaces-hWvy9eKs.js} +276 -110
  324. package/sync-sources/agents/pan-inspect-agent.md +1 -1
  325. package/sync-sources/agents/pan-merge-agent.md +1 -1
  326. package/sync-sources/agents/pan-planning-agent.md +4 -4
  327. package/sync-sources/agents/pan-work-agent.md +1 -1
  328. package/sync-sources/dev-skills/pan-commit/SKILL.md +1 -1
  329. package/sync-sources/dev-skills/test-specialist-workflow/SKILL.md +1 -1
  330. package/sync-sources/hooks/record-cost-event.js +363 -71
  331. package/sync-sources/hooks/session-start-hook +7 -0
  332. package/sync-sources/hooks/work-agent-stop-hook +1 -1
  333. package/sync-sources/rules/per-bead-durability.md +1 -1
  334. package/sync-sources/rules/prd-authoring.md +1 -1
  335. package/sync-sources/skills/feature-work/SKILL.md +1 -1
  336. package/sync-sources/skills/pan/SKILL.md +2 -2
  337. package/sync-sources/skills/pan-admin-config/SKILL.md +1 -0
  338. package/sync-sources/skills/pan-approve/SKILL.md +1 -1
  339. package/sync-sources/skills/pan-close/SKILL.md +1 -1
  340. package/sync-sources/skills/pan-doctor/SKILL.md +1 -1
  341. package/sync-sources/skills/pan-new-project/SKILL.md +9 -11
  342. package/sync-sources/skills/pan-oversee/SKILL.md +5 -5
  343. package/sync-sources/skills/pan-plan/SKILL.md +6 -6
  344. package/sync-sources/skills/pan-quickstart/SKILL.md +1 -1
  345. package/sync-sources/skills/pan-recap/SKILL.md +2 -2
  346. package/sync-sources/skills/pan-review/SKILL.md +1 -1
  347. package/sync-sources/skills/pan-start/SKILL.md +26 -3
  348. package/sync-sources/skills/pan-swarm/SKILL.md +1 -1
  349. package/sync-sources/skills/pan-sync/SKILL.md +1 -1
  350. package/sync-sources/skills/pan-task/SKILL.md +2 -2
  351. package/sync-sources/skills/pan-wipe/SKILL.md +2 -2
  352. package/sync-sources/skills/pipeline-list/SKILL.md +1 -1
  353. package/sync-sources/skills/pipeline-status/SKILL.md +2 -2
  354. package/sync-sources/skills/plan/SKILL.md +11 -11
  355. package/sync-sources/skills/write-vbrief/SKILL.md +7 -282
  356. package/sync-sources/skills/write-xbrief/SKILL.md +295 -0
  357. package/sync-sources/templates/claude-md/sections/warnings.md +1 -1
  358. package/server/agent-state-BV_6RHnO.js +0 -3
  359. package/server/agents-Czz6R57Z.js +0 -3
  360. package/server/cli-ChErG518.js +0 -3
  361. package/server/codex-BBeZ8c3s.js +0 -3
  362. package/server/deacon-swarm-uudlSCLM.js +0 -2
  363. package/server/dist-BEDL2alY.js +0 -3
  364. package/server/forge-DbhJyH6u.js +0 -2
  365. package/server/git-utils-Bkxzr1Xf.js +0 -129
  366. package/server/hume-BrA1tUuk.js +0 -3
  367. package/server/inspect-agent-CyXNo9fM.js +0 -2
  368. package/server/lifecycle-io-CUpsxG0p.js +0 -3
  369. package/server/merge-ops-BpTtuO8x.js +0 -2
  370. package/server/projects-IRHJIPYC.js +0 -3
  371. package/server/providers-BqCdTryq.js +0 -3
  372. package/server/public/assets/index-C6NLz_1S.css +0 -1
  373. package/server/public/assets/mermaid-GHXKKRXX-BNwFoQsf.js +0 -1
  374. package/server/rally-DGimSRBQ.js +0 -3
  375. package/server/reap-terminal-sessions-C1mfzoZo.js +0 -3
  376. package/server/record-update-RviRDSNs.js +0 -168
  377. package/server/record-us0YECMO.js +0 -3
  378. package/server/resume-OyN3dEXE.js +0 -3
  379. package/server/review-status-DXeqFpk5.js +0 -3
  380. package/server/settings-BaPXXJsT.js +0 -2
  381. package/server/specialists-C6WkeKFK.js +0 -3
  382. package/server/specs-BsNcum0h.js +0 -3
  383. package/server/state-migrate-_zJJ6XKE.js +0 -362
  384. package/server/supervisor-Qy1QecAs.js +0 -2
  385. package/server/tmux-HQLgwo_C.js +0 -3
  386. package/server/token-util-Cg-QnowA.js +0 -3
  387. package/server/workflows-C5c-RPsY.js +0 -2
@@ -1,5 +1,5 @@
1
1
  import { n as __esmMin } from "./rolldown-runtime-DNCzzKnI.js";
2
- import { o as getPricingSync, s as init_cost } from "./cost-Drm7qeD5.js";
2
+ import { o as getPricingSync, s as init_cost } from "./cost-Ca0YTWDw.js";
3
3
  import { existsSync, readFileSync } from "node:fs";
4
4
  //#region ../../lib/cost-parsers/codex-parser.ts
5
5
  /**
@@ -244,4 +244,4 @@ var init_codex_parser = __esmMin((() => {
244
244
  //#endregion
245
245
  export { parseCodexSessionCostEventsSync as n, parseCodexSessionSync as r, init_codex_parser as t };
246
246
 
247
- //# sourceMappingURL=codex-parser-BTzlOZiV.js.map
247
+ //# sourceMappingURL=codex-parser-C4gSH-IR.js.map
@@ -1,5 +1,5 @@
1
1
  import { n as __esmMin } from "./rolldown-runtime-DNCzzKnI.js";
2
- import { Fr as CONFIG_FILE, Or as init_errors, f as loadConfigSync$1, t as init_config_yaml, ti as init_paths, vr as FsError } from "./config-yaml-Ciyp2mYe.js";
2
+ import { Vr as init_paths, f as loadConfigSync$1, ir as FsError, mr as init_errors, t as init_config_yaml, xr as CONFIG_FILE } from "./config-yaml-DvyMuOle.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-CrduXs4a.js.map
256
+ //# sourceMappingURL=config-CCvjQf27.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-CrduXs4a.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-CCvjQf27.js";
2
2
  init_config();
3
3
  export { checkDevrootDeprecation, findDevrootForProject, findDevrootForProjectSync, getConversationsConfig, getConversationsConfigSync, getDashboardApiUrl, getDashboardApiUrlSync, getDefaultConfig, getDefaultConfigSync, getDevrootPath, getDevrootPathSync, loadConfig, loadConfigSync, normalizeRemoteConfig, saveConfig, saveConfigSync };
@@ -1,5 +1,5 @@
1
1
  import { n as __esmMin } from "./rolldown-runtime-DNCzzKnI.js";
2
- import { Or as init_errors, Rr as OVERDECK_HOME, _r as ConfigError, ti as init_paths, vr as FsError } from "./config-yaml-Ciyp2mYe.js";
2
+ import { Vr as init_paths, ir as FsError, mr as init_errors, rr as ConfigError, wr as OVERDECK_HOME } from "./config-yaml-DvyMuOle.js";
3
3
  import { t as require_toml } from "./toml-CeLDATih.js";
4
4
  import { Effect } from "effect";
5
5
  import { existsSync, mkdirSync, readFileSync, writeFileSync } from "fs";
@@ -289,4 +289,4 @@ var init_config = __esmMin((() => {
289
289
  //#endregion
290
290
  export { loadCloisterConfigSync as a, loadCloisterConfig as i, getHealthThresholdsMs as n, saveCloisterConfigSync as o, init_config as r, shouldAutoStart as s, DEFAULT_CLOISTER_CONFIG as t };
291
291
 
292
- //# sourceMappingURL=config-G1TOMJZA.js.map
292
+ //# sourceMappingURL=config-DjLOdbgT.js.map
@@ -7564,9 +7564,11 @@ function stateMigrationLockPath(projectKey) {
7564
7564
  return join(getOverdeckHome(), "locks", "state-migration", `${projectKey}.lock`);
7565
7565
  }
7566
7566
  function isStateMigrationLocked(projectKey) {
7567
+ const path = stateMigrationLockPath(projectKey);
7568
+ mkdirSync$1(dirname(path), { recursive: true });
7567
7569
  try {
7568
- closeSync$1(openSync$1(stateMigrationLockPath(projectKey), "wx"));
7569
- rmSync$1(stateMigrationLockPath(projectKey));
7570
+ closeSync$1(openSync$1(path, "wx"));
7571
+ rmSync$1(path);
7570
7572
  return false;
7571
7573
  } catch {
7572
7574
  return true;
@@ -7768,7 +7770,7 @@ function isAutoCommitExcludedPath(relativePath) {
7768
7770
  return false;
7769
7771
  }
7770
7772
  /** Run a git subcommand. Fails with GitError on non-zero exit. */
7771
- function runGit(args, cwd) {
7773
+ function runGitRaw(args, cwd) {
7772
7774
  return Effect.gen(function* () {
7773
7775
  const handle = yield* ChildProcess.make("git", [...args], {
7774
7776
  cwd,
@@ -7788,10 +7790,13 @@ function runGit(args, cwd) {
7788
7790
  stderr: stderrBuf.toString("utf-8"),
7789
7791
  exitCode
7790
7792
  };
7791
- }).pipe(Effect.scoped, Effect.provide(spawnerLayer), Effect.catchCause((cause) => Effect.fail(causeToGitError(cause, args))));
7793
+ }).pipe(Effect.scoped, Effect.provide(spawnerLayer));
7794
+ }
7795
+ function runGit(args, cwd) {
7796
+ return runGitWithTimeout(args, cwd, parsePositiveInteger(process.env.OVERDECK_STATE_GIT_TIMEOUT_MS, DEFAULT_STATE_GIT_TIMEOUT_MS));
7792
7797
  }
7793
7798
  function runGitWithTimeout(args, cwd, timeoutMs) {
7794
- return runGit(args, cwd).pipe(Effect.timeout(Duration.millis(timeoutMs)), Effect.catchCause((cause) => Effect.fail(causeToGitError(cause, args))));
7799
+ return runGitRaw(args, cwd).pipe(Effect.timeout(Duration.millis(timeoutMs)), Effect.catchCause((cause) => Effect.fail(causeToGitError(cause, args))));
7795
7800
  }
7796
7801
  function causeToGitError(cause, args) {
7797
7802
  const squashed = Cause.squash(cause);
@@ -7885,11 +7890,13 @@ function reconcileStatePlaneDrift(projectRoot) {
7885
7890
  });
7886
7891
  }
7887
7892
  /**
7888
- * Force a flush of any pending commits for `projectRoot`. Returns an Effect that
7889
- * resolves after the commit attempt (success or no-op).
7893
+ * Force a flush of every pending or active commit that targets the same Git
7894
+ * checkout as `projectRoot`. Callers may pass either a logical project root or
7895
+ * the effective Git root; the Effect resolves only after every matching writer
7896
+ * has settled.
7890
7897
  */
7891
- function flushAutoCommits(projectRoot) {
7892
- return Effect.promise(() => flushPromise(projectRoot));
7898
+ function flushAutoCommits(projectRoot, signal) {
7899
+ return Effect.promise(() => flushPromise(projectRoot, signal));
7893
7900
  }
7894
7901
  /**
7895
7902
  * Force a flush of every project root with a pending auto-commit. Used during
@@ -7898,29 +7905,116 @@ function flushAutoCommits(projectRoot) {
7898
7905
  */
7899
7906
  function flushAllPendingAutoCommits() {
7900
7907
  return Effect.promise(() => {
7901
- const projectRoots = Array.from(pending.keys());
7908
+ const projectRoots = [...new Set([...pending.keys(), ...active.keys()])];
7902
7909
  return Promise.all(projectRoots.map((projectRoot) => flushPromise(projectRoot)));
7903
7910
  });
7904
7911
  }
7905
- function flushPromise(projectRoot) {
7906
- const batch = pending.get(projectRoot);
7907
- if (!batch) return Promise.resolve({
7908
- committed: false,
7909
- reason: "no pending"
7910
- });
7911
- clearTimeout(batch.timer);
7912
- return flushInner(projectRoot);
7912
+ function flushPromise(projectRoot, signal) {
7913
+ const gitRoot = pending.get(projectRoot)?.repoRoot ?? active.get(projectRoot)?.gitRoot ?? projectRoot;
7914
+ const matching = /* @__PURE__ */ new Set();
7915
+ for (const [queuedProjectRoot, batch] of pending) {
7916
+ if ((batch.repoRoot ?? queuedProjectRoot) !== gitRoot) continue;
7917
+ clearTimeout(batch.timer);
7918
+ const started = flushInner(queuedProjectRoot);
7919
+ if (started) matching.add(started);
7920
+ }
7921
+ for (const activeFlush of active.values()) if (activeFlush.gitRoot === gitRoot) matching.add(activeFlush);
7922
+ if (matching.size === 0) {
7923
+ signal?.throwIfAborted();
7924
+ return Promise.resolve({
7925
+ committed: false,
7926
+ reason: "no pending"
7927
+ });
7928
+ }
7929
+ return waitForFlushes(gitRoot, [...matching], signal);
7913
7930
  }
7914
7931
  function flushInner(projectRoot) {
7915
7932
  const batch = pending.get(projectRoot);
7916
- if (!batch) return Promise.resolve({
7917
- committed: false,
7918
- reason: "no pending"
7919
- });
7933
+ if (!batch) return active.get(projectRoot);
7920
7934
  pending.delete(projectRoot);
7921
- const task = serializer.then(() => Effect.runPromise(doCommit(projectRoot, batch)));
7922
- serializer = task.catch(() => void 0);
7923
- return task;
7935
+ return startSerializedFlush(projectRoot, batch.repoRoot ?? projectRoot, doBoundedCommit(projectRoot, batch));
7936
+ }
7937
+ function startSerializedFlush(projectRoot, gitRoot, operation) {
7938
+ const prior = serializers.get(gitRoot) ?? Promise.resolve();
7939
+ const controller = new AbortController();
7940
+ const promise = prior.then(() => {
7941
+ controller.signal.throwIfAborted();
7942
+ return Effect.runPromise(operation, { signal: controller.signal });
7943
+ });
7944
+ const activeFlush = {
7945
+ controller,
7946
+ gitRoot,
7947
+ promise
7948
+ };
7949
+ active.set(projectRoot, activeFlush);
7950
+ const tail = promise.catch(() => void 0);
7951
+ serializers.set(gitRoot, tail);
7952
+ promise.then(() => clearActiveFlush(projectRoot, activeFlush, tail), () => clearActiveFlush(projectRoot, activeFlush, tail));
7953
+ return activeFlush;
7954
+ }
7955
+ async function waitForFlushes(gitRoot, activeFlushes, signal) {
7956
+ const completion = Promise.all(activeFlushes.map((flush) => flush.promise)).then(combineFlushResults);
7957
+ if (!signal) return completion;
7958
+ if (signal.aborted) {
7959
+ await abortAndSettleGitRoot(gitRoot, signal.reason);
7960
+ throw signal.reason;
7961
+ }
7962
+ return new Promise((resolve, reject) => {
7963
+ let completed = false;
7964
+ const onAbort = () => {
7965
+ if (completed) return;
7966
+ completed = true;
7967
+ signal.removeEventListener("abort", onAbort);
7968
+ abortAndSettleGitRoot(gitRoot, signal.reason).then(() => reject(signal.reason), reject);
7969
+ };
7970
+ signal.addEventListener("abort", onAbort, { once: true });
7971
+ completion.then((result) => {
7972
+ if (completed) return;
7973
+ completed = true;
7974
+ signal.removeEventListener("abort", onAbort);
7975
+ resolve(result);
7976
+ }, (error) => {
7977
+ if (completed) return;
7978
+ completed = true;
7979
+ signal.removeEventListener("abort", onAbort);
7980
+ reject(error);
7981
+ });
7982
+ if (signal.aborted) onAbort();
7983
+ });
7984
+ }
7985
+ function combineFlushResults(results) {
7986
+ if (results.length === 1) return results[0];
7987
+ const combined = { committed: results.some((result) => result.committed) };
7988
+ const committed = results.filter((result) => result.committed);
7989
+ if (committed.some((result) => result.pushed === false)) combined.pushed = false;
7990
+ else if (committed.length > 0 && committed.every((result) => result.pushed === true)) combined.pushed = true;
7991
+ if (results.some((result) => result.errored)) combined.errored = true;
7992
+ const reasons = results.flatMap((result) => result.reason ? [result.reason] : []);
7993
+ if (reasons.length > 0) combined.reason = reasons.join("; ");
7994
+ return combined;
7995
+ }
7996
+ async function abortAndSettleGitRoot(gitRoot, reason) {
7997
+ const matching = [...active.values()].filter((flush) => flush.gitRoot === gitRoot);
7998
+ for (const flush of matching) flush.controller.abort(reason);
7999
+ await Promise.allSettled(matching.map((flush) => flush.promise));
8000
+ }
8001
+ function clearActiveFlush(projectRoot, activeFlush, tail) {
8002
+ if (active.get(projectRoot) === activeFlush) active.delete(projectRoot);
8003
+ if (serializers.get(activeFlush.gitRoot) === tail) serializers.delete(activeFlush.gitRoot);
8004
+ }
8005
+ function doBoundedCommit(projectRoot, batch) {
8006
+ return boundStateFlush(doCommit(projectRoot, batch));
8007
+ }
8008
+ function boundStateFlush(operation, timeoutMs = parsePositiveInteger(process.env.OVERDECK_STATE_FLUSH_TIMEOUT_MS, DEFAULT_STATE_FLUSH_TIMEOUT_MS)) {
8009
+ return operation.pipe(Effect.timeout(Duration.millis(timeoutMs)), Effect.catchCause((cause) => {
8010
+ const reason = `state writer timed out after ${timeoutMs / 1e3}s: ${String(Cause.squash(cause))}`;
8011
+ console.warn(`[pan-dir/auto-commit] ${reason}`);
8012
+ return Effect.succeed({
8013
+ committed: false,
8014
+ errored: true,
8015
+ reason
8016
+ });
8017
+ }));
7924
8018
  }
7925
8019
  function doCommit(projectRoot, batch) {
7926
8020
  const gitRoot = batch.repoRoot ?? projectRoot;
@@ -8174,7 +8268,7 @@ function relativizeToRoot(absOrRel, projectRoot) {
8174
8268
  if (absOrRel.startsWith(rootPrefix)) return absOrRel.slice(rootPrefix.length);
8175
8269
  return absOrRel;
8176
8270
  }
8177
- var spawnerLayer, DEFAULT_STATE_PUSH_TIMEOUT_MS, AUTO_COMMIT_EXCLUDED_PATHS, pending, serializer;
8271
+ var spawnerLayer, DEFAULT_STATE_GIT_TIMEOUT_MS, DEFAULT_STATE_PUSH_TIMEOUT_MS, DEFAULT_STATE_FLUSH_TIMEOUT_MS, AUTO_COMMIT_EXCLUDED_PATHS, pending, active, serializers;
8178
8272
  var init_auto_commit = __esmMin((() => {
8179
8273
  init_errors();
8180
8274
  init_projects();
@@ -8182,7 +8276,9 @@ var init_auto_commit = __esmMin((() => {
8182
8276
  init_state_migration_lock();
8183
8277
  init_state_plane();
8184
8278
  spawnerLayer = NodeChildProcessSpawner.layer.pipe(Layer.provide(Layer.mergeAll(NodeFileSystem.layer, NodePath.layer)));
8279
+ DEFAULT_STATE_GIT_TIMEOUT_MS = 3e4;
8185
8280
  DEFAULT_STATE_PUSH_TIMEOUT_MS = 3e4;
8281
+ DEFAULT_STATE_FLUSH_TIMEOUT_MS = 6e4;
8186
8282
  AUTO_COMMIT_EXCLUDED_PATHS = [
8187
8283
  ".pan/kickoff.md",
8188
8284
  ".pan/continue.json",
@@ -8192,7 +8288,8 @@ var init_auto_commit = __esmMin((() => {
8192
8288
  ".claude/skills/"
8193
8289
  ];
8194
8290
  pending = /* @__PURE__ */ new Map();
8195
- serializer = Promise.resolve();
8291
+ active = /* @__PURE__ */ new Map();
8292
+ serializers = /* @__PURE__ */ new Map();
8196
8293
  }));
8197
8294
  //#endregion
8198
8295
  //#region ../../lib/pan-dir/record.ts
@@ -8311,7 +8408,7 @@ function preserveCorruptRecordSync(path) {
8311
8408
  * renamed file parses as JSON. A mid-write crash can no longer truncate the
8312
8409
  * record in place (rename is atomic); a write that somehow produces unparseable
8313
8410
  * bytes throws instead of leaving a corrupt record for readers to silently
8314
- * fabricate over. Modeled on writePlanFileAtomic (src/lib/vbrief/dag-cli.ts:101).
8411
+ * fabricate over. Modeled on writePlanFileAtomic (src/lib/xbrief/dag-cli.ts:101).
8315
8412
  */
8316
8413
  function writeRecordFileAtomicSync(path, record) {
8317
8414
  preserveCorruptRecordSync(path);
@@ -8346,27 +8443,6 @@ function writeIssueRecordSync(project, issueId, record) {
8346
8443
  });
8347
8444
  return path;
8348
8445
  }
8349
- /**
8350
- * Workspace-scoped synchronous whole-record writer. Keep this call atomic: async
8351
- * read-modify-write flows must take `withIssueRecordLock` before reading and
8352
- * must not split this write behind an await.
8353
- */
8354
- function writeIssueRecordForWorkspaceSync(workspacePath, issueId, record) {
8355
- const resolvedProject = resolveProjectForIssue(issueId);
8356
- const path = getIssueRecordPathForWorkspace(workspacePath, issueId);
8357
- const dir = dirname(path);
8358
- if (!existsSync$1(dir)) mkdirSync$1(dir, { recursive: true });
8359
- const now = (/* @__PURE__ */ new Date()).toISOString();
8360
- writeRecordFileAtomicSync(path, {
8361
- ...preserveCloseOutSync(path, record),
8362
- issueId: issueId.toUpperCase(),
8363
- schemaVersion: 2,
8364
- created: record.created || now,
8365
- updated: now
8366
- });
8367
- if (resolvedProject) queueIssueRecordCommit(resolvedProject, issueId, path);
8368
- return path;
8369
- }
8370
8446
  async function readIssueRecord(project, issueId) {
8371
8447
  const path = getIssueRecordPath(project, issueId);
8372
8448
  try {
@@ -8404,48 +8480,6 @@ function queueIssueRecordCommit(project, issueId, recordPath) {
8404
8480
  });
8405
8481
  return basePath;
8406
8482
  }
8407
- /** Build this node's owner URI: pan://host[:port]. */
8408
- function buildOwnUri() {
8409
- const port = process.env.OVERDECK_PORT ? `:${process.env.OVERDECK_PORT}` : "";
8410
- return `pan://${hostname()}${port}`;
8411
- }
8412
- async function claimIssueOwner(project, issueId, ownUri = buildOwnUri()) {
8413
- const record = await readIssueRecord(project, issueId) ?? {
8414
- issueId,
8415
- schemaVersion: 2,
8416
- pipeline: {
8417
- issueId,
8418
- reviewStatus: "pending",
8419
- testStatus: "pending",
8420
- readyForMerge: false,
8421
- updatedAt: (/* @__PURE__ */ new Date()).toISOString()
8422
- },
8423
- closeOut: {
8424
- usage: {
8425
- byStage: {},
8426
- totals: {}
8427
- },
8428
- merges: [],
8429
- ranOn: hostname()
8430
- }
8431
- };
8432
- if (record.owner && record.owner !== ownUri) return {
8433
- ok: false,
8434
- owner: record.owner
8435
- };
8436
- record.owner = ownUri;
8437
- queueIssueRecordCommit(project, issueId, writeIssueRecordSync(project, issueId, record));
8438
- return {
8439
- ok: true,
8440
- owner: ownUri
8441
- };
8442
- }
8443
- async function clearIssueOwner(project, issueId) {
8444
- const record = await readIssueRecord(project, issueId);
8445
- if (!record) return;
8446
- delete record.owner;
8447
- queueIssueRecordCommit(project, issueId, writeIssueRecordSync(project, issueId, record));
8448
- }
8449
8483
  /** Ensure a base record exists for an issue. */
8450
8484
  async function ensureIssueRecord(project, issueId) {
8451
8485
  const existing = await readIssueRecord(project, issueId);
@@ -8473,43 +8507,6 @@ async function ensureIssueRecord(project, issueId) {
8473
8507
  }
8474
8508
  };
8475
8509
  }
8476
- /** Write a single status override into the per-issue record. */
8477
- async function writeStatusOverride(project, issueId, key, status, opts = {}) {
8478
- const existing = await readIssueRecord(project, issueId);
8479
- if (existing?.statusOverrides?.[key] === status) return;
8480
- const record = existing ?? await ensureIssueRecord(project, issueId);
8481
- record.statusOverrides = {
8482
- ...record.statusOverrides ?? {},
8483
- [key]: status
8484
- };
8485
- const recordPath = writeIssueRecordSync(project, issueId, record);
8486
- if (opts.autoCommit !== false) queueIssueRecordCommit(project, issueId, recordPath);
8487
- }
8488
- /** Synchronous variant for legacy CLI call sites. */
8489
- function writeStatusOverrideSync(project, issueId, key, status, opts = {}) {
8490
- const existing = readIssueRecordSync(project, issueId);
8491
- if (existing?.statusOverrides?.[key] === status) return;
8492
- const record = existing ?? ensureIssueRecordSync(project, issueId);
8493
- record.statusOverrides = {
8494
- ...record.statusOverrides ?? {},
8495
- [key]: status
8496
- };
8497
- const recordPath = writeIssueRecordSync(project, issueId, record);
8498
- if (opts.autoCommit !== false) queueIssueRecordCommit(project, issueId, recordPath);
8499
- }
8500
- /** Synchronous variant that writes many overrides at once. */
8501
- function writeStatusOverridesSync(project, issueId, overrides, opts = {}) {
8502
- const existing = readIssueRecordSync(project, issueId);
8503
- const nextOverrides = {
8504
- ...existing?.statusOverrides ?? {},
8505
- ...overrides
8506
- };
8507
- if (existing && JSON.stringify(existing.statusOverrides) === JSON.stringify(nextOverrides)) return;
8508
- const record = existing ?? ensureIssueRecordSync(project, issueId);
8509
- record.statusOverrides = nextOverrides;
8510
- const recordPath = writeIssueRecordSync(project, issueId, record);
8511
- if (opts.autoCommit !== false) queueIssueRecordCommit(project, issueId, recordPath);
8512
- }
8513
8510
  /** Synchronous variant of ensureIssueRecord. */
8514
8511
  function ensureIssueRecordSync(project, issueId) {
8515
8512
  const path = getIssueRecordPath(project, issueId);
@@ -8548,23 +8545,6 @@ async function appendSessionEntry(project, issueId, entry, opts = {}) {
8548
8545
  const recordPath = writeIssueRecordSync(project, issueId, record);
8549
8546
  if (opts.autoCommit !== false) queueIssueRecordCommit(project, issueId, recordPath);
8550
8547
  }
8551
- /** Append a feedback entry to the per-issue record. */
8552
- async function appendFeedbackEntry(project, issueId, entry, opts = {}) {
8553
- const record = await ensureIssueRecord(project, issueId);
8554
- record.feedback = [...record.feedback ?? [], entry];
8555
- const recordPath = writeIssueRecordSync(project, issueId, record);
8556
- if (opts.autoCommit !== false) queueIssueRecordCommit(project, issueId, recordPath);
8557
- }
8558
- /** Store harness + model in the per-issue record. */
8559
- async function writeAgentHarnessModel(project, issueId, harness, model, opts = {}) {
8560
- const existing = await readIssueRecord(project, issueId);
8561
- if (existing?.harness === harness && existing?.model === model) return;
8562
- const record = existing ?? await ensureIssueRecord(project, issueId);
8563
- record.harness = harness;
8564
- record.model = model;
8565
- const recordPath = writeIssueRecordSync(project, issueId, record);
8566
- if (opts.autoCommit !== false) queueIssueRecordCommit(project, issueId, recordPath);
8567
- }
8568
8548
  /** Synchronous variant for legacy CLI spawn paths. */
8569
8549
  function writeAgentHarnessModelSync(project, issueId, harness, model, opts = {}) {
8570
8550
  const existing = readIssueRecordSync(project, issueId);
@@ -8605,19 +8585,6 @@ function clearRecordFeedbackSync(project, issueId) {
8605
8585
  record.feedback = [];
8606
8586
  queueIssueRecordCommit(project, issueId, writeIssueRecordSync(project, issueId, record));
8607
8587
  }
8608
- /** Record advisory scope prediction drift in the per-issue record (sync). */
8609
- function writeRecordScopeDriftSync(project, issueId, scopeDrift) {
8610
- const record = ensureIssueRecordSync(project, issueId);
8611
- record.scopeDrift = scopeDrift;
8612
- queueIssueRecordCommit(project, issueId, writeIssueRecordSync(project, issueId, record));
8613
- }
8614
- /** Write tiered execution override into the per-issue record (sync). Passing null clears the override. */
8615
- function writeRecordTieredExecutionOverrideSync(project, issueId, override) {
8616
- const record = ensureIssueRecordSync(project, issueId);
8617
- if (override === null) delete record.tieredExecutionOverride;
8618
- else record.tieredExecutionOverride = override;
8619
- queueIssueRecordCommit(project, issueId, writeIssueRecordSync(project, issueId, record));
8620
- }
8621
8588
  /** Write tiered execution override into the per-issue record (async). Passing null clears the override. */
8622
8589
  async function writeRecordTieredExecutionOverride(project, issueId, override) {
8623
8590
  const record = await ensureIssueRecord(project, issueId);
@@ -8637,12 +8604,6 @@ function markRecordPipelineClosedOutSync(project, issueId) {
8637
8604
  record.pipeline.updatedAt = now;
8638
8605
  queueIssueRecordCommit(project, issueId, writeIssueRecordSync(project, issueId, record));
8639
8606
  }
8640
- /** Persist the completed Definition-of-Done gate through the issue record write door. */
8641
- function writeCloseOutDodGateSync(project, issueId, dodGate) {
8642
- const record = ensureIssueRecordSync(project, issueId);
8643
- record.closeOut.dodGate = dodGate;
8644
- queueIssueRecordCommit(project, issueId, writeIssueRecordSync(project, issueId, record));
8645
- }
8646
8607
  async function writeCloseOutDodGate(project, issueId, dodGate) {
8647
8608
  const recordPath = getIssueRecordPath(project, issueId);
8648
8609
  const record = await readIssueRecord(project, issueId);
@@ -8668,48 +8629,6 @@ async function writeCloseOutDodGate(project, issueId, dodGate) {
8668
8629
  JSON.parse(await promises$1.readFile(recordPath, "utf-8"));
8669
8630
  queueIssueRecordCommit(project, issueId, recordPath);
8670
8631
  }
8671
- /** Write decisions into the per-issue record (sync). */
8672
- function writeRecordDecisionsSync(project, issueId, decisions, opts = {}) {
8673
- const record = ensureIssueRecordSync(project, issueId);
8674
- record.decisions = decisions;
8675
- const recordPath = writeIssueRecordSync(project, issueId, record);
8676
- if (opts.autoCommit !== false) queueIssueRecordCommit(project, issueId, recordPath);
8677
- }
8678
- /** Write decisions into the per-issue record (async). */
8679
- async function writeRecordDecisions(project, issueId, decisions, opts = {}) {
8680
- const record = await ensureIssueRecord(project, issueId);
8681
- record.decisions = decisions;
8682
- const recordPath = writeIssueRecordSync(project, issueId, record);
8683
- if (opts.autoCommit !== false) queueIssueRecordCommit(project, issueId, recordPath);
8684
- }
8685
- /** Write hazards into the per-issue record (sync). */
8686
- function writeRecordHazardsSync(project, issueId, hazards, opts = {}) {
8687
- const record = ensureIssueRecordSync(project, issueId);
8688
- record.hazards = hazards;
8689
- const recordPath = writeIssueRecordSync(project, issueId, record);
8690
- if (opts.autoCommit !== false) queueIssueRecordCommit(project, issueId, recordPath);
8691
- }
8692
- /** Write hazards into the per-issue record (async). */
8693
- async function writeRecordHazards(project, issueId, hazards, opts = {}) {
8694
- const record = await ensureIssueRecord(project, issueId);
8695
- record.hazards = hazards;
8696
- const recordPath = writeIssueRecordSync(project, issueId, record);
8697
- if (opts.autoCommit !== false) queueIssueRecordCommit(project, issueId, recordPath);
8698
- }
8699
- /** Write resumePoint into the per-issue record (sync). */
8700
- function writeRecordResumePointSync(project, issueId, resumePoint, opts = {}) {
8701
- const record = ensureIssueRecordSync(project, issueId);
8702
- record.resumePoint = resumePoint;
8703
- const recordPath = writeIssueRecordSync(project, issueId, record);
8704
- if (opts.autoCommit !== false) queueIssueRecordCommit(project, issueId, recordPath);
8705
- }
8706
- /** Write resumePoint into the per-issue record (async). */
8707
- async function writeRecordResumePoint(project, issueId, resumePoint, opts = {}) {
8708
- const record = await ensureIssueRecord(project, issueId);
8709
- record.resumePoint = resumePoint;
8710
- const recordPath = writeIssueRecordSync(project, issueId, record);
8711
- if (opts.autoCommit !== false) queueIssueRecordCommit(project, issueId, recordPath);
8712
- }
8713
8632
  /** Infer a minimal ProjectConfig from a workspace path (tests / fallback).
8714
8633
  *
8715
8634
  * Returns a config whose `path` is the workspace directory itself so that
@@ -8727,12 +8646,11 @@ function resolveProjectForIssue(issueId) {
8727
8646
  if (!resolved) return null;
8728
8647
  return getProjectSync(resolved.projectKey);
8729
8648
  }
8730
- var RECORD_SCHEMA_VERSION, RECORD_DIRNAME;
8649
+ var RECORD_DIRNAME;
8731
8650
  var init_record = __esmMin((() => {
8732
8651
  init_auto_commit();
8733
8652
  init_state_read_home();
8734
8653
  init_projects();
8735
- RECORD_SCHEMA_VERSION = 2;
8736
8654
  RECORD_DIRNAME = "records";
8737
8655
  }));
8738
8656
  //#endregion
@@ -9593,6 +9511,48 @@ var init_model_capabilities = __esmMin((() => {
9593
9511
  "context-length": 100
9594
9512
  }
9595
9513
  },
9514
+ "k3": {
9515
+ model: "k3",
9516
+ provider: "kimi",
9517
+ displayName: "Kimi K3",
9518
+ costPer1MTokens: 9,
9519
+ contextWindow: 262144,
9520
+ skills: {
9521
+ "code-generation": 95,
9522
+ "code-review": 93,
9523
+ debugging: 93,
9524
+ planning: 90,
9525
+ documentation: 90,
9526
+ testing: 90,
9527
+ security: 85,
9528
+ performance: 88,
9529
+ synthesis: 94,
9530
+ speed: 70,
9531
+ "context-length": 98
9532
+ },
9533
+ notes: "Kimi K3 coding endpoint alias. 2.8T MoE, always-thinking, 256K context. Source: https://www.kimi.com/code/docs/en/third-party-tools/other-coding-agents.html"
9534
+ },
9535
+ "k3[1m]": {
9536
+ model: "k3[1m]",
9537
+ provider: "kimi",
9538
+ displayName: "Kimi K3 (1M)",
9539
+ costPer1MTokens: 9,
9540
+ contextWindow: 1048576,
9541
+ skills: {
9542
+ "code-generation": 95,
9543
+ "code-review": 93,
9544
+ debugging: 93,
9545
+ planning: 90,
9546
+ documentation: 90,
9547
+ testing: 90,
9548
+ security: 85,
9549
+ performance: 88,
9550
+ synthesis: 94,
9551
+ speed: 70,
9552
+ "context-length": 100
9553
+ },
9554
+ notes: "Kimi K3 coding endpoint 1M alias. 2.8T MoE, always-thinking, 1,048,576-token context. Source: https://www.kimi.com/code/docs/en/third-party-tools/other-coding-agents.html"
9555
+ },
9596
9556
  "kimi-k2.7-code": {
9597
9557
  model: "kimi-k2.7-code",
9598
9558
  provider: "kimi",
@@ -10127,6 +10087,7 @@ function validateRoleFields(role, roleConfig) {
10127
10087
  if (!Number.isInteger(entry.weight) || entry.weight <= 0) throw new Error(`config.yaml: roles.${role}.model[${i}].weight must be a positive integer`);
10128
10088
  }
10129
10089
  }
10090
+ if (roleConfig.autonomousModel !== void 0 && typeof roleConfig.autonomousModel !== "string") throw new Error(`config.yaml: roles.${role}.autonomousModel must be a scalar model reference`);
10130
10091
  if (roleConfig.harness !== void 0 && roleConfig.harness !== "claude-code" && roleConfig.harness !== "ohmypi" && roleConfig.harness !== "codex") throw new Error(`config.yaml: roles.${role}.harness must be claude-code, ohmypi, or codex`);
10131
10092
  if (roleConfig.effort !== void 0 && !ROLE_EFFORTS.includes(roleConfig.effort)) throw new Error(`config.yaml: roles.${role}.effort must be one of ${ROLE_EFFORTS.join(", ")}`);
10132
10093
  if (roleConfig.mode !== void 0 && roleConfig.mode !== "quick" && roleConfig.mode !== "full" && roleConfig.mode !== "none") throw new Error(`config.yaml: roles.${role}.mode must be quick, full, or none`);
@@ -10144,6 +10105,7 @@ function validateRoleModelRefs(config) {
10144
10105
  }
10145
10106
  for (const [role, roleConfig] of Object.entries(config.roles ?? {})) {
10146
10107
  validateRoleFields(role, roleConfig);
10108
+ if (typeof roleConfig.autonomousModel === "string") derefWorkhorse(roleConfig.autonomousModel, config, `roles.${role}.autonomousModel`);
10147
10109
  if (Array.isArray(roleConfig.model)) for (let i = 0; i < roleConfig.model.length; i++) derefWorkhorse(roleConfig.model[i].model, config, `roles.${role}.model[${i}].model`);
10148
10110
  else if (roleConfig.model) {
10149
10111
  const resolvedModel = derefWorkhorse(roleConfig.model, config, `roles.${role}.model`);
@@ -10706,6 +10668,8 @@ function getProviderForModelSync(modelId) {
10706
10668
  "MiniMax-M3"
10707
10669
  ].includes(modelId)) return PROVIDERS.minimax;
10708
10670
  if ([
10671
+ "k3",
10672
+ "k3[1m]",
10709
10673
  "kimi-k2.7-code",
10710
10674
  "kimi-k2.6",
10711
10675
  "kimi-k2.5",
@@ -10876,6 +10840,8 @@ var init_providers = __esmMin((() => {
10876
10840
  compatibility: "direct",
10877
10841
  defaultHarness: "claude-code",
10878
10842
  models: [
10843
+ "k3",
10844
+ "k3[1m]",
10879
10845
  "kimi-k2.7-code",
10880
10846
  "kimi-k2.6",
10881
10847
  "kimi-k2.5",
@@ -11193,7 +11159,7 @@ function resolveTieredExecutionBlock(config, planMetadata, recordOverride) {
11193
11159
  * Per-issue tiered_execution opt-in/out (PAN-1791 FR-9, PAN-2383 FR-1). Resolves with precedence:
11194
11160
  * record override > plan.metadata.tiered_execution > config.enabled.
11195
11161
  *
11196
- * An issue's vBRIEF may set `tiered_execution: 'on' | 'off'` in plan.metadata; a record
11162
+ * An issue's xBRIEF may set `tiered_execution: 'on' | 'off'` in plan.metadata; a record
11197
11163
  * override takes precedence; an explicit value wins over the global `tiered_execution.enabled`
11198
11164
  * flag, and an unset value inherits it — zero behavior change when no overrides exist.
11199
11165
  * Any invalid value is a config error (fail-loud, no silent inherit on typos).
@@ -14733,6 +14699,6 @@ var init_config_yaml = __esmMin((() => {
14733
14699
  init_load();
14734
14700
  }));
14735
14701
  //#endregion
14736
- export { MODEL_CAPABILITIES as $, resolveProjectFromIssueSync as $n, getLegacyHome as $r, writeStatusOverride as $t, init_harness_policy as A, getIssuePrefix as An, ARCHIVES_DIR as Ar, init_record as At, init_providers as B, initializeProjectsConfig as Bn, PROJECT_PRDS_ACTIVE_SUBDIR as Br, writeCloseOutDodGate as Bt, init_tier_table as C, createDefaultProjectsConfig as Cn, MergeConflictError as Cr, ensureIssueRecord as Ct, validateTieredExecutionConfig as D, findProjectByTeam as Dn, VcsError as Dr, getIssueRecordPathForWorkspace as Dt, resolveTieredExecutionEnabledForIssue as E, findProjectByPathSync as En, TrackerError as Er, getIssueRecordPath as Et, clearCredentialFileAuthSync as F, getSpecialistPromptOverride as Fn, CONFIG_FILE as Fr, readIssueRecordSync as Ft, init_openai_compatible_proxy as G, loadProjectsConfigSync as Gn, SYNC_SOURCES as Gr, writeRecordDecisionsSync as Gt, qualifyPiModel as H, listProjects as Hn, PROJECT_PRDS_PLANNED_SUBDIR as Hr, writeIssueRecordForWorkspaceSync as Ht, getBuiltInDefaultHarness as I, getSpecialistRetention as In, COSTS_DIR as Ir, readRecordContinueViewSync as It, DEFAULT_ROLES as J, registerProjectSync as Jn, getDocsBudgetStatePath as Jr, writeRecordResumePoint as Jt, defaultBackgroundAiFeatures as K, projects_exports as Kn, TRAEFIK_DIR as Kr, writeRecordHazards as Kt, getKimiAnthropicBaseUrl as L, hasProjects as Ln, LOGS_DIR as Lr, resolveProjectForIssue as Lt, KIMI_PLATFORM_BASE_URL as M, getProjectSwarmHotspots as Mn, CACHE_AGENTS_DIR as Mr, queueIssueRecordCommit as Mt, PROVIDERS as N, getProjectSync as Nn, CACHE_RULES_DIR as Nr, readIssueRecord as Nt, canUseHarnessSync as O, findProjectByTeamSync as On, init_errors as Or, getIssueWorkspacePath as Ot, UnknownModelError as P, getSpecialistConfig as Pn, CLAUDE_DIR as Pr, readIssueRecordForWorkspaceSync as Pt, resolveModel as Q, resolveProjectFromIssue as Qn, getHandoffsDir as Qr, writeRecordTieredExecutionOverrideSync as Qt, getProviderEnvSync as R, hasProjectsSync as Rn, OVERDECK_HOME as Rr, writeAgentHarnessModel as Rt, TieredExecutionConfigError as S, ProjectRenameError as Sn, LinearApiError as Sr, clearRecordFeedbackSync as St, resolveTieredExecutionEnabled as T, findProjectByPath as Tn, TmuxError as Tr, getIssueRecordBasePath as Tt, setupCredentialFileAuthSync as U, listProjectsSync as Un, PROJECT_PRDS_SUBDIR as Ur, writeIssueRecordSync as Ut, piProviderForModel as V, initializeProjectsConfigSync as Vn, PROJECT_PRDS_COMPLETED_SUBDIR as Vr, writeCloseOutDodGateSync as Vt, ensureOpenAICompatibleProxyRunning as W, loadProjectsConfig as Wn, SKILLS_DIR as Wr, writeRecordDecisions as Wt, computeModelOrigin as X, renameProjectSync as Xn, getDocsIndexPath as Xr, writeRecordScopeDriftSync as Xt, DEFAULT_WORKHORSES as Y, renameProject as Yn, getDocsDisableStatePath as Yr, writeRecordResumePointSync as Yt, init_roles as Z, resolveInfraRepo as Zn, getDocsTelemetryPath as Zr, writeRecordTieredExecutionOverride as Zt, getDefaultDocsConfig as _, resolveStateReadHomeSync as _n, ConfigError as _r, appendSessionEntry as _t, getConversationsConfigSync as a, sessionFilePath as ai, init_auto_commit as an, unregisterProject as ar, modelSupportsImagesSync as at, DEFAULT_TIERED_EXECUTION_CONFIG as b, projectKey as bn, GitHubApiError as br, claimIssueOwner as bt, isClaudeCodeChannelsEnabled as c, STATE_BRANCH_PATHS as cn, extractPrefixSync as cr, fnv1a32 as ct, loadConfigNoMigration as d, init_state_plane as dn, parseIssueIdSync as dr, PARENT_MODEL_REF as dt, getOverdeckHome as ei, writeStatusOverrideSync as en, resolveProjectPath as er, MODEL_DEPRECATIONS as et, loadConfigSync as f, isStatePlaneOnlyStatus as fn, resolveBareNumericIdSync as fr, ROLE_EFFORTS as ft, mergeConfigs as g, init_state_read_home as gn, ClaudeCredentialParseError as gr, appendFeedbackEntrySync as gt, jsYaml as h, init_state_migration_lock as hn, CheckpointError as hr, appendFeedbackEntry as ht, getConversationsConfig as i, resolveOhmypiExtensionPath as ii, flushAutoCommits as in, setProjectSwarmPolicySync as ir, init_model_capabilities as it, KIMI_CODING_BASE_URL as j, getProject as jn, BIN_DIR as jr, markRecordPipelineClosedOutSync as jt, canUseModelWithAuthSync as k, findProjectsByRallyProject as kn, AGENTS_DIR as kr, getProjectConfigFromWorkspacePath as kt, isClaudeCodeChannelsMcpEnabled as l, STATE_PLANE_PATHS as ln, init_issue_id as lr, init_percent as lt, init_js_yaml as m, acquireStateMigrationLock as mn, require_dist as mr, RECORD_SCHEMA_VERSION as mt, clearConfigCache as n, isDevMode as ni, deriveProjectRoot as nn, saveProjectsConfigSync as nr, getModelEffortLevelsSync as nt, getGlobalConfigPath as o, queueAutoCommit as on, unregisterProjectSync as or, resolveModelIdSync as ot, updateConversationsConfig as p, isStatePlanePath as pn, resolveIssueIdSync as pr, RECORD_DIRNAME as pt, init_registry as q, registerProject as qn, encodeClaudeProjectDir as qr, writeRecordHazardsSync as qt, getConversationSearchConfigSync as r, packageRoot as ri, flushAllPendingAutoCommits as rn, setProjectAutoMergeDefaultSync as rr, hasModelCapabilitySync as rt, init_load as s, reconcileStatePlaneDrift as sn, extractNumberSync as sr, fmix32 as st, init_config_yaml as t, init_paths as ti, writeStatusOverridesSync as tn, saveProjectsConfig as tr, getModelCapabilitySync as tt, isTldrEnabledSync as u, getMainDivergence as un, normalizeIssueIdSync as ur, COMPLIANCE_MODES as ut, getDefaultTtsDaemonConfig as v, shouldCommitLegacyWorkspaceArtifacts as vn, FsError as vr, appendSessionEntrySync as vt, resolveTieredExecutionBlock as w, extractTeamPrefix as wn, ProcessSpawnError as wr, ensureIssueRecordSync as wt, TIERED_EXECUTION_DIFFICULTIES as x, PROJECTS_CONFIG_FILE as xn, InvalidAgentIdError as xr, clearIssueOwner as xt, mergeTtsDaemonConfigs as y, init_project_key as yn, GitError as yr, buildOwnUri as yt, getProviderForModelSync as z, init_projects as zn, PROJECT_DOCS_SUBDIR as zr, writeAgentHarnessModelSync as zt };
14702
+ export { derefWorkhorse as $, resolveIssueIdSync as $n, acquireStateMigrationLock as $t, canUseHarnessSync as A, loadProjectsConfig as An, SKILLS_DIR as Ar, queueIssueRecordCommit as At, getProviderEnvSync as B, resolveProjectPath as Bn, getOverdeckHome as Br, deriveProjectRoot as Bt, TIERED_EXECUTION_DIFFICULTIES as C, hasProjects as Cn, LOGS_DIR as Cr, getIssueRecordBasePath as Ct, resolveTieredExecutionEnabled as D, initializeProjectsConfigSync as Dn, PROJECT_PRDS_COMPLETED_SUBDIR as Dr, getProjectConfigFromWorkspacePath as Dt, resolveTieredExecutionBlock as E, initializeProjectsConfig as En, PROJECT_PRDS_ACTIVE_SUBDIR as Er, getIssueWorkspacePath as Et, PROVIDERS as F, renameProject as Fn, getDocsDisableStatePath as Fr, resolveProjectForIssue as Ft, setupCredentialFileAuthSync as G, unregisterProject as Gn, sessionFilePath as Gr, reconcileStatePlaneDrift as Gt, init_providers as H, saveProjectsConfigSync as Hn, isDevMode as Hr, flushAutoCommits as Ht, UnknownModelError as I, renameProjectSync as In, getDocsIndexPath as Ir, writeAgentHarnessModelSync as It, defaultBackgroundAiFeatures as J, extractPrefixSync as Jn, getMainDivergence as Jt, ensureOpenAICompatibleProxyRunning as K, unregisterProjectSync as Kn, STATE_BRANCH_PATHS as Kt, clearCredentialFileAuthSync as L, resolveInfraRepo as Ln, getDocsTelemetryPath as Lr, writeCloseOutDodGate as Lt, init_harness_policy as M, projects_exports as Mn, TRAEFIK_DIR as Mr, readIssueRecordForWorkspaceSync as Mt, KIMI_CODING_BASE_URL as N, registerProject as Nn, encodeClaudeProjectDir as Nr, readIssueRecordSync as Nt, resolveTieredExecutionEnabledForIssue as O, listProjects as On, PROJECT_PRDS_PLANNED_SUBDIR as Or, init_record as Ot, KIMI_PLATFORM_BASE_URL as P, registerProjectSync as Pn, getDocsBudgetStatePath as Pr, readRecordContinueViewSync as Pt, computeModelOrigin as Q, resolveBareNumericIdSync as Qn, parsePorcelainStatusPaths as Qt, getBuiltInDefaultHarness as R, resolveProjectFromIssue as Rn, getHandoffsDir as Rr, writeIssueRecordSync as Rt, DEFAULT_TIERED_EXECUTION_CONFIG as S, getSpecialistRetention as Sn, COSTS_DIR as Sr, ensureIssueRecordSync as St, init_tier_table as T, init_projects as Tn, PROJECT_DOCS_SUBDIR as Tr, getIssueRecordPathForWorkspace as Tt, piProviderForModel as U, setProjectAutoMergeDefaultSync as Un, packageRoot as Ur, init_auto_commit as Ut, getProviderForModelSync as V, saveProjectsConfig as Vn, init_paths as Vr, flushAllPendingAutoCommits as Vt, qualifyPiModel as W, setProjectSwarmPolicySync as Wn, resolveOhmypiExtensionPath as Wr, queueAutoCommit as Wt, DEFAULT_ROLES as X, normalizeIssueIdSync as Xn, isStatePlaneOnlyStatus as Xt, init_registry as Y, init_issue_id as Yn, init_state_plane as Yt, DEFAULT_WORKHORSES as Z, parseIssueIdSync as Zn, isStatePlanePath as Zt, getDefaultDocsConfig as _, getProject as _n, BIN_DIR as _r, appendFeedbackEntrySync as _t, getConversationsConfigSync as a, init_project_key as an, GitError as ar, getModelEffortLevelsSync as at, DEFAULT_CONFIG as b, getSpecialistConfig as bn, CLAUDE_DIR as br, clearRecordFeedbackSync as bt, isClaudeCodeChannelsEnabled as c, ProjectRenameError as cn, LinearApiError as cr, modelSupportsImagesSync as ct, loadConfigNoMigration as d, findProjectByPath as dn, TmuxError as dr, fnv1a32 as dt, init_state_migration_lock as en, require_dist as er, init_roles as et, loadConfigSync as f, findProjectByPathSync as fn, TrackerError as fr, init_percent as ft, mergeConfigs as g, getIssuePrefix as gn, ARCHIVES_DIR as gr, RECORD_DIRNAME as gt, jsYaml as h, findProjectsByRallyProject as hn, AGENTS_DIR as hr, ROLE_EFFORTS as ht, getConversationsConfig as i, shouldCommitLegacyWorkspaceArtifacts as in, FsError as ir, getModelCapabilitySync as it, canUseModelWithAuthSync as j, loadProjectsConfigSync as jn, SYNC_SOURCES as jr, readIssueRecord as jt, validateTieredExecutionConfig as k, listProjectsSync as kn, PROJECT_PRDS_SUBDIR as kr, markRecordPipelineClosedOutSync as kt, isClaudeCodeChannelsMcpEnabled as l, createDefaultProjectsConfig as ln, MergeConflictError as lr, resolveModelIdSync as lt, init_js_yaml as m, findProjectByTeamSync as mn, init_errors as mr, PARENT_MODEL_REF as mt, clearConfigCache as n, init_state_read_home as nn, ClaudeCredentialParseError as nr, MODEL_CAPABILITIES as nt, getGlobalConfigPath as o, projectKey as on, GitHubApiError as or, hasModelCapabilitySync as ot, updateConversationsConfig as p, findProjectByTeam as pn, VcsError as pr, COMPLIANCE_MODES as pt, init_openai_compatible_proxy as q, extractNumberSync as qn, STATE_PLANE_PATHS as qt, getConversationSearchConfigSync as r, resolveStateReadHomeSync as rn, ConfigError as rr, MODEL_DEPRECATIONS as rt, init_load as s, PROJECTS_CONFIG_FILE as sn, InvalidAgentIdError as sr, init_model_capabilities as st, init_config_yaml as t, STATE_BRANCH as tn, CheckpointError as tr, resolveModel as tt, isTldrEnabledSync as u, extractTeamPrefix as un, ProcessSpawnError as ur, fmix32 as ut, getDefaultTtsDaemonConfig as v, getProjectSwarmHotspots as vn, CACHE_AGENTS_DIR as vr, appendSessionEntry as vt, TieredExecutionConfigError as w, hasProjectsSync as wn, OVERDECK_HOME as wr, getIssueRecordPath as wt, init_defaults as x, getSpecialistPromptOverride as xn, CONFIG_FILE as xr, ensureIssueRecord as xt, mergeTtsDaemonConfigs as y, getProjectSync as yn, CACHE_RULES_DIR as yr, appendSessionEntrySync as yt, getKimiAnthropicBaseUrl as z, resolveProjectFromIssueSync as zn, getLegacyHome as zr, writeRecordTieredExecutionOverride as zt };
14737
14703
 
14738
- //# sourceMappingURL=config-yaml-Ciyp2mYe.js.map
14704
+ //# sourceMappingURL=config-yaml-DvyMuOle.js.map
@@ -1,3 +1,3 @@
1
- import { a as resolveConflictGate, i as init_conflict_gate, t as buildRealConflictGateDeps } from "./conflict-gate-BLUNMs1i.js";
1
+ import { a as resolveConflictGate, i as init_conflict_gate, t as buildRealConflictGateDeps } from "./conflict-gate-CmrYpa47.js";
2
2
  init_conflict_gate();
3
3
  export { buildRealConflictGateDeps, resolveConflictGate };