@overdeck/desktop 0.45.23 → 0.45.24

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 (388) hide show
  1. package/drizzle/overdeck/0000_overdeck_init.sql +2 -0
  2. package/package.json +1 -1
  3. package/server/{acceptance-criteria-DOA0KgXx.js → acceptance-criteria-DDCnXF58.js} +2 -2
  4. package/server/{advancing-selfheal-BBu6DSNm.js → advancing-selfheal-BVwW4qRn.js} +6 -6
  5. package/server/{agent-gc-BV1q_2EV.js → agent-gc-CHcnvonI.js} +4 -4
  6. package/server/agent-state-Bc3tzUC8.js +3 -0
  7. package/server/{agent-state-service-HoK8U4jW.js → agent-state-service-BsgWxZuB.js} +5 -5
  8. package/server/{agent-state-service-CnzFKSAQ.js → agent-state-service-D5UGKIJL.js} +1 -1
  9. package/server/{agents-B4Bjbkfv.js → agents-EbI0zCJl.js} +4 -4
  10. package/server/agents-wi9NWzs2.js +3 -0
  11. package/server/{archive-planning-zkJb3BeM.js → archive-planning-BZDgzoEj.js} +1 -1
  12. package/server/{archive-planning-DYrYojxl.js → archive-planning-Du25Jtst.js} +4 -4
  13. package/server/{artifact-index-jobs-C-xy7Z5v.js → artifact-index-jobs-CbEDfCDu.js} +2 -2
  14. package/server/assemble-J2ZZ2C15.js +339 -0
  15. package/server/{backlog-auto-trigger-GtG71X8H.js → backlog-auto-trigger-2R2jog7n.js} +3 -3
  16. package/server/{behavior-B_-4EKF3.js → behavior-B3exJ42O.js} +2 -2
  17. package/server/{briefing-freshness-DWdW7vUm.js → briefing-freshness-D1wzUIWv.js} +2 -2
  18. package/server/{build-info-DgTqZkL5.js → build-info-CZk_TITh.js} +1 -1
  19. package/server/{build-info-BT096lEl.js → build-info-Ie_D0_BT.js} +3 -3
  20. package/server/{checkpoint-manager-DDqcGyu8.js → checkpoint-manager-BI1Wxoku.js} +2 -2
  21. package/server/{checkpoint-manager-B7Bt29J0.js → checkpoint-manager-DwbQoqrC.js} +1 -1
  22. package/server/checkpoint-worker.js +1 -1
  23. package/server/{checkpoints-CpgCjAlN.js → checkpoints-BJIs5QIA.js} +1 -1
  24. package/server/{checkpoints-C-AXLfYT.js → checkpoints-CQB1h765.js} +2 -2
  25. package/server/{claude-hooks-provision-C8wdRnN1.js → claude-hooks-provision-8Ngo8TpT.js} +1 -1
  26. package/server/{claude-hooks-provision-but-_qGY.js → claude-hooks-provision-D8GXF3_s.js} +2 -2
  27. package/server/{claude-permissions-H_5wHQZQ.js → claude-permissions-DNWEVV6z.js} +2 -2
  28. package/server/{claude-settings-overlay-CbSz0Dvb.js → claude-settings-overlay-CEdaqpWI.js} +2 -2
  29. package/server/{claude-settings-overlay-BTENVmYf.js → claude-settings-overlay-DWy-Bb4Y.js} +1 -1
  30. package/server/cli-B86rejVV.js +3 -0
  31. package/server/{cli-vBeXbPrq.js → cli-RoOx5DUf.js} +9 -9
  32. package/server/{cliproxy-Bgb2XCqi.js → cliproxy-C8a1vtTU.js} +2 -2
  33. package/server/{cliproxy-DW0V86F8.js → cliproxy-fHfIeiGd.js} +1 -1
  34. package/server/{close-issue-Dn_4c4G8.js → close-issue-DoOifFIK.js} +5 -5
  35. package/server/{closed-issue-reaper-hANY_ehE.js → closed-issue-reaper-Bk3SU4RC.js} +9 -9
  36. package/server/{closed-issue-reaper-CWpY2uBw.js → closed-issue-reaper-CktPXo8m.js} +1 -1
  37. package/server/{codex-TmSi-yTv.js → codex-BZXGhUVB.js} +7 -7
  38. package/server/{codex-Dg7Is5yb.js → codex-GcHuUF-k.js} +1 -1
  39. package/server/{codex-parser-C4gSH-IR.js → codex-parser-CFZ1_1Jl.js} +2 -2
  40. package/server/{config-CCvjQf27.js → config-BZ0sHTju.js} +2 -2
  41. package/server/{config-DjLOdbgT.js → config-CKxYiCmX.js} +2 -2
  42. package/server/{config-DUIhMN_T.js → config-DzV30TOm.js} +1 -1
  43. package/server/{config-yaml-DvyMuOle.js → config-yaml-DySPNmKN.js} +23 -9
  44. package/server/{conflict-gate-CmrYpa47.js → conflict-gate-BaCVrH-N.js} +3 -3
  45. package/server/{conflict-gate-BSJkNTdp.js → conflict-gate-BhAY7TUd.js} +1 -1
  46. package/server/context-layers-BrPmE__h.js +4 -0
  47. package/server/context-layers-igZ4FI4_.js +37 -0
  48. package/server/{control-settings-aP1ANIlI.js → control-settings-BQp7_4uD.js} +4 -4
  49. package/server/{conversation-compaction-CNbTLB86.js → conversation-compaction-CgrR8YYp.js} +8 -8
  50. package/server/{conversation-compaction-DiG5zWQq.js → conversation-compaction-eQB5CkOe.js} +1 -1
  51. package/server/{conversation-service-Up7FEzIC.js → conversation-service-BLd3MYsG.js} +1 -1
  52. package/server/{conversation-service-Du-MTNpJ.js → conversation-service-DPJ71F33.js} +329 -19
  53. package/server/{conversations-DbOs1e9Q.js → conversations-6AfUfbwc.js} +5 -5
  54. package/server/{conversations-6mPANqvL.js → conversations-CAsJF9kh.js} +1 -1
  55. package/server/{cost-Ca0YTWDw.js → cost-B2ddP6wq.js} +2 -2
  56. package/server/{cost-CW4WSe72.js → cost-R-m6Yi-W.js} +3 -3
  57. package/server/{cost-sync-C0VdGme1.js → cost-sync-BsN6ER0n.js} +3 -3
  58. package/server/{dag-CdOjJVDT.js → dag-B1ucnjDU.js} +2 -2
  59. package/server/{dangerous-git-ops-CT-IypG3.js → dangerous-git-ops-BXqeWVSf.js} +1 -1
  60. package/server/dashboard-db-worker.js +7 -7
  61. package/server/{deacon-pRnyD5w9.js → deacon-CU_cAYSR.js} +254 -144
  62. package/server/{deacon-DYSEJb48.js → deacon-kiQrb4ZT.js} +3 -3
  63. package/server/{deacon-nudge-log-Bjg8U4Y9.js → deacon-nudge-log-6wVqAaqz.js} +3 -3
  64. package/server/{deacon-swarm-DftYRDo8.js → deacon-swarm-BXZZ1Z2-.js} +13 -13
  65. package/server/deacon-swarm-C-GwfjJy.js +2 -0
  66. package/server/deacon.js +8 -8
  67. package/server/{deploy-patrol-Bjsho_ha.js → deploy-patrol-AiFoP8dw.js} +6 -6
  68. package/server/{deploy-window-DeP_OIRk.js → deploy-window-C3F-tihF.js} +6 -6
  69. package/server/{deploy-window-CM6W1-c6.js → deploy-window-DkZraDyj.js} +1 -1
  70. package/server/{dev-supervisor-BpMoHlkR.js → dev-supervisor-bcOWqdQE.js} +2 -2
  71. package/server/{devcontainer-renderer-CtUgrVKW.js → devcontainer-renderer-_d6XhyND.js} +3 -3
  72. package/server/dist-Bzy0y69j.js +3 -0
  73. package/server/{dist-DyRx4cI7.js → dist-Cb_0uvpS.js} +1 -1
  74. package/server/{docker-BK7HIcBj.js → docker-DcMTFTUC.js} +2 -2
  75. package/server/{dod-BrSfUHm0.js → dod-C6n9RV3G.js} +1 -1
  76. package/server/{ensure-devcontainer-DRqaAkBR.js → ensure-devcontainer-BZgOhRo7.js} +1 -1
  77. package/server/{ensure-devcontainer-DseivYEy.js → ensure-devcontainer-DNi-ono3.js} +4 -4
  78. package/server/{esm-shims-CbI3BVkl.js → esm-shims-OSHAYaS1.js} +1 -1
  79. package/server/{event-store-tdiY5eDZ.js → event-store-CQL6NeqB.js} +3 -3
  80. package/server/{event-store-Cr5PQwFC.js → event-store-EV2cMiXj.js} +1 -1
  81. package/server/{events-CvvGK6LT.js → events-BTdrdEq8.js} +1 -1
  82. package/server/{events-CC1dgUpx.js → events-DTfAe4My.js} +3 -3
  83. package/server/{factory-CynerjXO.js → factory-CFibJuaw.js} +4 -4
  84. package/server/{feature-registry-population-B0pmAz0a.js → feature-registry-population-DKZFMbFt.js} +4 -4
  85. package/server/{feature-registry-storage-_wUBRD3J.js → feature-registry-storage-BdPuLcBX.js} +2 -2
  86. package/server/{features-Dhxz-wLc.js → features-ez2271oH.js} +2 -2
  87. package/server/{feedback-target-CPS15Vte.js → feedback-target-7mqqwrX6.js} +7 -7
  88. package/server/{feedback-target-iygZwmMc.js → feedback-target-CoFDHiM8.js} +1 -1
  89. package/server/{feedback-writer-C9b6ccN1.js → feedback-writer-CY5L1lB7.js} +5 -5
  90. package/server/{feedback-writer-qmiMbqTZ.js → feedback-writer-D3a22RCd.js} +1 -1
  91. package/server/flywheel-DHrgCphM.js +1084 -0
  92. package/server/flywheel-DzGtWnJ1.js +477 -0
  93. package/server/flywheel-SVF02Jpq.js +2 -0
  94. package/server/{flywheel-merge-order-DxbQKE1d.js → flywheel-merge-order-UU0tiUld.js} +9 -8
  95. package/server/{flywheel-merge-order-C-6zRLvM.js → flywheel-merge-order-UUcsCDb6.js} +1 -1
  96. package/server/{forge-Ch9gCFod.js → forge-CNFnyqps.js} +2 -2
  97. package/server/forge-DXnS_YFH.js +2 -0
  98. package/server/{from-CJ_aH5jD.js → from-kNxT0bZC.js} +1 -1
  99. package/server/{fts-db-CKgg0VKg.js → fts-db-CE46vDkZ.js} +2 -2
  100. package/server/{fts-operations-BrL_VTRr.js → fts-operations-CqY6zl-i.js} +2 -2
  101. package/server/{git-utils-BVa07a4a.js → git-utils-CRw2zLPC.js} +68 -3
  102. package/server/git-utils-D0_yhCgF.js +3 -0
  103. package/server/{github-app-CMBdIFBQ.js → github-app-C3QrAUd0.js} +18 -7
  104. package/server/{github-app-CPfoFAdV.js → github-app-ClZ2lk8D.js} +1 -1
  105. package/server/{github-client--XVlDpwM.js → github-client-BnIsSrEN.js} +2 -2
  106. package/server/{github-client-B4QsdE-X.js → github-client-DfQYVUaw.js} +1 -1
  107. package/server/{github-pr-lookup-BRbDW-qk.js → github-pr-lookup-D16NGsSO.js} +2 -2
  108. package/server/{harness-binary-CVio2m-u.js → harness-binary-DPUi-Pv8.js} +32 -6
  109. package/server/{harness-resolve-qHJBhy3Z.js → harness-resolve-3lNZkyT4.js} +18 -9
  110. package/server/{health-events-C9B8y1Hm.js → health-events-BBcTYQKU.js} +2 -2
  111. package/server/{health-events-CpfvuVmm.js → health-events-BDOHby5Q.js} +1 -1
  112. package/server/{hooks-DUXw8A0-.js → hooks-CKZgXlJb.js} +2 -2
  113. package/server/{hooks-ltecuFqZ.js → hooks-DPVX1rwQ.js} +1 -1
  114. package/server/{hume-BEq0bUDg.js → hume-Cz8igP9E.js} +2 -2
  115. package/server/hume-ccTf4wTX.js +3 -0
  116. package/server/{idle-stack-reaper-D7w9t3fE.js → idle-stack-reaper-CuLF0j2H.js} +1 -1
  117. package/server/{idle-stack-reaper-w1ISSlhs.js → idle-stack-reaper-DDIRwxUY.js} +2 -2
  118. package/server/{in-flight-guard-aQ1IxeI3.js → in-flight-guard-CAAkqPLu.js} +2 -2
  119. package/server/{infra-CzaSOgul.js → infra-BEqFxlJc.js} +14 -4
  120. package/server/{injection-DZ0PfYa4.js → injection-C8aiVJrF.js} +191 -183
  121. package/server/{injection-oNZeoDhL.js → injection-CPUIqNhI.js} +1 -1
  122. package/server/{inspect-agent-DJKLWcVT.js → inspect-agent-BLuJ1AkT.js} +135 -79
  123. package/server/inspect-agent-Brtz0URj.js +2 -0
  124. package/server/{internal-token-DXdfprGr.js → internal-token-BrcU6qfe.js} +1 -1
  125. package/server/{internal-token-Bb4XeV2x.js → internal-token-s0-oKybJ.js} +2 -2
  126. package/server/{io-B3_AHDfr.js → io-C9kF1wtJ.js} +3 -3
  127. package/server/{issue-closed-zhdvQicO.js → issue-closed-CDJk4pIp.js} +7 -7
  128. package/server/{issue-lifecycle-Dy4vd0Oa.js → issue-lifecycle-B8sZHVHh.js} +1 -1
  129. package/server/{issue-lifecycle-CreaCkjW.js → issue-lifecycle-ojZAzDBP.js} +21 -21
  130. package/server/{issue-service-singleton-DabvBWUp.js → issue-service-singleton-BvJ09SaR.js} +1 -1
  131. package/server/{issue-service-singleton-B5ushCvE.js → issue-service-singleton-Yx5DdmVJ.js} +8 -8
  132. package/server/{issues-B6ToV6x1.js → issues-BMmP_77e.js} +2 -2
  133. package/server/{jsonl-parser-Dhflo1SH.js → jsonl-parser-BXSlHwEh.js} +3 -3
  134. package/server/{label-cleanup-BKPJm4Hv.js → label-cleanup-B0UJwnv5.js} +3 -3
  135. package/server/{label-reconciler-DdWbHEBu.js → label-reconciler-B4iOAjlC.js} +4 -4
  136. package/server/{launcher-generator-CHVm7bGT.js → launcher-generator-BBWG_SiS.js} +101 -7
  137. package/server/{lifecycle-io-D8iNBcux.js → lifecycle-io-BREGpnLk.js} +5 -5
  138. package/server/{lifecycle-io-Bsnr2K4F.js → lifecycle-io-DPo7x11I.js} +1 -1
  139. package/server/{lifecycle-sycO16hj.js → lifecycle-xmBfK2GJ.js} +6 -6
  140. package/server/{lifecycle-DfeyBDwA.js → lifecycle-yPd___5E.js} +2 -2
  141. package/server/{linear-client-D4zqMnX7.js → linear-client-BsuUvkdA.js} +2 -2
  142. package/server/{linear-client-DqhDQO9k.js → linear-client-CTskEeT_.js} +1 -1
  143. package/server/memory-fts-worker.js +1 -1
  144. package/server/{merge-DK23JEdS.js → merge-B1DiziGU.js} +1 -1
  145. package/server/{merge-C_ZEhbqI.js → merge-CefQNAnq.js} +3 -3
  146. package/server/{merge-agent-XrB80vfT.js → merge-agent-4WOWlSYA.js} +28 -28
  147. package/server/{merge-agent-BQM3a8z5.js → merge-agent-CKkgIBPB.js} +1 -1
  148. package/server/{merge-batch-Bwoyr8Je.js → merge-batch-ClFn2T-y.js} +1 -1
  149. package/server/merge-ops-CR44oU9-.js +2 -0
  150. package/server/{merge-rebase-C1KIVr0s.js → merge-rebase-BfaTyXsw.js} +2 -2
  151. package/server/merge-set-DJ8-UErs.js +83 -0
  152. package/server/{merge-set-DnSYdBEp.js → merge-set-bUqbm3yc.js} +1 -1
  153. package/server/{merge-sync-SSv3E-pl.js → merge-sync-BJYeOODr.js} +1 -1
  154. package/server/{merge-sync-DZ9dojJn.js → merge-sync-VPV28g0g.js} +2 -2
  155. package/server/{merge-train-DxDfBTjr.js → merge-train-CHopycP0.js} +3 -3
  156. package/server/{merge-train-deps-CyYQUksx.js → merge-train-deps-D1cOZzy2.js} +4 -4
  157. package/server/{merge-verification-CSizH3HY.js → merge-verification-BkaOqPsw.js} +4 -4
  158. package/server/{multipart-parser-Dt8YPN5S.js → multipart-parser-duPAfSBw.js} +2 -2
  159. package/server/{no-resume-mode-Cx3K0hHi.js → no-resume-mode-Nw29vaFb.js} +1 -1
  160. package/server/node_modules/.package-lock.json +8 -8
  161. package/server/node_modules/@effect/platform-node/node_modules/@effect/platform-node-shared/package.json +3 -3
  162. package/server/node_modules/undici/README.md +5 -0
  163. package/server/node_modules/undici/docs/docs/api/Client.md +4 -0
  164. package/server/node_modules/undici/docs/docs/api/Dispatcher.md +6 -0
  165. package/server/node_modules/undici/docs/docs/api/Interceptors.md +59 -0
  166. package/server/node_modules/undici/docs/docs/api/MockAgent.md +27 -0
  167. package/server/node_modules/undici/docs/docs/api/MockPool.md +28 -1
  168. package/server/node_modules/undici/docs/docs/index.md +5 -0
  169. package/server/node_modules/undici/lib/core/request.js +1 -1
  170. package/server/node_modules/undici/lib/core/util.js +6 -1
  171. package/server/node_modules/undici/lib/dispatcher/agent.js +3 -3
  172. package/server/node_modules/undici/lib/dispatcher/client-h1.js +31 -6
  173. package/server/node_modules/undici/lib/dispatcher/client-h2.js +34 -43
  174. package/server/node_modules/undici/lib/handler/cache-handler.js +93 -5
  175. package/server/node_modules/undici/lib/handler/cache-revalidation-handler.js +10 -0
  176. package/server/node_modules/undici/lib/handler/redirect-handler.js +5 -2
  177. package/server/node_modules/undici/lib/handler/retry-handler.js +6 -4
  178. package/server/node_modules/undici/lib/interceptor/cache.js +21 -4
  179. package/server/node_modules/undici/lib/interceptor/decompress.js +4 -0
  180. package/server/node_modules/undici/lib/mock/mock-interceptor.js +25 -7
  181. package/server/node_modules/undici/lib/mock/mock-utils.js +39 -10
  182. package/server/node_modules/undici/lib/util/cache.js +49 -7
  183. package/server/node_modules/undici/lib/web/fetch/body.js +2 -1
  184. package/server/node_modules/undici/lib/web/fetch/response.js +1 -3
  185. package/server/node_modules/undici/package.json +2 -2
  186. package/server/node_modules/undici/types/client.d.ts +2 -2
  187. package/server/node_modules/undici/types/dispatcher.d.ts +3 -3
  188. package/server/node_modules/undici/types/mock-interceptor.d.ts +5 -1
  189. package/server/{orphan-proposed-reconciler-neK8dHQk.js → orphan-proposed-reconciler-BvKkWMJQ.js} +12 -12
  190. package/server/{orphan-proposed-reconciler-BTkDrl4R.js → orphan-proposed-reconciler-CTSGcK8p.js} +1 -1
  191. package/server/package-lock.json +9 -9
  192. package/server/package.json +1 -1
  193. package/server/{pan-dir-DeVUgwA7.js → pan-dir-B0c3w0Ya.js} +3 -3
  194. package/server/{paths-_zEts6wc.js → paths-D-xWGHdh.js} +2 -2
  195. package/server/{pickup-Dd0Znxxy.js → pickup-DUCLWrJY.js} +17 -16
  196. package/server/{pipeline-membership-0HaEGDlH.js → pipeline-membership-mY3GprlK.js} +7 -7
  197. package/server/{pipeline-notifier-6iCJplFZ.js → pipeline-notifier-BJr8gQX6.js} +1 -1
  198. package/server/{pipeline-notifier-D0ykk59O.js → pipeline-notifier-BXkJzDC4.js} +2 -2
  199. package/server/{project-pipelines-2sK1apsO.js → project-pipelines-C0MWUeCU.js} +2 -2
  200. package/server/project-repos-B6GycDh9.js +94 -0
  201. package/server/project-repos-DXKQsc_m.js +3 -0
  202. package/server/{projects-9SkRpES9.js → projects-vjjcmiN8.js} +1 -1
  203. package/server/{prompts-Dp4Tpk39.js → prompts-DxzFXuLl.js} +2 -2
  204. package/server/{providers-DV7ec8l7.js → providers-qQAwGQDW.js} +7 -7
  205. package/server/{providers-DKkBXhxU.js → providers-u4Ga0jOr.js} +1 -1
  206. package/server/public/assets/{chunk-BO2N2NFS-CltymLRg.js → chunk-BO2N2NFS-BamJdinX.js} +4 -4
  207. package/server/public/assets/{diagram-OG6HWLK6-D2f6pjgA.js → diagram-OG6HWLK6-DfOB8-w4.js} +1 -1
  208. package/server/public/assets/{dist-DEmlBBNQ.js → dist-ByIuzMQW.js} +3 -3
  209. package/server/public/assets/{dist-BWR4qFiV.js → dist-D7zYSEA6.js} +1 -1
  210. package/server/public/assets/{ganttDiagram-6RSMTGT7-DnfiViPK.js → ganttDiagram-6RSMTGT7-EdmRyXL3.js} +1 -1
  211. package/server/public/assets/{highlighted-body-OFNGDK62-B8Wrmj9H.js → highlighted-body-OFNGDK62-MerOfTX8.js} +1 -1
  212. package/server/public/assets/{index-CsSuZQBI.js → index-CWeMerGO.js} +146 -144
  213. package/server/public/assets/{index-CUr1xv8w.css → index-CenuJ3Cw.css} +1 -1
  214. package/server/public/assets/{linear-C9zFQpkX.js → linear-BBbArIcK.js} +1 -1
  215. package/server/public/assets/mermaid-GHXKKRXX-CpPWAFwE.js +1 -0
  216. package/server/public/assets/{pieDiagram-4H26LBE5-lR8H7Yjd.js → pieDiagram-4H26LBE5-BKIddiJN.js} +1 -1
  217. package/server/public/assets/{prod-B1jCQihw.js → prod-B8vYiu52.js} +4 -4
  218. package/server/public/assets/{quadrantDiagram-W4KKPZXB-CVQ2guem.js → quadrantDiagram-W4KKPZXB-D6RtoULk.js} +1 -1
  219. package/server/public/assets/{sankeyDiagram-5OEKKPKP-eD1RB4gm.js → sankeyDiagram-5OEKKPKP-CLrCedZX.js} +1 -1
  220. package/server/public/assets/{xychartDiagram-2RQKCTM6-ChEC6dQn.js → xychartDiagram-2RQKCTM6-hznR8DYl.js} +1 -1
  221. package/server/public/index.html +2 -2
  222. package/server/{pull-requests--Ib2jTgy.js → pull-requests-7N8WKseP.js} +1 -1
  223. package/server/{pull-requests-CXIhdCYD.js → pull-requests-_lHueOHW.js} +3 -3
  224. package/server/{queries-6d7Cdtm7.js → queries-CjNIf-Ub.js} +576 -166
  225. package/server/{rally-B708-nZn.js → rally-CyWT_lNO.js} +3 -3
  226. package/server/{rally-api-nY0ZANw3.js → rally-api-C8e_1JRi.js} +2 -2
  227. package/server/{rally-api-yjQ0TfHd.js → rally-api-ClOSd-Tt.js} +1 -1
  228. package/server/{rally-client-B1EJhfV0.js → rally-client-lc-nokqr.js} +4 -4
  229. package/server/{rally-client-CULK2XAY.js → rally-client-sgtVqzNU.js} +1 -1
  230. package/server/rally-zhhtXuDP.js +3 -0
  231. package/server/{reap-terminal-sessions-MWnqdLCJ.js → reap-terminal-sessions-7KeHv1R1.js} +1 -1
  232. package/server/{reap-terminal-sessions-N3BTkmX_.js → reap-terminal-sessions-BtHPo6Xc.js} +1 -1
  233. package/server/rebuild-stack-CFvcBHsS.js +4 -0
  234. package/server/{rebuild-stack-Dp4eLkt4.js → rebuild-stack-lwtsW0GO.js} +26 -35
  235. package/server/{reconstruct-cache-uWbZfjms.js → reconstruct-cache-C3Ui7ojV.js} +6 -6
  236. package/server/{record-t6V-3Dcj.js → record-CN0pj4_5.js} +1 -1
  237. package/server/{record-update-DACtKh6_.js → record-update-bLJxAXH4.js} +1 -1
  238. package/server/{record-update-Dq0t2uBG.js → record-update-dE1Aw83j.js} +2 -2
  239. package/server/{recovery-trip-BJtIQuag.js → recovery-trip-BvRWfUXM.js} +2 -2
  240. package/server/{release-engine-DZpmGGzb.js → release-engine-Cx48W7z8.js} +5 -5
  241. package/server/{release-set-hnXd_kga.js → release-set-CQfuN9-v.js} +3 -3
  242. package/server/{remote-Br-ZWVIP.js → remote-C_2hasl7.js} +3 -3
  243. package/server/{remote-4tiENDaI.js → remote-ChgimyYa.js} +3 -3
  244. package/server/{remote-agents-nmty1mLu.js → remote-agents-By1ige5O.js} +6 -6
  245. package/server/{remote-agents-CRCg1L4H.js → remote-agents-CA3Ihlxj.js} +1 -1
  246. package/server/{remote-completion-BbWNd10K.js → remote-completion-fVe9e_3u.js} +12 -12
  247. package/server/resume-BFv1PGpA.js +3 -0
  248. package/server/{review-agent-sKkE1FEL.js → review-agent-CIGOQYBD.js} +29 -25
  249. package/server/{review-agent-DJRO8EG8.js → review-agent-DNboMyW4.js} +1 -1
  250. package/server/{review-artifacts-BLbSC4ke.js → review-artifacts-nRDPuMxd.js} +5 -5
  251. package/server/{review-context-BgX3lcCx.js → review-context-2uj-YQ8J.js} +69 -25
  252. package/server/{review-status-C6n6-9f_.js → review-status-btEYlaxA.js} +1 -1
  253. package/server/{review-status-enrichment-tbOn_A_u.js → review-status-enrichment-Dci-ZwEt.js} +3 -3
  254. package/server/{review-status-A7quS5KJ.js → review-status-kZj_KyCk.js} +42 -26
  255. package/server/{review-status-sync-BhSQ0d0l.js → review-status-sync-BTOpxtTC.js} +10 -5
  256. package/server/{review-status-sync-To3-iS-N.js → review-status-sync-DSDK3OMy.js} +1 -1
  257. package/server/{review-verdict-feedback-CTRNtzXO.js → review-verdict-feedback-CCjVA7Uk.js} +6 -6
  258. package/server/{review-verdict-feedback-C1Kg8n7t.js → review-verdict-feedback-CTd4QMBu.js} +1 -1
  259. package/server/{rollup-B53Y81xK.js → rollup-BKQC7jp4.js} +1 -1
  260. package/server/{rollup-WA0VD-Rr.js → rollup-FGsKki9R.js} +8 -8
  261. package/server/{scanner-D2743cp8.js → scanner-CnqEZeDy.js} +41 -14
  262. package/server/{sequence-io-Cg0zYj_E.js → sequence-io-D909zgeH.js} +4 -4
  263. package/server/{sequencer-agent-BGY8gjg-.js → sequencer-agent-CzkcK6P5.js} +5 -5
  264. package/server/server.js +2194 -341
  265. package/server/{service-DCpB_SGd.js → service-CLeAoU6G.js} +51 -50
  266. package/server/{session-fork-BQ8_6H32.js → session-fork-CHI1XvL9.js} +2 -2
  267. package/server/{session-history-CVZDpS3c.js → session-history-BT3IvqhC.js} +4 -4
  268. package/server/settings-66A6uvIA.js +2 -0
  269. package/server/{settings-BZ5m1UCl.js → settings-BTMvpNFU.js} +3 -3
  270. package/server/{settings-ylxwqwQG.js → settings-C0zgxOGf.js} +2 -2
  271. package/server/{shadow-engineering-BlxG6Xye.js → shadow-engineering-BJfgm-hX.js} +2 -2
  272. package/server/{shadow-state-Dh-HzF2J.js → shadow-state-7a-524T8.js} +2 -2
  273. package/server/{shadow-state-C2_epgx2.js → shadow-state-DnDyjujH.js} +1 -1
  274. package/server/{shadow-utils-4bvjn9b3.js → shadow-utils-Db3oroFG.js} +2 -2
  275. package/server/{ship-log-ClSMIzZX.js → ship-log-D9MlVzYU.js} +1 -1
  276. package/server/{smart-compaction-CHIxLr_d.js → smart-compaction-CV2ukKND.js} +1 -1
  277. package/server/{smart-compaction-r4pHQBIr.js → smart-compaction-KCYScAU1.js} +7 -7
  278. package/server/{spawn-planning-session-DWAorh2B.js → spawn-planning-session-DKpdFyOC.js} +30 -23
  279. package/server/{spawn-planning-session-KC_UduxD.js → spawn-planning-session-qUC2VWu3.js} +1 -1
  280. package/server/{specialist-completion-BXhav38U.js → specialist-completion-Ky9wCDpb.js} +1 -1
  281. package/server/{specialist-context-DtrYvGJ-.js → specialist-context-Bn3dCGS2.js} +5 -5
  282. package/server/{specialist-handoff-logger-C45ouoZ6.js → specialist-handoff-logger-CMEwYxa2.js} +2 -2
  283. package/server/{specialist-logs-DJ3RzKxW.js → specialist-logs-C5p8G7tx.js} +3 -3
  284. package/server/{specialists-JVO00bs7.js → specialists-CC4r-c2s.js} +776 -347
  285. package/server/{specialists-D5fRZXmN.js → specialists-CShuVGWT.js} +1 -1
  286. package/server/{specialists-DVj0hvaL.js → specialists-DM6bWjsi.js} +1 -1
  287. package/server/{specialists-DyFeedjn.js → specialists-jiuuyVkp.js} +21 -19
  288. package/server/specs-C8Wsn2XO.js +3 -0
  289. package/server/{src-CG9mCkP6.js → src-CXmtj0im.js} +6 -6
  290. package/server/{src-CMTQGyCK.js → src-CdmnTM2m.js} +5 -5
  291. package/server/{src-U7_kTPEE.js → src-DtcUOZCq.js} +111 -18
  292. package/server/stack-health-Bn3o8FBX.js +3 -0
  293. package/server/{stack-health-puygdaMd.js → stack-health-DxSdG9cW.js} +63 -9
  294. package/server/{stale-task-claims-BbFwCTb0.js → stale-task-claims-KJKxxiiQ.js} +4 -4
  295. package/server/{staleness-Cbl_w4Bw.js → staleness-CT34nwr9.js} +1 -1
  296. package/server/{staleness-Bpy41ngS.js → staleness-DPm7ClwA.js} +1 -1
  297. package/server/{state-home-CIGjwNfJ.js → state-home-Cn_Qu8IX.js} +2 -2
  298. package/server/{state-migrate-Dkzaxvny.js → state-migrate-BGg2ZaOt.js} +4 -4
  299. package/server/{stuck-remediation-CzEov_fq.js → stuck-remediation-DYuPRYYw.js} +300 -23
  300. package/server/{stuck-remediation-sY_MHHgQ.js → stuck-remediation-s9_2qfi6.js} +1 -1
  301. package/server/{substrate-bug-weights-service-BH66lhm7.js → substrate-bug-weights-service-B-FwCs5V.js} +3 -3
  302. package/server/{summary-fork-DHhJIsAL.js → summary-fork-D1RAk9rJ.js} +78 -12
  303. package/server/{summary-fork-D8bXjCr7.js → summary-fork-DpcxN9tf.js} +2 -2
  304. package/server/supervisor/{injection-budget-C1iPirFS.js → injection-budget-Csw5tqfJ.js} +2 -41
  305. package/server/supervisor/pty-supervisor.js +2 -1
  306. package/server/supervisor/pty-token-x-ea28Us.js +43 -0
  307. package/server/supervisor-FTJAIsAK.js +2 -0
  308. package/server/{supervisor-BO-Zk_h-.js → supervisor-wM4ooB5O.js} +3 -3
  309. package/server/{swarm-readiness-CQ_fwUWF.js → swarm-readiness-DlP_UjHq.js} +3 -3
  310. package/server/{system-prerequisites-Bza0ffAh.js → system-prerequisites-DUDj1YHf.js} +56 -29
  311. package/server/{teardown-workspace-CEgauF4U.js → teardown-workspace-DeTTImn-.js} +15 -15
  312. package/server/{test-agent-queue-DXDt0Xa-.js → test-agent-queue-MbxX5vqq.js} +6 -6
  313. package/server/{test-verdict-CmUBK5cT.js → test-verdict-bWYBtqBg.js} +1 -1
  314. package/server/{test-verdict-DFjjIHR5.js → test-verdict-gscuksPv.js} +1 -1
  315. package/server/{tldr-daemon-DL566HbH.js → tldr-daemon-BYFkts95.js} +1 -1
  316. package/server/{tldr-daemon-BDtLOIlO.js → tldr-daemon-C-69c3OI.js} +2 -2
  317. package/server/{tmux-DoThH6aj.js → tmux-B6z7h_vZ.js} +1 -1
  318. package/server/{tmux-ftABRAmc.js → tmux-R7N7y-Mh.js} +2 -2
  319. package/server/{token-CsOhvw42.js → token-BK6t8BIT.js} +2 -2
  320. package/server/token-util-DuPuNriz.js +3 -0
  321. package/server/{token-util-CTmczIfW.js → token-util-DxXu-vd1.js} +1 -1
  322. package/server/{tracker-config-B4itFzDo.js → tracker-config-G6latr8C.js} +2 -2
  323. package/server/{tracker-utils-BePq_oj-.js → tracker-utils-B4ylXZQK.js} +1 -1
  324. package/server/{tracker-utils-tnxxqROg.js → tracker-utils-DHv5pSDT.js} +2 -2
  325. package/server/{traefik-connect-m73vGebA.js → traefik-connect-Df2uXPsQ.js} +1 -1
  326. package/server/{tunnel-B2vxjx_b.js → tunnel-CDVKJpRv.js} +3 -3
  327. package/server/{tunnel-Cgj-IGIl.js → tunnel-DGdUkGoZ.js} +1 -1
  328. package/server/{types-BBNjPcqU.js → types-5M0lupud.js} +1 -1
  329. package/server/{uat-train-cKfM-_WW.js → uat-train-B05BWkp-.js} +1 -1
  330. package/server/{uat-train-CuEn0t9M.js → uat-train-DDSrSoV1.js} +25 -25
  331. package/server/validate-IfDGkaVR.js +177 -0
  332. package/server/{validation-CIi6pnI2.js → validation-CC9OPqJZ.js} +1 -1
  333. package/server/{validation-B5JxoPUS.js → validation-Dw1pzDzr.js} +4 -4
  334. package/server/{verification-artifact-C-lIHfUa.js → verification-artifact-B3itKTxu.js} +1 -1
  335. package/server/{verification-artifact-BcnIbigL.js → verification-artifact-TVFSz_q1.js} +1 -1
  336. package/server/{verification-runner-CDj4lD4t.js → verification-runner-BW4HOKAz.js} +1 -1
  337. package/server/{verification-runner-Br0S_Ous.js → verification-runner-CkgX6EtI.js} +91 -106
  338. package/server/{vtt-parser-DKpNNW5i.js → vtt-parser-DYPbKcIJ.js} +1 -1
  339. package/server/{work-agent-prompt-Yb2bd3Fq.js → work-agent-prompt-Du8Vh2aJ.js} +9 -9
  340. package/server/workflows-BQu4RFQ-.js +2 -0
  341. package/server/{workflows-C9WmILql.js → workflows-mbQzh6mQ.js} +18 -18
  342. package/server/{workspace-DuUdndHe.js → workspace--8tnhDI0.js} +1 -1
  343. package/server/{workspace-BVl4rihN.js → workspace-BPUws1-_.js} +3 -3
  344. package/server/{workspace-config-cEGcO6UT.js → workspace-config-CIVWZOQr.js} +1 -1
  345. package/server/{workspace-manager-hLUv3ADC.js → workspace-manager-CBhNdzE4.js} +66 -15
  346. package/server/workspace-manager-CWT55qeI.js +3 -0
  347. package/server/{workspace-metadata-DNpMixRq.js → workspace-metadata-BzHnwwX4.js} +1 -1
  348. package/server/{workspace-metadata-CskwzzhL.js → workspace-metadata-_WygnyoX.js} +2 -2
  349. package/server/{workspaces-hWvy9eKs.js → workspaces-Do_9J0LQ.js} +130 -111
  350. package/sync-sources/hooks/record-cost-event.js +6 -4
  351. package/sync-sources/skills/okf/README.md +11 -3
  352. package/sync-sources/skills/okf/SKILL.md +12 -1
  353. package/sync-sources/skills/okf/docs/USAGE.md +15 -0
  354. package/sync-sources/skills/okf/references/overdeck.md +28 -0
  355. package/sync-sources/skills/pan-flywheel/SKILL.md +18 -1
  356. package/sync-sources/skills/pan-knowledge/SKILL.md +10 -0
  357. package/sync-sources/skills/pan-orders/SKILL.md +33 -0
  358. package/sync-sources/skills/pan-start/SKILL.md +4 -0
  359. package/sync-sources/templates/traefik/dynamic/overdeck.yml.template +10 -0
  360. package/server/agent-state-Bg0lhqwj.js +0 -3
  361. package/server/agents-FlIgQ3ql.js +0 -3
  362. package/server/cli-BsVIHwzC.js +0 -3
  363. package/server/context-layers-B3Nt58jl.js +0 -4
  364. package/server/context-layers-ZYFcWiyc.js +0 -165
  365. package/server/deacon-swarm-9jRLS5Ke.js +0 -2
  366. package/server/dist-Bd3vn0Hw.js +0 -3
  367. package/server/flywheel-DMCUzDWg.js +0 -2
  368. package/server/flywheel-DSSpWmqF.js +0 -522
  369. package/server/flywheel-DcBkQvgE.js +0 -207
  370. package/server/forge-B-ZWyTRm.js +0 -2
  371. package/server/git-utils-Dry_Ka_D.js +0 -3
  372. package/server/hume-B_DbflNM.js +0 -3
  373. package/server/inspect-agent-ch-F-5Ci.js +0 -2
  374. package/server/layers-DzxSTGNA.js +0 -93
  375. package/server/merge-blockers-BsFjGrQ8.js +0 -41
  376. package/server/merge-ops-DlB1IM0Y.js +0 -2
  377. package/server/merge-set-DLz0MkGT.js +0 -139
  378. package/server/public/assets/mermaid-GHXKKRXX-BUAB8hqt.js +0 -1
  379. package/server/rally-njs_mJrt.js +0 -3
  380. package/server/rebuild-stack-kA7XngID.js +0 -3
  381. package/server/resume-CcKqnTvE.js +0 -3
  382. package/server/settings-D0OSwos5.js +0 -2
  383. package/server/specs-nN45DG2X.js +0 -3
  384. package/server/stack-health-Df0YEZKa.js +0 -3
  385. package/server/supervisor-BPy-o1A8.js +0 -2
  386. package/server/token-util-DrHg8abn.js +0 -3
  387. package/server/workflows-D90rMOya.js +0 -2
  388. package/server/workspace-manager-ZTdJAy9M.js +0 -3
@@ -1,522 +0,0 @@
1
- import { a as __toCommonJS } from "./rolldown-runtime-DNCzzKnI.js";
2
- import { Tn as init_projects, fn as findProjectByPathSync, vn as getProjectSwarmHotspots } from "./config-yaml-DvyMuOle.js";
3
- import { t as init_src, v as FlywheelRunId, y as FlywheelStatus } from "./src-U7_kTPEE.js";
4
- import { c as getReviewStatusSync, l as init_review_status } from "./review-status-A7quS5KJ.js";
5
- import { a as countAgentsByStatusRole, o as init_agents } from "./agents-B4Bjbkfv.js";
6
- import { Bn as getAgentDir, b as init_agents$1, ft as stopAgent, ut as spawnRun } from "./queries-6d7Cdtm7.js";
7
- import { n as init_issue_service_singleton, r as issue_service_singleton_exports } from "./issue-service-singleton-B5ushCvE.js";
8
- import { o as getInternalTokenSync, s as init_internal_token, t as INTERNAL_TOKEN_HEADER } from "./internal-token-Bb4XeV2x.js";
9
- import { d as isFlywheelAutoPickupBacklog, f as isFlywheelGloballyPaused, i as getFlywheelActiveRunId, p as isFlywheelRequireUatBeforeMerge, s as init_control_settings, x as setFlywheelGloballyPaused, y as setFlywheelActiveRunId } from "./control-settings-aP1ANIlI.js";
10
- import { n as parseSequenceMd, t as init_sequence_io } from "./sequence-io-Cg0zYj_E.js";
11
- import { a as declaredIssueFootprint, i as computePredictedConflictSignals, s as pickFromSequence } from "./flywheel-merge-order-DxbQKE1d.js";
12
- import { i as gatherProjectLensSignals, n as init_pipeline_membership, o as init_pipeline_membership_gather, r as resolvePipelineMembership } from "./pipeline-membership-0HaEGDlH.js";
13
- import { dirname, join } from "node:path";
14
- import { Effect, Schema } from "effect";
15
- import { homedir } from "node:os";
16
- import { existsSync, readFileSync, readdirSync } from "node:fs";
17
- import { mkdir, readFile, readdir, rename, stat as stat$1, writeFile } from "node:fs/promises";
18
- //#region services/flywheel-run-state.ts
19
- init_projects();
20
- init_internal_token();
21
- init_review_status();
22
- init_agents$1();
23
- init_src();
24
- init_control_settings();
25
- init_agents();
26
- const decodeFlywheelStatus = Schema.decodeUnknownSync(FlywheelStatus);
27
- const decodeFlywheelRunId$1 = Schema.decodeUnknownSync(FlywheelRunId);
28
- const RUN_ID_PATTERN = /^RUN-(\d+)$/;
29
- const DEFAULT_RUNS_LIMIT = 20;
30
- const MAX_RUNS_LIMIT = 100;
31
- const RUN_SUMMARY_CONCURRENCY = 4;
32
- const flywheelStatusListeners = /* @__PURE__ */ new Set();
33
- function subscribeLatestFlywheelStatus(listener) {
34
- flywheelStatusListeners.add(listener);
35
- return () => {
36
- flywheelStatusListeners.delete(listener);
37
- };
38
- }
39
- function publishLatestFlywheelStatus(status) {
40
- for (const listener of flywheelStatusListeners) listener(status);
41
- }
42
- function publishFlywheelStatusCleared() {
43
- publishLatestFlywheelStatus(null);
44
- }
45
- function parseFlywheelRunId(runId) {
46
- return decodeFlywheelRunId$1(runId);
47
- }
48
- function isFlywheelRunId(runId) {
49
- return RUN_ID_PATTERN.test(runId);
50
- }
51
- function runNumber(runId) {
52
- const match = RUN_ID_PATTERN.exec(runId);
53
- return match ? Number(match[1]) : 0;
54
- }
55
- function normalizeLimit(limit) {
56
- if (limit === void 0) return DEFAULT_RUNS_LIMIT;
57
- if (!Number.isFinite(limit) || limit <= 0) return DEFAULT_RUNS_LIMIT;
58
- return Math.min(Math.floor(limit), MAX_RUNS_LIMIT);
59
- }
60
- async function mapWithConcurrency(items, concurrency, mapper) {
61
- const results = new Array(items.length);
62
- let index = 0;
63
- await Promise.all(Array.from({ length: Math.min(concurrency, items.length) }, async () => {
64
- while (index < items.length) {
65
- const current = index;
66
- index += 1;
67
- results[current] = await mapper(items[current]);
68
- }
69
- }));
70
- return results;
71
- }
72
- function getFlywheelHome(options = {}) {
73
- return join(options.overdeckHome ?? process.env["OVERDECK_HOME"] ?? join(homedir(), ".overdeck"), "flywheel");
74
- }
75
- function getFlywheelRunsDir(options = {}) {
76
- return join(getFlywheelHome(options), "runs");
77
- }
78
- function getFlywheelRunDir(runId, options = {}) {
79
- return join(getFlywheelRunsDir(options), parseFlywheelRunId(runId));
80
- }
81
- async function nextFlywheelRunId(options = {}) {
82
- const runsDir = getFlywheelRunsDir(options);
83
- await mkdir(runsDir, { recursive: true });
84
- return parseFlywheelRunId(`RUN-${(await readdir(runsDir, { withFileTypes: true })).reduce((max, entry) => {
85
- if (!entry.isDirectory()) return max;
86
- const match = RUN_ID_PATTERN.exec(entry.name);
87
- if (!match) return max;
88
- return Math.max(max, Number(match[1]));
89
- }, 0) + 1}`);
90
- }
91
- async function writeJsonAtomic(path, payload) {
92
- const tmpPath = join(dirname(path), `.${process.pid}.${Date.now()}.${Math.random().toString(36).slice(2)}.tmp`);
93
- await mkdir(dirname(path), { recursive: true });
94
- await writeFile(tmpPath, `${JSON.stringify(payload, null, 2)}\n`, "utf8");
95
- await rename(tmpPath, path);
96
- return path;
97
- }
98
- async function writeLatestFlywheelStatus(status, options = {}) {
99
- const latestPath = join(getFlywheelRunDir(status.runId, options), "latest.json");
100
- await writeJsonAtomic(latestPath, status);
101
- publishLatestFlywheelStatus(status);
102
- return latestPath;
103
- }
104
- function decodeLaunchMetadata(payload) {
105
- if (typeof payload !== "object" || payload === null) throw new Error("Invalid Flywheel launch metadata");
106
- const record = payload;
107
- if (record.version !== 1) throw new Error("Invalid Flywheel launch metadata version");
108
- for (const key of [
109
- "runId",
110
- "workspace",
111
- "briefPath",
112
- "briefDisplayPath"
113
- ]) if (typeof record[key] !== "string" || !record[key]) throw new Error(`Invalid Flywheel launch metadata: ${key}`);
114
- return record;
115
- }
116
- async function writeFlywheelLaunchMetadata(metadata, options = {}) {
117
- const runId = parseFlywheelRunId(metadata.runId);
118
- return writeJsonAtomic(join(getFlywheelRunDir(runId, options), "launch.json"), {
119
- ...metadata,
120
- runId
121
- });
122
- }
123
- async function readFlywheelLaunchMetadata(runId, options = {}) {
124
- const launchPath = join(getFlywheelRunDir(runId, options), "launch.json");
125
- try {
126
- return decodeLaunchMetadata(JSON.parse(await readFile(launchPath, "utf8")));
127
- } catch (error) {
128
- if ((typeof error === "object" && error !== null && "code" in error ? error.code : void 0) === "ENOENT") return null;
129
- throw error;
130
- }
131
- }
132
- async function readLatestFlywheelStatus(runId, options = {}) {
133
- const latestPath = join(getFlywheelRunDir(runId, options), "latest.json");
134
- try {
135
- return decodeFlywheelStatus(JSON.parse(await readFile(latestPath, "utf8")));
136
- } catch (error) {
137
- if ((typeof error === "object" && error !== null && "code" in error ? error.code : void 0) === "ENOENT") return null;
138
- throw error;
139
- }
140
- }
141
- async function fileExists(path) {
142
- try {
143
- return (await stat$1(path)).isFile();
144
- } catch (error) {
145
- if ((typeof error === "object" && error !== null && "code" in error ? error.code : void 0) === "ENOENT") return false;
146
- throw error;
147
- }
148
- }
149
- async function deriveRunStatus(runDir, runId, activeRunId) {
150
- if (await fileExists(join(runDir, "aborted.json"))) return "aborted";
151
- if (await fileExists(join(runDir, "report.md"))) return "complete";
152
- if (activeRunId !== runId) return "aborted";
153
- return isFlywheelGloballyPaused() ? "paused" : "running";
154
- }
155
- async function summarizeRun(runId, options, activeRunId) {
156
- const runDir = getFlywheelRunDir(runId, options);
157
- const latest = await readLatestFlywheelStatus(runId, options);
158
- const status = await deriveRunStatus(runDir, runId, activeRunId);
159
- return {
160
- id: runId,
161
- startedAt: latest?.startedAt ?? "",
162
- status
163
- };
164
- }
165
- async function readCurrentLatestFlywheelStatus(options = {}) {
166
- const activeRunId = options.activeRunId === void 0 ? getFlywheelActiveRunId() : options.activeRunId;
167
- if (!activeRunId || !isFlywheelRunId(activeRunId)) return null;
168
- const activeRun = await getFlywheelRunDetail(activeRunId, options);
169
- return activeRun?.status === "running" || activeRun?.status === "paused" ? activeRun.latest : null;
170
- }
171
- function selectLatestRunIds(entries, limit) {
172
- const selected = [];
173
- for (const entry of entries) {
174
- if (!entry.isDirectory() || !isFlywheelRunId(entry.name)) continue;
175
- selected.push(entry.name);
176
- selected.sort((a, b) => runNumber(b) - runNumber(a));
177
- if (selected.length > limit) selected.length = limit;
178
- }
179
- return selected;
180
- }
181
- async function listFlywheelRuns(options = {}) {
182
- const runsDir = getFlywheelRunsDir(options);
183
- let entries;
184
- try {
185
- entries = await readdir(runsDir, { withFileTypes: true });
186
- } catch (error) {
187
- if ((typeof error === "object" && error !== null && "code" in error ? error.code : void 0) === "ENOENT") return [];
188
- throw error;
189
- }
190
- const runIds = selectLatestRunIds(entries, normalizeLimit(options.limit));
191
- const activeRunId = getFlywheelActiveRunId();
192
- return (await mapWithConcurrency(runIds, RUN_SUMMARY_CONCURRENCY, (runId) => summarizeRun(runId, options, activeRunId))).sort((a, b) => b.startedAt.localeCompare(a.startedAt));
193
- }
194
- /**
195
- * PAN-1528/PAN-1908: overlay the flywheel capacity gauge from the indexed
196
- * agents table. This status path must not enumerate state.json files.
197
- */
198
- async function countLiveWorkAgents(_options = {}) {
199
- return countAgentsByStatusRole("running", "work");
200
- }
201
- function withLiveAgentsActive(latest, liveCount) {
202
- if (latest.system.agentsActive === liveCount) return latest;
203
- return {
204
- ...latest,
205
- system: {
206
- ...latest.system,
207
- agentsActive: liveCount
208
- }
209
- };
210
- }
211
- async function getFlywheelRunDetail(runId, options = {}) {
212
- const runDir = getFlywheelRunDir(runId, options);
213
- const latest = await readLatestFlywheelStatus(runId, options);
214
- if (!latest) return null;
215
- const status = await deriveRunStatus(runDir, runId, options.activeRunId !== void 0 ? options.activeRunId : getFlywheelActiveRunId());
216
- const reportPath = join(runDir, "report.md");
217
- const openedPrPath = join(runDir, "opened-pr.json");
218
- const liveCount = await countLiveWorkAgents(options);
219
- return {
220
- id: runId,
221
- startedAt: latest.startedAt,
222
- status,
223
- latest: withLiveAgentsActive(latest, liveCount),
224
- paths: {
225
- latest: join(runDir, "latest.json"),
226
- ...await fileExists(reportPath) ? { report: reportPath } : {},
227
- ...await fileExists(openedPrPath) ? { openedPr: openedPrPath } : {}
228
- }
229
- };
230
- }
231
- function clearFlywheelGate() {
232
- setFlywheelActiveRunId(null);
233
- setFlywheelGloballyPaused(false);
234
- publishFlywheelStatusCleared();
235
- }
236
- async function resolveLiveFlywheelRunId(options = {}) {
237
- const candidate = getFlywheelActiveRunId();
238
- if (!candidate) return null;
239
- if (!isFlywheelRunId(candidate)) {
240
- clearFlywheelGate();
241
- return null;
242
- }
243
- if (!await readLatestFlywheelStatus(candidate, options)) {
244
- clearFlywheelGate();
245
- return null;
246
- }
247
- const status = await deriveRunStatus(getFlywheelRunDir(candidate, options), candidate, candidate);
248
- if (status === "complete" || status === "aborted") {
249
- clearFlywheelGate();
250
- return null;
251
- }
252
- return candidate;
253
- }
254
- async function abortFlywheelRun(runId, options = {}) {
255
- const parsed = parseFlywheelRunId(runId);
256
- await writeJsonAtomic(join(getFlywheelRunDir(parsed, options), "aborted.json"), {
257
- runId: parsed,
258
- abortedAt: (/* @__PURE__ */ new Date()).toISOString()
259
- });
260
- if (getFlywheelActiveRunId() === parsed) clearFlywheelGate();
261
- }
262
- //#endregion
263
- //#region ../../lib/backlog/lookups.ts
264
- init_sequence_io();
265
- /**
266
- * Build the {@link ClassifyLookups} the shared pickup module needs from live project
267
- * state: labels (in-memory issue service), planned (readable xBRIEF spec), and
268
- * in-pipeline (review status / live workspace). Shared by the dashboard forecast
269
- * route and the Flywheel run-cohort snapshot so both classify issues identically
270
- * (PAN-2006 single source of truth). The issue service is lazy-required to avoid a
271
- * static lib → dashboard layering edge.
272
- */
273
- function buildClassifyLookups(projectRoot, opts = {}) {
274
- const labelsByIssue = /* @__PURE__ */ new Map();
275
- if (!opts?.labels) try {
276
- const { getSharedIssueService } = (init_issue_service_singleton(), __toCommonJS(issue_service_singleton_exports));
277
- for (const issue of getSharedIssueService().getIssues()) {
278
- const id = typeof issue["identifier"] === "string" ? issue["identifier"].toUpperCase() : "";
279
- if (!id) continue;
280
- const names = (Array.isArray(issue["labels"]) ? issue["labels"] : []).map((l) => typeof l === "string" ? l : l?.name ?? "").filter((s) => Boolean(s));
281
- labelsByIssue.set(id, names);
282
- }
283
- } catch {}
284
- const specsDir = join(projectRoot, ".pan", "specs");
285
- const specIssues = /* @__PURE__ */ new Set();
286
- if (existsSync(specsDir)) for (const f of readdirSync(specsDir)) {
287
- const m = /^[\d-]+-([A-Z]+-\d+)-/i.exec(f);
288
- if (m) specIssues.add(m[1].toUpperCase());
289
- }
290
- const workspacesDir = join(projectRoot, "workspaces");
291
- return {
292
- labels: opts?.labels ?? ((id) => labelsByIssue.get(id.toUpperCase()) ?? []),
293
- isPlanned: (id) => {
294
- const u = id.toUpperCase();
295
- return specIssues.has(u);
296
- },
297
- isInPipeline: (id) => {
298
- const rs = getReviewStatusSync(id.toUpperCase());
299
- return rs !== null && rs.reviewStatus !== "pending" || existsSync(join(workspacesDir, `feature-${id.toLowerCase()}`));
300
- }
301
- };
302
- }
303
- //#endregion
304
- //#region ../../lib/cloister/flywheel.ts
305
- init_control_settings();
306
- init_pipeline_membership_gather();
307
- init_pipeline_membership();
308
- const FLYWHEEL_ORCHESTRATOR_AGENT_ID = "flywheel-orchestrator";
309
- function isIssueInResolvedPipeline(issueId, memberships) {
310
- return memberships.some((membership) => membership.issueId.toUpperCase() === issueId.toUpperCase() && membership.inPipeline);
311
- }
312
- const FlywheelRunIdSchema = Schema.String.check(Schema.isPattern(/^RUN-\d+$/));
313
- const decodeFlywheelRunId = Schema.decodeUnknownSync(FlywheelRunIdSchema);
314
- function parseRunId(runId) {
315
- return decodeFlywheelRunId(runId);
316
- }
317
- function internalDashboardOrigin() {
318
- const port = Number.parseInt(process.env["API_PORT"] ?? process.env["PORT"] ?? "3011", 10);
319
- return process.env["OVERDECK_INTERNAL_DASHBOARD_URL"] ?? `http://127.0.0.1:${port}`;
320
- }
321
- async function fetchIssueRowsFromDashboard() {
322
- const dashboardOrigin = internalDashboardOrigin();
323
- const token = getInternalTokenSync();
324
- if (!token) {
325
- console.error("[flywheel] Cannot load issue metadata: internal dashboard token is unavailable");
326
- return [];
327
- }
328
- try {
329
- const response = await fetch(new URL("/api/issues?cycle=all&includeCompleted=true", dashboardOrigin), { headers: {
330
- [INTERNAL_TOKEN_HEADER]: token,
331
- origin: dashboardOrigin
332
- } });
333
- if (!response.ok) {
334
- console.error(`[flywheel] Cannot load issue metadata from dashboard: HTTP ${response.status}`);
335
- return [];
336
- }
337
- const body = await response.json();
338
- if (!Array.isArray(body)) {
339
- console.error("[flywheel] Cannot load issue metadata from dashboard: response was not an array");
340
- return [];
341
- }
342
- return body;
343
- } catch (error) {
344
- console.error("[flywheel] Cannot load issue metadata from dashboard:", error);
345
- return [];
346
- }
347
- }
348
- async function flywheelRunConfigurationSection(options) {
349
- const configLines = [
350
- options.harness ? `Harness: ${options.harness}` : void 0,
351
- options.effort ? `Effort: ${options.effort}` : void 0,
352
- options.minAgents ? `Min concurrent agents (target): ${options.minAgents}` : void 0,
353
- options.maxAgents ? `Max concurrent agents (ceiling): ${options.maxAgents}` : void 0,
354
- options.scope ? `Scope: ${options.scope}` : void 0,
355
- typeof options.autoPickupBacklog === "boolean" ? `Auto-pickup backlog: ${options.autoPickupBacklog}` : void 0,
356
- typeof options.requireUatBeforeMerge === "boolean" ? `Require UAT before merge: ${options.requireUatBeforeMerge}` : void 0
357
- ].filter(Boolean).join("\n");
358
- let sequenceSection = "";
359
- if (options.autoPickupBacklog) {
360
- const seqPath = join(process.cwd(), ".pan", "backlog", "sequence.md");
361
- if (existsSync(seqPath)) try {
362
- const parsed = parseSequenceMd(readFileSync(seqPath, "utf-8"));
363
- if (parsed.ok) {
364
- const getIssueRows = async () => fetchIssueRowsFromDashboard();
365
- const issueRowMap = new Map((await getIssueRows()).map((i) => [i.ref ?? i.identifier ?? "", i]));
366
- const issueLabelsLookup = (issueId) => issueRowMap.get(issueId)?.labels ?? [];
367
- const AUTHORIZED_AUTHORS = new Set(["eltmon", "panopticon-agent[bot]"]);
368
- const isAuthorizedIssue = (issueId) => {
369
- const row = issueRowMap.get(issueId);
370
- if (!row) return false;
371
- if (row.author && AUTHORIZED_AUTHORS.has(row.author)) return true;
372
- return (typeof row.assignee === "string" ? row.assignee : row.assignee?.name) === "eltmon";
373
- };
374
- const projectRoot = process.cwd();
375
- const specsDir = join(projectRoot, ".pan", "specs");
376
- const issuesWithSpecs = /* @__PURE__ */ new Set();
377
- const declaredFootprints = [];
378
- if (existsSync(specsDir)) for (const f of readdirSync(specsDir)) {
379
- const match = /^[\d-]+-([A-Z]+-\d+)-/i.exec(f);
380
- if (!match) continue;
381
- const issueId = match[1].toUpperCase();
382
- issuesWithSpecs.add(issueId);
383
- try {
384
- const doc = JSON.parse(readFileSync(join(specsDir, f), "utf-8"));
385
- declaredFootprints.push(declaredIssueFootprint(issueId, doc));
386
- } catch {}
387
- }
388
- const projectConfig = findProjectByPathSync(projectRoot);
389
- const predictedConflictSignals = computePredictedConflictSignals(declaredFootprints, { hotspots: getProjectSwarmHotspots(projectConfig) });
390
- const isReadyOrHasPrd = (issueId) => {
391
- const id = issueId.toUpperCase();
392
- if (issuesWithSpecs.has(id)) return true;
393
- return existsSync(join(projectRoot, ".pan", "drafts", `${id}.md`));
394
- };
395
- const membershipAvailable = Boolean(projectConfig?.github_repo);
396
- const memberships = projectConfig?.github_repo ? (await gatherProjectLensSignals(projectConfig)).map(resolvePipelineMembership) : [];
397
- const isInPipeline = (issueId) => membershipAvailable ? isIssueInResolvedPipeline(issueId, memberships) : true;
398
- const top10 = parsed.doc.nodes.slice(0, 10).map((n) => ` #${n.rank} ${n.issue}: ${n.why.slice(0, 100)} [gate:${n.gate}]`);
399
- const nextPick = pickFromSequence(parsed.doc.nodes, {
400
- issueLabels: issueLabelsLookup,
401
- isAuthorizedIssue,
402
- isReadyOrHasPrd,
403
- isInPipeline,
404
- requireReady: true,
405
- autoPickupBacklog: options.autoPickupBacklog,
406
- predictedConflictSignals
407
- });
408
- let nextLine;
409
- let pickInstruction;
410
- if (!membershipAvailable) {
411
- nextLine = "MEMBERSHIP UNAVAILABLE: project has no GitHub repository; auto-pickup is disabled";
412
- pickInstruction = "\n\nIMPORTANT: Canonical pipeline membership is unavailable for this project. Do NOT auto-start backlog work; surface the missing github_repo configuration to the operator.";
413
- } else if (!nextPick) {
414
- nextLine = "No eligible issue found in sequence — fall back to normal priority";
415
- pickInstruction = "";
416
- } else if (nextPick.planning === "interactive") {
417
- nextLine = `NEEDS OPERATOR ACTION: ${nextPick.issueId} (rank ${nextPick.rank}) has planning=interactive — do NOT auto-start; operator must run 'pan plan ${nextPick.issueId}'`;
418
- pickInstruction = `\n\nIMPORTANT: auto_pickup_backlog=true. The top-ranked issue requires interactive planning and MUST NOT be auto-started. Surface it to the operator for manual 'pan plan' invocation instead of auto-picking it.`;
419
- } else {
420
- const conflictSuffix = typeof nextPick.predictedConflictCount === "number" ? `, predictedConflicts=${nextPick.predictedConflictCount}${nextPick.predictedConflictsWith?.length ? ` with ${nextPick.predictedConflictsWith.join(", ")}` : ""}` : "";
421
- nextLine = `MUST start next: ${nextPick.issueId} (rank ${nextPick.rank}, planning=${nextPick.planning}${conflictSuffix})`;
422
- pickInstruction = `\n\nIMPORTANT: auto_pickup_backlog=true. You MUST pick the "MUST start next" issue above as your next startup target. Do NOT apply your own P0-P3/oldest-first ranking while a sequence is available.`;
423
- }
424
- sequenceSection = `\n\nBacklog sequence (${parsed.doc.nodes.length} issues ranked):\n${top10.join("\n")}\n${nextLine}${pickInstruction}`;
425
- }
426
- } catch {}
427
- }
428
- return (configLines ? `\n\nRun configuration:\n${configLines}` : "") + sequenceSection;
429
- }
430
- async function defaultFlywheelPrompt(runId, options, briefContent) {
431
- return `FLYWHEEL ORCHESTRATOR TASK for ${runId}:
432
-
433
- Run the Fix-All Flywheel loop. Keep status snapshots current, coordinate Overdeck roles through the normal pipeline surfaces, respect the configured run scope and agent cap, and wait for explicit lifecycle instructions when the run is paused or complete.${await flywheelRunConfigurationSection(options)}${options.briefPath ? `\n\nBrief path: ${options.briefPath}\n\n${briefContent ?? ""}` : ""}`;
434
- }
435
- function getLocalFlywheelRunDir(runId) {
436
- return join(process.env.OVERDECK_HOME ?? join(homedir(), ".overdeck"), "flywheel", "runs", runId);
437
- }
438
- async function saveResumeSessionId(runId, sessionId) {
439
- const runDir = getLocalFlywheelRunDir(runId);
440
- await mkdir(runDir, { recursive: true });
441
- await writeFile(join(runDir, "resume-session.json"), JSON.stringify({
442
- sessionId,
443
- pausedAt: (/* @__PURE__ */ new Date()).toISOString()
444
- }), "utf-8");
445
- }
446
- async function loadResumeSessionId(runId) {
447
- try {
448
- const raw = await readFile(join(getLocalFlywheelRunDir(runId), "resume-session.json"), "utf-8");
449
- const parsed = JSON.parse(raw);
450
- return typeof parsed.sessionId === "string" ? parsed.sessionId : null;
451
- } catch {
452
- return null;
453
- }
454
- }
455
- function isFlywheelDevcontainerRuntime(env = process.env) {
456
- const disabledDeacon = env.OVERDECK_DISABLE_DEACON?.toLowerCase();
457
- if (disabledDeacon === "1" || disabledDeacon === "true") return true;
458
- const hostname = env.HOSTNAME?.toLowerCase() ?? "";
459
- return hostname.includes("devcontainer") || hostname.startsWith("api-feature-") || hostname.startsWith("workspace-");
460
- }
461
- /**
462
- * Resume prompt. PAN-2006 FR-8: re-attach the standing brief on resume so its
463
- * directives (pipeline-unblock override, never-block, red-main-first) survive a
464
- * resume + context compaction — the pre-PAN-2006 resume prompt only pointed at
465
- * FLYWHEEL-STATE.md and a long-running orchestrator could drift off-brief.
466
- */
467
- function buildFlywheelResumePrompt(configSection, briefContent) {
468
- return `FLYWHEEL RESUME: You were paused by the operator. Resume the tick loop from your prior state. Check \`docs/FLYWHEEL-STATE.md\` and the latest status snapshot for context.${configSection}${briefContent ? `\n\n--- Standing brief (re-read it — it governs pickup, unblocking, and never-block) ---\n\n${briefContent}` : ""}`;
469
- }
470
- async function spawnFlywheelAgent(runId, options = {}) {
471
- const workspace = options.workspace ?? process.cwd();
472
- const briefContent = await readFile(options.briefPath ?? join(workspace, "docs", "flywheel-brief.md"), "utf8").catch(() => void 0);
473
- return spawnRun(runId, "flywheel", {
474
- agentId: FLYWHEEL_ORCHESTRATOR_AGENT_ID,
475
- workspace,
476
- prompt: options.resumeSessionId ? buildFlywheelResumePrompt(await flywheelRunConfigurationSection(options), briefContent) : options.prompt ?? await defaultFlywheelPrompt(runId, options, briefContent),
477
- model: options.model,
478
- harness: options.harness,
479
- effort: options.effort,
480
- allowHost: true,
481
- registerConversation: true,
482
- resumeSessionId: options.resumeSessionId,
483
- flywheelRunId: runId
484
- });
485
- }
486
- function withFlywheelAutonomyOptions(options) {
487
- return {
488
- ...options,
489
- autoPickupBacklog: options.autoPickupBacklog ?? isFlywheelAutoPickupBacklog(),
490
- requireUatBeforeMerge: options.requireUatBeforeMerge ?? isFlywheelRequireUatBeforeMerge()
491
- };
492
- }
493
- async function pauseFlywheel() {
494
- const activeRunId = getFlywheelActiveRunId();
495
- if (activeRunId) try {
496
- const sessionId = (await readFile(join(getAgentDir(FLYWHEEL_ORCHESTRATOR_AGENT_ID), "session.id"), "utf-8")).trim();
497
- if (sessionId) await saveResumeSessionId(activeRunId, sessionId);
498
- } catch {}
499
- setFlywheelGloballyPaused(true);
500
- await Effect.runPromise(stopAgent(FLYWHEEL_ORCHESTRATOR_AGENT_ID));
501
- return { activeRunId };
502
- }
503
- async function resumeFlywheel(options = {}) {
504
- if (isFlywheelDevcontainerRuntime(options.env)) throw new Error("Refusing to resume flywheel-orchestrator inside a workspace devcontainer");
505
- const activeRunId = getFlywheelActiveRunId();
506
- if (!activeRunId) throw new Error("No active flywheel run to resume");
507
- const runId = parseRunId(activeRunId);
508
- const resumeSessionId = options.resumeSessionId ?? await loadResumeSessionId(runId) ?? void 0;
509
- const agent = await spawnFlywheelAgent(runId, withFlywheelAutonomyOptions({
510
- ...options,
511
- resumeSessionId
512
- }));
513
- setFlywheelGloballyPaused(false);
514
- return {
515
- activeRunId,
516
- agent
517
- };
518
- }
519
- //#endregion
520
- export { writeLatestFlywheelStatus as C, writeFlywheelLaunchMetadata as S, nextFlywheelRunId as _, loadResumeSessionId as a, resolveLiveFlywheelRunId as b, saveResumeSessionId as c, abortFlywheelRun as d, clearFlywheelGate as f, listFlywheelRuns as g, isFlywheelRunId as h, isIssueInResolvedPipeline as i, spawnFlywheelAgent as l, getFlywheelRunDir as m, buildFlywheelResumePrompt as n, pauseFlywheel as o, getFlywheelRunDetail as p, isFlywheelDevcontainerRuntime as r, resumeFlywheel as s, FLYWHEEL_ORCHESTRATOR_AGENT_ID as t, buildClassifyLookups as u, readCurrentLatestFlywheelStatus as v, subscribeLatestFlywheelStatus as x, readFlywheelLaunchMetadata as y };
521
-
522
- //# sourceMappingURL=flywheel-DSSpWmqF.js.map