@overdeck/desktop 0.47.0 → 0.48.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 (444) hide show
  1. package/drizzle/overdeck/0000_overdeck_init.sql +59 -0
  2. package/package.json +1 -1
  3. package/server/{acceptance-criteria-10Ur5Dne.js → acceptance-criteria-DmtLDbtt.js} +2 -2
  4. package/server/{activity-logger-CyteR4JO.js → activity-logger-Co5qljIj.js} +55 -4
  5. package/server/activity-logger-K7FYGF_z.js +3 -0
  6. package/server/{advancing-selfheal-BNwqxseD.js → advancing-selfheal-8AR68Asf.js} +6 -6
  7. package/server/{agent-gc-C3h9Or3a.js → agent-gc-BmYeT6eH.js} +5 -5
  8. package/server/agent-state-Dq3s84-P.js +3 -0
  9. package/server/{agent-state-service-C63p_ftq.js → agent-state-service-DK1Vay1E.js} +1 -1
  10. package/server/{agent-state-service-Ds6OeFvo.js → agent-state-service-rjnzpHDx.js} +6 -6
  11. package/server/agent-state-source-Ds968-j6.js +21 -0
  12. package/server/{agents-J5mEnekq.js → agents-Dls7tfJH.js} +5 -5
  13. package/server/agents-IPSa5kzn.js +3 -0
  14. package/server/{archive-planning-BwhxeP7C.js → archive-planning-Cq7cyinS.js} +51 -24
  15. package/server/archive-planning-MbkGCBIY.js +2 -0
  16. package/server/{artifact-index-jobs-D1q_vR3V.js → artifact-index-jobs-Dj_8kpTd.js} +3 -3
  17. package/server/{assemble-Bgwqv-Ro.js → assemble-BTCmbcfH.js} +20 -13
  18. package/server/{auto-spawn-consent-CQ9Bi9q6.js → auto-spawn-consent-lXqRJ1Dr.js} +304 -121
  19. package/server/{backlog-auto-trigger-n1lzPgN4.js → backlog-auto-trigger-Dn-amzt6.js} +3 -3
  20. package/server/{behavior-td6-xhQk.js → behavior-DIMQMRzs.js} +2 -2
  21. package/server/{boot-reconciled-stop-events-C7gGe3oB.js → boot-reconciled-stop-events-D6SeUTIr.js} +1 -1
  22. package/server/{bridge-pool-patrol-CYH2OLb5.js → bridge-pool-patrol-BEjt-xF3.js} +2 -2
  23. package/server/{briefing-freshness-DRqZ8lAz.js → briefing-freshness-3PNmL_p3.js} +2 -2
  24. package/server/{build-info-7yiEpl6u.js → build-info-CJg813Hm.js} +3 -3
  25. package/server/{build-info-CpG__c63.js → build-info-CXyeFsXu.js} +1 -1
  26. package/server/{checkpoint-manager-CkKmB0wZ.js → checkpoint-manager-9t7G5c1V.js} +1 -1
  27. package/server/{checkpoint-manager-DBcyNR8w.js → checkpoint-manager-B2G38R3p.js} +3 -3
  28. package/server/checkpoint-worker.js +1 -1
  29. package/server/{checkpoints-Wm963lm8.js → checkpoints-CuBgiXO-.js} +1 -1
  30. package/server/{checkpoints-D95apurL.js → checkpoints-VTZMd4Qm.js} +2 -2
  31. package/server/{claude-hooks-provision-Bjitl9aI.js → claude-hooks-provision-55SyQaPz.js} +2 -2
  32. package/server/{claude-hooks-provision-4RPxNkE8.js → claude-hooks-provision-CEUT-CZd.js} +1 -1
  33. package/server/{claude-permissions-CpbpvUQ2.js → claude-permissions-Cn0dIu2i.js} +2 -2
  34. package/server/{claude-settings-overlay-BzkHYDwR.js → claude-settings-overlay-B19hdzSA.js} +1 -1
  35. package/server/{claude-settings-overlay-_H9Yrzab.js → claude-settings-overlay-Yg_ANh81.js} +2 -2
  36. package/server/{cli-Cte9ZFGn.js → cli-C9S84iTy.js} +79 -22
  37. package/server/cli-M1cwZ__d.js +3 -0
  38. package/server/{cliproxy-C5fMJ7rY.js → cliproxy-CJq3KXU6.js} +2 -2
  39. package/server/{cliproxy-DaAbWMjC.js → cliproxy-DgEZlr7Y.js} +1 -1
  40. package/server/{close-issue-BPh1ARCF.js → close-issue-DPxRddGR.js} +5 -5
  41. package/server/{closed-issue-reaper-DoOZqGFK.js → closed-issue-reaper-C5Zn4GRS.js} +13 -13
  42. package/server/{closed-issue-reaper-DHRfRMrp.js → closed-issue-reaper-D-2B48Ri.js} +1 -1
  43. package/server/{codex-o8FJwzmy.js → codex-B3n_rkwn.js} +1 -1
  44. package/server/{codex-BzGDW_d3.js → codex-CjkD1PJu.js} +6 -6
  45. package/server/{codex-parser-Dt-ycU8L.js → codex-parser-DpB1Il-P.js} +2 -2
  46. package/server/{compaction-continuation-CvXpbZ4w.js → compaction-continuation-DZD9ukSE.js} +3 -3
  47. package/server/{config-CL3Gyvja.js → config-C5saf4Ja.js} +1 -1
  48. package/server/{config-BvLe652W.js → config-DnLJATZk.js} +2 -2
  49. package/server/{config-Bi3u1VK7.js → config-DvM8jtQK.js} +2 -2
  50. package/server/{config-yaml-CxdwhAIA.js → config-yaml-BSCqwmX0.js} +11299 -10972
  51. package/server/{conflict-gate-CX80JYYS.js → conflict-gate-DXa_L28t.js} +1 -1
  52. package/server/{conflict-gate-E4nt7ZeS.js → conflict-gate-WfVqgalf.js} +4 -4
  53. package/server/{context-layers-DAG83UZt.js → context-layers-D7UqH9Ab.js} +2 -2
  54. package/server/{context-layers-C_IIysnm.js → context-layers-Dpz3Vd6d.js} +3 -3
  55. package/server/{control-settings-CiqGxXnc.js → control-settings-DVf6pKyv.js} +4 -4
  56. package/server/{conversation-compaction-BE3CNtHF.js → conversation-compaction-5XuH6OBn.js} +1 -1
  57. package/server/{conversation-compaction-D6-yLtqt.js → conversation-compaction-COrbnX1J.js} +8 -8
  58. package/server/{conversation-service-DBxoYMDl.js → conversation-service-BufdtnZF.js} +169 -10
  59. package/server/{conversation-service-D_TS2b1r.js → conversation-service-DnUyIiLb.js} +1 -1
  60. package/server/{conversations-D0UEdLtk.js → conversations-B4rxz-Wl.js} +17 -10
  61. package/server/{conversations-BKDVpB-3.js → conversations-D1bwxQMy.js} +1 -1
  62. package/server/{cost-DpgYmYqR.js → cost-CpFDrJUS.js} +46 -2
  63. package/server/{cost-DS1s0DbG.js → cost-KLuwKCW9.js} +3 -3
  64. package/server/{cost-sync-tOCCGnEt.js → cost-sync-cesi9dp8.js} +3 -3
  65. package/server/{dag-BtkgLeqY.js → dag-BYiFMqpU.js} +2 -2
  66. package/server/{dangerous-git-ops-CFLykHWt.js → dangerous-git-ops-BKvd3-Hk.js} +1 -1
  67. package/server/dashboard-db-worker.js +7 -7
  68. package/server/{deacon-BIblC-WX.js → deacon-BbsWw8a6.js} +3 -3
  69. package/server/{deacon-pLRLbPvR.js → deacon-HdEh0Esp.js} +863 -214
  70. package/server/deacon-event-client-C93rvOT7.js +237 -0
  71. package/server/deacon-event-client-Ck5Ei7Mn.js +3 -0
  72. package/server/{deacon-nudge-log-B08gF0mh.js → deacon-nudge-log-BND_97Wo.js} +4 -3
  73. package/server/{deacon-pending-lifecycle-B-Io84AP.js → deacon-pending-lifecycle-CD3YsiQK.js} +3 -3
  74. package/server/deacon-swarm-DgWADWd_.js +2 -0
  75. package/server/{deacon-swarm-v5PMun-m.js → deacon-swarm-rqrl4TMs.js} +39 -18
  76. package/server/deacon.js +12 -210
  77. package/server/{dead-end-trip-D8A3msX9.js → dead-end-trip-DSF23CLX.js} +4 -3
  78. package/server/dead-end-trip-zKlS4v6f.js +2 -0
  79. package/server/delivery-CsbQdZkS.js +3 -0
  80. package/server/{deploy-patrol-sYgOxLeb.js → deploy-patrol-kARAkji4.js} +17 -21
  81. package/server/{deploy-queue-VfohaPN_.js → deploy-queue-Bj0HJT1i.js} +2 -2
  82. package/server/{deploy-queue-gHJBycaF.js → deploy-queue-rjTUy1RM.js} +1 -1
  83. package/server/{deploy-window-D4DQb8VP.js → deploy-window-B2IM-9G5.js} +10 -44
  84. package/server/{deploy-window-CFRZ0-kt.js → deploy-window-BNFWnA8D.js} +1 -1
  85. package/server/{dev-supervisor-DiOBDM1c.js → dev-supervisor-B1mZYXz4.js} +2 -2
  86. package/server/{devcontainer-renderer-BUOIlfgD.js → devcontainer-renderer-B-o68Z5B.js} +3 -3
  87. package/server/{dist-C3A8B8wM.js → dist-3W--cGMa.js} +1 -1
  88. package/server/dist-BR0QtwmS.js +3 -0
  89. package/server/{dist-src-C0adpegX.js → dist-src-C-Vk2jNk.js} +1 -1
  90. package/server/{docker-Y3PElJb0.js → docker-DH3jUYg1.js} +1 -1
  91. package/server/{docker-BJzlkqYB.js → docker-meuLKLzV.js} +27 -20
  92. package/server/{dod-DlNtcH6n.js → dod-D7-9dCOD.js} +1 -1
  93. package/server/{driver-CKVGi51s.js → driver-CmsY2RLl.js} +1 -1
  94. package/server/{durable-review-pipeline-DP6bIcOY.js → durable-review-pipeline-CStTgOAf.js} +1 -1
  95. package/server/{durable-review-pipeline-Cibps-Rg.js → durable-review-pipeline-Chq0lzjL.js} +1 -1
  96. package/server/{ensure-devcontainer-DMAbWqtQ.js → ensure-devcontainer-BE3llBWP.js} +1 -1
  97. package/server/{ensure-devcontainer-BAofzBPv.js → ensure-devcontainer-BXrY7C2Z.js} +4 -4
  98. package/server/{esm-shims-BeObUkaw.js → esm-shims-Bzy4ZzNU.js} +1 -1
  99. package/server/event-store-COd2tOx8.js +3 -0
  100. package/server/{event-store-CrHcVC5_.js → event-store-D_AR-Y78.js} +184 -11
  101. package/server/{events-CF8QDbuV.js → events-CCkFWa7X.js} +1 -1
  102. package/server/{events-BNrvchBg.js → events-zjDQozet.js} +3 -3
  103. package/server/{factory-Cmm9Hsho.js → factory-DhavwKVc.js} +5 -5
  104. package/server/{feature-registry-population-B6HpNWRy.js → feature-registry-population-DWGBKyWd.js} +4 -4
  105. package/server/{feature-registry-storage-DJEFx1Pf.js → feature-registry-storage-C5DkXmCM.js} +3 -3
  106. package/server/{features-D5km80UI.js → features-CC47YcCX.js} +2 -2
  107. package/server/{feedback-target-BJ5ZADsu.js → feedback-target-D9Tex35_.js} +1 -1
  108. package/server/{feedback-target-DSxEL6lP.js → feedback-target-DoRCR3L-.js} +18 -7
  109. package/server/{feedback-writer-CoB9Z6aU.js → feedback-writer-CTSuA6lw.js} +1 -1
  110. package/server/{feedback-writer-C27Hak8a.js → feedback-writer-DdsBdtNL.js} +5 -5
  111. package/server/{flywheel-DZZdtiOL.js → flywheel-DHWHzaYK.js} +1 -1
  112. package/server/{flywheel-f662Q-y2.js → flywheel-DJQa9az8.js} +14 -14
  113. package/server/{flywheel-BHx8XuMr.js → flywheel-TacAI9MA.js} +21 -17
  114. package/server/{flywheel-merge-order-Dil0LmdN.js → flywheel-merge-order-D2foPh88.js} +1 -1
  115. package/server/{flywheel-merge-order-D_xLMbJU.js → flywheel-merge-order-DRtex2Dt.js} +7 -7
  116. package/server/forge-CdlCG9aS.js +3 -0
  117. package/server/{forge-BaKGCya6.js → forge-c8LeC-tw.js} +2 -2
  118. package/server/{from-B3tZbB55.js → from-BogSwvr2.js} +1 -1
  119. package/server/{fs-lock-Bre3sGoz.js → fs-lock-D_GeJtXl.js} +3 -3
  120. package/server/{fts-operations-B9jG8wa3.js → fts-operations-DP9R-8Q3.js} +3 -3
  121. package/server/{git-utils-Xg4PFN45.js → git-utils-C31x1lpE.js} +1 -1
  122. package/server/{git-utils-CsvYfJU3.js → git-utils-xQ74FoSn.js} +5 -4
  123. package/server/{github-app-Bmg4R9mv.js → github-app-CpQSDlv8.js} +1 -1
  124. package/server/{github-app-CmNk0zLU.js → github-app-D2QuvZ3j.js} +3 -3
  125. package/server/{github-client-qazkPrg0.js → github-client-D9YvJX5D.js} +3 -3
  126. package/server/{github-client-B6KM9_wA.js → github-client-Tpi3PmKX.js} +1 -1
  127. package/server/{github-pr-lookup-DAcVeRLK.js → github-pr-lookup-DvBMv-IW.js} +2 -2
  128. package/server/{harness-binary-BSpiXaLw.js → harness-binary-BHxWf_sX.js} +7 -6
  129. package/server/{harness-resolve-BAJu5MX8.js → harness-resolve-bj9WMABA.js} +4 -4
  130. package/server/{health-events-BwX32k8d.js → health-events-bCDPn59Z.js} +2 -2
  131. package/server/{health-events-2Z6Wa9SM.js → health-events-qo7Ss34U.js} +1 -1
  132. package/server/{hooks-DbtbimEf.js → hooks-Dyxtg5fk.js} +2 -2
  133. package/server/{hooks-D1g1jKLI.js → hooks-X2XHBB2b.js} +1 -1
  134. package/server/{hume-DXNiu6nQ.js → hume-DrZEGpqc.js} +2 -2
  135. package/server/hume-YPsy4UA8.js +3 -0
  136. package/server/{idle-stack-reaper-Cy-dQzW4.js → idle-stack-reaper-CJ1ygW0p.js} +37 -7
  137. package/server/{idle-stack-reaper-CRA1e0jr.js → idle-stack-reaper-uJGOb-vu.js} +1 -1
  138. package/server/{in-flight-guard-D-sSkADM.js → in-flight-guard-CG2Eo-rr.js} +1 -1
  139. package/server/{infra-BDQDRopn.js → infra-CTrmVqc_.js} +111 -6
  140. package/server/{injection-Bl8d_jHZ.js → injection-BisQ0lpX.js} +1 -1
  141. package/server/{injection-6AGnXxlj.js → injection-C9sxqbc2.js} +73 -193
  142. package/server/{inspect-agent-nXdIptyh.js → inspect-agent-BoSO51YC.js} +12 -12
  143. package/server/inspect-agent-BykeOH4a.js +2 -0
  144. package/server/{internal-token-DzK385vD.js → internal-token-AvXePaQT.js} +2 -2
  145. package/server/{internal-token-Ias7N8Kg.js → internal-token-Djkj-yqK.js} +1 -1
  146. package/server/{io-B00PBNku.js → io-mxOWMZ7I.js} +6 -6
  147. package/server/{issue-closed-BehTG1be.js → issue-closed-Bj_bCv_0.js} +7 -7
  148. package/server/{issue-lifecycle-BqSuQvbn.js → issue-lifecycle-A5YIpDZE.js} +1 -1
  149. package/server/{issue-lifecycle-Birk-ifu.js → issue-lifecycle-BXUqaHzF.js} +32 -28
  150. package/server/{issue-service-singleton-C6ZduvuY.js → issue-service-singleton-BPNEXczv.js} +11 -11
  151. package/server/{issue-service-singleton-B2wXiIlw.js → issue-service-singleton-CcaHjKPR.js} +1 -1
  152. package/server/{issues-DQ5-LatB.js → issues-AX-YBeAQ.js} +2 -2
  153. package/server/{jsonl-parser-BDpnGFCl.js → jsonl-parser-CgYWQ20q.js} +7 -3
  154. package/server/kimi-code-BYbme0aV.js +579 -0
  155. package/server/kimi-code-D_Ppt82c.js +3 -0
  156. package/server/kimi-parser-B-JBg3Pv.js +147 -0
  157. package/server/{label-cleanup-Dwnky8FG.js → label-cleanup-sXUlgdM0.js} +3 -3
  158. package/server/{lifecycle-B4Xdb4cY.js → lifecycle-D2X3al0D.js} +2 -2
  159. package/server/{lifecycle-B3s4sM1G.js → lifecycle-DjlljAZ1.js} +6 -6
  160. package/server/{lifecycle-io-CzTHEooc.js → lifecycle-io-C5nVk55o.js} +1 -1
  161. package/server/{lifecycle-io-DCo6s6ks.js → lifecycle-io-NPm1YtIG.js} +5 -5
  162. package/server/{linear-client-CnbtHiic.js → linear-client--luYwCZg.js} +1 -1
  163. package/server/{linear-client-9uq7fhiV.js → linear-client-B8pLegW1.js} +3 -3
  164. package/server/{linear-mcp-auth-BxUOzswy.js → linear-mcp-auth-BQVWV0I3.js} +6 -6
  165. package/server/{linear-mcp-auth-D46fBCLf.js → linear-mcp-auth-Dx81Zl4G.js} +1 -1
  166. package/server/memory-fts-worker.js +1 -1
  167. package/server/{merge-DiW9RdSB.js → merge-Bx5Bh9pi.js} +3 -3
  168. package/server/{merge-sr8Nrnmi.js → merge-Dqmh_zja.js} +1 -1
  169. package/server/{merge-agent-BLUgRsz3.js → merge-agent-DP9AUY29.js} +33 -33
  170. package/server/{merge-agent-DQTXZk8z.js → merge-agent-DWd0KfiS.js} +1 -1
  171. package/server/{merge-batch-Cp_j9BGk.js → merge-batch-BdmvTEAC.js} +1 -1
  172. package/server/{merge-completeness-BLbB5-6n.js → merge-completeness-BfRwFjRx.js} +1 -1
  173. package/server/{merge-completeness-B46KqhtY.js → merge-completeness-C1FevcDT.js} +4 -4
  174. package/server/merge-ops-B98tKc1e.js +2 -0
  175. package/server/merge-rebase-BLykMwPO.js +2 -0
  176. package/server/{merge-rebase-DIkBjgwq.js → merge-rebase-BX1xKsrE.js} +2 -2
  177. package/server/{merge-set-CBgHfwM0.js → merge-set-DsLjjLEV.js} +4 -4
  178. package/server/{merge-set-DeUxFsC3.js → merge-set-H6epHOsw.js} +1 -1
  179. package/server/{merge-sync-kr4vqyjM.js → merge-sync-BEdfsQV4.js} +2 -2
  180. package/server/{merge-sync-CpGmk6Ch.js → merge-sync-BebcWWGA.js} +1 -1
  181. package/server/{merge-train-Dmrcus12.js → merge-train-D1I0lNOT.js} +4 -4
  182. package/server/{merge-train-deps-D_uGX91G.js → merge-train-deps-D_-C0Pk2.js} +4 -4
  183. package/server/{merge-verification-NvaAd8CZ.js → merge-verification-DN1Ov9bU.js} +6 -6
  184. package/server/{merged-docker-cleanup-worker-Y1R06TEl.js → merged-docker-cleanup-worker-CfXSr2pA.js} +4 -4
  185. package/server/{merged-docker-cleanup-worker-DH_hrGPI.js → merged-docker-cleanup-worker-ybsPyHjB.js} +1 -1
  186. package/server/{multipart-parser-R-oC8dQg.js → multipart-parser-CL5QG8iv.js} +2 -2
  187. package/server/{no-resume-mode-BgD0JUmM.js → no-resume-mode-DUR7Hi98.js} +1 -1
  188. package/server/node_modules/.package-lock.json +7 -7
  189. package/server/node_modules/brace-expansion/README.md +23 -1
  190. package/server/node_modules/brace-expansion/index.js +206 -85
  191. package/server/node_modules/brace-expansion/package.json +1 -1
  192. package/server/node_modules/msgpackr/dist/index-no-eval.cjs +34 -28
  193. package/server/node_modules/msgpackr/dist/index-no-eval.cjs.map +1 -1
  194. package/server/node_modules/msgpackr/dist/index-no-eval.min.js +1 -1
  195. package/server/node_modules/msgpackr/dist/index-no-eval.min.js.map +1 -1
  196. package/server/node_modules/msgpackr/dist/index.js +34 -28
  197. package/server/node_modules/msgpackr/dist/index.js.map +1 -1
  198. package/server/node_modules/msgpackr/dist/index.min.js +1 -1
  199. package/server/node_modules/msgpackr/dist/index.min.js.map +1 -1
  200. package/server/node_modules/msgpackr/dist/node.cjs +36 -29
  201. package/server/node_modules/msgpackr/dist/node.cjs.map +1 -1
  202. package/server/node_modules/msgpackr/dist/test.js +63 -32
  203. package/server/node_modules/msgpackr/dist/test.js.map +1 -1
  204. package/server/node_modules/msgpackr/dist/unpack-no-eval.cjs +34 -28
  205. package/server/node_modules/msgpackr/dist/unpack-no-eval.cjs.map +1 -1
  206. package/server/node_modules/msgpackr/package.json +1 -1
  207. package/server/node_modules/msgpackr/unpack.js +34 -28
  208. package/server/{orphan-proposed-reconciler-DcgTPPFY.js → orphan-proposed-reconciler-CEW1maPl.js} +1 -1
  209. package/server/{orphan-proposed-reconciler-B6vJHxtX.js → orphan-proposed-reconciler-DfqHZftT.js} +23 -22
  210. package/server/package-lock.json +8 -8
  211. package/server/package.json +1 -1
  212. package/server/{pan-dir-DMzF5wne.js → pan-dir-DhgKfO86.js} +21 -6
  213. package/server/{paths-sJBSb7Ul.js → paths-BUuhi6jM.js} +17 -17
  214. package/server/{pending-lifecycle-claim-DilzGfgk.js → pending-lifecycle-claim-DJlA1rTR.js} +2 -2
  215. package/server/{persistent-logger-H_VjuOu7.js → persistent-logger-s8cbpFNV.js} +2 -2
  216. package/server/{pickup-DWhqzliO.js → pickup-2AxtB3dW.js} +1 -1
  217. package/server/{pipeline-membership-C88VBnhJ.js → pipeline-membership-2_okL5bm.js} +1 -1
  218. package/server/{pipeline-membership-D9SBvItj.js → pipeline-membership-Dqv6_0ig.js} +1 -1
  219. package/server/{pipeline-membership-gather-4eR-7Tqy.js → pipeline-membership-gather-4F1-tXKI.js} +1 -1
  220. package/server/{pipeline-membership-gather-CeVGnNJ2.js → pipeline-membership-gather-CtJ_7aGf.js} +149 -17
  221. package/server/{pipeline-notifier-DT6xLFao.js → pipeline-notifier-CO9rxJgB.js} +1 -1
  222. package/server/{pipeline-notifier-D0ALV6Nw.js → pipeline-notifier-DDfVBJhJ.js} +2 -2
  223. package/server/{post-merge-lifecycle-worker-8HIeS_J6.js → post-merge-lifecycle-worker-DmSOkeNp.js} +3 -3
  224. package/server/{project-pipelines-9SKt2bEc.js → project-pipelines-72WE8GVK.js} +2 -2
  225. package/server/{project-repos-B5pIphKg.js → project-repos-BAqDwtvi.js} +16 -11
  226. package/server/project-repos-Df90Zw7Y.js +3 -0
  227. package/server/projects-WqMWCdpa.js +3 -0
  228. package/server/{prompts-CgzMBvQF.js → prompts-XkL10m8M.js} +2 -2
  229. package/server/{providers-BJQSnAAp.js → providers-ClGPGkQ8.js} +15 -12
  230. package/server/providers-DFUOed8u.js +3 -0
  231. package/server/public/assets/{chunk-BO2N2NFS-D_pGACYN.js → chunk-BO2N2NFS-CeQUdPxr.js} +4 -4
  232. package/server/public/assets/{diagram-OG6HWLK6-BO6fe3hH.js → diagram-OG6HWLK6-B7rgk4yT.js} +1 -1
  233. package/server/public/assets/{dist-5zingMiA.js → dist-2RPazfXY.js} +3 -3
  234. package/server/public/assets/{dist-CVxhbI2E.js → dist-B9NInrVZ.js} +1 -1
  235. package/server/public/assets/{ganttDiagram-6RSMTGT7-Bgj4A7kp.js → ganttDiagram-6RSMTGT7-Bxp0gV14.js} +1 -1
  236. package/server/public/assets/{highlighted-body-OFNGDK62-DNPK7_cm.js → highlighted-body-OFNGDK62-CzoRTVlC.js} +1 -1
  237. package/server/public/assets/index-Cml-kHo6.css +1 -0
  238. package/server/public/assets/{index-DEpY-D1O.js → index-CvN8cEgs.js} +216 -215
  239. package/server/public/assets/{linear-BB0jQT16.js → linear-CFEEl3ND.js} +1 -1
  240. package/server/public/assets/mermaid-GHXKKRXX-CpV7nCBM.js +1 -0
  241. package/server/public/assets/{pieDiagram-4H26LBE5-DeGIzzpZ.js → pieDiagram-4H26LBE5-BeR8R0cr.js} +1 -1
  242. package/server/public/assets/{prod-XBLvikex.js → prod-CYjzjCrn.js} +4 -4
  243. package/server/public/assets/{quadrantDiagram-W4KKPZXB-BV9SLeWz.js → quadrantDiagram-W4KKPZXB-BpcTkFuW.js} +1 -1
  244. package/server/public/assets/{sankeyDiagram-5OEKKPKP-Dwja0gj8.js → sankeyDiagram-5OEKKPKP-Bx2ETEV5.js} +1 -1
  245. package/server/public/assets/{xychartDiagram-2RQKCTM6-DCB4qvfw.js → xychartDiagram-2RQKCTM6-BKgEAFaj.js} +1 -1
  246. package/server/public/index.html +2 -2
  247. package/server/{pull-requests-7BgLDsIo.js → pull-requests-B-KrUph5.js} +3 -3
  248. package/server/{pull-requests-Dq0y6IxE.js → pull-requests-DK5k92B4.js} +1 -1
  249. package/server/{queries-C-MUZaIy.js → queries-DVpl1vsU.js} +1212 -193
  250. package/server/{rally-CPysR4T_.js → rally-DbE561hD.js} +3 -3
  251. package/server/rally-O_st_X7n.js +3 -0
  252. package/server/{rally-api-8Ptlp2os.js → rally-api-CZLeEd2C.js} +2 -2
  253. package/server/{rally-api-CgosKdKL.js → rally-api-DaHtn5QN.js} +1 -1
  254. package/server/{rally-client-CCX0hADj.js → rally-client-C-MAl8ur.js} +1 -1
  255. package/server/{rally-client-iYMHWQD7.js → rally-client-Ch3zRsBX.js} +5 -5
  256. package/server/{reap-terminal-sessions-Qf-9LVQc.js → reap-terminal-sessions-C1n0ALRb.js} +2 -2
  257. package/server/{reap-terminal-sessions-4Xg9NGA8.js → reap-terminal-sessions-DegFS2p1.js} +2 -2
  258. package/server/{rebuild-stack-CMdgaylx.js → rebuild-stack-C9Li44A3.js} +20 -10
  259. package/server/{rebuild-stack-DqcOVmJO.js → rebuild-stack-qC0jCNm6.js} +2 -2
  260. package/server/{reconstruct-cache-CMZJ_Vjq.js → reconstruct-cache-BHyiAg02.js} +7 -7
  261. package/server/record-aVzu-LGm.js +3 -0
  262. package/server/record-update-CZh46a2f.js +617 -0
  263. package/server/{record-update-DhI7eySG.js → record-update-DtdJK2Iw.js} +1 -1
  264. package/server/recovery-trip-CSNWSLDn.js +77 -0
  265. package/server/recovery-trip-_16hFKv4.js +3 -0
  266. package/server/{release-engine-B2X9AfFC.js → release-engine-Be5MX5GP.js} +5 -5
  267. package/server/{release-set-G4XKyQ8K.js → release-set-DJv_O6PS.js} +3 -3
  268. package/server/{remote-BXarMvqf.js → remote-BMM3uH2J.js} +3 -3
  269. package/server/{remote-CUhyqjXk.js → remote-C0xVTHA5.js} +3 -3
  270. package/server/{remote-agents-CLZB3Coc.js → remote-agents-BIIoc5pD.js} +1 -1
  271. package/server/{remote-agents-Bba-MgSA.js → remote-agents-EUiZ26bj.js} +7 -7
  272. package/server/{remote-completion-CwAp79EC.js → remote-completion-BS4tJUn8.js} +13 -13
  273. package/server/resolver-BvHd6RE4.js +163 -0
  274. package/server/resume-9thEqAQR.js +3 -0
  275. package/server/{review-agent--pOptAEV.js → review-agent-BHGaBoBu.js} +29 -29
  276. package/server/{review-agent-BTCNkq2h.js → review-agent-CD3RQ-tc.js} +1 -1
  277. package/server/{review-artifacts-BNmw8dWE.js → review-artifacts-DyhajWso.js} +6 -6
  278. package/server/{review-context-DFxYOOJW.js → review-context-B-dlsPnx.js} +9 -9
  279. package/server/{review-convoy-liveness-BgU_1jJf.js → review-convoy-liveness-D7M-s_nS.js} +2 -2
  280. package/server/{review-status-Dma9SFaN.js → review-status-B6wYcOtP.js} +1 -1
  281. package/server/{review-status-CGvlA4o_.js → review-status-CKLk5aZ-.js} +308 -58
  282. package/server/{review-status-emit-DURrmGYX.js → review-status-emit-CJ7UmEVU.js} +3 -3
  283. package/server/{review-status-enrichment-8NiNXi5W.js → review-status-enrichment-DJRgGX7-.js} +3 -3
  284. package/server/review-status-limits-4EJDCGHO.js +7 -0
  285. package/server/{review-status-source-DIk1JSow.js → review-status-source-7nU3Z2wL.js} +1 -1
  286. package/server/{review-status-source-BLx_1siH.js → review-status-source-BsDYGfyv.js} +1 -1
  287. package/server/{review-status-sync-muT-EBp2.js → review-status-sync-BLssMTEW.js} +1 -1
  288. package/server/{review-status-sync-0GxOqeqF.js → review-status-sync-BxBeHRde.js} +35 -11
  289. package/server/{review-verdict-feedback-xJNdqBnX.js → review-verdict-feedback-5jWuzgpc.js} +90 -16
  290. package/server/{review-verdict-feedback-HwF6ODFy.js → review-verdict-feedback-HRY9P4bN.js} +1 -1
  291. package/server/{rollup-BQaol5TX.js → rollup-BGIrCEkU.js} +79 -44
  292. package/server/rollup-CZB4UL9q.js +3 -0
  293. package/server/{scanner-C-D2cFdX.js → scanner-DydjXPrz.js} +16 -9
  294. package/server/search-DdtIjAiu.js +395 -0
  295. package/server/{sequence-io-Bmf1EZM5.js → sequence-io-Fw-cLyDs.js} +4 -4
  296. package/server/{sequencer-agent-CigMyKh2.js → sequencer-agent-BcpGMt5x.js} +15 -10
  297. package/server/server.js +1258 -438
  298. package/server/{service-CD0DvFvD.js → service-BFFkGsG4.js} +58 -58
  299. package/server/{session-fork-B6cQ5eya.js → session-fork-D0V-3e5P.js} +2 -2
  300. package/server/{session-history-3ON_IJjm.js → session-history-Bta5l9jY.js} +5 -5
  301. package/server/{settings-PilbFZAM.js → settings-Ce8B1daF.js} +2 -2
  302. package/server/{settings-VN0qOh4U.js → settings-E3FnEIUx.js} +3 -3
  303. package/server/settings-eOOJpxi_.js +2 -0
  304. package/server/{shadow-engineering-DXvx77oE.js → shadow-engineering-Mt9nJO4i.js} +3 -3
  305. package/server/{shadow-state-CZBp7pwq.js → shadow-state-Bzj_AZCV.js} +1 -1
  306. package/server/{shadow-state-BBk_zacw.js → shadow-state-DrkhoVSx.js} +2 -2
  307. package/server/{shadow-utils-DdZ05AJS.js → shadow-utils-H1GfqP06.js} +2 -2
  308. package/server/{ship-log-7kJfjUX2.js → ship-log-CFUIo4PR.js} +1 -1
  309. package/server/{smart-compaction-8fA5k5XN.js → smart-compaction-DSTq-Wua.js} +1 -1
  310. package/server/{smart-compaction-ByhL9cRS.js → smart-compaction-Hzp3KCJX.js} +7 -7
  311. package/server/{spawn-planning-session-vLUJoFjy.js → spawn-planning-session-C0uSA2SL.js} +2 -2
  312. package/server/{spawn-planning-session-pcF-YeFE.js → spawn-planning-session-DN4son31.js} +23 -21
  313. package/server/{specialist-completion-B07XjWD2.js → specialist-completion-Cf6tpIh1.js} +1 -1
  314. package/server/{specialist-context-DJ-zFyL3.js → specialist-context-DEUEkjIQ.js} +5 -5
  315. package/server/{specialist-handoff-logger-aKSxbIgD.js → specialist-handoff-logger-D_LmQDj3.js} +2 -2
  316. package/server/{specialist-logs-Dae-n52_.js → specialist-logs-7Ynue0R7.js} +3 -3
  317. package/server/{specialists-KR3pKulN.js → specialists-CQwBEGlD.js} +1 -1
  318. package/server/{specialists-6PWdtWcg.js → specialists-DAjPgYs_.js} +504 -238
  319. package/server/{specialists-DUiExaxb.js → specialists-Hr6iW9fU.js} +18 -18
  320. package/server/{specialists-Bz-wFT7R.js → specialists-MOoeB4A8.js} +1 -1
  321. package/server/specs-Dl88cbKY.js +3 -0
  322. package/server/{src-B948bGVR.js → src-BYdwL_n-.js} +668 -64
  323. package/server/{src-vHy2-oCv.js → src-DQnkPN2i.js} +3 -3
  324. package/server/{src-rac0Mepv.js → src-DhfDV0o4.js} +6 -6
  325. package/server/{stack-health-DqLTiEu4.js → stack-health-D_iKwNRg.js} +107 -16
  326. package/server/stack-health-deVSdDwn.js +3 -0
  327. package/server/{stale-task-claims-Cab_Fo_Z.js → stale-task-claims-BYJGqhLI.js} +5 -5
  328. package/server/{staleness-CGTZyp6V.js → staleness-CopBDKnA.js} +1 -1
  329. package/server/{staleness-C-a5rBxF.js → staleness-D8WeMUHd.js} +1 -1
  330. package/server/{state-home-722Dkx92.js → state-home-DjN8qduI.js} +24 -3
  331. package/server/{state-mapping-CybR81Uf.js → state-mapping-DlM7OYRW.js} +1 -1
  332. package/server/{state-migrate-2u8wIpoL.js → state-migrate-a2p1gtD7.js} +4 -4
  333. package/server/state-mirror-Cv_XgvT5.js +121 -0
  334. package/server/{stuck-remediation-r1TJu68G.js → stuck-remediation-CXJX_kki.js} +1 -1
  335. package/server/{stuck-remediation-CC6q3eqQ.js → stuck-remediation-CbCRSz1v.js} +31 -732
  336. package/server/{substrate-bug-weights-service-CzIyyWFT.js → substrate-bug-weights-service-DxpopNd9.js} +3 -3
  337. package/server/{summary-fork-BqgmgPDt.js → summary-fork-B61fjRJn.js} +2 -2
  338. package/server/{summary-fork-Df2WFijM.js → summary-fork-B9pszUJN.js} +91 -10
  339. package/server/supervisor/{injection-budget-Cg_KIb3o.js → injection-budget-Ar7hgyJq.js} +1 -1
  340. package/server/supervisor/pty-supervisor.js +12 -3
  341. package/server/supervisor/{pty-token-BbjwEUUM.js → pty-token-CXCFU0Z8.js} +1 -1
  342. package/server/{supervisor-BxqSpjcN.js → supervisor-BvnxbuuF.js} +6 -4
  343. package/server/supervisor-C69kpqvd.js +2 -0
  344. package/server/{swarm-readiness-DfFxa9-n.js → swarm-readiness-vTw1kqGa.js} +3 -3
  345. package/server/{system-prerequisites-ICLSkhhZ.js → system-prerequisites-LLzTEqsK.js} +3 -3
  346. package/server/{teardown-workspace-DRdi_CPa.js → teardown-workspace-CqKKVJr1.js} +15 -15
  347. package/server/{test-agent-queue-A_-p-i0I.js → test-agent-queue-CWMq7oyG.js} +8 -7
  348. package/server/{test-verdict-BHgTAwIG.js → test-verdict-NdtgRBuA.js} +1 -1
  349. package/server/{test-verdict-C4i9aqEP.js → test-verdict-diIWE6hz.js} +15 -3
  350. package/server/{tldr-daemon-CvWXBhX1.js → tldr-daemon-B1Jhrtc8.js} +1 -1
  351. package/server/{tldr-daemon-wvsU6bKv.js → tldr-daemon-Bpls1CJB.js} +2 -2
  352. package/server/{tmux-CfDHob9M.js → tmux-CImZaX4q.js} +10 -16
  353. package/server/tmux-Cjpx8L8u.js +4 -0
  354. package/server/{token-DrxwytsZ.js → token-Bgpjo3tE.js} +2 -2
  355. package/server/token-util-BsjFll-k.js +3 -0
  356. package/server/{token-util-B48BlCba.js → token-util-BymbpkJp.js} +1 -1
  357. package/server/{tracker-config-BcPMElRB.js → tracker-config-4DaKVTfc.js} +2 -2
  358. package/server/{tracker-utils-CJ6BHjcD.js → tracker-utils-BDeAXC-q.js} +2 -2
  359. package/server/{traefik-connect-DZ6nMYMj.js → traefik-connect-CC5FyxYj.js} +1 -1
  360. package/server/{tunnel-Bp-dRHZz.js → tunnel-CDWkeceJ.js} +1 -1
  361. package/server/{tunnel-DUbUPElU.js → tunnel-CPf5M-Pc.js} +3 -3
  362. package/server/{typed-errors-DyjseiB6.js → typed-errors-9K7Dq_Vn.js} +1 -1
  363. package/server/{typed-errors-CKeoDdU3.js → typed-errors-DrS5fb5z.js} +1 -1
  364. package/server/{types-Cm5ASJbq.js → types-DzlUKiuf.js} +4 -3
  365. package/server/{types-Di8wdakq.js → types-kI9ik8XO.js} +1 -1
  366. package/server/{uat-promote-verification-CoJuh7XO.js → uat-promote-verification-c_pxoxEc.js} +5 -5
  367. package/server/{uat-train-4Q0k06CQ.js → uat-train-CWGxBdJO.js} +0 -0
  368. package/server/{uat-train-Dewoatps.js → uat-train-CfCYd2ve.js} +1 -1
  369. package/server/{validate-B0C8p66t.js → validate-f3ItVCfm.js} +3 -3
  370. package/server/{validation-hVOwQk8T.js → validation-5G_wQtea.js} +1 -1
  371. package/server/{validation-B_kIRfNe.js → validation-7tSiCM82.js} +4 -4
  372. package/server/{verification-artifact-BxlxTiYK.js → verification-artifact-9h9dH8uX.js} +1 -1
  373. package/server/{verification-artifact-D70AtckY.js → verification-artifact-C_4WJnf6.js} +1 -1
  374. package/server/{verification-runner-Bc3cJvpC.js → verification-runner-BV5F6wrA.js} +1 -1
  375. package/server/{verification-runner-KZTz6u72.js → verification-runner-D58KmBhK.js} +18 -38
  376. package/server/{vtt-parser-CE_i3Bcw.js → vtt-parser-2iT9OHa9.js} +1 -1
  377. package/server/{work-agent-prompt-ByrPAzOy.js → work-agent-prompt-D03s4DD1.js} +9 -9
  378. package/server/{workflows-D0vP1WrK.js → workflows-BMBwLYPV.js} +281 -98
  379. package/server/workflows-BOmWGpIh.js +2 -0
  380. package/server/{workspace-DQkRPLlQ.js → workspace-BgflNCH0.js} +3 -3
  381. package/server/{workspace-COWvdibH.js → workspace-Cn9ywfSW.js} +1 -1
  382. package/server/{workspace-anchor-drift-pwz23TI1.js → workspace-anchor-drift-C8Fy3shi.js} +1 -1
  383. package/server/{workspace-anchor-drift-DXYIAHzr.js → workspace-anchor-drift-CMiNncwq.js} +5 -8
  384. package/server/{workspace-config-BdZM4PvZ.js → workspace-config-aUc2nIz6.js} +1 -1
  385. package/server/{workspace-manager-BPgTrG66.js → workspace-manager-Bem7ZBs9.js} +521 -292
  386. package/server/workspace-manager-C0CpNh3t.js +3 -0
  387. package/server/{workspace-metadata-CdjzAP8x.js → workspace-metadata-C5iSlPRo.js} +1 -1
  388. package/server/{workspace-metadata-DkO_iTLo.js → workspace-metadata-UKmTYmDQ.js} +2 -2
  389. package/server/{workspaces-CRBJikLp.js → workspaces-DqxgwDZ8.js} +143 -113
  390. package/sync-sources/hooks/notification-hook +12 -1
  391. package/sync-sources/hooks/pan-hook-lib.sh +226 -0
  392. package/sync-sources/hooks/session-start-hook +31 -4
  393. package/sync-sources/hooks/work-agent-stop-hook +23 -1
  394. package/sync-sources/skills/pan-memory/SKILL.md +19 -3
  395. package/sync-sources/skills/pan-projects/SKILL.md +9 -0
  396. package/sync-sources/skills/pan-restart/SKILL.md +26 -7
  397. package/sync-sources/skills/pan-workspace/SKILL.md +77 -0
  398. package/server/activity-logger-CMthG6Vd.js +0 -3
  399. package/server/agent-state-CYXJVG72.js +0 -3
  400. package/server/agents-ePFVoZbu.js +0 -3
  401. package/server/archive-planning-B2XplFzT.js +0 -2
  402. package/server/cli-CjOCSnfj.js +0 -3
  403. package/server/deacon-swarm-B1XkIvfr.js +0 -2
  404. package/server/delivery-BX9HR4wQ.js +0 -3
  405. package/server/dist-B3YPQa5A.js +0 -3
  406. package/server/event-store-5UKzh9Jf.js +0 -3
  407. package/server/forge-B5o319qI.js +0 -3
  408. package/server/fts-db-IVc4_M3f.js +0 -146
  409. package/server/hume-VUCNbTgn.js +0 -3
  410. package/server/inspect-agent-CUwVmr2h.js +0 -2
  411. package/server/merge-ops-1abz6O_P.js +0 -2
  412. package/server/merge-rebase-CJJVAJuz.js +0 -2
  413. package/server/node_modules/brace-expansion/.tap/coverage/8b906b8c-e21f-40b5-8c0d-214d8c2682c5.json +0 -757
  414. package/server/node_modules/brace-expansion/.tap/processinfo/8b906b8c-e21f-40b5-8c0d-214d8c2682c5.json +0 -719
  415. package/server/node_modules/brace-expansion/ADVISORY-CVE-2026-14257.md +0 -107
  416. package/server/node_modules/brace-expansion/dist/commonjs/index.d.ts +0 -8
  417. package/server/node_modules/brace-expansion/dist/commonjs/index.d.ts.map +0 -1
  418. package/server/node_modules/brace-expansion/dist/commonjs/index.js +0 -263
  419. package/server/node_modules/brace-expansion/dist/commonjs/index.js.map +0 -1
  420. package/server/node_modules/brace-expansion/dist/commonjs/package.json +0 -3
  421. package/server/node_modules/brace-expansion/dist/esm/index.d.ts +0 -8
  422. package/server/node_modules/brace-expansion/dist/esm/index.d.ts.map +0 -1
  423. package/server/node_modules/brace-expansion/dist/esm/index.js +0 -259
  424. package/server/node_modules/brace-expansion/dist/esm/index.js.map +0 -1
  425. package/server/node_modules/brace-expansion/dist/esm/package.json +0 -3
  426. package/server/project-repos-DPjOdfPa.js +0 -3
  427. package/server/projects-_n3Zui6K.js +0 -3
  428. package/server/providers-BI1mOBQ4.js +0 -3
  429. package/server/public/assets/index-Ddkcz3WT.css +0 -1
  430. package/server/public/assets/mermaid-GHXKKRXX-BzPfaQJ1.js +0 -1
  431. package/server/rally-D_VW4bJv.js +0 -3
  432. package/server/record-BTwWhtBb.js +0 -3
  433. package/server/record-update-DaOKS7Wb.js +0 -277
  434. package/server/recovery-trip-DDH-02ng.js +0 -44
  435. package/server/resume-mOREjlYu.js +0 -3
  436. package/server/rollup-BR4t_wck.js +0 -3
  437. package/server/settings-CVmWiJ-r.js +0 -2
  438. package/server/specs--enInima.js +0 -3
  439. package/server/stack-health-BikqHSjn.js +0 -3
  440. package/server/supervisor-B4anCCSm.js +0 -2
  441. package/server/tmux-Ctk6RV5l.js +0 -3
  442. package/server/token-util-D411CAq9.js +0 -3
  443. package/server/workflows-DtDX08ed.js +0 -2
  444. package/server/workspace-manager-C1F3XsnS.js +0 -3
@@ -1,2 +1,2 @@
1
- import { n as handleOrphanProposedSpec } from "./orphan-proposed-reconciler-B6vJHxtX.js";
1
+ import { n as handleOrphanProposedSpec } from "./orphan-proposed-reconciler-DfqHZftT.js";
2
2
  export { handleOrphanProposedSpec };
@@ -1,23 +1,23 @@
1
1
  import { a as __toCommonJS } from "./rolldown-runtime-DNCzzKnI.js";
2
- import { Gn as init_projects, Jn as listProjects, ar as resolveProjectFromIssueSync } from "./config-yaml-CxdwhAIA.js";
3
- import { o as init_activity_logger, r as emitActivityEntrySync } from "./activity-logger-CyteR4JO.js";
4
- import { M as listSessionNames, w as init_tmux } from "./tmux-CfDHob9M.js";
5
- import { d as getReviewStatusSync, p as init_review_status } from "./review-status-CGvlA4o_.js";
6
- import { b as init_agents, tr as getAgentState } from "./queries-C-MUZaIy.js";
7
- import { n as resolveGitHubIssueSync, t as init_tracker_utils } from "./tracker-utils-CJ6BHjcD.js";
8
- import { n as init_issue_service_singleton, r as issue_service_singleton_exports } from "./issue-service-singleton-C6ZduvuY.js";
9
- import { o as getInternalTokenSync, s as init_internal_token, t as INTERNAL_TOKEN_HEADER } from "./internal-token-DzK385vD.js";
10
- import { o as init_lifecycle, s as isXBriefFilename } from "./lifecycle-B4Xdb4cY.js";
11
- import { S as init_specs, d as readPlanSync, i as findPlanSync, o as init_io, x as findSpecByIssue } from "./io-B00PBNku.js";
12
- import { a as readAutoSpawnOnFinalizeFlagAsync } from "./auto-spawn-consent-CQ9Bi9q6.js";
13
- import { c as init_control_settings, f as isFlywheelAutoPickupBacklog } from "./control-settings-CiqGxXnc.js";
14
- import { i as loadCloisterConfig, r as init_config } from "./config-Bi3u1VK7.js";
15
- import { f as init_github_app, p as isGitHubAppConfigured, v as listPullRequestsForHead } from "./github-app-CmNk0zLU.js";
16
- import { h as init_pickup, r as LEGACY_PARKED_LABELS } from "./pickup-DWhqzliO.js";
17
- import { r as activeOrderBookIssues } from "./flywheel-BHx8XuMr.js";
18
- import { n as init_issue_closed, r as isIssueClosed } from "./issue-closed-BehTG1be.js";
19
- import { t as recordDeadEndNeedsYou } from "./dead-end-trip-D8A3msX9.js";
20
- import "./spawn-planning-session-pcF-YeFE.js";
2
+ import { Sn as resolveProjectFromIssueSync, cn as init_projects, dn as listProjects } from "./config-yaml-BSCqwmX0.js";
3
+ import { a as emitActivityEntrySync, c as init_activity_logger } from "./activity-logger-Co5qljIj.js";
4
+ import { C as init_tmux, j as listSessionNames } from "./tmux-CImZaX4q.js";
5
+ import { d as getReviewStatusSync, p as init_review_status } from "./review-status-CKLk5aZ-.js";
6
+ import { b as init_agents, vr as getAgentState } from "./queries-DVpl1vsU.js";
7
+ import { n as resolveGitHubIssueSync, t as init_tracker_utils } from "./tracker-utils-BDeAXC-q.js";
8
+ import { n as init_issue_service_singleton, r as issue_service_singleton_exports } from "./issue-service-singleton-BPNEXczv.js";
9
+ import { o as getInternalTokenSync, s as init_internal_token, t as INTERNAL_TOKEN_HEADER } from "./internal-token-AvXePaQT.js";
10
+ import { o as init_lifecycle, s as isXBriefFilename } from "./lifecycle-D2X3al0D.js";
11
+ import { C as init_specs, N as getProjectPanPaths, P as init_paths, S as findSpecByIssue, f as readPlanSync, i as findPlanSync, s as init_io } from "./io-mxOWMZ7I.js";
12
+ import { a as readAutoSpawnOnFinalizeFlagAsync } from "./auto-spawn-consent-lXqRJ1Dr.js";
13
+ import { c as init_control_settings, f as isFlywheelAutoPickupBacklog } from "./control-settings-DVf6pKyv.js";
14
+ import { i as loadCloisterConfig, r as init_config } from "./config-DvM8jtQK.js";
15
+ import { f as init_github_app, p as isGitHubAppConfigured, v as listPullRequestsForHead } from "./github-app-D2QuvZ3j.js";
16
+ import { h as init_pickup, r as LEGACY_PARKED_LABELS } from "./pickup-2AxtB3dW.js";
17
+ import { r as activeOrderBookIssues } from "./flywheel-TacAI9MA.js";
18
+ import { n as init_issue_closed, r as isIssueClosed } from "./issue-closed-Bj_bCv_0.js";
19
+ import { t as recordDeadEndNeedsYou } from "./dead-end-trip-DSF23CLX.js";
20
+ import "./spawn-planning-session-DN4son31.js";
21
21
  import { Effect } from "effect";
22
22
  import { existsSync, readdirSync } from "fs";
23
23
  import { join } from "path";
@@ -31,6 +31,7 @@ init_tracker_utils();
31
31
  init_internal_token();
32
32
  init_lifecycle();
33
33
  init_review_status();
34
+ init_paths();
34
35
  init_io();
35
36
  init_agents();
36
37
  init_github_app();
@@ -201,7 +202,7 @@ function hasReviewPipelinePresence(status) {
201
202
  return false;
202
203
  }
203
204
  async function findSpecPathForIssue(projectPath, issueId) {
204
- const specsDir = join(projectPath, ".pan", "specs");
205
+ const specsDir = getProjectPanPaths(projectPath).specsDir;
205
206
  if (!existsSync(specsDir)) return null;
206
207
  let filenames;
207
208
  try {
@@ -277,7 +278,7 @@ async function findOrphanProposedSpecsForReconciler(options = {}) {
277
278
  const getReviewStatus = options.getReviewStatusForIssue ?? getReviewStatusSync;
278
279
  const candidates = [];
279
280
  for (const { key, config } of projects) {
280
- const specsDir = join(config.path, ".pan", "specs");
281
+ const specsDir = getProjectPanPaths(config.path).specsDir;
281
282
  if (!existsSync(specsDir)) continue;
282
283
  const entries = await readdir(specsDir, { withFileTypes: true }).catch(() => []);
283
284
  for (const entry of entries) {
@@ -690,4 +691,4 @@ async function reconcileOrphanProposedSpecs(options = {}) {
690
691
  //#endregion
691
692
  export { spawnWorkAgentThroughAgentsEndpoint as a, gatherAutonomousWorkDispatchInput as c, reconcileOrphanProposedSpecs as i, handleOrphanProposedSpec as n, triggerRebuildAndStart as o, hasReviewPipelinePresence as r, decideAutonomousWorkDispatch as s, findOrphanProposedSpecsForReconciler as t };
692
693
 
693
- //# sourceMappingURL=orphan-proposed-reconciler-B6vJHxtX.js.map
694
+ //# sourceMappingURL=orphan-proposed-reconciler-DfqHZftT.js.map
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "@overdeck/desktop-server",
3
- "version": "0.47.0",
3
+ "version": "0.48.0",
4
4
  "lockfileVersion": 3,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "@overdeck/desktop-server",
9
- "version": "0.47.0",
9
+ "version": "0.48.0",
10
10
  "dependencies": {
11
11
  "@effect/platform-node": "4.0.0-beta.73",
12
12
  "@google-cloud/speech": "7.3.1",
@@ -551,9 +551,9 @@
551
551
  }
552
552
  },
553
553
  "node_modules/brace-expansion": {
554
- "version": "2.1.2",
555
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.1.2.tgz",
556
- "integrity": "sha512-w5JZcKgdhDOgOwm8H+KgbosopHMuGcl6qbulwjtz3SM7I7P3yW1eAjzMPLrIE+NQ9vjgANKHWeMHnrT0OXW1oA==",
554
+ "version": "2.1.4",
555
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.1.4.tgz",
556
+ "integrity": "sha512-hGfVzPxthbf3+2yjg/RBs60cB0FhqBS/zvdV/4wn4/BmN0bNMMHPc4V/BbFieqf1TKAGGAHnY4eSjajCl0f2Xg==",
557
557
  "license": "MIT",
558
558
  "dependencies": {
559
559
  "balanced-match": "^1.0.0"
@@ -1389,9 +1389,9 @@
1389
1389
  "license": "MIT"
1390
1390
  },
1391
1391
  "node_modules/msgpackr": {
1392
- "version": "2.0.4",
1393
- "resolved": "https://registry.npmjs.org/msgpackr/-/msgpackr-2.0.4.tgz",
1394
- "integrity": "sha512-o1C5KRmuRt+apqMr1HuGSqWStZoRBUpEsCsl15uM9VdAF1qHLtvMOU2En747EnTyEl6c4pzPewRMFF31s1CNbA==",
1392
+ "version": "2.0.5",
1393
+ "resolved": "https://registry.npmjs.org/msgpackr/-/msgpackr-2.0.5.tgz",
1394
+ "integrity": "sha512-cef05H/dSYpLpqp3sj/qyZh5vhUYCalnaLO7j1yOmpsR0y/XwLVtK7r5gn+U/F7CTEfMowcGhlUQJDLcLf7jcA==",
1395
1395
  "license": "MIT",
1396
1396
  "optionalDependencies": {
1397
1397
  "msgpackr-extract": "^3.0.4"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@overdeck/desktop-server",
3
- "version": "0.47.0",
3
+ "version": "0.48.0",
4
4
  "private": true,
5
5
  "type": "module",
6
6
  "dependencies": {
@@ -1,10 +1,10 @@
1
1
  import { n as __esmMin } from "./rolldown-runtime-DNCzzKnI.js";
2
- import { Fr as init_errors, Tr as FsError, cn as flushAutoCommits, ln as init_auto_commit, un as queueAutoCommit } from "./config-yaml-CxdwhAIA.js";
3
- import { p as init_types } from "./types-Cm5ASJbq.js";
4
- import { F as getReadableWorkspacePanPaths, I as getWorkspacePanPaths, L as init_continue, M as getProjectPanPaths, N as ensureWorkspacePanDir, P as getLegacyWorkspacePanPaths, S as init_specs, b as ensurePanDirs } from "./io-B00PBNku.js";
2
+ import { Ar as FsError, St as init_auto_commit, Vr as init_errors, wt as queueAutoCommit, xt as flushAutoCommits } from "./config-yaml-BSCqwmX0.js";
3
+ import { m as init_types } from "./types-DzlUKiuf.js";
4
+ import { C as init_specs, F as ensureWorkspacePanDir, I as getLegacyWorkspacePanPaths, L as getReadableWorkspacePanPaths, N as getProjectPanPaths, R as getWorkspacePanPaths, x as ensurePanDirs, z as init_continue } from "./io-mxOWMZ7I.js";
5
5
  import { Effect, FileSystem } from "effect";
6
6
  import { join } from "path";
7
- import { existsSync, readFileSync, rmSync } from "node:fs";
7
+ import { existsSync, readFileSync, readdirSync, rmSync } from "node:fs";
8
8
  import * as NodeFileSystem from "@effect/platform-node/NodeFileSystem";
9
9
  //#region ../../lib/pan-dir/sessions.ts
10
10
  var init_sessions = __esmMin((() => {
@@ -91,8 +91,23 @@ function getDraftsDir(projectRoot) {
91
91
  function getDraftPath(projectRoot, filename) {
92
92
  return join(getDraftsDir(projectRoot), filename);
93
93
  }
94
+ /** Exact-case existence check. `existsSync` is case-blind on case-insensitive
95
+ * filesystems (macOS APFS), which would mis-resolve a legacy uppercase draft
96
+ * to its lowercase name and queue a case-colliding path (PAN-3287). */
97
+ function hasExactCaseEntry(dir, filename) {
98
+ try {
99
+ return readdirSync(dir).includes(filename);
100
+ } catch {
101
+ return false;
102
+ }
103
+ }
94
104
  function getIssueDraftPath(projectRoot, issueId) {
95
- return getDraftPath(projectRoot, `${issueId.toUpperCase()}.md`);
105
+ const draftsDir = getDraftsDir(projectRoot);
106
+ const lowerFile = `${issueId.toLowerCase()}.md`;
107
+ if (hasExactCaseEntry(draftsDir, lowerFile)) return join(draftsDir, lowerFile);
108
+ const upperFile = `${issueId.toUpperCase()}.md`;
109
+ if (hasExactCaseEntry(draftsDir, upperFile)) return join(draftsDir, upperFile);
110
+ return join(draftsDir, lowerFile);
96
111
  }
97
112
  function writeIssueDraft(projectRoot, issueId, content) {
98
113
  return Effect.gen(function* () {
@@ -291,4 +306,4 @@ var init_pan_dir = __esmMin((() => {
291
306
  //#endregion
292
307
  export { getDraftPath as a, clearFeedback as c, checkPrdGateSync as i, readFeedback as l, readWorkspaceContext as n, getIssueDraftPath as o, writeWorkspaceContext as r, promoteWorkspacePrdDraft as s, init_pan_dir as t, writeFeedback as u };
293
308
 
294
- //# sourceMappingURL=pan-dir-DMzF5wne.js.map
309
+ //# sourceMappingURL=pan-dir-DhgKfO86.js.map
@@ -1,5 +1,5 @@
1
1
  import { n as __esmMin } from "./rolldown-runtime-DNCzzKnI.js";
2
- import { ci as getOverdeckHome, li as init_paths$1 } from "./config-yaml-CxdwhAIA.js";
2
+ import { hi as init_paths$1, mi as getOverdeckHome } from "./config-yaml-BSCqwmX0.js";
3
3
  import { dirname, isAbsolute, join, relative, resolve } from "path";
4
4
  import { mkdir } from "fs/promises";
5
5
  //#region ../../lib/memory/paths.ts
@@ -20,26 +20,26 @@ function assertUnderMemoryBase(path) {
20
20
  function resolveMemoryRoot(projectId) {
21
21
  return assertUnderMemoryBase(join(resolveMemoryBase(), assertMemorySafeSegment(projectId, "projectId")));
22
22
  }
23
- function resolveIssueMemoryRoot(projectId, issueId) {
24
- return assertUnderMemoryBase(join(resolveMemoryRoot(projectId), assertMemorySafeSegment(issueId, "issueId")));
23
+ function resolveWorkspaceMemoryRoot(projectId, workspaceId) {
24
+ return assertUnderMemoryBase(join(resolveMemoryRoot(projectId), assertMemorySafeSegment(workspaceId, "workspaceId")));
25
25
  }
26
- function resolveObservationsFile(projectId, issueId, date) {
27
- return join(resolveIssueMemoryRoot(projectId, issueId), "observations", `${dateKey(date)}.jsonl`);
26
+ function resolveObservationsFile(projectId, workspaceId, date) {
27
+ return join(resolveWorkspaceMemoryRoot(projectId, workspaceId), "observations", `${dateKey(date)}.jsonl`);
28
28
  }
29
- function resolvePendingDir(projectId, issueId) {
30
- return join(resolveIssueMemoryRoot(projectId, issueId), "pending");
29
+ function resolvePendingDir(projectId, workspaceId) {
30
+ return join(resolveWorkspaceMemoryRoot(projectId, workspaceId), "pending");
31
31
  }
32
- function resolveStatusFile(projectId, issueId) {
33
- return join(resolveIssueMemoryRoot(projectId, issueId), "status.json");
32
+ function resolveStatusFile(projectId, workspaceId) {
33
+ return join(resolveWorkspaceMemoryRoot(projectId, workspaceId), "status.json");
34
34
  }
35
- function resolveArchiveDir(projectId, issueId) {
36
- return join(resolveIssueMemoryRoot(projectId, issueId), "archive");
35
+ function resolveArchiveDir(projectId, workspaceId) {
36
+ return join(resolveWorkspaceMemoryRoot(projectId, workspaceId), "archive");
37
37
  }
38
- function resolveSummariesDir(projectId, issueId) {
39
- return join(resolveIssueMemoryRoot(projectId, issueId), "summaries");
38
+ function resolveSummariesDir(projectId, workspaceId) {
39
+ return join(resolveWorkspaceMemoryRoot(projectId, workspaceId), "summaries");
40
40
  }
41
- function resolveRagRunsFile(projectId, issueId, date) {
42
- return join(resolveIssueMemoryRoot(projectId, issueId), "rag-runs", `${dateKey(date)}.jsonl`);
41
+ function resolveRagRunsFile(projectId, workspaceId, date) {
42
+ return join(resolveWorkspaceMemoryRoot(projectId, workspaceId), "rag-runs", `${dateKey(date)}.jsonl`);
43
43
  }
44
44
  function resolveFtsDbPath(projectId) {
45
45
  return join(resolveMemoryRoot(projectId), "memory-search.db");
@@ -60,6 +60,6 @@ var init_paths = __esmMin((() => {
60
60
  SAFE_SEGMENT = /^[A-Za-z0-9._-]{1,128}$/;
61
61
  }));
62
62
  //#endregion
63
- export { resolveArchiveDir as a, resolveMemoryRoot as c, resolveRagRunsFile as d, resolveStatusFile as f, init_paths as i, resolveObservationsFile as l, ensureDir as n, resolveFtsDbPath as o, resolveSummariesDir as p, ensureParentDir as r, resolveIssueMemoryRoot as s, assertMemorySafeSegment as t, resolvePendingDir as u };
63
+ export { resolveArchiveDir as a, resolveMemoryRoot as c, resolveRagRunsFile as d, resolveStatusFile as f, init_paths as i, resolveObservationsFile as l, resolveWorkspaceMemoryRoot as m, ensureDir as n, resolveFtsDbPath as o, resolveSummariesDir as p, ensureParentDir as r, resolveMemoryBase as s, assertMemorySafeSegment as t, resolvePendingDir as u };
64
64
 
65
- //# sourceMappingURL=paths-sJBSb7Ul.js.map
65
+ //# sourceMappingURL=paths-BUuhi6jM.js.map
@@ -1,4 +1,4 @@
1
- import { n as init_review_status_source, s as resolveCanonicalReviewStatus } from "./review-status-source-DIk1JSow.js";
1
+ import { n as init_review_status_source, s as resolveCanonicalReviewStatus } from "./review-status-source-7nU3Z2wL.js";
2
2
  import { basename, dirname, join } from "node:path";
3
3
  import { readFile, readdir, rename, unlink } from "node:fs/promises";
4
4
  import { randomUUID } from "node:crypto";
@@ -107,4 +107,4 @@ async function settlePendingLifecycleClaim(claim, issueId, succeeded) {
107
107
  //#endregion
108
108
  export { settlePendingLifecycleClaim as n, claimPendingLifecycleFile as t };
109
109
 
110
- //# sourceMappingURL=pending-lifecycle-claim-DilzGfgk.js.map
110
+ //# sourceMappingURL=pending-lifecycle-claim-DJlA1rTR.js.map
@@ -1,5 +1,5 @@
1
1
  import { n as __esmMin } from "./rolldown-runtime-DNCzzKnI.js";
2
- import { ci as getOverdeckHome, li as init_paths } from "./config-yaml-CxdwhAIA.js";
2
+ import { hi as init_paths, mi as getOverdeckHome } from "./config-yaml-BSCqwmX0.js";
3
3
  import "effect";
4
4
  import { appendFileSync, mkdirSync } from "fs";
5
5
  import { join } from "path";
@@ -54,4 +54,4 @@ var init_persistent_logger = __esmMin((() => {
54
54
  //#endregion
55
55
  export { logAgentLifecycleSync as n, logDeaconEventSync as r, init_persistent_logger as t };
56
56
 
57
- //# sourceMappingURL=persistent-logger-H_VjuOu7.js.map
57
+ //# sourceMappingURL=persistent-logger-s8cbpFNV.js.map
@@ -187,4 +187,4 @@ var init_pickup = __esmMin((() => {
187
187
  //#endregion
188
188
  export { normalizeGate as _, PARKED_LABEL as a, VETOED_LABEL as c, computeEpicGroups as d, computeLanes as f, isAutoPickable as g, init_pickup as h, OBJECTION_LABEL as i, classifyIssue as l, computeWaves as m, EPIC_LABEL as n, READY_LABEL as o, computeStats as p, LEGACY_PARKED_LABELS as r, RELEASED_LABEL as s, BLOCKS_MAIN_LABEL as t, computeCohort as u, selectNeedsPlanning as v };
189
189
 
190
- //# sourceMappingURL=pickup-DWhqzliO.js.map
190
+ //# sourceMappingURL=pickup-2AxtB3dW.js.map
@@ -1,3 +1,3 @@
1
- import { n as init_pipeline_membership, r as resolvePipelineMembership, t as PLANNED_BACKLOG_SPEC_ONLY_REASON } from "./pipeline-membership-D9SBvItj.js";
1
+ import { n as init_pipeline_membership, r as resolvePipelineMembership, t as PLANNED_BACKLOG_SPEC_ONLY_REASON } from "./pipeline-membership-Dqv6_0ig.js";
2
2
  init_pipeline_membership();
3
3
  export { PLANNED_BACKLOG_SPEC_ONLY_REASON, resolvePipelineMembership };
@@ -54,4 +54,4 @@ var init_pipeline_membership = __esmMin((() => {
54
54
  //#endregion
55
55
  export { init_pipeline_membership as n, resolvePipelineMembership as r, PLANNED_BACKLOG_SPEC_ONLY_REASON as t };
56
56
 
57
- //# sourceMappingURL=pipeline-membership-D9SBvItj.js.map
57
+ //# sourceMappingURL=pipeline-membership-Dqv6_0ig.js.map
@@ -1,3 +1,3 @@
1
- import { a as gatherProjectLensSignals, c as listIssueStatesBatched, d as mapPipelineProjects, f as projectRepositories, i as gatherIssueBranchContainment, l as listMergedPullRequestHeadsBatched, m as snapshotBranchRefs, n as PipelineMembershipUnavailableError, o as gatherProjectLensSignalsForProjects, p as resolveRepositoryDefaultBranch, r as classifyBranchRefLine, s as init_pipeline_membership_gather, t as PIPELINE_PROJECT_CONCURRENCY, u as listOpenPullRequestsSnapshot } from "./pipeline-membership-gather-CeVGnNJ2.js";
1
+ import { a as gatherProjectLensSignals, c as listIssueStatesBatched, d as mapPipelineProjects, f as projectRepositories, i as gatherIssueBranchContainment, l as listMergedPullRequestHeadsBatched, m as snapshotBranchRefs, n as PipelineMembershipUnavailableError, o as gatherProjectLensSignalsForProjects, p as resolveRepositoryDefaultBranch, r as classifyBranchRefLine, s as init_pipeline_membership_gather, t as PIPELINE_PROJECT_CONCURRENCY, u as listOpenPullRequestsSnapshot } from "./pipeline-membership-gather-CtJ_7aGf.js";
2
2
  init_pipeline_membership_gather();
3
3
  export { PIPELINE_PROJECT_CONCURRENCY, PipelineMembershipUnavailableError, classifyBranchRefLine, gatherIssueBranchContainment, gatherProjectLensSignals, gatherProjectLensSignalsForProjects, listIssueStatesBatched, listMergedPullRequestHeadsBatched, listOpenPullRequestsSnapshot, mapPipelineProjects, projectRepositories, resolveRepositoryDefaultBranch, snapshotBranchRefs };
@@ -1,16 +1,119 @@
1
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";
2
+ import { $t as getIssuePrefix, Z as readIssueRecordForWorkspaceSync, cn as init_projects, fn as listProjectsSync, q as init_record } from "./config-yaml-BSCqwmX0.js";
3
+ import { f as init_config, m as loadConfigSync } from "./config-DnLJATZk.js";
4
+ import { n as resolveGitHubIssueSync, t as init_tracker_utils } from "./tracker-utils-BDeAXC-q.js";
5
+ import { i as init_project_repos, n as getRepoForge, r as inferProjectForgeSync } from "./project-repos-BAqDwtvi.js";
6
+ import { C as init_specs, w as listSpecs } from "./io-mxOWMZ7I.js";
7
+ import { r as init_factory, t as createTracker } from "./factory-DhavwKVc.js";
8
+ import { A as createSettledTtlPromiseCache, N as withConcurrencyLimitPromise, _ as listOpenIssuesWithLabelsPromise, f as init_github_app, h as listIssuesWithAnyLabelPromise, j as init_concurrency } from "./github-app-D2QuvZ3j.js";
9
+ 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-2AxtB3dW.js";
9
10
  import { join, resolve } from "node:path";
10
11
  import { Effect } from "effect";
11
12
  import { realpath } from "node:fs/promises";
12
13
  import { exec, execFile } from "node:child_process";
13
14
  import { promisify } from "node:util";
15
+ //#region ../../lib/gitlab-merge-requests.ts
16
+ /**
17
+ * Default glab runner using child_process.execFile
18
+ */
19
+ async function defaultGitLabRunner(args, cwd) {
20
+ const { stdout } = await execFileAsync$1("glab", args, {
21
+ encoding: "utf-8",
22
+ timeout: 3e4,
23
+ maxBuffer: 16 * 1024 * 1024,
24
+ cwd
25
+ });
26
+ return stdout;
27
+ }
28
+ /**
29
+ * List all open merge requests in a GitLab repository.
30
+ * Results are paginated (100 per page) and cached for 30 seconds.
31
+ *
32
+ * @param repoPath - Path to the git repository (used as cwd for glab)
33
+ * @param runner - Optional custom runner for testing; defaults to glab execFileAsync
34
+ * @returns Array of open merge requests with source_branch and web_url
35
+ */
36
+ async function listOpenGitLabMergeRequests(repoPath, runner = defaultGitLabRunner) {
37
+ return cachedOpenMergeRequests(repoPath.toLowerCase(), async () => {
38
+ const rows = [];
39
+ let page = 1;
40
+ while (true) {
41
+ const stdout = await runner([
42
+ "mr",
43
+ "list",
44
+ "--output",
45
+ "json",
46
+ "--per-page",
47
+ "100",
48
+ "--page",
49
+ String(page)
50
+ ], repoPath);
51
+ if (!stdout.trim()) break;
52
+ const pageRows = JSON.parse(stdout);
53
+ if (!Array.isArray(pageRows)) throw new Error(`Expected array from glab mr list, got ${typeof pageRows}`);
54
+ if (pageRows.length === 0) break;
55
+ rows.push(...pageRows);
56
+ if (pageRows.length < 100) break;
57
+ page++;
58
+ }
59
+ return rows;
60
+ });
61
+ }
62
+ /**
63
+ * Get the subset of heads that have at least one merged merge request.
64
+ * Results are paginated (100 per page) and cached per repository for 30 seconds.
65
+ *
66
+ * PAN-3267: this used to run one `glab mr list --merged --source-branch <head>`
67
+ * per head, so a polyrepo project cost one subprocess per (repo × head) —
68
+ * mind-your-now spawned on the order of 240 glab processes per membership
69
+ * refresh. That was slow enough to stall the dashboard's issue list, and
70
+ * unreliable enough that something failed every cycle; a single failure aborts
71
+ * the whole gather as `forge_unavailable`, so membership never refreshed. One
72
+ * repo-wide list answers every head from the same data, matching how
73
+ * listOpenGitLabMergeRequests already reads open MRs.
74
+ *
75
+ * @param repoPath - Path to the git repository (used as cwd for glab)
76
+ * @param heads - Array of branch names to check for merged MRs
77
+ * @param runner - Optional custom runner for testing
78
+ * @returns Subset of heads with at least one merged MR
79
+ */
80
+ async function listGitLabMergedMergeRequestHeads(repoPath, heads, runner = defaultGitLabRunner) {
81
+ if (!heads.length) return [];
82
+ const mergedSourceBranches = await cachedMergedSourceBranches(repoPath.toLowerCase(), async () => {
83
+ const branches = /* @__PURE__ */ new Set();
84
+ let page = 1;
85
+ while (true) {
86
+ const stdout = await runner([
87
+ "mr",
88
+ "list",
89
+ "--merged",
90
+ "--output",
91
+ "json",
92
+ "--per-page",
93
+ "100",
94
+ "--page",
95
+ String(page)
96
+ ], repoPath);
97
+ if (!stdout.trim()) break;
98
+ const pageRows = JSON.parse(stdout);
99
+ if (!Array.isArray(pageRows)) throw new Error(`Expected array from glab mr list, got ${typeof pageRows}`);
100
+ if (pageRows.length === 0) break;
101
+ for (const row of pageRows) if (row.source_branch) branches.add(row.source_branch);
102
+ if (pageRows.length < 100) break;
103
+ page++;
104
+ }
105
+ return branches;
106
+ });
107
+ return heads.filter((head) => mergedSourceBranches.has(head));
108
+ }
109
+ var execFileAsync$1, cachedOpenMergeRequests, cachedMergedSourceBranches;
110
+ var init_gitlab_merge_requests = __esmMin((() => {
111
+ init_concurrency();
112
+ execFileAsync$1 = promisify(execFile);
113
+ cachedOpenMergeRequests = createSettledTtlPromiseCache(3e4);
114
+ cachedMergedSourceBranches = createSettledTtlPromiseCache(3e4);
115
+ }));
116
+ //#endregion
14
117
  //#region ../../lib/backlog/label-ops.ts
15
118
  /**
16
119
  * Add or remove a GitHub label on an issue. Non-GitHub issues are silently
@@ -221,9 +324,9 @@ function resolveProjectTrackerType(project) {
221
324
  throw new PipelineMembershipUnavailableError("tracker_unconfigured", `Cannot resolve tracker for ${project.name}`);
222
325
  }
223
326
  async function listProjectTrackerIssues(project) {
327
+ const trackerType = resolveProjectTrackerType(project);
224
328
  const issuePrefix = getIssuePrefix(project)?.toUpperCase();
225
329
  if (!issuePrefix) throw new PipelineMembershipUnavailableError("missing_issue_prefix", `Missing issue_prefix for project ${project.name}`);
226
- const trackerType = resolveProjectTrackerType(project);
227
330
  const trackerConfig = loadConfigSync().trackers[trackerType];
228
331
  const tracker = createTracker({
229
332
  type: trackerType,
@@ -271,11 +374,14 @@ function issueIdFromRef(ref, issuePrefix) {
271
374
  function projectRepositories(project) {
272
375
  if (!project.workspace?.repos?.length) return [{
273
376
  path: project.path,
274
- defaultBranch: project.workspace?.default_branch ?? "main"
377
+ defaultBranch: project.workspace?.default_branch ?? "main",
378
+ forge: inferProjectForgeSync(project) || "github"
275
379
  }];
276
380
  return project.workspace.repos.map((repo) => ({
277
381
  path: join(project.path, repo.path),
278
- defaultBranch: repo.default_branch ?? project.workspace?.default_branch ?? "main"
382
+ defaultBranch: repo.default_branch ?? project.workspace?.default_branch ?? "main",
383
+ forge: getRepoForge(repo, project),
384
+ repoKey: repo.name
279
385
  }));
280
386
  }
281
387
  async function normalizeRepoPath(path) {
@@ -407,6 +513,7 @@ async function gatherIssueBranchContainment(project, issueId, run = defaultDeps.
407
513
  }
408
514
  /** Gather all durable pipeline lenses for one project in batches. */
409
515
  async function gatherProjectLensSignals(project, deps = defaultDeps) {
516
+ resolveProjectTrackerType(project);
410
517
  const issuePrefix = getIssuePrefix(project)?.toUpperCase();
411
518
  if (!issuePrefix) throw new PipelineMembershipUnavailableError("missing_issue_prefix", `Missing issue_prefix for project ${project.name}`);
412
519
  const githubRepository = project.github_repo?.split("/");
@@ -414,6 +521,7 @@ async function gatherProjectLensSignals(project, deps = defaultDeps) {
414
521
  const repo = githubRepository?.[1];
415
522
  if (project.github_repo && (!owner || !repo)) throw new Error(`Invalid github_repo for ${project.name}: ${project.github_repo}`);
416
523
  const repositories = projectRepositories(project);
524
+ const gitlabRepos = repositories.filter((r) => r.forge === "gitlab");
417
525
  const branchRefPatterns = [
418
526
  "refs/heads/feature/*",
419
527
  "refs/remotes/origin/feature/*",
@@ -421,11 +529,12 @@ async function gatherProjectLensSignals(project, deps = defaultDeps) {
421
529
  "refs/remotes/origin/strike/*"
422
530
  ];
423
531
  const branchSnapshots = repositories.map((repository) => snapshotBranchRefs(repository.path, repository.defaultBranch, branchRefPatterns, deps.run));
424
- const [trackerIssues, openIssues, phaseLabeledIssues, openPrs, branches, specIssueIds] = await Promise.all([
532
+ const [trackerIssues, openIssues, phaseLabeledIssues, openPrs, openMrs, branches, specIssueIds] = await Promise.all([
425
533
  project.github_repo ? Promise.resolve([]) : withUnavailableReason("forge_unavailable", () => deps.listTrackerIssues(project)),
426
534
  owner && repo ? withUnavailableReason("forge_unavailable", () => deps.listOpenIssues(owner, repo)) : Promise.resolve([]),
427
535
  owner && repo ? withUnavailableReason("forge_unavailable", () => deps.listPhaseLabeledIssues(owner, repo)) : Promise.resolve([]),
428
536
  owner && repo ? withUnavailableReason("forge_unavailable", () => deps.listOpenPullRequests(owner, repo)) : Promise.resolve([]),
537
+ !(owner && repo) && gitlabRepos.length > 0 ? withUnavailableReason("forge_unavailable", () => Promise.all(gitlabRepos.map((r) => deps.listOpenMergeRequests(r.path)))) : Promise.resolve([]),
429
538
  Promise.all(branchSnapshots),
430
539
  withUnavailableReason("gather_failed", () => deps.listSpecIssueIds(project.path))
431
540
  ]);
@@ -459,7 +568,7 @@ async function gatherProjectLensSignals(project, deps = defaultDeps) {
459
568
  knownStateByIssue.set(id, issue.state);
460
569
  }
461
570
  for (const pr of openPrs) {
462
- if (!owner || !repo || pr.headRepoFullName.toLowerCase() !== `${owner}/${repo}`.toLowerCase()) continue;
571
+ if (owner && repo && pr.headRepoFullName.toLowerCase() !== `${owner}/${repo}`.toLowerCase()) continue;
463
572
  const id = issueIdFromRef(pr.headRefName, issuePrefix);
464
573
  if (id) {
465
574
  candidates.add(id);
@@ -467,6 +576,15 @@ async function gatherProjectLensSignals(project, deps = defaultDeps) {
467
576
  headRefsByIssue.set(id, new Set([...headRefsByIssue.get(id) ?? [], pr.headRefName]));
468
577
  }
469
578
  }
579
+ const gitlabMrs = openMrs.flat();
580
+ for (const mr of gitlabMrs) {
581
+ const id = issueIdFromRef(mr.source_branch, issuePrefix);
582
+ if (id) {
583
+ candidates.add(id);
584
+ openPrIssues.add(id);
585
+ headRefsByIssue.set(id, new Set([...headRefsByIssue.get(id) ?? [], mr.source_branch]));
586
+ }
587
+ }
470
588
  for (const snapshot of branches) {
471
589
  const refLines = snapshot.refs.split("\n").map((line) => line.trim()).filter(Boolean);
472
590
  const unmerged = new Set(snapshot.unmergedRefs.split("\n").map((ref) => ref.trim()).filter(Boolean));
@@ -498,13 +616,23 @@ async function gatherProjectLensSignals(project, deps = defaultDeps) {
498
616
  if (state) knownStateByIssue.set(id, state);
499
617
  else candidates.delete(id);
500
618
  }
501
- const openCandidates = [...candidates].filter((id) => knownStateByIssue.get(id) === "open");
502
- const candidateHeads = [...new Set(openCandidates.flatMap((id) => [
619
+ }
620
+ const openCandidates = [...candidates].filter((id) => knownStateByIssue.get(id) === "open");
621
+ const candidateHeads = [...new Set(openCandidates.flatMap((id) => [
622
+ ...headRefsByIssue.get(id) ?? [],
623
+ `feature/${id.toLowerCase()}`,
624
+ `strike/${id.toLowerCase()}`
625
+ ]))];
626
+ if (owner && repo) {
627
+ const mergedHeads = new Set(await withUnavailableReason("forge_unavailable", () => deps.listMergedPullRequestHeads(owner, repo, candidateHeads)));
628
+ for (const id of openCandidates) if ([
503
629
  ...headRefsByIssue.get(id) ?? [],
504
630
  `feature/${id.toLowerCase()}`,
505
631
  `strike/${id.toLowerCase()}`
506
- ]))];
507
- const mergedHeads = new Set(await withUnavailableReason("forge_unavailable", () => deps.listMergedPullRequestHeads(owner, repo, candidateHeads)));
632
+ ].some((head) => mergedHeads.has(head))) mergedPrIssues.add(id);
633
+ } else if (gitlabRepos.length > 0) {
634
+ const allMergedHeads = await withConcurrencyLimitPromise(gitlabRepos.map((repo) => () => withUnavailableReason("forge_unavailable", () => deps.listMergedMergeRequestHeads(repo.path, candidateHeads))), 5);
635
+ const mergedHeads = new Set(allMergedHeads.flat());
508
636
  for (const id of openCandidates) if ([
509
637
  ...headRefsByIssue.get(id) ?? [],
510
638
  `feature/${id.toLowerCase()}`,
@@ -550,10 +678,12 @@ var execFileAsync, GRAPHQL_ALIAS_CHUNK_SIZE, cachedOpenPullRequests, PipelineMem
550
678
  var init_pipeline_membership_gather = __esmMin((() => {
551
679
  init_github_app();
552
680
  init_concurrency();
681
+ init_gitlab_merge_requests();
553
682
  init_label_reconciler();
554
683
  init_config();
555
684
  init_specs();
556
685
  init_projects();
686
+ init_project_repos();
557
687
  init_resource_utils();
558
688
  init_factory();
559
689
  execFileAsync = promisify(execFile);
@@ -571,7 +701,9 @@ var init_pipeline_membership_gather = __esmMin((() => {
571
701
  listOpenIssues: listOpenIssuesWithLabelsPromise,
572
702
  listPhaseLabeledIssues: (owner, repo) => listIssuesWithAnyLabelPromise(owner, repo, STALE_PIPELINE_LABELS),
573
703
  listOpenPullRequests: listOpenPullRequestsSnapshot,
704
+ listOpenMergeRequests: listOpenGitLabMergeRequests,
574
705
  listMergedPullRequestHeads: listMergedPullRequestHeadsBatched,
706
+ listMergedMergeRequestHeads: listGitLabMergedMergeRequestHeads,
575
707
  listIssueStates: listIssueStatesBatched,
576
708
  listTrackerIssues: listProjectTrackerIssues,
577
709
  listSpecIssueIds: async (projectPath) => (await Effect.runPromise(listSpecs(projectPath))).map((entry) => entry.issueId),
@@ -590,4 +722,4 @@ var init_pipeline_membership_gather = __esmMin((() => {
590
722
  //#endregion
591
723
  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
724
 
593
- //# sourceMappingURL=pipeline-membership-gather-CeVGnNJ2.js.map
725
+ //# sourceMappingURL=pipeline-membership-gather-CtJ_7aGf.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-D0ALV6Nw.js";
1
+ import { a as setPipelineHandlerSync, i as setPipelineHandler, n as notifyPipeline, r as notifyPipelineSync, t as init_pipeline_notifier } from "./pipeline-notifier-DDfVBJhJ.js";
2
2
  init_pipeline_notifier();
3
3
  export { notifyPipeline, notifyPipelineSync, setPipelineHandler, setPipelineHandlerSync };
@@ -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-DzK385vD.js";
2
+ import { o as getInternalTokenSync, s as init_internal_token, t as INTERNAL_TOKEN_HEADER } from "./internal-token-AvXePaQT.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-D0ALV6Nw.js.map
63
+ //# sourceMappingURL=pipeline-notifier-DDfVBJhJ.js.map
@@ -1,4 +1,4 @@
1
- import { n as init_review_status_source, s as resolveCanonicalReviewStatus } from "./review-status-source-DIk1JSow.js";
1
+ import { n as init_review_status_source, s as resolveCanonicalReviewStatus } from "./review-status-source-7nU3Z2wL.js";
2
2
  //#region ../../lib/cloister/post-merge-lifecycle-worker.ts
3
3
  init_review_status_source();
4
4
  const queue = /* @__PURE__ */ new Map();
@@ -15,7 +15,7 @@ async function drainQueue() {
15
15
  continue;
16
16
  }
17
17
  try {
18
- const { postMergeLifecycle } = await import("./merge-agent-DQTXZk8z.js");
18
+ const { postMergeLifecycle } = await import("./merge-agent-DWd0KfiS.js");
19
19
  await postMergeLifecycle(entry.issueId, entry.projectPath, entry.sourceBranch, { skipDeploy: true });
20
20
  console.log(`[deacon] Completed pending post-merge lifecycle for ${entry.issueId}`);
21
21
  } catch (error) {
@@ -47,4 +47,4 @@ function enqueuePostMergeLifecycle(issueId, projectPath, sourceBranch) {
47
47
  //#endregion
48
48
  export { enqueuePostMergeLifecycle };
49
49
 
50
- //# sourceMappingURL=post-merge-lifecycle-worker-8HIeS_J6.js.map
50
+ //# sourceMappingURL=post-merge-lifecycle-worker-DmSOkeNp.js.map
@@ -1,4 +1,4 @@
1
- import { Gn as init_projects, Yn as listProjectsSync } from "./config-yaml-CxdwhAIA.js";
1
+ import { cn as init_projects, fn as listProjectsSync } from "./config-yaml-BSCqwmX0.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-9SKt2bEc.js.map
162
+ //# sourceMappingURL=project-pipelines-72WE8GVK.js.map