@overdeck/desktop 0.45.24 → 0.46.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/drizzle/overdeck/0000_overdeck_init.sql +32 -0
- package/package.json +1 -1
- package/server/{acceptance-criteria-DDCnXF58.js → acceptance-criteria-CCwFGICj.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-De1L-Sb4.js} +6 -6
- package/server/{agent-gc-CHcnvonI.js → agent-gc-CBULruzm.js} +5 -5
- package/server/agent-state-VQk8fY9F.js +3 -0
- package/server/{agent-state-service-BsgWxZuB.js → agent-state-service-BlnSkRFA.js} +5 -5
- package/server/{agent-state-service-D5UGKIJL.js → agent-state-service-hZpxIw1E.js} +1 -1
- package/server/agents-BKKkxKgK.js +3 -0
- package/server/{agents-EbI0zCJl.js → agents-C5rWYhb6.js} +4 -4
- package/server/archive-planning-0FJ6Xd3b.js +2 -0
- package/server/{archive-planning-Du25Jtst.js → archive-planning-C0lAbNB_.js} +16 -24
- package/server/{artifact-index-jobs-CbEDfCDu.js → artifact-index-jobs-ug6ZxIP5.js} +2 -2
- package/server/{assemble-J2ZZ2C15.js → assemble-DnffNpOo.js} +2 -2
- package/server/{backlog-auto-trigger-2R2jog7n.js → backlog-auto-trigger-Dh-i9PQf.js} +3 -3
- package/server/{behavior-B3exJ42O.js → behavior-CfIg6pKp.js} +2 -2
- package/server/bridge-pool-patrol-CUFmjVDN.js +136 -0
- package/server/{briefing-freshness-D1wzUIWv.js → briefing-freshness-DHmCSLar.js} +2 -2
- package/server/{build-info-CZk_TITh.js → build-info-BP160gU7.js} +1 -1
- package/server/{build-info-Ie_D0_BT.js → build-info-CuFfxZxp.js} +5 -3
- package/server/{checkpoint-manager-BI1Wxoku.js → checkpoint-manager-DEWD82qK.js} +2 -2
- package/server/{checkpoint-manager-DwbQoqrC.js → checkpoint-manager-Dxh0FYsv.js} +1 -1
- package/server/checkpoint-worker.js +1 -1
- package/server/{checkpoints-CQB1h765.js → checkpoints-CZvbtLnr.js} +2 -2
- package/server/{checkpoints-BJIs5QIA.js → checkpoints-DMTgXuLG.js} +1 -1
- package/server/{claude-hooks-provision-8Ngo8TpT.js → claude-hooks-provision-CN-xo-do.js} +1 -1
- package/server/{claude-hooks-provision-D8GXF3_s.js → claude-hooks-provision-fvy4RD2b.js} +13 -2
- package/server/{claude-permissions-DNWEVV6z.js → claude-permissions-CN0cSCPp.js} +2 -2
- package/server/{claude-settings-overlay-CEdaqpWI.js → claude-settings-overlay-CJn35FHQ.js} +2 -2
- package/server/{claude-settings-overlay-DWy-Bb4Y.js → claude-settings-overlay-Dabi9slj.js} +1 -1
- package/server/cli-DmXETsw-.js +3 -0
- package/server/{cli-RoOx5DUf.js → cli-oCWYA1pE.js} +9 -9
- package/server/{cliproxy-C8a1vtTU.js → cliproxy-C8mB3KuB.js} +2 -2
- package/server/{cliproxy-fHfIeiGd.js → cliproxy-PGwTX_o8.js} +1 -1
- package/server/{close-issue-DoOifFIK.js → close-issue-D5MF5GqF.js} +5 -5
- package/server/{closed-issue-reaper-CktPXo8m.js → closed-issue-reaper-CJ24u0Zt.js} +1 -1
- package/server/{closed-issue-reaper-Bk3SU4RC.js → closed-issue-reaper-Cltx86x5.js} +37 -16
- package/server/{codex-GcHuUF-k.js → codex-BdEsUFWh.js} +1 -1
- package/server/{codex-BZXGhUVB.js → codex-Drlf5Xhf.js} +36 -7
- package/server/{codex-parser-CFZ1_1Jl.js → codex-parser-DpB89Vqa.js} +2 -2
- package/server/compaction-continuation-K2AxQX4H.js +200 -0
- package/server/{config-CKxYiCmX.js → config-B2IMcBxx.js} +4 -3
- package/server/{config-DzV30TOm.js → config-DV-grfQc.js} +1 -1
- package/server/{config-BZ0sHTju.js → config-Dr3pW6w6.js} +2 -2
- package/server/{config-yaml-DySPNmKN.js → config-yaml-CmOPzmBb.js} +268 -14
- package/server/{conflict-gate-BaCVrH-N.js → conflict-gate-B9cN3SBi.js} +4 -4
- package/server/{conflict-gate-BhAY7TUd.js → conflict-gate-Dh754uyA.js} +1 -1
- package/server/{context-layers-BrPmE__h.js → context-layers-D6LZo3l1.js} +2 -2
- package/server/{context-layers-igZ4FI4_.js → context-layers-dR5YxHYB.js} +3 -3
- package/server/{control-settings-BQp7_4uD.js → control-settings-C7DUehE1.js} +49 -19
- package/server/{conversation-compaction-CgrR8YYp.js → conversation-compaction-BoqdDXWF.js} +8 -8
- package/server/{conversation-compaction-eQB5CkOe.js → conversation-compaction-Dj4FAKoZ.js} +1 -1
- package/server/{conversation-service-DPJ71F33.js → conversation-service-5aCnq1zR.js} +8 -7
- package/server/conversation-service-BCxl4f8Z.js +3 -0
- package/server/{conversations-6AfUfbwc.js → conversations-BUpYsOZg.js} +4 -4
- package/server/{conversations-CAsJF9kh.js → conversations-C34dyIb9.js} +1 -1
- package/server/{cost-B2ddP6wq.js → cost-Bgcub5kW.js} +12 -2
- package/server/{cost-R-m6Yi-W.js → cost-CvxRrucd.js} +3 -3
- package/server/{cost-sync-BsN6ER0n.js → cost-sync-Dv3LUaNW.js} +3 -3
- package/server/{dag-B1ucnjDU.js → dag-ombYYt4s.js} +2 -2
- package/server/{dangerous-git-ops-BXqeWVSf.js → dangerous-git-ops-BcJPC5Rr.js} +1 -1
- package/server/dashboard-db-worker.js +7 -7
- package/server/deacon-DrXqT9LQ.js +4 -0
- package/server/{deacon-CU_cAYSR.js → deacon-hi9KLPLT.js} +2933 -2704
- package/server/{deacon-nudge-log-6wVqAaqz.js → deacon-nudge-log-BNBebzeL.js} +3 -3
- package/server/deacon-pending-lifecycle-Cpk0k7Hi.js +33 -0
- package/server/{deacon-swarm-BXZZ1Z2-.js → deacon-swarm-DBxUaO-A.js} +13 -13
- package/server/deacon-swarm-I2JfX5Tg.js +2 -0
- package/server/deacon.js +14 -19
- package/server/dead-end-trip-CQcP70ND.js +13 -0
- package/server/delivery-Da0zEMY4.js +3 -0
- package/server/{deploy-patrol-AiFoP8dw.js → deploy-patrol-Df-Tmaq0.js} +69 -18
- package/server/deploy-queue-9SrhZR63.js +3 -0
- package/server/deploy-queue-UjKGYsDe.js +169 -0
- package/server/deploy-window-jOiPRHL0.js +3 -0
- package/server/{deploy-window-C3F-tihF.js → deploy-window-rpqpWqHA.js} +40 -16
- package/server/{dev-supervisor-bcOWqdQE.js → dev-supervisor-CC46Ig8q.js} +2 -2
- package/server/{devcontainer-renderer-_d6XhyND.js → devcontainer-renderer-68CSCRnu.js} +3 -3
- package/server/{dist-Cb_0uvpS.js → dist-CJy72uEg.js} +1 -1
- package/server/dist-DSlxIU1H.js +3 -0
- package/server/{dist-src-BSoS7mkd.js → dist-src-Bik83hFi.js} +1 -1
- package/server/docker-BMVTSFL5.js +3 -0
- package/server/{docker-DcMTFTUC.js → docker-Dam7mbIB.js} +2 -2
- package/server/{dod-C6n9RV3G.js → dod-Dar-yheg.js} +8 -4
- package/server/durable-review-pipeline-CGZ5QBxh.js +17 -0
- package/server/durable-review-pipeline-jpgCJZFp.js +3 -0
- package/server/{ensure-devcontainer-DNi-ono3.js → ensure-devcontainer-B057YA81.js} +4 -4
- package/server/{ensure-devcontainer-BZgOhRo7.js → ensure-devcontainer-C98V8yW-.js} +1 -1
- package/server/{esm-shims-OSHAYaS1.js → esm-shims-Br9BPdkR.js} +1 -1
- package/server/{event-store-EV2cMiXj.js → event-store-ELqkVOn0.js} +1 -1
- package/server/{event-store-CQL6NeqB.js → event-store-zY5MJHgF.js} +23 -4
- package/server/{events-BTdrdEq8.js → events-D6pyqhzM.js} +1 -1
- package/server/{events-DTfAe4My.js → events-D9PR1IC0.js} +3 -3
- package/server/{factory-CFibJuaw.js → factory-CRoOpGsF.js} +5 -5
- package/server/{feature-registry-population-DKZFMbFt.js → feature-registry-population--YUXU999.js} +4 -4
- package/server/{feature-registry-storage-BdPuLcBX.js → feature-registry-storage-BORBTo0y.js} +2 -2
- package/server/{features-ez2271oH.js → features--nFkJY8v.js} +2 -2
- package/server/{feedback-target-CoFDHiM8.js → feedback-target-C0ZzyHvU.js} +1 -1
- package/server/{feedback-target-7mqqwrX6.js → feedback-target-Dt9BsapX.js} +8 -8
- package/server/{feedback-writer-CY5L1lB7.js → feedback-writer-BG0RUZiu.js} +5 -5
- package/server/{feedback-writer-D3a22RCd.js → feedback-writer-D1fm-5Z8.js} +1 -1
- package/server/{flywheel-SVF02Jpq.js → flywheel-BekukH4i.js} +1 -1
- package/server/{flywheel-DHrgCphM.js → flywheel-BiT3odRb.js} +23 -15
- package/server/{flywheel-DzGtWnJ1.js → flywheel-CLVB55Be.js} +16 -15
- package/server/flywheel-merge-order-BJv1DZz1.js +462 -0
- package/server/flywheel-merge-order-BKw9o6ku.js +2 -0
- package/server/forge-CZbSg6Ds.js +383 -0
- package/server/forge-DK3blQb_.js +3 -0
- package/server/{from-kNxT0bZC.js → from-D_4_dk7i.js} +1 -1
- package/server/{fts-db-CE46vDkZ.js → fts-db-BeOomFa-.js} +2 -2
- package/server/{fts-operations-CqY6zl-i.js → fts-operations-BdewJ_g9.js} +2 -2
- package/server/git-utils-CI6cwyyC.js +3 -0
- package/server/{git-utils-CRw2zLPC.js → git-utils-ameCgDdy.js} +30 -5
- package/server/{github-app-C3QrAUd0.js → github-app-CQ1Lo6LA.js} +3 -3
- package/server/{github-app-ClZ2lk8D.js → github-app-DtAsvwzK.js} +1 -1
- package/server/{github-client-BnIsSrEN.js → github-client-BfyDxuRN.js} +2 -2
- package/server/{github-client-DfQYVUaw.js → github-client-Cj0yl_07.js} +1 -1
- package/server/github-pr-lookup-BDq6Wznz.js +58 -0
- package/server/{harness-binary-DPUi-Pv8.js → harness-binary-DqkftwTb.js} +2 -2
- package/server/{harness-resolve-3lNZkyT4.js → harness-resolve-CqMqM1Mb.js} +4 -4
- package/server/{health-events-BBcTYQKU.js → health-events-CazRxJUS.js} +2 -2
- package/server/{health-events-BDOHby5Q.js → health-events-_xfTaOUs.js} +1 -1
- package/server/{hooks-CKZgXlJb.js → hooks-BO3QT1sn.js} +2 -2
- package/server/{hooks-DPVX1rwQ.js → hooks-BnJsxlSq.js} +1 -1
- package/server/{hume-Cz8igP9E.js → hume-CDYJxqx-.js} +2 -2
- package/server/hume-Dq--7rOQ.js +3 -0
- package/server/{idle-stack-reaper-CuLF0j2H.js → idle-stack-reaper-BYqERdkE.js} +1 -1
- package/server/{idle-stack-reaper-DDIRwxUY.js → idle-stack-reaper-CnGx_PO_.js} +99 -6
- package/server/in-flight-guard-Bq3epG58.js +45 -0
- package/server/{infra-BEqFxlJc.js → infra-BjuxvjdS.js} +70 -5
- package/server/{injection-CPUIqNhI.js → injection-DZxlV2al.js} +1 -1
- package/server/{injection-C8aiVJrF.js → injection-UCf8EsjX.js} +7 -7
- package/server/{inspect-agent-BLuJ1AkT.js → inspect-agent-6kylZnrm.js} +26 -25
- package/server/inspect-agent-BVwDrVrz.js +2 -0
- package/server/{internal-token-s0-oKybJ.js → internal-token-DvMTQSOS.js} +2 -2
- package/server/{internal-token-BrcU6qfe.js → internal-token-M9omeXM1.js} +1 -1
- package/server/{io-C9kF1wtJ.js → io-VHvc0Ssp.js} +43 -26
- package/server/{issue-closed-CDJk4pIp.js → issue-closed-B6KJkmHZ.js} +7 -7
- package/server/{issue-lifecycle-B8sZHVHh.js → issue-lifecycle-9gk3fnXN.js} +1 -1
- package/server/{issue-lifecycle-ojZAzDBP.js → issue-lifecycle-C4Zj0WmE.js} +34 -28
- package/server/{issue-service-singleton-Yx5DdmVJ.js → issue-service-singleton-DmCh7EHj.js} +10 -10
- package/server/{issue-service-singleton-BvJ09SaR.js → issue-service-singleton-PMx8F1jr.js} +1 -1
- package/server/{issues-BMmP_77e.js → issues-CgnQ1OGQ.js} +2 -2
- package/server/{jsonl-parser-BXSlHwEh.js → jsonl-parser-DJOH_O-w.js} +5 -4
- package/server/{label-cleanup-B0UJwnv5.js → label-cleanup-Dv7AV_R1.js} +3 -3
- package/server/{label-reconciler-B4iOAjlC.js → label-reconciler--F85rufp.js} +4 -4
- package/server/{lifecycle-yPd___5E.js → lifecycle-CTdOWYMi.js} +2 -2
- package/server/{lifecycle-xmBfK2GJ.js → lifecycle-DDN8ApVY.js} +6 -7
- package/server/{lifecycle-io-BREGpnLk.js → lifecycle-io-D-lGdzK3.js} +5 -5
- package/server/{lifecycle-io-DPo7x11I.js → lifecycle-io-D_zTLvP1.js} +1 -1
- package/server/{linear-client-BsuUvkdA.js → linear-client-BQU36QqE.js} +2 -2
- package/server/{linear-client-CTskEeT_.js → linear-client-CY4O_Tu3.js} +1 -1
- package/server/linear-mcp-auth-BnU4TYfY.js +280 -0
- package/server/linear-mcp-auth-NYBq_oHZ.js +2 -0
- package/server/memory-fts-worker.js +1 -1
- package/server/{merge-CefQNAnq.js → merge-Bpx4jjht.js} +13 -11
- package/server/{merge-agent-4WOWlSYA.js → merge-agent-DdMVSV2Y.js} +233 -83
- package/server/{merge-agent-CKkgIBPB.js → merge-agent-DrXa1CpW.js} +1 -1
- package/server/{merge-batch-ClFn2T-y.js → merge-batch-C5q1c1GX.js} +1 -1
- package/server/merge-completeness-BMm8tMyZ.js +277 -0
- package/server/merge-completeness-D0ljXbk3.js +3 -0
- package/server/{merge-B1DiziGU.js → merge-idOG--29.js} +1 -1
- package/server/merge-ops-DdpTiEMt.js +2 -0
- package/server/merge-rebase-DGQpYJU3.js +2 -0
- package/server/{merge-rebase-BfaTyXsw.js → merge-rebase-xLnMlw5h.js} +3 -3
- package/server/{merge-set-DJ8-UErs.js → merge-set-DH7ot3yz.js} +11 -5
- package/server/merge-set-DzsOTBg5.js +3 -0
- package/server/{merge-sync-VPV28g0g.js → merge-sync-CQ-LgZ1_.js} +406 -153
- package/server/merge-sync-Ca7F5JnQ.js +3 -0
- package/server/{merge-train-CHopycP0.js → merge-train-DTEMyIu4.js} +18 -8
- package/server/{merge-train-deps-D1cOZzy2.js → merge-train-deps-CNPJzepw.js} +4 -4
- package/server/merge-verification-x3JO8Dtz.js +220 -0
- package/server/merged-docker-cleanup-worker-CTpC27Bs.js +107 -0
- package/server/merged-docker-cleanup-worker-Cdi9apm-.js +3 -0
- package/server/{multipart-parser-duPAfSBw.js → multipart-parser-IMSBfePV.js} +2 -2
- package/server/{no-resume-mode-Nw29vaFb.js → no-resume-mode-C5ULAXwO.js} +1 -1
- package/server/node_modules/.package-lock.json +27 -27
- 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/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-CTSGcK8p.js → orphan-proposed-reconciler-CWmOdM9-.js} +1 -1
- package/server/{orphan-proposed-reconciler-BvKkWMJQ.js → orphan-proposed-reconciler-Dg6U4ADZ.js} +24 -15
- package/server/package-lock.json +28 -28
- package/server/package.json +1 -1
- package/server/{pan-dir-B0c3w0Ya.js → pan-dir-ubraCiUg.js} +24 -10
- package/server/{paths-D-xWGHdh.js → paths-cXmOwSbh.js} +2 -2
- package/server/pending-lifecycle-claim-DEteYdS9.js +110 -0
- package/server/{pickup-DUCLWrJY.js → pickup-D8xtG1J2.js} +1 -1
- package/server/pipeline-membership-BGSvkT2M.js +3 -0
- package/server/pipeline-membership-CrAPLYtf.js +57 -0
- package/server/{pipeline-membership-mY3GprlK.js → pipeline-membership-gather-CET40frr.js} +177 -109
- package/server/pipeline-membership-gather-DTfcgxLl.js +3 -0
- package/server/{pipeline-notifier-BXkJzDC4.js → pipeline-notifier-BuQ0e4hF.js} +2 -2
- package/server/{pipeline-notifier-BJr8gQX6.js → pipeline-notifier-ImNXknf0.js} +1 -1
- package/server/post-merge-lifecycle-worker-DbO10pum.js +50 -0
- package/server/{project-pipelines-C0MWUeCU.js → project-pipelines-Bim6bThI.js} +2 -2
- package/server/{project-repos-B6GycDh9.js → project-repos-C0nuoBGv.js} +7 -3
- package/server/project-repos-CRE6Ykow.js +3 -0
- package/server/projects-B03Wr-xc.js +3 -0
- package/server/{prompts-DxzFXuLl.js → prompts-BEx08AIu.js} +2 -2
- package/server/{providers-u4Ga0jOr.js → providers-D7IluJe0.js} +1 -1
- package/server/{providers-qQAwGQDW.js → providers-evXhiQeg.js} +7 -7
- package/server/public/assets/{chunk-BO2N2NFS-BamJdinX.js → chunk-BO2N2NFS-D1s4-Sqp.js} +4 -4
- package/server/public/assets/{diagram-OG6HWLK6-DfOB8-w4.js → diagram-OG6HWLK6-1gdMoSF7.js} +1 -1
- package/server/public/assets/{dist-D7zYSEA6.js → dist-CxAOHbil.js} +1 -1
- package/server/public/assets/{dist-ByIuzMQW.js → dist-DqDRYW6P.js} +3 -3
- package/server/public/assets/{ganttDiagram-6RSMTGT7-EdmRyXL3.js → ganttDiagram-6RSMTGT7-BYex-Ec7.js} +1 -1
- package/server/public/assets/{highlighted-body-OFNGDK62-MerOfTX8.js → highlighted-body-OFNGDK62-DlVkiG0S.js} +1 -1
- package/server/public/assets/index-Cc7cnFC4.css +1 -0
- package/server/public/assets/index-K0hAYCgV.js +807 -0
- package/server/public/assets/{linear-BBbArIcK.js → linear-B4cuEFmO.js} +1 -1
- package/server/public/assets/mermaid-GHXKKRXX-DyDHFXHV.js +1 -0
- package/server/public/assets/{pieDiagram-4H26LBE5-BKIddiJN.js → pieDiagram-4H26LBE5-CBHNBIJQ.js} +1 -1
- package/server/public/assets/{prod-B8vYiu52.js → prod-CN2nHBvX.js} +4 -4
- package/server/public/assets/{quadrantDiagram-W4KKPZXB-D6RtoULk.js → quadrantDiagram-W4KKPZXB-Bom87VOQ.js} +1 -1
- package/server/public/assets/{sankeyDiagram-5OEKKPKP-CLrCedZX.js → sankeyDiagram-5OEKKPKP-UrBeyLxk.js} +1 -1
- package/server/public/assets/{xychartDiagram-2RQKCTM6-hznR8DYl.js → xychartDiagram-2RQKCTM6-DhkbrIxR.js} +1 -1
- package/server/public/index.html +2 -2
- package/server/{pull-requests-7N8WKseP.js → pull-requests-Cv7LxzUN.js} +1 -1
- package/server/{pull-requests-_lHueOHW.js → pull-requests-DHWiKxo7.js} +19 -10
- package/server/{queries-CjNIf-Ub.js → queries-DHJm7bTd.js} +631 -110
- package/server/{rally-CyWT_lNO.js → rally-B71M9f4o.js} +3 -3
- package/server/rally-YDjU513q.js +3 -0
- package/server/{rally-api-ClOSd-Tt.js → rally-api-D5uXN08-.js} +1 -1
- package/server/{rally-api-C8e_1JRi.js → rally-api-Dkqmok65.js} +2 -2
- package/server/{rally-client-lc-nokqr.js → rally-client-Bfqm6XI4.js} +4 -4
- package/server/{rally-client-sgtVqzNU.js → rally-client-CxsA6ExK.js} +1 -1
- package/server/{reap-terminal-sessions-7KeHv1R1.js → reap-terminal-sessions-BQ23nriz.js} +2 -2
- package/server/{reap-terminal-sessions-BtHPo6Xc.js → reap-terminal-sessions-CvmwaqKv.js} +2 -2
- package/server/{rebuild-stack-lwtsW0GO.js → rebuild-stack-0EEYReVZ.js} +16 -7
- package/server/{rebuild-stack-CFvcBHsS.js → rebuild-stack-qeRqHZxH.js} +2 -2
- package/server/{reconstruct-cache-C3Ui7ojV.js → reconstruct-cache-BbYFsqLa.js} +7 -6
- package/server/record-CtroO946.js +3 -0
- package/server/record-update-DH6dLJID.js +3 -0
- package/server/{record-update-dE1Aw83j.js → record-update-Z0QCxmMp.js} +124 -34
- package/server/{recovery-trip-BvRWfUXM.js → recovery-trip-eJe26h-f.js} +2 -2
- package/server/{release-engine-Cx48W7z8.js → release-engine-lPUp-MTd.js} +5 -5
- package/server/{release-set-CQfuN9-v.js → release-set-BwGeyZKX.js} +3 -3
- package/server/{remote-C_2hasl7.js → remote-BCd02Es1.js} +3 -3
- package/server/{remote-ChgimyYa.js → remote-CVGUhXMV.js} +3 -3
- package/server/{remote-agents-CA3Ihlxj.js → remote-agents-C1bssi41.js} +2 -2
- package/server/{remote-agents-By1ige5O.js → remote-agents-C_VxssLU.js} +300 -46
- package/server/{remote-completion-fVe9e_3u.js → remote-completion-DAB0P706.js} +12 -12
- package/server/resume-u9byntrq.js +3 -0
- package/server/{review-agent-DNboMyW4.js → review-agent-CD4RCI0Y.js} +1 -1
- package/server/{review-agent-CIGOQYBD.js → review-agent-CHhI66UP.js} +60 -47
- package/server/{review-artifacts-nRDPuMxd.js → review-artifacts-DSMRIfuJ.js} +7 -6
- package/server/{review-context-2uj-YQ8J.js → review-context-oFuBbiEE.js} +8 -8
- package/server/{in-flight-guard-CAAkqPLu.js → review-convoy-liveness-CpzrcJ5F.js} +3 -44
- package/server/review-status-BZH8h-6W.js +3 -0
- package/server/review-status-emit-CUExtHd5.js +50 -0
- package/server/{review-status-enrichment-Dci-ZwEt.js → review-status-enrichment-QV_hQkgS.js} +4 -4
- package/server/{review-status-source-CxuEjLGg.js → review-status-source-CpvJnvnQ.js} +24 -3
- package/server/review-status-source-ylw5QZUR.js +3 -0
- package/server/{review-status-sync-BTOpxtTC.js → review-status-sync-483sujRo.js} +2 -2
- package/server/{review-status-sync-DSDK3OMy.js → review-status-sync-NaWvI9Xf.js} +1 -1
- package/server/review-status-yljtTd-q.js +7521 -0
- package/server/{review-verdict-feedback-CTd4QMBu.js → review-verdict-feedback-BPDn4li_.js} +1 -1
- package/server/{review-verdict-feedback-CCjVA7Uk.js → review-verdict-feedback-CELeUinh.js} +48 -8
- package/server/{rollup-FGsKki9R.js → rollup-DTNvelz9.js} +8 -8
- package/server/{rollup-BKQC7jp4.js → rollup-DYZfq1c4.js} +1 -1
- package/server/{scanner-CnqEZeDy.js → scanner-CV35oSn4.js} +8 -7
- package/server/{sequence-io-D909zgeH.js → sequence-io-DF_8iuhV.js} +4 -4
- package/server/{sequencer-agent-CzkcK6P5.js → sequencer-agent-B2WeCtGi.js} +5 -5
- package/server/server.js +1952 -578
- package/server/{service-CLeAoU6G.js → service-Br9rpBNA.js} +81 -64
- package/server/{session-fork-CHI1XvL9.js → session-fork-D0LY152N.js} +2 -2
- package/server/{session-history-BT3IvqhC.js → session-history-BUyK29eq.js} +4 -4
- package/server/{settings-BTMvpNFU.js → settings-Bse1Pdcj.js} +3 -3
- package/server/settings-CdvIF84R.js +2 -0
- package/server/{settings-C0zgxOGf.js → settings-CvVGqNEs.js} +3 -2
- package/server/{shadow-engineering-BJfgm-hX.js → shadow-engineering-BWLa8ODz.js} +2 -2
- package/server/{shadow-state-7a-524T8.js → shadow-state-B4fpKxOO.js} +2 -2
- package/server/{shadow-state-DnDyjujH.js → shadow-state-FV6PHfEW.js} +1 -1
- package/server/{shadow-utils-Db3oroFG.js → shadow-utils-D7asqxOZ.js} +2 -2
- package/server/{ship-log-D9MlVzYU.js → ship-log-xplJ8t75.js} +1 -1
- package/server/{smart-compaction-CV2ukKND.js → smart-compaction-CPp2Ykf6.js} +1 -1
- package/server/{smart-compaction-KCYScAU1.js → smart-compaction-D3U_79f-.js} +8 -7
- package/server/{spawn-planning-session-qUC2VWu3.js → spawn-planning-session-1nFi3gfk.js} +1 -1
- package/server/{spawn-planning-session-DKpdFyOC.js → spawn-planning-session-DGfZ5B8D.js} +17 -17
- package/server/{specialist-completion-Ky9wCDpb.js → specialist-completion-Br48eiDP.js} +1 -1
- package/server/{specialist-context-Bn3dCGS2.js → specialist-context-cVbGnTa3.js} +5 -5
- package/server/{specialist-handoff-logger-CMEwYxa2.js → specialist-handoff-logger-DK-GTz4s.js} +2 -2
- package/server/{specialist-logs-C5p8G7tx.js → specialist-logs-Cl5-hqT8.js} +3 -3
- package/server/{specialists-CC4r-c2s.js → specialists-CNfYO3G2.js} +975 -227
- package/server/{specialists-jiuuyVkp.js → specialists-Cicieuzu.js} +18 -18
- package/server/{specialists-CShuVGWT.js → specialists-JHsdU3pA.js} +1 -1
- package/server/{specialists-DM6bWjsi.js → specialists-Tdezg_6N.js} +1 -1
- package/server/specs-Bt7WJDoC.js +3 -0
- package/server/src-CRmCHlma.js +11408 -0
- package/server/{src-CXmtj0im.js → src-Ck028hjO.js} +6 -6
- package/server/{src-CdmnTM2m.js → src-UWcGe0Ix.js} +3 -3
- package/server/{stack-health-Bn3o8FBX.js → stack-health-CJLMrLBl.js} +1 -1
- package/server/{stack-health-DxSdG9cW.js → stack-health-DqSqx0zv.js} +7 -5
- package/server/{stale-task-claims-KJKxxiiQ.js → stale-task-claims-CYFOUNlT.js} +4 -4
- package/server/{staleness-CT34nwr9.js → staleness-BQ-0gMYK.js} +1 -1
- package/server/{staleness-DPm7ClwA.js → staleness-D47CUJok.js} +1 -1
- package/server/{state-home-Cn_Qu8IX.js → state-home-BYV7qZTW.js} +2 -2
- package/server/{state-mapping-BL_-3Yt8.js → state-mapping-BVldLhBf.js} +1 -1
- package/server/{state-migrate-BGg2ZaOt.js → state-migrate-CvvBtS0Y.js} +4 -4
- package/server/{stuck-remediation-s9_2qfi6.js → stuck-remediation-Wt0UVvu1.js} +1 -1
- package/server/{stuck-remediation-DYuPRYYw.js → stuck-remediation-mkLC6G_t.js} +79 -22
- package/server/{substrate-bug-weights-service-B-FwCs5V.js → substrate-bug-weights-service-XfLAKnmK.js} +3 -3
- package/server/{summary-fork-DpcxN9tf.js → summary-fork-CD7GOts0.js} +2 -2
- package/server/{summary-fork-D1RAk9rJ.js → summary-fork-xiXBnWG9.js} +8 -8
- package/server/supervisor/{injection-budget-Csw5tqfJ.js → injection-budget-B5SbvDx2.js} +1 -1
- package/server/supervisor/{paths-DehGY2Fj.js → paths-K3noE4N_.js} +1 -1
- package/server/supervisor/pty-supervisor.js +49 -3
- package/server/supervisor/{pty-token-x-ea28Us.js → pty-token-B7lp0ElT.js} +2 -2
- package/server/{supervisor-wM4ooB5O.js → supervisor-DL788vos.js} +3 -3
- package/server/supervisor-UWiQNK-y.js +2 -0
- package/server/{swarm-readiness-DlP_UjHq.js → swarm-readiness-BV14DF5N.js} +3 -3
- package/server/{system-prerequisites-DUDj1YHf.js → system-prerequisites-pdWG6ZQs.js} +2 -2
- package/server/{teardown-workspace-DeTTImn-.js → teardown-workspace-l2F4_zim.js} +15 -16
- package/server/{test-agent-queue-MbxX5vqq.js → test-agent-queue-qakFIIGz.js} +6 -6
- package/server/{test-verdict-bWYBtqBg.js → test-verdict-BJYDggMm.js} +1 -1
- package/server/{test-verdict-gscuksPv.js → test-verdict-Gw-btEfb.js} +1 -1
- package/server/{tldr-daemon-BYFkts95.js → tldr-daemon-BKOYB616.js} +1 -1
- package/server/{tldr-daemon-C-69c3OI.js → tldr-daemon-CBaWkV9k.js} +2 -2
- package/server/{tmux-R7N7y-Mh.js → tmux-B1Wbxz5o.js} +3 -3
- package/server/{tmux-B6z7h_vZ.js → tmux-DQ6jB76i.js} +1 -1
- package/server/{launcher-generator-BBWG_SiS.js → tmux-dedup-DbN6MGzM.js} +428 -9
- package/server/{token-BK6t8BIT.js → token-Cxbk023d.js} +2 -2
- package/server/{token-util-DxXu-vd1.js → token-util-CLq2MmQt.js} +1 -1
- package/server/token-util-zlz9U0ki.js +3 -0
- package/server/{tracker-config-G6latr8C.js → tracker-config-DZ8Zn2nQ.js} +2 -2
- package/server/{tracker-utils-DHv5pSDT.js → tracker-utils-L0FKtjq2.js} +3 -3
- package/server/{traefik-connect-Df2uXPsQ.js → traefik-connect-bNX6jKkb.js} +1 -1
- package/server/{tunnel-CDVKJpRv.js → tunnel-BAm1XgjG.js} +3 -3
- package/server/{tunnel-DGdUkGoZ.js → tunnel-CjSnHdTc.js} +1 -1
- package/server/{types-5M0lupud.js → types-q67TYYg5.js} +1 -1
- package/server/uat-promote-verification-CKB9ZrKC.js +92 -0
- package/server/uat-train-Cu-4nvbf.js +2 -0
- package/server/uat-train-D5UjcyAa.js +0 -0
- package/server/{validate-IfDGkaVR.js → validate-Cxsx5Uz1.js} +8 -6
- package/server/{validation-CC9OPqJZ.js → validation-DEaTZafj.js} +1 -1
- package/server/{validation-Dw1pzDzr.js → validation-VZgJxmqc.js} +4 -4
- package/server/{verification-artifact-B3itKTxu.js → verification-artifact-C85cRTc_.js} +1 -1
- package/server/{verification-artifact-TVFSz_q1.js → verification-artifact-g3yuxQDL.js} +1 -1
- package/server/{verification-runner-BW4HOKAz.js → verification-runner-DlZI8yhw.js} +1 -1
- package/server/{verification-runner-CkgX6EtI.js → verification-runner-KDZIsBj4.js} +40 -18
- package/server/{vtt-parser-DYPbKcIJ.js → vtt-parser-Jr94BF3Y.js} +1 -1
- package/server/{work-agent-prompt-Du8Vh2aJ.js → work-agent-prompt-C-vuP3_J.js} +20 -9
- package/server/workflows-CHrx_hcW.js +2 -0
- package/server/{workflows-mbQzh6mQ.js → workflows-D0oip4eV.js} +161 -78
- package/server/{workspace--8tnhDI0.js → workspace-BqFg__wH.js} +1 -1
- package/server/{workspace-BPUws1-_.js → workspace-C0fH3aek.js} +3 -3
- package/server/workspace-anchor-drift-B4gMRHl4.js +3 -0
- package/server/workspace-anchor-drift-CZKofakh.js +224 -0
- package/server/{workspace-config-CIVWZOQr.js → workspace-config-B123aZl-.js} +1 -1
- package/server/workspace-manager-CDTKjjdU.js +3 -0
- package/server/{workspace-manager-CBhNdzE4.js → workspace-manager-CwO-Hek7.js} +156 -117
- package/server/{workspace-metadata-_WygnyoX.js → workspace-metadata-CQv00QwK.js} +2 -2
- package/server/{workspace-metadata-BzHnwwX4.js → workspace-metadata-D4M8BM4W.js} +1 -1
- package/server/{workspaces-Do_9J0LQ.js → workspaces-j1e_6aAT.js} +719 -292
- 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-peer-review/SKILL.md +195 -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/agents-wi9NWzs2.js +0 -3
- package/server/archive-planning-BZDgzoEj.js +0 -3
- package/server/cli-B86rejVV.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/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/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/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/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
|
@@ -0,0 +1,462 @@
|
|
|
1
|
+
import { Gn as init_projects, Mn as findProjectByPathSync, Rn as getProjectSwarmHotspots, ar as resolveProjectFromIssueSync } from "./config-yaml-CmOPzmBb.js";
|
|
2
|
+
import { _ as mergeGateEligibility, f as init_review_status, m as loadReviewStatuses, u as getReviewStatusSync } from "./review-status-yljtTd-q.js";
|
|
3
|
+
import { n as resolveGitHubIssueSync, t as init_tracker_utils } from "./tracker-utils-L0FKtjq2.js";
|
|
4
|
+
import { l as init_dag, r as compileGlob } from "./dag-ombYYt4s.js";
|
|
5
|
+
import { n as computeIssueFootprint, r as init_swarm_readiness } from "./swarm-readiness-BV14DF5N.js";
|
|
6
|
+
import { c as classifyIssue, h as isAutoPickable, m as init_pickup } from "./pickup-D8xtG1J2.js";
|
|
7
|
+
import { Effect } from "effect";
|
|
8
|
+
import { ChildProcess, ChildProcessSpawner } from "effect/unstable/process";
|
|
9
|
+
//#region ../../lib/flywheel-merge-order.ts
|
|
10
|
+
init_review_status();
|
|
11
|
+
init_tracker_utils();
|
|
12
|
+
init_pickup();
|
|
13
|
+
init_dag();
|
|
14
|
+
init_swarm_readiness();
|
|
15
|
+
init_projects();
|
|
16
|
+
function issueNumber(issueId) {
|
|
17
|
+
const match = issueId.match(/\d+$/);
|
|
18
|
+
return match ? parseInt(match[0], 10) : 0;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* PAN-1691 conflict-aware merge order. Disjoint (no-conflict) items come first
|
|
22
|
+
* so they can batch through in a single verification pass; then conflicting
|
|
23
|
+
* items broadest-file-footprint first, so the remaining cluster members rebase
|
|
24
|
+
* once onto the worst offender instead of repeatedly. Issue number is the
|
|
25
|
+
* stable tiebreak within each tier. Pure — exported for testing.
|
|
26
|
+
*/
|
|
27
|
+
function orderMergeCandidates(items) {
|
|
28
|
+
return [...items].sort((a, b) => {
|
|
29
|
+
const aConf = a.conflictCount > 0 ? 1 : 0;
|
|
30
|
+
const bConf = b.conflictCount > 0 ? 1 : 0;
|
|
31
|
+
if (aConf !== bConf) return aConf - bConf;
|
|
32
|
+
if (aConf === 1 && a.footprint !== b.footprint) return b.footprint - a.footprint;
|
|
33
|
+
return issueNumber(a.issueId) - issueNumber(b.issueId);
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* PAN-1691 merge-train plan. Partitions the conflict-aware order into the run of
|
|
38
|
+
* disjoint candidates — which can all merge in a single verification pass — and
|
|
39
|
+
* the conflicting remainder, which must serialize broadest-footprint first.
|
|
40
|
+
* Pure; the executor consumes this once the merge-train flag is enabled.
|
|
41
|
+
*/
|
|
42
|
+
function planMergeTrain(candidates) {
|
|
43
|
+
const ordered = orderMergeCandidates(candidates);
|
|
44
|
+
return {
|
|
45
|
+
batch: ordered.filter((c) => c.conflictCount === 0).map((c) => c.issueId),
|
|
46
|
+
serialize: ordered.filter((c) => c.conflictCount > 0).map((c) => c.issueId),
|
|
47
|
+
order: ordered.map((c) => c.issueId)
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
function declaredIssueFootprint(issueId, doc) {
|
|
51
|
+
return {
|
|
52
|
+
issueId,
|
|
53
|
+
files: computeIssueFootprint(doc),
|
|
54
|
+
source: "declared"
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
function pathMatchesAnyCompiled(filePath, patterns) {
|
|
58
|
+
return patterns.some((pattern) => pattern.regex.test(filePath) || pattern.exactDirectory === filePath);
|
|
59
|
+
}
|
|
60
|
+
function normalizedFootprintFiles(files, hotspots) {
|
|
61
|
+
const normalized = /* @__PURE__ */ new Set();
|
|
62
|
+
for (const file of files) {
|
|
63
|
+
if (!file || pathMatchesAnyCompiled(file, hotspots)) continue;
|
|
64
|
+
normalized.add(file);
|
|
65
|
+
}
|
|
66
|
+
return normalized;
|
|
67
|
+
}
|
|
68
|
+
function sourcePriority(source) {
|
|
69
|
+
return source === "actual" ? 2 : 1;
|
|
70
|
+
}
|
|
71
|
+
function computePredictedConflictSignals(footprints, options = {}) {
|
|
72
|
+
const hotspots = (options.hotspots ?? []).map(compileGlob);
|
|
73
|
+
const byIssue = /* @__PURE__ */ new Map();
|
|
74
|
+
for (const footprint of footprints) {
|
|
75
|
+
const files = normalizedFootprintFiles(footprint.files, hotspots);
|
|
76
|
+
const current = byIssue.get(footprint.issueId);
|
|
77
|
+
if (!current || sourcePriority(footprint.source) > sourcePriority(current.source)) {
|
|
78
|
+
byIssue.set(footprint.issueId, {
|
|
79
|
+
issueId: footprint.issueId,
|
|
80
|
+
source: footprint.source,
|
|
81
|
+
files
|
|
82
|
+
});
|
|
83
|
+
continue;
|
|
84
|
+
}
|
|
85
|
+
if (sourcePriority(footprint.source) === sourcePriority(current.source)) for (const file of files) current.files.add(file);
|
|
86
|
+
}
|
|
87
|
+
const conflictsMap = /* @__PURE__ */ new Map();
|
|
88
|
+
const entries = Array.from(byIssue.values());
|
|
89
|
+
for (let i = 0; i < entries.length; i++) for (let j = i + 1; j < entries.length; j++) {
|
|
90
|
+
const left = entries[i];
|
|
91
|
+
const right = entries[j];
|
|
92
|
+
if (![...left.files].some((file) => right.files.has(file))) continue;
|
|
93
|
+
if (!conflictsMap.has(left.issueId)) conflictsMap.set(left.issueId, /* @__PURE__ */ new Set());
|
|
94
|
+
if (!conflictsMap.has(right.issueId)) conflictsMap.set(right.issueId, /* @__PURE__ */ new Set());
|
|
95
|
+
conflictsMap.get(left.issueId).add(right.issueId);
|
|
96
|
+
conflictsMap.get(right.issueId).add(left.issueId);
|
|
97
|
+
}
|
|
98
|
+
return entries.map((entry) => {
|
|
99
|
+
const conflictsWith = [...conflictsMap.get(entry.issueId) ?? []].sort((a, b) => issueNumber(a) - issueNumber(b));
|
|
100
|
+
return {
|
|
101
|
+
issueId: entry.issueId,
|
|
102
|
+
source: entry.source,
|
|
103
|
+
footprint: entry.files.size,
|
|
104
|
+
conflictCount: conflictsWith.length,
|
|
105
|
+
conflictsWith
|
|
106
|
+
};
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* PAN-1691 on-demand UAT candidate. In auto-merge-OFF mode the disjoint "batch"
|
|
111
|
+
* (everything that can merge together in one verification pass) is bundled onto
|
|
112
|
+
* a single throwaway branch the human UATs in one sitting. Pure — `dateIso` is
|
|
113
|
+
* injected, and it reads the already-computed `batchGroup` off the merge queue.
|
|
114
|
+
*/
|
|
115
|
+
function planUatCandidate(queue, opts) {
|
|
116
|
+
const bundled = queue.filter((i) => i.batchGroup === "batch").map((i) => i.issueId);
|
|
117
|
+
const day = opts.dateIso.slice(0, 10);
|
|
118
|
+
return {
|
|
119
|
+
branchName: `uat/${opts.label ?? "candidate"}-${day}`,
|
|
120
|
+
bundled
|
|
121
|
+
};
|
|
122
|
+
}
|
|
123
|
+
const branchExists = (branch, cwd) => Effect.gen(function* () {
|
|
124
|
+
const spawner = yield* ChildProcessSpawner.ChildProcessSpawner;
|
|
125
|
+
const cmd = ChildProcess.make("git", [
|
|
126
|
+
"rev-parse",
|
|
127
|
+
"--verify",
|
|
128
|
+
branch
|
|
129
|
+
], { cwd });
|
|
130
|
+
return yield* spawner.exitCode(cmd).pipe(Effect.map((code) => code === 0), Effect.orElseSucceed(() => false));
|
|
131
|
+
});
|
|
132
|
+
const changedFilesVsMain = (branch, cwd, base = "main") => Effect.gen(function* () {
|
|
133
|
+
const spawner = yield* ChildProcessSpawner.ChildProcessSpawner;
|
|
134
|
+
const cmd = ChildProcess.make("git", [
|
|
135
|
+
"diff",
|
|
136
|
+
"--name-only",
|
|
137
|
+
`${base}...${branch}`
|
|
138
|
+
], { cwd });
|
|
139
|
+
return yield* spawner.string(cmd).pipe(Effect.map((stdout) => new Set(stdout.trim().split("\n").filter(Boolean))), Effect.orElseSucceed(() => /* @__PURE__ */ new Set()));
|
|
140
|
+
});
|
|
141
|
+
const MERGE_QUEUE_GIT_CONCURRENCY = 4;
|
|
142
|
+
/** Default eligibility: the issue's review-status record, read synchronously. */
|
|
143
|
+
function reviewRecordEligibility(issueId) {
|
|
144
|
+
return mergeGateEligibility(getReviewStatusSync(issueId.toUpperCase()));
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* Server-side PR URL resolution for merge-queue items: prefer the review
|
|
148
|
+
* status record, fall back to the GitHub repo + PR number — the browser never
|
|
149
|
+
* guesses repo slugs.
|
|
150
|
+
*/
|
|
151
|
+
function resolveMergeQueuePrUrl(item) {
|
|
152
|
+
const issueId = item.issueId.toUpperCase();
|
|
153
|
+
const reviewStatus = getReviewStatusSync(issueId);
|
|
154
|
+
if (reviewStatus?.prUrl) return reviewStatus.prUrl;
|
|
155
|
+
const prNumber = reviewStatus?.prNumber ?? item.pr;
|
|
156
|
+
if (prNumber === void 0) return void 0;
|
|
157
|
+
const githubIssue = resolveGitHubIssueSync(issueId);
|
|
158
|
+
if (!githubIssue.isGitHub) return void 0;
|
|
159
|
+
return `https://github.com/${githubIssue.owner}/${githubIssue.repo}/pull/${prNumber}`;
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* PAN-1696 ready-set-source: List all merge-eligible candidates from review-status DB for a given project.
|
|
163
|
+
* No flywheel run required — sources directly from persistent pipeline state.
|
|
164
|
+
* Returns an array of candidate items compatible with computeMergeQueueFromCandidates.
|
|
165
|
+
*/
|
|
166
|
+
function listEligibleCandidatesByProject(projectRoot) {
|
|
167
|
+
const project = findProjectByPathSync(projectRoot);
|
|
168
|
+
if (!project) return [];
|
|
169
|
+
const candidates = [];
|
|
170
|
+
const allStatuses = loadReviewStatuses();
|
|
171
|
+
for (const [issueId, rs] of Object.entries(allStatuses)) {
|
|
172
|
+
const issueProject = resolveProjectFromIssueSync(issueId);
|
|
173
|
+
if (!issueProject || issueProject.projectPath !== project.path) continue;
|
|
174
|
+
if (rs.deaconIgnored === true) continue;
|
|
175
|
+
if (rs.readyForMerge !== true) continue;
|
|
176
|
+
if (!mergeGateEligibility(rs).eligible) continue;
|
|
177
|
+
candidates.push({
|
|
178
|
+
issueId,
|
|
179
|
+
title: issueId,
|
|
180
|
+
pr: rs.prNumber
|
|
181
|
+
});
|
|
182
|
+
}
|
|
183
|
+
return candidates;
|
|
184
|
+
}
|
|
185
|
+
/**
|
|
186
|
+
* PAN-1696 ready-set-source: Compute merge queue from a pre-filtered candidate list.
|
|
187
|
+
* Accepts candidates from review-status or flywheel pipeline — decouples the source.
|
|
188
|
+
* This refactored version extracts the core conflict-analysis logic from computeMergeQueue.
|
|
189
|
+
*/
|
|
190
|
+
const computeMergeQueueFromCandidates = (candidates, projectRoot, options = {}) => Effect.gen(function* () {
|
|
191
|
+
if (candidates.length === 0) return [];
|
|
192
|
+
const gitConcurrency = Math.max(1, Math.floor(options.gitConcurrency ?? 4));
|
|
193
|
+
const branches = candidates.map((item) => `feature/${item.issueId.toLowerCase()}`);
|
|
194
|
+
const existsFlags = yield* Effect.all(branches.map((branch) => branchExists(branch, projectRoot)), { concurrency: gitConcurrency });
|
|
195
|
+
const existing = candidates.map((item, i) => ({
|
|
196
|
+
item,
|
|
197
|
+
branch: branches[i],
|
|
198
|
+
exists: existsFlags[i]
|
|
199
|
+
})).filter(({ exists }) => exists);
|
|
200
|
+
if (existing.length === 0) return [];
|
|
201
|
+
const fileSets = yield* Effect.all(existing.map(({ branch }) => changedFilesVsMain(branch, projectRoot)), { concurrency: gitConcurrency });
|
|
202
|
+
const hotspots = options.hotspots ?? getProjectSwarmHotspots(findProjectByPathSync(projectRoot));
|
|
203
|
+
const conflictSignals = computePredictedConflictSignals(existing.map((e, i) => ({
|
|
204
|
+
issueId: e.item.issueId,
|
|
205
|
+
source: "actual",
|
|
206
|
+
files: fileSets[i]
|
|
207
|
+
})), { hotspots });
|
|
208
|
+
const signalByIssue = new Map(conflictSignals.map((signal) => [signal.issueId, signal]));
|
|
209
|
+
const conflictsMap = new Map(conflictSignals.map((signal) => [signal.issueId, new Set(signal.conflictsWith)]));
|
|
210
|
+
return orderMergeCandidates(existing.map((e, i) => ({
|
|
211
|
+
item: e.item,
|
|
212
|
+
issueId: e.item.issueId,
|
|
213
|
+
footprint: signalByIssue.get(e.item.issueId)?.footprint ?? fileSets[i].size,
|
|
214
|
+
conflictCount: signalByIssue.get(e.item.issueId)?.conflictCount ?? 0
|
|
215
|
+
}))).map(({ item, conflictCount }, idx) => ({
|
|
216
|
+
issueId: item.issueId,
|
|
217
|
+
title: item.title,
|
|
218
|
+
branchName: `feature/${item.issueId.toLowerCase()}`,
|
|
219
|
+
pr: item.pr,
|
|
220
|
+
prUrl: options.getPrUrl?.(item),
|
|
221
|
+
mergeOrder: idx + 1,
|
|
222
|
+
conflictsWith: [...conflictsMap.get(item.issueId) ?? []],
|
|
223
|
+
batchGroup: conflictCount === 0 ? "batch" : "serialize"
|
|
224
|
+
}));
|
|
225
|
+
});
|
|
226
|
+
/** The `feature/` (or configured) namespace a source branch lives in. */
|
|
227
|
+
function branchNamespace(sourceBranch) {
|
|
228
|
+
const slash = sourceBranch.lastIndexOf("/");
|
|
229
|
+
return slash >= 0 ? sourceBranch.slice(0, slash + 1) : "";
|
|
230
|
+
}
|
|
231
|
+
/**
|
|
232
|
+
* Refresh every feature-branch tracking ref in one repo with ONE remote
|
|
233
|
+
* negotiation, and report whether it succeeded.
|
|
234
|
+
*
|
|
235
|
+
* Three things this must get right, each of which caused a real defect:
|
|
236
|
+
*
|
|
237
|
+
* - **One fetch per repo, not per candidate.** Fetching per candidate/repo pair
|
|
238
|
+
* performs F x R remote negotiations every reconciler minute, which on a
|
|
239
|
+
* large ready set can outrun the interval and hold the project's
|
|
240
|
+
* single-flight slot permanently.
|
|
241
|
+
* - **Force (`+`) the refspec.** Without it a force-with-lease rebase on the
|
|
242
|
+
* feature branch makes the update non-fast-forward, so the fetch fails and
|
|
243
|
+
* the stale tracking ref survives — assembly would then test and promote
|
|
244
|
+
* obsolete code.
|
|
245
|
+
* - **Prune.** A deleted remote branch must drop its tracking ref, or the
|
|
246
|
+
* probe keeps reporting a contribution that no longer exists.
|
|
247
|
+
*
|
|
248
|
+
* Returns false on ANY operational failure (transport, auth, bad repo). The
|
|
249
|
+
* caller must fail closed: a stale ref is indistinguishable from a current one
|
|
250
|
+
* once the fetch is gone, so silently continuing risks assembling old code.
|
|
251
|
+
*/
|
|
252
|
+
const refreshFeatureRefs = (namespaces, cwd) => Effect.gen(function* () {
|
|
253
|
+
if (namespaces.length === 0) return true;
|
|
254
|
+
const spawner = yield* ChildProcessSpawner.ChildProcessSpawner;
|
|
255
|
+
const refspecs = namespaces.map((ns) => `+refs/heads/${ns}*:refs/remotes/origin/${ns}*`);
|
|
256
|
+
const cmd = ChildProcess.make("git", [
|
|
257
|
+
"fetch",
|
|
258
|
+
"--prune",
|
|
259
|
+
"origin",
|
|
260
|
+
...refspecs
|
|
261
|
+
], { cwd });
|
|
262
|
+
return yield* spawner.exitCode(cmd).pipe(Effect.map((code) => Number(code) === 0), Effect.orElseSucceed(() => false));
|
|
263
|
+
});
|
|
264
|
+
/**
|
|
265
|
+
* Origin-first feature-branch probe, matching branchHeadSha in
|
|
266
|
+
* uat-generation-deps.ts: work agents push their branches, so the local ref can
|
|
267
|
+
* lag or be missing entirely in a repo the operator never checked out.
|
|
268
|
+
* Returns the ref that exists, or null when neither does.
|
|
269
|
+
*
|
|
270
|
+
* Purely local — refreshFeatureRefs has already contacted the remote for this
|
|
271
|
+
* repo, so `git rev-parse origin/<branch>` now reads a ref that is known
|
|
272
|
+
* current rather than whatever was cached.
|
|
273
|
+
*/
|
|
274
|
+
const resolveFeatureRef = (branch, repoPath) => Effect.gen(function* () {
|
|
275
|
+
const originRef = `origin/${branch}`;
|
|
276
|
+
if (yield* branchExists(originRef, repoPath)) return originRef;
|
|
277
|
+
if (yield* branchExists(branch, repoPath)) return branch;
|
|
278
|
+
return null;
|
|
279
|
+
});
|
|
280
|
+
/**
|
|
281
|
+
* PAN-3093 polyrepo ready set. The monorepo sibling
|
|
282
|
+
* (computeMergeQueueFromCandidates) derives one `feature/<issue>` branch and
|
|
283
|
+
* runs git against one project root; a polyrepo candidate instead contributes
|
|
284
|
+
* to some subset of the project's member repos, and only those repos with a
|
|
285
|
+
* real feature branch belong in the generation.
|
|
286
|
+
*
|
|
287
|
+
* Conflict prediction runs over the union of each candidate's per-repo changed
|
|
288
|
+
* files, prefixed `<repoKey>:` so the same path in two repos cannot read as an
|
|
289
|
+
* overlap. Hotspot globs are applied per repo BEFORE prefixing — a glob like
|
|
290
|
+
* `package.json` would never match `fe:package.json`.
|
|
291
|
+
*/
|
|
292
|
+
const computePolyrepoMergeQueueFromCandidates = (candidates, reposByIssue, projectRoot, options = {}) => Effect.gen(function* () {
|
|
293
|
+
if (candidates.length === 0) return [];
|
|
294
|
+
const gitConcurrency = Math.max(1, Math.floor(options.gitConcurrency ?? 4));
|
|
295
|
+
const perCandidate = candidates.map((item) => {
|
|
296
|
+
const configured = reposByIssue.get(item.issueId) ?? [];
|
|
297
|
+
return {
|
|
298
|
+
item,
|
|
299
|
+
configured,
|
|
300
|
+
repos: configured.filter((repo) => repo.required),
|
|
301
|
+
readOnlySkipped: configured.filter((repo) => !repo.required)
|
|
302
|
+
};
|
|
303
|
+
});
|
|
304
|
+
const namespacesByRepo = /* @__PURE__ */ new Map();
|
|
305
|
+
for (const entry of perCandidate) for (const repo of entry.repos) {
|
|
306
|
+
const existing = namespacesByRepo.get(repo.repoPath) ?? {
|
|
307
|
+
repoPath: repo.repoPath,
|
|
308
|
+
namespaces: /* @__PURE__ */ new Set()
|
|
309
|
+
};
|
|
310
|
+
existing.namespaces.add(branchNamespace(repo.sourceBranch));
|
|
311
|
+
namespacesByRepo.set(repo.repoPath, existing);
|
|
312
|
+
}
|
|
313
|
+
const refreshResults = yield* Effect.all([...namespacesByRepo.values()].map(({ repoPath, namespaces }) => refreshFeatureRefs([...namespaces], repoPath).pipe(Effect.map((ok) => ({
|
|
314
|
+
repoPath,
|
|
315
|
+
ok
|
|
316
|
+
})))), { concurrency: gitConcurrency });
|
|
317
|
+
const staleRepoPaths = new Set(refreshResults.filter((r) => !r.ok).map((r) => r.repoPath));
|
|
318
|
+
if (staleRepoPaths.size > 0) options.onRefreshUnavailable?.([...staleRepoPaths]);
|
|
319
|
+
const probeJobs = perCandidate.flatMap((entry, candidateIndex) => entry.repos.filter((repo) => !staleRepoPaths.has(repo.repoPath)).map((repo) => ({
|
|
320
|
+
candidateIndex,
|
|
321
|
+
repo
|
|
322
|
+
})));
|
|
323
|
+
const probeResults = yield* Effect.all(probeJobs.map(({ candidateIndex, repo }) => resolveFeatureRef(repo.sourceBranch, repo.repoPath).pipe(Effect.map((ref) => ({
|
|
324
|
+
candidateIndex,
|
|
325
|
+
repo,
|
|
326
|
+
ref
|
|
327
|
+
})))), { concurrency: gitConcurrency });
|
|
328
|
+
const foundByCandidate = perCandidate.map(() => []);
|
|
329
|
+
for (const { candidateIndex, repo, ref } of probeResults) if (ref !== null) foundByCandidate[candidateIndex].push({
|
|
330
|
+
repo,
|
|
331
|
+
ref
|
|
332
|
+
});
|
|
333
|
+
const resolved = perCandidate.map((entry, candidateIndex) => {
|
|
334
|
+
const found = [...foundByCandidate[candidateIndex]].sort((a, b) => a.repo.mergeOrder - b.repo.mergeOrder || a.repo.repoKey.localeCompare(b.repo.repoKey));
|
|
335
|
+
return {
|
|
336
|
+
...entry,
|
|
337
|
+
contributions: found.map(({ repo }) => ({
|
|
338
|
+
repoKey: repo.repoKey,
|
|
339
|
+
repoPath: repo.repoPath,
|
|
340
|
+
branch: repo.sourceBranch,
|
|
341
|
+
targetBranch: repo.targetBranch,
|
|
342
|
+
mergeOrder: repo.mergeOrder
|
|
343
|
+
})),
|
|
344
|
+
diffRefs: found.map(({ ref }) => ref)
|
|
345
|
+
};
|
|
346
|
+
});
|
|
347
|
+
const contributing = [];
|
|
348
|
+
for (const entry of resolved) {
|
|
349
|
+
const unrefreshed = entry.repos.filter((repo) => staleRepoPaths.has(repo.repoPath));
|
|
350
|
+
if (unrefreshed.length > 0) {
|
|
351
|
+
options.onExcluded?.(entry.item.issueId, `could not refresh feature refs in ${unrefreshed.map((r) => r.repoKey).join(", ")} — excluding rather than risk assembling stale code`);
|
|
352
|
+
continue;
|
|
353
|
+
}
|
|
354
|
+
if (entry.contributions.length === 0) {
|
|
355
|
+
const readOnlyNote = entry.readOnlySkipped.length > 0 ? ` (${entry.readOnlySkipped.map((r) => r.repoKey).join(", ")} excluded as read-only)` : "";
|
|
356
|
+
options.onExcluded?.(entry.item.issueId, entry.repos.length === 0 ? `no writable member repos resolved for this issue${readOnlyNote}` : `no feature branch in any of ${entry.repos.length} writable member repo(s): ${entry.repos.map((r) => r.repoKey).join(", ")}${readOnlyNote}`);
|
|
357
|
+
continue;
|
|
358
|
+
}
|
|
359
|
+
contributing.push({
|
|
360
|
+
item: entry.item,
|
|
361
|
+
contributions: entry.contributions,
|
|
362
|
+
diffRefs: entry.diffRefs
|
|
363
|
+
});
|
|
364
|
+
}
|
|
365
|
+
if (contributing.length === 0) return [];
|
|
366
|
+
const hotspots = (options.hotspots ?? getProjectSwarmHotspots(findProjectByPathSync(projectRoot))).map(compileGlob);
|
|
367
|
+
const diffJobs = contributing.flatMap(({ contributions, diffRefs }, candidateIndex) => contributions.map((c, repoIndex) => ({
|
|
368
|
+
candidateIndex,
|
|
369
|
+
contribution: c,
|
|
370
|
+
ref: diffRefs[repoIndex]
|
|
371
|
+
})));
|
|
372
|
+
const diffResults = yield* Effect.all(diffJobs.map(({ candidateIndex, contribution, ref }) => changedFilesVsMain(ref, contribution.repoPath, contribution.targetBranch).pipe(Effect.map((files) => ({
|
|
373
|
+
candidateIndex,
|
|
374
|
+
files: [...normalizedFootprintFiles(files, hotspots)].map((f) => `${contribution.repoKey}:${f}`)
|
|
375
|
+
})))), { concurrency: gitConcurrency });
|
|
376
|
+
const fileSets = contributing.map(() => /* @__PURE__ */ new Set());
|
|
377
|
+
for (const { candidateIndex, files } of diffResults) for (const file of files) fileSets[candidateIndex].add(file);
|
|
378
|
+
const conflictSignals = computePredictedConflictSignals(contributing.map((c, i) => ({
|
|
379
|
+
issueId: c.item.issueId,
|
|
380
|
+
source: "actual",
|
|
381
|
+
files: fileSets[i]
|
|
382
|
+
})));
|
|
383
|
+
const signalByIssue = new Map(conflictSignals.map((signal) => [signal.issueId, signal]));
|
|
384
|
+
const conflictsMap = new Map(conflictSignals.map((signal) => [signal.issueId, new Set(signal.conflictsWith)]));
|
|
385
|
+
return orderMergeCandidates(contributing.map((c, i) => ({
|
|
386
|
+
item: c.item,
|
|
387
|
+
contributions: c.contributions,
|
|
388
|
+
issueId: c.item.issueId,
|
|
389
|
+
footprint: signalByIssue.get(c.item.issueId)?.footprint ?? fileSets[i].size,
|
|
390
|
+
conflictCount: signalByIssue.get(c.item.issueId)?.conflictCount ?? 0
|
|
391
|
+
}))).map(({ item, contributions, conflictCount }, idx) => ({
|
|
392
|
+
issueId: item.issueId,
|
|
393
|
+
title: item.title,
|
|
394
|
+
branchName: `feature/${item.issueId.toLowerCase()}`,
|
|
395
|
+
pr: item.pr,
|
|
396
|
+
prUrl: options.getPrUrl?.(item),
|
|
397
|
+
mergeOrder: idx + 1,
|
|
398
|
+
conflictsWith: [...conflictsMap.get(item.issueId) ?? []],
|
|
399
|
+
batchGroup: conflictCount === 0 ? "batch" : "serialize",
|
|
400
|
+
repoContributions: contributions
|
|
401
|
+
}));
|
|
402
|
+
});
|
|
403
|
+
/**
|
|
404
|
+
* PAN-1866: Pick the highest-ranked eligible issue from a sequence node list.
|
|
405
|
+
*
|
|
406
|
+
* Eligibility rules:
|
|
407
|
+
* - gate must not be 'blocked' (the `vetoed` pickup state)
|
|
408
|
+
* - no `vetoed` label — an absolute operator hard-stop (PAN-2006)
|
|
409
|
+
* - not in-pipeline (active review/work/test)
|
|
410
|
+
* - no parked labels (`parked`; legacy `needs-design`/`needs-discussion`)
|
|
411
|
+
* - not in the optional exclusion set (e.g. already running agents)
|
|
412
|
+
* - FR-14: must have an xBRIEF spec (ready) or a PRD draft (hasPrd)
|
|
413
|
+
*
|
|
414
|
+
* Returns null when no eligible issue is found.
|
|
415
|
+
*/
|
|
416
|
+
function pickFromSequence(nodes, opts) {
|
|
417
|
+
const lookups = {
|
|
418
|
+
labels: opts?.issueLabels ?? (() => []),
|
|
419
|
+
isPlanned: opts?.isReadyOrHasPrd ?? (() => true),
|
|
420
|
+
isInPipeline: (issueId) => {
|
|
421
|
+
const reviewStatus = getReviewStatusSync(issueId.toUpperCase());
|
|
422
|
+
return reviewStatus !== null && reviewStatus.reviewStatus !== "pending" || (opts?.isInPipeline?.(issueId) ?? false);
|
|
423
|
+
}
|
|
424
|
+
};
|
|
425
|
+
const signalByIssue = new Map((opts?.predictedConflictSignals ?? []).map((signal) => [signal.issueId.toUpperCase(), signal]));
|
|
426
|
+
const eligible = [...nodes].sort((a, b) => a.rank - b.rank).filter((node) => {
|
|
427
|
+
const state = classifyIssue(node, lookups);
|
|
428
|
+
const activeBookMember = opts?.activeBookMembership?.has(node.issue.toUpperCase()) ?? false;
|
|
429
|
+
if (!isAutoPickable(opts?.requireReady ? state : {
|
|
430
|
+
...state,
|
|
431
|
+
ready: true
|
|
432
|
+
}, opts?.autoPickupBacklog ?? false, activeBookMember)) return false;
|
|
433
|
+
if (opts?.excludeIssueIds?.has(node.issue)) return false;
|
|
434
|
+
if (opts?.isAuthorizedIssue && !opts.isAuthorizedIssue(node.issue)) return false;
|
|
435
|
+
return true;
|
|
436
|
+
});
|
|
437
|
+
if (signalByIssue.size > 0) eligible.sort((a, b) => {
|
|
438
|
+
const aSignal = signalByIssue.get(a.issue.toUpperCase());
|
|
439
|
+
const bSignal = signalByIssue.get(b.issue.toUpperCase());
|
|
440
|
+
const aConflicts = aSignal?.conflictCount ?? 0;
|
|
441
|
+
const bConflicts = bSignal?.conflictCount ?? 0;
|
|
442
|
+
if (aConflicts !== bConflicts) return aConflicts - bConflicts;
|
|
443
|
+
return a.rank - b.rank;
|
|
444
|
+
});
|
|
445
|
+
for (const node of eligible) {
|
|
446
|
+
classifyIssue(node, lookups);
|
|
447
|
+
const signal = signalByIssue.get(node.issue.toUpperCase());
|
|
448
|
+
return {
|
|
449
|
+
issueId: node.issue,
|
|
450
|
+
rank: node.rank,
|
|
451
|
+
gate: node.gate,
|
|
452
|
+
planning: node.planning,
|
|
453
|
+
predictedConflictCount: signal?.conflictCount,
|
|
454
|
+
predictedConflictsWith: signal?.conflictsWith
|
|
455
|
+
};
|
|
456
|
+
}
|
|
457
|
+
return null;
|
|
458
|
+
}
|
|
459
|
+
//#endregion
|
|
460
|
+
export { computePredictedConflictSignals as a, orderMergeCandidates as c, planUatCandidate as d, resolveMergeQueuePrUrl as f, computePolyrepoMergeQueueFromCandidates as i, pickFromSequence as l, changedFilesVsMain as n, declaredIssueFootprint as o, reviewRecordEligibility as p, computeMergeQueueFromCandidates as r, listEligibleCandidatesByProject as s, MERGE_QUEUE_GIT_CONCURRENCY as t, planMergeTrain as u };
|
|
461
|
+
|
|
462
|
+
//# sourceMappingURL=flywheel-merge-order-BJv1DZz1.js.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import { a as computePredictedConflictSignals, c as orderMergeCandidates, d as planUatCandidate, f as resolveMergeQueuePrUrl, i as computePolyrepoMergeQueueFromCandidates, l as pickFromSequence, n as changedFilesVsMain, o as declaredIssueFootprint, p as reviewRecordEligibility, r as computeMergeQueueFromCandidates, s as listEligibleCandidatesByProject, t as MERGE_QUEUE_GIT_CONCURRENCY, u as planMergeTrain } from "./flywheel-merge-order-BJv1DZz1.js";
|
|
2
|
+
export { MERGE_QUEUE_GIT_CONCURRENCY, changedFilesVsMain, computeMergeQueueFromCandidates, computePolyrepoMergeQueueFromCandidates, computePredictedConflictSignals, declaredIssueFootprint, listEligibleCandidatesByProject, orderMergeCandidates, pickFromSequence, planMergeTrain, planUatCandidate, resolveMergeQueuePrUrl, reviewRecordEligibility };
|