@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,593 @@
1
+ import { n as __esmMin } from "./rolldown-runtime-DNCzzKnI.js";
2
+ import { Gn as init_projects, In as getIssuePrefix, Pt as init_record, Rt as readIssueRecordForWorkspaceSync, Yn as listProjectsSync } from "./config-yaml-CxdwhAIA.js";
3
+ import { n as resolveGitHubIssueSync, t as init_tracker_utils } from "./tracker-utils-CJ6BHjcD.js";
4
+ import { C as listSpecs, S as init_specs } from "./io-B00PBNku.js";
5
+ import { f as init_config, m as loadConfigSync } from "./config-BvLe652W.js";
6
+ import { r as init_factory, t as createTracker } from "./factory-Cmm9Hsho.js";
7
+ import { A as createSettledTtlPromiseCache, N as withConcurrencyLimitPromise, _ as listOpenIssuesWithLabelsPromise, f as init_github_app, h as listIssuesWithAnyLabelPromise, j as init_concurrency } from "./github-app-CmNk0zLU.js";
8
+ import { a as PARKED_LABEL, c as VETOED_LABEL, h as init_pickup, i as OBJECTION_LABEL, o as READY_LABEL, s as RELEASED_LABEL, t as BLOCKS_MAIN_LABEL } from "./pickup-DWhqzliO.js";
9
+ import { join, resolve } from "node:path";
10
+ import { Effect } from "effect";
11
+ import { realpath } from "node:fs/promises";
12
+ import { exec, execFile } from "node:child_process";
13
+ import { promisify } from "node:util";
14
+ //#region ../../lib/backlog/label-ops.ts
15
+ /**
16
+ * Add or remove a GitHub label on an issue. Non-GitHub issues are silently
17
+ * skipped; the `|| true` keeps a missing-label / already-applied no-op non-fatal.
18
+ */
19
+ async function editIssueLabel(issueId, op, label) {
20
+ const resolution = resolveGitHubIssueSync(issueId);
21
+ if (!resolution.isGitHub) return;
22
+ const { owner, repo, number } = resolution;
23
+ await execAsync$1(`gh issue edit ${number} --repo ${owner}/${repo} ${op === "add" ? "--add-label" : "--remove-label"} "${label}" 2>/dev/null || true`);
24
+ }
25
+ var execAsync$1, addIssueLabel, removeIssueLabel, applyIssueParkedLabel, removeIssueParkedLabel, applyIssueVetoedLabel, removeIssueVetoedLabel, applyIssueBlocksMainLabel, removeIssueBlocksMainLabel, applyIssueReadyLabel, removeIssueReadyLabel, applyIssueReleasedLabel, removeIssueReleasedLabel, applyIssueObjectionLabel, removeIssueObjectionLabel;
26
+ var init_label_ops = __esmMin((() => {
27
+ init_tracker_utils();
28
+ init_pickup();
29
+ execAsync$1 = promisify(exec);
30
+ addIssueLabel = (issueId, label) => editIssueLabel(issueId, "add", label);
31
+ removeIssueLabel = (issueId, label) => editIssueLabel(issueId, "remove", label);
32
+ applyIssueParkedLabel = (id) => addIssueLabel(id, PARKED_LABEL);
33
+ removeIssueParkedLabel = (id) => removeIssueLabel(id, PARKED_LABEL);
34
+ applyIssueVetoedLabel = (id) => addIssueLabel(id, VETOED_LABEL);
35
+ removeIssueVetoedLabel = (id) => removeIssueLabel(id, VETOED_LABEL);
36
+ applyIssueBlocksMainLabel = (id) => addIssueLabel(id, BLOCKS_MAIN_LABEL);
37
+ removeIssueBlocksMainLabel = (id) => removeIssueLabel(id, BLOCKS_MAIN_LABEL);
38
+ applyIssueReadyLabel = (id) => addIssueLabel(id, READY_LABEL);
39
+ removeIssueReadyLabel = (id) => removeIssueLabel(id, READY_LABEL);
40
+ applyIssueReleasedLabel = (id) => addIssueLabel(id, RELEASED_LABEL);
41
+ removeIssueReleasedLabel = (id) => removeIssueLabel(id, RELEASED_LABEL);
42
+ applyIssueObjectionLabel = (id) => addIssueLabel(id, OBJECTION_LABEL);
43
+ removeIssueObjectionLabel = (id) => removeIssueLabel(id, OBJECTION_LABEL);
44
+ }));
45
+ //#endregion
46
+ //#region ../../lib/cloister/label-reconciler.ts
47
+ function planLabelReconciliation(candidate) {
48
+ if (!(candidate.recordTerminal || candidate.issueClosed || candidate.mergedWithoutInflight)) return [];
49
+ const changes = STALE_PIPELINE_LABELS.filter((label) => candidate.labels.includes(label)).map((label) => ({
50
+ issueId: candidate.issueId,
51
+ op: "remove",
52
+ label
53
+ }));
54
+ if (!candidate.issueClosed && !candidate.closeOutComplete && !candidate.labels.includes("needs-close-out")) changes.push({
55
+ issueId: candidate.issueId,
56
+ op: "add",
57
+ label: "needs-close-out"
58
+ });
59
+ return changes;
60
+ }
61
+ async function reconcilePipelineLabels(candidates, options = {}, edit = (change) => change.op === "add" ? addIssueLabel(change.issueId, change.label) : removeIssueLabel(change.issueId, change.label)) {
62
+ const changes = candidates.slice(0, options.maxIssues ?? candidates.length).flatMap(planLabelReconciliation);
63
+ if (!options.dryRun) for (const change of changes) await edit(change);
64
+ return changes;
65
+ }
66
+ async function collectLabelReconcileCandidates() {
67
+ const candidates = [];
68
+ for (const { config } of listProjectsSync()) {
69
+ const prefix = getIssuePrefix(config);
70
+ if (!prefix || !config.path) continue;
71
+ const resolution = resolveGitHubIssueSync(`${prefix}-1`);
72
+ if (!resolution.isGitHub) continue;
73
+ const { stdout } = await execAsync(`gh issue list --repo ${resolution.owner}/${resolution.repo} --state all --limit 1000 --json number,state,labels`);
74
+ const rows = JSON.parse(stdout);
75
+ for (const row of rows) {
76
+ const issueId = `${prefix.toUpperCase()}-${row.number}`;
77
+ const labels = row.labels.map((label) => label.name);
78
+ const record = readIssueRecordForWorkspaceSync(config.path, issueId);
79
+ const closeOutComplete = Boolean(record?.closeOut?.closedAt);
80
+ const recordTerminal = closeOutComplete || record?.pipeline?.mergeStatus === "merged";
81
+ const mergedWithoutInflight = labels.includes("merged") && !labels.some((label) => [
82
+ "planning",
83
+ "in-progress",
84
+ "in-review",
85
+ "in-planning"
86
+ ].includes(label));
87
+ candidates.push({
88
+ issueId,
89
+ issueClosed: row.state.toLowerCase() === "closed",
90
+ labels,
91
+ recordTerminal,
92
+ mergedWithoutInflight,
93
+ closeOutComplete
94
+ });
95
+ }
96
+ }
97
+ return candidates;
98
+ }
99
+ async function reconcilePipelineLabelsPatrol() {
100
+ return (await reconcilePipelineLabels(await collectLabelReconcileCandidates(), { maxIssues: 20 })).map((change) => `[labels] ${change.op} ${change.label} on ${change.issueId}`);
101
+ }
102
+ var execAsync, STALE_PIPELINE_LABELS;
103
+ var init_label_reconciler = __esmMin((() => {
104
+ init_label_ops();
105
+ init_projects();
106
+ init_record();
107
+ init_tracker_utils();
108
+ execAsync = promisify(exec);
109
+ STALE_PIPELINE_LABELS = [
110
+ "verifying-on-main",
111
+ "planning",
112
+ "in-progress",
113
+ "in-review",
114
+ "in-planning"
115
+ ];
116
+ }));
117
+ //#endregion
118
+ //#region ../../lib/resource-utils.ts
119
+ function parseIssueIdFromTextSync(value) {
120
+ const match = value.match(/\b([A-Za-z]+-\d+|F\d+|US\d+|DE\d+|TA\d+|TC\d+)\b/i);
121
+ return match ? match[1].toUpperCase() : null;
122
+ }
123
+ var init_resource_utils = __esmMin((() => {}));
124
+ //#endregion
125
+ //#region ../../lib/pipeline-membership-gather.ts
126
+ function chunksOf(values) {
127
+ const chunks = [];
128
+ for (let index = 0; index < values.length; index += GRAPHQL_ALIAS_CHUNK_SIZE) chunks.push(values.slice(index, index + GRAPHQL_ALIAS_CHUNK_SIZE));
129
+ return chunks;
130
+ }
131
+ /** Share one short-lived repository PR snapshot across dashboard consumers. */
132
+ function listOpenPullRequestsSnapshot(owner, repo) {
133
+ return cachedOpenPullRequests(`${owner}/${repo}`.toLowerCase(), () => execFileAsync("gh", [
134
+ "api",
135
+ "--paginate",
136
+ "--slurp",
137
+ `repos/${owner}/${repo}/pulls?state=open&per_page=100`
138
+ ], {
139
+ encoding: "utf-8",
140
+ timeout: 3e4,
141
+ maxBuffer: 16 * 1024 * 1024
142
+ }).then(({ stdout }) => JSON.parse(stdout).flat().map((pr) => ({
143
+ number: pr.number,
144
+ title: pr.title,
145
+ url: pr.html_url,
146
+ state: pr.state,
147
+ isDraft: pr.draft ?? false,
148
+ headRefName: pr.head.ref,
149
+ headRepoFullName: pr.head.repo?.full_name ?? "",
150
+ baseRefName: pr.base.ref
151
+ }))));
152
+ }
153
+ async function runGitHubGraphql(query) {
154
+ try {
155
+ const { stdout } = await execFileAsync("gh", [
156
+ "api",
157
+ "graphql",
158
+ "-f",
159
+ `query=${query}`
160
+ ], {
161
+ encoding: "utf-8",
162
+ timeout: 3e4,
163
+ maxBuffer: 4 * 1024 * 1024
164
+ });
165
+ return stdout;
166
+ } catch (error) {
167
+ const stdout = error.stdout;
168
+ if (typeof stdout === "string" && stdout.length > 0) try {
169
+ const parsed = JSON.parse(stdout);
170
+ if (parsed.data !== void 0 && parsed.data !== null) return stdout;
171
+ } catch {}
172
+ throw error;
173
+ }
174
+ }
175
+ async function listMergedPullRequestHeadsBatched(owner, repo, heads, runGraphql = runGitHubGraphql) {
176
+ if (heads.length === 0) return [];
177
+ const mergedHeads = [];
178
+ for (const headChunk of chunksOf(heads)) {
179
+ const fields = headChunk.map((head, index) => `h${index}: pullRequests(states: MERGED, headRefName: ${JSON.stringify(head)}, first: 10) { nodes { headRepository { name owner { login } } } }`);
180
+ const query = `query { repository(owner: ${JSON.stringify(owner)}, name: ${JSON.stringify(repo)}) { ${fields.join(" ")} } }`;
181
+ const response = JSON.parse(await runGraphql(query));
182
+ const repository = response.data?.repository;
183
+ if (response.errors?.length || !repository) throw new Error("Incomplete merged-PR GraphQL response");
184
+ for (let index = 0; index < headChunk.length; index++) if (!Array.isArray(repository[`h${index}`]?.nodes)) throw new Error(`Missing merged-PR alias h${index}`);
185
+ const normalizedOwner = owner.toLowerCase();
186
+ const normalizedRepo = repo.toLowerCase();
187
+ mergedHeads.push(...headChunk.filter((_head, index) => repository[`h${index}`]?.nodes?.some((pr) => pr.headRepository?.name?.toLowerCase() === normalizedRepo && pr.headRepository.owner?.login?.toLowerCase() === normalizedOwner)));
188
+ }
189
+ return mergedHeads;
190
+ }
191
+ async function listIssueStatesBatched(owner, repo, numbers, runGraphql = runGitHubGraphql) {
192
+ if (numbers.length === 0) return [];
193
+ const states = [];
194
+ for (const numberChunk of chunksOf(numbers)) {
195
+ const fields = numberChunk.map((number, index) => `i${index}: issue(number: ${number}) { state }`);
196
+ const query = `query { repository(owner: ${JSON.stringify(owner)}, name: ${JSON.stringify(repo)}) { ${fields.join(" ")} } }`;
197
+ const repository = JSON.parse(await runGraphql(query)).data?.repository;
198
+ if (!repository) throw new Error("Incomplete issue-state GraphQL response");
199
+ for (let index = 0; index < numberChunk.length; index++) {
200
+ const alias = `i${index}`;
201
+ if (!Object.prototype.hasOwnProperty.call(repository, alias)) throw new Error(`Missing issue-state alias ${alias}`);
202
+ const state = repository[alias]?.state;
203
+ if (repository[alias] !== null && state !== "OPEN" && state !== "CLOSED") throw new Error(`Invalid issue-state alias ${alias}`);
204
+ }
205
+ states.push(...numberChunk.flatMap((number, index) => {
206
+ const row = repository[`i${index}`];
207
+ return row === null ? [] : [{
208
+ number,
209
+ state: row?.state === "OPEN" ? "open" : "closed"
210
+ }];
211
+ }));
212
+ }
213
+ return states;
214
+ }
215
+ function resolveProjectTrackerType(project) {
216
+ if (project.tracker) return project.tracker;
217
+ if (project.rally_project) return "rally";
218
+ if (project.github_repo) return "github";
219
+ if (getIssuePrefix(project)) return "linear";
220
+ if (project.gitlab_repo) return "gitlab";
221
+ throw new PipelineMembershipUnavailableError("tracker_unconfigured", `Cannot resolve tracker for ${project.name}`);
222
+ }
223
+ async function listProjectTrackerIssues(project) {
224
+ const issuePrefix = getIssuePrefix(project)?.toUpperCase();
225
+ if (!issuePrefix) throw new PipelineMembershipUnavailableError("missing_issue_prefix", `Missing issue_prefix for project ${project.name}`);
226
+ const trackerType = resolveProjectTrackerType(project);
227
+ const trackerConfig = loadConfigSync().trackers[trackerType];
228
+ const tracker = createTracker({
229
+ type: trackerType,
230
+ apiKeyEnv: trackerConfig && "api_key_env" in trackerConfig ? trackerConfig.api_key_env : void 0,
231
+ tokenEnv: trackerConfig && "token_env" in trackerConfig ? trackerConfig.token_env : void 0,
232
+ team: issuePrefix,
233
+ owner: project.github_repo?.split("/")[0],
234
+ repo: project.github_repo?.split("/")[1],
235
+ projectId: project.gitlab_repo,
236
+ server: trackerType === "rally" && trackerConfig && "server" in trackerConfig ? trackerConfig.server : void 0,
237
+ workspace: trackerType === "rally" && trackerConfig && "workspace" in trackerConfig ? trackerConfig.workspace : void 0,
238
+ project: project.rally_project
239
+ });
240
+ return (await Effect.runPromise(tracker.listIssues({
241
+ team: issuePrefix,
242
+ includeClosed: true
243
+ }))).flatMap((issue) => {
244
+ const issueId = issue.ref.toUpperCase();
245
+ if (!issueId.startsWith(`${issuePrefix}-`)) return [];
246
+ return [{
247
+ issueId,
248
+ state: issue.state === "closed" ? "closed" : "open",
249
+ labels: issue.labels
250
+ }];
251
+ });
252
+ }
253
+ async function withUnavailableReason(reason, operation) {
254
+ try {
255
+ return await operation();
256
+ } catch (error) {
257
+ if (error instanceof PipelineMembershipUnavailableError) throw error;
258
+ throw new PipelineMembershipUnavailableError(reason, error instanceof Error ? error.message : String(error));
259
+ }
260
+ }
261
+ function issueNumber(issueId) {
262
+ const match = issueId.match(/-(\d+)$/);
263
+ if (!match) throw new Error(`Cannot derive GitHub issue number from ${issueId}`);
264
+ return Number(match[1]);
265
+ }
266
+ function issueIdFromRef(ref, issuePrefix) {
267
+ if (!/(?:^|\/)(?:feature|strike)\//.test(ref)) return null;
268
+ const issueId = parseIssueIdFromTextSync(ref);
269
+ return issueId?.startsWith(`${issuePrefix}-`) ? issueId : null;
270
+ }
271
+ function projectRepositories(project) {
272
+ if (!project.workspace?.repos?.length) return [{
273
+ path: project.path,
274
+ defaultBranch: project.workspace?.default_branch ?? "main"
275
+ }];
276
+ return project.workspace.repos.map((repo) => ({
277
+ path: join(project.path, repo.path),
278
+ defaultBranch: repo.default_branch ?? project.workspace?.default_branch ?? "main"
279
+ }));
280
+ }
281
+ async function normalizeRepoPath(path) {
282
+ return realpath(path).catch(() => resolve(path));
283
+ }
284
+ async function hasGitRef(repoPath, branch, run) {
285
+ const ref = branch.startsWith("origin/") ? `refs/remotes/${branch}` : `refs/heads/${branch}`;
286
+ try {
287
+ await run("git", [
288
+ "rev-parse",
289
+ "--verify",
290
+ "--quiet",
291
+ ref
292
+ ], repoPath);
293
+ return true;
294
+ } catch {
295
+ return false;
296
+ }
297
+ }
298
+ async function resolveRepositoryDefaultBranch(repoPath, configured, run = defaultDeps.run) {
299
+ if (configured) {
300
+ if (await hasGitRef(repoPath, configured, run)) return configured;
301
+ if (await hasGitRef(repoPath, `origin/${configured}`, run)) return `origin/${configured}`;
302
+ }
303
+ for (const ref of ["refs/remotes/origin/HEAD", "HEAD"]) try {
304
+ const branch = (await run("git", [
305
+ "symbolic-ref",
306
+ "--quiet",
307
+ "--short",
308
+ ref
309
+ ], repoPath)).trim();
310
+ if (branch && await hasGitRef(repoPath, branch, run)) return branch;
311
+ } catch {}
312
+ for (const branch of [
313
+ "main",
314
+ "master",
315
+ "origin/main",
316
+ "origin/master"
317
+ ]) if (await hasGitRef(repoPath, branch, run)) return branch;
318
+ throw new PipelineMembershipUnavailableError("default_branch_unresolved", `Could not resolve default branch for repository ${repoPath} (configured: ${configured ?? "none"})`);
319
+ }
320
+ async function snapshotBranchRefs(repoPath, defaultBranch, refPatterns, run = defaultDeps.run) {
321
+ const unavailable = () => new PipelineMembershipUnavailableError("repo_unavailable", `Workspace repo path is not a git repository: ${repoPath}`);
322
+ let gitTopLevel;
323
+ try {
324
+ gitTopLevel = (await run("git", ["rev-parse", "--show-toplevel"], repoPath)).trim();
325
+ } catch (error) {
326
+ if (error instanceof PipelineMembershipUnavailableError) throw error;
327
+ throw unavailable();
328
+ }
329
+ const [normalizedRepoPath, normalizedGitTopLevel] = await Promise.all([normalizeRepoPath(repoPath), normalizeRepoPath(gitTopLevel)]);
330
+ if (normalizedRepoPath !== normalizedGitTopLevel) throw unavailable();
331
+ const resolvedDefaultBranch = await resolveRepositoryDefaultBranch(repoPath, defaultBranch, run);
332
+ const [refs, unmergedRefs, firstParentShas] = await Promise.all([
333
+ run("git", [
334
+ "for-each-ref",
335
+ "--format=%(objectname) %(refname:short)",
336
+ ...refPatterns
337
+ ], repoPath),
338
+ run("git", [
339
+ "for-each-ref",
340
+ `--no-merged=${resolvedDefaultBranch}`,
341
+ "--format=%(refname:short)",
342
+ ...refPatterns
343
+ ], repoPath),
344
+ run("git", [
345
+ "rev-list",
346
+ "--first-parent",
347
+ resolvedDefaultBranch
348
+ ], repoPath)
349
+ ]);
350
+ return {
351
+ refs,
352
+ unmergedRefs,
353
+ firstParentShas
354
+ };
355
+ }
356
+ function parseBranchRefLine(line) {
357
+ const spaceIdx = line.indexOf(" ");
358
+ return {
359
+ tipSha: spaceIdx === -1 ? null : line.slice(0, spaceIdx),
360
+ ref: spaceIdx === -1 ? line : line.slice(spaceIdx + 1)
361
+ };
362
+ }
363
+ function classifyBranchRefLine(line, unmergedSet, firstParentShas) {
364
+ const { tipSha, ref } = parseBranchRefLine(line);
365
+ if (unmergedSet.has(ref)) return "unmerged";
366
+ if (tipSha && !firstParentShas.has(tipSha)) return "merged-work";
367
+ return "pointer";
368
+ }
369
+ async function gatherIssueBranchContainment(project, issueId, run = defaultDeps.run) {
370
+ const normalizedIssueId = issueId.toLowerCase();
371
+ const refPatterns = [
372
+ `refs/heads/feature/${normalizedIssueId}`,
373
+ `refs/remotes/origin/feature/${normalizedIssueId}`,
374
+ `refs/heads/strike/${normalizedIssueId}`,
375
+ `refs/remotes/origin/strike/${normalizedIssueId}`
376
+ ];
377
+ const snapshots = await Promise.all(projectRepositories(project).map(async (repository) => ({
378
+ repository,
379
+ snapshot: await snapshotBranchRefs(repository.path, repository.defaultBranch, refPatterns, run)
380
+ })));
381
+ const result = {
382
+ unmergedRefs: [],
383
+ mergedWorkRefs: [],
384
+ pointerRefs: []
385
+ };
386
+ for (const { repository, snapshot } of snapshots) {
387
+ const unmergedSet = new Set(snapshot.unmergedRefs.split("\n").map((ref) => ref.trim()).filter(Boolean));
388
+ const firstParentShas = new Set(snapshot.firstParentShas.split("\n").map((sha) => sha.trim()).filter(Boolean));
389
+ const refLines = snapshot.refs.split("\n").map((line) => line.trim()).filter(Boolean);
390
+ for (const line of refLines) {
391
+ const { ref } = parseBranchRefLine(line);
392
+ const qualifiedRef = `${repository.path}:${ref}`;
393
+ switch (classifyBranchRefLine(line, unmergedSet, firstParentShas)) {
394
+ case "unmerged":
395
+ result.unmergedRefs.push(qualifiedRef);
396
+ break;
397
+ case "merged-work":
398
+ result.mergedWorkRefs.push(qualifiedRef);
399
+ break;
400
+ case "pointer":
401
+ result.pointerRefs.push(qualifiedRef);
402
+ break;
403
+ }
404
+ }
405
+ }
406
+ return result;
407
+ }
408
+ /** Gather all durable pipeline lenses for one project in batches. */
409
+ async function gatherProjectLensSignals(project, deps = defaultDeps) {
410
+ const issuePrefix = getIssuePrefix(project)?.toUpperCase();
411
+ if (!issuePrefix) throw new PipelineMembershipUnavailableError("missing_issue_prefix", `Missing issue_prefix for project ${project.name}`);
412
+ const githubRepository = project.github_repo?.split("/");
413
+ const owner = githubRepository?.[0];
414
+ const repo = githubRepository?.[1];
415
+ if (project.github_repo && (!owner || !repo)) throw new Error(`Invalid github_repo for ${project.name}: ${project.github_repo}`);
416
+ const repositories = projectRepositories(project);
417
+ const branchRefPatterns = [
418
+ "refs/heads/feature/*",
419
+ "refs/remotes/origin/feature/*",
420
+ "refs/heads/strike/*",
421
+ "refs/remotes/origin/strike/*"
422
+ ];
423
+ const branchSnapshots = repositories.map((repository) => snapshotBranchRefs(repository.path, repository.defaultBranch, branchRefPatterns, deps.run));
424
+ const [trackerIssues, openIssues, phaseLabeledIssues, openPrs, branches, specIssueIds] = await Promise.all([
425
+ project.github_repo ? Promise.resolve([]) : withUnavailableReason("forge_unavailable", () => deps.listTrackerIssues(project)),
426
+ owner && repo ? withUnavailableReason("forge_unavailable", () => deps.listOpenIssues(owner, repo)) : Promise.resolve([]),
427
+ owner && repo ? withUnavailableReason("forge_unavailable", () => deps.listPhaseLabeledIssues(owner, repo)) : Promise.resolve([]),
428
+ owner && repo ? withUnavailableReason("forge_unavailable", () => deps.listOpenPullRequests(owner, repo)) : Promise.resolve([]),
429
+ Promise.all(branchSnapshots),
430
+ withUnavailableReason("gather_failed", () => deps.listSpecIssueIds(project.path))
431
+ ]);
432
+ const candidates = /* @__PURE__ */ new Set();
433
+ const labelsByIssue = /* @__PURE__ */ new Map();
434
+ const knownStateByIssue = /* @__PURE__ */ new Map();
435
+ const openPrIssues = /* @__PURE__ */ new Set();
436
+ const mergedPrIssues = /* @__PURE__ */ new Set();
437
+ const headRefsByIssue = /* @__PURE__ */ new Map();
438
+ const branchIssues = /* @__PURE__ */ new Set();
439
+ const unmergedBranchIssues = /* @__PURE__ */ new Set();
440
+ const mergedBranchWorkIssues = /* @__PURE__ */ new Set();
441
+ const specIssues = new Set(specIssueIds.map((id) => id.toUpperCase()).filter((id) => id.startsWith(`${issuePrefix}-`)));
442
+ for (const issue of trackerIssues) {
443
+ const id = issue.issueId.toUpperCase();
444
+ if (!id.startsWith(`${issuePrefix}-`)) continue;
445
+ labelsByIssue.set(id, issue.labels);
446
+ knownStateByIssue.set(id, issue.state);
447
+ if (issue.state === "open" || STALE_PIPELINE_LABELS.some((label) => issue.labels.includes(label))) candidates.add(id);
448
+ }
449
+ for (const issue of openIssues) {
450
+ const id = `${issuePrefix}-${issue.number}`;
451
+ candidates.add(id);
452
+ labelsByIssue.set(id, issue.labels);
453
+ knownStateByIssue.set(id, "open");
454
+ }
455
+ for (const issue of phaseLabeledIssues) {
456
+ const id = `${issuePrefix}-${issue.number}`;
457
+ candidates.add(id);
458
+ labelsByIssue.set(id, issue.labels);
459
+ knownStateByIssue.set(id, issue.state);
460
+ }
461
+ for (const pr of openPrs) {
462
+ if (!owner || !repo || pr.headRepoFullName.toLowerCase() !== `${owner}/${repo}`.toLowerCase()) continue;
463
+ const id = issueIdFromRef(pr.headRefName, issuePrefix);
464
+ if (id) {
465
+ candidates.add(id);
466
+ openPrIssues.add(id);
467
+ headRefsByIssue.set(id, new Set([...headRefsByIssue.get(id) ?? [], pr.headRefName]));
468
+ }
469
+ }
470
+ for (const snapshot of branches) {
471
+ const refLines = snapshot.refs.split("\n").map((line) => line.trim()).filter(Boolean);
472
+ const unmerged = new Set(snapshot.unmergedRefs.split("\n").map((ref) => ref.trim()).filter(Boolean));
473
+ const firstParentShas = new Set(snapshot.firstParentShas.split("\n").map((sha) => sha.trim()).filter(Boolean));
474
+ for (const line of refLines) {
475
+ const { ref } = parseBranchRefLine(line);
476
+ const id = issueIdFromRef(ref, issuePrefix);
477
+ if (id) {
478
+ candidates.add(id);
479
+ branchIssues.add(id);
480
+ const headRef = ref.replace(/^origin\//, "");
481
+ headRefsByIssue.set(id, new Set([...headRefsByIssue.get(id) ?? [], headRef]));
482
+ const classification = classifyBranchRefLine(line, unmerged, firstParentShas);
483
+ if (classification === "unmerged") unmergedBranchIssues.add(id);
484
+ else if (classification === "merged-work") mergedBranchWorkIssues.add(id);
485
+ }
486
+ }
487
+ }
488
+ for (const id of specIssues) candidates.add(id);
489
+ if (owner && repo) {
490
+ const unknownIssueIds = [...candidates].filter((id) => !knownStateByIssue.has(id));
491
+ const issueStateCandidates = unknownIssueIds.filter((id) => openPrIssues.has(id) || branchIssues.has(id));
492
+ const issueStateCandidateSet = new Set(issueStateCandidates);
493
+ for (const id of unknownIssueIds) if (!issueStateCandidateSet.has(id)) candidates.delete(id);
494
+ const issueStates = issueStateCandidates.length > 0 ? await withUnavailableReason("forge_unavailable", () => deps.listIssueStates(owner, repo, issueStateCandidates.map(issueNumber))) : [];
495
+ const stateByNumber = new Map(issueStates.map((entry) => [entry.number, entry.state]));
496
+ for (const id of issueStateCandidates) {
497
+ const state = stateByNumber.get(issueNumber(id));
498
+ if (state) knownStateByIssue.set(id, state);
499
+ else candidates.delete(id);
500
+ }
501
+ const openCandidates = [...candidates].filter((id) => knownStateByIssue.get(id) === "open");
502
+ const candidateHeads = [...new Set(openCandidates.flatMap((id) => [
503
+ ...headRefsByIssue.get(id) ?? [],
504
+ `feature/${id.toLowerCase()}`,
505
+ `strike/${id.toLowerCase()}`
506
+ ]))];
507
+ const mergedHeads = new Set(await withUnavailableReason("forge_unavailable", () => deps.listMergedPullRequestHeads(owner, repo, candidateHeads)));
508
+ for (const id of openCandidates) if ([
509
+ ...headRefsByIssue.get(id) ?? [],
510
+ `feature/${id.toLowerCase()}`,
511
+ `strike/${id.toLowerCase()}`
512
+ ].some((head) => mergedHeads.has(head))) mergedPrIssues.add(id);
513
+ }
514
+ return [...candidates].sort().map((id) => ({
515
+ issueId: id,
516
+ issueOpen: knownStateByIssue.get(id) === "open",
517
+ hasOpenPr: openPrIssues.has(id),
518
+ hasMergedPr: mergedPrIssues.has(id),
519
+ hasConventionBranch: branchIssues.has(id),
520
+ branchUnmerged: unmergedBranchIssues.has(id),
521
+ hasMergedBranchWork: mergedBranchWorkIssues.has(id),
522
+ phaseLabel: STALE_PIPELINE_LABELS.find((label) => labelsByIssue.get(id)?.includes(label)) ?? null,
523
+ hasXbriefSpec: specIssues.has(id),
524
+ explicitlyReady: labelsByIssue.get(id)?.includes("ready") ?? false
525
+ }));
526
+ }
527
+ async function mapPipelineProjects(projects, operation) {
528
+ return withConcurrencyLimitPromise(projects.map((project) => async () => {
529
+ try {
530
+ return {
531
+ project,
532
+ value: await operation(project)
533
+ };
534
+ } catch (error) {
535
+ return {
536
+ project,
537
+ error
538
+ };
539
+ }
540
+ }), 3);
541
+ }
542
+ async function gatherProjectLensSignalsForProjects(projects, gather = gatherProjectLensSignals) {
543
+ return (await mapPipelineProjects(projects, gather)).map(({ project, value, error }) => ({
544
+ project,
545
+ signals: value,
546
+ error
547
+ }));
548
+ }
549
+ var execFileAsync, GRAPHQL_ALIAS_CHUNK_SIZE, cachedOpenPullRequests, PipelineMembershipUnavailableError, defaultDeps, PIPELINE_PROJECT_CONCURRENCY;
550
+ var init_pipeline_membership_gather = __esmMin((() => {
551
+ init_github_app();
552
+ init_concurrency();
553
+ init_label_reconciler();
554
+ init_config();
555
+ init_specs();
556
+ init_projects();
557
+ init_resource_utils();
558
+ init_factory();
559
+ execFileAsync = promisify(execFile);
560
+ GRAPHQL_ALIAS_CHUNK_SIZE = 50;
561
+ cachedOpenPullRequests = createSettledTtlPromiseCache(3e4);
562
+ PipelineMembershipUnavailableError = class extends Error {
563
+ reason;
564
+ constructor(reason, message) {
565
+ super(message);
566
+ this.name = "PipelineMembershipUnavailableError";
567
+ this.reason = reason;
568
+ }
569
+ };
570
+ defaultDeps = {
571
+ listOpenIssues: listOpenIssuesWithLabelsPromise,
572
+ listPhaseLabeledIssues: (owner, repo) => listIssuesWithAnyLabelPromise(owner, repo, STALE_PIPELINE_LABELS),
573
+ listOpenPullRequests: listOpenPullRequestsSnapshot,
574
+ listMergedPullRequestHeads: listMergedPullRequestHeadsBatched,
575
+ listIssueStates: listIssueStatesBatched,
576
+ listTrackerIssues: listProjectTrackerIssues,
577
+ listSpecIssueIds: async (projectPath) => (await Effect.runPromise(listSpecs(projectPath))).map((entry) => entry.issueId),
578
+ run: async (command, args, cwd) => {
579
+ const { stdout } = await execFileAsync(command, args, {
580
+ cwd,
581
+ encoding: "utf-8",
582
+ timeout: 15e3,
583
+ maxBuffer: 4 * 1024 * 1024
584
+ });
585
+ return stdout;
586
+ }
587
+ };
588
+ PIPELINE_PROJECT_CONCURRENCY = 3;
589
+ }));
590
+ //#endregion
591
+ export { removeIssueReleasedLabel as A, applyIssueReleasedLabel as C, removeIssueObjectionLabel as D, removeIssueBlocksMainLabel as E, removeIssueParkedLabel as O, applyIssueReadyLabel as S, init_label_ops as T, init_label_reconciler as _, gatherProjectLensSignals as a, applyIssueObjectionLabel as b, listIssueStatesBatched as c, mapPipelineProjects as d, projectRepositories as f, parseIssueIdFromTextSync as g, init_resource_utils as h, gatherIssueBranchContainment as i, removeIssueVetoedLabel as j, removeIssueReadyLabel as k, listMergedPullRequestHeadsBatched as l, snapshotBranchRefs as m, PipelineMembershipUnavailableError as n, gatherProjectLensSignalsForProjects as o, resolveRepositoryDefaultBranch as p, classifyBranchRefLine as r, init_pipeline_membership_gather as s, PIPELINE_PROJECT_CONCURRENCY as t, listOpenPullRequestsSnapshot as u, reconcilePipelineLabelsPatrol as v, applyIssueVetoedLabel as w, applyIssueParkedLabel as x, applyIssueBlocksMainLabel as y };
592
+
593
+ //# sourceMappingURL=pipeline-membership-gather-CeVGnNJ2.js.map
@@ -1,5 +1,5 @@
1
1
  import { n as __esmMin } from "./rolldown-runtime-DNCzzKnI.js";
2
- import { o as getInternalTokenSync, s as init_internal_token, t as INTERNAL_TOKEN_HEADER } from "./internal-token-s0-oKybJ.js";
2
+ import { o as getInternalTokenSync, s as init_internal_token, t as INTERNAL_TOKEN_HEADER } from "./internal-token-DzK385vD.js";
3
3
  import { Effect } from "effect";
4
4
  //#region ../../lib/pipeline-notifier.ts
5
5
  /**
@@ -60,4 +60,4 @@ var init_pipeline_notifier = __esmMin((() => {
60
60
  //#endregion
61
61
  export { setPipelineHandlerSync as a, setPipelineHandler as i, notifyPipeline as n, notifyPipelineSync as r, init_pipeline_notifier as t };
62
62
 
63
- //# sourceMappingURL=pipeline-notifier-BXkJzDC4.js.map
63
+ //# sourceMappingURL=pipeline-notifier-D0ALV6Nw.js.map
@@ -1,3 +1,3 @@
1
- import { a as setPipelineHandlerSync, i as setPipelineHandler, n as notifyPipeline, r as notifyPipelineSync, t as init_pipeline_notifier } from "./pipeline-notifier-BXkJzDC4.js";
1
+ import { a as setPipelineHandlerSync, i as setPipelineHandler, n as notifyPipeline, r as notifyPipelineSync, t as init_pipeline_notifier } from "./pipeline-notifier-D0ALV6Nw.js";
2
2
  init_pipeline_notifier();
3
3
  export { notifyPipeline, notifyPipelineSync, setPipelineHandler, setPipelineHandlerSync };
@@ -0,0 +1,50 @@
1
+ import { n as init_review_status_source, s as resolveCanonicalReviewStatus } from "./review-status-source-DIk1JSow.js";
2
+ //#region ../../lib/cloister/post-merge-lifecycle-worker.ts
3
+ init_review_status_source();
4
+ const queue = /* @__PURE__ */ new Map();
5
+ let workerPromise = null;
6
+ function nextEntry() {
7
+ return [...queue.values()].find((entry) => !entry.running) ?? null;
8
+ }
9
+ async function drainQueue() {
10
+ for (let entry = nextEntry(); entry; entry = nextEntry()) {
11
+ entry.running = true;
12
+ const status = resolveCanonicalReviewStatus(entry.issueId);
13
+ if (!status.available || status.status?.mergeStatus !== "merged" || status.status.mergeStep !== "post-merge-cleanup") {
14
+ queue.delete(entry.issueId);
15
+ continue;
16
+ }
17
+ try {
18
+ const { postMergeLifecycle } = await import("./merge-agent-DQTXZk8z.js");
19
+ await postMergeLifecycle(entry.issueId, entry.projectPath, entry.sourceBranch, { skipDeploy: true });
20
+ console.log(`[deacon] Completed pending post-merge lifecycle for ${entry.issueId}`);
21
+ } catch (error) {
22
+ console.warn(`[deacon] Pending post-merge lifecycle retry failed for ${entry.issueId}: ${error}`);
23
+ } finally {
24
+ queue.delete(entry.issueId);
25
+ }
26
+ }
27
+ }
28
+ function startWorker() {
29
+ if (workerPromise || !nextEntry()) return;
30
+ workerPromise = drainQueue().finally(() => {
31
+ workerPromise = null;
32
+ if (nextEntry()) startWorker();
33
+ });
34
+ }
35
+ function enqueuePostMergeLifecycle(issueId, projectPath, sourceBranch) {
36
+ const normalizedIssueId = issueId.trim().toUpperCase();
37
+ if (!normalizedIssueId || queue.has(normalizedIssueId)) return null;
38
+ queue.set(normalizedIssueId, {
39
+ issueId: normalizedIssueId,
40
+ projectPath,
41
+ sourceBranch,
42
+ running: false
43
+ });
44
+ startWorker();
45
+ return `Queued pending post-merge lifecycle for ${normalizedIssueId}`;
46
+ }
47
+ //#endregion
48
+ export { enqueuePostMergeLifecycle };
49
+
50
+ //# sourceMappingURL=post-merge-lifecycle-worker-8HIeS_J6.js.map
@@ -1,4 +1,4 @@
1
- import { Tn as init_projects, kn as listProjectsSync } from "./config-yaml-DySPNmKN.js";
1
+ import { Gn as init_projects, Yn as listProjectsSync } from "./config-yaml-CxdwhAIA.js";
2
2
  import { join } from "node:path";
3
3
  import { existsSync, readFileSync } from "node:fs";
4
4
  import { execFile } from "node:child_process";
@@ -159,4 +159,4 @@ async function fetchProjectReleaseStatus(projectKey, deps = {}) {
159
159
  //#endregion
160
160
  export { fetchProjectReleaseStatus };
161
161
 
162
- //# sourceMappingURL=project-pipelines-C0MWUeCU.js.map
162
+ //# sourceMappingURL=project-pipelines-9SKt2bEc.js.map