@overdeck/desktop 0.45.24 → 0.47.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (528) hide show
  1. package/drizzle/overdeck/0000_overdeck_init.sql +36 -1
  2. package/package.json +1 -1
  3. package/server/{acceptance-criteria-DDCnXF58.js → acceptance-criteria-10Ur5Dne.js} +2 -2
  4. package/server/activity-logger-CMthG6Vd.js +3 -0
  5. package/server/{activity-logger-DDlOIAML.js → activity-logger-CyteR4JO.js} +24 -13
  6. package/server/{advancing-selfheal-BVwW4qRn.js → advancing-selfheal-BNwqxseD.js} +6 -6
  7. package/server/{agent-gc-CHcnvonI.js → agent-gc-C3h9Or3a.js} +5 -5
  8. package/server/agent-state-CYXJVG72.js +3 -0
  9. package/server/agent-state-service-C63p_ftq.js +2 -0
  10. package/server/{agent-state-service-BsgWxZuB.js → agent-state-service-Ds6OeFvo.js} +15 -9
  11. package/server/{agents-EbI0zCJl.js → agents-J5mEnekq.js} +23 -16
  12. package/server/agents-ePFVoZbu.js +3 -0
  13. package/server/archive-planning-B2XplFzT.js +2 -0
  14. package/server/{archive-planning-Du25Jtst.js → archive-planning-BwhxeP7C.js} +22 -26
  15. package/server/{artifact-index-jobs-CbEDfCDu.js → artifact-index-jobs-D1q_vR3V.js} +2 -2
  16. package/server/{assemble-J2ZZ2C15.js → assemble-Bgwqv-Ro.js} +2 -2
  17. package/server/auto-spawn-consent-CQ9Bi9q6.js +1141 -0
  18. package/server/{backlog-auto-trigger-2R2jog7n.js → backlog-auto-trigger-n1lzPgN4.js} +3 -3
  19. package/server/{behavior-B3exJ42O.js → behavior-td6-xhQk.js} +2 -2
  20. package/server/boot-reconciled-stop-events-C7gGe3oB.js +44 -0
  21. package/server/bridge-pool-patrol-CYH2OLb5.js +136 -0
  22. package/server/{briefing-freshness-D1wzUIWv.js → briefing-freshness-DRqZ8lAz.js} +2 -2
  23. package/server/{build-info-Ie_D0_BT.js → build-info-7yiEpl6u.js} +5 -3
  24. package/server/{build-info-CZk_TITh.js → build-info-CpG__c63.js} +1 -1
  25. package/server/{checkpoint-manager-DwbQoqrC.js → checkpoint-manager-CkKmB0wZ.js} +1 -1
  26. package/server/{checkpoint-manager-BI1Wxoku.js → checkpoint-manager-DBcyNR8w.js} +2 -2
  27. package/server/checkpoint-worker.js +1 -1
  28. package/server/{checkpoints-CQB1h765.js → checkpoints-D95apurL.js} +2 -2
  29. package/server/{checkpoints-BJIs5QIA.js → checkpoints-Wm963lm8.js} +1 -1
  30. package/server/{claude-hooks-provision-8Ngo8TpT.js → claude-hooks-provision-4RPxNkE8.js} +1 -1
  31. package/server/{claude-hooks-provision-D8GXF3_s.js → claude-hooks-provision-Bjitl9aI.js} +13 -2
  32. package/server/{claude-permissions-DNWEVV6z.js → claude-permissions-CpbpvUQ2.js} +2 -2
  33. package/server/{claude-settings-overlay-DWy-Bb4Y.js → claude-settings-overlay-BzkHYDwR.js} +1 -1
  34. package/server/{claude-settings-overlay-CEdaqpWI.js → claude-settings-overlay-_H9Yrzab.js} +2 -2
  35. package/server/cli-CjOCSnfj.js +3 -0
  36. package/server/{cli-RoOx5DUf.js → cli-Cte9ZFGn.js} +9 -9
  37. package/server/{cliproxy-C8a1vtTU.js → cliproxy-C5fMJ7rY.js} +2 -2
  38. package/server/{cliproxy-fHfIeiGd.js → cliproxy-DaAbWMjC.js} +1 -1
  39. package/server/{close-issue-DoOifFIK.js → close-issue-BPh1ARCF.js} +5 -5
  40. package/server/{closed-issue-reaper-CktPXo8m.js → closed-issue-reaper-DHRfRMrp.js} +1 -1
  41. package/server/{closed-issue-reaper-Bk3SU4RC.js → closed-issue-reaper-DoOZqGFK.js} +88 -17
  42. package/server/{codex-BZXGhUVB.js → codex-BzGDW_d3.js} +36 -7
  43. package/server/{codex-GcHuUF-k.js → codex-o8FJwzmy.js} +1 -1
  44. package/server/{codex-parser-CFZ1_1Jl.js → codex-parser-Dt-ycU8L.js} +2 -2
  45. package/server/compaction-continuation-CvXpbZ4w.js +200 -0
  46. package/server/{config-CKxYiCmX.js → config-Bi3u1VK7.js} +4 -3
  47. package/server/{config-BZ0sHTju.js → config-BvLe652W.js} +2 -2
  48. package/server/{config-DzV30TOm.js → config-CL3Gyvja.js} +1 -1
  49. package/server/{config-yaml-DySPNmKN.js → config-yaml-CxdwhAIA.js} +276 -14
  50. package/server/conflict-gate-CX80JYYS.js +3 -0
  51. package/server/{conflict-gate-BaCVrH-N.js → conflict-gate-E4nt7ZeS.js} +60 -14
  52. package/server/{context-layers-igZ4FI4_.js → context-layers-C_IIysnm.js} +3 -3
  53. package/server/{context-layers-BrPmE__h.js → context-layers-DAG83UZt.js} +2 -2
  54. package/server/{control-settings-BQp7_4uD.js → control-settings-CiqGxXnc.js} +56 -19
  55. package/server/{conversation-compaction-eQB5CkOe.js → conversation-compaction-BE3CNtHF.js} +1 -1
  56. package/server/{conversation-compaction-CgrR8YYp.js → conversation-compaction-D6-yLtqt.js} +8 -8
  57. package/server/{conversation-service-DPJ71F33.js → conversation-service-DBxoYMDl.js} +10 -8
  58. package/server/conversation-service-D_TS2b1r.js +3 -0
  59. package/server/{conversations-CAsJF9kh.js → conversations-BKDVpB-3.js} +1 -1
  60. package/server/{conversations-6AfUfbwc.js → conversations-D0UEdLtk.js} +4 -4
  61. package/server/{cost-R-m6Yi-W.js → cost-DS1s0DbG.js} +3 -3
  62. package/server/{cost-B2ddP6wq.js → cost-DpgYmYqR.js} +12 -2
  63. package/server/{cost-sync-BsN6ER0n.js → cost-sync-tOCCGnEt.js} +3 -3
  64. package/server/{dag-B1ucnjDU.js → dag-BtkgLeqY.js} +2 -2
  65. package/server/{dangerous-git-ops-BXqeWVSf.js → dangerous-git-ops-CFLykHWt.js} +1 -1
  66. package/server/dashboard-db-worker.js +7 -7
  67. package/server/deacon-BIblC-WX.js +4 -0
  68. package/server/{deacon-nudge-log-6wVqAaqz.js → deacon-nudge-log-B08gF0mh.js} +3 -3
  69. package/server/{deacon-CU_cAYSR.js → deacon-pLRLbPvR.js} +3308 -2707
  70. package/server/deacon-pending-lifecycle-B-Io84AP.js +33 -0
  71. package/server/deacon-swarm-B1XkIvfr.js +2 -0
  72. package/server/{deacon-swarm-BXZZ1Z2-.js → deacon-swarm-v5PMun-m.js} +15 -14
  73. package/server/deacon.js +14 -19
  74. package/server/dead-end-trip-D8A3msX9.js +13 -0
  75. package/server/delivery-BX9HR4wQ.js +3 -0
  76. package/server/{deploy-patrol-AiFoP8dw.js → deploy-patrol-sYgOxLeb.js} +69 -18
  77. package/server/deploy-queue-VfohaPN_.js +169 -0
  78. package/server/deploy-queue-gHJBycaF.js +3 -0
  79. package/server/deploy-window-CFRZ0-kt.js +3 -0
  80. package/server/{deploy-window-C3F-tihF.js → deploy-window-D4DQb8VP.js} +40 -16
  81. package/server/{dev-supervisor-bcOWqdQE.js → dev-supervisor-DiOBDM1c.js} +2 -2
  82. package/server/{devcontainer-renderer-_d6XhyND.js → devcontainer-renderer-BUOIlfgD.js} +3 -3
  83. package/server/dist-B3YPQa5A.js +3 -0
  84. package/server/{dist-Cb_0uvpS.js → dist-C3A8B8wM.js} +1 -1
  85. package/server/{dist-src-BSoS7mkd.js → dist-src-C0adpegX.js} +1 -1
  86. package/server/{docker-DcMTFTUC.js → docker-BJzlkqYB.js} +2 -2
  87. package/server/docker-Y3PElJb0.js +3 -0
  88. package/server/dod-DlNtcH6n.js +91 -0
  89. package/server/durable-review-pipeline-Cibps-Rg.js +20 -0
  90. package/server/durable-review-pipeline-DP6bIcOY.js +3 -0
  91. package/server/{ensure-devcontainer-DNi-ono3.js → ensure-devcontainer-BAofzBPv.js} +4 -4
  92. package/server/{ensure-devcontainer-BZgOhRo7.js → ensure-devcontainer-DMAbWqtQ.js} +1 -1
  93. package/server/{esm-shims-OSHAYaS1.js → esm-shims-BeObUkaw.js} +1 -1
  94. package/server/{event-store-EV2cMiXj.js → event-store-5UKzh9Jf.js} +1 -1
  95. package/server/{event-store-CQL6NeqB.js → event-store-CrHcVC5_.js} +23 -4
  96. package/server/{events-DTfAe4My.js → events-BNrvchBg.js} +3 -3
  97. package/server/{events-BTdrdEq8.js → events-CF8QDbuV.js} +1 -1
  98. package/server/{factory-CFibJuaw.js → factory-Cmm9Hsho.js} +5 -5
  99. package/server/{feature-registry-population-DKZFMbFt.js → feature-registry-population-B6HpNWRy.js} +4 -4
  100. package/server/{feature-registry-storage-BdPuLcBX.js → feature-registry-storage-DJEFx1Pf.js} +2 -2
  101. package/server/{features-ez2271oH.js → features-D5km80UI.js} +2 -2
  102. package/server/{feedback-target-CoFDHiM8.js → feedback-target-BJ5ZADsu.js} +1 -1
  103. package/server/{feedback-target-7mqqwrX6.js → feedback-target-DSxEL6lP.js} +8 -8
  104. package/server/{feedback-writer-CY5L1lB7.js → feedback-writer-C27Hak8a.js} +5 -5
  105. package/server/{feedback-writer-D3a22RCd.js → feedback-writer-CoB9Z6aU.js} +1 -1
  106. package/server/{flywheel-DHrgCphM.js → flywheel-BHx8XuMr.js} +47 -20
  107. package/server/{flywheel-SVF02Jpq.js → flywheel-DZZdtiOL.js} +1 -1
  108. package/server/{flywheel-DzGtWnJ1.js → flywheel-f662Q-y2.js} +16 -15
  109. package/server/flywheel-merge-order-D_xLMbJU.js +462 -0
  110. package/server/flywheel-merge-order-Dil0LmdN.js +2 -0
  111. package/server/forge-B5o319qI.js +3 -0
  112. package/server/forge-BaKGCya6.js +383 -0
  113. package/server/{from-kNxT0bZC.js → from-B3tZbB55.js} +1 -1
  114. package/server/fs-lock-Bre3sGoz.js +130 -0
  115. package/server/{fts-db-CE46vDkZ.js → fts-db-IVc4_M3f.js} +2 -2
  116. package/server/{fts-operations-CqY6zl-i.js → fts-operations-B9jG8wa3.js} +2 -2
  117. package/server/{git-utils-CRw2zLPC.js → git-utils-CsvYfJU3.js} +30 -5
  118. package/server/git-utils-Xg4PFN45.js +3 -0
  119. package/server/{github-app-ClZ2lk8D.js → github-app-Bmg4R9mv.js} +1 -1
  120. package/server/{github-app-C3QrAUd0.js → github-app-CmNk0zLU.js} +3 -3
  121. package/server/{github-client-DfQYVUaw.js → github-client-B6KM9_wA.js} +1 -1
  122. package/server/{github-client-BnIsSrEN.js → github-client-qazkPrg0.js} +3 -3
  123. package/server/github-pr-lookup-DAcVeRLK.js +58 -0
  124. package/server/{harness-binary-DPUi-Pv8.js → harness-binary-BSpiXaLw.js} +2 -2
  125. package/server/{harness-resolve-3lNZkyT4.js → harness-resolve-BAJu5MX8.js} +4 -4
  126. package/server/{health-events-BDOHby5Q.js → health-events-2Z6Wa9SM.js} +1 -1
  127. package/server/{health-events-BBcTYQKU.js → health-events-BwX32k8d.js} +2 -2
  128. package/server/{hooks-DPVX1rwQ.js → hooks-D1g1jKLI.js} +1 -1
  129. package/server/{hooks-CKZgXlJb.js → hooks-DbtbimEf.js} +2 -2
  130. package/server/{hume-Cz8igP9E.js → hume-DXNiu6nQ.js} +2 -2
  131. package/server/hume-VUCNbTgn.js +3 -0
  132. package/server/{idle-stack-reaper-CuLF0j2H.js → idle-stack-reaper-CRA1e0jr.js} +1 -1
  133. package/server/{idle-stack-reaper-DDIRwxUY.js → idle-stack-reaper-Cy-dQzW4.js} +99 -6
  134. package/server/in-flight-guard-D-sSkADM.js +45 -0
  135. package/server/{infra-BEqFxlJc.js → infra-BDQDRopn.js} +81 -5
  136. package/server/{injection-C8aiVJrF.js → injection-6AGnXxlj.js} +7 -7
  137. package/server/{injection-CPUIqNhI.js → injection-Bl8d_jHZ.js} +1 -1
  138. package/server/inspect-agent-CUwVmr2h.js +2 -0
  139. package/server/{inspect-agent-BLuJ1AkT.js → inspect-agent-nXdIptyh.js} +26 -25
  140. package/server/{internal-token-s0-oKybJ.js → internal-token-DzK385vD.js} +2 -2
  141. package/server/{internal-token-BrcU6qfe.js → internal-token-Ias7N8Kg.js} +1 -1
  142. package/server/{io-C9kF1wtJ.js → io-B00PBNku.js} +44 -27
  143. package/server/{issue-closed-CDJk4pIp.js → issue-closed-BehTG1be.js} +8 -8
  144. package/server/{issue-lifecycle-ojZAzDBP.js → issue-lifecycle-Birk-ifu.js} +42 -30
  145. package/server/{issue-lifecycle-B8sZHVHh.js → issue-lifecycle-BqSuQvbn.js} +1 -1
  146. package/server/{issue-service-singleton-BvJ09SaR.js → issue-service-singleton-B2wXiIlw.js} +1 -1
  147. package/server/{issue-service-singleton-Yx5DdmVJ.js → issue-service-singleton-C6ZduvuY.js} +10 -10
  148. package/server/{issues-BMmP_77e.js → issues-DQ5-LatB.js} +2 -2
  149. package/server/{jsonl-parser-BXSlHwEh.js → jsonl-parser-BDpnGFCl.js} +5 -4
  150. package/server/{label-cleanup-B0UJwnv5.js → label-cleanup-Dwnky8FG.js} +3 -3
  151. package/server/{lifecycle-xmBfK2GJ.js → lifecycle-B3s4sM1G.js} +6 -7
  152. package/server/{lifecycle-yPd___5E.js → lifecycle-B4Xdb4cY.js} +2 -2
  153. package/server/{lifecycle-io-DPo7x11I.js → lifecycle-io-CzTHEooc.js} +1 -1
  154. package/server/{lifecycle-io-BREGpnLk.js → lifecycle-io-DCo6s6ks.js} +5 -5
  155. package/server/{linear-client-BsuUvkdA.js → linear-client-9uq7fhiV.js} +3 -3
  156. package/server/{linear-client-CTskEeT_.js → linear-client-CnbtHiic.js} +1 -1
  157. package/server/linear-mcp-auth-BxUOzswy.js +280 -0
  158. package/server/linear-mcp-auth-D46fBCLf.js +2 -0
  159. package/server/memory-fts-worker.js +1 -1
  160. package/server/{merge-CefQNAnq.js → merge-DiW9RdSB.js} +13 -11
  161. package/server/{merge-agent-4WOWlSYA.js → merge-agent-BLUgRsz3.js} +234 -84
  162. package/server/{merge-agent-CKkgIBPB.js → merge-agent-DQTXZk8z.js} +1 -1
  163. package/server/{merge-batch-ClFn2T-y.js → merge-batch-Cp_j9BGk.js} +1 -1
  164. package/server/merge-completeness-B46KqhtY.js +277 -0
  165. package/server/merge-completeness-BLbB5-6n.js +3 -0
  166. package/server/merge-ops-1abz6O_P.js +2 -0
  167. package/server/merge-rebase-CJJVAJuz.js +2 -0
  168. package/server/{merge-rebase-BfaTyXsw.js → merge-rebase-DIkBjgwq.js} +3 -3
  169. package/server/{merge-set-DJ8-UErs.js → merge-set-CBgHfwM0.js} +11 -5
  170. package/server/merge-set-DeUxFsC3.js +3 -0
  171. package/server/{merge-B1DiziGU.js → merge-sr8Nrnmi.js} +1 -1
  172. package/server/merge-sync-CpGmk6Ch.js +3 -0
  173. package/server/{merge-sync-VPV28g0g.js → merge-sync-kr4vqyjM.js} +409 -153
  174. package/server/{merge-train-CHopycP0.js → merge-train-Dmrcus12.js} +18 -8
  175. package/server/{merge-train-deps-D1cOZzy2.js → merge-train-deps-D_uGX91G.js} +21 -15
  176. package/server/merge-verification-NvaAd8CZ.js +220 -0
  177. package/server/merged-docker-cleanup-worker-DH_hrGPI.js +3 -0
  178. package/server/merged-docker-cleanup-worker-Y1R06TEl.js +107 -0
  179. package/server/{multipart-parser-duPAfSBw.js → multipart-parser-R-oC8dQg.js} +2 -2
  180. package/server/{no-resume-mode-Nw29vaFb.js → no-resume-mode-BgD0JUmM.js} +1 -1
  181. package/server/node_modules/.package-lock.json +30 -30
  182. package/server/node_modules/@effect/platform-node/node_modules/@effect/platform-node-shared/package.json +3 -3
  183. package/server/node_modules/@google-cloud/common/package.json +2 -2
  184. package/server/node_modules/@types/node/README.md +1 -1
  185. package/server/node_modules/@types/node/crypto.d.ts +1 -1
  186. package/server/node_modules/@types/node/package.json +2 -2
  187. package/server/node_modules/gaxios/build/cjs/tsconfig.cjs.tsbuildinfo +1 -1
  188. package/server/node_modules/gaxios/build/esm/tsconfig.tsbuildinfo +1 -1
  189. package/server/node_modules/gaxios/package.json +1 -1
  190. package/server/node_modules/google-auth-library/build/src/auth/googleauth.js +24 -19
  191. package/server/node_modules/google-auth-library/package.json +1 -1
  192. package/server/node_modules/google-gax/build/protos/google/api/auth.proto +2 -1
  193. package/server/node_modules/google-gax/build/protos/google/api/backend.proto +12 -1
  194. package/server/node_modules/google-gax/build/protos/google/api/billing.proto +1 -1
  195. package/server/node_modules/google-gax/build/protos/google/api/client.proto +165 -53
  196. package/server/node_modules/google-gax/build/protos/google/api/cloudquotas/v1/resources.proto +1 -1
  197. package/server/node_modules/google-gax/build/protos/google/api/cloudquotas/v1beta/quota_adjuster_settings.proto +7 -3
  198. package/server/node_modules/google-gax/build/protos/google/api/cloudquotas/v1beta/resources.proto +1 -1
  199. package/server/node_modules/google-gax/build/protos/google/api/config_change.proto +1 -1
  200. package/server/node_modules/google-gax/build/protos/google/api/context.proto +1 -1
  201. package/server/node_modules/google-gax/build/protos/google/api/control.proto +3 -3
  202. package/server/node_modules/google-gax/build/protos/google/api/distribution.proto +1 -1
  203. package/server/node_modules/google-gax/build/protos/google/api/documentation.proto +1 -1
  204. package/server/node_modules/google-gax/build/protos/google/api/endpoint.proto +1 -1
  205. package/server/node_modules/google-gax/build/protos/google/api/error_reason.proto +186 -1
  206. package/server/node_modules/google-gax/build/protos/google/api/expr/v1alpha1/checked.proto +31 -3
  207. package/server/node_modules/google-gax/build/protos/google/api/expr/v1alpha1/eval.proto +8 -9
  208. package/server/node_modules/google-gax/build/protos/google/api/expr/v1alpha1/explain.proto +1 -2
  209. package/server/node_modules/google-gax/build/protos/google/api/expr/v1alpha1/syntax.proto +20 -22
  210. package/server/node_modules/google-gax/build/protos/google/api/expr/v1alpha1/value.proto +2 -3
  211. package/server/node_modules/google-gax/build/protos/google/api/field_behavior.proto +1 -1
  212. package/server/node_modules/google-gax/build/protos/google/api/field_info.proto +1 -1
  213. package/server/node_modules/google-gax/build/protos/google/api/http.proto +1 -1
  214. package/server/node_modules/google-gax/build/protos/google/api/httpbody.proto +1 -1
  215. package/server/node_modules/google-gax/build/protos/google/api/label.proto +1 -1
  216. package/server/node_modules/google-gax/build/protos/google/api/launch_stage.proto +1 -1
  217. package/server/node_modules/google-gax/build/protos/google/api/log.proto +1 -1
  218. package/server/node_modules/google-gax/build/protos/google/api/logging.proto +1 -1
  219. package/server/node_modules/google-gax/build/protos/google/api/metric.proto +1 -1
  220. package/server/node_modules/google-gax/build/protos/google/api/monitored_resource.proto +1 -1
  221. package/server/node_modules/google-gax/build/protos/google/api/monitoring.proto +1 -1
  222. package/server/node_modules/google-gax/build/protos/google/api/policy.proto +1 -1
  223. package/server/node_modules/google-gax/build/protos/google/api/quota.proto +1 -1
  224. package/server/node_modules/google-gax/build/protos/google/api/resource.proto +1 -1
  225. package/server/node_modules/google-gax/build/protos/google/api/routing.proto +8 -4
  226. package/server/node_modules/google-gax/build/protos/google/api/service.proto +2 -3
  227. package/server/node_modules/google-gax/build/protos/google/api/source_info.proto +1 -1
  228. package/server/node_modules/google-gax/build/protos/google/api/system_parameter.proto +1 -1
  229. package/server/node_modules/google-gax/build/protos/google/api/usage.proto +7 -27
  230. package/server/node_modules/google-gax/build/protos/google/api/visibility.proto +1 -1
  231. package/server/node_modules/google-gax/build/protos/google/longrunning/operations.proto +20 -1
  232. package/server/node_modules/google-gax/build/protos/google/protobuf/any.proto +52 -108
  233. package/server/node_modules/google-gax/build/protos/google/protobuf/compiler/ruby/ruby_generated_code.proto +2 -0
  234. package/server/node_modules/google-gax/build/protos/google/protobuf/cpp_features.proto +21 -1
  235. package/server/node_modules/google-gax/build/protos/google/protobuf/cpp_file_options.proto +24 -0
  236. package/server/node_modules/google-gax/build/protos/google/protobuf/cpp_options.proto +15 -0
  237. package/server/node_modules/google-gax/build/protos/google/protobuf/descriptor.proto +118 -30
  238. package/server/node_modules/google-gax/build/protos/google/protobuf/field_mask.proto +16 -18
  239. package/server/node_modules/google-gax/build/protos/google/protobuf/internal_options.proto +8 -1
  240. package/server/node_modules/google-gax/build/protos/google/protobuf/json/json_enumval_custom_string.proto +26 -0
  241. package/server/node_modules/google-gax/build/protos/google/protobuf/json_enumvalue_options.proto +29 -0
  242. package/server/node_modules/google-gax/build/protos/google/protobuf/json_options.proto +14 -0
  243. package/server/node_modules/google-gax/build/protos/google/protobuf/struct.proto +38 -22
  244. package/server/node_modules/google-gax/build/protos/google/protobuf/test_protos/forced_micro_string.proto +3 -0
  245. package/server/node_modules/google-gax/build/protos/google/protobuf/test_protos/repeated_field_proxy_import_message.proto +14 -0
  246. package/server/node_modules/google-gax/build/protos/google/protobuf/timestamp.proto +9 -8
  247. package/server/node_modules/google-gax/build/protos/google/protobuf/util/json_format_proto3.proto +18 -0
  248. package/server/node_modules/google-gax/build/protos/google/rpc/code.proto +1 -1
  249. package/server/node_modules/google-gax/build/protos/google/rpc/context/attribute_context.proto +7 -2
  250. package/server/node_modules/google-gax/build/protos/google/rpc/context/audit_context.proto +1 -1
  251. package/server/node_modules/google-gax/build/protos/google/rpc/error_details.proto +5 -5
  252. package/server/node_modules/google-gax/build/protos/google/rpc/http.proto +1 -1
  253. package/server/node_modules/google-gax/build/protos/google/rpc/status.proto +1 -2
  254. package/server/node_modules/google-gax/build/protos/google/type/calendar_period.proto +1 -1
  255. package/server/node_modules/google-gax/build/protos/google/type/color.proto +9 -10
  256. package/server/node_modules/google-gax/build/protos/google/type/date.proto +11 -9
  257. package/server/node_modules/google-gax/build/protos/google/type/datetime.proto +17 -17
  258. package/server/node_modules/google-gax/build/protos/google/type/dayofweek.proto +1 -1
  259. package/server/node_modules/google-gax/build/protos/google/type/decimal.proto +11 -13
  260. package/server/node_modules/google-gax/build/protos/google/type/expr.proto +1 -1
  261. package/server/node_modules/google-gax/build/protos/google/type/fraction.proto +1 -1
  262. package/server/node_modules/google-gax/build/protos/google/type/interval.proto +1 -2
  263. package/server/node_modules/google-gax/build/protos/google/type/latlng.proto +4 -5
  264. package/server/node_modules/google-gax/build/protos/google/type/localized_text.proto +3 -3
  265. package/server/node_modules/google-gax/build/protos/google/type/money.proto +1 -2
  266. package/server/node_modules/google-gax/build/protos/google/type/month.proto +1 -1
  267. package/server/node_modules/google-gax/build/protos/google/type/phone_number.proto +20 -15
  268. package/server/node_modules/google-gax/build/protos/google/type/postal_address.proto +39 -39
  269. package/server/node_modules/google-gax/build/protos/google/type/quaternion.proto +4 -4
  270. package/server/node_modules/google-gax/build/protos/google/type/timeofday.proto +11 -8
  271. package/server/node_modules/google-gax/package.json +5 -5
  272. package/server/node_modules/retry-request/package.json +4 -4
  273. package/server/node_modules/teeny-request/package.json +5 -5
  274. package/server/node_modules/undici/lib/cache/memory-cache-store.js +54 -9
  275. package/server/node_modules/undici/lib/cache/sqlite-cache-store.js +7 -1
  276. package/server/node_modules/undici/lib/core/request.js +12 -1
  277. package/server/node_modules/undici/lib/dispatcher/client-h1.js +11 -2
  278. package/server/node_modules/undici/lib/global.js +36 -16
  279. package/server/node_modules/undici/lib/handler/cache-handler.js +236 -116
  280. package/server/node_modules/undici/lib/handler/cache-revalidation-handler.js +3 -3
  281. package/server/node_modules/undici/lib/handler/retry-handler.js +24 -0
  282. package/server/node_modules/undici/lib/interceptor/cache.js +152 -62
  283. package/server/node_modules/undici/lib/interceptor/decompress.js +5 -2
  284. package/server/node_modules/undici/lib/util/cache.js +328 -66
  285. package/server/node_modules/undici/lib/util/date.js +23 -6
  286. package/server/node_modules/undici/lib/web/cookies/util.js +78 -8
  287. package/server/node_modules/undici/package.json +1 -1
  288. package/server/{orphan-proposed-reconciler-BvKkWMJQ.js → orphan-proposed-reconciler-B6vJHxtX.js} +242 -34
  289. package/server/{orphan-proposed-reconciler-CTSGcK8p.js → orphan-proposed-reconciler-DcgTPPFY.js} +1 -1
  290. package/server/package-lock.json +31 -31
  291. package/server/package.json +1 -1
  292. package/server/{pan-dir-B0c3w0Ya.js → pan-dir-DMzF5wne.js} +25 -11
  293. package/server/{paths-D-xWGHdh.js → paths-sJBSb7Ul.js} +2 -2
  294. package/server/pending-lifecycle-claim-DilzGfgk.js +110 -0
  295. package/server/persistent-logger-H_VjuOu7.js +57 -0
  296. package/server/{pickup-DUCLWrJY.js → pickup-DWhqzliO.js} +4 -3
  297. package/server/pipeline-membership-C88VBnhJ.js +3 -0
  298. package/server/pipeline-membership-D9SBvItj.js +57 -0
  299. package/server/pipeline-membership-gather-4eR-7Tqy.js +3 -0
  300. package/server/pipeline-membership-gather-CeVGnNJ2.js +593 -0
  301. package/server/{pipeline-notifier-BXkJzDC4.js → pipeline-notifier-D0ALV6Nw.js} +2 -2
  302. package/server/{pipeline-notifier-BJr8gQX6.js → pipeline-notifier-DT6xLFao.js} +1 -1
  303. package/server/post-merge-lifecycle-worker-8HIeS_J6.js +50 -0
  304. package/server/{project-pipelines-C0MWUeCU.js → project-pipelines-9SKt2bEc.js} +2 -2
  305. package/server/{project-repos-B6GycDh9.js → project-repos-B5pIphKg.js} +7 -3
  306. package/server/project-repos-DPjOdfPa.js +3 -0
  307. package/server/projects-_n3Zui6K.js +3 -0
  308. package/server/{prompts-DxzFXuLl.js → prompts-CgzMBvQF.js} +2 -2
  309. package/server/{providers-u4Ga0jOr.js → providers-BI1mOBQ4.js} +1 -1
  310. package/server/{providers-qQAwGQDW.js → providers-BJQSnAAp.js} +7 -7
  311. package/server/public/assets/{chunk-BO2N2NFS-BamJdinX.js → chunk-BO2N2NFS-D_pGACYN.js} +4 -4
  312. package/server/public/assets/{diagram-OG6HWLK6-DfOB8-w4.js → diagram-OG6HWLK6-BO6fe3hH.js} +1 -1
  313. package/server/public/assets/{dist-ByIuzMQW.js → dist-5zingMiA.js} +3 -3
  314. package/server/public/assets/{dist-D7zYSEA6.js → dist-CVxhbI2E.js} +1 -1
  315. package/server/public/assets/{ganttDiagram-6RSMTGT7-EdmRyXL3.js → ganttDiagram-6RSMTGT7-Bgj4A7kp.js} +1 -1
  316. package/server/public/assets/{highlighted-body-OFNGDK62-MerOfTX8.js → highlighted-body-OFNGDK62-DNPK7_cm.js} +1 -1
  317. package/server/public/assets/index-DEpY-D1O.js +807 -0
  318. package/server/public/assets/index-Ddkcz3WT.css +1 -0
  319. package/server/public/assets/{linear-BBbArIcK.js → linear-BB0jQT16.js} +1 -1
  320. package/server/public/assets/mermaid-GHXKKRXX-BzPfaQJ1.js +1 -0
  321. package/server/public/assets/{pieDiagram-4H26LBE5-BKIddiJN.js → pieDiagram-4H26LBE5-DeGIzzpZ.js} +1 -1
  322. package/server/public/assets/{prod-B8vYiu52.js → prod-XBLvikex.js} +4 -4
  323. package/server/public/assets/{quadrantDiagram-W4KKPZXB-D6RtoULk.js → quadrantDiagram-W4KKPZXB-BV9SLeWz.js} +1 -1
  324. package/server/public/assets/{sankeyDiagram-5OEKKPKP-CLrCedZX.js → sankeyDiagram-5OEKKPKP-Dwja0gj8.js} +1 -1
  325. package/server/public/assets/{xychartDiagram-2RQKCTM6-hznR8DYl.js → xychartDiagram-2RQKCTM6-DCB4qvfw.js} +1 -1
  326. package/server/public/index.html +2 -2
  327. package/server/{pull-requests-_lHueOHW.js → pull-requests-7BgLDsIo.js} +19 -10
  328. package/server/{pull-requests-7N8WKseP.js → pull-requests-Dq0y6IxE.js} +1 -1
  329. package/server/{queries-CjNIf-Ub.js → queries-C-MUZaIy.js} +824 -192
  330. package/server/{rally-CyWT_lNO.js → rally-CPysR4T_.js} +3 -3
  331. package/server/rally-D_VW4bJv.js +3 -0
  332. package/server/{rally-api-C8e_1JRi.js → rally-api-8Ptlp2os.js} +2 -2
  333. package/server/{rally-api-ClOSd-Tt.js → rally-api-CgosKdKL.js} +1 -1
  334. package/server/{rally-client-sgtVqzNU.js → rally-client-CCX0hADj.js} +1 -1
  335. package/server/{rally-client-lc-nokqr.js → rally-client-iYMHWQD7.js} +5 -5
  336. package/server/{reap-terminal-sessions-7KeHv1R1.js → reap-terminal-sessions-4Xg9NGA8.js} +2 -2
  337. package/server/{reap-terminal-sessions-BtHPo6Xc.js → reap-terminal-sessions-Qf-9LVQc.js} +2 -2
  338. package/server/{rebuild-stack-lwtsW0GO.js → rebuild-stack-CMdgaylx.js} +16 -7
  339. package/server/{rebuild-stack-CFvcBHsS.js → rebuild-stack-DqcOVmJO.js} +2 -2
  340. package/server/{reconstruct-cache-C3Ui7ojV.js → reconstruct-cache-CMZJ_Vjq.js} +9 -7
  341. package/server/record-BTwWhtBb.js +3 -0
  342. package/server/{record-update-dE1Aw83j.js → record-update-DaOKS7Wb.js} +124 -157
  343. package/server/record-update-DhI7eySG.js +3 -0
  344. package/server/{recovery-trip-BvRWfUXM.js → recovery-trip-DDH-02ng.js} +2 -2
  345. package/server/{release-engine-Cx48W7z8.js → release-engine-B2X9AfFC.js} +5 -5
  346. package/server/{release-set-CQfuN9-v.js → release-set-G4XKyQ8K.js} +3 -3
  347. package/server/{remote-C_2hasl7.js → remote-BXarMvqf.js} +3 -3
  348. package/server/{remote-ChgimyYa.js → remote-CUhyqjXk.js} +3 -3
  349. package/server/{remote-agents-By1ige5O.js → remote-agents-Bba-MgSA.js} +311 -48
  350. package/server/{remote-agents-CA3Ihlxj.js → remote-agents-CLZB3Coc.js} +2 -2
  351. package/server/{remote-completion-fVe9e_3u.js → remote-completion-CwAp79EC.js} +13 -13
  352. package/server/resume-mOREjlYu.js +3 -0
  353. package/server/{review-agent-CIGOQYBD.js → review-agent--pOptAEV.js} +65 -50
  354. package/server/{review-agent-DNboMyW4.js → review-agent-BTCNkq2h.js} +1 -1
  355. package/server/{review-artifacts-nRDPuMxd.js → review-artifacts-BNmw8dWE.js} +7 -6
  356. package/server/{review-context-2uj-YQ8J.js → review-context-DFxYOOJW.js} +9 -9
  357. package/server/{in-flight-guard-CAAkqPLu.js → review-convoy-liveness-BgU_1jJf.js} +3 -44
  358. package/server/review-status-CGvlA4o_.js +7737 -0
  359. package/server/review-status-Dma9SFaN.js +3 -0
  360. package/server/review-status-emit-DURrmGYX.js +50 -0
  361. package/server/{review-status-enrichment-Dci-ZwEt.js → review-status-enrichment-8NiNXi5W.js} +4 -4
  362. package/server/review-status-source-BLx_1siH.js +3 -0
  363. package/server/{review-status-source-CxuEjLGg.js → review-status-source-DIk1JSow.js} +24 -3
  364. package/server/{review-status-sync-BTOpxtTC.js → review-status-sync-0GxOqeqF.js} +11 -6
  365. package/server/{review-status-sync-DSDK3OMy.js → review-status-sync-muT-EBp2.js} +1 -1
  366. package/server/{review-verdict-feedback-CTd4QMBu.js → review-verdict-feedback-HwF6ODFy.js} +1 -1
  367. package/server/{review-verdict-feedback-CCjVA7Uk.js → review-verdict-feedback-xJNdqBnX.js} +65 -11
  368. package/server/{rollup-FGsKki9R.js → rollup-BQaol5TX.js} +8 -8
  369. package/server/{rollup-BKQC7jp4.js → rollup-BR4t_wck.js} +1 -1
  370. package/server/{scanner-CnqEZeDy.js → scanner-C-D2cFdX.js} +8 -7
  371. package/server/{sequence-io-D909zgeH.js → sequence-io-Bmf1EZM5.js} +4 -4
  372. package/server/{sequencer-agent-CzkcK6P5.js → sequencer-agent-CigMyKh2.js} +7 -6
  373. package/server/server.js +2005 -614
  374. package/server/{service-CLeAoU6G.js → service-CD0DvFvD.js} +114 -68
  375. package/server/{session-fork-CHI1XvL9.js → session-fork-B6cQ5eya.js} +2 -2
  376. package/server/{session-history-BT3IvqhC.js → session-history-3ON_IJjm.js} +7 -55
  377. package/server/settings-CVmWiJ-r.js +2 -0
  378. package/server/{settings-C0zgxOGf.js → settings-PilbFZAM.js} +3 -2
  379. package/server/{settings-BTMvpNFU.js → settings-VN0qOh4U.js} +3 -3
  380. package/server/{shadow-engineering-BJfgm-hX.js → shadow-engineering-DXvx77oE.js} +3 -3
  381. package/server/{shadow-state-7a-524T8.js → shadow-state-BBk_zacw.js} +2 -2
  382. package/server/{shadow-state-DnDyjujH.js → shadow-state-CZBp7pwq.js} +1 -1
  383. package/server/{shadow-utils-Db3oroFG.js → shadow-utils-DdZ05AJS.js} +2 -2
  384. package/server/{ship-log-D9MlVzYU.js → ship-log-7kJfjUX2.js} +1 -1
  385. package/server/{smart-compaction-CV2ukKND.js → smart-compaction-8fA5k5XN.js} +1 -1
  386. package/server/{smart-compaction-KCYScAU1.js → smart-compaction-ByhL9cRS.js} +8 -7
  387. package/server/{spawn-planning-session-DKpdFyOC.js → spawn-planning-session-pcF-YeFE.js} +38 -50
  388. package/server/spawn-planning-session-vLUJoFjy.js +3 -0
  389. package/server/{specialist-completion-Ky9wCDpb.js → specialist-completion-B07XjWD2.js} +1 -1
  390. package/server/{specialist-context-Bn3dCGS2.js → specialist-context-DJ-zFyL3.js} +5 -5
  391. package/server/{specialist-handoff-logger-CMEwYxa2.js → specialist-handoff-logger-aKSxbIgD.js} +2 -2
  392. package/server/{specialist-logs-C5p8G7tx.js → specialist-logs-Dae-n52_.js} +3 -3
  393. package/server/{specialists-CC4r-c2s.js → specialists-6PWdtWcg.js} +1177 -311
  394. package/server/{specialists-DM6bWjsi.js → specialists-Bz-wFT7R.js} +1 -1
  395. package/server/{specialists-jiuuyVkp.js → specialists-DUiExaxb.js} +18 -18
  396. package/server/{specialists-CShuVGWT.js → specialists-KR3pKulN.js} +1 -1
  397. package/server/specs--enInima.js +3 -0
  398. package/server/src-B948bGVR.js +11452 -0
  399. package/server/{src-CXmtj0im.js → src-rac0Mepv.js} +6 -6
  400. package/server/{src-CdmnTM2m.js → src-vHy2-oCv.js} +3 -3
  401. package/server/{stack-health-Bn3o8FBX.js → stack-health-BikqHSjn.js} +1 -1
  402. package/server/{stack-health-DxSdG9cW.js → stack-health-DqLTiEu4.js} +7 -5
  403. package/server/{stale-task-claims-KJKxxiiQ.js → stale-task-claims-Cab_Fo_Z.js} +5 -4
  404. package/server/{staleness-DPm7ClwA.js → staleness-C-a5rBxF.js} +1 -1
  405. package/server/{staleness-CT34nwr9.js → staleness-CGTZyp6V.js} +1 -1
  406. package/server/{state-home-Cn_Qu8IX.js → state-home-722Dkx92.js} +2 -2
  407. package/server/{state-mapping-BL_-3Yt8.js → state-mapping-CybR81Uf.js} +1 -1
  408. package/server/{state-migrate-BGg2ZaOt.js → state-migrate-2u8wIpoL.js} +4 -4
  409. package/server/{stuck-remediation-DYuPRYYw.js → stuck-remediation-CC6q3eqQ.js} +84 -26
  410. package/server/{stuck-remediation-s9_2qfi6.js → stuck-remediation-r1TJu68G.js} +1 -1
  411. package/server/{substrate-bug-weights-service-B-FwCs5V.js → substrate-bug-weights-service-CzIyyWFT.js} +3 -3
  412. package/server/{summary-fork-DpcxN9tf.js → summary-fork-BqgmgPDt.js} +2 -2
  413. package/server/{summary-fork-D1RAk9rJ.js → summary-fork-Df2WFijM.js} +8 -8
  414. package/server/supervisor/{injection-budget-Csw5tqfJ.js → injection-budget-Cg_KIb3o.js} +1 -1
  415. package/server/supervisor/{paths-DehGY2Fj.js → paths-BBOnCYlO.js} +10 -2
  416. package/server/supervisor/pty-supervisor.js +50 -4
  417. package/server/supervisor/{pty-token-x-ea28Us.js → pty-token-BbjwEUUM.js} +3 -3
  418. package/server/supervisor-B4anCCSm.js +2 -0
  419. package/server/{supervisor-wM4ooB5O.js → supervisor-BxqSpjcN.js} +3 -3
  420. package/server/{swarm-readiness-DlP_UjHq.js → swarm-readiness-DfFxa9-n.js} +3 -3
  421. package/server/{system-prerequisites-DUDj1YHf.js → system-prerequisites-ICLSkhhZ.js} +2 -2
  422. package/server/{teardown-workspace-DeTTImn-.js → teardown-workspace-DRdi_CPa.js} +15 -16
  423. package/server/{test-agent-queue-MbxX5vqq.js → test-agent-queue-A_-p-i0I.js} +8 -7
  424. package/server/{test-verdict-gscuksPv.js → test-verdict-BHgTAwIG.js} +1 -1
  425. package/server/{test-verdict-bWYBtqBg.js → test-verdict-C4i9aqEP.js} +1 -1
  426. package/server/{tldr-daemon-BYFkts95.js → tldr-daemon-CvWXBhX1.js} +1 -1
  427. package/server/{tldr-daemon-C-69c3OI.js → tldr-daemon-wvsU6bKv.js} +2 -2
  428. package/server/{tmux-R7N7y-Mh.js → tmux-CfDHob9M.js} +174 -4
  429. package/server/{tmux-B6z7h_vZ.js → tmux-Ctk6RV5l.js} +1 -1
  430. package/server/{token-BK6t8BIT.js → token-DrxwytsZ.js} +2 -2
  431. package/server/{token-util-DxXu-vd1.js → token-util-B48BlCba.js} +1 -1
  432. package/server/token-util-D411CAq9.js +3 -0
  433. package/server/{tracker-config-G6latr8C.js → tracker-config-BcPMElRB.js} +2 -2
  434. package/server/{tracker-utils-DHv5pSDT.js → tracker-utils-CJ6BHjcD.js} +3 -3
  435. package/server/{traefik-connect-Df2uXPsQ.js → traefik-connect-DZ6nMYMj.js} +1 -1
  436. package/server/{tunnel-DGdUkGoZ.js → tunnel-Bp-dRHZz.js} +1 -1
  437. package/server/{tunnel-CDVKJpRv.js → tunnel-DUbUPElU.js} +3 -3
  438. package/server/{typed-errors-BHhE85Ul.js → typed-errors-CKeoDdU3.js} +1 -1
  439. package/server/{typed-errors-2BTMxkZq.js → typed-errors-DyjseiB6.js} +1 -1
  440. package/server/{types-hraoaQIp.js → types-Cm5ASJbq.js} +1 -1
  441. package/server/{types-5M0lupud.js → types-Di8wdakq.js} +1 -1
  442. package/server/uat-promote-verification-CoJuh7XO.js +92 -0
  443. package/server/uat-train-4Q0k06CQ.js +0 -0
  444. package/server/uat-train-Dewoatps.js +2 -0
  445. package/server/{validate-IfDGkaVR.js → validate-B0C8p66t.js} +8 -6
  446. package/server/{validation-Dw1pzDzr.js → validation-B_kIRfNe.js} +4 -4
  447. package/server/{validation-CC9OPqJZ.js → validation-hVOwQk8T.js} +1 -1
  448. package/server/{verification-artifact-B3itKTxu.js → verification-artifact-BxlxTiYK.js} +1 -1
  449. package/server/{verification-artifact-TVFSz_q1.js → verification-artifact-D70AtckY.js} +1 -1
  450. package/server/{verification-runner-BW4HOKAz.js → verification-runner-Bc3cJvpC.js} +1 -1
  451. package/server/{verification-runner-CkgX6EtI.js → verification-runner-KZTz6u72.js} +40 -18
  452. package/server/{vtt-parser-DYPbKcIJ.js → vtt-parser-CE_i3Bcw.js} +1 -1
  453. package/server/{work-agent-prompt-Du8Vh2aJ.js → work-agent-prompt-ByrPAzOy.js} +20 -9
  454. package/server/{workflows-mbQzh6mQ.js → workflows-D0vP1WrK.js} +252 -99
  455. package/server/workflows-DtDX08ed.js +2 -0
  456. package/server/{workspace--8tnhDI0.js → workspace-COWvdibH.js} +1 -1
  457. package/server/{workspace-BPUws1-_.js → workspace-DQkRPLlQ.js} +3 -3
  458. package/server/workspace-anchor-drift-DXYIAHzr.js +224 -0
  459. package/server/workspace-anchor-drift-pwz23TI1.js +3 -0
  460. package/server/{workspace-config-CIVWZOQr.js → workspace-config-BdZM4PvZ.js} +1 -1
  461. package/server/{workspace-manager-CBhNdzE4.js → workspace-manager-BPgTrG66.js} +157 -118
  462. package/server/workspace-manager-C1F3XsnS.js +3 -0
  463. package/server/{workspace-metadata-BzHnwwX4.js → workspace-metadata-CdjzAP8x.js} +1 -1
  464. package/server/{workspace-metadata-_WygnyoX.js → workspace-metadata-DkO_iTLo.js} +2 -2
  465. package/server/{workspaces-Do_9J0LQ.js → workspaces-CRBJikLp.js} +749 -299
  466. package/sync-sources/dev-skills/pan-dashboard-restart/SKILL.md +34 -10
  467. package/sync-sources/hooks/linear-mcp-auth-hook +97 -0
  468. package/sync-sources/rules/ask-user-question-self-contained.md +9 -0
  469. package/sync-sources/skills/pan-close/SKILL.md +5 -3
  470. package/sync-sources/skills/pan-merge/SKILL.md +7 -5
  471. package/sync-sources/skills/pan-peer-review/SKILL.md +195 -0
  472. package/sync-sources/skills/pan-release/SKILL.md +57 -0
  473. package/sync-sources/skills/pan-reload/SKILL.md +3 -3
  474. package/sync-sources/skills/pan-restart/SKILL.md +5 -4
  475. package/sync-sources/skills/pan-review/SKILL.md +7 -1
  476. package/sync-sources/skills/pan-sync-main/SKILL.md +9 -8
  477. package/sync-sources/skills/pipeline-status/SKILL.md +10 -1
  478. package/sync-sources/skills/workspace-add-repo/SKILL.md +16 -1
  479. package/server/activity-logger-OEUBdfZ8.js +0 -3
  480. package/server/agent-state-Bc3tzUC8.js +0 -3
  481. package/server/agent-state-service-D5UGKIJL.js +0 -2
  482. package/server/agents-wi9NWzs2.js +0 -3
  483. package/server/archive-planning-BZDgzoEj.js +0 -3
  484. package/server/cli-B86rejVV.js +0 -3
  485. package/server/conflict-gate-BhAY7TUd.js +0 -3
  486. package/server/conversation-service-BLd3MYsG.js +0 -3
  487. package/server/deacon-kiQrb4ZT.js +0 -4
  488. package/server/deacon-swarm-C-GwfjJy.js +0 -2
  489. package/server/deploy-window-DkZraDyj.js +0 -3
  490. package/server/dist-Bzy0y69j.js +0 -3
  491. package/server/dod-C6n9RV3G.js +0 -66
  492. package/server/flywheel-merge-order-UU0tiUld.js +0 -245
  493. package/server/flywheel-merge-order-UUcsCDb6.js +0 -2
  494. package/server/forge-CNFnyqps.js +0 -270
  495. package/server/forge-DXnS_YFH.js +0 -2
  496. package/server/git-utils-D0_yhCgF.js +0 -3
  497. package/server/github-pr-lookup-D16NGsSO.js +0 -44
  498. package/server/hume-ccTf4wTX.js +0 -3
  499. package/server/inspect-agent-Brtz0URj.js +0 -2
  500. package/server/label-reconciler-B4iOAjlC.js +0 -113
  501. package/server/launcher-generator-BBWG_SiS.js +0 -473
  502. package/server/merge-ops-CR44oU9-.js +0 -2
  503. package/server/merge-set-bUqbm3yc.js +0 -3
  504. package/server/merge-sync-BJYeOODr.js +0 -3
  505. package/server/merge-verification-BkaOqPsw.js +0 -124
  506. package/server/pipeline-membership-mY3GprlK.js +0 -420
  507. package/server/project-repos-DXKQsc_m.js +0 -3
  508. package/server/projects-vjjcmiN8.js +0 -3
  509. package/server/public/assets/index-CWeMerGO.js +0 -804
  510. package/server/public/assets/index-CenuJ3Cw.css +0 -1
  511. package/server/public/assets/mermaid-GHXKKRXX-CpPWAFwE.js +0 -1
  512. package/server/rally-zhhtXuDP.js +0 -3
  513. package/server/record-CN0pj4_5.js +0 -3
  514. package/server/record-update-bLJxAXH4.js +0 -3
  515. package/server/resume-BFv1PGpA.js +0 -3
  516. package/server/review-status-btEYlaxA.js +0 -3
  517. package/server/review-status-kZj_KyCk.js +0 -1470
  518. package/server/settings-66A6uvIA.js +0 -2
  519. package/server/spawn-planning-session-qUC2VWu3.js +0 -2
  520. package/server/specs-C8Wsn2XO.js +0 -3
  521. package/server/src-DtcUOZCq.js +0 -4826
  522. package/server/supervisor-FTJAIsAK.js +0 -2
  523. package/server/token-util-DuPuNriz.js +0 -3
  524. package/server/tracker-utils-B4ylXZQK.js +0 -3
  525. package/server/uat-train-B05BWkp-.js +0 -2
  526. package/server/uat-train-DDSrSoV1.js +0 -2152
  527. package/server/workflows-BQu4RFQ-.js +0 -2
  528. package/server/workspace-manager-CWT55qeI.js +0 -3
@@ -1,19 +1,21 @@
1
1
  import { n as __esmMin } from "./rolldown-runtime-DNCzzKnI.js";
2
- import { Ar as SKILLS_DIR, Vr as init_paths, f as loadConfigSync, ir as FsError, mr as init_errors, t as init_config_yaml, ur as ProcessSpawnError, vr as CACHE_AGENTS_DIR, yr as CACHE_RULES_DIR } from "./config-yaml-DySPNmKN.js";
3
- import { a as PAN_DIRNAME, c as PAN_SESSIONS_FILENAME, i as PAN_CONTINUE_FILENAME, n as PAN_CONTEXT_FILENAME, s as PAN_FEEDBACK_DIRNAME } from "./types-hraoaQIp.js";
4
- import { t as init_pan_dir } from "./pan-dir-B0c3w0Ya.js";
5
- import { n as init_workspace_config, r as replacePlaceholdersSync, t as getDefaultWorkspaceConfigSync } from "./workspace-config-CIVWZOQr.js";
6
- import { n as init_tunnel, r as removeTunnelIngress, t as addTunnelIngress } from "./tunnel-CDVKJpRv.js";
7
- import { i as init_hume, n as createHumeConfig, r as deleteHumeConfig } from "./hume-Cz8igP9E.js";
8
- import { a as renderDevcontainerSync, i as processTemplatesSync, n as createWorkspacePlaceholdersSync, o as sanitizeComposeFileSync, r as init_devcontainer_renderer, t as DEVCONTAINER_DIRNAME } from "./devcontainer-renderer-_d6XhyND.js";
9
- import { n as init_docker, r as stopWorkspaceDockerPromise, t as getContainersReferencingWorkspacePathPromise } from "./docker-DcMTFTUC.js";
2
+ import { Br as CACHE_RULES_DIR, Fr as init_errors, Gn as init_projects, Qr as SYNC_SOURCES, Tr as FsError, Zr as SKILLS_DIR, f as loadConfigSync, jr as ProcessSpawnError, li as init_paths, t as init_config_yaml, zr as CACHE_AGENTS_DIR } from "./config-yaml-CxdwhAIA.js";
3
+ import { a as PAN_DIRNAME, c as PAN_SESSIONS_FILENAME, i as PAN_CONTINUE_FILENAME, n as PAN_CONTEXT_FILENAME, s as PAN_FEEDBACK_DIRNAME } from "./types-Cm5ASJbq.js";
4
+ import { t as init_pan_dir } from "./pan-dir-DMzF5wne.js";
5
+ import { n as init_workspace_config, r as replacePlaceholdersSync, t as getDefaultWorkspaceConfigSync } from "./workspace-config-BdZM4PvZ.js";
6
+ import { n as init_tunnel, r as removeTunnelIngress, t as addTunnelIngress } from "./tunnel-DUbUPElU.js";
7
+ import { i as init_hume, n as createHumeConfig, r as deleteHumeConfig } from "./hume-DXNiu6nQ.js";
8
+ import { a as renderDevcontainerSync, i as processTemplatesSync, n as createWorkspacePlaceholdersSync, o as sanitizeComposeFileSync, r as init_devcontainer_renderer, t as DEVCONTAINER_DIRNAME } from "./devcontainer-renderer-BUOIlfgD.js";
9
+ import { n as init_docker, r as stopWorkspaceDockerPromise, t as getContainersReferencingWorkspacePathPromise } from "./docker-BJzlkqYB.js";
10
+ import { join } from "node:path";
10
11
  import { Effect } from "effect";
11
12
  import { chmodSync, copyFileSync, existsSync, lstatSync, mkdirSync, readFileSync, readdirSync, realpathSync, renameSync, rmSync, statSync, symlinkSync, unlinkSync, writeFileSync } from "fs";
12
- import { basename, dirname, extname, join, relative, resolve } from "path";
13
+ import { basename as basename$1, dirname as dirname$1, extname as extname$1, join as join$1, relative as relative$1, resolve as resolve$1 } from "path";
13
14
  import { homedir, platform } from "os";
15
+ import { existsSync as existsSync$1, mkdirSync as mkdirSync$1, readdirSync as readdirSync$1, readlinkSync, renameSync as renameSync$1, statSync as statSync$1, symlinkSync as symlinkSync$1 } from "node:fs";
14
16
  import { createHash } from "crypto";
15
17
  import "fs/promises";
16
- import { exec } from "child_process";
18
+ import { exec, execFile } from "child_process";
17
19
  import { promisify } from "util";
18
20
  //#region ../../lib/workspace-manager/migration.ts
19
21
  /**
@@ -33,26 +35,26 @@ function copyOverdeckSettingsToWorkspaceSync(workspacePath) {
33
35
  copied: [],
34
36
  errors: []
35
37
  };
36
- const overdeckDir = join(workspacePath, ".overdeck");
37
- const claudeDir = join(workspacePath, ".claude");
38
+ const overdeckDir = join$1(workspacePath, ".overdeck");
39
+ const claudeDir = join$1(workspacePath, ".claude");
38
40
  mkdirSync(overdeckDir, { recursive: true });
39
41
  if (!existsSync(claudeDir)) mkdirSync(claudeDir, { recursive: true });
40
42
  const filesToCopy = [
41
43
  {
42
- source: join(homedir(), ".overdeck", "config.yaml"),
43
- target: join(overdeckDir, "config.yaml")
44
+ source: join$1(homedir(), ".overdeck", "config.yaml"),
45
+ target: join$1(overdeckDir, "config.yaml")
44
46
  },
45
47
  {
46
- source: join(homedir(), ".overdeck", "projects.yaml"),
47
- target: join(overdeckDir, "projects.yaml")
48
+ source: join$1(homedir(), ".overdeck", "projects.yaml"),
49
+ target: join$1(overdeckDir, "projects.yaml")
48
50
  },
49
51
  {
50
- source: join(homedir(), ".overdeck", "settings.json"),
51
- target: join(overdeckDir, "settings.json")
52
+ source: join$1(homedir(), ".overdeck", "settings.json"),
53
+ target: join$1(overdeckDir, "settings.json")
52
54
  },
53
55
  {
54
- source: join(homedir(), ".claude", "mcp.json"),
55
- target: join(claudeDir, "mcp.json")
56
+ source: join$1(homedir(), ".claude", "mcp.json"),
57
+ target: join$1(claudeDir, "mcp.json")
56
58
  }
57
59
  ];
58
60
  for (const { source, target } of filesToCopy) {
@@ -64,8 +66,8 @@ function copyOverdeckSettingsToWorkspaceSync(workspacePath) {
64
66
  result.errors.push(`${source}: ${err.message}`);
65
67
  }
66
68
  }
67
- const globalSettingsPath = join(homedir(), ".claude", "settings.json");
68
- const workspaceSettingsPath = join(claudeDir, "settings.json");
69
+ const globalSettingsPath = join$1(homedir(), ".claude", "settings.json");
70
+ const workspaceSettingsPath = join$1(claudeDir, "settings.json");
69
71
  if (existsSync(globalSettingsPath)) try {
70
72
  const globalSettings = JSON.parse(readFileSync(globalSettingsPath, "utf-8"));
71
73
  let workspaceSettings = {};
@@ -126,7 +128,7 @@ function copyOverdeckSettingsToWorkspaceSync(workspacePath) {
126
128
  * since project-specific skills should be committed.
127
129
  */
128
130
  function ensurePanGitignoreSync(projectPath) {
129
- const gitignorePath = join(projectPath, ".gitignore");
131
+ const gitignorePath = join$1(projectPath, ".gitignore");
130
132
  const requiredEntries = [
131
133
  ".pan/events/",
132
134
  ".pan/review/",
@@ -182,7 +184,7 @@ var init_platform = __esmMin((() => {
182
184
  * - dnsmasq: System-wide dnsmasq configuration (Linux/macOS)
183
185
  */
184
186
  function addWsl2HostEntry(hostname) {
185
- const wsl2hostsPath = join(homedir(), ".wsl2hosts");
187
+ const wsl2hostsPath = join$1(homedir(), ".wsl2hosts");
186
188
  try {
187
189
  let content = "";
188
190
  if (existsSync(wsl2hostsPath)) content = readFileSync(wsl2hostsPath, "utf-8");
@@ -193,7 +195,7 @@ function addWsl2HostEntry(hostname) {
193
195
  }
194
196
  }
195
197
  function removeWsl2HostEntry(hostname) {
196
- const wsl2hostsPath = join(homedir(), ".wsl2hosts");
198
+ const wsl2hostsPath = join$1(homedir(), ".wsl2hosts");
197
199
  try {
198
200
  if (!existsSync(wsl2hostsPath)) return true;
199
201
  writeFileSync(wsl2hostsPath, readFileSync(wsl2hostsPath, "utf-8").split("\n").filter((line) => line.trim() !== hostname).join("\n"));
@@ -252,7 +254,7 @@ function addDnsmasqEntry(hostname, ip = "127.0.0.1") {
252
254
  try {
253
255
  const configDir = getDnsmasqConfigDir();
254
256
  mkdirSync(configDir, { recursive: true });
255
- const confPath = join(configDir, OVERDECK_DNSMASQ_CONF);
257
+ const confPath = join$1(configDir, OVERDECK_DNSMASQ_CONF);
256
258
  let content = "";
257
259
  if (existsSync(confPath)) content = readFileSync(confPath, "utf-8");
258
260
  const entry = `address=/${hostname}/${ip}`;
@@ -266,7 +268,7 @@ function addDnsmasqEntry(hostname, ip = "127.0.0.1") {
266
268
  }
267
269
  function removeDnsmasqEntry(hostname) {
268
270
  try {
269
- const confPath = join(getDnsmasqConfigDir(), OVERDECK_DNSMASQ_CONF);
271
+ const confPath = join$1(getDnsmasqConfigDir(), OVERDECK_DNSMASQ_CONF);
270
272
  if (!existsSync(confPath)) return true;
271
273
  writeFileSync(confPath, readFileSync(confPath, "utf-8").split("\n").filter((line) => !line.includes(`/${hostname}/`)).join("\n"));
272
274
  return true;
@@ -339,7 +341,7 @@ function readManifestSync(manifestPath) {
339
341
  * Write a manifest to disk (creates parent directories if needed).
340
342
  */
341
343
  function writeManifestSync(manifestPath, manifest) {
342
- mkdirSync(join(manifestPath, ".."), { recursive: true });
344
+ mkdirSync(join$1(manifestPath, ".."), { recursive: true });
343
345
  writeFileSync(manifestPath, JSON.stringify(manifest, null, 2) + "\n", "utf-8");
344
346
  }
345
347
  /**
@@ -388,10 +390,10 @@ function collectSourceFilesSync(sourceDir, prefix) {
388
390
  function walk(dir) {
389
391
  const entries = readdirSync(dir, { withFileTypes: true });
390
392
  for (const entry of entries) {
391
- const fullPath = join(dir, entry.name);
393
+ const fullPath = join$1(dir, entry.name);
392
394
  if (entry.isDirectory()) walk(fullPath);
393
395
  else if (entry.isFile()) {
394
- const rel = relative(sourceDir, fullPath);
396
+ const rel = relative$1(sourceDir, fullPath);
395
397
  results.push({
396
398
  absolutePath: fullPath,
397
399
  relativePath: `${prefix}${rel}`
@@ -418,8 +420,8 @@ var init_manifest = __esmMin((() => {
418
420
  * (processTemplates + createSymlinks → now also copy-based).
419
421
  */
420
422
  function mergeSkillsIntoWorkspaceSync(workspacePath) {
421
- const claudeDir = join(workspacePath, ".claude");
422
- const manifestPath = join(claudeDir, ".overdeck-manifest.json");
423
+ const claudeDir = join$1(workspacePath, ".claude");
424
+ const manifestPath = join$1(claudeDir, ".overdeck-manifest.json");
423
425
  const manifest = readManifestSync(manifestPath);
424
426
  const result = {
425
427
  added: [],
@@ -427,8 +429,8 @@ function mergeSkillsIntoWorkspaceSync(workspacePath) {
427
429
  skipped: [],
428
430
  overlayed: []
429
431
  };
430
- mkdirSync(join(claudeDir, "skills"), { recursive: true });
431
- mkdirSync(join(claudeDir, "agents"), { recursive: true });
432
+ mkdirSync(join$1(claudeDir, "skills"), { recursive: true });
433
+ mkdirSync(join$1(claudeDir, "agents"), { recursive: true });
432
434
  const sources = [
433
435
  {
434
436
  sourceDir: SKILLS_DIR,
@@ -449,11 +451,11 @@ function mergeSkillsIntoWorkspaceSync(workspacePath) {
449
451
  const files = collectSourceFilesSync(sourceDir, "");
450
452
  for (const file of files) {
451
453
  const relativePath = `${prefix}${file.relativePath}`;
452
- const targetPath = join(claudeDir, relativePath);
454
+ const targetPath = join$1(claudeDir, relativePath);
453
455
  const sourceHash = hashFileSync(file.absolutePath);
454
456
  switch (compareFileToManifest(targetPath, relativePath, manifest).action) {
455
457
  case "new":
456
- mkdirSync(dirname(targetPath), { recursive: true });
458
+ mkdirSync(dirname$1(targetPath), { recursive: true });
457
459
  copyFileSync(file.absolutePath, targetPath);
458
460
  setManifestEntry(manifest, relativePath, sourceHash, "overdeck");
459
461
  result.added.push(relativePath);
@@ -493,15 +495,15 @@ function mergePanSkillsIntoWorkspaceSync(projectPath, workspacePath) {
493
495
  skipped: [],
494
496
  overlayed: []
495
497
  };
496
- const panSkillsDir = join(projectPath, ".pan", "skills");
498
+ const panSkillsDir = join$1(projectPath, ".pan", "skills");
497
499
  if (!existsSync(panSkillsDir)) return result;
498
- const claudeSkillsDir = join(workspacePath, ".claude", "skills");
499
- const manifestPath = join(workspacePath, ".claude", ".overdeck-manifest.json");
500
+ const claudeSkillsDir = join$1(workspacePath, ".claude", "skills");
501
+ const manifestPath = join$1(workspacePath, ".claude", ".overdeck-manifest.json");
500
502
  const manifest = readManifestSync(manifestPath);
501
503
  const skillDirs = readdirSync(panSkillsDir, { withFileTypes: true }).filter((e) => e.isDirectory()).map((e) => e.name);
502
504
  for (const skillName of skillDirs) {
503
- const sourceSkillDir = join(panSkillsDir, skillName);
504
- const targetSkillDir = join(claudeSkillsDir, skillName);
505
+ const sourceSkillDir = join$1(panSkillsDir, skillName);
506
+ const targetSkillDir = join$1(claudeSkillsDir, skillName);
505
507
  if (existsSync(targetSkillDir)) {
506
508
  result.skipped.push(`skills/${skillName} (already exists in .claude/skills/)`);
507
509
  continue;
@@ -510,8 +512,8 @@ function mergePanSkillsIntoWorkspaceSync(projectPath, workspacePath) {
510
512
  mkdirSync(targetSkillDir, { recursive: true });
511
513
  let anyAdded = false;
512
514
  for (const file of files) {
513
- const targetPath = join(targetSkillDir, file.relativePath);
514
- mkdirSync(dirname(targetPath), { recursive: true });
515
+ const targetPath = join$1(targetSkillDir, file.relativePath);
516
+ mkdirSync(dirname$1(targetPath), { recursive: true });
515
517
  copyFileSync(file.absolutePath, targetPath);
516
518
  const hash = hashFileSync(targetPath);
517
519
  setManifestEntry(manifest, `skills/${skillName}/${file.relativePath}`, hash, "pan-skills");
@@ -558,12 +560,12 @@ function validateFeatureName(name) {
558
560
  * venv's own path. Best-effort and non-fatal: unreadable/binary files skipped.
559
561
  */
560
562
  function relocateVenvScripts(sourceVenv, destVenv) {
561
- const sourceBin = join(sourceVenv, "bin");
562
- const destBin = join(destVenv, "bin");
563
- const destPy = join(destBin, "python3");
563
+ const sourceBin = join$1(sourceVenv, "bin");
564
+ const destBin = join$1(destVenv, "bin");
565
+ const destPy = join$1(destBin, "python3");
564
566
  if (!existsSync(destBin) || !existsSync(destPy)) return;
565
567
  for (const entry of readdirSync(destBin)) {
566
- const script = join(destBin, entry);
568
+ const script = join$1(destBin, entry);
567
569
  try {
568
570
  if (!statSync(script).isFile()) continue;
569
571
  const content = readFileSync(script, "utf8");
@@ -579,7 +581,7 @@ function relocateVenvScripts(sourceVenv, destVenv) {
579
581
  "activate.csh",
580
582
  "activate.fish"
581
583
  ]) {
582
- const act = join(destBin, name);
584
+ const act = join$1(destBin, name);
583
585
  if (!existsSync(act)) continue;
584
586
  try {
585
587
  const content = readFileSync(act, "utf8");
@@ -593,8 +595,8 @@ async function installPreRebaseHook(targetPath) {
593
595
  cwd: targetPath,
594
596
  encoding: "utf-8"
595
597
  });
596
- const hooksDir = resolve(targetPath, stdout.trim());
597
- const hookPath = join(hooksDir, "pre-rebase");
598
+ const hooksDir = resolve$1(targetPath, stdout.trim());
599
+ const hookPath = join$1(hooksDir, "pre-rebase");
598
600
  mkdirSync(hooksDir, { recursive: true });
599
601
  const originalHookPath = `${hookPath}${PRE_REBASE_ORIGINAL_SUFFIX}`;
600
602
  const existingHook = existsSync(hookPath) ? readFileSync(hookPath, "utf-8") : "";
@@ -634,7 +636,7 @@ async function createWorktree(repoPath, targetPath, branchName, defaultBranch =
634
636
  const localList = localBranches.split("\n").map((b) => b.replace(/^[*+\s]+/, "").trim()).filter(Boolean);
635
637
  const remoteList = remoteBranches.split("\n").map((b) => b.trim()).filter(Boolean);
636
638
  if (localList.includes(branchName) || remoteList.includes(`origin/${branchName}`)) await execAsync$2(`git worktree add "${targetPath}" "${branchName}"`, { cwd: repoPath });
637
- else await execAsync$2(`git worktree add "${targetPath}" -b "${branchName}" "${defaultBranch}"`, { cwd: repoPath });
639
+ else await execAsync$2(`git worktree add -b "${branchName}" "${targetPath}" "${defaultBranch}"`, { cwd: repoPath });
638
640
  await installPreRebaseHook(targetPath);
639
641
  await execAsync$2("git restore .", { cwd: targetPath }).catch(() => {});
640
642
  return {
@@ -671,7 +673,7 @@ async function removeWorktree(repoPath, targetPath, branchName) {
671
673
  */
672
674
  function assignPort(portFile, featureFolder, range) {
673
675
  if (!existsSync(portFile)) {
674
- mkdirSync(dirname(portFile), { recursive: true });
676
+ mkdirSync(dirname$1(portFile), { recursive: true });
675
677
  writeFileSync(portFile, "");
676
678
  }
677
679
  const content = readFileSync(portFile, "utf-8");
@@ -713,8 +715,8 @@ function mergeDirectoryWithoutOverwriteSync(source, target) {
713
715
  if (!existsSync(source)) return;
714
716
  mkdirSync(target, { recursive: true });
715
717
  for (const entry of readdirSync(source, { withFileTypes: true })) {
716
- const sourcePath = join(source, entry.name);
717
- const targetPath = join(target, entry.name);
718
+ const sourcePath = join$1(source, entry.name);
719
+ const targetPath = join$1(target, entry.name);
718
720
  if (entry.isDirectory()) mergeDirectoryWithoutOverwriteSync(sourcePath, targetPath);
719
721
  else if (entry.isFile() && !existsSync(targetPath)) copyFileSync(sourcePath, targetPath);
720
722
  }
@@ -730,19 +732,19 @@ function restorePreWorktreeMetadataSync(stagedPath, workspacePath) {
730
732
  function copyProjectTemplateDirs(sourceDir, targetDir, dirs, placeholders) {
731
733
  const steps = [];
732
734
  for (const dir of dirs) {
733
- const sourcePath = join(sourceDir, dir);
734
- const targetPath = join(targetDir, dir);
735
+ const sourcePath = join$1(sourceDir, dir);
736
+ const targetPath = join$1(targetDir, dir);
735
737
  if (!existsSync(sourcePath)) continue;
736
738
  function copyDir(src, dest) {
737
739
  let count = 0;
738
740
  mkdirSync(dest, { recursive: true });
739
741
  const entries = readdirSync(src, { withFileTypes: true });
740
742
  for (const entry of entries) {
741
- const srcEntry = join(src, entry.name);
742
- const destEntry = join(dest, entry.name);
743
+ const srcEntry = join$1(src, entry.name);
744
+ const destEntry = join$1(dest, entry.name);
743
745
  if (entry.isDirectory()) count += copyDir(srcEntry, destEntry);
744
746
  else if (entry.isFile()) {
745
- const ext = extname(entry.name).toLowerCase();
747
+ const ext = extname$1(entry.name).toLowerCase();
746
748
  if (placeholders && TEXT_EXTENSIONS.has(ext)) writeFileSync(destEntry, replacePlaceholdersSync(readFileSync(srcEntry, "utf-8"), placeholders));
747
749
  else copyFileSync(srcEntry, destEntry);
748
750
  count++;
@@ -780,7 +782,7 @@ function copyProjectTemplateDirs(sourceDir, targetDir, dirs, placeholders) {
780
782
  * key checked by both the bypass-mode dialog and the headless --bg gate.
781
783
  */
782
784
  function preTrustDirectorySync(dirPath) {
783
- const claudeJsonPath = join(homedir(), ".claude.json");
785
+ const claudeJsonPath = join$1(homedir(), ".claude.json");
784
786
  if (!existsSync(claudeJsonPath)) return;
785
787
  const data = JSON.parse(readFileSync(claudeJsonPath, "utf8"));
786
788
  let dirty = false;
@@ -852,7 +854,7 @@ var init_worktree_ops = __esmMin((() => {
852
854
  * Returns the entries that were added or removed (empty arrays if nothing changed).
853
855
  */
854
856
  function ensurePolyrepoWorkspaceGitignoreSync(workspacePath, repos) {
855
- const gitignorePath = join(workspacePath, ".gitignore");
857
+ const gitignorePath = join$1(workspacePath, ".gitignore");
856
858
  let content = existsSync(gitignorePath) ? readFileSync(gitignorePath, "utf-8") : "";
857
859
  const removed = [];
858
860
  const filteredLines = content.split("\n").filter((line) => {
@@ -870,8 +872,11 @@ function ensurePolyrepoWorkspaceGitignoreSync(workspacePath, repos) {
870
872
  const entry = `${repo.name}/`;
871
873
  if (!normalizedLines.includes(entry) && !normalizedLines.includes(repo.name)) added.push(entry);
872
874
  }
873
- const addRuntimeEntry = !normalizedLines.includes(".overdeck/") && !normalizedLines.includes(".overdeck");
874
- if (added.length === 0 && !addRuntimeEntry && removed.length === 0) return {
875
+ const runtimeEntries = [];
876
+ if (!normalizedLines.includes(".overdeck/") && !normalizedLines.includes(".overdeck")) runtimeEntries.push(".overdeck/");
877
+ if (!normalizedLines.includes(".devcontainer/") && !normalizedLines.includes(".devcontainer")) runtimeEntries.push(".devcontainer/");
878
+ if (!normalizedLines.includes("dev")) runtimeEntries.push("dev");
879
+ if (added.length === 0 && runtimeEntries.length === 0 && removed.length === 0) return {
875
880
  added,
876
881
  removed
877
882
  };
@@ -880,9 +885,10 @@ function ensurePolyrepoWorkspaceGitignoreSync(workspacePath, repos) {
880
885
  if (!normalizedLines.some((l) => l.includes("Polyrepo") || l.includes("polyrepo"))) content += "\n# Polyrepo sub-repositories\n";
881
886
  content += added.join("\n") + "\n";
882
887
  }
883
- if (addRuntimeEntry) {
884
- content += "\n# Overdeck workspace runtime (PAN-2541: durable state lives on overdeck-state)\n.overdeck/\n";
885
- added.push(".overdeck/");
888
+ if (runtimeEntries.length > 0) {
889
+ content += "\n# Overdeck workspace runtime (PAN-2541: durable state lives on overdeck-state; devcontainer harness is generated)\n";
890
+ content += runtimeEntries.join("\n") + "\n";
891
+ added.push(...runtimeEntries);
886
892
  }
887
893
  writeFileSync(gitignorePath, content, "utf-8");
888
894
  return {
@@ -897,7 +903,7 @@ function ensurePolyrepoWorkspaceGitignoreSync(workspacePath, repos) {
897
903
  * surface the warning.
898
904
  */
899
905
  async function commitPolyrepoWorkspaceGitignoreAsync(workspacePath) {
900
- if (!existsSync(join(workspacePath, ".git"))) return null;
906
+ if (!existsSync(join$1(workspacePath, ".git"))) return null;
901
907
  try {
902
908
  await execAsync$1("git add .gitignore", { cwd: workspacePath });
903
909
  try {
@@ -945,9 +951,9 @@ async function createWorkspacePromise(options) {
945
951
  return result;
946
952
  }
947
953
  const workspaceConfig = projectConfig.workspace || getDefaultWorkspaceConfigSync();
948
- const workspacesDir = join(projectConfig.path, workspaceConfig.workspaces_dir || "workspaces");
954
+ const workspacesDir = join$1(projectConfig.path, workspaceConfig.workspaces_dir || "workspaces");
949
955
  const featureFolder = `feature-${featureName}`;
950
- const workspacePath = join(workspacesDir, featureFolder);
956
+ const workspacePath = join$1(workspacesDir, featureFolder);
951
957
  result.workspacePath = workspacePath;
952
958
  if (dryRun) {
953
959
  result.steps.push("[DRY RUN] Would create workspace at: " + workspacePath);
@@ -970,9 +976,9 @@ async function createWorkspacePromise(options) {
970
976
  result.steps.push("Created workspace directory");
971
977
  const reposToCreate = workspaceConfig.progressive && workspaceConfig.always_include ? workspaceConfig.repos.filter((r) => workspaceConfig.always_include.includes(r.name)) : workspaceConfig.repos;
972
978
  for (const repo of reposToCreate) {
973
- const rawRepoPath = join(projectConfig.path, repo.path);
979
+ const rawRepoPath = join$1(projectConfig.path, repo.path);
974
980
  const repoPath = existsSync(rawRepoPath) ? realpathSync(rawRepoPath) : rawRepoPath;
975
- const targetPath = join(workspacePath, repo.name);
981
+ const targetPath = join$1(workspacePath, repo.name);
976
982
  if (repo.link_type === "symlink") try {
977
983
  symlinkSync(repoPath, targetPath);
978
984
  result.steps.push(`Created symlink for ${repo.name} (readonly, no feature branch)`);
@@ -1018,16 +1024,16 @@ async function createWorkspacePromise(options) {
1018
1024
  result.steps.push(`Warning: could not create workspace .gitignore: ${gitignoreErr.message}`);
1019
1025
  }
1020
1026
  progress("Creating git worktree", "Worktree ready", "complete");
1021
- const resolvedWorkspace = resolve(workspacePath);
1022
- const resolvedPanDir = resolve(resolvedWorkspace, PAN_DIRNAME);
1023
- if (resolvedWorkspace.match(/\/workspaces\/feature-[a-z0-9-]+$/) && existsSync(join(resolvedWorkspace, ".git"))) {
1024
- if (resolvedPanDir === join(resolvedWorkspace, ".pan") && existsSync(resolvedPanDir)) {
1027
+ const resolvedWorkspace = resolve$1(workspacePath);
1028
+ const resolvedPanDir = resolve$1(resolvedWorkspace, PAN_DIRNAME);
1029
+ if (resolvedWorkspace.match(/\/workspaces\/feature-[a-z0-9-]+$/) && existsSync(join$1(resolvedWorkspace, ".git"))) {
1030
+ if (resolvedPanDir === join$1(resolvedWorkspace, ".pan") && existsSync(resolvedPanDir)) {
1025
1031
  for (const filePath of [
1026
- join(resolvedPanDir, PAN_CONTINUE_FILENAME),
1027
- join(resolvedPanDir, PAN_SESSIONS_FILENAME),
1028
- join(resolvedPanDir, PAN_CONTEXT_FILENAME)
1032
+ join$1(resolvedPanDir, PAN_CONTINUE_FILENAME),
1033
+ join$1(resolvedPanDir, PAN_SESSIONS_FILENAME),
1034
+ join$1(resolvedPanDir, PAN_CONTEXT_FILENAME)
1029
1035
  ]) if (existsSync(filePath)) unlinkSync(filePath);
1030
- const feedbackDir = join(resolvedPanDir, PAN_FEEDBACK_DIRNAME);
1036
+ const feedbackDir = join$1(resolvedPanDir, PAN_FEEDBACK_DIRNAME);
1031
1037
  if (existsSync(feedbackDir)) rmSync(feedbackDir, {
1032
1038
  recursive: true,
1033
1039
  force: true
@@ -1041,15 +1047,15 @@ async function createWorkspacePromise(options) {
1041
1047
  } catch (gitignoreErr) {
1042
1048
  result.steps.push(`Warning: could not update .gitignore: ${gitignoreErr.message}`);
1043
1049
  }
1044
- const devcontainerDir = join(workspacePath, ".devcontainer");
1050
+ const devcontainerDir = join$1(workspacePath, ".devcontainer");
1045
1051
  if (existsSync(devcontainerDir)) {
1046
1052
  const composeFiles = readdirSync(devcontainerDir).filter((f) => f.includes("compose") && (f.endsWith(".yml") || f.endsWith(".yaml")));
1047
- for (const composeFile of composeFiles) sanitizeComposeFileSync(join(devcontainerDir, composeFile));
1053
+ for (const composeFile of composeFiles) sanitizeComposeFileSync(join$1(devcontainerDir, composeFile));
1048
1054
  if (composeFiles.length > 0) result.steps.push(`Sanitized ${composeFiles.length} compose file(s) for platform compatibility`);
1049
1055
  }
1050
1056
  progress("Installing dependencies", projectConfig.package_manager || "detecting...");
1051
- const pkgManager = projectConfig.package_manager || (existsSync(join(workspacePath, "bun.lock")) ? "bun" : "npm");
1052
- const staleModulesDirs = [join(workspacePath, "node_modules"), ...(projectConfig.workspace_packages ?? []).map((p) => join(workspacePath, p.path, "node_modules"))];
1057
+ const pkgManager = projectConfig.package_manager || (existsSync(join$1(workspacePath, "bun.lock")) ? "bun" : "npm");
1058
+ const staleModulesDirs = [join$1(workspacePath, "node_modules"), ...(projectConfig.workspace_packages ?? []).map((p) => join$1(workspacePath, p.path, "node_modules"))];
1053
1059
  for (const dir of staleModulesDirs) if (existsSync(dir)) await execAsync$1(`rm -rf "${dir}"`);
1054
1060
  const installCmd = pkgManager === "bun" ? "bun install" : `${pkgManager} install`;
1055
1061
  try {
@@ -1065,7 +1071,7 @@ async function createWorkspacePromise(options) {
1065
1071
  progress("Installing dependencies", "Failed — workspace creation aborted", "complete");
1066
1072
  return result;
1067
1073
  }
1068
- const hookTargets = workspaceConfig.type === "polyrepo" && workspaceConfig.repos ? workspaceConfig.repos.filter((repo) => repo.link_type !== "symlink").map((repo) => join(workspacePath, repo.name)).filter((path) => existsSync(join(path, ".git"))) : [workspacePath];
1074
+ const hookTargets = workspaceConfig.type === "polyrepo" && workspaceConfig.repos ? workspaceConfig.repos.filter((repo) => repo.link_type !== "symlink").map((repo) => join$1(workspacePath, repo.name)).filter((path) => existsSync(join$1(path, ".git"))) : [workspacePath];
1069
1075
  try {
1070
1076
  for (const hookTarget of hookTargets) await installPreRebaseHook(hookTarget);
1071
1077
  } catch (hookErr) {
@@ -1077,7 +1083,7 @@ async function createWorkspacePromise(options) {
1077
1083
  progress("Building workspace packages", workspacePackages.map((p) => p.path).join(", "));
1078
1084
  for (const pkg of workspacePackages) try {
1079
1085
  await execAsync$1(pkg.build_command, {
1080
- cwd: join(workspacePath, pkg.path),
1086
+ cwd: join$1(workspacePath, pkg.path),
1081
1087
  encoding: "utf-8"
1082
1088
  });
1083
1089
  result.steps.push(`Built workspace package: ${pkg.path}`);
@@ -1091,21 +1097,21 @@ async function createWorkspacePromise(options) {
1091
1097
  }
1092
1098
  try {
1093
1099
  await execAsync$1("python3 --version");
1094
- const venvPath = join(workspacePath, ".venv");
1095
- const tldrBin = join(venvPath, "bin", "tldr");
1096
- if (existsSync(join(projectConfig.path, ".venv", "bin", "tldr"))) {
1097
- const mainVenvPath = join(projectConfig.path, ".venv");
1100
+ const venvPath = join$1(workspacePath, ".venv");
1101
+ const tldrBin = join$1(venvPath, "bin", "tldr");
1102
+ if (existsSync(join$1(projectConfig.path, ".venv", "bin", "tldr"))) {
1103
+ const mainVenvPath = join$1(projectConfig.path, ".venv");
1098
1104
  await execAsync$1(`cp -a "${mainVenvPath}" "${venvPath}"`);
1099
1105
  relocateVenvScripts(mainVenvPath, venvPath);
1100
1106
  result.steps.push("Copied Python venv from main branch (shebangs relocated)");
1101
1107
  } else {
1102
1108
  await execAsync$1(`python3 -m venv "${venvPath}"`, { cwd: workspacePath });
1103
- await execAsync$1(`"${join(venvPath, "bin", "pip")}" install llm-tldr`, {
1109
+ await execAsync$1(`"${join$1(venvPath, "bin", "pip")}" install llm-tldr`, {
1104
1110
  cwd: workspacePath,
1105
1111
  timeout: 12e4
1106
1112
  });
1107
1113
  result.steps.push("Created Python venv and installed llm-tldr");
1108
- const patchScript = join(projectConfig.path, "scripts", "patches", "llm-tldr-tsx-support.py");
1114
+ const patchScript = join$1(projectConfig.path, "scripts", "patches", "llm-tldr-tsx-support.py");
1109
1115
  if (existsSync(patchScript)) {
1110
1116
  await execAsync$1(`python3 "${patchScript}" "${venvPath}"`);
1111
1117
  result.steps.push("Applied llm-tldr .tsx/.jsx patch");
@@ -1113,13 +1119,13 @@ async function createWorkspacePromise(options) {
1113
1119
  }
1114
1120
  if (!existsSync(tldrBin)) result.steps.push("TLDR setup incomplete: tldr binary not found after venv creation");
1115
1121
  else {
1116
- const mainTldrDir = join(projectConfig.path, ".tldr");
1117
- const workspaceTldrDir = join(workspacePath, ".tldr");
1122
+ const mainTldrDir = join$1(projectConfig.path, ".tldr");
1123
+ const workspaceTldrDir = join$1(workspacePath, ".tldr");
1118
1124
  if (existsSync(mainTldrDir)) {
1119
1125
  await execAsync$1(`cp -r "${mainTldrDir}" "${workspaceTldrDir}"`);
1120
1126
  result.steps.push("Copied TLDR index from main branch");
1121
1127
  }
1122
- const { getTldrDaemonServiceSync } = await import("./tldr-daemon-BYFkts95.js");
1128
+ const { getTldrDaemonServiceSync } = await import("./tldr-daemon-CvWXBhX1.js");
1123
1129
  const tldrService = getTldrDaemonServiceSync(workspacePath, venvPath);
1124
1130
  await tldrService.start(true);
1125
1131
  result.steps.push("Started TLDR daemon");
@@ -1146,7 +1152,7 @@ async function createWorkspacePromise(options) {
1146
1152
  }
1147
1153
  }
1148
1154
  if (workspaceConfig.ports) for (const [portName, portConfig] of Object.entries(workspaceConfig.ports)) {
1149
- const portFile = join(projectConfig.path, `.${portName}-ports`);
1155
+ const portFile = join$1(projectConfig.path, `.${portName}-ports`);
1150
1156
  try {
1151
1157
  const port = assignPort(portFile, featureFolder, portConfig.range);
1152
1158
  result.steps.push(`Assigned ${portName} port: ${port}`);
@@ -1162,7 +1168,7 @@ async function createWorkspacePromise(options) {
1162
1168
  const panMergeResult = mergePanSkillsIntoWorkspaceSync(projectConfig.path, workspacePath);
1163
1169
  if (panMergeResult.added.length > 0) result.steps.push(`Installed ${panMergeResult.added.length} project-local skill file(s) from .pan/skills/ (${panMergeResult.overlayed.join(", ")})`);
1164
1170
  if (workspaceConfig.agent?.template_dir) {
1165
- const templateDir = join(projectConfig.path, workspaceConfig.agent.template_dir);
1171
+ const templateDir = join$1(projectConfig.path, workspaceConfig.agent.template_dir);
1166
1172
  const templateSteps = processTemplatesSync(templateDir, workspacePath, placeholders, workspaceConfig.agent.templates);
1167
1173
  result.steps.push(...templateSteps);
1168
1174
  const dirsToSync = workspaceConfig.agent.copy_dirs || workspaceConfig.agent.symlinks;
@@ -1173,7 +1179,7 @@ async function createWorkspacePromise(options) {
1173
1179
  }
1174
1180
  if (workspaceConfig.env?.template) {
1175
1181
  const envContent = replacePlaceholdersSync(workspaceConfig.env.template, placeholders);
1176
- writeFileSync(join(workspacePath, ".env"), envContent);
1182
+ writeFileSync(join$1(workspacePath, ".env"), envContent);
1177
1183
  result.steps.push("Created .env file");
1178
1184
  }
1179
1185
  if (workspaceConfig.docker?.compose_template) try {
@@ -1196,7 +1202,7 @@ async function createWorkspacePromise(options) {
1196
1202
  const humeResult = await Effect.runPromise(createHumeConfig(workspaceConfig.hume, placeholders));
1197
1203
  result.steps.push(...humeResult.steps);
1198
1204
  if (humeResult.configId) {
1199
- writeFileSync(join(workspacePath, ".hume-config"), `HUME_CONFIG_ID=${humeResult.configId}\nVITE_HUME_CONFIG_ID=${humeResult.configId}\n`);
1205
+ writeFileSync(join$1(workspacePath, ".hume-config"), `HUME_CONFIG_ID=${humeResult.configId}\nVITE_HUME_CONFIG_ID=${humeResult.configId}\n`);
1200
1206
  result.steps.push("Wrote .hume-config with Hume EVI config ID");
1201
1207
  }
1202
1208
  if (!humeResult.success) result.errors.push("Hume EVI config setup had failures (see steps for details)");
@@ -1205,9 +1211,9 @@ async function createWorkspacePromise(options) {
1205
1211
  if (startDocker) {
1206
1212
  progress("Starting Docker containers", "Building and starting services");
1207
1213
  if (workspaceConfig.docker?.traefik) {
1208
- const traefikPath = join(homedir(), ".overdeck", "traefik", "docker-compose.yml");
1214
+ const traefikPath = join$1(homedir(), ".overdeck", "traefik", "docker-compose.yml");
1209
1215
  if (existsSync(traefikPath)) try {
1210
- await execAsync$1(`docker compose -f "${traefikPath}" up -d`, { cwd: join(homedir(), ".overdeck", "traefik") });
1216
+ await execAsync$1(`docker compose -f "${traefikPath}" up -d`, { cwd: join$1(homedir(), ".overdeck", "traefik") });
1211
1217
  result.steps.push("Started Traefik");
1212
1218
  } catch (error) {
1213
1219
  const msg = error?.message || String(error);
@@ -1216,18 +1222,18 @@ async function createWorkspacePromise(options) {
1216
1222
  }
1217
1223
  }
1218
1224
  const composeLocations = [
1219
- join(workspacePath, "docker-compose.yml"),
1220
- join(workspacePath, "docker-compose.yaml"),
1221
- join(workspacePath, ".devcontainer", "docker-compose.yml"),
1222
- join(workspacePath, ".devcontainer", "docker-compose.devcontainer.yml")
1225
+ join$1(workspacePath, "docker-compose.yml"),
1226
+ join$1(workspacePath, "docker-compose.yaml"),
1227
+ join$1(workspacePath, ".devcontainer", "docker-compose.yml"),
1228
+ join$1(workspacePath, ".devcontainer", "docker-compose.devcontainer.yml")
1223
1229
  ];
1224
1230
  for (const composePath of composeLocations) if (existsSync(composePath)) {
1225
1231
  try {
1226
1232
  await execAsync$1(`docker compose -f "${composePath}" up -d --build`, {
1227
- cwd: dirname(composePath),
1233
+ cwd: dirname$1(composePath),
1228
1234
  timeout: 3e5
1229
1235
  });
1230
- result.steps.push(`Started containers from ${basename(composePath)}`);
1236
+ result.steps.push(`Started containers from ${basename$1(composePath)}`);
1231
1237
  } catch (error) {
1232
1238
  result.errors.push(`Failed to start containers: ${error}`);
1233
1239
  }
@@ -1240,7 +1246,7 @@ async function createWorkspacePromise(options) {
1240
1246
  result.steps.push("Pre-trusted workspace in Claude Code");
1241
1247
  } catch {}
1242
1248
  try {
1243
- const { determineCavemanVariant, injectCavemanSettings } = await import("./workspace--8tnhDI0.js");
1249
+ const { determineCavemanVariant, injectCavemanSettings } = await import("./workspace-COWvdibH.js");
1244
1250
  const cavemanConfig = loadConfigSync().config.caveman;
1245
1251
  const variant = determineCavemanVariant(cavemanConfig);
1246
1252
  await Effect.runPromise(injectCavemanSettings(workspacePath, variant));
@@ -1256,7 +1262,7 @@ async function createWorkspacePromise(options) {
1256
1262
  result.steps.push(`Overdeck settings copy skipped: ${settingsErr instanceof Error ? settingsErr.message : String(settingsErr)}`);
1257
1263
  }
1258
1264
  try {
1259
- const { injectMemoryHookSettings } = await import("./workspace--8tnhDI0.js");
1265
+ const { injectMemoryHookSettings } = await import("./workspace-COWvdibH.js");
1260
1266
  await injectMemoryHookSettings(workspacePath);
1261
1267
  result.steps.push("Injected memory hooks into .claude/settings.json");
1262
1268
  } catch (memoryHookErr) {
@@ -1280,9 +1286,42 @@ var init_create = __esmMin((() => {
1280
1286
  execAsync$1 = promisify(exec);
1281
1287
  }));
1282
1288
  //#endregion
1283
- //#region ../../lib/workspace-manager/repos.ts
1289
+ //#region ../../lib/git-hooks.ts
1290
+ function installGitHooksInDir(gitDir) {
1291
+ const hooksTarget = join(gitDir, "hooks");
1292
+ let installed = 0;
1293
+ if (!existsSync$1(hooksTarget)) mkdirSync$1(hooksTarget, { recursive: true });
1294
+ if (!existsSync$1(BUNDLED_HOOKS_DIR)) return 0;
1295
+ try {
1296
+ const hooks = readdirSync$1(BUNDLED_HOOKS_DIR).filter((file) => {
1297
+ const path = join(BUNDLED_HOOKS_DIR, file);
1298
+ return existsSync$1(path) && statSync$1(path).isFile();
1299
+ });
1300
+ for (const hook of hooks) {
1301
+ const source = join(BUNDLED_HOOKS_DIR, hook);
1302
+ const target = join(hooksTarget, hook);
1303
+ if (existsSync$1(target)) {
1304
+ try {
1305
+ if (readlinkSync(target) === source) continue;
1306
+ } catch {}
1307
+ renameSync$1(target, `${target}.backup`);
1308
+ }
1309
+ symlinkSync$1(source, target);
1310
+ installed++;
1311
+ }
1312
+ } catch {}
1313
+ return installed;
1314
+ }
1315
+ var BUNDLED_HOOKS_DIR;
1316
+ var init_git_hooks = __esmMin((() => {
1317
+ init_paths();
1318
+ BUNDLED_HOOKS_DIR = SYNC_SOURCES.gitHooks;
1319
+ }));
1284
1320
  var init_repos = __esmMin((() => {
1321
+ init_git_hooks();
1322
+ init_projects();
1285
1323
  init_worktree_ops();
1324
+ promisify(execFile);
1286
1325
  }));
1287
1326
  //#endregion
1288
1327
  //#region ../../lib/workspace-manager/remove.ts
@@ -1294,9 +1333,9 @@ async function removeWorkspacePromise(options) {
1294
1333
  steps: []
1295
1334
  };
1296
1335
  const workspaceConfig = projectConfig.workspace || getDefaultWorkspaceConfigSync();
1297
- const workspacesDir = join(projectConfig.path, workspaceConfig.workspaces_dir || "workspaces");
1336
+ const workspacesDir = join$1(projectConfig.path, workspaceConfig.workspaces_dir || "workspaces");
1298
1337
  const featureFolder = `feature-${featureName}`;
1299
- const workspacePath = join(workspacesDir, featureFolder);
1338
+ const workspacePath = join$1(workspacesDir, featureFolder);
1300
1339
  if (!existsSync(workspacePath)) {
1301
1340
  result.success = false;
1302
1341
  result.errors.push(`Workspace not found at ${workspacePath}`);
@@ -1306,9 +1345,9 @@ async function removeWorkspacePromise(options) {
1306
1345
  result.steps.push("[DRY RUN] Would remove workspace at: " + workspacePath);
1307
1346
  return result;
1308
1347
  }
1309
- const venvPath = join(workspacePath, ".venv");
1348
+ const venvPath = join$1(workspacePath, ".venv");
1310
1349
  if (existsSync(venvPath)) try {
1311
- const { getTldrDaemonServiceSync } = await import("./tldr-daemon-BYFkts95.js");
1350
+ const { getTldrDaemonServiceSync } = await import("./tldr-daemon-CvWXBhX1.js");
1312
1351
  await getTldrDaemonServiceSync(workspacePath, venvPath).stop();
1313
1352
  result.steps.push("Stopped TLDR daemon");
1314
1353
  } catch (error) {
@@ -1317,7 +1356,7 @@ async function removeWorkspacePromise(options) {
1317
1356
  const dockerResult = await stopWorkspaceDockerPromise(workspacePath, featureName);
1318
1357
  result.steps.push(...dockerResult.steps);
1319
1358
  if (workspaceConfig.type === "polyrepo" && workspaceConfig.repos) for (const repo of workspaceConfig.repos) {
1320
- const targetPath = join(workspacePath, repo.name);
1359
+ const targetPath = join$1(workspacePath, repo.name);
1321
1360
  if (existsSync(targetPath) && lstatSync(targetPath).isSymbolicLink()) try {
1322
1361
  unlinkSync(targetPath);
1323
1362
  result.steps.push(`Removed symlink for ${repo.name}`);
@@ -1325,7 +1364,7 @@ async function removeWorkspacePromise(options) {
1325
1364
  result.errors.push(`${repo.name}: ${unlinkErr.message}`);
1326
1365
  }
1327
1366
  else if (existsSync(targetPath)) {
1328
- const worktreeResult = await removeWorktree(join(projectConfig.path, repo.path), targetPath, `${repo.branch_prefix || "feature/"}${featureName}`);
1367
+ const worktreeResult = await removeWorktree(join$1(projectConfig.path, repo.path), targetPath, `${repo.branch_prefix || "feature/"}${featureName}`);
1329
1368
  if (worktreeResult.success) result.steps.push(`Removed worktree for ${repo.name}`);
1330
1369
  else result.errors.push(worktreeResult.message);
1331
1370
  }
@@ -1355,7 +1394,7 @@ async function removeWorkspacePromise(options) {
1355
1394
  result.steps.push(...humeResult.steps);
1356
1395
  }
1357
1396
  if (workspaceConfig.ports) {
1358
- for (const [portName] of Object.entries(workspaceConfig.ports)) if (releasePort(join(projectConfig.path, `.${portName}-ports`), featureFolder)) result.steps.push(`Released ${portName} port`);
1397
+ for (const [portName] of Object.entries(workspaceConfig.ports)) if (releasePort(join$1(projectConfig.path, `.${portName}-ports`), featureFolder)) result.steps.push(`Released ${portName} port`);
1359
1398
  }
1360
1399
  const orphanedContainers = await getContainersReferencingWorkspacePathPromise(workspacePath);
1361
1400
  if (orphanedContainers.length > 0) result.errors.push(`Cannot remove workspace directory: ${orphanedContainers.length} Docker container(s) still reference compose paths in ${DEVCONTAINER_DIRNAME}/. Run workspace Docker cleanup first or stop the containers manually.`);
@@ -1428,6 +1467,6 @@ var init_workspace_manager = __esmMin((() => {
1428
1467
  });
1429
1468
  }));
1430
1469
  //#endregion
1431
- export { removeWorkspace as a, preTrustDirectorySync as c, init_platform as d, copyOverdeckSettingsToWorkspaceSync as f, preTrustDirectory as i, relocateVenvScripts as l, getContainersReferencingWorkspacePath as n, stopWorkspaceDocker as o, ensurePanGitignoreSync as p, init_workspace_manager as r, installPreRebaseHook as s, createWorkspace as t, detectPlatform as u };
1470
+ export { removeWorkspace as a, installGitHooksInDir as c, relocateVenvScripts as d, detectPlatform as f, ensurePanGitignoreSync as h, preTrustDirectory as i, installPreRebaseHook as l, copyOverdeckSettingsToWorkspaceSync as m, getContainersReferencingWorkspacePath as n, stopWorkspaceDocker as o, init_platform as p, init_workspace_manager as r, init_git_hooks as s, createWorkspace as t, preTrustDirectorySync as u };
1432
1471
 
1433
- //# sourceMappingURL=workspace-manager-CBhNdzE4.js.map
1472
+ //# sourceMappingURL=workspace-manager-BPgTrG66.js.map