@overdeck/desktop 0.45.23 → 0.46.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/drizzle/overdeck/0000_overdeck_init.sql +34 -0
- package/package.json +1 -1
- package/server/{acceptance-criteria-DOA0KgXx.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-BBu6DSNm.js → advancing-selfheal-De1L-Sb4.js} +6 -6
- package/server/{agent-gc-BV1q_2EV.js → agent-gc-CBULruzm.js} +5 -5
- package/server/agent-state-VQk8fY9F.js +3 -0
- package/server/{agent-state-service-HoK8U4jW.js → agent-state-service-BlnSkRFA.js} +5 -5
- package/server/{agent-state-service-CnzFKSAQ.js → agent-state-service-hZpxIw1E.js} +1 -1
- package/server/agents-BKKkxKgK.js +3 -0
- package/server/{agents-B4Bjbkfv.js → agents-C5rWYhb6.js} +4 -4
- package/server/archive-planning-0FJ6Xd3b.js +2 -0
- package/server/{archive-planning-DYrYojxl.js → archive-planning-C0lAbNB_.js} +16 -24
- package/server/{artifact-index-jobs-C-xy7Z5v.js → artifact-index-jobs-ug6ZxIP5.js} +2 -2
- package/server/assemble-DnffNpOo.js +339 -0
- package/server/{backlog-auto-trigger-GtG71X8H.js → backlog-auto-trigger-Dh-i9PQf.js} +3 -3
- package/server/{behavior-B_-4EKF3.js → behavior-CfIg6pKp.js} +2 -2
- package/server/bridge-pool-patrol-CUFmjVDN.js +136 -0
- package/server/{briefing-freshness-DWdW7vUm.js → briefing-freshness-DHmCSLar.js} +2 -2
- package/server/{build-info-DgTqZkL5.js → build-info-BP160gU7.js} +1 -1
- package/server/{build-info-BT096lEl.js → build-info-CuFfxZxp.js} +5 -3
- package/server/{checkpoint-manager-DDqcGyu8.js → checkpoint-manager-DEWD82qK.js} +2 -2
- package/server/{checkpoint-manager-B7Bt29J0.js → checkpoint-manager-Dxh0FYsv.js} +1 -1
- package/server/checkpoint-worker.js +1 -1
- package/server/{checkpoints-C-AXLfYT.js → checkpoints-CZvbtLnr.js} +2 -2
- package/server/{checkpoints-CpgCjAlN.js → checkpoints-DMTgXuLG.js} +1 -1
- package/server/{claude-hooks-provision-C8wdRnN1.js → claude-hooks-provision-CN-xo-do.js} +1 -1
- package/server/{claude-hooks-provision-but-_qGY.js → claude-hooks-provision-fvy4RD2b.js} +13 -2
- package/server/{claude-permissions-H_5wHQZQ.js → claude-permissions-CN0cSCPp.js} +2 -2
- package/server/{claude-settings-overlay-CbSz0Dvb.js → claude-settings-overlay-CJn35FHQ.js} +2 -2
- package/server/{claude-settings-overlay-BTENVmYf.js → claude-settings-overlay-Dabi9slj.js} +1 -1
- package/server/cli-DmXETsw-.js +3 -0
- package/server/{cli-vBeXbPrq.js → cli-oCWYA1pE.js} +9 -9
- package/server/{cliproxy-Bgb2XCqi.js → cliproxy-C8mB3KuB.js} +2 -2
- package/server/{cliproxy-DW0V86F8.js → cliproxy-PGwTX_o8.js} +1 -1
- package/server/{close-issue-Dn_4c4G8.js → close-issue-D5MF5GqF.js} +5 -5
- package/server/{closed-issue-reaper-CWpY2uBw.js → closed-issue-reaper-CJ24u0Zt.js} +1 -1
- package/server/{closed-issue-reaper-hANY_ehE.js → closed-issue-reaper-Cltx86x5.js} +37 -16
- package/server/{codex-Dg7Is5yb.js → codex-BdEsUFWh.js} +1 -1
- package/server/{codex-TmSi-yTv.js → codex-Drlf5Xhf.js} +37 -8
- package/server/{codex-parser-C4gSH-IR.js → codex-parser-DpB89Vqa.js} +2 -2
- package/server/compaction-continuation-K2AxQX4H.js +200 -0
- package/server/{config-DjLOdbgT.js → config-B2IMcBxx.js} +4 -3
- package/server/{config-DUIhMN_T.js → config-DV-grfQc.js} +1 -1
- package/server/{config-CCvjQf27.js → config-Dr3pW6w6.js} +2 -2
- package/server/{config-yaml-DvyMuOle.js → config-yaml-CmOPzmBb.js} +290 -22
- package/server/{conflict-gate-CmrYpa47.js → conflict-gate-B9cN3SBi.js} +4 -4
- package/server/{conflict-gate-BSJkNTdp.js → conflict-gate-Dh754uyA.js} +1 -1
- package/server/context-layers-D6LZo3l1.js +4 -0
- package/server/context-layers-dR5YxHYB.js +37 -0
- package/server/{control-settings-aP1ANIlI.js → control-settings-C7DUehE1.js} +49 -19
- package/server/{conversation-compaction-CNbTLB86.js → conversation-compaction-BoqdDXWF.js} +8 -8
- package/server/{conversation-compaction-DiG5zWQq.js → conversation-compaction-Dj4FAKoZ.js} +1 -1
- package/server/{conversation-service-Du-MTNpJ.js → conversation-service-5aCnq1zR.js} +331 -20
- package/server/conversation-service-BCxl4f8Z.js +3 -0
- package/server/{conversations-DbOs1e9Q.js → conversations-BUpYsOZg.js} +5 -5
- package/server/{conversations-6mPANqvL.js → conversations-C34dyIb9.js} +1 -1
- package/server/{cost-Ca0YTWDw.js → cost-Bgcub5kW.js} +12 -2
- package/server/{cost-CW4WSe72.js → cost-CvxRrucd.js} +3 -3
- package/server/{cost-sync-C0VdGme1.js → cost-sync-Dv3LUaNW.js} +3 -3
- package/server/{dag-CdOjJVDT.js → dag-ombYYt4s.js} +2 -2
- package/server/{dangerous-git-ops-CT-IypG3.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-pRnyD5w9.js → deacon-hi9KLPLT.js} +2998 -2659
- package/server/{deacon-nudge-log-Bjg8U4Y9.js → deacon-nudge-log-BNBebzeL.js} +3 -3
- package/server/deacon-pending-lifecycle-Cpk0k7Hi.js +33 -0
- package/server/{deacon-swarm-DftYRDo8.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-Bjsho_ha.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-DeP_OIRk.js → deploy-window-rpqpWqHA.js} +40 -16
- package/server/{dev-supervisor-BpMoHlkR.js → dev-supervisor-CC46Ig8q.js} +2 -2
- package/server/{devcontainer-renderer-CtUgrVKW.js → devcontainer-renderer-68CSCRnu.js} +3 -3
- package/server/{dist-DyRx4cI7.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-BK7HIcBj.js → docker-Dam7mbIB.js} +2 -2
- package/server/{dod-BrSfUHm0.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-DseivYEy.js → ensure-devcontainer-B057YA81.js} +4 -4
- package/server/{ensure-devcontainer-DRqaAkBR.js → ensure-devcontainer-C98V8yW-.js} +1 -1
- package/server/{esm-shims-CbI3BVkl.js → esm-shims-Br9BPdkR.js} +1 -1
- package/server/{event-store-Cr5PQwFC.js → event-store-ELqkVOn0.js} +1 -1
- package/server/{event-store-tdiY5eDZ.js → event-store-zY5MJHgF.js} +23 -4
- package/server/{events-CvvGK6LT.js → events-D6pyqhzM.js} +1 -1
- package/server/{events-CC1dgUpx.js → events-D9PR1IC0.js} +3 -3
- package/server/{factory-CynerjXO.js → factory-CRoOpGsF.js} +5 -5
- package/server/{feature-registry-population-B0pmAz0a.js → feature-registry-population--YUXU999.js} +4 -4
- package/server/{feature-registry-storage-_wUBRD3J.js → feature-registry-storage-BORBTo0y.js} +2 -2
- package/server/{features-Dhxz-wLc.js → features--nFkJY8v.js} +2 -2
- package/server/{feedback-target-iygZwmMc.js → feedback-target-C0ZzyHvU.js} +1 -1
- package/server/{feedback-target-CPS15Vte.js → feedback-target-Dt9BsapX.js} +8 -8
- package/server/{feedback-writer-C9b6ccN1.js → feedback-writer-BG0RUZiu.js} +5 -5
- package/server/{feedback-writer-qmiMbqTZ.js → feedback-writer-D1fm-5Z8.js} +1 -1
- package/server/flywheel-BekukH4i.js +2 -0
- package/server/flywheel-BiT3odRb.js +1092 -0
- package/server/flywheel-CLVB55Be.js +478 -0
- 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-CJ_aH5jD.js → from-D_4_dk7i.js} +1 -1
- package/server/{fts-db-CKgg0VKg.js → fts-db-BeOomFa-.js} +2 -2
- package/server/{fts-operations-BrL_VTRr.js → fts-operations-BdewJ_g9.js} +2 -2
- package/server/git-utils-CI6cwyyC.js +3 -0
- package/server/{git-utils-BVa07a4a.js → git-utils-ameCgDdy.js} +93 -3
- package/server/{github-app-CMBdIFBQ.js → github-app-CQ1Lo6LA.js} +19 -8
- package/server/{github-app-CPfoFAdV.js → github-app-DtAsvwzK.js} +1 -1
- package/server/{github-client--XVlDpwM.js → github-client-BfyDxuRN.js} +2 -2
- package/server/{github-client-B4QsdE-X.js → github-client-Cj0yl_07.js} +1 -1
- package/server/github-pr-lookup-BDq6Wznz.js +58 -0
- package/server/{harness-binary-CVio2m-u.js → harness-binary-DqkftwTb.js} +32 -6
- package/server/{harness-resolve-qHJBhy3Z.js → harness-resolve-CqMqM1Mb.js} +18 -9
- package/server/{health-events-C9B8y1Hm.js → health-events-CazRxJUS.js} +2 -2
- package/server/{health-events-CpfvuVmm.js → health-events-_xfTaOUs.js} +1 -1
- package/server/{hooks-DUXw8A0-.js → hooks-BO3QT1sn.js} +2 -2
- package/server/{hooks-ltecuFqZ.js → hooks-BnJsxlSq.js} +1 -1
- package/server/{hume-BEq0bUDg.js → hume-CDYJxqx-.js} +2 -2
- package/server/hume-Dq--7rOQ.js +3 -0
- package/server/{idle-stack-reaper-D7w9t3fE.js → idle-stack-reaper-BYqERdkE.js} +1 -1
- package/server/{idle-stack-reaper-w1ISSlhs.js → idle-stack-reaper-CnGx_PO_.js} +99 -6
- package/server/in-flight-guard-Bq3epG58.js +45 -0
- package/server/{infra-CzaSOgul.js → infra-BjuxvjdS.js} +80 -5
- package/server/{injection-oNZeoDhL.js → injection-DZxlV2al.js} +1 -1
- package/server/{injection-DZ0PfYa4.js → injection-UCf8EsjX.js} +191 -183
- package/server/{inspect-agent-DJKLWcVT.js → inspect-agent-6kylZnrm.js} +139 -82
- package/server/inspect-agent-BVwDrVrz.js +2 -0
- package/server/{internal-token-Bb4XeV2x.js → internal-token-DvMTQSOS.js} +2 -2
- package/server/{internal-token-DXdfprGr.js → internal-token-M9omeXM1.js} +1 -1
- package/server/{io-B3_AHDfr.js → io-VHvc0Ssp.js} +43 -26
- package/server/{issue-closed-zhdvQicO.js → issue-closed-B6KJkmHZ.js} +7 -7
- package/server/{issue-lifecycle-Dy4vd0Oa.js → issue-lifecycle-9gk3fnXN.js} +1 -1
- package/server/{issue-lifecycle-CreaCkjW.js → issue-lifecycle-C4Zj0WmE.js} +34 -28
- package/server/{issue-service-singleton-B5ushCvE.js → issue-service-singleton-DmCh7EHj.js} +10 -10
- package/server/{issue-service-singleton-DabvBWUp.js → issue-service-singleton-PMx8F1jr.js} +1 -1
- package/server/{issues-B6ToV6x1.js → issues-CgnQ1OGQ.js} +2 -2
- package/server/{jsonl-parser-Dhflo1SH.js → jsonl-parser-DJOH_O-w.js} +5 -4
- package/server/{label-cleanup-BKPJm4Hv.js → label-cleanup-Dv7AV_R1.js} +3 -3
- package/server/{label-reconciler-DdWbHEBu.js → label-reconciler--F85rufp.js} +4 -4
- package/server/{lifecycle-DfeyBDwA.js → lifecycle-CTdOWYMi.js} +2 -2
- package/server/{lifecycle-sycO16hj.js → lifecycle-DDN8ApVY.js} +6 -7
- package/server/{lifecycle-io-D8iNBcux.js → lifecycle-io-D-lGdzK3.js} +5 -5
- package/server/{lifecycle-io-Bsnr2K4F.js → lifecycle-io-D_zTLvP1.js} +1 -1
- package/server/{linear-client-D4zqMnX7.js → linear-client-BQU36QqE.js} +2 -2
- package/server/{linear-client-DqhDQO9k.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-C_ZEhbqI.js → merge-Bpx4jjht.js} +13 -11
- package/server/{merge-agent-XrB80vfT.js → merge-agent-DdMVSV2Y.js} +233 -83
- package/server/{merge-agent-BQM3a8z5.js → merge-agent-DrXa1CpW.js} +1 -1
- package/server/{merge-batch-Bwoyr8Je.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-DK23JEdS.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-C1KIVr0s.js → merge-rebase-xLnMlw5h.js} +3 -3
- package/server/merge-set-DH7ot3yz.js +89 -0
- package/server/merge-set-DzsOTBg5.js +3 -0
- package/server/{merge-sync-DZ9dojJn.js → merge-sync-CQ-LgZ1_.js} +406 -153
- package/server/merge-sync-Ca7F5JnQ.js +3 -0
- package/server/{merge-train-DxDfBTjr.js → merge-train-DTEMyIu4.js} +18 -8
- package/server/{merge-train-deps-CyYQUksx.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-Dt8YPN5S.js → multipart-parser-IMSBfePV.js} +2 -2
- package/server/{no-resume-mode-Cx3K0hHi.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/README.md +5 -0
- package/server/node_modules/undici/docs/docs/api/Client.md +4 -0
- package/server/node_modules/undici/docs/docs/api/Dispatcher.md +6 -0
- package/server/node_modules/undici/docs/docs/api/Interceptors.md +59 -0
- package/server/node_modules/undici/docs/docs/api/MockAgent.md +27 -0
- package/server/node_modules/undici/docs/docs/api/MockPool.md +28 -1
- package/server/node_modules/undici/docs/docs/index.md +5 -0
- 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 +13 -2
- package/server/node_modules/undici/lib/core/util.js +6 -1
- package/server/node_modules/undici/lib/dispatcher/agent.js +3 -3
- package/server/node_modules/undici/lib/dispatcher/client-h1.js +42 -8
- package/server/node_modules/undici/lib/dispatcher/client-h2.js +34 -43
- package/server/node_modules/undici/lib/global.js +36 -16
- package/server/node_modules/undici/lib/handler/cache-handler.js +269 -61
- package/server/node_modules/undici/lib/handler/cache-revalidation-handler.js +13 -3
- package/server/node_modules/undici/lib/handler/redirect-handler.js +5 -2
- package/server/node_modules/undici/lib/handler/retry-handler.js +30 -4
- package/server/node_modules/undici/lib/interceptor/cache.js +159 -52
- package/server/node_modules/undici/lib/interceptor/decompress.js +9 -2
- package/server/node_modules/undici/lib/mock/mock-interceptor.js +25 -7
- package/server/node_modules/undici/lib/mock/mock-utils.js +39 -10
- package/server/node_modules/undici/lib/util/cache.js +372 -68
- 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/lib/web/fetch/body.js +2 -1
- package/server/node_modules/undici/lib/web/fetch/response.js +1 -3
- package/server/node_modules/undici/package.json +2 -2
- package/server/node_modules/undici/types/client.d.ts +2 -2
- package/server/node_modules/undici/types/dispatcher.d.ts +3 -3
- package/server/node_modules/undici/types/mock-interceptor.d.ts +5 -1
- package/server/{orphan-proposed-reconciler-BTkDrl4R.js → orphan-proposed-reconciler-CWmOdM9-.js} +1 -1
- package/server/{orphan-proposed-reconciler-neK8dHQk.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-DeVUgwA7.js → pan-dir-ubraCiUg.js} +24 -10
- package/server/{paths-_zEts6wc.js → paths-cXmOwSbh.js} +2 -2
- package/server/pending-lifecycle-claim-DEteYdS9.js +110 -0
- package/server/{pickup-Dd0Znxxy.js → pickup-D8xtG1J2.js} +17 -16
- package/server/pipeline-membership-BGSvkT2M.js +3 -0
- package/server/pipeline-membership-CrAPLYtf.js +57 -0
- package/server/{pipeline-membership-0HaEGDlH.js → pipeline-membership-gather-CET40frr.js} +177 -109
- package/server/pipeline-membership-gather-DTfcgxLl.js +3 -0
- package/server/{pipeline-notifier-D0ykk59O.js → pipeline-notifier-BuQ0e4hF.js} +2 -2
- package/server/{pipeline-notifier-6iCJplFZ.js → pipeline-notifier-ImNXknf0.js} +1 -1
- package/server/post-merge-lifecycle-worker-DbO10pum.js +50 -0
- package/server/{project-pipelines-2sK1apsO.js → project-pipelines-Bim6bThI.js} +2 -2
- package/server/project-repos-C0nuoBGv.js +98 -0
- package/server/project-repos-CRE6Ykow.js +3 -0
- package/server/projects-B03Wr-xc.js +3 -0
- package/server/{prompts-Dp4Tpk39.js → prompts-BEx08AIu.js} +2 -2
- package/server/{providers-DKkBXhxU.js → providers-D7IluJe0.js} +1 -1
- package/server/{providers-DV7ec8l7.js → providers-evXhiQeg.js} +7 -7
- package/server/public/assets/{chunk-BO2N2NFS-CltymLRg.js → chunk-BO2N2NFS-D1s4-Sqp.js} +4 -4
- package/server/public/assets/{diagram-OG6HWLK6-D2f6pjgA.js → diagram-OG6HWLK6-1gdMoSF7.js} +1 -1
- package/server/public/assets/{dist-BWR4qFiV.js → dist-CxAOHbil.js} +1 -1
- package/server/public/assets/{dist-DEmlBBNQ.js → dist-DqDRYW6P.js} +3 -3
- package/server/public/assets/{ganttDiagram-6RSMTGT7-DnfiViPK.js → ganttDiagram-6RSMTGT7-BYex-Ec7.js} +1 -1
- package/server/public/assets/{highlighted-body-OFNGDK62-B8Wrmj9H.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-C9zFQpkX.js → linear-B4cuEFmO.js} +1 -1
- package/server/public/assets/mermaid-GHXKKRXX-DyDHFXHV.js +1 -0
- package/server/public/assets/{pieDiagram-4H26LBE5-lR8H7Yjd.js → pieDiagram-4H26LBE5-CBHNBIJQ.js} +1 -1
- package/server/public/assets/{prod-B1jCQihw.js → prod-CN2nHBvX.js} +4 -4
- package/server/public/assets/{quadrantDiagram-W4KKPZXB-CVQ2guem.js → quadrantDiagram-W4KKPZXB-Bom87VOQ.js} +1 -1
- package/server/public/assets/{sankeyDiagram-5OEKKPKP-eD1RB4gm.js → sankeyDiagram-5OEKKPKP-UrBeyLxk.js} +1 -1
- package/server/public/assets/{xychartDiagram-2RQKCTM6-ChEC6dQn.js → xychartDiagram-2RQKCTM6-DhkbrIxR.js} +1 -1
- package/server/public/index.html +2 -2
- package/server/{pull-requests--Ib2jTgy.js → pull-requests-Cv7LxzUN.js} +1 -1
- package/server/{pull-requests-CXIhdCYD.js → pull-requests-DHWiKxo7.js} +19 -10
- package/server/{queries-6d7Cdtm7.js → queries-DHJm7bTd.js} +1134 -203
- package/server/{rally-B708-nZn.js → rally-B71M9f4o.js} +3 -3
- package/server/rally-YDjU513q.js +3 -0
- package/server/{rally-api-yjQ0TfHd.js → rally-api-D5uXN08-.js} +1 -1
- package/server/{rally-api-nY0ZANw3.js → rally-api-Dkqmok65.js} +2 -2
- package/server/{rally-client-B1EJhfV0.js → rally-client-Bfqm6XI4.js} +4 -4
- package/server/{rally-client-CULK2XAY.js → rally-client-CxsA6ExK.js} +1 -1
- package/server/{reap-terminal-sessions-MWnqdLCJ.js → reap-terminal-sessions-BQ23nriz.js} +2 -2
- package/server/{reap-terminal-sessions-N3BTkmX_.js → reap-terminal-sessions-CvmwaqKv.js} +2 -2
- package/server/{rebuild-stack-Dp4eLkt4.js → rebuild-stack-0EEYReVZ.js} +36 -36
- package/server/rebuild-stack-qeRqHZxH.js +4 -0
- package/server/{reconstruct-cache-uWbZfjms.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-Dq0t2uBG.js → record-update-Z0QCxmMp.js} +124 -34
- package/server/{recovery-trip-BJtIQuag.js → recovery-trip-eJe26h-f.js} +2 -2
- package/server/{release-engine-DZpmGGzb.js → release-engine-lPUp-MTd.js} +5 -5
- package/server/{release-set-hnXd_kga.js → release-set-BwGeyZKX.js} +3 -3
- package/server/{remote-Br-ZWVIP.js → remote-BCd02Es1.js} +3 -3
- package/server/{remote-4tiENDaI.js → remote-CVGUhXMV.js} +3 -3
- package/server/{remote-agents-CRCg1L4H.js → remote-agents-C1bssi41.js} +2 -2
- package/server/{remote-agents-nmty1mLu.js → remote-agents-C_VxssLU.js} +300 -46
- package/server/{remote-completion-BbWNd10K.js → remote-completion-DAB0P706.js} +12 -12
- package/server/resume-u9byntrq.js +3 -0
- package/server/{review-agent-DJRO8EG8.js → review-agent-CD4RCI0Y.js} +1 -1
- package/server/{review-agent-sKkE1FEL.js → review-agent-CHhI66UP.js} +61 -44
- package/server/{review-artifacts-BLbSC4ke.js → review-artifacts-DSMRIfuJ.js} +7 -6
- package/server/{review-context-BgX3lcCx.js → review-context-oFuBbiEE.js} +69 -25
- package/server/{in-flight-guard-aQ1IxeI3.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-tbOn_A_u.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-BhSQ0d0l.js → review-status-sync-483sujRo.js} +10 -5
- package/server/{review-status-sync-To3-iS-N.js → review-status-sync-NaWvI9Xf.js} +1 -1
- package/server/review-status-yljtTd-q.js +7521 -0
- package/server/{review-verdict-feedback-C1Kg8n7t.js → review-verdict-feedback-BPDn4li_.js} +1 -1
- package/server/{review-verdict-feedback-CTRNtzXO.js → review-verdict-feedback-CELeUinh.js} +48 -8
- package/server/{rollup-WA0VD-Rr.js → rollup-DTNvelz9.js} +8 -8
- package/server/{rollup-B53Y81xK.js → rollup-DYZfq1c4.js} +1 -1
- package/server/{scanner-D2743cp8.js → scanner-CV35oSn4.js} +42 -14
- package/server/{sequence-io-Cg0zYj_E.js → sequence-io-DF_8iuhV.js} +4 -4
- package/server/{sequencer-agent-BGY8gjg-.js → sequencer-agent-B2WeCtGi.js} +5 -5
- package/server/server.js +3899 -672
- package/server/{service-DCpB_SGd.js → service-Br9rpBNA.js} +83 -65
- package/server/{session-fork-BQ8_6H32.js → session-fork-D0LY152N.js} +2 -2
- package/server/{session-history-CVZDpS3c.js → session-history-BUyK29eq.js} +4 -4
- package/server/{settings-BZ5m1UCl.js → settings-Bse1Pdcj.js} +3 -3
- package/server/settings-CdvIF84R.js +2 -0
- package/server/{settings-ylxwqwQG.js → settings-CvVGqNEs.js} +3 -2
- package/server/{shadow-engineering-BlxG6Xye.js → shadow-engineering-BWLa8ODz.js} +2 -2
- package/server/{shadow-state-Dh-HzF2J.js → shadow-state-B4fpKxOO.js} +2 -2
- package/server/{shadow-state-C2_epgx2.js → shadow-state-FV6PHfEW.js} +1 -1
- package/server/{shadow-utils-4bvjn9b3.js → shadow-utils-D7asqxOZ.js} +2 -2
- package/server/{ship-log-ClSMIzZX.js → ship-log-xplJ8t75.js} +1 -1
- package/server/{smart-compaction-CHIxLr_d.js → smart-compaction-CPp2Ykf6.js} +1 -1
- package/server/{smart-compaction-r4pHQBIr.js → smart-compaction-D3U_79f-.js} +8 -7
- package/server/{spawn-planning-session-KC_UduxD.js → spawn-planning-session-1nFi3gfk.js} +1 -1
- package/server/{spawn-planning-session-DWAorh2B.js → spawn-planning-session-DGfZ5B8D.js} +30 -23
- package/server/{specialist-completion-BXhav38U.js → specialist-completion-Br48eiDP.js} +1 -1
- package/server/{specialist-context-DtrYvGJ-.js → specialist-context-cVbGnTa3.js} +5 -5
- package/server/{specialist-handoff-logger-C45ouoZ6.js → specialist-handoff-logger-DK-GTz4s.js} +2 -2
- package/server/{specialist-logs-DJ3RzKxW.js → specialist-logs-Cl5-hqT8.js} +3 -3
- package/server/{specialists-JVO00bs7.js → specialists-CNfYO3G2.js} +1634 -457
- package/server/{specialists-DyFeedjn.js → specialists-Cicieuzu.js} +21 -19
- package/server/{specialists-D5fRZXmN.js → specialists-JHsdU3pA.js} +1 -1
- package/server/{specialists-DVj0hvaL.js → specialists-Tdezg_6N.js} +1 -1
- package/server/specs-Bt7WJDoC.js +3 -0
- package/server/src-CRmCHlma.js +11408 -0
- package/server/{src-CG9mCkP6.js → src-Ck028hjO.js} +6 -6
- package/server/{src-CMTQGyCK.js → src-UWcGe0Ix.js} +5 -5
- package/server/stack-health-CJLMrLBl.js +3 -0
- package/server/{stack-health-puygdaMd.js → stack-health-DqSqx0zv.js} +68 -12
- package/server/{stale-task-claims-BbFwCTb0.js → stale-task-claims-CYFOUNlT.js} +4 -4
- package/server/{staleness-Cbl_w4Bw.js → staleness-BQ-0gMYK.js} +1 -1
- package/server/{staleness-Bpy41ngS.js → staleness-D47CUJok.js} +1 -1
- package/server/{state-home-CIGjwNfJ.js → state-home-BYV7qZTW.js} +2 -2
- package/server/{state-mapping-BL_-3Yt8.js → state-mapping-BVldLhBf.js} +1 -1
- package/server/{state-migrate-Dkzaxvny.js → state-migrate-CvvBtS0Y.js} +4 -4
- package/server/{stuck-remediation-sY_MHHgQ.js → stuck-remediation-Wt0UVvu1.js} +1 -1
- package/server/{stuck-remediation-CzEov_fq.js → stuck-remediation-mkLC6G_t.js} +360 -26
- package/server/{substrate-bug-weights-service-BH66lhm7.js → substrate-bug-weights-service-XfLAKnmK.js} +3 -3
- package/server/{summary-fork-D8bXjCr7.js → summary-fork-CD7GOts0.js} +2 -2
- package/server/{summary-fork-DHhJIsAL.js → summary-fork-xiXBnWG9.js} +78 -12
- package/server/supervisor/{injection-budget-C1iPirFS.js → injection-budget-B5SbvDx2.js} +2 -41
- package/server/supervisor/{paths-DehGY2Fj.js → paths-K3noE4N_.js} +1 -1
- package/server/supervisor/pty-supervisor.js +49 -2
- package/server/supervisor/pty-token-B7lp0ElT.js +43 -0
- package/server/{supervisor-BO-Zk_h-.js → supervisor-DL788vos.js} +3 -3
- package/server/supervisor-UWiQNK-y.js +2 -0
- package/server/{swarm-readiness-CQ_fwUWF.js → swarm-readiness-BV14DF5N.js} +3 -3
- package/server/{system-prerequisites-Bza0ffAh.js → system-prerequisites-pdWG6ZQs.js} +56 -29
- package/server/{teardown-workspace-CEgauF4U.js → teardown-workspace-l2F4_zim.js} +15 -16
- package/server/{test-agent-queue-DXDt0Xa-.js → test-agent-queue-qakFIIGz.js} +6 -6
- package/server/{test-verdict-CmUBK5cT.js → test-verdict-BJYDggMm.js} +1 -1
- package/server/{test-verdict-DFjjIHR5.js → test-verdict-Gw-btEfb.js} +1 -1
- package/server/{tldr-daemon-DL566HbH.js → tldr-daemon-BKOYB616.js} +1 -1
- package/server/{tldr-daemon-BDtLOIlO.js → tldr-daemon-CBaWkV9k.js} +2 -2
- package/server/{tmux-ftABRAmc.js → tmux-B1Wbxz5o.js} +3 -3
- package/server/{tmux-DoThH6aj.js → tmux-DQ6jB76i.js} +1 -1
- package/server/tmux-dedup-DbN6MGzM.js +892 -0
- package/server/{token-CsOhvw42.js → token-Cxbk023d.js} +2 -2
- package/server/{token-util-CTmczIfW.js → token-util-CLq2MmQt.js} +1 -1
- package/server/token-util-zlz9U0ki.js +3 -0
- package/server/{tracker-config-B4itFzDo.js → tracker-config-DZ8Zn2nQ.js} +2 -2
- package/server/{tracker-utils-tnxxqROg.js → tracker-utils-L0FKtjq2.js} +3 -3
- package/server/{traefik-connect-m73vGebA.js → traefik-connect-bNX6jKkb.js} +1 -1
- package/server/{tunnel-B2vxjx_b.js → tunnel-BAm1XgjG.js} +3 -3
- package/server/{tunnel-Cgj-IGIl.js → tunnel-CjSnHdTc.js} +1 -1
- package/server/{types-BBNjPcqU.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-Cxsx5Uz1.js +179 -0
- package/server/{validation-CIi6pnI2.js → validation-DEaTZafj.js} +1 -1
- package/server/{validation-B5JxoPUS.js → validation-VZgJxmqc.js} +4 -4
- package/server/{verification-artifact-C-lIHfUa.js → verification-artifact-C85cRTc_.js} +1 -1
- package/server/{verification-artifact-BcnIbigL.js → verification-artifact-g3yuxQDL.js} +1 -1
- package/server/{verification-runner-CDj4lD4t.js → verification-runner-DlZI8yhw.js} +1 -1
- package/server/{verification-runner-Br0S_Ous.js → verification-runner-KDZIsBj4.js} +114 -107
- package/server/{vtt-parser-DKpNNW5i.js → vtt-parser-Jr94BF3Y.js} +1 -1
- package/server/{work-agent-prompt-Yb2bd3Fq.js → work-agent-prompt-C-vuP3_J.js} +20 -9
- package/server/workflows-CHrx_hcW.js +2 -0
- package/server/{workflows-C9WmILql.js → workflows-D0oip4eV.js} +161 -78
- package/server/{workspace-DuUdndHe.js → workspace-BqFg__wH.js} +1 -1
- package/server/{workspace-BVl4rihN.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-cEGcO6UT.js → workspace-config-B123aZl-.js} +1 -1
- package/server/workspace-manager-CDTKjjdU.js +3 -0
- package/server/{workspace-manager-hLUv3ADC.js → workspace-manager-CwO-Hek7.js} +206 -116
- package/server/{workspace-metadata-CskwzzhL.js → workspace-metadata-CQv00QwK.js} +2 -2
- package/server/{workspace-metadata-DNpMixRq.js → workspace-metadata-D4M8BM4W.js} +1 -1
- package/server/{workspaces-hWvy9eKs.js → workspaces-j1e_6aAT.js} +736 -290
- 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/hooks/record-cost-event.js +6 -4
- package/sync-sources/rules/ask-user-question-self-contained.md +9 -0
- package/sync-sources/skills/okf/README.md +11 -3
- package/sync-sources/skills/okf/SKILL.md +12 -1
- package/sync-sources/skills/okf/docs/USAGE.md +15 -0
- package/sync-sources/skills/okf/references/overdeck.md +28 -0
- package/sync-sources/skills/pan-close/SKILL.md +5 -3
- package/sync-sources/skills/pan-flywheel/SKILL.md +18 -1
- package/sync-sources/skills/pan-knowledge/SKILL.md +10 -0
- package/sync-sources/skills/pan-orders/SKILL.md +33 -0
- 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-start/SKILL.md +4 -0
- 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/sync-sources/templates/traefik/dynamic/overdeck.yml.template +10 -0
- package/server/activity-logger-OEUBdfZ8.js +0 -3
- package/server/agent-state-Bg0lhqwj.js +0 -3
- package/server/agents-FlIgQ3ql.js +0 -3
- package/server/archive-planning-zkJb3BeM.js +0 -3
- package/server/cli-BsVIHwzC.js +0 -3
- package/server/context-layers-B3Nt58jl.js +0 -4
- package/server/context-layers-ZYFcWiyc.js +0 -165
- package/server/conversation-service-Up7FEzIC.js +0 -3
- package/server/deacon-DYSEJb48.js +0 -4
- package/server/deacon-swarm-9jRLS5Ke.js +0 -2
- package/server/deploy-window-CM6W1-c6.js +0 -3
- package/server/dist-Bd3vn0Hw.js +0 -3
- package/server/flywheel-DMCUzDWg.js +0 -2
- package/server/flywheel-DSSpWmqF.js +0 -522
- package/server/flywheel-DcBkQvgE.js +0 -207
- package/server/flywheel-merge-order-C-6zRLvM.js +0 -2
- package/server/flywheel-merge-order-DxbQKE1d.js +0 -244
- package/server/forge-B-ZWyTRm.js +0 -2
- package/server/forge-Ch9gCFod.js +0 -270
- package/server/git-utils-Dry_Ka_D.js +0 -3
- package/server/github-pr-lookup-BRbDW-qk.js +0 -44
- package/server/hume-B_DbflNM.js +0 -3
- package/server/inspect-agent-ch-F-5Ci.js +0 -2
- package/server/launcher-generator-CHVm7bGT.js +0 -379
- package/server/layers-DzxSTGNA.js +0 -93
- package/server/merge-blockers-BsFjGrQ8.js +0 -41
- package/server/merge-ops-DlB1IM0Y.js +0 -2
- package/server/merge-set-DLz0MkGT.js +0 -139
- package/server/merge-set-DnSYdBEp.js +0 -3
- package/server/merge-sync-SSv3E-pl.js +0 -3
- package/server/merge-verification-CSizH3HY.js +0 -124
- package/server/projects-9SkRpES9.js +0 -3
- package/server/public/assets/index-CUr1xv8w.css +0 -1
- package/server/public/assets/index-CsSuZQBI.js +0 -802
- package/server/public/assets/mermaid-GHXKKRXX-BUAB8hqt.js +0 -1
- package/server/rally-njs_mJrt.js +0 -3
- package/server/rebuild-stack-kA7XngID.js +0 -3
- package/server/record-t6V-3Dcj.js +0 -3
- package/server/record-update-DACtKh6_.js +0 -3
- package/server/resume-CcKqnTvE.js +0 -3
- package/server/review-status-A7quS5KJ.js +0 -1454
- package/server/review-status-C6n6-9f_.js +0 -3
- package/server/settings-D0OSwos5.js +0 -2
- package/server/specs-nN45DG2X.js +0 -3
- package/server/src-U7_kTPEE.js +0 -4733
- package/server/stack-health-Df0YEZKa.js +0 -3
- package/server/supervisor-BPy-o1A8.js +0 -2
- package/server/token-util-DrHg8abn.js +0 -3
- package/server/tracker-utils-BePq_oj-.js +0 -3
- package/server/uat-train-CuEn0t9M.js +0 -2152
- package/server/uat-train-cKfM-_WW.js +0 -2
- package/server/workflows-D90rMOya.js +0 -2
- package/server/workspace-manager-ZTdJAy9M.js +0 -3
|
@@ -28,13 +28,13 @@ function classifyIssue(node, lk) {
|
|
|
28
28
|
* Routine auto-pickup for WORK: Ready AND Planned AND Released AND not
|
|
29
29
|
* parked/vetoed/objected/in-flight. The DoR `ready` is the entry gate; `released`
|
|
30
30
|
* (PAN-2059) is the operator's explicit "go" after reviewing the plan — a Planned
|
|
31
|
-
* item is NOT pickable until released,
|
|
32
|
-
*
|
|
31
|
+
* item is NOT pickable until released, unless auto_pickup_backlog is ON or active
|
|
32
|
+
* order-book membership supplies the operator release. An open `objection` halts pickup
|
|
33
33
|
* until the operator overrides or parks. An `epic` is a container, never directly
|
|
34
34
|
* workable — its children carry the work, so it is excluded regardless of other gates.
|
|
35
35
|
*/
|
|
36
|
-
function isAutoPickable(s, autoPickupBacklog = false) {
|
|
37
|
-
const released = s.released || autoPickupBacklog;
|
|
36
|
+
function isAutoPickable(s, autoPickupBacklog = false, activeBookMember = false) {
|
|
37
|
+
const released = s.released || autoPickupBacklog || activeBookMember;
|
|
38
38
|
return s.ready && s.planned && released && !s.parked && !s.vetoed && !s.objection && !s.inPipeline && !s.epic;
|
|
39
39
|
}
|
|
40
40
|
function effortOf(size) {
|
|
@@ -48,13 +48,13 @@ function pickOrder(a, b) {
|
|
|
48
48
|
return a.rank - b.rank;
|
|
49
49
|
}
|
|
50
50
|
/** The auto-pickable queue, in pickup order (promoted first, then rank). */
|
|
51
|
-
function pickableQueue(nodes, lk, autoPickupBacklog = false) {
|
|
51
|
+
function pickableQueue(nodes, lk, autoPickupBacklog = false, activeBookMembership = /* @__PURE__ */ new Set()) {
|
|
52
52
|
return nodes.map((n) => ({
|
|
53
53
|
issue: n.issue,
|
|
54
54
|
rank: n.rank,
|
|
55
55
|
size: n.size,
|
|
56
56
|
state: classifyIssue(n, lk)
|
|
57
|
-
})).filter((n) => isAutoPickable(n.state, autoPickupBacklog)).sort((a, b) => pickOrder({
|
|
57
|
+
})).filter((n) => isAutoPickable(n.state, autoPickupBacklog, activeBookMembership.has(n.issue.toUpperCase()))).sort((a, b) => pickOrder({
|
|
58
58
|
gate: a.state.gate,
|
|
59
59
|
rank: a.rank
|
|
60
60
|
}, {
|
|
@@ -63,19 +63,19 @@ function pickableQueue(nodes, lk, autoPickupBacklog = false) {
|
|
|
63
63
|
}));
|
|
64
64
|
}
|
|
65
65
|
/** Batch the pickup queue into waves of up to `n`. */
|
|
66
|
-
function computeWaves(nodes, lk, n, autoPickupBacklog = false) {
|
|
67
|
-
const q = pickableQueue(nodes, lk, autoPickupBacklog);
|
|
66
|
+
function computeWaves(nodes, lk, n, autoPickupBacklog = false, activeBookMembership = /* @__PURE__ */ new Set()) {
|
|
67
|
+
const q = pickableQueue(nodes, lk, autoPickupBacklog, activeBookMembership);
|
|
68
68
|
const size = Math.max(1, n);
|
|
69
69
|
const waves = [];
|
|
70
70
|
for (let i = 0; i < q.length; i += size) waves.push(q.slice(i, i + size));
|
|
71
71
|
return waves;
|
|
72
72
|
}
|
|
73
73
|
/** Greedy list-schedule of the pickup queue across `n` lanes (block width = effort). */
|
|
74
|
-
function computeLanes(nodes, lk, n, autoPickupBacklog = false) {
|
|
74
|
+
function computeLanes(nodes, lk, n, autoPickupBacklog = false, activeBookMembership = /* @__PURE__ */ new Set()) {
|
|
75
75
|
const lanes = Math.max(1, n);
|
|
76
76
|
const free = new Array(lanes).fill(0);
|
|
77
77
|
const blocks = [];
|
|
78
|
-
for (const item of pickableQueue(nodes, lk, autoPickupBacklog)) {
|
|
78
|
+
for (const item of pickableQueue(nodes, lk, autoPickupBacklog, activeBookMembership)) {
|
|
79
79
|
let li = 0;
|
|
80
80
|
for (let i = 1; i < lanes; i++) if (free[i] < free[li]) li = i;
|
|
81
81
|
const start = free[li];
|
|
@@ -98,10 +98,10 @@ function computeLanes(nodes, lk, n, autoPickupBacklog = false) {
|
|
|
98
98
|
* ∪ the auto-pickable issues in the current + next wave (top `2 × n` by pickup order).
|
|
99
99
|
* Returns the issue ids; the Run completes when all of them reach a terminal state.
|
|
100
100
|
*/
|
|
101
|
-
function computeCohort(nodes, lk, n, autoPickupBacklog = false) {
|
|
101
|
+
function computeCohort(nodes, lk, n, autoPickupBacklog = false, activeBookMembership = /* @__PURE__ */ new Set()) {
|
|
102
102
|
const ids = /* @__PURE__ */ new Set();
|
|
103
103
|
for (const node of nodes) if (classifyIssue(node, lk).inPipeline) ids.add(node.issue);
|
|
104
|
-
for (const item of pickableQueue(nodes, lk, autoPickupBacklog).slice(0, Math.max(1, n) * 2)) ids.add(item.issue);
|
|
104
|
+
for (const item of pickableQueue(nodes, lk, autoPickupBacklog, activeBookMembership).slice(0, Math.max(1, n) * 2)) ids.add(item.issue);
|
|
105
105
|
return [...ids];
|
|
106
106
|
}
|
|
107
107
|
/**
|
|
@@ -122,7 +122,7 @@ function selectNeedsPlanning(nodes, lk, opts = {}) {
|
|
|
122
122
|
}).sort((a, b) => a.rank - b.rank).slice(0, cap);
|
|
123
123
|
}
|
|
124
124
|
/** Aggregate counts for the forecast header / filter bar. */
|
|
125
|
-
function computeStats(nodes, lk, autoPickupBacklog = false) {
|
|
125
|
+
function computeStats(nodes, lk, autoPickupBacklog = false, activeBookMembership = /* @__PURE__ */ new Set()) {
|
|
126
126
|
const stats = {
|
|
127
127
|
total: nodes.length,
|
|
128
128
|
inFlight: 0,
|
|
@@ -147,9 +147,10 @@ function computeStats(nodes, lk, autoPickupBacklog = false) {
|
|
|
147
147
|
if (s.parked) stats.parked++;
|
|
148
148
|
if (s.vetoed) stats.vetoed++;
|
|
149
149
|
if (s.blocksMain) stats.blocksMain++;
|
|
150
|
-
|
|
150
|
+
const activeBookMember = activeBookMembership.has(node.issue.toUpperCase());
|
|
151
|
+
if (isAutoPickable(s, autoPickupBacklog, activeBookMember)) stats.pickable++;
|
|
151
152
|
if (s.ready && !s.planned && !s.parked && !s.vetoed && !s.objection && !s.inPipeline) stats.needsPlanning++;
|
|
152
|
-
if (s.ready && s.planned && !s.released && !s.parked && !s.vetoed && !s.objection && !s.inPipeline) stats.needsRelease++;
|
|
153
|
+
if (s.ready && s.planned && !s.released && !activeBookMember && !s.parked && !s.vetoed && !s.objection && !s.inPipeline) stats.needsRelease++;
|
|
153
154
|
}
|
|
154
155
|
return stats;
|
|
155
156
|
}
|
|
@@ -185,4 +186,4 @@ var init_pickup = __esmMin((() => {
|
|
|
185
186
|
//#endregion
|
|
186
187
|
export { selectNeedsPlanning as _, READY_LABEL as a, classifyIssue as c, computeLanes as d, computeStats as f, normalizeGate as g, isAutoPickable as h, PARKED_LABEL as i, computeCohort as l, init_pickup as m, LEGACY_PARKED_LABELS as n, RELEASED_LABEL as o, computeWaves as p, OBJECTION_LABEL as r, VETOED_LABEL as s, BLOCKS_MAIN_LABEL as t, computeEpicGroups as u };
|
|
187
188
|
|
|
188
|
-
//# sourceMappingURL=pickup-
|
|
189
|
+
//# sourceMappingURL=pickup-D8xtG1J2.js.map
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { n as __esmMin } from "./rolldown-runtime-DNCzzKnI.js";
|
|
2
|
+
//#region ../../lib/pipeline-membership.ts
|
|
3
|
+
/**
|
|
4
|
+
* Classify a single issue's pipeline membership from its durable lens signals.
|
|
5
|
+
*
|
|
6
|
+
* Decisions (see PAN-1980):
|
|
7
|
+
* - A closed issue is subtracted from the pipeline regardless of lingering
|
|
8
|
+
* branch/label/agent/workspace state (§2d), EXCEPT a still-open PR — a live,
|
|
9
|
+
* mergeable artifact that must be closed (`zombie_pr`).
|
|
10
|
+
* - L1-merged is the merge oracle; a squash-merged branch that L2 still calls
|
|
11
|
+
* "unmerged" is treated as merged.
|
|
12
|
+
* - An open issue with a branch but no PR is `planned_backlog` (in the pipeline,
|
|
13
|
+
* needs a PR or disposition) — distinct from `in_flight` so it does not
|
|
14
|
+
* inflate throughput.
|
|
15
|
+
*/
|
|
16
|
+
function resolvePipelineMembership(s) {
|
|
17
|
+
const branchLive = s.hasConventionBranch && s.branchUnmerged && !s.hasMergedPr;
|
|
18
|
+
const lenses = {
|
|
19
|
+
L1_openPr: s.hasOpenPr,
|
|
20
|
+
L2_unmergedBranch: branchLive,
|
|
21
|
+
L3_issueOpen: s.issueOpen,
|
|
22
|
+
L4_phaseLabel: s.phaseLabel
|
|
23
|
+
};
|
|
24
|
+
const result = (bucket, reason) => {
|
|
25
|
+
const labelDrift = s.phaseLabel !== null && (bucket === "clean_terminal" || !s.issueOpen) ? "stale_present" : s.issueOpen && s.hasOpenPr && s.phaseLabel === null ? "stale_absent" : null;
|
|
26
|
+
return {
|
|
27
|
+
issueId: s.issueId,
|
|
28
|
+
inPipeline: bucket !== "clean_terminal",
|
|
29
|
+
bucket,
|
|
30
|
+
reasons: [reason],
|
|
31
|
+
labelDrift,
|
|
32
|
+
lenses
|
|
33
|
+
};
|
|
34
|
+
};
|
|
35
|
+
if (!s.issueOpen) {
|
|
36
|
+
if (s.hasOpenPr) return result("zombie_pr", "issue is closed but a PR is still open — close/reconcile the PR");
|
|
37
|
+
return result("clean_terminal", "issue closed; no open PR — terminal (any leftover branch/label/agent is cleanup, not pipeline)");
|
|
38
|
+
}
|
|
39
|
+
if (s.hasOpenPr) return result("in_flight", "open issue with an open PR — active work");
|
|
40
|
+
if (s.hasMergedPr) return result("post_merge_limbo", "open issue with a merged PR — merged but never closed out; run close-out");
|
|
41
|
+
if (branchLive) return result("planned_backlog", "open issue with an unmerged convention branch (feature/ or strike/) but no PR — needs a PR or disposition");
|
|
42
|
+
if (s.hasConventionBranch) {
|
|
43
|
+
if (s.hasMergedBranchWork) return result("post_merge_limbo", "open issue whose branch work is contained in main but with no merged PR — landed via a non-PR path; run close-out");
|
|
44
|
+
return result("planned_backlog", "open issue with a convention branch but no unique commits — created, work not yet landed; needs work or disposition");
|
|
45
|
+
}
|
|
46
|
+
if (s.hasXbriefSpec) return result("planned_backlog", PLANNED_BACKLOG_SPEC_ONLY_REASON);
|
|
47
|
+
if (s.explicitlyReady) return result("planned_backlog", "open issue carries the explicit ready label — ready to start");
|
|
48
|
+
return result("clean_terminal", "open issue with no branch and no PR — backlog, never started");
|
|
49
|
+
}
|
|
50
|
+
var PLANNED_BACKLOG_SPEC_ONLY_REASON;
|
|
51
|
+
var init_pipeline_membership = __esmMin((() => {
|
|
52
|
+
PLANNED_BACKLOG_SPEC_ONLY_REASON = "open issue with an xBRIEF spec but no branch/PR — planned work whose plan encodes code paths that age; needs starting or re-planning";
|
|
53
|
+
}));
|
|
54
|
+
//#endregion
|
|
55
|
+
export { init_pipeline_membership as n, resolvePipelineMembership as r, PLANNED_BACKLOG_SPEC_ONLY_REASON as t };
|
|
56
|
+
|
|
57
|
+
//# sourceMappingURL=pipeline-membership-CrAPLYtf.js.map
|
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
import { n as __esmMin } from "./rolldown-runtime-DNCzzKnI.js";
|
|
2
|
-
import {
|
|
3
|
-
import { C as
|
|
4
|
-
import { f as init_config, m as loadConfigSync } from "./config-
|
|
5
|
-
import { r as init_factory, t as createTracker } from "./factory-
|
|
6
|
-
import {
|
|
7
|
-
import { n as init_label_reconciler, t as STALE_PIPELINE_LABELS } from "./label-reconciler
|
|
8
|
-
import { join } from "node:path";
|
|
2
|
+
import { Gn as init_projects, In as getIssuePrefix } from "./config-yaml-CmOPzmBb.js";
|
|
3
|
+
import { C as listSpecs, S as init_specs } from "./io-VHvc0Ssp.js";
|
|
4
|
+
import { f as init_config, m as loadConfigSync } from "./config-Dr3pW6w6.js";
|
|
5
|
+
import { r as init_factory, t as createTracker } from "./factory-CRoOpGsF.js";
|
|
6
|
+
import { A as createSettledTtlPromiseCache, N as withConcurrencyLimitPromise, _ as listOpenIssuesWithLabelsPromise, f as init_github_app, h as listIssuesWithAnyLabelPromise, j as init_concurrency } from "./github-app-CQ1Lo6LA.js";
|
|
7
|
+
import { n as init_label_reconciler, t as STALE_PIPELINE_LABELS } from "./label-reconciler--F85rufp.js";
|
|
8
|
+
import { join, resolve } from "node:path";
|
|
9
9
|
import { Effect } from "effect";
|
|
10
|
+
import { realpath } from "node:fs/promises";
|
|
10
11
|
import { execFile } from "node:child_process";
|
|
11
12
|
import { promisify } from "node:util";
|
|
12
13
|
//#region ../../lib/resource-utils.ts
|
|
@@ -112,11 +113,11 @@ function resolveProjectTrackerType(project) {
|
|
|
112
113
|
if (project.github_repo) return "github";
|
|
113
114
|
if (getIssuePrefix(project)) return "linear";
|
|
114
115
|
if (project.gitlab_repo) return "gitlab";
|
|
115
|
-
throw new
|
|
116
|
+
throw new PipelineMembershipUnavailableError("tracker_unconfigured", `Cannot resolve tracker for ${project.name}`);
|
|
116
117
|
}
|
|
117
118
|
async function listProjectTrackerIssues(project) {
|
|
118
119
|
const issuePrefix = getIssuePrefix(project)?.toUpperCase();
|
|
119
|
-
if (!issuePrefix) throw new
|
|
120
|
+
if (!issuePrefix) throw new PipelineMembershipUnavailableError("missing_issue_prefix", `Missing issue_prefix for project ${project.name}`);
|
|
120
121
|
const trackerType = resolveProjectTrackerType(project);
|
|
121
122
|
const trackerConfig = loadConfigSync().trackers[trackerType];
|
|
122
123
|
const tracker = createTracker({
|
|
@@ -144,6 +145,14 @@ async function listProjectTrackerIssues(project) {
|
|
|
144
145
|
}];
|
|
145
146
|
});
|
|
146
147
|
}
|
|
148
|
+
async function withUnavailableReason(reason, operation) {
|
|
149
|
+
try {
|
|
150
|
+
return await operation();
|
|
151
|
+
} catch (error) {
|
|
152
|
+
if (error instanceof PipelineMembershipUnavailableError) throw error;
|
|
153
|
+
throw new PipelineMembershipUnavailableError(reason, error instanceof Error ? error.message : String(error));
|
|
154
|
+
}
|
|
155
|
+
}
|
|
147
156
|
function issueNumber(issueId) {
|
|
148
157
|
const match = issueId.match(/-(\d+)$/);
|
|
149
158
|
if (!match) throw new Error(`Cannot derive GitHub issue number from ${issueId}`);
|
|
@@ -164,52 +173,156 @@ function projectRepositories(project) {
|
|
|
164
173
|
defaultBranch: repo.default_branch ?? project.workspace?.default_branch ?? "main"
|
|
165
174
|
}));
|
|
166
175
|
}
|
|
176
|
+
async function normalizeRepoPath(path) {
|
|
177
|
+
return realpath(path).catch(() => resolve(path));
|
|
178
|
+
}
|
|
179
|
+
async function hasGitRef(repoPath, branch, run) {
|
|
180
|
+
const ref = branch.startsWith("origin/") ? `refs/remotes/${branch}` : `refs/heads/${branch}`;
|
|
181
|
+
try {
|
|
182
|
+
await run("git", [
|
|
183
|
+
"rev-parse",
|
|
184
|
+
"--verify",
|
|
185
|
+
"--quiet",
|
|
186
|
+
ref
|
|
187
|
+
], repoPath);
|
|
188
|
+
return true;
|
|
189
|
+
} catch {
|
|
190
|
+
return false;
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
async function resolveRepositoryDefaultBranch(repoPath, configured, run = defaultDeps.run) {
|
|
194
|
+
if (configured) {
|
|
195
|
+
if (await hasGitRef(repoPath, configured, run)) return configured;
|
|
196
|
+
if (await hasGitRef(repoPath, `origin/${configured}`, run)) return `origin/${configured}`;
|
|
197
|
+
}
|
|
198
|
+
for (const ref of ["refs/remotes/origin/HEAD", "HEAD"]) try {
|
|
199
|
+
const branch = (await run("git", [
|
|
200
|
+
"symbolic-ref",
|
|
201
|
+
"--quiet",
|
|
202
|
+
"--short",
|
|
203
|
+
ref
|
|
204
|
+
], repoPath)).trim();
|
|
205
|
+
if (branch && await hasGitRef(repoPath, branch, run)) return branch;
|
|
206
|
+
} catch {}
|
|
207
|
+
for (const branch of [
|
|
208
|
+
"main",
|
|
209
|
+
"master",
|
|
210
|
+
"origin/main",
|
|
211
|
+
"origin/master"
|
|
212
|
+
]) if (await hasGitRef(repoPath, branch, run)) return branch;
|
|
213
|
+
throw new PipelineMembershipUnavailableError("default_branch_unresolved", `Could not resolve default branch for repository ${repoPath} (configured: ${configured ?? "none"})`);
|
|
214
|
+
}
|
|
215
|
+
async function snapshotBranchRefs(repoPath, defaultBranch, refPatterns, run = defaultDeps.run) {
|
|
216
|
+
const unavailable = () => new PipelineMembershipUnavailableError("repo_unavailable", `Workspace repo path is not a git repository: ${repoPath}`);
|
|
217
|
+
let gitTopLevel;
|
|
218
|
+
try {
|
|
219
|
+
gitTopLevel = (await run("git", ["rev-parse", "--show-toplevel"], repoPath)).trim();
|
|
220
|
+
} catch (error) {
|
|
221
|
+
if (error instanceof PipelineMembershipUnavailableError) throw error;
|
|
222
|
+
throw unavailable();
|
|
223
|
+
}
|
|
224
|
+
const [normalizedRepoPath, normalizedGitTopLevel] = await Promise.all([normalizeRepoPath(repoPath), normalizeRepoPath(gitTopLevel)]);
|
|
225
|
+
if (normalizedRepoPath !== normalizedGitTopLevel) throw unavailable();
|
|
226
|
+
const resolvedDefaultBranch = await resolveRepositoryDefaultBranch(repoPath, defaultBranch, run);
|
|
227
|
+
const [refs, unmergedRefs, firstParentShas] = await Promise.all([
|
|
228
|
+
run("git", [
|
|
229
|
+
"for-each-ref",
|
|
230
|
+
"--format=%(objectname) %(refname:short)",
|
|
231
|
+
...refPatterns
|
|
232
|
+
], repoPath),
|
|
233
|
+
run("git", [
|
|
234
|
+
"for-each-ref",
|
|
235
|
+
`--no-merged=${resolvedDefaultBranch}`,
|
|
236
|
+
"--format=%(refname:short)",
|
|
237
|
+
...refPatterns
|
|
238
|
+
], repoPath),
|
|
239
|
+
run("git", [
|
|
240
|
+
"rev-list",
|
|
241
|
+
"--first-parent",
|
|
242
|
+
resolvedDefaultBranch
|
|
243
|
+
], repoPath)
|
|
244
|
+
]);
|
|
245
|
+
return {
|
|
246
|
+
refs,
|
|
247
|
+
unmergedRefs,
|
|
248
|
+
firstParentShas
|
|
249
|
+
};
|
|
250
|
+
}
|
|
251
|
+
function parseBranchRefLine(line) {
|
|
252
|
+
const spaceIdx = line.indexOf(" ");
|
|
253
|
+
return {
|
|
254
|
+
tipSha: spaceIdx === -1 ? null : line.slice(0, spaceIdx),
|
|
255
|
+
ref: spaceIdx === -1 ? line : line.slice(spaceIdx + 1)
|
|
256
|
+
};
|
|
257
|
+
}
|
|
258
|
+
function classifyBranchRefLine(line, unmergedSet, firstParentShas) {
|
|
259
|
+
const { tipSha, ref } = parseBranchRefLine(line);
|
|
260
|
+
if (unmergedSet.has(ref)) return "unmerged";
|
|
261
|
+
if (tipSha && !firstParentShas.has(tipSha)) return "merged-work";
|
|
262
|
+
return "pointer";
|
|
263
|
+
}
|
|
264
|
+
async function gatherIssueBranchContainment(project, issueId, run = defaultDeps.run) {
|
|
265
|
+
const normalizedIssueId = issueId.toLowerCase();
|
|
266
|
+
const refPatterns = [
|
|
267
|
+
`refs/heads/feature/${normalizedIssueId}`,
|
|
268
|
+
`refs/remotes/origin/feature/${normalizedIssueId}`,
|
|
269
|
+
`refs/heads/strike/${normalizedIssueId}`,
|
|
270
|
+
`refs/remotes/origin/strike/${normalizedIssueId}`
|
|
271
|
+
];
|
|
272
|
+
const snapshots = await Promise.all(projectRepositories(project).map(async (repository) => ({
|
|
273
|
+
repository,
|
|
274
|
+
snapshot: await snapshotBranchRefs(repository.path, repository.defaultBranch, refPatterns, run)
|
|
275
|
+
})));
|
|
276
|
+
const result = {
|
|
277
|
+
unmergedRefs: [],
|
|
278
|
+
mergedWorkRefs: [],
|
|
279
|
+
pointerRefs: []
|
|
280
|
+
};
|
|
281
|
+
for (const { repository, snapshot } of snapshots) {
|
|
282
|
+
const unmergedSet = new Set(snapshot.unmergedRefs.split("\n").map((ref) => ref.trim()).filter(Boolean));
|
|
283
|
+
const firstParentShas = new Set(snapshot.firstParentShas.split("\n").map((sha) => sha.trim()).filter(Boolean));
|
|
284
|
+
const refLines = snapshot.refs.split("\n").map((line) => line.trim()).filter(Boolean);
|
|
285
|
+
for (const line of refLines) {
|
|
286
|
+
const { ref } = parseBranchRefLine(line);
|
|
287
|
+
const qualifiedRef = `${repository.path}:${ref}`;
|
|
288
|
+
switch (classifyBranchRefLine(line, unmergedSet, firstParentShas)) {
|
|
289
|
+
case "unmerged":
|
|
290
|
+
result.unmergedRefs.push(qualifiedRef);
|
|
291
|
+
break;
|
|
292
|
+
case "merged-work":
|
|
293
|
+
result.mergedWorkRefs.push(qualifiedRef);
|
|
294
|
+
break;
|
|
295
|
+
case "pointer":
|
|
296
|
+
result.pointerRefs.push(qualifiedRef);
|
|
297
|
+
break;
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
return result;
|
|
302
|
+
}
|
|
167
303
|
/** Gather all durable pipeline lenses for one project in batches. */
|
|
168
304
|
async function gatherProjectLensSignals(project, deps = defaultDeps) {
|
|
169
305
|
const issuePrefix = getIssuePrefix(project)?.toUpperCase();
|
|
170
|
-
if (!issuePrefix) throw new
|
|
306
|
+
if (!issuePrefix) throw new PipelineMembershipUnavailableError("missing_issue_prefix", `Missing issue_prefix for project ${project.name}`);
|
|
171
307
|
const githubRepository = project.github_repo?.split("/");
|
|
172
308
|
const owner = githubRepository?.[0];
|
|
173
309
|
const repo = githubRepository?.[1];
|
|
174
310
|
if (project.github_repo && (!owner || !repo)) throw new Error(`Invalid github_repo for ${project.name}: ${project.github_repo}`);
|
|
175
|
-
const
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
"refs/remotes/origin/strike/*"
|
|
184
|
-
], repository.path),
|
|
185
|
-
deps.run("git", [
|
|
186
|
-
"for-each-ref",
|
|
187
|
-
`--no-merged=${repository.defaultBranch}`,
|
|
188
|
-
"--format=%(refname:short)",
|
|
189
|
-
"refs/heads/feature/*",
|
|
190
|
-
"refs/remotes/origin/feature/*",
|
|
191
|
-
"refs/heads/strike/*",
|
|
192
|
-
"refs/remotes/origin/strike/*"
|
|
193
|
-
], repository.path),
|
|
194
|
-
deps.run("git", [
|
|
195
|
-
"rev-list",
|
|
196
|
-
"--first-parent",
|
|
197
|
-
repository.defaultBranch
|
|
198
|
-
], repository.path)
|
|
199
|
-
]);
|
|
200
|
-
return {
|
|
201
|
-
refs,
|
|
202
|
-
unmergedRefs,
|
|
203
|
-
firstParentShas
|
|
204
|
-
};
|
|
205
|
-
});
|
|
311
|
+
const repositories = projectRepositories(project);
|
|
312
|
+
const branchRefPatterns = [
|
|
313
|
+
"refs/heads/feature/*",
|
|
314
|
+
"refs/remotes/origin/feature/*",
|
|
315
|
+
"refs/heads/strike/*",
|
|
316
|
+
"refs/remotes/origin/strike/*"
|
|
317
|
+
];
|
|
318
|
+
const branchSnapshots = repositories.map((repository) => snapshotBranchRefs(repository.path, repository.defaultBranch, branchRefPatterns, deps.run));
|
|
206
319
|
const [trackerIssues, openIssues, phaseLabeledIssues, openPrs, branches, specIssueIds] = await Promise.all([
|
|
207
|
-
project.github_repo ? Promise.resolve([]) : deps.listTrackerIssues(project),
|
|
208
|
-
owner && repo ? deps.listOpenIssues(owner, repo) : Promise.resolve([]),
|
|
209
|
-
owner && repo ? deps.listPhaseLabeledIssues(owner, repo) : Promise.resolve([]),
|
|
210
|
-
owner && repo ? deps.listOpenPullRequests(owner, repo) : Promise.resolve([]),
|
|
320
|
+
project.github_repo ? Promise.resolve([]) : withUnavailableReason("forge_unavailable", () => deps.listTrackerIssues(project)),
|
|
321
|
+
owner && repo ? withUnavailableReason("forge_unavailable", () => deps.listOpenIssues(owner, repo)) : Promise.resolve([]),
|
|
322
|
+
owner && repo ? withUnavailableReason("forge_unavailable", () => deps.listPhaseLabeledIssues(owner, repo)) : Promise.resolve([]),
|
|
323
|
+
owner && repo ? withUnavailableReason("forge_unavailable", () => deps.listOpenPullRequests(owner, repo)) : Promise.resolve([]),
|
|
211
324
|
Promise.all(branchSnapshots),
|
|
212
|
-
deps.listSpecIssueIds(project.path)
|
|
325
|
+
withUnavailableReason("gather_failed", () => deps.listSpecIssueIds(project.path))
|
|
213
326
|
]);
|
|
214
327
|
const candidates = /* @__PURE__ */ new Set();
|
|
215
328
|
const labelsByIssue = /* @__PURE__ */ new Map();
|
|
@@ -254,17 +367,16 @@ async function gatherProjectLensSignals(project, deps = defaultDeps) {
|
|
|
254
367
|
const unmerged = new Set(snapshot.unmergedRefs.split("\n").map((ref) => ref.trim()).filter(Boolean));
|
|
255
368
|
const firstParentShas = new Set(snapshot.firstParentShas.split("\n").map((sha) => sha.trim()).filter(Boolean));
|
|
256
369
|
for (const line of refLines) {
|
|
257
|
-
const
|
|
258
|
-
const tipSha = spaceIdx === -1 ? null : line.slice(0, spaceIdx);
|
|
259
|
-
const ref = spaceIdx === -1 ? line : line.slice(spaceIdx + 1);
|
|
370
|
+
const { ref } = parseBranchRefLine(line);
|
|
260
371
|
const id = issueIdFromRef(ref, issuePrefix);
|
|
261
372
|
if (id) {
|
|
262
373
|
candidates.add(id);
|
|
263
374
|
branchIssues.add(id);
|
|
264
375
|
const headRef = ref.replace(/^origin\//, "");
|
|
265
376
|
headRefsByIssue.set(id, new Set([...headRefsByIssue.get(id) ?? [], headRef]));
|
|
266
|
-
|
|
267
|
-
|
|
377
|
+
const classification = classifyBranchRefLine(line, unmerged, firstParentShas);
|
|
378
|
+
if (classification === "unmerged") unmergedBranchIssues.add(id);
|
|
379
|
+
else if (classification === "merged-work") mergedBranchWorkIssues.add(id);
|
|
268
380
|
}
|
|
269
381
|
}
|
|
270
382
|
}
|
|
@@ -274,7 +386,7 @@ async function gatherProjectLensSignals(project, deps = defaultDeps) {
|
|
|
274
386
|
const issueStateCandidates = unknownIssueIds.filter((id) => openPrIssues.has(id) || branchIssues.has(id));
|
|
275
387
|
const issueStateCandidateSet = new Set(issueStateCandidates);
|
|
276
388
|
for (const id of unknownIssueIds) if (!issueStateCandidateSet.has(id)) candidates.delete(id);
|
|
277
|
-
const issueStates = issueStateCandidates.length > 0 ? await deps.listIssueStates(owner, repo, issueStateCandidates.map(issueNumber)) : [];
|
|
389
|
+
const issueStates = issueStateCandidates.length > 0 ? await withUnavailableReason("forge_unavailable", () => deps.listIssueStates(owner, repo, issueStateCandidates.map(issueNumber))) : [];
|
|
278
390
|
const stateByNumber = new Map(issueStates.map((entry) => [entry.number, entry.state]));
|
|
279
391
|
for (const id of issueStateCandidates) {
|
|
280
392
|
const state = stateByNumber.get(issueNumber(id));
|
|
@@ -287,7 +399,7 @@ async function gatherProjectLensSignals(project, deps = defaultDeps) {
|
|
|
287
399
|
`feature/${id.toLowerCase()}`,
|
|
288
400
|
`strike/${id.toLowerCase()}`
|
|
289
401
|
]))];
|
|
290
|
-
const mergedHeads = new Set(await deps.listMergedPullRequestHeads(owner, repo, candidateHeads));
|
|
402
|
+
const mergedHeads = new Set(await withUnavailableReason("forge_unavailable", () => deps.listMergedPullRequestHeads(owner, repo, candidateHeads)));
|
|
291
403
|
for (const id of openCandidates) if ([
|
|
292
404
|
...headRefsByIssue.get(id) ?? [],
|
|
293
405
|
`feature/${id.toLowerCase()}`,
|
|
@@ -329,7 +441,7 @@ async function gatherProjectLensSignalsForProjects(projects, gather = gatherProj
|
|
|
329
441
|
error
|
|
330
442
|
}));
|
|
331
443
|
}
|
|
332
|
-
var execFileAsync, GRAPHQL_ALIAS_CHUNK_SIZE, cachedOpenPullRequests, defaultDeps;
|
|
444
|
+
var execFileAsync, GRAPHQL_ALIAS_CHUNK_SIZE, cachedOpenPullRequests, PipelineMembershipUnavailableError, defaultDeps, PIPELINE_PROJECT_CONCURRENCY;
|
|
333
445
|
var init_pipeline_membership_gather = __esmMin((() => {
|
|
334
446
|
init_github_app();
|
|
335
447
|
init_concurrency();
|
|
@@ -342,6 +454,14 @@ var init_pipeline_membership_gather = __esmMin((() => {
|
|
|
342
454
|
execFileAsync = promisify(execFile);
|
|
343
455
|
GRAPHQL_ALIAS_CHUNK_SIZE = 50;
|
|
344
456
|
cachedOpenPullRequests = createSettledTtlPromiseCache(3e4);
|
|
457
|
+
PipelineMembershipUnavailableError = class extends Error {
|
|
458
|
+
reason;
|
|
459
|
+
constructor(reason, message) {
|
|
460
|
+
super(message);
|
|
461
|
+
this.name = "PipelineMembershipUnavailableError";
|
|
462
|
+
this.reason = reason;
|
|
463
|
+
}
|
|
464
|
+
};
|
|
345
465
|
defaultDeps = {
|
|
346
466
|
listOpenIssues: listOpenIssuesWithLabelsPromise,
|
|
347
467
|
listPhaseLabeledIssues: (owner, repo) => listIssuesWithAnyLabelPromise(owner, repo, STALE_PIPELINE_LABELS),
|
|
@@ -360,61 +480,9 @@ var init_pipeline_membership_gather = __esmMin((() => {
|
|
|
360
480
|
return stdout;
|
|
361
481
|
}
|
|
362
482
|
};
|
|
483
|
+
PIPELINE_PROJECT_CONCURRENCY = 3;
|
|
363
484
|
}));
|
|
364
485
|
//#endregion
|
|
365
|
-
|
|
366
|
-
/**
|
|
367
|
-
* Classify a single issue's pipeline membership from its durable lens signals.
|
|
368
|
-
*
|
|
369
|
-
* Decisions (see PAN-1980):
|
|
370
|
-
* - A closed issue is subtracted from the pipeline regardless of lingering
|
|
371
|
-
* branch/label/agent/workspace state (§2d), EXCEPT a still-open PR — a live,
|
|
372
|
-
* mergeable artifact that must be closed (`zombie_pr`).
|
|
373
|
-
* - L1-merged is the merge oracle; a squash-merged branch that L2 still calls
|
|
374
|
-
* "unmerged" is treated as merged.
|
|
375
|
-
* - An open issue with a branch but no PR is `planned_backlog` (in the pipeline,
|
|
376
|
-
* needs a PR or disposition) — distinct from `in_flight` so it does not
|
|
377
|
-
* inflate throughput.
|
|
378
|
-
*/
|
|
379
|
-
function resolvePipelineMembership(s) {
|
|
380
|
-
const branchLive = s.hasConventionBranch && s.branchUnmerged && !s.hasMergedPr;
|
|
381
|
-
const lenses = {
|
|
382
|
-
L1_openPr: s.hasOpenPr,
|
|
383
|
-
L2_unmergedBranch: branchLive,
|
|
384
|
-
L3_issueOpen: s.issueOpen,
|
|
385
|
-
L4_phaseLabel: s.phaseLabel
|
|
386
|
-
};
|
|
387
|
-
const result = (bucket, reason) => {
|
|
388
|
-
const labelDrift = s.phaseLabel !== null && (bucket === "clean_terminal" || !s.issueOpen) ? "stale_present" : s.issueOpen && s.hasOpenPr && s.phaseLabel === null ? "stale_absent" : null;
|
|
389
|
-
return {
|
|
390
|
-
issueId: s.issueId,
|
|
391
|
-
inPipeline: bucket !== "clean_terminal",
|
|
392
|
-
bucket,
|
|
393
|
-
reasons: [reason],
|
|
394
|
-
labelDrift,
|
|
395
|
-
lenses
|
|
396
|
-
};
|
|
397
|
-
};
|
|
398
|
-
if (!s.issueOpen) {
|
|
399
|
-
if (s.hasOpenPr) return result("zombie_pr", "issue is closed but a PR is still open — close/reconcile the PR");
|
|
400
|
-
return result("clean_terminal", "issue closed; no open PR — terminal (any leftover branch/label/agent is cleanup, not pipeline)");
|
|
401
|
-
}
|
|
402
|
-
if (s.hasOpenPr) return result("in_flight", "open issue with an open PR — active work");
|
|
403
|
-
if (s.hasMergedPr) return result("post_merge_limbo", "open issue with a merged PR — merged but never closed out; run close-out");
|
|
404
|
-
if (branchLive) return result("planned_backlog", "open issue with an unmerged convention branch (feature/ or strike/) but no PR — needs a PR or disposition");
|
|
405
|
-
if (s.hasConventionBranch) {
|
|
406
|
-
if (s.hasMergedBranchWork) return result("post_merge_limbo", "open issue whose branch work is contained in main but with no merged PR — landed via a non-PR path; run close-out");
|
|
407
|
-
return result("planned_backlog", "open issue with a convention branch but no unique commits — created, work not yet landed; needs work or disposition");
|
|
408
|
-
}
|
|
409
|
-
if (s.hasXbriefSpec) return result("planned_backlog", PLANNED_BACKLOG_SPEC_ONLY_REASON);
|
|
410
|
-
if (s.explicitlyReady) return result("planned_backlog", "open issue carries the explicit ready label — ready to start");
|
|
411
|
-
return result("clean_terminal", "open issue with no branch and no PR — backlog, never started");
|
|
412
|
-
}
|
|
413
|
-
var PLANNED_BACKLOG_SPEC_ONLY_REASON;
|
|
414
|
-
var init_pipeline_membership = __esmMin((() => {
|
|
415
|
-
PLANNED_BACKLOG_SPEC_ONLY_REASON = "open issue with an xBRIEF spec but no branch/PR — planned work whose plan encodes code paths that age; needs starting or re-planning";
|
|
416
|
-
}));
|
|
417
|
-
//#endregion
|
|
418
|
-
export { gatherProjectLensSignalsForProjects as a, init_resource_utils as c, gatherProjectLensSignals as i, parseIssueIdFromTextSync as l, init_pipeline_membership as n, init_pipeline_membership_gather as o, resolvePipelineMembership as r, listOpenPullRequestsSnapshot as s, PLANNED_BACKLOG_SPEC_ONLY_REASON as t };
|
|
486
|
+
export { gatherProjectLensSignals as a, listIssueStatesBatched as c, mapPipelineProjects as d, projectRepositories as f, parseIssueIdFromTextSync as g, init_resource_utils as h, gatherIssueBranchContainment as i, listMergedPullRequestHeadsBatched as l, snapshotBranchRefs as m, PipelineMembershipUnavailableError as n, gatherProjectLensSignalsForProjects as o, resolveRepositoryDefaultBranch as p, classifyBranchRefLine as r, init_pipeline_membership_gather as s, PIPELINE_PROJECT_CONCURRENCY as t, listOpenPullRequestsSnapshot as u };
|
|
419
487
|
|
|
420
|
-
//# sourceMappingURL=pipeline-membership-
|
|
488
|
+
//# sourceMappingURL=pipeline-membership-gather-CET40frr.js.map
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import { a as gatherProjectLensSignals, c as listIssueStatesBatched, d as mapPipelineProjects, f as projectRepositories, i as gatherIssueBranchContainment, l as listMergedPullRequestHeadsBatched, m as snapshotBranchRefs, n as PipelineMembershipUnavailableError, o as gatherProjectLensSignalsForProjects, p as resolveRepositoryDefaultBranch, r as classifyBranchRefLine, s as init_pipeline_membership_gather, t as PIPELINE_PROJECT_CONCURRENCY, u as listOpenPullRequestsSnapshot } from "./pipeline-membership-gather-CET40frr.js";
|
|
2
|
+
init_pipeline_membership_gather();
|
|
3
|
+
export { PIPELINE_PROJECT_CONCURRENCY, PipelineMembershipUnavailableError, classifyBranchRefLine, gatherIssueBranchContainment, gatherProjectLensSignals, gatherProjectLensSignalsForProjects, listIssueStatesBatched, listMergedPullRequestHeadsBatched, listOpenPullRequestsSnapshot, mapPipelineProjects, projectRepositories, resolveRepositoryDefaultBranch, snapshotBranchRefs };
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { n as __esmMin } from "./rolldown-runtime-DNCzzKnI.js";
|
|
2
|
-
import { o as getInternalTokenSync, s as init_internal_token, t as INTERNAL_TOKEN_HEADER } from "./internal-token-
|
|
2
|
+
import { o as getInternalTokenSync, s as init_internal_token, t as INTERNAL_TOKEN_HEADER } from "./internal-token-DvMTQSOS.js";
|
|
3
3
|
import { Effect } from "effect";
|
|
4
4
|
//#region ../../lib/pipeline-notifier.ts
|
|
5
5
|
/**
|
|
@@ -60,4 +60,4 @@ var init_pipeline_notifier = __esmMin((() => {
|
|
|
60
60
|
//#endregion
|
|
61
61
|
export { setPipelineHandlerSync as a, setPipelineHandler as i, notifyPipeline as n, notifyPipelineSync as r, init_pipeline_notifier as t };
|
|
62
62
|
|
|
63
|
-
//# sourceMappingURL=pipeline-notifier-
|
|
63
|
+
//# sourceMappingURL=pipeline-notifier-BuQ0e4hF.js.map
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import { a as setPipelineHandlerSync, i as setPipelineHandler, n as notifyPipeline, r as notifyPipelineSync, t as init_pipeline_notifier } from "./pipeline-notifier-
|
|
1
|
+
import { a as setPipelineHandlerSync, i as setPipelineHandler, n as notifyPipeline, r as notifyPipelineSync, t as init_pipeline_notifier } from "./pipeline-notifier-BuQ0e4hF.js";
|
|
2
2
|
init_pipeline_notifier();
|
|
3
3
|
export { notifyPipeline, notifyPipelineSync, setPipelineHandler, setPipelineHandlerSync };
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { n as init_review_status_source, s as resolveCanonicalReviewStatus } from "./review-status-source-CpvJnvnQ.js";
|
|
2
|
+
//#region ../../lib/cloister/post-merge-lifecycle-worker.ts
|
|
3
|
+
init_review_status_source();
|
|
4
|
+
const queue = /* @__PURE__ */ new Map();
|
|
5
|
+
let workerPromise = null;
|
|
6
|
+
function nextEntry() {
|
|
7
|
+
return [...queue.values()].find((entry) => !entry.running) ?? null;
|
|
8
|
+
}
|
|
9
|
+
async function drainQueue() {
|
|
10
|
+
for (let entry = nextEntry(); entry; entry = nextEntry()) {
|
|
11
|
+
entry.running = true;
|
|
12
|
+
const status = resolveCanonicalReviewStatus(entry.issueId);
|
|
13
|
+
if (!status.available || status.status?.mergeStatus !== "merged" || status.status.mergeStep !== "post-merge-cleanup") {
|
|
14
|
+
queue.delete(entry.issueId);
|
|
15
|
+
continue;
|
|
16
|
+
}
|
|
17
|
+
try {
|
|
18
|
+
const { postMergeLifecycle } = await import("./merge-agent-DrXa1CpW.js");
|
|
19
|
+
await postMergeLifecycle(entry.issueId, entry.projectPath, entry.sourceBranch, { skipDeploy: true });
|
|
20
|
+
console.log(`[deacon] Completed pending post-merge lifecycle for ${entry.issueId}`);
|
|
21
|
+
} catch (error) {
|
|
22
|
+
console.warn(`[deacon] Pending post-merge lifecycle retry failed for ${entry.issueId}: ${error}`);
|
|
23
|
+
} finally {
|
|
24
|
+
queue.delete(entry.issueId);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
function startWorker() {
|
|
29
|
+
if (workerPromise || !nextEntry()) return;
|
|
30
|
+
workerPromise = drainQueue().finally(() => {
|
|
31
|
+
workerPromise = null;
|
|
32
|
+
if (nextEntry()) startWorker();
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
function enqueuePostMergeLifecycle(issueId, projectPath, sourceBranch) {
|
|
36
|
+
const normalizedIssueId = issueId.trim().toUpperCase();
|
|
37
|
+
if (!normalizedIssueId || queue.has(normalizedIssueId)) return null;
|
|
38
|
+
queue.set(normalizedIssueId, {
|
|
39
|
+
issueId: normalizedIssueId,
|
|
40
|
+
projectPath,
|
|
41
|
+
sourceBranch,
|
|
42
|
+
running: false
|
|
43
|
+
});
|
|
44
|
+
startWorker();
|
|
45
|
+
return `Queued pending post-merge lifecycle for ${normalizedIssueId}`;
|
|
46
|
+
}
|
|
47
|
+
//#endregion
|
|
48
|
+
export { enqueuePostMergeLifecycle };
|
|
49
|
+
|
|
50
|
+
//# sourceMappingURL=post-merge-lifecycle-worker-DbO10pum.js.map
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Gn as init_projects, Yn as listProjectsSync } from "./config-yaml-CmOPzmBb.js";
|
|
2
2
|
import { join } from "node:path";
|
|
3
3
|
import { existsSync, readFileSync } from "node:fs";
|
|
4
4
|
import { execFile } from "node:child_process";
|
|
@@ -159,4 +159,4 @@ async function fetchProjectReleaseStatus(projectKey, deps = {}) {
|
|
|
159
159
|
//#endregion
|
|
160
160
|
export { fetchProjectReleaseStatus };
|
|
161
161
|
|
|
162
|
-
//# sourceMappingURL=project-pipelines-
|
|
162
|
+
//# sourceMappingURL=project-pipelines-Bim6bThI.js.map
|