@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,5 +1,5 @@
1
1
  import { n as __esmMin } from "./rolldown-runtime-DNCzzKnI.js";
2
- import { i as init_esm_min, n as FormData, o as Blob, r as formDataToBlob, s as init_fetch_blob, t as init_from } from "./from-B3tZbB55.js";
2
+ import { i as init_esm_min, n as FormData, o as Blob, r as formDataToBlob, s as init_fetch_blob, t as init_from } from "./from-BogSwvr2.js";
3
3
  import { deprecate, promisify, types } from "node:util";
4
4
  import { format } from "node:url";
5
5
  import http from "node:http";
@@ -209,7 +209,7 @@ var init_body = __esmMin((() => {
209
209
  for (const [name, value] of parameters) formData.append(name, value);
210
210
  return formData;
211
211
  }
212
- const { toFormData } = await import("./multipart-parser-R-oC8dQg.js");
212
+ const { toFormData } = await import("./multipart-parser-CL5QG8iv.js");
213
213
  return toFormData(this.body, ct);
214
214
  }
215
215
  /**
@@ -1176,4 +1176,4 @@ __esmMin((() => {
1176
1176
  }))();
1177
1177
  export { fetch as default };
1178
1178
 
1179
- //# sourceMappingURL=src-vHy2-oCv.js.map
1179
+ //# sourceMappingURL=src-DQnkPN2i.js.map
@@ -1,6 +1,6 @@
1
1
  import { i as __require, o as __toESM, t as __commonJSMin } from "./rolldown-runtime-DNCzzKnI.js";
2
- import { r as init_esm_shims, t as __dirname } from "./esm-shims-BeObUkaw.js";
3
- import { n as require_dist$1, r as require_src$14, t as require_dist$2 } from "./dist-C3A8B8wM.js";
2
+ import { r as init_esm_shims, t as __dirname } from "./esm-shims-Bzy4ZzNU.js";
3
+ import { n as require_dist$1, r as require_src$14, t as require_dist$2 } from "./dist-3W--cGMa.js";
4
4
  //#region ../../../node_modules/.bun/@google-cloud+promisify@4.1.0/node_modules/@google-cloud/promisify/build/src/index.js
5
5
  var require_src$13 = /* @__PURE__ */ __commonJSMin(((exports) => {
6
6
  Object.defineProperty(exports, "__esModule", { value: true });
@@ -1198,12 +1198,12 @@ var require_gaxios = /* @__PURE__ */ __commonJSMin(((exports) => {
1198
1198
  * @returns A proxy agent
1199
1199
  */
1200
1200
  static async #getProxyAgent() {
1201
- this.#proxyAgent ||= (await import("./dist-B3YPQa5A.js").then((m) => /* @__PURE__ */ __toESM(m.default))).HttpsProxyAgent;
1201
+ this.#proxyAgent ||= (await import("./dist-BR0QtwmS.js").then((m) => /* @__PURE__ */ __toESM(m.default))).HttpsProxyAgent;
1202
1202
  return this.#proxyAgent;
1203
1203
  }
1204
1204
  static async #getFetch() {
1205
1205
  const hasWindow = typeof window !== "undefined" && !!window;
1206
- this.#fetch ||= hasWindow ? window.fetch : (await import("./src-vHy2-oCv.js")).default;
1206
+ this.#fetch ||= hasWindow ? window.fetch : (await import("./src-DQnkPN2i.js")).default;
1207
1207
  return this.#fetch;
1208
1208
  }
1209
1209
  /**
@@ -10601,7 +10601,7 @@ var require_src$7 = /* @__PURE__ */ __commonJSMin(((exports) => {
10601
10601
  const TeenyStatistics_1 = require_TeenyStatistics();
10602
10602
  const crypto_1 = __require("crypto");
10603
10603
  const streamEvents = require_stream_events();
10604
- const fetch = (...args) => import("./src-vHy2-oCv.js").then(({ default: fetch }) => fetch(...args));
10604
+ const fetch = (...args) => import("./src-DQnkPN2i.js").then(({ default: fetch }) => fetch(...args));
10605
10605
  var RequestError = class extends Error {
10606
10606
  code;
10607
10607
  };
@@ -133656,4 +133656,4 @@ var require_src = /* @__PURE__ */ __commonJSMin(((exports) => {
133656
133656
  export default require_src();
133657
133657
  export {};
133658
133658
 
133659
- //# sourceMappingURL=src-rac0Mepv.js.map
133659
+ //# sourceMappingURL=src-DhfDV0o4.js.map
@@ -1,6 +1,6 @@
1
1
  import { n as __esmMin } from "./rolldown-runtime-DNCzzKnI.js";
2
- import { Gn as init_projects, ar as resolveProjectFromIssueSync, gr as init_issue_id, vr as parseIssueIdSync, zn as getProjectSync } from "./config-yaml-CxdwhAIA.js";
3
- import { o as init_activity_logger, r as emitActivityEntrySync } from "./activity-logger-CyteR4JO.js";
2
+ import { Fn as parseIssueIdSync, Nn as init_issue_id, Sn as resolveProjectFromIssueSync, cn as init_projects, nn as getProjectSync } from "./config-yaml-BSCqwmX0.js";
3
+ import { a as emitActivityEntrySync, c as init_activity_logger } from "./activity-logger-Co5qljIj.js";
4
4
  import { join } from "node:path";
5
5
  import { Duration, Effect, Schedule, Stream } from "effect";
6
6
  import { existsSync, readFileSync } from "node:fs";
@@ -177,33 +177,116 @@ var init_docker_stats = __esmMin((() => {
177
177
  }));
178
178
  //#endregion
179
179
  //#region ../../lib/workspace/stack-health.ts
180
+ /**
181
+ * Canonical compose-project-name resolver (PAN-3049).
182
+ *
183
+ * `composeProjectNameForWorkspace` / `requireComposeProjectNameForWorkspace`
184
+ * are the ONLY place a workspace's Docker Compose project name is derived.
185
+ * A workspace's compose project is whatever it DECLARES — the dev-script
186
+ * `COMPOSE_PROJECT_NAME` or a compose file's top-level `name:` field — never
187
+ * an independently re-guessed prefix. Every consumer (rebuild, teardown,
188
+ * health checks, reapers, doctor) must call through this module rather than
189
+ * re-deriving the name; two independent derivations disagreeing is exactly
190
+ * what let a duplicate `overdeck-feature-*` stack spring up beside a
191
+ * workspace's real `myn-feature-*` one. See docs/WORKSPACE-CONTAINERS.md
192
+ * ("Compose project naming") for the full contract.
193
+ */
180
194
  function declaredComposeProjectName(content, featureFolder) {
181
195
  const templatedMatch = content.match(/COMPOSE_PROJECT_NAME="([^$"]*)\$\{FEATURE_FOLDER\}"/);
182
196
  if (templatedMatch) return `${templatedMatch[1]}${featureFolder}`;
183
197
  return content.match(/COMPOSE_PROJECT_NAME="([^"]+)"/)?.[1] ?? null;
184
198
  }
199
+ function findDevcontainerComposeFile(workspacePath) {
200
+ const devcontainerDir = join(workspacePath, ".devcontainer");
201
+ for (const file of COMPOSE_FILE_CANDIDATES) {
202
+ const fullPath = join(devcontainerDir, file);
203
+ if (existsSync(fullPath)) return fullPath;
204
+ }
205
+ return null;
206
+ }
207
+ /** Parse a top-level (unindented) compose `name:` key, e.g. `name: myn-feature-min-901`. */
208
+ function declaredComposeFileProjectName(content, featureFolder) {
209
+ const match = content.match(/^name:\s*['"]?([^'"\n]+?)['"]?\s*$/m);
210
+ if (!match) return null;
211
+ const raw = match[1].trim();
212
+ return raw.includes("${FEATURE_FOLDER}") ? raw.replace("${FEATURE_FOLDER}", featureFolder) : raw;
213
+ }
214
+ function assertValidComposeProjectNameGrammar(sourcePath, declaredKey, declared) {
215
+ if (!VALID_COMPOSE_PROJECT_NAME_RE.test(declared)) throw new Error(`Refusing workspace rebuild: ${sourcePath} declares ${declaredKey}=${declared}, which is not a valid Docker Compose project name (lowercase letters, digits, hyphens, and underscores only, starting with a letter or digit)`);
216
+ }
217
+ function assertDeclaredNameMatchesFeatureFolder(sourcePath, declaredKey, declared, featureFolder) {
218
+ assertValidComposeProjectNameGrammar(sourcePath, declaredKey, declared);
219
+ if (!declared.endsWith(featureFolder)) throw new Error(`Refusing workspace rebuild: ${sourcePath} declares ${declaredKey}=${declared}, expected a name ending in ${featureFolder}`);
220
+ }
185
221
  /**
186
- * Derive the canonical `COMPOSE_PROJECT_NAME` for a workspace. Throws when the
187
- * workspace declares a name that does not end in the feature folder — a
188
- * mismatch means `docker compose down` would target the wrong stack.
189
- * (Lives here rather than in rebuild-stack so health checks can scope
190
- * container matching without an import cycle.)
222
+ * Resolve the compose project name declared by the workspace's dev script or
223
+ * devcontainer compose file, without applying the `overdeck-` fallback.
224
+ * Returns `{ name: null, composeFilePath }` when neither source declares one —
225
+ * `composeFilePath` is non-null when a compose file exists so callers can
226
+ * report where they looked.
191
227
  */
192
- function composeProjectNameForWorkspace(workspacePath, issueId) {
193
- const featureFolder = `feature-${issueId.toLowerCase()}`;
194
- const fallback = `overdeck-${featureFolder}`;
228
+ function resolveDeclaredComposeProjectName(workspacePath, featureFolder) {
195
229
  for (const devPath of [join(workspacePath, ".devcontainer", "dev"), join(workspacePath, "dev")]) {
196
230
  if (!existsSync(devPath)) continue;
197
231
  try {
198
232
  const declared = declaredComposeProjectName(readFileSync(devPath, "utf-8"), featureFolder);
199
233
  if (!declared) continue;
200
- if (!declared.endsWith(featureFolder)) throw new Error(`Refusing workspace rebuild: ${devPath} declares COMPOSE_PROJECT_NAME=${declared}, expected a name ending in ${featureFolder}`);
201
- return declared;
234
+ assertDeclaredNameMatchesFeatureFolder(devPath, "COMPOSE_PROJECT_NAME", declared, featureFolder);
235
+ return {
236
+ name: declared,
237
+ composeFilePath: null
238
+ };
202
239
  } catch (err) {
203
240
  if (err instanceof Error && err.message.startsWith("Refusing workspace rebuild:")) throw err;
204
241
  }
205
242
  }
206
- return fallback;
243
+ const composeFilePath = findDevcontainerComposeFile(workspacePath);
244
+ if (!composeFilePath) return {
245
+ name: null,
246
+ composeFilePath: null
247
+ };
248
+ const declared = declaredComposeFileProjectName(readFileSync(composeFilePath, "utf-8"), featureFolder);
249
+ if (!declared) return {
250
+ name: null,
251
+ composeFilePath
252
+ };
253
+ assertDeclaredNameMatchesFeatureFolder(composeFilePath, "name", declared, featureFolder);
254
+ return {
255
+ name: declared,
256
+ composeFilePath
257
+ };
258
+ }
259
+ /**
260
+ * Derive the canonical `COMPOSE_PROJECT_NAME` for a workspace. Throws when the
261
+ * workspace declares a name that does not end in the feature folder — a
262
+ * mismatch means `docker compose down` would target the wrong stack.
263
+ * (Lives here rather than in rebuild-stack so health checks can scope
264
+ * container matching without an import cycle.)
265
+ *
266
+ * Silently falls back to `overdeck-feature-<issue>` when no dev script or
267
+ * compose file declares a name. Use `requireComposeProjectNameForWorkspace`
268
+ * at bring-up time, where a workspace with a compose file but no resolvable
269
+ * name is a bug to surface, not a condition to paper over with a guess.
270
+ */
271
+ function composeProjectNameForWorkspace(workspacePath, issueId) {
272
+ const featureFolder = `feature-${issueId.toLowerCase()}`;
273
+ const fallback = `overdeck-${featureFolder}`;
274
+ return resolveDeclaredComposeProjectName(workspacePath, featureFolder).name ?? fallback;
275
+ }
276
+ /**
277
+ * Strict counterpart to `composeProjectNameForWorkspace`. When a devcontainer
278
+ * compose file exists but neither it nor any dev script declares a name,
279
+ * throws instead of silently returning the `overdeck-` fallback — that
280
+ * silent guess is what let a second stack spring up beside a workspace's real
281
+ * `myn-feature-*` stack (PAN-3049). Non-docker workspaces (no compose file at
282
+ * all) still resolve to the `overdeck-` fallback, matching the lenient variant.
283
+ */
284
+ function requireComposeProjectNameForWorkspace(workspacePath, issueId) {
285
+ const featureFolder = `feature-${issueId.toLowerCase()}`;
286
+ const resolved = resolveDeclaredComposeProjectName(workspacePath, featureFolder);
287
+ if (resolved.name) return resolved.name;
288
+ if (!resolved.composeFilePath) return `overdeck-${featureFolder}`;
289
+ throw new Error(`Cannot resolve compose project name for workspace ${workspacePath}: ${resolved.composeFilePath} declares no top-level 'name:' and neither ${join(workspacePath, ".devcontainer", "dev")} nor ${join(workspacePath, "dev")} declares COMPOSE_PROJECT_NAME`);
207
290
  }
208
291
  /**
209
292
  * Best-effort canonical compose project for a workspace — null when the
@@ -331,7 +414,7 @@ function recordWorkspaceStackHealthTransition(issueId, health) {
331
414
  });
332
415
  return true;
333
416
  }
334
- var execFileAsync, DEFAULT_STUCK_CREATED_THRESHOLD_MS, lastHealthByIssue, collectDockerContainerLifecycleSnapshot, getWorkspaceStackHealth;
417
+ var execFileAsync, DEFAULT_STUCK_CREATED_THRESHOLD_MS, COMPOSE_FILE_CANDIDATES, VALID_COMPOSE_PROJECT_NAME_RE, lastHealthByIssue, collectDockerContainerLifecycleSnapshot, getWorkspaceStackHealth;
335
418
  var init_stack_health = __esmMin((() => {
336
419
  init_activity_logger();
337
420
  init_docker_stats();
@@ -339,6 +422,14 @@ var init_stack_health = __esmMin((() => {
339
422
  init_projects();
340
423
  execFileAsync = promisify(execFile);
341
424
  DEFAULT_STUCK_CREATED_THRESHOLD_MS = 12e4;
425
+ COMPOSE_FILE_CANDIDATES = [
426
+ "docker-compose.devcontainer.yml",
427
+ "docker-compose.yml",
428
+ "docker-compose.yaml",
429
+ "compose.yml",
430
+ "compose.yaml"
431
+ ];
432
+ VALID_COMPOSE_PROJECT_NAME_RE = /^[a-z0-9][a-z0-9_-]*$/;
342
433
  lastHealthByIssue = /* @__PURE__ */ new Map();
343
434
  collectDockerContainerLifecycleSnapshot = () => Effect.tryPromise({
344
435
  try: () => execFileAsync("docker", [
@@ -406,6 +497,6 @@ var init_stack_health = __esmMin((() => {
406
497
  });
407
498
  }));
408
499
  //#endregion
409
- export { getWorkspaceStackHealth as a, recordWorkspaceStackHealthTransition as c, init_docker_stats as d, recordDockerContainerLifecycleSnapshot as f, evaluateWorkspaceStackHealth as i, tryComposeProjectNameForWorkspace as l, collectDockerContainerLifecycleSnapshot as n, hasIssueToken as o, composeProjectNameForWorkspace as r, init_stack_health as s, DEFAULT_STUCK_CREATED_THRESHOLD_MS as t, DockerStatsCollector as u };
500
+ export { evaluateWorkspaceStackHealth as a, init_stack_health as c, tryComposeProjectNameForWorkspace as d, DockerStatsCollector as f, defaultWorkspacePath as i, recordWorkspaceStackHealthTransition as l, recordDockerContainerLifecycleSnapshot as m, collectDockerContainerLifecycleSnapshot as n, getWorkspaceStackHealth as o, init_docker_stats as p, composeProjectNameForWorkspace as r, hasIssueToken as s, DEFAULT_STUCK_CREATED_THRESHOLD_MS as t, requireComposeProjectNameForWorkspace as u };
410
501
 
411
- //# sourceMappingURL=stack-health-DqLTiEu4.js.map
502
+ //# sourceMappingURL=stack-health-D_iKwNRg.js.map
@@ -0,0 +1,3 @@
1
+ import { c as init_stack_health, o as getWorkspaceStackHealth } from "./stack-health-D_iKwNRg.js";
2
+ init_stack_health();
3
+ export { getWorkspaceStackHealth };
@@ -1,7 +1,7 @@
1
- import { At as getIssueRecordPath, Gn as init_projects, Pt as init_record, Yn as listProjectsSync, zt as readIssueRecordSync } from "./config-yaml-CxdwhAIA.js";
2
- import { n as init_fs_lock, r as isPidDead } from "./fs-lock-Bre3sGoz.js";
3
- import { i as updateIssueRecord, r as init_record_update } from "./record-update-DaOKS7Wb.js";
4
- import { c as listAllAgentsSync, o as init_agents } from "./agents-J5mEnekq.js";
1
+ import { Q as readIssueRecordSync, U as getIssueRecordPath, cn as init_projects, fn as listProjectsSync, q as init_record } from "./config-yaml-BSCqwmX0.js";
2
+ import { n as init_fs_lock, r as isPidDead } from "./fs-lock-D_GeJtXl.js";
3
+ import { i as updateIssueRecord, r as init_record_update } from "./record-update-CZh46a2f.js";
4
+ import { c as listAllAgentsSync, o as init_agents } from "./agents-Dls7tfJH.js";
5
5
  import { dirname } from "node:path";
6
6
  import { hostname } from "node:os";
7
7
  import { readdirSync } from "node:fs";
@@ -67,4 +67,4 @@ async function patrolStaleTaskClaims() {
67
67
  //#endregion
68
68
  export { patrolStaleTaskClaims };
69
69
 
70
- //# sourceMappingURL=stale-task-claims-Cab_Fo_Z.js.map
70
+ //# sourceMappingURL=stale-task-claims-BYJGqhLI.js.map
@@ -1,3 +1,3 @@
1
- import { i as init_staleness, n as _resetForTests, r as computeBuildStaleness, t as BUILD_INPUT_PATHS } from "./staleness-C-a5rBxF.js";
1
+ import { i as init_staleness, n as _resetForTests, r as computeBuildStaleness, t as BUILD_INPUT_PATHS } from "./staleness-D8WeMUHd.js";
2
2
  init_staleness();
3
3
  export { BUILD_INPUT_PATHS, _resetForTests, computeBuildStaleness };
@@ -141,4 +141,4 @@ var init_staleness = __esmMin((() => {
141
141
  //#endregion
142
142
  export { init_staleness as i, _resetForTests as n, computeBuildStaleness as r, BUILD_INPUT_PATHS as t };
143
143
 
144
- //# sourceMappingURL=staleness-C-a5rBxF.js.map
144
+ //# sourceMappingURL=staleness-D8WeMUHd.js.map
@@ -1,5 +1,5 @@
1
1
  import { n as __esmMin } from "./rolldown-runtime-DNCzzKnI.js";
2
- import { En as projectKey, Gn as init_projects, Tn as init_project_key, ci as getOverdeckHome, fn as STATE_BRANCH_PATHS, hn as init_state_plane, li as init_paths, rr as resolveInfraRepo } from "./config-yaml-CxdwhAIA.js";
2
+ import { Et as STATE_BRANCH_PATHS, Ht as init_project_key, Ut as projectKey, bn as resolveInfraRepo, cn as init_projects, hi as init_paths, kt as init_state_plane, mi as getOverdeckHome } from "./config-yaml-BSCqwmX0.js";
3
3
  import { dirname, join } from "node:path";
4
4
  import { existsSync, readFileSync } from "node:fs";
5
5
  import { mkdir, rm } from "node:fs/promises";
@@ -170,6 +170,27 @@ async function findRecreatedLegacyStatePaths(project) {
170
170
  const legacyStateRoot = project.path;
171
171
  return STATE_BRANCH_PATHS.map((statePath) => join(legacyStateRoot, ".pan", statePath.slice(0, -1))).filter(existsSync);
172
172
  }
173
+ /**
174
+ * Synchronous read-door resolution for legacy synchronous APIs. The async
175
+ * resolver remains authoritative for migration detection; this compatibility
176
+ * door uses only an already-materialized, valid state-worktree marker and
177
+ * otherwise falls back read-only to the legacy checkout.
178
+ */
179
+ function resolveStateReadHomeSync(project, options = {}) {
180
+ const worktreePath = stateWorktreePath(project, options);
181
+ if (readMigrationCompleteMarker(join(worktreePath, "migration-complete.json"))) return {
182
+ root: worktreePath,
183
+ migrated: true
184
+ };
185
+ return {
186
+ root: resolveInfraRepo(project).repoPath,
187
+ migrated: false
188
+ };
189
+ }
190
+ function resolveStateDomainPathSync(project, domain, options = {}) {
191
+ const home = resolveStateReadHomeSync(project, options);
192
+ return home.migrated ? join(home.root, domain) : join(home.root, ".pan", domain);
193
+ }
173
194
  async function addStateWorktree(repoPath, path, signal) {
174
195
  signal?.throwIfAborted();
175
196
  await mkdir(dirname(path), { recursive: true });
@@ -271,6 +292,6 @@ var init_state_home = __esmMin((() => {
271
292
  migrationCache = /* @__PURE__ */ new Map();
272
293
  }));
273
294
  //#endregion
274
- export { findRecreatedLegacyStatePaths as a, isStateMigrated as c, ensureStateWorktree as i, stateWorktreePath as l, STATE_BRANCH as n, init_state_home as o, clearStateMigrationCache as r, inspectStateMigration as s, MIGRATION_COMPLETE_MARKER as t };
295
+ export { findRecreatedLegacyStatePaths as a, isStateMigrated as c, ensureStateWorktree as i, resolveStateDomainPathSync as l, STATE_BRANCH as n, init_state_home as o, clearStateMigrationCache as r, inspectStateMigration as s, MIGRATION_COMPLETE_MARKER as t, stateWorktreePath as u };
275
296
 
276
- //# sourceMappingURL=state-home-722Dkx92.js.map
297
+ //# sourceMappingURL=state-home-DjN8qduI.js.map
@@ -29,4 +29,4 @@ var init_state_mapping = __esmMin((() => {}));
29
29
  //#endregion
30
30
  export { mapGitHubStateToCanonical as n, init_state_mapping as t };
31
31
 
32
- //# sourceMappingURL=state-mapping-CybR81Uf.js.map
32
+ //# sourceMappingURL=state-mapping-DlM7OYRW.js.map
@@ -1,6 +1,6 @@
1
- import { Gn as init_projects, bn as init_state_migration_lock, cn as flushAutoCommits, fn as STATE_BRANCH_PATHS, hn as init_state_plane, ln as init_auto_commit, rr as resolveInfraRepo, yn as acquireStateMigrationLock, zn as getProjectSync } from "./config-yaml-CxdwhAIA.js";
2
- import { o as init_lifecycle } from "./lifecycle-B4Xdb4cY.js";
3
- import { l as stateWorktreePath, n as STATE_BRANCH, o as init_state_home, r as clearStateMigrationCache, t as MIGRATION_COMPLETE_MARKER } from "./state-home-722Dkx92.js";
1
+ import { Et as STATE_BRANCH_PATHS, It as acquireStateMigrationLock, Lt as init_state_migration_lock, St as init_auto_commit, bn as resolveInfraRepo, cn as init_projects, kt as init_state_plane, nn as getProjectSync, xt as flushAutoCommits } from "./config-yaml-BSCqwmX0.js";
2
+ import { o as init_lifecycle } from "./lifecycle-D2X3al0D.js";
3
+ import { n as STATE_BRANCH, o as init_state_home, r as clearStateMigrationCache, t as MIGRATION_COMPLETE_MARKER, u as stateWorktreePath } from "./state-home-DjN8qduI.js";
4
4
  import { dirname, join } from "node:path";
5
5
  import { Effect } from "effect";
6
6
  import { tmpdir } from "node:os";
@@ -484,4 +484,4 @@ async function migrateProjectState(projectKey, options = {}, projectOverride) {
484
484
  //#endregion
485
485
  export { migrateProjectState };
486
486
 
487
- //# sourceMappingURL=state-migrate-2u8wIpoL.js.map
487
+ //# sourceMappingURL=state-migrate-a2p1gtD7.js.map
@@ -0,0 +1,121 @@
1
+ import { n as __esmMin } from "./rolldown-runtime-DNCzzKnI.js";
2
+ import { Ct as pushPendingStateCommits, St as init_auto_commit, cn as init_projects, nn as getProjectSync, wt as queueAutoCommit, xt as flushAutoCommits } from "./config-yaml-BSCqwmX0.js";
3
+ import { l as resolveStateDomainPathSync, o as init_state_home } from "./state-home-DjN8qduI.js";
4
+ import { dirname, join } from "node:path";
5
+ import { Effect } from "effect";
6
+ import { existsSync } from "node:fs";
7
+ import { mkdir, rm, writeFile } from "node:fs/promises";
8
+ import { createHash } from "node:crypto";
9
+ //#region ../../lib/memory/state-mirror.ts
10
+ /**
11
+ * Memory state-domain mirror (PAN-1990 D-9).
12
+ *
13
+ * Durable memory artifacts — daily summaries and pinned-doc descriptors — are
14
+ * mirrored onto the project's `overdeck-state` branch (or its legacy `.pan/`
15
+ * equivalent pre-migration) through the same state-door commit path other
16
+ * domain writers use (queueAutoCommit/flushAutoCommits). Rolling observations,
17
+ * pending/, and status.json are high-churn and NEVER belong on the state
18
+ * branch — writeMemoryStateMirror/removeMemoryStateMirror reject them.
19
+ *
20
+ * A projectId with no classic projects.yaml registration has nothing to
21
+ * mirror to; callers no-op rather than fail, since mirroring is a durability
22
+ * convenience, not the source of truth (the memory-home file is).
23
+ */
24
+ function assertMirrorable(relativePath) {
25
+ const normalized = relativePath.replace(/\\/g, "/");
26
+ if (FORBIDDEN_MIRROR_PREFIXES.some((prefix) => normalized.startsWith(prefix))) throw new MemoryMirrorRejectedError(`refusing to mirror rolling memory path onto the state branch: ${relativePath}`);
27
+ }
28
+ /** Queues + flushes a commit for `targetPath` and returns the raw FlushResult (never throws). */
29
+ function flushMirrorCommit(project, targetPath, subject) {
30
+ queueAutoCommit({
31
+ projectRoot: project.path,
32
+ paths: [targetPath],
33
+ subject
34
+ });
35
+ return Effect.runPromise(flushAutoCommits(project.path));
36
+ }
37
+ async function commitMirror(project, targetPath, subject) {
38
+ const flushed = await flushMirrorCommit(project, targetPath, subject);
39
+ if (flushed.errored || flushed.pushed === false) throw new Error(flushed.reason ?? `memory state mirror commit was not pushed: ${targetPath}`);
40
+ }
41
+ /** Writes `relativePath` under the project's memory state-domain and commits+pushes it through the state door. */
42
+ async function writeMemoryStateMirror(projectId, relativePath, content, subject) {
43
+ assertMirrorable(relativePath);
44
+ const project = getProjectSync(projectId);
45
+ if (!project) return;
46
+ const target = join(resolveStateDomainPathSync(project, MEMORY_STATE_DOMAIN), relativePath);
47
+ await mkdir(dirname(target), { recursive: true });
48
+ await writeFile(target, content, "utf8");
49
+ await commitMirror(project, target, subject);
50
+ }
51
+ /**
52
+ * Deletes `relativePath` under the project's memory state-domain and
53
+ * commits+pushes the removal.
54
+ *
55
+ * Review fix (cycle 3, corrected in cycle 4): a prior call can have already
56
+ * deleted `target` from disk and either (a) fully committed that removal
57
+ * locally but failed only at the push step, or (b) failed at `git add`/`git
58
+ * commit` itself (index lock, hook/signing failure, branch mismatch) — in
59
+ * which case NOTHING was committed at all. Cycle 3's fix treated both the
60
+ * same way (push-only retry), which silently "succeeds" for case (b): there
61
+ * is nothing ahead to push, `git push` reports success trivially, and the
62
+ * remote mirror is never actually removed while the caller believes it was.
63
+ *
64
+ * The fix: re-run the SAME add+commit+push flow first — `git add` on a path
65
+ * that no longer exists on disk but is still tracked STAGES the deletion
66
+ * (identical to `git rm`), so this correctly recovers case (b) by actually
67
+ * committing the deletion this time. Only when that reports "nothing to
68
+ * commit" (a real diff never existed for this attempt — the deletion is
69
+ * either already fully committed, or this pin's mirror was never written in
70
+ * the first place) does it fall back to retrying the push alone, which
71
+ * covers case (a) and is a safe no-op for "never mirrored."
72
+ */
73
+ async function removeMemoryStateMirror(projectId, relativePath, subject) {
74
+ assertMirrorable(relativePath);
75
+ const project = getProjectSync(projectId);
76
+ if (!project) return;
77
+ const target = join(resolveStateDomainPathSync(project, MEMORY_STATE_DOMAIN), relativePath);
78
+ if (!existsSync(target)) {
79
+ const flushed = await flushMirrorCommit(project, target, subject);
80
+ if (flushed.errored) throw new Error(flushed.reason ?? `memory state mirror retry commit failed: ${target}`);
81
+ if (flushed.committed) {
82
+ if (flushed.pushed === false) throw new Error(flushed.reason ?? `memory state mirror retry commit was not pushed: ${target}`);
83
+ return;
84
+ }
85
+ const push = await Effect.runPromise(pushPendingStateCommits(project.path));
86
+ if (push && !push.pushed) throw new Error(push.reason ?? `memory state mirror retry-push was not confirmed: ${target}`);
87
+ return;
88
+ }
89
+ await rm(target);
90
+ await commitMirror(project, target, subject);
91
+ }
92
+ async function mirrorDailySummary(projectId, workspaceName, date, markdown) {
93
+ await writeMemoryStateMirror(projectId, join("summaries", projectId, `${workspaceName}-${date}.md`), markdown, `chore(memory): mirror daily summary ${projectId}/${workspaceName}-${date}`);
94
+ }
95
+ /**
96
+ * Non-blocking review fix: replacing `/` with `__` made `a/b.md` and
97
+ * `a__b.md` map to the same filename, so pinning one could silently overwrite
98
+ * or delete the other's mirror descriptor. Hashing docPath instead of
99
+ * transliterating it makes the filename collision-resistant regardless of
100
+ * what characters the path contains; docPath itself is still stored inside
101
+ * the JSON descriptor content for readability.
102
+ */
103
+ function pinMirrorPath(scope, scopeId, docPath) {
104
+ return join("pins", `${scope}__${scopeId}__${createHash("sha256").update(docPath).digest("hex").slice(0, 16)}.json`);
105
+ }
106
+ async function unmirrorPin(projectId, scope, scopeId, docPath) {
107
+ await removeMemoryStateMirror(projectId, pinMirrorPath(scope, scopeId, docPath), `chore(memory): unmirror pin ${scope}:${scopeId}:${docPath}`);
108
+ }
109
+ var MEMORY_STATE_DOMAIN, FORBIDDEN_MIRROR_PREFIXES, MemoryMirrorRejectedError;
110
+ var init_state_mirror = __esmMin((() => {
111
+ init_projects();
112
+ init_state_home();
113
+ init_auto_commit();
114
+ MEMORY_STATE_DOMAIN = "memory";
115
+ FORBIDDEN_MIRROR_PREFIXES = ["observations/", "pending/"];
116
+ MemoryMirrorRejectedError = class extends Error {};
117
+ }));
118
+ //#endregion
119
+ export { mirrorDailySummary as n, unmirrorPin as r, init_state_mirror as t };
120
+
121
+ //# sourceMappingURL=state-mirror-Cv_XgvT5.js.map
@@ -1,2 +1,2 @@
1
- import { r as shouldSkipIdlePokeForAgent } from "./stuck-remediation-CC6q3eqQ.js";
1
+ import { r as shouldSkipIdlePokeForAgent } from "./stuck-remediation-CbCRSz1v.js";
2
2
  export { shouldSkipIdlePokeForAgent };