@overdeck/desktop 0.45.22 → 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 (429) hide show
  1. package/drizzle/overdeck/0000_overdeck_init.sql +2 -0
  2. package/package.json +1 -1
  3. package/server/{acceptance-criteria-BH7ac_1G.js → acceptance-criteria-DDCnXF58.js} +5 -5
  4. package/server/{advancing-selfheal-cSvXNZLZ.js → advancing-selfheal-BVwW4qRn.js} +6 -6
  5. package/server/{agent-gc-Dj2gncak.js → agent-gc-CHcnvonI.js} +4 -4
  6. package/server/agent-state-Bc3tzUC8.js +3 -0
  7. package/server/{agent-state-service-DistflNn.js → agent-state-service-BsgWxZuB.js} +5 -5
  8. package/server/{agent-state-service-CsQ07Pxe.js → agent-state-service-D5UGKIJL.js} +1 -1
  9. package/server/{agents-DXdHmRTC.js → agents-EbI0zCJl.js} +4 -4
  10. package/server/agents-wi9NWzs2.js +3 -0
  11. package/server/{archive-planning-Cp_DC1j-.js → archive-planning-BZDgzoEj.js} +1 -1
  12. package/server/{archive-planning-BvDuWNMo.js → archive-planning-Du25Jtst.js} +30 -6
  13. package/server/{artifact-index-jobs-CDBFL4OU.js → artifact-index-jobs-CbEDfCDu.js} +2 -2
  14. package/server/assemble-J2ZZ2C15.js +339 -0
  15. package/server/{backlog-auto-trigger-DmA1IbYf.js → backlog-auto-trigger-2R2jog7n.js} +3 -3
  16. package/server/{behavior-CGj16clS.js → behavior-B3exJ42O.js} +2 -2
  17. package/server/{briefing-freshness-C12WgkaB.js → briefing-freshness-D1wzUIWv.js} +2 -2
  18. package/server/{build-info-BRpqQvNd.js → build-info-CZk_TITh.js} +1 -1
  19. package/server/{build-info-NU3KbXYw.js → build-info-Ie_D0_BT.js} +3 -3
  20. package/server/{checkpoint-manager-CTPjAmtH.js → checkpoint-manager-BI1Wxoku.js} +2 -2
  21. package/server/{checkpoint-manager-rOgT98WY.js → checkpoint-manager-DwbQoqrC.js} +1 -1
  22. package/server/checkpoint-worker.js +1 -1
  23. package/server/{checkpoints-B5jFNi2G.js → checkpoints-BJIs5QIA.js} +1 -1
  24. package/server/{checkpoints-BJum14fs.js → checkpoints-CQB1h765.js} +2 -2
  25. package/server/{claude-hooks-provision-BhwWK-TQ.js → claude-hooks-provision-8Ngo8TpT.js} +1 -1
  26. package/server/{claude-hooks-provision-D7p5WcKZ.js → claude-hooks-provision-D8GXF3_s.js} +2 -2
  27. package/server/{claude-permissions-nSFKH78M.js → claude-permissions-DNWEVV6z.js} +2 -2
  28. package/server/{claude-settings-overlay-BI_UIke0.js → claude-settings-overlay-CEdaqpWI.js} +2 -2
  29. package/server/{claude-settings-overlay-DHBwjS1X.js → claude-settings-overlay-DWy-Bb4Y.js} +1 -1
  30. package/server/cli-B86rejVV.js +3 -0
  31. package/server/{cli-CbKNkFE5.js → cli-RoOx5DUf.js} +9 -9
  32. package/server/{cliproxy-Brf_5MuG.js → cliproxy-C8a1vtTU.js} +2 -2
  33. package/server/{cliproxy-bONZDBbC.js → cliproxy-fHfIeiGd.js} +1 -1
  34. package/server/{close-issue-CxReRxIc.js → close-issue-DoOifFIK.js} +5 -5
  35. package/server/{closed-issue-reaper-CQ3kqha7.js → closed-issue-reaper-Bk3SU4RC.js} +9 -9
  36. package/server/{closed-issue-reaper-DXP2Xyv3.js → closed-issue-reaper-CktPXo8m.js} +1 -1
  37. package/server/{codex-CbmztVcc.js → codex-BZXGhUVB.js} +27 -8
  38. package/server/codex-GcHuUF-k.js +3 -0
  39. package/server/{codex-parser-jl8AeAmB.js → codex-parser-CFZ1_1Jl.js} +2 -2
  40. package/server/{config-q4Gvd8dq.js → config-BZ0sHTju.js} +2 -2
  41. package/server/{config-DeTsoZdR.js → config-CKxYiCmX.js} +2 -2
  42. package/server/{config-BJKocXKd.js → config-DzV30TOm.js} +1 -1
  43. package/server/{config-yaml-ig8Nwtiw.js → config-yaml-DySPNmKN.js} +77 -194
  44. package/server/{conflict-gate-CFqPVxEg.js → conflict-gate-BaCVrH-N.js} +3 -3
  45. package/server/{conflict-gate-CHU9K1vU.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-D_odMIaC.js → control-settings-BQp7_4uD.js} +4 -4
  49. package/server/{conversation-compaction-B6YSRLda.js → conversation-compaction-CgrR8YYp.js} +8 -8
  50. package/server/{conversation-compaction-CN4-5YYt.js → conversation-compaction-eQB5CkOe.js} +1 -1
  51. package/server/{conversation-service-Dq33SYEj.js → conversation-service-BLd3MYsG.js} +1 -1
  52. package/server/{conversation-service-C3avRVEr.js → conversation-service-DPJ71F33.js} +329 -19
  53. package/server/{conversations-bYpM9-kZ.js → conversations-6AfUfbwc.js} +5 -5
  54. package/server/{conversations-H9if0bCQ.js → conversations-CAsJF9kh.js} +1 -1
  55. package/server/{cost-Codk1pc2.js → cost-B2ddP6wq.js} +18 -2
  56. package/server/{cost-wH46-WsJ.js → cost-R-m6Yi-W.js} +3 -3
  57. package/server/{cost-sync-D_cre6WM.js → cost-sync-BsN6ER0n.js} +3 -3
  58. package/server/{dag-CJpgf9A3.js → dag-B1ucnjDU.js} +9 -9
  59. package/server/{dangerous-git-ops-D6AF-Hg_.js → dangerous-git-ops-BXqeWVSf.js} +1 -1
  60. package/server/dashboard-db-worker.js +7 -7
  61. package/server/{deacon-CkT_kznS.js → deacon-CU_cAYSR.js} +406 -607
  62. package/server/{deacon-B8HbQdqU.js → deacon-kiQrb4ZT.js} +3 -3
  63. package/server/{deacon-nudge-log-D6K9K-rE.js → deacon-nudge-log-6wVqAaqz.js} +3 -3
  64. package/server/{deacon-swarm-BryRr6AO.js → deacon-swarm-BXZZ1Z2-.js} +17 -17
  65. package/server/deacon-swarm-C-GwfjJy.js +2 -0
  66. package/server/deacon.js +8 -8
  67. package/server/{deploy-patrol-1IrZxicY.js → deploy-patrol-AiFoP8dw.js} +136 -19
  68. package/server/{deploy-window-wDf4UgHt.js → deploy-window-C3F-tihF.js} +77 -10
  69. package/server/{deploy-window-7ZYHh7Zp.js → deploy-window-DkZraDyj.js} +1 -1
  70. package/server/{dev-supervisor-C7p9kEpc.js → dev-supervisor-bcOWqdQE.js} +2 -2
  71. package/server/{devcontainer-renderer-CNmQy0pL.js → devcontainer-renderer-_d6XhyND.js} +3 -3
  72. package/server/dist-Bzy0y69j.js +3 -0
  73. package/server/{dist-D-Ed5yVw.js → dist-Cb_0uvpS.js} +1 -1
  74. package/server/{docker-BCZ89M9X.js → docker-DcMTFTUC.js} +2 -2
  75. package/server/{dod-DbJLYcHv.js → dod-C6n9RV3G.js} +1 -1
  76. package/server/{ensure-devcontainer-Cs6W9Yzj.js → ensure-devcontainer-BZgOhRo7.js} +1 -1
  77. package/server/{ensure-devcontainer-V5JWaAva.js → ensure-devcontainer-DNi-ono3.js} +4 -4
  78. package/server/{esm-shims-dTeNdq7X.js → esm-shims-OSHAYaS1.js} +1 -1
  79. package/server/{event-store-TnWdydfB.js → event-store-CQL6NeqB.js} +3 -3
  80. package/server/{event-store-CpBGsO6_.js → event-store-EV2cMiXj.js} +1 -1
  81. package/server/{events-Dsuv6qyB.js → events-BTdrdEq8.js} +1 -1
  82. package/server/{events-DSUdR-04.js → events-DTfAe4My.js} +3 -3
  83. package/server/{factory-BMrK4TrE.js → factory-CFibJuaw.js} +50 -13
  84. package/server/{feature-registry-population-B-CI9hgE.js → feature-registry-population-DKZFMbFt.js} +4 -4
  85. package/server/{feature-registry-storage-B972ph_A.js → feature-registry-storage-BdPuLcBX.js} +2 -2
  86. package/server/{features-Bc-Bmiye.js → features-ez2271oH.js} +2 -2
  87. package/server/{feedback-target-DZ-iAnAa.js → feedback-target-7mqqwrX6.js} +7 -7
  88. package/server/{feedback-target-DS6NUuSs.js → feedback-target-CoFDHiM8.js} +1 -1
  89. package/server/{feedback-writer-BXP6g75N.js → feedback-writer-CY5L1lB7.js} +6 -5
  90. package/server/{feedback-writer-Bx5z11mF.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-CTgHeg-W.js → flywheel-merge-order-UU0tiUld.js} +10 -9
  95. package/server/{flywheel-merge-order-CNKAY489.js → flywheel-merge-order-UUcsCDb6.js} +1 -1
  96. package/server/{forge-B1S_KZv4.js → forge-CNFnyqps.js} +2 -2
  97. package/server/forge-DXnS_YFH.js +2 -0
  98. package/server/{from-DpwQ-sc3.js → from-kNxT0bZC.js} +1 -1
  99. package/server/{fts-db-DmAcuCkV.js → fts-db-CE46vDkZ.js} +2 -2
  100. package/server/{fts-operations-7d_RkmWp.js → fts-operations-CqY6zl-i.js} +2 -2
  101. package/server/{git-utils-Cc3FHDKd.js → git-utils-CRw2zLPC.js} +68 -3
  102. package/server/git-utils-D0_yhCgF.js +3 -0
  103. package/server/{github-app-CDPtGF7J.js → github-app-C3QrAUd0.js} +27 -8
  104. package/server/{github-app-CU14oYzP.js → github-app-ClZ2lk8D.js} +1 -1
  105. package/server/{github-client-XjTJbBm7.js → github-client-BnIsSrEN.js} +2 -2
  106. package/server/{github-client-CwBZZ3t7.js → github-client-DfQYVUaw.js} +1 -1
  107. package/server/{github-pr-lookup-CFGeVhqv.js → github-pr-lookup-D16NGsSO.js} +2 -2
  108. package/server/{harness-binary-B2CTcD84.js → harness-binary-DPUi-Pv8.js} +32 -6
  109. package/server/{harness-resolve-D5FVQTmy.js → harness-resolve-3lNZkyT4.js} +18 -9
  110. package/server/{health-events-DREeevle.js → health-events-BBcTYQKU.js} +2 -2
  111. package/server/{health-events-C1whmd58.js → health-events-BDOHby5Q.js} +1 -1
  112. package/server/{hooks-yxRsjk-z.js → hooks-CKZgXlJb.js} +2 -2
  113. package/server/{hooks-B-HItBiS.js → hooks-DPVX1rwQ.js} +1 -1
  114. package/server/{hume-Dz_OymXE.js → hume-Cz8igP9E.js} +2 -2
  115. package/server/hume-ccTf4wTX.js +3 -0
  116. package/server/{idle-stack-reaper-DrCv0OAG.js → idle-stack-reaper-CuLF0j2H.js} +1 -1
  117. package/server/{idle-stack-reaper-Yf34xXxY.js → idle-stack-reaper-DDIRwxUY.js} +2 -2
  118. package/server/{in-flight-guard-BoWm66Kh.js → in-flight-guard-CAAkqPLu.js} +2 -2
  119. package/server/{infra-D4iNWMA5.js → infra-BEqFxlJc.js} +14 -4
  120. package/server/{injection-D7T75Pye.js → injection-C8aiVJrF.js} +191 -183
  121. package/server/{injection-BVNa4MQW.js → injection-CPUIqNhI.js} +1 -1
  122. package/server/{inspect-agent-BXCgNeZ4.js → inspect-agent-BLuJ1AkT.js} +137 -81
  123. package/server/inspect-agent-Brtz0URj.js +2 -0
  124. package/server/{internal-token-C9DdEOKY.js → internal-token-BrcU6qfe.js} +1 -1
  125. package/server/{internal-token-CXsfxslp.js → internal-token-s0-oKybJ.js} +2 -2
  126. package/server/{io-DQR9PMgS.js → io-C9kF1wtJ.js} +160 -184
  127. package/server/{issue-closed-DtmJM0D0.js → issue-closed-CDJk4pIp.js} +7 -7
  128. package/server/{issue-lifecycle-8PSS9Anq.js → issue-lifecycle-B8sZHVHh.js} +1 -1
  129. package/server/{issue-lifecycle-CeyW_HoD.js → issue-lifecycle-ojZAzDBP.js} +22 -22
  130. package/server/{issue-service-singleton-DBZabEl7.js → issue-service-singleton-BvJ09SaR.js} +1 -1
  131. package/server/{issue-service-singleton-D_RVYBuL.js → issue-service-singleton-Yx5DdmVJ.js} +8 -8
  132. package/server/{issues-pDW9VUNz.js → issues-BMmP_77e.js} +2 -2
  133. package/server/{jsonl-parser-C3HVNR5d.js → jsonl-parser-BXSlHwEh.js} +3 -3
  134. package/server/{label-cleanup-DPwiZlWo.js → label-cleanup-B0UJwnv5.js} +3 -3
  135. package/server/{label-reconciler-Df1ZduPH.js → label-reconciler-B4iOAjlC.js} +4 -4
  136. package/server/{launcher-generator-COgR2By1.js → launcher-generator-BBWG_SiS.js} +105 -10
  137. package/server/{lifecycle-io-taIb0PoH.js → lifecycle-io-BREGpnLk.js} +37 -37
  138. package/server/lifecycle-io-DPo7x11I.js +3 -0
  139. package/server/{lifecycle-CtPDcZ9u.js → lifecycle-xmBfK2GJ.js} +6 -6
  140. package/server/lifecycle-yPd___5E.js +121 -0
  141. package/server/{linear-client-DsFkIxee.js → linear-client-BsuUvkdA.js} +2 -2
  142. package/server/{linear-client-YwZMDIwQ.js → linear-client-CTskEeT_.js} +1 -1
  143. package/server/memory-fts-worker.js +1 -1
  144. package/server/{merge-BwsyNRJV.js → merge-B1DiziGU.js} +1 -1
  145. package/server/{merge-C1t-bspg.js → merge-CefQNAnq.js} +3 -3
  146. package/server/{merge-agent-DDiIjzk-.js → merge-agent-4WOWlSYA.js} +28 -28
  147. package/server/{merge-agent-B-SnXOoc.js → merge-agent-CKkgIBPB.js} +1 -1
  148. package/server/{merge-batch-Byt-QnEl.js → merge-batch-ClFn2T-y.js} +1 -1
  149. package/server/merge-ops-CR44oU9-.js +2 -0
  150. package/server/{merge-rebase-Cm6fXaZN.js → merge-rebase-BfaTyXsw.js} +2 -2
  151. package/server/merge-set-DJ8-UErs.js +83 -0
  152. package/server/{merge-set-6LEglm6o.js → merge-set-bUqbm3yc.js} +1 -1
  153. package/server/{merge-sync-B95_4in_.js → merge-sync-BJYeOODr.js} +1 -1
  154. package/server/{merge-sync-Do8_q32h.js → merge-sync-VPV28g0g.js} +2 -2
  155. package/server/{merge-train-CKana8EH.js → merge-train-CHopycP0.js} +3 -3
  156. package/server/{merge-train-deps-BgmqwIfA.js → merge-train-deps-D1cOZzy2.js} +4 -4
  157. package/server/{merge-verification-CqnUzGEK.js → merge-verification-BkaOqPsw.js} +4 -4
  158. package/server/{multipart-parser-tdOQDJ3o.js → multipart-parser-duPAfSBw.js} +2 -2
  159. package/server/{no-resume-mode-BWOSZjWd.js → no-resume-mode-Nw29vaFb.js} +11 -8
  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-xklgvNA7.js → orphan-proposed-reconciler-BvKkWMJQ.js} +15 -13
  190. package/server/{orphan-proposed-reconciler-DSvsJ5M7.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-DOcf6ug3.js → pan-dir-B0c3w0Ya.js} +78 -58
  194. package/server/{paths-DooHpt9p.js → paths-D-xWGHdh.js} +2 -2
  195. package/server/{pickup-CaskQ7j6.js → pickup-DUCLWrJY.js} +17 -16
  196. package/server/{pipeline-membership-1LGRjo-k.js → pipeline-membership-mY3GprlK.js} +186 -67
  197. package/server/{pipeline-notifier-CZsrU_nj.js → pipeline-notifier-BJr8gQX6.js} +1 -1
  198. package/server/{pipeline-notifier-B6FVsYF9.js → pipeline-notifier-BXkJzDC4.js} +2 -2
  199. package/server/{project-pipelines-CtNG_rvs.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-vjjcmiN8.js +3 -0
  203. package/server/{prompts-EvhMeeHG.js → prompts-DxzFXuLl.js} +2 -2
  204. package/server/{providers-BDDPULlp.js → providers-qQAwGQDW.js} +7 -7
  205. package/server/{providers-DNSQqy2V.js → providers-u4Ga0jOr.js} +1 -1
  206. package/server/public/assets/{chunk-BO2N2NFS-sym_ufXe.js → chunk-BO2N2NFS-BamJdinX.js} +4 -4
  207. package/server/public/assets/{diagram-OG6HWLK6-CQJPBNBu.js → diagram-OG6HWLK6-DfOB8-w4.js} +1 -1
  208. package/server/public/assets/{dist-DukGS2YZ.js → dist-ByIuzMQW.js} +3 -3
  209. package/server/public/assets/{dist-Bio7THQU.js → dist-D7zYSEA6.js} +1 -1
  210. package/server/public/assets/{ganttDiagram-6RSMTGT7-D4lWwte3.js → ganttDiagram-6RSMTGT7-EdmRyXL3.js} +1 -1
  211. package/server/public/assets/{highlighted-body-OFNGDK62-CaLboCt5.js → highlighted-body-OFNGDK62-MerOfTX8.js} +1 -1
  212. package/server/public/assets/{index-Bwejq-5s.js → index-CWeMerGO.js} +147 -144
  213. package/server/public/assets/index-CenuJ3Cw.css +1 -0
  214. package/server/public/assets/{linear-qUWmMZ-c.js → linear-BBbArIcK.js} +1 -1
  215. package/server/public/assets/mermaid-GHXKKRXX-CpPWAFwE.js +1 -0
  216. package/server/public/assets/{pieDiagram-4H26LBE5-C4zYulEm.js → pieDiagram-4H26LBE5-BKIddiJN.js} +1 -1
  217. package/server/public/assets/{prod-C8VtLuWC.js → prod-B8vYiu52.js} +4 -4
  218. package/server/public/assets/{quadrantDiagram-W4KKPZXB-qP04zyZC.js → quadrantDiagram-W4KKPZXB-D6RtoULk.js} +1 -1
  219. package/server/public/assets/{sankeyDiagram-5OEKKPKP-eMPTX_cG.js → sankeyDiagram-5OEKKPKP-CLrCedZX.js} +1 -1
  220. package/server/public/assets/{xychartDiagram-2RQKCTM6-Dme1PIt6.js → xychartDiagram-2RQKCTM6-hznR8DYl.js} +1 -1
  221. package/server/public/index.html +2 -2
  222. package/server/{pull-requests-By_BteaL.js → pull-requests-7N8WKseP.js} +1 -1
  223. package/server/{pull-requests-8z2N1UOV.js → pull-requests-_lHueOHW.js} +13 -11
  224. package/server/{queries-ZABd5aXP.js → queries-CjNIf-Ub.js} +1200 -201
  225. package/server/{rally-i_goYmiA.js → rally-CyWT_lNO.js} +3 -3
  226. package/server/{rally-api-DqKqIMNR.js → rally-api-C8e_1JRi.js} +2 -2
  227. package/server/{rally-api-xHazRk0d.js → rally-api-ClOSd-Tt.js} +1 -1
  228. package/server/{rally-client-COYz1vYR.js → rally-client-lc-nokqr.js} +4 -4
  229. package/server/{rally-client-CGWEHaPd.js → rally-client-sgtVqzNU.js} +1 -1
  230. package/server/rally-zhhtXuDP.js +3 -0
  231. package/server/{reap-terminal-sessions-CaMkFOIH.js → reap-terminal-sessions-7KeHv1R1.js} +1 -1
  232. package/server/{reap-terminal-sessions-DG9eiMVz.js → reap-terminal-sessions-BtHPo6Xc.js} +1 -1
  233. package/server/rebuild-stack-CFvcBHsS.js +4 -0
  234. package/server/{rebuild-stack-JUm0jqYP.js → rebuild-stack-lwtsW0GO.js} +26 -35
  235. package/server/{reconstruct-cache-wU79aCee.js → reconstruct-cache-C3Ui7ojV.js} +6 -6
  236. package/server/record-CN0pj4_5.js +3 -0
  237. package/server/{record-update-D3N6WMFR.js → record-update-bLJxAXH4.js} +1 -1
  238. package/server/record-update-dE1Aw83j.js +310 -0
  239. package/server/{recovery-trip-DkzJSej9.js → recovery-trip-BvRWfUXM.js} +2 -2
  240. package/server/{release-engine-DMINVN8S.js → release-engine-Cx48W7z8.js} +5 -5
  241. package/server/{release-set-DeUSOEHy.js → release-set-CQfuN9-v.js} +3 -3
  242. package/server/{remote-b-c5bOce.js → remote-C_2hasl7.js} +3 -3
  243. package/server/{remote-Dr5kGYSZ.js → remote-ChgimyYa.js} +3 -3
  244. package/server/{remote-agents-Ct_WOyke.js → remote-agents-By1ige5O.js} +6 -6
  245. package/server/{remote-agents-D6O_zETW.js → remote-agents-CA3Ihlxj.js} +1 -1
  246. package/server/{remote-completion-Dca3hAaa.js → remote-completion-fVe9e_3u.js} +12 -12
  247. package/server/resume-BFv1PGpA.js +3 -0
  248. package/server/{review-agent-CThvgK2r.js → review-agent-CIGOQYBD.js} +29 -25
  249. package/server/{review-agent-CCum8sGe.js → review-agent-DNboMyW4.js} +1 -1
  250. package/server/{review-artifacts-CXywD0F2.js → review-artifacts-nRDPuMxd.js} +5 -5
  251. package/server/{review-context-OYfKUprb.js → review-context-2uj-YQ8J.js} +70 -26
  252. package/server/review-status-btEYlaxA.js +3 -0
  253. package/server/{review-status-enrichment-crNAtIpL.js → review-status-enrichment-Dci-ZwEt.js} +3 -3
  254. package/server/{review-status-DFRjDFef.js → review-status-kZj_KyCk.js} +77 -28
  255. package/server/{review-status-sync-DpAMD_WO.js → review-status-sync-BTOpxtTC.js} +10 -5
  256. package/server/{review-status-sync-D60PJWNL.js → review-status-sync-DSDK3OMy.js} +1 -1
  257. package/server/{review-verdict-feedback-CpUZl5aE.js → review-verdict-feedback-CCjVA7Uk.js} +6 -6
  258. package/server/{review-verdict-feedback-JImjut0z.js → review-verdict-feedback-CTd4QMBu.js} +1 -1
  259. package/server/{rollup-CZ02qgxk.js → rollup-BKQC7jp4.js} +1 -1
  260. package/server/{rollup-SyuF09e4.js → rollup-FGsKki9R.js} +8 -8
  261. package/server/{scanner-Br0Z5S6R.js → scanner-CnqEZeDy.js} +45 -14
  262. package/server/{sequence-io-fxU0DlwW.js → sequence-io-D909zgeH.js} +4 -4
  263. package/server/{sequencer-agent-B5YC5XVP.js → sequencer-agent-CzkcK6P5.js} +5 -5
  264. package/server/server.js +2961 -919
  265. package/server/{service-Bagb90KZ.js → service-CLeAoU6G.js} +55 -54
  266. package/server/{session-fork-BqQxd-V6.js → session-fork-CHI1XvL9.js} +2 -2
  267. package/server/{session-history-XdS0JKp3.js → session-history-BT3IvqhC.js} +4 -4
  268. package/server/settings-66A6uvIA.js +2 -0
  269. package/server/{settings-BNbocWOg.js → settings-BTMvpNFU.js} +3 -3
  270. package/server/{settings-uLc6DEYI.js → settings-C0zgxOGf.js} +2 -2
  271. package/server/{shadow-engineering-D4X_s3fA.js → shadow-engineering-BJfgm-hX.js} +2 -2
  272. package/server/{shadow-state-C_NkP-sa.js → shadow-state-7a-524T8.js} +2 -2
  273. package/server/{shadow-state-CbvsN3qG.js → shadow-state-DnDyjujH.js} +1 -1
  274. package/server/{shadow-utils-CYMRPeRT.js → shadow-utils-Db3oroFG.js} +2 -2
  275. package/server/{ship-log-__QtAFXG.js → ship-log-D9MlVzYU.js} +1 -1
  276. package/server/{smart-compaction-jdMkG1vo.js → smart-compaction-CV2ukKND.js} +1 -1
  277. package/server/{smart-compaction-CLZOWin1.js → smart-compaction-KCYScAU1.js} +7 -7
  278. package/server/{spawn-planning-session-D5OXo8pT.js → spawn-planning-session-DKpdFyOC.js} +35 -27
  279. package/server/{spawn-planning-session-8D6mE033.js → spawn-planning-session-qUC2VWu3.js} +1 -1
  280. package/server/{specialist-completion-CqmduO92.js → specialist-completion-Ky9wCDpb.js} +1 -1
  281. package/server/{specialist-context-CJ-QjFR-.js → specialist-context-Bn3dCGS2.js} +5 -5
  282. package/server/{specialist-handoff-logger-Dnjlwt7g.js → specialist-handoff-logger-CMEwYxa2.js} +2 -2
  283. package/server/{specialist-logs-CQnKzuZs.js → specialist-logs-C5p8G7tx.js} +3 -3
  284. package/server/{specialists-Bg9v4z3F.js → specialists-CC4r-c2s.js} +1015 -460
  285. package/server/{specialists-D0gGXMZx.js → specialists-CShuVGWT.js} +1 -1
  286. package/server/specialists-DM6bWjsi.js +3 -0
  287. package/server/{specialists-CwZHb5cb.js → specialists-jiuuyVkp.js} +66 -74
  288. package/server/specs-C8Wsn2XO.js +3 -0
  289. package/server/{src-BMMoA_ba.js → src-CXmtj0im.js} +6 -6
  290. package/server/{src-Bqdtd6po.js → src-CdmnTM2m.js} +5 -5
  291. package/server/{src-k039WVYY.js → src-DtcUOZCq.js} +112 -18
  292. package/server/stack-health-Bn3o8FBX.js +3 -0
  293. package/server/{stack-health-C-ifC7b0.js → stack-health-DxSdG9cW.js} +63 -9
  294. package/server/{stale-task-claims-L7pJkQFL.js → stale-task-claims-KJKxxiiQ.js} +4 -4
  295. package/server/{staleness-_Tr-GwdA.js → staleness-CT34nwr9.js} +1 -1
  296. package/server/{staleness-BID1BKdr.js → staleness-DPm7ClwA.js} +15 -3
  297. package/server/{state-home-CONQvZR0.js → state-home-Cn_Qu8IX.js} +96 -44
  298. package/server/{state-migrate-BeBW0KXA.js → state-migrate-BGg2ZaOt.js} +12 -3
  299. package/server/{stuck-remediation-CKnIryGT.js → stuck-remediation-DYuPRYYw.js} +307 -26
  300. package/server/{stuck-remediation-CsGD5Ksb.js → stuck-remediation-s9_2qfi6.js} +1 -1
  301. package/server/{substrate-bug-weights-service-CpIZILj9.js → substrate-bug-weights-service-B-FwCs5V.js} +3 -3
  302. package/server/{summary-fork-bX6ax6X7.js → summary-fork-D1RAk9rJ.js} +78 -12
  303. package/server/{summary-fork-agEMsPSo.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-Ctt4eRYz.js → supervisor-wM4ooB5O.js} +3 -3
  309. package/server/{swarm-readiness-DdmJVX7y.js → swarm-readiness-DlP_UjHq.js} +4 -4
  310. package/server/{system-prerequisites-DSXBvffY.js → system-prerequisites-DUDj1YHf.js} +56 -29
  311. package/server/{teardown-workspace-DDCf5n-a.js → teardown-workspace-DeTTImn-.js} +15 -15
  312. package/server/{test-agent-queue-BJZ9Nfcc.js → test-agent-queue-MbxX5vqq.js} +7 -7
  313. package/server/{test-verdict-Cp5tljlJ.js → test-verdict-bWYBtqBg.js} +1 -1
  314. package/server/{test-verdict-D_-sXIz_.js → test-verdict-gscuksPv.js} +1 -1
  315. package/server/{tldr-daemon-B8_oT5gx.js → tldr-daemon-BYFkts95.js} +1 -1
  316. package/server/{tldr-daemon-BQFmmFp0.js → tldr-daemon-C-69c3OI.js} +2 -2
  317. package/server/tmux-B6z7h_vZ.js +3 -0
  318. package/server/{tmux-L5LgvGLp.js → tmux-R7N7y-Mh.js} +76 -44
  319. package/server/{token-BkQLy4yS.js → token-BK6t8BIT.js} +2 -2
  320. package/server/token-util-DuPuNriz.js +3 -0
  321. package/server/{token-util-DI8sGlmF.js → token-util-DxXu-vd1.js} +1 -1
  322. package/server/{tracker-config-DdT-nUAM.js → tracker-config-G6latr8C.js} +2 -2
  323. package/server/{tracker-utils-DV3h1FYG.js → tracker-utils-B4ylXZQK.js} +1 -1
  324. package/server/{tracker-utils-CawsPSS2.js → tracker-utils-DHv5pSDT.js} +2 -2
  325. package/server/{traefik-connect-C6mJckNs.js → traefik-connect-Df2uXPsQ.js} +1 -1
  326. package/server/{tunnel-IdK1iTHx.js → tunnel-CDVKJpRv.js} +3 -3
  327. package/server/{tunnel-BIFl98rc.js → tunnel-DGdUkGoZ.js} +1 -1
  328. package/server/{types-7-GnJn0t.js → types-5M0lupud.js} +1 -1
  329. package/server/{uat-train-0Ujk8GCv.js → uat-train-B05BWkp-.js} +1 -1
  330. package/server/{uat-train-j0cPeMSj.js → uat-train-DDSrSoV1.js} +28 -28
  331. package/server/validate-IfDGkaVR.js +177 -0
  332. package/server/{validation-DcAgXTQp.js → validation-CC9OPqJZ.js} +1 -1
  333. package/server/{validation-CabEISJT.js → validation-Dw1pzDzr.js} +259 -9
  334. package/server/{verification-artifact-Ck1tefmz.js → verification-artifact-B3itKTxu.js} +1 -1
  335. package/server/{verification-artifact-BuTA1QbL.js → verification-artifact-TVFSz_q1.js} +1 -1
  336. package/server/{verification-runner-DlJezzef.js → verification-runner-BW4HOKAz.js} +1 -1
  337. package/server/{verification-runner-FiuAZ-H2.js → verification-runner-CkgX6EtI.js} +174 -124
  338. package/server/{vtt-parser-BnRsYzcz.js → vtt-parser-DYPbKcIJ.js} +1 -1
  339. package/server/{work-agent-prompt-DLthEPAq.js → work-agent-prompt-Du8Vh2aJ.js} +13 -13
  340. package/server/workflows-BQu4RFQ-.js +2 -0
  341. package/server/{workflows-BZNNYkGC.js → workflows-mbQzh6mQ.js} +39 -77
  342. package/server/{workspace-3IC-UkAi.js → workspace--8tnhDI0.js} +1 -1
  343. package/server/{workspace-D9ppycdg.js → workspace-BPUws1-_.js} +3 -3
  344. package/server/{workspace-config-Bigl_-Lk.js → workspace-config-CIVWZOQr.js} +1 -1
  345. package/server/{workspace-manager-ClkCIWTe.js → workspace-manager-CBhNdzE4.js} +76 -18
  346. package/server/workspace-manager-CWT55qeI.js +3 -0
  347. package/server/{workspace-metadata-BE0efUv_.js → workspace-metadata-BzHnwwX4.js} +1 -1
  348. package/server/{workspace-metadata-tiSRIWJP.js → workspace-metadata-_WygnyoX.js} +2 -2
  349. package/server/{workspaces-CFPcL0vl.js → workspaces-Do_9J0LQ.js} +309 -124
  350. package/sync-sources/agents/pan-inspect-agent.md +1 -1
  351. package/sync-sources/agents/pan-merge-agent.md +1 -1
  352. package/sync-sources/agents/pan-planning-agent.md +4 -4
  353. package/sync-sources/agents/pan-work-agent.md +1 -1
  354. package/sync-sources/dev-skills/pan-commit/SKILL.md +1 -1
  355. package/sync-sources/dev-skills/test-specialist-workflow/SKILL.md +1 -1
  356. package/sync-sources/hooks/record-cost-event.js +369 -75
  357. package/sync-sources/hooks/session-start-hook +7 -0
  358. package/sync-sources/hooks/work-agent-stop-hook +1 -1
  359. package/sync-sources/rules/per-bead-durability.md +1 -1
  360. package/sync-sources/rules/prd-authoring.md +1 -1
  361. package/sync-sources/skills/feature-work/SKILL.md +1 -1
  362. package/sync-sources/skills/okf/README.md +11 -3
  363. package/sync-sources/skills/okf/SKILL.md +12 -1
  364. package/sync-sources/skills/okf/docs/USAGE.md +15 -0
  365. package/sync-sources/skills/okf/references/overdeck.md +28 -0
  366. package/sync-sources/skills/pan/SKILL.md +2 -2
  367. package/sync-sources/skills/pan-admin-config/SKILL.md +1 -0
  368. package/sync-sources/skills/pan-approve/SKILL.md +1 -1
  369. package/sync-sources/skills/pan-close/SKILL.md +1 -1
  370. package/sync-sources/skills/pan-doctor/SKILL.md +1 -1
  371. package/sync-sources/skills/pan-flywheel/SKILL.md +18 -1
  372. package/sync-sources/skills/pan-knowledge/SKILL.md +10 -0
  373. package/sync-sources/skills/pan-new-project/SKILL.md +9 -11
  374. package/sync-sources/skills/pan-orders/SKILL.md +33 -0
  375. package/sync-sources/skills/pan-oversee/SKILL.md +5 -5
  376. package/sync-sources/skills/pan-plan/SKILL.md +6 -6
  377. package/sync-sources/skills/pan-quickstart/SKILL.md +1 -1
  378. package/sync-sources/skills/pan-recap/SKILL.md +2 -2
  379. package/sync-sources/skills/pan-review/SKILL.md +1 -1
  380. package/sync-sources/skills/pan-start/SKILL.md +7 -3
  381. package/sync-sources/skills/pan-swarm/SKILL.md +1 -1
  382. package/sync-sources/skills/pan-sync/SKILL.md +1 -1
  383. package/sync-sources/skills/pan-task/SKILL.md +2 -2
  384. package/sync-sources/skills/pan-wipe/SKILL.md +2 -2
  385. package/sync-sources/skills/pipeline-list/SKILL.md +1 -1
  386. package/sync-sources/skills/pipeline-status/SKILL.md +2 -2
  387. package/sync-sources/skills/plan/SKILL.md +11 -11
  388. package/sync-sources/skills/write-vbrief/SKILL.md +7 -282
  389. package/sync-sources/skills/write-xbrief/SKILL.md +295 -0
  390. package/sync-sources/templates/claude-md/sections/warnings.md +1 -1
  391. package/sync-sources/templates/traefik/dynamic/overdeck.yml.template +10 -0
  392. package/server/agent-state-Co5Sy2Fw.js +0 -3
  393. package/server/agents-DyHKlq1I.js +0 -3
  394. package/server/cli-BRORS9qY.js +0 -3
  395. package/server/codex-DNyiQDKW.js +0 -3
  396. package/server/context-layers-15gDOk20.js +0 -165
  397. package/server/context-layers-DlQKkHH2.js +0 -4
  398. package/server/deacon-swarm-CV54eNmU.js +0 -2
  399. package/server/dist-j64RzSrQ.js +0 -3
  400. package/server/flywheel-6WHU4O7A.js +0 -207
  401. package/server/flywheel-COR0mbRI.js +0 -522
  402. package/server/flywheel-Ctr5uuvo.js +0 -2
  403. package/server/forge-B0_opi-V.js +0 -2
  404. package/server/git-utils-CsKGnzFA.js +0 -3
  405. package/server/hume-BmhvfVbV.js +0 -3
  406. package/server/inspect-agent-Dq0z1k3H.js +0 -2
  407. package/server/layers-Cp1To4L8.js +0 -93
  408. package/server/lifecycle-io-DmY2qwCn.js +0 -3
  409. package/server/merge-blockers-BYjeXrVN.js +0 -41
  410. package/server/merge-ops-DwWCkSgo.js +0 -2
  411. package/server/merge-set-DiISXcC-.js +0 -139
  412. package/server/projects-BKkwpH6q.js +0 -3
  413. package/server/public/assets/index-Bdc4V9ba.css +0 -1
  414. package/server/public/assets/mermaid-GHXKKRXX-B5v_r7cI.js +0 -1
  415. package/server/rally-OSJXdiHK.js +0 -3
  416. package/server/rebuild-stack-CKjJAI8L.js +0 -3
  417. package/server/record-rwK-nKv_.js +0 -3
  418. package/server/record-update-Crz74r-6.js +0 -168
  419. package/server/resume-wZZsWtzz.js +0 -3
  420. package/server/review-status-Bnh-rdkY.js +0 -3
  421. package/server/settings-BlUsVaUc.js +0 -2
  422. package/server/specialists-Dqe6_HE5.js +0 -3
  423. package/server/specs-BhOKBzqk.js +0 -3
  424. package/server/stack-health-Bd06frFn.js +0 -3
  425. package/server/supervisor-COVHrBTg.js +0 -2
  426. package/server/tmux-BAvtac_u.js +0 -3
  427. package/server/token-util-BArZLN6w.js +0 -3
  428. package/server/workflows-C4mR0Reb.js +0 -2
  429. package/server/workspace-manager-B1WOfKvB.js +0 -3
@@ -109,6 +109,16 @@ class CacheRevalidationHandler {
109
109
  }
110
110
 
111
111
  if (this.#callback) {
112
+ // Serve the stale cached response on a connection error, per stale-if-error:
113
+ // RFC 5861 counts an unreachable origin (a would-be 5xx) as an error.
114
+ // https://datatracker.ietf.org/doc/html/rfc5861#section-4
115
+ if (this.#allowErrorStatusCodes) {
116
+ this.#successful = true
117
+ this.#callback(true, this.#context)
118
+ this.#callback = null
119
+ return
120
+ }
121
+
112
122
  this.#callback(false)
113
123
  this.#callback = null
114
124
  }
@@ -52,6 +52,8 @@ class RedirectHandler {
52
52
  throw new Error('max redirects')
53
53
  }
54
54
 
55
+ let removeContentHeaders = statusCode === 303
56
+
55
57
  // https://tools.ietf.org/html/rfc7231#section-6.4.2
56
58
  // https://fetch.spec.whatwg.org/#http-redirect-fetch
57
59
  // In case of HTTP 301 or 302 with POST, change the method to GET
@@ -62,6 +64,7 @@ class RedirectHandler {
62
64
  util.destroy(this.opts.body.on('error', noop))
63
65
  }
64
66
  this.opts.body = null
67
+ removeContentHeaders = true
65
68
  }
66
69
 
67
70
  // https://tools.ietf.org/html/rfc7231#section-6.4.4
@@ -101,9 +104,9 @@ class RedirectHandler {
101
104
  }
102
105
 
103
106
  // Remove headers referring to the original URL.
104
- // By default it is Host only, unless it's a 303 (see below), which removes also all Content-* headers.
107
+ // By default it is Host only. A 303 or a 301/302 POST-to-GET redirect also removes all Content-* headers.
105
108
  // https://tools.ietf.org/html/rfc7231#section-6.4
106
- this.opts.headers = cleanRequestHeaders(this.opts.headers, statusCode === 303, this.opts.origin !== origin, this.stripHeadersOnRedirect, this.stripHeadersOnCrossOriginRedirect)
109
+ this.opts.headers = cleanRequestHeaders(this.opts.headers, removeContentHeaders, this.opts.origin !== origin, this.stripHeadersOnRedirect, this.stripHeadersOnCrossOriginRedirect)
107
110
  this.opts.path = path
108
111
  this.opts.origin = origin
109
112
  this.opts.query = null
@@ -11,7 +11,7 @@ const {
11
11
 
12
12
  function calculateRetryAfterHeader (retryAfter) {
13
13
  const retryTime = new Date(retryAfter).getTime()
14
- return isNaN(retryTime) ? 0 : retryTime - Date.now()
14
+ return isNaN(retryTime) ? null : retryTime - Date.now()
15
15
  }
16
16
 
17
17
  // A stable controller handed to the downstream handler for the lifetime of the
@@ -211,9 +211,11 @@ class RetryHandler {
211
211
  }
212
212
 
213
213
  const retryTimeout =
214
- retryAfterHeader > 0
215
- ? Math.min(retryAfterHeader, maxTimeout)
216
- : Math.min(minTimeout * timeoutFactor ** (counter - 1), maxTimeout)
214
+ retryAfterHeader === 0
215
+ ? 0
216
+ : retryAfterHeader > 0
217
+ ? Math.min(retryAfterHeader, maxTimeout)
218
+ : Math.min(minTimeout * timeoutFactor ** (counter - 1), maxTimeout)
217
219
 
218
220
  setTimeout(() => cb(null), retryTimeout)
219
221
  }
@@ -57,16 +57,33 @@ function needsRevalidation (result, cacheControlDirectives, { headers = {} }) {
57
57
  return false
58
58
  }
59
59
 
60
+ /**
61
+ * must-revalidate (proxy-revalidate for shared caches) forbids serving a stale
62
+ * response without successful validation, overriding max-stale and stale-if-error.
63
+ * https://www.rfc-editor.org/rfc/rfc9111.html#section-5.2.2.2
64
+ * https://www.rfc-editor.org/rfc/rfc9111.html#section-5.2.2.8
65
+ * @param {import('../../types/cache-interceptor.d.ts').default.GetResult} result
66
+ * @param {'shared' | 'private'} cacheType
67
+ * @returns {boolean}
68
+ */
69
+ function forbidsServingStale (result, cacheType) {
70
+ return Boolean(
71
+ result.cacheControlDirectives?.['must-revalidate'] ||
72
+ (cacheType === 'shared' && result.cacheControlDirectives?.['proxy-revalidate'])
73
+ )
74
+ }
75
+
60
76
  /**
61
77
  * @param {import('../../types/cache-interceptor.d.ts').default.GetResult} result
62
78
  * @param {import('../../types/cache-interceptor.d.ts').default.CacheControlDirectives | undefined} cacheControlDirectives
79
+ * @param {'shared' | 'private'} cacheType
63
80
  * @returns {boolean}
64
81
  */
65
- function isStale (result, cacheControlDirectives) {
82
+ function isStale (result, cacheControlDirectives, cacheType) {
66
83
  const now = Date.now()
67
84
  if (now > result.staleAt) {
68
85
  // Response is stale
69
- if (cacheControlDirectives?.['max-stale']) {
86
+ if (cacheControlDirectives?.['max-stale'] && !forbidsServingStale(result, cacheType)) {
70
87
  // There's a threshold where we can serve stale responses, let's see if
71
88
  // we're in it
72
89
  // https://www.rfc-editor.org/rfc/rfc9111.html#name-max-stale
@@ -286,7 +303,7 @@ function handleResult (
286
303
  return dispatch(opts, handler)
287
304
  }
288
305
 
289
- const stale = isStale(result, reqCacheControl)
306
+ const stale = isStale(result, reqCacheControl, globalOpts.type)
290
307
  const revalidate = needsRevalidation(result, reqCacheControl, opts)
291
308
 
292
309
  // Check if the response is stale
@@ -345,7 +362,7 @@ function handleResult (
345
362
 
346
363
  let withinStaleIfErrorThreshold = false
347
364
  const staleIfErrorExpiry = result.cacheControlDirectives['stale-if-error'] ?? reqCacheControl?.['stale-if-error']
348
- if (staleIfErrorExpiry) {
365
+ if (staleIfErrorExpiry && !forbidsServingStale(result, globalOpts.type)) {
349
366
  withinStaleIfErrorThreshold = now < (result.staleAt + (staleIfErrorExpiry * 1000))
350
367
  }
351
368
 
@@ -276,6 +276,10 @@ function createDecompressInterceptor (options = {}) {
276
276
 
277
277
  return (dispatch) => {
278
278
  return (opts, handler) => {
279
+ if (opts.method === 'HEAD') {
280
+ return dispatch(opts, handler)
281
+ }
282
+
279
283
  const decompressHandler = new DecompressHandler(handler, options)
280
284
  return dispatch(opts, decompressHandler)
281
285
  }
@@ -12,6 +12,11 @@ const {
12
12
  } = require('./mock-symbols')
13
13
  const { InvalidArgumentError } = require('../core/errors')
14
14
  const { serializePathWithQuery } = require('../core/util')
15
+ const {
16
+ types: {
17
+ isPromise
18
+ }
19
+ } = require('node:util')
15
20
 
16
21
  /**
17
22
  * Defines the scope API for an interceptor reply
@@ -117,13 +122,9 @@ class MockInterceptor {
117
122
  // Values of reply aren't available right now as they
118
123
  // can only be available when the reply callback is invoked.
119
124
  if (typeof replyOptionsCallbackOrStatusCode === 'function') {
120
- // We'll first wrap the provided callback in another function,
121
- // this function will properly resolve the data from the callback
122
- // when invoked.
123
- const wrappedDefaultsCallback = (opts) => {
124
- // Our reply options callback contains the parameter for statusCode, data and options.
125
- const resolvedData = replyOptionsCallbackOrStatusCode(opts)
126
-
125
+ // Resolves the data returned by a reply options callback into
126
+ // dispatch data, validating its format along the way.
127
+ const resolveReplyCallbackData = (resolvedData) => {
127
128
  // Check if it is in the right format
128
129
  if (typeof resolvedData !== 'object' || resolvedData === null) {
129
130
  throw new InvalidArgumentError('reply options callback must return an object')
@@ -138,6 +139,23 @@ class MockInterceptor {
138
139
  }
139
140
  }
140
141
 
142
+ // We'll first wrap the provided callback in another function,
143
+ // this function will properly resolve the data from the callback
144
+ // when invoked.
145
+ const wrappedDefaultsCallback = (opts) => {
146
+ // Our reply options callback contains the parameter for statusCode, data and options.
147
+ const resolvedData = replyOptionsCallbackOrStatusCode(opts)
148
+
149
+ // An asynchronous reply options callback resolves to the reply
150
+ // parameters, so the dispatch data can only be resolved once the
151
+ // returned promise settles.
152
+ if (isPromise(resolvedData)) {
153
+ return resolvedData.then(resolveReplyCallbackData)
154
+ }
155
+
156
+ return resolveReplyCallbackData(resolvedData)
157
+ }
158
+
141
159
  // Add usual dispatch data, but this time set the data parameter to function that will eventually provide data.
142
160
  const newMockDispatch = addMockDispatch(this[kDispatches], this[kDispatchKey], wrappedDefaultsCallback, { ignoreTrailingSlash: this[kIgnoreTrailingSlash] })
143
161
  return new MockScope(newMockDispatch)
@@ -292,25 +292,54 @@ function mockDispatch (opts, handler) {
292
292
  // Get mock dispatch from built key
293
293
  const key = buildKey(opts)
294
294
  const mockDispatch = getMockDispatch(this[kDispatches], key)
295
+ const mockDispatches = this[kDispatches]
295
296
 
296
297
  mockDispatch.timesInvoked++
297
298
 
299
+ const { timesInvoked, times } = mockDispatch
300
+
301
+ // If it's used up and not persistent, mark as consumed
302
+ mockDispatch.consumed = !mockDispatch.persist && timesInvoked >= times
303
+ mockDispatch.pending = timesInvoked < times
304
+
298
305
  // Here's where we resolve a callback if a callback is present for the dispatch data.
299
306
  if (mockDispatch.data.callback) {
300
- mockDispatch.data = { ...mockDispatch.data, ...mockDispatch.data.callback(opts) }
307
+ const callbackResult = mockDispatch.data.callback(opts)
308
+
309
+ // An asynchronous reply options callback resolves to the reply data, so
310
+ // the dispatch can only continue once the returned promise settles.
311
+ // A rejection cannot be thrown synchronously from the dispatch at that
312
+ // point, so it is surfaced as a response error instead.
313
+ if (isPromise(callbackResult)) {
314
+ callbackResult.then(
315
+ (resolvedData) => {
316
+ mockDispatch.data = { ...mockDispatch.data, ...resolvedData }
317
+ dispatchMockReply(mockDispatches, mockDispatch, key, opts, handler)
318
+ },
319
+ (error) => {
320
+ deleteMockDispatch(mockDispatches, key)
321
+ handler.onResponseError(null, error)
322
+ }
323
+ )
324
+ return true
325
+ }
326
+
327
+ mockDispatch.data = { ...mockDispatch.data, ...callbackResult }
301
328
  }
302
329
 
303
- // Parse mockDispatch data
304
- const { data: { statusCode, data, headers, trailers, error }, delay, persist } = mockDispatch
305
- const { timesInvoked, times } = mockDispatch
330
+ return dispatchMockReply(mockDispatches, mockDispatch, key, opts, handler)
331
+ }
306
332
 
307
- // If it's used up and not persistent, mark as consumed
308
- mockDispatch.consumed = !persist && timesInvoked >= times
309
- mockDispatch.pending = timesInvoked < times
333
+ /**
334
+ * Replies to a request once the mock dispatch data is fully resolved
335
+ */
336
+ function dispatchMockReply (mockDispatches, mockDispatch, key, opts, handler) {
337
+ // Parse mockDispatch data
338
+ const { data: { statusCode, data, headers, trailers, error }, delay } = mockDispatch
310
339
 
311
340
  // If specified, trigger dispatch error
312
341
  if (error !== null) {
313
- deleteMockDispatch(this[kDispatches], key)
342
+ deleteMockDispatch(mockDispatches, key)
314
343
  handler.onResponseError(null, error)
315
344
  return true
316
345
  }
@@ -353,10 +382,10 @@ function mockDispatch (opts, handler) {
353
382
  if (typeof delay === 'number' && delay > 0) {
354
383
  timer = setTimeout(() => {
355
384
  timer = null
356
- handleReply(this[kDispatches])
385
+ handleReply(mockDispatches)
357
386
  }, delay)
358
387
  } else {
359
- handleReply(this[kDispatches])
388
+ handleReply(mockDispatches)
360
389
  }
361
390
 
362
391
  function handleReply (mockDispatches, _data = data) {
@@ -42,15 +42,57 @@ function normalizeHeaders (opts) {
42
42
  headers = {}
43
43
 
44
44
  if (hasSafeIterator(opts.headers)) {
45
- for (const x of opts.headers) {
46
- if (!Array.isArray(x)) {
47
- throw new Error('opts.headers is not a valid header map')
45
+ if (Array.isArray(opts.headers)) {
46
+ // Array format: could be flat alternating [k, v, k, v, ...]
47
+ // or array-of-pairs [[k, v], ...]
48
+ const first = opts.headers[0]
49
+ if (Array.isArray(first)) {
50
+ for (const x of opts.headers) {
51
+ if (!Array.isArray(x)) {
52
+ throw new Error('opts.headers is not a valid header map')
53
+ }
54
+ const [key, val] = x
55
+ if (typeof key !== 'string' || typeof val !== 'string') {
56
+ throw new Error('opts.headers is not a valid header map')
57
+ }
58
+ headers[key.toLowerCase()] = val
59
+ }
60
+ } else {
61
+ // Flat alternating array [k, v, k, v, ...]
62
+ const len = opts.headers.length
63
+ if (len % 2 !== 0) {
64
+ throw new Error('opts.headers is not a valid header map')
65
+ }
66
+ for (let i = 0; i < len; i += 2) {
67
+ const key = opts.headers[i]
68
+ const val = opts.headers[i + 1]
69
+ if (typeof key !== 'string' || (typeof val !== 'string' && !Array.isArray(val))) {
70
+ throw new Error('opts.headers is not a valid header map')
71
+ }
72
+ if (typeof val === 'string') {
73
+ headers[key.toLowerCase()] = val
74
+ } else {
75
+ const mapped = []
76
+ for (let j = 0; j < val.length; j++) {
77
+ const v = val[j]
78
+ mapped.push(typeof v === 'string' ? v : v.toString('latin1'))
79
+ }
80
+ headers[key.toLowerCase()] = mapped
81
+ }
82
+ }
48
83
  }
49
- const [key, val] = x
50
- if (typeof key !== 'string' || typeof val !== 'string') {
51
- throw new Error('opts.headers is not a valid header map')
84
+ } else {
85
+ // Non-array iterable (e.g. Map) — use original iteration logic
86
+ for (const x of opts.headers) {
87
+ if (!Array.isArray(x)) {
88
+ throw new Error('opts.headers is not a valid header map')
89
+ }
90
+ const [key, val] = x
91
+ if (typeof key !== 'string' || typeof val !== 'string') {
92
+ throw new Error('opts.headers is not a valid header map')
93
+ }
94
+ headers[key.toLowerCase()] = val
52
95
  }
53
- headers[key.toLowerCase()] = val
54
96
  }
55
97
  } else {
56
98
  for (const key of Object.keys(opts.headers)) {
@@ -16,6 +16,7 @@ const { serializeAMimeType } = require('./data-url')
16
16
  const { multipartFormDataParser } = require('./formdata-parser')
17
17
  const { parseJSONFromBytes } = require('../infra')
18
18
  const { utf8DecodeBytes } = require('../../encoding')
19
+ const { ReadableStreamTee } = require('node:stream/web')
19
20
 
20
21
  const textEncoder = new TextEncoder()
21
22
  function noop () {}
@@ -279,7 +280,7 @@ function cloneBody (body) {
279
280
  // https://fetch.spec.whatwg.org/#concept-body-clone
280
281
 
281
282
  // 1. Let « out1, out2 » be the result of teeing body’s stream.
282
- const { 0: out1, 1: out2 } = body.stream.tee()
283
+ const { 0: out1, 1: out2 } = ReadableStreamTee?.(body.stream, true) ?? body.stream.tee()
283
284
 
284
285
  // 2. Set body’s stream to out1.
285
286
  body.stream = out1
@@ -45,9 +45,7 @@ class Response {
45
45
  static json (data, init = undefined) {
46
46
  webidl.argumentLengthCheck(arguments, 1, 'Response.json')
47
47
 
48
- if (init !== null) {
49
- init = webidl.converters.ResponseInit(init)
50
- }
48
+ init = webidl.converters.ResponseInit(init)
51
49
 
52
50
  // 1. Let bytes the result of running serialize a JavaScript value to JSON bytes on data.
53
51
  const bytes = textEncoder.encode(
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "undici",
3
- "version": "8.7.0",
3
+ "version": "8.8.0",
4
4
  "description": "An HTTP/1.1 client, written from scratch for Node.js",
5
5
  "homepage": "https://undici.nodejs.org",
6
6
  "bugs": {
@@ -116,7 +116,7 @@
116
116
  "@types/node": "^22.0.0",
117
117
  "abort-controller": "^3.0.0",
118
118
  "borp": "^1.0.0",
119
- "c8": "^11.0.0",
119
+ "c8": "^12.0.0",
120
120
  "cross-env": "^10.0.0",
121
121
  "dns-packet": "^5.4.0",
122
122
  "esbuild": "^0.28.0",
@@ -33,7 +33,7 @@ export declare namespace Client {
33
33
  export interface Options {
34
34
  /** The maximum length of request headers in bytes. Default: Node.js' `--max-http-header-size` or `16384` (16KiB). */
35
35
  maxHeaderSize?: number;
36
- /** The amount of time, in milliseconds, the parser will wait to receive the complete HTTP headers (Node 14 and above only). Default: `300e3` milliseconds (300s). */
36
+ /** The amount of time, in milliseconds, the parser will wait to receive the complete HTTP headers (Node 14 and above only). Default: `300e3` milliseconds (300s). HTTP/1.1 parser timeouts are not guaranteed to fire with exact millisecond precision: delays up to 1000ms use native timers, while larger delays use lower-overhead fast timers with a target resolution around 500ms. */
37
37
  headersTimeout?: number;
38
38
  /** @deprecated unsupported socketTimeout, use headersTimeout & bodyTimeout instead */
39
39
  socketTimeout?: never;
@@ -41,7 +41,7 @@ export declare namespace Client {
41
41
  requestTimeout?: never;
42
42
  /** The timeout for establishing a socket connection, in milliseconds. Use `0` to disable it entirely. Default: `10e3` milliseconds (10s). */
43
43
  connectTimeout?: number;
44
- /** The timeout after which a request will time out, in milliseconds. Monitors time between receiving body data. Use `0` to disable it entirely. Default: `300e3` milliseconds (300s). */
44
+ /** The timeout after which a request will time out, in milliseconds. Monitors time between receiving body data. Use `0` to disable it entirely. Default: `300e3` milliseconds (300s). HTTP/1.1 parser timeouts are not guaranteed to fire with exact millisecond precision: delays up to 1000ms use native timers, while larger delays use lower-overhead fast timers with a target resolution around 500ms. */
45
45
  bodyTimeout?: number;
46
46
  /** @deprecated unsupported idleTimeout, use keepAliveTimeout instead */
47
47
  idleTimeout?: never;
@@ -111,13 +111,13 @@ declare namespace Dispatcher {
111
111
  idempotent?: boolean;
112
112
  /** Whether the response is expected to take a long time and would end up blocking the pipeline. When this is set to `true` further pipelining will be avoided on the same connection until headers have been received. Defaults to `method !== 'HEAD'`. */
113
113
  blocking?: boolean;
114
- /** The IP Type of Service (ToS) value for the request socket. Must be an integer between 0 and 255. Default: `0` */
114
+ /** The IP Type of Service (ToS) value for the request socket. Must be an integer between 0 and 255. */
115
115
  typeOfService?: number | null;
116
116
  /** Upgrade the request. Should be used to specify the kind of upgrade i.e. `'Websocket'`. Default: `method === 'CONNECT' || null`. */
117
117
  upgrade?: boolean | string | null;
118
- /** The amount of time, in milliseconds, the parser will wait to receive the complete HTTP headers. Defaults to 300 seconds. */
118
+ /** The amount of time, in milliseconds, the parser will wait to receive the complete HTTP headers. Defaults to 300 seconds. HTTP/1.1 parser timeouts are not guaranteed to fire with exact millisecond precision: delays up to 1000ms use native timers, while larger delays use lower-overhead fast timers with a target resolution around 500ms. */
119
119
  headersTimeout?: number | null;
120
- /** The timeout after which a request will time out, in milliseconds. Monitors time between receiving body data. Use 0 to disable it entirely. Defaults to 300 seconds. */
120
+ /** The timeout after which a request will time out, in milliseconds. Monitors time between receiving body data. Use 0 to disable it entirely. Defaults to 300 seconds. HTTP/1.1 parser timeouts are not guaranteed to fire with exact millisecond precision: delays up to 1000ms use native timers, while larger delays use lower-overhead fast timers with a target resolution around 500ms. */
121
121
  bodyTimeout?: number | null;
122
122
  /** Whether the request should stablish a keep-alive or not. Default `false` */
123
123
  reset?: boolean;
@@ -75,9 +75,13 @@ declare namespace MockInterceptor {
75
75
  opts: MockResponseCallbackOptions
76
76
  ) => TData | Buffer | string
77
77
 
78
+ export type MockReplyOptions<TData extends object = object> = {
79
+ statusCode: number, data?: TData | Buffer | string, responseOptions?: MockResponseOptions
80
+ }
81
+
78
82
  export type MockReplyOptionsCallback<TData extends object = object> = (
79
83
  opts: MockResponseCallbackOptions
80
- ) => { statusCode: number, data?: TData | Buffer | string, responseOptions?: MockResponseOptions }
84
+ ) => MockReplyOptions<TData> | Promise<MockReplyOptions<TData>>
81
85
  }
82
86
 
83
87
  interface Interceptable extends Dispatcher {
@@ -1,14 +1,15 @@
1
- import { Gn as listProjects, Hn as init_projects, nr as resolveProjectFromIssueSync } from "./config-yaml-ig8Nwtiw.js";
1
+ import { On as listProjects, Tn as init_projects, zn as resolveProjectFromIssueSync } from "./config-yaml-DySPNmKN.js";
2
2
  import { a as init_activity_logger, n as emitActivityEntrySync } from "./activity-logger-DDlOIAML.js";
3
- import { j as listSessionNames, w as init_tmux } from "./tmux-L5LgvGLp.js";
4
- import { c as init_review_status, s as getReviewStatusSync } from "./review-status-DFRjDFef.js";
5
- import { kn as getAgentState, s as init_agents } from "./queries-ZABd5aXP.js";
6
- import { i as resolveGitHubIssueSync, n as init_tracker_utils } from "./tracker-utils-CawsPSS2.js";
7
- import { o as getInternalTokenSync, s as init_internal_token, t as INTERNAL_TOKEN_HEADER } from "./internal-token-CXsfxslp.js";
8
- import { d as readPlanSync, i as findPlanSync, o as init_io } from "./io-DQR9PMgS.js";
9
- import { i as loadCloisterConfig, r as init_config } from "./config-DeTsoZdR.js";
10
- import { f as init_github_app, p as isGitHubAppConfigured, v as listPullRequestsForHead } from "./github-app-CDPtGF7J.js";
11
- import { n as init_issue_closed, r as isIssueClosed } from "./issue-closed-DtmJM0D0.js";
3
+ import { M as listSessionNames, w as init_tmux } from "./tmux-R7N7y-Mh.js";
4
+ import { c as getReviewStatusSync, l as init_review_status } from "./review-status-kZj_KyCk.js";
5
+ import { b as init_agents, qn as getAgentState } from "./queries-CjNIf-Ub.js";
6
+ import { i as resolveGitHubIssueSync, n as init_tracker_utils } from "./tracker-utils-DHv5pSDT.js";
7
+ import { o as getInternalTokenSync, s as init_internal_token, t as INTERNAL_TOKEN_HEADER } from "./internal-token-s0-oKybJ.js";
8
+ import { o as init_lifecycle, s as isXBriefFilename } from "./lifecycle-yPd___5E.js";
9
+ import { d as readPlanSync, i as findPlanSync, o as init_io } from "./io-C9kF1wtJ.js";
10
+ import { i as loadCloisterConfig, r as init_config } from "./config-CKxYiCmX.js";
11
+ import { f as init_github_app, p as isGitHubAppConfigured, v as listPullRequestsForHead } from "./github-app-C3QrAUd0.js";
12
+ import { n as init_issue_closed, r as isIssueClosed } from "./issue-closed-CDJk4pIp.js";
12
13
  import { Effect } from "effect";
13
14
  import { existsSync, readdirSync } from "fs";
14
15
  import { join } from "path";
@@ -23,6 +24,7 @@ init_projects();
23
24
  init_review_status();
24
25
  init_tmux();
25
26
  init_io();
27
+ init_lifecycle();
26
28
  init_github_app();
27
29
  init_tracker_utils();
28
30
  init_config();
@@ -52,7 +54,7 @@ async function findSpecPathForIssue(projectPath, issueId) {
52
54
  return null;
53
55
  }
54
56
  for (const filename of filenames) {
55
- if (!filename.endsWith(".vbrief.json")) continue;
57
+ if (!isXBriefFilename(filename)) continue;
56
58
  const specPath = join(specsDir, filename);
57
59
  try {
58
60
  if (normalizeIssueId(readPlanSync(specPath).plan?.id) === issueId.toUpperCase()) return specPath;
@@ -114,7 +116,7 @@ async function findOrphanProposedSpecsForReconciler(options = {}) {
114
116
  if (!existsSync(specsDir)) continue;
115
117
  const entries = await readdir(specsDir, { withFileTypes: true }).catch(() => []);
116
118
  for (const entry of entries) {
117
- if (!entry.isFile() || !entry.name.endsWith(".vbrief.json")) continue;
119
+ if (!entry.isFile() || !isXBriefFilename(entry.name)) continue;
118
120
  const specPath = join(specsDir, entry.name);
119
121
  const spec = await readJsonFile(specPath);
120
122
  if (spec?.plan?.status !== "proposed") continue;
@@ -480,4 +482,4 @@ async function reconcileOrphanProposedSpecs(options = {}) {
480
482
  //#endregion
481
483
  export { spawnWorkAgentThroughAgentsEndpoint as a, reconcileOrphanProposedSpecs as i, handleOrphanProposedSpec as n, triggerRebuildAndStart as o, hasReviewPipelinePresence as r, findOrphanProposedSpecsForReconciler as t };
482
484
 
483
- //# sourceMappingURL=orphan-proposed-reconciler-xklgvNA7.js.map
485
+ //# sourceMappingURL=orphan-proposed-reconciler-BvKkWMJQ.js.map
@@ -1,2 +1,2 @@
1
- import { n as handleOrphanProposedSpec } from "./orphan-proposed-reconciler-xklgvNA7.js";
1
+ import { n as handleOrphanProposedSpec } from "./orphan-proposed-reconciler-BvKkWMJQ.js";
2
2
  export { handleOrphanProposedSpec };
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "@overdeck/desktop-server",
3
- "version": "0.45.22",
3
+ "version": "0.45.24",
4
4
  "lockfileVersion": 3,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "@overdeck/desktop-server",
9
- "version": "0.45.22",
9
+ "version": "0.45.24",
10
10
  "dependencies": {
11
11
  "@effect/platform-node": "4.0.0-beta.73",
12
12
  "@google-cloud/speech": "7.3.1",
@@ -37,9 +37,9 @@
37
37
  }
38
38
  },
39
39
  "node_modules/@effect/platform-node/node_modules/@effect/platform-node-shared": {
40
- "version": "4.0.0-beta.99",
41
- "resolved": "https://registry.npmjs.org/@effect/platform-node-shared/-/platform-node-shared-4.0.0-beta.99.tgz",
42
- "integrity": "sha512-POBAowafsAAb3bH1x1rJlWnv32yMAazFgEuRW5LhkW/JJA5VGoEk9OnuoUkIH1OW6K/X6IrdNpqcO+5e9lPQJA==",
40
+ "version": "4.0.0-beta.101",
41
+ "resolved": "https://registry.npmjs.org/@effect/platform-node-shared/-/platform-node-shared-4.0.0-beta.101.tgz",
42
+ "integrity": "sha512-g4L7XiyJSNJLJVhlslyg2zBCQsoKQf1y1gd+Yfd+3wD9ymC+m7ymbd/5FGqnT1aXV6E2AwRr4D/R1eyRUikvWQ==",
43
43
  "license": "MIT",
44
44
  "dependencies": {
45
45
  "@types/ws": "^8.18.1",
@@ -49,7 +49,7 @@
49
49
  "node": ">=18.0.0"
50
50
  },
51
51
  "peerDependencies": {
52
- "effect": "^4.0.0-beta.99"
52
+ "effect": "^4.0.0-beta.101"
53
53
  }
54
54
  },
55
55
  "node_modules/@google-cloud/common": {
@@ -1962,9 +1962,9 @@
1962
1962
  }
1963
1963
  },
1964
1964
  "node_modules/undici": {
1965
- "version": "8.7.0",
1966
- "resolved": "https://registry.npmjs.org/undici/-/undici-8.7.0.tgz",
1967
- "integrity": "sha512-N7iQtfyLhIMOFgQubvmLV26svHpO0bqKnAiWotTQCVKCmWrcGbBotPuW1x+xwYZ2VHdSTVUfPQQnlEt1/LouTQ==",
1965
+ "version": "8.8.0",
1966
+ "resolved": "https://registry.npmjs.org/undici/-/undici-8.8.0.tgz",
1967
+ "integrity": "sha512-ubshXMXwF3MQIMF1y/WxZdNBnjEKeSg2wF5mcGUtU55YTw34tnVVpKRlLf7ruDXZ5344KokPVX4RBx1wJm64Bw==",
1968
1968
  "license": "MIT",
1969
1969
  "engines": {
1970
1970
  "node": ">=22.19.0"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@overdeck/desktop-server",
3
- "version": "0.45.22",
3
+ "version": "0.45.24",
4
4
  "private": true,
5
5
  "type": "module",
6
6
  "dependencies": {