@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,8 +1,8 @@
1
1
  import { n as __esmMin } from "./rolldown-runtime-DNCzzKnI.js";
2
- import { Tn as init_projects, fn as findProjectByPathSync, yn as getProjectSync } from "./config-yaml-DySPNmKN.js";
3
- import { b as setReviewStatusSync, l as init_review_status } from "./review-status-kZj_KyCk.js";
4
- import { i as init_merge_set, r as getMergeSetSync } from "./merge-set-DJ8-UErs.js";
5
- import { i as withComponentStateSync, n as init_release_set, r as upsertReleaseSetSync } from "./release-set-CQfuN9-v.js";
2
+ import { Gn as init_projects, Mn as findProjectByPathSync, zn as getProjectSync } from "./config-yaml-CxdwhAIA.js";
3
+ import { C as setReviewStatusSync, p as init_review_status } from "./review-status-CGvlA4o_.js";
4
+ import { i as init_merge_set, r as getMergeSetSync } from "./merge-set-CBgHfwM0.js";
5
+ import { i as withComponentStateSync, n as init_release_set, r as upsertReleaseSetSync } from "./release-set-G4XKyQ8K.js";
6
6
  import { exec } from "node:child_process";
7
7
  import { promisify } from "node:util";
8
8
  //#region ../../lib/release/release-plan.ts
@@ -303,4 +303,4 @@ __esmMin((() => {
303
303
  }))();
304
304
  export { runRelease };
305
305
 
306
- //# sourceMappingURL=release-engine-Cx48W7z8.js.map
306
+ //# sourceMappingURL=release-engine-B2X9AfFC.js.map
@@ -1,6 +1,6 @@
1
1
  import { n as __esmMin } from "./rolldown-runtime-DNCzzKnI.js";
2
- import { $n as resolveIssueIdSync, Yn as init_issue_id } from "./config-yaml-DySPNmKN.js";
3
- import { d as getOverdeckDatabaseSync, f as init_infra } from "./infra-BEqFxlJc.js";
2
+ import { br as resolveIssueIdSync, gr as init_issue_id } from "./config-yaml-CxdwhAIA.js";
3
+ import { d as getOverdeckDatabaseSync, f as init_infra } from "./infra-BDQDRopn.js";
4
4
  import "effect";
5
5
  //#region ../../lib/overdeck/release-sync.ts
6
6
  function isoFromMillis(value) {
@@ -122,4 +122,4 @@ var init_release_set = __esmMin((() => {
122
122
  //#endregion
123
123
  export { withComponentStateSync as i, init_release_set as n, upsertReleaseSetSync as r, getReleaseSetSync as t };
124
124
 
125
- //# sourceMappingURL=release-set-CQfuN9-v.js.map
125
+ //# sourceMappingURL=release-set-G4XKyQ8K.js.map
@@ -1,5 +1,5 @@
1
- import "./workspace-metadata-_WygnyoX.js";
2
- import { C as init_fly_provider, S as createFlyProvider, s as init_remote_agents } from "./remote-agents-By1ige5O.js";
1
+ import "./workspace-metadata-DkO_iTLo.js";
2
+ import { C as createFlyProvider, s as init_remote_agents, w as init_fly_provider } from "./remote-agents-Bba-MgSA.js";
3
3
  import { Effect } from "effect";
4
4
  //#region ../../lib/remote/index.ts
5
5
  init_fly_provider();
@@ -52,4 +52,4 @@ function createFlyProviderFromConfig(remoteConfig, tierOverride) {
52
52
  //#endregion
53
53
  export { getRemoteProvider as n, isRemoteAvailable as r, createFlyProviderFromConfig as t };
54
54
 
55
- //# sourceMappingURL=remote-C_2hasl7.js.map
55
+ //# sourceMappingURL=remote-BXarMvqf.js.map
@@ -1,4 +1,4 @@
1
- import { a as loadWorkspaceMetadataSync, i as listWorkspaceMetadataSync, n as deleteWorkspaceMetadataSync, o as saveWorkspaceMetadataSync, r as findRemoteWorkspaceMetadataSync, t as WORKSPACES_DIR } from "./workspace-metadata-_WygnyoX.js";
2
- import { S as createFlyProvider, d as killRemoteAgent, g as refreshHostHeartbeatForEphemeralVms, h as pollRemoteAgentStatus, m as loadRemoteAgentState, o as getRemoteAgentOutput, p as listRemoteAgents, r as checkRemoteSpendCap, u as isRemoteAgentRunning, v as sendToRemoteAgent, x as FlyProvider, y as spawnRemoteAgent } from "./remote-agents-By1ige5O.js";
3
- import { n as getRemoteProvider, r as isRemoteAvailable, t as createFlyProviderFromConfig } from "./remote-C_2hasl7.js";
1
+ import { a as loadWorkspaceMetadataSync, i as listWorkspaceMetadataSync, n as deleteWorkspaceMetadataSync, o as saveWorkspaceMetadataSync, r as findRemoteWorkspaceMetadataSync, t as WORKSPACES_DIR } from "./workspace-metadata-DkO_iTLo.js";
2
+ import { C as createFlyProvider, S as FlyProvider, d as killRemoteAgent, g as refreshHostHeartbeatForEphemeralVms, h as pollRemoteAgentStatus, m as loadRemoteAgentState, o as getRemoteAgentOutput, p as listRemoteAgents, r as checkRemoteSpendCap, u as isRemoteAgentRunning, v as sendToRemoteAgent, y as spawnRemoteAgent } from "./remote-agents-Bba-MgSA.js";
3
+ import { n as getRemoteProvider, r as isRemoteAvailable, t as createFlyProviderFromConfig } from "./remote-BXarMvqf.js";
4
4
  export { FlyProvider, WORKSPACES_DIR, checkRemoteSpendCap, createFlyProvider, createFlyProviderFromConfig, deleteWorkspaceMetadataSync, findRemoteWorkspaceMetadataSync, getRemoteAgentOutput, getRemoteProvider, isRemoteAgentRunning, isRemoteAvailable, killRemoteAgent, listRemoteAgents, listWorkspaceMetadataSync, loadRemoteAgentState, loadWorkspaceMetadataSync, pollRemoteAgentStatus, refreshHostHeartbeatForEphemeralVms, saveWorkspaceMetadataSync, sendToRemoteAgent, spawnRemoteAgent };
@@ -1,15 +1,16 @@
1
1
  import { n as __esmMin, o as __toESM } from "./rolldown-runtime-DNCzzKnI.js";
2
- import { Ft as resolveProjectForIssue, Ot as init_record, er as require_dist, mr as init_errors } from "./config-yaml-DySPNmKN.js";
3
- import { w as init_tmux, y as getManagedTmuxSocketName } from "./tmux-R7N7y-Mh.js";
4
- import { n as init_launcher_generator, t as generateLauncherScriptSync } from "./launcher-generator-BBWG_SiS.js";
5
- import { a as init_claude_permissions, i as getClaudePermissionFlagsSync, n as buildClaudeUserSettingsSync, r as getClaudePermissionFlagsStringSync } from "./claude-permissions-DNWEVV6z.js";
6
- import { c as isStateMigrated, o as init_state_home } from "./state-home-Cn_Qu8IX.js";
2
+ import { Fr as init_errors, Pt as init_record, Vt as resolveProjectForIssue, xr as require_dist } from "./config-yaml-CxdwhAIA.js";
3
+ import { w as init_tmux, y as getManagedTmuxSocketName } from "./tmux-CfDHob9M.js";
4
+ import { C as init_launcher_generator, S as generateLauncherScriptSync, _ as init_tmux_dedup, b as isOperatorStartedBy, d as assertValidDedupKey, g as dedupTerminalOptionName, h as dedupTargetOptionName, i as init_auto_spawn_consent, l as KeyedMarkerVerificationError, m as dedupPoisonOptionName, p as dedupPendingOptionName, s as withAutoSpawnConsentClaim, u as KeyedSubmitTargetDeadError, y as init_provenance } from "./auto-spawn-consent-CQ9Bi9q6.js";
5
+ import { a as init_claude_permissions, i as getClaudePermissionFlagsSync, n as buildClaudeUserSettingsSync, r as getClaudePermissionFlagsStringSync } from "./claude-permissions-CpbpvUQ2.js";
6
+ import { c as isStateMigrated, o as init_state_home } from "./state-home-722Dkx92.js";
7
7
  import { Data, Effect, Stream } from "effect";
8
8
  import { existsSync, mkdirSync, readFileSync, readdirSync, writeFileSync } from "fs";
9
9
  import { join } from "path";
10
10
  import { homedir } from "os";
11
11
  import { exec, spawn } from "child_process";
12
12
  import { promisify } from "util";
13
+ import { randomUUID } from "node:crypto";
13
14
  //#region ../../lib/claude-mcp.ts
14
15
  function ensurePlaywrightIsolationSync(mcpConfig) {
15
16
  const playwright = mcpConfig?.mcpServers?.playwright;
@@ -661,6 +662,293 @@ with open(path, "w") as f:
661
662
  };
662
663
  }));
663
664
  //#endregion
665
+ //#region ../../lib/remote/remote-tmux.ts
666
+ /**
667
+ * Remote tmux/SSH plumbing for Fly-hosted agents.
668
+ *
669
+ * Extracted from remote-agents.ts (file-size ceiling) — the remote tmux
670
+ * server is the crash-independent component for remote sessions, and both
671
+ * remote-agents.ts and remote-keyed-delivery.ts build on these primitives.
672
+ */
673
+ function shellQuote(value) {
674
+ return `'${value.replace(/'/g, `'\\''`)}'`;
675
+ }
676
+ function getRemoteTmuxBaseArgs() {
677
+ return [
678
+ "-L",
679
+ getManagedTmuxSocketName(),
680
+ "-f",
681
+ REMOTE_TMUX_CONFIG_PATH
682
+ ];
683
+ }
684
+ function buildRemoteTmuxCommand(args) {
685
+ return [
686
+ "tmux",
687
+ ...getRemoteTmuxBaseArgs(),
688
+ ...args
689
+ ].map(shellQuote).join(" ");
690
+ }
691
+ /** Run a FlyProvider Effect at the async/Promise boundary. */
692
+ function runSsh(provider, vmName, command) {
693
+ return Effect.runPromise(provider.ssh(vmName, command));
694
+ }
695
+ async function ensureRemoteTmuxContext(provider, vmName) {
696
+ const configBase64 = Buffer.from(REMOTE_TMUX_CONFIG_CONTENT).toString("base64");
697
+ await runSsh(provider, vmName, `mkdir -p ${shellQuote(REMOTE_TMUX_DIR)} && echo ${shellQuote(configBase64)} | base64 -d > ${shellQuote(REMOTE_TMUX_CONFIG_PATH)}`);
698
+ }
699
+ var REMOTE_PAN_DIR, REMOTE_TMUX_DIR, REMOTE_TMUX_CONFIG_PATH, REMOTE_TMUX_CONFIG_CONTENT;
700
+ var init_remote_tmux = __esmMin((() => {
701
+ init_tmux();
702
+ REMOTE_PAN_DIR = "/workspace/.pan";
703
+ REMOTE_TMUX_DIR = `${REMOTE_PAN_DIR}/tmux`;
704
+ REMOTE_TMUX_CONFIG_PATH = `${REMOTE_TMUX_DIR}/overdeck.tmux.conf`;
705
+ REMOTE_TMUX_CONFIG_CONTENT = [
706
+ "# Overdeck-managed tmux config",
707
+ "# Keep this minimal and include only behavior Overdeck intentionally depends on.",
708
+ "set -g mouse on",
709
+ ""
710
+ ].join("\n");
711
+ }));
712
+ //#endregion
713
+ //#region ../../lib/remote/remote-keyed-delivery.ts
714
+ /**
715
+ * Keyed remote delivery (PAN-2997). The REMOTE tmux server is the
716
+ * crash-independent component for a remote session: it survives both the
717
+ * local dashboard and the remote agent shell, so the same two-phase
718
+ * pending/terminal marker protocol as the local tmux tier
719
+ * (src/lib/tmux-dedup.ts) enforces the dedup key across the complete
720
+ * paste-settle-submit transaction — paste under an atomic pending claim, a
721
+ * liveness-gated Enter-first submit, post-submit target verification with a
722
+ * verified rollback under a poison breadcrumb. A local dashboard crash
723
+ * anywhere in the sequence replays into either a completed pending
724
+ * submission (no second paste) or a terminal-marker dedup — never a lost or
725
+ * duplicated wake.
726
+ */
727
+ async function sendToRemoteAgentKeyed(agentId, vmName, message, dedupKey, exec) {
728
+ assertValidDedupKey(dedupKey);
729
+ let run;
730
+ if (exec) run = exec;
731
+ else {
732
+ const fly = createFlyProvider();
733
+ await ensureRemoteTmuxContext(fly, vmName);
734
+ run = async (command) => {
735
+ const result = await runSsh(fly, vmName, command);
736
+ if (result.exitCode !== 0) throw new Error(`remote keyed-delivery command failed (exit ${result.exitCode}): ${result.stderr.slice(0, 200)}`);
737
+ return result.stdout;
738
+ };
739
+ }
740
+ const pendingOption = dedupPendingOptionName(dedupKey);
741
+ const terminalOption = dedupTerminalOptionName(dedupKey);
742
+ const poisonOption = dedupPoisonOptionName(dedupKey);
743
+ const sendId = randomUUID();
744
+ const bufferName = `pan-keyed-${sendId}`;
745
+ const promptFile = `${REMOTE_PAN_DIR}/prompts/${agentId}-keyed-${sendId}.txt`;
746
+ const innerTmux = ["tmux", ...getRemoteTmuxBaseArgs()].map(shellQuote).join(" ");
747
+ const cleanup = async () => {
748
+ await run(buildRemoteTmuxCommand([
749
+ "delete-buffer",
750
+ "-b",
751
+ bufferName
752
+ ])).catch(() => "");
753
+ await run(`rm -f ${shellQuote(promptFile)}`).catch(() => "");
754
+ };
755
+ const readMarker = async (option) => run(buildRemoteTmuxCommand([
756
+ "show-option",
757
+ "-qv",
758
+ "-t",
759
+ agentId,
760
+ option
761
+ ])).then((stdout) => stdout.trim(), () => "");
762
+ const readMarkerStrict = async (option) => run(buildRemoteTmuxCommand([
763
+ "show-option",
764
+ "-qv",
765
+ "-t",
766
+ agentId,
767
+ option
768
+ ])).then((stdout) => stdout.trim());
769
+ const clearPoisonVerified = async (context) => {
770
+ try {
771
+ await run(buildRemoteTmuxCommand([
772
+ "set-option",
773
+ "-u",
774
+ "-t",
775
+ agentId,
776
+ poisonOption
777
+ ]));
778
+ } catch (error) {
779
+ throw new KeyedMarkerVerificationError(agentId, `poison clear command failed (${context})`, { cause: error });
780
+ }
781
+ let remaining;
782
+ try {
783
+ remaining = await readMarkerStrict(poisonOption);
784
+ } catch (error) {
785
+ throw new KeyedMarkerVerificationError(agentId, `post-clear verification read failed (${context})`, { cause: error });
786
+ }
787
+ if (remaining !== "") throw new KeyedMarkerVerificationError(agentId, `poison breadcrumb survived the clear (${context})`);
788
+ };
789
+ const readPaneTarget = async () => run(buildRemoteTmuxCommand([
790
+ "display-message",
791
+ "-p",
792
+ "-t",
793
+ agentId,
794
+ "#{pane_pid} #{pane_dead}"
795
+ ])).then((stdout) => {
796
+ const [pid = "", dead = ""] = stdout.trim().split(/\s+/);
797
+ return {
798
+ pid,
799
+ dead: dead === "1"
800
+ };
801
+ }).catch(() => ({
802
+ pid: "",
803
+ dead: true
804
+ }));
805
+ try {
806
+ let poisonMarker;
807
+ try {
808
+ poisonMarker = await readMarkerStrict(poisonOption);
809
+ } catch (error) {
810
+ throw new KeyedMarkerVerificationError(agentId, `initial poison read (key "${dedupKey}")`, { cause: error });
811
+ }
812
+ const repaired = poisonMarker !== "";
813
+ if (repaired) {
814
+ await run(buildRemoteTmuxCommand([
815
+ "set-option",
816
+ "-u",
817
+ "-t",
818
+ agentId,
819
+ terminalOption,
820
+ ";",
821
+ "set-option",
822
+ "-t",
823
+ agentId,
824
+ pendingOption,
825
+ sendId
826
+ ]));
827
+ let repairedTerminal;
828
+ let repairedPending;
829
+ try {
830
+ [repairedTerminal, repairedPending] = await Promise.all([readMarkerStrict(terminalOption), readMarkerStrict(pendingOption)]);
831
+ } catch {
832
+ throw new KeyedMarkerVerificationError(agentId, `repair verification of key "${dedupKey}"`);
833
+ }
834
+ if (repairedTerminal !== "" || repairedPending === "") throw new Error(`Keyed remote markers for ${agentId} are poisoned and could not be repaired (key "${dedupKey}")`);
835
+ await clearPoisonVerified(`repair of key "${dedupKey}"`);
836
+ }
837
+ const targetOption = dedupTargetOptionName(dedupKey);
838
+ const messageBase64 = Buffer.from(message).toString("base64");
839
+ await run(`mkdir -p ${shellQuote(`${REMOTE_PAN_DIR}/prompts`)} && echo ${shellQuote(messageBase64)} | base64 -d > ${shellQuote(promptFile)}`);
840
+ await run(buildRemoteTmuxCommand([
841
+ "load-buffer",
842
+ "-b",
843
+ bufferName,
844
+ promptFile
845
+ ]));
846
+ let pendingMarker;
847
+ if (repaired) pendingMarker = sendId;
848
+ else {
849
+ const condition = `test -z "$(${innerTmux} show-option -qv -t ${agentId} ${pendingOption})" && test -z "$(${innerTmux} show-option -qv -t ${agentId} ${terminalOption})"`;
850
+ const onTrue = `paste-buffer -b ${bufferName} -p -t ${agentId} \; set-option -t ${agentId} ${pendingOption} ${sendId} \; set-option -F -t ${agentId} ${targetOption} '#{pane_pid}'`;
851
+ await run(buildRemoteTmuxCommand([
852
+ "if-shell",
853
+ "-t",
854
+ agentId,
855
+ condition,
856
+ onTrue
857
+ ]));
858
+ const terminalMarker = await readMarker(terminalOption);
859
+ pendingMarker = await readMarker(pendingOption);
860
+ if (terminalMarker !== "") return "deduplicated";
861
+ if (pendingMarker === "") throw new Error(`Keyed remote paste for ${agentId} did not land and no dedup marker was recorded`);
862
+ }
863
+ const recordedTarget = await readMarker(targetOption);
864
+ const currentPid = (await readPaneTarget()).pid;
865
+ if (!(recordedTarget !== "" && currentPid !== "" && recordedTarget === currentPid)) {
866
+ const repasteCondition = `test -n "$(${innerTmux} show-option -qv -t ${agentId} ${pendingOption})" && test -z "$(${innerTmux} show-option -qv -t ${agentId} ${terminalOption})" && ! test "$(${innerTmux} display-message -p -t ${agentId} '#{pane_pid}')" = "$(${innerTmux} show-option -qv -t ${agentId} ${targetOption})"`;
867
+ const repasteOnTrue = `paste-buffer -b ${bufferName} -p -t ${agentId} \; set-option -t ${agentId} ${pendingOption} ${sendId} \; set-option -F -t ${agentId} ${targetOption} '#{pane_pid}'`;
868
+ await run(buildRemoteTmuxCommand([
869
+ "if-shell",
870
+ "-t",
871
+ agentId,
872
+ repasteCondition,
873
+ repasteOnTrue
874
+ ]));
875
+ const [repastedPending, repastedTerminal] = await Promise.all([readMarker(pendingOption), readMarker(terminalOption)]);
876
+ if (repastedTerminal !== "") return "deduplicated";
877
+ if (repastedPending === "") throw new Error(`Keyed remote paste for ${agentId} did not land and no dedup marker was recorded`);
878
+ pendingMarker = repastedPending;
879
+ }
880
+ const preTarget = await readPaneTarget();
881
+ const pendingBefore = pendingMarker;
882
+ await new Promise((resolve) => setTimeout(resolve, 300));
883
+ const submitCondition = `test -z "$(${innerTmux} show-option -qv -t ${agentId} ${terminalOption})" && test -n "$(${innerTmux} show-option -qv -t ${agentId} ${pendingOption})" && test "$(${innerTmux} display-message -p -t ${agentId} '#{pane_dead}')" = "0" && test "$(${innerTmux} display-message -p -t ${agentId} '#{pane_pid}')" = "$(${innerTmux} show-option -qv -t ${agentId} ${targetOption})"`;
884
+ const submitOnTrue = `send-keys -t ${agentId} C-m \; set-option -t ${agentId} ${poisonOption} 1 \; set-option -t ${agentId} ${terminalOption} 1 \; set-option -u -t ${agentId} ${pendingOption}`;
885
+ await run(buildRemoteTmuxCommand([
886
+ "if-shell",
887
+ "-t",
888
+ agentId,
889
+ submitCondition,
890
+ submitOnTrue
891
+ ]));
892
+ const [terminalAfter, pendingAfter, postTarget, recordedTargetAfter] = await Promise.all([
893
+ readMarker(terminalOption),
894
+ readMarker(pendingOption),
895
+ readPaneTarget(),
896
+ readMarker(targetOption)
897
+ ]);
898
+ const targetLost = preTarget.dead || preTarget.pid === "" || postTarget.dead || postTarget.pid !== preTarget.pid;
899
+ if (terminalAfter === "" && pendingAfter === "") throw new Error(`Keyed remote submit for ${agentId} found neither a pending claim nor a terminal marker — the paste vanished without submission`);
900
+ if (terminalAfter === "" && (targetLost || recordedTargetAfter === "" || recordedTargetAfter !== postTarget.pid)) throw new KeyedSubmitTargetDeadError(agentId, dedupKey);
901
+ if (targetLost) {
902
+ if (terminalAfter !== "") {
903
+ await run(buildRemoteTmuxCommand(pendingBefore === "" ? [
904
+ "set-option",
905
+ "-u",
906
+ "-t",
907
+ agentId,
908
+ terminalOption,
909
+ ";",
910
+ "set-option",
911
+ "-u",
912
+ "-t",
913
+ agentId,
914
+ pendingOption
915
+ ] : [
916
+ "set-option",
917
+ "-u",
918
+ "-t",
919
+ agentId,
920
+ terminalOption,
921
+ ";",
922
+ "set-option",
923
+ "-t",
924
+ agentId,
925
+ pendingOption,
926
+ pendingBefore
927
+ ])).catch(() => "");
928
+ let rolledTerminal;
929
+ let restoredPending;
930
+ try {
931
+ [rolledTerminal, restoredPending] = await Promise.all([readMarkerStrict(terminalOption), readMarkerStrict(pendingOption)]);
932
+ } catch {
933
+ throw new KeyedMarkerVerificationError(agentId, `rollback verification of key "${dedupKey}"`);
934
+ }
935
+ if (rolledTerminal === "" && restoredPending !== "") await clearPoisonVerified(`verified rollback of key "${dedupKey}"`).catch(() => "");
936
+ }
937
+ throw new KeyedSubmitTargetDeadError(agentId, dedupKey);
938
+ }
939
+ if (terminalAfter === "") throw new Error(`Keyed remote submit for ${agentId} was rejected with the pending claim intact on a live pane`);
940
+ await clearPoisonVerified(`verified delivery of key "${dedupKey}"`);
941
+ return "delivered";
942
+ } finally {
943
+ await cleanup();
944
+ }
945
+ }
946
+ var init_remote_keyed_delivery = __esmMin((() => {
947
+ init_tmux_dedup();
948
+ init_fly_provider();
949
+ init_remote_tmux();
950
+ }));
951
+ //#endregion
664
952
  //#region ../../lib/remote/remote-agents.ts
665
953
  /**
666
954
  * Remote Agent Management
@@ -680,7 +968,7 @@ with open(path, "w") as f:
680
968
  */
681
969
  function generatePushDaemonScript(options) {
682
970
  const intervalSeconds = options.intervalSeconds ?? PUSH_DAEMON_INTERVAL_SECONDS;
683
- const logFile = options.logFile ?? `${REMOTE_PAN_DIR}/push-daemon.log`;
971
+ const logFile = options.logFile ?? `/workspace/.pan/push-daemon.log`;
684
972
  const issueIdLiteral = JSON.stringify(options.issueId);
685
973
  const branchLiteral = JSON.stringify(options.branch);
686
974
  return [
@@ -787,7 +1075,7 @@ async function installPushDaemon(provider, vmName, issueId) {
787
1075
  */
788
1076
  function generateEphemeralWatchdogScript(options) {
789
1077
  const heartbeatPathLiteral = JSON.stringify(options.heartbeatPath);
790
- const logFileLiteral = JSON.stringify(options.logFile ?? `${REMOTE_PAN_DIR}/ephemeral-watchdog.log`);
1078
+ const logFileLiteral = JSON.stringify(options.logFile ?? `/workspace/.pan/ephemeral-watchdog.log`);
791
1079
  const intervalSeconds = options.intervalSeconds ?? EPHEMERAL_WATCHDOG_INTERVAL_SECONDS;
792
1080
  const staleThresholdSeconds = options.staleThresholdSeconds ?? EPHEMERAL_HEARTBEAT_STALE_THRESHOLD_SECONDS;
793
1081
  return [
@@ -903,10 +1191,6 @@ function listActiveRemoteAgentStates() {
903
1191
  if (!existsSync(AGENTS_DIR)) return [];
904
1192
  return readdirSync(AGENTS_DIR).map((agentId) => loadRemoteAgentState(agentId)).filter((state) => state?.location === "remote" && (state.status === "running" || state.status === "starting"));
905
1193
  }
906
- /** Run a FlyProvider Effect at the async/Promise boundary. */
907
- function runSsh(provider, vmName, command) {
908
- return Effect.runPromise(provider.ssh(vmName, command));
909
- }
910
1194
  /**
911
1195
  * Refresh the host-heartbeat freshness file on every active ephemeral-tier VM.
912
1196
  * The deacon patrol calls this each cycle; the VM-side ephemeral watchdog uses
@@ -986,28 +1270,6 @@ async function remoteSessionExists(provider, vmName, sessionName) {
986
1270
  function assertFlyRemoteStateSupported(issueId, migrated) {
987
1271
  if (migrated) throw new Error(`Fly remote spawn blocked for ${issueId.toUpperCase()}: PAN-2541 D14 forbids remote work on migrated projects until PAN-2549 implements overdeck-state synchronization.`);
988
1272
  }
989
- function shellQuote(value) {
990
- return `'${value.replace(/'/g, `'\\''`)}'`;
991
- }
992
- function getRemoteTmuxBaseArgs() {
993
- return [
994
- "-L",
995
- getManagedTmuxSocketName(),
996
- "-f",
997
- REMOTE_TMUX_CONFIG_PATH
998
- ];
999
- }
1000
- function buildRemoteTmuxCommand(args) {
1001
- return [
1002
- "tmux",
1003
- ...getRemoteTmuxBaseArgs(),
1004
- ...args
1005
- ].map(shellQuote).join(" ");
1006
- }
1007
- async function ensureRemoteTmuxContext(provider, vmName) {
1008
- const configBase64 = Buffer.from(REMOTE_TMUX_CONFIG_CONTENT).toString("base64");
1009
- await runSsh(provider, vmName, `mkdir -p ${shellQuote(REMOTE_TMUX_DIR)} && echo ${shellQuote(configBase64)} | base64 -d > ${shellQuote(REMOTE_TMUX_CONFIG_PATH)}`);
1010
- }
1011
1273
  /**
1012
1274
  * Write a file on the VM via base64 chunks. The Machines exec API rejects
1013
1275
  * payloads somewhere above 4KB (PayloadTooLarge), so large content — agent
@@ -1036,7 +1298,11 @@ async function writeRemoteFile(provider, vmName, remotePath, content) {
1036
1298
  * Spawn a Claude agent on a remote VM
1037
1299
  */
1038
1300
  async function spawnRemoteAgent(options) {
1039
- const { issueId, workspace, model = "claude-sonnet-4-6", prompt } = options;
1301
+ if (isOperatorStartedBy(options.startedBy) || options.autoSpawnConsentRequired !== true) return spawnRemoteAgentWithoutConsentClaim(options);
1302
+ return withAutoSpawnConsentClaim(options.issueId, (acceptConsent) => spawnRemoteAgentWithoutConsentClaim(options, acceptConsent), { isAccepted: (state) => state.status === "running" });
1303
+ }
1304
+ async function spawnRemoteAgentWithoutConsentClaim(options, acceptConsent) {
1305
+ const { issueId, workspace, startedBy, model = "claude-sonnet-4-6", prompt } = options;
1040
1306
  const project = resolveProjectForIssue(issueId);
1041
1307
  if (project) assertFlyRemoteStateSupported(issueId, await isStateMigrated(project));
1042
1308
  const tier = options.tier ?? "ephemeral";
@@ -1055,6 +1321,7 @@ async function spawnRemoteAgent(options) {
1055
1321
  status: "starting",
1056
1322
  startedAt: (/* @__PURE__ */ new Date()).toISOString(),
1057
1323
  location: "remote",
1324
+ startedBy,
1058
1325
  tier
1059
1326
  };
1060
1327
  saveRemoteAgentState(state);
@@ -1072,12 +1339,13 @@ async function spawnRemoteAgent(options) {
1072
1339
  promptFile,
1073
1340
  baseCommand: "claude",
1074
1341
  permissionFlags: getClaudePermissionFlagsSync(),
1342
+ extraEnvExports: [`export OVERDECK_AGENT_STARTED_BY=${shellQuote(startedBy)}`],
1075
1343
  model
1076
1344
  }));
1077
1345
  const chmodRes = await runSsh(fly, vmName, `chmod +x ${launcherScript}`);
1078
1346
  if (chmodRes.exitCode !== 0) throw new Error(`Failed to chmod launcher on ${vmName}: ${chmodRes.stderr}`);
1079
1347
  claudeCmd = `bash ${launcherScript}`;
1080
- } else claudeCmd = `claude ${getClaudePermissionFlagsStringSync()} --model ${model}`;
1348
+ } else claudeCmd = `OVERDECK_AGENT_STARTED_BY=${shellQuote(startedBy)} claude ${getClaudePermissionFlagsStringSync()} --model ${model}`;
1081
1349
  console.log(`[claude-invoke] purpose=remote-agent | model=${model} | source=remote-agents.ts | vm=${vmName} | agent=${agentId} | command="${claudeCmd}"`);
1082
1350
  await ensureRemoteTmuxContext(fly, vmName);
1083
1351
  const result = await runSsh(fly, vmName, buildRemoteTmuxCommand([
@@ -1094,6 +1362,7 @@ async function spawnRemoteAgent(options) {
1094
1362
  saveRemoteAgentState(state);
1095
1363
  throw new Error(`Failed to start agent: ${result.stderr}`);
1096
1364
  }
1365
+ await acceptConsent?.();
1097
1366
  await installPushDaemon(fly, vmName, issueId);
1098
1367
  if (tier === "ephemeral") await installEphemeralWatchdog(fly, vmName, issueId);
1099
1368
  state.status = "running";
@@ -1206,30 +1475,24 @@ async function pollRemoteAgentStatus(agentId, vmName) {
1206
1475
  toolUses
1207
1476
  };
1208
1477
  }
1209
- var AGENTS_DIR, REMOTE_PAN_DIR, REMOTE_TMUX_DIR, REMOTE_TMUX_CONFIG_PATH, REMOTE_HOST_HEARTBEAT_PATH, REMOTE_TMUX_CONFIG_CONTENT, PUSH_DAEMON_INTERVAL_SECONDS, EPHEMERAL_WATCHDOG_INTERVAL_SECONDS, EPHEMERAL_HEARTBEAT_STALE_THRESHOLD_SECONDS;
1478
+ var AGENTS_DIR, REMOTE_HOST_HEARTBEAT_PATH, PUSH_DAEMON_INTERVAL_SECONDS, EPHEMERAL_WATCHDOG_INTERVAL_SECONDS, EPHEMERAL_HEARTBEAT_STALE_THRESHOLD_SECONDS;
1210
1479
  var init_remote_agents = __esmMin((() => {
1211
1480
  init_fly_provider();
1212
- init_tmux();
1481
+ init_remote_tmux();
1213
1482
  init_launcher_generator();
1214
1483
  init_claude_permissions();
1215
1484
  init_record();
1216
1485
  init_state_home();
1486
+ init_auto_spawn_consent();
1487
+ init_provenance();
1488
+ init_remote_keyed_delivery();
1217
1489
  AGENTS_DIR = join(homedir(), ".overdeck", "agents");
1218
- REMOTE_PAN_DIR = "/workspace/.pan";
1219
- REMOTE_TMUX_DIR = `${REMOTE_PAN_DIR}/tmux`;
1220
- REMOTE_TMUX_CONFIG_PATH = `${REMOTE_TMUX_DIR}/overdeck.tmux.conf`;
1221
1490
  REMOTE_HOST_HEARTBEAT_PATH = `${REMOTE_PAN_DIR}/host-heartbeat`;
1222
- REMOTE_TMUX_CONFIG_CONTENT = [
1223
- "# Overdeck-managed tmux config",
1224
- "# Keep this minimal and include only behavior Overdeck intentionally depends on.",
1225
- "set -g mouse on",
1226
- ""
1227
- ].join("\n");
1228
1491
  PUSH_DAEMON_INTERVAL_SECONDS = 300;
1229
1492
  EPHEMERAL_WATCHDOG_INTERVAL_SECONDS = 60;
1230
1493
  EPHEMERAL_HEARTBEAT_STALE_THRESHOLD_SECONDS = 300;
1231
1494
  }));
1232
1495
  //#endregion
1233
- export { init_fly_provider as C, createFlyProvider as S, saveRemoteAgentState as _, generatePushDaemonScript as a, writeRemoteFile as b, installEphemeralWatchdog as c, killRemoteAgent as d, listActiveRemoteAgentStates as f, refreshHostHeartbeatForEphemeralVms as g, pollRemoteAgentStatus as h, generateEphemeralWatchdogScript as i, installPushDaemon as l, loadRemoteAgentState as m, checkRemoteDurabilityPreflight as n, getRemoteAgentOutput as o, listRemoteAgents as p, checkRemoteSpendCap as r, init_remote_agents as s, assertFlyRemoteStateSupported as t, isRemoteAgentRunning as u, sendToRemoteAgent as v, FlyProvider as x, spawnRemoteAgent as y };
1496
+ export { createFlyProvider as C, FlyProvider as S, saveRemoteAgentState as _, generatePushDaemonScript as a, writeRemoteFile as b, installEphemeralWatchdog as c, killRemoteAgent as d, listActiveRemoteAgentStates as f, refreshHostHeartbeatForEphemeralVms as g, pollRemoteAgentStatus as h, generateEphemeralWatchdogScript as i, installPushDaemon as l, loadRemoteAgentState as m, checkRemoteDurabilityPreflight as n, getRemoteAgentOutput as o, listRemoteAgents as p, checkRemoteSpendCap as r, init_remote_agents as s, assertFlyRemoteStateSupported as t, isRemoteAgentRunning as u, sendToRemoteAgent as v, init_fly_provider as w, sendToRemoteAgentKeyed as x, spawnRemoteAgent as y };
1234
1497
 
1235
- //# sourceMappingURL=remote-agents-By1ige5O.js.map
1498
+ //# sourceMappingURL=remote-agents-Bba-MgSA.js.map
@@ -1,3 +1,3 @@
1
- import { _ as saveRemoteAgentState, a as generatePushDaemonScript, b as writeRemoteFile, c as installEphemeralWatchdog, d as killRemoteAgent, f as listActiveRemoteAgentStates, g as refreshHostHeartbeatForEphemeralVms, h as pollRemoteAgentStatus, i as generateEphemeralWatchdogScript, l as installPushDaemon, m as loadRemoteAgentState, n as checkRemoteDurabilityPreflight, o as getRemoteAgentOutput, p as listRemoteAgents, r as checkRemoteSpendCap, s as init_remote_agents, t as assertFlyRemoteStateSupported, u as isRemoteAgentRunning, v as sendToRemoteAgent, y as spawnRemoteAgent } from "./remote-agents-By1ige5O.js";
1
+ import { _ as saveRemoteAgentState, a as generatePushDaemonScript, b as writeRemoteFile, c as installEphemeralWatchdog, d as killRemoteAgent, f as listActiveRemoteAgentStates, g as refreshHostHeartbeatForEphemeralVms, h as pollRemoteAgentStatus, i as generateEphemeralWatchdogScript, l as installPushDaemon, m as loadRemoteAgentState, n as checkRemoteDurabilityPreflight, o as getRemoteAgentOutput, p as listRemoteAgents, r as checkRemoteSpendCap, s as init_remote_agents, t as assertFlyRemoteStateSupported, u as isRemoteAgentRunning, v as sendToRemoteAgent, x as sendToRemoteAgentKeyed, y as spawnRemoteAgent } from "./remote-agents-Bba-MgSA.js";
2
2
  init_remote_agents();
3
- export { assertFlyRemoteStateSupported, checkRemoteDurabilityPreflight, checkRemoteSpendCap, generateEphemeralWatchdogScript, generatePushDaemonScript, getRemoteAgentOutput, installEphemeralWatchdog, installPushDaemon, isRemoteAgentRunning, killRemoteAgent, listActiveRemoteAgentStates, listRemoteAgents, loadRemoteAgentState, pollRemoteAgentStatus, refreshHostHeartbeatForEphemeralVms, saveRemoteAgentState, sendToRemoteAgent, spawnRemoteAgent, writeRemoteFile };
3
+ export { assertFlyRemoteStateSupported, checkRemoteDurabilityPreflight, checkRemoteSpendCap, generateEphemeralWatchdogScript, generatePushDaemonScript, getRemoteAgentOutput, installEphemeralWatchdog, installPushDaemon, isRemoteAgentRunning, killRemoteAgent, listActiveRemoteAgentStates, listRemoteAgents, loadRemoteAgentState, pollRemoteAgentStatus, refreshHostHeartbeatForEphemeralVms, saveRemoteAgentState, sendToRemoteAgent, sendToRemoteAgentKeyed, spawnRemoteAgent, writeRemoteFile };
@@ -1,10 +1,10 @@
1
- import { Tn as init_projects, mn as findProjectByTeamSync, un as extractTeamPrefix, zn as resolveProjectFromIssueSync } from "./config-yaml-DySPNmKN.js";
2
- import { a as PAN_DIRNAME, i as PAN_CONTINUE_FILENAME } from "./types-hraoaQIp.js";
3
- import { f as init_config, m as loadConfigSync } from "./config-BZ0sHTju.js";
4
- import { t as init_pan_dir } from "./pan-dir-B0c3w0Ya.js";
5
- import { r as init_workspace_manager, t as createWorkspace } from "./workspace-manager-CBhNdzE4.js";
6
- import { _ as saveRemoteAgentState, f as listActiveRemoteAgentStates, m as loadRemoteAgentState, o as getRemoteAgentOutput, s as init_remote_agents, u as isRemoteAgentRunning, v as sendToRemoteAgent } from "./remote-agents-By1ige5O.js";
7
- import { t as createFlyProviderFromConfig } from "./remote-C_2hasl7.js";
1
+ import { An as extractTeamPrefix, Gn as init_projects, Pn as findProjectByTeamSync, ar as resolveProjectFromIssueSync } from "./config-yaml-CxdwhAIA.js";
2
+ import { a as PAN_DIRNAME, i as PAN_CONTINUE_FILENAME } from "./types-Cm5ASJbq.js";
3
+ import { f as init_config, m as loadConfigSync } from "./config-BvLe652W.js";
4
+ import { t as init_pan_dir } from "./pan-dir-DMzF5wne.js";
5
+ import { r as init_workspace_manager, t as createWorkspace } from "./workspace-manager-BPgTrG66.js";
6
+ import { _ as saveRemoteAgentState, f as listActiveRemoteAgentStates, m as loadRemoteAgentState, o as getRemoteAgentOutput, s as init_remote_agents, u as isRemoteAgentRunning, v as sendToRemoteAgent } from "./remote-agents-Bba-MgSA.js";
7
+ import { t as createFlyProviderFromConfig } from "./remote-BXarMvqf.js";
8
8
  import { Effect } from "effect";
9
9
  import { existsSync, mkdirSync, statSync, unlinkSync, writeFileSync } from "fs";
10
10
  import { basename, join } from "path";
@@ -309,7 +309,7 @@ async function reapCompletedRemoteAgents(opts = {}) {
309
309
  } catch {
310
310
  details.push("No continue.json retrieved from VM (skipped)");
311
311
  }
312
- const { getAgentStateSync, saveAgentStateSync } = await import("./agents-wi9NWzs2.js");
312
+ const { getAgentStateSync, saveAgentStateSync } = await import("./agents-ePFVoZbu.js");
313
313
  const existing = getAgentStateSync(agentId);
314
314
  if (existing) {
315
315
  existing.workspace = existing.workspace || workspacePath;
@@ -327,8 +327,8 @@ async function reapCompletedRemoteAgents(opts = {}) {
327
327
  startedAt: remoteState.startedAt,
328
328
  lastActivity: (/* @__PURE__ */ new Date()).toISOString()
329
329
  });
330
- const { createReviewArtifactsForIssue } = await import("./review-artifacts-nRDPuMxd.js");
331
- const { setReviewStatusSync } = await import("./review-status-btEYlaxA.js");
330
+ const { createReviewArtifactsForIssue } = await import("./review-artifacts-BNmw8dWE.js");
331
+ const { setReviewStatusSync } = await import("./review-status-Dma9SFaN.js");
332
332
  const primaryArtifact = (await Effect.runPromise(createReviewArtifactsForIssue(issueId, workspacePath))).mergeSet?.repos.find((repo) => !!repo.artifactUrl);
333
333
  if (primaryArtifact?.artifactUrl) {
334
334
  setReviewStatusSync(issueId, { prUrl: primaryArtifact.artifactUrl });
@@ -349,7 +349,7 @@ async function reapCompletedRemoteAgents(opts = {}) {
349
349
  try {
350
350
  const fly = createFlyProviderFromConfig(loadConfigSync().remote);
351
351
  if (sessionAlive) {
352
- const { killRemoteAgent } = await import("./remote-agents-CA3Ihlxj.js");
352
+ const { killRemoteAgent } = await import("./remote-agents-CLZB3Coc.js");
353
353
  await killRemoteAgent(agentId, vmName).catch(() => void 0);
354
354
  }
355
355
  await Effect.runPromise(fly.deleteVm(vmName));
@@ -357,7 +357,7 @@ async function reapCompletedRemoteAgents(opts = {}) {
357
357
  } catch (err) {
358
358
  details.push(`Warning: could not destroy machine: ${err.message}`);
359
359
  }
360
- const { deleteWorkspaceMetadataSync } = await import("./workspace-metadata-BzHnwwX4.js");
360
+ const { deleteWorkspaceMetadataSync } = await import("./workspace-metadata-CdjzAP8x.js");
361
361
  deleteWorkspaceMetadataSync(issueId);
362
362
  details.push("Removed remote workspace metadata (pipeline is local from here)");
363
363
  saveRemoteAgentState({
@@ -386,4 +386,4 @@ async function reapCompletedRemoteAgents(opts = {}) {
386
386
  //#endregion
387
387
  export { reapCompletedRemoteAgents, refreshClaudeCredentialsForActiveRemoteAgents };
388
388
 
389
- //# sourceMappingURL=remote-completion-fVe9e_3u.js.map
389
+ //# sourceMappingURL=remote-completion-CwAp79EC.js.map
@@ -0,0 +1,3 @@
1
+ import { G as resumeAgent, W as init_resume } from "./queries-C-MUZaIy.js";
2
+ init_resume();
3
+ export { resumeAgent };