@overdeck/desktop 0.45.24 → 0.47.0

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 (528) hide show
  1. package/drizzle/overdeck/0000_overdeck_init.sql +36 -1
  2. package/package.json +1 -1
  3. package/server/{acceptance-criteria-DDCnXF58.js → acceptance-criteria-10Ur5Dne.js} +2 -2
  4. package/server/activity-logger-CMthG6Vd.js +3 -0
  5. package/server/{activity-logger-DDlOIAML.js → activity-logger-CyteR4JO.js} +24 -13
  6. package/server/{advancing-selfheal-BVwW4qRn.js → advancing-selfheal-BNwqxseD.js} +6 -6
  7. package/server/{agent-gc-CHcnvonI.js → agent-gc-C3h9Or3a.js} +5 -5
  8. package/server/agent-state-CYXJVG72.js +3 -0
  9. package/server/agent-state-service-C63p_ftq.js +2 -0
  10. package/server/{agent-state-service-BsgWxZuB.js → agent-state-service-Ds6OeFvo.js} +15 -9
  11. package/server/{agents-EbI0zCJl.js → agents-J5mEnekq.js} +23 -16
  12. package/server/agents-ePFVoZbu.js +3 -0
  13. package/server/archive-planning-B2XplFzT.js +2 -0
  14. package/server/{archive-planning-Du25Jtst.js → archive-planning-BwhxeP7C.js} +22 -26
  15. package/server/{artifact-index-jobs-CbEDfCDu.js → artifact-index-jobs-D1q_vR3V.js} +2 -2
  16. package/server/{assemble-J2ZZ2C15.js → assemble-Bgwqv-Ro.js} +2 -2
  17. package/server/auto-spawn-consent-CQ9Bi9q6.js +1141 -0
  18. package/server/{backlog-auto-trigger-2R2jog7n.js → backlog-auto-trigger-n1lzPgN4.js} +3 -3
  19. package/server/{behavior-B3exJ42O.js → behavior-td6-xhQk.js} +2 -2
  20. package/server/boot-reconciled-stop-events-C7gGe3oB.js +44 -0
  21. package/server/bridge-pool-patrol-CYH2OLb5.js +136 -0
  22. package/server/{briefing-freshness-D1wzUIWv.js → briefing-freshness-DRqZ8lAz.js} +2 -2
  23. package/server/{build-info-Ie_D0_BT.js → build-info-7yiEpl6u.js} +5 -3
  24. package/server/{build-info-CZk_TITh.js → build-info-CpG__c63.js} +1 -1
  25. package/server/{checkpoint-manager-DwbQoqrC.js → checkpoint-manager-CkKmB0wZ.js} +1 -1
  26. package/server/{checkpoint-manager-BI1Wxoku.js → checkpoint-manager-DBcyNR8w.js} +2 -2
  27. package/server/checkpoint-worker.js +1 -1
  28. package/server/{checkpoints-CQB1h765.js → checkpoints-D95apurL.js} +2 -2
  29. package/server/{checkpoints-BJIs5QIA.js → checkpoints-Wm963lm8.js} +1 -1
  30. package/server/{claude-hooks-provision-8Ngo8TpT.js → claude-hooks-provision-4RPxNkE8.js} +1 -1
  31. package/server/{claude-hooks-provision-D8GXF3_s.js → claude-hooks-provision-Bjitl9aI.js} +13 -2
  32. package/server/{claude-permissions-DNWEVV6z.js → claude-permissions-CpbpvUQ2.js} +2 -2
  33. package/server/{claude-settings-overlay-DWy-Bb4Y.js → claude-settings-overlay-BzkHYDwR.js} +1 -1
  34. package/server/{claude-settings-overlay-CEdaqpWI.js → claude-settings-overlay-_H9Yrzab.js} +2 -2
  35. package/server/cli-CjOCSnfj.js +3 -0
  36. package/server/{cli-RoOx5DUf.js → cli-Cte9ZFGn.js} +9 -9
  37. package/server/{cliproxy-C8a1vtTU.js → cliproxy-C5fMJ7rY.js} +2 -2
  38. package/server/{cliproxy-fHfIeiGd.js → cliproxy-DaAbWMjC.js} +1 -1
  39. package/server/{close-issue-DoOifFIK.js → close-issue-BPh1ARCF.js} +5 -5
  40. package/server/{closed-issue-reaper-CktPXo8m.js → closed-issue-reaper-DHRfRMrp.js} +1 -1
  41. package/server/{closed-issue-reaper-Bk3SU4RC.js → closed-issue-reaper-DoOZqGFK.js} +88 -17
  42. package/server/{codex-BZXGhUVB.js → codex-BzGDW_d3.js} +36 -7
  43. package/server/{codex-GcHuUF-k.js → codex-o8FJwzmy.js} +1 -1
  44. package/server/{codex-parser-CFZ1_1Jl.js → codex-parser-Dt-ycU8L.js} +2 -2
  45. package/server/compaction-continuation-CvXpbZ4w.js +200 -0
  46. package/server/{config-CKxYiCmX.js → config-Bi3u1VK7.js} +4 -3
  47. package/server/{config-BZ0sHTju.js → config-BvLe652W.js} +2 -2
  48. package/server/{config-DzV30TOm.js → config-CL3Gyvja.js} +1 -1
  49. package/server/{config-yaml-DySPNmKN.js → config-yaml-CxdwhAIA.js} +276 -14
  50. package/server/conflict-gate-CX80JYYS.js +3 -0
  51. package/server/{conflict-gate-BaCVrH-N.js → conflict-gate-E4nt7ZeS.js} +60 -14
  52. package/server/{context-layers-igZ4FI4_.js → context-layers-C_IIysnm.js} +3 -3
  53. package/server/{context-layers-BrPmE__h.js → context-layers-DAG83UZt.js} +2 -2
  54. package/server/{control-settings-BQp7_4uD.js → control-settings-CiqGxXnc.js} +56 -19
  55. package/server/{conversation-compaction-eQB5CkOe.js → conversation-compaction-BE3CNtHF.js} +1 -1
  56. package/server/{conversation-compaction-CgrR8YYp.js → conversation-compaction-D6-yLtqt.js} +8 -8
  57. package/server/{conversation-service-DPJ71F33.js → conversation-service-DBxoYMDl.js} +10 -8
  58. package/server/conversation-service-D_TS2b1r.js +3 -0
  59. package/server/{conversations-CAsJF9kh.js → conversations-BKDVpB-3.js} +1 -1
  60. package/server/{conversations-6AfUfbwc.js → conversations-D0UEdLtk.js} +4 -4
  61. package/server/{cost-R-m6Yi-W.js → cost-DS1s0DbG.js} +3 -3
  62. package/server/{cost-B2ddP6wq.js → cost-DpgYmYqR.js} +12 -2
  63. package/server/{cost-sync-BsN6ER0n.js → cost-sync-tOCCGnEt.js} +3 -3
  64. package/server/{dag-B1ucnjDU.js → dag-BtkgLeqY.js} +2 -2
  65. package/server/{dangerous-git-ops-BXqeWVSf.js → dangerous-git-ops-CFLykHWt.js} +1 -1
  66. package/server/dashboard-db-worker.js +7 -7
  67. package/server/deacon-BIblC-WX.js +4 -0
  68. package/server/{deacon-nudge-log-6wVqAaqz.js → deacon-nudge-log-B08gF0mh.js} +3 -3
  69. package/server/{deacon-CU_cAYSR.js → deacon-pLRLbPvR.js} +3308 -2707
  70. package/server/deacon-pending-lifecycle-B-Io84AP.js +33 -0
  71. package/server/deacon-swarm-B1XkIvfr.js +2 -0
  72. package/server/{deacon-swarm-BXZZ1Z2-.js → deacon-swarm-v5PMun-m.js} +15 -14
  73. package/server/deacon.js +14 -19
  74. package/server/dead-end-trip-D8A3msX9.js +13 -0
  75. package/server/delivery-BX9HR4wQ.js +3 -0
  76. package/server/{deploy-patrol-AiFoP8dw.js → deploy-patrol-sYgOxLeb.js} +69 -18
  77. package/server/deploy-queue-VfohaPN_.js +169 -0
  78. package/server/deploy-queue-gHJBycaF.js +3 -0
  79. package/server/deploy-window-CFRZ0-kt.js +3 -0
  80. package/server/{deploy-window-C3F-tihF.js → deploy-window-D4DQb8VP.js} +40 -16
  81. package/server/{dev-supervisor-bcOWqdQE.js → dev-supervisor-DiOBDM1c.js} +2 -2
  82. package/server/{devcontainer-renderer-_d6XhyND.js → devcontainer-renderer-BUOIlfgD.js} +3 -3
  83. package/server/dist-B3YPQa5A.js +3 -0
  84. package/server/{dist-Cb_0uvpS.js → dist-C3A8B8wM.js} +1 -1
  85. package/server/{dist-src-BSoS7mkd.js → dist-src-C0adpegX.js} +1 -1
  86. package/server/{docker-DcMTFTUC.js → docker-BJzlkqYB.js} +2 -2
  87. package/server/docker-Y3PElJb0.js +3 -0
  88. package/server/dod-DlNtcH6n.js +91 -0
  89. package/server/durable-review-pipeline-Cibps-Rg.js +20 -0
  90. package/server/durable-review-pipeline-DP6bIcOY.js +3 -0
  91. package/server/{ensure-devcontainer-DNi-ono3.js → ensure-devcontainer-BAofzBPv.js} +4 -4
  92. package/server/{ensure-devcontainer-BZgOhRo7.js → ensure-devcontainer-DMAbWqtQ.js} +1 -1
  93. package/server/{esm-shims-OSHAYaS1.js → esm-shims-BeObUkaw.js} +1 -1
  94. package/server/{event-store-EV2cMiXj.js → event-store-5UKzh9Jf.js} +1 -1
  95. package/server/{event-store-CQL6NeqB.js → event-store-CrHcVC5_.js} +23 -4
  96. package/server/{events-DTfAe4My.js → events-BNrvchBg.js} +3 -3
  97. package/server/{events-BTdrdEq8.js → events-CF8QDbuV.js} +1 -1
  98. package/server/{factory-CFibJuaw.js → factory-Cmm9Hsho.js} +5 -5
  99. package/server/{feature-registry-population-DKZFMbFt.js → feature-registry-population-B6HpNWRy.js} +4 -4
  100. package/server/{feature-registry-storage-BdPuLcBX.js → feature-registry-storage-DJEFx1Pf.js} +2 -2
  101. package/server/{features-ez2271oH.js → features-D5km80UI.js} +2 -2
  102. package/server/{feedback-target-CoFDHiM8.js → feedback-target-BJ5ZADsu.js} +1 -1
  103. package/server/{feedback-target-7mqqwrX6.js → feedback-target-DSxEL6lP.js} +8 -8
  104. package/server/{feedback-writer-CY5L1lB7.js → feedback-writer-C27Hak8a.js} +5 -5
  105. package/server/{feedback-writer-D3a22RCd.js → feedback-writer-CoB9Z6aU.js} +1 -1
  106. package/server/{flywheel-DHrgCphM.js → flywheel-BHx8XuMr.js} +47 -20
  107. package/server/{flywheel-SVF02Jpq.js → flywheel-DZZdtiOL.js} +1 -1
  108. package/server/{flywheel-DzGtWnJ1.js → flywheel-f662Q-y2.js} +16 -15
  109. package/server/flywheel-merge-order-D_xLMbJU.js +462 -0
  110. package/server/flywheel-merge-order-Dil0LmdN.js +2 -0
  111. package/server/forge-B5o319qI.js +3 -0
  112. package/server/forge-BaKGCya6.js +383 -0
  113. package/server/{from-kNxT0bZC.js → from-B3tZbB55.js} +1 -1
  114. package/server/fs-lock-Bre3sGoz.js +130 -0
  115. package/server/{fts-db-CE46vDkZ.js → fts-db-IVc4_M3f.js} +2 -2
  116. package/server/{fts-operations-CqY6zl-i.js → fts-operations-B9jG8wa3.js} +2 -2
  117. package/server/{git-utils-CRw2zLPC.js → git-utils-CsvYfJU3.js} +30 -5
  118. package/server/git-utils-Xg4PFN45.js +3 -0
  119. package/server/{github-app-ClZ2lk8D.js → github-app-Bmg4R9mv.js} +1 -1
  120. package/server/{github-app-C3QrAUd0.js → github-app-CmNk0zLU.js} +3 -3
  121. package/server/{github-client-DfQYVUaw.js → github-client-B6KM9_wA.js} +1 -1
  122. package/server/{github-client-BnIsSrEN.js → github-client-qazkPrg0.js} +3 -3
  123. package/server/github-pr-lookup-DAcVeRLK.js +58 -0
  124. package/server/{harness-binary-DPUi-Pv8.js → harness-binary-BSpiXaLw.js} +2 -2
  125. package/server/{harness-resolve-3lNZkyT4.js → harness-resolve-BAJu5MX8.js} +4 -4
  126. package/server/{health-events-BDOHby5Q.js → health-events-2Z6Wa9SM.js} +1 -1
  127. package/server/{health-events-BBcTYQKU.js → health-events-BwX32k8d.js} +2 -2
  128. package/server/{hooks-DPVX1rwQ.js → hooks-D1g1jKLI.js} +1 -1
  129. package/server/{hooks-CKZgXlJb.js → hooks-DbtbimEf.js} +2 -2
  130. package/server/{hume-Cz8igP9E.js → hume-DXNiu6nQ.js} +2 -2
  131. package/server/hume-VUCNbTgn.js +3 -0
  132. package/server/{idle-stack-reaper-CuLF0j2H.js → idle-stack-reaper-CRA1e0jr.js} +1 -1
  133. package/server/{idle-stack-reaper-DDIRwxUY.js → idle-stack-reaper-Cy-dQzW4.js} +99 -6
  134. package/server/in-flight-guard-D-sSkADM.js +45 -0
  135. package/server/{infra-BEqFxlJc.js → infra-BDQDRopn.js} +81 -5
  136. package/server/{injection-C8aiVJrF.js → injection-6AGnXxlj.js} +7 -7
  137. package/server/{injection-CPUIqNhI.js → injection-Bl8d_jHZ.js} +1 -1
  138. package/server/inspect-agent-CUwVmr2h.js +2 -0
  139. package/server/{inspect-agent-BLuJ1AkT.js → inspect-agent-nXdIptyh.js} +26 -25
  140. package/server/{internal-token-s0-oKybJ.js → internal-token-DzK385vD.js} +2 -2
  141. package/server/{internal-token-BrcU6qfe.js → internal-token-Ias7N8Kg.js} +1 -1
  142. package/server/{io-C9kF1wtJ.js → io-B00PBNku.js} +44 -27
  143. package/server/{issue-closed-CDJk4pIp.js → issue-closed-BehTG1be.js} +8 -8
  144. package/server/{issue-lifecycle-ojZAzDBP.js → issue-lifecycle-Birk-ifu.js} +42 -30
  145. package/server/{issue-lifecycle-B8sZHVHh.js → issue-lifecycle-BqSuQvbn.js} +1 -1
  146. package/server/{issue-service-singleton-BvJ09SaR.js → issue-service-singleton-B2wXiIlw.js} +1 -1
  147. package/server/{issue-service-singleton-Yx5DdmVJ.js → issue-service-singleton-C6ZduvuY.js} +10 -10
  148. package/server/{issues-BMmP_77e.js → issues-DQ5-LatB.js} +2 -2
  149. package/server/{jsonl-parser-BXSlHwEh.js → jsonl-parser-BDpnGFCl.js} +5 -4
  150. package/server/{label-cleanup-B0UJwnv5.js → label-cleanup-Dwnky8FG.js} +3 -3
  151. package/server/{lifecycle-xmBfK2GJ.js → lifecycle-B3s4sM1G.js} +6 -7
  152. package/server/{lifecycle-yPd___5E.js → lifecycle-B4Xdb4cY.js} +2 -2
  153. package/server/{lifecycle-io-DPo7x11I.js → lifecycle-io-CzTHEooc.js} +1 -1
  154. package/server/{lifecycle-io-BREGpnLk.js → lifecycle-io-DCo6s6ks.js} +5 -5
  155. package/server/{linear-client-BsuUvkdA.js → linear-client-9uq7fhiV.js} +3 -3
  156. package/server/{linear-client-CTskEeT_.js → linear-client-CnbtHiic.js} +1 -1
  157. package/server/linear-mcp-auth-BxUOzswy.js +280 -0
  158. package/server/linear-mcp-auth-D46fBCLf.js +2 -0
  159. package/server/memory-fts-worker.js +1 -1
  160. package/server/{merge-CefQNAnq.js → merge-DiW9RdSB.js} +13 -11
  161. package/server/{merge-agent-4WOWlSYA.js → merge-agent-BLUgRsz3.js} +234 -84
  162. package/server/{merge-agent-CKkgIBPB.js → merge-agent-DQTXZk8z.js} +1 -1
  163. package/server/{merge-batch-ClFn2T-y.js → merge-batch-Cp_j9BGk.js} +1 -1
  164. package/server/merge-completeness-B46KqhtY.js +277 -0
  165. package/server/merge-completeness-BLbB5-6n.js +3 -0
  166. package/server/merge-ops-1abz6O_P.js +2 -0
  167. package/server/merge-rebase-CJJVAJuz.js +2 -0
  168. package/server/{merge-rebase-BfaTyXsw.js → merge-rebase-DIkBjgwq.js} +3 -3
  169. package/server/{merge-set-DJ8-UErs.js → merge-set-CBgHfwM0.js} +11 -5
  170. package/server/merge-set-DeUxFsC3.js +3 -0
  171. package/server/{merge-B1DiziGU.js → merge-sr8Nrnmi.js} +1 -1
  172. package/server/merge-sync-CpGmk6Ch.js +3 -0
  173. package/server/{merge-sync-VPV28g0g.js → merge-sync-kr4vqyjM.js} +409 -153
  174. package/server/{merge-train-CHopycP0.js → merge-train-Dmrcus12.js} +18 -8
  175. package/server/{merge-train-deps-D1cOZzy2.js → merge-train-deps-D_uGX91G.js} +21 -15
  176. package/server/merge-verification-NvaAd8CZ.js +220 -0
  177. package/server/merged-docker-cleanup-worker-DH_hrGPI.js +3 -0
  178. package/server/merged-docker-cleanup-worker-Y1R06TEl.js +107 -0
  179. package/server/{multipart-parser-duPAfSBw.js → multipart-parser-R-oC8dQg.js} +2 -2
  180. package/server/{no-resume-mode-Nw29vaFb.js → no-resume-mode-BgD0JUmM.js} +1 -1
  181. package/server/node_modules/.package-lock.json +30 -30
  182. package/server/node_modules/@effect/platform-node/node_modules/@effect/platform-node-shared/package.json +3 -3
  183. package/server/node_modules/@google-cloud/common/package.json +2 -2
  184. package/server/node_modules/@types/node/README.md +1 -1
  185. package/server/node_modules/@types/node/crypto.d.ts +1 -1
  186. package/server/node_modules/@types/node/package.json +2 -2
  187. package/server/node_modules/gaxios/build/cjs/tsconfig.cjs.tsbuildinfo +1 -1
  188. package/server/node_modules/gaxios/build/esm/tsconfig.tsbuildinfo +1 -1
  189. package/server/node_modules/gaxios/package.json +1 -1
  190. package/server/node_modules/google-auth-library/build/src/auth/googleauth.js +24 -19
  191. package/server/node_modules/google-auth-library/package.json +1 -1
  192. package/server/node_modules/google-gax/build/protos/google/api/auth.proto +2 -1
  193. package/server/node_modules/google-gax/build/protos/google/api/backend.proto +12 -1
  194. package/server/node_modules/google-gax/build/protos/google/api/billing.proto +1 -1
  195. package/server/node_modules/google-gax/build/protos/google/api/client.proto +165 -53
  196. package/server/node_modules/google-gax/build/protos/google/api/cloudquotas/v1/resources.proto +1 -1
  197. package/server/node_modules/google-gax/build/protos/google/api/cloudquotas/v1beta/quota_adjuster_settings.proto +7 -3
  198. package/server/node_modules/google-gax/build/protos/google/api/cloudquotas/v1beta/resources.proto +1 -1
  199. package/server/node_modules/google-gax/build/protos/google/api/config_change.proto +1 -1
  200. package/server/node_modules/google-gax/build/protos/google/api/context.proto +1 -1
  201. package/server/node_modules/google-gax/build/protos/google/api/control.proto +3 -3
  202. package/server/node_modules/google-gax/build/protos/google/api/distribution.proto +1 -1
  203. package/server/node_modules/google-gax/build/protos/google/api/documentation.proto +1 -1
  204. package/server/node_modules/google-gax/build/protos/google/api/endpoint.proto +1 -1
  205. package/server/node_modules/google-gax/build/protos/google/api/error_reason.proto +186 -1
  206. package/server/node_modules/google-gax/build/protos/google/api/expr/v1alpha1/checked.proto +31 -3
  207. package/server/node_modules/google-gax/build/protos/google/api/expr/v1alpha1/eval.proto +8 -9
  208. package/server/node_modules/google-gax/build/protos/google/api/expr/v1alpha1/explain.proto +1 -2
  209. package/server/node_modules/google-gax/build/protos/google/api/expr/v1alpha1/syntax.proto +20 -22
  210. package/server/node_modules/google-gax/build/protos/google/api/expr/v1alpha1/value.proto +2 -3
  211. package/server/node_modules/google-gax/build/protos/google/api/field_behavior.proto +1 -1
  212. package/server/node_modules/google-gax/build/protos/google/api/field_info.proto +1 -1
  213. package/server/node_modules/google-gax/build/protos/google/api/http.proto +1 -1
  214. package/server/node_modules/google-gax/build/protos/google/api/httpbody.proto +1 -1
  215. package/server/node_modules/google-gax/build/protos/google/api/label.proto +1 -1
  216. package/server/node_modules/google-gax/build/protos/google/api/launch_stage.proto +1 -1
  217. package/server/node_modules/google-gax/build/protos/google/api/log.proto +1 -1
  218. package/server/node_modules/google-gax/build/protos/google/api/logging.proto +1 -1
  219. package/server/node_modules/google-gax/build/protos/google/api/metric.proto +1 -1
  220. package/server/node_modules/google-gax/build/protos/google/api/monitored_resource.proto +1 -1
  221. package/server/node_modules/google-gax/build/protos/google/api/monitoring.proto +1 -1
  222. package/server/node_modules/google-gax/build/protos/google/api/policy.proto +1 -1
  223. package/server/node_modules/google-gax/build/protos/google/api/quota.proto +1 -1
  224. package/server/node_modules/google-gax/build/protos/google/api/resource.proto +1 -1
  225. package/server/node_modules/google-gax/build/protos/google/api/routing.proto +8 -4
  226. package/server/node_modules/google-gax/build/protos/google/api/service.proto +2 -3
  227. package/server/node_modules/google-gax/build/protos/google/api/source_info.proto +1 -1
  228. package/server/node_modules/google-gax/build/protos/google/api/system_parameter.proto +1 -1
  229. package/server/node_modules/google-gax/build/protos/google/api/usage.proto +7 -27
  230. package/server/node_modules/google-gax/build/protos/google/api/visibility.proto +1 -1
  231. package/server/node_modules/google-gax/build/protos/google/longrunning/operations.proto +20 -1
  232. package/server/node_modules/google-gax/build/protos/google/protobuf/any.proto +52 -108
  233. package/server/node_modules/google-gax/build/protos/google/protobuf/compiler/ruby/ruby_generated_code.proto +2 -0
  234. package/server/node_modules/google-gax/build/protos/google/protobuf/cpp_features.proto +21 -1
  235. package/server/node_modules/google-gax/build/protos/google/protobuf/cpp_file_options.proto +24 -0
  236. package/server/node_modules/google-gax/build/protos/google/protobuf/cpp_options.proto +15 -0
  237. package/server/node_modules/google-gax/build/protos/google/protobuf/descriptor.proto +118 -30
  238. package/server/node_modules/google-gax/build/protos/google/protobuf/field_mask.proto +16 -18
  239. package/server/node_modules/google-gax/build/protos/google/protobuf/internal_options.proto +8 -1
  240. package/server/node_modules/google-gax/build/protos/google/protobuf/json/json_enumval_custom_string.proto +26 -0
  241. package/server/node_modules/google-gax/build/protos/google/protobuf/json_enumvalue_options.proto +29 -0
  242. package/server/node_modules/google-gax/build/protos/google/protobuf/json_options.proto +14 -0
  243. package/server/node_modules/google-gax/build/protos/google/protobuf/struct.proto +38 -22
  244. package/server/node_modules/google-gax/build/protos/google/protobuf/test_protos/forced_micro_string.proto +3 -0
  245. package/server/node_modules/google-gax/build/protos/google/protobuf/test_protos/repeated_field_proxy_import_message.proto +14 -0
  246. package/server/node_modules/google-gax/build/protos/google/protobuf/timestamp.proto +9 -8
  247. package/server/node_modules/google-gax/build/protos/google/protobuf/util/json_format_proto3.proto +18 -0
  248. package/server/node_modules/google-gax/build/protos/google/rpc/code.proto +1 -1
  249. package/server/node_modules/google-gax/build/protos/google/rpc/context/attribute_context.proto +7 -2
  250. package/server/node_modules/google-gax/build/protos/google/rpc/context/audit_context.proto +1 -1
  251. package/server/node_modules/google-gax/build/protos/google/rpc/error_details.proto +5 -5
  252. package/server/node_modules/google-gax/build/protos/google/rpc/http.proto +1 -1
  253. package/server/node_modules/google-gax/build/protos/google/rpc/status.proto +1 -2
  254. package/server/node_modules/google-gax/build/protos/google/type/calendar_period.proto +1 -1
  255. package/server/node_modules/google-gax/build/protos/google/type/color.proto +9 -10
  256. package/server/node_modules/google-gax/build/protos/google/type/date.proto +11 -9
  257. package/server/node_modules/google-gax/build/protos/google/type/datetime.proto +17 -17
  258. package/server/node_modules/google-gax/build/protos/google/type/dayofweek.proto +1 -1
  259. package/server/node_modules/google-gax/build/protos/google/type/decimal.proto +11 -13
  260. package/server/node_modules/google-gax/build/protos/google/type/expr.proto +1 -1
  261. package/server/node_modules/google-gax/build/protos/google/type/fraction.proto +1 -1
  262. package/server/node_modules/google-gax/build/protos/google/type/interval.proto +1 -2
  263. package/server/node_modules/google-gax/build/protos/google/type/latlng.proto +4 -5
  264. package/server/node_modules/google-gax/build/protos/google/type/localized_text.proto +3 -3
  265. package/server/node_modules/google-gax/build/protos/google/type/money.proto +1 -2
  266. package/server/node_modules/google-gax/build/protos/google/type/month.proto +1 -1
  267. package/server/node_modules/google-gax/build/protos/google/type/phone_number.proto +20 -15
  268. package/server/node_modules/google-gax/build/protos/google/type/postal_address.proto +39 -39
  269. package/server/node_modules/google-gax/build/protos/google/type/quaternion.proto +4 -4
  270. package/server/node_modules/google-gax/build/protos/google/type/timeofday.proto +11 -8
  271. package/server/node_modules/google-gax/package.json +5 -5
  272. package/server/node_modules/retry-request/package.json +4 -4
  273. package/server/node_modules/teeny-request/package.json +5 -5
  274. package/server/node_modules/undici/lib/cache/memory-cache-store.js +54 -9
  275. package/server/node_modules/undici/lib/cache/sqlite-cache-store.js +7 -1
  276. package/server/node_modules/undici/lib/core/request.js +12 -1
  277. package/server/node_modules/undici/lib/dispatcher/client-h1.js +11 -2
  278. package/server/node_modules/undici/lib/global.js +36 -16
  279. package/server/node_modules/undici/lib/handler/cache-handler.js +236 -116
  280. package/server/node_modules/undici/lib/handler/cache-revalidation-handler.js +3 -3
  281. package/server/node_modules/undici/lib/handler/retry-handler.js +24 -0
  282. package/server/node_modules/undici/lib/interceptor/cache.js +152 -62
  283. package/server/node_modules/undici/lib/interceptor/decompress.js +5 -2
  284. package/server/node_modules/undici/lib/util/cache.js +328 -66
  285. package/server/node_modules/undici/lib/util/date.js +23 -6
  286. package/server/node_modules/undici/lib/web/cookies/util.js +78 -8
  287. package/server/node_modules/undici/package.json +1 -1
  288. package/server/{orphan-proposed-reconciler-BvKkWMJQ.js → orphan-proposed-reconciler-B6vJHxtX.js} +242 -34
  289. package/server/{orphan-proposed-reconciler-CTSGcK8p.js → orphan-proposed-reconciler-DcgTPPFY.js} +1 -1
  290. package/server/package-lock.json +31 -31
  291. package/server/package.json +1 -1
  292. package/server/{pan-dir-B0c3w0Ya.js → pan-dir-DMzF5wne.js} +25 -11
  293. package/server/{paths-D-xWGHdh.js → paths-sJBSb7Ul.js} +2 -2
  294. package/server/pending-lifecycle-claim-DilzGfgk.js +110 -0
  295. package/server/persistent-logger-H_VjuOu7.js +57 -0
  296. package/server/{pickup-DUCLWrJY.js → pickup-DWhqzliO.js} +4 -3
  297. package/server/pipeline-membership-C88VBnhJ.js +3 -0
  298. package/server/pipeline-membership-D9SBvItj.js +57 -0
  299. package/server/pipeline-membership-gather-4eR-7Tqy.js +3 -0
  300. package/server/pipeline-membership-gather-CeVGnNJ2.js +593 -0
  301. package/server/{pipeline-notifier-BXkJzDC4.js → pipeline-notifier-D0ALV6Nw.js} +2 -2
  302. package/server/{pipeline-notifier-BJr8gQX6.js → pipeline-notifier-DT6xLFao.js} +1 -1
  303. package/server/post-merge-lifecycle-worker-8HIeS_J6.js +50 -0
  304. package/server/{project-pipelines-C0MWUeCU.js → project-pipelines-9SKt2bEc.js} +2 -2
  305. package/server/{project-repos-B6GycDh9.js → project-repos-B5pIphKg.js} +7 -3
  306. package/server/project-repos-DPjOdfPa.js +3 -0
  307. package/server/projects-_n3Zui6K.js +3 -0
  308. package/server/{prompts-DxzFXuLl.js → prompts-CgzMBvQF.js} +2 -2
  309. package/server/{providers-u4Ga0jOr.js → providers-BI1mOBQ4.js} +1 -1
  310. package/server/{providers-qQAwGQDW.js → providers-BJQSnAAp.js} +7 -7
  311. package/server/public/assets/{chunk-BO2N2NFS-BamJdinX.js → chunk-BO2N2NFS-D_pGACYN.js} +4 -4
  312. package/server/public/assets/{diagram-OG6HWLK6-DfOB8-w4.js → diagram-OG6HWLK6-BO6fe3hH.js} +1 -1
  313. package/server/public/assets/{dist-ByIuzMQW.js → dist-5zingMiA.js} +3 -3
  314. package/server/public/assets/{dist-D7zYSEA6.js → dist-CVxhbI2E.js} +1 -1
  315. package/server/public/assets/{ganttDiagram-6RSMTGT7-EdmRyXL3.js → ganttDiagram-6RSMTGT7-Bgj4A7kp.js} +1 -1
  316. package/server/public/assets/{highlighted-body-OFNGDK62-MerOfTX8.js → highlighted-body-OFNGDK62-DNPK7_cm.js} +1 -1
  317. package/server/public/assets/index-DEpY-D1O.js +807 -0
  318. package/server/public/assets/index-Ddkcz3WT.css +1 -0
  319. package/server/public/assets/{linear-BBbArIcK.js → linear-BB0jQT16.js} +1 -1
  320. package/server/public/assets/mermaid-GHXKKRXX-BzPfaQJ1.js +1 -0
  321. package/server/public/assets/{pieDiagram-4H26LBE5-BKIddiJN.js → pieDiagram-4H26LBE5-DeGIzzpZ.js} +1 -1
  322. package/server/public/assets/{prod-B8vYiu52.js → prod-XBLvikex.js} +4 -4
  323. package/server/public/assets/{quadrantDiagram-W4KKPZXB-D6RtoULk.js → quadrantDiagram-W4KKPZXB-BV9SLeWz.js} +1 -1
  324. package/server/public/assets/{sankeyDiagram-5OEKKPKP-CLrCedZX.js → sankeyDiagram-5OEKKPKP-Dwja0gj8.js} +1 -1
  325. package/server/public/assets/{xychartDiagram-2RQKCTM6-hznR8DYl.js → xychartDiagram-2RQKCTM6-DCB4qvfw.js} +1 -1
  326. package/server/public/index.html +2 -2
  327. package/server/{pull-requests-_lHueOHW.js → pull-requests-7BgLDsIo.js} +19 -10
  328. package/server/{pull-requests-7N8WKseP.js → pull-requests-Dq0y6IxE.js} +1 -1
  329. package/server/{queries-CjNIf-Ub.js → queries-C-MUZaIy.js} +824 -192
  330. package/server/{rally-CyWT_lNO.js → rally-CPysR4T_.js} +3 -3
  331. package/server/rally-D_VW4bJv.js +3 -0
  332. package/server/{rally-api-C8e_1JRi.js → rally-api-8Ptlp2os.js} +2 -2
  333. package/server/{rally-api-ClOSd-Tt.js → rally-api-CgosKdKL.js} +1 -1
  334. package/server/{rally-client-sgtVqzNU.js → rally-client-CCX0hADj.js} +1 -1
  335. package/server/{rally-client-lc-nokqr.js → rally-client-iYMHWQD7.js} +5 -5
  336. package/server/{reap-terminal-sessions-7KeHv1R1.js → reap-terminal-sessions-4Xg9NGA8.js} +2 -2
  337. package/server/{reap-terminal-sessions-BtHPo6Xc.js → reap-terminal-sessions-Qf-9LVQc.js} +2 -2
  338. package/server/{rebuild-stack-lwtsW0GO.js → rebuild-stack-CMdgaylx.js} +16 -7
  339. package/server/{rebuild-stack-CFvcBHsS.js → rebuild-stack-DqcOVmJO.js} +2 -2
  340. package/server/{reconstruct-cache-C3Ui7ojV.js → reconstruct-cache-CMZJ_Vjq.js} +9 -7
  341. package/server/record-BTwWhtBb.js +3 -0
  342. package/server/{record-update-dE1Aw83j.js → record-update-DaOKS7Wb.js} +124 -157
  343. package/server/record-update-DhI7eySG.js +3 -0
  344. package/server/{recovery-trip-BvRWfUXM.js → recovery-trip-DDH-02ng.js} +2 -2
  345. package/server/{release-engine-Cx48W7z8.js → release-engine-B2X9AfFC.js} +5 -5
  346. package/server/{release-set-CQfuN9-v.js → release-set-G4XKyQ8K.js} +3 -3
  347. package/server/{remote-C_2hasl7.js → remote-BXarMvqf.js} +3 -3
  348. package/server/{remote-ChgimyYa.js → remote-CUhyqjXk.js} +3 -3
  349. package/server/{remote-agents-By1ige5O.js → remote-agents-Bba-MgSA.js} +311 -48
  350. package/server/{remote-agents-CA3Ihlxj.js → remote-agents-CLZB3Coc.js} +2 -2
  351. package/server/{remote-completion-fVe9e_3u.js → remote-completion-CwAp79EC.js} +13 -13
  352. package/server/resume-mOREjlYu.js +3 -0
  353. package/server/{review-agent-CIGOQYBD.js → review-agent--pOptAEV.js} +65 -50
  354. package/server/{review-agent-DNboMyW4.js → review-agent-BTCNkq2h.js} +1 -1
  355. package/server/{review-artifacts-nRDPuMxd.js → review-artifacts-BNmw8dWE.js} +7 -6
  356. package/server/{review-context-2uj-YQ8J.js → review-context-DFxYOOJW.js} +9 -9
  357. package/server/{in-flight-guard-CAAkqPLu.js → review-convoy-liveness-BgU_1jJf.js} +3 -44
  358. package/server/review-status-CGvlA4o_.js +7737 -0
  359. package/server/review-status-Dma9SFaN.js +3 -0
  360. package/server/review-status-emit-DURrmGYX.js +50 -0
  361. package/server/{review-status-enrichment-Dci-ZwEt.js → review-status-enrichment-8NiNXi5W.js} +4 -4
  362. package/server/review-status-source-BLx_1siH.js +3 -0
  363. package/server/{review-status-source-CxuEjLGg.js → review-status-source-DIk1JSow.js} +24 -3
  364. package/server/{review-status-sync-BTOpxtTC.js → review-status-sync-0GxOqeqF.js} +11 -6
  365. package/server/{review-status-sync-DSDK3OMy.js → review-status-sync-muT-EBp2.js} +1 -1
  366. package/server/{review-verdict-feedback-CTd4QMBu.js → review-verdict-feedback-HwF6ODFy.js} +1 -1
  367. package/server/{review-verdict-feedback-CCjVA7Uk.js → review-verdict-feedback-xJNdqBnX.js} +65 -11
  368. package/server/{rollup-FGsKki9R.js → rollup-BQaol5TX.js} +8 -8
  369. package/server/{rollup-BKQC7jp4.js → rollup-BR4t_wck.js} +1 -1
  370. package/server/{scanner-CnqEZeDy.js → scanner-C-D2cFdX.js} +8 -7
  371. package/server/{sequence-io-D909zgeH.js → sequence-io-Bmf1EZM5.js} +4 -4
  372. package/server/{sequencer-agent-CzkcK6P5.js → sequencer-agent-CigMyKh2.js} +7 -6
  373. package/server/server.js +2005 -614
  374. package/server/{service-CLeAoU6G.js → service-CD0DvFvD.js} +114 -68
  375. package/server/{session-fork-CHI1XvL9.js → session-fork-B6cQ5eya.js} +2 -2
  376. package/server/{session-history-BT3IvqhC.js → session-history-3ON_IJjm.js} +7 -55
  377. package/server/settings-CVmWiJ-r.js +2 -0
  378. package/server/{settings-C0zgxOGf.js → settings-PilbFZAM.js} +3 -2
  379. package/server/{settings-BTMvpNFU.js → settings-VN0qOh4U.js} +3 -3
  380. package/server/{shadow-engineering-BJfgm-hX.js → shadow-engineering-DXvx77oE.js} +3 -3
  381. package/server/{shadow-state-7a-524T8.js → shadow-state-BBk_zacw.js} +2 -2
  382. package/server/{shadow-state-DnDyjujH.js → shadow-state-CZBp7pwq.js} +1 -1
  383. package/server/{shadow-utils-Db3oroFG.js → shadow-utils-DdZ05AJS.js} +2 -2
  384. package/server/{ship-log-D9MlVzYU.js → ship-log-7kJfjUX2.js} +1 -1
  385. package/server/{smart-compaction-CV2ukKND.js → smart-compaction-8fA5k5XN.js} +1 -1
  386. package/server/{smart-compaction-KCYScAU1.js → smart-compaction-ByhL9cRS.js} +8 -7
  387. package/server/{spawn-planning-session-DKpdFyOC.js → spawn-planning-session-pcF-YeFE.js} +38 -50
  388. package/server/spawn-planning-session-vLUJoFjy.js +3 -0
  389. package/server/{specialist-completion-Ky9wCDpb.js → specialist-completion-B07XjWD2.js} +1 -1
  390. package/server/{specialist-context-Bn3dCGS2.js → specialist-context-DJ-zFyL3.js} +5 -5
  391. package/server/{specialist-handoff-logger-CMEwYxa2.js → specialist-handoff-logger-aKSxbIgD.js} +2 -2
  392. package/server/{specialist-logs-C5p8G7tx.js → specialist-logs-Dae-n52_.js} +3 -3
  393. package/server/{specialists-CC4r-c2s.js → specialists-6PWdtWcg.js} +1177 -311
  394. package/server/{specialists-DM6bWjsi.js → specialists-Bz-wFT7R.js} +1 -1
  395. package/server/{specialists-jiuuyVkp.js → specialists-DUiExaxb.js} +18 -18
  396. package/server/{specialists-CShuVGWT.js → specialists-KR3pKulN.js} +1 -1
  397. package/server/specs--enInima.js +3 -0
  398. package/server/src-B948bGVR.js +11452 -0
  399. package/server/{src-CXmtj0im.js → src-rac0Mepv.js} +6 -6
  400. package/server/{src-CdmnTM2m.js → src-vHy2-oCv.js} +3 -3
  401. package/server/{stack-health-Bn3o8FBX.js → stack-health-BikqHSjn.js} +1 -1
  402. package/server/{stack-health-DxSdG9cW.js → stack-health-DqLTiEu4.js} +7 -5
  403. package/server/{stale-task-claims-KJKxxiiQ.js → stale-task-claims-Cab_Fo_Z.js} +5 -4
  404. package/server/{staleness-DPm7ClwA.js → staleness-C-a5rBxF.js} +1 -1
  405. package/server/{staleness-CT34nwr9.js → staleness-CGTZyp6V.js} +1 -1
  406. package/server/{state-home-Cn_Qu8IX.js → state-home-722Dkx92.js} +2 -2
  407. package/server/{state-mapping-BL_-3Yt8.js → state-mapping-CybR81Uf.js} +1 -1
  408. package/server/{state-migrate-BGg2ZaOt.js → state-migrate-2u8wIpoL.js} +4 -4
  409. package/server/{stuck-remediation-DYuPRYYw.js → stuck-remediation-CC6q3eqQ.js} +84 -26
  410. package/server/{stuck-remediation-s9_2qfi6.js → stuck-remediation-r1TJu68G.js} +1 -1
  411. package/server/{substrate-bug-weights-service-B-FwCs5V.js → substrate-bug-weights-service-CzIyyWFT.js} +3 -3
  412. package/server/{summary-fork-DpcxN9tf.js → summary-fork-BqgmgPDt.js} +2 -2
  413. package/server/{summary-fork-D1RAk9rJ.js → summary-fork-Df2WFijM.js} +8 -8
  414. package/server/supervisor/{injection-budget-Csw5tqfJ.js → injection-budget-Cg_KIb3o.js} +1 -1
  415. package/server/supervisor/{paths-DehGY2Fj.js → paths-BBOnCYlO.js} +10 -2
  416. package/server/supervisor/pty-supervisor.js +50 -4
  417. package/server/supervisor/{pty-token-x-ea28Us.js → pty-token-BbjwEUUM.js} +3 -3
  418. package/server/supervisor-B4anCCSm.js +2 -0
  419. package/server/{supervisor-wM4ooB5O.js → supervisor-BxqSpjcN.js} +3 -3
  420. package/server/{swarm-readiness-DlP_UjHq.js → swarm-readiness-DfFxa9-n.js} +3 -3
  421. package/server/{system-prerequisites-DUDj1YHf.js → system-prerequisites-ICLSkhhZ.js} +2 -2
  422. package/server/{teardown-workspace-DeTTImn-.js → teardown-workspace-DRdi_CPa.js} +15 -16
  423. package/server/{test-agent-queue-MbxX5vqq.js → test-agent-queue-A_-p-i0I.js} +8 -7
  424. package/server/{test-verdict-gscuksPv.js → test-verdict-BHgTAwIG.js} +1 -1
  425. package/server/{test-verdict-bWYBtqBg.js → test-verdict-C4i9aqEP.js} +1 -1
  426. package/server/{tldr-daemon-BYFkts95.js → tldr-daemon-CvWXBhX1.js} +1 -1
  427. package/server/{tldr-daemon-C-69c3OI.js → tldr-daemon-wvsU6bKv.js} +2 -2
  428. package/server/{tmux-R7N7y-Mh.js → tmux-CfDHob9M.js} +174 -4
  429. package/server/{tmux-B6z7h_vZ.js → tmux-Ctk6RV5l.js} +1 -1
  430. package/server/{token-BK6t8BIT.js → token-DrxwytsZ.js} +2 -2
  431. package/server/{token-util-DxXu-vd1.js → token-util-B48BlCba.js} +1 -1
  432. package/server/token-util-D411CAq9.js +3 -0
  433. package/server/{tracker-config-G6latr8C.js → tracker-config-BcPMElRB.js} +2 -2
  434. package/server/{tracker-utils-DHv5pSDT.js → tracker-utils-CJ6BHjcD.js} +3 -3
  435. package/server/{traefik-connect-Df2uXPsQ.js → traefik-connect-DZ6nMYMj.js} +1 -1
  436. package/server/{tunnel-DGdUkGoZ.js → tunnel-Bp-dRHZz.js} +1 -1
  437. package/server/{tunnel-CDVKJpRv.js → tunnel-DUbUPElU.js} +3 -3
  438. package/server/{typed-errors-BHhE85Ul.js → typed-errors-CKeoDdU3.js} +1 -1
  439. package/server/{typed-errors-2BTMxkZq.js → typed-errors-DyjseiB6.js} +1 -1
  440. package/server/{types-hraoaQIp.js → types-Cm5ASJbq.js} +1 -1
  441. package/server/{types-5M0lupud.js → types-Di8wdakq.js} +1 -1
  442. package/server/uat-promote-verification-CoJuh7XO.js +92 -0
  443. package/server/uat-train-4Q0k06CQ.js +0 -0
  444. package/server/uat-train-Dewoatps.js +2 -0
  445. package/server/{validate-IfDGkaVR.js → validate-B0C8p66t.js} +8 -6
  446. package/server/{validation-Dw1pzDzr.js → validation-B_kIRfNe.js} +4 -4
  447. package/server/{validation-CC9OPqJZ.js → validation-hVOwQk8T.js} +1 -1
  448. package/server/{verification-artifact-B3itKTxu.js → verification-artifact-BxlxTiYK.js} +1 -1
  449. package/server/{verification-artifact-TVFSz_q1.js → verification-artifact-D70AtckY.js} +1 -1
  450. package/server/{verification-runner-BW4HOKAz.js → verification-runner-Bc3cJvpC.js} +1 -1
  451. package/server/{verification-runner-CkgX6EtI.js → verification-runner-KZTz6u72.js} +40 -18
  452. package/server/{vtt-parser-DYPbKcIJ.js → vtt-parser-CE_i3Bcw.js} +1 -1
  453. package/server/{work-agent-prompt-Du8Vh2aJ.js → work-agent-prompt-ByrPAzOy.js} +20 -9
  454. package/server/{workflows-mbQzh6mQ.js → workflows-D0vP1WrK.js} +252 -99
  455. package/server/workflows-DtDX08ed.js +2 -0
  456. package/server/{workspace--8tnhDI0.js → workspace-COWvdibH.js} +1 -1
  457. package/server/{workspace-BPUws1-_.js → workspace-DQkRPLlQ.js} +3 -3
  458. package/server/workspace-anchor-drift-DXYIAHzr.js +224 -0
  459. package/server/workspace-anchor-drift-pwz23TI1.js +3 -0
  460. package/server/{workspace-config-CIVWZOQr.js → workspace-config-BdZM4PvZ.js} +1 -1
  461. package/server/{workspace-manager-CBhNdzE4.js → workspace-manager-BPgTrG66.js} +157 -118
  462. package/server/workspace-manager-C1F3XsnS.js +3 -0
  463. package/server/{workspace-metadata-BzHnwwX4.js → workspace-metadata-CdjzAP8x.js} +1 -1
  464. package/server/{workspace-metadata-_WygnyoX.js → workspace-metadata-DkO_iTLo.js} +2 -2
  465. package/server/{workspaces-Do_9J0LQ.js → workspaces-CRBJikLp.js} +749 -299
  466. package/sync-sources/dev-skills/pan-dashboard-restart/SKILL.md +34 -10
  467. package/sync-sources/hooks/linear-mcp-auth-hook +97 -0
  468. package/sync-sources/rules/ask-user-question-self-contained.md +9 -0
  469. package/sync-sources/skills/pan-close/SKILL.md +5 -3
  470. package/sync-sources/skills/pan-merge/SKILL.md +7 -5
  471. package/sync-sources/skills/pan-peer-review/SKILL.md +195 -0
  472. package/sync-sources/skills/pan-release/SKILL.md +57 -0
  473. package/sync-sources/skills/pan-reload/SKILL.md +3 -3
  474. package/sync-sources/skills/pan-restart/SKILL.md +5 -4
  475. package/sync-sources/skills/pan-review/SKILL.md +7 -1
  476. package/sync-sources/skills/pan-sync-main/SKILL.md +9 -8
  477. package/sync-sources/skills/pipeline-status/SKILL.md +10 -1
  478. package/sync-sources/skills/workspace-add-repo/SKILL.md +16 -1
  479. package/server/activity-logger-OEUBdfZ8.js +0 -3
  480. package/server/agent-state-Bc3tzUC8.js +0 -3
  481. package/server/agent-state-service-D5UGKIJL.js +0 -2
  482. package/server/agents-wi9NWzs2.js +0 -3
  483. package/server/archive-planning-BZDgzoEj.js +0 -3
  484. package/server/cli-B86rejVV.js +0 -3
  485. package/server/conflict-gate-BhAY7TUd.js +0 -3
  486. package/server/conversation-service-BLd3MYsG.js +0 -3
  487. package/server/deacon-kiQrb4ZT.js +0 -4
  488. package/server/deacon-swarm-C-GwfjJy.js +0 -2
  489. package/server/deploy-window-DkZraDyj.js +0 -3
  490. package/server/dist-Bzy0y69j.js +0 -3
  491. package/server/dod-C6n9RV3G.js +0 -66
  492. package/server/flywheel-merge-order-UU0tiUld.js +0 -245
  493. package/server/flywheel-merge-order-UUcsCDb6.js +0 -2
  494. package/server/forge-CNFnyqps.js +0 -270
  495. package/server/forge-DXnS_YFH.js +0 -2
  496. package/server/git-utils-D0_yhCgF.js +0 -3
  497. package/server/github-pr-lookup-D16NGsSO.js +0 -44
  498. package/server/hume-ccTf4wTX.js +0 -3
  499. package/server/inspect-agent-Brtz0URj.js +0 -2
  500. package/server/label-reconciler-B4iOAjlC.js +0 -113
  501. package/server/launcher-generator-BBWG_SiS.js +0 -473
  502. package/server/merge-ops-CR44oU9-.js +0 -2
  503. package/server/merge-set-bUqbm3yc.js +0 -3
  504. package/server/merge-sync-BJYeOODr.js +0 -3
  505. package/server/merge-verification-BkaOqPsw.js +0 -124
  506. package/server/pipeline-membership-mY3GprlK.js +0 -420
  507. package/server/project-repos-DXKQsc_m.js +0 -3
  508. package/server/projects-vjjcmiN8.js +0 -3
  509. package/server/public/assets/index-CWeMerGO.js +0 -804
  510. package/server/public/assets/index-CenuJ3Cw.css +0 -1
  511. package/server/public/assets/mermaid-GHXKKRXX-CpPWAFwE.js +0 -1
  512. package/server/rally-zhhtXuDP.js +0 -3
  513. package/server/record-CN0pj4_5.js +0 -3
  514. package/server/record-update-bLJxAXH4.js +0 -3
  515. package/server/resume-BFv1PGpA.js +0 -3
  516. package/server/review-status-btEYlaxA.js +0 -3
  517. package/server/review-status-kZj_KyCk.js +0 -1470
  518. package/server/settings-66A6uvIA.js +0 -2
  519. package/server/spawn-planning-session-qUC2VWu3.js +0 -2
  520. package/server/specs-C8Wsn2XO.js +0 -3
  521. package/server/src-DtcUOZCq.js +0 -4826
  522. package/server/supervisor-FTJAIsAK.js +0 -2
  523. package/server/token-util-DuPuNriz.js +0 -3
  524. package/server/tracker-utils-B4ylXZQK.js +0 -3
  525. package/server/uat-train-B05BWkp-.js +0 -2
  526. package/server/uat-train-DDSrSoV1.js +0 -2152
  527. package/server/workflows-BQu4RFQ-.js +0 -2
  528. package/server/workspace-manager-CWT55qeI.js +0 -3
@@ -0,0 +1,33 @@
1
+ import { n as settlePendingLifecycleClaim, t as claimPendingLifecycleFile } from "./pending-lifecycle-claim-DilzGfgk.js";
2
+ //#region ../../lib/cloister/deacon-pending-lifecycle.ts
3
+ async function processPendingLifecycleForPatrol(pendingFile) {
4
+ const claim = await claimPendingLifecycleFile(pendingFile);
5
+ if (!claim) return null;
6
+ let pending;
7
+ try {
8
+ pending = JSON.parse(claim.raw);
9
+ } catch (error) {
10
+ await claim.discard();
11
+ throw error;
12
+ }
13
+ const age = Date.now() - (pending.timestamp ?? 0);
14
+ if (age >= 3600 * 1e3) {
15
+ await claim.discard();
16
+ console.log(`[deacon] Discarded stale pending post-merge claim (age: ${Math.round(age / 6e4)}m)`);
17
+ return null;
18
+ }
19
+ console.log(`[deacon] Processing pending post-merge lifecycle for ${pending.issueId} (age: ${Math.round(age / 1e3)}s)`);
20
+ try {
21
+ const { postMergeLifecycle } = await import("./merge-agent-DQTXZk8z.js");
22
+ await postMergeLifecycle(pending.issueId, pending.projectPath, pending.sourceBranch, { skipDeploy: true });
23
+ await settlePendingLifecycleClaim(claim, pending.issueId, true);
24
+ return `Processed pending post-merge lifecycle for ${pending.issueId}`;
25
+ } catch (error) {
26
+ await settlePendingLifecycleClaim(claim, pending.issueId, false);
27
+ throw error;
28
+ }
29
+ }
30
+ //#endregion
31
+ export { processPendingLifecycleForPatrol };
32
+
33
+ //# sourceMappingURL=deacon-pending-lifecycle-B-Io84AP.js.map
@@ -0,0 +1,2 @@
1
+ import { r as coordinateSwarmSlots } from "./deacon-swarm-v5PMun-m.js";
2
+ export { coordinateSwarmSlots };
@@ -1,14 +1,14 @@
1
- import { D as resolveTieredExecutionEnabled, Dt as getProjectConfigFromWorkspacePath, Ft as resolveProjectForIssue, Mt as readIssueRecordForWorkspaceSync, Nt as readIssueRecordSync, Ot as init_record, T as init_tier_table, Tn as init_projects, Tt as getIssueRecordPathForWorkspace, Xt as isStatePlaneOnlyStatus, Yt as init_state_plane, f as loadConfigSync, kn as listProjectsSync, t as init_config_yaml, yn as getProjectSync, zn as resolveProjectFromIssueSync } from "./config-yaml-DySPNmKN.js";
2
- import { n as updateIssueRecord, r as updateIssueRecordForWorkspace, t as init_record_update } from "./record-update-dE1Aw83j.js";
3
- import { A as listPaneValues, E as isPaneDead, H as sessionExists, M as listSessionNames, i as capturePane, w as init_tmux } from "./tmux-R7N7y-Mh.js";
4
- import { b as setReviewStatusSync, c as getReviewStatusSync, l as init_review_status } from "./review-status-kZj_KyCk.js";
5
- import { A as spawnTierSupervisor, D as init_tier_supervisor, Dt as init_memory_verdict_cache, E as deliverCommitForReview, Et as getCachedMemoryVerdict, Ht as defaultRunWorkspace, I as init_slot_reconcile, Kn as getAgentResumeGateBlockReason, L as listSlotAssignments, M as broadcastCommit, Mr as init_agent_runtime, N as init_tier_feed, O as loadPrdDraft, Qt as resolveTier, R as reconcileSlotState, Ut as init_spawn_prep, Wn as decideResumeGate, X as messageAgent, Xn as init_agent_state, Y as init_messaging, Yn as getAgentStateSync, Zt as init_resolve_tier, ct as init_spawn, dt as init_termination, ft as stopAgent, ht as countRunningSwarmSlotsForIssue, j as supervisorAgentId, jr as getAgentRuntimeSnapshot, k as shouldSupervise, ut as spawnRun, vt as getConcurrencyLimits, wt as tryReserveSwarmSlot, xt as releaseSwarmSlot, yt as init_concurrency } from "./queries-CjNIf-Ub.js";
6
- import { C as init_specs, d as readPlanSync, i as findPlanSync, n as applyStatusOverrides, o as init_io, v as init_types, x as findSpecByIssue, y as subItemsOf } from "./io-C9kF1wtJ.js";
7
- import { s as init_control_settings, u as isDeaconGloballyPausedSync } from "./control-settings-BQp7_4uD.js";
8
- import { i as createActiveSlice, l as init_dag, n as blockingParentCount, o as getDispatchableItems } from "./dag-B1ucnjDU.js";
9
- import { a as loadCloisterConfigSync, r as init_config } from "./config-CKxYiCmX.js";
10
- import { r as init_swarm_readiness, t as analyzeSwarmReadiness } from "./swarm-readiness-DlP_UjHq.js";
11
- import { t as recordRecoveryFailure } from "./recovery-trip-BvRWfUXM.js";
1
+ import { D as resolveTieredExecutionEnabled, Gn as init_projects, Nt as getProjectConfigFromWorkspacePath, Pt as init_record, Rt as readIssueRecordForWorkspaceSync, T as init_tier_table, Vt as resolveProjectForIssue, Yn as listProjectsSync, ar as resolveProjectFromIssueSync, f as loadConfigSync, gn as isStatePlaneOnlyStatus, hn as init_state_plane, jt as getIssueRecordPathForWorkspace, t as init_config_yaml, zn as getProjectSync, zt as readIssueRecordSync } from "./config-yaml-CxdwhAIA.js";
2
+ import { a as updateIssueRecordForWorkspace, i as updateIssueRecord, r as init_record_update } from "./record-update-DaOKS7Wb.js";
3
+ import { A as listPaneValues, E as isPaneDead, H as sessionExists, M as listSessionNames, i as capturePane, w as init_tmux } from "./tmux-CfDHob9M.js";
4
+ import { C as setReviewStatusSync, d as getReviewStatusSync, p as init_review_status } from "./review-status-CGvlA4o_.js";
5
+ import { A as spawnTierSupervisor, D as init_tier_supervisor, Dt as getCachedMemoryVerdict, E as deliverCommitForReview, Hr as init_agent_runtime, I as init_slot_reconcile, Jt as init_spawn_prep, L as listSlotAssignments, M as broadcastCommit, N as init_tier_feed, O as loadPrdDraft, Ot as init_memory_verdict_cache, Qn as decideResumeGate, R as reconcileSlotState, St as releaseSwarmSlot, Tt as tryReserveSwarmSlot, Vr as getAgentRuntimeSnapshot, X as messageAgent, Y as init_messaging, bt as init_concurrency, dt as spawnRun, er as getAgentResumeGateBlockReason, ft as init_termination, gt as countRunningSwarmSlotsForIssue, in as resolveTier, ir as init_agent_state, j as supervisorAgentId, k as shouldSupervise, lt as init_spawn, pt as stopAgent, qt as defaultRunWorkspace, rn as init_resolve_tier, rr as getAgentStateSync, yt as getConcurrencyLimits } from "./queries-C-MUZaIy.js";
6
+ import { S as init_specs, d as readPlanSync, i as findPlanSync, n as applyStatusOverrides, o as init_io, v as init_types, x as findSpecByIssue, y as subItemsOf } from "./io-B00PBNku.js";
7
+ import { c as init_control_settings, d as isDeaconGloballyPausedSync } from "./control-settings-CiqGxXnc.js";
8
+ import { i as createActiveSlice, l as init_dag, n as blockingParentCount, o as getDispatchableItems } from "./dag-BtkgLeqY.js";
9
+ import { a as loadCloisterConfigSync, r as init_config } from "./config-Bi3u1VK7.js";
10
+ import { r as init_swarm_readiness, t as analyzeSwarmReadiness } from "./swarm-readiness-DfFxa9-n.js";
11
+ import { t as recordRecoveryFailure } from "./recovery-trip-DDH-02ng.js";
12
12
  import { join } from "node:path";
13
13
  import { Effect } from "effect";
14
14
  import { existsSync, readdirSync } from "fs";
@@ -488,7 +488,7 @@ async function defaultRequestIssueReview(issueId, workspacePath) {
488
488
  autoRequeueCount: 0,
489
489
  reviewRequestedAt: (/* @__PURE__ */ new Date()).toISOString()
490
490
  });
491
- const { spawnReviewRoleForIssue } = await import("./review-agent-DNboMyW4.js");
491
+ const { spawnReviewRoleForIssue } = await import("./review-agent-BTCNkq2h.js");
492
492
  return Effect.runPromise(spawnReviewRoleForIssue({
493
493
  issueId,
494
494
  workspace: workspacePath,
@@ -1369,7 +1369,8 @@ async function dispatchNextWave(issueId, workspacePath, doc, reconciled, readine
1369
1369
  workspace: workspacePath,
1370
1370
  slotIndex,
1371
1371
  slotItemId: item.id,
1372
- prompt: promptForDispatchItem(issueId, doc, item)
1372
+ prompt: promptForDispatchItem(issueId, doc, item),
1373
+ startedBy: "deacon:swarm-slot"
1373
1374
  });
1374
1375
  occupiedSlotIndexes.add(slotIndex);
1375
1376
  selectedItemIds.push(item.id);
@@ -1472,4 +1473,4 @@ function registeredSlotCapacityAvailable(issueId, selectedCount, liveSlotCount =
1472
1473
  //#endregion
1473
1474
  export { gcMergedSlots as _, getFailedMergeBlock as a, resolveSwarmPolicy as b, isSwarmAdvanceCoolingDown as c, recordStalledSlotRecovery as d, recordSwarmAdvanceFailure as f, decideAgentAutonomousRedrive as g, registeredSlotCapacityAvailable as h, dispatchNextWave as i, mergeReadySlots as l, recordSwarmFinalizedAt as m, classifyInFlightSlots as n, getFailedMergeBlocks as o, recordSwarmAdvanceSuccess as p, coordinateSwarmSlots as r, getSwarmFinalizedAt as s, allocateSlotIndex as t, recordFailedMergeBlock as u, gcOrphanedSlots as v, listFeatureWorkspaces as y };
1474
1475
 
1475
- //# sourceMappingURL=deacon-swarm-BXZZ1Z2-.js.map
1476
+ //# sourceMappingURL=deacon-swarm-v5PMun-m.js.map
package/server/deacon.js CHANGED
@@ -1,11 +1,11 @@
1
- import { Ut as init_auto_commit, Vt as flushAllPendingAutoCommits } from "./config-yaml-DySPNmKN.js";
2
- import { a as init_activity_logger, o as setActivityEventStoreProvider } from "./activity-logger-DDlOIAML.js";
3
- import { c as getReviewStatusSync, l as init_review_status } from "./review-status-kZj_KyCk.js";
4
- import { b as init_agents, qn as getAgentState } from "./queries-CjNIf-Ub.js";
5
- import { r as setCloisterEventStoreProvider, t as getCloisterService } from "./service-CLeAoU6G.js";
6
- import { i as ensureInternalTokenSync, s as init_internal_token, t as INTERNAL_TOKEN_HEADER } from "./internal-token-s0-oKybJ.js";
7
- import { F as setAgentStatusChangedNotifier, I as setAgentStoppedNotifier, L as setMergeReadyNotifier, M as resetPatrolHeartbeatForStartup, N as runPatrol } from "./deacon-CU_cAYSR.js";
8
- import { t as enrichReviewStatus } from "./review-status-enrichment-Dci-ZwEt.js";
1
+ import { ln as init_auto_commit, sn as flushAllPendingAutoCommits } from "./config-yaml-CxdwhAIA.js";
2
+ import { o as init_activity_logger, s as setActivityEventStoreProvider } from "./activity-logger-CyteR4JO.js";
3
+ import { d as getReviewStatusSync, p as init_review_status } from "./review-status-CGvlA4o_.js";
4
+ import { b as init_agents, tr as getAgentState } from "./queries-C-MUZaIy.js";
5
+ import { r as setCloisterEventStoreProvider, t as getCloisterService } from "./service-CD0DvFvD.js";
6
+ import { i as ensureInternalTokenSync, s as init_internal_token, t as INTERNAL_TOKEN_HEADER } from "./internal-token-DzK385vD.js";
7
+ import { F as setAgentStoppedNotifier, I as setMergeReadyNotifier, M as runPatrol, P as setAgentStatusChangedNotifier, j as resetPatrolHeartbeatForStartup } from "./deacon-pLRLbPvR.js";
8
+ import { t as emitReviewStatusChanged } from "./review-status-emit-DURrmGYX.js";
9
9
  import { Effect } from "effect";
10
10
  import { randomUUID } from "node:crypto";
11
11
  //#region ../../lib/cloister/deacon-event-client.ts
@@ -284,16 +284,11 @@ setAgentStatusChangedNotifier((state, previousStatus, hasLiveTmuxSession) => {
284
284
  setMergeReadyNotifier((issueId) => {
285
285
  const status = getReviewStatusSync(issueId);
286
286
  if (!status) return;
287
- (async () => {
288
- try {
289
- append(domainEvent("review.status_changed", {
290
- issueId,
291
- status: await Effect.runPromise(enrichReviewStatus(issueId, status))
292
- }));
293
- } catch (err) {
294
- console.error("[deacon-child] Failed to append merge-ready event:", err);
295
- }
296
- })();
287
+ try {
288
+ emitReviewStatusChanged((event) => append(event), issueId, status);
289
+ } catch (err) {
290
+ console.error("[deacon-child] Failed to append merge-ready event:", err);
291
+ }
297
292
  });
298
293
  process.on("message", (message) => {
299
294
  if (!message || typeof message !== "object") return;
@@ -320,7 +315,7 @@ async function shutdown(signal) {
320
315
  console.error("[deacon-child] Cloister stop failed:", err);
321
316
  }
322
317
  try {
323
- const { killAllGateProcessGroups } = await import("./validation-CC9OPqJZ.js");
318
+ const { killAllGateProcessGroups } = await import("./validation-hVOwQk8T.js");
324
319
  const reaped = killAllGateProcessGroups();
325
320
  if (reaped > 0) console.log(`[deacon-child] reaped ${reaped} in-flight gate process group(s)`);
326
321
  } catch (err) {
@@ -0,0 +1,13 @@
1
+ import { Gn as init_projects, ar as resolveProjectFromIssueSync } from "./config-yaml-CxdwhAIA.js";
2
+ import { t as recordRecoveryFailure } from "./recovery-trip-DDH-02ng.js";
3
+ //#region ../../lib/cloister/dead-end-trip.ts
4
+ init_projects();
5
+ async function recordDeadEndNeedsYou(issueId, recoveryPath, generation, message) {
6
+ const project = resolveProjectFromIssueSync(issueId);
7
+ if (!project) return void 0;
8
+ return (await recordRecoveryFailure(project.projectPath, issueId, recoveryPath, generation, 1)).emitNeedsYou ? message : void 0;
9
+ }
10
+ //#endregion
11
+ export { recordDeadEndNeedsYou as t };
12
+
13
+ //# sourceMappingURL=dead-end-trip-D8A3msX9.js.map
@@ -0,0 +1,3 @@
1
+ import { It as init_delivery, Mt as deliverAgentMessage } from "./queries-C-MUZaIy.js";
2
+ init_delivery();
3
+ export { deliverAgentMessage };
@@ -1,15 +1,18 @@
1
- import { Vr as init_paths, wr as OVERDECK_HOME } from "./config-yaml-DySPNmKN.js";
2
- import { n as init_build_info, t as getBuildInfo } from "./build-info-Ie_D0_BT.js";
3
- import { a as init_activity_logger, n as emitActivityEntrySync, r as emitActivityTtsSync } from "./activity-logger-DDlOIAML.js";
4
- import { a as loadCloisterConfigSync, r as init_config } from "./config-CKxYiCmX.js";
5
- import { i as init_staleness, r as computeBuildStaleness } from "./staleness-DPm7ClwA.js";
6
- import { n as init_deploy_window, t as getDeployBlockReason } from "./deploy-window-C3F-tihF.js";
1
+ import { Gr as OVERDECK_HOME, li as init_paths } from "./config-yaml-CxdwhAIA.js";
2
+ import { n as init_build_info, t as getBuildInfo } from "./build-info-7yiEpl6u.js";
3
+ import { i as emitActivityTtsSync, o as init_activity_logger, r as emitActivityEntrySync } from "./activity-logger-CyteR4JO.js";
4
+ import { a as loadCloisterConfigSync, r as init_config } from "./config-Bi3u1VK7.js";
5
+ import { i as init_staleness, r as computeBuildStaleness } from "./staleness-C-a5rBxF.js";
6
+ import { t as recordDeadEndNeedsYou } from "./dead-end-trip-D8A3msX9.js";
7
+ import { a as recordDeployIntent, i as readPendingDeploy, n as init_deploy_queue, r as markPendingDeployEscalated, t as clearPendingDeploy } from "./deploy-queue-VfohaPN_.js";
8
+ import { n as init_deploy_window, t as getDeployWindowAssessment } from "./deploy-window-D4DQb8VP.js";
7
9
  import { join } from "node:path";
8
10
  import { mkdir, open, writeFile } from "node:fs/promises";
9
11
  import { execFile, spawn } from "node:child_process";
10
12
  //#region ../../lib/cloister/deploy-patrol.ts
11
13
  init_activity_logger();
12
14
  init_build_info();
15
+ init_deploy_queue();
13
16
  init_deploy_window();
14
17
  init_staleness();
15
18
  init_paths();
@@ -26,6 +29,8 @@ const state = {
26
29
  lastDeferralReason: null,
27
30
  lastDeferralAt: 0,
28
31
  lastDeploySpawnAt: 0,
32
+ lastEscalationReason: null,
33
+ lastEscalationAt: 0,
29
34
  unknownObserved: false
30
35
  };
31
36
  function reloadEnvironment(request, env) {
@@ -180,6 +185,8 @@ function clearState() {
180
185
  state.lastDeferralReason = null;
181
186
  state.lastDeferralAt = 0;
182
187
  state.lastDeploySpawnAt = 0;
188
+ state.lastEscalationReason = null;
189
+ state.lastEscalationAt = 0;
183
190
  state.unknownObserved = false;
184
191
  }
185
192
  function emitDeferral(reason, now, emitEntry) {
@@ -192,6 +199,30 @@ function emitDeferral(reason, now, emitEntry) {
192
199
  state.lastDeferralReason = reason;
193
200
  state.lastDeferralAt = now;
194
201
  }
202
+ async function escalateOverdueQueue(queuedDeploy, blockReason, currentVerifyingIssues, context, now, emitEntry, emitTts) {
203
+ if (!queuedDeploy || queuedDeploy.escalated || now - Date.parse(queuedDeploy.requestedAt) <= context.config.queue_deadline_minutes * 6e4) return;
204
+ const ageMinutes = Math.floor((now - Date.parse(queuedDeploy.requestedAt)) / 6e4);
205
+ const message = `Queued dashboard deploy has waited ${ageMinutes} minutes; current block: ${blockReason} Stored verification blockers: ${queuedDeploy.blockedBy.length > 0 ? queuedDeploy.blockedBy.join(", ") : "none"}.`;
206
+ if (state.lastEscalationReason !== blockReason || now - state.lastEscalationAt >= OBSERVATION_INTERVAL_MS) {
207
+ emitEntry({
208
+ source: "deploy-script",
209
+ level: "error",
210
+ message
211
+ });
212
+ emitTts({
213
+ utterance: `Dashboard deploy has been queued for ${ageMinutes} minutes and needs attention.`,
214
+ priority: 1,
215
+ source: "deploy-script",
216
+ eventType: "deploy_queue_stuck"
217
+ });
218
+ state.lastEscalationReason = blockReason;
219
+ state.lastEscalationAt = now;
220
+ }
221
+ const currentVerifier = currentVerifyingIssues[0];
222
+ if (!currentVerifier) return;
223
+ await (context.recordNeedsYou ?? recordDeadEndNeedsYou)(currentVerifier, "deploy-queue", queuedDeploy.requestedAt, message);
224
+ await (context.markQueueEscalated ?? markPendingDeployEscalated)();
225
+ }
195
226
  async function runDeployPatrol(context) {
196
227
  const now = (context.now ?? Date.now)();
197
228
  const emitEntry = context.emitEntry ?? emitActivityEntrySync;
@@ -200,19 +231,23 @@ async function runDeployPatrol(context) {
200
231
  repoRoot: context.repoRoot,
201
232
  buildCommit: getBuildInfo().buildCommit
202
233
  })))();
234
+ const queuedDeploy = await (context.readQueue ?? readPendingDeploy)();
203
235
  if (staleness.status === "unknown") {
236
+ const reason = `Automatic deployment cannot compare the running build with origin/main: ${staleness.reason ?? "build staleness is unknown"}`;
204
237
  if (!state.unknownObserved) {
205
238
  emitEntry({
206
239
  source: "deploy-script",
207
240
  level: "warn",
208
- message: `Automatic deployment cannot compare the running build with origin/main: ${staleness.reason ?? "build staleness is unknown"}`
241
+ message: reason
209
242
  });
210
243
  state.unknownObserved = true;
211
244
  }
245
+ await escalateOverdueQueue(queuedDeploy, reason, [], context, now, emitEntry, emitTts);
212
246
  return;
213
247
  }
214
248
  if (staleness.status === "fresh") {
215
249
  clearState();
250
+ await (context.clearQueue ?? clearPendingDeploy)();
216
251
  return;
217
252
  }
218
253
  state.unknownObserved = false;
@@ -221,26 +256,42 @@ async function runDeployPatrol(context) {
221
256
  emitEntry({
222
257
  source: "deploy-script",
223
258
  level: "warn",
224
- message: `The running build ${shortSha(staleness.buildCommit)} is ${behind} build-input commit(s) behind origin/main ${shortSha(staleness.originMainSha)}. ${context.config.auto_deploy ? "Automatic deployment will start after the merge debounce and safety checks clear." : "Automatic deployment is disabled, so operator action is required."}`
259
+ message: `The running build ${shortSha(staleness.buildCommit)} is ${behind} build-input commit(s) behind origin/main ${shortSha(staleness.originMainSha)}. ${context.config.auto_deploy || queuedDeploy ? "Automatic deployment will start after the merge debounce and safety checks clear." : "Automatic deployment is disabled, so operator action is required."}`
225
260
  });
226
261
  state.lastObservedBehind = behind;
227
262
  state.lastObservationAt = now;
228
263
  }
229
- if (!context.config.auto_deploy) return;
230
- if (staleness.originMainLastBuildInputCommitAt !== null && now - staleness.originMainLastBuildInputCommitAt < context.config.debounce_minutes * 60 * 1e3) return;
231
- if (state.lastDeploySpawnAt > 0 && now - state.lastDeploySpawnAt < DEPLOY_SPAWN_COOLDOWN_MS) return;
264
+ if (!context.config.auto_deploy && !queuedDeploy) return;
265
+ if (staleness.originMainLastBuildInputCommitAt !== null && now - staleness.originMainLastBuildInputCommitAt < context.config.debounce_minutes * 60 * 1e3) {
266
+ await escalateOverdueQueue(queuedDeploy, "Automatic deployment deferred because the merge debounce has not elapsed.", [], context, now, emitEntry, emitTts);
267
+ return;
268
+ }
269
+ if (state.lastDeploySpawnAt > 0 && now - state.lastDeploySpawnAt < DEPLOY_SPAWN_COOLDOWN_MS) {
270
+ await escalateOverdueQueue(queuedDeploy, "Automatic deployment deferred because a recent deploy is still inside the spawn cooldown.", [], context, now, emitEntry, emitTts);
271
+ return;
272
+ }
232
273
  if (!staleness.originMainSha) {
233
- emitDeferral("Automatic deployment deferred because the origin/main commit is unknown.", now, emitEntry);
274
+ const reason = "Automatic deployment deferred because the origin/main commit is unknown.";
275
+ emitDeferral(reason, now, emitEntry);
276
+ await escalateOverdueQueue(queuedDeploy, reason, [], context, now, emitEntry, emitTts);
234
277
  return;
235
278
  }
236
279
  const ciState = await (context.getCiState ?? ((sha) => getDeployCiState(context.repoRoot, sha)))(staleness.originMainSha);
237
280
  if (ciState.status !== "green") {
238
- emitDeferral(ciState.reason ?? `Automatic deployment deferred because CI is ${ciState.status} for origin/main ${shortSha(staleness.originMainSha)}.`, now, emitEntry);
281
+ const reason = ciState.reason ?? `Automatic deployment deferred because CI is ${ciState.status} for origin/main ${shortSha(staleness.originMainSha)}.`;
282
+ emitDeferral(reason, now, emitEntry);
283
+ await escalateOverdueQueue(queuedDeploy, reason, [], context, now, emitEntry, emitTts);
239
284
  return;
240
285
  }
241
- const blockReason = await (context.getBlockReason ?? getDeployBlockReason)();
242
- if (blockReason) {
243
- emitDeferral(blockReason, now, emitEntry);
286
+ const assessment = await (context.getWindowAssessment ?? getDeployWindowAssessment)();
287
+ if (assessment.reason) {
288
+ emitDeferral(assessment.reason, now, emitEntry);
289
+ if (context.config.auto_deploy) await (context.recordIntent ?? recordDeployIntent)({
290
+ requestedBy: DEPLOY_PATROL_INITIATOR,
291
+ reason: assessment.reason,
292
+ blockedBy: assessment.verifyingIssues
293
+ });
294
+ await escalateOverdueQueue(queuedDeploy, assessment.reason, assessment.verifyingIssues, context, now, emitEntry, emitTts);
244
295
  return;
245
296
  }
246
297
  const reloadRequest = {
@@ -262,7 +313,7 @@ async function runDeployPatrol(context) {
262
313
  emitEntry({
263
314
  source: "deploy-script",
264
315
  level: "info",
265
- message: `Automatic deployment started for origin/main ${shortSha(staleness.originMainSha)}; the dashboard will rebuild and restart with a 120-second health timeout.`
316
+ message: `Automatic deployment started for origin/main ${shortSha(staleness.originMainSha)}; the dashboard will rebuild and restart with a 120-second health timeout.${queuedDeploy ? ` This was a queued deploy requested by ${queuedDeploy.requestedBy.join(", ")}.` : ""}`
266
317
  });
267
318
  emitTts({
268
319
  utterance: "Automatic dashboard deployment started.",
@@ -285,4 +336,4 @@ async function runScheduledDeployPatrol() {
285
336
  //#endregion
286
337
  export { runScheduledDeployPatrol };
287
338
 
288
- //# sourceMappingURL=deploy-patrol-AiFoP8dw.js.map
339
+ //# sourceMappingURL=deploy-patrol-sYgOxLeb.js.map
@@ -0,0 +1,169 @@
1
+ import { n as __esmMin } from "./rolldown-runtime-DNCzzKnI.js";
2
+ import { ci as getOverdeckHome, li as init_paths } from "./config-yaml-CxdwhAIA.js";
3
+ import { dirname, join } from "node:path";
4
+ import { mkdir, readFile, rename, rm, stat, writeFile } from "node:fs/promises";
5
+ //#region ../../lib/deploy/deploy-queue.ts
6
+ function pendingDeployPath(options = {}) {
7
+ return join(options.overdeckHome ?? getOverdeckHome(), "pending-deploy.json");
8
+ }
9
+ function pendingDeployLockPath(options = {}) {
10
+ return join(options.overdeckHome ?? getOverdeckHome(), "pending-deploy.lock");
11
+ }
12
+ function isStringArray(value) {
13
+ return Array.isArray(value) && value.every((entry) => typeof entry === "string");
14
+ }
15
+ function isPendingDeploy(value) {
16
+ if (!value || typeof value !== "object") return false;
17
+ const candidate = value;
18
+ return typeof candidate.requestedAt === "string" && isStringArray(candidate.requestedBy) && typeof candidate.lastReason === "string" && isStringArray(candidate.blockedBy) && Number.isInteger(candidate.deferralCount) && candidate.deferralCount >= 1 && typeof candidate.escalated === "boolean";
19
+ }
20
+ function sortedUnion(values) {
21
+ return [...new Set(values)].sort();
22
+ }
23
+ function isProcessDead(pid) {
24
+ if (!pid || pid <= 0 || pid === process.pid) return false;
25
+ try {
26
+ process.kill(pid, 0);
27
+ return false;
28
+ } catch (error) {
29
+ return error.code === "ESRCH";
30
+ }
31
+ }
32
+ async function removeStaleLock(lockPath) {
33
+ try {
34
+ const owner = JSON.parse(await readFile(join(lockPath, "owner.json"), "utf8"));
35
+ const acquiredAt = owner.acquiredAt ? Date.parse(owner.acquiredAt) : NaN;
36
+ if (!isProcessDead(owner.pid) && Number.isFinite(acquiredAt) && Date.now() - acquiredAt <= STALE_LOCK_MS) return false;
37
+ } catch {
38
+ try {
39
+ const lockStat = await stat(lockPath);
40
+ if (Date.now() - lockStat.mtimeMs <= STALE_LOCK_MS) return false;
41
+ } catch {
42
+ return true;
43
+ }
44
+ }
45
+ await rm(lockPath, {
46
+ recursive: true,
47
+ force: true
48
+ });
49
+ return true;
50
+ }
51
+ async function publishQueueLock(lockPath) {
52
+ lockPublicationId += 1;
53
+ const tempPath = `${lockPath}.${process.pid}.${Date.now()}.${lockPublicationId}.tmp`;
54
+ await mkdir(tempPath);
55
+ try {
56
+ await writeFile(join(tempPath, "owner.json"), JSON.stringify({
57
+ pid: process.pid,
58
+ acquiredAt: (/* @__PURE__ */ new Date()).toISOString()
59
+ }));
60
+ try {
61
+ await rename(tempPath, lockPath);
62
+ return true;
63
+ } catch (error) {
64
+ const code = error.code;
65
+ if (code === "EEXIST" || code === "ENOTEMPTY") return false;
66
+ throw error;
67
+ }
68
+ } finally {
69
+ await rm(tempPath, {
70
+ recursive: true,
71
+ force: true
72
+ });
73
+ }
74
+ }
75
+ async function acquireQueueLock(options) {
76
+ const path = pendingDeployPath(options);
77
+ const lockPath = pendingDeployLockPath(options);
78
+ await mkdir(dirname(path), { recursive: true });
79
+ for (let attempt = 0; attempt <= LOCK_RETRY_DELAYS_MS.length; attempt += 1) {
80
+ if (await publishQueueLock(lockPath)) return lockPath;
81
+ if (await removeStaleLock(lockPath)) continue;
82
+ const delay = LOCK_RETRY_DELAYS_MS[attempt];
83
+ if (delay === void 0) break;
84
+ await new Promise((resolve) => setTimeout(resolve, delay));
85
+ }
86
+ throw new Error(`Timed out waiting for deploy queue lock ${lockPath}`);
87
+ }
88
+ async function withQueueLock(options, operation) {
89
+ const lockPath = await acquireQueueLock(options);
90
+ try {
91
+ return await operation();
92
+ } finally {
93
+ await rm(lockPath, {
94
+ recursive: true,
95
+ force: true
96
+ });
97
+ }
98
+ }
99
+ async function writePendingDeploy(record, options = {}) {
100
+ const path = pendingDeployPath(options);
101
+ await mkdir(dirname(path), { recursive: true });
102
+ const temp = `${path}.${process.pid}.tmp`;
103
+ await writeFile(temp, `${JSON.stringify(record, null, 2)}\n`);
104
+ await rename(temp, path);
105
+ }
106
+ async function readPendingDeploy(options = {}) {
107
+ try {
108
+ const parsed = JSON.parse(await readFile(pendingDeployPath(options), "utf8"));
109
+ return isPendingDeploy(parsed) ? parsed : null;
110
+ } catch {
111
+ return null;
112
+ }
113
+ }
114
+ async function recordDeployIntent(intent, options = {}) {
115
+ return withQueueLock(options, async () => {
116
+ const existing = await readPendingDeploy(options);
117
+ const record = existing ? {
118
+ ...existing,
119
+ requestedBy: sortedUnion([...existing.requestedBy, intent.requestedBy]),
120
+ lastReason: intent.reason,
121
+ blockedBy: sortedUnion([...existing.blockedBy, ...intent.blockedBy]),
122
+ deferralCount: existing.deferralCount + 1
123
+ } : {
124
+ requestedAt: (/* @__PURE__ */ new Date()).toISOString(),
125
+ requestedBy: [intent.requestedBy],
126
+ lastReason: intent.reason,
127
+ blockedBy: sortedUnion(intent.blockedBy),
128
+ deferralCount: 1,
129
+ escalated: false
130
+ };
131
+ await writePendingDeploy(record, options);
132
+ return record;
133
+ });
134
+ }
135
+ async function clearPendingDeploy(options = {}) {
136
+ await withQueueLock(options, async () => {
137
+ await rm(pendingDeployPath(options), { force: true });
138
+ });
139
+ }
140
+ async function markPendingDeployEscalated(options = {}) {
141
+ await withQueueLock(options, async () => {
142
+ const existing = await readPendingDeploy(options);
143
+ if (!existing) return;
144
+ await writePendingDeploy({
145
+ ...existing,
146
+ escalated: true
147
+ }, options);
148
+ });
149
+ }
150
+ var LOCK_RETRY_DELAYS_MS, STALE_LOCK_MS, lockPublicationId;
151
+ var init_deploy_queue = __esmMin((() => {
152
+ init_paths();
153
+ LOCK_RETRY_DELAYS_MS = [
154
+ 5,
155
+ 10,
156
+ 20,
157
+ 40,
158
+ 80,
159
+ 160,
160
+ 320,
161
+ 360
162
+ ];
163
+ STALE_LOCK_MS = 3e4;
164
+ lockPublicationId = 0;
165
+ }));
166
+ //#endregion
167
+ export { recordDeployIntent as a, readPendingDeploy as i, init_deploy_queue as n, markPendingDeployEscalated as r, clearPendingDeploy as t };
168
+
169
+ //# sourceMappingURL=deploy-queue-VfohaPN_.js.map
@@ -0,0 +1,3 @@
1
+ import { a as recordDeployIntent, n as init_deploy_queue } from "./deploy-queue-VfohaPN_.js";
2
+ init_deploy_queue();
3
+ export { recordDeployIntent };
@@ -0,0 +1,3 @@
1
+ import { n as init_deploy_window, t as getDeployWindowAssessment } from "./deploy-window-D4DQb8VP.js";
2
+ init_deploy_window();
3
+ export { getDeployWindowAssessment };
@@ -1,9 +1,9 @@
1
1
  import { n as __esmMin } from "./rolldown-runtime-DNCzzKnI.js";
2
- import { Br as getOverdeckHome, Vr as init_paths } from "./config-yaml-DySPNmKN.js";
3
- import { H as sessionExists, w as init_tmux } from "./tmux-R7N7y-Mh.js";
4
- import { d as loadReviewStatuses, l as init_review_status } from "./review-status-kZj_KyCk.js";
5
- import { i as getFlywheelActiveRunId, s as init_control_settings } from "./control-settings-BQp7_4uD.js";
6
- import { n as readDevSupervisorMarker, t as init_dev_supervisor } from "./dev-supervisor-bcOWqdQE.js";
2
+ import { ci as getOverdeckHome, li as init_paths } from "./config-yaml-CxdwhAIA.js";
3
+ import { H as sessionExists, w as init_tmux } from "./tmux-CfDHob9M.js";
4
+ import { h as loadReviewStatuses, p as init_review_status } from "./review-status-CGvlA4o_.js";
5
+ import { c as init_control_settings, i as getFlywheelActiveRunId } from "./control-settings-CiqGxXnc.js";
6
+ import { n as readDevSupervisorMarker, t as init_dev_supervisor } from "./dev-supervisor-DiOBDM1c.js";
7
7
  import { join } from "node:path";
8
8
  import { Data, Effect } from "effect";
9
9
  import { access, open, readFile, unlink } from "node:fs/promises";
@@ -113,21 +113,45 @@ var init_restart_lock = __esmMin((() => {
113
113
  }));
114
114
  //#endregion
115
115
  //#region ../../lib/deploy/deploy-window.ts
116
- async function getDeployBlockReason(dependencies = {}) {
116
+ function listVerifyingIssues(loadStatuses = loadReviewStatuses) {
117
+ return Object.entries(loadStatuses()).filter(([, status]) => status.verificationStatus === "running" && status.mergeStatus !== "merged").map(([issueId]) => issueId).sort();
118
+ }
119
+ async function getDeployWindowAssessment(dependencies = {}) {
117
120
  const deps = {
118
121
  ...defaultDependencies,
119
122
  ...dependencies
120
123
  };
121
- const verifyingIssues = Object.entries(deps.loadReviewStatuses()).filter(([, status]) => status.verificationStatus === "running" && status.mergeStatus !== "merged").map(([issueId]) => issueId).sort();
122
- if (verifyingIssues.length > 0) return `Deployment deferred because verification is in flight for ${verifyingIssues.join(", ")}.`;
124
+ const verifyingIssues = listVerifyingIssues(deps.loadReviewStatuses);
125
+ if (verifyingIssues.length > 0) return {
126
+ reason: `Deployment deferred because verification is in flight for ${verifyingIssues.join(", ")}.`,
127
+ verifyingIssues
128
+ };
123
129
  const activeFlywheelRunId = deps.getFlywheelActiveRunId();
124
- if (activeFlywheelRunId) return `Deployment deferred because flywheel run ${activeFlywheelRunId} owns deployment.`;
125
- if (await deps.isMergeAgentRunning()) return "Deployment deferred because a merge specialist session is active.";
126
- if (await deps.pendingPostMergeExists()) return "Deployment deferred because the post-merge lifecycle is pending.";
130
+ if (activeFlywheelRunId) return {
131
+ reason: `Deployment deferred because flywheel run ${activeFlywheelRunId} owns deployment.`,
132
+ verifyingIssues
133
+ };
134
+ if (await deps.isMergeAgentRunning()) return {
135
+ reason: "Deployment deferred because a merge specialist session is active.",
136
+ verifyingIssues
137
+ };
138
+ if (await deps.pendingPostMergeExists()) return {
139
+ reason: "Deployment deferred because the post-merge lifecycle is pending.",
140
+ verifyingIssues
141
+ };
127
142
  const restartLock = await deps.readRestartLockHolder();
128
- if (restartLock) return `Deployment deferred because a restart is already in progress (pid ${restartLock.pid}, ${restartLock.caller}).`;
129
- if (deps.readDevSupervisorMarker()) return "Deployment deferred because a pan dev session owns the dashboard.";
130
- return null;
143
+ if (restartLock) return {
144
+ reason: `Deployment deferred because a restart is already in progress (pid ${restartLock.pid}, ${restartLock.caller}).`,
145
+ verifyingIssues
146
+ };
147
+ if (deps.readDevSupervisorMarker()) return {
148
+ reason: "Deployment deferred because a pan dev session owns the dashboard.",
149
+ verifyingIssues
150
+ };
151
+ return {
152
+ reason: null,
153
+ verifyingIssues
154
+ };
131
155
  }
132
156
  var defaultDependencies;
133
157
  var init_deploy_window = __esmMin((() => {
@@ -154,6 +178,6 @@ var init_deploy_window = __esmMin((() => {
154
178
  };
155
179
  }));
156
180
  //#endregion
157
- export { init_deploy_window as n, getDeployBlockReason as t };
181
+ export { init_deploy_window as n, listVerifyingIssues as r, getDeployWindowAssessment as t };
158
182
 
159
- //# sourceMappingURL=deploy-window-C3F-tihF.js.map
183
+ //# sourceMappingURL=deploy-window-D4DQb8VP.js.map
@@ -1,5 +1,5 @@
1
1
  import { n as __esmMin } from "./rolldown-runtime-DNCzzKnI.js";
2
- import { Br as getOverdeckHome, Vr as init_paths } from "./config-yaml-DySPNmKN.js";
2
+ import { ci as getOverdeckHome, li as init_paths } from "./config-yaml-CxdwhAIA.js";
3
3
  import { existsSync, readFileSync, unlinkSync } from "fs";
4
4
  import { join } from "path";
5
5
  //#region ../../lib/dev-supervisor.ts
@@ -71,4 +71,4 @@ var init_dev_supervisor = __esmMin((() => {
71
71
  //#endregion
72
72
  export { readDevSupervisorMarker as n, init_dev_supervisor as t };
73
73
 
74
- //# sourceMappingURL=dev-supervisor-bcOWqdQE.js.map
74
+ //# sourceMappingURL=dev-supervisor-DiOBDM1c.js.map
@@ -1,6 +1,6 @@
1
1
  import { n as __esmMin } from "./rolldown-runtime-DNCzzKnI.js";
2
- import { mr as init_errors } from "./config-yaml-DySPNmKN.js";
3
- import { n as init_workspace_config, r as replacePlaceholdersSync } from "./workspace-config-CIVWZOQr.js";
2
+ import { Fr as init_errors } from "./config-yaml-CxdwhAIA.js";
3
+ import { n as init_workspace_config, r as replacePlaceholdersSync } from "./workspace-config-BdZM4PvZ.js";
4
4
  import "effect";
5
5
  import { chmodSync, copyFileSync, existsSync, mkdirSync, readFileSync, readdirSync, symlinkSync, writeFileSync } from "fs";
6
6
  import { basename, dirname, join } from "path";
@@ -166,4 +166,4 @@ var init_devcontainer_renderer = __esmMin((() => {
166
166
  //#endregion
167
167
  export { renderDevcontainerSync as a, processTemplatesSync as i, createWorkspacePlaceholdersSync as n, sanitizeComposeFileSync as o, init_devcontainer_renderer as r, DEVCONTAINER_DIRNAME as t };
168
168
 
169
- //# sourceMappingURL=devcontainer-renderer-_d6XhyND.js.map
169
+ //# sourceMappingURL=devcontainer-renderer-BUOIlfgD.js.map
@@ -0,0 +1,3 @@
1
+ import { t as require_dist } from "./dist-C3A8B8wM.js";
2
+ export default require_dist();
3
+ export {};
@@ -1238,4 +1238,4 @@ var require_dist = /* @__PURE__ */ __commonJSMin(((exports) => {
1238
1238
  //#endregion
1239
1239
  export { require_dist$1 as n, require_src as r, require_dist as t };
1240
1240
 
1241
- //# sourceMappingURL=dist-Cb_0uvpS.js.map
1241
+ //# sourceMappingURL=dist-C3A8B8wM.js.map
@@ -2483,4 +2483,4 @@ var init_dist_src = __esmMin((() => {
2483
2483
  //#endregion
2484
2484
  export { init_dist_src as n, Octokit as t };
2485
2485
 
2486
- //# sourceMappingURL=dist-src-BSoS7mkd.js.map
2486
+ //# sourceMappingURL=dist-src-C0adpegX.js.map