@overdeck/desktop 0.49.2 → 0.50.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 +1 -0
- package/package.json +1 -1
- package/server/{acceptance-criteria-CHtDkHEL.js → acceptance-criteria-B_maCGZv.js} +2 -2
- package/server/{active-dashboard-bundle-Byh6sP-q.js → active-dashboard-bundle-CCqpFWiz.js} +2 -2
- package/server/{activity-logger-Ck8qoluj.js → activity-logger-B0X2JJwM.js} +1 -1
- package/server/{activity-logger-BWZhVphb.js → activity-logger-SlTXYCVf.js} +3 -3
- package/server/{advancing-selfheal-65W4yUQi.js → advancing-selfheal-BJAfiY-C.js} +11 -6
- package/server/{agent-gc-BNUudFnt.js → agent-gc-bhikjoJ_.js} +11 -11
- package/server/{agent-idle-ONBssBN_.js → agent-idle-D-UQ7gDv.js} +11 -11
- package/server/{agent-state-CM8iVw5B.js → agent-state-BrUPf_7Z.js} +1 -1
- package/server/{agent-state-BJhGIJZe.js → agent-state-FABw8neJ.js} +344 -402
- package/server/{agent-state-service-CzHfoqKQ.js → agent-state-service-BAQApt97.js} +1 -1
- package/server/{agent-state-service-CiIuwzIs.js → agent-state-service-rDenYSlD.js} +5 -5
- package/server/{agents-DpCuoF65.js → agents-DixZjXWm.js} +1 -1
- package/server/{agents-jXgqpHca.js → agents-DzpQidT8.js} +4 -4
- package/server/{archive-planning-CGkU6UeL.js → archive-planning-BL1ABtW0.js} +5 -5
- package/server/archive-planning-D3gw32U9.js +2 -0
- package/server/{artifact-index-jobs-Ck4NRRkY.js → artifact-index-jobs-Cjdme0jS.js} +2 -2
- package/server/{assemble-CyvEBmmq.js → assemble-B_JgnCbG.js} +2 -2
- package/server/{auto-spawn-consent-Dc4mtM-B.js → auto-spawn-consent-BesWchEi.js} +7 -7
- package/server/{backlog-auto-trigger-CCEpr4YT.js → backlog-auto-trigger-COLq639j.js} +3 -3
- package/server/{behavior-BiCQzqyT.js → behavior-DCg8CIWC.js} +3 -3
- package/server/{bridge-pool-patrol-Ce8rNPym.js → bridge-pool-patrol-BDohuMRt.js} +2 -2
- package/server/{briefing-freshness-e_OEYZEe.js → briefing-freshness-ENa_hW_V.js} +2 -2
- package/server/build-info-Dx2qrVhb.js +2 -0
- package/server/{build-info-BRw4QlYO.js → build-info-WuZT6xyi.js} +3 -3
- package/server/{checkpoint-manager-DOwRGFff.js → checkpoint-manager-CSZ7aVQF.js} +2 -2
- package/server/{checkpoint-manager-CKr42Usw.js → checkpoint-manager-DXhGRvg4.js} +1 -1
- package/server/checkpoint-worker.js +1 -1
- package/server/{checkpoints-Cszp_0Np.js → checkpoints-DUkUsPVS.js} +2 -2
- package/server/{checkpoints-Cb6CWT4S.js → checkpoints-tm_w6Y4V.js} +1 -1
- package/server/{claude-hooks-provision-C5JHpxTS.js → claude-hooks-provision-CTh9zxEi.js} +1 -1
- package/server/{claude-hooks-provision-Cer2eFfj.js → claude-hooks-provision-fRofvhTN.js} +2 -2
- package/server/{claude-permissions-Bc5kjX1q.js → claude-permissions-DLrb9ovz.js} +18 -3
- package/server/{claude-settings-overlay-m-VVZej1.js → claude-settings-overlay-BYnXaTVc.js} +2 -2
- package/server/{claude-settings-overlay-C7rWsnya.js → claude-settings-overlay-CMS5Jab5.js} +1 -1
- package/server/cli-BflmtEFM.js +2 -0
- package/server/{cli-BmczsfD6.js → cli-CoQou1t_.js} +11 -11
- package/server/{cliproxy-BpYpkogS.js → cliproxy-DXDQcR3I.js} +2 -2
- package/server/{cliproxy-_yUU0HRY.js → cliproxy-DdhFpcXU.js} +1 -1
- package/server/{close-issue-CxvRD0UI.js → close-issue-CpQ0BWg-.js} +5 -5
- package/server/{closed-issue-reaper-nMLRi5de.js → closed-issue-reaper-CdcJRvUx.js} +13 -13
- package/server/{closed-issue-reaper-omOcUDBl.js → closed-issue-reaper-TymtZM37.js} +1 -1
- package/server/{codex-DZhFfcWu.js → codex-BValsmtK.js} +1 -1
- package/server/{codex-KaSKE-R3.js → codex-DYyZL8JD.js} +6 -6
- package/server/{compaction-continuation-Bjfi70G-.js → compaction-continuation-CVjbdGKt.js} +3 -3
- package/server/{config-CH1AqqIQ.js → config-CvKH7r7W.js} +1 -1
- package/server/{config-ZGjvuR6J.js → config-NxI9Yl2f.js} +2 -2
- package/server/{config-Doq_tF-f.js → config-_qaa1UXH.js} +2 -2
- package/server/{config-yaml-D9nfpEx1.js → config-yaml-D60AnTIu.js} +24 -9
- package/server/{conflict-gate-D4XCtrm2.js → conflict-gate-0dD1kxjN.js} +1 -1
- package/server/{conflict-gate-DcUTY4Gb.js → conflict-gate-hAUCL-un.js} +5 -5
- package/server/{context-layers-BBTKP-Y4.js → context-layers-CdpabJj0.js} +3 -3
- package/server/{context-layers-BGj2Y9l3.js → context-layers-Ds1MnEFI.js} +2 -2
- package/server/{continue-i7Revg8D.js → continue-CnvrUfxw.js} +2 -2
- package/server/{control-settings-BMoDHY1G.js → control-settings-Db0uXgVM.js} +308 -5
- package/server/{conversation-compaction-D4VOmF7p.js → conversation-compaction-B-1KETG9.js} +8 -8
- package/server/{conversation-compaction-DzIjYMfg.js → conversation-compaction-DzMXGRiJ.js} +1 -1
- package/server/{conversation-service-CzZUJFEx.js → conversation-service-BL-asWPX.js} +1 -1
- package/server/{conversation-service-tQCIbBVZ.js → conversation-service-BxIOd5ay.js} +21 -7
- package/server/{conversations-bFDaD5YN.js → conversations-CEMfwMt-.js} +1 -1
- package/server/{conversations-C75EFFjf.js → conversations-nS6QgYpD.js} +5 -5
- package/server/cost-3FyqKK56.js +838 -0
- package/server/{cost-BCWEkvro.js → cost-Cctc-Q9M.js} +3 -3
- package/server/{cost-CiIwxH1D.js → cost-DTuIRE4y.js} +2 -2
- package/server/{cost-sync-DOkdE_yB.js → cost-sync-DfmvLT9L.js} +3 -3
- package/server/{dag-BPc74hwj.js → dag-o-dUpw1L.js} +2 -2
- package/server/{dangerous-git-ops-By9iguTP.js → dangerous-git-ops-BOtXCFkT.js} +1 -1
- package/server/dashboard-db-worker.js +61 -11
- package/server/{deacon-B24dNzr8.js → deacon-CsisLmPt.js} +125 -165
- package/server/{deacon-canonical-state-CkvxRPck.js → deacon-canonical-state-DkdkQS5p.js} +2 -2
- package/server/{deacon-CzSZMtb-.js → deacon-e6py3jkM.js} +3 -3
- package/server/{deacon-event-client-BYIQBu0T.js → deacon-event-client-BCjHiGAY.js} +1 -1
- package/server/{deacon-event-client-Do6Z2gKl.js → deacon-event-client-CMQswEHX.js} +2 -2
- package/server/{deacon-nudge-log-CzM9JA9t.js → deacon-nudge-log-pcliw8Dr.js} +1 -1
- package/server/{deacon-pending-lifecycle-BObEdT-L.js → deacon-pending-lifecycle-BzaE76Xo.js} +3 -3
- package/server/deacon.js +11 -11
- package/server/{dead-end-trip-CnVmjnya.js → dead-end-trip-Bs3hxIn6.js} +3 -3
- package/server/dead-end-trip-DUbiRMtT.js +2 -0
- package/server/{delivery-gyce0vQ7.js → delivery-DhZGRShH.js} +1 -1
- package/server/{deploy-patrol-CEwwEYDM.js → deploy-patrol-B8sKkA8h.js} +8 -8
- package/server/deploy-queue--smqHLhe.js +2 -0
- package/server/{deploy-queue-r96ojDI3.js → deploy-queue-CCGWXFkp.js} +2 -2
- package/server/{deploy-window-D_3hhfxt.js → deploy-window-YuJewzmC.js} +4 -4
- package/server/{deploy-window-DeJK8mTK.js → deploy-window-hgsvZ3UZ.js} +1 -1
- package/server/{dev-supervisor-DZWwpENk.js → dev-supervisor-4SBloJHV.js} +2 -2
- package/server/{devcontainer-renderer-d-9dCV_2.js → devcontainer-renderer-BiJhwFNi.js} +3 -3
- package/server/{dist-DsLAsFSh.js → dist-CoR2sivG.js} +1 -1
- package/server/dist-FHv1s5ez.js +3 -0
- package/server/{docker-B2mUBzGk.js → docker-CWO7dcIP.js} +3 -3
- package/server/{docker-CRPHBylA.js → docker-DQzyMXkd.js} +1 -1
- package/server/{dod-DWtilRLx.js → dod-BAk5arLF.js} +1 -1
- package/server/{done-preflight-BDVdWed5.js → done-preflight-CGFA0M1b.js} +1 -1
- package/server/{done-preflight-D4ukUf-S.js → done-preflight-Cx9JGznT.js} +5 -5
- package/server/{durable-review-pipeline-CaCbEJSt.js → durable-review-pipeline-BOEZ0chh.js} +1 -1
- package/server/{durable-review-pipeline-B3OS2_He.js → durable-review-pipeline-Djx_lvFd.js} +1 -1
- package/server/{ensure-devcontainer-rGSh0JHK.js → ensure-devcontainer-Dk6ZMOUC.js} +1 -1
- package/server/{ensure-devcontainer-BUeBRjmm.js → ensure-devcontainer-DzYBBwnM.js} +4 -4
- package/server/{esm-shims-oAaKIa-a.js → esm-shims-deFq5Hhl.js} +1 -1
- package/server/{event-store-Db4w4YIY.js → event-store-C50Qt-f1.js} +1 -1
- package/server/{event-store-BCSgMubf.js → event-store-DTns2XZP.js} +5 -5
- package/server/{event-store-provider-DlSQND3V.js → event-store-provider-Bu1Qrg6v.js} +1 -1
- package/server/{events-B6zioJA_.js → events-B6xW8Cpm.js} +3 -3
- package/server/{factory-BrdqXBeK.js → factory-CWVKwKFE.js} +4 -4
- package/server/{feature-registry-storage-zh3ZXW6f.js → feature-registry-storage-vaxRN3WO.js} +2 -2
- package/server/{features-BGntOWdy.js → features-DXWwktJB.js} +2 -2
- package/server/{feedback-stuck-retirement-DpA5u1kt.js → feedback-stuck-retirement-CXAYe2rU.js} +2 -2
- package/server/{feedback-target-Ddqk93NF.js → feedback-target-DSVpi0gT.js} +1 -1
- package/server/{feedback-target-D7GxdUYG.js → feedback-target-yPD_wclF.js} +10 -10
- package/server/{feedback-writer-CH2846DP.js → feedback-writer-BzN4qvaP.js} +1 -1
- package/server/{feedback-writer-C1gCLFmp.js → feedback-writer-Ds1Wjsz4.js} +5 -5
- package/server/{flywheel-HJt7QdWP.js → flywheel-BCZS-FlW.js} +1 -1
- package/server/{flywheel-v1cCOBx-.js → flywheel-CC4gE_rx.js} +15 -15
- package/server/{flywheel-CjW2L7BS.js → flywheel-DWKd7bMc.js} +16 -16
- package/server/{flywheel-merge-order-4fNRN2F2.js → flywheel-merge-order-DDT3i57u.js} +1 -1
- package/server/{flywheel-merge-order-D_yyAlND.js → flywheel-merge-order-DJwH2KpL.js} +17 -15
- package/server/forge-4VVCRcF7.js +2 -0
- package/server/{forge-RVTCK_5X.js → forge-CHADjOFs.js} +2 -2
- package/server/{from-BnLgKYvw.js → from-C3dzmjSO.js} +1 -1
- package/server/{fs-lock-C7J-ugIf.js → fs-lock-DQ_gUxfq.js} +2 -2
- package/server/{fts-operations-CU0B5WUx.js → fts-operations-asZo2fh1.js} +2 -2
- package/server/{git-info-BSrI9owC.js → git-info-DMOSfJ9I.js} +1 -1
- package/server/{git-utils-CsKV0Dis.js → git-utils-BAMwn9Nf.js} +1 -1
- package/server/{git-utils-DW8-jIUJ.js → git-utils-BdHk8y7g.js} +4 -4
- package/server/{github-app-Oi5hdn1n.js → github-app-BWziYCf3.js} +1 -1
- package/server/{github-app-7ywLhuZO.js → github-app-BlMSzSTw.js} +2 -2
- package/server/{github-client-Cy0fSj1a.js → github-client-OK24qpol.js} +1 -1
- package/server/{github-client-DAbuXLuk.js → github-client-w6j5nVlz.js} +2 -2
- package/server/{github-pr-lookup-Dhh3ec1V.js → github-pr-lookup-bGcsEvLE.js} +2 -2
- package/server/{harness-binary-tMmgJfC1.js → harness-binary-DChiynaB.js} +2 -2
- package/server/{harness-resolve-DusNpVEe.js → harness-resolve-BplBEbwn.js} +4 -4
- package/server/{health-events-BYDZ9n2i.js → health-events-BTqsmunw.js} +1 -1
- package/server/{health-events-DNw9Mzw9.js → health-events-Bk3LjaJ9.js} +2 -2
- package/server/{hooks-BjBjxqNh.js → hooks-DJR1yR9w.js} +2 -2
- package/server/{hooks-B4wj32l2.js → hooks-EndRNrx9.js} +1 -1
- package/server/{hume-BP9YbxaE.js → hume-1FJmNDTq.js} +2 -2
- package/server/hume-gXLmRhmN.js +3 -0
- package/server/{identity-C23uY8dZ.js → identity-C3s8lyp0.js} +3 -3
- package/server/{idle-stack-reaper-Bw0rU9GC.js → idle-stack-reaper-CBelVOE3.js} +1 -1
- package/server/{idle-stack-reaper-BSxb1bln.js → idle-stack-reaper-DtoI4al6.js} +4 -4
- package/server/{in-flight-guard-DuxabAHT.js → in-flight-guard-B7khcBdQ.js} +1 -1
- package/server/{infra-CHIvOb9q.js → infra-CJRi_5Wu.js} +10 -4
- package/server/{injection-BYUt8ml1.js → injection-ADWQ3D0s.js} +8 -8
- package/server/{injection-BviePcm3.js → injection-BWsgHvrL.js} +1 -1
- package/server/{inspect-agent-sV_19NxZ.js → inspect-agent-CCfNJjKr.js} +12 -12
- package/server/inspect-agent-Dhp3hCGp.js +2 -0
- package/server/{internal-token-BOtIRJU7.js → internal-token-BCTEqUCX.js} +1 -1
- package/server/{internal-token-DoVzb4b7.js → internal-token-BeIWG_kT.js} +2 -2
- package/server/{io-DKrWd3gX.js → io-BCtZoXHo.js} +4 -4
- package/server/{issue-closed-6RQsAjDX.js → issue-closed-CiYAa6bX.js} +7 -7
- package/server/{issue-lifecycle-D9nLErvS.js → issue-lifecycle-BETNVVLq.js} +25 -25
- package/server/{issue-lifecycle-DOPVv7xz.js → issue-lifecycle-DaKN57sx.js} +1 -1
- package/server/{issue-service-singleton-CvgNAWqK.js → issue-service-singleton-1Q0ER8Yc.js} +1 -1
- package/server/{issue-service-singleton-B2xy-IS9.js → issue-service-singleton-C_sZ0HjP.js} +10 -10
- package/server/{issue-title-fallback-DTSCQVu0.js → issue-title-fallback-B91iD66g.js} +3 -3
- package/server/{issues-e_Ck1Ln2.js → issues-RGHQUKhB.js} +2 -2
- package/server/{jsonl-parser-DqxVCZ1k.js → jsonl-parser-Dfs1dlYE.js} +3 -3
- package/server/{jsonl-resolver-07OS3qOr.js → jsonl-resolver-bFtftCDd.js} +8 -8
- package/server/{kimi-code-vtXl2DR5.js → kimi-code-BxkDgaj4.js} +1 -1
- package/server/{kimi-code-BjtAHIz1.js → kimi-code-CNYRA8Dd.js} +11 -11
- package/server/{kimi-parser-B1lgy2Vt.js → kimi-parser-OcWwmOqF.js} +2 -2
- package/server/{label-cleanup-D2zUMasf.js → label-cleanup-CefxK9tL.js} +3 -3
- package/server/{lifecycle-DaCovZwn.js → lifecycle-DDZ7w-BY.js} +6 -6
- package/server/{lifecycle-0NOEzomy.js → lifecycle-DVXyUil2.js} +2 -2
- package/server/{lifecycle-io-BBMTaP7S.js → lifecycle-io-D1oBiMce.js} +1 -1
- package/server/{lifecycle-io-6WL46dsB.js → lifecycle-io-D7N0vQNj.js} +5 -5
- package/server/{linear-client-7fQThJTc.js → linear-client-DUN7zCeb.js} +2 -2
- package/server/{linear-client-BTGApNLo.js → linear-client-TL32snOy.js} +1 -1
- package/server/{linear-mcp-auth-B8pYRsiU.js → linear-mcp-auth-CtRKSHy5.js} +1 -1
- package/server/{linear-mcp-auth-Nk5s3L9M.js → linear-mcp-auth-bB0CPyjh.js} +5 -5
- package/server/memory-fts-worker.js +1 -1
- package/server/{memory-governor-Cqvbusr4.js → memory-governor-Cvv_9K0M.js} +87 -21
- package/server/{memory-pressure-patrol-DPb8foam.js → memory-pressure-patrol-C6DJJQRA.js} +38 -14
- package/server/{merge-BB_bjJ9a.js → merge-DOCR6pHi.js} +1 -1
- package/server/{merge-FZ78_cEz.js → merge-FTk4LsnM.js} +3 -3
- package/server/{merge-agent-B3jRrlS1.js → merge-agent-C-dsN9se.js} +31 -31
- package/server/{merge-agent-BuoC_PRZ.js → merge-agent-D-4_iQgy.js} +2 -2
- package/server/{merge-batch-B8bVjFWS.js → merge-batch-BJjzUUL7.js} +1 -1
- package/server/{merge-completeness-DQt7Qa7i.js → merge-completeness-BOtBUwTU.js} +4 -4
- package/server/{merge-completeness-DkdabVch.js → merge-completeness-CoLJxfUY.js} +1 -1
- package/server/merge-eligibility-C4rTS97F.js +3 -0
- package/server/merge-eligibility-D7wRnJbj.js +51 -0
- package/server/merge-ops-Cf02szJ5.js +2 -0
- package/server/merge-rebase-Bj7eJAG4.js +2 -0
- package/server/{merge-rebase-qq40s91P.js → merge-rebase-KBw4rdh3.js} +2 -2
- package/server/{merge-set-BTNYvxM3.js → merge-set-CVfEM57p.js} +1 -1
- package/server/{merge-set-BmRRflt0.js → merge-set-CyW-xSn4.js} +4 -4
- package/server/{merge-sync-0m2Q087q.js → merge-sync-CYGsJy0u.js} +1 -1
- package/server/{merge-sync-CJpOa0cZ.js → merge-sync-YLvOPAry.js} +2 -2
- package/server/{merge-train-iwKqjtCF.js → merge-train-VxLn8Ms4.js} +4 -4
- package/server/{merge-train-deps-CH5Mr3vN.js → merge-train-deps-D0y4hBB9.js} +4 -4
- package/server/{merge-verification-JJc5GC2t.js → merge-verification-BfJRNMiD.js} +6 -6
- package/server/{merged-docker-cleanup-worker-BOqWA373.js → merged-docker-cleanup-worker-Bh5fKG_b.js} +3 -3
- package/server/{merged-docker-cleanup-worker-CrhTdxZV.js → merged-docker-cleanup-worker-Ci9oeFAe.js} +1 -1
- package/server/{messaging-nuwStbdQ.js → messaging-Dfbhgjd6.js} +1 -1
- package/server/{multipart-parser-DxuW_rZV.js → multipart-parser-BYwfKOVU.js} +2 -2
- package/server/{no-resume-mode-xuYLFhLw.js → no-resume-mode-DjMQRkId.js} +1 -1
- package/server/node_modules/.package-lock.json +18 -18
- package/server/node_modules/@effect/platform-node/node_modules/@effect/platform-node-shared/ai-docs/package.json +2 -2
- package/server/node_modules/@effect/platform-node/node_modules/@effect/platform-node-shared/ai-docs/src/70_cli/10_basics.ts +4 -2
- package/server/node_modules/@effect/platform-node/node_modules/@effect/platform-node-shared/dist/NodeClusterSocket.d.ts.map +1 -1
- package/server/node_modules/@effect/platform-node/node_modules/@effect/platform-node-shared/dist/NodeClusterSocket.js +12 -9
- package/server/node_modules/@effect/platform-node/node_modules/@effect/platform-node-shared/dist/NodeClusterSocket.js.map +1 -1
- package/server/node_modules/@effect/platform-node/node_modules/@effect/platform-node-shared/dist/NodeSocket.js +1 -1
- package/server/node_modules/@effect/platform-node/node_modules/@effect/platform-node-shared/dist/NodeSocket.js.map +1 -1
- package/server/node_modules/@effect/platform-node/node_modules/@effect/platform-node-shared/package.json +6 -6
- package/server/node_modules/@effect/platform-node/node_modules/@effect/platform-node-shared/src/NodeClusterSocket.ts +15 -12
- package/server/node_modules/@effect/platform-node/node_modules/@effect/platform-node-shared/src/NodeSocket.ts +1 -1
- package/server/node_modules/@types/node/README.md +1 -1
- package/server/node_modules/@types/node/buffer.buffer.d.ts +5 -5
- package/server/node_modules/@types/node/crypto.d.ts +2 -2
- package/server/node_modules/@types/node/http.d.ts +16 -0
- package/server/node_modules/@types/node/http2.d.ts +10 -2
- package/server/node_modules/@types/node/package.json +2 -2
- package/server/node_modules/@types/node/process.d.ts +52 -0
- package/server/node_modules/@types/node/quic.d.ts +210 -28
- package/server/node_modules/@types/node/sqlite.d.ts +6 -2
- package/server/node_modules/@types/node/test.d.ts +36 -0
- package/server/node_modules/effect/node_modules/uuid/README.md +19 -19
- package/server/node_modules/effect/node_modules/uuid/dist/v1.js +7 -3
- package/server/node_modules/effect/node_modules/uuid/dist/v7.js +5 -2
- package/server/node_modules/effect/node_modules/uuid/dist-node/v1.js +7 -3
- package/server/node_modules/effect/node_modules/uuid/dist-node/v7.js +5 -2
- package/server/node_modules/effect/node_modules/uuid/package.json +4 -3
- package/server/node_modules/msgpackr/dist/index-no-eval.cjs +11 -5
- 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 +11 -5
- 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 +11 -5
- package/server/node_modules/msgpackr/dist/node.cjs.map +1 -1
- package/server/node_modules/msgpackr/dist/test.js +11 -5
- package/server/node_modules/msgpackr/dist/test.js.map +1 -1
- package/server/node_modules/msgpackr/dist/unpack-no-eval.cjs +11 -5
- 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 +11 -5
- package/server/node_modules/picomatch/lib/parse.js +10 -1
- package/server/node_modules/picomatch/lib/scan.js +30 -18
- package/server/node_modules/picomatch/package.json +1 -1
- package/server/{orphan-proposed-reconciler-gf4TxfZb.js → orphan-proposed-reconciler-CnP0K2v3.js} +2 -2
- package/server/{orphan-proposed-reconciler-Dmk0kO_p.js → orphan-proposed-reconciler-nFUlquZt.js} +21 -21
- package/server/package-lock.json +19 -19
- package/server/package.json +1 -1
- package/server/{pan-dir-BMda7tQj.js → pan-dir-B4NfzOf3.js} +4 -4
- package/server/{parked-residue-BiHb8cD7.js → parked-residue-8WbU0y1z.js} +68 -64
- package/server/{paths-DEe9j-kw.js → paths-rETQhTF2.js} +2 -2
- package/server/{pending-lifecycle-claim-J5uIIJPu.js → pending-lifecycle-claim-yAwDuGS4.js} +1 -1
- package/server/{pickup-D1UbSDPd.js → pickup-Dle6k9Xt.js} +1 -1
- package/server/{pipeline-agent-reader-D-6okryb.js → pipeline-agent-reader-CeWhQzXC.js} +3 -3
- package/server/{pipeline-membership-PGX3Pe8V.js → pipeline-membership-BV4hdkHm.js} +1 -1
- package/server/{pipeline-membership-CCbgBzNC.js → pipeline-membership-C9ykcjsn.js} +1 -1
- package/server/{pipeline-membership-gather-BK4dzh0X.js → pipeline-membership-gather-Ba0wJNCR.js} +10 -10
- package/server/{pipeline-membership-gather-BRhU7XPx.js → pipeline-membership-gather-C9E22B2W.js} +1 -1
- package/server/{pipeline-notifier-DvHLaXKb.js → pipeline-notifier-B5DPXvnr.js} +1 -1
- package/server/{pipeline-notifier-BNAV9kpa.js → pipeline-notifier-p190L97e.js} +2 -2
- package/server/{post-merge-lifecycle-worker-DAWgzXQA.js → post-merge-lifecycle-worker-OQoK8Ckg.js} +2 -2
- package/server/{post-merge-state-DC2_0t12.js → post-merge-state-DFaf7OI1.js} +4 -4
- package/server/{prd-locations-BbAvqQmT.js → prd-locations-F2oLSAhy.js} +3 -3
- package/server/{project-pipelines-By_5WcT4.js → project-pipelines-CUsa6U59.js} +2 -2
- package/server/{project-repos-3bI6t4fO.js → project-repos-BVdi9-ch.js} +1 -1
- package/server/{project-repos--QeCg7yQ.js → project-repos-CsfvLtmr.js} +2 -2
- package/server/{project-resource-refresh-queue-x-K9mvpP.js → project-resource-refresh-queue-BehrH4Ai.js} +17 -17
- package/server/{project-resource-refresh-queue-BaZC79S3.js → project-resource-refresh-queue-D2110Guc.js} +1 -1
- package/server/{projects-LftaVK99.js → projects-BMuEf14J.js} +1 -1
- package/server/{prompts-BotGu-6W.js → prompts-CKpDt8Jn.js} +2 -2
- package/server/{providers-Dqgz3MY5.js → providers-Buv2wmFU.js} +1 -1
- package/server/{providers-BL1I66sM.js → providers-CxPKmyif.js} +7 -7
- package/server/public/assets/{chunk-BO2N2NFS-D5Fz5jND.js → chunk-BO2N2NFS-DZOQVqV1.js} +4 -4
- package/server/public/assets/{diagram-OG6HWLK6-Eux0gWFq.js → diagram-OG6HWLK6-oKeXcbO1.js} +1 -1
- package/server/public/assets/{dist-D-JX_u7m.js → dist-2qPmeRzT.js} +3 -3
- package/server/public/assets/{dist-C3zShwhA.js → dist-ClBlE-Nm.js} +1 -1
- package/server/public/assets/{ganttDiagram-6RSMTGT7-UH3aweia.js → ganttDiagram-6RSMTGT7-BwdG9fQv.js} +1 -1
- package/server/public/assets/{highlighted-body-OFNGDK62-ccIQ-WXS.js → highlighted-body-OFNGDK62-BzGNdskQ.js} +1 -1
- package/server/public/assets/index-CdPveU3M.css +1 -0
- package/server/public/assets/{index-BTVcdPve.js → index-Cg6tdZoY.js} +149 -149
- package/server/public/assets/{linear-Cnnu4YQy.js → linear-DpEt1TJb.js} +1 -1
- package/server/public/assets/mermaid-GHXKKRXX-6KBD_3T_.js +1 -0
- package/server/public/assets/{pieDiagram-4H26LBE5-BD8-Tye6.js → pieDiagram-4H26LBE5-9BpM4oRJ.js} +1 -1
- package/server/public/assets/{prod-Ca6aKMts.js → prod-CzJiNNEG.js} +4 -4
- package/server/public/assets/{quadrantDiagram-W4KKPZXB-BmSrVyFD.js → quadrantDiagram-W4KKPZXB-BXWVAoZx.js} +1 -1
- package/server/public/assets/{sankeyDiagram-5OEKKPKP-CEGy8Das.js → sankeyDiagram-5OEKKPKP-5oxodGEw.js} +1 -1
- package/server/public/assets/{xychartDiagram-2RQKCTM6-VnQ8iY8s.js → xychartDiagram-2RQKCTM6-BChDrHxZ.js} +1 -1
- package/server/public/index.html +2 -2
- package/server/pull-requests-CmlandI7.js +2 -0
- package/server/{pull-requests-Cp_FDT8-.js → pull-requests-T0OV0Vn4.js} +3 -3
- package/server/{rally-bQpBzUNf.js → rally-CUqj2oIN.js} +3 -3
- package/server/rally-DYIn9R2U.js +3 -0
- package/server/{rally-api-CqAIJ8RX.js → rally-api-BFPb2oSq.js} +2 -2
- package/server/{rally-api-Ij1Zt0NI.js → rally-api-BoucQG1u.js} +1 -1
- package/server/{rally-client-qKbCNRVW.js → rally-client-16iObny7.js} +4 -4
- package/server/{rally-client-CN5vh4Ac.js → rally-client-CsqLjLLa.js} +1 -1
- package/server/{rebuild-stack-DrMyA_mA.js → rebuild-stack-BcBVFJp3.js} +2 -2
- package/server/{rebuild-stack-BNOMVh7C.js → rebuild-stack-CyXMrj6K.js} +6 -6
- package/server/reconciler-caYiRnPy.js +657 -0
- package/server/{reconstruct-cache-mxIYCnqs.js → reconstruct-cache-3JzPOune.js} +7 -7
- package/server/{record-Ug18Cp4V.js → record-DYOg97Iv.js} +1 -1
- package/server/{record-update-dBGxL9OC.js → record-update-BPqpBu3O.js} +5 -5
- package/server/{record-update-WyhsREoH.js → record-update-CDPEX7BH.js} +1 -1
- package/server/{recovery-trip-BKLrL6NX.js → recovery-trip-CpfW6LCJ.js} +3 -3
- package/server/{recovery-trip-wFAixKsg.js → recovery-trip-xqKC07Gy.js} +1 -1
- package/server/{release-engine-D9gaCBn9.js → release-engine-C_OOhCaK.js} +5 -5
- package/server/{release-set-DPHHzEGx.js → release-set-DOIDz2vw.js} +3 -3
- package/server/{remote-BUEeUic6.js → remote-BTh-sjpX.js} +3 -3
- package/server/{remote-agents-CSaTLi3u.js → remote-agents-DbbN7vSm.js} +6 -6
- package/server/{remote-agents-BVtASiOF.js → remote-agents-MuXx2gWm.js} +1 -1
- package/server/{remote-completion-CBV3b9TI.js → remote-completion-LcWCpAm2.js} +12 -12
- package/server/{remote-BU6ONLpv.js → remote-xY0B43Ho.js} +3 -3
- package/server/{resolver-gxv97jsQ.js → resolver-C2QKOf09.js} +2 -2
- package/server/{resolver-DvSMXty7.js → resolver-D4nsxfGo.js} +7 -7
- package/server/{resume-DvHuF-bm.js → resume-ByUrJUNX.js} +1 -1
- package/server/{review-agent-esZ0QXdY.js → review-agent-BRBTm1qE.js} +30 -30
- package/server/{review-agent-DgkUPRx0.js → review-agent-Caodi0PX.js} +2 -2
- package/server/{review-artifacts-DGGEobLp.js → review-artifacts-DgaDlbO4.js} +6 -6
- package/server/{review-convoy-liveness-DmO8dIBH.js → review-convoy-liveness-BBvyuRLC.js} +8 -8
- package/server/{review-run-recovery-DHiiw7d8.js → review-run-recovery-DCzWMMvE.js} +1 -1
- package/server/{review-run-recovery-Ct0q7FkE.js → review-run-recovery-THHMKlXJ.js} +2 -2
- package/server/{review-status-C_kQeeX0.js → review-status-Bge_3XTR.js} +1 -1
- package/server/{review-status-yOGD2MuK.js → review-status-DpniqzPT.js} +55 -45
- package/server/{review-status-emit-BZz1Y_22.js → review-status-emit-D7sM720S.js} +3 -3
- package/server/{review-status-enrichment-BWH0XW_m.js → review-status-enrichment-PDI4-faj.js} +3 -3
- package/server/{review-status-sync-2C9lk85r.js → review-status-sync-C6ZKTI8f.js} +11 -8
- package/server/{review-status-sync-Bq00Loey.js → review-status-sync-CvpHWyvR.js} +1 -1
- package/server/{review-verdict-feedback-CE_tr2iQ.js → review-verdict-feedback-B2ojHFH5.js} +7 -7
- package/server/{review-verdict-feedback-Brjaxoda.js → review-verdict-feedback-tyMoLT2L.js} +1 -1
- package/server/{review-verdict-writer-Ca2V7QSY.js → review-verdict-writer-Cy_1pnIj.js} +7 -7
- package/server/{review-verdict-writer-CD-4kDVx.js → review-verdict-writer-DjrJ64eS.js} +1 -1
- package/server/{rollup--g9ik1XQ.js → rollup-Cp0KEoOu.js} +1 -1
- package/server/{rollup-B6g9Nr6L.js → rollup-DU3xBQu2.js} +8 -8
- package/server/{scanner-YxIv-fG1.js → scanner-BFKG3Gxv.js} +7 -7
- package/server/{search-DqMN4__-.js → search-DhtKwbBC.js} +2 -2
- package/server/{sequence-io--b3_PsWq.js → sequence-io-C-Q19Jez.js} +4 -4
- package/server/{sequencer-agent-CqouKVZG.js → sequencer-agent-eN2P2lDz.js} +6 -6
- package/server/server.js +585 -282
- package/server/{service-CEp-3iow.js → service-CThO0Sar.js} +77 -772
- package/server/{session-fork-GtoeCh2H.js → session-fork-ZYTHtpBh.js} +2 -2
- package/server/settings-ByDRfuuE.js +2 -0
- package/server/{settings-CLQcdkoD.js → settings-CTywpFw5.js} +2 -2
- package/server/{settings-Ch2pCVtt.js → settings-nAT-eK56.js} +3 -3
- package/server/{shadow-engineering-BxiFrIKv.js → shadow-engineering-BHZKPJhq.js} +2 -2
- package/server/{shadow-state-CSA1vtxr.js → shadow-state-BTLi4Axs.js} +2 -2
- package/server/{shadow-state-nGhCNXT2.js → shadow-state-CZ_LnPsi.js} +1 -1
- package/server/{shadow-utils-7q5QDmMj.js → shadow-utils-CPLlPHdn.js} +2 -2
- package/server/{ship-log-ie0A_SqV.js → ship-log-D-CphNZx.js} +1 -1
- package/server/{ship-record-BM3oVvnL.js → ship-record-BaBla0l_.js} +5 -5
- package/server/{ship-record-DHWH1hLz.js → ship-record-BlvX8-xv.js} +1 -1
- package/server/{ship-status-BEkddXMT.js → ship-status-rQbPQBsF.js} +2 -2
- package/server/{smart-compaction-BkzjVpWL.js → smart-compaction-CUXn8mfX.js} +1 -1
- package/server/{smart-compaction-D0TE1lBD.js → smart-compaction-D1CNGdZx.js} +7 -7
- package/server/{spawn-planning-session-CkGweSCC.js → spawn-planning-session-DCmO6COk.js} +17 -17
- package/server/{spawn-planning-session-s406rw1N.js → spawn-planning-session-DfEWyrVV.js} +2 -2
- package/server/{specialist-completion-CTAjwH5j.js → specialist-completion-BMv3K54P.js} +1 -1
- package/server/{specialist-context-CKasRfYu.js → specialist-context-C1-CfYQb.js} +5 -5
- package/server/{specialist-handoff-logger-DrjrOmmn.js → specialist-handoff-logger-BDKoz5Z9.js} +2 -2
- package/server/{specialist-logs-Du6quZ0_.js → specialist-logs-BJQFkpdG.js} +3 -3
- package/server/{specialists-x-kPMhrL.js → specialists-CYt1U3Zm.js} +2 -2
- package/server/{specialists-CuDWiNdB.js → specialists-D6MUU31Q.js} +19 -19
- package/server/{specialists-b0dMMjWq.js → specialists-DhS79T9v.js} +333 -118
- package/server/{specialists-B-4zyE4Y.js → specialists-Dx0zRTxX.js} +1 -1
- package/server/{specialists-registry-1y6Rt_F1.js → specialists-registry-BRLCi61y.js} +1 -1
- package/server/{specialists-registry-BYjs04iK.js → specialists-registry-Bng0OFGH.js} +2 -2
- package/server/specs-oRGyfz6C.js +3 -0
- package/server/{src-CZsPs61V.js → src-C7gGe4KU.js} +6 -6
- package/server/{src-CY2Wl8IX.js → src-CdwN6WY6.js} +8 -2
- package/server/{src-DeQwpuh6.js → src-DMosbuSJ.js} +3 -3
- package/server/{stack-health-BQFSJc0l.js → stack-health-BKfNaqMm.js} +3 -3
- package/server/{stack-health-ypIKtkbE.js → stack-health-Bz711z1Y.js} +1 -1
- package/server/{stale-task-claims-C2e1zdMT.js → stale-task-claims-DMRLb5R2.js} +5 -5
- package/server/{staleness-Fzx_3_Hr.js → staleness-CxZaIhrn.js} +1 -1
- package/server/{staleness-CRDK6LFG.js → staleness-r_dkMyMG.js} +1 -1
- package/server/{stall-sweeper-QNk4h9m6.js → stall-sweeper-CBWqSWV2.js} +8 -8
- package/server/{state-home-DdG8erBI.js → state-home-DhsMqg8W.js} +2 -2
- package/server/{state-migrate-C6H3jfHE.js → state-migrate-C2Ouyd6e.js} +6 -6
- package/server/{state-mirror-DF4Lfxm0.js → state-mirror-BPXciz84.js} +3 -3
- package/server/{stuck-remediation-BVNd9txd.js → stuck-remediation-DALieAkx.js} +1 -1
- package/server/{stuck-remediation-BDa_tXgB.js → stuck-remediation-kta3KN7c.js} +13 -13
- package/server/{substrate-bug-weights-service-BbbCZEtJ.js → substrate-bug-weights-service-D_ICP7TI.js} +3 -3
- package/server/{summary-fork-DIQmtOuV.js → summary-fork-CojrFKb6.js} +2 -2
- package/server/{summary-fork-BvcW6bq0.js → summary-fork-DhhaFhxZ.js} +10 -10
- package/server/supervisor-DSSWo4M2.js +2 -0
- package/server/{supervisor-D3jC2c7A.js → supervisor-DqH-laVL.js} +4 -4
- package/server/{swarm-readiness-CMWAQuWM.js → swarm-readiness-LF8ZF_hc.js} +3 -3
- package/server/{synthesis-verdict-DVlrLF9A.js → synthesis-verdict-CGFF8uQI.js} +2 -2
- package/server/{synthesis-verdict-C-pJOPsn.js → synthesis-verdict-DSoOFUIV.js} +1 -1
- package/server/{system-prerequisites-QKtIYXI2.js → system-prerequisites-Lsx0jUUV.js} +2 -2
- package/server/{teardown-workspace-cJea1OLo.js → teardown-workspace-DMwomEG1.js} +16 -16
- package/server/{test-agent-queue-C5DI_gWX.js → test-agent-queue-Cu0D6BYe.js} +6 -6
- package/server/{test-verdict-C7kmd2_Y.js → test-verdict-9mvl7pQn.js} +1 -1
- package/server/{test-verdict-DUbDHqeD.js → test-verdict-oNSv1rVr.js} +2 -2
- package/server/{tldr-daemon-BNQHwblU.js → tldr-daemon-CRSAkhBx.js} +1 -1
- package/server/{tldr-daemon-CO08YlfQ.js → tldr-daemon-McqCk2X7.js} +2 -2
- package/server/{tmux-B8zsqD_6.js → tmux-CYucGrTl.js} +2 -2
- package/server/{tmux-DWEc4Ld9.js → tmux-wnT_hg-s.js} +2 -2
- package/server/{token-Bez-qCB2.js → token-BdfZLRg1.js} +1 -1
- package/server/{tracker-config-CJzPhSHv.js → tracker-config-tfAOWgng.js} +2 -2
- package/server/{tracker-utils-DJAOAuMN.js → tracker-utils-Dbg_pVZg.js} +2 -2
- package/server/{traefik-connect-D3H5I6b9.js → traefik-connect-DoQvQ6oJ.js} +1 -1
- package/server/{tunnel-BSdKnW0U.js → tunnel-B1MNIgkL.js} +1 -1
- package/server/{tunnel-Cr3ctqxp.js → tunnel-skW68j9B.js} +3 -3
- package/server/{types-fzBp9cYi.js → types-PW4zkxCM.js} +1 -1
- package/server/{uat-failure-feedback-IZQ-J8jt.js → uat-failure-feedback-ly8ZwtfC.js} +5 -5
- package/server/{uat-promote-verification-DXApKcc2.js → uat-promote-verification-BBaMwfdc.js} +5 -5
- package/server/{uat-train-IIZlz7r3.js → uat-train-BBEiYSep.js} +0 -0
- package/server/{uat-train-CycEzpbE.js → uat-train-D7Ran2FB.js} +1 -1
- package/server/{validate-Ur4xH5bN.js → validate-BYcBcBwg.js} +3 -3
- package/server/{validation-Dr6V4PXx.js → validation-BfG2jW5C.js} +4 -4
- package/server/{validation-CHovCoTT.js → validation-nSrYiYvA.js} +1 -1
- package/server/{verification-artifact-D3viYe_t.js → verification-artifact-Cmhgq4b_.js} +1 -1
- package/server/{verification-artifact-k5Ftpg0c.js → verification-artifact-DglwaHke.js} +1 -1
- package/server/{verification-runner-Dl13mmsI.js → verification-runner-BEq5ZF-h.js} +16 -16
- package/server/{verification-runner-BuqGwm2t.js → verification-runner-CFjAuv9u.js} +1 -1
- package/server/{vtt-parser-BSnAB-Og.js → vtt-parser-Va--tv27.js} +1 -1
- package/server/{work-agent-prompt-CJJ4tXci.js → work-agent-prompt-BnhKNAg7.js} +1 -1
- package/server/{work-agent-prompt-CioeOuM4.js → work-agent-prompt-CaD2ue8m.js} +10 -10
- package/server/{work-agent-start-B65Gqn9N.js → work-agent-start-0nJ-6UeA.js} +2 -2
- package/server/{work-agent-start-Ct1HVh6z.js → work-agent-start-D8NEN5KD.js} +1 -1
- package/server/workflows-BtHRlFIm.js +2 -0
- package/server/{workflows-AgFul1xc.js → workflows-C7mxM1qc.js} +28 -28
- package/server/{workspace-Cy4sDd3q.js → workspace-BAhMgMaO.js} +3 -3
- package/server/{workspace-Cu3XlMXt.js → workspace-Dbqv9ehn.js} +1 -1
- package/server/{workspace-anchor-drift-CMaqvizr.js → workspace-anchor-drift-B_3kyyxJ.js} +4 -4
- package/server/{workspace-anchor-drift-BI0Hz6zI.js → workspace-anchor-drift-Bpa3xoni.js} +1 -1
- package/server/{workspace-config-DRYDO7Zr.js → workspace-config-D-bNq2CF.js} +1 -1
- package/server/{workspace-manager-jfkKAEuO.js → workspace-manager-BrbX90Rm.js} +1 -1
- package/server/{workspace-manager-CgovxDrO.js → workspace-manager-CM8RCrSc.js} +16 -16
- package/server/{workspace-metadata-BDqXzGGK.js → workspace-metadata-BEOwJSdK.js} +1 -1
- package/server/{workspace-metadata-BNzODIv6.js → workspace-metadata-Cu6yfxBS.js} +2 -2
- package/server/{workspaces-BJdPqx_J.js → workspaces-C7LAuZfe.js} +123 -696
- package/sync-sources/rules/agent-message-delivery.md +21 -14
- package/sync-sources/rules/pan-handoff-focus-limit.md +3 -1
- package/sync-sources/skills/pan-gauntlet-loop/SKILL.md +94 -46
- package/sync-sources/skills/pan-handoff/SKILL.md +13 -2
- package/server/archive-planning-BW4MKNI7.js +0 -2
- package/server/build-info-Bj2vQEMh.js +0 -2
- package/server/cli-BRuzUT_I.js +0 -2
- package/server/dead-end-trip-6V_CwveT.js +0 -2
- package/server/deploy-queue-CjLErpgw.js +0 -2
- package/server/dist-fCA6y2bH.js +0 -3
- package/server/forge-bvak6vXJ.js +0 -2
- package/server/hume-TYTb6fDU.js +0 -3
- package/server/inspect-agent-JFEaYTRa.js +0 -2
- package/server/merge-ops-DabXHp2i.js +0 -2
- package/server/merge-rebase-CXq0qsgR.js +0 -2
- package/server/public/assets/index-2wV4ipy_.css +0 -1
- package/server/public/assets/mermaid-GHXKKRXX-Bjto8iJh.js +0 -1
- package/server/pull-requests-jVGcVq5G.js +0 -2
- package/server/rally-CxhVgIQ6.js +0 -3
- package/server/settings-DhtPDmmI.js +0 -2
- package/server/specs-IYsFlM-L.js +0 -3
- package/server/supervisor-v0cYN2Vp.js +0 -2
- package/server/workflows-CfHm8lVd.js +0 -2
- package/sync-sources/skills/pan-gauntlet-loop/references/lessons.md +0 -60
package/server/server.js
CHANGED
|
@@ -1,121 +1,124 @@
|
|
|
1
1
|
import { a as __toCommonJS, i as __require, n as __esmMin, o as __toESM, r as __exportAll, t as __commonJSMin } from "./rolldown-runtime-DNCzzKnI.js";
|
|
2
|
-
import { $n as updateProjectsConfigText, $
|
|
3
|
-
import { i as shouldRefuseHostDashboardPort, n as isNonPrimaryCheckoutRoot, r as readHostDashboardApiPort, t as getDashboardIdentity } from "./identity-
|
|
4
|
-
import { $ as
|
|
5
|
-
import { h as loadConfigSync$1, p as init_config, s as getDashboardApiUrlSync } from "./config-
|
|
6
|
-
import { c as emitDashboardLifecycleSync, l as init_activity_logger, o as emitActivityEntrySync, s as emitActivityTtsSync, t as appendDomainEventAsync } from "./activity-logger-
|
|
7
|
-
import { A as init_paths$1, O as OVERDECK_MIGRATION_PATH, f as init_infra, i as DbLive, k as getOverdeckDatabasePath, u as TmuxLive } from "./infra-
|
|
2
|
+
import { $n as updateProjectsConfigText, $t as findProjectByPathSync, A as validateTieredExecutionConfig, Ai as encodeClaudeProjectDir, An as resolveProjectKeyForCwdAsync, Ar as MODEL_DEPRECATIONS, Bi as isDeploymentGenerationRoot, Cn as registerProjectSync, Cr as DEFAULT_ROLES, Ct as flushAllPendingAutoCommits, D as resolveTieredExecutionBlock, Dn as resolveProjectFromIssue, E as init_tier_table, Ei as SYNC_SOURCES, En as resolveInfraRepo, Fi as getDocsTelemetryPath, Fr as modelSupportsImagesSync, Hi as packageRoot, Hn as validateVersionSyncConfig, Ht as init_state_read_home, In as setProjectMergeTrain, Ir as resolveModelIdSync, Jr as ROLE_EFFORTS, Jt as PROJECTS_CONFIG_FILE, Kn as extractPrefixSync, Kr as COMPLIANCE_MODES, Kt as init_project_key, Li as getLegacyHome, Mi as getDocsBudgetStatePath, Mr as getModelEffortLevelsSync, Ni as getDocsDisableStatePath, Nr as hasModelCapabilitySync, O as resolveTieredExecutionEnabled, Oi as activeDeploymentRepoRoot, On as resolveProjectFromIssueSync, Or as resolveModel, Pi as getDocsIndexPath, Pn as setProjectAutoMergeDefault, Pr as init_model_capabilities, Qn as init_projects_config_write, Qr as FsError, Ri as getOverdeckHome, Rn as setProjectSwarmPolicy, Sr as init_registry, T as TieredExecutionConfigError, Tr as computeModelOrigin, Tt as init_auto_commit, Un as init_projects_cache_events, Ut as resolveStateReadHomeAsync, Vi as isDevMode, Wi as sessionFilePath, Wn as subscribeProjectsConfigInvalidation, Wt as resolveStateReadHomeSync, Y as init_record, Yn as parseIssueIdSync, Yt as ProjectRenameError, Zt as extractTeamPrefix, _ as mergeConfigs, _n as listProjectsAsync, ai as ProcessSpawnError, b as mergeTtsDaemonConfigs, bn as loadProjectsConfigSync, br as init_openai_compatible_proxy, c as init_load, d as isTldrEnabledSync, ei as GitHubApiError, er as require_dist$1, f as loadConfigNoMigration, fn as init_projects, fr as getProviderForModelSync, g as jsYaml, gn as listProjects, h as init_js_yaml, hi as CLAUDE_DIR, hn as invalidateProjectsConfigCache, i as getConversationsConfig, jn as resolveProjectPath, kr as MODEL_CAPABILITIES, li as init_errors, lr as getBuiltInDefaultHarness, m as updateConversationsConfig, n as clearConfigCache, o as getGlobalConfigPath, on as getProjectSync, p as loadConfigSync, pr as init_providers, q as getIssueWorkspacePath, qn as init_issue_id, qr as PARENT_MODEL_REF, qt as projectKey, r as getConversationSearchConfigSync, rn as getIssuePrefix, rr as init_harness_policy, s as getOpenInEditorCommand, si as TrackerError, sr as UnknownModelError, t as init_config_yaml, tn as findProjectByTeamSync, tr as canUseHarnessSync, tt as readIssueRecordSync, ur as getKimiAnthropicBaseUrl, v as getDefaultDocsConfig, vi as LOGS_DIR, vn as listProjectsSync, wn as renameProject, wr as DEFAULT_WORKHORSES, wt as flushAutoCommits, x as DEFAULT_CONFIG$1, xr as defaultBackgroundAiFeatures, y as getDefaultTtsDaemonConfig, yi as OVERDECK_HOME, yr as getDashScopeUpstreamBaseUrl, zi as init_paths } from "./config-yaml-D60AnTIu.js";
|
|
3
|
+
import { i as shouldRefuseHostDashboardPort, n as isNonPrimaryCheckoutRoot, r as readHostDashboardApiPort, t as getDashboardIdentity } from "./identity-C3s8lyp0.js";
|
|
4
|
+
import { $ as resolvePolicy, A as handleConversationSwitchModel, B as waitForTmuxSession$1, C as conversationSessionAliveFromState, Ct as getDefaultCwd, D as handleConversationRestartAll, E as handleConversationDelete, F as spawnConversationSession, G as extractConversationAttachmentPaths, H as cleanupOrphanedConversationAttachments, I as startConversationModelBackfill, J as isManagedConversationAttachmentPath, K as getConversationAttachmentsRoot, L as stopConversationRuntime, M as resolveAllowedHarness, N as resolveRegisteredProject, O as handleConversationResume, P as shouldReportUnresolvedLiveSession, Q as handleComposerCommandMessage, R as tmuxSessionExists, S as conversationNeedsRunningRepair, St as httpHandler, T as handleConversationCreate, Tt as jsonStringResponse, U as cleanupUnreferencedConversationAttachments, V as cleanupConversationAttachments, W as ensureConversationAttachmentDir, X as runInBatches, Y as removeConversationAttachment, Z as composerCommandResultHttpStatus, _ as handleConversationThinkingLevel, _t as waitForSessionRespawn, a as agentsRouteLayer, at as isInternalAgentRequest, b as resolveConversationDeliveryMethod, bt as validateOrigin$1, c as codexConversationPendingInput, ct as panCliInvocation, d as handleConversationCodexApproval, dt as dashboardSessionCookieHeader, et as ComposerCommandParseError, f as handleConversationCompact, ft as hasDashboardInternalToken, g as handleConversationPlanAction, gt as isRespawnPending, h as handleConversationPiAskAnswer, ht as rejectUnsafeDashboardMutationRequest, it as invalidateAgentsCache, j as isInsideGitWorkTree, k as handleConversationStop, l as deliverConversationViaControlChannel, m as handleConversationDeliveryMethod, mt as rejectUnauthorizedDashboardSessionMintRequest, nt as composerCommandConfirmationFromBody, o as saveAgentStateAndEmitEvent, ot as resolveRequestedStartedBy, p as handleConversationControlAck, pt as rejectUnauthorizedDashboardRequest, q as hasConversationAttachment, rt as evaluateSpawnGuardrails, s as saveAgentStateAndEmitEventProgram, t as specialistsRouteLayer, tt as ComposerCommandConfirmationError, u as handleConversationAbort, ut as dashboardCsrfToken, v as isPiControlChannelHarness, vt as getHeaderFromMap, w as handleConversationClearForkState, wt as jsonResponse, x as validateConversationControlAckOrigin, xt as validateOriginHeaders, y as pickDeliverAs, yt as isTrustedOriginForHost, z as waitForPiTuiReady } from "./specialists-DhS79T9v.js";
|
|
5
|
+
import { h as loadConfigSync$1, p as init_config, s as getDashboardApiUrlSync } from "./config-NxI9Yl2f.js";
|
|
6
|
+
import { c as emitDashboardLifecycleSync, l as init_activity_logger, o as emitActivityEntrySync, s as emitActivityTtsSync, t as appendDomainEventAsync } from "./activity-logger-SlTXYCVf.js";
|
|
7
|
+
import { A as init_paths$1, O as OVERDECK_MIGRATION_PATH, f as init_infra, i as DbLive, k as getOverdeckDatabasePath, u as TmuxLive } from "./infra-CJRi_5Wu.js";
|
|
8
8
|
import { n as openDatabase, t as init_driver } from "./driver-BtcFz-qu.js";
|
|
9
|
-
import { a as updateIssueRecord, i as init_record_update, r as clearRecordPipelineClosedOutSync } from "./record-update-
|
|
10
|
-
import { B as sendKeys, C as init_tmux, E as killSession, L as resizeWindow, S as getWindowDimensions, T as isPaneDead, U as sessionExists, V as sendKeysAsync, X as deliveryVerifyLine, Y as activeComposerRegion, Z as init_pane_composer, a as capturePaneText, dt as init_child_env, j as listSessionNames, lt as buildChildEnvSync, o as capturePaneViewport, ot as init_ui_theme, r as capturePane, s as createSession, st as setUiTheme, t as buildTmuxArgs, u as ensureManagedTmuxContextOnce, ut as buildChildEnvWithoutTmuxSync, w as isHarnessProcessAlive } from "./tmux-
|
|
11
|
-
import { a as getWorkspaceForIssue, c as listProjectTargets, f as resolveWorkspaceForCwd, i as getWorkspaceById, l as listProjects$1, o as init_resolver, s as listPinnedDocs, u as listWorkspaces } from "./resolver-
|
|
12
|
-
import { a as init_event_store, i as initEventStore, n as getEventStore } from "./event-store-
|
|
13
|
-
import { A as AgentRuntimeSnapshot, C as FlywheelStatus, E as SystemHealthSnapshot, M as ReviewStatusSnapshot, O as MemoryObservation, S as FlywheelRunId, T as DomainEvent, b as PanRpcGroup, j as AgentSnapshot, l as ContextLayerSaveRequest, n as COMPOSER_COMMAND_MANIFEST, p as FlywheelStats, r as compareIssueIds, s as getHarnessBehavior, t as init_src, u as ContextPreviewRequest, w as EDITORS, x as WS_METHODS, y as PanRpcError } from "./src-
|
|
14
|
-
import { a as EventStoreServiceLive, c as ReadModelService, f as toAgentResolution, i as EventStoreService, l as ReadModelServiceLive, m as toRole, n as IssueLifecycleLive, o as startProjectCiRefillAfterProjectionReady, p as toAgentStatus, s as resolveDefaultBranchHead, t as IssueLifecycle, u as activityEntriesFromStoredEvents } from "./issue-lifecycle-
|
|
15
|
-
import { c as init_agents, g as logAgentLifecycleSync, h as init_persistent_logger, n as AgentsResolverLive, u as listAllAgentsSync } from "./agents-
|
|
16
|
-
import { c as resolveMemoryRoot, d as resolveRagRunsFile, i as init_paths$2, l as resolveObservationsFile, m as resolveWorkspaceMemoryRoot, r as ensureParentDir, s as resolveMemoryBase, t as assertMemorySafeSegment } from "./paths-
|
|
17
|
-
import { i as recordBriefingSessionStart, n as ensureSessionContextBriefingFile, r as init_briefing_freshness, t as appendFreshBriefingUpdate } from "./briefing-freshness-
|
|
18
|
-
import { n as listFeatureRegistryEntries, t as init_feature_registry_storage } from "./feature-registry-storage-
|
|
19
|
-
import { a as diffAgainstMain, c as diffCheckpoints, d as diffPatchSinceCommit, f as findCommitAtTime, h as listCheckpoints, l as diffFilesAgainstHead, o as diffAgainstMainFiles, s as diffCheckpointFiles, t as captureCheckpoint, u as diffPatchFilesAgainstHead } from "./checkpoint-manager-
|
|
20
|
-
import {
|
|
21
|
-
import {
|
|
22
|
-
import { a as
|
|
23
|
-
import {
|
|
24
|
-
import {
|
|
25
|
-
import {
|
|
26
|
-
import { i as
|
|
27
|
-
import {
|
|
28
|
-
import {
|
|
29
|
-
import {
|
|
30
|
-
import {
|
|
31
|
-
import {
|
|
32
|
-
import {
|
|
33
|
-
import { l as
|
|
34
|
-
import {
|
|
35
|
-
import {
|
|
9
|
+
import { a as updateIssueRecord, i as init_record_update, r as clearRecordPipelineClosedOutSync } from "./record-update-BPqpBu3O.js";
|
|
10
|
+
import { B as sendKeys, C as init_tmux, E as killSession, L as resizeWindow, S as getWindowDimensions, T as isPaneDead, U as sessionExists, V as sendKeysAsync, X as deliveryVerifyLine, Y as activeComposerRegion, Z as init_pane_composer, a as capturePaneText, dt as init_child_env, j as listSessionNames, lt as buildChildEnvSync, o as capturePaneViewport, ot as init_ui_theme, r as capturePane, s as createSession, st as setUiTheme, t as buildTmuxArgs, u as ensureManagedTmuxContextOnce, ut as buildChildEnvWithoutTmuxSync, w as isHarnessProcessAlive } from "./tmux-wnT_hg-s.js";
|
|
11
|
+
import { a as getWorkspaceForIssue, c as listProjectTargets, f as resolveWorkspaceForCwd, i as getWorkspaceById, l as listProjects$1, o as init_resolver, s as listPinnedDocs, u as listWorkspaces } from "./resolver-C2QKOf09.js";
|
|
12
|
+
import { a as init_event_store, i as initEventStore, n as getEventStore } from "./event-store-DTns2XZP.js";
|
|
13
|
+
import { A as AgentRuntimeSnapshot, C as FlywheelStatus, E as SystemHealthSnapshot, M as ReviewStatusSnapshot, O as MemoryObservation, S as FlywheelRunId, T as DomainEvent, b as PanRpcGroup, j as AgentSnapshot, l as ContextLayerSaveRequest, n as COMPOSER_COMMAND_MANIFEST, p as FlywheelStats, r as compareIssueIds, s as getHarnessBehavior, t as init_src, u as ContextPreviewRequest, w as EDITORS, x as WS_METHODS, y as PanRpcError } from "./src-CdwN6WY6.js";
|
|
14
|
+
import { a as EventStoreServiceLive, c as ReadModelService, f as toAgentResolution, i as EventStoreService, l as ReadModelServiceLive, m as toRole, n as IssueLifecycleLive, o as startProjectCiRefillAfterProjectionReady, p as toAgentStatus, s as resolveDefaultBranchHead, t as IssueLifecycle, u as activityEntriesFromStoredEvents } from "./issue-lifecycle-BETNVVLq.js";
|
|
15
|
+
import { c as init_agents, g as logAgentLifecycleSync, h as init_persistent_logger, n as AgentsResolverLive, u as listAllAgentsSync } from "./agents-DzpQidT8.js";
|
|
16
|
+
import { c as resolveMemoryRoot, d as resolveRagRunsFile, i as init_paths$2, l as resolveObservationsFile, m as resolveWorkspaceMemoryRoot, r as ensureParentDir, s as resolveMemoryBase, t as assertMemorySafeSegment } from "./paths-rETQhTF2.js";
|
|
17
|
+
import { i as recordBriefingSessionStart, n as ensureSessionContextBriefingFile, r as init_briefing_freshness, t as appendFreshBriefingUpdate } from "./briefing-freshness-ENa_hW_V.js";
|
|
18
|
+
import { n as listFeatureRegistryEntries, t as init_feature_registry_storage } from "./feature-registry-storage-vaxRN3WO.js";
|
|
19
|
+
import { a as diffAgainstMain, c as diffCheckpoints, d as diffPatchSinceCommit, f as findCommitAtTime, h as listCheckpoints, l as diffFilesAgainstHead, o as diffAgainstMainFiles, s as diffCheckpointFiles, t as captureCheckpoint, u as diffPatchFilesAgainstHead } from "./checkpoint-manager-CSZ7aVQF.js";
|
|
20
|
+
import { D as setSetting, E as setMergeTrainEnabled, S as setFlywheelAutoPickupBacklog, T as setLastCleanShutdownAt, b as setDeaconGloballyPausedSync, c as init_control_settings, d as isDeaconGloballyPausedSync, f as isFlywheelAutoPickupBacklog, g as setBootReconciliationDecision, h as isMergeTrainEnabled, l as isCloisterSpawnsPausedSync, m as isFlywheelRequireUatBeforeMerge, n as FLYWHEEL_GLOBAL_PAUSE_KEY, p as isFlywheelGloballyPaused, r as getBootReconciliationState, s as getSetting, t as FLYWHEEL_ACTIVE_RUN_ID_KEY, v as setCloisterSpawnsPausedSync, w as setFlywheelRequireUatBeforeMerge } from "./control-settings-Db0uXgVM.js";
|
|
21
|
+
import { a as getCostForIssueAggregateSync, c as getDailyTrendsSync, d as init_cost_sync, l as getModelRollupSync, n as getBackgroundCostBySourceSync, p as queryCostEventsSync, r as getCavemanExperimentDataSync, s as getCostsByIssueSync, u as getTodayCostSync } from "./cost-sync-DfmvLT9L.js";
|
|
22
|
+
import { a as collectCodexCostEvents, i as CostWriter, n as CostResolver, r as CostResolverLive, s as recordSkipVerdict, t as CostDoorLive } from "./cost-3FyqKK56.js";
|
|
23
|
+
import { t as init_behavior } from "./behavior-DCg8CIWC.js";
|
|
24
|
+
import { $ as deliverCommitForReview, A as saveAgentStateSync, An as init_runtime_census, At as init_agent_input_detection, Dt as scanPendingInputsPromise, Et as isInteractiveRoleAgent, Gn as init_concurrency, H as waitForReadySignal, Ht as init_messaging, Ii as init_agent_record_sync, It as answerSessionPaneChoice, Jr as injectPiConversationMemory, Kt as init_operator_interventions, Li as readAgentHarnessModelRecordSync, Lt as captureSessionPaneChoice, Mn as refreshRuntimeCensus, Mr as resolveImplicitStaffing, Nn as runtimeCensusHasHarnessProcess, On as getRuntimeCensus, Ot as detectAwaitingInputForAgent, Rt as init_session_pane_choice, U as getAgentRuntimeState, Un as emergencyBrake, Ut as messageAgent, W as getAgentRuntimeStateSync, Wr as getProviderAuthMode, _n as listAgentStates, ai as init_claude_auth, ar as deliverAgentMessage, br as checkCodexAuthStatus, bt as getAgentJsonlMtime, et as init_tier_supervisor, f as getAgentDir, g as getAgentStateSync, gn as init_queries, hi as init_openai_auth, hr as probeTranscriptSince, ii as getClaudeAuthStatus, it as supervisorAgentId, jn as panePidsForSession, jr as init_staffing, kn as getRuntimeCensusSnapshot, kt as detectAwaitingInputFromPaneSync, li as getProviderEnvForModel, m as getAgentState, mi as getOpenAIAuthStatus, mr as init_transcript_landing, pr as captureTranscriptUserRecordSnapshot, q as init_agents$1, qt as operatorInterventionEvent, vn as listRunningAgents, vt as computeAgentEnrichment, wt as init_agent_enrichment, xr as init_codex_auth, yn as listRunningAgentsSync, yt as countPendingAskUserQuestionsForAgent, z as normalizeAgentId, zi as init_agent_runtime_mirror } from "./agent-state-FABw8neJ.js";
|
|
25
|
+
import { n as isBackgroundFeatureEnabled, t as init_features } from "./features-DXWwktJB.js";
|
|
26
|
+
import { i as init_settings, r as getMemoryWorkerConcurrency, t as areMemoryObservationsEnabled } from "./settings-nAT-eK56.js";
|
|
27
|
+
import { i as updateMemoryHealth, n as extractWithProviderPolicy, r as init_health, t as init_providers$1 } from "./providers-CxPKmyif.js";
|
|
28
|
+
import { C as isCliproxyRunning, D as restartCliproxy, E as readPidFile, O as startCliproxy, S as isCliproxyInstalled, b as init_cliproxy, k as stopCliproxy, o as bridgeCodexAuthToCliproxy, p as getCliproxyAuthDir, x as installCliproxy } from "./cliproxy-DXDQcR3I.js";
|
|
29
|
+
import { i as ensureInternalTokenSync, o as getInternalTokenSync, s as init_internal_token, t as INTERNAL_TOKEN_HEADER } from "./internal-token-BeIWG_kT.js";
|
|
30
|
+
import { $ as unarchiveConversation, A as init_conversations, C as getConversationByName, E as getStuckForks, F as listFavoritedIds, G as setConversationClaudeSessionId, H as removeFavorite, I as markConversationActive, L as markConversationEnded, N as listArchivedConversationsWithEnrichment, O as importLegacyConversation, P as listConversations, Q as setImportedConversationLinks, R as markConversationRunning, S as getConversationById, St as init_discovered_sessions, T as getConversationLedgerCosts, V as recordConversationHandoff, W as setClearedToConvId, X as setFavorite, Y as setConversationProjectKey, Z as setForkRequest, _ as canRefineTitle, _t as getDiscoveredSessionById, b as createConversation, bt as getDiscoveredStats, ct as aggregateDiscoveredSessionCost, dt as countDiscoveredSessions, et as updateConversationCost, h as archiveConversation, ht as findDiscoveredSessions, it as updateForkStatus, j as isAgentConversationName, k as incrementForkRetryCount, lt as aggregateDiscoveredSessionCostBy, nt as updateConversationForkFallbackReason, rt as updateConversationTitle, v as canReplaceTitle, w as getConversationByTmuxSession, x as getConversationByClaudeSessionId, y as clearConversationFailureState, yt as getDiscoveredSessionBySessionId } from "./conversations-nS6QgYpD.js";
|
|
31
|
+
import { C as generateLauncherScriptSync, D as normalizeModelOverrideSync, E as init_model_validation, O as requireModelOverrideSync, T as MODEL_ID_PATTERN, w as init_launcher_generator } from "./auto-spawn-consent-BesWchEi.js";
|
|
32
|
+
import { a as init_claude_permissions, r as getClaudePermissionFlagsStringSync } from "./claude-permissions-DLrb9ovz.js";
|
|
33
|
+
import { C as codexGlobalContextFile, D as init_layers, E as globalContextFile$1, F as resolveWorkspaceContextFile, L as workspaceContextFile, P as resolveProjectContextFile, b as renderForHarness, c as hasManagedRegion, f as userContentOutsideRegion, i as workspaceContextWithoutProjectLayer, l as init_render, r as init_assemble, s as configDisabledRuleNames, w as ensureProjectLayer, x as validateTemplate, y as init_harness } from "./assemble-B_JgnCbG.js";
|
|
34
|
+
import { l as init_codex, s as findRolloutPath } from "./codex-DYyZL8JD.js";
|
|
35
|
+
import { i as prepareHarnessLaunch, r as init_harness_binary } from "./harness-binary-DChiynaB.js";
|
|
36
36
|
import { n as init_review_status_source, t as classifyAdvancingSessionLifecycle } from "./review-status-source-Jq0BXmn3.js";
|
|
37
37
|
import { a as PAN_DIRNAME, d as PENDING_PROMOTION_FILENAME, f as WORKSPACE_RUNTIME_DIRNAME, i as PAN_CONTINUE_FILENAME, m as init_types, p as asPanSpecDocument } from "./types-pLpbsNto.js";
|
|
38
|
-
import { C as init_specs, D as writeSpecDocument, N as getProjectPanPaths, O as writeSpecForIssue, P as init_paths$3, S as findSpecByIssue, a as findWorkspaceDraftPlan, b as subItemsOf, c as isPlanningComplete, d as readPlan, h as readWorkspacePlanSync, m as readWorkspacePlan, r as findPlan, s as init_io, y as init_types$1 } from "./io-
|
|
39
|
-
import { n as resolveHarness, t as init_harness_resolve } from "./harness-resolve-
|
|
40
|
-
import { a as loadCloisterConfigSync, o as saveCloisterConfigSync, r as init_config$1, s as shouldAutoStart } from "./config-
|
|
41
|
-
import { a as init_state_home, c as isStateMigrated, i as ensureStateWorktree, r as clearStateMigrationCache, s as inspectStateMigration } from "./state-home-
|
|
42
|
-
import { i as checkPrdGateSync, s as promoteWorkspacePrdDraft, t as init_pan_dir } from "./pan-dir-
|
|
43
|
-
import { a as init_lifecycle_io, t as appendContinueSessionEntryForIssue } from "./lifecycle-io-
|
|
44
|
-
import { a as init_tracker_config, i as initTrackerConfigCache, n as getLinearApiKey, r as getRallyConfig, t as getGitHubConfig } from "./tracker-config-
|
|
45
|
-
import { r as init_swarm_readiness, t as analyzeSwarmReadiness } from "./swarm-readiness-
|
|
46
|
-
import { n as AgentStateServiceLive } from "./agent-state-service-
|
|
38
|
+
import { C as init_specs, D as writeSpecDocument, N as getProjectPanPaths, O as writeSpecForIssue, P as init_paths$3, S as findSpecByIssue, a as findWorkspaceDraftPlan, b as subItemsOf, c as isPlanningComplete, d as readPlan, h as readWorkspacePlanSync, m as readWorkspacePlan, r as findPlan, s as init_io, y as init_types$1 } from "./io-BCtZoXHo.js";
|
|
39
|
+
import { n as resolveHarness, t as init_harness_resolve } from "./harness-resolve-BplBEbwn.js";
|
|
40
|
+
import { a as loadCloisterConfigSync, o as saveCloisterConfigSync, r as init_config$1, s as shouldAutoStart } from "./config-_qaa1UXH.js";
|
|
41
|
+
import { a as init_state_home, c as isStateMigrated, i as ensureStateWorktree, r as clearStateMigrationCache, s as inspectStateMigration } from "./state-home-DhsMqg8W.js";
|
|
42
|
+
import { i as checkPrdGateSync, s as promoteWorkspacePrdDraft, t as init_pan_dir } from "./pan-dir-B4NfzOf3.js";
|
|
43
|
+
import { a as init_lifecycle_io, t as appendContinueSessionEntryForIssue } from "./lifecycle-io-D7N0vQNj.js";
|
|
44
|
+
import { a as init_tracker_config, i as initTrackerConfigCache, n as getLinearApiKey, r as getRallyConfig, t as getGitHubConfig } from "./tracker-config-tfAOWgng.js";
|
|
45
|
+
import { r as init_swarm_readiness, t as analyzeSwarmReadiness } from "./swarm-readiness-LF8ZF_hc.js";
|
|
46
|
+
import { n as AgentStateServiceLive } from "./agent-state-service-rDenYSlD.js";
|
|
47
47
|
import { i as PlanEmpty, l as WorkspaceCreateError, n as AgentStartError, s as TrackerApiError, t as AgentAlreadyRunning, u as WorkspaceNotFound } from "./typed-errors-DXqf3RnP.js";
|
|
48
|
-
import { r as LinearClientOptionalLive, t as LinearClient } from "./linear-client-
|
|
49
|
-
import { r as GitHubClientOptionalLive, t as GitHubClient } from "./github-client-
|
|
50
|
-
import { r as RallyClientOptionalLive, t as RallyClient } from "./rally-client-
|
|
51
|
-
import { n as resolveGitHubIssueSync, r as resolveTrackerTypeSync, t as init_tracker_utils } from "./tracker-utils-
|
|
52
|
-
import { a as startSharedIssueService, c as parseIntegerHeader, i as issue_service_singleton_exports, n as init_issue_service_singleton, o as CacheService, s as init_cache_service, t as getSharedIssueService } from "./issue-service-singleton-
|
|
53
|
-
import { a as setPipelineHandlerSync, t as init_pipeline_notifier } from "./pipeline-notifier-
|
|
54
|
-
import { a as getMergeBlockerReconcileCandidates, l as init_review_status_sync } from "./review-status-sync-
|
|
55
|
-
import { S as requeueToPending, T as transitionToMerging, _ as markMerged, c as init_merge_sync, f as listActiveAutoMerges, g as markFailed, h as markBlocked, i as getActionableAutoMerge, j as listUatGenerationsSync, l as isFlywheelGloballyPaused$1, m as listProblemAutoMerges, n as countActionableAutoMerges, p as listDuePendingAutoMerges, t as cancelPending, v as markMergingBlocked, w as scheduleAutoMergeWithResult } from "./merge-sync-
|
|
56
|
-
import { C as setReviewStatus, F as init_install_id, I as init_config$2, L as resolveTelemetryEnabled, M as init_service, N as synchronizeAnalyticsServices, P as getOrCreateInstallId, R as telemetryEnvironmentForcesOff, _ as markWorkspaceStuck, a as clearStuckMergeStatuses, c as fixStuckCommentedReviews, d as getReviewStatusSync, h as loadReviewStatuses, i as clearReviewStatus, j as getAnalyticsService, l as fixStuckReadyForMerge, p as init_review_status, u as getReviewStatus, w as setReviewStatusSync } from "./review-status-
|
|
57
|
-
import { a as clearQueryExpansionCache, i as resolveKnowledgeBundleRoot, n as init_injection, o as init_query_expansion, r as injectPromptTimeMemory } from "./injection-
|
|
58
|
-
import { a as init_fts_db, i as closeMemoryFtsDatabases, n as init_search, o as runMemoryFtsStatement, s as runMemoryFtsTransaction, t as buildMatchQuery } from "./search-
|
|
48
|
+
import { r as LinearClientOptionalLive, t as LinearClient } from "./linear-client-DUN7zCeb.js";
|
|
49
|
+
import { r as GitHubClientOptionalLive, t as GitHubClient } from "./github-client-w6j5nVlz.js";
|
|
50
|
+
import { r as RallyClientOptionalLive, t as RallyClient } from "./rally-client-16iObny7.js";
|
|
51
|
+
import { n as resolveGitHubIssueSync, r as resolveTrackerTypeSync, t as init_tracker_utils } from "./tracker-utils-Dbg_pVZg.js";
|
|
52
|
+
import { a as startSharedIssueService, c as parseIntegerHeader, i as issue_service_singleton_exports, n as init_issue_service_singleton, o as CacheService, s as init_cache_service, t as getSharedIssueService } from "./issue-service-singleton-C_sZ0HjP.js";
|
|
53
|
+
import { a as setPipelineHandlerSync, t as init_pipeline_notifier } from "./pipeline-notifier-p190L97e.js";
|
|
54
|
+
import { a as getMergeBlockerReconcileCandidates, l as init_review_status_sync } from "./review-status-sync-C6ZKTI8f.js";
|
|
55
|
+
import { S as requeueToPending, T as transitionToMerging, _ as markMerged, c as init_merge_sync, f as listActiveAutoMerges, g as markFailed, h as markBlocked, i as getActionableAutoMerge, j as listUatGenerationsSync, l as isFlywheelGloballyPaused$1, m as listProblemAutoMerges, n as countActionableAutoMerges, p as listDuePendingAutoMerges, t as cancelPending, v as markMergingBlocked, w as scheduleAutoMergeWithResult } from "./merge-sync-YLvOPAry.js";
|
|
56
|
+
import { C as setReviewStatus, F as init_install_id, I as init_config$2, L as resolveTelemetryEnabled, M as init_service, N as synchronizeAnalyticsServices, P as getOrCreateInstallId, R as telemetryEnvironmentForcesOff, _ as markWorkspaceStuck, a as clearStuckMergeStatuses, c as fixStuckCommentedReviews, d as getReviewStatusSync, h as loadReviewStatuses, i as clearReviewStatus, j as getAnalyticsService, l as fixStuckReadyForMerge, p as init_review_status, u as getReviewStatus, w as setReviewStatusSync } from "./review-status-DpniqzPT.js";
|
|
57
|
+
import { a as clearQueryExpansionCache, i as resolveKnowledgeBundleRoot, n as init_injection, o as init_query_expansion, r as injectPromptTimeMemory } from "./injection-ADWQ3D0s.js";
|
|
58
|
+
import { a as init_fts_db, i as closeMemoryFtsDatabases, n as init_search, o as runMemoryFtsStatement, s as runMemoryFtsTransaction, t as buildMatchQuery } from "./search-DhtKwbBC.js";
|
|
59
59
|
import { n as require_auth_errors, r as require_token_error, t as require_token_util } from "./token-util-Crcay9j_.js";
|
|
60
|
-
import { D as init_advisory_checks, E as verifyAppCanMerge, M as withConcurrencyLimit, O as isAdvisoryCheckName, d as getPullRequestState, f as init_github_app, j as init_concurrency$1, l as getMergeBackendStatus, p as isGitHubAppConfigured } from "./github-app-
|
|
61
|
-
import { C as
|
|
62
|
-
import { S as parseAcpConversationMessages, _ as isOhmypiSessionFile, a as contextUsageFromParseResult, b as parseCodexConversationMessages, c as parseEntireConversation, d as init_kimi_conversation_parser, f as parseKimiConversationMessages, g as init_ohmypi_conversation_parser, h as parsePiConversationMessages, i as computeContextUsage, l as parseFromLastCompactBoundary, m as isPiSessionFile, n as gateSnapshotEmission, o as summarizeConversationActivity, p as init_pi_conversation_parser, r as watchConversation, s as parseConversationMessages, t as init_conversation_service, v as parseOhmypiConversationMessages, x as init_acp_conversation_parser, y as init_codex_conversation_parser } from "./conversation-service-
|
|
63
|
-
import { a as resolveClaudeSessionId, c as resolveKimiWirePath, i as resolveAgentHarness, l as resolvePiSessionPath, n as readLauncherPinnedSessionId, o as resolveCodexRolloutPath, r as resolveAcpTranscriptPath, s as resolveJsonlPath, t as init_jsonl_resolver } from "./jsonl-resolver-
|
|
64
|
-
import { a as enrichSessions, c as searchSessions, i as CostThresholdError, l as embed, n as getSessionsFeedFacets, o as embedSessions, r as listSessionsFeed, s as parseRelativeTime, t as scan } from "./scanner-
|
|
65
|
-
import { c as tailEventsSync, n as deduplicateEventsSync, s as readEventsSync } from "./events-
|
|
66
|
-
import { n as recordBackgroundAiCost, t as init_cost } from "./cost-
|
|
67
|
-
import { a as getByIssueId, i as parseFlywheelStatsWindow, n as derivePipelineRunStatsInputs, o as markFixed, r as computeFlywheelStats, s as upsert, t as listSubstrateBugWeights } from "./substrate-bug-weights-service-
|
|
68
|
-
import { n as
|
|
69
|
-
import {
|
|
70
|
-
import {
|
|
71
|
-
import {
|
|
72
|
-
import {
|
|
73
|
-
import {
|
|
74
|
-
import {
|
|
75
|
-
import {
|
|
76
|
-
import {
|
|
77
|
-
import { a as
|
|
78
|
-
import {
|
|
79
|
-
import {
|
|
80
|
-
import "./
|
|
81
|
-
import {
|
|
82
|
-
import
|
|
83
|
-
import { a as
|
|
84
|
-
import {
|
|
85
|
-
import {
|
|
86
|
-
import {
|
|
87
|
-
import {
|
|
88
|
-
import {
|
|
89
|
-
import {
|
|
90
|
-
import { a as
|
|
91
|
-
import {
|
|
92
|
-
import {
|
|
93
|
-
import { r as
|
|
94
|
-
import {
|
|
95
|
-
import {
|
|
96
|
-
import {
|
|
97
|
-
import { n as
|
|
98
|
-
import {
|
|
99
|
-
import { r as
|
|
100
|
-
import {
|
|
101
|
-
import {
|
|
102
|
-
import {
|
|
103
|
-
import {
|
|
104
|
-
import {
|
|
105
|
-
import {
|
|
106
|
-
import {
|
|
107
|
-
import {
|
|
108
|
-
import {
|
|
109
|
-
import {
|
|
110
|
-
import {
|
|
111
|
-
import {
|
|
112
|
-
import {
|
|
113
|
-
import {
|
|
114
|
-
import "./
|
|
115
|
-
import {
|
|
116
|
-
import { n as
|
|
117
|
-
import
|
|
118
|
-
import {
|
|
60
|
+
import { D as init_advisory_checks, E as verifyAppCanMerge, M as withConcurrencyLimit, O as isAdvisoryCheckName, d as getPullRequestState, f as init_github_app, j as init_concurrency$1, l as getMergeBackendStatus, p as isGitHubAppConfigured } from "./github-app-BlMSzSTw.js";
|
|
61
|
+
import { C as startAgentOutputService, S as retainAgentOutputInterest, _ as syncCacheSync, b as resolveIssueHeadlineCost, d as eventsRouteLayer, f as resumeQueuedMerges, g as rebuildCacheSync, h as getCostsForIssueSync, m as migrateAllSessionsSync, p as syncWalFromAllProjects, t as workspacesRouteLayer, u as internalEventsRouteLayer, v as processPendingFeedbackDeliveries, w as stopAgentOutputService, x as getWorkspacePathForIssue, y as getCachedRunningAgents } from "./workspaces-C7LAuZfe.js";
|
|
62
|
+
import { S as parseAcpConversationMessages, _ as isOhmypiSessionFile, a as contextUsageFromParseResult, b as parseCodexConversationMessages, c as parseEntireConversation, d as init_kimi_conversation_parser, f as parseKimiConversationMessages, g as init_ohmypi_conversation_parser, h as parsePiConversationMessages, i as computeContextUsage, l as parseFromLastCompactBoundary, m as isPiSessionFile, n as gateSnapshotEmission, o as summarizeConversationActivity, p as init_pi_conversation_parser, r as watchConversation, s as parseConversationMessages, t as init_conversation_service, v as parseOhmypiConversationMessages, x as init_acp_conversation_parser, y as init_codex_conversation_parser } from "./conversation-service-BxIOd5ay.js";
|
|
63
|
+
import { a as resolveClaudeSessionId, c as resolveKimiWirePath, i as resolveAgentHarness, l as resolvePiSessionPath, n as readLauncherPinnedSessionId, o as resolveCodexRolloutPath, r as resolveAcpTranscriptPath, s as resolveJsonlPath, t as init_jsonl_resolver } from "./jsonl-resolver-bFtftCDd.js";
|
|
64
|
+
import { a as enrichSessions, c as searchSessions, i as CostThresholdError, l as embed, n as getSessionsFeedFacets, o as embedSessions, r as listSessionsFeed, s as parseRelativeTime, t as scan } from "./scanner-BFKG3Gxv.js";
|
|
65
|
+
import { c as tailEventsSync, n as deduplicateEventsSync, s as readEventsSync } from "./events-B6xW8Cpm.js";
|
|
66
|
+
import { n as recordBackgroundAiCost, t as init_cost } from "./cost-Cctc-Q9M.js";
|
|
67
|
+
import { a as getByIssueId, i as parseFlywheelStatsWindow, n as derivePipelineRunStatsInputs, o as markFixed, r as computeFlywheelStats, s as upsert, t as listSubstrateBugWeights } from "./substrate-bug-weights-service-D_ICP7TI.js";
|
|
68
|
+
import { i as reclassifyUnknownCostEventsSync, n as reconcile$1, r as recordCostEventsThroughOverdeck, t as collectPiCostEvents } from "./reconciler-caYiRnPy.js";
|
|
69
|
+
import { n as writeSequenceMd, t as parseSequenceMd } from "./sequence-io-C-Q19Jez.js";
|
|
70
|
+
import { _ as normalizeGate, d as computeEpicGroups, f as computeLanes, h as init_pickup, l as classifyIssue, m as computeWaves, p as computeStats, u as computeCohort, v as selectNeedsPlanning } from "./pickup-Dle6k9Xt.js";
|
|
71
|
+
import { C as readCurrentLatestFlywheelStatus, D as writeFlywheelLaunchMetadata, E as subscribeLatestFlywheelStatus, F as setItemRequirements, G as liveOrderIssueLookup, H as getBook, I as setSettings, K as normalizeOrderIssueId, L as setStatus, M as moveItem, N as removeItem, O as writeLatestFlywheelStatus, P as renameBook, R as backlogCandidates, S as nextFlywheelRunId, T as resolveLiveFlywheelRunId, U as getBookAsync, W as listBooks, a as isFlywheelDevcontainerRuntime, b as isFlywheelRunId, f as spawnFlywheelAgent, g as abortFlywheelRun, j as createBook, k as addItems, p as buildClassifyLookups, s as loadResumeSessionId, t as FLYWHEEL_ORCHESTRATOR_AGENT_ID, u as saveResumeSessionId, v as getFlywheelRunDetail, w as readFlywheelLaunchMetadata, x as listFlywheelRuns, z as computeBookProgress } from "./flywheel-DWKd7bMc.js";
|
|
72
|
+
import { n as resolveConversationGitInfo } from "./git-info-DMOSfJ9I.js";
|
|
73
|
+
import { _ as classifyAgentHealth, c as getContainerHistory, d as getDeployStaleness, g as startSmeeProcessSync, h as isSmeeConfiguredSync, l as getCurrentDockerStats, o as getResourceStacks, p as getSystemHealthEvidenceSnapshot, s as formatUptime, u as getAcceptedSystemHealthSnapshot } from "./memory-governor-Cvv_9K0M.js";
|
|
74
|
+
import { D as detectPlatform, E as validateFeatureName, O as init_platform, S as init_worktree_ops, _ as updateWorkspaceLayout, b as readWorkspaceIdentity, c as installGitHooksInDir, d as init_writer, f as relocateWorkspace, g as unarchiveWorkspace, h as touchWorkspaceAccessed, l as archiveWorkspace, m as setWorkspaceRunCommand, p as setWorkspaceFavorite, s as init_git_hooks, u as createWorkspace, v as upsertProjectFromConfig, x as writeWorkspaceIdentity, y as init_identity_record } from "./workspace-manager-CM8RCrSc.js";
|
|
75
|
+
import { n as init_workspace_config, t as getDefaultWorkspaceConfigSync } from "./workspace-config-D-bNq2CF.js";
|
|
76
|
+
import { B as cleanupClosedIssueAgentDirectories, F as setAgentStatusChangedNotifier, I as setAgentStoppedNotifier, J as isBootReconciliationCandidate, K as extendBootReconciliationGrace, L as setMergeReadyNotifier, O as loadConfig, X as startBootReconciliation, Y as listBootReconciliationCandidates, Z as resolveSwarmPolicy, gt as paneShowsClaudeBootBlockingScreen, k as loadState, n as applyBootReconciliationDecision, q as isAutoResumableRole, r as assessDeaconPatrolFreshness, x as getDeaconLogs } from "./deacon-CsisLmPt.js";
|
|
77
|
+
import { a as generateHealthSummary, n as readCloisterStateFile, o as getAgentHealth, s as getAgentsNeedingAttention, t as getCloisterService } from "./service-CThO0Sar.js";
|
|
78
|
+
import { i as getRuntimeForAgent } from "./agent-idle-D-UQ7gDv.js";
|
|
79
|
+
import { a as getShadowState, s as init_shadow_state } from "./shadow-state-BTLi4Axs.js";
|
|
80
|
+
import { n as init_issue_closed, t as clearIssueClosedCache } from "./issue-closed-CiYAa6bX.js";
|
|
81
|
+
import { r as parseArtifactRef } from "./forge-CHADjOFs.js";
|
|
82
|
+
import "./parked-residue-8WbU0y1z.js";
|
|
83
|
+
import { a as writeFeedbackFile, i as init_feedback_writer } from "./feedback-writer-Ds1Wjsz4.js";
|
|
84
|
+
import { t as init_specialists } from "./specialists-D6MUU31Q.js";
|
|
85
|
+
import { a as getReviewerSessionName } from "./specialists-registry-Bng0OFGH.js";
|
|
86
|
+
import { a as readPrdContent, r as findPrdAnywhereSync } from "./prd-locations-F2oLSAhy.js";
|
|
87
|
+
import { i as resolveBootGates, r as formatBootGateState } from "./no-resume-mode-DjMQRkId.js";
|
|
88
|
+
import { t as createInFlightGuard } from "./in-flight-guard-B7khcBdQ.js";
|
|
89
|
+
import { A as removeIssueParkedLabel, C as applyIssueParkedLabel, D as init_label_ops, E as applyIssueVetoedLabel, M as removeIssueReleasedLabel, N as removeIssueVetoedLabel, O as removeIssueBlocksMainLabel, S as applyIssueObjectionLabel, T as applyIssueReleasedLabel, g as parseIssueIdFromTextSync, h as init_resource_utils, j as removeIssueReadyLabel, k as removeIssueObjectionLabel, w as applyIssueReadyLabel, x as applyIssueBlocksMainLabel } from "./pipeline-membership-gather-Ba0wJNCR.js";
|
|
90
|
+
import { a as spawnPlanningSession, r as resolveAutoSpawnOnFinalize } from "./spawn-planning-session-DCmO6COk.js";
|
|
91
|
+
import { r as computeMergeQueueFromCandidates, s as listEligibleCandidatesByProject } from "./flywheel-merge-order-DJwH2KpL.js";
|
|
92
|
+
import { a as loadWorkspaceMetadataSync } from "./workspace-metadata-Cu6yfxBS.js";
|
|
93
|
+
import { d as killRemoteAgent, m as loadRemoteAgentState, o as getRemoteAgentOutput, r as checkRemoteSpendCap, s as init_remote_agents, v as sendToRemoteAgent, y as spawnRemoteAgent } from "./remote-agents-DbbN7vSm.js";
|
|
94
|
+
import { _ as refreshMembershipSnapshotsForProjects, a as enqueueProjectsResourceRefresh, c as startProjectResourceConvergence, d as getCachedResourceAllocatedIssues, f as getResourceDetailIdentifiers, g as readPipelineMembershipSnapshotsForProjects, h as sanitizeResourceAllocatedIssues, l as stopProjectResourceRefreshQueue, m as isDiscoverableAgentSession, o as getProjectResourceRefreshQueueState, p as groupResourceAllocatedIssuesByProject, u as whenProjectResourceRefreshIdle, v as summarizePipelineMembership, y as unavailablePipelineMembership } from "./project-resource-refresh-queue-BehrH4Ai.js";
|
|
95
|
+
import { r as spawnInspectAgent } from "./inspect-agent-CCfNJjKr.js";
|
|
96
|
+
import { r as lookupPullRequestNumberForBranch, t as githubPrLookupSource } from "./github-pr-lookup-bGcsEvLE.js";
|
|
97
|
+
import { a as fetchIssuePullRequestDiff, c as getCachedIssuePrTabResponse, i as fetchIssuePullRequestDetails, l as getIssuePrTabCacheGeneration, n as fetchIssueCheckRuns, r as fetchIssuePullRequest, s as bumpIssuePrTabCacheGeneration, u as setCachedIssuePrTabResponse } from "./pull-requests-T0OV0Vn4.js";
|
|
98
|
+
import { n as DOD_ROWS } from "./dod-BAk5arLF.js";
|
|
99
|
+
import { n as resolveParkedPopulation, r as summarizeParked } from "./resolver-D4nsxfGo.js";
|
|
100
|
+
import { a as readCurrentStatus, l as maybeTriggerStatusRollup, s as readRecentObservations, u as writePendingTurn } from "./rollup-DU3xBQu2.js";
|
|
101
|
+
import { r as isExtendedReviewEnabled } from "./review-agent-BRBTm1qE.js";
|
|
102
|
+
import { n as getTldrDaemonServiceSync, r as init_tldr_daemon } from "./tldr-daemon-McqCk2X7.js";
|
|
103
|
+
import { S as ensureSyncGitQuiescent, x as listGitOperationsSync } from "./merge-agent-C-dsN9se.js";
|
|
104
|
+
import { t as readVerificationArtifact } from "./verification-artifact-DglwaHke.js";
|
|
105
|
+
import { t as getAgentCommandSync } from "./settings-CTywpFw5.js";
|
|
106
|
+
import { r as isRemoteAvailable, t as createFlyProviderFromConfig } from "./remote-xY0B43Ho.js";
|
|
107
|
+
import { n as init_claude_settings_overlay, t as detectProviderEnvConflicts } from "./claude-settings-overlay-BYnXaTVc.js";
|
|
108
|
+
import { _ as init_transcript_adapter, a as generateFallbackSummary, c as handoffPreconditionFallbackReason, d as prependFallbackFocus, f as requestHandoffFromAgent, g as getTranscriptAdapter, i as copySessionFromCompactBoundary, l as init_summary_fork, o as generateSummaryForFork, p as reserveSummaryForkSession, r as authorHandoffExternal, s as handoffFailureReason, u as logHandoffFallback } from "./summary-fork-DhhaFhxZ.js";
|
|
109
|
+
import { a as init_conversation_compaction, c as shouldInterceptManualCompact, n as compactConversationNative, o as isCompacting } from "./conversation-compaction-B-1KETG9.js";
|
|
110
|
+
import { n as loadShipRecords, r as publicShipStatus, t as aggregateGenerationShipStatus } from "./ship-status-rQbPQBsF.js";
|
|
111
|
+
import { t as init_context_layers } from "./context-layers-CdpabJj0.js";
|
|
112
|
+
import { n as init_merge_eligibility, r as isMergeEligible, t as gatherMergeEligibility } from "./merge-eligibility-D7wRnJbj.js";
|
|
113
|
+
import { a as appendLinearMcpAuthHealthyEvent, r as appendLinearMcpAuthCallbackRelayedEvent, u as resolveLinearMcpAuthIntervention } from "./linear-mcp-auth-bB0CPyjh.js";
|
|
114
|
+
import { i as getMergeBlockersPayload, n as hasOrderIssuePrd, r as validateBookForStart, t as createOrderPrdLookup } from "./validate-BYcBcBwg.js";
|
|
115
|
+
import { i as spawnSequencerAgent, n as clearFinishedSequencerRun, r as getSequencerRunStatus, t as SEQUENCER_AGENT_ID } from "./sequencer-agent-eN2P2lDz.js";
|
|
116
|
+
import { n as sameCanonicalReviewStatus, t as emitReviewStatusChanged } from "./review-status-emit-D7sM720S.js";
|
|
117
|
+
import "./supervisor-DqH-laVL.js";
|
|
118
|
+
import { l as startUatTrainReconciler, u as stopUatTrainReconciler } from "./uat-train-BBEiYSep.js";
|
|
119
|
+
import { n as settlePendingLifecycleClaim, t as claimPendingLifecycleFile } from "./pending-lifecycle-claim-yAwDuGS4.js";
|
|
120
|
+
import { i as listTranscriptCheckpoints, r as getTranscriptCheckpoint$1 } from "./checkpoints-DUkUsPVS.js";
|
|
121
|
+
import { r as readPendingDeploy } from "./deploy-queue-CCGWXFkp.js";
|
|
119
122
|
import { createRequire } from "node:module";
|
|
120
123
|
import { basename, delimiter, dirname, extname, isAbsolute, join, normalize, posix, relative, resolve, sep, win32 } from "node:path";
|
|
121
124
|
import { Cause, Context, Data, Duration, Effect, Exit, Fiber, FileSystem, Layer, Option, Path, Queue, Result, Schedule, Schema, Stream } from "effect";
|
|
@@ -724,7 +727,7 @@ const AgentSpawnerLive = Layer.effect(AgentSpawner, Effect.sync(() => ({
|
|
|
724
727
|
if (!existsSync$1(workspacePath)) throw new WorkspaceNotFound({ id: issueId });
|
|
725
728
|
const plan = readWorkspacePlanSync(workspacePath);
|
|
726
729
|
if (!plan || plan.plan.items.length === 0) throw new PlanEmpty({ id: issueId });
|
|
727
|
-
const { getAgentState, spawnAgent, normalizeAgentId } = await import("./agents-
|
|
730
|
+
const { getAgentState, spawnAgent, normalizeAgentId } = await import("./agents-DixZjXWm.js");
|
|
728
731
|
const normalizedId = normalizeAgentId(issueId);
|
|
729
732
|
if ((await Effect.runPromise(getAgentState(normalizedId)))?.status === "running") throw new AgentAlreadyRunning({ id: issueId });
|
|
730
733
|
return {
|
|
@@ -756,7 +759,7 @@ const AgentSpawnerLive = Layer.effect(AgentSpawner, Effect.sync(() => ({
|
|
|
756
759
|
const { workspacePath, projectPath, issue } = opts;
|
|
757
760
|
if (!existsSync$1(workspacePath)) throw new WorkspaceNotFound({ id: issueId });
|
|
758
761
|
const sessionName = opts.sessionName ?? `planning-${issueId.toLowerCase()}`;
|
|
759
|
-
const { spawnPlanningSession } = await import("./spawn-planning-session-
|
|
762
|
+
const { spawnPlanningSession } = await import("./spawn-planning-session-DfEWyrVV.js");
|
|
760
763
|
const result = await spawnPlanningSession({
|
|
761
764
|
issue: {
|
|
762
765
|
id: issue.id,
|
|
@@ -790,14 +793,14 @@ const AgentSpawnerLive = Layer.effect(AgentSpawner, Effect.sync(() => ({
|
|
|
790
793
|
}),
|
|
791
794
|
kill: (agentId) => Effect.tryPromise({
|
|
792
795
|
try: async () => {
|
|
793
|
-
const { stopAgent } = await import("./agents-
|
|
796
|
+
const { stopAgent } = await import("./agents-DixZjXWm.js");
|
|
794
797
|
await Effect.runPromise(stopAgent(agentId));
|
|
795
798
|
},
|
|
796
799
|
catch: () => void 0
|
|
797
800
|
}).pipe(Effect.ignore),
|
|
798
801
|
message: (agentId, msg) => Effect.tryPromise({
|
|
799
802
|
try: async () => {
|
|
800
|
-
const { messageAgent } = await import("./agents-
|
|
803
|
+
const { messageAgent } = await import("./agents-DixZjXWm.js");
|
|
801
804
|
await messageAgent(agentId, msg);
|
|
802
805
|
},
|
|
803
806
|
catch: (err) => new AgentStartError({
|
|
@@ -808,8 +811,8 @@ const AgentSpawnerLive = Layer.effect(AgentSpawner, Effect.sync(() => ({
|
|
|
808
811
|
}),
|
|
809
812
|
deepWipe: (issueId, opts) => Effect.tryPromise({
|
|
810
813
|
try: async () => {
|
|
811
|
-
const { deepWipe } = await import("./workflows-
|
|
812
|
-
const { resolveProjectFromIssueSync } = await import("./projects-
|
|
814
|
+
const { deepWipe } = await import("./workflows-BtHRlFIm.js");
|
|
815
|
+
const { resolveProjectFromIssueSync } = await import("./projects-BMuEf14J.js");
|
|
813
816
|
const project = resolveProjectFromIssueSync(issueId);
|
|
814
817
|
const projectPath = project?.projectPath ?? process.cwd();
|
|
815
818
|
await Effect.runPromise(deepWipe({
|
|
@@ -868,8 +871,8 @@ const WorkspaceServiceLive = Layer.effect(WorkspaceService, Effect.sync(() => {
|
|
|
868
871
|
const { workspacePath, branch } = getWorkspacePath(issueId);
|
|
869
872
|
const issueLower = issueId.toLowerCase();
|
|
870
873
|
if (existsSync$1(workspacePath)) return workspacePath;
|
|
871
|
-
const { createWorkspace } = await import("./workspace-manager-
|
|
872
|
-
const { loadProjectsConfigSync } = await import("./projects-
|
|
874
|
+
const { createWorkspace } = await import("./workspace-manager-BrbX90Rm.js");
|
|
875
|
+
const { loadProjectsConfigSync } = await import("./projects-BMuEf14J.js");
|
|
873
876
|
const { projects } = loadProjectsConfigSync();
|
|
874
877
|
const project = resolveProjectFromIssueSync(issueId);
|
|
875
878
|
if (!project) throw new WorkspaceCreateError({
|
|
@@ -904,7 +907,7 @@ const WorkspaceServiceLive = Layer.effect(WorkspaceService, Effect.sync(() => {
|
|
|
904
907
|
const { workspacePath } = getWorkspacePath(issueId);
|
|
905
908
|
const issueLower = issueId.toLowerCase();
|
|
906
909
|
if (!existsSync$1(workspacePath)) throw new WorkspaceNotFound({ id: issueId });
|
|
907
|
-
const { removeWorkspace } = await import("./workspace-manager-
|
|
910
|
+
const { removeWorkspace } = await import("./workspace-manager-BrbX90Rm.js");
|
|
908
911
|
const project = resolveProjectFromIssueSync(issueId);
|
|
909
912
|
if (!project) throw new WorkspaceCreateError({
|
|
910
913
|
id: issueId,
|
|
@@ -935,7 +938,7 @@ const WorkspaceServiceLive = Layer.effect(WorkspaceService, Effect.sync(() => {
|
|
|
935
938
|
try: async () => {
|
|
936
939
|
const { workspacePath } = getWorkspacePath(issueId);
|
|
937
940
|
const issueLower = issueId.toLowerCase();
|
|
938
|
-
const { stopWorkspaceDocker } = await import("./workspace-manager-
|
|
941
|
+
const { stopWorkspaceDocker } = await import("./workspace-manager-BrbX90Rm.js");
|
|
939
942
|
await Effect.runPromise(stopWorkspaceDocker(workspacePath, issueLower));
|
|
940
943
|
},
|
|
941
944
|
catch: () => void 0
|
|
@@ -1004,7 +1007,7 @@ const WorkspaceServiceLive = Layer.effect(WorkspaceService, Effect.sync(() => {
|
|
|
1004
1007
|
join(workspacePath, ".devcontainer", "docker-compose.devcontainer.yml")
|
|
1005
1008
|
];
|
|
1006
1009
|
if (!composePaths.find((p) => existsSync$1(p))) {
|
|
1007
|
-
const { ensureDevcontainerSync } = await import("./ensure-devcontainer-
|
|
1010
|
+
const { ensureDevcontainerSync } = await import("./ensure-devcontainer-Dk6ZMOUC.js");
|
|
1008
1011
|
const ensure = ensureDevcontainerSync({
|
|
1009
1012
|
workspacePath,
|
|
1010
1013
|
issueId
|
|
@@ -17273,7 +17276,7 @@ var require_get_vercel_oidc_token = /* @__PURE__ */ __commonJSMin(((exports, mod
|
|
|
17273
17276
|
err = error;
|
|
17274
17277
|
}
|
|
17275
17278
|
try {
|
|
17276
|
-
const [{ getTokenPayload, isExpired }, { refreshToken }] = await Promise.all([await import("./token-util-DfUS3Lpp.js").then((m) => /* @__PURE__ */ __toESM(m.default)), await import("./token-
|
|
17279
|
+
const [{ getTokenPayload, isExpired }, { refreshToken }] = await Promise.all([await import("./token-util-DfUS3Lpp.js").then((m) => /* @__PURE__ */ __toESM(m.default)), await import("./token-BdfZLRg1.js").then((m) => /* @__PURE__ */ __toESM(m.default))]);
|
|
17277
17280
|
if (!token || isExpired(getTokenPayload(token), options?.expirationBufferMs)) {
|
|
17278
17281
|
await refreshToken(options);
|
|
17279
17282
|
token = getVercelOidcTokenSync();
|
|
@@ -29590,7 +29593,7 @@ var GoogleCloudTranscription = class {
|
|
|
29590
29593
|
}
|
|
29591
29594
|
async start(apiKey, model) {
|
|
29592
29595
|
try {
|
|
29593
|
-
const { SpeechClient } = await import("./src-
|
|
29596
|
+
const { SpeechClient } = await import("./src-C7gGe4KU.js").then((m) => /* @__PURE__ */ __toESM(m.default, 1)).then((module) => module.v1p1beta1 ?? module.v1);
|
|
29594
29597
|
if (this.closed) return;
|
|
29595
29598
|
const stream = new SpeechClient({ apiKey }).streamingRecognize({
|
|
29596
29599
|
config: {
|
|
@@ -30274,14 +30277,22 @@ function streamAgentOutput(eventStore, agentId) {
|
|
|
30274
30277
|
init_agent_input_detection();
|
|
30275
30278
|
init_tracker_config();
|
|
30276
30279
|
init_agent_enrichment();
|
|
30280
|
+
init_jsonl_resolver();
|
|
30281
|
+
init_control_settings();
|
|
30277
30282
|
init_acp_conversation_parser();
|
|
30278
30283
|
init_codex_conversation_parser();
|
|
30284
|
+
init_kimi_conversation_parser();
|
|
30279
30285
|
init_ohmypi_conversation_parser();
|
|
30280
30286
|
init_pi_conversation_parser();
|
|
30281
|
-
init_kimi_conversation_parser();
|
|
30282
30287
|
init_conversation_service();
|
|
30283
|
-
|
|
30284
|
-
|
|
30288
|
+
const transcriptParsers = {
|
|
30289
|
+
pi: parsePiConversationMessages,
|
|
30290
|
+
ohmypi: parseOhmypiConversationMessages,
|
|
30291
|
+
codex: parseCodexConversationMessages,
|
|
30292
|
+
acp: parseAcpConversationMessages,
|
|
30293
|
+
kimi: parseKimiConversationMessages,
|
|
30294
|
+
"claude-initial": (sessionFile) => parseEntireConversation(sessionFile, { flushPendingToolUse: false })
|
|
30295
|
+
};
|
|
30285
30296
|
const MAX_PENDING_JOBS = 32;
|
|
30286
30297
|
const SEMANTIC_SEARCH_TIMEOUT_MS = Number.parseInt(process.env["OVERDECK_SEMANTIC_SEARCH_TIMEOUT_MS"] ?? "15000", 10);
|
|
30287
30298
|
const COALESCED_OPERATIONS = new Set([
|
|
@@ -30289,16 +30300,23 @@ const COALESCED_OPERATIONS = new Set([
|
|
|
30289
30300
|
"enrichSessions",
|
|
30290
30301
|
"embedSessions",
|
|
30291
30302
|
"searchSessionsSemantic",
|
|
30292
|
-
"listSubstrateBugWeights"
|
|
30303
|
+
"listSubstrateBugWeights",
|
|
30304
|
+
"parseTranscriptSnapshot"
|
|
30293
30305
|
]);
|
|
30294
30306
|
const workers = {
|
|
30295
30307
|
read: null,
|
|
30296
30308
|
long: null,
|
|
30297
|
-
semantic: null
|
|
30309
|
+
semantic: null,
|
|
30310
|
+
parse: null
|
|
30298
30311
|
};
|
|
30299
30312
|
const pending = /* @__PURE__ */ new Map();
|
|
30300
30313
|
const sharedJobs = /* @__PURE__ */ new Map();
|
|
30301
30314
|
let latestSemanticJobId = null;
|
|
30315
|
+
function formatSlowJobLine(input) {
|
|
30316
|
+
if (input.waitMs <= 1e3 && input.runMs <= 1e3) return null;
|
|
30317
|
+
const bytes = input.bytes === void 0 ? "" : ` bytes=${input.bytes}`;
|
|
30318
|
+
return `[db-jobs] slow: op=${input.op} lane=${input.lane} waitMs=${input.waitMs} runMs=${input.runMs} depth=${input.depth}${bytes}`;
|
|
30319
|
+
}
|
|
30302
30320
|
function workerScriptUrl() {
|
|
30303
30321
|
return import.meta.url.endsWith(".ts") ? new URL("./dashboard-db-worker.ts", import.meta.url) : new URL("./dashboard-db-worker.js", import.meta.url);
|
|
30304
30322
|
}
|
|
@@ -30323,6 +30341,8 @@ function coalescingKey(operation, payload) {
|
|
|
30323
30341
|
}
|
|
30324
30342
|
function workerLane(operation) {
|
|
30325
30343
|
if (operation === "searchSessionsSemantic") return "semantic";
|
|
30344
|
+
if (operation === "parseTranscriptSnapshot") return "parse";
|
|
30345
|
+
if (operation === "costReconcileSweep") return "long";
|
|
30326
30346
|
return COALESCED_OPERATIONS.has(operation) ? "long" : "read";
|
|
30327
30347
|
}
|
|
30328
30348
|
function cancelOlderSemanticSearches() {
|
|
@@ -30347,12 +30367,28 @@ function getWorker(lane) {
|
|
|
30347
30367
|
if (message.progress !== void 0) {
|
|
30348
30368
|
job.progressChain = job.progressChain.then(async () => {
|
|
30349
30369
|
for (const listener of job.progressListeners) await listener(message.progress);
|
|
30370
|
+
}).finally(() => {
|
|
30371
|
+
worker.postMessage({
|
|
30372
|
+
id: message.id,
|
|
30373
|
+
ack: message.progressSeq
|
|
30374
|
+
});
|
|
30350
30375
|
});
|
|
30351
30376
|
return;
|
|
30352
30377
|
}
|
|
30353
30378
|
pending.delete(message.id);
|
|
30354
30379
|
if (job.timeout) clearTimeout(job.timeout);
|
|
30355
30380
|
if (job.lane === "semantic" && latestSemanticJobId === message.id) latestSemanticJobId = null;
|
|
30381
|
+
if (message.startedAt !== void 0 && message.finishedAt !== void 0) {
|
|
30382
|
+
const line = formatSlowJobLine({
|
|
30383
|
+
op: job.operation,
|
|
30384
|
+
lane: job.lane,
|
|
30385
|
+
waitMs: message.startedAt - job.enqueuedAt,
|
|
30386
|
+
runMs: message.finishedAt - message.startedAt,
|
|
30387
|
+
depth: [...pending.values()].filter((pendingJob) => pendingJob.lane === job.lane).length,
|
|
30388
|
+
bytes: message.bytes
|
|
30389
|
+
});
|
|
30390
|
+
if (line) console.warn(line);
|
|
30391
|
+
}
|
|
30356
30392
|
if (message.ok) {
|
|
30357
30393
|
job.progressChain.then(() => job.resolve(message.result), job.reject);
|
|
30358
30394
|
return;
|
|
@@ -30372,7 +30408,7 @@ function getWorker(lane) {
|
|
|
30372
30408
|
});
|
|
30373
30409
|
return worker;
|
|
30374
30410
|
}
|
|
30375
|
-
async function
|
|
30411
|
+
async function executeInline(operation, payload, onProgress) {
|
|
30376
30412
|
switch (operation) {
|
|
30377
30413
|
case "getDiscoveredStats": return getDiscoveredStats();
|
|
30378
30414
|
case "listDiscoveredSessions": {
|
|
@@ -30407,6 +30443,12 @@ async function runInline$1(operation, payload, onProgress) {
|
|
|
30407
30443
|
onProgress
|
|
30408
30444
|
});
|
|
30409
30445
|
case "getConversationByName": return getConversationByName(payload);
|
|
30446
|
+
case "parseTranscriptSnapshot": {
|
|
30447
|
+
const input = payload;
|
|
30448
|
+
const parser = transcriptParsers[input.parser];
|
|
30449
|
+
if (!parser) throw new Error(`Unknown transcript parser: ${input.parser}`);
|
|
30450
|
+
return parser(input.sessionFile);
|
|
30451
|
+
}
|
|
30410
30452
|
case "getSetting": return getSetting(payload);
|
|
30411
30453
|
case "setSetting": {
|
|
30412
30454
|
const input = payload;
|
|
@@ -30421,27 +30463,66 @@ async function runInline$1(operation, payload, onProgress) {
|
|
|
30421
30463
|
});
|
|
30422
30464
|
}
|
|
30423
30465
|
case "getArtifactBySlug": {
|
|
30424
|
-
const { getArtifactBySlugJob } = await import("./artifact-index-jobs-
|
|
30466
|
+
const { getArtifactBySlugJob } = await import("./artifact-index-jobs-Cjdme0jS.js");
|
|
30425
30467
|
return getArtifactBySlugJob(payload);
|
|
30426
30468
|
}
|
|
30427
30469
|
case "listArtifactsForWorkspaceOrIssue": {
|
|
30428
|
-
const { listArtifactsForWorkspaceOrIssueJob } = await import("./artifact-index-jobs-
|
|
30470
|
+
const { listArtifactsForWorkspaceOrIssueJob } = await import("./artifact-index-jobs-Cjdme0jS.js");
|
|
30429
30471
|
return listArtifactsForWorkspaceOrIssueJob(payload);
|
|
30430
30472
|
}
|
|
30431
30473
|
case "unshareArtifactBySlug": {
|
|
30432
|
-
const { unshareArtifactBySlugJob } = await import("./artifact-index-jobs-
|
|
30474
|
+
const { unshareArtifactBySlugJob } = await import("./artifact-index-jobs-Cjdme0jS.js");
|
|
30433
30475
|
return unshareArtifactBySlugJob(payload);
|
|
30434
30476
|
}
|
|
30477
|
+
case "costReconcileSweep": return payload.source === "pi" ? collectPiCostEvents({
|
|
30478
|
+
...payload,
|
|
30479
|
+
onBatch: async (batch) => onProgress?.(batch)
|
|
30480
|
+
}) : collectCodexCostEvents({
|
|
30481
|
+
...payload,
|
|
30482
|
+
onBatch: async (batch) => onProgress?.(batch)
|
|
30483
|
+
});
|
|
30484
|
+
}
|
|
30485
|
+
}
|
|
30486
|
+
async function runInline$1(operation, payload, onProgress) {
|
|
30487
|
+
const startedAt = Date.now();
|
|
30488
|
+
let bytes;
|
|
30489
|
+
try {
|
|
30490
|
+
const result = await executeInline(operation, payload, onProgress);
|
|
30491
|
+
if (operation === "parseTranscriptSnapshot") bytes = result.byteOffset;
|
|
30492
|
+
return result;
|
|
30493
|
+
} finally {
|
|
30494
|
+
const line = formatSlowJobLine({
|
|
30495
|
+
op: operation,
|
|
30496
|
+
lane: workerLane(operation),
|
|
30497
|
+
waitMs: 0,
|
|
30498
|
+
runMs: Date.now() - startedAt,
|
|
30499
|
+
depth: 0,
|
|
30500
|
+
bytes
|
|
30501
|
+
});
|
|
30502
|
+
if (line) console.warn(line);
|
|
30435
30503
|
}
|
|
30436
30504
|
}
|
|
30437
30505
|
function runDashboardDbJob(operation, payload, onProgress) {
|
|
30438
|
-
if (import.meta.url.endsWith(".ts") && process.env["VITEST"]) return runInline$1(operation, payload, onProgress);
|
|
30439
30506
|
const key = coalescingKey(operation, payload);
|
|
30440
30507
|
const existing = key ? sharedJobs.get(key) : void 0;
|
|
30441
30508
|
if (existing) {
|
|
30442
30509
|
if (onProgress) existing.progressListeners.add(onProgress);
|
|
30443
30510
|
return existing.promise;
|
|
30444
30511
|
}
|
|
30512
|
+
if (import.meta.url.endsWith(".ts") && process.env["VITEST"]) {
|
|
30513
|
+
const progressListeners = /* @__PURE__ */ new Set();
|
|
30514
|
+
if (onProgress) progressListeners.add(onProgress);
|
|
30515
|
+
const promise = runInline$1(operation, payload, onProgress);
|
|
30516
|
+
if (key) {
|
|
30517
|
+
sharedJobs.set(key, {
|
|
30518
|
+
lane: workerLane(operation),
|
|
30519
|
+
promise,
|
|
30520
|
+
progressListeners
|
|
30521
|
+
});
|
|
30522
|
+
promise.then(() => sharedJobs.delete(key), () => sharedJobs.delete(key));
|
|
30523
|
+
}
|
|
30524
|
+
return promise;
|
|
30525
|
+
}
|
|
30445
30526
|
if (pending.size >= MAX_PENDING_JOBS) return Promise.reject(/* @__PURE__ */ new Error("Dashboard database worker queue is full"));
|
|
30446
30527
|
const id = randomUUID$1();
|
|
30447
30528
|
const lane = workerLane(operation);
|
|
@@ -30468,7 +30549,8 @@ function runDashboardDbJob(operation, payload, onProgress) {
|
|
|
30468
30549
|
reject,
|
|
30469
30550
|
progressListeners,
|
|
30470
30551
|
progressChain: Promise.resolve(),
|
|
30471
|
-
timeout
|
|
30552
|
+
timeout,
|
|
30553
|
+
enqueuedAt: Date.now()
|
|
30472
30554
|
});
|
|
30473
30555
|
getWorker(lane).postMessage({
|
|
30474
30556
|
id,
|
|
@@ -31057,7 +31139,8 @@ async function startSubagentListPolling(sessionFile, pendingToolUseIds, emit) {
|
|
|
31057
31139
|
* are implemented via TerminalService (dual-runtime PTY, B20).
|
|
31058
31140
|
*/
|
|
31059
31141
|
init_src();
|
|
31060
|
-
|
|
31142
|
+
init_conversation_service();
|
|
31143
|
+
init_pi_conversation_parser();
|
|
31061
31144
|
init_paths();
|
|
31062
31145
|
init_projects();
|
|
31063
31146
|
function storedToDomainEvent(stored) {
|
|
@@ -31089,6 +31172,12 @@ function normalizedIssueId(value) {
|
|
|
31089
31172
|
function conversationDiscoveringStream() {
|
|
31090
31173
|
return Stream.succeed({ kind: "discovering" }).pipe(Stream.repeat(Schedule.fixed("2 seconds")));
|
|
31091
31174
|
}
|
|
31175
|
+
/**
|
|
31176
|
+
* Watch and emit full transcript snapshots for harnesses without incremental parsing.
|
|
31177
|
+
* Path resolution, file watching, debounce state, and event emission stay on the main
|
|
31178
|
+
* thread. Callers supply a parser callback that sends CPU-bound parsing through the
|
|
31179
|
+
* dashboard DB worker's parse lane via the job door.
|
|
31180
|
+
*/
|
|
31092
31181
|
function streamResolvedFullParseSnapshots(resolve, parse, model, unresolvedMeansEmpty = false) {
|
|
31093
31182
|
return Stream.callback((queue) => Effect.acquireRelease(Effect.promise(async () => {
|
|
31094
31183
|
let stopped = false;
|
|
@@ -31211,20 +31300,26 @@ function streamResolvedFullParseSnapshots(resolve, parse, model, unresolvedMeans
|
|
|
31211
31300
|
} };
|
|
31212
31301
|
}), (handle) => Effect.sync(() => handle.stop())));
|
|
31213
31302
|
}
|
|
31214
|
-
function ohmypiSnapshotParser(harness) {
|
|
31215
|
-
switch (harness) {
|
|
31216
|
-
case "pi": return parsePiConversationMessages;
|
|
31217
|
-
default: return parseOhmypiConversationMessages;
|
|
31218
|
-
}
|
|
31219
|
-
}
|
|
31220
31303
|
function streamHarnessFullParseSnapshots(sessionName, harness, model, unresolvedMeansEmpty = false, workspace = null) {
|
|
31221
31304
|
const behavior = getHarnessBehavior(harness);
|
|
31222
31305
|
const streamResolved = (resolve, parse) => streamResolvedFullParseSnapshots(resolve, parse, model, unresolvedMeansEmpty);
|
|
31223
31306
|
switch (behavior.transcriptKind) {
|
|
31224
|
-
case "ohmypi-jsonl": return streamResolved(() => resolvePiSessionPath(sessionName),
|
|
31225
|
-
|
|
31226
|
-
|
|
31227
|
-
|
|
31307
|
+
case "ohmypi-jsonl": return streamResolved(() => resolvePiSessionPath(sessionName), (file) => runDashboardDbJob("parseTranscriptSnapshot", {
|
|
31308
|
+
sessionFile: file,
|
|
31309
|
+
parser: harness === "pi" ? "pi" : "ohmypi"
|
|
31310
|
+
}));
|
|
31311
|
+
case "codex-rollout-jsonl": return streamResolved(() => resolveCodexRolloutPath(sessionName), (file) => runDashboardDbJob("parseTranscriptSnapshot", {
|
|
31312
|
+
sessionFile: file,
|
|
31313
|
+
parser: "codex"
|
|
31314
|
+
}));
|
|
31315
|
+
case "acp-jsonl": return streamResolved(() => resolveAcpTranscriptPath(sessionName), (file) => runDashboardDbJob("parseTranscriptSnapshot", {
|
|
31316
|
+
sessionFile: file,
|
|
31317
|
+
parser: "acp"
|
|
31318
|
+
}));
|
|
31319
|
+
case "kimi-wire-jsonl": return streamResolved(() => resolveKimiWirePath(sessionName, workspace ? { workspaceOverride: workspace } : {}), (file) => runDashboardDbJob("parseTranscriptSnapshot", {
|
|
31320
|
+
sessionFile: file,
|
|
31321
|
+
parser: "kimi"
|
|
31322
|
+
}));
|
|
31228
31323
|
default: return null;
|
|
31229
31324
|
}
|
|
31230
31325
|
}
|
|
@@ -31540,7 +31635,7 @@ const PanRpcLayer = PanRpcGroup.toLayer(Effect.gen(function* () {
|
|
|
31540
31635
|
}), (unsubscribe) => Effect.sync(() => unsubscribe()))),
|
|
31541
31636
|
[WS_METHODS.subscribeIssueEvents]: (input) => {
|
|
31542
31637
|
console.log(`[ws-rpc] subscribeIssueEvents invoked issueId=${input.issueId}`);
|
|
31543
|
-
import("./issue-service-singleton-
|
|
31638
|
+
import("./issue-service-singleton-1Q0ER8Yc.js").then(({ getSharedIssueService }) => getSharedIssueService().backfillIssue(input.issueId)).catch(() => {});
|
|
31544
31639
|
return eventStore.streamEvents.pipe(Stream.filter(shouldBroadcastDashboardEvent), Stream.map(storedToDomainEvent), Stream.filter(passesDomainEventSchema), Stream.mapEffect((event) => getCachedAgentIssueLookup(readModel).pipe(Effect.map((lookup) => filterDomainEventForIssue(event, input.issueId, lookup)))), Stream.filter((event) => event !== null));
|
|
31545
31640
|
},
|
|
31546
31641
|
[WS_METHODS.subscribeTerminal]: (input) => terminalService.streamSession(input.sessionName, input.cols, input.rows),
|
|
@@ -31566,7 +31661,7 @@ const PanRpcLayer = PanRpcGroup.toLayer(Effect.gen(function* () {
|
|
|
31566
31661
|
[WS_METHODS.terminalResize]: (input) => terminalService.resize(input.sessionName, input.cols, input.rows),
|
|
31567
31662
|
[WS_METHODS.terminalClose]: (input) => terminalService.close(input.sessionName),
|
|
31568
31663
|
[WS_METHODS.subscribeConversationMessages]: (input) => Stream.unwrap(Effect.gen(function* () {
|
|
31569
|
-
const conv = getConversationByName
|
|
31664
|
+
const conv = yield* Effect.promise(() => runDashboardDbJob("getConversationByName", input.conversationName));
|
|
31570
31665
|
if (!conv && /^(agent-|planning-|specialist-|strike-|inspect-)|^(flywheel-orchestrator|conv-flywheel-orchestrator)$/.test(input.conversationName)) {
|
|
31571
31666
|
const harness = yield* Effect.promise(() => resolveAgentHarness(input.conversationName));
|
|
31572
31667
|
const stream = streamHarnessFullParseSnapshots(input.conversationName, harness, null);
|
|
@@ -31590,7 +31685,10 @@ const PanRpcLayer = PanRpcGroup.toLayer(Effect.gen(function* () {
|
|
|
31590
31685
|
Queue.offerUnsafe(queue, event);
|
|
31591
31686
|
} catch {}
|
|
31592
31687
|
};
|
|
31593
|
-
const initial = await
|
|
31688
|
+
const initial = await runDashboardDbJob("parseTranscriptSnapshot", {
|
|
31689
|
+
sessionFile,
|
|
31690
|
+
parser: "claude-initial"
|
|
31691
|
+
});
|
|
31594
31692
|
let currentByteOffset = initial.byteOffset;
|
|
31595
31693
|
let currentContextUsage = contextUsageFromParseResult(initial, model);
|
|
31596
31694
|
let highWaterCount = initial.messages.length;
|
|
@@ -33334,7 +33432,7 @@ async function closeIssuePullRequest(issueId, reason = "Canceled via Overdeck")
|
|
|
33334
33432
|
timeout: 15e3
|
|
33335
33433
|
});
|
|
33336
33434
|
try {
|
|
33337
|
-
const { setReviewStatusSync } = await import("./review-status-
|
|
33435
|
+
const { setReviewStatusSync } = await import("./review-status-Bge_3XTR.js");
|
|
33338
33436
|
setReviewStatusSync(issueId.toUpperCase(), { prUrl: void 0 });
|
|
33339
33437
|
} catch {}
|
|
33340
33438
|
return [`Closed PR #${prNumber} on ${githubCheck.owner}/${githubCheck.repo}`];
|
|
@@ -33388,7 +33486,7 @@ async function runDestructiveIssueLifecycle(id, mode, opts = {}) {
|
|
|
33388
33486
|
const { ctx, projectConfig } = buildLifecycleContext(id, getIssueDataService$8().getIssueSource(id) ?? void 0);
|
|
33389
33487
|
const deleteWorkspace = opts.deleteWorkspace ?? true;
|
|
33390
33488
|
cleanupLog.push(...await closeIssuePullRequest(id, mode === "cancel" ? "Canceled via Overdeck" : "Reset to Todo via Overdeck"));
|
|
33391
|
-
const { resetToTodo, cancelIssueWorkflow } = await import("./lifecycle-
|
|
33489
|
+
const { resetToTodo, cancelIssueWorkflow } = await import("./lifecycle-DDZ7w-BY.js");
|
|
33392
33490
|
const workflow = mode === "cancel" ? cancelIssueWorkflow : resetToTodo;
|
|
33393
33491
|
const result = await Effect.runPromise(workflow(ctx, {
|
|
33394
33492
|
deleteWorkspace,
|
|
@@ -33403,7 +33501,7 @@ async function runDestructiveIssueLifecycle(id, mode, opts = {}) {
|
|
|
33403
33501
|
}));
|
|
33404
33502
|
cleanupLog.push(...result.steps.flatMap((step) => step.details || [step.error].filter(Boolean)));
|
|
33405
33503
|
if (mode === "cancel") try {
|
|
33406
|
-
const { transitionXBriefOnMain } = await import("./lifecycle-io-
|
|
33504
|
+
const { transitionXBriefOnMain } = await import("./lifecycle-io-D1oBiMce.js");
|
|
33407
33505
|
const tx = await Effect.runPromise(transitionXBriefOnMain(ctx.projectPath, id, "cancelled", "cancelled", `scope: cancel ${id.toUpperCase()} xBRIEF`));
|
|
33408
33506
|
if (tx.moved) cleanupLog.push(`xBRIEF moved ${tx.fromDir} → cancelled`);
|
|
33409
33507
|
if (tx.committed) cleanupLog.push(`Committed xBRIEF cancellation on main`);
|
|
@@ -33411,8 +33509,8 @@ async function runDestructiveIssueLifecycle(id, mode, opts = {}) {
|
|
|
33411
33509
|
cleanupLog.push(`xBRIEF cancel transition failed (non-fatal): ${err?.message ?? err}`);
|
|
33412
33510
|
}
|
|
33413
33511
|
try {
|
|
33414
|
-
const { killAllReviewerSessions } = await import("./review-agent-
|
|
33415
|
-
const { resolveProjectFromIssueSync } = await import("./projects-
|
|
33512
|
+
const { killAllReviewerSessions } = await import("./review-agent-Caodi0PX.js");
|
|
33513
|
+
const { resolveProjectFromIssueSync } = await import("./projects-BMuEf14J.js");
|
|
33416
33514
|
const projectKey = resolveProjectFromIssueSync(id)?.projectKey;
|
|
33417
33515
|
if (projectKey) {
|
|
33418
33516
|
const { killed } = await Effect.runPromise(killAllReviewerSessions(projectKey, id.toUpperCase()));
|
|
@@ -33426,7 +33524,7 @@ async function runDestructiveIssueLifecycle(id, mode, opts = {}) {
|
|
|
33426
33524
|
cleanupLog.push("Cleared review status");
|
|
33427
33525
|
} catch {}
|
|
33428
33526
|
try {
|
|
33429
|
-
const { resetPostMergeState } = await import("./merge-agent-
|
|
33527
|
+
const { resetPostMergeState } = await import("./merge-agent-D-4_iQgy.js");
|
|
33430
33528
|
resetPostMergeState(id);
|
|
33431
33529
|
resetPostMergeState(id.toUpperCase());
|
|
33432
33530
|
cleanupLog.push("Cleared merge state");
|
|
@@ -33446,7 +33544,7 @@ function closeIssueTransition(options) {
|
|
|
33446
33544
|
const { issueId, body, eventStore } = options;
|
|
33447
33545
|
const { reason } = body;
|
|
33448
33546
|
const projectPath = getProjectPath$3(void 0, extractPrefixSync(issueId) ?? issueId.split("-")[0]);
|
|
33449
|
-
const { close: closeWorkflow } = yield* Effect.promise(() => import("./lifecycle-
|
|
33547
|
+
const { close: closeWorkflow } = yield* Effect.promise(() => import("./lifecycle-DDZ7w-BY.js"));
|
|
33450
33548
|
const githubCheck = isGitHubIssue$4(issueId);
|
|
33451
33549
|
const issueDataService = getIssueDataService$8();
|
|
33452
33550
|
const issueSource = issueDataService.getIssueSource(issueId);
|
|
@@ -33713,7 +33811,7 @@ function reopenIssueTransition(options) {
|
|
|
33713
33811
|
else clearReviewStatus(id.toUpperCase());
|
|
33714
33812
|
} catch {}
|
|
33715
33813
|
try {
|
|
33716
|
-
const { resetPostMergeState } = await import("./merge-agent-
|
|
33814
|
+
const { resetPostMergeState } = await import("./merge-agent-D-4_iQgy.js");
|
|
33717
33815
|
resetPostMergeState(id);
|
|
33718
33816
|
resetPostMergeState(id.toUpperCase());
|
|
33719
33817
|
} catch {}
|
|
@@ -33777,7 +33875,7 @@ function moveIssueStatus(options) {
|
|
|
33777
33875
|
"done"
|
|
33778
33876
|
];
|
|
33779
33877
|
if (!targetStatus || !validStatuses.includes(targetStatus)) return jsonResponse({ error: `Invalid targetStatus. Must be one of: ${validStatuses.join(", ")}` }, { status: 400 });
|
|
33780
|
-
const { updateShadowState } = yield* Effect.promise(() => import("./shadow-state-
|
|
33878
|
+
const { updateShadowState } = yield* Effect.promise(() => import("./shadow-state-CZ_LnPsi.js"));
|
|
33781
33879
|
const issueState = {
|
|
33782
33880
|
backlog: "open",
|
|
33783
33881
|
todo: "open",
|
|
@@ -34020,7 +34118,7 @@ async function copySettingsToWorkspace(id) {
|
|
|
34020
34118
|
success: false,
|
|
34021
34119
|
error: "Workspace not found"
|
|
34022
34120
|
}, { status: 404 });
|
|
34023
|
-
const { copyOverdeckSettingsToWorkspaceSync } = await import("./workspace-manager-
|
|
34121
|
+
const { copyOverdeckSettingsToWorkspaceSync } = await import("./workspace-manager-BrbX90Rm.js");
|
|
34024
34122
|
const result = copyOverdeckSettingsToWorkspaceSync(workspacePath);
|
|
34025
34123
|
return jsonResponse({
|
|
34026
34124
|
success: result.errors.length === 0 || result.copied.length > 0,
|
|
@@ -34526,7 +34624,7 @@ function restartFromPlan(options) {
|
|
|
34526
34624
|
});
|
|
34527
34625
|
const resetResult = yield* Effect.promise(async () => {
|
|
34528
34626
|
try {
|
|
34529
|
-
const { runGitResetHard } = await import("./dangerous-git-ops-
|
|
34627
|
+
const { runGitResetHard } = await import("./dangerous-git-ops-BOtXCFkT.js");
|
|
34530
34628
|
async function findPlanningCommit(grep, label) {
|
|
34531
34629
|
try {
|
|
34532
34630
|
const { stdout } = await execAsync$7(`git log --grep="${grep.replace(/"/g, "\\\"")}" --format=%H -1`, {
|
|
@@ -34973,7 +35071,7 @@ function closeOutIssue(id, opts = {}) {
|
|
|
34973
35071
|
}
|
|
34974
35072
|
const closeOutResult = yield* Effect.promise(async () => {
|
|
34975
35073
|
try {
|
|
34976
|
-
const { closeOut } = await import("./lifecycle-
|
|
35074
|
+
const { closeOut } = await import("./lifecycle-DDZ7w-BY.js");
|
|
34977
35075
|
return {
|
|
34978
35076
|
ok: true,
|
|
34979
35077
|
result: await Effect.runPromise(closeOut(ctx, {
|
|
@@ -35063,7 +35161,7 @@ function bulkCloseOut(body) {
|
|
|
35063
35161
|
const invalidIds = issueIds.filter((id) => !isValidIssueId(id));
|
|
35064
35162
|
if (invalidIds.length > 0) return jsonResponse({ error: `Invalid issue ID format: ${invalidIds.join(", ")}` }, { status: 400 });
|
|
35065
35163
|
const eventStore = yield* EventStoreService;
|
|
35066
|
-
const { closeOut } = yield* Effect.promise(() => import("./lifecycle-
|
|
35164
|
+
const { closeOut } = yield* Effect.promise(() => import("./lifecycle-DDZ7w-BY.js"));
|
|
35067
35165
|
const issueDataService = getIssueDataService$5();
|
|
35068
35166
|
const tasks = [];
|
|
35069
35167
|
const agentChecks = yield* withConcurrencyLimit(issueIds.map((id) => Effect.promise(async () => {
|
|
@@ -35288,8 +35386,8 @@ const getIssueShipLogRoute = HttpRouter.add("GET", "/api/issues/:id/ship-log", h
|
|
|
35288
35386
|
const id = (yield* HttpRouter.params)["id"] ?? "";
|
|
35289
35387
|
if (!parseIssueIdSync(id)) return jsonResponse({ error: "Invalid issue ID" }, { status: 400 });
|
|
35290
35388
|
return yield* Effect.promise(async () => {
|
|
35291
|
-
const { getShipLog } = await import("./ship-log-
|
|
35292
|
-
const { getReviewStatusSync } = await import("./review-status-
|
|
35389
|
+
const { getShipLog } = await import("./ship-log-D-CphNZx.js");
|
|
35390
|
+
const { getReviewStatusSync } = await import("./review-status-Bge_3XTR.js");
|
|
35293
35391
|
const log = getShipLog(id);
|
|
35294
35392
|
const rs = getReviewStatusSync(id);
|
|
35295
35393
|
return jsonResponse({
|
|
@@ -35304,8 +35402,8 @@ const getIssueVerificationRoute = HttpRouter.add("GET", "/api/issues/:id/verific
|
|
|
35304
35402
|
const id = (yield* HttpRouter.params)["id"] ?? "";
|
|
35305
35403
|
if (!parseIssueIdSync(id)) return jsonResponse({ error: "Invalid issue ID" }, { status: 400 });
|
|
35306
35404
|
return yield* Effect.promise(async () => {
|
|
35307
|
-
const { readVerificationArtifact } = await import("./verification-artifact-
|
|
35308
|
-
const { getReviewStatusSync } = await import("./review-status-
|
|
35405
|
+
const { readVerificationArtifact } = await import("./verification-artifact-Cmhgq4b_.js");
|
|
35406
|
+
const { getReviewStatusSync } = await import("./review-status-Bge_3XTR.js");
|
|
35309
35407
|
const { join } = await import("node:path");
|
|
35310
35408
|
const resolved = resolveProjectFromIssueSync(id);
|
|
35311
35409
|
const workspacePath = resolved ? join(resolved.projectPath, "workspaces", `feature-${id.toLowerCase()}`) : null;
|
|
@@ -41304,7 +41402,7 @@ Be specific: reference actual file names, function names, requirement text, disc
|
|
|
41304
41402
|
const { command: cliCmd, args: cliArgs } = getAgentCommandSync(statusModelId);
|
|
41305
41403
|
const modelFlag = cliArgs.length > 0 ? ` ${cliArgs.join(" ")}` : "";
|
|
41306
41404
|
const promptFile = join(planningDir, ".status-review-prompt.tmp");
|
|
41307
|
-
const { getProviderForModelSync, getProviderEnvSync } = await import("./providers-
|
|
41405
|
+
const { getProviderForModelSync, getProviderEnvSync } = await import("./providers-Buv2wmFU.js");
|
|
41308
41406
|
let providerEnvStr = "";
|
|
41309
41407
|
let providerEnv = {};
|
|
41310
41408
|
const statusProvider = getProviderForModelSync(statusModelId);
|
|
@@ -41387,7 +41485,7 @@ const postMissionControlUploadRoute = HttpRouter.add("POST", "/api/command-deck/
|
|
|
41387
41485
|
let safeName = filename.replace(/[^a-zA-Z0-9._-]/g, "-");
|
|
41388
41486
|
let processedContent = content;
|
|
41389
41487
|
if (safeName.endsWith(".vtt")) {
|
|
41390
|
-
const { vttToMarkdown } = yield* Effect.promise(() => import("./vtt-parser-
|
|
41488
|
+
const { vttToMarkdown } = yield* Effect.promise(() => import("./vtt-parser-Va--tv27.js"));
|
|
41391
41489
|
processedContent = vttToMarkdown(content);
|
|
41392
41490
|
safeName = safeName.replace(/\.vtt$/, ".md");
|
|
41393
41491
|
}
|
|
@@ -42683,7 +42781,7 @@ const resolveAndSpeak = (options, deps) => Effect.tryPromise({
|
|
|
42683
42781
|
//#endregion
|
|
42684
42782
|
//#region services/tts-playback.ts
|
|
42685
42783
|
const MAX_TTS_QUEUE_LENGTH = 20;
|
|
42686
|
-
const state$
|
|
42784
|
+
const state$2 = {
|
|
42687
42785
|
unsubscribe: null,
|
|
42688
42786
|
startPromise: null,
|
|
42689
42787
|
queue: [],
|
|
@@ -42728,16 +42826,16 @@ async function speakActivityTts(event) {
|
|
|
42728
42826
|
}
|
|
42729
42827
|
}
|
|
42730
42828
|
async function drainQueue() {
|
|
42731
|
-
if (state$
|
|
42732
|
-
state$
|
|
42829
|
+
if (state$2.processing) return;
|
|
42830
|
+
state$2.processing = true;
|
|
42733
42831
|
try {
|
|
42734
|
-
while (state$
|
|
42735
|
-
const event = state$
|
|
42832
|
+
while (state$2.queue.length > 0 && getTtsRuntimeConfig().enabled) {
|
|
42833
|
+
const event = state$2.queue.shift();
|
|
42736
42834
|
if (event) await speakActivityTts(event);
|
|
42737
42835
|
}
|
|
42738
|
-
if (!getTtsRuntimeConfig().enabled) state$
|
|
42836
|
+
if (!getTtsRuntimeConfig().enabled) state$2.queue = [];
|
|
42739
42837
|
} finally {
|
|
42740
|
-
state$
|
|
42838
|
+
state$2.processing = false;
|
|
42741
42839
|
}
|
|
42742
42840
|
}
|
|
42743
42841
|
const LIFECYCLE_EVENT_TYPES = new Set([
|
|
@@ -42753,14 +42851,14 @@ function enqueueActivityTts(event) {
|
|
|
42753
42851
|
const eventType = event.payload?.eventType;
|
|
42754
42852
|
if (eventType && LIFECYCLE_EVENT_TYPES.has(eventType) && config.lifecycle === false) return;
|
|
42755
42853
|
}
|
|
42756
|
-
if (state$
|
|
42854
|
+
if (state$2.queue.length >= MAX_TTS_QUEUE_LENGTH) {
|
|
42757
42855
|
const priority = eventPriority(event) ?? 1;
|
|
42758
42856
|
if (config.dropInfoWhenFull && priority >= 2) return;
|
|
42759
|
-
const dropIndex = config.dropInfoWhenFull ? dropIndexForFullQueue(state$
|
|
42857
|
+
const dropIndex = config.dropInfoWhenFull ? dropIndexForFullQueue(state$2.queue, priority) : 0;
|
|
42760
42858
|
if (dropIndex === void 0) return;
|
|
42761
|
-
state$
|
|
42859
|
+
state$2.queue.splice(dropIndex, 1);
|
|
42762
42860
|
}
|
|
42763
|
-
state$
|
|
42861
|
+
state$2.queue.push(event);
|
|
42764
42862
|
drainQueue();
|
|
42765
42863
|
}
|
|
42766
42864
|
function onEvent$1(event) {
|
|
@@ -42768,29 +42866,29 @@ function onEvent$1(event) {
|
|
|
42768
42866
|
enqueueActivityTts(event);
|
|
42769
42867
|
}
|
|
42770
42868
|
async function startTtsPlayback() {
|
|
42771
|
-
if (state$
|
|
42772
|
-
if (state$
|
|
42869
|
+
if (state$2.unsubscribe) return;
|
|
42870
|
+
if (state$2.startPromise) return state$2.startPromise;
|
|
42773
42871
|
if (!getTtsRuntimeConfig().enabled) {
|
|
42774
42872
|
console.log("[tts-playback] Disabled (tts.enabled=false)");
|
|
42775
42873
|
return;
|
|
42776
42874
|
}
|
|
42777
|
-
state$
|
|
42875
|
+
state$2.startPromise = (async () => {
|
|
42778
42876
|
const store = await initEventStore();
|
|
42779
|
-
if (state$
|
|
42780
|
-
state$
|
|
42877
|
+
if (state$2.unsubscribe) return;
|
|
42878
|
+
state$2.unsubscribe = store.subscribe(onEvent$1);
|
|
42781
42879
|
console.log("[tts-playback] Started");
|
|
42782
42880
|
})();
|
|
42783
42881
|
try {
|
|
42784
|
-
await state$
|
|
42882
|
+
await state$2.startPromise;
|
|
42785
42883
|
} finally {
|
|
42786
|
-
state$
|
|
42884
|
+
state$2.startPromise = null;
|
|
42787
42885
|
}
|
|
42788
42886
|
}
|
|
42789
42887
|
function stopTtsPlayback() {
|
|
42790
|
-
state$
|
|
42791
|
-
if (state$
|
|
42792
|
-
state$
|
|
42793
|
-
state$
|
|
42888
|
+
state$2.queue = [];
|
|
42889
|
+
if (state$2.unsubscribe) {
|
|
42890
|
+
state$2.unsubscribe();
|
|
42891
|
+
state$2.unsubscribe = null;
|
|
42794
42892
|
}
|
|
42795
42893
|
}
|
|
42796
42894
|
async function syncTtsPlaybackWithConfig() {
|
|
@@ -42901,6 +42999,24 @@ function unavailableProvider(provider, model, reason) {
|
|
|
42901
42999
|
};
|
|
42902
43000
|
}
|
|
42903
43001
|
//#endregion
|
|
43002
|
+
//#region ../../lib/conversation-search/health.ts
|
|
43003
|
+
const state$1 = {
|
|
43004
|
+
lastErrorAt: null,
|
|
43005
|
+
lastErrorReason: null,
|
|
43006
|
+
lastSuccessAt: null
|
|
43007
|
+
};
|
|
43008
|
+
function recordConversationSearchFailure(reason) {
|
|
43009
|
+
state$1.lastErrorAt = (/* @__PURE__ */ new Date()).toISOString();
|
|
43010
|
+
state$1.lastErrorReason = reason instanceof Error ? reason.message : String(reason);
|
|
43011
|
+
}
|
|
43012
|
+
function recordConversationSearchSuccess() {
|
|
43013
|
+
state$1.lastSuccessAt = (/* @__PURE__ */ new Date()).toISOString();
|
|
43014
|
+
}
|
|
43015
|
+
/** Snapshot copy — callers must not mutate live state. */
|
|
43016
|
+
function getConversationSearchHealth() {
|
|
43017
|
+
return { ...state$1 };
|
|
43018
|
+
}
|
|
43019
|
+
//#endregion
|
|
42904
43020
|
//#region ../../lib/database/conversation-embeddings-db.ts
|
|
42905
43021
|
/**
|
|
42906
43022
|
* Conversation Embeddings Sidecar Database (PAN-1395)
|
|
@@ -44096,7 +44212,12 @@ var ConversationSearchWatcher = class {
|
|
|
44096
44212
|
}).then((result) => {
|
|
44097
44213
|
if (signal.aborted || this.stopped) return;
|
|
44098
44214
|
if (result.disabled) this.log.warn(`[conversation-search] startup index skipped: ${result.unavailableReason ?? "disabled"}`);
|
|
44099
|
-
else {
|
|
44215
|
+
else if (result.errors.length > 0) {
|
|
44216
|
+
recordConversationSearchFailure(result.errors[result.errors.length - 1]?.message ?? "startup indexing reported errors");
|
|
44217
|
+
const prunedNote = result.sessionsPruned > 0 ? `, pruned ${result.sessionsPruned} stale session${result.sessionsPruned === 1 ? "" : "s"}` : "";
|
|
44218
|
+
this.log.warn(`[conversation-search] startup indexed with ${result.errors.length} error${result.errors.length === 1 ? "" : "s"} across ${result.filesScanned} file${result.filesScanned === 1 ? "" : "s"}${prunedNote}: ${result.errors[0]?.message}`);
|
|
44219
|
+
} else {
|
|
44220
|
+
recordConversationSearchSuccess();
|
|
44100
44221
|
const prunedNote = result.sessionsPruned > 0 ? `, pruned ${result.sessionsPruned} stale session${result.sessionsPruned === 1 ? "" : "s"}` : "";
|
|
44101
44222
|
this.log.log(`[conversation-search] startup indexed ${result.chunksIndexed} chunk${result.chunksIndexed === 1 ? "" : "s"} across ${result.filesScanned} file${result.filesScanned === 1 ? "" : "s"}${prunedNote}`);
|
|
44102
44223
|
}
|
|
@@ -44179,8 +44300,16 @@ var ConversationSearchWatcher = class {
|
|
|
44179
44300
|
filePath,
|
|
44180
44301
|
config: this.config,
|
|
44181
44302
|
signal
|
|
44182
|
-
}).
|
|
44183
|
-
if (
|
|
44303
|
+
}).then((result) => {
|
|
44304
|
+
if (result.disabled) return;
|
|
44305
|
+
const firstError = result.errors[0];
|
|
44306
|
+
if (firstError) recordConversationSearchFailure(firstError.message);
|
|
44307
|
+
else recordConversationSearchSuccess();
|
|
44308
|
+
}, (error) => {
|
|
44309
|
+
if (!isAbortError(error)) {
|
|
44310
|
+
recordConversationSearchFailure(error);
|
|
44311
|
+
this.log.warn(`[conversation-search] failed to index ${filePath}:`, error);
|
|
44312
|
+
}
|
|
44184
44313
|
}).finally(() => {
|
|
44185
44314
|
this.activeTasks.delete(task);
|
|
44186
44315
|
this.activeIndexers = Math.max(0, this.activeIndexers - 1);
|
|
@@ -45069,6 +45198,7 @@ const getConversationSearchStatusRoute = HttpRouter.add("GET", "/api/settings/co
|
|
|
45069
45198
|
return yield* Effect.try({
|
|
45070
45199
|
try: () => {
|
|
45071
45200
|
const config = getConversationSearchConfigSync();
|
|
45201
|
+
const health = getConversationSearchHealth();
|
|
45072
45202
|
if (!config.enabled) return jsonResponse({
|
|
45073
45203
|
enabled: false,
|
|
45074
45204
|
available: false,
|
|
@@ -45076,7 +45206,8 @@ const getConversationSearchStatusRoute = HttpRouter.add("GET", "/api/settings/co
|
|
|
45076
45206
|
dbPath: config.dbPath,
|
|
45077
45207
|
chunkCount: 0,
|
|
45078
45208
|
indexedFileCount: 0,
|
|
45079
|
-
lastIndexedAt: null
|
|
45209
|
+
lastIndexedAt: null,
|
|
45210
|
+
health
|
|
45080
45211
|
});
|
|
45081
45212
|
const provider = createConversationEmbeddingProvider({ config });
|
|
45082
45213
|
if (!provider.enabled) return jsonResponse({
|
|
@@ -45086,7 +45217,8 @@ const getConversationSearchStatusRoute = HttpRouter.add("GET", "/api/settings/co
|
|
|
45086
45217
|
dbPath: config.dbPath,
|
|
45087
45218
|
chunkCount: 0,
|
|
45088
45219
|
indexedFileCount: 0,
|
|
45089
|
-
lastIndexedAt: null
|
|
45220
|
+
lastIndexedAt: null,
|
|
45221
|
+
health
|
|
45090
45222
|
});
|
|
45091
45223
|
const db = openEmbeddingsDb(config.dbPath, dimensionsForModel(config.model));
|
|
45092
45224
|
try {
|
|
@@ -45096,7 +45228,8 @@ const getConversationSearchStatusRoute = HttpRouter.add("GET", "/api/settings/co
|
|
|
45096
45228
|
available: db.available && provider.enabled,
|
|
45097
45229
|
unavailableReason: db.unavailableReason,
|
|
45098
45230
|
dbPath: config.dbPath,
|
|
45099
|
-
...stats
|
|
45231
|
+
...stats,
|
|
45232
|
+
health
|
|
45100
45233
|
});
|
|
45101
45234
|
} finally {
|
|
45102
45235
|
db.close();
|
|
@@ -45154,13 +45287,20 @@ const postConversationSearchReindexRoute = HttpRouter.add("POST", "/api/settings
|
|
|
45154
45287
|
startedAt: Date.now()
|
|
45155
45288
|
};
|
|
45156
45289
|
try {
|
|
45157
|
-
|
|
45290
|
+
const result = await fullReindexConversationSearch({ onProgress: (p) => {
|
|
45158
45291
|
conversationReindexProgress = {
|
|
45159
45292
|
active: true,
|
|
45160
45293
|
startedAt: conversationReindexProgress.startedAt,
|
|
45161
45294
|
...p
|
|
45162
45295
|
};
|
|
45163
|
-
} })
|
|
45296
|
+
} });
|
|
45297
|
+
const firstError = result.errors[0];
|
|
45298
|
+
if (firstError) recordConversationSearchFailure(firstError.message);
|
|
45299
|
+
else if (!result.disabled) recordConversationSearchSuccess();
|
|
45300
|
+
return jsonResponse(result);
|
|
45301
|
+
} catch (error) {
|
|
45302
|
+
recordConversationSearchFailure(error);
|
|
45303
|
+
throw error;
|
|
45164
45304
|
} finally {
|
|
45165
45305
|
conversationReindexProgress = {
|
|
45166
45306
|
...conversationReindexProgress,
|
|
@@ -45858,7 +45998,7 @@ const postRallyValidateRoute = HttpRouter.add("POST", "/api/rally/validate", Eff
|
|
|
45858
45998
|
}, { status: 400 });
|
|
45859
45999
|
return yield* Effect.promise(async () => {
|
|
45860
46000
|
try {
|
|
45861
|
-
const { RallyRestApi } = await import("./rally-api-
|
|
46001
|
+
const { RallyRestApi } = await import("./rally-api-BoucQG1u.js");
|
|
45862
46002
|
const api = new RallyRestApi({
|
|
45863
46003
|
apiKey,
|
|
45864
46004
|
server: server || "https://rally1.rallydev.com"
|
|
@@ -46242,7 +46382,7 @@ const getPlanningStatusRoute = HttpRouter.add("GET", "/api/planning/:issueId/sta
|
|
|
46242
46382
|
const remoteState = loadRemoteAgentState(sessionName);
|
|
46243
46383
|
const isRemote = !!remoteState;
|
|
46244
46384
|
const vmName = remoteState?.vmName ?? "";
|
|
46245
|
-
const { getAgentStateSync } = await import("./agents-
|
|
46385
|
+
const { getAgentStateSync } = await import("./agents-DixZjXWm.js");
|
|
46246
46386
|
const agentStarting = getAgentStateSync(sessionName)?.status === "starting";
|
|
46247
46387
|
let tmuxSessionAlive = false;
|
|
46248
46388
|
if (!isRemote) try {
|
|
@@ -46386,7 +46526,7 @@ Continue the PLANNING session. Do NOT implement anything.
|
|
|
46386
46526
|
const agentCwd = workspacePath;
|
|
46387
46527
|
const harnessLaunch = await prepareHarnessLaunch("claude-code");
|
|
46388
46528
|
if (existsSync$1(outputFile)) await rename(outputFile, join(planningDir, `output-${Date.now()}.jsonl`));
|
|
46389
|
-
const { getAgentCommandSync } = await import("./settings-
|
|
46529
|
+
const { getAgentCommandSync } = await import("./settings-ByDRfuuE.js");
|
|
46390
46530
|
let msgPlanningModel = "claude-sonnet-5";
|
|
46391
46531
|
try {
|
|
46392
46532
|
msgPlanningModel = resolveModel("plan", void 0, loadConfigSync().config);
|
|
@@ -46509,7 +46649,7 @@ async function getIndexStats(rootPath, isMain) {
|
|
|
46509
46649
|
}
|
|
46510
46650
|
const getTldrStatusRoute = HttpRouter.add("GET", "/api/services/tldr/status", Effect.promise(async () => {
|
|
46511
46651
|
try {
|
|
46512
|
-
const { getTldrDaemonServiceSync } = await import("./tldr-daemon-
|
|
46652
|
+
const { getTldrDaemonServiceSync } = await import("./tldr-daemon-CRSAkhBx.js");
|
|
46513
46653
|
const projectRoot = process.cwd();
|
|
46514
46654
|
const venvPath = join(projectRoot, ".venv");
|
|
46515
46655
|
const results = [];
|
|
@@ -46554,7 +46694,7 @@ const getTldrStatusRoute = HttpRouter.add("GET", "/api/services/tldr/status", Ef
|
|
|
46554
46694
|
}));
|
|
46555
46695
|
const postTldrStartRoute = HttpRouter.add("POST", "/api/services/tldr/start", Effect.promise(async () => {
|
|
46556
46696
|
try {
|
|
46557
|
-
const { getTldrDaemonServiceSync } = await import("./tldr-daemon-
|
|
46697
|
+
const { getTldrDaemonServiceSync } = await import("./tldr-daemon-CRSAkhBx.js");
|
|
46558
46698
|
const projectRoot = process.cwd();
|
|
46559
46699
|
const venvPath = join(projectRoot, ".venv");
|
|
46560
46700
|
if (!existsSync$1(venvPath)) return jsonResponse({ error: "No .venv found in project root" }, { status: 404 });
|
|
@@ -46571,7 +46711,7 @@ const postTldrStartRoute = HttpRouter.add("POST", "/api/services/tldr/start", Ef
|
|
|
46571
46711
|
}));
|
|
46572
46712
|
const postTldrStopRoute = HttpRouter.add("POST", "/api/services/tldr/stop", Effect.promise(async () => {
|
|
46573
46713
|
try {
|
|
46574
|
-
const { getTldrDaemonServiceSync } = await import("./tldr-daemon-
|
|
46714
|
+
const { getTldrDaemonServiceSync } = await import("./tldr-daemon-CRSAkhBx.js");
|
|
46575
46715
|
const projectRoot = process.cwd();
|
|
46576
46716
|
const venvPath = join(projectRoot, ".venv");
|
|
46577
46717
|
if (!existsSync$1(venvPath)) return jsonResponse({ error: "No .venv found in project root" }, { status: 404 });
|
|
@@ -46588,7 +46728,7 @@ const postTldrStopRoute = HttpRouter.add("POST", "/api/services/tldr/stop", Effe
|
|
|
46588
46728
|
}));
|
|
46589
46729
|
const postTldrReloadRoute = HttpRouter.add("POST", "/api/services/tldr/reload", Effect.promise(async () => {
|
|
46590
46730
|
try {
|
|
46591
|
-
const { getTldrDaemonServiceSync } = await import("./tldr-daemon-
|
|
46731
|
+
const { getTldrDaemonServiceSync } = await import("./tldr-daemon-CRSAkhBx.js");
|
|
46592
46732
|
const enabled = isTldrEnabledSync();
|
|
46593
46733
|
const projectRoot = process.cwd();
|
|
46594
46734
|
const targets = [];
|
|
@@ -46940,7 +47080,7 @@ function resolveRestartGateBoot(state, nowMs) {
|
|
|
46940
47080
|
function emitThroughEventStore(snapshot) {
|
|
46941
47081
|
(async () => {
|
|
46942
47082
|
try {
|
|
46943
|
-
const { getEventStore } = await import("./event-store-
|
|
47083
|
+
const { getEventStore } = await import("./event-store-C50Qt-f1.js");
|
|
46944
47084
|
getEventStore().emitOnly({
|
|
46945
47085
|
type: "restart_gate.changed",
|
|
46946
47086
|
timestamp: (/* @__PURE__ */ new Date()).toISOString(),
|
|
@@ -47228,7 +47368,7 @@ const getVersionRoute = HttpRouter.add("GET", "/api/version", Effect.promise(asy
|
|
|
47228
47368
|
const version = await getOverdeckVersion();
|
|
47229
47369
|
let supervisorUrl = null;
|
|
47230
47370
|
try {
|
|
47231
|
-
const { getSupervisorUrlSync } = await import("./supervisor-
|
|
47371
|
+
const { getSupervisorUrlSync } = await import("./supervisor-DSSWo4M2.js");
|
|
47232
47372
|
supervisorUrl = getSupervisorUrlSync();
|
|
47233
47373
|
} catch {}
|
|
47234
47374
|
return jsonResponse({
|
|
@@ -47238,11 +47378,11 @@ const getVersionRoute = HttpRouter.add("GET", "/api/version", Effect.promise(asy
|
|
|
47238
47378
|
});
|
|
47239
47379
|
}));
|
|
47240
47380
|
const getPrerequisitesRoute = HttpRouter.add("GET", "/api/prerequisites", Effect.promise(async () => {
|
|
47241
|
-
const { checkSystemPrerequisites } = await import("./system-prerequisites-
|
|
47381
|
+
const { checkSystemPrerequisites } = await import("./system-prerequisites-Lsx0jUUV.js");
|
|
47242
47382
|
return jsonResponse(await checkSystemPrerequisites());
|
|
47243
47383
|
}));
|
|
47244
47384
|
const getSetupDiagnosticsRoute = HttpRouter.add("GET", "/api/diagnostics/setup", Effect.promise(async () => {
|
|
47245
|
-
const { collectSetupDiagnostics } = await import("./system-prerequisites-
|
|
47385
|
+
const { collectSetupDiagnostics } = await import("./system-prerequisites-Lsx0jUUV.js");
|
|
47246
47386
|
return jsonResponse(await collectSetupDiagnostics(await getOverdeckVersion()));
|
|
47247
47387
|
}));
|
|
47248
47388
|
const getSyncStatusRoute = HttpRouter.add("GET", "/api/sync-status", Effect.sync(() => {
|
|
@@ -47422,7 +47562,7 @@ const postShadowMonitorRoute = HttpRouter.add("POST", "/api/shadow/:issueId/moni
|
|
|
47422
47562
|
const projectPath = await getProjectPath(issuePrefix);
|
|
47423
47563
|
const workspacePath = join(projectPath, "workspaces", `feature-${issueLower}`);
|
|
47424
47564
|
if (!existsSync$1(workspacePath)) return jsonResponse({ error: "Workspace not found" }, { status: 404 });
|
|
47425
|
-
const { gatherArtifacts, generateBasicInference, updateInferenceDocumentSync } = await import("./shadow-engineering-
|
|
47565
|
+
const { gatherArtifacts, generateBasicInference, updateInferenceDocumentSync } = await import("./shadow-engineering-BHZKPJhq.js");
|
|
47426
47566
|
const config = {
|
|
47427
47567
|
issueId,
|
|
47428
47568
|
workspacePath,
|
|
@@ -47452,7 +47592,7 @@ const postShadowObserveRoute = HttpRouter.add("POST", "/api/shadow/:issueId/obse
|
|
|
47452
47592
|
if (!existsSync$1(workspacePath)) return jsonResponse({ error: "Workspace not found" }, { status: 404 });
|
|
47453
47593
|
const ghConfig = getGitHubConfig();
|
|
47454
47594
|
if (!ghConfig) return jsonResponse({ error: "GitHub not configured - Observer requires GitHub" }, { status: 400 });
|
|
47455
|
-
const { runObserverCycle } = await import("./shadow-engineering-
|
|
47595
|
+
const { runObserverCycle } = await import("./shadow-engineering-BHZKPJhq.js");
|
|
47456
47596
|
const firstRepo = ghConfig.repos[0];
|
|
47457
47597
|
const config = {
|
|
47458
47598
|
issueId,
|
|
@@ -47892,7 +48032,11 @@ async function searchConversationChunks(input) {
|
|
|
47892
48032
|
searchVector: (embedding, candidateLimit) => handle.db.searchVector(embedding, candidateLimit)
|
|
47893
48033
|
},
|
|
47894
48034
|
provider: handle.provider
|
|
47895
|
-
}).then((hits) => filterLiveHits(handle.db, hits)).then(
|
|
48035
|
+
}).then((hits) => filterLiveHits(handle.db, hits)).then((hits) => {
|
|
48036
|
+
recordConversationSearchSuccess();
|
|
48037
|
+
resolve(hits);
|
|
48038
|
+
}, (error) => {
|
|
48039
|
+
recordConversationSearchFailure(error);
|
|
47896
48040
|
console.error("[conversation-search] service search failed:", error);
|
|
47897
48041
|
resolve([]);
|
|
47898
48042
|
});
|
|
@@ -49618,6 +49762,7 @@ async function getConversationsPendingInputFeed(deps) {
|
|
|
49618
49762
|
name: conv.name,
|
|
49619
49763
|
title: conv.title ?? null,
|
|
49620
49764
|
issueId: conv.issueId ?? null,
|
|
49765
|
+
harness: conv.harness ?? "claude-code",
|
|
49621
49766
|
...pending ? { pendingAskUserQuestion: pending } : {},
|
|
49622
49767
|
...pendingPlan ? { pendingProposedPlan: pendingPlan } : {},
|
|
49623
49768
|
...paneChoice ? { pendingPaneChoice: paneChoice } : {}
|
|
@@ -51005,19 +51150,22 @@ async function refreshMergeStateFromGitHub(issueId, repo, prNumber) {
|
|
|
51005
51150
|
try {
|
|
51006
51151
|
const [owner, repoName] = repo.split("/");
|
|
51007
51152
|
if (!owner || !repoName) return;
|
|
51153
|
+
const { isGitHubAppConfigured, getPullRequestState } = await import("./github-app-BWziYCf3.js");
|
|
51154
|
+
const githubAppConfigured = isGitHubAppConfigured();
|
|
51155
|
+
if (!githubAppConfigured && isInGraphQLCooldown()) return;
|
|
51156
|
+
const status = await Effect.runPromise(getReviewStatus(issueId));
|
|
51157
|
+
if (!status || status.retiredAt) return;
|
|
51008
51158
|
let mergeable;
|
|
51009
51159
|
let mergeState;
|
|
51010
51160
|
let isDraft;
|
|
51011
51161
|
let checksFailed;
|
|
51012
|
-
|
|
51013
|
-
if (isGitHubAppConfigured()) {
|
|
51162
|
+
if (githubAppConfigured) {
|
|
51014
51163
|
const prState = await Effect.runPromise(getPullRequestState(owner, repoName, prNumber));
|
|
51015
51164
|
mergeable = prState.mergeable === null ? "UNKNOWN" : prState.mergeable ? "MERGEABLE" : "CONFLICTING";
|
|
51016
51165
|
mergeState = (prState.mergeableState ?? "").toUpperCase();
|
|
51017
51166
|
isDraft = prState.draft;
|
|
51018
51167
|
checksFailed = prState.checksFailed;
|
|
51019
51168
|
} else {
|
|
51020
|
-
if (isInGraphQLCooldown()) return;
|
|
51021
51169
|
const { execFile } = await import("child_process");
|
|
51022
51170
|
const { promisify } = await import("util");
|
|
51023
51171
|
const execFileAsync = promisify(execFile);
|
|
@@ -51046,8 +51194,6 @@ async function refreshMergeStateFromGitHub(issueId, repo, prNumber) {
|
|
|
51046
51194
|
isDraft = pr.isDraft === true;
|
|
51047
51195
|
checksFailed = (pr.statusCheckRollup ?? []).some((check) => !isAdvisoryCheckName(check.name ?? check.context) && FAILING_CHECK_CONCLUSIONS.has((check.conclusion || check.state || "").toUpperCase()));
|
|
51048
51196
|
}
|
|
51049
|
-
const status = await Effect.runPromise(getReviewStatus(issueId));
|
|
51050
|
-
if (!status) return;
|
|
51051
51197
|
const isConflicting = mergeable === "CONFLICTING" || mergeState === "DIRTY";
|
|
51052
51198
|
const GH_NATIVE = new Set([
|
|
51053
51199
|
"merge_conflict",
|
|
@@ -51177,19 +51323,19 @@ async function handlePullRequestPromise(payload) {
|
|
|
51177
51323
|
"closed",
|
|
51178
51324
|
"reopened"
|
|
51179
51325
|
].includes(payload.action ?? "")) try {
|
|
51180
|
-
const { listProjectsSync, resolveProjectFromIssueSync } = await import("./projects-
|
|
51326
|
+
const { listProjectsSync, resolveProjectFromIssueSync } = await import("./projects-BMuEf14J.js");
|
|
51181
51327
|
const resolved = resolveProjectFromIssueSync(issueId);
|
|
51182
51328
|
const project = resolved ? listProjectsSync().find((entry) => entry.key === resolved.projectKey)?.config : void 0;
|
|
51183
51329
|
if (project) {
|
|
51184
|
-
const { enqueueProjectResourceRefresh } = await import("./project-resource-refresh-queue-
|
|
51330
|
+
const { enqueueProjectResourceRefresh } = await import("./project-resource-refresh-queue-D2110Guc.js");
|
|
51185
51331
|
enqueueProjectResourceRefresh(project, `pull_request:${payload.action}`);
|
|
51186
51332
|
}
|
|
51187
51333
|
} catch (err) {
|
|
51188
51334
|
console.warn(`[webhook] Failed to enqueue membership refresh for ${issueId}: ${err?.message ?? err}`);
|
|
51189
51335
|
}
|
|
51190
51336
|
if (payload.action === "closed" && pr.merged === true) try {
|
|
51191
|
-
const { postMergeLifecycle } = await import("./merge-agent-
|
|
51192
|
-
const { resolveProjectFromIssueSync } = await import("./projects-
|
|
51337
|
+
const { postMergeLifecycle } = await import("./merge-agent-D-4_iQgy.js");
|
|
51338
|
+
const { resolveProjectFromIssueSync } = await import("./projects-BMuEf14J.js");
|
|
51193
51339
|
const project = resolveProjectFromIssueSync(issueId);
|
|
51194
51340
|
if (project) {
|
|
51195
51341
|
const branchName = pr.head.ref;
|
|
@@ -51202,12 +51348,17 @@ async function handlePullRequestPromise(payload) {
|
|
|
51202
51348
|
const headMayHaveMoved = [
|
|
51203
51349
|
"synchronize",
|
|
51204
51350
|
"opened",
|
|
51205
|
-
"reopened"
|
|
51351
|
+
"reopened",
|
|
51352
|
+
"closed"
|
|
51206
51353
|
].includes(payload.action ?? "");
|
|
51207
51354
|
const status = await loadAndValidateStatus(issueId, repo, pr.number, headMayHaveMoved ? void 0 : pr.head.sha);
|
|
51208
51355
|
if (!status) return;
|
|
51209
51356
|
const update = {};
|
|
51210
51357
|
let blockers = [...status.blockerReasons ?? []];
|
|
51358
|
+
if (payload.action === "closed" && pr.merged === false) {
|
|
51359
|
+
update.readyForMerge = false;
|
|
51360
|
+
update.retiredAt = (/* @__PURE__ */ new Date()).toISOString();
|
|
51361
|
+
}
|
|
51211
51362
|
if (!status.prUrl) update.prUrl = pr.html_url ?? `https://github.com/${repo}/pull/${pr.number}`;
|
|
51212
51363
|
if (!status.prNumber) update.prNumber = pr.number;
|
|
51213
51364
|
if (pr.head.sha && (!status.prHeadSha || payload.action === "synchronize")) update.prHeadSha = pr.head.sha;
|
|
@@ -51623,7 +51774,8 @@ function buildForkRequest(params) {
|
|
|
51623
51774
|
...params.handoffFocus !== void 0 ? { handoffFocus: params.handoffFocus } : {},
|
|
51624
51775
|
handoffAuthor: params.handoffAuthor,
|
|
51625
51776
|
...params.handoffAuthorModel !== void 0 ? { handoffAuthorModel: params.handoffAuthorModel } : {},
|
|
51626
|
-
...params.handoffAuthorHarness !== void 0 ? { handoffAuthorHarness: params.handoffAuthorHarness } : {}
|
|
51777
|
+
...params.handoffAuthorHarness !== void 0 ? { handoffAuthorHarness: params.handoffAuthorHarness } : {},
|
|
51778
|
+
...params.title !== void 0 ? { title: params.title } : {}
|
|
51627
51779
|
};
|
|
51628
51780
|
}
|
|
51629
51781
|
async function handleConversationHandoffDoc(name) {
|
|
@@ -51737,7 +51889,7 @@ function handleForkPipelineFailure(name, err) {
|
|
|
51737
51889
|
updateForkStatus(name, "failed", err instanceof Error ? err.message : String(err));
|
|
51738
51890
|
markConversationEnded(name);
|
|
51739
51891
|
}
|
|
51740
|
-
async function runForkPipeline(convName, parentConv, sessionId, summaryModel, forkMode = "summary", localSummaryOnly = false, includeThinkingInSummary, summaryHarness, handoffFocus, handoffAuthor = "external", handoffAuthorModel, handoffAuthorHarness) {
|
|
51892
|
+
async function runForkPipeline(convName, parentConv, sessionId, summaryModel, forkMode = "summary", localSummaryOnly = false, includeThinkingInSummary, summaryHarness, handoffFocus, handoffAuthor = "external", handoffAuthorModel, handoffAuthorHarness, customTitle) {
|
|
51741
51893
|
const conv = getConversationByName(convName);
|
|
51742
51894
|
if (!conv) throw new Error(`Fork conversation ${convName} not found`);
|
|
51743
51895
|
const parentSessionFile = await resolveForkSourceSessionFile(parentConv);
|
|
@@ -51814,7 +51966,7 @@ async function runForkPipeline(convName, parentConv, sessionId, summaryModel, fo
|
|
|
51814
51966
|
}
|
|
51815
51967
|
} else summary = await buildSummary();
|
|
51816
51968
|
updateConversationForkFallbackReason(convName, forkFallbackReason);
|
|
51817
|
-
updateConversationTitle(convName, effectiveForkMode === "handoff" ? handoffTitleFromFocus(handoffFocus, parentConv.title || parentConv.name) : `Summary Fork: ${parentConv.title || parentConv.name}
|
|
51969
|
+
updateConversationTitle(convName, customTitle ?? (effectiveForkMode === "handoff" ? handoffTitleFromFocus(handoffFocus, parentConv.title || parentConv.name) : `Summary Fork: ${parentConv.title || parentConv.name}`), "manual");
|
|
51818
51970
|
if (handoffDocPath) recordConversationHandoff(parentConv.name, convName, handoffDocPath);
|
|
51819
51971
|
updateForkStatus(convName, "spawning");
|
|
51820
51972
|
await ensureForkSessionReady(conv, sessionId, false);
|
|
@@ -51900,7 +52052,7 @@ async function recoverStuckForks() {
|
|
|
51900
52052
|
updateForkStatus(fork.name, "failed", `Parent conversation ${request.parentConversationName} not found`);
|
|
51901
52053
|
continue;
|
|
51902
52054
|
}
|
|
51903
|
-
await registerInFlightForkPipeline(runForkPipeline(fork.name, parentConv, request.sessionId, request.summaryModel, request.forkMode, request.localSummaryOnly, request.includeThinkingInSummary, request.summaryHarness, request.handoffFocus, request.handoffAuthor, request.handoffAuthorModel, request.handoffAuthorHarness));
|
|
52055
|
+
await registerInFlightForkPipeline(runForkPipeline(fork.name, parentConv, request.sessionId, request.summaryModel, request.forkMode, request.localSummaryOnly, request.includeThinkingInSummary, request.summaryHarness, request.handoffFocus, request.handoffAuthor, request.handoffAuthorModel, request.handoffAuthorHarness, request.title));
|
|
51904
52056
|
recovered += 1;
|
|
51905
52057
|
} catch (error) {
|
|
51906
52058
|
const message = error instanceof Error ? error.message : String(error);
|
|
@@ -52021,11 +52173,12 @@ async function handleConversationSummaryFork(name, body) {
|
|
|
52021
52173
|
...handoffFocus !== void 0 ? { handoffFocus } : {},
|
|
52022
52174
|
handoffAuthor,
|
|
52023
52175
|
...handoffAuthorModel !== void 0 ? { handoffAuthorModel } : {},
|
|
52024
|
-
...handoffAuthorHarness !== void 0 ? { handoffAuthorHarness } : {}
|
|
52176
|
+
...handoffAuthorHarness !== void 0 ? { handoffAuthorHarness } : {},
|
|
52177
|
+
...customTitle !== void 0 ? { title: customTitle } : {}
|
|
52025
52178
|
});
|
|
52026
52179
|
setForkRequest(newConv.name, JSON.stringify(forkRequest));
|
|
52027
52180
|
markConversationActive(newConv.name);
|
|
52028
|
-
registerInFlightForkPipeline(runForkPipeline(newConv.name, conv, sessionId, summaryModel, forkMode, localSummaryOnly, includeThinkingInSummary, summaryHarness, handoffFocus, handoffAuthor, handoffAuthorModel, handoffAuthorHarness)).catch((err) => {
|
|
52181
|
+
registerInFlightForkPipeline(runForkPipeline(newConv.name, conv, sessionId, summaryModel, forkMode, localSummaryOnly, includeThinkingInSummary, summaryHarness, handoffFocus, handoffAuthor, handoffAuthorModel, handoffAuthorHarness, customTitle)).catch((err) => {
|
|
52029
52182
|
handleForkPipelineFailure(newConv.name, err);
|
|
52030
52183
|
});
|
|
52031
52184
|
return jsonResponse({
|
|
@@ -52315,6 +52468,16 @@ const postConversationPaneChoiceRoute = HttpRouter.add("POST", "/api/conversatio
|
|
|
52315
52468
|
return jsonResponse(result.body, { status: result.status });
|
|
52316
52469
|
});
|
|
52317
52470
|
}));
|
|
52471
|
+
const postConversationPiAskAnswerRoute = HttpRouter.add("POST", "/api/conversations/:id/pi-ask-answer", Effect.gen(function* () {
|
|
52472
|
+
const originCheck = validateOrigin$1(yield* HttpServerRequest.HttpServerRequest);
|
|
52473
|
+
if (!originCheck.ok) return jsonResponse({ error: originCheck.error }, { status: 403 });
|
|
52474
|
+
const rawId = (yield* HttpRouter.params)["id"] ?? "";
|
|
52475
|
+
const body = yield* readJsonBody$10;
|
|
52476
|
+
return yield* Effect.promise(async () => {
|
|
52477
|
+
const result = await handleConversationPiAskAnswer(rawId, body);
|
|
52478
|
+
return jsonResponse(result.body, { status: result.status });
|
|
52479
|
+
});
|
|
52480
|
+
}));
|
|
52318
52481
|
const postConversationDeliveryMethodRoute = HttpRouter.add("POST", "/api/conversations/:name/delivery-method", Effect.gen(function* () {
|
|
52319
52482
|
const originCheck = validateOrigin$1(yield* HttpServerRequest.HttpServerRequest);
|
|
52320
52483
|
if (!originCheck.ok) return jsonResponse({ error: originCheck.error }, { status: 403 });
|
|
@@ -52516,7 +52679,7 @@ const getConversationAboutRoute = HttpRouter.add("GET", "/api/conversations/:nam
|
|
|
52516
52679
|
return conversationReadJson(await getConversationAbout(name, new URL(request.url, "http://localhost").searchParams.get("refresh") === "1", conversationReadDependencies));
|
|
52517
52680
|
});
|
|
52518
52681
|
}));
|
|
52519
|
-
const conversationsRouteLayer = Layer.mergeAll(getConversationsRoute, getConversationsPendingInputRoute, getArchivedConversationsRoute, getConversationRoute, getConversationHandoffDocRoute, postConversationRoute, patchConversationRoute, patchConversationMoveRoute, deleteConversationRoute, postConversationStopRoute, postConversationClearForkStateRoute, postConversationResumeRoute, postConversationSwitchModelRoute, postConversationThinkingLevelRoute, postConversationCompactRoute, postConversationAbortRoute, postConversationRestartAllRoute, postConversationArchiveRoute, postConversationUnarchiveRoute, getConversationMessagesRoute, getConversationMessageLocatorRoute, postConversationUploadImageRoute, postConversationDeleteImageRoute, postConversationMessageRoute, postConversationCodexApprovalRoute, postConversationPaneChoiceRoute, postConversationDeliveryMethodRoute, postConversationControlAckRoute, postConversationFavoriteRoute, deleteConversationFavoriteRoute, postConversationSummaryForkRoute, postConversationPlanActionRoute, getConversationDiffsRoute, getConversationDiffFullRoute, getConversationDiffTurnRoute, postConversationRetitleRoute, getConversationAboutRoute);
|
|
52682
|
+
const conversationsRouteLayer = Layer.mergeAll(getConversationsRoute, getConversationsPendingInputRoute, getArchivedConversationsRoute, getConversationRoute, getConversationHandoffDocRoute, postConversationRoute, patchConversationRoute, patchConversationMoveRoute, deleteConversationRoute, postConversationStopRoute, postConversationClearForkStateRoute, postConversationResumeRoute, postConversationSwitchModelRoute, postConversationThinkingLevelRoute, postConversationCompactRoute, postConversationAbortRoute, postConversationRestartAllRoute, postConversationArchiveRoute, postConversationUnarchiveRoute, getConversationMessagesRoute, getConversationMessageLocatorRoute, postConversationUploadImageRoute, postConversationDeleteImageRoute, postConversationMessageRoute, postConversationCodexApprovalRoute, postConversationPaneChoiceRoute, postConversationPiAskAnswerRoute, postConversationDeliveryMethodRoute, postConversationControlAckRoute, postConversationFavoriteRoute, deleteConversationFavoriteRoute, postConversationSummaryForkRoute, postConversationPlanActionRoute, getConversationDiffsRoute, getConversationDiffFullRoute, getConversationDiffTurnRoute, postConversationRetitleRoute, getConversationAboutRoute);
|
|
52520
52683
|
//#endregion
|
|
52521
52684
|
//#region routes/show.ts
|
|
52522
52685
|
/**
|
|
@@ -52723,7 +52886,7 @@ async function registerProjectFromPath(opts) {
|
|
|
52723
52886
|
registerProjectSync(key, projectConfig);
|
|
52724
52887
|
const seededContextLayer = ensureProjectLayer(fullPath);
|
|
52725
52888
|
try {
|
|
52726
|
-
const { preTrustDirectorySync } = await import("./workspace-manager-
|
|
52889
|
+
const { preTrustDirectorySync } = await import("./workspace-manager-BrbX90Rm.js");
|
|
52727
52890
|
preTrustDirectorySync(fullPath);
|
|
52728
52891
|
} catch {}
|
|
52729
52892
|
let hooksInstalled = 0;
|
|
@@ -52886,7 +53049,7 @@ init_paths();
|
|
|
52886
53049
|
init_resource_utils();
|
|
52887
53050
|
const execAsync$3 = promisify(exec);
|
|
52888
53051
|
async function getIssueDataService() {
|
|
52889
|
-
const { getSharedIssueService } = await import("./issue-service-singleton-
|
|
53052
|
+
const { getSharedIssueService } = await import("./issue-service-singleton-1Q0ER8Yc.js");
|
|
52890
53053
|
return getSharedIssueService();
|
|
52891
53054
|
}
|
|
52892
53055
|
/** Returns true if the path exists (any type). */
|
|
@@ -53288,7 +53451,7 @@ const getProjectReleaseStatusRoute = HttpRouter.add("GET", "/api/projects/:proje
|
|
|
53288
53451
|
const projectKey = (yield* HttpRouter.params)["projectKey"] ?? "";
|
|
53289
53452
|
return jsonResponse(yield* Effect.tryPromise({
|
|
53290
53453
|
try: async () => {
|
|
53291
|
-
const { fetchProjectReleaseStatus } = await import("./project-pipelines-
|
|
53454
|
+
const { fetchProjectReleaseStatus } = await import("./project-pipelines-CUsa6U59.js");
|
|
53292
53455
|
return fetchProjectReleaseStatus(projectKey);
|
|
53293
53456
|
},
|
|
53294
53457
|
catch: (err) => new Error(err instanceof Error ? err.message : String(err))
|
|
@@ -53599,7 +53762,7 @@ init_projects();
|
|
|
53599
53762
|
const getProjectMergeTrainRoute = HttpRouter.add("GET", "/api/projects/:projectKey/merge-train", httpHandler(Effect.gen(function* () {
|
|
53600
53763
|
const config = getProjectSync((yield* HttpRouter.params)["projectKey"] ?? "");
|
|
53601
53764
|
if (!config) return jsonResponse({ error: "Project not found" }, { status: 404 });
|
|
53602
|
-
const { isMergeTrainEnabledForProject } = yield* Effect.promise(() => import("./merge-sync-
|
|
53765
|
+
const { isMergeTrainEnabledForProject } = yield* Effect.promise(() => import("./merge-sync-CYGsJy0u.js"));
|
|
53603
53766
|
return jsonResponse({
|
|
53604
53767
|
value: config.merge_train ?? null,
|
|
53605
53768
|
effective: isMergeTrainEnabledForProject(config)
|
|
@@ -53613,7 +53776,7 @@ const postProjectMergeTrainRoute = HttpRouter.add("POST", "/api/projects/:projec
|
|
|
53613
53776
|
if (!project) return jsonResponse({ error: "Project not found" }, { status: 404 });
|
|
53614
53777
|
const v = (yield* readProjectJsonBody).value;
|
|
53615
53778
|
if (v !== "enabled" && v !== "disabled" && v !== null) return jsonResponse({ error: "value must be 'enabled', 'disabled', or null" }, { status: 400 });
|
|
53616
|
-
const { isMergeTrainEnabledForProject } = yield* Effect.promise(() => import("./merge-sync-
|
|
53779
|
+
const { isMergeTrainEnabledForProject } = yield* Effect.promise(() => import("./merge-sync-CYGsJy0u.js"));
|
|
53617
53780
|
yield* Effect.promise(() => setProjectMergeTrain(key, v));
|
|
53618
53781
|
const updated = { ...project };
|
|
53619
53782
|
if (v === null) delete updated.merge_train;
|
|
@@ -53640,6 +53803,7 @@ const projectsMergeTrainRouteLayer = Layer.mergeAll(getProjectMergeTrainRoute, p
|
|
|
53640
53803
|
* frontend migrates — removing them is the remove-legacy-routes item.
|
|
53641
53804
|
*/
|
|
53642
53805
|
init_projects();
|
|
53806
|
+
init_merge_eligibility();
|
|
53643
53807
|
const readUnknownJsonBody$1 = Effect.gen(function* () {
|
|
53644
53808
|
const text = yield* (yield* HttpServerRequest.HttpServerRequest).text;
|
|
53645
53809
|
try {
|
|
@@ -53674,7 +53838,7 @@ async function queueEntryForProject(key, config, enabled) {
|
|
|
53674
53838
|
queue: []
|
|
53675
53839
|
};
|
|
53676
53840
|
const projectPath = resolve(config.path);
|
|
53677
|
-
const candidates = listEligibleCandidatesByProject(projectPath);
|
|
53841
|
+
const candidates = await listEligibleCandidatesByProject(projectPath);
|
|
53678
53842
|
if (candidates.length === 0) return {
|
|
53679
53843
|
...base,
|
|
53680
53844
|
queue: []
|
|
@@ -53691,7 +53855,7 @@ async function queueEntryForProject(key, config, enabled) {
|
|
|
53691
53855
|
* not blank the whole response, so a failed project reports an empty queue.
|
|
53692
53856
|
*/
|
|
53693
53857
|
async function getMergeTrainQueuesPayload() {
|
|
53694
|
-
const { isMergeTrainEnabledForProject } = await import("./merge-sync-
|
|
53858
|
+
const { isMergeTrainEnabledForProject } = await import("./merge-sync-CYGsJy0u.js");
|
|
53695
53859
|
const projects = listProjectsSync();
|
|
53696
53860
|
return (await Promise.allSettled(projects.map(({ key, config }) => queueEntryForProject(key, config, isMergeTrainEnabledForProject(config))))).flatMap((outcome, i) => {
|
|
53697
53861
|
if (outcome.status === "fulfilled") return [outcome.value];
|
|
@@ -53709,8 +53873,8 @@ async function getMergeTrainQueuesPayload() {
|
|
|
53709
53873
|
}
|
|
53710
53874
|
/** PAN-1696 AC2: per-project generation chains across every tracked project. */
|
|
53711
53875
|
async function getMergeTrainGenerationsPayload() {
|
|
53712
|
-
const { isMergeTrainEnabledForProject } = await import("./merge-sync-
|
|
53713
|
-
const { getUatGenerationsPayload } = await import("./uat-train-
|
|
53876
|
+
const { isMergeTrainEnabledForProject } = await import("./merge-sync-CYGsJy0u.js");
|
|
53877
|
+
const { getUatGenerationsPayload } = await import("./uat-train-D7Ran2FB.js");
|
|
53714
53878
|
return (await Promise.allSettled(listProjectsSync().map(async ({ key, config }) => ({
|
|
53715
53879
|
projectKey: key,
|
|
53716
53880
|
projectName: config.name,
|
|
@@ -53719,12 +53883,12 @@ async function getMergeTrainGenerationsPayload() {
|
|
|
53719
53883
|
})))).flatMap((outcome) => outcome.status === "fulfilled" ? [outcome.value] : []);
|
|
53720
53884
|
}
|
|
53721
53885
|
async function defaultOrderedIssueIdsForProject(projectPath) {
|
|
53722
|
-
const candidates = listEligibleCandidatesByProject(projectPath);
|
|
53886
|
+
const candidates = await listEligibleCandidatesByProject(projectPath);
|
|
53723
53887
|
if (candidates.length === 0) return [];
|
|
53724
53888
|
return (await Effect.runPromise(computeMergeQueueFromCandidates(candidates, projectPath).pipe(Effect.provide(layer)))).map((item) => item.issueId);
|
|
53725
53889
|
}
|
|
53726
53890
|
async function defaultMergeOne(issueId) {
|
|
53727
|
-
const { triggerMerge } = await import("./merge-ops-
|
|
53891
|
+
const { triggerMerge } = await import("./merge-ops-Cf02szJ5.js");
|
|
53728
53892
|
const r = await triggerMerge(issueId);
|
|
53729
53893
|
return r.success ? { ok: true } : {
|
|
53730
53894
|
ok: false,
|
|
@@ -53752,13 +53916,21 @@ async function postMergeTrainMergeNextPayload(payload, deps = {}) {
|
|
|
53752
53916
|
status: 404,
|
|
53753
53917
|
body: { error: `Unknown project key: ${projectKey}` }
|
|
53754
53918
|
};
|
|
53755
|
-
const { isMergeTrainEnabledForProject } = await import("./merge-sync-
|
|
53919
|
+
const { isMergeTrainEnabledForProject } = await import("./merge-sync-CYGsJy0u.js");
|
|
53756
53920
|
if (!isMergeTrainEnabledForProject(config)) return {
|
|
53757
53921
|
status: 409,
|
|
53758
53922
|
body: { error: `merge-train is disabled for project ${projectKey}` }
|
|
53759
53923
|
};
|
|
53760
53924
|
const issueIds = (await (deps.getOrderedIssueIds ?? defaultOrderedIssueIdsForProject)(resolve(config.path))).slice(0, n);
|
|
53761
|
-
const
|
|
53925
|
+
const memberships = await (deps.gatherEligibility ?? gatherMergeEligibility)(issueIds);
|
|
53926
|
+
for (const issueId of issueIds) {
|
|
53927
|
+
const membership = memberships.get(issueId.toUpperCase());
|
|
53928
|
+
if (!membership || !isMergeEligible(membership)) return {
|
|
53929
|
+
status: 409,
|
|
53930
|
+
body: { error: `${issueId} is not merge-eligible: ${membership?.reasons.join("; ") || "pipeline membership unavailable"}` }
|
|
53931
|
+
};
|
|
53932
|
+
}
|
|
53933
|
+
const { shipMergeBatch } = await import("./merge-batch-BJjzUUL7.js");
|
|
53762
53934
|
return {
|
|
53763
53935
|
status: 200,
|
|
53764
53936
|
body: {
|
|
@@ -53788,7 +53960,7 @@ async function postMergeTrainAssemblePayload(payload) {
|
|
|
53788
53960
|
status: 404,
|
|
53789
53961
|
body: { error: `Unknown project key: ${projectKey}` }
|
|
53790
53962
|
};
|
|
53791
|
-
const { runUatTrainReconcile } = await import("./uat-train-
|
|
53963
|
+
const { runUatTrainReconcile } = await import("./uat-train-D7Ran2FB.js");
|
|
53792
53964
|
return {
|
|
53793
53965
|
status: 200,
|
|
53794
53966
|
body: { projects: [{
|
|
@@ -53800,7 +53972,7 @@ async function postMergeTrainAssemblePayload(payload) {
|
|
|
53800
53972
|
}] }
|
|
53801
53973
|
};
|
|
53802
53974
|
}
|
|
53803
|
-
const { runUatTrainReconcileAllProjects } = await import("./uat-train-
|
|
53975
|
+
const { runUatTrainReconcileAllProjects } = await import("./uat-train-D7Ran2FB.js");
|
|
53804
53976
|
return {
|
|
53805
53977
|
status: 200,
|
|
53806
53978
|
body: { projects: await runUatTrainReconcileAllProjects({ force: true }) }
|
|
@@ -53816,13 +53988,13 @@ function uatGenerationNameFromParam(param) {
|
|
|
53816
53988
|
return decoded.startsWith("uat/") ? decoded : `uat/${decoded}`;
|
|
53817
53989
|
}
|
|
53818
53990
|
async function postMergeTrainGenerationShipPayload(name, version) {
|
|
53819
|
-
const { getUatGenerationSync } = await import("./merge-sync-
|
|
53991
|
+
const { getUatGenerationSync } = await import("./merge-sync-CYGsJy0u.js");
|
|
53820
53992
|
const generation = getUatGenerationSync(name);
|
|
53821
53993
|
if (!generation) return {
|
|
53822
53994
|
status: 404,
|
|
53823
53995
|
body: { error: `No UAT generation named ${name}` }
|
|
53824
53996
|
};
|
|
53825
|
-
const { shipPromotedBatch, ShipPromotedBatchError } = await import("./ship-record-
|
|
53997
|
+
const { shipPromotedBatch, ShipPromotedBatchError } = await import("./ship-record-BlvX8-xv.js");
|
|
53826
53998
|
try {
|
|
53827
53999
|
return {
|
|
53828
54000
|
status: 200,
|
|
@@ -53850,7 +54022,7 @@ const postMergeTrainGenerationStackRoute = HttpRouter.add("POST", "/api/merge-tr
|
|
|
53850
54022
|
const authError = rejectUnsafeDashboardMutationRequest(yield* HttpServerRequest.HttpServerRequest);
|
|
53851
54023
|
if (authError) return authError;
|
|
53852
54024
|
const name = uatGenerationNameFromParam((yield* HttpRouter.params)["name"] ?? "");
|
|
53853
|
-
const { postUatGenerationStackPayload } = yield* Effect.promise(() => import("./uat-train-
|
|
54025
|
+
const { postUatGenerationStackPayload } = yield* Effect.promise(() => import("./uat-train-D7Ran2FB.js"));
|
|
53854
54026
|
const result = yield* Effect.promise(() => postUatGenerationStackPayload(name));
|
|
53855
54027
|
if (!result.ok) return jsonResponse({ error: result.error }, { status: result.status });
|
|
53856
54028
|
return jsonResponse({
|
|
@@ -53867,8 +54039,8 @@ const postMergeTrainGenerationPromoteRoute = HttpRouter.add("POST", "/api/merge-
|
|
|
53867
54039
|
const rawShipVersion = parsed.body["shipVersion"];
|
|
53868
54040
|
if (rawShipVersion !== void 0 && (typeof rawShipVersion !== "string" || !/^\d+\.\d+\.\d+$/.test(rawShipVersion))) return jsonResponse({ error: "shipVersion must look like 48.8.0" }, { status: 400 });
|
|
53869
54041
|
const name = uatGenerationNameFromParam((yield* HttpRouter.params)["name"] ?? "");
|
|
53870
|
-
const { postUatGenerationPromotePayload } = yield* Effect.promise(() => import("./uat-train-
|
|
53871
|
-
const { firePostMergeLifecycle } = yield* Effect.promise(() => import("./specialists-
|
|
54042
|
+
const { postUatGenerationPromotePayload } = yield* Effect.promise(() => import("./uat-train-D7Ran2FB.js"));
|
|
54043
|
+
const { firePostMergeLifecycle } = yield* Effect.promise(() => import("./specialists-Dx0zRTxX.js"));
|
|
53872
54044
|
const result = yield* Effect.promise(() => postUatGenerationPromotePayload(name, firePostMergeLifecycle, rawShipVersion));
|
|
53873
54045
|
if (!result.success) return jsonResponse(result, { status: result.reason === "not-found" ? 404 : result.reason === "merge-failed" ? 500 : 409 });
|
|
53874
54046
|
return jsonResponse(result);
|
|
@@ -55543,7 +55715,7 @@ function getCheckpointWorker() {
|
|
|
55543
55715
|
return worker;
|
|
55544
55716
|
}
|
|
55545
55717
|
async function runInline(operation, payload) {
|
|
55546
|
-
const { claimTranscriptRange, commitTranscriptRange, releaseTranscriptRange, getTranscriptCheckpoint, listTranscriptCheckpoints } = await import("./checkpoints-
|
|
55718
|
+
const { claimTranscriptRange, commitTranscriptRange, releaseTranscriptRange, getTranscriptCheckpoint, listTranscriptCheckpoints } = await import("./checkpoints-tm_w6Y4V.js");
|
|
55547
55719
|
switch (operation) {
|
|
55548
55720
|
case "claimTranscriptRange": return claimTranscriptRange(payload);
|
|
55549
55721
|
case "commitTranscriptRange": return commitTranscriptRange(payload);
|
|
@@ -56705,7 +56877,7 @@ function buildPendingTurn(input, fromOffset, toOffset, compressed) {
|
|
|
56705
56877
|
};
|
|
56706
56878
|
}
|
|
56707
56879
|
async function emitMemoryObservationCreated(observation, timestamp) {
|
|
56708
|
-
const { initEventStore } = await import("./event-store-
|
|
56880
|
+
const { initEventStore } = await import("./event-store-C50Qt-f1.js");
|
|
56709
56881
|
await (await initEventStore()).appendAsync({
|
|
56710
56882
|
type: "memory.observation_created",
|
|
56711
56883
|
timestamp,
|
|
@@ -57742,6 +57914,21 @@ const CLEAR_ON = new Set([
|
|
|
57742
57914
|
"StopFailure",
|
|
57743
57915
|
"PermissionDenied"
|
|
57744
57916
|
]);
|
|
57917
|
+
/**
|
|
57918
|
+
* A hook arriving from a conversation's own Claude session is affirmative
|
|
57919
|
+
* evidence the harness is alive and executing turns. If the fork/handoff
|
|
57920
|
+
* pipeline previously marked this conversation failed (the submit-confirmation
|
|
57921
|
+
* check can false-negative: pane echo of the submitted summary keeps the
|
|
57922
|
+
* composer match positive after a successful Enter), heal the verdict. The
|
|
57923
|
+
* dashboard treats forkStatus='failed' as terminal — gray dot, no composer —
|
|
57924
|
+
* so a stale verdict leaves an alive, working session uninteractable.
|
|
57925
|
+
*/
|
|
57926
|
+
function healFailedForkVerdictOnLiveActivity(conv) {
|
|
57927
|
+
if (conv.forkStatus !== "failed") return;
|
|
57928
|
+
console.log(`[hooks] clearing fork failure for ${conv.name} — hook activity proves the session is alive (was: ${conv.forkError ?? "failed"})`);
|
|
57929
|
+
clearConversationFailureState(conv.name);
|
|
57930
|
+
markConversationActive(conv.name);
|
|
57931
|
+
}
|
|
57745
57932
|
const MemoryTurnHookPayload = Schema.Struct({
|
|
57746
57933
|
session_id: Schema.String,
|
|
57747
57934
|
transcript_path: Schema.String,
|
|
@@ -58061,6 +58248,7 @@ const postPermissionEventRoute = HttpRouter.add("POST", "/api/hooks/permission-e
|
|
|
58061
58248
|
if (!sessionId || !hookEvent) return jsonResponse({ ok: true });
|
|
58062
58249
|
const conv = getConversationByClaudeSessionId(sessionId);
|
|
58063
58250
|
if (!conv) return jsonResponse({ ok: true });
|
|
58251
|
+
healFailedForkVerdictOnLiveActivity(conv);
|
|
58064
58252
|
const waiting = hookEvent === "PermissionRequest";
|
|
58065
58253
|
const clearing = CLEAR_ON.has(hookEvent);
|
|
58066
58254
|
if (!waiting && !clearing) return jsonResponse({ ok: true });
|
|
@@ -58086,6 +58274,7 @@ async function handleUserPromptSubmitBody(body, options = {}) {
|
|
|
58086
58274
|
if (!sessionId) return { ok: true };
|
|
58087
58275
|
const conv = getConversationByClaudeSessionId(sessionId);
|
|
58088
58276
|
if (!conv) return { ok: true };
|
|
58277
|
+
healFailedForkVerdictOnLiveActivity(conv);
|
|
58089
58278
|
if (conv.titleSource === "default") {
|
|
58090
58279
|
const derivedTitle = derivePromptTitle(prompt);
|
|
58091
58280
|
if (derivedTitle) updateConversationTitle(conv.name, derivedTitle, "auto");
|
|
@@ -59503,12 +59692,12 @@ async function pauseFlywheelRunForDashboard() {
|
|
|
59503
59692
|
if (before.activeRunId) try {
|
|
59504
59693
|
const { readFile } = await import("node:fs/promises");
|
|
59505
59694
|
const { join } = await import("node:path");
|
|
59506
|
-
const { getAgentDir } = await import("./agents-
|
|
59695
|
+
const { getAgentDir } = await import("./agents-DixZjXWm.js");
|
|
59507
59696
|
const sessionId = (await readFile(join(getAgentDir(FLYWHEEL_ORCHESTRATOR_AGENT_ID), "session.id"), "utf-8")).trim();
|
|
59508
59697
|
if (sessionId) await saveResumeSessionId(before.activeRunId, sessionId);
|
|
59509
59698
|
} catch {}
|
|
59510
59699
|
await setPaused(true);
|
|
59511
|
-
await import("./agents-
|
|
59700
|
+
await import("./agents-DixZjXWm.js").then(({ stopAgent }) => Effect.runPromise(stopAgent(FLYWHEEL_ORCHESTRATOR_AGENT_ID, "operator")));
|
|
59512
59701
|
return {
|
|
59513
59702
|
before,
|
|
59514
59703
|
after: await readGateSnapshot(),
|
|
@@ -59518,7 +59707,7 @@ async function pauseFlywheelRunForDashboard() {
|
|
|
59518
59707
|
async function abortFlywheelRunForDashboard() {
|
|
59519
59708
|
const candidate = await getActiveRunId();
|
|
59520
59709
|
if (!candidate) return { aborted: await resolveLiveFlywheelRunId() ?? null };
|
|
59521
|
-
const { stopAgent } = await import("./agents-
|
|
59710
|
+
const { stopAgent } = await import("./agents-DixZjXWm.js");
|
|
59522
59711
|
await Effect.runPromise(stopAgent(FLYWHEEL_ORCHESTRATOR_AGENT_ID, "operator"));
|
|
59523
59712
|
await abortFlywheelRun(candidate);
|
|
59524
59713
|
return { aborted: candidate };
|
|
@@ -60197,7 +60386,7 @@ async function getFlywheelConversationPayload() {
|
|
|
60197
60386
|
};
|
|
60198
60387
|
}
|
|
60199
60388
|
async function postFlywheelReportPayload() {
|
|
60200
|
-
const { flywheelReportCommand } = await import("./flywheel-
|
|
60389
|
+
const { flywheelReportCommand } = await import("./flywheel-CC4gE_rx.js");
|
|
60201
60390
|
await flywheelReportCommand({ cwd: process.cwd() });
|
|
60202
60391
|
return {
|
|
60203
60392
|
status: 200,
|
|
@@ -60492,7 +60681,7 @@ const postFlywheelBriefRoute = HttpRouter.add("POST", "/api/flywheel/brief", htt
|
|
|
60492
60681
|
});
|
|
60493
60682
|
})));
|
|
60494
60683
|
const getUatCandidateRoute = HttpRouter.add("GET", "/api/flywheel/uat-candidate", httpHandler(Effect.gen(function* () {
|
|
60495
|
-
const { getUatCandidatePayload } = yield* Effect.promise(() => import("./uat-train-
|
|
60684
|
+
const { getUatCandidatePayload } = yield* Effect.promise(() => import("./uat-train-D7Ran2FB.js"));
|
|
60496
60685
|
return jsonResponse(yield* Effect.promise(() => getUatCandidatePayload()));
|
|
60497
60686
|
})));
|
|
60498
60687
|
const getFlywheelStateRoute = HttpRouter.add("GET", "/api/flywheel/state", httpHandler(Effect.gen(function* () {
|
|
@@ -60703,7 +60892,7 @@ function previewBrief(book) {
|
|
|
60703
60892
|
return `${lines.join("\n")}\n`;
|
|
60704
60893
|
}
|
|
60705
60894
|
async function defaultStartOrderBook(book, project) {
|
|
60706
|
-
const { startFlywheelRun } = await import("./flywheel-
|
|
60895
|
+
const { startFlywheelRun } = await import("./flywheel-CC4gE_rx.js");
|
|
60707
60896
|
return startFlywheelRun({
|
|
60708
60897
|
cwd: resolveProjectPath(project),
|
|
60709
60898
|
orders: book.id
|
|
@@ -61853,6 +62042,7 @@ function initSchema(db) {
|
|
|
61853
62042
|
release_notes TEXT,
|
|
61854
62043
|
updated_at TEXT NOT NULL,
|
|
61855
62044
|
ready_for_merge INTEGER NOT NULL DEFAULT 0,
|
|
62045
|
+
retired_at TEXT,
|
|
61856
62046
|
auto_requeue_count INTEGER DEFAULT 0,
|
|
61857
62047
|
merge_retry_count INTEGER DEFAULT 0,
|
|
61858
62048
|
pr_url TEXT,
|
|
@@ -62396,7 +62586,7 @@ function initSchema(db) {
|
|
|
62396
62586
|
CREATE INDEX IF NOT EXISTS idx_backlog_sequence_project_rank
|
|
62397
62587
|
ON backlog_sequence(project_key, rank);
|
|
62398
62588
|
`);
|
|
62399
|
-
db.pragma(`user_version =
|
|
62589
|
+
db.pragma(`user_version = 65`);
|
|
62400
62590
|
}
|
|
62401
62591
|
/**
|
|
62402
62592
|
* Run schema migrations if the database version is older than SCHEMA_VERSION.
|
|
@@ -62408,14 +62598,14 @@ function runMigrations(db, dbPath) {
|
|
|
62408
62598
|
initSchema(db);
|
|
62409
62599
|
return;
|
|
62410
62600
|
}
|
|
62411
|
-
if (currentVersion ===
|
|
62601
|
+
if (currentVersion === 65) {
|
|
62412
62602
|
tryIdempotentDdl(db, 61, "ALTER TABLE flywheel_substrate_bugs ADD COLUMN affected_criteria TEXT");
|
|
62413
62603
|
tryIdempotentDdl(db, 61, "ALTER TABLE agents ADD COLUMN started_by TEXT");
|
|
62414
62604
|
tryIdempotentDdl(db, 62, "ALTER TABLE review_status ADD COLUMN review_cycle_history TEXT");
|
|
62415
62605
|
tryIdempotentDdl(db, 62, "ALTER TABLE review_status ADD COLUMN conflicts_since TEXT");
|
|
62416
62606
|
return;
|
|
62417
62607
|
}
|
|
62418
|
-
if (currentVersion >
|
|
62608
|
+
if (currentVersion > 65) return;
|
|
62419
62609
|
if (currentVersion < 2) db.exec(`
|
|
62420
62610
|
DELETE FROM status_history
|
|
62421
62611
|
WHERE id NOT IN (
|
|
@@ -63083,7 +63273,8 @@ function runMigrations(db, dbPath) {
|
|
|
63083
63273
|
tryIdempotentDdl(db, 64, "ALTER TABLE review_status ADD COLUMN uat_status TEXT");
|
|
63084
63274
|
tryIdempotentDdl(db, 64, "ALTER TABLE review_status ADD COLUMN uat_notes TEXT");
|
|
63085
63275
|
}
|
|
63086
|
-
|
|
63276
|
+
if (currentVersion < 65) tryIdempotentDdl(db, 65, "ALTER TABLE review_status ADD COLUMN retired_at TEXT");
|
|
63277
|
+
db.pragma(`user_version = 65`);
|
|
63087
63278
|
}
|
|
63088
63279
|
//#endregion
|
|
63089
63280
|
//#region ../../lib/database/index.ts
|
|
@@ -64408,6 +64599,7 @@ init_review_status();
|
|
|
64408
64599
|
init_event_store();
|
|
64409
64600
|
const POLL_INTERVAL_MS$2 = 6e4;
|
|
64410
64601
|
let reconcileTimer = null;
|
|
64602
|
+
const reconcileTracking = /* @__PURE__ */ new Map();
|
|
64411
64603
|
function reviewStatusPayload(event) {
|
|
64412
64604
|
if (!event.payload || typeof event.payload !== "object") return null;
|
|
64413
64605
|
const payload = event.payload;
|
|
@@ -64419,9 +64611,10 @@ async function reconcileOnce() {
|
|
|
64419
64611
|
const canonicalByIssue = /* @__PURE__ */ new Map();
|
|
64420
64612
|
for (const issueId of Object.keys(cached)) {
|
|
64421
64613
|
const canonical = getReviewStatusSync(issueId);
|
|
64422
|
-
if (!canonical) continue;
|
|
64614
|
+
if (!canonical || canonical.retiredAt) continue;
|
|
64423
64615
|
canonicalByIssue.set(issueId.toUpperCase(), canonical);
|
|
64424
64616
|
}
|
|
64617
|
+
for (const issueId of reconcileTracking.keys()) if (!canonicalByIssue.has(issueId)) reconcileTracking.delete(issueId);
|
|
64425
64618
|
const store = getEventStore();
|
|
64426
64619
|
const latestByIssue = /* @__PURE__ */ new Map();
|
|
64427
64620
|
for (const event of store.queryLatestPerIssue("review.status_changed")) {
|
|
@@ -64432,10 +64625,25 @@ async function reconcileOnce() {
|
|
|
64432
64625
|
const latest = latestByIssue.get(issueId);
|
|
64433
64626
|
const latestPayload = latest ? reviewStatusPayload(latest) : null;
|
|
64434
64627
|
const lastUpdatedAt = latestPayload?.status.updatedAt ?? "";
|
|
64435
|
-
if (lastUpdatedAt > canonical.updatedAt)
|
|
64436
|
-
|
|
64628
|
+
if (lastUpdatedAt > canonical.updatedAt) {
|
|
64629
|
+
reconcileTracking.delete(issueId);
|
|
64630
|
+
continue;
|
|
64631
|
+
}
|
|
64632
|
+
if (lastUpdatedAt === canonical.updatedAt && latestPayload && sameCanonicalReviewStatus(latestPayload.status, canonical)) {
|
|
64633
|
+
reconcileTracking.delete(issueId);
|
|
64634
|
+
continue;
|
|
64635
|
+
}
|
|
64636
|
+
const tracking = reconcileTracking.get(issueId);
|
|
64637
|
+
if (tracking?.healedUpdatedAt === canonical.updatedAt) {
|
|
64638
|
+
if (tracking.warnedUpdatedAt !== canonical.updatedAt) {
|
|
64639
|
+
console.warn(`[review-status-reconcile] NOT CONVERGING for ${issueId}: canonical=${canonical.updatedAt} event=${lastUpdatedAt}`);
|
|
64640
|
+
tracking.warnedUpdatedAt = canonical.updatedAt;
|
|
64641
|
+
}
|
|
64642
|
+
continue;
|
|
64643
|
+
}
|
|
64437
64644
|
console.log(`[review-status-reconcile] re-emitting status for ${issueId} (canonical differs from last event — healing lost status_changed)`);
|
|
64438
64645
|
emitReviewStatusChanged((event) => store.append(event), issueId, canonical);
|
|
64646
|
+
reconcileTracking.set(issueId, { healedUpdatedAt: canonical.updatedAt });
|
|
64439
64647
|
}
|
|
64440
64648
|
}
|
|
64441
64649
|
function startReviewStatusReconcileService() {
|
|
@@ -65570,15 +65778,15 @@ async function announceNewRestart(deps = {}) {
|
|
|
65570
65778
|
return true;
|
|
65571
65779
|
}
|
|
65572
65780
|
let timer$2 = null;
|
|
65573
|
-
let running = false;
|
|
65781
|
+
let running$1 = false;
|
|
65574
65782
|
let runToken = 0;
|
|
65575
65783
|
function startRestartAnnouncer(deps = {}) {
|
|
65576
|
-
if (running) return;
|
|
65577
|
-
running = true;
|
|
65784
|
+
if (running$1) return;
|
|
65785
|
+
running$1 = true;
|
|
65578
65786
|
const token = ++runToken;
|
|
65579
65787
|
let remainingBootstrapPolls = BOOTSTRAP_FAST_POLL_COUNT;
|
|
65580
65788
|
const schedule = (delayMs) => {
|
|
65581
|
-
if (!running || token !== runToken) return;
|
|
65789
|
+
if (!running$1 || token !== runToken) return;
|
|
65582
65790
|
timer$2 = setTimeout(pass, delayMs);
|
|
65583
65791
|
timer$2.unref?.();
|
|
65584
65792
|
};
|
|
@@ -65596,7 +65804,7 @@ function startRestartAnnouncer(deps = {}) {
|
|
|
65596
65804
|
pass();
|
|
65597
65805
|
}
|
|
65598
65806
|
function stopRestartAnnouncer() {
|
|
65599
|
-
running = false;
|
|
65807
|
+
running$1 = false;
|
|
65600
65808
|
runToken += 1;
|
|
65601
65809
|
if (timer$2) clearTimeout(timer$2);
|
|
65602
65810
|
timer$2 = null;
|
|
@@ -66021,7 +66229,7 @@ const RESTART_MARKER = join$1(homedir(), ".overdeck", "dashboard-restarting.json
|
|
|
66021
66229
|
* loads new content-hashed chunk filenames (no ERR_MODULE_NOT_FOUND after rebuild).
|
|
66022
66230
|
*/
|
|
66023
66231
|
async function defaultLifecycleRunner(pending) {
|
|
66024
|
-
const { postMergeLifecycle, notifyTldrDaemon } = await import("./merge-agent-
|
|
66232
|
+
const { postMergeLifecycle, notifyTldrDaemon } = await import("./merge-agent-D-4_iQgy.js");
|
|
66025
66233
|
await postMergeLifecycle(pending.issueId, pending.projectPath, pending.sourceBranch, { skipDeploy: true });
|
|
66026
66234
|
if (pending.sourceBranch) await notifyTldrDaemon(pending.projectPath, pending.sourceBranch);
|
|
66027
66235
|
}
|
|
@@ -66218,7 +66426,7 @@ function failureReason(result) {
|
|
|
66218
66426
|
return result.error ?? result.message ?? `merge returned status ${result.statusCode ?? "unknown"}`;
|
|
66219
66427
|
}
|
|
66220
66428
|
async function defaultMergeIssue(issueId) {
|
|
66221
|
-
const { triggerMerge } = await import("./merge-ops-
|
|
66429
|
+
const { triggerMerge } = await import("./merge-ops-Cf02szJ5.js");
|
|
66222
66430
|
return triggerMerge(issueId);
|
|
66223
66431
|
}
|
|
66224
66432
|
function defaultAnnounceFailure(issueId, reason) {
|
|
@@ -66373,21 +66581,113 @@ async function warnIfAppCannotMerge(deps = {}) {
|
|
|
66373
66581
|
}
|
|
66374
66582
|
}
|
|
66375
66583
|
//#endregion
|
|
66584
|
+
//#region services/conversation-rescan-scheduler.ts
|
|
66585
|
+
/**
|
|
66586
|
+
* Keeps the discovered-sessions FTS index fresh (PAN-3771 layer 2).
|
|
66587
|
+
* The Conversations-page search corpus previously only updated when someone
|
|
66588
|
+
* clicked Scan or ran `pan conv scan`, so installs that never rescanned had
|
|
66589
|
+
* weeks of invisible sessions. The scan is incremental: unchanged files are
|
|
66590
|
+
* skipped by size and mtime.
|
|
66591
|
+
*/
|
|
66592
|
+
const BOOT_DELAY_MS = 45e3;
|
|
66593
|
+
const RESCAN_INTERVAL_MS = 360 * 60 * 1e3;
|
|
66594
|
+
const LOG_PREFIX = "[conversation-rescan]";
|
|
66595
|
+
let bootTimer = null;
|
|
66596
|
+
let intervalTimer = null;
|
|
66597
|
+
let running = false;
|
|
66598
|
+
let stopped = false;
|
|
66599
|
+
async function runScanOnce(trigger) {
|
|
66600
|
+
if (running || stopped) return;
|
|
66601
|
+
running = true;
|
|
66602
|
+
try {
|
|
66603
|
+
const result = await scan({ mode: "system" });
|
|
66604
|
+
const elapsedMs = Math.round(result.durationMs);
|
|
66605
|
+
const summary = `${result.inserted} inserted, ${result.updated} updated, ${result.skipped} skipped, ${result.errors} errors`;
|
|
66606
|
+
console.log(`${LOG_PREFIX} ${trigger} scan complete: ${summary} (${elapsedMs}ms)`);
|
|
66607
|
+
} catch (error) {
|
|
66608
|
+
console.warn(`${LOG_PREFIX} ${trigger} scan failed:`, error);
|
|
66609
|
+
} finally {
|
|
66610
|
+
running = false;
|
|
66611
|
+
}
|
|
66612
|
+
}
|
|
66613
|
+
function startConversationRescanScheduler() {
|
|
66614
|
+
if (bootTimer !== null || intervalTimer !== null) return;
|
|
66615
|
+
stopped = false;
|
|
66616
|
+
bootTimer = setTimeout(() => {
|
|
66617
|
+
runScanOnce("boot");
|
|
66618
|
+
}, BOOT_DELAY_MS);
|
|
66619
|
+
if (typeof bootTimer.unref === "function") bootTimer.unref();
|
|
66620
|
+
intervalTimer = setInterval(() => {
|
|
66621
|
+
runScanOnce("interval");
|
|
66622
|
+
}, RESCAN_INTERVAL_MS);
|
|
66623
|
+
if (typeof intervalTimer.unref === "function") intervalTimer.unref();
|
|
66624
|
+
}
|
|
66625
|
+
async function stopConversationRescanScheduler() {
|
|
66626
|
+
if (bootTimer !== null) {
|
|
66627
|
+
clearTimeout(bootTimer);
|
|
66628
|
+
bootTimer = null;
|
|
66629
|
+
}
|
|
66630
|
+
if (intervalTimer !== null) {
|
|
66631
|
+
clearInterval(intervalTimer);
|
|
66632
|
+
intervalTimer = null;
|
|
66633
|
+
}
|
|
66634
|
+
stopped = true;
|
|
66635
|
+
}
|
|
66636
|
+
//#endregion
|
|
66376
66637
|
//#region services/cost-reconcile-service.ts
|
|
66638
|
+
/**
|
|
66639
|
+
* Periodic cost reconciliation delegates transcript walking and parsing to the
|
|
66640
|
+
* long DB worker lane. The main thread records returned events through the cost
|
|
66641
|
+
* write door and persists exact path/mtime/size skip verdicts for later sweeps.
|
|
66642
|
+
*/
|
|
66377
66643
|
const RECONCILE_INTERVAL_MS = 5 * 6e4;
|
|
66644
|
+
const RECONCILE_BATCH_EVENTS = 250;
|
|
66378
66645
|
let timer = null;
|
|
66379
66646
|
let inFlight$1 = null;
|
|
66380
66647
|
async function runCostReconcileOnce(reason) {
|
|
66381
66648
|
if (inFlight$1) return inFlight$1;
|
|
66382
66649
|
inFlight$1 = (async () => {
|
|
66383
|
-
const result =
|
|
66384
|
-
|
|
66650
|
+
const result = {
|
|
66651
|
+
eventsImported: 0,
|
|
66652
|
+
duplicatesSkipped: 0,
|
|
66653
|
+
cacheSkipped: 0,
|
|
66654
|
+
errors: []
|
|
66655
|
+
};
|
|
66656
|
+
const piCollected = await runDashboardDbJob("costReconcileSweep", {
|
|
66657
|
+
source: "pi",
|
|
66658
|
+
maxEvents: RECONCILE_BATCH_EVENTS
|
|
66659
|
+
}, async (progress) => {
|
|
66660
|
+
const batch = progress;
|
|
66661
|
+
for (const { event, sourceFile } of batch.events) {
|
|
66662
|
+
const recorded = await recordCostEventsThroughOverdeck([event], sourceFile);
|
|
66663
|
+
result.eventsImported += recorded.inserted;
|
|
66664
|
+
result.duplicatesSkipped += recorded.duplicates;
|
|
66665
|
+
}
|
|
66666
|
+
for (const verdict of batch.verdicts) recordSkipVerdict(verdict.path, verdict.mtimeMs, verdict.size, verdict.verdict);
|
|
66667
|
+
});
|
|
66668
|
+
result.cacheSkipped += piCollected.stats.cacheSkipped;
|
|
66669
|
+
result.errors.push(...piCollected.errors);
|
|
66670
|
+
if (result.eventsImported > 0 || result.cacheSkipped > 0 || result.errors.length > 0) console.log(`[cost-reconciler] ${reason} sweep: ${result.eventsImported} imported, ${result.cacheSkipped} cache-skipped, ${result.duplicatesSkipped} duplicate(s), ${result.errors.length} error(s)`);
|
|
66385
66671
|
if (result.errors.length > 0) for (const err of result.errors.slice(0, 5)) console.warn(`[cost-reconciler] ${err.path}: ${err.error}`);
|
|
66386
66672
|
const backfillResult = reclassifyUnknownCostEventsSync();
|
|
66387
66673
|
if (backfillResult.updated > 0) console.log(`[cost-reconciler] ${reason} UNKNOWN backfill: ${backfillResult.updated} updated`);
|
|
66388
66674
|
try {
|
|
66389
|
-
|
|
66390
|
-
|
|
66675
|
+
let imported = 0;
|
|
66676
|
+
const codexResult = await runDashboardDbJob("costReconcileSweep", {
|
|
66677
|
+
source: "codex",
|
|
66678
|
+
maxEvents: RECONCILE_BATCH_EVENTS
|
|
66679
|
+
}, async (progress) => {
|
|
66680
|
+
const batch = progress;
|
|
66681
|
+
for (const event of batch.events) {
|
|
66682
|
+
const normalized = {
|
|
66683
|
+
...event,
|
|
66684
|
+
ts: new Date(event.ts)
|
|
66685
|
+
};
|
|
66686
|
+
if (await Effect.runPromise(CostWriter.use((writer) => writer.record(normalized)).pipe(Effect.provide(CostDoorLive)))) imported++;
|
|
66687
|
+
}
|
|
66688
|
+
for (const verdict of batch.verdicts) recordSkipVerdict(verdict.path, verdict.mtimeMs, verdict.size, verdict.verdict);
|
|
66689
|
+
});
|
|
66690
|
+
console.log(`[cost-reconciler] ${reason} codex sweep: ${codexResult.stats.scanned} scanned, ${codexResult.stats.cacheSkipped} cache-skipped, ${imported} imported`);
|
|
66391
66691
|
} catch (err) {
|
|
66392
66692
|
console.warn("[cost-reconciler] codex sweep failed:", err instanceof Error ? err.message : err);
|
|
66393
66693
|
}
|
|
@@ -66721,7 +67021,7 @@ const defaultDependencies = {
|
|
|
66721
67021
|
inspect: inspectStateMigration,
|
|
66722
67022
|
ensureWorktree: ensureStateWorktree,
|
|
66723
67023
|
migrate: async (projectKey, project, signal) => {
|
|
66724
|
-
const { migrateProjectState } = await import("./state-migrate-
|
|
67024
|
+
const { migrateProjectState } = await import("./state-migrate-C2Ouyd6e.js");
|
|
66725
67025
|
await migrateProjectState(projectKey, { signal }, project);
|
|
66726
67026
|
},
|
|
66727
67027
|
clearCache: clearStateMigrationCache,
|
|
@@ -66933,7 +67233,7 @@ if (shouldStartStaleCheckRetriggerService()) {
|
|
|
66933
67233
|
}
|
|
66934
67234
|
if (process.env.OVERDECK_MODE === "desktop") (async () => {
|
|
66935
67235
|
try {
|
|
66936
|
-
const { provisionClaudeHooks } = await import("./claude-hooks-provision-
|
|
67236
|
+
const { provisionClaudeHooks } = await import("./claude-hooks-provision-CTh9zxEi.js");
|
|
66937
67237
|
const result = await provisionClaudeHooks();
|
|
66938
67238
|
if (!result.ok) console.warn(`[overdeck] Claude hook provisioning skipped: ${result.reason}`);
|
|
66939
67239
|
else if (result.changed) console.log(`[overdeck] Claude hooks provisioned: ${result.binariesSynced} scripts, registered ${result.registered.length} hook(s)${result.pruned.length ? `, pruned ${result.pruned.length} stale` : ""}`);
|
|
@@ -67176,6 +67476,8 @@ startCostReconcileService();
|
|
|
67176
67476
|
console.log("[overdeck] Cost reconciler started");
|
|
67177
67477
|
const conversationSearchWatcher = startConversationSearchWatcher();
|
|
67178
67478
|
console.log(conversationSearchWatcher ? "[overdeck] Conversation search watcher started" : "[overdeck] Conversation search watcher skipped (conversationSearch.enabled=false)");
|
|
67479
|
+
startConversationRescanScheduler();
|
|
67480
|
+
console.log("[overdeck] Conversation rescan scheduler started (boot pass + 6h interval)");
|
|
67179
67481
|
let stopResourceRefreshServices = () => void 0;
|
|
67180
67482
|
(async () => {
|
|
67181
67483
|
const store = await initEventStore();
|
|
@@ -67278,7 +67580,7 @@ const handleShutdownSignal = async (signal) => {
|
|
|
67278
67580
|
await stopAllKnowledgeViewers().catch((err) => console.warn("[knowledge-viewer] shutdown failed:", err?.message ?? err));
|
|
67279
67581
|
await stopDeaconChild().catch((err) => console.warn("[deacon-supervisor] child shutdown failed:", err?.message ?? err));
|
|
67280
67582
|
try {
|
|
67281
|
-
const { killAllGateProcessGroups } = await import("./validation-
|
|
67583
|
+
const { killAllGateProcessGroups } = await import("./validation-nSrYiYvA.js");
|
|
67282
67584
|
const reaped = killAllGateProcessGroups();
|
|
67283
67585
|
if (reaped > 0) console.log(`[overdeck] reaped ${reaped} in-flight gate process group(s)`);
|
|
67284
67586
|
} catch (err) {
|
|
@@ -67286,6 +67588,7 @@ const handleShutdownSignal = async (signal) => {
|
|
|
67286
67588
|
}
|
|
67287
67589
|
await Effect.runPromise(flushAllPendingAutoCommits()).catch((err) => console.warn("[pan-dir/auto-commit] shutdown flush failed:", err));
|
|
67288
67590
|
await stopConversationSearchWatcher().catch((err) => console.warn("[conversation-search] watcher shutdown failed:", err));
|
|
67591
|
+
await stopConversationRescanScheduler();
|
|
67289
67592
|
closeConversationSearchService();
|
|
67290
67593
|
closeMemoryFtsDatabases();
|
|
67291
67594
|
process.exit(0);
|
|
@@ -67320,7 +67623,7 @@ setTimeout(() => {
|
|
|
67320
67623
|
});
|
|
67321
67624
|
});
|
|
67322
67625
|
}, 1e3);
|
|
67323
|
-
fixStuckReadyForMerge();
|
|
67626
|
+
await fixStuckReadyForMerge();
|
|
67324
67627
|
fixStuckCommentedReviews();
|
|
67325
67628
|
reconcileStaleGitHubBlockers().then((n) => {
|
|
67326
67629
|
if (n > 0) {
|
|
@@ -67334,7 +67637,7 @@ reconcileStaleGitHubBlockers().then((n) => {
|
|
|
67334
67637
|
}).catch((err) => console.warn(`[overdeck] Startup blocker reconciliation failed: ${err.message}`));
|
|
67335
67638
|
await startProjectCiRefillAfterProjectionReady(900 * 1e3);
|
|
67336
67639
|
try {
|
|
67337
|
-
const { resetProcessingToQueued, requeueOrphanedMergingAutoMerges } = await import("./merge-sync-
|
|
67640
|
+
const { resetProcessingToQueued, requeueOrphanedMergingAutoMerges } = await import("./merge-sync-CYGsJy0u.js");
|
|
67338
67641
|
const resetCount = resetProcessingToQueued();
|
|
67339
67642
|
if (resetCount > 0) {
|
|
67340
67643
|
console.log(`[overdeck] Reset ${resetCount} stuck merge queue entries to queued`);
|
|
@@ -67368,7 +67671,7 @@ else {
|
|
|
67368
67671
|
console.log("[overdeck] Auto-merge executor started");
|
|
67369
67672
|
}
|
|
67370
67673
|
try {
|
|
67371
|
-
const { reconcileInterruptedVerifications } = await import("./verification-runner-
|
|
67674
|
+
const { reconcileInterruptedVerifications } = await import("./verification-runner-CFjAuv9u.js");
|
|
67372
67675
|
const interrupted = reconcileInterruptedVerifications();
|
|
67373
67676
|
if (interrupted > 0) console.log(`[overdeck] recovered ${interrupted} orphaned verification worker(s)`);
|
|
67374
67677
|
} catch (err) {
|