@overdeck/desktop 0.46.0 → 0.47.1
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 +4 -1
- package/package.json +1 -1
- package/server/{acceptance-criteria-CCwFGICj.js → acceptance-criteria-Cd7ZGZCq.js} +2 -2
- package/server/{advancing-selfheal-De1L-Sb4.js → advancing-selfheal-DieFp3qi.js} +6 -6
- package/server/{agent-gc-CBULruzm.js → agent-gc-BMcgTDl7.js} +5 -5
- package/server/{agent-state-VQk8fY9F.js → agent-state-DyZJia9f.js} +1 -1
- package/server/{agent-state-service-BlnSkRFA.js → agent-state-service-BOzQhLjU.js} +15 -9
- package/server/agent-state-service-DFO6qvHp.js +2 -0
- package/server/agent-state-source-Ca_zCaII.js +21 -0
- package/server/{agents-C5rWYhb6.js → agents-CtACUuVG.js} +23 -16
- package/server/{agents-BKKkxKgK.js → agents-Dnn4XgdB.js} +1 -1
- package/server/archive-planning-BHCd_eL5.js +2 -0
- package/server/{archive-planning-C0lAbNB_.js → archive-planning-Binfb99i.js} +10 -6
- package/server/{artifact-index-jobs-ug6ZxIP5.js → artifact-index-jobs-Jn7BGOtV.js} +2 -2
- package/server/{assemble-DnffNpOo.js → assemble-DsqK9OAq.js} +2 -2
- package/server/{tmux-dedup-DbN6MGzM.js → auto-spawn-consent-BooqhC3L.js} +262 -13
- package/server/{backlog-auto-trigger-Dh-i9PQf.js → backlog-auto-trigger-BADGPxov.js} +3 -3
- package/server/{behavior-CfIg6pKp.js → behavior-B7biGtFT.js} +2 -2
- package/server/boot-reconciled-stop-events-bQUzU8ns.js +44 -0
- package/server/{bridge-pool-patrol-CUFmjVDN.js → bridge-pool-patrol-DsPj6F7t.js} +1 -1
- package/server/{briefing-freshness-DHmCSLar.js → briefing-freshness-CUerZqWd.js} +2 -2
- package/server/{build-info-CuFfxZxp.js → build-info-D0q_i8WM.js} +3 -3
- package/server/{build-info-BP160gU7.js → build-info-Du74MKiP.js} +1 -1
- package/server/{checkpoint-manager-Dxh0FYsv.js → checkpoint-manager-Cu-R5Uzg.js} +1 -1
- package/server/{checkpoint-manager-DEWD82qK.js → checkpoint-manager-R5tnaxEY.js} +2 -2
- package/server/checkpoint-worker.js +1 -1
- package/server/{checkpoints-CZvbtLnr.js → checkpoints-DYtLu-PB.js} +2 -2
- package/server/{checkpoints-DMTgXuLG.js → checkpoints-wF84ubZ8.js} +1 -1
- package/server/{claude-hooks-provision-fvy4RD2b.js → claude-hooks-provision-DXI3Wqlm.js} +2 -2
- package/server/{claude-hooks-provision-CN-xo-do.js → claude-hooks-provision-UKxCeOyj.js} +1 -1
- package/server/{claude-permissions-CN0cSCPp.js → claude-permissions-DYVLnX9t.js} +2 -2
- package/server/{claude-settings-overlay-CJn35FHQ.js → claude-settings-overlay-DsbpIq2d.js} +2 -2
- package/server/{claude-settings-overlay-Dabi9slj.js → claude-settings-overlay-DxP2F_gY.js} +1 -1
- package/server/cli-D6mRfUE6.js +3 -0
- package/server/{cli-oCWYA1pE.js → cli-DzRKxxP_.js} +9 -9
- package/server/{cliproxy-C8mB3KuB.js → cliproxy-CG4meRFc.js} +2 -2
- package/server/{cliproxy-PGwTX_o8.js → cliproxy-Cwzw39yN.js} +1 -1
- package/server/{close-issue-D5MF5GqF.js → close-issue-BX1bATJy.js} +5 -5
- package/server/{closed-issue-reaper-CJ24u0Zt.js → closed-issue-reaper-DvnTSN6a.js} +1 -1
- package/server/{closed-issue-reaper-Cltx86x5.js → closed-issue-reaper-hLt0W86J.js} +62 -12
- package/server/{codex-Drlf5Xhf.js → codex-BYwi1uyW.js} +6 -6
- package/server/{codex-parser-DpB89Vqa.js → codex-parser-Poyz29GE.js} +2 -2
- package/server/{codex-BdEsUFWh.js → codex-rnJN3v3_.js} +1 -1
- package/server/{compaction-continuation-K2AxQX4H.js → compaction-continuation-DtMfHN0f.js} +3 -3
- package/server/{config-Dr3pW6w6.js → config-CX4vk1CV.js} +2 -2
- package/server/{config-DV-grfQc.js → config-R793W0yA.js} +1 -1
- package/server/{config-B2IMcBxx.js → config-ktAVnp4s.js} +2 -2
- package/server/{config-yaml-CmOPzmBb.js → config-yaml-CxdwhAIA.js} +10 -2
- package/server/{conflict-gate-B9cN3SBi.js → conflict-gate-BNv6UolH.js} +59 -13
- package/server/conflict-gate-BSTlwCtF.js +3 -0
- package/server/{context-layers-D6LZo3l1.js → context-layers-DCdaGsRG.js} +2 -2
- package/server/{context-layers-dR5YxHYB.js → context-layers-DlWsDiRF.js} +3 -3
- package/server/{control-settings-C7DUehE1.js → control-settings-qYYHrIqy.js} +13 -6
- package/server/{conversation-compaction-Dj4FAKoZ.js → conversation-compaction-BxUKObHb.js} +1 -1
- package/server/{conversation-compaction-BoqdDXWF.js → conversation-compaction-CXQrN3I_.js} +8 -8
- package/server/{conversation-service-BCxl4f8Z.js → conversation-service-CDnQ3ayN.js} +1 -1
- package/server/{conversation-service-5aCnq1zR.js → conversation-service-CZiUE8Uw.js} +8 -7
- package/server/{conversations-BUpYsOZg.js → conversations-D7lR670u.js} +4 -4
- package/server/{conversations-C34dyIb9.js → conversations-DXl5YTf4.js} +1 -1
- package/server/{cost-Bgcub5kW.js → cost-Aat8HfO_.js} +2 -2
- package/server/{cost-CvxRrucd.js → cost-CWvN9FP2.js} +3 -3
- package/server/{cost-sync-Dv3LUaNW.js → cost-sync-DiUBXwl6.js} +3 -3
- package/server/{dag-ombYYt4s.js → dag-5QlmH0oC.js} +2 -2
- package/server/{dangerous-git-ops-BcJPC5Rr.js → dangerous-git-ops-DWX6Og8c.js} +1 -1
- package/server/dashboard-db-worker.js +7 -7
- package/server/{deacon-hi9KLPLT.js → deacon-B1LD5cJU.js} +741 -211
- package/server/{deacon-DrXqT9LQ.js → deacon-PW_bg4uL.js} +3 -3
- package/server/{deacon-nudge-log-BNBebzeL.js → deacon-nudge-log-DPHsO14z.js} +3 -3
- package/server/{deacon-pending-lifecycle-Cpk0k7Hi.js → deacon-pending-lifecycle-2ZflPxgo.js} +3 -3
- package/server/deacon-swarm-BkKR7SXu.js +2 -0
- package/server/{deacon-swarm-DBxUaO-A.js → deacon-swarm-DwGUgSVp.js} +15 -14
- package/server/deacon.js +8 -8
- package/server/{dead-end-trip-CQcP70ND.js → dead-end-trip-B06RFIr2.js} +3 -3
- package/server/{delivery-Da0zEMY4.js → delivery-C2M73sBg.js} +1 -1
- package/server/{deploy-patrol-Df-Tmaq0.js → deploy-patrol-BNjeCL8u.js} +8 -8
- package/server/{deploy-queue-UjKGYsDe.js → deploy-queue-CKT_Ia9p.js} +2 -2
- package/server/{deploy-queue-9SrhZR63.js → deploy-queue-DMMYhFC8.js} +1 -1
- package/server/{deploy-window-rpqpWqHA.js → deploy-window-DC8lze3d.js} +6 -6
- package/server/{deploy-window-jOiPRHL0.js → deploy-window-D_AimdNN.js} +1 -1
- package/server/{dev-supervisor-CC46Ig8q.js → dev-supervisor-C4F0vbno.js} +2 -2
- package/server/{devcontainer-renderer-68CSCRnu.js → devcontainer-renderer-66sqMQIi.js} +3 -3
- package/server/{dist-CJy72uEg.js → dist-C5FT9lTG.js} +1 -1
- package/server/dist-qcf9gAP0.js +3 -0
- package/server/{dist-src-Bik83hFi.js → dist-src-B-AlGWSl.js} +1 -1
- package/server/{docker-BMVTSFL5.js → docker-BxrFhTZ_.js} +1 -1
- package/server/{docker-Dam7mbIB.js → docker-CoAT8R0J.js} +2 -2
- package/server/{dod-Dar-yheg.js → dod-Bg6wsKTV.js} +26 -5
- package/server/durable-review-pipeline-D_DcfIGP.js +3 -0
- package/server/{durable-review-pipeline-CGZ5QBxh.js → durable-review-pipeline-HkAgnx0L.js} +5 -2
- package/server/{ensure-devcontainer-C98V8yW-.js → ensure-devcontainer-Bg5HJAcO.js} +1 -1
- package/server/{ensure-devcontainer-B057YA81.js → ensure-devcontainer-DTxChVuA.js} +4 -4
- package/server/{esm-shims-Br9BPdkR.js → esm-shims-CaBWIR7f.js} +1 -1
- package/server/{event-store-ELqkVOn0.js → event-store-5UKzh9Jf.js} +1 -1
- package/server/{event-store-zY5MJHgF.js → event-store-CrHcVC5_.js} +3 -3
- package/server/{events-D6pyqhzM.js → events-ChEFB7Jp.js} +1 -1
- package/server/{events-D9PR1IC0.js → events-DhRN-6vM.js} +3 -3
- package/server/{factory-CRoOpGsF.js → factory-BezSPaTd.js} +5 -5
- package/server/{feature-registry-population--YUXU999.js → feature-registry-population-DhswNiXx.js} +4 -4
- package/server/{feature-registry-storage-BORBTo0y.js → feature-registry-storage-CUVNpAso.js} +2 -2
- package/server/{features--nFkJY8v.js → features-B2CfNPFw.js} +2 -2
- package/server/{feedback-target-C0ZzyHvU.js → feedback-target-CMrEAoeA.js} +1 -1
- package/server/{feedback-target-Dt9BsapX.js → feedback-target-VBr9gKgX.js} +18 -7
- package/server/{feedback-writer-D1fm-5Z8.js → feedback-writer-CY91ckuw.js} +1 -1
- package/server/{feedback-writer-BG0RUZiu.js → feedback-writer-xpFgU632.js} +5 -5
- package/server/{flywheel-BiT3odRb.js → flywheel-CTVY3yCG.js} +38 -19
- package/server/{flywheel-CLVB55Be.js → flywheel-DQqsSm7P.js} +14 -14
- package/server/{flywheel-BekukH4i.js → flywheel-DsICCjTR.js} +1 -1
- package/server/{flywheel-merge-order-BKw9o6ku.js → flywheel-merge-order-C-TI4JGu.js} +1 -1
- package/server/{flywheel-merge-order-BJv1DZz1.js → flywheel-merge-order-CMGz-imq.js} +7 -7
- package/server/forge-D647IMNa.js +3 -0
- package/server/{forge-CZbSg6Ds.js → forge-RTNqJe6a.js} +2 -2
- package/server/{from-D_4_dk7i.js → from-DxGcivc9.js} +1 -1
- package/server/fs-lock-Bre3sGoz.js +130 -0
- package/server/{fts-db-BeOomFa-.js → fts-db-wROfFfje.js} +2 -2
- package/server/{fts-operations-BdewJ_g9.js → fts-operations-BuTdlZFA.js} +2 -2
- package/server/{git-utils-CI6cwyyC.js → git-utils-CedsVume.js} +1 -1
- package/server/{git-utils-ameCgDdy.js → git-utils-DtdoEXJk.js} +4 -4
- package/server/{github-app-DtAsvwzK.js → github-app-DIE8BkHI.js} +1 -1
- package/server/{github-app-CQ1Lo6LA.js → github-app-gVnZcP9B.js} +2 -2
- package/server/{github-client-BfyDxuRN.js → github-client-BrAC6ELh.js} +3 -3
- package/server/{github-client-Cj0yl_07.js → github-client-CBOkvBUl.js} +1 -1
- package/server/{github-pr-lookup-BDq6Wznz.js → github-pr-lookup-CgMULTPf.js} +2 -2
- package/server/{harness-binary-DqkftwTb.js → harness-binary-CnBHpd57.js} +2 -2
- package/server/{harness-resolve-CqMqM1Mb.js → harness-resolve-BVj6sI8m.js} +4 -4
- package/server/{health-events-CazRxJUS.js → health-events-BBWO_Dh9.js} +2 -2
- package/server/{health-events-_xfTaOUs.js → health-events-Der6bOkm.js} +1 -1
- package/server/{hooks-BnJsxlSq.js → hooks-BJNal-bs.js} +1 -1
- package/server/{hooks-BO3QT1sn.js → hooks-BOavco-e.js} +2 -2
- package/server/{hume-CDYJxqx-.js → hume-DBocJFkA.js} +2 -2
- package/server/hume-DtWN8oV5.js +3 -0
- package/server/{idle-stack-reaper-BYqERdkE.js → idle-stack-reaper-CyGxXOfC.js} +1 -1
- package/server/{idle-stack-reaper-CnGx_PO_.js → idle-stack-reaper-DQFh8rDh.js} +2 -2
- package/server/{in-flight-guard-Bq3epG58.js → in-flight-guard-nXEKoxI7.js} +1 -1
- package/server/{infra-BjuxvjdS.js → infra-BDQDRopn.js} +15 -4
- package/server/{injection-UCf8EsjX.js → injection-CCopdUKz.js} +7 -7
- package/server/{injection-DZxlV2al.js → injection-DfFFEMKL.js} +1 -1
- package/server/inspect-agent-CPqXI81t.js +2 -0
- package/server/{inspect-agent-6kylZnrm.js → inspect-agent-FCDlNT_i.js} +12 -12
- package/server/{internal-token-DvMTQSOS.js → internal-token-BG6yQKNL.js} +2 -2
- package/server/{internal-token-M9omeXM1.js → internal-token-BJZa40Ld.js} +1 -1
- package/server/{io-VHvc0Ssp.js → io-C0NV7y6C.js} +4 -4
- package/server/{issue-closed-B6KJkmHZ.js → issue-closed-CNNGbhWm.js} +8 -8
- package/server/{issue-lifecycle-C4Zj0WmE.js → issue-lifecycle-BXfzxFCD.js} +29 -23
- package/server/{issue-lifecycle-9gk3fnXN.js → issue-lifecycle-DSH0GpWC.js} +1 -1
- package/server/{issue-service-singleton-DmCh7EHj.js → issue-service-singleton-F3A5VP6M.js} +10 -10
- package/server/{issue-service-singleton-PMx8F1jr.js → issue-service-singleton-lwFJ4dHk.js} +1 -1
- package/server/{issues-CgnQ1OGQ.js → issues-DA-U_MpR.js} +2 -2
- package/server/{jsonl-parser-DJOH_O-w.js → jsonl-parser-BXiGANOh.js} +3 -3
- package/server/{label-cleanup-Dv7AV_R1.js → label-cleanup-BnxRk0Eo.js} +3 -3
- package/server/{lifecycle-CTdOWYMi.js → lifecycle-DOgGnpIv.js} +2 -2
- package/server/{lifecycle-DDN8ApVY.js → lifecycle-Di48-w4x.js} +6 -6
- package/server/{lifecycle-io-D-lGdzK3.js → lifecycle-io-1XSeczTr.js} +5 -5
- package/server/{lifecycle-io-D_zTLvP1.js → lifecycle-io-eVG6v_8-.js} +1 -1
- package/server/{linear-client-BQU36QqE.js → linear-client-CYZRrcjp.js} +3 -3
- package/server/{linear-client-CY4O_Tu3.js → linear-client-CvGo9n7M.js} +1 -1
- package/server/{linear-mcp-auth-BnU4TYfY.js → linear-mcp-auth-Cp0XaP96.js} +5 -5
- package/server/{linear-mcp-auth-NYBq_oHZ.js → linear-mcp-auth-DoJnjdPZ.js} +1 -1
- package/server/memory-fts-worker.js +1 -1
- package/server/{merge-Bpx4jjht.js → merge-DO14mOr3.js} +3 -3
- package/server/{merge-idOG--29.js → merge-ZF99ig6A.js} +1 -1
- package/server/{merge-agent-DrXa1CpW.js → merge-agent-C1-9zbP_.js} +1 -1
- package/server/{merge-agent-DdMVSV2Y.js → merge-agent-gpiRkcvj.js} +31 -31
- package/server/{merge-batch-C5q1c1GX.js → merge-batch-C11ocNkO.js} +1 -1
- package/server/{merge-completeness-BMm8tMyZ.js → merge-completeness-BUzPZy0E.js} +4 -4
- package/server/{merge-completeness-D0ljXbk3.js → merge-completeness-CghMbyX7.js} +1 -1
- package/server/merge-ops-7QqziXAh.js +2 -0
- package/server/merge-rebase-B4pgzvQJ.js +2 -0
- package/server/{merge-rebase-xLnMlw5h.js → merge-rebase-iwlUzZjr.js} +2 -2
- package/server/{merge-set-DzsOTBg5.js → merge-set-BymrheTj.js} +1 -1
- package/server/{merge-set-DH7ot3yz.js → merge-set-Dbnx4chw.js} +4 -4
- package/server/{merge-sync-CQ-LgZ1_.js → merge-sync-CM978zez.js} +7 -4
- package/server/merge-sync-CqEtqjI2.js +3 -0
- package/server/{merge-train-DTEMyIu4.js → merge-train-DvLcAn1G.js} +4 -4
- package/server/{merge-train-deps-CNPJzepw.js → merge-train-deps-Cl_kcRbO.js} +21 -15
- package/server/{merge-verification-x3JO8Dtz.js → merge-verification-c9Y9mllw.js} +6 -6
- package/server/{merged-docker-cleanup-worker-CTpC27Bs.js → merged-docker-cleanup-worker-CGiDOdv8.js} +3 -3
- package/server/{merged-docker-cleanup-worker-Cdi9apm-.js → merged-docker-cleanup-worker-DgsLOx3E.js} +1 -1
- package/server/{multipart-parser-IMSBfePV.js → multipart-parser-D0twwRjz.js} +2 -2
- package/server/{no-resume-mode-C5ULAXwO.js → no-resume-mode-DZvP0M_S.js} +1 -1
- package/server/node_modules/.package-lock.json +4 -4
- package/server/node_modules/@types/node/README.md +1 -1
- package/server/node_modules/@types/node/crypto.d.ts +1 -1
- package/server/node_modules/@types/node/package.json +2 -2
- package/server/{orphan-proposed-reconciler-CWmOdM9-.js → orphan-proposed-reconciler-6r2OEfYd.js} +1 -1
- package/server/{orphan-proposed-reconciler-Dg6U4ADZ.js → orphan-proposed-reconciler-DtQP6oE_.js} +230 -31
- package/server/package-lock.json +5 -5
- package/server/package.json +1 -1
- package/server/{pan-dir-ubraCiUg.js → pan-dir-DAOb1V2-.js} +4 -4
- package/server/{paths-cXmOwSbh.js → paths-DuATV5iE.js} +2 -2
- package/server/{pending-lifecycle-claim-DEteYdS9.js → pending-lifecycle-claim-DQUHIDfX.js} +2 -2
- package/server/persistent-logger-CBj016pT.js +57 -0
- package/server/{pickup-D8xtG1J2.js → pickup-zXZl5lQI.js} +4 -3
- package/server/{pipeline-membership-CrAPLYtf.js → pipeline-membership-B2yUcBz7.js} +1 -1
- package/server/{pipeline-membership-BGSvkT2M.js → pipeline-membership-DHOXmvba.js} +1 -1
- package/server/{pipeline-membership-gather-CET40frr.js → pipeline-membership-gather-BIcJ-N0W.js} +114 -9
- package/server/{pipeline-membership-gather-DTfcgxLl.js → pipeline-membership-gather-OkLXuvxR.js} +1 -1
- package/server/{pipeline-notifier-ImNXknf0.js → pipeline-notifier-BmwrVKsO.js} +1 -1
- package/server/{pipeline-notifier-BuQ0e4hF.js → pipeline-notifier-CxMes51i.js} +2 -2
- package/server/{post-merge-lifecycle-worker-DbO10pum.js → post-merge-lifecycle-worker-3u_rA4R0.js} +3 -3
- package/server/{project-pipelines-Bim6bThI.js → project-pipelines-C3SPFJ38.js} +2 -2
- package/server/{project-repos-C0nuoBGv.js → project-repos-BOpBzkO6.js} +2 -2
- package/server/{project-repos-CRE6Ykow.js → project-repos-BgW4lcIa.js} +1 -1
- package/server/{projects-B03Wr-xc.js → projects-_n3Zui6K.js} +1 -1
- package/server/{prompts-BEx08AIu.js → prompts-B0TtboFm.js} +2 -2
- package/server/{providers-D7IluJe0.js → providers-BI1mOBQ4.js} +1 -1
- package/server/{providers-evXhiQeg.js → providers-O2smCvSz.js} +7 -7
- package/server/public/assets/{chunk-BO2N2NFS-D1s4-Sqp.js → chunk-BO2N2NFS-D_pGACYN.js} +4 -4
- package/server/public/assets/{diagram-OG6HWLK6-1gdMoSF7.js → diagram-OG6HWLK6-BO6fe3hH.js} +1 -1
- package/server/public/assets/{dist-DqDRYW6P.js → dist-5zingMiA.js} +3 -3
- package/server/public/assets/{dist-CxAOHbil.js → dist-CVxhbI2E.js} +1 -1
- package/server/public/assets/{ganttDiagram-6RSMTGT7-BYex-Ec7.js → ganttDiagram-6RSMTGT7-Bgj4A7kp.js} +1 -1
- package/server/public/assets/{highlighted-body-OFNGDK62-DlVkiG0S.js → highlighted-body-OFNGDK62-DNPK7_cm.js} +1 -1
- package/server/public/assets/{index-K0hAYCgV.js → index-DEpY-D1O.js} +148 -148
- package/server/public/assets/index-Ddkcz3WT.css +1 -0
- package/server/public/assets/{linear-B4cuEFmO.js → linear-BB0jQT16.js} +1 -1
- package/server/public/assets/mermaid-GHXKKRXX-BzPfaQJ1.js +1 -0
- package/server/public/assets/{pieDiagram-4H26LBE5-CBHNBIJQ.js → pieDiagram-4H26LBE5-DeGIzzpZ.js} +1 -1
- package/server/public/assets/{prod-CN2nHBvX.js → prod-XBLvikex.js} +4 -4
- package/server/public/assets/{quadrantDiagram-W4KKPZXB-Bom87VOQ.js → quadrantDiagram-W4KKPZXB-BV9SLeWz.js} +1 -1
- package/server/public/assets/{sankeyDiagram-5OEKKPKP-UrBeyLxk.js → sankeyDiagram-5OEKKPKP-Dwja0gj8.js} +1 -1
- package/server/public/assets/{xychartDiagram-2RQKCTM6-DhkbrIxR.js → xychartDiagram-2RQKCTM6-DCB4qvfw.js} +1 -1
- package/server/public/index.html +2 -2
- package/server/{pull-requests-DHWiKxo7.js → pull-requests-BonZ4WVG.js} +3 -3
- package/server/{pull-requests-Cv7LxzUN.js → pull-requests-DNcJUVWA.js} +1 -1
- package/server/{queries-DHJm7bTd.js → queries-DCX27GRr.js} +266 -155
- package/server/{rally-B71M9f4o.js → rally-Cxe7lKYX.js} +3 -3
- package/server/{rally-api-D5uXN08-.js → rally-api-Cp50exEi.js} +1 -1
- package/server/{rally-api-Dkqmok65.js → rally-api-CzkKenoi.js} +2 -2
- package/server/{rally-client-CxsA6ExK.js → rally-client-Bu3Cekkw.js} +1 -1
- package/server/{rally-client-Bfqm6XI4.js → rally-client-CyBBEDHu.js} +5 -5
- package/server/rally-x6ztTQo4.js +3 -0
- package/server/{reap-terminal-sessions-CvmwaqKv.js → reap-terminal-sessions-CtAhr6L0.js} +2 -2
- package/server/{reap-terminal-sessions-BQ23nriz.js → reap-terminal-sessions-DvFqQUnq.js} +2 -2
- package/server/{rebuild-stack-qeRqHZxH.js → rebuild-stack-BKYpIPDL.js} +2 -2
- package/server/{rebuild-stack-0EEYReVZ.js → rebuild-stack-hCQtprWC.js} +7 -7
- package/server/{reconstruct-cache-BbYFsqLa.js → reconstruct-cache-CF2avArx.js} +9 -8
- package/server/{record-CtroO946.js → record-BTwWhtBb.js} +1 -1
- package/server/{record-update-Z0QCxmMp.js → record-update-DaOKS7Wb.js} +5 -128
- package/server/{record-update-DH6dLJID.js → record-update-DhI7eySG.js} +1 -1
- package/server/{recovery-trip-eJe26h-f.js → recovery-trip-D-wM9EfB.js} +2 -2
- package/server/{release-engine-lPUp-MTd.js → release-engine-_eO3VFth.js} +5 -5
- package/server/{release-set-BwGeyZKX.js → release-set-vxgZwwZV.js} +3 -3
- package/server/{remote-BCd02Es1.js → remote-BienmcrZ.js} +3 -3
- package/server/{remote-CVGUhXMV.js → remote-CVPCc7Vy.js} +3 -3
- package/server/{remote-agents-C1bssi41.js → remote-agents-kwsEZvXu.js} +1 -1
- package/server/{remote-agents-C_VxssLU.js → remote-agents-kxraOCGT.js} +17 -8
- package/server/{remote-completion-DAB0P706.js → remote-completion-BtmZ42aP.js} +13 -13
- package/server/resume-DXIIfJNk.js +3 -0
- package/server/{review-agent-CHhI66UP.js → review-agent-CIRr0yYt.js} +31 -29
- package/server/{review-agent-CD4RCI0Y.js → review-agent-UpAM4DmT.js} +1 -1
- package/server/{review-artifacts-DSMRIfuJ.js → review-artifacts-BCODM9ww.js} +5 -5
- package/server/{review-context-oFuBbiEE.js → review-context-BBsNrDri.js} +9 -9
- package/server/{review-convoy-liveness-CpzrcJ5F.js → review-convoy-liveness-l06_LYCt.js} +2 -2
- package/server/review-status-CacDM78F.js +3 -0
- package/server/{review-status-yljtTd-q.js → review-status-CwhA9wmd.js} +329 -110
- package/server/{review-status-emit-CUExtHd5.js → review-status-emit-BPJwYcRy.js} +3 -3
- package/server/{review-status-enrichment-QV_hQkgS.js → review-status-enrichment-DvyZAbGR.js} +3 -3
- package/server/{review-status-source-ylw5QZUR.js → review-status-source-B70ekARK.js} +1 -1
- package/server/{review-status-source-CpvJnvnQ.js → review-status-source-DWnFE0b6.js} +1 -1
- package/server/{review-status-sync-NaWvI9Xf.js → review-status-sync-B0IS6Beh.js} +1 -1
- package/server/{review-status-sync-483sujRo.js → review-status-sync-h2CJX6ju.js} +11 -6
- package/server/{review-verdict-feedback-BPDn4li_.js → review-verdict-feedback-qRohbFG2.js} +1 -1
- package/server/{review-verdict-feedback-CELeUinh.js → review-verdict-feedback-yrrmgps_.js} +91 -15
- package/server/{rollup-DTNvelz9.js → rollup-CUoav0Op.js} +8 -8
- package/server/{rollup-DYZfq1c4.js → rollup-DxCjJaAM.js} +1 -1
- package/server/{scanner-CV35oSn4.js → scanner-ChURu_b-.js} +7 -7
- package/server/{sequence-io-DF_8iuhV.js → sequence-io-D9ITDxzq.js} +4 -4
- package/server/{sequencer-agent-B2WeCtGi.js → sequencer-agent-m7gmaakW.js} +7 -6
- package/server/server.js +435 -418
- package/server/{service-Br9rpBNA.js → service-BzFG0Us_.js} +88 -59
- package/server/{session-fork-D0LY152N.js → session-fork-KBq4HIHF.js} +2 -2
- package/server/{session-history-BUyK29eq.js → session-history-C_EMhIIF.js} +7 -55
- package/server/settings-9jSGHBPY.js +2 -0
- package/server/{settings-Bse1Pdcj.js → settings-BLbcDqUp.js} +3 -3
- package/server/{settings-CvVGqNEs.js → settings-DejgzzLs.js} +2 -2
- package/server/{shadow-engineering-BWLa8ODz.js → shadow-engineering-D8R9I8Yl.js} +3 -3
- package/server/{shadow-state-FV6PHfEW.js → shadow-state-C0Af4clN.js} +1 -1
- package/server/{shadow-state-B4fpKxOO.js → shadow-state-fzIqIMDD.js} +2 -2
- package/server/{shadow-utils-D7asqxOZ.js → shadow-utils-Ugca_9ND.js} +2 -2
- package/server/{ship-log-xplJ8t75.js → ship-log-VAv-lHrF.js} +1 -1
- package/server/{smart-compaction-D3U_79f-.js → smart-compaction-B2Xu5XEb.js} +7 -7
- package/server/{smart-compaction-CPp2Ykf6.js → smart-compaction-BcYY_Suf.js} +1 -1
- package/server/{spawn-planning-session-DGfZ5B8D.js → spawn-planning-session-DhCoBPct.js} +38 -50
- package/server/spawn-planning-session-Dsv-350T.js +3 -0
- package/server/{specialist-completion-Br48eiDP.js → specialist-completion-z6v3ZqJE.js} +1 -1
- package/server/{specialist-context-cVbGnTa3.js → specialist-context-CrA5azkJ.js} +5 -5
- package/server/{specialist-handoff-logger-DK-GTz4s.js → specialist-handoff-logger-CmpZYJMB.js} +2 -2
- package/server/{specialist-logs-Cl5-hqT8.js → specialist-logs-BorrIu0x.js} +3 -3
- package/server/{specialists-CNfYO3G2.js → specialists-2yLmqph9.js} +298 -180
- package/server/{specialists-Tdezg_6N.js → specialists-CH6ah6D-.js} +1 -1
- package/server/{specialists-Cicieuzu.js → specialists-Dfx9_Wzb.js} +18 -18
- package/server/{specialists-JHsdU3pA.js → specialists-ZdrifiKx.js} +1 -1
- package/server/specs-DKV3jIEs.js +3 -0
- package/server/{src-Ck028hjO.js → src-B2e5rGu2.js} +6 -6
- package/server/{src-CRmCHlma.js → src-B948bGVR.js} +57 -13
- package/server/{src-UWcGe0Ix.js → src-Dm_NV7f6.js} +3 -3
- package/server/{stack-health-DqSqx0zv.js → stack-health-Bf2WdG4E.js} +2 -2
- package/server/{stack-health-CJLMrLBl.js → stack-health-CoWAhA99.js} +1 -1
- package/server/{stale-task-claims-CYFOUNlT.js → stale-task-claims-D1Ll8fI5.js} +5 -4
- package/server/{staleness-D47CUJok.js → staleness-45qZ_a60.js} +1 -1
- package/server/{staleness-BQ-0gMYK.js → staleness-CuED1Psm.js} +1 -1
- package/server/{state-home-BYV7qZTW.js → state-home-B4EWfIxF.js} +2 -2
- package/server/{state-mapping-BVldLhBf.js → state-mapping-BEONzr8P.js} +1 -1
- package/server/{state-migrate-CvvBtS0Y.js → state-migrate-Cd8BH33U.js} +4 -4
- package/server/{stuck-remediation-Wt0UVvu1.js → stuck-remediation-ChcooZuk.js} +1 -1
- package/server/{stuck-remediation-mkLC6G_t.js → stuck-remediation-DmY5UJLg.js} +24 -23
- package/server/{substrate-bug-weights-service-XfLAKnmK.js → substrate-bug-weights-service-BvTWrFUz.js} +3 -3
- package/server/{summary-fork-CD7GOts0.js → summary-fork--Jr8duYh.js} +2 -2
- package/server/{summary-fork-xiXBnWG9.js → summary-fork-Ct514_Jl.js} +8 -8
- package/server/supervisor/{injection-budget-B5SbvDx2.js → injection-budget-B3UyEONL.js} +1 -1
- package/server/supervisor/{paths-K3noE4N_.js → paths-BBOnCYlO.js} +10 -2
- package/server/supervisor/pty-supervisor.js +4 -4
- package/server/supervisor/{pty-token-B7lp0ElT.js → pty-token-CWRffcCa.js} +3 -3
- package/server/{supervisor-DL788vos.js → supervisor-B7BHGcNA.js} +3 -3
- package/server/supervisor-CyR_mW5B.js +2 -0
- package/server/{swarm-readiness-BV14DF5N.js → swarm-readiness-MNE5O8hn.js} +3 -3
- package/server/{system-prerequisites-pdWG6ZQs.js → system-prerequisites-Cin9ZgDx.js} +2 -2
- package/server/{teardown-workspace-l2F4_zim.js → teardown-workspace-CvBpvc85.js} +15 -15
- package/server/{test-agent-queue-qakFIIGz.js → test-agent-queue-DmSIqays.js} +8 -7
- package/server/{test-verdict-Gw-btEfb.js → test-verdict-BieVDAV1.js} +1 -1
- package/server/{test-verdict-BJYDggMm.js → test-verdict-Cy2jJGTe.js} +1 -1
- package/server/{tldr-daemon-BKOYB616.js → tldr-daemon-Ca0eovh3.js} +1 -1
- package/server/{tldr-daemon-CBaWkV9k.js → tldr-daemon-IOssGwg7.js} +2 -2
- package/server/{tmux-B1Wbxz5o.js → tmux-CfDHob9M.js} +174 -4
- package/server/{tmux-DQ6jB76i.js → tmux-Ctk6RV5l.js} +1 -1
- package/server/{token-Cxbk023d.js → token-B10VFNOD.js} +2 -2
- package/server/{token-util-CLq2MmQt.js → token-util-CZ8WPtdk.js} +1 -1
- package/server/token-util-CrfQ2FKf.js +3 -0
- package/server/{tracker-config-DZ8Zn2nQ.js → tracker-config-CHbrjg6m.js} +2 -2
- package/server/{tracker-utils-L0FKtjq2.js → tracker-utils-DZZq_C0R.js} +2 -2
- package/server/{traefik-connect-bNX6jKkb.js → traefik-connect-GHomyBaD.js} +1 -1
- package/server/{tunnel-BAm1XgjG.js → tunnel-Bdyb-sNq.js} +3 -3
- package/server/{tunnel-CjSnHdTc.js → tunnel-Dz7y434T.js} +1 -1
- package/server/{typed-errors-BHhE85Ul.js → typed-errors-BR_RmPS_.js} +1 -1
- package/server/{typed-errors-2BTMxkZq.js → typed-errors-Bn_2WRU7.js} +1 -1
- package/server/{types-hraoaQIp.js → types-D2ETIB8T.js} +1 -1
- package/server/{types-q67TYYg5.js → types-Dh6RI5Vj.js} +1 -1
- package/server/{uat-promote-verification-CKB9ZrKC.js → uat-promote-verification-DyvQXvIn.js} +5 -5
- package/server/{uat-train-D5UjcyAa.js → uat-train-Dv0Bxer7.js} +0 -0
- package/server/{uat-train-Cu-4nvbf.js → uat-train-diX_7shd.js} +1 -1
- package/server/{validate-Cxsx5Uz1.js → validate-606KcYZC.js} +3 -3
- package/server/{validation-DEaTZafj.js → validation-Cf7aaV5A.js} +1 -1
- package/server/{validation-VZgJxmqc.js → validation-CnrDul1x.js} +4 -4
- package/server/{verification-artifact-g3yuxQDL.js → verification-artifact-D4b-bio9.js} +1 -1
- package/server/{verification-artifact-C85cRTc_.js → verification-artifact-GOaj8u2s.js} +1 -1
- package/server/{verification-runner-KDZIsBj4.js → verification-runner-B5MVxDvU.js} +19 -19
- package/server/{verification-runner-DlZI8yhw.js → verification-runner-DiPaUP-C.js} +1 -1
- package/server/{vtt-parser-Jr94BF3Y.js → vtt-parser-CMU5EZ5R.js} +1 -1
- package/server/{work-agent-prompt-C-vuP3_J.js → work-agent-prompt-Csb3fbVR.js} +9 -9
- package/server/{workflows-D0oip4eV.js → workflows-D87ajwV6.js} +113 -43
- package/server/workflows-DN6NyVGd.js +2 -0
- package/server/{workspace-BqFg__wH.js → workspace-AIOM7n00.js} +1 -1
- package/server/{workspace-anchor-drift-B4gMRHl4.js → workspace-anchor-drift-19cJ1bH5.js} +1 -1
- package/server/{workspace-anchor-drift-CZKofakh.js → workspace-anchor-drift-C3mK5wNI.js} +4 -4
- package/server/{workspace-config-B123aZl-.js → workspace-config-CJ7RqQiP.js} +1 -1
- package/server/{workspace-C0fH3aek.js → workspace-iD8oULqu.js} +3 -3
- package/server/{workspace-manager-CDTKjjdU.js → workspace-manager-B38rFWA1.js} +1 -1
- package/server/{workspace-manager-CwO-Hek7.js → workspace-manager-CXfrw4rR.js} +13 -13
- package/server/{workspace-metadata-D4M8BM4W.js → workspace-metadata-BuMRco5P.js} +1 -1
- package/server/{workspace-metadata-CQv00QwK.js → workspace-metadata-eHSj_NsP.js} +2 -2
- package/server/{workspaces-j1e_6aAT.js → workspaces-DbtMX2TM.js} +136 -113
- package/sync-sources/skills/pan-merge/SKILL.md +7 -5
- package/sync-sources/skills/pan-release/SKILL.md +57 -0
- package/server/agent-state-service-hZpxIw1E.js +0 -2
- package/server/archive-planning-0FJ6Xd3b.js +0 -2
- package/server/cli-DmXETsw-.js +0 -3
- package/server/conflict-gate-Dh754uyA.js +0 -3
- package/server/deacon-swarm-I2JfX5Tg.js +0 -2
- package/server/dist-DSlxIU1H.js +0 -3
- package/server/durable-review-pipeline-jpgCJZFp.js +0 -3
- package/server/forge-DK3blQb_.js +0 -3
- package/server/hume-Dq--7rOQ.js +0 -3
- package/server/inspect-agent-BVwDrVrz.js +0 -2
- package/server/label-reconciler--F85rufp.js +0 -113
- package/server/merge-ops-DdpTiEMt.js +0 -2
- package/server/merge-rebase-DGQpYJU3.js +0 -2
- package/server/merge-sync-Ca7F5JnQ.js +0 -3
- package/server/public/assets/index-Cc7cnFC4.css +0 -1
- package/server/public/assets/mermaid-GHXKKRXX-DyDHFXHV.js +0 -1
- package/server/rally-YDjU513q.js +0 -3
- package/server/resume-u9byntrq.js +0 -3
- package/server/review-status-BZH8h-6W.js +0 -3
- package/server/settings-CdvIF84R.js +0 -2
- package/server/spawn-planning-session-1nFi3gfk.js +0 -2
- package/server/specs-Bt7WJDoC.js +0 -3
- package/server/supervisor-UWiQNK-y.js +0 -2
- package/server/token-util-zlz9U0ki.js +0 -3
- package/server/workflows-CHrx_hcW.js +0 -2
|
@@ -1,21 +1,24 @@
|
|
|
1
1
|
import { n as __esmMin } from "./rolldown-runtime-DNCzzKnI.js";
|
|
2
|
-
import { Cn as resolveStateReadHomeSync, Gn as init_projects, Lt as readIssueRecord, Mn as findProjectByPathSync, Mt as getIssueWorkspacePath, Pt as init_record, Sn as init_state_read_home, ar as resolveProjectFromIssueSync, ci as
|
|
2
|
+
import { Cn as resolveStateReadHomeSync, Gn as init_projects, Lt as readIssueRecord, Mn as findProjectByPathSync, Mt as getIssueWorkspacePath, Pt as init_record, Sn as init_state_read_home, ar as resolveProjectFromIssueSync, ci as getOverdeckHome, di as packageRoot, f as loadConfigSync, li as init_paths, t as init_config_yaml, zn as getProjectSync, zt as readIssueRecordSync } from "./config-yaml-CxdwhAIA.js";
|
|
3
3
|
import { i as emitActivityTtsSync, o as init_activity_logger, r as emitActivityEntrySync } from "./activity-logger-CyteR4JO.js";
|
|
4
|
-
import { d as getOverdeckDatabaseSync, f as init_infra } from "./infra-
|
|
5
|
-
import { i as updateIssueRecord, r as init_record_update } from "./record-update-
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
10
|
-
import { a as
|
|
11
|
-
import {
|
|
12
|
-
import {
|
|
4
|
+
import { d as getOverdeckDatabaseSync, f as init_infra } from "./infra-BDQDRopn.js";
|
|
5
|
+
import { i as updateIssueRecord, r as init_record_update } from "./record-update-DaOKS7Wb.js";
|
|
6
|
+
import { r as registerFeedbackAgentStateReader, t as init_agent_state_source } from "./agent-state-source-Ca_zCaII.js";
|
|
7
|
+
import { d as init_cost_sync, i as getCostBreakdownByStageAndModelSync, o as getCostForIssueSync } from "./cost-sync-DiUBXwl6.js";
|
|
8
|
+
import { r as notifyPipelineSync, t as init_pipeline_notifier } from "./pipeline-notifier-CxMes51i.js";
|
|
9
|
+
import { c as init_review_status_sync, d as init_review_status_normalize, f as normalizeReviewStatusSync, l as markWorkspaceStuck$1, n as deleteReviewStatus, o as getReviewStatusFromDbSync, r as getAllReviewStatusesFromDb, s as getReviewStatusesFromDb, t as clearWorkspaceStuck$1, u as upsertReviewStatusSync } from "./review-status-sync-h2CJX6ju.js";
|
|
10
|
+
import { a as registerCanonicalReviewStatusResolver, n as init_review_status_source, o as registerReviewStatusMapReader } from "./review-status-source-DWnFE0b6.js";
|
|
11
|
+
import { a as PAN_DIRNAME, d as WORKSPACE_RUNTIME_DIRNAME, p as init_types$3, r as PAN_CONTINUES_DIRNAME } from "./types-D2ETIB8T.js";
|
|
12
|
+
import { i as init_merge_set, r as getMergeSetSync } from "./merge-set-Dbnx4chw.js";
|
|
13
|
+
import { o as init_lifecycle, r as XBRIEF_FILENAME_SUFFIX, t as LEGACY_VBRIEF_FILENAME_SUFFIX } from "./lifecycle-DOgGnpIv.js";
|
|
13
14
|
import { basename, dirname, join } from "node:path";
|
|
14
15
|
import { Data, Effect } from "effect";
|
|
16
|
+
import { existsSync, readFileSync, readdirSync, statSync } from "fs";
|
|
15
17
|
import { dirname as dirname$1, isAbsolute as isAbsolute$1, join as join$1, posix, relative as relative$1, sep as sep$1 } from "path";
|
|
16
18
|
import { homedir } from "os";
|
|
17
19
|
import { hostname } from "node:os";
|
|
18
|
-
import { chmodSync, createReadStream, existsSync, linkSync, mkdirSync, promises, readFileSync, readdirSync, renameSync, rmSync, statSync, writeFileSync } from "node:fs";
|
|
20
|
+
import { chmodSync as chmodSync$1, createReadStream as createReadStream$1, existsSync as existsSync$1, linkSync, mkdirSync as mkdirSync$1, promises as promises$1, readFileSync as readFileSync$1, readdirSync as readdirSync$1, renameSync as renameSync$1, rmSync as rmSync$1, statSync as statSync$1, writeFileSync as writeFileSync$1 } from "node:fs";
|
|
21
|
+
import { readFile, readdir } from "node:fs/promises";
|
|
19
22
|
import { inspect } from "node:util";
|
|
20
23
|
import { randomUUID } from "node:crypto";
|
|
21
24
|
import { createInterface } from "node:readline";
|
|
@@ -76,6 +79,7 @@ function overdeckRowToAgentState(row) {
|
|
|
76
79
|
phase: row.phase == null ? void 0 : row.phase,
|
|
77
80
|
roleRunHead: row.role_run_head ?? void 0,
|
|
78
81
|
flywheelRunId: row.flywheel_run_id ?? void 0,
|
|
82
|
+
startedBy: row.started_by ?? void 0,
|
|
79
83
|
costSoFar: row.cost_so_far ?? void 0,
|
|
80
84
|
reviewSubRole: row.review_sub_role ?? void 0,
|
|
81
85
|
reviewRunId: row.review_run_id ?? void 0,
|
|
@@ -129,6 +133,7 @@ function stateToOverdeckParamsForDb(state, updatedAt) {
|
|
|
129
133
|
state.phase ?? null,
|
|
130
134
|
state.roleRunHead ?? null,
|
|
131
135
|
state.flywheelRunId ?? null,
|
|
136
|
+
state.startedBy ?? null,
|
|
132
137
|
state.costSoFar ?? null,
|
|
133
138
|
state.reviewSubRole ?? null,
|
|
134
139
|
state.reviewRunId ?? null,
|
|
@@ -161,6 +166,7 @@ function saveOverdeckAgentStateSync(state) {
|
|
|
161
166
|
}
|
|
162
167
|
var AGENT_COLUMNS_FOR_DB, SELECT_AGENT_SQL;
|
|
163
168
|
var init_agent_state_sync = __esmMin((() => {
|
|
169
|
+
init_agent_state_source();
|
|
164
170
|
init_infra();
|
|
165
171
|
AGENT_COLUMNS_FOR_DB = [
|
|
166
172
|
"id",
|
|
@@ -196,6 +202,7 @@ var init_agent_state_sync = __esmMin((() => {
|
|
|
196
202
|
"phase",
|
|
197
203
|
"role_run_head",
|
|
198
204
|
"flywheel_run_id",
|
|
205
|
+
"started_by",
|
|
199
206
|
"cost_so_far",
|
|
200
207
|
"review_sub_role",
|
|
201
208
|
"review_run_id",
|
|
@@ -213,6 +220,7 @@ var init_agent_state_sync = __esmMin((() => {
|
|
|
213
220
|
"updated_at"
|
|
214
221
|
];
|
|
215
222
|
SELECT_AGENT_SQL = `SELECT ${AGENT_COLUMNS_FOR_DB.join(", ")} FROM agents`;
|
|
223
|
+
registerFeedbackAgentStateReader(listOverdeckAgentStatesSync);
|
|
216
224
|
}));
|
|
217
225
|
//#endregion
|
|
218
226
|
//#region ../../lib/pan-dir/records.ts
|
|
@@ -259,6 +267,7 @@ function projectPipeline(issueId, status, existing) {
|
|
|
259
267
|
inspectNotes: status.inspectNotes,
|
|
260
268
|
mergeNotes: status.mergeNotes,
|
|
261
269
|
blockerReasons: status.blockerReasons,
|
|
270
|
+
conflictsSince: status.conflictsSince,
|
|
262
271
|
prUrl: status.prUrl,
|
|
263
272
|
prNumber: status.prNumber,
|
|
264
273
|
prHeadSha: status.prHeadSha,
|
|
@@ -272,6 +281,7 @@ function projectPipeline(issueId, status, existing) {
|
|
|
272
281
|
deaconIgnoredAt: status.deaconIgnoredAt,
|
|
273
282
|
deaconIgnoredReason: status.deaconIgnoredReason,
|
|
274
283
|
reviewerVerdicts: status.reviewerVerdicts,
|
|
284
|
+
reviewCycleHistory: status.reviewCycleHistory,
|
|
275
285
|
strikeReadyHead: status.strikeReadyHead,
|
|
276
286
|
strikeReadyAt: status.strikeReadyAt,
|
|
277
287
|
strikeLandingState: status.strikeLandingState,
|
|
@@ -305,13 +315,13 @@ function resolveContinuePath(projectRoot, issueId) {
|
|
|
305
315
|
const basePath = join(stateHome.migrated ? join(stateHome.root, PAN_CONTINUES_DIRNAME) : join(stateHome.root, PAN_DIRNAME, PAN_CONTINUES_DIRNAME), issueId.toLowerCase());
|
|
306
316
|
const canonicalPath = `${basePath}${XBRIEF_FILENAME_SUFFIX}`;
|
|
307
317
|
const legacyPath = `${basePath}${LEGACY_VBRIEF_FILENAME_SUFFIX}`;
|
|
308
|
-
if (existsSync(canonicalPath)) return canonicalPath;
|
|
309
|
-
if (existsSync(legacyPath)) return legacyPath;
|
|
318
|
+
if (existsSync$1(canonicalPath)) return canonicalPath;
|
|
319
|
+
if (existsSync$1(legacyPath)) return legacyPath;
|
|
310
320
|
return canonicalPath;
|
|
311
321
|
}
|
|
312
322
|
async function readLegacyContinueText(projectRoot, issueId) {
|
|
313
323
|
try {
|
|
314
|
-
return await promises.readFile(resolveContinuePath(projectRoot, issueId), "utf-8");
|
|
324
|
+
return await promises$1.readFile(resolveContinuePath(projectRoot, issueId), "utf-8");
|
|
315
325
|
} catch {
|
|
316
326
|
return null;
|
|
317
327
|
}
|
|
@@ -319,10 +329,10 @@ async function readLegacyContinueText(projectRoot, issueId) {
|
|
|
319
329
|
/** Read workspace continue.json and return its statusOverrides (if any). */
|
|
320
330
|
async function readWorkspaceContinueStatusOverrides(issueId) {
|
|
321
331
|
const workspacePath = getIssueWorkspacePath(issueId);
|
|
322
|
-
if (!workspacePath || !existsSync(workspacePath)) return void 0;
|
|
332
|
+
if (!workspacePath || !existsSync$1(workspacePath)) return void 0;
|
|
323
333
|
const continuePath = join(workspacePath, ".pan", "continue.json");
|
|
324
334
|
try {
|
|
325
|
-
const text = await promises.readFile(continuePath, "utf-8");
|
|
335
|
+
const text = await promises$1.readFile(continuePath, "utf-8");
|
|
326
336
|
return JSON.parse(text).statusOverrides ?? void 0;
|
|
327
337
|
} catch {
|
|
328
338
|
return;
|
|
@@ -459,6 +469,17 @@ function readPipelineSync(issueId) {
|
|
|
459
469
|
return null;
|
|
460
470
|
}
|
|
461
471
|
}
|
|
472
|
+
async function readPipeline(issueId) {
|
|
473
|
+
try {
|
|
474
|
+
const resolved = resolveProjectFromIssueSync(issueId);
|
|
475
|
+
if (!resolved) return null;
|
|
476
|
+
const project = getProjectSync(resolved.projectKey);
|
|
477
|
+
if (!project) return null;
|
|
478
|
+
return (await readIssueRecord(project, issueId))?.pipeline ?? null;
|
|
479
|
+
} catch {
|
|
480
|
+
return null;
|
|
481
|
+
}
|
|
482
|
+
}
|
|
462
483
|
/**
|
|
463
484
|
* PAN-1988: feedback TEXT (review / test / merge / inspect / verification notes) is durable
|
|
464
485
|
* JOURNAL state, not DB-cache state. The SQLite row holds only the queryable status flags;
|
|
@@ -507,6 +528,7 @@ function durableSubset(p) {
|
|
|
507
528
|
reviewRequestedAt: p.reviewRequestedAt,
|
|
508
529
|
reviewSpawnedAt: p.reviewSpawnedAt,
|
|
509
530
|
reviewerVerdicts: p.reviewerVerdicts,
|
|
531
|
+
reviewCycleHistory: p.reviewCycleHistory,
|
|
510
532
|
autoMerge: p.autoMerge,
|
|
511
533
|
deaconIgnored: p.deaconIgnored,
|
|
512
534
|
deaconIgnoredAt: p.deaconIgnoredAt,
|
|
@@ -518,6 +540,7 @@ function durableSubset(p) {
|
|
|
518
540
|
strikeTransportRetryCount: p.strikeTransportRetryCount,
|
|
519
541
|
strikeNextAttemptAt: p.strikeNextAttemptAt,
|
|
520
542
|
strikeLandingAttempts: p.strikeLandingAttempts,
|
|
543
|
+
conflictsSince: p.conflictsSince,
|
|
521
544
|
closedOut: p.closedOut,
|
|
522
545
|
closedOutAt: p.closedOutAt
|
|
523
546
|
};
|
|
@@ -538,7 +561,7 @@ function writeWorkspaceVerdictFallbackSync(issueId, status) {
|
|
|
538
561
|
console.error(`[review-status] PAN-2583: journal write failed for ${issueId} and no workspace could be resolved — the verdict is NOT durable`);
|
|
539
562
|
return;
|
|
540
563
|
}
|
|
541
|
-
mkdirSync(dirname(path), { recursive: true });
|
|
564
|
+
mkdirSync$1(dirname(path), { recursive: true });
|
|
542
565
|
const clearedFields = FALLBACK_CLEARABLE_FIELDS.filter((field) => status[field] === void 0);
|
|
543
566
|
const payload = {
|
|
544
567
|
issueId: issueId.toUpperCase(),
|
|
@@ -547,16 +570,16 @@ function writeWorkspaceVerdictFallbackSync(issueId, status) {
|
|
|
547
570
|
...clearedFields.length > 0 ? { clearedFields } : {}
|
|
548
571
|
};
|
|
549
572
|
const tmpPath = `${path}.tmp-${process.pid}`;
|
|
550
|
-
writeFileSync(tmpPath, JSON.stringify(payload, null, 2));
|
|
551
|
-
renameSync(tmpPath, path);
|
|
573
|
+
writeFileSync$1(tmpPath, JSON.stringify(payload, null, 2));
|
|
574
|
+
renameSync$1(tmpPath, path);
|
|
552
575
|
console.warn(`[review-status] journal write failed for ${issueId} — durable verdict written to workspace fallback ${path}; the host sweeps it on the next status read (PAN-2583)`);
|
|
553
576
|
} catch (err) {
|
|
554
577
|
console.error(`[review-status] PAN-2583: could not persist verdict for ${issueId} anywhere durable: ${err.message}`);
|
|
555
578
|
}
|
|
556
579
|
}
|
|
557
|
-
function
|
|
580
|
+
function decodeWorkspaceVerdictFallback(raw) {
|
|
558
581
|
try {
|
|
559
|
-
const parsed = JSON.parse(
|
|
582
|
+
const parsed = JSON.parse(raw);
|
|
560
583
|
if (!parsed?.updatedAt || !parsed.pipeline) return null;
|
|
561
584
|
const clearedFields = Array.isArray(parsed.clearedFields) ? parsed.clearedFields.filter((field) => typeof field === "string" && FALLBACK_CLEARABLE_FIELDS.includes(field)) : [];
|
|
562
585
|
return {
|
|
@@ -567,6 +590,20 @@ function parseWorkspaceVerdictFallback(path) {
|
|
|
567
590
|
return null;
|
|
568
591
|
}
|
|
569
592
|
}
|
|
593
|
+
function parseWorkspaceVerdictFallback(path) {
|
|
594
|
+
try {
|
|
595
|
+
return decodeWorkspaceVerdictFallback(readFileSync$1(path, "utf-8"));
|
|
596
|
+
} catch {
|
|
597
|
+
return null;
|
|
598
|
+
}
|
|
599
|
+
}
|
|
600
|
+
async function parseWorkspaceVerdictFallbackAsync(path) {
|
|
601
|
+
try {
|
|
602
|
+
return decodeWorkspaceVerdictFallback(await readFile(path, "utf-8"));
|
|
603
|
+
} catch {
|
|
604
|
+
return null;
|
|
605
|
+
}
|
|
606
|
+
}
|
|
570
607
|
function isPidAlive(pid) {
|
|
571
608
|
try {
|
|
572
609
|
process.kill(pid, 0);
|
|
@@ -597,7 +634,7 @@ function claimWorkspaceVerdictFallbackSync(issueId) {
|
|
|
597
634
|
const prefix = `${basename(path)}.drain-`;
|
|
598
635
|
let entries;
|
|
599
636
|
try {
|
|
600
|
-
entries = readdirSync(dir);
|
|
637
|
+
entries = readdirSync$1(dir);
|
|
601
638
|
} catch {
|
|
602
639
|
return null;
|
|
603
640
|
}
|
|
@@ -614,13 +651,13 @@ function claimWorkspaceVerdictFallbackSync(issueId) {
|
|
|
614
651
|
drainClaimCounter += 1;
|
|
615
652
|
const claimPath = `${path}.drain-${process.pid}-${drainClaimCounter}`;
|
|
616
653
|
try {
|
|
617
|
-
renameSync(candidate, claimPath);
|
|
654
|
+
renameSync$1(candidate, claimPath);
|
|
618
655
|
} catch {
|
|
619
656
|
continue;
|
|
620
657
|
}
|
|
621
658
|
const fallback = parseWorkspaceVerdictFallback(claimPath);
|
|
622
659
|
if (!fallback) {
|
|
623
|
-
rmSync(claimPath, { force: true });
|
|
660
|
+
rmSync$1(claimPath, { force: true });
|
|
624
661
|
continue;
|
|
625
662
|
}
|
|
626
663
|
claims.push({
|
|
@@ -638,9 +675,9 @@ function readWorkspaceVerdictFallbackSync(issueId) {
|
|
|
638
675
|
const consider = (candidate) => {
|
|
639
676
|
if (candidate && (!newest || newest.updatedAt < candidate.updatedAt)) newest = candidate;
|
|
640
677
|
};
|
|
641
|
-
if (existsSync(path)) consider(parseWorkspaceVerdictFallback(path));
|
|
678
|
+
if (existsSync$1(path)) consider(parseWorkspaceVerdictFallback(path));
|
|
642
679
|
const prefix = `${basename(path)}.drain-`;
|
|
643
|
-
for (const entry of readdirSync(dirname(path))) {
|
|
680
|
+
for (const entry of readdirSync$1(dirname(path))) {
|
|
644
681
|
if (!entry.startsWith(prefix)) continue;
|
|
645
682
|
consider(parseWorkspaceVerdictFallback(join(dirname(path), entry)));
|
|
646
683
|
}
|
|
@@ -649,6 +686,18 @@ function readWorkspaceVerdictFallbackSync(issueId) {
|
|
|
649
686
|
return null;
|
|
650
687
|
}
|
|
651
688
|
}
|
|
689
|
+
async function readWorkspaceVerdictFallback(issueId) {
|
|
690
|
+
try {
|
|
691
|
+
const path = workspaceVerdictFallbackPath(issueId);
|
|
692
|
+
if (!path) return null;
|
|
693
|
+
const dir = dirname(path);
|
|
694
|
+
const prefix = `${basename(path)}.drain-`;
|
|
695
|
+
const candidates = [path, ...(await readdir(dir)).filter((entry) => entry.startsWith(prefix)).map((entry) => join(dir, entry))];
|
|
696
|
+
return (await Promise.all(candidates.map(parseWorkspaceVerdictFallbackAsync))).reduce((newest, candidate) => candidate && (!newest || newest.updatedAt < candidate.updatedAt) ? candidate : newest, null);
|
|
697
|
+
} catch {
|
|
698
|
+
return null;
|
|
699
|
+
}
|
|
700
|
+
}
|
|
652
701
|
/**
|
|
653
702
|
* Fold a pending workspace verdict fallback into the canonical record and delete
|
|
654
703
|
* it, without waiting for the next status read. Newer-wins on ISO `updatedAt` —
|
|
@@ -671,7 +720,7 @@ async function drainWorkspaceVerdictFallback(issueId) {
|
|
|
671
720
|
const { fallback } = winner;
|
|
672
721
|
const journal = readPipelineSync(issueId);
|
|
673
722
|
if (journal?.updatedAt && !(journal.updatedAt < fallback.updatedAt)) {
|
|
674
|
-
for (const claim of claims) rmSync(claim.claimPath, { force: true });
|
|
723
|
+
for (const claim of claims) rmSync$1(claim.claimPath, { force: true });
|
|
675
724
|
return true;
|
|
676
725
|
}
|
|
677
726
|
if (await updateIssueRecordForIssue(issueId, {
|
|
@@ -680,10 +729,10 @@ async function drainWorkspaceVerdictFallback(issueId) {
|
|
|
680
729
|
updatedAt: fallback.updatedAt,
|
|
681
730
|
readyForMerge: false
|
|
682
731
|
})) {
|
|
683
|
-
for (const claim of claims) rmSync(claim.claimPath, { force: true });
|
|
732
|
+
for (const claim of claims) rmSync$1(claim.claimPath, { force: true });
|
|
684
733
|
return true;
|
|
685
734
|
}
|
|
686
|
-
for (const claim of losers) rmSync(claim.claimPath, { force: true });
|
|
735
|
+
for (const claim of losers) rmSync$1(claim.claimPath, { force: true });
|
|
687
736
|
const livePath = workspaceVerdictFallbackPath(issueId);
|
|
688
737
|
if (livePath) {
|
|
689
738
|
let published = false;
|
|
@@ -692,18 +741,18 @@ async function drainWorkspaceVerdictFallback(issueId) {
|
|
|
692
741
|
published = true;
|
|
693
742
|
} catch {}
|
|
694
743
|
if (published) {
|
|
695
|
-
rmSync(winner.claimPath, { force: true });
|
|
744
|
+
rmSync$1(winner.claimPath, { force: true });
|
|
696
745
|
return false;
|
|
697
746
|
}
|
|
698
|
-
const live = existsSync(livePath) ? parseWorkspaceVerdictFallback(livePath) : null;
|
|
747
|
+
const live = existsSync$1(livePath) ? parseWorkspaceVerdictFallback(livePath) : null;
|
|
699
748
|
if (live && !(live.updatedAt < fallback.updatedAt)) {
|
|
700
|
-
rmSync(winner.claimPath, { force: true });
|
|
749
|
+
rmSync$1(winner.claimPath, { force: true });
|
|
701
750
|
return false;
|
|
702
751
|
}
|
|
703
752
|
}
|
|
704
753
|
drainClaimCounter += 1;
|
|
705
754
|
try {
|
|
706
|
-
renameSync(winner.claimPath, `${winner.claimPath.split(".drain-")[0]}.drain-republish-${drainClaimCounter}`);
|
|
755
|
+
renameSync$1(winner.claimPath, `${winner.claimPath.split(".drain-")[0]}.drain-republish-${drainClaimCounter}`);
|
|
707
756
|
} catch {}
|
|
708
757
|
return false;
|
|
709
758
|
}
|
|
@@ -739,28 +788,10 @@ function scheduleVerdictFallbackDrain(issueId) {
|
|
|
739
788
|
};
|
|
740
789
|
attempt(0);
|
|
741
790
|
}
|
|
742
|
-
|
|
743
|
-
|
|
744
|
-
* Returns the record `updatedAt` (used to decide whether the journal is newer than the DB
|
|
745
|
-
* cache) plus the durable status fields (flags + feedback notes). Derived/live columns
|
|
746
|
-
* (readyForMerge, blockerReasons) are intentionally omitted — the reader recomputes them.
|
|
747
|
-
*
|
|
748
|
-
* This is what makes verdict writes host-owned: a sandboxed agent can always write the journal
|
|
749
|
-
* (workspace-local) even when it cannot write `~/.overdeck/overdeck.db`. The host reconciles
|
|
750
|
-
* the cache from this on read, so no agent has to escalate out of its sandbox to record a verdict.
|
|
751
|
-
*
|
|
752
|
-
* PAN-2583: since the records migration (PAN-2541) the journal itself lives in
|
|
753
|
-
* ${OVERDECK_HOME}/state, which a sandboxed reviewer cannot write either. When such a
|
|
754
|
-
* writer dropped its verdict into the workspace fallback instead, overlay it here —
|
|
755
|
-
* a strictly newer fallback wins over the record, and the host's own next journal
|
|
756
|
-
* write folds it back into the canonical record.
|
|
757
|
-
*/
|
|
758
|
-
function readJournalStatusSync(issueId) {
|
|
759
|
-
const p = readPipelineSync(issueId);
|
|
760
|
-
const fallback = readWorkspaceVerdictFallbackSync(issueId);
|
|
761
|
-
const fallbackNewer = !!fallback && (!p || (p.updatedAt ?? "") < fallback.updatedAt);
|
|
791
|
+
function projectJournalStatus(pipeline, fallback) {
|
|
792
|
+
const fallbackNewer = !!fallback && (!pipeline || (pipeline.updatedAt ?? "") < fallback.updatedAt);
|
|
762
793
|
if (fallback && fallbackNewer) {
|
|
763
|
-
const base =
|
|
794
|
+
const base = pipeline ? durableSubset(pipeline) : {};
|
|
764
795
|
const overlay = Object.fromEntries(Object.entries(fallback.pipeline).filter(([, value]) => value !== void 0));
|
|
765
796
|
const durable = {
|
|
766
797
|
...base,
|
|
@@ -773,12 +804,20 @@ function readJournalStatusSync(issueId) {
|
|
|
773
804
|
...fallback.clearedFields?.length ? { clearedFields: fallback.clearedFields } : {}
|
|
774
805
|
};
|
|
775
806
|
}
|
|
776
|
-
if (!
|
|
807
|
+
if (!pipeline) return null;
|
|
777
808
|
return {
|
|
778
|
-
updatedAt:
|
|
779
|
-
durable: durableSubset(
|
|
809
|
+
updatedAt: pipeline.updatedAt,
|
|
810
|
+
durable: durableSubset(pipeline)
|
|
780
811
|
};
|
|
781
812
|
}
|
|
813
|
+
function readJournalStatusSync(issueId) {
|
|
814
|
+
return projectJournalStatus(readPipelineSync(issueId), readWorkspaceVerdictFallbackSync(issueId));
|
|
815
|
+
}
|
|
816
|
+
/** Async journal reader for patrols that must not block the dashboard event loop. */
|
|
817
|
+
async function readJournalStatus(issueId) {
|
|
818
|
+
const [pipeline, fallback] = await Promise.all([readPipeline(issueId), readWorkspaceVerdictFallback(issueId)]);
|
|
819
|
+
return projectJournalStatus(pipeline, fallback);
|
|
820
|
+
}
|
|
782
821
|
var pendingJournalWrites, FALLBACK_CLEARABLE_FIELDS, drainClaimCounter, DRAIN_RETRY_DELAYS_MS, drainTimers;
|
|
783
822
|
var init_review_status_record_sync = __esmMin((() => {
|
|
784
823
|
init_records();
|
|
@@ -799,6 +838,117 @@ var init_review_status_record_sync = __esmMin((() => {
|
|
|
799
838
|
drainTimers = /* @__PURE__ */ new Map();
|
|
800
839
|
}));
|
|
801
840
|
//#endregion
|
|
841
|
+
//#region ../../lib/review-findings.ts
|
|
842
|
+
/**
|
|
843
|
+
* Extract a markdown section by heading.
|
|
844
|
+
* Returns the content between a heading (e.g., "## Findings") and the next heading or EOF.
|
|
845
|
+
*/
|
|
846
|
+
function extractMarkdownSection(markdown, heading) {
|
|
847
|
+
const pattern = new RegExp(`^##\\s+${heading}\\s*\\r?\\n([\\s\\S]*?)(?=^##\\s+|(?![\\s\\S]))`, "im");
|
|
848
|
+
return markdown.match(pattern)?.[1]?.trim() ?? "";
|
|
849
|
+
}
|
|
850
|
+
/**
|
|
851
|
+
* Find blocking findings in a report markdown section.
|
|
852
|
+
* Returns titles of findings marked with '!' or '⊗'.
|
|
853
|
+
*/
|
|
854
|
+
function findBlockingFindings(markdown) {
|
|
855
|
+
const findings = extractMarkdownSection(markdown, "Findings");
|
|
856
|
+
if (!findings || /^none\.?$/i.test(findings)) return [];
|
|
857
|
+
const blockers = [];
|
|
858
|
+
const headingPattern = /^###\s*(?:!|⊗)\s+(.+)$/gm;
|
|
859
|
+
let match;
|
|
860
|
+
while ((match = headingPattern.exec(findings)) !== null) blockers.push(match[1].trim());
|
|
861
|
+
return blockers;
|
|
862
|
+
}
|
|
863
|
+
/**
|
|
864
|
+
* Count blocking findings in a synthesis body.
|
|
865
|
+
* Returns the count of '## Blocking Findings' section headings (### markers),
|
|
866
|
+
* or 0 if the section is absent, empty, or contains only 'None'.
|
|
867
|
+
*/
|
|
868
|
+
function countSynthesisBlockingFindings(body) {
|
|
869
|
+
const findings = extractMarkdownSection(body, "Blocking Findings");
|
|
870
|
+
if (!findings || /^none\.?$/i.test(findings)) return 0;
|
|
871
|
+
const headingPattern = /^###\s+/gm;
|
|
872
|
+
let count = 0;
|
|
873
|
+
while (headingPattern.exec(findings) !== null) count++;
|
|
874
|
+
return count;
|
|
875
|
+
}
|
|
876
|
+
var init_review_findings = __esmMin((() => {}));
|
|
877
|
+
//#endregion
|
|
878
|
+
//#region ../../lib/cloister/review-convergence.ts
|
|
879
|
+
/**
|
|
880
|
+
* Review convergence detection and cycle tracking.
|
|
881
|
+
* Detects when a review loop is not making progress and should be gated.
|
|
882
|
+
*/
|
|
883
|
+
/**
|
|
884
|
+
* Find the latest review run directory in a workspace.
|
|
885
|
+
* Looks for 'agent-*-review-*' directories under .pan/review, falling back to .overdeck/review.
|
|
886
|
+
* Returns null if no run directory is found.
|
|
887
|
+
*/
|
|
888
|
+
function findLatestReviewRunDir(workspacePath) {
|
|
889
|
+
const paths = [join$1(workspacePath, PAN_DIRNAME, "review"), join$1(workspacePath, WORKSPACE_RUNTIME_DIRNAME, "review")];
|
|
890
|
+
for (const reviewDir of paths) {
|
|
891
|
+
if (!existsSync(reviewDir)) continue;
|
|
892
|
+
try {
|
|
893
|
+
const reviewDirs = readdirSync(reviewDir).filter((name) => /^agent-.*-review-/.test(name));
|
|
894
|
+
if (reviewDirs.length === 0) continue;
|
|
895
|
+
return join$1(reviewDir, reviewDirs.map((name) => ({
|
|
896
|
+
name,
|
|
897
|
+
mtime: statSync(join$1(reviewDir, name)).mtime.getTime()
|
|
898
|
+
})).sort((a, b) => b.mtime - a.mtime)[0].name);
|
|
899
|
+
} catch {
|
|
900
|
+
continue;
|
|
901
|
+
}
|
|
902
|
+
}
|
|
903
|
+
return null;
|
|
904
|
+
}
|
|
905
|
+
/**
|
|
906
|
+
* Count blocking findings for a specific review run.
|
|
907
|
+
* First tries synthesis.md '## Blocking Findings' heading count,
|
|
908
|
+
* falls back to summing findBlockingFindings across .md report files,
|
|
909
|
+
* returns null if no artifacts exist.
|
|
910
|
+
*/
|
|
911
|
+
function countBlockingFindingsForRun(runDir) {
|
|
912
|
+
const synthesisPath = join$1(runDir, "synthesis.md");
|
|
913
|
+
if (existsSync(synthesisPath)) try {
|
|
914
|
+
const synthBody = readFileSync(synthesisPath, "utf8");
|
|
915
|
+
const count = countSynthesisBlockingFindings(synthBody);
|
|
916
|
+
if (count > 0 || synthBody.includes("## Blocking Findings")) return count;
|
|
917
|
+
} catch {}
|
|
918
|
+
try {
|
|
919
|
+
const reportFiles = readdirSync(runDir).filter((name) => name.endsWith(".md") && name !== "synthesis.md");
|
|
920
|
+
if (reportFiles.length === 0) return null;
|
|
921
|
+
let totalCount = 0;
|
|
922
|
+
for (const file of reportFiles) {
|
|
923
|
+
const findings = findBlockingFindings(readFileSync(join$1(runDir, file), "utf8"));
|
|
924
|
+
totalCount += findings.length;
|
|
925
|
+
}
|
|
926
|
+
return totalCount;
|
|
927
|
+
} catch {
|
|
928
|
+
return null;
|
|
929
|
+
}
|
|
930
|
+
}
|
|
931
|
+
/**
|
|
932
|
+
* Evaluate whether a review cycle series is converging.
|
|
933
|
+
* Returns 'not-converging' when:
|
|
934
|
+
* - counts.length >= 3 AND the series shows a reversal (count[n-1] > count[n-2]), OR
|
|
935
|
+
* - the last two transitions are both non-decreases (going backwards)
|
|
936
|
+
* Otherwise returns 'converging'.
|
|
937
|
+
*/
|
|
938
|
+
function evaluateReviewConvergence(counts) {
|
|
939
|
+
if (counts.length < 3) return "converging";
|
|
940
|
+
const n = counts.length;
|
|
941
|
+
if (counts[n - 1] > counts[n - 2]) return "not-converging";
|
|
942
|
+
const isFirstNonDecreasing = counts[n - 2] >= counts[n - 3];
|
|
943
|
+
const isSecondNonDecreasing = counts[n - 1] >= counts[n - 2];
|
|
944
|
+
if (isFirstNonDecreasing && isSecondNonDecreasing) return "not-converging";
|
|
945
|
+
return "converging";
|
|
946
|
+
}
|
|
947
|
+
var init_review_convergence = __esmMin((() => {
|
|
948
|
+
init_types$3();
|
|
949
|
+
init_review_findings();
|
|
950
|
+
}));
|
|
951
|
+
//#endregion
|
|
802
952
|
//#region ../../lib/review-status-reconcile.ts
|
|
803
953
|
function verificationSatisfied(status) {
|
|
804
954
|
return status.verificationStatus !== "failed";
|
|
@@ -827,7 +977,59 @@ function reconcileJournalIntoCacheSync(issueId, dbStatus, journal, hooks) {
|
|
|
827
977
|
hooks.notifyStatusChanged(issueId, reconciled);
|
|
828
978
|
} catch {}
|
|
829
979
|
const wasBlocked = dbStatus?.reviewStatus === "blocked" || dbStatus?.reviewStatus === "failed";
|
|
830
|
-
if ((reconciled.reviewStatus === "blocked" || reconciled.reviewStatus === "failed") && !wasBlocked)
|
|
980
|
+
if ((reconciled.reviewStatus === "blocked" || reconciled.reviewStatus === "failed") && !wasBlocked) try {
|
|
981
|
+
const project = resolveProjectFromIssueSync(issueId);
|
|
982
|
+
if (!project) {
|
|
983
|
+
console.warn(`[review-status] reconcile: cannot resolve project for ${issueId}, skipping cycle recording`);
|
|
984
|
+
hooks.deliverReviewVerdictFeedbackHostSide(issueId, reconciled);
|
|
985
|
+
} else {
|
|
986
|
+
const issueLower = issueId.toLowerCase();
|
|
987
|
+
const reviewRunDir = findLatestReviewRunDir(`${project.projectPath}/workspaces/feature-${issueLower}`);
|
|
988
|
+
if (!reviewRunDir) {
|
|
989
|
+
console.warn(`[review-status] reconcile: no review run dir found for ${issueId}, skipping cycle recording`);
|
|
990
|
+
hooks.deliverReviewVerdictFeedbackHostSide(issueId, reconciled);
|
|
991
|
+
} else {
|
|
992
|
+
const blockingCount = countBlockingFindingsForRun(reviewRunDir);
|
|
993
|
+
if (blockingCount === null) {
|
|
994
|
+
console.warn(`[review-status] reconcile: cannot count findings for ${issueId}, skipping cycle recording`);
|
|
995
|
+
hooks.deliverReviewVerdictFeedbackHostSide(issueId, reconciled);
|
|
996
|
+
} else {
|
|
997
|
+
const runId = reviewRunDir.split("/").pop() ?? "";
|
|
998
|
+
if (!reconciled.reviewCycleHistory) reconciled.reviewCycleHistory = [];
|
|
999
|
+
const cycleNumber = reconciled.reviewCycleHistory.length + 1;
|
|
1000
|
+
if (!reconciled.reviewCycleHistory.some((e) => e.runId === runId)) {
|
|
1001
|
+
const entry = {
|
|
1002
|
+
cycle: cycleNumber,
|
|
1003
|
+
runId,
|
|
1004
|
+
atCommit: reconciled.reviewedAtCommit,
|
|
1005
|
+
blockingCount,
|
|
1006
|
+
recordedAt: (/* @__PURE__ */ new Date()).toISOString()
|
|
1007
|
+
};
|
|
1008
|
+
reconciled.reviewCycleHistory.push(entry);
|
|
1009
|
+
try {
|
|
1010
|
+
upsertReviewStatusSync(reconciled);
|
|
1011
|
+
} catch {}
|
|
1012
|
+
}
|
|
1013
|
+
const counts = reconciled.reviewCycleHistory.map((e) => e.blockingCount);
|
|
1014
|
+
if (evaluateReviewConvergence(counts) === "not-converging") {
|
|
1015
|
+
markWorkspaceStuck$1(issueId, "review-not-converging", { counts });
|
|
1016
|
+
reconciled.stuck = true;
|
|
1017
|
+
reconciled.stuckReason = "review-not-converging";
|
|
1018
|
+
reconciled.stuckAt = (/* @__PURE__ */ new Date()).toISOString();
|
|
1019
|
+
reconciled.stuckDetails = JSON.stringify({ counts });
|
|
1020
|
+
try {
|
|
1021
|
+
upsertReviewStatusSync(reconciled);
|
|
1022
|
+
} catch {}
|
|
1023
|
+
const countSeries = counts.join(" → ");
|
|
1024
|
+
console.error(`[review-status] reconcile: review loop not converging for ${issueId}: ${countSeries}. Consider decomposition (split the remaining work), or unstick to continue rework.`);
|
|
1025
|
+
} else hooks.deliverReviewVerdictFeedbackHostSide(issueId, reconciled);
|
|
1026
|
+
}
|
|
1027
|
+
}
|
|
1028
|
+
}
|
|
1029
|
+
} catch (error) {
|
|
1030
|
+
console.error(`[review-status] reconcile: cycle recording error for ${issueId}:`, error);
|
|
1031
|
+
hooks.deliverReviewVerdictFeedbackHostSide(issueId, reconciled);
|
|
1032
|
+
}
|
|
831
1033
|
const wasReviewPassed = dbStatus?.reviewStatus === "passed";
|
|
832
1034
|
if (reconciled.reviewStatus === "passed" && !wasReviewPassed && reconciled.testStatus === "pending") {
|
|
833
1035
|
console.log(`[review-status] reconcile: review.approved for ${issueId} (host-owned handoff — sandboxed agent verdict from journal)`);
|
|
@@ -845,32 +1047,24 @@ function reconcileJournalIntoCacheSync(issueId, dbStatus, journal, hooks) {
|
|
|
845
1047
|
var init_review_status_reconcile = __esmMin((() => {
|
|
846
1048
|
init_review_status_normalize();
|
|
847
1049
|
init_review_status_sync();
|
|
1050
|
+
init_review_convergence();
|
|
1051
|
+
init_projects();
|
|
848
1052
|
}));
|
|
849
1053
|
//#endregion
|
|
850
1054
|
//#region ../../lib/review-dispatch-decision.ts
|
|
851
|
-
|
|
852
|
-
|
|
853
|
-
|
|
854
|
-
|
|
855
|
-
|
|
856
|
-
|
|
857
|
-
* dropped — the dashboard was mid-reload, the network blipped, the deacon is frozen — the intent
|
|
858
|
-
* survives in the journal. The host reconciles on read: when a request is newer than the last
|
|
859
|
-
* dispatch and nothing is currently reviewing, it dispatches review. This heals with NO deacon and
|
|
860
|
-
* NO live dashboard event, on the next status read.
|
|
861
|
-
*
|
|
862
|
-
* Returns true when a review dispatch is owed:
|
|
863
|
-
* - a request exists (`reviewRequestedAt` set), AND
|
|
864
|
-
* - it is newer than the last spawn (or there was never a spawn) — i.e. a genuinely un-serviced
|
|
865
|
-
* request, not the request that produced the current review, AND
|
|
866
|
-
* - review is pending rather than already reviewing or terminal, AND
|
|
867
|
-
* - the issue is not already ready to merge or merged.
|
|
868
|
-
*
|
|
869
|
-
* Genuine re-review paths reset `reviewStatus` to `pending` before recording a fresh request: `pan
|
|
870
|
-
* done` does this for a new commit, and the operator force-review route does it explicitly.
|
|
871
|
-
*/
|
|
1055
|
+
function isReviewRequestStale(params) {
|
|
1056
|
+
if (!params.reviewRequestedAt) return false;
|
|
1057
|
+
const now = params.now ?? Date.now();
|
|
1058
|
+
const maxAgeMs = params.maxAgeMs ?? 6048e5;
|
|
1059
|
+
return now - Date.parse(params.reviewRequestedAt) > maxAgeMs;
|
|
1060
|
+
}
|
|
872
1061
|
function needsReviewDispatch(params) {
|
|
873
1062
|
if (!params.reviewRequestedAt) return false;
|
|
1063
|
+
if (isReviewRequestStale({
|
|
1064
|
+
reviewRequestedAt: params.reviewRequestedAt,
|
|
1065
|
+
now: params.now,
|
|
1066
|
+
maxAgeMs: params.maxRequestAgeMs
|
|
1067
|
+
})) return false;
|
|
874
1068
|
if (params.reviewStatus === "reviewing") return false;
|
|
875
1069
|
if (params.reviewStatus === "passed" || params.reviewStatus === "skipped") return false;
|
|
876
1070
|
if (params.readyForMerge) return false;
|
|
@@ -3663,7 +3857,7 @@ async function addSourceContext(frames) {
|
|
|
3663
3857
|
}
|
|
3664
3858
|
function getContextLinesFromFile(path, ranges, output) {
|
|
3665
3859
|
return new Promise((resolve) => {
|
|
3666
|
-
const stream = createReadStream(path);
|
|
3860
|
+
const stream = createReadStream$1(path);
|
|
3667
3861
|
const lineReaded = createInterface({ input: stream });
|
|
3668
3862
|
function destroyStreamAndResolve() {
|
|
3669
3863
|
stream.destroy();
|
|
@@ -6346,7 +6540,7 @@ var init_config = __esmMin((() => {
|
|
|
6346
6540
|
//#endregion
|
|
6347
6541
|
//#region ../../lib/telemetry/install-id.ts
|
|
6348
6542
|
function readValidInstallId(path) {
|
|
6349
|
-
const installId = readFileSync(path, "utf8").trim();
|
|
6543
|
+
const installId = readFileSync$1(path, "utf8").trim();
|
|
6350
6544
|
return UUID_V4_PATTERN.test(installId) ? installId : null;
|
|
6351
6545
|
}
|
|
6352
6546
|
function errorCode(error) {
|
|
@@ -6354,7 +6548,7 @@ function errorCode(error) {
|
|
|
6354
6548
|
}
|
|
6355
6549
|
function repairOwnerIsAlive(lockPath) {
|
|
6356
6550
|
try {
|
|
6357
|
-
const rawOwner = readFileSync(lockPath, "utf8").trim();
|
|
6551
|
+
const rawOwner = readFileSync$1(lockPath, "utf8").trim();
|
|
6358
6552
|
let ownerPid;
|
|
6359
6553
|
let createdAt;
|
|
6360
6554
|
try {
|
|
@@ -6363,7 +6557,7 @@ function repairOwnerIsAlive(lockPath) {
|
|
|
6363
6557
|
createdAt = Number(owner.createdAt);
|
|
6364
6558
|
} catch {
|
|
6365
6559
|
ownerPid = Number(rawOwner);
|
|
6366
|
-
createdAt = statSync(lockPath).mtimeMs;
|
|
6560
|
+
createdAt = statSync$1(lockPath).mtimeMs;
|
|
6367
6561
|
}
|
|
6368
6562
|
if (!Number.isInteger(ownerPid) || ownerPid <= 0 || !Number.isFinite(createdAt) || Date.now() - createdAt >= REPAIR_LOCK_LEASE_MS) return false;
|
|
6369
6563
|
process.kill(ownerPid, 0);
|
|
@@ -6376,22 +6570,22 @@ function replaceInvalidInstallId(path) {
|
|
|
6376
6570
|
const installId = randomUUID();
|
|
6377
6571
|
const temporaryPath = `${path}.${process.pid}.${randomUUID()}.tmp`;
|
|
6378
6572
|
try {
|
|
6379
|
-
writeFileSync(temporaryPath, `${installId}\n`, {
|
|
6573
|
+
writeFileSync$1(temporaryPath, `${installId}\n`, {
|
|
6380
6574
|
encoding: "utf8",
|
|
6381
6575
|
mode: 384,
|
|
6382
6576
|
flag: "wx"
|
|
6383
6577
|
});
|
|
6384
|
-
renameSync(temporaryPath, path);
|
|
6385
|
-
chmodSync(path, 384);
|
|
6578
|
+
renameSync$1(temporaryPath, path);
|
|
6579
|
+
chmodSync$1(path, 384);
|
|
6386
6580
|
} finally {
|
|
6387
|
-
rmSync(temporaryPath, { force: true });
|
|
6581
|
+
rmSync$1(temporaryPath, { force: true });
|
|
6388
6582
|
}
|
|
6389
6583
|
}
|
|
6390
6584
|
function repairInvalidInstallId(path, overdeckHome) {
|
|
6391
6585
|
const lockPath = join(overdeckHome, INSTALL_ID_REPAIR_LOCK);
|
|
6392
6586
|
for (let attempt = 0; attempt < REPAIR_MAX_ATTEMPTS; attempt += 1) {
|
|
6393
6587
|
try {
|
|
6394
|
-
writeFileSync(lockPath, `${JSON.stringify({
|
|
6588
|
+
writeFileSync$1(lockPath, `${JSON.stringify({
|
|
6395
6589
|
pid: process.pid,
|
|
6396
6590
|
createdAt: Date.now()
|
|
6397
6591
|
})}\n`, {
|
|
@@ -6404,7 +6598,7 @@ function repairInvalidInstallId(path, overdeckHome) {
|
|
|
6404
6598
|
const winner = readValidInstallId(path);
|
|
6405
6599
|
if (winner) return winner;
|
|
6406
6600
|
if (!repairOwnerIsAlive(lockPath)) {
|
|
6407
|
-
rmSync(lockPath, { force: true });
|
|
6601
|
+
rmSync$1(lockPath, { force: true });
|
|
6408
6602
|
continue;
|
|
6409
6603
|
}
|
|
6410
6604
|
Atomics.wait(REPAIR_WAIT_ARRAY, 0, 0, REPAIR_WAIT_MS);
|
|
@@ -6418,7 +6612,7 @@ function repairInvalidInstallId(path, overdeckHome) {
|
|
|
6418
6612
|
if (!repaired) throw new Error(`Failed to repair ${path}`);
|
|
6419
6613
|
return repaired;
|
|
6420
6614
|
} finally {
|
|
6421
|
-
rmSync(lockPath, { force: true });
|
|
6615
|
+
rmSync$1(lockPath, { force: true });
|
|
6422
6616
|
}
|
|
6423
6617
|
}
|
|
6424
6618
|
throw new Error(`Timed out waiting to repair ${path}`);
|
|
@@ -6431,10 +6625,10 @@ function getOrCreateInstallId() {
|
|
|
6431
6625
|
} catch (error) {
|
|
6432
6626
|
if (!(error instanceof Error) || !("code" in error) || error.code !== "ENOENT") throw error;
|
|
6433
6627
|
}
|
|
6434
|
-
mkdirSync(overdeckHome, { recursive: true });
|
|
6628
|
+
mkdirSync$1(overdeckHome, { recursive: true });
|
|
6435
6629
|
const installId = randomUUID();
|
|
6436
6630
|
try {
|
|
6437
|
-
writeFileSync(installIdPath, `${installId}\n`, {
|
|
6631
|
+
writeFileSync$1(installIdPath, `${installId}\n`, {
|
|
6438
6632
|
encoding: "utf8",
|
|
6439
6633
|
mode: 384,
|
|
6440
6634
|
flag: "wx"
|
|
@@ -6461,7 +6655,7 @@ var init_install_id = __esmMin((() => {
|
|
|
6461
6655
|
function getOverdeckVersion() {
|
|
6462
6656
|
if (cachedOverdeckVersion) return cachedOverdeckVersion;
|
|
6463
6657
|
try {
|
|
6464
|
-
const manifest = JSON.parse(readFileSync(join(packageRoot, "package.json"), "utf8"));
|
|
6658
|
+
const manifest = JSON.parse(readFileSync$1(join(packageRoot, "package.json"), "utf8"));
|
|
6465
6659
|
cachedOverdeckVersion = typeof manifest.version === "string" ? manifest.version : "unknown";
|
|
6466
6660
|
} catch {
|
|
6467
6661
|
cachedOverdeckVersion = "unknown";
|
|
@@ -6665,9 +6859,9 @@ var init_service = __esmMin((() => {
|
|
|
6665
6859
|
//#region ../../lib/telemetry/pipeline.ts
|
|
6666
6860
|
async function readCanonicalPipelineMembership(issueId) {
|
|
6667
6861
|
const [membershipModule, gatherModule, recordModule] = await Promise.all([
|
|
6668
|
-
import("./pipeline-membership-
|
|
6669
|
-
import("./pipeline-membership-gather-
|
|
6670
|
-
import("./record-
|
|
6862
|
+
import("./pipeline-membership-DHOXmvba.js"),
|
|
6863
|
+
import("./pipeline-membership-gather-OkLXuvxR.js"),
|
|
6864
|
+
import("./record-BTwWhtBb.js")
|
|
6671
6865
|
]);
|
|
6672
6866
|
const project = recordModule.resolveProjectForIssue(issueId);
|
|
6673
6867
|
if (!project) return false;
|
|
@@ -6893,7 +7087,7 @@ function setReviewStatusSync(issueId, update, existing) {
|
|
|
6893
7087
|
});
|
|
6894
7088
|
if (readyForMerge && !status.readyForMerge && updated.prUrl) (async () => {
|
|
6895
7089
|
try {
|
|
6896
|
-
const { isGitHubAppConfigured, reportCommitStatus } = await import("./github-app-
|
|
7090
|
+
const { isGitHubAppConfigured, reportCommitStatus } = await import("./github-app-DIE8BkHI.js");
|
|
6897
7091
|
if (!isGitHubAppConfigured()) return;
|
|
6898
7092
|
const prMatch = updated.prUrl.match(/github\.com\/([^/]+)\/([^/]+)\/pull/);
|
|
6899
7093
|
if (!prMatch) return;
|
|
@@ -7147,8 +7341,8 @@ function emitReactiveLifecycleEvent(type, issueId) {
|
|
|
7147
7341
|
}
|
|
7148
7342
|
async function deliverReviewVerdictFeedbackHostSide(issueId, status) {
|
|
7149
7343
|
try {
|
|
7150
|
-
const { deliverReviewVerdictFeedback } = await import("./review-verdict-feedback-
|
|
7151
|
-
const { getAgentStateSync } = await import("./agents-
|
|
7344
|
+
const { deliverReviewVerdictFeedback } = await import("./review-verdict-feedback-qRohbFG2.js");
|
|
7345
|
+
const { getAgentStateSync } = await import("./agents-Dnn4XgdB.js");
|
|
7152
7346
|
const runId = getAgentStateSync(`agent-${issueId.toLowerCase()}-review`)?.reviewRunId;
|
|
7153
7347
|
if ((await Effect.runPromise(deliverReviewVerdictFeedback({
|
|
7154
7348
|
issueId,
|
|
@@ -7168,7 +7362,22 @@ function maybeAutoDispatchReviewHostSide(issueId, status) {
|
|
|
7168
7362
|
reviewStatus: status.reviewStatus,
|
|
7169
7363
|
mergeStatus: status.mergeStatus,
|
|
7170
7364
|
readyForMerge: status.readyForMerge
|
|
7171
|
-
}))
|
|
7365
|
+
})) {
|
|
7366
|
+
if (!isReviewRequestStale({ reviewRequestedAt: status.reviewRequestedAt }) || staleReviewRequestClearAttemptedAt.has(issueId)) return;
|
|
7367
|
+
staleReviewRequestClearAttemptedAt.set(issueId, Date.now());
|
|
7368
|
+
try {
|
|
7369
|
+
setReviewStatusSync(issueId, { reviewRequestedAt: void 0 }, status);
|
|
7370
|
+
const message = `${issueId} — cleared stale review request older than 7 days`;
|
|
7371
|
+
console.warn(`[review-status] ${message}`);
|
|
7372
|
+
emitActivityEntrySync({
|
|
7373
|
+
source: "cloister",
|
|
7374
|
+
level: "warn",
|
|
7375
|
+
issueId,
|
|
7376
|
+
message
|
|
7377
|
+
});
|
|
7378
|
+
} catch {}
|
|
7379
|
+
return;
|
|
7380
|
+
}
|
|
7172
7381
|
const last = reviewDispatchAttemptAt.get(issueId) ?? 0;
|
|
7173
7382
|
if (Date.now() - last < REVIEW_AUTO_DISPATCH_THROTTLE_MS) return;
|
|
7174
7383
|
reviewDispatchAttemptAt.set(issueId, Date.now());
|
|
@@ -7176,7 +7385,15 @@ function maybeAutoDispatchReviewHostSide(issueId, status) {
|
|
|
7176
7385
|
}
|
|
7177
7386
|
async function dispatchReviewHostSide(issueId, prUrl) {
|
|
7178
7387
|
try {
|
|
7179
|
-
const
|
|
7388
|
+
const { hasDurableReviewPipelineHandler, startDurableReviewPipelineHostSide } = await import("./durable-review-pipeline-D_DcfIGP.js");
|
|
7389
|
+
if (!hasDurableReviewPipelineHandler()) {
|
|
7390
|
+
if (!loggedMissingPipelineHandler) {
|
|
7391
|
+
loggedMissingPipelineHandler = true;
|
|
7392
|
+
console.debug("[review-status] durable review pipeline handler is not registered; skipping host-side review auto-dispatch");
|
|
7393
|
+
}
|
|
7394
|
+
return;
|
|
7395
|
+
}
|
|
7396
|
+
const { spawnReviewRoleForIssue } = await import("./review-agent-UpAM4DmT.js");
|
|
7180
7397
|
if (!await startDurableReviewPipelineHostSide({
|
|
7181
7398
|
issueId,
|
|
7182
7399
|
...prUrl ? { prUrl } : {},
|
|
@@ -7198,13 +7415,13 @@ function maybeRecoverTestVerdictHostSide(issueId, status) {
|
|
|
7198
7415
|
}
|
|
7199
7416
|
async function recoverTestVerdictHostSide(issueId) {
|
|
7200
7417
|
try {
|
|
7201
|
-
const { resolveProjectFromIssueSync } = await import("./projects-
|
|
7418
|
+
const { resolveProjectFromIssueSync } = await import("./projects-_n3Zui6K.js");
|
|
7202
7419
|
const resolved = resolveProjectFromIssueSync(issueId);
|
|
7203
7420
|
if (!resolved) return;
|
|
7204
7421
|
const { existsSync } = await import("fs");
|
|
7205
7422
|
const workspace = join$1(resolved.projectPath, "workspaces", `feature-${issueId.toLowerCase()}`);
|
|
7206
7423
|
if (!existsSync(workspace)) return;
|
|
7207
|
-
const { readTestVerdictArtifact } = await import("./test-verdict-
|
|
7424
|
+
const { readTestVerdictArtifact } = await import("./test-verdict-BieVDAV1.js");
|
|
7208
7425
|
const artifact = readTestVerdictArtifact(workspace);
|
|
7209
7426
|
if (!artifact) return;
|
|
7210
7427
|
setReviewStatusSync(issueId, {
|
|
@@ -7251,13 +7468,13 @@ function resetPipelineVerdictsForWorkStartSync(issueId, options = {}) {
|
|
|
7251
7468
|
}
|
|
7252
7469
|
async function deliverTestFailureToWorkAgentHostSide(issueId, status) {
|
|
7253
7470
|
try {
|
|
7254
|
-
const { resolveProjectFromIssueSync } = await import("./projects-
|
|
7471
|
+
const { resolveProjectFromIssueSync } = await import("./projects-_n3Zui6K.js");
|
|
7255
7472
|
const resolved = resolveProjectFromIssueSync(issueId);
|
|
7256
7473
|
const workspace = resolved ? join$1(resolved.projectPath, "workspaces", `feature-${issueId.toLowerCase()}`) : void 0;
|
|
7257
7474
|
const notes = status.testNotes;
|
|
7258
7475
|
let feedbackPath;
|
|
7259
7476
|
try {
|
|
7260
|
-
const { writeFeedbackFile } = await import("./feedback-writer-
|
|
7477
|
+
const { writeFeedbackFile } = await import("./feedback-writer-CY91ckuw.js");
|
|
7261
7478
|
const r = await Effect.runPromise(writeFeedbackFile({
|
|
7262
7479
|
issueId,
|
|
7263
7480
|
workspacePath: workspace,
|
|
@@ -7269,10 +7486,10 @@ async function deliverTestFailureToWorkAgentHostSide(issueId, status) {
|
|
|
7269
7486
|
if (r.success) feedbackPath = r.filePath;
|
|
7270
7487
|
} catch {}
|
|
7271
7488
|
const message = `SPECIALIST FEEDBACK: test-agent reported FAILED for ${issueId}.\n\n${feedbackPath ? `MUST READ: ${feedbackPath}\n\n` : ""}${notes ? `${notes.slice(0, 400)}\n\n` : ""}Fix the failing tests, commit and push, then re-run pan done ${issueId}. Do NOT stop at the prompt.`;
|
|
7272
|
-
const { resolveIssueFeedbackTarget, surfaceIssueFeedbackNeedsYou } = await import("./feedback-target-
|
|
7489
|
+
const { resolveIssueFeedbackTarget, surfaceIssueFeedbackNeedsYou } = await import("./feedback-target-CMrEAoeA.js");
|
|
7273
7490
|
const target = await resolveIssueFeedbackTarget(issueId);
|
|
7274
7491
|
if ("agentId" in target) {
|
|
7275
|
-
const { messageAgent } = await import("./agents-
|
|
7492
|
+
const { messageAgent } = await import("./agents-Dnn4XgdB.js");
|
|
7276
7493
|
await messageAgent(target.agentId, message, "internal", { owesRework: true });
|
|
7277
7494
|
console.log(`[review-status] delivered test failure to ${target.agentId} for ${issueId} (host-side)`);
|
|
7278
7495
|
} else await surfaceIssueFeedbackNeedsYou(issueId, target.reason, {
|
|
@@ -7467,7 +7684,7 @@ function setAutoMerge(issueId, autoMerge) {
|
|
|
7467
7684
|
console.error(`[review-status] Failed to set autoMerge for ${issueId}:`, err);
|
|
7468
7685
|
}
|
|
7469
7686
|
}
|
|
7470
|
-
var DEFAULT_STATUS_FILE, reviewDispatchAttemptAt, REVIEW_AUTO_DISPATCH_THROTTLE_MS, testVerdictRecoveryAt, TEST_VERDICT_RECOVERY_THROTTLE_MS, FEEDBACK_DELIVERY_STUCK_REASON, ReviewStatusError, setReviewStatus, getReviewStatus;
|
|
7687
|
+
var DEFAULT_STATUS_FILE, reviewDispatchAttemptAt, staleReviewRequestClearAttemptedAt, REVIEW_AUTO_DISPATCH_THROTTLE_MS, loggedMissingPipelineHandler, testVerdictRecoveryAt, TEST_VERDICT_RECOVERY_THROTTLE_MS, FEEDBACK_DELIVERY_STUCK_REASON, ReviewStatusError, setReviewStatus, getReviewStatus;
|
|
7471
7688
|
var init_review_status = __esmMin((() => {
|
|
7472
7689
|
init_pipeline_notifier();
|
|
7473
7690
|
init_activity_logger();
|
|
@@ -7483,7 +7700,9 @@ var init_review_status = __esmMin((() => {
|
|
|
7483
7700
|
registerCanonicalReviewStatusResolver((issueId) => getReviewStatusSync(issueId));
|
|
7484
7701
|
DEFAULT_STATUS_FILE = join$1(homedir(), ".overdeck", "review-status.json");
|
|
7485
7702
|
reviewDispatchAttemptAt = /* @__PURE__ */ new Map();
|
|
7703
|
+
staleReviewRequestClearAttemptedAt = /* @__PURE__ */ new Map();
|
|
7486
7704
|
REVIEW_AUTO_DISPATCH_THROTTLE_MS = 3e4;
|
|
7705
|
+
loggedMissingPipelineHandler = false;
|
|
7487
7706
|
testVerdictRecoveryAt = /* @__PURE__ */ new Map();
|
|
7488
7707
|
TEST_VERDICT_RECOVERY_THROTTLE_MS = 6e4;
|
|
7489
7708
|
FEEDBACK_DELIVERY_STUCK_REASON = "feedback_delivery_needs_you";
|
|
@@ -7516,6 +7735,6 @@ var init_review_status = __esmMin((() => {
|
|
|
7516
7735
|
});
|
|
7517
7736
|
}));
|
|
7518
7737
|
//#endregion
|
|
7519
|
-
export {
|
|
7738
|
+
export { synchronizeAnalyticsServices as A, reviewGatesPassedSync as B, setReviewStatusSync as C, resolvePipelineTelemetryContext as D, init_pipeline as E, telemetryEnvironmentForcesOff as F, readJournalStatus as G, findBlockingFindings as H, init_pipeline_agent_reader as I, getOverdeckAgentStateSync as J, readJournalStatusSync as K, registerPipelineTelemetryAgentReader as L, init_install_id as M, init_config as N, getAnalyticsService as O, resolveTelemetryEnabled as P, stateToOverdeckParamsForDb as Q, init_review_dispatch_decision as R, setReviewStatus as S, capturePipelineStageForIssue as T, init_review_findings as U, verificationSatisfied as V, init_review_status_record_sync as W, listOverdeckAgentStatesSync as X, init_agent_state_sync as Y, saveOverdeckAgentStateSync as Z, markWorkspaceStuck as _, clearStuckMergeStatuses as a, setAutoMerge as b, fixStuckCommentedReviews as c, getReviewStatusSync as d, getReviewStatusesSync as f, loadReviewStatusesForIssues as g, loadReviewStatuses as h, clearReviewStatus as i, getOrCreateInstallId as j, init_service as k, fixStuckReadyForMerge as l, loadReadyForMergeFlags as m, ReviewStatusError as n, clearWorkspaceStuck as o, init_review_status as p, AGENT_COLUMNS_FOR_DB as q, clearFeedbackDeliveryStuck as r, dispatchReviewHostSide as s, FEEDBACK_DELIVERY_STUCK_REASON as t, getReviewStatus as u, mergeGateEligibility as v, capturePipelineStage as w, setDeaconIgnored as x, resetPipelineVerdictsForWorkStartSync as y, needsReviewDispatch as z };
|
|
7520
7739
|
|
|
7521
|
-
//# sourceMappingURL=review-status-
|
|
7740
|
+
//# sourceMappingURL=review-status-CwhA9wmd.js.map
|