@overdeck/desktop 0.47.0 → 0.48.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/drizzle/overdeck/0000_overdeck_init.sql +59 -0
- package/package.json +1 -1
- package/server/{acceptance-criteria-10Ur5Dne.js → acceptance-criteria-DmtLDbtt.js} +2 -2
- package/server/{activity-logger-CyteR4JO.js → activity-logger-Co5qljIj.js} +55 -4
- package/server/activity-logger-K7FYGF_z.js +3 -0
- package/server/{advancing-selfheal-BNwqxseD.js → advancing-selfheal-8AR68Asf.js} +6 -6
- package/server/{agent-gc-C3h9Or3a.js → agent-gc-BmYeT6eH.js} +5 -5
- package/server/agent-state-Dq3s84-P.js +3 -0
- package/server/{agent-state-service-C63p_ftq.js → agent-state-service-DK1Vay1E.js} +1 -1
- package/server/{agent-state-service-Ds6OeFvo.js → agent-state-service-rjnzpHDx.js} +6 -6
- package/server/agent-state-source-Ds968-j6.js +21 -0
- package/server/{agents-J5mEnekq.js → agents-Dls7tfJH.js} +5 -5
- package/server/agents-IPSa5kzn.js +3 -0
- package/server/{archive-planning-BwhxeP7C.js → archive-planning-Cq7cyinS.js} +51 -24
- package/server/archive-planning-MbkGCBIY.js +2 -0
- package/server/{artifact-index-jobs-D1q_vR3V.js → artifact-index-jobs-Dj_8kpTd.js} +3 -3
- package/server/{assemble-Bgwqv-Ro.js → assemble-BTCmbcfH.js} +20 -13
- package/server/{auto-spawn-consent-CQ9Bi9q6.js → auto-spawn-consent-lXqRJ1Dr.js} +304 -121
- package/server/{backlog-auto-trigger-n1lzPgN4.js → backlog-auto-trigger-Dn-amzt6.js} +3 -3
- package/server/{behavior-td6-xhQk.js → behavior-DIMQMRzs.js} +2 -2
- package/server/{boot-reconciled-stop-events-C7gGe3oB.js → boot-reconciled-stop-events-D6SeUTIr.js} +1 -1
- package/server/{bridge-pool-patrol-CYH2OLb5.js → bridge-pool-patrol-BEjt-xF3.js} +2 -2
- package/server/{briefing-freshness-DRqZ8lAz.js → briefing-freshness-3PNmL_p3.js} +2 -2
- package/server/{build-info-7yiEpl6u.js → build-info-CJg813Hm.js} +3 -3
- package/server/{build-info-CpG__c63.js → build-info-CXyeFsXu.js} +1 -1
- package/server/{checkpoint-manager-CkKmB0wZ.js → checkpoint-manager-9t7G5c1V.js} +1 -1
- package/server/{checkpoint-manager-DBcyNR8w.js → checkpoint-manager-B2G38R3p.js} +3 -3
- package/server/checkpoint-worker.js +1 -1
- package/server/{checkpoints-Wm963lm8.js → checkpoints-CuBgiXO-.js} +1 -1
- package/server/{checkpoints-D95apurL.js → checkpoints-VTZMd4Qm.js} +2 -2
- package/server/{claude-hooks-provision-Bjitl9aI.js → claude-hooks-provision-55SyQaPz.js} +2 -2
- package/server/{claude-hooks-provision-4RPxNkE8.js → claude-hooks-provision-CEUT-CZd.js} +1 -1
- package/server/{claude-permissions-CpbpvUQ2.js → claude-permissions-Cn0dIu2i.js} +2 -2
- package/server/{claude-settings-overlay-BzkHYDwR.js → claude-settings-overlay-B19hdzSA.js} +1 -1
- package/server/{claude-settings-overlay-_H9Yrzab.js → claude-settings-overlay-Yg_ANh81.js} +2 -2
- package/server/{cli-Cte9ZFGn.js → cli-C9S84iTy.js} +79 -22
- package/server/cli-M1cwZ__d.js +3 -0
- package/server/{cliproxy-C5fMJ7rY.js → cliproxy-CJq3KXU6.js} +2 -2
- package/server/{cliproxy-DaAbWMjC.js → cliproxy-DgEZlr7Y.js} +1 -1
- package/server/{close-issue-BPh1ARCF.js → close-issue-DPxRddGR.js} +5 -5
- package/server/{closed-issue-reaper-DoOZqGFK.js → closed-issue-reaper-C5Zn4GRS.js} +13 -13
- package/server/{closed-issue-reaper-DHRfRMrp.js → closed-issue-reaper-D-2B48Ri.js} +1 -1
- package/server/{codex-o8FJwzmy.js → codex-B3n_rkwn.js} +1 -1
- package/server/{codex-BzGDW_d3.js → codex-CjkD1PJu.js} +6 -6
- package/server/{codex-parser-Dt-ycU8L.js → codex-parser-DpB1Il-P.js} +2 -2
- package/server/{compaction-continuation-CvXpbZ4w.js → compaction-continuation-DZD9ukSE.js} +3 -3
- package/server/{config-CL3Gyvja.js → config-C5saf4Ja.js} +1 -1
- package/server/{config-BvLe652W.js → config-DnLJATZk.js} +2 -2
- package/server/{config-Bi3u1VK7.js → config-DvM8jtQK.js} +2 -2
- package/server/{config-yaml-CxdwhAIA.js → config-yaml-BSCqwmX0.js} +11299 -10972
- package/server/{conflict-gate-CX80JYYS.js → conflict-gate-DXa_L28t.js} +1 -1
- package/server/{conflict-gate-E4nt7ZeS.js → conflict-gate-WfVqgalf.js} +4 -4
- package/server/{context-layers-DAG83UZt.js → context-layers-D7UqH9Ab.js} +2 -2
- package/server/{context-layers-C_IIysnm.js → context-layers-Dpz3Vd6d.js} +3 -3
- package/server/{control-settings-CiqGxXnc.js → control-settings-DVf6pKyv.js} +4 -4
- package/server/{conversation-compaction-BE3CNtHF.js → conversation-compaction-5XuH6OBn.js} +1 -1
- package/server/{conversation-compaction-D6-yLtqt.js → conversation-compaction-COrbnX1J.js} +8 -8
- package/server/{conversation-service-DBxoYMDl.js → conversation-service-BufdtnZF.js} +169 -10
- package/server/{conversation-service-D_TS2b1r.js → conversation-service-DnUyIiLb.js} +1 -1
- package/server/{conversations-D0UEdLtk.js → conversations-B4rxz-Wl.js} +17 -10
- package/server/{conversations-BKDVpB-3.js → conversations-D1bwxQMy.js} +1 -1
- package/server/{cost-DpgYmYqR.js → cost-CpFDrJUS.js} +46 -2
- package/server/{cost-DS1s0DbG.js → cost-KLuwKCW9.js} +3 -3
- package/server/{cost-sync-tOCCGnEt.js → cost-sync-cesi9dp8.js} +3 -3
- package/server/{dag-BtkgLeqY.js → dag-BYiFMqpU.js} +2 -2
- package/server/{dangerous-git-ops-CFLykHWt.js → dangerous-git-ops-BKvd3-Hk.js} +1 -1
- package/server/dashboard-db-worker.js +7 -7
- package/server/{deacon-BIblC-WX.js → deacon-BbsWw8a6.js} +3 -3
- package/server/{deacon-pLRLbPvR.js → deacon-HdEh0Esp.js} +863 -214
- package/server/deacon-event-client-C93rvOT7.js +237 -0
- package/server/deacon-event-client-Ck5Ei7Mn.js +3 -0
- package/server/{deacon-nudge-log-B08gF0mh.js → deacon-nudge-log-BND_97Wo.js} +4 -3
- package/server/{deacon-pending-lifecycle-B-Io84AP.js → deacon-pending-lifecycle-CD3YsiQK.js} +3 -3
- package/server/deacon-swarm-DgWADWd_.js +2 -0
- package/server/{deacon-swarm-v5PMun-m.js → deacon-swarm-rqrl4TMs.js} +39 -18
- package/server/deacon.js +12 -210
- package/server/{dead-end-trip-D8A3msX9.js → dead-end-trip-DSF23CLX.js} +4 -3
- package/server/dead-end-trip-zKlS4v6f.js +2 -0
- package/server/delivery-CsbQdZkS.js +3 -0
- package/server/{deploy-patrol-sYgOxLeb.js → deploy-patrol-kARAkji4.js} +17 -21
- package/server/{deploy-queue-VfohaPN_.js → deploy-queue-Bj0HJT1i.js} +2 -2
- package/server/{deploy-queue-gHJBycaF.js → deploy-queue-rjTUy1RM.js} +1 -1
- package/server/{deploy-window-D4DQb8VP.js → deploy-window-B2IM-9G5.js} +10 -44
- package/server/{deploy-window-CFRZ0-kt.js → deploy-window-BNFWnA8D.js} +1 -1
- package/server/{dev-supervisor-DiOBDM1c.js → dev-supervisor-B1mZYXz4.js} +2 -2
- package/server/{devcontainer-renderer-BUOIlfgD.js → devcontainer-renderer-B-o68Z5B.js} +3 -3
- package/server/{dist-C3A8B8wM.js → dist-3W--cGMa.js} +1 -1
- package/server/dist-BR0QtwmS.js +3 -0
- package/server/{dist-src-C0adpegX.js → dist-src-C-Vk2jNk.js} +1 -1
- package/server/{docker-Y3PElJb0.js → docker-DH3jUYg1.js} +1 -1
- package/server/{docker-BJzlkqYB.js → docker-meuLKLzV.js} +27 -20
- package/server/{dod-DlNtcH6n.js → dod-D7-9dCOD.js} +1 -1
- package/server/{driver-CKVGi51s.js → driver-CmsY2RLl.js} +1 -1
- package/server/{durable-review-pipeline-DP6bIcOY.js → durable-review-pipeline-CStTgOAf.js} +1 -1
- package/server/{durable-review-pipeline-Cibps-Rg.js → durable-review-pipeline-Chq0lzjL.js} +1 -1
- package/server/{ensure-devcontainer-DMAbWqtQ.js → ensure-devcontainer-BE3llBWP.js} +1 -1
- package/server/{ensure-devcontainer-BAofzBPv.js → ensure-devcontainer-BXrY7C2Z.js} +4 -4
- package/server/{esm-shims-BeObUkaw.js → esm-shims-Bzy4ZzNU.js} +1 -1
- package/server/event-store-COd2tOx8.js +3 -0
- package/server/{event-store-CrHcVC5_.js → event-store-D_AR-Y78.js} +184 -11
- package/server/{events-CF8QDbuV.js → events-CCkFWa7X.js} +1 -1
- package/server/{events-BNrvchBg.js → events-zjDQozet.js} +3 -3
- package/server/{factory-Cmm9Hsho.js → factory-DhavwKVc.js} +5 -5
- package/server/{feature-registry-population-B6HpNWRy.js → feature-registry-population-DWGBKyWd.js} +4 -4
- package/server/{feature-registry-storage-DJEFx1Pf.js → feature-registry-storage-C5DkXmCM.js} +3 -3
- package/server/{features-D5km80UI.js → features-CC47YcCX.js} +2 -2
- package/server/{feedback-target-BJ5ZADsu.js → feedback-target-D9Tex35_.js} +1 -1
- package/server/{feedback-target-DSxEL6lP.js → feedback-target-DoRCR3L-.js} +18 -7
- package/server/{feedback-writer-CoB9Z6aU.js → feedback-writer-CTSuA6lw.js} +1 -1
- package/server/{feedback-writer-C27Hak8a.js → feedback-writer-DdsBdtNL.js} +5 -5
- package/server/{flywheel-DZZdtiOL.js → flywheel-DHWHzaYK.js} +1 -1
- package/server/{flywheel-f662Q-y2.js → flywheel-DJQa9az8.js} +14 -14
- package/server/{flywheel-BHx8XuMr.js → flywheel-TacAI9MA.js} +21 -17
- package/server/{flywheel-merge-order-Dil0LmdN.js → flywheel-merge-order-D2foPh88.js} +1 -1
- package/server/{flywheel-merge-order-D_xLMbJU.js → flywheel-merge-order-DRtex2Dt.js} +7 -7
- package/server/forge-CdlCG9aS.js +3 -0
- package/server/{forge-BaKGCya6.js → forge-c8LeC-tw.js} +2 -2
- package/server/{from-B3tZbB55.js → from-BogSwvr2.js} +1 -1
- package/server/{fs-lock-Bre3sGoz.js → fs-lock-D_GeJtXl.js} +3 -3
- package/server/{fts-operations-B9jG8wa3.js → fts-operations-DP9R-8Q3.js} +3 -3
- package/server/{git-utils-Xg4PFN45.js → git-utils-C31x1lpE.js} +1 -1
- package/server/{git-utils-CsvYfJU3.js → git-utils-xQ74FoSn.js} +5 -4
- package/server/{github-app-Bmg4R9mv.js → github-app-CpQSDlv8.js} +1 -1
- package/server/{github-app-CmNk0zLU.js → github-app-D2QuvZ3j.js} +3 -3
- package/server/{github-client-qazkPrg0.js → github-client-D9YvJX5D.js} +3 -3
- package/server/{github-client-B6KM9_wA.js → github-client-Tpi3PmKX.js} +1 -1
- package/server/{github-pr-lookup-DAcVeRLK.js → github-pr-lookup-DvBMv-IW.js} +2 -2
- package/server/{harness-binary-BSpiXaLw.js → harness-binary-BHxWf_sX.js} +7 -6
- package/server/{harness-resolve-BAJu5MX8.js → harness-resolve-bj9WMABA.js} +4 -4
- package/server/{health-events-BwX32k8d.js → health-events-bCDPn59Z.js} +2 -2
- package/server/{health-events-2Z6Wa9SM.js → health-events-qo7Ss34U.js} +1 -1
- package/server/{hooks-DbtbimEf.js → hooks-Dyxtg5fk.js} +2 -2
- package/server/{hooks-D1g1jKLI.js → hooks-X2XHBB2b.js} +1 -1
- package/server/{hume-DXNiu6nQ.js → hume-DrZEGpqc.js} +2 -2
- package/server/hume-YPsy4UA8.js +3 -0
- package/server/{idle-stack-reaper-Cy-dQzW4.js → idle-stack-reaper-CJ1ygW0p.js} +37 -7
- package/server/{idle-stack-reaper-CRA1e0jr.js → idle-stack-reaper-uJGOb-vu.js} +1 -1
- package/server/{in-flight-guard-D-sSkADM.js → in-flight-guard-CG2Eo-rr.js} +1 -1
- package/server/{infra-BDQDRopn.js → infra-CTrmVqc_.js} +111 -6
- package/server/{injection-Bl8d_jHZ.js → injection-BisQ0lpX.js} +1 -1
- package/server/{injection-6AGnXxlj.js → injection-C9sxqbc2.js} +73 -193
- package/server/{inspect-agent-nXdIptyh.js → inspect-agent-BoSO51YC.js} +12 -12
- package/server/inspect-agent-BykeOH4a.js +2 -0
- package/server/{internal-token-DzK385vD.js → internal-token-AvXePaQT.js} +2 -2
- package/server/{internal-token-Ias7N8Kg.js → internal-token-Djkj-yqK.js} +1 -1
- package/server/{io-B00PBNku.js → io-mxOWMZ7I.js} +6 -6
- package/server/{issue-closed-BehTG1be.js → issue-closed-Bj_bCv_0.js} +7 -7
- package/server/{issue-lifecycle-BqSuQvbn.js → issue-lifecycle-A5YIpDZE.js} +1 -1
- package/server/{issue-lifecycle-Birk-ifu.js → issue-lifecycle-BXUqaHzF.js} +32 -28
- package/server/{issue-service-singleton-C6ZduvuY.js → issue-service-singleton-BPNEXczv.js} +11 -11
- package/server/{issue-service-singleton-B2wXiIlw.js → issue-service-singleton-CcaHjKPR.js} +1 -1
- package/server/{issues-DQ5-LatB.js → issues-AX-YBeAQ.js} +2 -2
- package/server/{jsonl-parser-BDpnGFCl.js → jsonl-parser-CgYWQ20q.js} +7 -3
- package/server/kimi-code-BYbme0aV.js +579 -0
- package/server/kimi-code-D_Ppt82c.js +3 -0
- package/server/kimi-parser-B-JBg3Pv.js +147 -0
- package/server/{label-cleanup-Dwnky8FG.js → label-cleanup-sXUlgdM0.js} +3 -3
- package/server/{lifecycle-B4Xdb4cY.js → lifecycle-D2X3al0D.js} +2 -2
- package/server/{lifecycle-B3s4sM1G.js → lifecycle-DjlljAZ1.js} +6 -6
- package/server/{lifecycle-io-CzTHEooc.js → lifecycle-io-C5nVk55o.js} +1 -1
- package/server/{lifecycle-io-DCo6s6ks.js → lifecycle-io-NPm1YtIG.js} +5 -5
- package/server/{linear-client-CnbtHiic.js → linear-client--luYwCZg.js} +1 -1
- package/server/{linear-client-9uq7fhiV.js → linear-client-B8pLegW1.js} +3 -3
- package/server/{linear-mcp-auth-BxUOzswy.js → linear-mcp-auth-BQVWV0I3.js} +6 -6
- package/server/{linear-mcp-auth-D46fBCLf.js → linear-mcp-auth-Dx81Zl4G.js} +1 -1
- package/server/memory-fts-worker.js +1 -1
- package/server/{merge-DiW9RdSB.js → merge-Bx5Bh9pi.js} +3 -3
- package/server/{merge-sr8Nrnmi.js → merge-Dqmh_zja.js} +1 -1
- package/server/{merge-agent-BLUgRsz3.js → merge-agent-DP9AUY29.js} +33 -33
- package/server/{merge-agent-DQTXZk8z.js → merge-agent-DWd0KfiS.js} +1 -1
- package/server/{merge-batch-Cp_j9BGk.js → merge-batch-BdmvTEAC.js} +1 -1
- package/server/{merge-completeness-BLbB5-6n.js → merge-completeness-BfRwFjRx.js} +1 -1
- package/server/{merge-completeness-B46KqhtY.js → merge-completeness-C1FevcDT.js} +4 -4
- package/server/merge-ops-B98tKc1e.js +2 -0
- package/server/merge-rebase-BLykMwPO.js +2 -0
- package/server/{merge-rebase-DIkBjgwq.js → merge-rebase-BX1xKsrE.js} +2 -2
- package/server/{merge-set-CBgHfwM0.js → merge-set-DsLjjLEV.js} +4 -4
- package/server/{merge-set-DeUxFsC3.js → merge-set-H6epHOsw.js} +1 -1
- package/server/{merge-sync-kr4vqyjM.js → merge-sync-BEdfsQV4.js} +2 -2
- package/server/{merge-sync-CpGmk6Ch.js → merge-sync-BebcWWGA.js} +1 -1
- package/server/{merge-train-Dmrcus12.js → merge-train-D1I0lNOT.js} +4 -4
- package/server/{merge-train-deps-D_uGX91G.js → merge-train-deps-D_-C0Pk2.js} +4 -4
- package/server/{merge-verification-NvaAd8CZ.js → merge-verification-DN1Ov9bU.js} +6 -6
- package/server/{merged-docker-cleanup-worker-Y1R06TEl.js → merged-docker-cleanup-worker-CfXSr2pA.js} +4 -4
- package/server/{merged-docker-cleanup-worker-DH_hrGPI.js → merged-docker-cleanup-worker-ybsPyHjB.js} +1 -1
- package/server/{multipart-parser-R-oC8dQg.js → multipart-parser-CL5QG8iv.js} +2 -2
- package/server/{no-resume-mode-BgD0JUmM.js → no-resume-mode-DUR7Hi98.js} +1 -1
- package/server/node_modules/.package-lock.json +7 -7
- package/server/node_modules/brace-expansion/README.md +23 -1
- package/server/node_modules/brace-expansion/index.js +206 -85
- package/server/node_modules/brace-expansion/package.json +1 -1
- package/server/node_modules/msgpackr/dist/index-no-eval.cjs +34 -28
- package/server/node_modules/msgpackr/dist/index-no-eval.cjs.map +1 -1
- package/server/node_modules/msgpackr/dist/index-no-eval.min.js +1 -1
- package/server/node_modules/msgpackr/dist/index-no-eval.min.js.map +1 -1
- package/server/node_modules/msgpackr/dist/index.js +34 -28
- package/server/node_modules/msgpackr/dist/index.js.map +1 -1
- package/server/node_modules/msgpackr/dist/index.min.js +1 -1
- package/server/node_modules/msgpackr/dist/index.min.js.map +1 -1
- package/server/node_modules/msgpackr/dist/node.cjs +36 -29
- package/server/node_modules/msgpackr/dist/node.cjs.map +1 -1
- package/server/node_modules/msgpackr/dist/test.js +63 -32
- package/server/node_modules/msgpackr/dist/test.js.map +1 -1
- package/server/node_modules/msgpackr/dist/unpack-no-eval.cjs +34 -28
- package/server/node_modules/msgpackr/dist/unpack-no-eval.cjs.map +1 -1
- package/server/node_modules/msgpackr/package.json +1 -1
- package/server/node_modules/msgpackr/unpack.js +34 -28
- package/server/{orphan-proposed-reconciler-DcgTPPFY.js → orphan-proposed-reconciler-CEW1maPl.js} +1 -1
- package/server/{orphan-proposed-reconciler-B6vJHxtX.js → orphan-proposed-reconciler-DfqHZftT.js} +23 -22
- package/server/package-lock.json +8 -8
- package/server/package.json +1 -1
- package/server/{pan-dir-DMzF5wne.js → pan-dir-DhgKfO86.js} +21 -6
- package/server/{paths-sJBSb7Ul.js → paths-BUuhi6jM.js} +17 -17
- package/server/{pending-lifecycle-claim-DilzGfgk.js → pending-lifecycle-claim-DJlA1rTR.js} +2 -2
- package/server/{persistent-logger-H_VjuOu7.js → persistent-logger-s8cbpFNV.js} +2 -2
- package/server/{pickup-DWhqzliO.js → pickup-2AxtB3dW.js} +1 -1
- package/server/{pipeline-membership-C88VBnhJ.js → pipeline-membership-2_okL5bm.js} +1 -1
- package/server/{pipeline-membership-D9SBvItj.js → pipeline-membership-Dqv6_0ig.js} +1 -1
- package/server/{pipeline-membership-gather-4eR-7Tqy.js → pipeline-membership-gather-4F1-tXKI.js} +1 -1
- package/server/{pipeline-membership-gather-CeVGnNJ2.js → pipeline-membership-gather-CtJ_7aGf.js} +149 -17
- package/server/{pipeline-notifier-DT6xLFao.js → pipeline-notifier-CO9rxJgB.js} +1 -1
- package/server/{pipeline-notifier-D0ALV6Nw.js → pipeline-notifier-DDfVBJhJ.js} +2 -2
- package/server/{post-merge-lifecycle-worker-8HIeS_J6.js → post-merge-lifecycle-worker-DmSOkeNp.js} +3 -3
- package/server/{project-pipelines-9SKt2bEc.js → project-pipelines-72WE8GVK.js} +2 -2
- package/server/{project-repos-B5pIphKg.js → project-repos-BAqDwtvi.js} +16 -11
- package/server/project-repos-Df90Zw7Y.js +3 -0
- package/server/projects-WqMWCdpa.js +3 -0
- package/server/{prompts-CgzMBvQF.js → prompts-XkL10m8M.js} +2 -2
- package/server/{providers-BJQSnAAp.js → providers-ClGPGkQ8.js} +15 -12
- package/server/providers-DFUOed8u.js +3 -0
- package/server/public/assets/{chunk-BO2N2NFS-D_pGACYN.js → chunk-BO2N2NFS-CeQUdPxr.js} +4 -4
- package/server/public/assets/{diagram-OG6HWLK6-BO6fe3hH.js → diagram-OG6HWLK6-B7rgk4yT.js} +1 -1
- package/server/public/assets/{dist-5zingMiA.js → dist-2RPazfXY.js} +3 -3
- package/server/public/assets/{dist-CVxhbI2E.js → dist-B9NInrVZ.js} +1 -1
- package/server/public/assets/{ganttDiagram-6RSMTGT7-Bgj4A7kp.js → ganttDiagram-6RSMTGT7-Bxp0gV14.js} +1 -1
- package/server/public/assets/{highlighted-body-OFNGDK62-DNPK7_cm.js → highlighted-body-OFNGDK62-CzoRTVlC.js} +1 -1
- package/server/public/assets/index-Cml-kHo6.css +1 -0
- package/server/public/assets/{index-DEpY-D1O.js → index-CvN8cEgs.js} +216 -215
- package/server/public/assets/{linear-BB0jQT16.js → linear-CFEEl3ND.js} +1 -1
- package/server/public/assets/mermaid-GHXKKRXX-CpV7nCBM.js +1 -0
- package/server/public/assets/{pieDiagram-4H26LBE5-DeGIzzpZ.js → pieDiagram-4H26LBE5-BeR8R0cr.js} +1 -1
- package/server/public/assets/{prod-XBLvikex.js → prod-CYjzjCrn.js} +4 -4
- package/server/public/assets/{quadrantDiagram-W4KKPZXB-BV9SLeWz.js → quadrantDiagram-W4KKPZXB-BpcTkFuW.js} +1 -1
- package/server/public/assets/{sankeyDiagram-5OEKKPKP-Dwja0gj8.js → sankeyDiagram-5OEKKPKP-Bx2ETEV5.js} +1 -1
- package/server/public/assets/{xychartDiagram-2RQKCTM6-DCB4qvfw.js → xychartDiagram-2RQKCTM6-BKgEAFaj.js} +1 -1
- package/server/public/index.html +2 -2
- package/server/{pull-requests-7BgLDsIo.js → pull-requests-B-KrUph5.js} +3 -3
- package/server/{pull-requests-Dq0y6IxE.js → pull-requests-DK5k92B4.js} +1 -1
- package/server/{queries-C-MUZaIy.js → queries-DVpl1vsU.js} +1212 -193
- package/server/{rally-CPysR4T_.js → rally-DbE561hD.js} +3 -3
- package/server/rally-O_st_X7n.js +3 -0
- package/server/{rally-api-8Ptlp2os.js → rally-api-CZLeEd2C.js} +2 -2
- package/server/{rally-api-CgosKdKL.js → rally-api-DaHtn5QN.js} +1 -1
- package/server/{rally-client-CCX0hADj.js → rally-client-C-MAl8ur.js} +1 -1
- package/server/{rally-client-iYMHWQD7.js → rally-client-Ch3zRsBX.js} +5 -5
- package/server/{reap-terminal-sessions-Qf-9LVQc.js → reap-terminal-sessions-C1n0ALRb.js} +2 -2
- package/server/{reap-terminal-sessions-4Xg9NGA8.js → reap-terminal-sessions-DegFS2p1.js} +2 -2
- package/server/{rebuild-stack-CMdgaylx.js → rebuild-stack-C9Li44A3.js} +20 -10
- package/server/{rebuild-stack-DqcOVmJO.js → rebuild-stack-qC0jCNm6.js} +2 -2
- package/server/{reconstruct-cache-CMZJ_Vjq.js → reconstruct-cache-BHyiAg02.js} +7 -7
- package/server/record-aVzu-LGm.js +3 -0
- package/server/record-update-CZh46a2f.js +617 -0
- package/server/{record-update-DhI7eySG.js → record-update-DtdJK2Iw.js} +1 -1
- package/server/recovery-trip-CSNWSLDn.js +77 -0
- package/server/recovery-trip-_16hFKv4.js +3 -0
- package/server/{release-engine-B2X9AfFC.js → release-engine-Be5MX5GP.js} +5 -5
- package/server/{release-set-G4XKyQ8K.js → release-set-DJv_O6PS.js} +3 -3
- package/server/{remote-BXarMvqf.js → remote-BMM3uH2J.js} +3 -3
- package/server/{remote-CUhyqjXk.js → remote-C0xVTHA5.js} +3 -3
- package/server/{remote-agents-CLZB3Coc.js → remote-agents-BIIoc5pD.js} +1 -1
- package/server/{remote-agents-Bba-MgSA.js → remote-agents-EUiZ26bj.js} +7 -7
- package/server/{remote-completion-CwAp79EC.js → remote-completion-BS4tJUn8.js} +13 -13
- package/server/resolver-BvHd6RE4.js +163 -0
- package/server/resume-9thEqAQR.js +3 -0
- package/server/{review-agent--pOptAEV.js → review-agent-BHGaBoBu.js} +29 -29
- package/server/{review-agent-BTCNkq2h.js → review-agent-CD3RQ-tc.js} +1 -1
- package/server/{review-artifacts-BNmw8dWE.js → review-artifacts-DyhajWso.js} +6 -6
- package/server/{review-context-DFxYOOJW.js → review-context-B-dlsPnx.js} +9 -9
- package/server/{review-convoy-liveness-BgU_1jJf.js → review-convoy-liveness-D7M-s_nS.js} +2 -2
- package/server/{review-status-Dma9SFaN.js → review-status-B6wYcOtP.js} +1 -1
- package/server/{review-status-CGvlA4o_.js → review-status-CKLk5aZ-.js} +308 -58
- package/server/{review-status-emit-DURrmGYX.js → review-status-emit-CJ7UmEVU.js} +3 -3
- package/server/{review-status-enrichment-8NiNXi5W.js → review-status-enrichment-DJRgGX7-.js} +3 -3
- package/server/review-status-limits-4EJDCGHO.js +7 -0
- package/server/{review-status-source-DIk1JSow.js → review-status-source-7nU3Z2wL.js} +1 -1
- package/server/{review-status-source-BLx_1siH.js → review-status-source-BsDYGfyv.js} +1 -1
- package/server/{review-status-sync-muT-EBp2.js → review-status-sync-BLssMTEW.js} +1 -1
- package/server/{review-status-sync-0GxOqeqF.js → review-status-sync-BxBeHRde.js} +35 -11
- package/server/{review-verdict-feedback-xJNdqBnX.js → review-verdict-feedback-5jWuzgpc.js} +90 -16
- package/server/{review-verdict-feedback-HwF6ODFy.js → review-verdict-feedback-HRY9P4bN.js} +1 -1
- package/server/{rollup-BQaol5TX.js → rollup-BGIrCEkU.js} +79 -44
- package/server/rollup-CZB4UL9q.js +3 -0
- package/server/{scanner-C-D2cFdX.js → scanner-DydjXPrz.js} +16 -9
- package/server/search-DdtIjAiu.js +395 -0
- package/server/{sequence-io-Bmf1EZM5.js → sequence-io-Fw-cLyDs.js} +4 -4
- package/server/{sequencer-agent-CigMyKh2.js → sequencer-agent-BcpGMt5x.js} +15 -10
- package/server/server.js +1258 -438
- package/server/{service-CD0DvFvD.js → service-BFFkGsG4.js} +58 -58
- package/server/{session-fork-B6cQ5eya.js → session-fork-D0V-3e5P.js} +2 -2
- package/server/{session-history-3ON_IJjm.js → session-history-Bta5l9jY.js} +5 -5
- package/server/{settings-PilbFZAM.js → settings-Ce8B1daF.js} +2 -2
- package/server/{settings-VN0qOh4U.js → settings-E3FnEIUx.js} +3 -3
- package/server/settings-eOOJpxi_.js +2 -0
- package/server/{shadow-engineering-DXvx77oE.js → shadow-engineering-Mt9nJO4i.js} +3 -3
- package/server/{shadow-state-CZBp7pwq.js → shadow-state-Bzj_AZCV.js} +1 -1
- package/server/{shadow-state-BBk_zacw.js → shadow-state-DrkhoVSx.js} +2 -2
- package/server/{shadow-utils-DdZ05AJS.js → shadow-utils-H1GfqP06.js} +2 -2
- package/server/{ship-log-7kJfjUX2.js → ship-log-CFUIo4PR.js} +1 -1
- package/server/{smart-compaction-8fA5k5XN.js → smart-compaction-DSTq-Wua.js} +1 -1
- package/server/{smart-compaction-ByhL9cRS.js → smart-compaction-Hzp3KCJX.js} +7 -7
- package/server/{spawn-planning-session-vLUJoFjy.js → spawn-planning-session-C0uSA2SL.js} +2 -2
- package/server/{spawn-planning-session-pcF-YeFE.js → spawn-planning-session-DN4son31.js} +23 -21
- package/server/{specialist-completion-B07XjWD2.js → specialist-completion-Cf6tpIh1.js} +1 -1
- package/server/{specialist-context-DJ-zFyL3.js → specialist-context-DEUEkjIQ.js} +5 -5
- package/server/{specialist-handoff-logger-aKSxbIgD.js → specialist-handoff-logger-D_LmQDj3.js} +2 -2
- package/server/{specialist-logs-Dae-n52_.js → specialist-logs-7Ynue0R7.js} +3 -3
- package/server/{specialists-KR3pKulN.js → specialists-CQwBEGlD.js} +1 -1
- package/server/{specialists-6PWdtWcg.js → specialists-DAjPgYs_.js} +504 -238
- package/server/{specialists-DUiExaxb.js → specialists-Hr6iW9fU.js} +18 -18
- package/server/{specialists-Bz-wFT7R.js → specialists-MOoeB4A8.js} +1 -1
- package/server/specs-Dl88cbKY.js +3 -0
- package/server/{src-B948bGVR.js → src-BYdwL_n-.js} +668 -64
- package/server/{src-vHy2-oCv.js → src-DQnkPN2i.js} +3 -3
- package/server/{src-rac0Mepv.js → src-DhfDV0o4.js} +6 -6
- package/server/{stack-health-DqLTiEu4.js → stack-health-D_iKwNRg.js} +107 -16
- package/server/stack-health-deVSdDwn.js +3 -0
- package/server/{stale-task-claims-Cab_Fo_Z.js → stale-task-claims-BYJGqhLI.js} +5 -5
- package/server/{staleness-CGTZyp6V.js → staleness-CopBDKnA.js} +1 -1
- package/server/{staleness-C-a5rBxF.js → staleness-D8WeMUHd.js} +1 -1
- package/server/{state-home-722Dkx92.js → state-home-DjN8qduI.js} +24 -3
- package/server/{state-mapping-CybR81Uf.js → state-mapping-DlM7OYRW.js} +1 -1
- package/server/{state-migrate-2u8wIpoL.js → state-migrate-a2p1gtD7.js} +4 -4
- package/server/state-mirror-Cv_XgvT5.js +121 -0
- package/server/{stuck-remediation-r1TJu68G.js → stuck-remediation-CXJX_kki.js} +1 -1
- package/server/{stuck-remediation-CC6q3eqQ.js → stuck-remediation-CbCRSz1v.js} +31 -732
- package/server/{substrate-bug-weights-service-CzIyyWFT.js → substrate-bug-weights-service-DxpopNd9.js} +3 -3
- package/server/{summary-fork-BqgmgPDt.js → summary-fork-B61fjRJn.js} +2 -2
- package/server/{summary-fork-Df2WFijM.js → summary-fork-B9pszUJN.js} +91 -10
- package/server/supervisor/{injection-budget-Cg_KIb3o.js → injection-budget-Ar7hgyJq.js} +1 -1
- package/server/supervisor/pty-supervisor.js +12 -3
- package/server/supervisor/{pty-token-BbjwEUUM.js → pty-token-CXCFU0Z8.js} +1 -1
- package/server/{supervisor-BxqSpjcN.js → supervisor-BvnxbuuF.js} +6 -4
- package/server/supervisor-C69kpqvd.js +2 -0
- package/server/{swarm-readiness-DfFxa9-n.js → swarm-readiness-vTw1kqGa.js} +3 -3
- package/server/{system-prerequisites-ICLSkhhZ.js → system-prerequisites-LLzTEqsK.js} +3 -3
- package/server/{teardown-workspace-DRdi_CPa.js → teardown-workspace-CqKKVJr1.js} +15 -15
- package/server/{test-agent-queue-A_-p-i0I.js → test-agent-queue-CWMq7oyG.js} +8 -7
- package/server/{test-verdict-BHgTAwIG.js → test-verdict-NdtgRBuA.js} +1 -1
- package/server/{test-verdict-C4i9aqEP.js → test-verdict-diIWE6hz.js} +15 -3
- package/server/{tldr-daemon-CvWXBhX1.js → tldr-daemon-B1Jhrtc8.js} +1 -1
- package/server/{tldr-daemon-wvsU6bKv.js → tldr-daemon-Bpls1CJB.js} +2 -2
- package/server/{tmux-CfDHob9M.js → tmux-CImZaX4q.js} +10 -16
- package/server/tmux-Cjpx8L8u.js +4 -0
- package/server/{token-DrxwytsZ.js → token-Bgpjo3tE.js} +2 -2
- package/server/token-util-BsjFll-k.js +3 -0
- package/server/{token-util-B48BlCba.js → token-util-BymbpkJp.js} +1 -1
- package/server/{tracker-config-BcPMElRB.js → tracker-config-4DaKVTfc.js} +2 -2
- package/server/{tracker-utils-CJ6BHjcD.js → tracker-utils-BDeAXC-q.js} +2 -2
- package/server/{traefik-connect-DZ6nMYMj.js → traefik-connect-CC5FyxYj.js} +1 -1
- package/server/{tunnel-Bp-dRHZz.js → tunnel-CDWkeceJ.js} +1 -1
- package/server/{tunnel-DUbUPElU.js → tunnel-CPf5M-Pc.js} +3 -3
- package/server/{typed-errors-DyjseiB6.js → typed-errors-9K7Dq_Vn.js} +1 -1
- package/server/{typed-errors-CKeoDdU3.js → typed-errors-DrS5fb5z.js} +1 -1
- package/server/{types-Cm5ASJbq.js → types-DzlUKiuf.js} +4 -3
- package/server/{types-Di8wdakq.js → types-kI9ik8XO.js} +1 -1
- package/server/{uat-promote-verification-CoJuh7XO.js → uat-promote-verification-c_pxoxEc.js} +5 -5
- package/server/{uat-train-4Q0k06CQ.js → uat-train-CWGxBdJO.js} +0 -0
- package/server/{uat-train-Dewoatps.js → uat-train-CfCYd2ve.js} +1 -1
- package/server/{validate-B0C8p66t.js → validate-f3ItVCfm.js} +3 -3
- package/server/{validation-hVOwQk8T.js → validation-5G_wQtea.js} +1 -1
- package/server/{validation-B_kIRfNe.js → validation-7tSiCM82.js} +4 -4
- package/server/{verification-artifact-BxlxTiYK.js → verification-artifact-9h9dH8uX.js} +1 -1
- package/server/{verification-artifact-D70AtckY.js → verification-artifact-C_4WJnf6.js} +1 -1
- package/server/{verification-runner-Bc3cJvpC.js → verification-runner-BV5F6wrA.js} +1 -1
- package/server/{verification-runner-KZTz6u72.js → verification-runner-D58KmBhK.js} +18 -38
- package/server/{vtt-parser-CE_i3Bcw.js → vtt-parser-2iT9OHa9.js} +1 -1
- package/server/{work-agent-prompt-ByrPAzOy.js → work-agent-prompt-D03s4DD1.js} +9 -9
- package/server/{workflows-D0vP1WrK.js → workflows-BMBwLYPV.js} +281 -98
- package/server/workflows-BOmWGpIh.js +2 -0
- package/server/{workspace-DQkRPLlQ.js → workspace-BgflNCH0.js} +3 -3
- package/server/{workspace-COWvdibH.js → workspace-Cn9ywfSW.js} +1 -1
- package/server/{workspace-anchor-drift-pwz23TI1.js → workspace-anchor-drift-C8Fy3shi.js} +1 -1
- package/server/{workspace-anchor-drift-DXYIAHzr.js → workspace-anchor-drift-CMiNncwq.js} +5 -8
- package/server/{workspace-config-BdZM4PvZ.js → workspace-config-aUc2nIz6.js} +1 -1
- package/server/{workspace-manager-BPgTrG66.js → workspace-manager-Bem7ZBs9.js} +521 -292
- package/server/workspace-manager-C0CpNh3t.js +3 -0
- package/server/{workspace-metadata-CdjzAP8x.js → workspace-metadata-C5iSlPRo.js} +1 -1
- package/server/{workspace-metadata-DkO_iTLo.js → workspace-metadata-UKmTYmDQ.js} +2 -2
- package/server/{workspaces-CRBJikLp.js → workspaces-DqxgwDZ8.js} +143 -113
- package/sync-sources/hooks/notification-hook +12 -1
- package/sync-sources/hooks/pan-hook-lib.sh +226 -0
- package/sync-sources/hooks/session-start-hook +31 -4
- package/sync-sources/hooks/work-agent-stop-hook +23 -1
- package/sync-sources/skills/pan-memory/SKILL.md +19 -3
- package/sync-sources/skills/pan-projects/SKILL.md +9 -0
- package/sync-sources/skills/pan-restart/SKILL.md +26 -7
- package/sync-sources/skills/pan-workspace/SKILL.md +77 -0
- package/server/activity-logger-CMthG6Vd.js +0 -3
- package/server/agent-state-CYXJVG72.js +0 -3
- package/server/agents-ePFVoZbu.js +0 -3
- package/server/archive-planning-B2XplFzT.js +0 -2
- package/server/cli-CjOCSnfj.js +0 -3
- package/server/deacon-swarm-B1XkIvfr.js +0 -2
- package/server/delivery-BX9HR4wQ.js +0 -3
- package/server/dist-B3YPQa5A.js +0 -3
- package/server/event-store-5UKzh9Jf.js +0 -3
- package/server/forge-B5o319qI.js +0 -3
- package/server/fts-db-IVc4_M3f.js +0 -146
- package/server/hume-VUCNbTgn.js +0 -3
- package/server/inspect-agent-CUwVmr2h.js +0 -2
- package/server/merge-ops-1abz6O_P.js +0 -2
- package/server/merge-rebase-CJJVAJuz.js +0 -2
- package/server/node_modules/brace-expansion/.tap/coverage/8b906b8c-e21f-40b5-8c0d-214d8c2682c5.json +0 -757
- package/server/node_modules/brace-expansion/.tap/processinfo/8b906b8c-e21f-40b5-8c0d-214d8c2682c5.json +0 -719
- package/server/node_modules/brace-expansion/ADVISORY-CVE-2026-14257.md +0 -107
- package/server/node_modules/brace-expansion/dist/commonjs/index.d.ts +0 -8
- package/server/node_modules/brace-expansion/dist/commonjs/index.d.ts.map +0 -1
- package/server/node_modules/brace-expansion/dist/commonjs/index.js +0 -263
- package/server/node_modules/brace-expansion/dist/commonjs/index.js.map +0 -1
- package/server/node_modules/brace-expansion/dist/commonjs/package.json +0 -3
- package/server/node_modules/brace-expansion/dist/esm/index.d.ts +0 -8
- package/server/node_modules/brace-expansion/dist/esm/index.d.ts.map +0 -1
- package/server/node_modules/brace-expansion/dist/esm/index.js +0 -259
- package/server/node_modules/brace-expansion/dist/esm/index.js.map +0 -1
- package/server/node_modules/brace-expansion/dist/esm/package.json +0 -3
- package/server/project-repos-DPjOdfPa.js +0 -3
- package/server/projects-_n3Zui6K.js +0 -3
- package/server/providers-BI1mOBQ4.js +0 -3
- package/server/public/assets/index-Ddkcz3WT.css +0 -1
- package/server/public/assets/mermaid-GHXKKRXX-BzPfaQJ1.js +0 -1
- package/server/rally-D_VW4bJv.js +0 -3
- package/server/record-BTwWhtBb.js +0 -3
- package/server/record-update-DaOKS7Wb.js +0 -277
- package/server/recovery-trip-DDH-02ng.js +0 -44
- package/server/resume-mOREjlYu.js +0 -3
- package/server/rollup-BR4t_wck.js +0 -3
- package/server/settings-CVmWiJ-r.js +0 -2
- package/server/specs--enInima.js +0 -3
- package/server/stack-health-BikqHSjn.js +0 -3
- package/server/supervisor-B4anCCSm.js +0 -2
- package/server/tmux-Ctk6RV5l.js +0 -3
- package/server/token-util-D411CAq9.js +0 -3
- package/server/workflows-DtDX08ed.js +0 -2
- package/server/workspace-manager-C1F3XsnS.js +0 -3
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { n as __esmMin } from "./rolldown-runtime-DNCzzKnI.js";
|
|
2
|
+
//#region ../../lib/review-status-limits.ts
|
|
3
|
+
var init_review_status_limits = __esmMin((() => {}));
|
|
4
|
+
//#endregion
|
|
5
|
+
export { init_review_status_limits as t };
|
|
6
|
+
|
|
7
|
+
//# sourceMappingURL=review-status-limits-4EJDCGHO.js.map
|
|
@@ -57,4 +57,4 @@ var init_review_status_source = __esmMin((() => {
|
|
|
57
57
|
//#endregion
|
|
58
58
|
export { registerCanonicalReviewStatusResolver as a, readReviewStatusMap as i, init_review_status_source as n, registerReviewStatusMapReader as o, isRoleTerminal as r, resolveCanonicalReviewStatus as s, classifyAdvancingSessionLifecycle as t };
|
|
59
59
|
|
|
60
|
-
//# sourceMappingURL=review-status-source-
|
|
60
|
+
//# sourceMappingURL=review-status-source-7nU3Z2wL.js.map
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import { n as init_review_status_source, s as resolveCanonicalReviewStatus } from "./review-status-source-
|
|
1
|
+
import { n as init_review_status_source, s as resolveCanonicalReviewStatus } from "./review-status-source-7nU3Z2wL.js";
|
|
2
2
|
init_review_status_source();
|
|
3
3
|
export { resolveCanonicalReviewStatus };
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import { c as init_review_status_sync, t as clearWorkspaceStuck } from "./review-status-sync-
|
|
1
|
+
import { c as init_review_status_sync, t as clearWorkspaceStuck } from "./review-status-sync-BxBeHRde.js";
|
|
2
2
|
init_review_status_sync();
|
|
3
3
|
export { clearWorkspaceStuck };
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { n as __esmMin } from "./rolldown-runtime-DNCzzKnI.js";
|
|
2
|
-
import { d as getOverdeckDatabaseSync, f as init_infra } from "./infra-
|
|
2
|
+
import { d as getOverdeckDatabaseSync, f as init_infra } from "./infra-CTrmVqc_.js";
|
|
3
|
+
import { t as init_review_status_limits } from "./review-status-limits-4EJDCGHO.js";
|
|
3
4
|
import { Effect } from "effect";
|
|
4
5
|
//#region ../../lib/review-status-normalize.ts
|
|
5
6
|
function normalizeReviewStatusSync(status) {
|
|
@@ -33,6 +34,11 @@ function isoToMs(value) {
|
|
|
33
34
|
function msToIso(value) {
|
|
34
35
|
return value == null ? void 0 : new Date(value).toISOString();
|
|
35
36
|
}
|
|
37
|
+
function truncateHistoryNote(note) {
|
|
38
|
+
if (!note) return void 0;
|
|
39
|
+
if (note.length <= 500) return note;
|
|
40
|
+
return note.slice(0, 499) + "…";
|
|
41
|
+
}
|
|
36
42
|
function rowToReviewStatus(row, history) {
|
|
37
43
|
return normalizeReviewStatusSync({
|
|
38
44
|
issueId: row.issue_id.toUpperCase(),
|
|
@@ -90,12 +96,14 @@ function rowToReviewStatus(row, history) {
|
|
|
90
96
|
});
|
|
91
97
|
}
|
|
92
98
|
function getHistorySync(issueId) {
|
|
93
|
-
|
|
94
|
-
WHERE issue_id = ? ORDER BY timestamp
|
|
99
|
+
const rows = getOverdeckDatabaseSync().prepare(`SELECT type, status, timestamp, notes FROM status_history
|
|
100
|
+
WHERE issue_id = ? ORDER BY timestamp DESC LIMIT ?`).all(issueId.toUpperCase(), 20);
|
|
101
|
+
rows.reverse();
|
|
102
|
+
return rows.map((r) => ({
|
|
95
103
|
type: r.type,
|
|
96
104
|
status: r.status,
|
|
97
105
|
timestamp: new Date(r.timestamp).toISOString(),
|
|
98
|
-
...r.notes ? { notes: r.notes } : {}
|
|
106
|
+
...r.notes ? { notes: truncateHistoryNote(r.notes) } : {}
|
|
99
107
|
}));
|
|
100
108
|
}
|
|
101
109
|
function upsertReviewStatusSync(status) {
|
|
@@ -199,8 +207,15 @@ function getReviewStatusFromDbSync(issueId) {
|
|
|
199
207
|
function getAllReviewStatusesFromDb() {
|
|
200
208
|
const db = getOverdeckDatabaseSync();
|
|
201
209
|
const rows = db.prepare("SELECT * FROM review_status ORDER BY updated_at DESC").all();
|
|
202
|
-
const historyRows = db.prepare(`
|
|
203
|
-
|
|
210
|
+
const historyRows = db.prepare(`WITH bounded AS (
|
|
211
|
+
SELECT issue_id, type, status, timestamp, notes,
|
|
212
|
+
ROW_NUMBER() OVER (PARTITION BY issue_id ORDER BY timestamp DESC, id DESC) as rn
|
|
213
|
+
FROM status_history
|
|
214
|
+
)
|
|
215
|
+
SELECT issue_id, type, status, timestamp, notes
|
|
216
|
+
FROM bounded
|
|
217
|
+
WHERE rn <= ?
|
|
218
|
+
ORDER BY issue_id, timestamp ASC`).all(20);
|
|
204
219
|
const historyByIssue = /* @__PURE__ */ new Map();
|
|
205
220
|
for (const row of historyRows) {
|
|
206
221
|
const bucket = historyByIssue.get(row.issue_id) ?? [];
|
|
@@ -208,7 +223,7 @@ function getAllReviewStatusesFromDb() {
|
|
|
208
223
|
type: row.type,
|
|
209
224
|
status: row.status,
|
|
210
225
|
timestamp: row.timestamp,
|
|
211
|
-
...row.notes ? { notes: row.notes } : {}
|
|
226
|
+
...row.notes ? { notes: truncateHistoryNote(row.notes) } : {}
|
|
212
227
|
});
|
|
213
228
|
historyByIssue.set(row.issue_id, bucket);
|
|
214
229
|
}
|
|
@@ -223,8 +238,16 @@ function getReviewStatusesFromDb(issueIds) {
|
|
|
223
238
|
const placeholders = normalizedIds.map(() => "?").join(", ");
|
|
224
239
|
const rows = db.prepare(`SELECT * FROM review_status WHERE issue_id IN (${placeholders}) ORDER BY updated_at DESC`).all(...normalizedIds);
|
|
225
240
|
if (rows.length === 0) return {};
|
|
226
|
-
const historyRows = db.prepare(`
|
|
227
|
-
|
|
241
|
+
const historyRows = db.prepare(`WITH bounded AS (
|
|
242
|
+
SELECT issue_id, type, status, timestamp, notes,
|
|
243
|
+
ROW_NUMBER() OVER (PARTITION BY issue_id ORDER BY timestamp DESC, id DESC) as rn
|
|
244
|
+
FROM status_history
|
|
245
|
+
WHERE issue_id IN (${placeholders})
|
|
246
|
+
)
|
|
247
|
+
SELECT issue_id, type, status, timestamp, notes
|
|
248
|
+
FROM bounded
|
|
249
|
+
WHERE rn <= ?
|
|
250
|
+
ORDER BY issue_id, timestamp ASC`).all(...normalizedIds, 20);
|
|
228
251
|
const historyByIssue = /* @__PURE__ */ new Map();
|
|
229
252
|
for (const row of historyRows) {
|
|
230
253
|
const bucket = historyByIssue.get(row.issue_id) ?? [];
|
|
@@ -232,7 +255,7 @@ function getReviewStatusesFromDb(issueIds) {
|
|
|
232
255
|
type: row.type,
|
|
233
256
|
status: row.status,
|
|
234
257
|
timestamp: row.timestamp,
|
|
235
|
-
...row.notes ? { notes: row.notes } : {}
|
|
258
|
+
...row.notes ? { notes: truncateHistoryNote(row.notes) } : {}
|
|
236
259
|
});
|
|
237
260
|
historyByIssue.set(row.issue_id, bucket);
|
|
238
261
|
}
|
|
@@ -287,6 +310,7 @@ function getMergeBlockerReconcileCandidatesSync() {
|
|
|
287
310
|
var getMergeBlockerReconcileCandidates;
|
|
288
311
|
var init_review_status_sync = __esmMin((() => {
|
|
289
312
|
init_review_status_normalize();
|
|
313
|
+
init_review_status_limits();
|
|
290
314
|
init_infra();
|
|
291
315
|
getMergeBlockerReconcileCandidates = () => Effect.promise(() => new Promise((resolve, reject) => {
|
|
292
316
|
setImmediate(() => {
|
|
@@ -301,4 +325,4 @@ var init_review_status_sync = __esmMin((() => {
|
|
|
301
325
|
//#endregion
|
|
302
326
|
export { getMergeBlockerReconcileCandidatesSync as a, init_review_status_sync as c, init_review_status_normalize as d, normalizeReviewStatusSync as f, getMergeBlockerReconcileCandidates as i, markWorkspaceStuck as l, deleteReviewStatus as n, getReviewStatusFromDbSync as o, getAllReviewStatusesFromDb as r, getReviewStatusesFromDb as s, clearWorkspaceStuck as t, upsertReviewStatusSync as u };
|
|
303
327
|
|
|
304
|
-
//# sourceMappingURL=review-status-sync-
|
|
328
|
+
//# sourceMappingURL=review-status-sync-BxBeHRde.js.map
|
|
@@ -1,17 +1,78 @@
|
|
|
1
1
|
import { n as __esmMin } from "./rolldown-runtime-DNCzzKnI.js";
|
|
2
|
-
import {
|
|
3
|
-
import { d as getReviewStatusSync, p as init_review_status, r as clearFeedbackDeliveryStuck } from "./review-status-
|
|
4
|
-
import {
|
|
5
|
-
import { a as PAN_DIRNAME,
|
|
6
|
-
import { a as writeFeedbackFile, i as init_feedback_writer } from "./feedback-writer-
|
|
7
|
-
import { n as resolveIssueFeedbackTarget, r as surfaceIssueFeedbackNeedsYou, t as init_feedback_target } from "./feedback-target-
|
|
2
|
+
import { Sn as resolveProjectFromIssueSync, cn as init_projects } from "./config-yaml-BSCqwmX0.js";
|
|
3
|
+
import { d as getReviewStatusSync, p as init_review_status, r as clearFeedbackDeliveryStuck } from "./review-status-CKLk5aZ-.js";
|
|
4
|
+
import { b as init_agents, ft as messageAgent } from "./queries-DVpl1vsU.js";
|
|
5
|
+
import { a as PAN_DIRNAME, m as init_types } from "./types-DzlUKiuf.js";
|
|
6
|
+
import { a as writeFeedbackFile, i as init_feedback_writer } from "./feedback-writer-DdsBdtNL.js";
|
|
7
|
+
import { n as resolveIssueFeedbackTarget, r as surfaceIssueFeedbackNeedsYou, t as init_feedback_target } from "./feedback-target-DoRCR3L-.js";
|
|
8
8
|
import { join } from "node:path";
|
|
9
9
|
import { Effect } from "effect";
|
|
10
10
|
import { existsSync } from "node:fs";
|
|
11
|
-
import { readFile, readdir, stat as stat$1 } from "node:fs/promises";
|
|
11
|
+
import { access, readFile, readdir, stat as stat$1 } from "node:fs/promises";
|
|
12
12
|
import { execFile } from "node:child_process";
|
|
13
13
|
import { promisify } from "node:util";
|
|
14
14
|
import { createHash } from "node:crypto";
|
|
15
|
+
//#region ../../lib/cloister/review-verdict-report.ts
|
|
16
|
+
function findVerdictReport(dirPath) {
|
|
17
|
+
for (const filename of VERDICT_REPORT_FILENAMES) {
|
|
18
|
+
const path = join(dirPath, filename);
|
|
19
|
+
if (existsSync(path)) return {
|
|
20
|
+
path,
|
|
21
|
+
filename
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
return null;
|
|
25
|
+
}
|
|
26
|
+
async function findVerdictReportAsync(dirPath) {
|
|
27
|
+
for (const filename of VERDICT_REPORT_FILENAMES) {
|
|
28
|
+
const path = join(dirPath, filename);
|
|
29
|
+
try {
|
|
30
|
+
await access(path);
|
|
31
|
+
return {
|
|
32
|
+
path,
|
|
33
|
+
filename
|
|
34
|
+
};
|
|
35
|
+
} catch {}
|
|
36
|
+
}
|
|
37
|
+
return null;
|
|
38
|
+
}
|
|
39
|
+
function parseVerdictReport(content) {
|
|
40
|
+
const verdictLine = content.match(/^##\s*Verdict:\s*(.+)$/im);
|
|
41
|
+
if (!verdictLine) return null;
|
|
42
|
+
const verdictText = verdictLine[1].trim();
|
|
43
|
+
if (/^(?:APPROVED|PASSED)\b/i.test(verdictText)) return {
|
|
44
|
+
verdict: "passed",
|
|
45
|
+
topBlocker: ""
|
|
46
|
+
};
|
|
47
|
+
if (/^FAILED\b/i.test(verdictText)) return {
|
|
48
|
+
verdict: "failed",
|
|
49
|
+
topBlocker: ""
|
|
50
|
+
};
|
|
51
|
+
const changesRequested = verdictText.match(/^CHANGES REQUESTED(?:\s*(?:—|–|:|-)\s*(.+))?$/i);
|
|
52
|
+
if (!changesRequested) return null;
|
|
53
|
+
const suffixBlocker = changesRequested[1]?.trim();
|
|
54
|
+
if (suffixBlocker) return {
|
|
55
|
+
verdict: "blocked",
|
|
56
|
+
topBlocker: suffixBlocker
|
|
57
|
+
};
|
|
58
|
+
const blockingHeading = content.match(/^##\s*Blocking Findings\s*$/im);
|
|
59
|
+
let blockingSection = "";
|
|
60
|
+
if (blockingHeading?.index !== void 0) {
|
|
61
|
+
const sectionStart = blockingHeading.index + blockingHeading[0].length;
|
|
62
|
+
const remainingContent = content.slice(sectionStart);
|
|
63
|
+
const nextSectionIndex = remainingContent.search(/^##\s/m);
|
|
64
|
+
blockingSection = nextSectionIndex === -1 ? remainingContent : remainingContent.slice(0, nextSectionIndex);
|
|
65
|
+
}
|
|
66
|
+
return {
|
|
67
|
+
verdict: "blocked",
|
|
68
|
+
topBlocker: blockingSection.match(/^###\s*(.+)$/m)?.[1]?.trim() ?? ""
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
var VERDICT_REPORT_FILENAMES;
|
|
72
|
+
var init_review_verdict_report = __esmMin((() => {
|
|
73
|
+
VERDICT_REPORT_FILENAMES = ["synthesis.md", "review.md"];
|
|
74
|
+
}));
|
|
75
|
+
//#endregion
|
|
15
76
|
//#region ../../lib/cloister/review-verdict-feedback.ts
|
|
16
77
|
/**
|
|
17
78
|
* Delivers durable review-verdict feedback to the work agent. Agent messages
|
|
@@ -30,11 +91,11 @@ async function findLatestSynthesis(workspacePath) {
|
|
|
30
91
|
const entries = await readdir(reviewRoot, { withFileTypes: true });
|
|
31
92
|
for (const entry of entries) {
|
|
32
93
|
if (!entry.isDirectory()) continue;
|
|
33
|
-
const
|
|
34
|
-
if (!
|
|
35
|
-
const fileStat = await stat$1(
|
|
94
|
+
const report = findVerdictReport(join(reviewRoot, entry.name));
|
|
95
|
+
if (!report) continue;
|
|
96
|
+
const fileStat = await stat$1(report.path);
|
|
36
97
|
if (!latest || fileStat.mtimeMs > latest.mtimeMs) latest = {
|
|
37
|
-
path:
|
|
98
|
+
path: report.path,
|
|
38
99
|
mtimeMs: fileStat.mtimeMs
|
|
39
100
|
};
|
|
40
101
|
}
|
|
@@ -123,15 +184,25 @@ async function deliverReviewVerdictFeedbackPromise(opts) {
|
|
|
123
184
|
const target = await resolveIssueFeedbackTarget(issueId, { itemId: opts.slotItemId });
|
|
124
185
|
if ("agentId" in target) try {
|
|
125
186
|
let deliveryOutcome;
|
|
126
|
-
|
|
187
|
+
let ambiguousRetries = 0;
|
|
188
|
+
for (;;) try {
|
|
127
189
|
deliveryOutcome = await messageAgent(target.agentId, message, "internal", {
|
|
128
190
|
owesRework: true,
|
|
129
191
|
...dedupKey ? { dedupKey } : {}
|
|
130
192
|
});
|
|
193
|
+
break;
|
|
131
194
|
} catch (err) {
|
|
132
|
-
|
|
195
|
+
const reason = err instanceof Error ? err.message : String(err);
|
|
196
|
+
if (err instanceof Error && err.name === "AmbiguousKeyedDeliveryError" && ambiguousRetries < AMBIGUOUS_DELIVERY_RETRIES) {
|
|
197
|
+
ambiguousRetries += 1;
|
|
198
|
+
console.warn(`[review-verdict-feedback] ambiguous keyed delivery to ${target.agentId} — retrying the same key (${ambiguousRetries}/${AMBIGUOUS_DELIVERY_RETRIES}): ${reason}`);
|
|
199
|
+
await new Promise((resolve) => setTimeout(resolve, AMBIGUOUS_DELIVERY_RETRY_MS));
|
|
200
|
+
continue;
|
|
201
|
+
}
|
|
202
|
+
if (!reason.includes("cannot enforce a dedup key")) throw err;
|
|
133
203
|
console.warn(`[review-verdict-feedback] ${target.agentId} cannot enforce keyed delivery; retrying unkeyed`);
|
|
134
204
|
deliveryOutcome = await messageAgent(target.agentId, message, "internal", { owesRework: true });
|
|
205
|
+
break;
|
|
135
206
|
}
|
|
136
207
|
agentMessageSent = true;
|
|
137
208
|
let repeatedDeliveryLoop = false;
|
|
@@ -181,7 +252,7 @@ async function deliverReviewVerdictFeedbackPromise(opts) {
|
|
|
181
252
|
agentMessageSent
|
|
182
253
|
};
|
|
183
254
|
}
|
|
184
|
-
var execFileAsync, PR_COMMENT_TIMEOUT_MS, suppressedReviewFeedbackDeliveries, REPEATED_DELIVERY_LOOP_MESSAGE, deliverReviewVerdictFeedback;
|
|
255
|
+
var execFileAsync, AMBIGUOUS_DELIVERY_RETRIES, AMBIGUOUS_DELIVERY_RETRY_MS, PR_COMMENT_TIMEOUT_MS, suppressedReviewFeedbackDeliveries, REPEATED_DELIVERY_LOOP_MESSAGE, deliverReviewVerdictFeedback;
|
|
185
256
|
var init_review_verdict_feedback = __esmMin((() => {
|
|
186
257
|
init_agents();
|
|
187
258
|
init_projects();
|
|
@@ -189,13 +260,16 @@ var init_review_verdict_feedback = __esmMin((() => {
|
|
|
189
260
|
init_types();
|
|
190
261
|
init_feedback_writer();
|
|
191
262
|
init_feedback_target();
|
|
263
|
+
init_review_verdict_report();
|
|
192
264
|
execFileAsync = promisify(execFile);
|
|
265
|
+
AMBIGUOUS_DELIVERY_RETRIES = 3;
|
|
266
|
+
AMBIGUOUS_DELIVERY_RETRY_MS = 2e3;
|
|
193
267
|
PR_COMMENT_TIMEOUT_MS = 15e3;
|
|
194
268
|
suppressedReviewFeedbackDeliveries = /* @__PURE__ */ new Map();
|
|
195
269
|
REPEATED_DELIVERY_LOOP_MESSAGE = "Review feedback for this verdict was already delivered to the agent; the pipeline re-triggered delivery 3+ times — possible stuck loop. Investigate before the agent context burns.";
|
|
196
270
|
deliverReviewVerdictFeedback = (opts) => Effect.promise(() => deliverReviewVerdictFeedbackPromise(opts));
|
|
197
271
|
}));
|
|
198
272
|
//#endregion
|
|
199
|
-
export { init_review_verdict_feedback as n, postPrComment as r, deliverReviewVerdictFeedback as t };
|
|
273
|
+
export { findVerdictReportAsync as a, findVerdictReport as i, init_review_verdict_feedback as n, init_review_verdict_report as o, postPrComment as r, parseVerdictReport as s, deliverReviewVerdictFeedback as t };
|
|
200
274
|
|
|
201
|
-
//# sourceMappingURL=review-verdict-feedback-
|
|
275
|
+
//# sourceMappingURL=review-verdict-feedback-5jWuzgpc.js.map
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import { n as init_review_verdict_feedback, t as deliverReviewVerdictFeedback } from "./review-verdict-feedback-
|
|
1
|
+
import { n as init_review_verdict_feedback, t as deliverReviewVerdictFeedback } from "./review-verdict-feedback-5jWuzgpc.js";
|
|
2
2
|
init_review_verdict_feedback();
|
|
3
3
|
export { deliverReviewVerdictFeedback };
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
import { n as __esmMin } from "./rolldown-runtime-DNCzzKnI.js";
|
|
2
|
-
import { k as MemoryStatus, t as init_src } from "./src-
|
|
3
|
-
import { a as resolveArchiveDir, f as resolveStatusFile, i as init_paths, l as resolveObservationsFile, n as ensureDir, r as ensureParentDir, u as resolvePendingDir } from "./paths-
|
|
4
|
-
import { i as init_settings, n as getMemoryRollupPendingThreshold } from "./settings-
|
|
5
|
-
import { i as updateMemoryHealth, n as extractWithProviderPolicy, r as init_health, t as init_providers } from "./providers-
|
|
2
|
+
import { k as MemoryStatus, t as init_src } from "./src-BYdwL_n-.js";
|
|
3
|
+
import { a as resolveArchiveDir, f as resolveStatusFile, i as init_paths, l as resolveObservationsFile, n as ensureDir, r as ensureParentDir, u as resolvePendingDir } from "./paths-BUuhi6jM.js";
|
|
4
|
+
import { i as init_settings, n as getMemoryRollupPendingThreshold } from "./settings-E3FnEIUx.js";
|
|
5
|
+
import { i as updateMemoryHealth, n as extractWithProviderPolicy, r as init_health, t as init_providers } from "./providers-ClGPGkQ8.js";
|
|
6
6
|
import { Result, Schema } from "effect";
|
|
7
7
|
import { dirname } from "path";
|
|
8
8
|
import { randomUUID } from "crypto";
|
|
9
9
|
import { readFile, readdir, rename, unlink, writeFile } from "fs/promises";
|
|
10
10
|
//#region ../../lib/memory/pending.ts
|
|
11
11
|
async function writePendingTurn(turn, options = {}) {
|
|
12
|
-
const dir = resolvePendingDir(turn.identity.projectId, turn.identity.
|
|
12
|
+
const dir = resolvePendingDir(turn.identity.projectId, turn.identity.workspaceId);
|
|
13
13
|
await ensureDir(dir);
|
|
14
14
|
const existing = await findExistingPendingTurn(dir, turn);
|
|
15
15
|
if (existing) return existing;
|
|
@@ -26,7 +26,7 @@ async function writePendingTurn(turn, options = {}) {
|
|
|
26
26
|
}
|
|
27
27
|
async function maybeTriggerStatusRollup(identity, options = {}) {
|
|
28
28
|
const threshold = await loadThreshold(options);
|
|
29
|
-
const pendingTurns = await readPendingTurns(identity.projectId, identity.
|
|
29
|
+
const pendingTurns = await readPendingTurns(identity.projectId, identity.workspaceId);
|
|
30
30
|
const pendingCount = pendingTurns.length;
|
|
31
31
|
if (pendingCount < threshold) return {
|
|
32
32
|
status: "below-threshold",
|
|
@@ -60,8 +60,8 @@ async function maybeTriggerStatusRollup(identity, options = {}) {
|
|
|
60
60
|
inFlightRollups.delete(workspaceKey);
|
|
61
61
|
}
|
|
62
62
|
}
|
|
63
|
-
async function readPendingTurns(projectId,
|
|
64
|
-
const dir = resolvePendingDir(projectId,
|
|
63
|
+
async function readPendingTurns(projectId, workspaceId) {
|
|
64
|
+
const dir = resolvePendingDir(projectId, workspaceId);
|
|
65
65
|
const files = (await readdir(dir).catch((error) => {
|
|
66
66
|
if (error && typeof error === "object" && "code" in error && error.code === "ENOENT") return [];
|
|
67
67
|
throw error;
|
|
@@ -98,15 +98,17 @@ async function enqueueStatusRollupEvent(job) {
|
|
|
98
98
|
await configuredStatusRollupProcessor(job);
|
|
99
99
|
return;
|
|
100
100
|
}
|
|
101
|
-
const { initEventStore } = await import("./event-store-
|
|
102
|
-
const { synthesizeStatusRollup, commitStatusRollup } = await import("./rollup-
|
|
103
|
-
|
|
101
|
+
const { initEventStore } = await import("./event-store-COd2tOx8.js");
|
|
102
|
+
const { synthesizeStatusRollup, commitStatusRollup } = await import("./rollup-CZB4UL9q.js");
|
|
103
|
+
const store = await initEventStore();
|
|
104
|
+
const eventIssueId = job.identity.issueId ?? job.identity.workspaceId;
|
|
105
|
+
await store.appendAsync({
|
|
104
106
|
type: "memory.rollup_triggered",
|
|
105
107
|
timestamp: (/* @__PURE__ */ new Date()).toISOString(),
|
|
106
108
|
payload: {
|
|
107
109
|
projectId: job.identity.projectId,
|
|
108
110
|
workspaceId: job.identity.workspaceId,
|
|
109
|
-
issueId:
|
|
111
|
+
issueId: eventIssueId,
|
|
110
112
|
pendingCount: job.pendingTurns.length,
|
|
111
113
|
turnIds: job.pendingTurns.map((turn) => turn.id),
|
|
112
114
|
threshold: job.threshold
|
|
@@ -115,7 +117,7 @@ async function enqueueStatusRollupEvent(job) {
|
|
|
115
117
|
const identity = job.pendingTurns[0]?.identity;
|
|
116
118
|
const result = await synthesizeStatusRollup({
|
|
117
119
|
projectId: job.identity.projectId,
|
|
118
|
-
|
|
120
|
+
workspaceId: job.identity.workspaceId,
|
|
119
121
|
pendingTurns: job.pendingTurns,
|
|
120
122
|
identity
|
|
121
123
|
});
|
|
@@ -155,8 +157,8 @@ async function synthesizeStatusRollup(input) {
|
|
|
155
157
|
status: "dropped",
|
|
156
158
|
reason: "missing-identity"
|
|
157
159
|
};
|
|
158
|
-
const observations = input.observations ?? await readRecentObservations(input.projectId, input.
|
|
159
|
-
const archivedStatuses = input.archivedStatuses ?? await readArchivedStatuses(input.projectId, input.
|
|
160
|
+
const observations = input.observations ?? await readRecentObservations(input.projectId, input.workspaceId, 20);
|
|
161
|
+
const archivedStatuses = input.archivedStatuses ?? await readArchivedStatuses(input.projectId, input.workspaceId, 3);
|
|
160
162
|
const prompt = buildStatusRollupPrompt({
|
|
161
163
|
pendingTurns: input.pendingTurns,
|
|
162
164
|
observations,
|
|
@@ -189,27 +191,28 @@ async function synthesizeStatusRollup(input) {
|
|
|
189
191
|
};
|
|
190
192
|
}
|
|
191
193
|
async function commitStatusRollup(input) {
|
|
192
|
-
const { projectId, workspaceId
|
|
193
|
-
const statusPath = resolveStatusFile(projectId,
|
|
194
|
-
const previousStatus = await readCurrentStatus(projectId,
|
|
194
|
+
const { projectId, workspaceId } = input.identity;
|
|
195
|
+
const statusPath = resolveStatusFile(projectId, workspaceId);
|
|
196
|
+
const previousStatus = await readCurrentStatus(projectId, workspaceId);
|
|
195
197
|
let archivedPath;
|
|
196
198
|
if (previousStatus) {
|
|
197
|
-
archivedPath = await archiveStatus(projectId,
|
|
198
|
-
await pruneArchivedStatuses(projectId,
|
|
199
|
+
archivedPath = await archiveStatus(projectId, workspaceId, previousStatus, input.now ?? /* @__PURE__ */ new Date());
|
|
200
|
+
await pruneArchivedStatuses(projectId, workspaceId, 3);
|
|
199
201
|
}
|
|
200
202
|
if (input.failAfterArchive) throw new Error("Injected rollup archive failure");
|
|
201
203
|
await writeJsonAtomically(statusPath, input.status);
|
|
202
204
|
if (input.failAfterStatusWrite) throw new Error("Injected rollup status write failure");
|
|
205
|
+
const eventIssueId = input.identity.issueId ?? workspaceId;
|
|
203
206
|
await (input.emitStatusUpdated ?? emitStatusUpdatedEvent)({
|
|
204
207
|
identity: {
|
|
205
208
|
projectId,
|
|
206
209
|
workspaceId,
|
|
207
|
-
issueId
|
|
210
|
+
issueId: eventIssueId
|
|
208
211
|
},
|
|
209
212
|
status: input.status,
|
|
210
213
|
previousStatus
|
|
211
214
|
});
|
|
212
|
-
const clearedPending = await clearPendingTurns(projectId,
|
|
215
|
+
const clearedPending = await clearPendingTurns(projectId, workspaceId, input.pendingTurns);
|
|
213
216
|
return {
|
|
214
217
|
previousStatus,
|
|
215
218
|
archivedPath,
|
|
@@ -217,9 +220,9 @@ async function commitStatusRollup(input) {
|
|
|
217
220
|
clearedPending
|
|
218
221
|
};
|
|
219
222
|
}
|
|
220
|
-
async function readCurrentStatus(projectId,
|
|
223
|
+
async function readCurrentStatus(projectId, workspaceId) {
|
|
221
224
|
try {
|
|
222
|
-
return JSON.parse(await readFile(resolveStatusFile(projectId,
|
|
225
|
+
return JSON.parse(await readFile(resolveStatusFile(projectId, workspaceId), "utf8"));
|
|
223
226
|
} catch (error) {
|
|
224
227
|
if (isEnoent(error)) return void 0;
|
|
225
228
|
throw error;
|
|
@@ -237,51 +240,82 @@ function buildStatusRollupPrompt(input) {
|
|
|
237
240
|
`New pending turns:\n${renderPendingTurns(input.pendingTurns)}`
|
|
238
241
|
].join("\n\n");
|
|
239
242
|
}
|
|
240
|
-
async function readRecentObservations(projectId,
|
|
241
|
-
|
|
243
|
+
async function readRecentObservations(projectId, workspaceId, limit = 20) {
|
|
244
|
+
return readObservationsSince(projectId, workspaceId, { limit });
|
|
245
|
+
}
|
|
246
|
+
/**
|
|
247
|
+
* The `limit` most recent observations within an optional day window, returned
|
|
248
|
+
* oldest-first — the reader behind `pan memory timeline` (PAN-3286 FR-8).
|
|
249
|
+
* Observation files are one JSONL per UTC day, so the window prunes whole
|
|
250
|
+
* files by name before any read.
|
|
251
|
+
*/
|
|
252
|
+
async function readObservationsSince(projectId, workspaceId, options = {}) {
|
|
253
|
+
const limit = options.limit ?? 20;
|
|
254
|
+
const now = options.now ?? /* @__PURE__ */ new Date();
|
|
255
|
+
const cutoffDate = options.days === void 0 ? null : (/* @__PURE__ */ new Date(now.getTime() - (Math.max(1, Math.floor(options.days)) - 1) * 864e5)).toISOString().slice(0, 10);
|
|
256
|
+
const observationsDir = dirname(resolveObservationsFile(projectId, workspaceId, now));
|
|
242
257
|
const files = (await readdir(observationsDir).catch((error) => {
|
|
243
258
|
if (isEnoent(error)) return [];
|
|
244
259
|
throw error;
|
|
245
|
-
})).filter((file) => file.endsWith(".jsonl")).sort().reverse();
|
|
260
|
+
})).filter((file) => file.endsWith(".jsonl")).filter((file) => cutoffDate === null || file.slice(0, 10) >= cutoffDate).sort().reverse();
|
|
246
261
|
const observations = [];
|
|
247
262
|
for (const file of files) {
|
|
248
263
|
const lines = (await readFile(`${observationsDir}/${file}`, "utf8")).trimEnd().split("\n");
|
|
249
264
|
for (let index = lines.length - 1; index >= 0 && observations.length < limit; index -= 1) {
|
|
250
265
|
const line = lines[index];
|
|
251
266
|
if (!line || line.trim().length === 0) continue;
|
|
252
|
-
|
|
267
|
+
const observation = JSON.parse(line);
|
|
268
|
+
if (cutoffDate !== null && observation.timestamp.slice(0, 10) < cutoffDate) continue;
|
|
269
|
+
observations.push(observation);
|
|
253
270
|
}
|
|
254
271
|
if (observations.length >= limit) break;
|
|
255
272
|
}
|
|
256
273
|
return observations.sort((a, b) => a.timestamp.localeCompare(b.timestamp));
|
|
257
274
|
}
|
|
258
|
-
async function readArchivedStatuses(projectId,
|
|
259
|
-
|
|
275
|
+
async function readArchivedStatuses(projectId, workspaceId, limit = 3) {
|
|
276
|
+
return (await readArchivedStatusEntries(projectId, workspaceId, limit)).map((entry) => entry.status).reverse();
|
|
277
|
+
}
|
|
278
|
+
/**
|
|
279
|
+
* Archived statuses newest-first, each paired with the timestamp encoded in
|
|
280
|
+
* its filename — the recall surface behind `pan memory status --history`
|
|
281
|
+
* (PAN-3286 FR-6). Note that `commitStatusRollup` prunes the archive to the
|
|
282
|
+
* three most recent entries, so a larger limit returns whatever is retained.
|
|
283
|
+
*/
|
|
284
|
+
async function readArchivedStatusEntries(projectId, workspaceId, limit = 3) {
|
|
285
|
+
const archiveDir = resolveArchiveDir(projectId, workspaceId);
|
|
260
286
|
const files = (await readdir(archiveDir).catch((error) => {
|
|
261
287
|
if (isEnoent(error)) return [];
|
|
262
288
|
throw error;
|
|
263
|
-
})).filter((file) => file.endsWith(".json")).sort().slice(-limit);
|
|
264
|
-
const
|
|
265
|
-
for (const file of files)
|
|
266
|
-
|
|
289
|
+
})).filter((file) => file.endsWith(".json")).sort().slice(-limit).reverse();
|
|
290
|
+
const entries = [];
|
|
291
|
+
for (const file of files) {
|
|
292
|
+
const path = `${archiveDir}/${file}`;
|
|
293
|
+
const match = ARCHIVE_FILENAME_TIMESTAMP.exec(file);
|
|
294
|
+
entries.push({
|
|
295
|
+
archivedAt: match ? `${match[1]}T${match[2]}:${match[3]}:${match[4]}.${match[5]}Z` : null,
|
|
296
|
+
path,
|
|
297
|
+
status: JSON.parse(await readFile(path, "utf8"))
|
|
298
|
+
});
|
|
299
|
+
}
|
|
300
|
+
return entries;
|
|
267
301
|
}
|
|
268
|
-
async function archiveStatus(projectId,
|
|
269
|
-
const archiveDir = resolveArchiveDir(projectId,
|
|
302
|
+
async function archiveStatus(projectId, workspaceId, status, now) {
|
|
303
|
+
const archiveDir = resolveArchiveDir(projectId, workspaceId);
|
|
270
304
|
await ensureDir(archiveDir);
|
|
271
305
|
const path = `${archiveDir}/${now.toISOString().replace(/[:.]/g, "-")}_${slugify(status.name)}_${randomUUID()}.json`;
|
|
272
306
|
await writeJsonAtomically(path, status);
|
|
273
307
|
return path;
|
|
274
308
|
}
|
|
275
|
-
async function pruneArchivedStatuses(projectId,
|
|
276
|
-
const archiveDir = resolveArchiveDir(projectId,
|
|
309
|
+
async function pruneArchivedStatuses(projectId, workspaceId, keep) {
|
|
310
|
+
const archiveDir = resolveArchiveDir(projectId, workspaceId);
|
|
277
311
|
const files = (await readdir(archiveDir).catch((error) => {
|
|
278
312
|
if (isEnoent(error)) return [];
|
|
279
313
|
throw error;
|
|
280
314
|
})).filter((file) => file.endsWith(".json")).sort();
|
|
281
315
|
await Promise.all(files.slice(0, Math.max(0, files.length - keep)).map((file) => unlink(`${archiveDir}/${file}`)));
|
|
282
316
|
}
|
|
283
|
-
async function clearPendingTurns(projectId,
|
|
284
|
-
const pendingDir = resolvePendingDir(projectId,
|
|
317
|
+
async function clearPendingTurns(projectId, workspaceId, pendingTurns) {
|
|
318
|
+
const pendingDir = resolvePendingDir(projectId, workspaceId);
|
|
285
319
|
const cleared = [];
|
|
286
320
|
for (const turn of pendingTurns) {
|
|
287
321
|
const path = `${pendingDir}/${pendingTurnFileName(turn)}`;
|
|
@@ -295,7 +329,7 @@ async function clearPendingTurns(projectId, issueId, pendingTurns) {
|
|
|
295
329
|
return cleared;
|
|
296
330
|
}
|
|
297
331
|
async function emitStatusUpdatedEvent(event) {
|
|
298
|
-
const { initEventStore } = await import("./event-store-
|
|
332
|
+
const { initEventStore } = await import("./event-store-COd2tOx8.js");
|
|
299
333
|
await (await initEventStore()).appendAsync({
|
|
300
334
|
type: "memory.status_updated",
|
|
301
335
|
timestamp: (/* @__PURE__ */ new Date()).toISOString(),
|
|
@@ -374,7 +408,7 @@ function truncateText(value, maxChars) {
|
|
|
374
408
|
function isEnoent(error) {
|
|
375
409
|
return typeof error === "object" && error !== null && "code" in error && error.code === "ENOENT";
|
|
376
410
|
}
|
|
377
|
-
var STATUS_RESPONSE_JSON_SCHEMA, PENDING_TURN_PROMPT_BUDGET_CHARS, PENDING_TURN_TEXT_BUDGET_CHARS;
|
|
411
|
+
var STATUS_RESPONSE_JSON_SCHEMA, ARCHIVE_FILENAME_TIMESTAMP, PENDING_TURN_PROMPT_BUDGET_CHARS, PENDING_TURN_TEXT_BUDGET_CHARS;
|
|
378
412
|
var init_rollup = __esmMin((() => {
|
|
379
413
|
init_src();
|
|
380
414
|
init_providers();
|
|
@@ -440,10 +474,11 @@ var init_rollup = __esmMin((() => {
|
|
|
440
474
|
}
|
|
441
475
|
}
|
|
442
476
|
};
|
|
477
|
+
ARCHIVE_FILENAME_TIMESTAMP = /^(\d{4}-\d{2}-\d{2})T(\d{2})-(\d{2})-(\d{2})-(\d{3})Z_/;
|
|
443
478
|
PENDING_TURN_PROMPT_BUDGET_CHARS = 12e3;
|
|
444
479
|
PENDING_TURN_TEXT_BUDGET_CHARS = 2e3;
|
|
445
480
|
}));
|
|
446
481
|
//#endregion
|
|
447
|
-
export {
|
|
482
|
+
export { readArchivedStatuses as a, readRecentObservations as c, maybeTriggerStatusRollup as d, writePendingTurn as f, readArchivedStatusEntries as i, synthesizeStatusRollup as l, commitStatusRollup as n, readCurrentStatus as o, init_rollup as r, readObservationsSince as s, buildStatusRollupPrompt as t, init_pending as u };
|
|
448
483
|
|
|
449
|
-
//# sourceMappingURL=rollup-
|
|
484
|
+
//# sourceMappingURL=rollup-BGIrCEkU.js.map
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { d as getOverdeckDatabaseSync, f as init_infra } from "./infra-
|
|
3
|
-
import { o as getPricingSync, s as init_cost, t as calculateCostSync } from "./cost-
|
|
4
|
-
import { Ct as searchFtsSessions, Et as upsertDiscoveredSession, St as markEnrichmentFailed, Tt as updateEnrichment, bt as insertEmbedding, ct as countDiscoveredSessions, dt as findDiscoveredSessionIds, ft as findDiscoveredSessions, ht as getDiscoveredSessionByJsonlPath, lt as countFtsSessions, mt as getDiscoveredSessionById, pt as findEnrichedSessionIdsMissingEmbedding, st as buildFilterSql, ut as ensureDiscoveredSessionsSchema, vt as getEmbedding, wt as topKCosine, xt as loadEmbeddings, yt as init_discovered_sessions } from "./conversations-
|
|
5
|
-
import { n as isBackgroundFeatureEnabled, t as init_features } from "./features-
|
|
6
|
-
import { n as recordBackgroundAiCost, t as init_cost$1 } from "./cost-
|
|
1
|
+
import { Ar as FsError, Vr as init_errors, Xn as getProviderForModelSync, Yn as getProviderEnvSync, Zn as init_providers, _r as init_model_capabilities, a as getConversationsConfigSync, cn as init_projects, f as loadConfigSync, fn as listProjectsSync, hi as init_paths, kr as ConfigError, mr as getModelCapabilitySync, si as encodeClaudeProjectDir, t as init_config_yaml, yi as sessionFilePath, yr as resolveModelIdSync } from "./config-yaml-BSCqwmX0.js";
|
|
2
|
+
import { d as getOverdeckDatabaseSync, f as init_infra } from "./infra-CTrmVqc_.js";
|
|
3
|
+
import { o as getPricingSync, s as init_cost, t as calculateCostSync } from "./cost-CpFDrJUS.js";
|
|
4
|
+
import { Ct as searchFtsSessions, Et as upsertDiscoveredSession, St as markEnrichmentFailed, Tt as updateEnrichment, bt as insertEmbedding, ct as countDiscoveredSessions, dt as findDiscoveredSessionIds, ft as findDiscoveredSessions, ht as getDiscoveredSessionByJsonlPath, lt as countFtsSessions, mt as getDiscoveredSessionById, pt as findEnrichedSessionIdsMissingEmbedding, st as buildFilterSql, ut as ensureDiscoveredSessionsSchema, vt as getEmbedding, wt as topKCosine, xt as loadEmbeddings, yt as init_discovered_sessions } from "./conversations-B4rxz-Wl.js";
|
|
5
|
+
import { n as isBackgroundFeatureEnabled, t as init_features } from "./features-CC47YcCX.js";
|
|
6
|
+
import { n as recordBackgroundAiCost, t as init_cost$1 } from "./cost-KLuwKCW9.js";
|
|
7
7
|
import { Data, Duration, Effect, FileSystem } from "effect";
|
|
8
8
|
import { createReadStream, promises } from "fs";
|
|
9
9
|
import { basename, join, relative, resolve } from "path";
|
|
@@ -522,7 +522,10 @@ const MODEL_PROVIDERS = {
|
|
|
522
522
|
"qwen3-coder-plus": "dashscope",
|
|
523
523
|
"qwen3-plus": "dashscope",
|
|
524
524
|
"qwen3.7-max": "dashscope",
|
|
525
|
-
"grok-build-0.1": "xai"
|
|
525
|
+
"grok-build-0.1": "xai",
|
|
526
|
+
"ql-reason-70b": "quantumllama",
|
|
527
|
+
"ql-swift-8b": "quantumllama",
|
|
528
|
+
"ql-nano-1b": "quantumllama"
|
|
526
529
|
};
|
|
527
530
|
/**
|
|
528
531
|
* Fallback mapping: non-Anthropic model → Anthropic equivalent
|
|
@@ -579,7 +582,10 @@ const FALLBACK_MAP = {
|
|
|
579
582
|
"qwen3-coder-plus": "claude-sonnet-5",
|
|
580
583
|
"qwen3-plus": "claude-haiku-4-5",
|
|
581
584
|
"qwen3.7-max": "claude-sonnet-5",
|
|
582
|
-
"grok-build-0.1": "claude-sonnet-5"
|
|
585
|
+
"grok-build-0.1": "claude-sonnet-5",
|
|
586
|
+
"ql-reason-70b": "claude-sonnet-5",
|
|
587
|
+
"ql-swift-8b": "claude-haiku-4-5",
|
|
588
|
+
"ql-nano-1b": "claude-haiku-4-5"
|
|
583
589
|
};
|
|
584
590
|
/**
|
|
585
591
|
* Default fallback when model not in explicit mapping
|
|
@@ -637,6 +643,7 @@ function getModelProviderSync(modelId) {
|
|
|
637
643
|
if (modelId.toLowerCase().startsWith("minimax")) return "minimax";
|
|
638
644
|
if (modelId.startsWith("mimo-")) return "mimo";
|
|
639
645
|
if (modelId.startsWith("grok-")) return "xai";
|
|
646
|
+
if (modelId.startsWith("ql-")) return "quantumllama";
|
|
640
647
|
return "anthropic";
|
|
641
648
|
}
|
|
642
649
|
/**
|
|
@@ -3029,4 +3036,4 @@ function normalizeDir(dir) {
|
|
|
3029
3036
|
//#endregion
|
|
3030
3037
|
export { enrichSessions as a, searchSessions as c, CostThresholdError as i, embed as l, getSessionsFeedFacets as n, embedSessions as o, listSessionsFeed as r, parseRelativeTime as s, scan as t };
|
|
3031
3038
|
|
|
3032
|
-
//# sourceMappingURL=scanner-
|
|
3039
|
+
//# sourceMappingURL=scanner-DydjXPrz.js.map
|