@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.
- package/drizzle/overdeck/0000_overdeck_init.sql +36 -1
- package/package.json +1 -1
- package/server/{acceptance-criteria-DDCnXF58.js → acceptance-criteria-10Ur5Dne.js} +2 -2
- package/server/activity-logger-CMthG6Vd.js +3 -0
- package/server/{activity-logger-DDlOIAML.js → activity-logger-CyteR4JO.js} +24 -13
- package/server/{advancing-selfheal-BVwW4qRn.js → advancing-selfheal-BNwqxseD.js} +6 -6
- package/server/{agent-gc-CHcnvonI.js → agent-gc-C3h9Or3a.js} +5 -5
- package/server/agent-state-CYXJVG72.js +3 -0
- package/server/agent-state-service-C63p_ftq.js +2 -0
- package/server/{agent-state-service-BsgWxZuB.js → agent-state-service-Ds6OeFvo.js} +15 -9
- package/server/{agents-EbI0zCJl.js → agents-J5mEnekq.js} +23 -16
- package/server/agents-ePFVoZbu.js +3 -0
- package/server/archive-planning-B2XplFzT.js +2 -0
- package/server/{archive-planning-Du25Jtst.js → archive-planning-BwhxeP7C.js} +22 -26
- package/server/{artifact-index-jobs-CbEDfCDu.js → artifact-index-jobs-D1q_vR3V.js} +2 -2
- package/server/{assemble-J2ZZ2C15.js → assemble-Bgwqv-Ro.js} +2 -2
- package/server/auto-spawn-consent-CQ9Bi9q6.js +1141 -0
- package/server/{backlog-auto-trigger-2R2jog7n.js → backlog-auto-trigger-n1lzPgN4.js} +3 -3
- package/server/{behavior-B3exJ42O.js → behavior-td6-xhQk.js} +2 -2
- package/server/boot-reconciled-stop-events-C7gGe3oB.js +44 -0
- package/server/bridge-pool-patrol-CYH2OLb5.js +136 -0
- package/server/{briefing-freshness-D1wzUIWv.js → briefing-freshness-DRqZ8lAz.js} +2 -2
- package/server/{build-info-Ie_D0_BT.js → build-info-7yiEpl6u.js} +5 -3
- package/server/{build-info-CZk_TITh.js → build-info-CpG__c63.js} +1 -1
- package/server/{checkpoint-manager-DwbQoqrC.js → checkpoint-manager-CkKmB0wZ.js} +1 -1
- package/server/{checkpoint-manager-BI1Wxoku.js → checkpoint-manager-DBcyNR8w.js} +2 -2
- package/server/checkpoint-worker.js +1 -1
- package/server/{checkpoints-CQB1h765.js → checkpoints-D95apurL.js} +2 -2
- package/server/{checkpoints-BJIs5QIA.js → checkpoints-Wm963lm8.js} +1 -1
- package/server/{claude-hooks-provision-8Ngo8TpT.js → claude-hooks-provision-4RPxNkE8.js} +1 -1
- package/server/{claude-hooks-provision-D8GXF3_s.js → claude-hooks-provision-Bjitl9aI.js} +13 -2
- package/server/{claude-permissions-DNWEVV6z.js → claude-permissions-CpbpvUQ2.js} +2 -2
- package/server/{claude-settings-overlay-DWy-Bb4Y.js → claude-settings-overlay-BzkHYDwR.js} +1 -1
- package/server/{claude-settings-overlay-CEdaqpWI.js → claude-settings-overlay-_H9Yrzab.js} +2 -2
- package/server/cli-CjOCSnfj.js +3 -0
- package/server/{cli-RoOx5DUf.js → cli-Cte9ZFGn.js} +9 -9
- package/server/{cliproxy-C8a1vtTU.js → cliproxy-C5fMJ7rY.js} +2 -2
- package/server/{cliproxy-fHfIeiGd.js → cliproxy-DaAbWMjC.js} +1 -1
- package/server/{close-issue-DoOifFIK.js → close-issue-BPh1ARCF.js} +5 -5
- package/server/{closed-issue-reaper-CktPXo8m.js → closed-issue-reaper-DHRfRMrp.js} +1 -1
- package/server/{closed-issue-reaper-Bk3SU4RC.js → closed-issue-reaper-DoOZqGFK.js} +88 -17
- package/server/{codex-BZXGhUVB.js → codex-BzGDW_d3.js} +36 -7
- package/server/{codex-GcHuUF-k.js → codex-o8FJwzmy.js} +1 -1
- package/server/{codex-parser-CFZ1_1Jl.js → codex-parser-Dt-ycU8L.js} +2 -2
- package/server/compaction-continuation-CvXpbZ4w.js +200 -0
- package/server/{config-CKxYiCmX.js → config-Bi3u1VK7.js} +4 -3
- package/server/{config-BZ0sHTju.js → config-BvLe652W.js} +2 -2
- package/server/{config-DzV30TOm.js → config-CL3Gyvja.js} +1 -1
- package/server/{config-yaml-DySPNmKN.js → config-yaml-CxdwhAIA.js} +276 -14
- package/server/conflict-gate-CX80JYYS.js +3 -0
- package/server/{conflict-gate-BaCVrH-N.js → conflict-gate-E4nt7ZeS.js} +60 -14
- package/server/{context-layers-igZ4FI4_.js → context-layers-C_IIysnm.js} +3 -3
- package/server/{context-layers-BrPmE__h.js → context-layers-DAG83UZt.js} +2 -2
- package/server/{control-settings-BQp7_4uD.js → control-settings-CiqGxXnc.js} +56 -19
- package/server/{conversation-compaction-eQB5CkOe.js → conversation-compaction-BE3CNtHF.js} +1 -1
- package/server/{conversation-compaction-CgrR8YYp.js → conversation-compaction-D6-yLtqt.js} +8 -8
- package/server/{conversation-service-DPJ71F33.js → conversation-service-DBxoYMDl.js} +10 -8
- package/server/conversation-service-D_TS2b1r.js +3 -0
- package/server/{conversations-CAsJF9kh.js → conversations-BKDVpB-3.js} +1 -1
- package/server/{conversations-6AfUfbwc.js → conversations-D0UEdLtk.js} +4 -4
- package/server/{cost-R-m6Yi-W.js → cost-DS1s0DbG.js} +3 -3
- package/server/{cost-B2ddP6wq.js → cost-DpgYmYqR.js} +12 -2
- package/server/{cost-sync-BsN6ER0n.js → cost-sync-tOCCGnEt.js} +3 -3
- package/server/{dag-B1ucnjDU.js → dag-BtkgLeqY.js} +2 -2
- package/server/{dangerous-git-ops-BXqeWVSf.js → dangerous-git-ops-CFLykHWt.js} +1 -1
- package/server/dashboard-db-worker.js +7 -7
- package/server/deacon-BIblC-WX.js +4 -0
- package/server/{deacon-nudge-log-6wVqAaqz.js → deacon-nudge-log-B08gF0mh.js} +3 -3
- package/server/{deacon-CU_cAYSR.js → deacon-pLRLbPvR.js} +3308 -2707
- package/server/deacon-pending-lifecycle-B-Io84AP.js +33 -0
- package/server/deacon-swarm-B1XkIvfr.js +2 -0
- package/server/{deacon-swarm-BXZZ1Z2-.js → deacon-swarm-v5PMun-m.js} +15 -14
- package/server/deacon.js +14 -19
- package/server/dead-end-trip-D8A3msX9.js +13 -0
- package/server/delivery-BX9HR4wQ.js +3 -0
- package/server/{deploy-patrol-AiFoP8dw.js → deploy-patrol-sYgOxLeb.js} +69 -18
- package/server/deploy-queue-VfohaPN_.js +169 -0
- package/server/deploy-queue-gHJBycaF.js +3 -0
- package/server/deploy-window-CFRZ0-kt.js +3 -0
- package/server/{deploy-window-C3F-tihF.js → deploy-window-D4DQb8VP.js} +40 -16
- package/server/{dev-supervisor-bcOWqdQE.js → dev-supervisor-DiOBDM1c.js} +2 -2
- package/server/{devcontainer-renderer-_d6XhyND.js → devcontainer-renderer-BUOIlfgD.js} +3 -3
- package/server/dist-B3YPQa5A.js +3 -0
- package/server/{dist-Cb_0uvpS.js → dist-C3A8B8wM.js} +1 -1
- package/server/{dist-src-BSoS7mkd.js → dist-src-C0adpegX.js} +1 -1
- package/server/{docker-DcMTFTUC.js → docker-BJzlkqYB.js} +2 -2
- package/server/docker-Y3PElJb0.js +3 -0
- package/server/dod-DlNtcH6n.js +91 -0
- package/server/durable-review-pipeline-Cibps-Rg.js +20 -0
- package/server/durable-review-pipeline-DP6bIcOY.js +3 -0
- package/server/{ensure-devcontainer-DNi-ono3.js → ensure-devcontainer-BAofzBPv.js} +4 -4
- package/server/{ensure-devcontainer-BZgOhRo7.js → ensure-devcontainer-DMAbWqtQ.js} +1 -1
- package/server/{esm-shims-OSHAYaS1.js → esm-shims-BeObUkaw.js} +1 -1
- package/server/{event-store-EV2cMiXj.js → event-store-5UKzh9Jf.js} +1 -1
- package/server/{event-store-CQL6NeqB.js → event-store-CrHcVC5_.js} +23 -4
- package/server/{events-DTfAe4My.js → events-BNrvchBg.js} +3 -3
- package/server/{events-BTdrdEq8.js → events-CF8QDbuV.js} +1 -1
- package/server/{factory-CFibJuaw.js → factory-Cmm9Hsho.js} +5 -5
- package/server/{feature-registry-population-DKZFMbFt.js → feature-registry-population-B6HpNWRy.js} +4 -4
- package/server/{feature-registry-storage-BdPuLcBX.js → feature-registry-storage-DJEFx1Pf.js} +2 -2
- package/server/{features-ez2271oH.js → features-D5km80UI.js} +2 -2
- package/server/{feedback-target-CoFDHiM8.js → feedback-target-BJ5ZADsu.js} +1 -1
- package/server/{feedback-target-7mqqwrX6.js → feedback-target-DSxEL6lP.js} +8 -8
- package/server/{feedback-writer-CY5L1lB7.js → feedback-writer-C27Hak8a.js} +5 -5
- package/server/{feedback-writer-D3a22RCd.js → feedback-writer-CoB9Z6aU.js} +1 -1
- package/server/{flywheel-DHrgCphM.js → flywheel-BHx8XuMr.js} +47 -20
- package/server/{flywheel-SVF02Jpq.js → flywheel-DZZdtiOL.js} +1 -1
- package/server/{flywheel-DzGtWnJ1.js → flywheel-f662Q-y2.js} +16 -15
- package/server/flywheel-merge-order-D_xLMbJU.js +462 -0
- package/server/flywheel-merge-order-Dil0LmdN.js +2 -0
- package/server/forge-B5o319qI.js +3 -0
- package/server/forge-BaKGCya6.js +383 -0
- package/server/{from-kNxT0bZC.js → from-B3tZbB55.js} +1 -1
- package/server/fs-lock-Bre3sGoz.js +130 -0
- package/server/{fts-db-CE46vDkZ.js → fts-db-IVc4_M3f.js} +2 -2
- package/server/{fts-operations-CqY6zl-i.js → fts-operations-B9jG8wa3.js} +2 -2
- package/server/{git-utils-CRw2zLPC.js → git-utils-CsvYfJU3.js} +30 -5
- package/server/git-utils-Xg4PFN45.js +3 -0
- package/server/{github-app-ClZ2lk8D.js → github-app-Bmg4R9mv.js} +1 -1
- package/server/{github-app-C3QrAUd0.js → github-app-CmNk0zLU.js} +3 -3
- package/server/{github-client-DfQYVUaw.js → github-client-B6KM9_wA.js} +1 -1
- package/server/{github-client-BnIsSrEN.js → github-client-qazkPrg0.js} +3 -3
- package/server/github-pr-lookup-DAcVeRLK.js +58 -0
- package/server/{harness-binary-DPUi-Pv8.js → harness-binary-BSpiXaLw.js} +2 -2
- package/server/{harness-resolve-3lNZkyT4.js → harness-resolve-BAJu5MX8.js} +4 -4
- package/server/{health-events-BDOHby5Q.js → health-events-2Z6Wa9SM.js} +1 -1
- package/server/{health-events-BBcTYQKU.js → health-events-BwX32k8d.js} +2 -2
- package/server/{hooks-DPVX1rwQ.js → hooks-D1g1jKLI.js} +1 -1
- package/server/{hooks-CKZgXlJb.js → hooks-DbtbimEf.js} +2 -2
- package/server/{hume-Cz8igP9E.js → hume-DXNiu6nQ.js} +2 -2
- package/server/hume-VUCNbTgn.js +3 -0
- package/server/{idle-stack-reaper-CuLF0j2H.js → idle-stack-reaper-CRA1e0jr.js} +1 -1
- package/server/{idle-stack-reaper-DDIRwxUY.js → idle-stack-reaper-Cy-dQzW4.js} +99 -6
- package/server/in-flight-guard-D-sSkADM.js +45 -0
- package/server/{infra-BEqFxlJc.js → infra-BDQDRopn.js} +81 -5
- package/server/{injection-C8aiVJrF.js → injection-6AGnXxlj.js} +7 -7
- package/server/{injection-CPUIqNhI.js → injection-Bl8d_jHZ.js} +1 -1
- package/server/inspect-agent-CUwVmr2h.js +2 -0
- package/server/{inspect-agent-BLuJ1AkT.js → inspect-agent-nXdIptyh.js} +26 -25
- package/server/{internal-token-s0-oKybJ.js → internal-token-DzK385vD.js} +2 -2
- package/server/{internal-token-BrcU6qfe.js → internal-token-Ias7N8Kg.js} +1 -1
- package/server/{io-C9kF1wtJ.js → io-B00PBNku.js} +44 -27
- package/server/{issue-closed-CDJk4pIp.js → issue-closed-BehTG1be.js} +8 -8
- package/server/{issue-lifecycle-ojZAzDBP.js → issue-lifecycle-Birk-ifu.js} +42 -30
- package/server/{issue-lifecycle-B8sZHVHh.js → issue-lifecycle-BqSuQvbn.js} +1 -1
- package/server/{issue-service-singleton-BvJ09SaR.js → issue-service-singleton-B2wXiIlw.js} +1 -1
- package/server/{issue-service-singleton-Yx5DdmVJ.js → issue-service-singleton-C6ZduvuY.js} +10 -10
- package/server/{issues-BMmP_77e.js → issues-DQ5-LatB.js} +2 -2
- package/server/{jsonl-parser-BXSlHwEh.js → jsonl-parser-BDpnGFCl.js} +5 -4
- package/server/{label-cleanup-B0UJwnv5.js → label-cleanup-Dwnky8FG.js} +3 -3
- package/server/{lifecycle-xmBfK2GJ.js → lifecycle-B3s4sM1G.js} +6 -7
- package/server/{lifecycle-yPd___5E.js → lifecycle-B4Xdb4cY.js} +2 -2
- package/server/{lifecycle-io-DPo7x11I.js → lifecycle-io-CzTHEooc.js} +1 -1
- package/server/{lifecycle-io-BREGpnLk.js → lifecycle-io-DCo6s6ks.js} +5 -5
- package/server/{linear-client-BsuUvkdA.js → linear-client-9uq7fhiV.js} +3 -3
- package/server/{linear-client-CTskEeT_.js → linear-client-CnbtHiic.js} +1 -1
- package/server/linear-mcp-auth-BxUOzswy.js +280 -0
- package/server/linear-mcp-auth-D46fBCLf.js +2 -0
- package/server/memory-fts-worker.js +1 -1
- package/server/{merge-CefQNAnq.js → merge-DiW9RdSB.js} +13 -11
- package/server/{merge-agent-4WOWlSYA.js → merge-agent-BLUgRsz3.js} +234 -84
- package/server/{merge-agent-CKkgIBPB.js → merge-agent-DQTXZk8z.js} +1 -1
- package/server/{merge-batch-ClFn2T-y.js → merge-batch-Cp_j9BGk.js} +1 -1
- package/server/merge-completeness-B46KqhtY.js +277 -0
- package/server/merge-completeness-BLbB5-6n.js +3 -0
- package/server/merge-ops-1abz6O_P.js +2 -0
- package/server/merge-rebase-CJJVAJuz.js +2 -0
- package/server/{merge-rebase-BfaTyXsw.js → merge-rebase-DIkBjgwq.js} +3 -3
- package/server/{merge-set-DJ8-UErs.js → merge-set-CBgHfwM0.js} +11 -5
- package/server/merge-set-DeUxFsC3.js +3 -0
- package/server/{merge-B1DiziGU.js → merge-sr8Nrnmi.js} +1 -1
- package/server/merge-sync-CpGmk6Ch.js +3 -0
- package/server/{merge-sync-VPV28g0g.js → merge-sync-kr4vqyjM.js} +409 -153
- package/server/{merge-train-CHopycP0.js → merge-train-Dmrcus12.js} +18 -8
- package/server/{merge-train-deps-D1cOZzy2.js → merge-train-deps-D_uGX91G.js} +21 -15
- package/server/merge-verification-NvaAd8CZ.js +220 -0
- package/server/merged-docker-cleanup-worker-DH_hrGPI.js +3 -0
- package/server/merged-docker-cleanup-worker-Y1R06TEl.js +107 -0
- package/server/{multipart-parser-duPAfSBw.js → multipart-parser-R-oC8dQg.js} +2 -2
- package/server/{no-resume-mode-Nw29vaFb.js → no-resume-mode-BgD0JUmM.js} +1 -1
- package/server/node_modules/.package-lock.json +30 -30
- package/server/node_modules/@effect/platform-node/node_modules/@effect/platform-node-shared/package.json +3 -3
- package/server/node_modules/@google-cloud/common/package.json +2 -2
- package/server/node_modules/@types/node/README.md +1 -1
- package/server/node_modules/@types/node/crypto.d.ts +1 -1
- package/server/node_modules/@types/node/package.json +2 -2
- package/server/node_modules/gaxios/build/cjs/tsconfig.cjs.tsbuildinfo +1 -1
- package/server/node_modules/gaxios/build/esm/tsconfig.tsbuildinfo +1 -1
- package/server/node_modules/gaxios/package.json +1 -1
- package/server/node_modules/google-auth-library/build/src/auth/googleauth.js +24 -19
- package/server/node_modules/google-auth-library/package.json +1 -1
- package/server/node_modules/google-gax/build/protos/google/api/auth.proto +2 -1
- package/server/node_modules/google-gax/build/protos/google/api/backend.proto +12 -1
- package/server/node_modules/google-gax/build/protos/google/api/billing.proto +1 -1
- package/server/node_modules/google-gax/build/protos/google/api/client.proto +165 -53
- package/server/node_modules/google-gax/build/protos/google/api/cloudquotas/v1/resources.proto +1 -1
- package/server/node_modules/google-gax/build/protos/google/api/cloudquotas/v1beta/quota_adjuster_settings.proto +7 -3
- package/server/node_modules/google-gax/build/protos/google/api/cloudquotas/v1beta/resources.proto +1 -1
- package/server/node_modules/google-gax/build/protos/google/api/config_change.proto +1 -1
- package/server/node_modules/google-gax/build/protos/google/api/context.proto +1 -1
- package/server/node_modules/google-gax/build/protos/google/api/control.proto +3 -3
- package/server/node_modules/google-gax/build/protos/google/api/distribution.proto +1 -1
- package/server/node_modules/google-gax/build/protos/google/api/documentation.proto +1 -1
- package/server/node_modules/google-gax/build/protos/google/api/endpoint.proto +1 -1
- package/server/node_modules/google-gax/build/protos/google/api/error_reason.proto +186 -1
- package/server/node_modules/google-gax/build/protos/google/api/expr/v1alpha1/checked.proto +31 -3
- package/server/node_modules/google-gax/build/protos/google/api/expr/v1alpha1/eval.proto +8 -9
- package/server/node_modules/google-gax/build/protos/google/api/expr/v1alpha1/explain.proto +1 -2
- package/server/node_modules/google-gax/build/protos/google/api/expr/v1alpha1/syntax.proto +20 -22
- package/server/node_modules/google-gax/build/protos/google/api/expr/v1alpha1/value.proto +2 -3
- package/server/node_modules/google-gax/build/protos/google/api/field_behavior.proto +1 -1
- package/server/node_modules/google-gax/build/protos/google/api/field_info.proto +1 -1
- package/server/node_modules/google-gax/build/protos/google/api/http.proto +1 -1
- package/server/node_modules/google-gax/build/protos/google/api/httpbody.proto +1 -1
- package/server/node_modules/google-gax/build/protos/google/api/label.proto +1 -1
- package/server/node_modules/google-gax/build/protos/google/api/launch_stage.proto +1 -1
- package/server/node_modules/google-gax/build/protos/google/api/log.proto +1 -1
- package/server/node_modules/google-gax/build/protos/google/api/logging.proto +1 -1
- package/server/node_modules/google-gax/build/protos/google/api/metric.proto +1 -1
- package/server/node_modules/google-gax/build/protos/google/api/monitored_resource.proto +1 -1
- package/server/node_modules/google-gax/build/protos/google/api/monitoring.proto +1 -1
- package/server/node_modules/google-gax/build/protos/google/api/policy.proto +1 -1
- package/server/node_modules/google-gax/build/protos/google/api/quota.proto +1 -1
- package/server/node_modules/google-gax/build/protos/google/api/resource.proto +1 -1
- package/server/node_modules/google-gax/build/protos/google/api/routing.proto +8 -4
- package/server/node_modules/google-gax/build/protos/google/api/service.proto +2 -3
- package/server/node_modules/google-gax/build/protos/google/api/source_info.proto +1 -1
- package/server/node_modules/google-gax/build/protos/google/api/system_parameter.proto +1 -1
- package/server/node_modules/google-gax/build/protos/google/api/usage.proto +7 -27
- package/server/node_modules/google-gax/build/protos/google/api/visibility.proto +1 -1
- package/server/node_modules/google-gax/build/protos/google/longrunning/operations.proto +20 -1
- package/server/node_modules/google-gax/build/protos/google/protobuf/any.proto +52 -108
- package/server/node_modules/google-gax/build/protos/google/protobuf/compiler/ruby/ruby_generated_code.proto +2 -0
- package/server/node_modules/google-gax/build/protos/google/protobuf/cpp_features.proto +21 -1
- package/server/node_modules/google-gax/build/protos/google/protobuf/cpp_file_options.proto +24 -0
- package/server/node_modules/google-gax/build/protos/google/protobuf/cpp_options.proto +15 -0
- package/server/node_modules/google-gax/build/protos/google/protobuf/descriptor.proto +118 -30
- package/server/node_modules/google-gax/build/protos/google/protobuf/field_mask.proto +16 -18
- package/server/node_modules/google-gax/build/protos/google/protobuf/internal_options.proto +8 -1
- package/server/node_modules/google-gax/build/protos/google/protobuf/json/json_enumval_custom_string.proto +26 -0
- package/server/node_modules/google-gax/build/protos/google/protobuf/json_enumvalue_options.proto +29 -0
- package/server/node_modules/google-gax/build/protos/google/protobuf/json_options.proto +14 -0
- package/server/node_modules/google-gax/build/protos/google/protobuf/struct.proto +38 -22
- package/server/node_modules/google-gax/build/protos/google/protobuf/test_protos/forced_micro_string.proto +3 -0
- package/server/node_modules/google-gax/build/protos/google/protobuf/test_protos/repeated_field_proxy_import_message.proto +14 -0
- package/server/node_modules/google-gax/build/protos/google/protobuf/timestamp.proto +9 -8
- package/server/node_modules/google-gax/build/protos/google/protobuf/util/json_format_proto3.proto +18 -0
- package/server/node_modules/google-gax/build/protos/google/rpc/code.proto +1 -1
- package/server/node_modules/google-gax/build/protos/google/rpc/context/attribute_context.proto +7 -2
- package/server/node_modules/google-gax/build/protos/google/rpc/context/audit_context.proto +1 -1
- package/server/node_modules/google-gax/build/protos/google/rpc/error_details.proto +5 -5
- package/server/node_modules/google-gax/build/protos/google/rpc/http.proto +1 -1
- package/server/node_modules/google-gax/build/protos/google/rpc/status.proto +1 -2
- package/server/node_modules/google-gax/build/protos/google/type/calendar_period.proto +1 -1
- package/server/node_modules/google-gax/build/protos/google/type/color.proto +9 -10
- package/server/node_modules/google-gax/build/protos/google/type/date.proto +11 -9
- package/server/node_modules/google-gax/build/protos/google/type/datetime.proto +17 -17
- package/server/node_modules/google-gax/build/protos/google/type/dayofweek.proto +1 -1
- package/server/node_modules/google-gax/build/protos/google/type/decimal.proto +11 -13
- package/server/node_modules/google-gax/build/protos/google/type/expr.proto +1 -1
- package/server/node_modules/google-gax/build/protos/google/type/fraction.proto +1 -1
- package/server/node_modules/google-gax/build/protos/google/type/interval.proto +1 -2
- package/server/node_modules/google-gax/build/protos/google/type/latlng.proto +4 -5
- package/server/node_modules/google-gax/build/protos/google/type/localized_text.proto +3 -3
- package/server/node_modules/google-gax/build/protos/google/type/money.proto +1 -2
- package/server/node_modules/google-gax/build/protos/google/type/month.proto +1 -1
- package/server/node_modules/google-gax/build/protos/google/type/phone_number.proto +20 -15
- package/server/node_modules/google-gax/build/protos/google/type/postal_address.proto +39 -39
- package/server/node_modules/google-gax/build/protos/google/type/quaternion.proto +4 -4
- package/server/node_modules/google-gax/build/protos/google/type/timeofday.proto +11 -8
- package/server/node_modules/google-gax/package.json +5 -5
- package/server/node_modules/retry-request/package.json +4 -4
- package/server/node_modules/teeny-request/package.json +5 -5
- package/server/node_modules/undici/lib/cache/memory-cache-store.js +54 -9
- package/server/node_modules/undici/lib/cache/sqlite-cache-store.js +7 -1
- package/server/node_modules/undici/lib/core/request.js +12 -1
- package/server/node_modules/undici/lib/dispatcher/client-h1.js +11 -2
- package/server/node_modules/undici/lib/global.js +36 -16
- package/server/node_modules/undici/lib/handler/cache-handler.js +236 -116
- package/server/node_modules/undici/lib/handler/cache-revalidation-handler.js +3 -3
- package/server/node_modules/undici/lib/handler/retry-handler.js +24 -0
- package/server/node_modules/undici/lib/interceptor/cache.js +152 -62
- package/server/node_modules/undici/lib/interceptor/decompress.js +5 -2
- package/server/node_modules/undici/lib/util/cache.js +328 -66
- package/server/node_modules/undici/lib/util/date.js +23 -6
- package/server/node_modules/undici/lib/web/cookies/util.js +78 -8
- package/server/node_modules/undici/package.json +1 -1
- package/server/{orphan-proposed-reconciler-BvKkWMJQ.js → orphan-proposed-reconciler-B6vJHxtX.js} +242 -34
- package/server/{orphan-proposed-reconciler-CTSGcK8p.js → orphan-proposed-reconciler-DcgTPPFY.js} +1 -1
- package/server/package-lock.json +31 -31
- package/server/package.json +1 -1
- package/server/{pan-dir-B0c3w0Ya.js → pan-dir-DMzF5wne.js} +25 -11
- package/server/{paths-D-xWGHdh.js → paths-sJBSb7Ul.js} +2 -2
- package/server/pending-lifecycle-claim-DilzGfgk.js +110 -0
- package/server/persistent-logger-H_VjuOu7.js +57 -0
- package/server/{pickup-DUCLWrJY.js → pickup-DWhqzliO.js} +4 -3
- package/server/pipeline-membership-C88VBnhJ.js +3 -0
- package/server/pipeline-membership-D9SBvItj.js +57 -0
- package/server/pipeline-membership-gather-4eR-7Tqy.js +3 -0
- package/server/pipeline-membership-gather-CeVGnNJ2.js +593 -0
- package/server/{pipeline-notifier-BXkJzDC4.js → pipeline-notifier-D0ALV6Nw.js} +2 -2
- package/server/{pipeline-notifier-BJr8gQX6.js → pipeline-notifier-DT6xLFao.js} +1 -1
- package/server/post-merge-lifecycle-worker-8HIeS_J6.js +50 -0
- package/server/{project-pipelines-C0MWUeCU.js → project-pipelines-9SKt2bEc.js} +2 -2
- package/server/{project-repos-B6GycDh9.js → project-repos-B5pIphKg.js} +7 -3
- package/server/project-repos-DPjOdfPa.js +3 -0
- package/server/projects-_n3Zui6K.js +3 -0
- package/server/{prompts-DxzFXuLl.js → prompts-CgzMBvQF.js} +2 -2
- package/server/{providers-u4Ga0jOr.js → providers-BI1mOBQ4.js} +1 -1
- package/server/{providers-qQAwGQDW.js → providers-BJQSnAAp.js} +7 -7
- package/server/public/assets/{chunk-BO2N2NFS-BamJdinX.js → chunk-BO2N2NFS-D_pGACYN.js} +4 -4
- package/server/public/assets/{diagram-OG6HWLK6-DfOB8-w4.js → diagram-OG6HWLK6-BO6fe3hH.js} +1 -1
- package/server/public/assets/{dist-ByIuzMQW.js → dist-5zingMiA.js} +3 -3
- package/server/public/assets/{dist-D7zYSEA6.js → dist-CVxhbI2E.js} +1 -1
- package/server/public/assets/{ganttDiagram-6RSMTGT7-EdmRyXL3.js → ganttDiagram-6RSMTGT7-Bgj4A7kp.js} +1 -1
- package/server/public/assets/{highlighted-body-OFNGDK62-MerOfTX8.js → highlighted-body-OFNGDK62-DNPK7_cm.js} +1 -1
- package/server/public/assets/index-DEpY-D1O.js +807 -0
- package/server/public/assets/index-Ddkcz3WT.css +1 -0
- package/server/public/assets/{linear-BBbArIcK.js → linear-BB0jQT16.js} +1 -1
- package/server/public/assets/mermaid-GHXKKRXX-BzPfaQJ1.js +1 -0
- package/server/public/assets/{pieDiagram-4H26LBE5-BKIddiJN.js → pieDiagram-4H26LBE5-DeGIzzpZ.js} +1 -1
- package/server/public/assets/{prod-B8vYiu52.js → prod-XBLvikex.js} +4 -4
- package/server/public/assets/{quadrantDiagram-W4KKPZXB-D6RtoULk.js → quadrantDiagram-W4KKPZXB-BV9SLeWz.js} +1 -1
- package/server/public/assets/{sankeyDiagram-5OEKKPKP-CLrCedZX.js → sankeyDiagram-5OEKKPKP-Dwja0gj8.js} +1 -1
- package/server/public/assets/{xychartDiagram-2RQKCTM6-hznR8DYl.js → xychartDiagram-2RQKCTM6-DCB4qvfw.js} +1 -1
- package/server/public/index.html +2 -2
- package/server/{pull-requests-_lHueOHW.js → pull-requests-7BgLDsIo.js} +19 -10
- package/server/{pull-requests-7N8WKseP.js → pull-requests-Dq0y6IxE.js} +1 -1
- package/server/{queries-CjNIf-Ub.js → queries-C-MUZaIy.js} +824 -192
- package/server/{rally-CyWT_lNO.js → rally-CPysR4T_.js} +3 -3
- package/server/rally-D_VW4bJv.js +3 -0
- package/server/{rally-api-C8e_1JRi.js → rally-api-8Ptlp2os.js} +2 -2
- package/server/{rally-api-ClOSd-Tt.js → rally-api-CgosKdKL.js} +1 -1
- package/server/{rally-client-sgtVqzNU.js → rally-client-CCX0hADj.js} +1 -1
- package/server/{rally-client-lc-nokqr.js → rally-client-iYMHWQD7.js} +5 -5
- package/server/{reap-terminal-sessions-7KeHv1R1.js → reap-terminal-sessions-4Xg9NGA8.js} +2 -2
- package/server/{reap-terminal-sessions-BtHPo6Xc.js → reap-terminal-sessions-Qf-9LVQc.js} +2 -2
- package/server/{rebuild-stack-lwtsW0GO.js → rebuild-stack-CMdgaylx.js} +16 -7
- package/server/{rebuild-stack-CFvcBHsS.js → rebuild-stack-DqcOVmJO.js} +2 -2
- package/server/{reconstruct-cache-C3Ui7ojV.js → reconstruct-cache-CMZJ_Vjq.js} +9 -7
- package/server/record-BTwWhtBb.js +3 -0
- package/server/{record-update-dE1Aw83j.js → record-update-DaOKS7Wb.js} +124 -157
- package/server/record-update-DhI7eySG.js +3 -0
- package/server/{recovery-trip-BvRWfUXM.js → recovery-trip-DDH-02ng.js} +2 -2
- package/server/{release-engine-Cx48W7z8.js → release-engine-B2X9AfFC.js} +5 -5
- package/server/{release-set-CQfuN9-v.js → release-set-G4XKyQ8K.js} +3 -3
- package/server/{remote-C_2hasl7.js → remote-BXarMvqf.js} +3 -3
- package/server/{remote-ChgimyYa.js → remote-CUhyqjXk.js} +3 -3
- package/server/{remote-agents-By1ige5O.js → remote-agents-Bba-MgSA.js} +311 -48
- package/server/{remote-agents-CA3Ihlxj.js → remote-agents-CLZB3Coc.js} +2 -2
- package/server/{remote-completion-fVe9e_3u.js → remote-completion-CwAp79EC.js} +13 -13
- package/server/resume-mOREjlYu.js +3 -0
- package/server/{review-agent-CIGOQYBD.js → review-agent--pOptAEV.js} +65 -50
- package/server/{review-agent-DNboMyW4.js → review-agent-BTCNkq2h.js} +1 -1
- package/server/{review-artifacts-nRDPuMxd.js → review-artifacts-BNmw8dWE.js} +7 -6
- package/server/{review-context-2uj-YQ8J.js → review-context-DFxYOOJW.js} +9 -9
- package/server/{in-flight-guard-CAAkqPLu.js → review-convoy-liveness-BgU_1jJf.js} +3 -44
- package/server/review-status-CGvlA4o_.js +7737 -0
- package/server/review-status-Dma9SFaN.js +3 -0
- package/server/review-status-emit-DURrmGYX.js +50 -0
- package/server/{review-status-enrichment-Dci-ZwEt.js → review-status-enrichment-8NiNXi5W.js} +4 -4
- package/server/review-status-source-BLx_1siH.js +3 -0
- package/server/{review-status-source-CxuEjLGg.js → review-status-source-DIk1JSow.js} +24 -3
- package/server/{review-status-sync-BTOpxtTC.js → review-status-sync-0GxOqeqF.js} +11 -6
- package/server/{review-status-sync-DSDK3OMy.js → review-status-sync-muT-EBp2.js} +1 -1
- package/server/{review-verdict-feedback-CTd4QMBu.js → review-verdict-feedback-HwF6ODFy.js} +1 -1
- package/server/{review-verdict-feedback-CCjVA7Uk.js → review-verdict-feedback-xJNdqBnX.js} +65 -11
- package/server/{rollup-FGsKki9R.js → rollup-BQaol5TX.js} +8 -8
- package/server/{rollup-BKQC7jp4.js → rollup-BR4t_wck.js} +1 -1
- package/server/{scanner-CnqEZeDy.js → scanner-C-D2cFdX.js} +8 -7
- package/server/{sequence-io-D909zgeH.js → sequence-io-Bmf1EZM5.js} +4 -4
- package/server/{sequencer-agent-CzkcK6P5.js → sequencer-agent-CigMyKh2.js} +7 -6
- package/server/server.js +2005 -614
- package/server/{service-CLeAoU6G.js → service-CD0DvFvD.js} +114 -68
- package/server/{session-fork-CHI1XvL9.js → session-fork-B6cQ5eya.js} +2 -2
- package/server/{session-history-BT3IvqhC.js → session-history-3ON_IJjm.js} +7 -55
- package/server/settings-CVmWiJ-r.js +2 -0
- package/server/{settings-C0zgxOGf.js → settings-PilbFZAM.js} +3 -2
- package/server/{settings-BTMvpNFU.js → settings-VN0qOh4U.js} +3 -3
- package/server/{shadow-engineering-BJfgm-hX.js → shadow-engineering-DXvx77oE.js} +3 -3
- package/server/{shadow-state-7a-524T8.js → shadow-state-BBk_zacw.js} +2 -2
- package/server/{shadow-state-DnDyjujH.js → shadow-state-CZBp7pwq.js} +1 -1
- package/server/{shadow-utils-Db3oroFG.js → shadow-utils-DdZ05AJS.js} +2 -2
- package/server/{ship-log-D9MlVzYU.js → ship-log-7kJfjUX2.js} +1 -1
- package/server/{smart-compaction-CV2ukKND.js → smart-compaction-8fA5k5XN.js} +1 -1
- package/server/{smart-compaction-KCYScAU1.js → smart-compaction-ByhL9cRS.js} +8 -7
- package/server/{spawn-planning-session-DKpdFyOC.js → spawn-planning-session-pcF-YeFE.js} +38 -50
- package/server/spawn-planning-session-vLUJoFjy.js +3 -0
- package/server/{specialist-completion-Ky9wCDpb.js → specialist-completion-B07XjWD2.js} +1 -1
- package/server/{specialist-context-Bn3dCGS2.js → specialist-context-DJ-zFyL3.js} +5 -5
- package/server/{specialist-handoff-logger-CMEwYxa2.js → specialist-handoff-logger-aKSxbIgD.js} +2 -2
- package/server/{specialist-logs-C5p8G7tx.js → specialist-logs-Dae-n52_.js} +3 -3
- package/server/{specialists-CC4r-c2s.js → specialists-6PWdtWcg.js} +1177 -311
- package/server/{specialists-DM6bWjsi.js → specialists-Bz-wFT7R.js} +1 -1
- package/server/{specialists-jiuuyVkp.js → specialists-DUiExaxb.js} +18 -18
- package/server/{specialists-CShuVGWT.js → specialists-KR3pKulN.js} +1 -1
- package/server/specs--enInima.js +3 -0
- package/server/src-B948bGVR.js +11452 -0
- package/server/{src-CXmtj0im.js → src-rac0Mepv.js} +6 -6
- package/server/{src-CdmnTM2m.js → src-vHy2-oCv.js} +3 -3
- package/server/{stack-health-Bn3o8FBX.js → stack-health-BikqHSjn.js} +1 -1
- package/server/{stack-health-DxSdG9cW.js → stack-health-DqLTiEu4.js} +7 -5
- package/server/{stale-task-claims-KJKxxiiQ.js → stale-task-claims-Cab_Fo_Z.js} +5 -4
- package/server/{staleness-DPm7ClwA.js → staleness-C-a5rBxF.js} +1 -1
- package/server/{staleness-CT34nwr9.js → staleness-CGTZyp6V.js} +1 -1
- package/server/{state-home-Cn_Qu8IX.js → state-home-722Dkx92.js} +2 -2
- package/server/{state-mapping-BL_-3Yt8.js → state-mapping-CybR81Uf.js} +1 -1
- package/server/{state-migrate-BGg2ZaOt.js → state-migrate-2u8wIpoL.js} +4 -4
- package/server/{stuck-remediation-DYuPRYYw.js → stuck-remediation-CC6q3eqQ.js} +84 -26
- package/server/{stuck-remediation-s9_2qfi6.js → stuck-remediation-r1TJu68G.js} +1 -1
- package/server/{substrate-bug-weights-service-B-FwCs5V.js → substrate-bug-weights-service-CzIyyWFT.js} +3 -3
- package/server/{summary-fork-DpcxN9tf.js → summary-fork-BqgmgPDt.js} +2 -2
- package/server/{summary-fork-D1RAk9rJ.js → summary-fork-Df2WFijM.js} +8 -8
- package/server/supervisor/{injection-budget-Csw5tqfJ.js → injection-budget-Cg_KIb3o.js} +1 -1
- package/server/supervisor/{paths-DehGY2Fj.js → paths-BBOnCYlO.js} +10 -2
- package/server/supervisor/pty-supervisor.js +50 -4
- package/server/supervisor/{pty-token-x-ea28Us.js → pty-token-BbjwEUUM.js} +3 -3
- package/server/supervisor-B4anCCSm.js +2 -0
- package/server/{supervisor-wM4ooB5O.js → supervisor-BxqSpjcN.js} +3 -3
- package/server/{swarm-readiness-DlP_UjHq.js → swarm-readiness-DfFxa9-n.js} +3 -3
- package/server/{system-prerequisites-DUDj1YHf.js → system-prerequisites-ICLSkhhZ.js} +2 -2
- package/server/{teardown-workspace-DeTTImn-.js → teardown-workspace-DRdi_CPa.js} +15 -16
- package/server/{test-agent-queue-MbxX5vqq.js → test-agent-queue-A_-p-i0I.js} +8 -7
- package/server/{test-verdict-gscuksPv.js → test-verdict-BHgTAwIG.js} +1 -1
- package/server/{test-verdict-bWYBtqBg.js → test-verdict-C4i9aqEP.js} +1 -1
- package/server/{tldr-daemon-BYFkts95.js → tldr-daemon-CvWXBhX1.js} +1 -1
- package/server/{tldr-daemon-C-69c3OI.js → tldr-daemon-wvsU6bKv.js} +2 -2
- package/server/{tmux-R7N7y-Mh.js → tmux-CfDHob9M.js} +174 -4
- package/server/{tmux-B6z7h_vZ.js → tmux-Ctk6RV5l.js} +1 -1
- package/server/{token-BK6t8BIT.js → token-DrxwytsZ.js} +2 -2
- package/server/{token-util-DxXu-vd1.js → token-util-B48BlCba.js} +1 -1
- package/server/token-util-D411CAq9.js +3 -0
- package/server/{tracker-config-G6latr8C.js → tracker-config-BcPMElRB.js} +2 -2
- package/server/{tracker-utils-DHv5pSDT.js → tracker-utils-CJ6BHjcD.js} +3 -3
- package/server/{traefik-connect-Df2uXPsQ.js → traefik-connect-DZ6nMYMj.js} +1 -1
- package/server/{tunnel-DGdUkGoZ.js → tunnel-Bp-dRHZz.js} +1 -1
- package/server/{tunnel-CDVKJpRv.js → tunnel-DUbUPElU.js} +3 -3
- package/server/{typed-errors-BHhE85Ul.js → typed-errors-CKeoDdU3.js} +1 -1
- package/server/{typed-errors-2BTMxkZq.js → typed-errors-DyjseiB6.js} +1 -1
- package/server/{types-hraoaQIp.js → types-Cm5ASJbq.js} +1 -1
- package/server/{types-5M0lupud.js → types-Di8wdakq.js} +1 -1
- package/server/uat-promote-verification-CoJuh7XO.js +92 -0
- package/server/uat-train-4Q0k06CQ.js +0 -0
- package/server/uat-train-Dewoatps.js +2 -0
- package/server/{validate-IfDGkaVR.js → validate-B0C8p66t.js} +8 -6
- package/server/{validation-Dw1pzDzr.js → validation-B_kIRfNe.js} +4 -4
- package/server/{validation-CC9OPqJZ.js → validation-hVOwQk8T.js} +1 -1
- package/server/{verification-artifact-B3itKTxu.js → verification-artifact-BxlxTiYK.js} +1 -1
- package/server/{verification-artifact-TVFSz_q1.js → verification-artifact-D70AtckY.js} +1 -1
- package/server/{verification-runner-BW4HOKAz.js → verification-runner-Bc3cJvpC.js} +1 -1
- package/server/{verification-runner-CkgX6EtI.js → verification-runner-KZTz6u72.js} +40 -18
- package/server/{vtt-parser-DYPbKcIJ.js → vtt-parser-CE_i3Bcw.js} +1 -1
- package/server/{work-agent-prompt-Du8Vh2aJ.js → work-agent-prompt-ByrPAzOy.js} +20 -9
- package/server/{workflows-mbQzh6mQ.js → workflows-D0vP1WrK.js} +252 -99
- package/server/workflows-DtDX08ed.js +2 -0
- package/server/{workspace--8tnhDI0.js → workspace-COWvdibH.js} +1 -1
- package/server/{workspace-BPUws1-_.js → workspace-DQkRPLlQ.js} +3 -3
- package/server/workspace-anchor-drift-DXYIAHzr.js +224 -0
- package/server/workspace-anchor-drift-pwz23TI1.js +3 -0
- package/server/{workspace-config-CIVWZOQr.js → workspace-config-BdZM4PvZ.js} +1 -1
- package/server/{workspace-manager-CBhNdzE4.js → workspace-manager-BPgTrG66.js} +157 -118
- package/server/workspace-manager-C1F3XsnS.js +3 -0
- package/server/{workspace-metadata-BzHnwwX4.js → workspace-metadata-CdjzAP8x.js} +1 -1
- package/server/{workspace-metadata-_WygnyoX.js → workspace-metadata-DkO_iTLo.js} +2 -2
- package/server/{workspaces-Do_9J0LQ.js → workspaces-CRBJikLp.js} +749 -299
- package/sync-sources/dev-skills/pan-dashboard-restart/SKILL.md +34 -10
- package/sync-sources/hooks/linear-mcp-auth-hook +97 -0
- package/sync-sources/rules/ask-user-question-self-contained.md +9 -0
- package/sync-sources/skills/pan-close/SKILL.md +5 -3
- package/sync-sources/skills/pan-merge/SKILL.md +7 -5
- package/sync-sources/skills/pan-peer-review/SKILL.md +195 -0
- package/sync-sources/skills/pan-release/SKILL.md +57 -0
- package/sync-sources/skills/pan-reload/SKILL.md +3 -3
- package/sync-sources/skills/pan-restart/SKILL.md +5 -4
- package/sync-sources/skills/pan-review/SKILL.md +7 -1
- package/sync-sources/skills/pan-sync-main/SKILL.md +9 -8
- package/sync-sources/skills/pipeline-status/SKILL.md +10 -1
- package/sync-sources/skills/workspace-add-repo/SKILL.md +16 -1
- package/server/activity-logger-OEUBdfZ8.js +0 -3
- package/server/agent-state-Bc3tzUC8.js +0 -3
- package/server/agent-state-service-D5UGKIJL.js +0 -2
- package/server/agents-wi9NWzs2.js +0 -3
- package/server/archive-planning-BZDgzoEj.js +0 -3
- package/server/cli-B86rejVV.js +0 -3
- package/server/conflict-gate-BhAY7TUd.js +0 -3
- package/server/conversation-service-BLd3MYsG.js +0 -3
- package/server/deacon-kiQrb4ZT.js +0 -4
- package/server/deacon-swarm-C-GwfjJy.js +0 -2
- package/server/deploy-window-DkZraDyj.js +0 -3
- package/server/dist-Bzy0y69j.js +0 -3
- package/server/dod-C6n9RV3G.js +0 -66
- package/server/flywheel-merge-order-UU0tiUld.js +0 -245
- package/server/flywheel-merge-order-UUcsCDb6.js +0 -2
- package/server/forge-CNFnyqps.js +0 -270
- package/server/forge-DXnS_YFH.js +0 -2
- package/server/git-utils-D0_yhCgF.js +0 -3
- package/server/github-pr-lookup-D16NGsSO.js +0 -44
- package/server/hume-ccTf4wTX.js +0 -3
- package/server/inspect-agent-Brtz0URj.js +0 -2
- package/server/label-reconciler-B4iOAjlC.js +0 -113
- package/server/launcher-generator-BBWG_SiS.js +0 -473
- package/server/merge-ops-CR44oU9-.js +0 -2
- package/server/merge-set-bUqbm3yc.js +0 -3
- package/server/merge-sync-BJYeOODr.js +0 -3
- package/server/merge-verification-BkaOqPsw.js +0 -124
- package/server/pipeline-membership-mY3GprlK.js +0 -420
- package/server/project-repos-DXKQsc_m.js +0 -3
- package/server/projects-vjjcmiN8.js +0 -3
- package/server/public/assets/index-CWeMerGO.js +0 -804
- package/server/public/assets/index-CenuJ3Cw.css +0 -1
- package/server/public/assets/mermaid-GHXKKRXX-CpPWAFwE.js +0 -1
- package/server/rally-zhhtXuDP.js +0 -3
- package/server/record-CN0pj4_5.js +0 -3
- package/server/record-update-bLJxAXH4.js +0 -3
- package/server/resume-BFv1PGpA.js +0 -3
- package/server/review-status-btEYlaxA.js +0 -3
- package/server/review-status-kZj_KyCk.js +0 -1470
- package/server/settings-66A6uvIA.js +0 -2
- package/server/spawn-planning-session-qUC2VWu3.js +0 -2
- package/server/specs-C8Wsn2XO.js +0 -3
- package/server/src-DtcUOZCq.js +0 -4826
- package/server/supervisor-FTJAIsAK.js +0 -2
- package/server/token-util-DuPuNriz.js +0 -3
- package/server/tracker-utils-B4ylXZQK.js +0 -3
- package/server/uat-train-B05BWkp-.js +0 -2
- package/server/uat-train-DDSrSoV1.js +0 -2152
- package/server/workflows-BQu4RFQ-.js +0 -2
- 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 {
|
|
3
|
-
import {
|
|
4
|
-
import { i as init_merge_set, r as getMergeSetSync } from "./merge-set-
|
|
5
|
-
import { i as withComponentStateSync, n as init_release_set, r as upsertReleaseSetSync } from "./release-set-
|
|
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-
|
|
306
|
+
//# sourceMappingURL=release-engine-B2X9AfFC.js.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { n as __esmMin } from "./rolldown-runtime-DNCzzKnI.js";
|
|
2
|
-
import {
|
|
3
|
-
import { d as getOverdeckDatabaseSync, f as init_infra } from "./infra-
|
|
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-
|
|
125
|
+
//# sourceMappingURL=release-set-G4XKyQ8K.js.map
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import "./workspace-metadata-
|
|
2
|
-
import { C as
|
|
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-
|
|
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-
|
|
2
|
-
import {
|
|
3
|
-
import { n as getRemoteProvider, r as isRemoteAvailable, t as createFlyProviderFromConfig } from "./remote-
|
|
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 {
|
|
3
|
-
import { w as init_tmux, y as getManagedTmuxSocketName } from "./tmux-
|
|
4
|
-
import {
|
|
5
|
-
import { a as init_claude_permissions, i as getClaudePermissionFlagsSync, n as buildClaudeUserSettingsSync, r as getClaudePermissionFlagsStringSync } from "./claude-permissions-
|
|
6
|
-
import { c as isStateMigrated, o as init_state_home } from "./state-home-
|
|
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 ??
|
|
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 ??
|
|
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
|
-
|
|
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,
|
|
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
|
-
|
|
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 {
|
|
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-
|
|
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-
|
|
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 {
|
|
2
|
-
import { a as PAN_DIRNAME, i as PAN_CONTINUE_FILENAME } from "./types-
|
|
3
|
-
import { f as init_config, m as loadConfigSync } from "./config-
|
|
4
|
-
import { t as init_pan_dir } from "./pan-dir-
|
|
5
|
-
import { r as init_workspace_manager, t as createWorkspace } from "./workspace-manager-
|
|
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-
|
|
7
|
-
import { t as createFlyProviderFromConfig } from "./remote-
|
|
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-
|
|
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-
|
|
331
|
-
const { setReviewStatusSync } = await import("./review-status-
|
|
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-
|
|
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-
|
|
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-
|
|
389
|
+
//# sourceMappingURL=remote-completion-CwAp79EC.js.map
|