@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,6 +1,16 @@
|
|
|
1
1
|
import { n as __esmMin } from "./rolldown-runtime-DNCzzKnI.js";
|
|
2
|
-
import { d as getOverdeckDatabaseSync, f as init_infra } from "./infra-
|
|
3
|
-
//#region ../../lib/overdeck/merge-sync.ts
|
|
2
|
+
import { d as getOverdeckDatabaseSync, f as init_infra } from "./infra-BDQDRopn.js";
|
|
3
|
+
//#region ../../lib/overdeck/merge-sync-time.ts
|
|
4
|
+
/**
|
|
5
|
+
* merge-sync-time.ts — timestamp conversion shared by the merge-domain sync
|
|
6
|
+
* accessors.
|
|
7
|
+
*
|
|
8
|
+
* overdeck.db stores INTEGER milliseconds; the domain types these modules
|
|
9
|
+
* return predate that and use ISO strings. Both merge-sync.ts and
|
|
10
|
+
* merge-sync-uat.ts need the conversion, and merge-sync.ts re-exports
|
|
11
|
+
* merge-sync-uat.ts — so the helpers live here rather than in either module,
|
|
12
|
+
* where the import would close a cycle.
|
|
13
|
+
*/
|
|
4
14
|
function isoFromMillis(value) {
|
|
5
15
|
return value == null ? void 0 : new Date(value).toISOString();
|
|
6
16
|
}
|
|
@@ -15,153 +25,69 @@ function millisFromIso(value) {
|
|
|
15
25
|
function nowMillis() {
|
|
16
26
|
return Date.now();
|
|
17
27
|
}
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
/** Drop-in for isFlywheelGloballyPaused() from app-settings.ts. */
|
|
22
|
-
function isFlywheelGloballyPaused() {
|
|
23
|
-
return readFlag("flywheel.globally_paused");
|
|
24
|
-
}
|
|
28
|
+
var init_merge_sync_time = __esmMin((() => {}));
|
|
29
|
+
//#endregion
|
|
30
|
+
//#region ../../lib/overdeck/merge-sync-uat.ts
|
|
25
31
|
/**
|
|
26
|
-
*
|
|
32
|
+
* The repo list for a generation that stored no per-repo rows — every monorepo
|
|
33
|
+
* generation, plus any row written before PAN-3093 added the child tables. The
|
|
34
|
+
* single entry mirrors the generation's own branch/base/worktree so consumers
|
|
35
|
+
* can loop `repos` uniformly instead of branching on project type.
|
|
27
36
|
*
|
|
28
|
-
*
|
|
29
|
-
*
|
|
37
|
+
* `repoKey` is the project-root basename: a stable, non-empty display label for
|
|
38
|
+
* the one repo involved, not an authoritative config key. Code that needs the
|
|
39
|
+
* configured key resolves it through src/lib/project-repos.ts.
|
|
30
40
|
*/
|
|
31
|
-
function
|
|
32
|
-
|
|
33
|
-
}
|
|
34
|
-
function rowToPendingAutoMerge(row) {
|
|
41
|
+
function synthesizeSingleRepo(row) {
|
|
42
|
+
const trimmed = row.project_root.replace(/\/+$/, "");
|
|
35
43
|
return {
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
mergedAt: isoFromMillis(row.merged_at),
|
|
46
|
-
failureReason: row.failure_reason ?? void 0,
|
|
47
|
-
cancelledAt: isoFromMillis(row.cancelled_at),
|
|
48
|
-
cancelledBy: row.cancelled_by ?? void 0
|
|
44
|
+
repoKey: trimmed.slice(trimmed.lastIndexOf("/") + 1) || row.project_root,
|
|
45
|
+
repoPath: row.project_root,
|
|
46
|
+
branch: row.name,
|
|
47
|
+
baseSha: row.base_sha,
|
|
48
|
+
targetBranch: "main",
|
|
49
|
+
worktreePath: row.worktree_path,
|
|
50
|
+
mergeOrder: 0,
|
|
51
|
+
promotedAt: null,
|
|
52
|
+
mergeSha: null
|
|
49
53
|
};
|
|
50
54
|
}
|
|
51
|
-
function
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
function markFailed(id, reason) {
|
|
66
|
-
return getOverdeckDatabaseSync().prepare("UPDATE pending_auto_merges SET status = 'failed', failure_reason = ? WHERE id = ? AND status = 'merging'").run(truncateReason(reason), id).changes === 1;
|
|
67
|
-
}
|
|
68
|
-
/** Drop-in for requeueToPending() from pending-auto-merges-db.ts. */
|
|
69
|
-
function requeueToPending(id, nextScheduledMergeAt) {
|
|
70
|
-
const db = getOverdeckDatabaseSync();
|
|
71
|
-
const nextMs = millisFromIso(nextScheduledMergeAt);
|
|
72
|
-
if (nextMs == null) return false;
|
|
73
|
-
return db.prepare("UPDATE pending_auto_merges SET status = 'pending', scheduled_merge_at = ? WHERE id = ? AND status = 'merging'").run(nextMs, id).changes === 1;
|
|
74
|
-
}
|
|
75
|
-
/** Drop-in for markBlocked() from pending-auto-merges-db.ts. */
|
|
76
|
-
function markBlocked(id, reason) {
|
|
77
|
-
return getOverdeckDatabaseSync().prepare("UPDATE pending_auto_merges SET status = 'blocked', failure_reason = ? WHERE id = ? AND status = 'pending'").run(truncateReason(reason), id).changes === 1;
|
|
78
|
-
}
|
|
79
|
-
/** Drop-in for markMerged() from pending-auto-merges-db.ts. */
|
|
80
|
-
function markMerged(id) {
|
|
81
|
-
return getOverdeckDatabaseSync().prepare("UPDATE pending_auto_merges SET status = 'merged', merged_at = ? WHERE id = ? AND status = 'merging'").run(nowMillis(), id).changes === 1;
|
|
82
|
-
}
|
|
83
|
-
/** Drop-in for cancelPending() from pending-auto-merges-db.ts. */
|
|
84
|
-
function cancelPending(id, cancelledBy) {
|
|
85
|
-
return getOverdeckDatabaseSync().prepare("UPDATE pending_auto_merges SET status = 'cancelled', cancelled_at = ?, cancelled_by = ? WHERE id = ? AND status IN ('pending','blocked','failed')").run(nowMillis(), cancelledBy, id).changes === 1;
|
|
86
|
-
}
|
|
87
|
-
/** Drop-in for getActionableAutoMerge() from pending-auto-merges-db.ts. */
|
|
88
|
-
function getActionableAutoMerge(issueId) {
|
|
89
|
-
const row = getOverdeckDatabaseSync().prepare("SELECT * FROM pending_auto_merges WHERE issue_id = ? AND status IN ('pending','merging','blocked','failed') ORDER BY id DESC LIMIT 1").get(issueId);
|
|
90
|
-
return row ? rowToPendingAutoMerge(row) : null;
|
|
91
|
-
}
|
|
92
|
-
/** Drop-in for listActiveAutoMerges() from pending-auto-merges-db.ts. */
|
|
93
|
-
function listActiveAutoMerges(limit = 100) {
|
|
94
|
-
return getOverdeckDatabaseSync().prepare("SELECT * FROM pending_auto_merges WHERE status IN ('pending','merging') ORDER BY scheduled_merge_at ASC, id ASC LIMIT ?").all(limit).map(rowToPendingAutoMerge);
|
|
95
|
-
}
|
|
96
|
-
/** Drop-in for listProblemAutoMerges() from pending-auto-merges-db.ts. */
|
|
97
|
-
function listProblemAutoMerges(limit = 100) {
|
|
98
|
-
return getOverdeckDatabaseSync().prepare("SELECT * FROM pending_auto_merges WHERE status IN ('blocked','failed') ORDER BY scheduled_merge_at ASC, id ASC LIMIT ?").all(limit).map(rowToPendingAutoMerge);
|
|
99
|
-
}
|
|
100
|
-
/** Drop-in for scheduleAutoMergeWithResult() from pending-auto-merges-db.ts. */
|
|
101
|
-
function scheduleAutoMergeWithResult(input) {
|
|
102
|
-
const db = getOverdeckDatabaseSync();
|
|
103
|
-
const existing = db.prepare("SELECT * FROM pending_auto_merges WHERE issue_id = ? AND status IN ('pending','merging') ORDER BY id DESC LIMIT 1").get(input.issueId);
|
|
104
|
-
if (existing) return {
|
|
105
|
-
entry: rowToPendingAutoMerge(existing),
|
|
106
|
-
created: false
|
|
107
|
-
};
|
|
108
|
-
const scheduledAtMs = millisFromIso(input.scheduledAt ?? (/* @__PURE__ */ new Date()).toISOString()) ?? nowMillis();
|
|
109
|
-
const scheduledMergeAtMs = millisFromIso(input.scheduledMergeAt) ?? nowMillis();
|
|
110
|
-
try {
|
|
111
|
-
const result = db.prepare(`
|
|
112
|
-
INSERT INTO pending_auto_merges (issue_id, pr_url, project_key, forge, status, scheduled_merge_at, scheduled_at)
|
|
113
|
-
VALUES (?, ?, ?, ?, 'pending', ?, ?)
|
|
114
|
-
`).run(input.issueId, input.prUrl, input.projectKey, input.forge ?? "github", scheduledMergeAtMs, scheduledAtMs);
|
|
55
|
+
function rowToUatGeneration(row, memberRows, resolutionRows, repoRows = [], memberRepoRows = []) {
|
|
56
|
+
const memberReposByIssue = /* @__PURE__ */ new Map();
|
|
57
|
+
for (const mr of [...memberRepoRows].sort((a, b) => a.merge_order_in_repo - b.merge_order_in_repo)) {
|
|
58
|
+
const list = memberReposByIssue.get(mr.issue_id) ?? [];
|
|
59
|
+
list.push({
|
|
60
|
+
repoKey: mr.repo_key,
|
|
61
|
+
branch: mr.branch,
|
|
62
|
+
headSha: mr.head_sha,
|
|
63
|
+
mergeOrderInRepo: mr.merge_order_in_repo
|
|
64
|
+
});
|
|
65
|
+
memberReposByIssue.set(mr.issue_id, list);
|
|
66
|
+
}
|
|
67
|
+
const members = memberRows.filter((m) => m.role === "member").map((m) => {
|
|
68
|
+
const repos = memberReposByIssue.get(m.issue_id);
|
|
115
69
|
return {
|
|
116
|
-
|
|
117
|
-
|
|
70
|
+
issueId: m.issue_id,
|
|
71
|
+
title: m.title ?? "",
|
|
72
|
+
branch: m.branch ?? "",
|
|
73
|
+
headSha: m.head_sha ?? "",
|
|
74
|
+
mergeOrder: m.merge_order ?? 0,
|
|
75
|
+
pr: m.pr ?? void 0,
|
|
76
|
+
prUrl: m.pr_url ?? void 0,
|
|
77
|
+
...repos && repos.length > 0 ? { repos } : {}
|
|
118
78
|
};
|
|
119
|
-
}
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
const byProject = /* @__PURE__ */ new Map();
|
|
132
|
-
for (const row of rows) {
|
|
133
|
-
let entry = byProject.get(row.project_key);
|
|
134
|
-
if (!entry) {
|
|
135
|
-
entry = {
|
|
136
|
-
current: null,
|
|
137
|
-
queue: []
|
|
138
|
-
};
|
|
139
|
-
byProject.set(row.project_key, entry);
|
|
140
|
-
}
|
|
141
|
-
if (row.status === "processing") entry.current = row.issue_id;
|
|
142
|
-
else entry.queue.push(row.issue_id);
|
|
143
|
-
}
|
|
144
|
-
return [...byProject.entries()].map(([projectKey, data]) => ({
|
|
145
|
-
projectKey,
|
|
146
|
-
current: data.current,
|
|
147
|
-
queue: data.queue,
|
|
148
|
-
queueLength: data.queue.length
|
|
149
|
-
}));
|
|
150
|
-
}
|
|
151
|
-
/** Drop-in for resetProcessingToQueued() from merge-queue-db.ts. */
|
|
152
|
-
function resetProcessingToQueued() {
|
|
153
|
-
return getOverdeckDatabaseSync().prepare("UPDATE merge_queue SET status = 'queued', started_at = NULL WHERE status = 'processing'").run().changes;
|
|
154
|
-
}
|
|
155
|
-
function rowToUatGeneration(row, memberRows, resolutionRows) {
|
|
156
|
-
const members = memberRows.filter((m) => m.role === "member").map((m) => ({
|
|
157
|
-
issueId: m.issue_id,
|
|
158
|
-
title: m.title ?? "",
|
|
159
|
-
branch: m.branch ?? "",
|
|
160
|
-
headSha: m.head_sha ?? "",
|
|
161
|
-
mergeOrder: m.merge_order ?? 0,
|
|
162
|
-
pr: m.pr ?? void 0,
|
|
163
|
-
prUrl: m.pr_url ?? void 0
|
|
164
|
-
}));
|
|
79
|
+
});
|
|
80
|
+
const repos = repoRows.length > 0 ? [...repoRows].sort((a, b) => a.merge_order - b.merge_order || a.repo_key.localeCompare(b.repo_key)).map((r) => ({
|
|
81
|
+
repoKey: r.repo_key,
|
|
82
|
+
repoPath: r.repo_path,
|
|
83
|
+
branch: r.branch,
|
|
84
|
+
baseSha: r.base_sha,
|
|
85
|
+
targetBranch: r.target_branch ?? "main",
|
|
86
|
+
worktreePath: r.worktree_path,
|
|
87
|
+
mergeOrder: r.merge_order,
|
|
88
|
+
promotedAt: isoFromMillis(r.promoted_at) ?? null,
|
|
89
|
+
mergeSha: r.merge_sha ?? null
|
|
90
|
+
})) : [synthesizeSingleRepo(row)];
|
|
165
91
|
const heldOut = memberRows.filter((m) => m.role === "held_out").map((m) => ({
|
|
166
92
|
issueId: m.issue_id,
|
|
167
93
|
branch: m.branch ?? void 0,
|
|
@@ -171,7 +97,9 @@ function rowToUatGeneration(row, memberRows, resolutionRows) {
|
|
|
171
97
|
const resolutions = resolutionRows.map((r) => ({
|
|
172
98
|
issueIds: JSON.parse(r.issue_ids),
|
|
173
99
|
files: JSON.parse(r.files),
|
|
174
|
-
commitSha: r.commit_sha
|
|
100
|
+
commitSha: r.commit_sha,
|
|
101
|
+
kind: r.kind ?? "conflict",
|
|
102
|
+
...r.note ? { note: r.note } : {}
|
|
175
103
|
}));
|
|
176
104
|
return {
|
|
177
105
|
name: row.name,
|
|
@@ -179,6 +107,7 @@ function rowToUatGeneration(row, memberRows, resolutionRows) {
|
|
|
179
107
|
projectRoot: row.project_root,
|
|
180
108
|
baseSha: row.base_sha,
|
|
181
109
|
status: row.status,
|
|
110
|
+
repos,
|
|
182
111
|
members,
|
|
183
112
|
heldOut,
|
|
184
113
|
resolutions,
|
|
@@ -194,6 +123,75 @@ function loadMembersForUat(db, uatName) {
|
|
|
194
123
|
function loadResolutionsForUat(db, uatName) {
|
|
195
124
|
return db.prepare("SELECT * FROM uat_generation_resolutions WHERE uat_name = ?").all(uatName);
|
|
196
125
|
}
|
|
126
|
+
function loadReposForUat(db, uatName) {
|
|
127
|
+
return db.prepare("SELECT * FROM uat_generation_repos WHERE uat_name = ?").all(uatName);
|
|
128
|
+
}
|
|
129
|
+
function loadMemberReposForUat(db, uatName) {
|
|
130
|
+
return db.prepare("SELECT * FROM uat_generation_member_repos WHERE uat_name = ?").all(uatName);
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Load many generations with a FIXED number of statements: one per child table
|
|
134
|
+
* with an `IN (…)` filter, grouped in memory.
|
|
135
|
+
*
|
|
136
|
+
* The per-generation loader below costs four synchronous SQLite round-trips
|
|
137
|
+
* each, so listing G generations cost 1 + 4G statements on the Node event loop
|
|
138
|
+
* — and these lists are read by the generations HTTP route, the minute
|
|
139
|
+
* reconciler, and cleanup, which walks the full retained history.
|
|
140
|
+
*/
|
|
141
|
+
function loadUatGenerations(db, rows) {
|
|
142
|
+
if (rows.length === 0) return [];
|
|
143
|
+
const names = rows.map((r) => r.name);
|
|
144
|
+
const placeholders = names.map(() => "?").join(", ");
|
|
145
|
+
const childRows = (table) => db.prepare(`SELECT * FROM ${table} WHERE uat_name IN (${placeholders})`).all(...names);
|
|
146
|
+
const groupBy = (all) => {
|
|
147
|
+
const byName = /* @__PURE__ */ new Map();
|
|
148
|
+
for (const row of all) {
|
|
149
|
+
const list = byName.get(row.uat_name);
|
|
150
|
+
if (list) list.push(row);
|
|
151
|
+
else byName.set(row.uat_name, [row]);
|
|
152
|
+
}
|
|
153
|
+
return byName;
|
|
154
|
+
};
|
|
155
|
+
const members = groupBy(childRows("uat_generation_members"));
|
|
156
|
+
const resolutions = groupBy(childRows("uat_generation_resolutions"));
|
|
157
|
+
const repos = groupBy(childRows("uat_generation_repos"));
|
|
158
|
+
const memberRepos = groupBy(childRows("uat_generation_member_repos"));
|
|
159
|
+
return rows.map((row) => rowToUatGeneration(row, members.get(row.name) ?? [], resolutions.get(row.name) ?? [], repos.get(row.name) ?? [], memberRepos.get(row.name) ?? []));
|
|
160
|
+
}
|
|
161
|
+
/** Load one generation with every child table it owns. */
|
|
162
|
+
function loadUatGeneration(db, row) {
|
|
163
|
+
return rowToUatGeneration(row, loadMembersForUat(db, row.name), loadResolutionsForUat(db, row.name), loadReposForUat(db, row.name), loadMemberReposForUat(db, row.name));
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* Rewrite `uat_generation_repos` for a generation. Callers run this inside the
|
|
167
|
+
* generation's write transaction, after the parent row exists, so a partial
|
|
168
|
+
* write can never leave repo rows pointing at a missing generation.
|
|
169
|
+
*/
|
|
170
|
+
function writeUatGenerationRepoRows(db, name, repos) {
|
|
171
|
+
db.prepare("DELETE FROM uat_generation_repos WHERE uat_name = ?").run(name);
|
|
172
|
+
if (!repos || repos.length === 0) return;
|
|
173
|
+
const insertRepo = db.prepare(`
|
|
174
|
+
INSERT INTO uat_generation_repos
|
|
175
|
+
(uat_name, repo_key, repo_path, branch, base_sha, target_branch, worktree_path, merge_order, promoted_at, merge_sha)
|
|
176
|
+
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
|
|
177
|
+
`);
|
|
178
|
+
for (const r of repos) insertRepo.run(name, r.repoKey, r.repoPath, r.branch, r.baseSha, r.targetBranch ?? "main", r.worktreePath, r.mergeOrder, r.promotedAt ? millisFromIso(r.promotedAt) : null, r.mergeSha ?? null);
|
|
179
|
+
}
|
|
180
|
+
/**
|
|
181
|
+
* Rewrite `uat_generation_member_repos` from an explicit member list. Only call
|
|
182
|
+
* this when the caller supplied real members: the update path reconstructs
|
|
183
|
+
* members from `uat_generation_members`, which carries no per-repo data, so
|
|
184
|
+
* rebuilding from a reconstructed list would silently drop every contribution.
|
|
185
|
+
*/
|
|
186
|
+
function writeUatMemberRepoRows(db, name, members) {
|
|
187
|
+
db.prepare("DELETE FROM uat_generation_member_repos WHERE uat_name = ?").run(name);
|
|
188
|
+
const insertMemberRepo = db.prepare(`
|
|
189
|
+
INSERT INTO uat_generation_member_repos
|
|
190
|
+
(uat_name, issue_id, repo_key, branch, head_sha, merge_order_in_repo)
|
|
191
|
+
VALUES (?, ?, ?, ?, ?, ?)
|
|
192
|
+
`);
|
|
193
|
+
for (const m of members) for (const mr of m.repos ?? []) insertMemberRepo.run(name, m.issueId, mr.repoKey, mr.branch, mr.headSha, mr.mergeOrderInRepo);
|
|
194
|
+
}
|
|
197
195
|
/** Drop-in for insertUatGenerationSync() from uat-generations-db.ts. */
|
|
198
196
|
function insertUatGenerationSync(gen) {
|
|
199
197
|
const db = getOverdeckDatabaseSync();
|
|
@@ -201,6 +199,8 @@ function insertUatGenerationSync(gen) {
|
|
|
201
199
|
const createdAt = gen.createdAt ?? new Date(nowMs).toISOString();
|
|
202
200
|
const createdAtMs = millisFromIso(createdAt) ?? nowMs;
|
|
203
201
|
db.transaction(() => {
|
|
202
|
+
db.prepare("DELETE FROM uat_generation_member_repos WHERE uat_name = ?").run(gen.name);
|
|
203
|
+
db.prepare("DELETE FROM uat_generation_repos WHERE uat_name = ?").run(gen.name);
|
|
204
204
|
db.prepare("DELETE FROM uat_generation_members WHERE uat_name = ?").run(gen.name);
|
|
205
205
|
db.prepare("DELETE FROM uat_generation_resolutions WHERE uat_name = ?").run(gen.name);
|
|
206
206
|
db.prepare(`
|
|
@@ -216,10 +216,12 @@ function insertUatGenerationSync(gen) {
|
|
|
216
216
|
for (const m of gen.members) insertMember.run(gen.name, m.issueId, "member", m.title, m.branch, m.headSha, m.mergeOrder, m.pr ?? null, m.prUrl ?? null, null);
|
|
217
217
|
for (const h of gen.heldOut) insertMember.run(gen.name, h.issueId, "held_out", null, h.branch ?? null, h.headSha ?? null, null, null, null, h.reason);
|
|
218
218
|
const insertResolution = db.prepare(`
|
|
219
|
-
INSERT INTO uat_generation_resolutions (uat_name, issue_ids, files, commit_sha)
|
|
220
|
-
VALUES (?, ?, ?, ?)
|
|
219
|
+
INSERT INTO uat_generation_resolutions (uat_name, issue_ids, files, commit_sha, kind, note)
|
|
220
|
+
VALUES (?, ?, ?, ?, ?, ?)
|
|
221
221
|
`);
|
|
222
|
-
for (const r of gen.resolutions) insertResolution.run(gen.name, JSON.stringify(r.issueIds), JSON.stringify(r.files), r.commitSha);
|
|
222
|
+
for (const r of gen.resolutions) insertResolution.run(gen.name, JSON.stringify(r.issueIds), JSON.stringify(r.files), r.commitSha, r.kind ?? "conflict", r.note ?? null);
|
|
223
|
+
writeUatGenerationRepoRows(db, gen.name, gen.repos);
|
|
224
|
+
writeUatMemberRepoRows(db, gen.name, gen.members);
|
|
223
225
|
})();
|
|
224
226
|
return {
|
|
225
227
|
...gen,
|
|
@@ -232,7 +234,7 @@ function getUatGenerationSync(name) {
|
|
|
232
234
|
const db = getOverdeckDatabaseSync();
|
|
233
235
|
const row = db.prepare("SELECT * FROM uat_generations WHERE name = ?").get(name);
|
|
234
236
|
if (!row) return null;
|
|
235
|
-
return
|
|
237
|
+
return loadUatGeneration(db, row);
|
|
236
238
|
}
|
|
237
239
|
/** Drop-in for listUatGenerationsSync() from uat-generations-db.ts. */
|
|
238
240
|
function listUatGenerationsSync(options = {}) {
|
|
@@ -249,12 +251,16 @@ function listUatGenerationsSync(options = {}) {
|
|
|
249
251
|
}
|
|
250
252
|
const whereSql = where.length > 0 ? `WHERE ${where.join(" AND ")}` : "";
|
|
251
253
|
const limitSql = options.limit ? `LIMIT ${Math.max(1, Math.floor(options.limit))}` : "";
|
|
252
|
-
return db.prepare(`SELECT * FROM uat_generations ${whereSql} ORDER BY created_at DESC, name DESC ${limitSql}`).all(...params)
|
|
254
|
+
return loadUatGenerations(db, db.prepare(`SELECT * FROM uat_generations ${whereSql} ORDER BY created_at DESC, name DESC ${limitSql}`).all(...params));
|
|
253
255
|
}
|
|
254
256
|
/** Drop-in for listUatGenerationNamesSync() from uat-generations-db.ts. */
|
|
255
257
|
function listUatGenerationNamesSync() {
|
|
256
258
|
return getOverdeckDatabaseSync().prepare("SELECT name FROM uat_generations").all().map((r) => r.name);
|
|
257
259
|
}
|
|
260
|
+
/** Drop-in for updateUatGenerationStatusSync() from uat-generations-db.ts. */
|
|
261
|
+
function updateUatGenerationStatusSync(name, status) {
|
|
262
|
+
if (getOverdeckDatabaseSync().prepare("UPDATE uat_generations SET status = ?, updated_at = ? WHERE name = ?").run(status, nowMillis(), name).changes === 0) throw new Error(`[merge-sync] uat generation not found: ${name}`);
|
|
263
|
+
}
|
|
258
264
|
/** Drop-in for updateUatGenerationSync() from uat-generations-db.ts. */
|
|
259
265
|
function updateUatGenerationSync(name, patch) {
|
|
260
266
|
const db = getOverdeckDatabaseSync();
|
|
@@ -302,17 +308,45 @@ function updateUatGenerationSync(name, patch) {
|
|
|
302
308
|
}));
|
|
303
309
|
for (const m of members) insertMember.run(name, m.issueId, "member", m.title, m.branch, m.headSha, m.mergeOrder, m.pr ?? null, m.prUrl ?? null, null);
|
|
304
310
|
for (const h of heldOut) insertMember.run(name, h.issueId, "held_out", null, h.branch ?? null, h.headSha ?? null, null, null, null, h.reason);
|
|
311
|
+
if (patch.members !== void 0) writeUatMemberRepoRows(db, name, patch.members);
|
|
305
312
|
}
|
|
313
|
+
if (patch.repos !== void 0) writeUatGenerationRepoRows(db, name, patch.repos);
|
|
306
314
|
if (patch.resolutions !== void 0) {
|
|
307
315
|
db.prepare("DELETE FROM uat_generation_resolutions WHERE uat_name = ?").run(name);
|
|
308
316
|
const insertRes = db.prepare(`
|
|
309
|
-
INSERT INTO uat_generation_resolutions (uat_name, issue_ids, files, commit_sha)
|
|
310
|
-
VALUES (?, ?, ?, ?)
|
|
317
|
+
INSERT INTO uat_generation_resolutions (uat_name, issue_ids, files, commit_sha, kind, note)
|
|
318
|
+
VALUES (?, ?, ?, ?, ?, ?)
|
|
311
319
|
`);
|
|
312
|
-
for (const r of patch.resolutions) insertRes.run(name, JSON.stringify(r.issueIds), JSON.stringify(r.files), r.commitSha);
|
|
320
|
+
for (const r of patch.resolutions) insertRes.run(name, JSON.stringify(r.issueIds), JSON.stringify(r.files), r.commitSha, r.kind ?? "conflict", r.note ?? null);
|
|
313
321
|
}
|
|
314
322
|
})();
|
|
315
323
|
}
|
|
324
|
+
/**
|
|
325
|
+
* Record that one member repo's merge landed on its target branch (PAN-3093).
|
|
326
|
+
* Promote publishes repos one at a time, so this per-repo stamp is what makes a
|
|
327
|
+
* partially-published generation resumable: a retry skips every repo that
|
|
328
|
+
* already carries a `promoted_at`.
|
|
329
|
+
*/
|
|
330
|
+
function markUatGenerationRepoPromotedSync(name, repoKey, promotedAt, mergeSha) {
|
|
331
|
+
const db = getOverdeckDatabaseSync();
|
|
332
|
+
if (db.prepare("UPDATE uat_generation_repos SET promoted_at = ?, merge_sha = COALESCE(?, merge_sha) WHERE uat_name = ? AND repo_key = ?").run(millisFromIso(promotedAt), mergeSha ?? null, name, repoKey).changes === 0) throw new Error(`[merge-sync] uat generation repo not found: ${name} / ${repoKey}`);
|
|
333
|
+
db.prepare("UPDATE uat_generations SET updated_at = ? WHERE name = ?").run(nowMillis(), name);
|
|
334
|
+
}
|
|
335
|
+
/**
|
|
336
|
+
* Does this project have a terminal generation that still owns artifacts?
|
|
337
|
+
*
|
|
338
|
+
* The idle reconciler tick asks only this, and generation rows are retained as
|
|
339
|
+
* an audit trail — hydrating every promoted/failed/invalidated row plus its four
|
|
340
|
+
* child tables to answer a yes/no question means the cost of an idle minute
|
|
341
|
+
* grows with history forever, on the event loop.
|
|
342
|
+
*/
|
|
343
|
+
function hasUncleanedTerminalUatGenerationSync(projectRoot) {
|
|
344
|
+
return getOverdeckDatabaseSync().prepare(`SELECT 1 FROM uat_generations
|
|
345
|
+
WHERE project_root = ?
|
|
346
|
+
AND status IN ('promoted', 'failed', 'invalidated')
|
|
347
|
+
AND cleaned_at IS NULL
|
|
348
|
+
LIMIT 1`).get(projectRoot) !== void 0;
|
|
349
|
+
}
|
|
316
350
|
/** Drop-in for setUatGenerationStackStartedAtSync() from uat-generations-db.ts. */
|
|
317
351
|
function setUatGenerationStackStartedAtSync(name, startedAt) {
|
|
318
352
|
if (getOverdeckDatabaseSync().prepare("UPDATE uat_generations SET stack_started_at = ?, updated_at = ? WHERE name = ?").run(startedAt ? millisFromIso(startedAt) : null, nowMillis(), name).changes === 0) throw new Error(`[merge-sync] uat generation not found: ${name}`);
|
|
@@ -320,7 +354,172 @@ function setUatGenerationStackStartedAtSync(name, startedAt) {
|
|
|
320
354
|
/** Drop-in for listUatGenerationsWithStacksSync() from uat-generations-db.ts. */
|
|
321
355
|
function listUatGenerationsWithStacksSync() {
|
|
322
356
|
const db = getOverdeckDatabaseSync();
|
|
323
|
-
return db.prepare("SELECT * FROM uat_generations WHERE stack_started_at IS NOT NULL ORDER BY stack_started_at ASC").all()
|
|
357
|
+
return loadUatGenerations(db, db.prepare("SELECT * FROM uat_generations WHERE stack_started_at IS NOT NULL ORDER BY stack_started_at ASC").all());
|
|
358
|
+
}
|
|
359
|
+
var init_merge_sync_uat = __esmMin((() => {
|
|
360
|
+
init_infra();
|
|
361
|
+
init_merge_sync_time();
|
|
362
|
+
}));
|
|
363
|
+
//#endregion
|
|
364
|
+
//#region ../../lib/overdeck/merge-sync.ts
|
|
365
|
+
function readFlag(key) {
|
|
366
|
+
return getOverdeckDatabaseSync().prepare("SELECT value FROM app_settings WHERE key = ?").get(key)?.value === "true";
|
|
367
|
+
}
|
|
368
|
+
/** Drop-in for isFlywheelGloballyPaused() from app-settings.ts. */
|
|
369
|
+
function isFlywheelGloballyPaused() {
|
|
370
|
+
return readFlag("flywheel.globally_paused");
|
|
371
|
+
}
|
|
372
|
+
/**
|
|
373
|
+
* Drop-in for isMergeTrainEnabled() from app-settings.ts (PAN-1696).
|
|
374
|
+
*
|
|
375
|
+
* Reads 'merge_train.enabled' (new key), falling back to
|
|
376
|
+
* 'flywheel.merge_train_enabled' (legacy) when the new key is absent.
|
|
377
|
+
*/
|
|
378
|
+
function isMergeTrainEnabled() {
|
|
379
|
+
const newRow = getOverdeckDatabaseSync().prepare("SELECT value FROM app_settings WHERE key = ?").get("merge_train.enabled");
|
|
380
|
+
if (newRow?.value === "true" || newRow?.value === "false") return newRow.value === "true";
|
|
381
|
+
return readFlag("flywheel.merge_train_enabled");
|
|
382
|
+
}
|
|
383
|
+
/**
|
|
384
|
+
* PAN-1696: Check if merge train is enabled for a project, respecting the
|
|
385
|
+
* per-project override in projects.yaml if set, otherwise falling back to
|
|
386
|
+
* the global merge_train.enabled flag.
|
|
387
|
+
*
|
|
388
|
+
* @param project - ProjectConfig from projects.yaml with merge_train field. If not set, uses global.
|
|
389
|
+
* @returns true if merge train is enabled for this project, false otherwise.
|
|
390
|
+
*/
|
|
391
|
+
function isMergeTrainEnabledForProject(project) {
|
|
392
|
+
if (project?.merge_train === "enabled") return true;
|
|
393
|
+
if (project?.merge_train === "disabled") return false;
|
|
394
|
+
return isMergeTrainEnabled();
|
|
395
|
+
}
|
|
396
|
+
function rowToPendingAutoMerge(row) {
|
|
397
|
+
return {
|
|
398
|
+
id: row.id,
|
|
399
|
+
issueId: row.issue_id,
|
|
400
|
+
prUrl: row.pr_url,
|
|
401
|
+
prNumber: void 0,
|
|
402
|
+
projectKey: row.project_key,
|
|
403
|
+
forge: row.forge ?? "github",
|
|
404
|
+
status: row.status,
|
|
405
|
+
scheduledMergeAt: isoFromMillisRequired(row.scheduled_merge_at),
|
|
406
|
+
scheduledAt: isoFromMillisRequired(row.scheduled_at),
|
|
407
|
+
mergedAt: isoFromMillis(row.merged_at),
|
|
408
|
+
failureReason: row.failure_reason ?? void 0,
|
|
409
|
+
cancelledAt: isoFromMillis(row.cancelled_at),
|
|
410
|
+
cancelledBy: row.cancelled_by ?? void 0
|
|
411
|
+
};
|
|
412
|
+
}
|
|
413
|
+
function truncateReason(reason) {
|
|
414
|
+
return reason.length > 1024 ? reason.slice(0, 1024) : reason;
|
|
415
|
+
}
|
|
416
|
+
/** Drop-in for listDuePendingAutoMerges() from pending-auto-merges-db.ts. */
|
|
417
|
+
function listDuePendingAutoMerges(nowIso) {
|
|
418
|
+
const db = getOverdeckDatabaseSync();
|
|
419
|
+
const nowMs = millisFromIso(nowIso) ?? Date.now();
|
|
420
|
+
return db.prepare("SELECT * FROM pending_auto_merges WHERE status = 'pending' AND scheduled_merge_at <= ? ORDER BY scheduled_merge_at ASC, id ASC").all(nowMs).map(rowToPendingAutoMerge);
|
|
421
|
+
}
|
|
422
|
+
/** Drop-in for transitionToMerging() from pending-auto-merges-db.ts. */
|
|
423
|
+
function transitionToMerging(id) {
|
|
424
|
+
return getOverdeckDatabaseSync().prepare("UPDATE pending_auto_merges SET status = 'merging' WHERE id = ? AND status = 'pending'").run(id).changes === 1;
|
|
425
|
+
}
|
|
426
|
+
/** Drop-in for markFailed() from pending-auto-merges-db.ts. */
|
|
427
|
+
function markFailed(id, reason) {
|
|
428
|
+
return getOverdeckDatabaseSync().prepare("UPDATE pending_auto_merges SET status = 'failed', failure_reason = ? WHERE id = ? AND status = 'merging'").run(truncateReason(reason), id).changes === 1;
|
|
429
|
+
}
|
|
430
|
+
/** Drop-in for requeueToPending() from pending-auto-merges-db.ts. */
|
|
431
|
+
function requeueToPending(id, nextScheduledMergeAt) {
|
|
432
|
+
const db = getOverdeckDatabaseSync();
|
|
433
|
+
const nextMs = millisFromIso(nextScheduledMergeAt);
|
|
434
|
+
if (nextMs == null) return false;
|
|
435
|
+
return db.prepare("UPDATE pending_auto_merges SET status = 'pending', scheduled_merge_at = ? WHERE id = ? AND status = 'merging'").run(nextMs, id).changes === 1;
|
|
436
|
+
}
|
|
437
|
+
/** Drop-in for markBlocked() from pending-auto-merges-db.ts. */
|
|
438
|
+
function markBlocked(id, reason) {
|
|
439
|
+
return getOverdeckDatabaseSync().prepare("UPDATE pending_auto_merges SET status = 'blocked', failure_reason = ? WHERE id = ? AND status = 'pending'").run(truncateReason(reason), id).changes === 1;
|
|
440
|
+
}
|
|
441
|
+
/** Atomically stop an in-progress auto-merge after its retry circuit breaker opens. */
|
|
442
|
+
function markMergingBlocked(id, reason) {
|
|
443
|
+
return getOverdeckDatabaseSync().prepare("UPDATE pending_auto_merges SET status = 'blocked', failure_reason = ? WHERE id = ? AND status = 'merging'").run(truncateReason(reason), id).changes === 1;
|
|
444
|
+
}
|
|
445
|
+
/** Drop-in for markMerged() from pending-auto-merges-db.ts. */
|
|
446
|
+
function markMerged(id) {
|
|
447
|
+
return getOverdeckDatabaseSync().prepare("UPDATE pending_auto_merges SET status = 'merged', merged_at = ? WHERE id = ? AND status IN ('pending','blocked','failed','merging')").run(nowMillis(), id).changes === 1;
|
|
448
|
+
}
|
|
449
|
+
/** Drop-in for cancelPending() from pending-auto-merges-db.ts. */
|
|
450
|
+
function cancelPending(id, cancelledBy) {
|
|
451
|
+
return getOverdeckDatabaseSync().prepare("UPDATE pending_auto_merges SET status = 'cancelled', cancelled_at = ?, cancelled_by = ? WHERE id = ? AND status IN ('pending','blocked','failed')").run(nowMillis(), cancelledBy, id).changes === 1;
|
|
452
|
+
}
|
|
453
|
+
/** Drop-in for getActionableAutoMerge() from pending-auto-merges-db.ts. */
|
|
454
|
+
function getActionableAutoMerge(issueId) {
|
|
455
|
+
const row = getOverdeckDatabaseSync().prepare("SELECT * FROM pending_auto_merges WHERE issue_id = ? AND status IN ('pending','merging','blocked','failed') ORDER BY id DESC LIMIT 1").get(issueId);
|
|
456
|
+
return row ? rowToPendingAutoMerge(row) : null;
|
|
457
|
+
}
|
|
458
|
+
function countActionableAutoMerges(issueId) {
|
|
459
|
+
return getOverdeckDatabaseSync().prepare("SELECT COUNT(*) AS n FROM pending_auto_merges WHERE issue_id = ? AND status IN ('pending','merging','blocked','failed')").get(issueId)?.n ?? 0;
|
|
460
|
+
}
|
|
461
|
+
/** Drop-in for listActiveAutoMerges() from pending-auto-merges-db.ts. */
|
|
462
|
+
function listActiveAutoMerges(limit = 100) {
|
|
463
|
+
return getOverdeckDatabaseSync().prepare("SELECT * FROM pending_auto_merges WHERE status IN ('pending','merging') ORDER BY scheduled_merge_at ASC, id ASC LIMIT ?").all(limit).map(rowToPendingAutoMerge);
|
|
464
|
+
}
|
|
465
|
+
/** Drop-in for listProblemAutoMerges() from pending-auto-merges-db.ts. */
|
|
466
|
+
function listProblemAutoMerges(limit = 100) {
|
|
467
|
+
return getOverdeckDatabaseSync().prepare("SELECT * FROM pending_auto_merges WHERE status IN ('blocked','failed') ORDER BY scheduled_merge_at ASC, id ASC LIMIT ?").all(limit).map(rowToPendingAutoMerge);
|
|
468
|
+
}
|
|
469
|
+
/** Drop-in for scheduleAutoMergeWithResult() from pending-auto-merges-db.ts. */
|
|
470
|
+
function scheduleAutoMergeWithResult(input) {
|
|
471
|
+
const db = getOverdeckDatabaseSync();
|
|
472
|
+
const existing = db.prepare("SELECT * FROM pending_auto_merges WHERE issue_id = ? AND status IN ('pending','merging') ORDER BY id DESC LIMIT 1").get(input.issueId);
|
|
473
|
+
if (existing) return {
|
|
474
|
+
entry: rowToPendingAutoMerge(existing),
|
|
475
|
+
created: false
|
|
476
|
+
};
|
|
477
|
+
const scheduledAtMs = millisFromIso(input.scheduledAt ?? (/* @__PURE__ */ new Date()).toISOString()) ?? nowMillis();
|
|
478
|
+
const scheduledMergeAtMs = millisFromIso(input.scheduledMergeAt) ?? nowMillis();
|
|
479
|
+
try {
|
|
480
|
+
const result = db.prepare(`
|
|
481
|
+
INSERT INTO pending_auto_merges (issue_id, pr_url, project_key, forge, status, scheduled_merge_at, scheduled_at)
|
|
482
|
+
VALUES (?, ?, ?, ?, 'pending', ?, ?)
|
|
483
|
+
`).run(input.issueId, input.prUrl, input.projectKey, input.forge ?? "github", scheduledMergeAtMs, scheduledAtMs);
|
|
484
|
+
return {
|
|
485
|
+
entry: rowToPendingAutoMerge(db.prepare("SELECT * FROM pending_auto_merges WHERE id = ?").get(Number(result.lastInsertRowid))),
|
|
486
|
+
created: true
|
|
487
|
+
};
|
|
488
|
+
} catch {
|
|
489
|
+
const raced = db.prepare("SELECT * FROM pending_auto_merges WHERE issue_id = ? AND status IN ('pending','merging') ORDER BY id DESC LIMIT 1").get(input.issueId);
|
|
490
|
+
if (raced) return {
|
|
491
|
+
entry: rowToPendingAutoMerge(raced),
|
|
492
|
+
created: false
|
|
493
|
+
};
|
|
494
|
+
throw new Error(`[merge-sync] scheduleAutoMergeWithResult failed for ${input.issueId}`);
|
|
495
|
+
}
|
|
496
|
+
}
|
|
497
|
+
/** Drop-in for getAllActiveQueues() from merge-queue-db.ts. */
|
|
498
|
+
function getAllActiveQueues() {
|
|
499
|
+
const rows = getOverdeckDatabaseSync().prepare("SELECT project_key, issue_id, status FROM merge_queue WHERE status IN ('queued', 'processing') ORDER BY project_key, position ASC").all();
|
|
500
|
+
const byProject = /* @__PURE__ */ new Map();
|
|
501
|
+
for (const row of rows) {
|
|
502
|
+
let entry = byProject.get(row.project_key);
|
|
503
|
+
if (!entry) {
|
|
504
|
+
entry = {
|
|
505
|
+
current: null,
|
|
506
|
+
queue: []
|
|
507
|
+
};
|
|
508
|
+
byProject.set(row.project_key, entry);
|
|
509
|
+
}
|
|
510
|
+
if (row.status === "processing") entry.current = row.issue_id;
|
|
511
|
+
else entry.queue.push(row.issue_id);
|
|
512
|
+
}
|
|
513
|
+
return [...byProject.entries()].map(([projectKey, data]) => ({
|
|
514
|
+
projectKey,
|
|
515
|
+
current: data.current,
|
|
516
|
+
queue: data.queue,
|
|
517
|
+
queueLength: data.queue.length
|
|
518
|
+
}));
|
|
519
|
+
}
|
|
520
|
+
/** Drop-in for resetProcessingToQueued() from merge-queue-db.ts. */
|
|
521
|
+
function resetProcessingToQueued() {
|
|
522
|
+
return getOverdeckDatabaseSync().prepare("UPDATE merge_queue SET status = 'queued', started_at = NULL WHERE status = 'processing'").run().changes;
|
|
324
523
|
}
|
|
325
524
|
function rowToMergeSetRepos(rows) {
|
|
326
525
|
return rows.map((r) => ({
|
|
@@ -388,6 +587,48 @@ function upsertMergeSet(mergeSet) {
|
|
|
388
587
|
for (const repo of set.repos) insertRepo.run(set.issueId, repo.repoKey, repo.repoPath, repo.forge, repo.sourceBranch, repo.targetBranch, repo.artifactUrl ?? null, repo.artifactId ?? null, repo.reviewStatus, repo.testStatus, repo.rebaseStatus, repo.verificationStatus, repo.mergeStatus, repo.mergeOrder, repo.required ? 1 : 0);
|
|
389
588
|
})(mergeSet);
|
|
390
589
|
}
|
|
590
|
+
function patchMergeSetRepos(issueId, patches) {
|
|
591
|
+
const db = getOverdeckDatabaseSync();
|
|
592
|
+
const effective = patches.filter(({ patch }) => Object.values(patch).some((value) => value !== void 0));
|
|
593
|
+
if (effective.length === 0) return true;
|
|
594
|
+
try {
|
|
595
|
+
db.transaction(() => {
|
|
596
|
+
for (const { repoKey, expected, patch } of effective) {
|
|
597
|
+
const assignments = [];
|
|
598
|
+
const values = [];
|
|
599
|
+
if (patch.artifactUrl !== void 0) {
|
|
600
|
+
assignments.push("artifact_url = ?");
|
|
601
|
+
values.push(patch.artifactUrl);
|
|
602
|
+
}
|
|
603
|
+
if (patch.artifactId !== void 0) {
|
|
604
|
+
assignments.push("artifact_id = ?");
|
|
605
|
+
values.push(patch.artifactId);
|
|
606
|
+
}
|
|
607
|
+
if (patch.mergeStatus !== void 0) {
|
|
608
|
+
assignments.push("merge_status = ?");
|
|
609
|
+
values.push(patch.mergeStatus);
|
|
610
|
+
}
|
|
611
|
+
if (db.prepare(`
|
|
612
|
+
UPDATE merge_set_repos SET ${assignments.join(", ")}
|
|
613
|
+
WHERE issue_id = ? AND repo_key = ? AND source_branch = ? AND target_branch = ?
|
|
614
|
+
AND artifact_url IS ? AND artifact_id IS ?
|
|
615
|
+
`).run(...values, issueId, repoKey, expected.sourceBranch, expected.targetBranch, expected.artifactUrl ?? null, expected.artifactId ?? null).changes !== 1) throw MERGE_SET_REPO_CAS_FAILED;
|
|
616
|
+
}
|
|
617
|
+
db.prepare("UPDATE merge_sets SET updated_at = ? WHERE issue_id = ?").run(nowMillis(), issueId);
|
|
618
|
+
})();
|
|
619
|
+
return true;
|
|
620
|
+
} catch (error) {
|
|
621
|
+
if (error === MERGE_SET_REPO_CAS_FAILED) return false;
|
|
622
|
+
throw error;
|
|
623
|
+
}
|
|
624
|
+
}
|
|
625
|
+
function patchMergeSetRepo(issueId, repoKey, expected, patch) {
|
|
626
|
+
return patchMergeSetRepos(issueId, [{
|
|
627
|
+
repoKey,
|
|
628
|
+
expected,
|
|
629
|
+
patch
|
|
630
|
+
}]);
|
|
631
|
+
}
|
|
391
632
|
/** Drop-in for getMergeSetFromDb() from merge-set-db.ts. */
|
|
392
633
|
function getMergeSetFromDb(issueId) {
|
|
393
634
|
const db = getOverdeckDatabaseSync();
|
|
@@ -395,10 +636,25 @@ function getMergeSetFromDb(issueId) {
|
|
|
395
636
|
if (!row) return null;
|
|
396
637
|
return rowToMergeSet(row, loadReposForMergeSet(db, issueId));
|
|
397
638
|
}
|
|
639
|
+
/** Drop-in for getAllMergeSetsFromDb() from merge-set-db.ts. */
|
|
640
|
+
function getAllMergeSetsFromDb(projectKey) {
|
|
641
|
+
const db = getOverdeckDatabaseSync();
|
|
642
|
+
return (projectKey ? db.prepare("SELECT issue_id, project_key, project_path, workspace_type, status, created_at, updated_at FROM merge_sets WHERE project_key = ? ORDER BY updated_at DESC").all(projectKey) : db.prepare("SELECT issue_id, project_key, project_path, workspace_type, status, created_at, updated_at FROM merge_sets ORDER BY updated_at DESC").all()).map((row) => rowToMergeSet(row, loadReposForMergeSet(db, row.issue_id)));
|
|
643
|
+
}
|
|
644
|
+
/** Drop-in for deleteMergeSet() from merge-set-db.ts. */
|
|
645
|
+
function deleteMergeSet(issueId) {
|
|
646
|
+
const db = getOverdeckDatabaseSync();
|
|
647
|
+
db.prepare("DELETE FROM merge_set_repos WHERE issue_id = ?").run(issueId);
|
|
648
|
+
db.prepare("DELETE FROM merge_sets WHERE issue_id = ?").run(issueId);
|
|
649
|
+
}
|
|
650
|
+
var MERGE_SET_REPO_CAS_FAILED;
|
|
398
651
|
var init_merge_sync = __esmMin((() => {
|
|
399
652
|
init_infra();
|
|
653
|
+
init_merge_sync_time();
|
|
654
|
+
init_merge_sync_uat();
|
|
655
|
+
MERGE_SET_REPO_CAS_FAILED = /* @__PURE__ */ new Error("merge-set-repo-cas-failed");
|
|
400
656
|
}));
|
|
401
657
|
//#endregion
|
|
402
|
-
export {
|
|
658
|
+
export { listUatGenerationsSync as A, scheduleAutoMergeWithResult as C, hasUncleanedTerminalUatGenerationSync as D, getUatGenerationSync as E, updateUatGenerationSync as F, markUatGenerationRepoPromotedSync as M, setUatGenerationStackStartedAtSync as N, insertUatGenerationSync as O, updateUatGenerationStatusSync as P, resetProcessingToQueued as S, upsertMergeSet as T, markMerged as _, getAllActiveQueues as a, patchMergeSetRepos as b, init_merge_sync as c, isMergeTrainEnabledForProject as d, listActiveAutoMerges as f, markFailed as g, markBlocked as h, getActionableAutoMerge as i, listUatGenerationsWithStacksSync as j, listUatGenerationNamesSync as k, isFlywheelGloballyPaused as l, listProblemAutoMerges as m, countActionableAutoMerges as n, getAllMergeSetsFromDb as o, listDuePendingAutoMerges as p, deleteMergeSet as r, getMergeSetFromDb as s, cancelPending as t, isMergeTrainEnabled as u, markMergingBlocked as v, transitionToMerging as w, requeueToPending as x, patchMergeSetRepo as y };
|
|
403
659
|
|
|
404
|
-
//# sourceMappingURL=merge-sync-
|
|
660
|
+
//# sourceMappingURL=merge-sync-kr4vqyjM.js.map
|