@overdeck/desktop 0.45.23 → 0.46.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 (549) hide show
  1. package/drizzle/overdeck/0000_overdeck_init.sql +34 -0
  2. package/package.json +1 -1
  3. package/server/{acceptance-criteria-DOA0KgXx.js → acceptance-criteria-CCwFGICj.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-BBu6DSNm.js → advancing-selfheal-De1L-Sb4.js} +6 -6
  7. package/server/{agent-gc-BV1q_2EV.js → agent-gc-CBULruzm.js} +5 -5
  8. package/server/agent-state-VQk8fY9F.js +3 -0
  9. package/server/{agent-state-service-HoK8U4jW.js → agent-state-service-BlnSkRFA.js} +5 -5
  10. package/server/{agent-state-service-CnzFKSAQ.js → agent-state-service-hZpxIw1E.js} +1 -1
  11. package/server/agents-BKKkxKgK.js +3 -0
  12. package/server/{agents-B4Bjbkfv.js → agents-C5rWYhb6.js} +4 -4
  13. package/server/archive-planning-0FJ6Xd3b.js +2 -0
  14. package/server/{archive-planning-DYrYojxl.js → archive-planning-C0lAbNB_.js} +16 -24
  15. package/server/{artifact-index-jobs-C-xy7Z5v.js → artifact-index-jobs-ug6ZxIP5.js} +2 -2
  16. package/server/assemble-DnffNpOo.js +339 -0
  17. package/server/{backlog-auto-trigger-GtG71X8H.js → backlog-auto-trigger-Dh-i9PQf.js} +3 -3
  18. package/server/{behavior-B_-4EKF3.js → behavior-CfIg6pKp.js} +2 -2
  19. package/server/bridge-pool-patrol-CUFmjVDN.js +136 -0
  20. package/server/{briefing-freshness-DWdW7vUm.js → briefing-freshness-DHmCSLar.js} +2 -2
  21. package/server/{build-info-DgTqZkL5.js → build-info-BP160gU7.js} +1 -1
  22. package/server/{build-info-BT096lEl.js → build-info-CuFfxZxp.js} +5 -3
  23. package/server/{checkpoint-manager-DDqcGyu8.js → checkpoint-manager-DEWD82qK.js} +2 -2
  24. package/server/{checkpoint-manager-B7Bt29J0.js → checkpoint-manager-Dxh0FYsv.js} +1 -1
  25. package/server/checkpoint-worker.js +1 -1
  26. package/server/{checkpoints-C-AXLfYT.js → checkpoints-CZvbtLnr.js} +2 -2
  27. package/server/{checkpoints-CpgCjAlN.js → checkpoints-DMTgXuLG.js} +1 -1
  28. package/server/{claude-hooks-provision-C8wdRnN1.js → claude-hooks-provision-CN-xo-do.js} +1 -1
  29. package/server/{claude-hooks-provision-but-_qGY.js → claude-hooks-provision-fvy4RD2b.js} +13 -2
  30. package/server/{claude-permissions-H_5wHQZQ.js → claude-permissions-CN0cSCPp.js} +2 -2
  31. package/server/{claude-settings-overlay-CbSz0Dvb.js → claude-settings-overlay-CJn35FHQ.js} +2 -2
  32. package/server/{claude-settings-overlay-BTENVmYf.js → claude-settings-overlay-Dabi9slj.js} +1 -1
  33. package/server/cli-DmXETsw-.js +3 -0
  34. package/server/{cli-vBeXbPrq.js → cli-oCWYA1pE.js} +9 -9
  35. package/server/{cliproxy-Bgb2XCqi.js → cliproxy-C8mB3KuB.js} +2 -2
  36. package/server/{cliproxy-DW0V86F8.js → cliproxy-PGwTX_o8.js} +1 -1
  37. package/server/{close-issue-Dn_4c4G8.js → close-issue-D5MF5GqF.js} +5 -5
  38. package/server/{closed-issue-reaper-CWpY2uBw.js → closed-issue-reaper-CJ24u0Zt.js} +1 -1
  39. package/server/{closed-issue-reaper-hANY_ehE.js → closed-issue-reaper-Cltx86x5.js} +37 -16
  40. package/server/{codex-Dg7Is5yb.js → codex-BdEsUFWh.js} +1 -1
  41. package/server/{codex-TmSi-yTv.js → codex-Drlf5Xhf.js} +37 -8
  42. package/server/{codex-parser-C4gSH-IR.js → codex-parser-DpB89Vqa.js} +2 -2
  43. package/server/compaction-continuation-K2AxQX4H.js +200 -0
  44. package/server/{config-DjLOdbgT.js → config-B2IMcBxx.js} +4 -3
  45. package/server/{config-DUIhMN_T.js → config-DV-grfQc.js} +1 -1
  46. package/server/{config-CCvjQf27.js → config-Dr3pW6w6.js} +2 -2
  47. package/server/{config-yaml-DvyMuOle.js → config-yaml-CmOPzmBb.js} +290 -22
  48. package/server/{conflict-gate-CmrYpa47.js → conflict-gate-B9cN3SBi.js} +4 -4
  49. package/server/{conflict-gate-BSJkNTdp.js → conflict-gate-Dh754uyA.js} +1 -1
  50. package/server/context-layers-D6LZo3l1.js +4 -0
  51. package/server/context-layers-dR5YxHYB.js +37 -0
  52. package/server/{control-settings-aP1ANIlI.js → control-settings-C7DUehE1.js} +49 -19
  53. package/server/{conversation-compaction-CNbTLB86.js → conversation-compaction-BoqdDXWF.js} +8 -8
  54. package/server/{conversation-compaction-DiG5zWQq.js → conversation-compaction-Dj4FAKoZ.js} +1 -1
  55. package/server/{conversation-service-Du-MTNpJ.js → conversation-service-5aCnq1zR.js} +331 -20
  56. package/server/conversation-service-BCxl4f8Z.js +3 -0
  57. package/server/{conversations-DbOs1e9Q.js → conversations-BUpYsOZg.js} +5 -5
  58. package/server/{conversations-6mPANqvL.js → conversations-C34dyIb9.js} +1 -1
  59. package/server/{cost-Ca0YTWDw.js → cost-Bgcub5kW.js} +12 -2
  60. package/server/{cost-CW4WSe72.js → cost-CvxRrucd.js} +3 -3
  61. package/server/{cost-sync-C0VdGme1.js → cost-sync-Dv3LUaNW.js} +3 -3
  62. package/server/{dag-CdOjJVDT.js → dag-ombYYt4s.js} +2 -2
  63. package/server/{dangerous-git-ops-CT-IypG3.js → dangerous-git-ops-BcJPC5Rr.js} +1 -1
  64. package/server/dashboard-db-worker.js +7 -7
  65. package/server/deacon-DrXqT9LQ.js +4 -0
  66. package/server/{deacon-pRnyD5w9.js → deacon-hi9KLPLT.js} +2998 -2659
  67. package/server/{deacon-nudge-log-Bjg8U4Y9.js → deacon-nudge-log-BNBebzeL.js} +3 -3
  68. package/server/deacon-pending-lifecycle-Cpk0k7Hi.js +33 -0
  69. package/server/{deacon-swarm-DftYRDo8.js → deacon-swarm-DBxUaO-A.js} +13 -13
  70. package/server/deacon-swarm-I2JfX5Tg.js +2 -0
  71. package/server/deacon.js +14 -19
  72. package/server/dead-end-trip-CQcP70ND.js +13 -0
  73. package/server/delivery-Da0zEMY4.js +3 -0
  74. package/server/{deploy-patrol-Bjsho_ha.js → deploy-patrol-Df-Tmaq0.js} +69 -18
  75. package/server/deploy-queue-9SrhZR63.js +3 -0
  76. package/server/deploy-queue-UjKGYsDe.js +169 -0
  77. package/server/deploy-window-jOiPRHL0.js +3 -0
  78. package/server/{deploy-window-DeP_OIRk.js → deploy-window-rpqpWqHA.js} +40 -16
  79. package/server/{dev-supervisor-BpMoHlkR.js → dev-supervisor-CC46Ig8q.js} +2 -2
  80. package/server/{devcontainer-renderer-CtUgrVKW.js → devcontainer-renderer-68CSCRnu.js} +3 -3
  81. package/server/{dist-DyRx4cI7.js → dist-CJy72uEg.js} +1 -1
  82. package/server/dist-DSlxIU1H.js +3 -0
  83. package/server/{dist-src-BSoS7mkd.js → dist-src-Bik83hFi.js} +1 -1
  84. package/server/docker-BMVTSFL5.js +3 -0
  85. package/server/{docker-BK7HIcBj.js → docker-Dam7mbIB.js} +2 -2
  86. package/server/{dod-BrSfUHm0.js → dod-Dar-yheg.js} +8 -4
  87. package/server/durable-review-pipeline-CGZ5QBxh.js +17 -0
  88. package/server/durable-review-pipeline-jpgCJZFp.js +3 -0
  89. package/server/{ensure-devcontainer-DseivYEy.js → ensure-devcontainer-B057YA81.js} +4 -4
  90. package/server/{ensure-devcontainer-DRqaAkBR.js → ensure-devcontainer-C98V8yW-.js} +1 -1
  91. package/server/{esm-shims-CbI3BVkl.js → esm-shims-Br9BPdkR.js} +1 -1
  92. package/server/{event-store-Cr5PQwFC.js → event-store-ELqkVOn0.js} +1 -1
  93. package/server/{event-store-tdiY5eDZ.js → event-store-zY5MJHgF.js} +23 -4
  94. package/server/{events-CvvGK6LT.js → events-D6pyqhzM.js} +1 -1
  95. package/server/{events-CC1dgUpx.js → events-D9PR1IC0.js} +3 -3
  96. package/server/{factory-CynerjXO.js → factory-CRoOpGsF.js} +5 -5
  97. package/server/{feature-registry-population-B0pmAz0a.js → feature-registry-population--YUXU999.js} +4 -4
  98. package/server/{feature-registry-storage-_wUBRD3J.js → feature-registry-storage-BORBTo0y.js} +2 -2
  99. package/server/{features-Dhxz-wLc.js → features--nFkJY8v.js} +2 -2
  100. package/server/{feedback-target-iygZwmMc.js → feedback-target-C0ZzyHvU.js} +1 -1
  101. package/server/{feedback-target-CPS15Vte.js → feedback-target-Dt9BsapX.js} +8 -8
  102. package/server/{feedback-writer-C9b6ccN1.js → feedback-writer-BG0RUZiu.js} +5 -5
  103. package/server/{feedback-writer-qmiMbqTZ.js → feedback-writer-D1fm-5Z8.js} +1 -1
  104. package/server/flywheel-BekukH4i.js +2 -0
  105. package/server/flywheel-BiT3odRb.js +1092 -0
  106. package/server/flywheel-CLVB55Be.js +478 -0
  107. package/server/flywheel-merge-order-BJv1DZz1.js +462 -0
  108. package/server/flywheel-merge-order-BKw9o6ku.js +2 -0
  109. package/server/forge-CZbSg6Ds.js +383 -0
  110. package/server/forge-DK3blQb_.js +3 -0
  111. package/server/{from-CJ_aH5jD.js → from-D_4_dk7i.js} +1 -1
  112. package/server/{fts-db-CKgg0VKg.js → fts-db-BeOomFa-.js} +2 -2
  113. package/server/{fts-operations-BrL_VTRr.js → fts-operations-BdewJ_g9.js} +2 -2
  114. package/server/git-utils-CI6cwyyC.js +3 -0
  115. package/server/{git-utils-BVa07a4a.js → git-utils-ameCgDdy.js} +93 -3
  116. package/server/{github-app-CMBdIFBQ.js → github-app-CQ1Lo6LA.js} +19 -8
  117. package/server/{github-app-CPfoFAdV.js → github-app-DtAsvwzK.js} +1 -1
  118. package/server/{github-client--XVlDpwM.js → github-client-BfyDxuRN.js} +2 -2
  119. package/server/{github-client-B4QsdE-X.js → github-client-Cj0yl_07.js} +1 -1
  120. package/server/github-pr-lookup-BDq6Wznz.js +58 -0
  121. package/server/{harness-binary-CVio2m-u.js → harness-binary-DqkftwTb.js} +32 -6
  122. package/server/{harness-resolve-qHJBhy3Z.js → harness-resolve-CqMqM1Mb.js} +18 -9
  123. package/server/{health-events-C9B8y1Hm.js → health-events-CazRxJUS.js} +2 -2
  124. package/server/{health-events-CpfvuVmm.js → health-events-_xfTaOUs.js} +1 -1
  125. package/server/{hooks-DUXw8A0-.js → hooks-BO3QT1sn.js} +2 -2
  126. package/server/{hooks-ltecuFqZ.js → hooks-BnJsxlSq.js} +1 -1
  127. package/server/{hume-BEq0bUDg.js → hume-CDYJxqx-.js} +2 -2
  128. package/server/hume-Dq--7rOQ.js +3 -0
  129. package/server/{idle-stack-reaper-D7w9t3fE.js → idle-stack-reaper-BYqERdkE.js} +1 -1
  130. package/server/{idle-stack-reaper-w1ISSlhs.js → idle-stack-reaper-CnGx_PO_.js} +99 -6
  131. package/server/in-flight-guard-Bq3epG58.js +45 -0
  132. package/server/{infra-CzaSOgul.js → infra-BjuxvjdS.js} +80 -5
  133. package/server/{injection-oNZeoDhL.js → injection-DZxlV2al.js} +1 -1
  134. package/server/{injection-DZ0PfYa4.js → injection-UCf8EsjX.js} +191 -183
  135. package/server/{inspect-agent-DJKLWcVT.js → inspect-agent-6kylZnrm.js} +139 -82
  136. package/server/inspect-agent-BVwDrVrz.js +2 -0
  137. package/server/{internal-token-Bb4XeV2x.js → internal-token-DvMTQSOS.js} +2 -2
  138. package/server/{internal-token-DXdfprGr.js → internal-token-M9omeXM1.js} +1 -1
  139. package/server/{io-B3_AHDfr.js → io-VHvc0Ssp.js} +43 -26
  140. package/server/{issue-closed-zhdvQicO.js → issue-closed-B6KJkmHZ.js} +7 -7
  141. package/server/{issue-lifecycle-Dy4vd0Oa.js → issue-lifecycle-9gk3fnXN.js} +1 -1
  142. package/server/{issue-lifecycle-CreaCkjW.js → issue-lifecycle-C4Zj0WmE.js} +34 -28
  143. package/server/{issue-service-singleton-B5ushCvE.js → issue-service-singleton-DmCh7EHj.js} +10 -10
  144. package/server/{issue-service-singleton-DabvBWUp.js → issue-service-singleton-PMx8F1jr.js} +1 -1
  145. package/server/{issues-B6ToV6x1.js → issues-CgnQ1OGQ.js} +2 -2
  146. package/server/{jsonl-parser-Dhflo1SH.js → jsonl-parser-DJOH_O-w.js} +5 -4
  147. package/server/{label-cleanup-BKPJm4Hv.js → label-cleanup-Dv7AV_R1.js} +3 -3
  148. package/server/{label-reconciler-DdWbHEBu.js → label-reconciler--F85rufp.js} +4 -4
  149. package/server/{lifecycle-DfeyBDwA.js → lifecycle-CTdOWYMi.js} +2 -2
  150. package/server/{lifecycle-sycO16hj.js → lifecycle-DDN8ApVY.js} +6 -7
  151. package/server/{lifecycle-io-D8iNBcux.js → lifecycle-io-D-lGdzK3.js} +5 -5
  152. package/server/{lifecycle-io-Bsnr2K4F.js → lifecycle-io-D_zTLvP1.js} +1 -1
  153. package/server/{linear-client-D4zqMnX7.js → linear-client-BQU36QqE.js} +2 -2
  154. package/server/{linear-client-DqhDQO9k.js → linear-client-CY4O_Tu3.js} +1 -1
  155. package/server/linear-mcp-auth-BnU4TYfY.js +280 -0
  156. package/server/linear-mcp-auth-NYBq_oHZ.js +2 -0
  157. package/server/memory-fts-worker.js +1 -1
  158. package/server/{merge-C_ZEhbqI.js → merge-Bpx4jjht.js} +13 -11
  159. package/server/{merge-agent-XrB80vfT.js → merge-agent-DdMVSV2Y.js} +233 -83
  160. package/server/{merge-agent-BQM3a8z5.js → merge-agent-DrXa1CpW.js} +1 -1
  161. package/server/{merge-batch-Bwoyr8Je.js → merge-batch-C5q1c1GX.js} +1 -1
  162. package/server/merge-completeness-BMm8tMyZ.js +277 -0
  163. package/server/merge-completeness-D0ljXbk3.js +3 -0
  164. package/server/{merge-DK23JEdS.js → merge-idOG--29.js} +1 -1
  165. package/server/merge-ops-DdpTiEMt.js +2 -0
  166. package/server/merge-rebase-DGQpYJU3.js +2 -0
  167. package/server/{merge-rebase-C1KIVr0s.js → merge-rebase-xLnMlw5h.js} +3 -3
  168. package/server/merge-set-DH7ot3yz.js +89 -0
  169. package/server/merge-set-DzsOTBg5.js +3 -0
  170. package/server/{merge-sync-DZ9dojJn.js → merge-sync-CQ-LgZ1_.js} +406 -153
  171. package/server/merge-sync-Ca7F5JnQ.js +3 -0
  172. package/server/{merge-train-DxDfBTjr.js → merge-train-DTEMyIu4.js} +18 -8
  173. package/server/{merge-train-deps-CyYQUksx.js → merge-train-deps-CNPJzepw.js} +4 -4
  174. package/server/merge-verification-x3JO8Dtz.js +220 -0
  175. package/server/merged-docker-cleanup-worker-CTpC27Bs.js +107 -0
  176. package/server/merged-docker-cleanup-worker-Cdi9apm-.js +3 -0
  177. package/server/{multipart-parser-Dt8YPN5S.js → multipart-parser-IMSBfePV.js} +2 -2
  178. package/server/{no-resume-mode-Cx3K0hHi.js → no-resume-mode-C5ULAXwO.js} +1 -1
  179. package/server/node_modules/.package-lock.json +27 -27
  180. package/server/node_modules/@effect/platform-node/node_modules/@effect/platform-node-shared/package.json +3 -3
  181. package/server/node_modules/@google-cloud/common/package.json +2 -2
  182. package/server/node_modules/gaxios/build/cjs/tsconfig.cjs.tsbuildinfo +1 -1
  183. package/server/node_modules/gaxios/build/esm/tsconfig.tsbuildinfo +1 -1
  184. package/server/node_modules/gaxios/package.json +1 -1
  185. package/server/node_modules/google-auth-library/build/src/auth/googleauth.js +24 -19
  186. package/server/node_modules/google-auth-library/package.json +1 -1
  187. package/server/node_modules/google-gax/build/protos/google/api/auth.proto +2 -1
  188. package/server/node_modules/google-gax/build/protos/google/api/backend.proto +12 -1
  189. package/server/node_modules/google-gax/build/protos/google/api/billing.proto +1 -1
  190. package/server/node_modules/google-gax/build/protos/google/api/client.proto +165 -53
  191. package/server/node_modules/google-gax/build/protos/google/api/cloudquotas/v1/resources.proto +1 -1
  192. package/server/node_modules/google-gax/build/protos/google/api/cloudquotas/v1beta/quota_adjuster_settings.proto +7 -3
  193. package/server/node_modules/google-gax/build/protos/google/api/cloudquotas/v1beta/resources.proto +1 -1
  194. package/server/node_modules/google-gax/build/protos/google/api/config_change.proto +1 -1
  195. package/server/node_modules/google-gax/build/protos/google/api/context.proto +1 -1
  196. package/server/node_modules/google-gax/build/protos/google/api/control.proto +3 -3
  197. package/server/node_modules/google-gax/build/protos/google/api/distribution.proto +1 -1
  198. package/server/node_modules/google-gax/build/protos/google/api/documentation.proto +1 -1
  199. package/server/node_modules/google-gax/build/protos/google/api/endpoint.proto +1 -1
  200. package/server/node_modules/google-gax/build/protos/google/api/error_reason.proto +186 -1
  201. package/server/node_modules/google-gax/build/protos/google/api/expr/v1alpha1/checked.proto +31 -3
  202. package/server/node_modules/google-gax/build/protos/google/api/expr/v1alpha1/eval.proto +8 -9
  203. package/server/node_modules/google-gax/build/protos/google/api/expr/v1alpha1/explain.proto +1 -2
  204. package/server/node_modules/google-gax/build/protos/google/api/expr/v1alpha1/syntax.proto +20 -22
  205. package/server/node_modules/google-gax/build/protos/google/api/expr/v1alpha1/value.proto +2 -3
  206. package/server/node_modules/google-gax/build/protos/google/api/field_behavior.proto +1 -1
  207. package/server/node_modules/google-gax/build/protos/google/api/field_info.proto +1 -1
  208. package/server/node_modules/google-gax/build/protos/google/api/http.proto +1 -1
  209. package/server/node_modules/google-gax/build/protos/google/api/httpbody.proto +1 -1
  210. package/server/node_modules/google-gax/build/protos/google/api/label.proto +1 -1
  211. package/server/node_modules/google-gax/build/protos/google/api/launch_stage.proto +1 -1
  212. package/server/node_modules/google-gax/build/protos/google/api/log.proto +1 -1
  213. package/server/node_modules/google-gax/build/protos/google/api/logging.proto +1 -1
  214. package/server/node_modules/google-gax/build/protos/google/api/metric.proto +1 -1
  215. package/server/node_modules/google-gax/build/protos/google/api/monitored_resource.proto +1 -1
  216. package/server/node_modules/google-gax/build/protos/google/api/monitoring.proto +1 -1
  217. package/server/node_modules/google-gax/build/protos/google/api/policy.proto +1 -1
  218. package/server/node_modules/google-gax/build/protos/google/api/quota.proto +1 -1
  219. package/server/node_modules/google-gax/build/protos/google/api/resource.proto +1 -1
  220. package/server/node_modules/google-gax/build/protos/google/api/routing.proto +8 -4
  221. package/server/node_modules/google-gax/build/protos/google/api/service.proto +2 -3
  222. package/server/node_modules/google-gax/build/protos/google/api/source_info.proto +1 -1
  223. package/server/node_modules/google-gax/build/protos/google/api/system_parameter.proto +1 -1
  224. package/server/node_modules/google-gax/build/protos/google/api/usage.proto +7 -27
  225. package/server/node_modules/google-gax/build/protos/google/api/visibility.proto +1 -1
  226. package/server/node_modules/google-gax/build/protos/google/longrunning/operations.proto +20 -1
  227. package/server/node_modules/google-gax/build/protos/google/protobuf/any.proto +52 -108
  228. package/server/node_modules/google-gax/build/protos/google/protobuf/compiler/ruby/ruby_generated_code.proto +2 -0
  229. package/server/node_modules/google-gax/build/protos/google/protobuf/cpp_features.proto +21 -1
  230. package/server/node_modules/google-gax/build/protos/google/protobuf/cpp_file_options.proto +24 -0
  231. package/server/node_modules/google-gax/build/protos/google/protobuf/cpp_options.proto +15 -0
  232. package/server/node_modules/google-gax/build/protos/google/protobuf/descriptor.proto +118 -30
  233. package/server/node_modules/google-gax/build/protos/google/protobuf/field_mask.proto +16 -18
  234. package/server/node_modules/google-gax/build/protos/google/protobuf/internal_options.proto +8 -1
  235. package/server/node_modules/google-gax/build/protos/google/protobuf/json/json_enumval_custom_string.proto +26 -0
  236. package/server/node_modules/google-gax/build/protos/google/protobuf/json_enumvalue_options.proto +29 -0
  237. package/server/node_modules/google-gax/build/protos/google/protobuf/json_options.proto +14 -0
  238. package/server/node_modules/google-gax/build/protos/google/protobuf/struct.proto +38 -22
  239. package/server/node_modules/google-gax/build/protos/google/protobuf/test_protos/forced_micro_string.proto +3 -0
  240. package/server/node_modules/google-gax/build/protos/google/protobuf/test_protos/repeated_field_proxy_import_message.proto +14 -0
  241. package/server/node_modules/google-gax/build/protos/google/protobuf/timestamp.proto +9 -8
  242. package/server/node_modules/google-gax/build/protos/google/protobuf/util/json_format_proto3.proto +18 -0
  243. package/server/node_modules/google-gax/build/protos/google/rpc/code.proto +1 -1
  244. package/server/node_modules/google-gax/build/protos/google/rpc/context/attribute_context.proto +7 -2
  245. package/server/node_modules/google-gax/build/protos/google/rpc/context/audit_context.proto +1 -1
  246. package/server/node_modules/google-gax/build/protos/google/rpc/error_details.proto +5 -5
  247. package/server/node_modules/google-gax/build/protos/google/rpc/http.proto +1 -1
  248. package/server/node_modules/google-gax/build/protos/google/rpc/status.proto +1 -2
  249. package/server/node_modules/google-gax/build/protos/google/type/calendar_period.proto +1 -1
  250. package/server/node_modules/google-gax/build/protos/google/type/color.proto +9 -10
  251. package/server/node_modules/google-gax/build/protos/google/type/date.proto +11 -9
  252. package/server/node_modules/google-gax/build/protos/google/type/datetime.proto +17 -17
  253. package/server/node_modules/google-gax/build/protos/google/type/dayofweek.proto +1 -1
  254. package/server/node_modules/google-gax/build/protos/google/type/decimal.proto +11 -13
  255. package/server/node_modules/google-gax/build/protos/google/type/expr.proto +1 -1
  256. package/server/node_modules/google-gax/build/protos/google/type/fraction.proto +1 -1
  257. package/server/node_modules/google-gax/build/protos/google/type/interval.proto +1 -2
  258. package/server/node_modules/google-gax/build/protos/google/type/latlng.proto +4 -5
  259. package/server/node_modules/google-gax/build/protos/google/type/localized_text.proto +3 -3
  260. package/server/node_modules/google-gax/build/protos/google/type/money.proto +1 -2
  261. package/server/node_modules/google-gax/build/protos/google/type/month.proto +1 -1
  262. package/server/node_modules/google-gax/build/protos/google/type/phone_number.proto +20 -15
  263. package/server/node_modules/google-gax/build/protos/google/type/postal_address.proto +39 -39
  264. package/server/node_modules/google-gax/build/protos/google/type/quaternion.proto +4 -4
  265. package/server/node_modules/google-gax/build/protos/google/type/timeofday.proto +11 -8
  266. package/server/node_modules/google-gax/package.json +5 -5
  267. package/server/node_modules/retry-request/package.json +4 -4
  268. package/server/node_modules/teeny-request/package.json +5 -5
  269. package/server/node_modules/undici/README.md +5 -0
  270. package/server/node_modules/undici/docs/docs/api/Client.md +4 -0
  271. package/server/node_modules/undici/docs/docs/api/Dispatcher.md +6 -0
  272. package/server/node_modules/undici/docs/docs/api/Interceptors.md +59 -0
  273. package/server/node_modules/undici/docs/docs/api/MockAgent.md +27 -0
  274. package/server/node_modules/undici/docs/docs/api/MockPool.md +28 -1
  275. package/server/node_modules/undici/docs/docs/index.md +5 -0
  276. package/server/node_modules/undici/lib/cache/memory-cache-store.js +54 -9
  277. package/server/node_modules/undici/lib/cache/sqlite-cache-store.js +7 -1
  278. package/server/node_modules/undici/lib/core/request.js +13 -2
  279. package/server/node_modules/undici/lib/core/util.js +6 -1
  280. package/server/node_modules/undici/lib/dispatcher/agent.js +3 -3
  281. package/server/node_modules/undici/lib/dispatcher/client-h1.js +42 -8
  282. package/server/node_modules/undici/lib/dispatcher/client-h2.js +34 -43
  283. package/server/node_modules/undici/lib/global.js +36 -16
  284. package/server/node_modules/undici/lib/handler/cache-handler.js +269 -61
  285. package/server/node_modules/undici/lib/handler/cache-revalidation-handler.js +13 -3
  286. package/server/node_modules/undici/lib/handler/redirect-handler.js +5 -2
  287. package/server/node_modules/undici/lib/handler/retry-handler.js +30 -4
  288. package/server/node_modules/undici/lib/interceptor/cache.js +159 -52
  289. package/server/node_modules/undici/lib/interceptor/decompress.js +9 -2
  290. package/server/node_modules/undici/lib/mock/mock-interceptor.js +25 -7
  291. package/server/node_modules/undici/lib/mock/mock-utils.js +39 -10
  292. package/server/node_modules/undici/lib/util/cache.js +372 -68
  293. package/server/node_modules/undici/lib/util/date.js +23 -6
  294. package/server/node_modules/undici/lib/web/cookies/util.js +78 -8
  295. package/server/node_modules/undici/lib/web/fetch/body.js +2 -1
  296. package/server/node_modules/undici/lib/web/fetch/response.js +1 -3
  297. package/server/node_modules/undici/package.json +2 -2
  298. package/server/node_modules/undici/types/client.d.ts +2 -2
  299. package/server/node_modules/undici/types/dispatcher.d.ts +3 -3
  300. package/server/node_modules/undici/types/mock-interceptor.d.ts +5 -1
  301. package/server/{orphan-proposed-reconciler-BTkDrl4R.js → orphan-proposed-reconciler-CWmOdM9-.js} +1 -1
  302. package/server/{orphan-proposed-reconciler-neK8dHQk.js → orphan-proposed-reconciler-Dg6U4ADZ.js} +24 -15
  303. package/server/package-lock.json +28 -28
  304. package/server/package.json +1 -1
  305. package/server/{pan-dir-DeVUgwA7.js → pan-dir-ubraCiUg.js} +24 -10
  306. package/server/{paths-_zEts6wc.js → paths-cXmOwSbh.js} +2 -2
  307. package/server/pending-lifecycle-claim-DEteYdS9.js +110 -0
  308. package/server/{pickup-Dd0Znxxy.js → pickup-D8xtG1J2.js} +17 -16
  309. package/server/pipeline-membership-BGSvkT2M.js +3 -0
  310. package/server/pipeline-membership-CrAPLYtf.js +57 -0
  311. package/server/{pipeline-membership-0HaEGDlH.js → pipeline-membership-gather-CET40frr.js} +177 -109
  312. package/server/pipeline-membership-gather-DTfcgxLl.js +3 -0
  313. package/server/{pipeline-notifier-D0ykk59O.js → pipeline-notifier-BuQ0e4hF.js} +2 -2
  314. package/server/{pipeline-notifier-6iCJplFZ.js → pipeline-notifier-ImNXknf0.js} +1 -1
  315. package/server/post-merge-lifecycle-worker-DbO10pum.js +50 -0
  316. package/server/{project-pipelines-2sK1apsO.js → project-pipelines-Bim6bThI.js} +2 -2
  317. package/server/project-repos-C0nuoBGv.js +98 -0
  318. package/server/project-repos-CRE6Ykow.js +3 -0
  319. package/server/projects-B03Wr-xc.js +3 -0
  320. package/server/{prompts-Dp4Tpk39.js → prompts-BEx08AIu.js} +2 -2
  321. package/server/{providers-DKkBXhxU.js → providers-D7IluJe0.js} +1 -1
  322. package/server/{providers-DV7ec8l7.js → providers-evXhiQeg.js} +7 -7
  323. package/server/public/assets/{chunk-BO2N2NFS-CltymLRg.js → chunk-BO2N2NFS-D1s4-Sqp.js} +4 -4
  324. package/server/public/assets/{diagram-OG6HWLK6-D2f6pjgA.js → diagram-OG6HWLK6-1gdMoSF7.js} +1 -1
  325. package/server/public/assets/{dist-BWR4qFiV.js → dist-CxAOHbil.js} +1 -1
  326. package/server/public/assets/{dist-DEmlBBNQ.js → dist-DqDRYW6P.js} +3 -3
  327. package/server/public/assets/{ganttDiagram-6RSMTGT7-DnfiViPK.js → ganttDiagram-6RSMTGT7-BYex-Ec7.js} +1 -1
  328. package/server/public/assets/{highlighted-body-OFNGDK62-B8Wrmj9H.js → highlighted-body-OFNGDK62-DlVkiG0S.js} +1 -1
  329. package/server/public/assets/index-Cc7cnFC4.css +1 -0
  330. package/server/public/assets/index-K0hAYCgV.js +807 -0
  331. package/server/public/assets/{linear-C9zFQpkX.js → linear-B4cuEFmO.js} +1 -1
  332. package/server/public/assets/mermaid-GHXKKRXX-DyDHFXHV.js +1 -0
  333. package/server/public/assets/{pieDiagram-4H26LBE5-lR8H7Yjd.js → pieDiagram-4H26LBE5-CBHNBIJQ.js} +1 -1
  334. package/server/public/assets/{prod-B1jCQihw.js → prod-CN2nHBvX.js} +4 -4
  335. package/server/public/assets/{quadrantDiagram-W4KKPZXB-CVQ2guem.js → quadrantDiagram-W4KKPZXB-Bom87VOQ.js} +1 -1
  336. package/server/public/assets/{sankeyDiagram-5OEKKPKP-eD1RB4gm.js → sankeyDiagram-5OEKKPKP-UrBeyLxk.js} +1 -1
  337. package/server/public/assets/{xychartDiagram-2RQKCTM6-ChEC6dQn.js → xychartDiagram-2RQKCTM6-DhkbrIxR.js} +1 -1
  338. package/server/public/index.html +2 -2
  339. package/server/{pull-requests--Ib2jTgy.js → pull-requests-Cv7LxzUN.js} +1 -1
  340. package/server/{pull-requests-CXIhdCYD.js → pull-requests-DHWiKxo7.js} +19 -10
  341. package/server/{queries-6d7Cdtm7.js → queries-DHJm7bTd.js} +1134 -203
  342. package/server/{rally-B708-nZn.js → rally-B71M9f4o.js} +3 -3
  343. package/server/rally-YDjU513q.js +3 -0
  344. package/server/{rally-api-yjQ0TfHd.js → rally-api-D5uXN08-.js} +1 -1
  345. package/server/{rally-api-nY0ZANw3.js → rally-api-Dkqmok65.js} +2 -2
  346. package/server/{rally-client-B1EJhfV0.js → rally-client-Bfqm6XI4.js} +4 -4
  347. package/server/{rally-client-CULK2XAY.js → rally-client-CxsA6ExK.js} +1 -1
  348. package/server/{reap-terminal-sessions-MWnqdLCJ.js → reap-terminal-sessions-BQ23nriz.js} +2 -2
  349. package/server/{reap-terminal-sessions-N3BTkmX_.js → reap-terminal-sessions-CvmwaqKv.js} +2 -2
  350. package/server/{rebuild-stack-Dp4eLkt4.js → rebuild-stack-0EEYReVZ.js} +36 -36
  351. package/server/rebuild-stack-qeRqHZxH.js +4 -0
  352. package/server/{reconstruct-cache-uWbZfjms.js → reconstruct-cache-BbYFsqLa.js} +7 -6
  353. package/server/record-CtroO946.js +3 -0
  354. package/server/record-update-DH6dLJID.js +3 -0
  355. package/server/{record-update-Dq0t2uBG.js → record-update-Z0QCxmMp.js} +124 -34
  356. package/server/{recovery-trip-BJtIQuag.js → recovery-trip-eJe26h-f.js} +2 -2
  357. package/server/{release-engine-DZpmGGzb.js → release-engine-lPUp-MTd.js} +5 -5
  358. package/server/{release-set-hnXd_kga.js → release-set-BwGeyZKX.js} +3 -3
  359. package/server/{remote-Br-ZWVIP.js → remote-BCd02Es1.js} +3 -3
  360. package/server/{remote-4tiENDaI.js → remote-CVGUhXMV.js} +3 -3
  361. package/server/{remote-agents-CRCg1L4H.js → remote-agents-C1bssi41.js} +2 -2
  362. package/server/{remote-agents-nmty1mLu.js → remote-agents-C_VxssLU.js} +300 -46
  363. package/server/{remote-completion-BbWNd10K.js → remote-completion-DAB0P706.js} +12 -12
  364. package/server/resume-u9byntrq.js +3 -0
  365. package/server/{review-agent-DJRO8EG8.js → review-agent-CD4RCI0Y.js} +1 -1
  366. package/server/{review-agent-sKkE1FEL.js → review-agent-CHhI66UP.js} +61 -44
  367. package/server/{review-artifacts-BLbSC4ke.js → review-artifacts-DSMRIfuJ.js} +7 -6
  368. package/server/{review-context-BgX3lcCx.js → review-context-oFuBbiEE.js} +69 -25
  369. package/server/{in-flight-guard-aQ1IxeI3.js → review-convoy-liveness-CpzrcJ5F.js} +3 -44
  370. package/server/review-status-BZH8h-6W.js +3 -0
  371. package/server/review-status-emit-CUExtHd5.js +50 -0
  372. package/server/{review-status-enrichment-tbOn_A_u.js → review-status-enrichment-QV_hQkgS.js} +4 -4
  373. package/server/{review-status-source-CxuEjLGg.js → review-status-source-CpvJnvnQ.js} +24 -3
  374. package/server/review-status-source-ylw5QZUR.js +3 -0
  375. package/server/{review-status-sync-BhSQ0d0l.js → review-status-sync-483sujRo.js} +10 -5
  376. package/server/{review-status-sync-To3-iS-N.js → review-status-sync-NaWvI9Xf.js} +1 -1
  377. package/server/review-status-yljtTd-q.js +7521 -0
  378. package/server/{review-verdict-feedback-C1Kg8n7t.js → review-verdict-feedback-BPDn4li_.js} +1 -1
  379. package/server/{review-verdict-feedback-CTRNtzXO.js → review-verdict-feedback-CELeUinh.js} +48 -8
  380. package/server/{rollup-WA0VD-Rr.js → rollup-DTNvelz9.js} +8 -8
  381. package/server/{rollup-B53Y81xK.js → rollup-DYZfq1c4.js} +1 -1
  382. package/server/{scanner-D2743cp8.js → scanner-CV35oSn4.js} +42 -14
  383. package/server/{sequence-io-Cg0zYj_E.js → sequence-io-DF_8iuhV.js} +4 -4
  384. package/server/{sequencer-agent-BGY8gjg-.js → sequencer-agent-B2WeCtGi.js} +5 -5
  385. package/server/server.js +3899 -672
  386. package/server/{service-DCpB_SGd.js → service-Br9rpBNA.js} +83 -65
  387. package/server/{session-fork-BQ8_6H32.js → session-fork-D0LY152N.js} +2 -2
  388. package/server/{session-history-CVZDpS3c.js → session-history-BUyK29eq.js} +4 -4
  389. package/server/{settings-BZ5m1UCl.js → settings-Bse1Pdcj.js} +3 -3
  390. package/server/settings-CdvIF84R.js +2 -0
  391. package/server/{settings-ylxwqwQG.js → settings-CvVGqNEs.js} +3 -2
  392. package/server/{shadow-engineering-BlxG6Xye.js → shadow-engineering-BWLa8ODz.js} +2 -2
  393. package/server/{shadow-state-Dh-HzF2J.js → shadow-state-B4fpKxOO.js} +2 -2
  394. package/server/{shadow-state-C2_epgx2.js → shadow-state-FV6PHfEW.js} +1 -1
  395. package/server/{shadow-utils-4bvjn9b3.js → shadow-utils-D7asqxOZ.js} +2 -2
  396. package/server/{ship-log-ClSMIzZX.js → ship-log-xplJ8t75.js} +1 -1
  397. package/server/{smart-compaction-CHIxLr_d.js → smart-compaction-CPp2Ykf6.js} +1 -1
  398. package/server/{smart-compaction-r4pHQBIr.js → smart-compaction-D3U_79f-.js} +8 -7
  399. package/server/{spawn-planning-session-KC_UduxD.js → spawn-planning-session-1nFi3gfk.js} +1 -1
  400. package/server/{spawn-planning-session-DWAorh2B.js → spawn-planning-session-DGfZ5B8D.js} +30 -23
  401. package/server/{specialist-completion-BXhav38U.js → specialist-completion-Br48eiDP.js} +1 -1
  402. package/server/{specialist-context-DtrYvGJ-.js → specialist-context-cVbGnTa3.js} +5 -5
  403. package/server/{specialist-handoff-logger-C45ouoZ6.js → specialist-handoff-logger-DK-GTz4s.js} +2 -2
  404. package/server/{specialist-logs-DJ3RzKxW.js → specialist-logs-Cl5-hqT8.js} +3 -3
  405. package/server/{specialists-JVO00bs7.js → specialists-CNfYO3G2.js} +1634 -457
  406. package/server/{specialists-DyFeedjn.js → specialists-Cicieuzu.js} +21 -19
  407. package/server/{specialists-D5fRZXmN.js → specialists-JHsdU3pA.js} +1 -1
  408. package/server/{specialists-DVj0hvaL.js → specialists-Tdezg_6N.js} +1 -1
  409. package/server/specs-Bt7WJDoC.js +3 -0
  410. package/server/src-CRmCHlma.js +11408 -0
  411. package/server/{src-CG9mCkP6.js → src-Ck028hjO.js} +6 -6
  412. package/server/{src-CMTQGyCK.js → src-UWcGe0Ix.js} +5 -5
  413. package/server/stack-health-CJLMrLBl.js +3 -0
  414. package/server/{stack-health-puygdaMd.js → stack-health-DqSqx0zv.js} +68 -12
  415. package/server/{stale-task-claims-BbFwCTb0.js → stale-task-claims-CYFOUNlT.js} +4 -4
  416. package/server/{staleness-Cbl_w4Bw.js → staleness-BQ-0gMYK.js} +1 -1
  417. package/server/{staleness-Bpy41ngS.js → staleness-D47CUJok.js} +1 -1
  418. package/server/{state-home-CIGjwNfJ.js → state-home-BYV7qZTW.js} +2 -2
  419. package/server/{state-mapping-BL_-3Yt8.js → state-mapping-BVldLhBf.js} +1 -1
  420. package/server/{state-migrate-Dkzaxvny.js → state-migrate-CvvBtS0Y.js} +4 -4
  421. package/server/{stuck-remediation-sY_MHHgQ.js → stuck-remediation-Wt0UVvu1.js} +1 -1
  422. package/server/{stuck-remediation-CzEov_fq.js → stuck-remediation-mkLC6G_t.js} +360 -26
  423. package/server/{substrate-bug-weights-service-BH66lhm7.js → substrate-bug-weights-service-XfLAKnmK.js} +3 -3
  424. package/server/{summary-fork-D8bXjCr7.js → summary-fork-CD7GOts0.js} +2 -2
  425. package/server/{summary-fork-DHhJIsAL.js → summary-fork-xiXBnWG9.js} +78 -12
  426. package/server/supervisor/{injection-budget-C1iPirFS.js → injection-budget-B5SbvDx2.js} +2 -41
  427. package/server/supervisor/{paths-DehGY2Fj.js → paths-K3noE4N_.js} +1 -1
  428. package/server/supervisor/pty-supervisor.js +49 -2
  429. package/server/supervisor/pty-token-B7lp0ElT.js +43 -0
  430. package/server/{supervisor-BO-Zk_h-.js → supervisor-DL788vos.js} +3 -3
  431. package/server/supervisor-UWiQNK-y.js +2 -0
  432. package/server/{swarm-readiness-CQ_fwUWF.js → swarm-readiness-BV14DF5N.js} +3 -3
  433. package/server/{system-prerequisites-Bza0ffAh.js → system-prerequisites-pdWG6ZQs.js} +56 -29
  434. package/server/{teardown-workspace-CEgauF4U.js → teardown-workspace-l2F4_zim.js} +15 -16
  435. package/server/{test-agent-queue-DXDt0Xa-.js → test-agent-queue-qakFIIGz.js} +6 -6
  436. package/server/{test-verdict-CmUBK5cT.js → test-verdict-BJYDggMm.js} +1 -1
  437. package/server/{test-verdict-DFjjIHR5.js → test-verdict-Gw-btEfb.js} +1 -1
  438. package/server/{tldr-daemon-DL566HbH.js → tldr-daemon-BKOYB616.js} +1 -1
  439. package/server/{tldr-daemon-BDtLOIlO.js → tldr-daemon-CBaWkV9k.js} +2 -2
  440. package/server/{tmux-ftABRAmc.js → tmux-B1Wbxz5o.js} +3 -3
  441. package/server/{tmux-DoThH6aj.js → tmux-DQ6jB76i.js} +1 -1
  442. package/server/tmux-dedup-DbN6MGzM.js +892 -0
  443. package/server/{token-CsOhvw42.js → token-Cxbk023d.js} +2 -2
  444. package/server/{token-util-CTmczIfW.js → token-util-CLq2MmQt.js} +1 -1
  445. package/server/token-util-zlz9U0ki.js +3 -0
  446. package/server/{tracker-config-B4itFzDo.js → tracker-config-DZ8Zn2nQ.js} +2 -2
  447. package/server/{tracker-utils-tnxxqROg.js → tracker-utils-L0FKtjq2.js} +3 -3
  448. package/server/{traefik-connect-m73vGebA.js → traefik-connect-bNX6jKkb.js} +1 -1
  449. package/server/{tunnel-B2vxjx_b.js → tunnel-BAm1XgjG.js} +3 -3
  450. package/server/{tunnel-Cgj-IGIl.js → tunnel-CjSnHdTc.js} +1 -1
  451. package/server/{types-BBNjPcqU.js → types-q67TYYg5.js} +1 -1
  452. package/server/uat-promote-verification-CKB9ZrKC.js +92 -0
  453. package/server/uat-train-Cu-4nvbf.js +2 -0
  454. package/server/uat-train-D5UjcyAa.js +0 -0
  455. package/server/validate-Cxsx5Uz1.js +179 -0
  456. package/server/{validation-CIi6pnI2.js → validation-DEaTZafj.js} +1 -1
  457. package/server/{validation-B5JxoPUS.js → validation-VZgJxmqc.js} +4 -4
  458. package/server/{verification-artifact-C-lIHfUa.js → verification-artifact-C85cRTc_.js} +1 -1
  459. package/server/{verification-artifact-BcnIbigL.js → verification-artifact-g3yuxQDL.js} +1 -1
  460. package/server/{verification-runner-CDj4lD4t.js → verification-runner-DlZI8yhw.js} +1 -1
  461. package/server/{verification-runner-Br0S_Ous.js → verification-runner-KDZIsBj4.js} +114 -107
  462. package/server/{vtt-parser-DKpNNW5i.js → vtt-parser-Jr94BF3Y.js} +1 -1
  463. package/server/{work-agent-prompt-Yb2bd3Fq.js → work-agent-prompt-C-vuP3_J.js} +20 -9
  464. package/server/workflows-CHrx_hcW.js +2 -0
  465. package/server/{workflows-C9WmILql.js → workflows-D0oip4eV.js} +161 -78
  466. package/server/{workspace-DuUdndHe.js → workspace-BqFg__wH.js} +1 -1
  467. package/server/{workspace-BVl4rihN.js → workspace-C0fH3aek.js} +3 -3
  468. package/server/workspace-anchor-drift-B4gMRHl4.js +3 -0
  469. package/server/workspace-anchor-drift-CZKofakh.js +224 -0
  470. package/server/{workspace-config-cEGcO6UT.js → workspace-config-B123aZl-.js} +1 -1
  471. package/server/workspace-manager-CDTKjjdU.js +3 -0
  472. package/server/{workspace-manager-hLUv3ADC.js → workspace-manager-CwO-Hek7.js} +206 -116
  473. package/server/{workspace-metadata-CskwzzhL.js → workspace-metadata-CQv00QwK.js} +2 -2
  474. package/server/{workspace-metadata-DNpMixRq.js → workspace-metadata-D4M8BM4W.js} +1 -1
  475. package/server/{workspaces-hWvy9eKs.js → workspaces-j1e_6aAT.js} +736 -290
  476. package/sync-sources/dev-skills/pan-dashboard-restart/SKILL.md +34 -10
  477. package/sync-sources/hooks/linear-mcp-auth-hook +97 -0
  478. package/sync-sources/hooks/record-cost-event.js +6 -4
  479. package/sync-sources/rules/ask-user-question-self-contained.md +9 -0
  480. package/sync-sources/skills/okf/README.md +11 -3
  481. package/sync-sources/skills/okf/SKILL.md +12 -1
  482. package/sync-sources/skills/okf/docs/USAGE.md +15 -0
  483. package/sync-sources/skills/okf/references/overdeck.md +28 -0
  484. package/sync-sources/skills/pan-close/SKILL.md +5 -3
  485. package/sync-sources/skills/pan-flywheel/SKILL.md +18 -1
  486. package/sync-sources/skills/pan-knowledge/SKILL.md +10 -0
  487. package/sync-sources/skills/pan-orders/SKILL.md +33 -0
  488. package/sync-sources/skills/pan-peer-review/SKILL.md +195 -0
  489. package/sync-sources/skills/pan-reload/SKILL.md +3 -3
  490. package/sync-sources/skills/pan-restart/SKILL.md +5 -4
  491. package/sync-sources/skills/pan-review/SKILL.md +7 -1
  492. package/sync-sources/skills/pan-start/SKILL.md +4 -0
  493. package/sync-sources/skills/pan-sync-main/SKILL.md +9 -8
  494. package/sync-sources/skills/pipeline-status/SKILL.md +10 -1
  495. package/sync-sources/skills/workspace-add-repo/SKILL.md +16 -1
  496. package/sync-sources/templates/traefik/dynamic/overdeck.yml.template +10 -0
  497. package/server/activity-logger-OEUBdfZ8.js +0 -3
  498. package/server/agent-state-Bg0lhqwj.js +0 -3
  499. package/server/agents-FlIgQ3ql.js +0 -3
  500. package/server/archive-planning-zkJb3BeM.js +0 -3
  501. package/server/cli-BsVIHwzC.js +0 -3
  502. package/server/context-layers-B3Nt58jl.js +0 -4
  503. package/server/context-layers-ZYFcWiyc.js +0 -165
  504. package/server/conversation-service-Up7FEzIC.js +0 -3
  505. package/server/deacon-DYSEJb48.js +0 -4
  506. package/server/deacon-swarm-9jRLS5Ke.js +0 -2
  507. package/server/deploy-window-CM6W1-c6.js +0 -3
  508. package/server/dist-Bd3vn0Hw.js +0 -3
  509. package/server/flywheel-DMCUzDWg.js +0 -2
  510. package/server/flywheel-DSSpWmqF.js +0 -522
  511. package/server/flywheel-DcBkQvgE.js +0 -207
  512. package/server/flywheel-merge-order-C-6zRLvM.js +0 -2
  513. package/server/flywheel-merge-order-DxbQKE1d.js +0 -244
  514. package/server/forge-B-ZWyTRm.js +0 -2
  515. package/server/forge-Ch9gCFod.js +0 -270
  516. package/server/git-utils-Dry_Ka_D.js +0 -3
  517. package/server/github-pr-lookup-BRbDW-qk.js +0 -44
  518. package/server/hume-B_DbflNM.js +0 -3
  519. package/server/inspect-agent-ch-F-5Ci.js +0 -2
  520. package/server/launcher-generator-CHVm7bGT.js +0 -379
  521. package/server/layers-DzxSTGNA.js +0 -93
  522. package/server/merge-blockers-BsFjGrQ8.js +0 -41
  523. package/server/merge-ops-DlB1IM0Y.js +0 -2
  524. package/server/merge-set-DLz0MkGT.js +0 -139
  525. package/server/merge-set-DnSYdBEp.js +0 -3
  526. package/server/merge-sync-SSv3E-pl.js +0 -3
  527. package/server/merge-verification-CSizH3HY.js +0 -124
  528. package/server/projects-9SkRpES9.js +0 -3
  529. package/server/public/assets/index-CUr1xv8w.css +0 -1
  530. package/server/public/assets/index-CsSuZQBI.js +0 -802
  531. package/server/public/assets/mermaid-GHXKKRXX-BUAB8hqt.js +0 -1
  532. package/server/rally-njs_mJrt.js +0 -3
  533. package/server/rebuild-stack-kA7XngID.js +0 -3
  534. package/server/record-t6V-3Dcj.js +0 -3
  535. package/server/record-update-DACtKh6_.js +0 -3
  536. package/server/resume-CcKqnTvE.js +0 -3
  537. package/server/review-status-A7quS5KJ.js +0 -1454
  538. package/server/review-status-C6n6-9f_.js +0 -3
  539. package/server/settings-D0OSwos5.js +0 -2
  540. package/server/specs-nN45DG2X.js +0 -3
  541. package/server/src-U7_kTPEE.js +0 -4733
  542. package/server/stack-health-Df0YEZKa.js +0 -3
  543. package/server/supervisor-BPy-o1A8.js +0 -2
  544. package/server/token-util-DrHg8abn.js +0 -3
  545. package/server/tracker-utils-BePq_oj-.js +0 -3
  546. package/server/uat-train-CuEn0t9M.js +0 -2152
  547. package/server/uat-train-cKfM-_WW.js +0 -2
  548. package/server/workflows-D90rMOya.js +0 -2
  549. package/server/workspace-manager-ZTdJAy9M.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-DvyMuOle.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, ci as init_paths, f as loadConfigSync, jr as ProcessSpawnError, t as init_config_yaml, zr as CACHE_AGENTS_DIR } from "./config-yaml-CmOPzmBb.js";
3
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-DeVUgwA7.js";
5
- import { n as init_workspace_config, r as replacePlaceholdersSync, t as getDefaultWorkspaceConfigSync } from "./workspace-config-cEGcO6UT.js";
6
- import { n as init_tunnel, r as removeTunnelIngress, t as addTunnelIngress } from "./tunnel-B2vxjx_b.js";
7
- import { i as init_hume, n as createHumeConfig, r as deleteHumeConfig } from "./hume-BEq0bUDg.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-CtUgrVKW.js";
9
- import { n as init_docker, r as stopWorkspaceDockerPromise, t as getContainersReferencingWorkspacePathPromise } from "./docker-BK7HIcBj.js";
4
+ import { t as init_pan_dir } from "./pan-dir-ubraCiUg.js";
5
+ import { n as init_workspace_config, r as replacePlaceholdersSync, t as getDefaultWorkspaceConfigSync } from "./workspace-config-B123aZl-.js";
6
+ import { n as init_tunnel, r as removeTunnelIngress, t as addTunnelIngress } from "./tunnel-BAm1XgjG.js";
7
+ import { i as init_hume, n as createHumeConfig, r as deleteHumeConfig } from "./hume-CDYJxqx-.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-68CSCRnu.js";
9
+ import { n as init_docker, r as stopWorkspaceDockerPromise, t as getContainersReferencingWorkspacePathPromise } from "./docker-Dam7mbIB.js";
10
+ import { join } from "node:path";
10
11
  import { Effect } from "effect";
11
- import { 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";
12
+ import { chmodSync, copyFileSync, existsSync, lstatSync, mkdirSync, readFileSync, readdirSync, realpathSync, renameSync, rmSync, statSync, symlinkSync, unlinkSync, writeFileSync } from "fs";
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");
@@ -587,6 +589,37 @@ function relocateVenvScripts(sourceVenv, destVenv) {
587
589
  } catch {}
588
590
  }
589
591
  }
592
+ /** Install the agent-only rebase guard in Git's configured hooks directory. */
593
+ async function installPreRebaseHook(targetPath) {
594
+ const { stdout } = await execAsync$2("git rev-parse --git-path hooks", {
595
+ cwd: targetPath,
596
+ encoding: "utf-8"
597
+ });
598
+ const hooksDir = resolve$1(targetPath, stdout.trim());
599
+ const hookPath = join$1(hooksDir, "pre-rebase");
600
+ mkdirSync(hooksDir, { recursive: true });
601
+ const originalHookPath = `${hookPath}${PRE_REBASE_ORIGINAL_SUFFIX}`;
602
+ const existingHook = existsSync(hookPath) ? readFileSync(hookPath, "utf-8") : "";
603
+ if (!existingHook.includes(PRE_REBASE_HOOK_MARKER)) {
604
+ if (existingHook) {
605
+ rmSync(originalHookPath, { force: true });
606
+ renameSync(hookPath, originalHookPath);
607
+ }
608
+ writeFileSync(hookPath, [
609
+ PRE_REBASE_HOOK_PREFIX,
610
+ `if [ -x "\${0}${PRE_REBASE_ORIGINAL_SUFFIX}" ]; then`,
611
+ ` exec "\${0}${PRE_REBASE_ORIGINAL_SUFFIX}" "$@"`,
612
+ "fi",
613
+ "exit 0",
614
+ ""
615
+ ].join("\n"), {
616
+ encoding: "utf-8",
617
+ mode: 493
618
+ });
619
+ }
620
+ chmodSync(hookPath, 493);
621
+ return hookPath;
622
+ }
590
623
  /**
591
624
  * Create a git worktree
592
625
  * @param repoPath Path to the source git repository
@@ -603,7 +636,8 @@ async function createWorktree(repoPath, targetPath, branchName, defaultBranch =
603
636
  const localList = localBranches.split("\n").map((b) => b.replace(/^[*+\s]+/, "").trim()).filter(Boolean);
604
637
  const remoteList = remoteBranches.split("\n").map((b) => b.trim()).filter(Boolean);
605
638
  if (localList.includes(branchName) || remoteList.includes(`origin/${branchName}`)) await execAsync$2(`git worktree add "${targetPath}" "${branchName}"`, { cwd: repoPath });
606
- 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 });
640
+ await installPreRebaseHook(targetPath);
607
641
  await execAsync$2("git restore .", { cwd: targetPath }).catch(() => {});
608
642
  return {
609
643
  success: true,
@@ -639,7 +673,7 @@ async function removeWorktree(repoPath, targetPath, branchName) {
639
673
  */
640
674
  function assignPort(portFile, featureFolder, range) {
641
675
  if (!existsSync(portFile)) {
642
- mkdirSync(dirname(portFile), { recursive: true });
676
+ mkdirSync(dirname$1(portFile), { recursive: true });
643
677
  writeFileSync(portFile, "");
644
678
  }
645
679
  const content = readFileSync(portFile, "utf-8");
@@ -681,8 +715,8 @@ function mergeDirectoryWithoutOverwriteSync(source, target) {
681
715
  if (!existsSync(source)) return;
682
716
  mkdirSync(target, { recursive: true });
683
717
  for (const entry of readdirSync(source, { withFileTypes: true })) {
684
- const sourcePath = join(source, entry.name);
685
- const targetPath = join(target, entry.name);
718
+ const sourcePath = join$1(source, entry.name);
719
+ const targetPath = join$1(target, entry.name);
686
720
  if (entry.isDirectory()) mergeDirectoryWithoutOverwriteSync(sourcePath, targetPath);
687
721
  else if (entry.isFile() && !existsSync(targetPath)) copyFileSync(sourcePath, targetPath);
688
722
  }
@@ -698,19 +732,19 @@ function restorePreWorktreeMetadataSync(stagedPath, workspacePath) {
698
732
  function copyProjectTemplateDirs(sourceDir, targetDir, dirs, placeholders) {
699
733
  const steps = [];
700
734
  for (const dir of dirs) {
701
- const sourcePath = join(sourceDir, dir);
702
- const targetPath = join(targetDir, dir);
735
+ const sourcePath = join$1(sourceDir, dir);
736
+ const targetPath = join$1(targetDir, dir);
703
737
  if (!existsSync(sourcePath)) continue;
704
738
  function copyDir(src, dest) {
705
739
  let count = 0;
706
740
  mkdirSync(dest, { recursive: true });
707
741
  const entries = readdirSync(src, { withFileTypes: true });
708
742
  for (const entry of entries) {
709
- const srcEntry = join(src, entry.name);
710
- const destEntry = join(dest, entry.name);
743
+ const srcEntry = join$1(src, entry.name);
744
+ const destEntry = join$1(dest, entry.name);
711
745
  if (entry.isDirectory()) count += copyDir(srcEntry, destEntry);
712
746
  else if (entry.isFile()) {
713
- const ext = extname(entry.name).toLowerCase();
747
+ const ext = extname$1(entry.name).toLowerCase();
714
748
  if (placeholders && TEXT_EXTENSIONS.has(ext)) writeFileSync(destEntry, replacePlaceholdersSync(readFileSync(srcEntry, "utf-8"), placeholders));
715
749
  else copyFileSync(srcEntry, destEntry);
716
750
  count++;
@@ -748,7 +782,7 @@ function copyProjectTemplateDirs(sourceDir, targetDir, dirs, placeholders) {
748
782
  * key checked by both the bypass-mode dialog and the headless --bg gate.
749
783
  */
750
784
  function preTrustDirectorySync(dirPath) {
751
- const claudeJsonPath = join(homedir(), ".claude.json");
785
+ const claudeJsonPath = join$1(homedir(), ".claude.json");
752
786
  if (!existsSync(claudeJsonPath)) return;
753
787
  const data = JSON.parse(readFileSync(claudeJsonPath, "utf8"));
754
788
  let dirty = false;
@@ -778,11 +812,23 @@ function preTrustDirectorySync(dirPath) {
778
812
  }
779
813
  if (dirty) writeFileSync(claudeJsonPath, JSON.stringify(data, null, 2), "utf8");
780
814
  }
781
- var execAsync$2, TEXT_EXTENSIONS;
815
+ var execAsync$2, PRE_REBASE_HOOK_MARKER, PRE_REBASE_ORIGINAL_SUFFIX, PRE_REBASE_HOOK_PREFIX, TEXT_EXTENSIONS;
782
816
  var init_worktree_ops = __esmMin((() => {
783
817
  init_workspace_config();
784
818
  init_types();
785
819
  execAsync$2 = promisify(exec);
820
+ PRE_REBASE_HOOK_MARKER = "# OVERDECK MANAGED PRE-REBASE GUARD";
821
+ PRE_REBASE_ORIGINAL_SUFFIX = ".overdeck-original";
822
+ PRE_REBASE_HOOK_PREFIX = [
823
+ "#!/bin/sh",
824
+ PRE_REBASE_HOOK_MARKER,
825
+ "if [ \"$OVERDECK_PAN_GIT_OP\" != \"1\" ] && [ -n \"$OVERDECK_AGENT_ID\" ]; then",
826
+ " echo \"Overdeck agents must not run git rebase directly.\" >&2",
827
+ " echo \"Use pan sync-main <ISSUE-ID> to sync main or pan done <ISSUE-ID> to submit.\" >&2",
828
+ " exit 1",
829
+ "fi",
830
+ ""
831
+ ].join("\n");
786
832
  TEXT_EXTENSIONS = new Set([
787
833
  ".md",
788
834
  ".sh",
@@ -808,7 +854,7 @@ var init_worktree_ops = __esmMin((() => {
808
854
  * Returns the entries that were added or removed (empty arrays if nothing changed).
809
855
  */
810
856
  function ensurePolyrepoWorkspaceGitignoreSync(workspacePath, repos) {
811
- const gitignorePath = join(workspacePath, ".gitignore");
857
+ const gitignorePath = join$1(workspacePath, ".gitignore");
812
858
  let content = existsSync(gitignorePath) ? readFileSync(gitignorePath, "utf-8") : "";
813
859
  const removed = [];
814
860
  const filteredLines = content.split("\n").filter((line) => {
@@ -826,8 +872,11 @@ function ensurePolyrepoWorkspaceGitignoreSync(workspacePath, repos) {
826
872
  const entry = `${repo.name}/`;
827
873
  if (!normalizedLines.includes(entry) && !normalizedLines.includes(repo.name)) added.push(entry);
828
874
  }
829
- const addRuntimeEntry = !normalizedLines.includes(".overdeck/") && !normalizedLines.includes(".overdeck");
830
- 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 {
831
880
  added,
832
881
  removed
833
882
  };
@@ -836,9 +885,10 @@ function ensurePolyrepoWorkspaceGitignoreSync(workspacePath, repos) {
836
885
  if (!normalizedLines.some((l) => l.includes("Polyrepo") || l.includes("polyrepo"))) content += "\n# Polyrepo sub-repositories\n";
837
886
  content += added.join("\n") + "\n";
838
887
  }
839
- if (addRuntimeEntry) {
840
- content += "\n# Overdeck workspace runtime (PAN-2541: durable state lives on overdeck-state)\n.overdeck/\n";
841
- 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);
842
892
  }
843
893
  writeFileSync(gitignorePath, content, "utf-8");
844
894
  return {
@@ -853,7 +903,7 @@ function ensurePolyrepoWorkspaceGitignoreSync(workspacePath, repos) {
853
903
  * surface the warning.
854
904
  */
855
905
  async function commitPolyrepoWorkspaceGitignoreAsync(workspacePath) {
856
- if (!existsSync(join(workspacePath, ".git"))) return null;
906
+ if (!existsSync(join$1(workspacePath, ".git"))) return null;
857
907
  try {
858
908
  await execAsync$1("git add .gitignore", { cwd: workspacePath });
859
909
  try {
@@ -901,9 +951,9 @@ async function createWorkspacePromise(options) {
901
951
  return result;
902
952
  }
903
953
  const workspaceConfig = projectConfig.workspace || getDefaultWorkspaceConfigSync();
904
- const workspacesDir = join(projectConfig.path, workspaceConfig.workspaces_dir || "workspaces");
954
+ const workspacesDir = join$1(projectConfig.path, workspaceConfig.workspaces_dir || "workspaces");
905
955
  const featureFolder = `feature-${featureName}`;
906
- const workspacePath = join(workspacesDir, featureFolder);
956
+ const workspacePath = join$1(workspacesDir, featureFolder);
907
957
  result.workspacePath = workspacePath;
908
958
  if (dryRun) {
909
959
  result.steps.push("[DRY RUN] Would create workspace at: " + workspacePath);
@@ -926,9 +976,9 @@ async function createWorkspacePromise(options) {
926
976
  result.steps.push("Created workspace directory");
927
977
  const reposToCreate = workspaceConfig.progressive && workspaceConfig.always_include ? workspaceConfig.repos.filter((r) => workspaceConfig.always_include.includes(r.name)) : workspaceConfig.repos;
928
978
  for (const repo of reposToCreate) {
929
- const rawRepoPath = join(projectConfig.path, repo.path);
979
+ const rawRepoPath = join$1(projectConfig.path, repo.path);
930
980
  const repoPath = existsSync(rawRepoPath) ? realpathSync(rawRepoPath) : rawRepoPath;
931
- const targetPath = join(workspacePath, repo.name);
981
+ const targetPath = join$1(workspacePath, repo.name);
932
982
  if (repo.link_type === "symlink") try {
933
983
  symlinkSync(repoPath, targetPath);
934
984
  result.steps.push(`Created symlink for ${repo.name} (readonly, no feature branch)`);
@@ -974,16 +1024,16 @@ async function createWorkspacePromise(options) {
974
1024
  result.steps.push(`Warning: could not create workspace .gitignore: ${gitignoreErr.message}`);
975
1025
  }
976
1026
  progress("Creating git worktree", "Worktree ready", "complete");
977
- const resolvedWorkspace = resolve(workspacePath);
978
- const resolvedPanDir = resolve(resolvedWorkspace, PAN_DIRNAME);
979
- if (resolvedWorkspace.match(/\/workspaces\/feature-[a-z0-9-]+$/) && existsSync(join(resolvedWorkspace, ".git"))) {
980
- 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)) {
981
1031
  for (const filePath of [
982
- join(resolvedPanDir, PAN_CONTINUE_FILENAME),
983
- join(resolvedPanDir, PAN_SESSIONS_FILENAME),
984
- 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)
985
1035
  ]) if (existsSync(filePath)) unlinkSync(filePath);
986
- const feedbackDir = join(resolvedPanDir, PAN_FEEDBACK_DIRNAME);
1036
+ const feedbackDir = join$1(resolvedPanDir, PAN_FEEDBACK_DIRNAME);
987
1037
  if (existsSync(feedbackDir)) rmSync(feedbackDir, {
988
1038
  recursive: true,
989
1039
  force: true
@@ -997,15 +1047,15 @@ async function createWorkspacePromise(options) {
997
1047
  } catch (gitignoreErr) {
998
1048
  result.steps.push(`Warning: could not update .gitignore: ${gitignoreErr.message}`);
999
1049
  }
1000
- const devcontainerDir = join(workspacePath, ".devcontainer");
1050
+ const devcontainerDir = join$1(workspacePath, ".devcontainer");
1001
1051
  if (existsSync(devcontainerDir)) {
1002
1052
  const composeFiles = readdirSync(devcontainerDir).filter((f) => f.includes("compose") && (f.endsWith(".yml") || f.endsWith(".yaml")));
1003
- for (const composeFile of composeFiles) sanitizeComposeFileSync(join(devcontainerDir, composeFile));
1053
+ for (const composeFile of composeFiles) sanitizeComposeFileSync(join$1(devcontainerDir, composeFile));
1004
1054
  if (composeFiles.length > 0) result.steps.push(`Sanitized ${composeFiles.length} compose file(s) for platform compatibility`);
1005
1055
  }
1006
1056
  progress("Installing dependencies", projectConfig.package_manager || "detecting...");
1007
- const pkgManager = projectConfig.package_manager || (existsSync(join(workspacePath, "bun.lock")) ? "bun" : "npm");
1008
- 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"))];
1009
1059
  for (const dir of staleModulesDirs) if (existsSync(dir)) await execAsync$1(`rm -rf "${dir}"`);
1010
1060
  const installCmd = pkgManager === "bun" ? "bun install" : `${pkgManager} install`;
1011
1061
  try {
@@ -1021,12 +1071,19 @@ async function createWorkspacePromise(options) {
1021
1071
  progress("Installing dependencies", "Failed — workspace creation aborted", "complete");
1022
1072
  return result;
1023
1073
  }
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];
1075
+ try {
1076
+ for (const hookTarget of hookTargets) await installPreRebaseHook(hookTarget);
1077
+ } catch (hookErr) {
1078
+ result.errors.push(`Pre-rebase guard install failed: ${hookErr.message?.slice(0, 200)}`);
1079
+ return result;
1080
+ }
1024
1081
  const workspacePackages = projectConfig.workspace_packages;
1025
1082
  if (workspacePackages && workspacePackages.length > 0) {
1026
1083
  progress("Building workspace packages", workspacePackages.map((p) => p.path).join(", "));
1027
1084
  for (const pkg of workspacePackages) try {
1028
1085
  await execAsync$1(pkg.build_command, {
1029
- cwd: join(workspacePath, pkg.path),
1086
+ cwd: join$1(workspacePath, pkg.path),
1030
1087
  encoding: "utf-8"
1031
1088
  });
1032
1089
  result.steps.push(`Built workspace package: ${pkg.path}`);
@@ -1040,21 +1097,21 @@ async function createWorkspacePromise(options) {
1040
1097
  }
1041
1098
  try {
1042
1099
  await execAsync$1("python3 --version");
1043
- const venvPath = join(workspacePath, ".venv");
1044
- const tldrBin = join(venvPath, "bin", "tldr");
1045
- if (existsSync(join(projectConfig.path, ".venv", "bin", "tldr"))) {
1046
- 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");
1047
1104
  await execAsync$1(`cp -a "${mainVenvPath}" "${venvPath}"`);
1048
1105
  relocateVenvScripts(mainVenvPath, venvPath);
1049
1106
  result.steps.push("Copied Python venv from main branch (shebangs relocated)");
1050
1107
  } else {
1051
1108
  await execAsync$1(`python3 -m venv "${venvPath}"`, { cwd: workspacePath });
1052
- await execAsync$1(`"${join(venvPath, "bin", "pip")}" install llm-tldr`, {
1109
+ await execAsync$1(`"${join$1(venvPath, "bin", "pip")}" install llm-tldr`, {
1053
1110
  cwd: workspacePath,
1054
1111
  timeout: 12e4
1055
1112
  });
1056
1113
  result.steps.push("Created Python venv and installed llm-tldr");
1057
- 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");
1058
1115
  if (existsSync(patchScript)) {
1059
1116
  await execAsync$1(`python3 "${patchScript}" "${venvPath}"`);
1060
1117
  result.steps.push("Applied llm-tldr .tsx/.jsx patch");
@@ -1062,13 +1119,13 @@ async function createWorkspacePromise(options) {
1062
1119
  }
1063
1120
  if (!existsSync(tldrBin)) result.steps.push("TLDR setup incomplete: tldr binary not found after venv creation");
1064
1121
  else {
1065
- const mainTldrDir = join(projectConfig.path, ".tldr");
1066
- const workspaceTldrDir = join(workspacePath, ".tldr");
1122
+ const mainTldrDir = join$1(projectConfig.path, ".tldr");
1123
+ const workspaceTldrDir = join$1(workspacePath, ".tldr");
1067
1124
  if (existsSync(mainTldrDir)) {
1068
1125
  await execAsync$1(`cp -r "${mainTldrDir}" "${workspaceTldrDir}"`);
1069
1126
  result.steps.push("Copied TLDR index from main branch");
1070
1127
  }
1071
- const { getTldrDaemonServiceSync } = await import("./tldr-daemon-DL566HbH.js");
1128
+ const { getTldrDaemonServiceSync } = await import("./tldr-daemon-BKOYB616.js");
1072
1129
  const tldrService = getTldrDaemonServiceSync(workspacePath, venvPath);
1073
1130
  await tldrService.start(true);
1074
1131
  result.steps.push("Started TLDR daemon");
@@ -1095,7 +1152,7 @@ async function createWorkspacePromise(options) {
1095
1152
  }
1096
1153
  }
1097
1154
  if (workspaceConfig.ports) for (const [portName, portConfig] of Object.entries(workspaceConfig.ports)) {
1098
- const portFile = join(projectConfig.path, `.${portName}-ports`);
1155
+ const portFile = join$1(projectConfig.path, `.${portName}-ports`);
1099
1156
  try {
1100
1157
  const port = assignPort(portFile, featureFolder, portConfig.range);
1101
1158
  result.steps.push(`Assigned ${portName} port: ${port}`);
@@ -1111,7 +1168,7 @@ async function createWorkspacePromise(options) {
1111
1168
  const panMergeResult = mergePanSkillsIntoWorkspaceSync(projectConfig.path, workspacePath);
1112
1169
  if (panMergeResult.added.length > 0) result.steps.push(`Installed ${panMergeResult.added.length} project-local skill file(s) from .pan/skills/ (${panMergeResult.overlayed.join(", ")})`);
1113
1170
  if (workspaceConfig.agent?.template_dir) {
1114
- const templateDir = join(projectConfig.path, workspaceConfig.agent.template_dir);
1171
+ const templateDir = join$1(projectConfig.path, workspaceConfig.agent.template_dir);
1115
1172
  const templateSteps = processTemplatesSync(templateDir, workspacePath, placeholders, workspaceConfig.agent.templates);
1116
1173
  result.steps.push(...templateSteps);
1117
1174
  const dirsToSync = workspaceConfig.agent.copy_dirs || workspaceConfig.agent.symlinks;
@@ -1122,7 +1179,7 @@ async function createWorkspacePromise(options) {
1122
1179
  }
1123
1180
  if (workspaceConfig.env?.template) {
1124
1181
  const envContent = replacePlaceholdersSync(workspaceConfig.env.template, placeholders);
1125
- writeFileSync(join(workspacePath, ".env"), envContent);
1182
+ writeFileSync(join$1(workspacePath, ".env"), envContent);
1126
1183
  result.steps.push("Created .env file");
1127
1184
  }
1128
1185
  if (workspaceConfig.docker?.compose_template) try {
@@ -1145,7 +1202,7 @@ async function createWorkspacePromise(options) {
1145
1202
  const humeResult = await Effect.runPromise(createHumeConfig(workspaceConfig.hume, placeholders));
1146
1203
  result.steps.push(...humeResult.steps);
1147
1204
  if (humeResult.configId) {
1148
- 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`);
1149
1206
  result.steps.push("Wrote .hume-config with Hume EVI config ID");
1150
1207
  }
1151
1208
  if (!humeResult.success) result.errors.push("Hume EVI config setup had failures (see steps for details)");
@@ -1154,9 +1211,9 @@ async function createWorkspacePromise(options) {
1154
1211
  if (startDocker) {
1155
1212
  progress("Starting Docker containers", "Building and starting services");
1156
1213
  if (workspaceConfig.docker?.traefik) {
1157
- const traefikPath = join(homedir(), ".overdeck", "traefik", "docker-compose.yml");
1214
+ const traefikPath = join$1(homedir(), ".overdeck", "traefik", "docker-compose.yml");
1158
1215
  if (existsSync(traefikPath)) try {
1159
- 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") });
1160
1217
  result.steps.push("Started Traefik");
1161
1218
  } catch (error) {
1162
1219
  const msg = error?.message || String(error);
@@ -1165,18 +1222,18 @@ async function createWorkspacePromise(options) {
1165
1222
  }
1166
1223
  }
1167
1224
  const composeLocations = [
1168
- join(workspacePath, "docker-compose.yml"),
1169
- join(workspacePath, "docker-compose.yaml"),
1170
- join(workspacePath, ".devcontainer", "docker-compose.yml"),
1171
- 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")
1172
1229
  ];
1173
1230
  for (const composePath of composeLocations) if (existsSync(composePath)) {
1174
1231
  try {
1175
1232
  await execAsync$1(`docker compose -f "${composePath}" up -d --build`, {
1176
- cwd: dirname(composePath),
1233
+ cwd: dirname$1(composePath),
1177
1234
  timeout: 3e5
1178
1235
  });
1179
- result.steps.push(`Started containers from ${basename(composePath)}`);
1236
+ result.steps.push(`Started containers from ${basename$1(composePath)}`);
1180
1237
  } catch (error) {
1181
1238
  result.errors.push(`Failed to start containers: ${error}`);
1182
1239
  }
@@ -1189,7 +1246,7 @@ async function createWorkspacePromise(options) {
1189
1246
  result.steps.push("Pre-trusted workspace in Claude Code");
1190
1247
  } catch {}
1191
1248
  try {
1192
- const { determineCavemanVariant, injectCavemanSettings } = await import("./workspace-DuUdndHe.js");
1249
+ const { determineCavemanVariant, injectCavemanSettings } = await import("./workspace-BqFg__wH.js");
1193
1250
  const cavemanConfig = loadConfigSync().config.caveman;
1194
1251
  const variant = determineCavemanVariant(cavemanConfig);
1195
1252
  await Effect.runPromise(injectCavemanSettings(workspacePath, variant));
@@ -1205,7 +1262,7 @@ async function createWorkspacePromise(options) {
1205
1262
  result.steps.push(`Overdeck settings copy skipped: ${settingsErr instanceof Error ? settingsErr.message : String(settingsErr)}`);
1206
1263
  }
1207
1264
  try {
1208
- const { injectMemoryHookSettings } = await import("./workspace-DuUdndHe.js");
1265
+ const { injectMemoryHookSettings } = await import("./workspace-BqFg__wH.js");
1209
1266
  await injectMemoryHookSettings(workspacePath);
1210
1267
  result.steps.push("Injected memory hooks into .claude/settings.json");
1211
1268
  } catch (memoryHookErr) {
@@ -1229,9 +1286,42 @@ var init_create = __esmMin((() => {
1229
1286
  execAsync$1 = promisify(exec);
1230
1287
  }));
1231
1288
  //#endregion
1232
- //#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
+ }));
1233
1320
  var init_repos = __esmMin((() => {
1321
+ init_git_hooks();
1322
+ init_projects();
1234
1323
  init_worktree_ops();
1324
+ promisify(execFile);
1235
1325
  }));
1236
1326
  //#endregion
1237
1327
  //#region ../../lib/workspace-manager/remove.ts
@@ -1243,9 +1333,9 @@ async function removeWorkspacePromise(options) {
1243
1333
  steps: []
1244
1334
  };
1245
1335
  const workspaceConfig = projectConfig.workspace || getDefaultWorkspaceConfigSync();
1246
- const workspacesDir = join(projectConfig.path, workspaceConfig.workspaces_dir || "workspaces");
1336
+ const workspacesDir = join$1(projectConfig.path, workspaceConfig.workspaces_dir || "workspaces");
1247
1337
  const featureFolder = `feature-${featureName}`;
1248
- const workspacePath = join(workspacesDir, featureFolder);
1338
+ const workspacePath = join$1(workspacesDir, featureFolder);
1249
1339
  if (!existsSync(workspacePath)) {
1250
1340
  result.success = false;
1251
1341
  result.errors.push(`Workspace not found at ${workspacePath}`);
@@ -1255,9 +1345,9 @@ async function removeWorkspacePromise(options) {
1255
1345
  result.steps.push("[DRY RUN] Would remove workspace at: " + workspacePath);
1256
1346
  return result;
1257
1347
  }
1258
- const venvPath = join(workspacePath, ".venv");
1348
+ const venvPath = join$1(workspacePath, ".venv");
1259
1349
  if (existsSync(venvPath)) try {
1260
- const { getTldrDaemonServiceSync } = await import("./tldr-daemon-DL566HbH.js");
1350
+ const { getTldrDaemonServiceSync } = await import("./tldr-daemon-BKOYB616.js");
1261
1351
  await getTldrDaemonServiceSync(workspacePath, venvPath).stop();
1262
1352
  result.steps.push("Stopped TLDR daemon");
1263
1353
  } catch (error) {
@@ -1266,7 +1356,7 @@ async function removeWorkspacePromise(options) {
1266
1356
  const dockerResult = await stopWorkspaceDockerPromise(workspacePath, featureName);
1267
1357
  result.steps.push(...dockerResult.steps);
1268
1358
  if (workspaceConfig.type === "polyrepo" && workspaceConfig.repos) for (const repo of workspaceConfig.repos) {
1269
- const targetPath = join(workspacePath, repo.name);
1359
+ const targetPath = join$1(workspacePath, repo.name);
1270
1360
  if (existsSync(targetPath) && lstatSync(targetPath).isSymbolicLink()) try {
1271
1361
  unlinkSync(targetPath);
1272
1362
  result.steps.push(`Removed symlink for ${repo.name}`);
@@ -1274,7 +1364,7 @@ async function removeWorkspacePromise(options) {
1274
1364
  result.errors.push(`${repo.name}: ${unlinkErr.message}`);
1275
1365
  }
1276
1366
  else if (existsSync(targetPath)) {
1277
- 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}`);
1278
1368
  if (worktreeResult.success) result.steps.push(`Removed worktree for ${repo.name}`);
1279
1369
  else result.errors.push(worktreeResult.message);
1280
1370
  }
@@ -1304,7 +1394,7 @@ async function removeWorkspacePromise(options) {
1304
1394
  result.steps.push(...humeResult.steps);
1305
1395
  }
1306
1396
  if (workspaceConfig.ports) {
1307
- 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`);
1308
1398
  }
1309
1399
  const orphanedContainers = await getContainersReferencingWorkspacePathPromise(workspacePath);
1310
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.`);
@@ -1377,6 +1467,6 @@ var init_workspace_manager = __esmMin((() => {
1377
1467
  });
1378
1468
  }));
1379
1469
  //#endregion
1380
- export { removeWorkspace as a, relocateVenvScripts as c, copyOverdeckSettingsToWorkspaceSync as d, ensurePanGitignoreSync as f, preTrustDirectory as i, detectPlatform as l, getContainersReferencingWorkspacePath as n, stopWorkspaceDocker as o, init_workspace_manager as r, preTrustDirectorySync as s, createWorkspace as t, init_platform 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 };
1381
1471
 
1382
- //# sourceMappingURL=workspace-manager-hLUv3ADC.js.map
1472
+ //# sourceMappingURL=workspace-manager-CwO-Hek7.js.map