@overdeck/desktop 0.45.22 → 0.45.24
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 +2 -0
- package/package.json +1 -1
- package/server/{acceptance-criteria-BH7ac_1G.js → acceptance-criteria-DDCnXF58.js} +5 -5
- package/server/{advancing-selfheal-cSvXNZLZ.js → advancing-selfheal-BVwW4qRn.js} +6 -6
- package/server/{agent-gc-Dj2gncak.js → agent-gc-CHcnvonI.js} +4 -4
- package/server/agent-state-Bc3tzUC8.js +3 -0
- package/server/{agent-state-service-DistflNn.js → agent-state-service-BsgWxZuB.js} +5 -5
- package/server/{agent-state-service-CsQ07Pxe.js → agent-state-service-D5UGKIJL.js} +1 -1
- package/server/{agents-DXdHmRTC.js → agents-EbI0zCJl.js} +4 -4
- package/server/agents-wi9NWzs2.js +3 -0
- package/server/{archive-planning-Cp_DC1j-.js → archive-planning-BZDgzoEj.js} +1 -1
- package/server/{archive-planning-BvDuWNMo.js → archive-planning-Du25Jtst.js} +30 -6
- package/server/{artifact-index-jobs-CDBFL4OU.js → artifact-index-jobs-CbEDfCDu.js} +2 -2
- package/server/assemble-J2ZZ2C15.js +339 -0
- package/server/{backlog-auto-trigger-DmA1IbYf.js → backlog-auto-trigger-2R2jog7n.js} +3 -3
- package/server/{behavior-CGj16clS.js → behavior-B3exJ42O.js} +2 -2
- package/server/{briefing-freshness-C12WgkaB.js → briefing-freshness-D1wzUIWv.js} +2 -2
- package/server/{build-info-BRpqQvNd.js → build-info-CZk_TITh.js} +1 -1
- package/server/{build-info-NU3KbXYw.js → build-info-Ie_D0_BT.js} +3 -3
- package/server/{checkpoint-manager-CTPjAmtH.js → checkpoint-manager-BI1Wxoku.js} +2 -2
- package/server/{checkpoint-manager-rOgT98WY.js → checkpoint-manager-DwbQoqrC.js} +1 -1
- package/server/checkpoint-worker.js +1 -1
- package/server/{checkpoints-B5jFNi2G.js → checkpoints-BJIs5QIA.js} +1 -1
- package/server/{checkpoints-BJum14fs.js → checkpoints-CQB1h765.js} +2 -2
- package/server/{claude-hooks-provision-BhwWK-TQ.js → claude-hooks-provision-8Ngo8TpT.js} +1 -1
- package/server/{claude-hooks-provision-D7p5WcKZ.js → claude-hooks-provision-D8GXF3_s.js} +2 -2
- package/server/{claude-permissions-nSFKH78M.js → claude-permissions-DNWEVV6z.js} +2 -2
- package/server/{claude-settings-overlay-BI_UIke0.js → claude-settings-overlay-CEdaqpWI.js} +2 -2
- package/server/{claude-settings-overlay-DHBwjS1X.js → claude-settings-overlay-DWy-Bb4Y.js} +1 -1
- package/server/cli-B86rejVV.js +3 -0
- package/server/{cli-CbKNkFE5.js → cli-RoOx5DUf.js} +9 -9
- package/server/{cliproxy-Brf_5MuG.js → cliproxy-C8a1vtTU.js} +2 -2
- package/server/{cliproxy-bONZDBbC.js → cliproxy-fHfIeiGd.js} +1 -1
- package/server/{close-issue-CxReRxIc.js → close-issue-DoOifFIK.js} +5 -5
- package/server/{closed-issue-reaper-CQ3kqha7.js → closed-issue-reaper-Bk3SU4RC.js} +9 -9
- package/server/{closed-issue-reaper-DXP2Xyv3.js → closed-issue-reaper-CktPXo8m.js} +1 -1
- package/server/{codex-CbmztVcc.js → codex-BZXGhUVB.js} +27 -8
- package/server/codex-GcHuUF-k.js +3 -0
- package/server/{codex-parser-jl8AeAmB.js → codex-parser-CFZ1_1Jl.js} +2 -2
- package/server/{config-q4Gvd8dq.js → config-BZ0sHTju.js} +2 -2
- package/server/{config-DeTsoZdR.js → config-CKxYiCmX.js} +2 -2
- package/server/{config-BJKocXKd.js → config-DzV30TOm.js} +1 -1
- package/server/{config-yaml-ig8Nwtiw.js → config-yaml-DySPNmKN.js} +77 -194
- package/server/{conflict-gate-CFqPVxEg.js → conflict-gate-BaCVrH-N.js} +3 -3
- package/server/{conflict-gate-CHU9K1vU.js → conflict-gate-BhAY7TUd.js} +1 -1
- package/server/context-layers-BrPmE__h.js +4 -0
- package/server/context-layers-igZ4FI4_.js +37 -0
- package/server/{control-settings-D_odMIaC.js → control-settings-BQp7_4uD.js} +4 -4
- package/server/{conversation-compaction-B6YSRLda.js → conversation-compaction-CgrR8YYp.js} +8 -8
- package/server/{conversation-compaction-CN4-5YYt.js → conversation-compaction-eQB5CkOe.js} +1 -1
- package/server/{conversation-service-Dq33SYEj.js → conversation-service-BLd3MYsG.js} +1 -1
- package/server/{conversation-service-C3avRVEr.js → conversation-service-DPJ71F33.js} +329 -19
- package/server/{conversations-bYpM9-kZ.js → conversations-6AfUfbwc.js} +5 -5
- package/server/{conversations-H9if0bCQ.js → conversations-CAsJF9kh.js} +1 -1
- package/server/{cost-Codk1pc2.js → cost-B2ddP6wq.js} +18 -2
- package/server/{cost-wH46-WsJ.js → cost-R-m6Yi-W.js} +3 -3
- package/server/{cost-sync-D_cre6WM.js → cost-sync-BsN6ER0n.js} +3 -3
- package/server/{dag-CJpgf9A3.js → dag-B1ucnjDU.js} +9 -9
- package/server/{dangerous-git-ops-D6AF-Hg_.js → dangerous-git-ops-BXqeWVSf.js} +1 -1
- package/server/dashboard-db-worker.js +7 -7
- package/server/{deacon-CkT_kznS.js → deacon-CU_cAYSR.js} +406 -607
- package/server/{deacon-B8HbQdqU.js → deacon-kiQrb4ZT.js} +3 -3
- package/server/{deacon-nudge-log-D6K9K-rE.js → deacon-nudge-log-6wVqAaqz.js} +3 -3
- package/server/{deacon-swarm-BryRr6AO.js → deacon-swarm-BXZZ1Z2-.js} +17 -17
- package/server/deacon-swarm-C-GwfjJy.js +2 -0
- package/server/deacon.js +8 -8
- package/server/{deploy-patrol-1IrZxicY.js → deploy-patrol-AiFoP8dw.js} +136 -19
- package/server/{deploy-window-wDf4UgHt.js → deploy-window-C3F-tihF.js} +77 -10
- package/server/{deploy-window-7ZYHh7Zp.js → deploy-window-DkZraDyj.js} +1 -1
- package/server/{dev-supervisor-C7p9kEpc.js → dev-supervisor-bcOWqdQE.js} +2 -2
- package/server/{devcontainer-renderer-CNmQy0pL.js → devcontainer-renderer-_d6XhyND.js} +3 -3
- package/server/dist-Bzy0y69j.js +3 -0
- package/server/{dist-D-Ed5yVw.js → dist-Cb_0uvpS.js} +1 -1
- package/server/{docker-BCZ89M9X.js → docker-DcMTFTUC.js} +2 -2
- package/server/{dod-DbJLYcHv.js → dod-C6n9RV3G.js} +1 -1
- package/server/{ensure-devcontainer-Cs6W9Yzj.js → ensure-devcontainer-BZgOhRo7.js} +1 -1
- package/server/{ensure-devcontainer-V5JWaAva.js → ensure-devcontainer-DNi-ono3.js} +4 -4
- package/server/{esm-shims-dTeNdq7X.js → esm-shims-OSHAYaS1.js} +1 -1
- package/server/{event-store-TnWdydfB.js → event-store-CQL6NeqB.js} +3 -3
- package/server/{event-store-CpBGsO6_.js → event-store-EV2cMiXj.js} +1 -1
- package/server/{events-Dsuv6qyB.js → events-BTdrdEq8.js} +1 -1
- package/server/{events-DSUdR-04.js → events-DTfAe4My.js} +3 -3
- package/server/{factory-BMrK4TrE.js → factory-CFibJuaw.js} +50 -13
- package/server/{feature-registry-population-B-CI9hgE.js → feature-registry-population-DKZFMbFt.js} +4 -4
- package/server/{feature-registry-storage-B972ph_A.js → feature-registry-storage-BdPuLcBX.js} +2 -2
- package/server/{features-Bc-Bmiye.js → features-ez2271oH.js} +2 -2
- package/server/{feedback-target-DZ-iAnAa.js → feedback-target-7mqqwrX6.js} +7 -7
- package/server/{feedback-target-DS6NUuSs.js → feedback-target-CoFDHiM8.js} +1 -1
- package/server/{feedback-writer-BXP6g75N.js → feedback-writer-CY5L1lB7.js} +6 -5
- package/server/{feedback-writer-Bx5z11mF.js → feedback-writer-D3a22RCd.js} +1 -1
- package/server/flywheel-DHrgCphM.js +1084 -0
- package/server/flywheel-DzGtWnJ1.js +477 -0
- package/server/flywheel-SVF02Jpq.js +2 -0
- package/server/{flywheel-merge-order-CTgHeg-W.js → flywheel-merge-order-UU0tiUld.js} +10 -9
- package/server/{flywheel-merge-order-CNKAY489.js → flywheel-merge-order-UUcsCDb6.js} +1 -1
- package/server/{forge-B1S_KZv4.js → forge-CNFnyqps.js} +2 -2
- package/server/forge-DXnS_YFH.js +2 -0
- package/server/{from-DpwQ-sc3.js → from-kNxT0bZC.js} +1 -1
- package/server/{fts-db-DmAcuCkV.js → fts-db-CE46vDkZ.js} +2 -2
- package/server/{fts-operations-7d_RkmWp.js → fts-operations-CqY6zl-i.js} +2 -2
- package/server/{git-utils-Cc3FHDKd.js → git-utils-CRw2zLPC.js} +68 -3
- package/server/git-utils-D0_yhCgF.js +3 -0
- package/server/{github-app-CDPtGF7J.js → github-app-C3QrAUd0.js} +27 -8
- package/server/{github-app-CU14oYzP.js → github-app-ClZ2lk8D.js} +1 -1
- package/server/{github-client-XjTJbBm7.js → github-client-BnIsSrEN.js} +2 -2
- package/server/{github-client-CwBZZ3t7.js → github-client-DfQYVUaw.js} +1 -1
- package/server/{github-pr-lookup-CFGeVhqv.js → github-pr-lookup-D16NGsSO.js} +2 -2
- package/server/{harness-binary-B2CTcD84.js → harness-binary-DPUi-Pv8.js} +32 -6
- package/server/{harness-resolve-D5FVQTmy.js → harness-resolve-3lNZkyT4.js} +18 -9
- package/server/{health-events-DREeevle.js → health-events-BBcTYQKU.js} +2 -2
- package/server/{health-events-C1whmd58.js → health-events-BDOHby5Q.js} +1 -1
- package/server/{hooks-yxRsjk-z.js → hooks-CKZgXlJb.js} +2 -2
- package/server/{hooks-B-HItBiS.js → hooks-DPVX1rwQ.js} +1 -1
- package/server/{hume-Dz_OymXE.js → hume-Cz8igP9E.js} +2 -2
- package/server/hume-ccTf4wTX.js +3 -0
- package/server/{idle-stack-reaper-DrCv0OAG.js → idle-stack-reaper-CuLF0j2H.js} +1 -1
- package/server/{idle-stack-reaper-Yf34xXxY.js → idle-stack-reaper-DDIRwxUY.js} +2 -2
- package/server/{in-flight-guard-BoWm66Kh.js → in-flight-guard-CAAkqPLu.js} +2 -2
- package/server/{infra-D4iNWMA5.js → infra-BEqFxlJc.js} +14 -4
- package/server/{injection-D7T75Pye.js → injection-C8aiVJrF.js} +191 -183
- package/server/{injection-BVNa4MQW.js → injection-CPUIqNhI.js} +1 -1
- package/server/{inspect-agent-BXCgNeZ4.js → inspect-agent-BLuJ1AkT.js} +137 -81
- package/server/inspect-agent-Brtz0URj.js +2 -0
- package/server/{internal-token-C9DdEOKY.js → internal-token-BrcU6qfe.js} +1 -1
- package/server/{internal-token-CXsfxslp.js → internal-token-s0-oKybJ.js} +2 -2
- package/server/{io-DQR9PMgS.js → io-C9kF1wtJ.js} +160 -184
- package/server/{issue-closed-DtmJM0D0.js → issue-closed-CDJk4pIp.js} +7 -7
- package/server/{issue-lifecycle-8PSS9Anq.js → issue-lifecycle-B8sZHVHh.js} +1 -1
- package/server/{issue-lifecycle-CeyW_HoD.js → issue-lifecycle-ojZAzDBP.js} +22 -22
- package/server/{issue-service-singleton-DBZabEl7.js → issue-service-singleton-BvJ09SaR.js} +1 -1
- package/server/{issue-service-singleton-D_RVYBuL.js → issue-service-singleton-Yx5DdmVJ.js} +8 -8
- package/server/{issues-pDW9VUNz.js → issues-BMmP_77e.js} +2 -2
- package/server/{jsonl-parser-C3HVNR5d.js → jsonl-parser-BXSlHwEh.js} +3 -3
- package/server/{label-cleanup-DPwiZlWo.js → label-cleanup-B0UJwnv5.js} +3 -3
- package/server/{label-reconciler-Df1ZduPH.js → label-reconciler-B4iOAjlC.js} +4 -4
- package/server/{launcher-generator-COgR2By1.js → launcher-generator-BBWG_SiS.js} +105 -10
- package/server/{lifecycle-io-taIb0PoH.js → lifecycle-io-BREGpnLk.js} +37 -37
- package/server/lifecycle-io-DPo7x11I.js +3 -0
- package/server/{lifecycle-CtPDcZ9u.js → lifecycle-xmBfK2GJ.js} +6 -6
- package/server/lifecycle-yPd___5E.js +121 -0
- package/server/{linear-client-DsFkIxee.js → linear-client-BsuUvkdA.js} +2 -2
- package/server/{linear-client-YwZMDIwQ.js → linear-client-CTskEeT_.js} +1 -1
- package/server/memory-fts-worker.js +1 -1
- package/server/{merge-BwsyNRJV.js → merge-B1DiziGU.js} +1 -1
- package/server/{merge-C1t-bspg.js → merge-CefQNAnq.js} +3 -3
- package/server/{merge-agent-DDiIjzk-.js → merge-agent-4WOWlSYA.js} +28 -28
- package/server/{merge-agent-B-SnXOoc.js → merge-agent-CKkgIBPB.js} +1 -1
- package/server/{merge-batch-Byt-QnEl.js → merge-batch-ClFn2T-y.js} +1 -1
- package/server/merge-ops-CR44oU9-.js +2 -0
- package/server/{merge-rebase-Cm6fXaZN.js → merge-rebase-BfaTyXsw.js} +2 -2
- package/server/merge-set-DJ8-UErs.js +83 -0
- package/server/{merge-set-6LEglm6o.js → merge-set-bUqbm3yc.js} +1 -1
- package/server/{merge-sync-B95_4in_.js → merge-sync-BJYeOODr.js} +1 -1
- package/server/{merge-sync-Do8_q32h.js → merge-sync-VPV28g0g.js} +2 -2
- package/server/{merge-train-CKana8EH.js → merge-train-CHopycP0.js} +3 -3
- package/server/{merge-train-deps-BgmqwIfA.js → merge-train-deps-D1cOZzy2.js} +4 -4
- package/server/{merge-verification-CqnUzGEK.js → merge-verification-BkaOqPsw.js} +4 -4
- package/server/{multipart-parser-tdOQDJ3o.js → multipart-parser-duPAfSBw.js} +2 -2
- package/server/{no-resume-mode-BWOSZjWd.js → no-resume-mode-Nw29vaFb.js} +11 -8
- package/server/node_modules/.package-lock.json +8 -8
- package/server/node_modules/@effect/platform-node/node_modules/@effect/platform-node-shared/package.json +3 -3
- 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/core/request.js +1 -1
- 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 +31 -6
- package/server/node_modules/undici/lib/dispatcher/client-h2.js +34 -43
- package/server/node_modules/undici/lib/handler/cache-handler.js +93 -5
- package/server/node_modules/undici/lib/handler/cache-revalidation-handler.js +10 -0
- package/server/node_modules/undici/lib/handler/redirect-handler.js +5 -2
- package/server/node_modules/undici/lib/handler/retry-handler.js +6 -4
- package/server/node_modules/undici/lib/interceptor/cache.js +21 -4
- package/server/node_modules/undici/lib/interceptor/decompress.js +4 -0
- 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 +49 -7
- 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-xklgvNA7.js → orphan-proposed-reconciler-BvKkWMJQ.js} +15 -13
- package/server/{orphan-proposed-reconciler-DSvsJ5M7.js → orphan-proposed-reconciler-CTSGcK8p.js} +1 -1
- package/server/package-lock.json +9 -9
- package/server/package.json +1 -1
- package/server/{pan-dir-DOcf6ug3.js → pan-dir-B0c3w0Ya.js} +78 -58
- package/server/{paths-DooHpt9p.js → paths-D-xWGHdh.js} +2 -2
- package/server/{pickup-CaskQ7j6.js → pickup-DUCLWrJY.js} +17 -16
- package/server/{pipeline-membership-1LGRjo-k.js → pipeline-membership-mY3GprlK.js} +186 -67
- package/server/{pipeline-notifier-CZsrU_nj.js → pipeline-notifier-BJr8gQX6.js} +1 -1
- package/server/{pipeline-notifier-B6FVsYF9.js → pipeline-notifier-BXkJzDC4.js} +2 -2
- package/server/{project-pipelines-CtNG_rvs.js → project-pipelines-C0MWUeCU.js} +2 -2
- package/server/project-repos-B6GycDh9.js +94 -0
- package/server/project-repos-DXKQsc_m.js +3 -0
- package/server/projects-vjjcmiN8.js +3 -0
- package/server/{prompts-EvhMeeHG.js → prompts-DxzFXuLl.js} +2 -2
- package/server/{providers-BDDPULlp.js → providers-qQAwGQDW.js} +7 -7
- package/server/{providers-DNSQqy2V.js → providers-u4Ga0jOr.js} +1 -1
- package/server/public/assets/{chunk-BO2N2NFS-sym_ufXe.js → chunk-BO2N2NFS-BamJdinX.js} +4 -4
- package/server/public/assets/{diagram-OG6HWLK6-CQJPBNBu.js → diagram-OG6HWLK6-DfOB8-w4.js} +1 -1
- package/server/public/assets/{dist-DukGS2YZ.js → dist-ByIuzMQW.js} +3 -3
- package/server/public/assets/{dist-Bio7THQU.js → dist-D7zYSEA6.js} +1 -1
- package/server/public/assets/{ganttDiagram-6RSMTGT7-D4lWwte3.js → ganttDiagram-6RSMTGT7-EdmRyXL3.js} +1 -1
- package/server/public/assets/{highlighted-body-OFNGDK62-CaLboCt5.js → highlighted-body-OFNGDK62-MerOfTX8.js} +1 -1
- package/server/public/assets/{index-Bwejq-5s.js → index-CWeMerGO.js} +147 -144
- package/server/public/assets/index-CenuJ3Cw.css +1 -0
- package/server/public/assets/{linear-qUWmMZ-c.js → linear-BBbArIcK.js} +1 -1
- package/server/public/assets/mermaid-GHXKKRXX-CpPWAFwE.js +1 -0
- package/server/public/assets/{pieDiagram-4H26LBE5-C4zYulEm.js → pieDiagram-4H26LBE5-BKIddiJN.js} +1 -1
- package/server/public/assets/{prod-C8VtLuWC.js → prod-B8vYiu52.js} +4 -4
- package/server/public/assets/{quadrantDiagram-W4KKPZXB-qP04zyZC.js → quadrantDiagram-W4KKPZXB-D6RtoULk.js} +1 -1
- package/server/public/assets/{sankeyDiagram-5OEKKPKP-eMPTX_cG.js → sankeyDiagram-5OEKKPKP-CLrCedZX.js} +1 -1
- package/server/public/assets/{xychartDiagram-2RQKCTM6-Dme1PIt6.js → xychartDiagram-2RQKCTM6-hznR8DYl.js} +1 -1
- package/server/public/index.html +2 -2
- package/server/{pull-requests-By_BteaL.js → pull-requests-7N8WKseP.js} +1 -1
- package/server/{pull-requests-8z2N1UOV.js → pull-requests-_lHueOHW.js} +13 -11
- package/server/{queries-ZABd5aXP.js → queries-CjNIf-Ub.js} +1200 -201
- package/server/{rally-i_goYmiA.js → rally-CyWT_lNO.js} +3 -3
- package/server/{rally-api-DqKqIMNR.js → rally-api-C8e_1JRi.js} +2 -2
- package/server/{rally-api-xHazRk0d.js → rally-api-ClOSd-Tt.js} +1 -1
- package/server/{rally-client-COYz1vYR.js → rally-client-lc-nokqr.js} +4 -4
- package/server/{rally-client-CGWEHaPd.js → rally-client-sgtVqzNU.js} +1 -1
- package/server/rally-zhhtXuDP.js +3 -0
- package/server/{reap-terminal-sessions-CaMkFOIH.js → reap-terminal-sessions-7KeHv1R1.js} +1 -1
- package/server/{reap-terminal-sessions-DG9eiMVz.js → reap-terminal-sessions-BtHPo6Xc.js} +1 -1
- package/server/rebuild-stack-CFvcBHsS.js +4 -0
- package/server/{rebuild-stack-JUm0jqYP.js → rebuild-stack-lwtsW0GO.js} +26 -35
- package/server/{reconstruct-cache-wU79aCee.js → reconstruct-cache-C3Ui7ojV.js} +6 -6
- package/server/record-CN0pj4_5.js +3 -0
- package/server/{record-update-D3N6WMFR.js → record-update-bLJxAXH4.js} +1 -1
- package/server/record-update-dE1Aw83j.js +310 -0
- package/server/{recovery-trip-DkzJSej9.js → recovery-trip-BvRWfUXM.js} +2 -2
- package/server/{release-engine-DMINVN8S.js → release-engine-Cx48W7z8.js} +5 -5
- package/server/{release-set-DeUSOEHy.js → release-set-CQfuN9-v.js} +3 -3
- package/server/{remote-b-c5bOce.js → remote-C_2hasl7.js} +3 -3
- package/server/{remote-Dr5kGYSZ.js → remote-ChgimyYa.js} +3 -3
- package/server/{remote-agents-Ct_WOyke.js → remote-agents-By1ige5O.js} +6 -6
- package/server/{remote-agents-D6O_zETW.js → remote-agents-CA3Ihlxj.js} +1 -1
- package/server/{remote-completion-Dca3hAaa.js → remote-completion-fVe9e_3u.js} +12 -12
- package/server/resume-BFv1PGpA.js +3 -0
- package/server/{review-agent-CThvgK2r.js → review-agent-CIGOQYBD.js} +29 -25
- package/server/{review-agent-CCum8sGe.js → review-agent-DNboMyW4.js} +1 -1
- package/server/{review-artifacts-CXywD0F2.js → review-artifacts-nRDPuMxd.js} +5 -5
- package/server/{review-context-OYfKUprb.js → review-context-2uj-YQ8J.js} +70 -26
- package/server/review-status-btEYlaxA.js +3 -0
- package/server/{review-status-enrichment-crNAtIpL.js → review-status-enrichment-Dci-ZwEt.js} +3 -3
- package/server/{review-status-DFRjDFef.js → review-status-kZj_KyCk.js} +77 -28
- package/server/{review-status-sync-DpAMD_WO.js → review-status-sync-BTOpxtTC.js} +10 -5
- package/server/{review-status-sync-D60PJWNL.js → review-status-sync-DSDK3OMy.js} +1 -1
- package/server/{review-verdict-feedback-CpUZl5aE.js → review-verdict-feedback-CCjVA7Uk.js} +6 -6
- package/server/{review-verdict-feedback-JImjut0z.js → review-verdict-feedback-CTd4QMBu.js} +1 -1
- package/server/{rollup-CZ02qgxk.js → rollup-BKQC7jp4.js} +1 -1
- package/server/{rollup-SyuF09e4.js → rollup-FGsKki9R.js} +8 -8
- package/server/{scanner-Br0Z5S6R.js → scanner-CnqEZeDy.js} +45 -14
- package/server/{sequence-io-fxU0DlwW.js → sequence-io-D909zgeH.js} +4 -4
- package/server/{sequencer-agent-B5YC5XVP.js → sequencer-agent-CzkcK6P5.js} +5 -5
- package/server/server.js +2961 -919
- package/server/{service-Bagb90KZ.js → service-CLeAoU6G.js} +55 -54
- package/server/{session-fork-BqQxd-V6.js → session-fork-CHI1XvL9.js} +2 -2
- package/server/{session-history-XdS0JKp3.js → session-history-BT3IvqhC.js} +4 -4
- package/server/settings-66A6uvIA.js +2 -0
- package/server/{settings-BNbocWOg.js → settings-BTMvpNFU.js} +3 -3
- package/server/{settings-uLc6DEYI.js → settings-C0zgxOGf.js} +2 -2
- package/server/{shadow-engineering-D4X_s3fA.js → shadow-engineering-BJfgm-hX.js} +2 -2
- package/server/{shadow-state-C_NkP-sa.js → shadow-state-7a-524T8.js} +2 -2
- package/server/{shadow-state-CbvsN3qG.js → shadow-state-DnDyjujH.js} +1 -1
- package/server/{shadow-utils-CYMRPeRT.js → shadow-utils-Db3oroFG.js} +2 -2
- package/server/{ship-log-__QtAFXG.js → ship-log-D9MlVzYU.js} +1 -1
- package/server/{smart-compaction-jdMkG1vo.js → smart-compaction-CV2ukKND.js} +1 -1
- package/server/{smart-compaction-CLZOWin1.js → smart-compaction-KCYScAU1.js} +7 -7
- package/server/{spawn-planning-session-D5OXo8pT.js → spawn-planning-session-DKpdFyOC.js} +35 -27
- package/server/{spawn-planning-session-8D6mE033.js → spawn-planning-session-qUC2VWu3.js} +1 -1
- package/server/{specialist-completion-CqmduO92.js → specialist-completion-Ky9wCDpb.js} +1 -1
- package/server/{specialist-context-CJ-QjFR-.js → specialist-context-Bn3dCGS2.js} +5 -5
- package/server/{specialist-handoff-logger-Dnjlwt7g.js → specialist-handoff-logger-CMEwYxa2.js} +2 -2
- package/server/{specialist-logs-CQnKzuZs.js → specialist-logs-C5p8G7tx.js} +3 -3
- package/server/{specialists-Bg9v4z3F.js → specialists-CC4r-c2s.js} +1015 -460
- package/server/{specialists-D0gGXMZx.js → specialists-CShuVGWT.js} +1 -1
- package/server/specialists-DM6bWjsi.js +3 -0
- package/server/{specialists-CwZHb5cb.js → specialists-jiuuyVkp.js} +66 -74
- package/server/specs-C8Wsn2XO.js +3 -0
- package/server/{src-BMMoA_ba.js → src-CXmtj0im.js} +6 -6
- package/server/{src-Bqdtd6po.js → src-CdmnTM2m.js} +5 -5
- package/server/{src-k039WVYY.js → src-DtcUOZCq.js} +112 -18
- package/server/stack-health-Bn3o8FBX.js +3 -0
- package/server/{stack-health-C-ifC7b0.js → stack-health-DxSdG9cW.js} +63 -9
- package/server/{stale-task-claims-L7pJkQFL.js → stale-task-claims-KJKxxiiQ.js} +4 -4
- package/server/{staleness-_Tr-GwdA.js → staleness-CT34nwr9.js} +1 -1
- package/server/{staleness-BID1BKdr.js → staleness-DPm7ClwA.js} +15 -3
- package/server/{state-home-CONQvZR0.js → state-home-Cn_Qu8IX.js} +96 -44
- package/server/{state-migrate-BeBW0KXA.js → state-migrate-BGg2ZaOt.js} +12 -3
- package/server/{stuck-remediation-CKnIryGT.js → stuck-remediation-DYuPRYYw.js} +307 -26
- package/server/{stuck-remediation-CsGD5Ksb.js → stuck-remediation-s9_2qfi6.js} +1 -1
- package/server/{substrate-bug-weights-service-CpIZILj9.js → substrate-bug-weights-service-B-FwCs5V.js} +3 -3
- package/server/{summary-fork-bX6ax6X7.js → summary-fork-D1RAk9rJ.js} +78 -12
- package/server/{summary-fork-agEMsPSo.js → summary-fork-DpcxN9tf.js} +2 -2
- package/server/supervisor/{injection-budget-C1iPirFS.js → injection-budget-Csw5tqfJ.js} +2 -41
- package/server/supervisor/pty-supervisor.js +2 -1
- package/server/supervisor/pty-token-x-ea28Us.js +43 -0
- package/server/supervisor-FTJAIsAK.js +2 -0
- package/server/{supervisor-Ctt4eRYz.js → supervisor-wM4ooB5O.js} +3 -3
- package/server/{swarm-readiness-DdmJVX7y.js → swarm-readiness-DlP_UjHq.js} +4 -4
- package/server/{system-prerequisites-DSXBvffY.js → system-prerequisites-DUDj1YHf.js} +56 -29
- package/server/{teardown-workspace-DDCf5n-a.js → teardown-workspace-DeTTImn-.js} +15 -15
- package/server/{test-agent-queue-BJZ9Nfcc.js → test-agent-queue-MbxX5vqq.js} +7 -7
- package/server/{test-verdict-Cp5tljlJ.js → test-verdict-bWYBtqBg.js} +1 -1
- package/server/{test-verdict-D_-sXIz_.js → test-verdict-gscuksPv.js} +1 -1
- package/server/{tldr-daemon-B8_oT5gx.js → tldr-daemon-BYFkts95.js} +1 -1
- package/server/{tldr-daemon-BQFmmFp0.js → tldr-daemon-C-69c3OI.js} +2 -2
- package/server/tmux-B6z7h_vZ.js +3 -0
- package/server/{tmux-L5LgvGLp.js → tmux-R7N7y-Mh.js} +76 -44
- package/server/{token-BkQLy4yS.js → token-BK6t8BIT.js} +2 -2
- package/server/token-util-DuPuNriz.js +3 -0
- package/server/{token-util-DI8sGlmF.js → token-util-DxXu-vd1.js} +1 -1
- package/server/{tracker-config-DdT-nUAM.js → tracker-config-G6latr8C.js} +2 -2
- package/server/{tracker-utils-DV3h1FYG.js → tracker-utils-B4ylXZQK.js} +1 -1
- package/server/{tracker-utils-CawsPSS2.js → tracker-utils-DHv5pSDT.js} +2 -2
- package/server/{traefik-connect-C6mJckNs.js → traefik-connect-Df2uXPsQ.js} +1 -1
- package/server/{tunnel-IdK1iTHx.js → tunnel-CDVKJpRv.js} +3 -3
- package/server/{tunnel-BIFl98rc.js → tunnel-DGdUkGoZ.js} +1 -1
- package/server/{types-7-GnJn0t.js → types-5M0lupud.js} +1 -1
- package/server/{uat-train-0Ujk8GCv.js → uat-train-B05BWkp-.js} +1 -1
- package/server/{uat-train-j0cPeMSj.js → uat-train-DDSrSoV1.js} +28 -28
- package/server/validate-IfDGkaVR.js +177 -0
- package/server/{validation-DcAgXTQp.js → validation-CC9OPqJZ.js} +1 -1
- package/server/{validation-CabEISJT.js → validation-Dw1pzDzr.js} +259 -9
- package/server/{verification-artifact-Ck1tefmz.js → verification-artifact-B3itKTxu.js} +1 -1
- package/server/{verification-artifact-BuTA1QbL.js → verification-artifact-TVFSz_q1.js} +1 -1
- package/server/{verification-runner-DlJezzef.js → verification-runner-BW4HOKAz.js} +1 -1
- package/server/{verification-runner-FiuAZ-H2.js → verification-runner-CkgX6EtI.js} +174 -124
- package/server/{vtt-parser-BnRsYzcz.js → vtt-parser-DYPbKcIJ.js} +1 -1
- package/server/{work-agent-prompt-DLthEPAq.js → work-agent-prompt-Du8Vh2aJ.js} +13 -13
- package/server/workflows-BQu4RFQ-.js +2 -0
- package/server/{workflows-BZNNYkGC.js → workflows-mbQzh6mQ.js} +39 -77
- package/server/{workspace-3IC-UkAi.js → workspace--8tnhDI0.js} +1 -1
- package/server/{workspace-D9ppycdg.js → workspace-BPUws1-_.js} +3 -3
- package/server/{workspace-config-Bigl_-Lk.js → workspace-config-CIVWZOQr.js} +1 -1
- package/server/{workspace-manager-ClkCIWTe.js → workspace-manager-CBhNdzE4.js} +76 -18
- package/server/workspace-manager-CWT55qeI.js +3 -0
- package/server/{workspace-metadata-BE0efUv_.js → workspace-metadata-BzHnwwX4.js} +1 -1
- package/server/{workspace-metadata-tiSRIWJP.js → workspace-metadata-_WygnyoX.js} +2 -2
- package/server/{workspaces-CFPcL0vl.js → workspaces-Do_9J0LQ.js} +309 -124
- package/sync-sources/agents/pan-inspect-agent.md +1 -1
- package/sync-sources/agents/pan-merge-agent.md +1 -1
- package/sync-sources/agents/pan-planning-agent.md +4 -4
- package/sync-sources/agents/pan-work-agent.md +1 -1
- package/sync-sources/dev-skills/pan-commit/SKILL.md +1 -1
- package/sync-sources/dev-skills/test-specialist-workflow/SKILL.md +1 -1
- package/sync-sources/hooks/record-cost-event.js +369 -75
- package/sync-sources/hooks/session-start-hook +7 -0
- package/sync-sources/hooks/work-agent-stop-hook +1 -1
- package/sync-sources/rules/per-bead-durability.md +1 -1
- package/sync-sources/rules/prd-authoring.md +1 -1
- package/sync-sources/skills/feature-work/SKILL.md +1 -1
- 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/SKILL.md +2 -2
- package/sync-sources/skills/pan-admin-config/SKILL.md +1 -0
- package/sync-sources/skills/pan-approve/SKILL.md +1 -1
- package/sync-sources/skills/pan-close/SKILL.md +1 -1
- package/sync-sources/skills/pan-doctor/SKILL.md +1 -1
- 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-new-project/SKILL.md +9 -11
- package/sync-sources/skills/pan-orders/SKILL.md +33 -0
- package/sync-sources/skills/pan-oversee/SKILL.md +5 -5
- package/sync-sources/skills/pan-plan/SKILL.md +6 -6
- package/sync-sources/skills/pan-quickstart/SKILL.md +1 -1
- package/sync-sources/skills/pan-recap/SKILL.md +2 -2
- package/sync-sources/skills/pan-review/SKILL.md +1 -1
- package/sync-sources/skills/pan-start/SKILL.md +7 -3
- package/sync-sources/skills/pan-swarm/SKILL.md +1 -1
- package/sync-sources/skills/pan-sync/SKILL.md +1 -1
- package/sync-sources/skills/pan-task/SKILL.md +2 -2
- package/sync-sources/skills/pan-wipe/SKILL.md +2 -2
- package/sync-sources/skills/pipeline-list/SKILL.md +1 -1
- package/sync-sources/skills/pipeline-status/SKILL.md +2 -2
- package/sync-sources/skills/plan/SKILL.md +11 -11
- package/sync-sources/skills/write-vbrief/SKILL.md +7 -282
- package/sync-sources/skills/write-xbrief/SKILL.md +295 -0
- package/sync-sources/templates/claude-md/sections/warnings.md +1 -1
- package/sync-sources/templates/traefik/dynamic/overdeck.yml.template +10 -0
- package/server/agent-state-Co5Sy2Fw.js +0 -3
- package/server/agents-DyHKlq1I.js +0 -3
- package/server/cli-BRORS9qY.js +0 -3
- package/server/codex-DNyiQDKW.js +0 -3
- package/server/context-layers-15gDOk20.js +0 -165
- package/server/context-layers-DlQKkHH2.js +0 -4
- package/server/deacon-swarm-CV54eNmU.js +0 -2
- package/server/dist-j64RzSrQ.js +0 -3
- package/server/flywheel-6WHU4O7A.js +0 -207
- package/server/flywheel-COR0mbRI.js +0 -522
- package/server/flywheel-Ctr5uuvo.js +0 -2
- package/server/forge-B0_opi-V.js +0 -2
- package/server/git-utils-CsKGnzFA.js +0 -3
- package/server/hume-BmhvfVbV.js +0 -3
- package/server/inspect-agent-Dq0z1k3H.js +0 -2
- package/server/layers-Cp1To4L8.js +0 -93
- package/server/lifecycle-io-DmY2qwCn.js +0 -3
- package/server/merge-blockers-BYjeXrVN.js +0 -41
- package/server/merge-ops-DwWCkSgo.js +0 -2
- package/server/merge-set-DiISXcC-.js +0 -139
- package/server/projects-BKkwpH6q.js +0 -3
- package/server/public/assets/index-Bdc4V9ba.css +0 -1
- package/server/public/assets/mermaid-GHXKKRXX-B5v_r7cI.js +0 -1
- package/server/rally-OSJXdiHK.js +0 -3
- package/server/rebuild-stack-CKjJAI8L.js +0 -3
- package/server/record-rwK-nKv_.js +0 -3
- package/server/record-update-Crz74r-6.js +0 -168
- package/server/resume-wZZsWtzz.js +0 -3
- package/server/review-status-Bnh-rdkY.js +0 -3
- package/server/settings-BlUsVaUc.js +0 -2
- package/server/specialists-Dqe6_HE5.js +0 -3
- package/server/specs-BhOKBzqk.js +0 -3
- package/server/stack-health-Bd06frFn.js +0 -3
- package/server/supervisor-COVHrBTg.js +0 -2
- package/server/tmux-BAvtac_u.js +0 -3
- package/server/token-util-BArZLN6w.js +0 -3
- package/server/workflows-C4mR0Reb.js +0 -2
- package/server/workspace-manager-B1WOfKvB.js +0 -3
|
@@ -1,64 +1,11 @@
|
|
|
1
1
|
import { n as __esmMin } from "./rolldown-runtime-DNCzzKnI.js";
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import { C as init_specs, S as getProjectPanPaths } from "./io-
|
|
2
|
+
import { Ht as flushAutoCommits, Ut as init_auto_commit, Wt as queueAutoCommit, ir as FsError, mr as init_errors } from "./config-yaml-DySPNmKN.js";
|
|
3
|
+
import { p as init_types } from "./types-hraoaQIp.js";
|
|
4
|
+
import { C as init_specs, F as getReadableWorkspacePanPaths, I as getWorkspacePanPaths, L as init_continue, N as ensureWorkspacePanDir, P as getLegacyWorkspacePanPaths, S as getProjectPanPaths, b as ensurePanDirs } from "./io-C9kF1wtJ.js";
|
|
5
5
|
import { Effect, FileSystem } from "effect";
|
|
6
6
|
import { join } from "path";
|
|
7
7
|
import { existsSync, readFileSync } from "node:fs";
|
|
8
8
|
import * as NodeFileSystem from "@effect/platform-node/NodeFileSystem";
|
|
9
|
-
//#region ../../lib/pan-dir/continue.ts
|
|
10
|
-
function workspacePanPaths(workspacePath) {
|
|
11
|
-
const panDir = join(workspacePath, WORKSPACE_RUNTIME_DIRNAME);
|
|
12
|
-
return {
|
|
13
|
-
panDir,
|
|
14
|
-
specPath: join(panDir, PAN_SPEC_FILENAME),
|
|
15
|
-
continuePath: join(panDir, PAN_CONTINUE_FILENAME),
|
|
16
|
-
sessionsPath: join(panDir, PAN_SESSIONS_FILENAME),
|
|
17
|
-
feedbackDir: join(panDir, PAN_FEEDBACK_DIRNAME),
|
|
18
|
-
contextPath: join(panDir, PAN_CONTEXT_FILENAME)
|
|
19
|
-
};
|
|
20
|
-
}
|
|
21
|
-
function getWorkspacePanPaths(workspacePath) {
|
|
22
|
-
return workspacePanPaths(workspacePath);
|
|
23
|
-
}
|
|
24
|
-
function getLegacyWorkspacePanPaths(workspacePath) {
|
|
25
|
-
const panDir = join(workspacePath, LEGACY_WORKSPACE_RUNTIME_DIRNAME);
|
|
26
|
-
return {
|
|
27
|
-
panDir,
|
|
28
|
-
specPath: join(panDir, PAN_SPEC_FILENAME),
|
|
29
|
-
continuePath: join(panDir, PAN_CONTINUE_FILENAME),
|
|
30
|
-
sessionsPath: join(panDir, PAN_SESSIONS_FILENAME),
|
|
31
|
-
feedbackDir: join(panDir, PAN_FEEDBACK_DIRNAME),
|
|
32
|
-
contextPath: join(panDir, PAN_CONTEXT_FILENAME)
|
|
33
|
-
};
|
|
34
|
-
}
|
|
35
|
-
/** Resolve workspace runtime reads to `.overdeck/`, then legacy `.pan/`. */
|
|
36
|
-
function getReadableWorkspacePanPaths(workspacePath) {
|
|
37
|
-
const canonical = getWorkspacePanPaths(workspacePath);
|
|
38
|
-
return existsSync(canonical.panDir) ? canonical : getLegacyWorkspacePanPaths(workspacePath);
|
|
39
|
-
}
|
|
40
|
-
function ensureWorkspacePanDir(workspacePath) {
|
|
41
|
-
return Effect.gen(function* () {
|
|
42
|
-
const fs = yield* FileSystem.FileSystem;
|
|
43
|
-
const paths = workspacePanPaths(workspacePath);
|
|
44
|
-
yield* fs.makeDirectory(paths.panDir, { recursive: true }).pipe(Effect.mapError((cause) => new FsError({
|
|
45
|
-
path: paths.panDir,
|
|
46
|
-
operation: "makeDirectory",
|
|
47
|
-
cause
|
|
48
|
-
})));
|
|
49
|
-
yield* fs.makeDirectory(paths.feedbackDir, { recursive: true }).pipe(Effect.mapError((cause) => new FsError({
|
|
50
|
-
path: paths.feedbackDir,
|
|
51
|
-
operation: "makeDirectory",
|
|
52
|
-
cause
|
|
53
|
-
})));
|
|
54
|
-
return paths;
|
|
55
|
-
}).pipe(Effect.provide(NodeFileSystem.layer));
|
|
56
|
-
}
|
|
57
|
-
var init_continue = __esmMin((() => {
|
|
58
|
-
init_errors();
|
|
59
|
-
init_types();
|
|
60
|
-
}));
|
|
61
|
-
//#endregion
|
|
62
9
|
//#region ../../lib/pan-dir/sessions.ts
|
|
63
10
|
var init_sessions = __esmMin((() => {
|
|
64
11
|
init_errors();
|
|
@@ -144,6 +91,33 @@ function getDraftsDir(projectRoot) {
|
|
|
144
91
|
function getDraftPath(projectRoot, filename) {
|
|
145
92
|
return join(getDraftsDir(projectRoot), filename);
|
|
146
93
|
}
|
|
94
|
+
function getIssueDraftPath(projectRoot, issueId) {
|
|
95
|
+
return getDraftPath(projectRoot, `${issueId.toUpperCase()}.md`);
|
|
96
|
+
}
|
|
97
|
+
function writeIssueDraft(projectRoot, issueId, content) {
|
|
98
|
+
return Effect.gen(function* () {
|
|
99
|
+
const fs = yield* FileSystem.FileSystem;
|
|
100
|
+
yield* ensurePanDirs(projectRoot);
|
|
101
|
+
const path = getIssueDraftPath(projectRoot, issueId);
|
|
102
|
+
yield* fs.writeFileString(path, content).pipe(Effect.mapError((cause) => new FsError({
|
|
103
|
+
path,
|
|
104
|
+
operation: "writeFileString",
|
|
105
|
+
cause
|
|
106
|
+
})));
|
|
107
|
+
queueAutoCommit({
|
|
108
|
+
projectRoot,
|
|
109
|
+
paths: [path],
|
|
110
|
+
subject: `chore(state): update PRD draft for ${issueId.toUpperCase()}`
|
|
111
|
+
});
|
|
112
|
+
const flushed = yield* flushAutoCommits(projectRoot);
|
|
113
|
+
if (flushed.errored || flushed.pushed === false) return yield* Effect.fail(new FsError({
|
|
114
|
+
path,
|
|
115
|
+
operation: "pushDraft",
|
|
116
|
+
cause: new Error(flushed.reason ?? "PRD draft commit was not pushed")
|
|
117
|
+
}));
|
|
118
|
+
return path;
|
|
119
|
+
}).pipe(Effect.provide(NodeFileSystem.layer));
|
|
120
|
+
}
|
|
147
121
|
/**
|
|
148
122
|
* Sync PRD-first gate predicate (PAN-2234). The surrounding module uses the
|
|
149
123
|
* Effect FileSystem for read/write/list paths; this predicate is deliberately a
|
|
@@ -200,6 +174,52 @@ function checkPrdGateSync(args) {
|
|
|
200
174
|
searched
|
|
201
175
|
};
|
|
202
176
|
}
|
|
177
|
+
/**
|
|
178
|
+
* Promote a workspace-authored PRD draft to the canonical drafts/ location on
|
|
179
|
+
* the state plane. Planning agents author the PRD at
|
|
180
|
+
* `<workspace>/.pan/drafts/<ISSUE>.md`; the PRD-first gate accepts it there,
|
|
181
|
+
* but the workspace is disposable — without this promotion the PRD is lost on
|
|
182
|
+
* workspace teardown and invisible at the canonical location (the PAN-2858
|
|
183
|
+
* defect). Runs at complete-planning, after the PRD gate.
|
|
184
|
+
*
|
|
185
|
+
* No-loss rule: an existing canonical draft is never overwritten — the
|
|
186
|
+
* canonical copy may carry operator edits the workspace copy predates.
|
|
187
|
+
*/
|
|
188
|
+
function promoteWorkspacePrdDraft(args) {
|
|
189
|
+
return Effect.suspend(() => {
|
|
190
|
+
const { projectRoot, workspacePath, issueId } = args;
|
|
191
|
+
const upperFile = `${issueId.toUpperCase()}.md`;
|
|
192
|
+
const lowerFile = `${issueId.toLowerCase()}.md`;
|
|
193
|
+
const draftsDir = getDraftsDir(projectRoot);
|
|
194
|
+
for (const canonical of [join(draftsDir, upperFile), join(draftsDir, lowerFile)]) if (existsSync(canonical)) return Effect.succeed({
|
|
195
|
+
promoted: false,
|
|
196
|
+
reason: "canonical-exists",
|
|
197
|
+
path: canonical
|
|
198
|
+
});
|
|
199
|
+
const wsDrafts = join(workspacePath, ".pan", "drafts");
|
|
200
|
+
const source = [join(wsDrafts, upperFile), join(wsDrafts, lowerFile)].find((p) => existsSync(p));
|
|
201
|
+
if (!source) return Effect.succeed({
|
|
202
|
+
promoted: false,
|
|
203
|
+
reason: "no-workspace-draft"
|
|
204
|
+
});
|
|
205
|
+
let content;
|
|
206
|
+
try {
|
|
207
|
+
content = readFileSync(source, "utf-8");
|
|
208
|
+
} catch (cause) {
|
|
209
|
+
return Effect.fail(new FsError({
|
|
210
|
+
path: source,
|
|
211
|
+
operation: "readFileString",
|
|
212
|
+
cause
|
|
213
|
+
}));
|
|
214
|
+
}
|
|
215
|
+
return writeIssueDraft(projectRoot, issueId, content).pipe(Effect.map((path) => ({
|
|
216
|
+
promoted: true,
|
|
217
|
+
reason: "promoted",
|
|
218
|
+
path,
|
|
219
|
+
source
|
|
220
|
+
})));
|
|
221
|
+
});
|
|
222
|
+
}
|
|
203
223
|
var init_drafts = __esmMin((() => {
|
|
204
224
|
init_errors();
|
|
205
225
|
init_auto_commit();
|
|
@@ -255,6 +275,6 @@ var init_pan_dir = __esmMin((() => {
|
|
|
255
275
|
init_context();
|
|
256
276
|
}));
|
|
257
277
|
//#endregion
|
|
258
|
-
export {
|
|
278
|
+
export { getDraftPath as a, clearFeedback as c, checkPrdGateSync as i, readFeedback as l, readWorkspaceContext as n, getIssueDraftPath as o, writeWorkspaceContext as r, promoteWorkspacePrdDraft as s, init_pan_dir as t, writeFeedback as u };
|
|
259
279
|
|
|
260
|
-
//# sourceMappingURL=pan-dir-
|
|
280
|
+
//# sourceMappingURL=pan-dir-B0c3w0Ya.js.map
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { n as __esmMin } from "./rolldown-runtime-DNCzzKnI.js";
|
|
2
|
-
import {
|
|
2
|
+
import { Br as getOverdeckHome, Vr as init_paths$1 } from "./config-yaml-DySPNmKN.js";
|
|
3
3
|
import { dirname, isAbsolute, join, relative, resolve } from "path";
|
|
4
4
|
import { mkdir } from "fs/promises";
|
|
5
5
|
//#region ../../lib/memory/paths.ts
|
|
@@ -62,4 +62,4 @@ var init_paths = __esmMin((() => {
|
|
|
62
62
|
//#endregion
|
|
63
63
|
export { resolveArchiveDir as a, resolveMemoryRoot as c, resolveRagRunsFile as d, resolveStatusFile as f, init_paths as i, resolveObservationsFile as l, ensureDir as n, resolveFtsDbPath as o, resolveSummariesDir as p, ensureParentDir as r, resolveIssueMemoryRoot as s, assertMemorySafeSegment as t, resolvePendingDir as u };
|
|
64
64
|
|
|
65
|
-
//# sourceMappingURL=paths-
|
|
65
|
+
//# sourceMappingURL=paths-D-xWGHdh.js.map
|
|
@@ -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-DUCLWrJY.js.map
|
|
@@ -1,8 +1,11 @@
|
|
|
1
1
|
import { n as __esmMin } from "./rolldown-runtime-DNCzzKnI.js";
|
|
2
|
-
import {
|
|
3
|
-
import { C as init_specs, w as listSpecs } from "./io-
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
2
|
+
import { Tn as init_projects, gn as getIssuePrefix } from "./config-yaml-DySPNmKN.js";
|
|
3
|
+
import { C as init_specs, w as listSpecs } from "./io-C9kF1wtJ.js";
|
|
4
|
+
import { f as init_config, m as loadConfigSync } from "./config-BZ0sHTju.js";
|
|
5
|
+
import { r as init_factory, t as createTracker } from "./factory-CFibJuaw.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-C3QrAUd0.js";
|
|
7
|
+
import { n as init_label_reconciler, t as STALE_PIPELINE_LABELS } from "./label-reconciler-B4iOAjlC.js";
|
|
8
|
+
import { join } from "node:path";
|
|
6
9
|
import { Effect } from "effect";
|
|
7
10
|
import { execFile } from "node:child_process";
|
|
8
11
|
import { promisify } from "node:util";
|
|
@@ -42,17 +45,26 @@ function listOpenPullRequestsSnapshot(owner, repo) {
|
|
|
42
45
|
}))));
|
|
43
46
|
}
|
|
44
47
|
async function runGitHubGraphql(query) {
|
|
45
|
-
|
|
46
|
-
"
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
48
|
+
try {
|
|
49
|
+
const { stdout } = await execFileAsync("gh", [
|
|
50
|
+
"api",
|
|
51
|
+
"graphql",
|
|
52
|
+
"-f",
|
|
53
|
+
`query=${query}`
|
|
54
|
+
], {
|
|
55
|
+
encoding: "utf-8",
|
|
56
|
+
timeout: 3e4,
|
|
57
|
+
maxBuffer: 4 * 1024 * 1024
|
|
58
|
+
});
|
|
59
|
+
return stdout;
|
|
60
|
+
} catch (error) {
|
|
61
|
+
const stdout = error.stdout;
|
|
62
|
+
if (typeof stdout === "string" && stdout.length > 0) try {
|
|
63
|
+
const parsed = JSON.parse(stdout);
|
|
64
|
+
if (parsed.data !== void 0 && parsed.data !== null) return stdout;
|
|
65
|
+
} catch {}
|
|
66
|
+
throw error;
|
|
67
|
+
}
|
|
56
68
|
}
|
|
57
69
|
async function listMergedPullRequestHeadsBatched(owner, repo, heads, runGraphql = runGitHubGraphql) {
|
|
58
70
|
if (heads.length === 0) return [];
|
|
@@ -76,9 +88,8 @@ async function listIssueStatesBatched(owner, repo, numbers, runGraphql = runGitH
|
|
|
76
88
|
for (const numberChunk of chunksOf(numbers)) {
|
|
77
89
|
const fields = numberChunk.map((number, index) => `i${index}: issue(number: ${number}) { state }`);
|
|
78
90
|
const query = `query { repository(owner: ${JSON.stringify(owner)}, name: ${JSON.stringify(repo)}) { ${fields.join(" ")} } }`;
|
|
79
|
-
const
|
|
80
|
-
|
|
81
|
-
if (response.errors?.length || !repository) throw new Error("Incomplete issue-state GraphQL response");
|
|
91
|
+
const repository = JSON.parse(await runGraphql(query)).data?.repository;
|
|
92
|
+
if (!repository) throw new Error("Incomplete issue-state GraphQL response");
|
|
82
93
|
for (let index = 0; index < numberChunk.length; index++) {
|
|
83
94
|
const alias = `i${index}`;
|
|
84
95
|
if (!Object.prototype.hasOwnProperty.call(repository, alias)) throw new Error(`Missing issue-state alias ${alias}`);
|
|
@@ -95,44 +106,111 @@ async function listIssueStatesBatched(owner, repo, numbers, runGraphql = runGitH
|
|
|
95
106
|
}
|
|
96
107
|
return states;
|
|
97
108
|
}
|
|
109
|
+
function resolveProjectTrackerType(project) {
|
|
110
|
+
if (project.tracker) return project.tracker;
|
|
111
|
+
if (project.rally_project) return "rally";
|
|
112
|
+
if (project.github_repo) return "github";
|
|
113
|
+
if (getIssuePrefix(project)) return "linear";
|
|
114
|
+
if (project.gitlab_repo) return "gitlab";
|
|
115
|
+
throw new Error(`Cannot resolve tracker for ${project.name}`);
|
|
116
|
+
}
|
|
117
|
+
async function listProjectTrackerIssues(project) {
|
|
118
|
+
const issuePrefix = getIssuePrefix(project)?.toUpperCase();
|
|
119
|
+
if (!issuePrefix) throw new Error(`Missing issue_prefix for project ${project.name}`);
|
|
120
|
+
const trackerType = resolveProjectTrackerType(project);
|
|
121
|
+
const trackerConfig = loadConfigSync().trackers[trackerType];
|
|
122
|
+
const tracker = createTracker({
|
|
123
|
+
type: trackerType,
|
|
124
|
+
apiKeyEnv: trackerConfig && "api_key_env" in trackerConfig ? trackerConfig.api_key_env : void 0,
|
|
125
|
+
tokenEnv: trackerConfig && "token_env" in trackerConfig ? trackerConfig.token_env : void 0,
|
|
126
|
+
team: issuePrefix,
|
|
127
|
+
owner: project.github_repo?.split("/")[0],
|
|
128
|
+
repo: project.github_repo?.split("/")[1],
|
|
129
|
+
projectId: project.gitlab_repo,
|
|
130
|
+
server: trackerType === "rally" && trackerConfig && "server" in trackerConfig ? trackerConfig.server : void 0,
|
|
131
|
+
workspace: trackerType === "rally" && trackerConfig && "workspace" in trackerConfig ? trackerConfig.workspace : void 0,
|
|
132
|
+
project: project.rally_project
|
|
133
|
+
});
|
|
134
|
+
return (await Effect.runPromise(tracker.listIssues({
|
|
135
|
+
team: issuePrefix,
|
|
136
|
+
includeClosed: true
|
|
137
|
+
}))).flatMap((issue) => {
|
|
138
|
+
const issueId = issue.ref.toUpperCase();
|
|
139
|
+
if (!issueId.startsWith(`${issuePrefix}-`)) return [];
|
|
140
|
+
return [{
|
|
141
|
+
issueId,
|
|
142
|
+
state: issue.state === "closed" ? "closed" : "open",
|
|
143
|
+
labels: issue.labels
|
|
144
|
+
}];
|
|
145
|
+
});
|
|
146
|
+
}
|
|
98
147
|
function issueNumber(issueId) {
|
|
99
148
|
const match = issueId.match(/-(\d+)$/);
|
|
100
149
|
if (!match) throw new Error(`Cannot derive GitHub issue number from ${issueId}`);
|
|
101
150
|
return Number(match[1]);
|
|
102
151
|
}
|
|
103
152
|
function issueIdFromRef(ref, issuePrefix) {
|
|
104
|
-
if (!/(?:^|\/)feature\//.test(ref)) return null;
|
|
153
|
+
if (!/(?:^|\/)(?:feature|strike)\//.test(ref)) return null;
|
|
105
154
|
const issueId = parseIssueIdFromTextSync(ref);
|
|
106
155
|
return issueId?.startsWith(`${issuePrefix}-`) ? issueId : null;
|
|
107
156
|
}
|
|
108
|
-
|
|
157
|
+
function projectRepositories(project) {
|
|
158
|
+
if (!project.workspace?.repos?.length) return [{
|
|
159
|
+
path: project.path,
|
|
160
|
+
defaultBranch: project.workspace?.default_branch ?? "main"
|
|
161
|
+
}];
|
|
162
|
+
return project.workspace.repos.map((repo) => ({
|
|
163
|
+
path: join(project.path, repo.path),
|
|
164
|
+
defaultBranch: repo.default_branch ?? project.workspace?.default_branch ?? "main"
|
|
165
|
+
}));
|
|
166
|
+
}
|
|
167
|
+
/** Gather all durable pipeline lenses for one project in batches. */
|
|
109
168
|
async function gatherProjectLensSignals(project, deps = defaultDeps) {
|
|
110
|
-
if (!project.github_repo) return [];
|
|
111
|
-
const [owner, repo] = project.github_repo.split("/");
|
|
112
|
-
if (!owner || !repo) throw new Error(`Invalid github_repo for ${project.name}: ${project.github_repo}`);
|
|
113
169
|
const issuePrefix = getIssuePrefix(project)?.toUpperCase();
|
|
114
|
-
if (!issuePrefix) throw new Error(`Missing issue_prefix for
|
|
115
|
-
const
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
"
|
|
130
|
-
|
|
131
|
-
|
|
170
|
+
if (!issuePrefix) throw new Error(`Missing issue_prefix for project ${project.name}`);
|
|
171
|
+
const githubRepository = project.github_repo?.split("/");
|
|
172
|
+
const owner = githubRepository?.[0];
|
|
173
|
+
const repo = githubRepository?.[1];
|
|
174
|
+
if (project.github_repo && (!owner || !repo)) throw new Error(`Invalid github_repo for ${project.name}: ${project.github_repo}`);
|
|
175
|
+
const branchSnapshots = projectRepositories(project).map(async (repository) => {
|
|
176
|
+
const [refs, unmergedRefs, firstParentShas] = await Promise.all([
|
|
177
|
+
deps.run("git", [
|
|
178
|
+
"for-each-ref",
|
|
179
|
+
"--format=%(objectname) %(refname:short)",
|
|
180
|
+
"refs/heads/feature/*",
|
|
181
|
+
"refs/remotes/origin/feature/*",
|
|
182
|
+
"refs/heads/strike/*",
|
|
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
|
+
});
|
|
206
|
+
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([]),
|
|
211
|
+
Promise.all(branchSnapshots),
|
|
132
212
|
deps.listSpecIssueIds(project.path)
|
|
133
213
|
]);
|
|
134
|
-
const refs = branchRefs.split("\n").map((ref) => ref.trim()).filter(Boolean);
|
|
135
|
-
const unmerged = new Set(unmergedRefs.split("\n").map((ref) => ref.trim()).filter(Boolean));
|
|
136
214
|
const candidates = /* @__PURE__ */ new Set();
|
|
137
215
|
const labelsByIssue = /* @__PURE__ */ new Map();
|
|
138
216
|
const knownStateByIssue = /* @__PURE__ */ new Map();
|
|
@@ -141,7 +219,15 @@ async function gatherProjectLensSignals(project, deps = defaultDeps) {
|
|
|
141
219
|
const headRefsByIssue = /* @__PURE__ */ new Map();
|
|
142
220
|
const branchIssues = /* @__PURE__ */ new Set();
|
|
143
221
|
const unmergedBranchIssues = /* @__PURE__ */ new Set();
|
|
222
|
+
const mergedBranchWorkIssues = /* @__PURE__ */ new Set();
|
|
144
223
|
const specIssues = new Set(specIssueIds.map((id) => id.toUpperCase()).filter((id) => id.startsWith(`${issuePrefix}-`)));
|
|
224
|
+
for (const issue of trackerIssues) {
|
|
225
|
+
const id = issue.issueId.toUpperCase();
|
|
226
|
+
if (!id.startsWith(`${issuePrefix}-`)) continue;
|
|
227
|
+
labelsByIssue.set(id, issue.labels);
|
|
228
|
+
knownStateByIssue.set(id, issue.state);
|
|
229
|
+
if (issue.state === "open" || STALE_PIPELINE_LABELS.some((label) => issue.labels.includes(label))) candidates.add(id);
|
|
230
|
+
}
|
|
145
231
|
for (const issue of openIssues) {
|
|
146
232
|
const id = `${issuePrefix}-${issue.number}`;
|
|
147
233
|
candidates.add(id);
|
|
@@ -155,7 +241,7 @@ async function gatherProjectLensSignals(project, deps = defaultDeps) {
|
|
|
155
241
|
knownStateByIssue.set(id, issue.state);
|
|
156
242
|
}
|
|
157
243
|
for (const pr of openPrs) {
|
|
158
|
-
if (pr.headRepoFullName.toLowerCase() !== `${owner}/${repo}`.toLowerCase()) continue;
|
|
244
|
+
if (!owner || !repo || pr.headRepoFullName.toLowerCase() !== `${owner}/${repo}`.toLowerCase()) continue;
|
|
159
245
|
const id = issueIdFromRef(pr.headRefName, issuePrefix);
|
|
160
246
|
if (id) {
|
|
161
247
|
candidates.add(id);
|
|
@@ -163,34 +249,61 @@ async function gatherProjectLensSignals(project, deps = defaultDeps) {
|
|
|
163
249
|
headRefsByIssue.set(id, new Set([...headRefsByIssue.get(id) ?? [], pr.headRefName]));
|
|
164
250
|
}
|
|
165
251
|
}
|
|
166
|
-
for (const
|
|
167
|
-
const
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
const
|
|
172
|
-
|
|
173
|
-
|
|
252
|
+
for (const snapshot of branches) {
|
|
253
|
+
const refLines = snapshot.refs.split("\n").map((line) => line.trim()).filter(Boolean);
|
|
254
|
+
const unmerged = new Set(snapshot.unmergedRefs.split("\n").map((ref) => ref.trim()).filter(Boolean));
|
|
255
|
+
const firstParentShas = new Set(snapshot.firstParentShas.split("\n").map((sha) => sha.trim()).filter(Boolean));
|
|
256
|
+
for (const line of refLines) {
|
|
257
|
+
const spaceIdx = line.indexOf(" ");
|
|
258
|
+
const tipSha = spaceIdx === -1 ? null : line.slice(0, spaceIdx);
|
|
259
|
+
const ref = spaceIdx === -1 ? line : line.slice(spaceIdx + 1);
|
|
260
|
+
const id = issueIdFromRef(ref, issuePrefix);
|
|
261
|
+
if (id) {
|
|
262
|
+
candidates.add(id);
|
|
263
|
+
branchIssues.add(id);
|
|
264
|
+
const headRef = ref.replace(/^origin\//, "");
|
|
265
|
+
headRefsByIssue.set(id, new Set([...headRefsByIssue.get(id) ?? [], headRef]));
|
|
266
|
+
if (unmerged.has(ref)) unmergedBranchIssues.add(id);
|
|
267
|
+
else if (tipSha && !firstParentShas.has(tipSha)) mergedBranchWorkIssues.add(id);
|
|
268
|
+
}
|
|
174
269
|
}
|
|
175
270
|
}
|
|
176
271
|
for (const id of specIssues) candidates.add(id);
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
272
|
+
if (owner && repo) {
|
|
273
|
+
const unknownIssueIds = [...candidates].filter((id) => !knownStateByIssue.has(id));
|
|
274
|
+
const issueStateCandidates = unknownIssueIds.filter((id) => openPrIssues.has(id) || branchIssues.has(id));
|
|
275
|
+
const issueStateCandidateSet = new Set(issueStateCandidates);
|
|
276
|
+
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)) : [];
|
|
278
|
+
const stateByNumber = new Map(issueStates.map((entry) => [entry.number, entry.state]));
|
|
279
|
+
for (const id of issueStateCandidates) {
|
|
280
|
+
const state = stateByNumber.get(issueNumber(id));
|
|
281
|
+
if (state) knownStateByIssue.set(id, state);
|
|
282
|
+
else candidates.delete(id);
|
|
283
|
+
}
|
|
284
|
+
const openCandidates = [...candidates].filter((id) => knownStateByIssue.get(id) === "open");
|
|
285
|
+
const candidateHeads = [...new Set(openCandidates.flatMap((id) => [
|
|
286
|
+
...headRefsByIssue.get(id) ?? [],
|
|
287
|
+
`feature/${id.toLowerCase()}`,
|
|
288
|
+
`strike/${id.toLowerCase()}`
|
|
289
|
+
]))];
|
|
290
|
+
const mergedHeads = new Set(await deps.listMergedPullRequestHeads(owner, repo, candidateHeads));
|
|
291
|
+
for (const id of openCandidates) if ([
|
|
292
|
+
...headRefsByIssue.get(id) ?? [],
|
|
293
|
+
`feature/${id.toLowerCase()}`,
|
|
294
|
+
`strike/${id.toLowerCase()}`
|
|
295
|
+
].some((head) => mergedHeads.has(head))) mergedPrIssues.add(id);
|
|
296
|
+
}
|
|
185
297
|
return [...candidates].sort().map((id) => ({
|
|
186
298
|
issueId: id,
|
|
187
|
-
issueOpen:
|
|
299
|
+
issueOpen: knownStateByIssue.get(id) === "open",
|
|
188
300
|
hasOpenPr: openPrIssues.has(id),
|
|
189
301
|
hasMergedPr: mergedPrIssues.has(id),
|
|
190
302
|
hasConventionBranch: branchIssues.has(id),
|
|
191
303
|
branchUnmerged: unmergedBranchIssues.has(id),
|
|
304
|
+
hasMergedBranchWork: mergedBranchWorkIssues.has(id),
|
|
192
305
|
phaseLabel: STALE_PIPELINE_LABELS.find((label) => labelsByIssue.get(id)?.includes(label)) ?? null,
|
|
193
|
-
|
|
306
|
+
hasXbriefSpec: specIssues.has(id),
|
|
194
307
|
explicitlyReady: labelsByIssue.get(id)?.includes("ready") ?? false
|
|
195
308
|
}));
|
|
196
309
|
}
|
|
@@ -221,9 +334,11 @@ var init_pipeline_membership_gather = __esmMin((() => {
|
|
|
221
334
|
init_github_app();
|
|
222
335
|
init_concurrency();
|
|
223
336
|
init_label_reconciler();
|
|
337
|
+
init_config();
|
|
224
338
|
init_specs();
|
|
225
339
|
init_projects();
|
|
226
340
|
init_resource_utils();
|
|
341
|
+
init_factory();
|
|
227
342
|
execFileAsync = promisify(execFile);
|
|
228
343
|
GRAPHQL_ALIAS_CHUNK_SIZE = 50;
|
|
229
344
|
cachedOpenPullRequests = createSettledTtlPromiseCache(3e4);
|
|
@@ -233,6 +348,7 @@ var init_pipeline_membership_gather = __esmMin((() => {
|
|
|
233
348
|
listOpenPullRequests: listOpenPullRequestsSnapshot,
|
|
234
349
|
listMergedPullRequestHeads: listMergedPullRequestHeadsBatched,
|
|
235
350
|
listIssueStates: listIssueStatesBatched,
|
|
351
|
+
listTrackerIssues: listProjectTrackerIssues,
|
|
236
352
|
listSpecIssueIds: async (projectPath) => (await Effect.runPromise(listSpecs(projectPath))).map((entry) => entry.issueId),
|
|
237
353
|
run: async (command, args, cwd) => {
|
|
238
354
|
const { stdout } = await execFileAsync(command, args, {
|
|
@@ -285,17 +401,20 @@ function resolvePipelineMembership(s) {
|
|
|
285
401
|
}
|
|
286
402
|
if (s.hasOpenPr) return result("in_flight", "open issue with an open PR — active work");
|
|
287
403
|
if (s.hasMergedPr) return result("post_merge_limbo", "open issue with a merged PR — merged but never closed out; run close-out");
|
|
288
|
-
if (branchLive) return result("planned_backlog", "open issue with an unmerged
|
|
289
|
-
if (s.hasConventionBranch)
|
|
290
|
-
|
|
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);
|
|
291
410
|
if (s.explicitlyReady) return result("planned_backlog", "open issue carries the explicit ready label — ready to start");
|
|
292
411
|
return result("clean_terminal", "open issue with no branch and no PR — backlog, never started");
|
|
293
412
|
}
|
|
294
413
|
var PLANNED_BACKLOG_SPEC_ONLY_REASON;
|
|
295
414
|
var init_pipeline_membership = __esmMin((() => {
|
|
296
|
-
PLANNED_BACKLOG_SPEC_ONLY_REASON = "open issue with
|
|
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";
|
|
297
416
|
}));
|
|
298
417
|
//#endregion
|
|
299
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 };
|
|
300
419
|
|
|
301
|
-
//# sourceMappingURL=pipeline-membership-
|
|
420
|
+
//# sourceMappingURL=pipeline-membership-mY3GprlK.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-BXkJzDC4.js";
|
|
2
2
|
init_pipeline_notifier();
|
|
3
3
|
export { notifyPipeline, notifyPipelineSync, setPipelineHandler, setPipelineHandlerSync };
|
|
@@ -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-s0-oKybJ.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-BXkJzDC4.js.map
|