@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
|
@@ -1,55 +1,54 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import { h as loadConfigSync$1, p as init_config } from "./config-
|
|
4
|
-
import { l as init_activity_logger, o as emitActivityEntrySync } from "./activity-logger-
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
11
|
-
import { A as saveAgentStateSync, Ar as transitionIssueToInReview, K as saveAgentRuntimeState, Ut as messageAgent, W as getAgentRuntimeStateSync, _ as init_agent_state, d as decideResumeGate, g as getAgentStateSync, m as getAgentState, on as spawnAgent, p as getAgentResumeGateBlockReason, q as init_agents, u as clearYieldForResumeSync, vn as listRunningAgents } from "./agent-state-
|
|
12
|
-
import {
|
|
13
|
-
import {
|
|
14
|
-
import {
|
|
15
|
-
import { D as normalizeModelOverrideSync, E as init_model_validation } from "./auto-spawn-consent-Dc4mtM-B.js";
|
|
16
|
-
import { c as init_stack_health, n as collectDockerContainerLifecycleSnapshot, o as getWorkspaceStackHealth, r as composeProjectNameForWorkspace } from "./stack-health-BQFSJc0l.js";
|
|
1
|
+
import { $r as GitError, Ai as encodeClaudeProjectDir, Gn as extractNumberSync, Kn as extractPrefixSync, Mt as init_state_plane, On as resolveProjectFromIssueSync, Or as resolveModel, Pt as isOverdeckOwnedOnlyStatus, Qr as FsError, Ri as getOverdeckHome, Yn as parseIssueIdSync, Zn as resolveIssueIdSync, Zt as extractTeamPrefix, fn as init_projects, li as init_errors, on as getProjectSync, qn as init_issue_id, t as init_config_yaml, tn as findProjectByTeamSync, vn as listProjectsSync, zi as init_paths } from "./config-yaml-D60AnTIu.js";
|
|
2
|
+
import { St as httpHandler, at as isInternalAgentRequest, ht as rejectUnsafeDashboardMutationRequest, lt as spawnPanCli, n as _serverManagedMerges, ot as resolveRequestedStartedBy, pt as rejectUnauthorizedDashboardRequest, st as getWorkAgentLifecycleStateSync, vt as getHeaderFromMap, wt as jsonResponse } from "./specialists-DhS79T9v.js";
|
|
3
|
+
import { h as loadConfigSync$1, p as init_config } from "./config-NxI9Yl2f.js";
|
|
4
|
+
import { l as init_activity_logger, o as emitActivityEntrySync } from "./activity-logger-SlTXYCVf.js";
|
|
5
|
+
import { C as init_tmux, U as sessionExists, dt as init_child_env, j as listSessionNames, r as capturePane, ut as buildChildEnvWithoutTmuxSync } from "./tmux-wnT_hg-s.js";
|
|
6
|
+
import { d as resolveIssueWorkspaceSyncTarget, o as init_resolver } from "./resolver-C2QKOf09.js";
|
|
7
|
+
import { a as init_event_store, n as getEventStore } from "./event-store-DTns2XZP.js";
|
|
8
|
+
import { g as findPositionInQueueSync, h as computeQueuePositionFromStatusSync, i as EventStoreService } from "./issue-lifecycle-BETNVVLq.js";
|
|
9
|
+
import { o as getPricingSync, s as init_cost, t as calculateCostSync } from "./cost-DTuIRE4y.js";
|
|
10
|
+
import { i as CostWriter, t as CostDoorLive } from "./cost-3FyqKK56.js";
|
|
11
|
+
import { A as saveAgentStateSync, Ar as transitionIssueToInReview, K as saveAgentRuntimeState, Ut as messageAgent, W as getAgentRuntimeStateSync, _ as init_agent_state, d as decideResumeGate, g as getAgentStateSync, m as getAgentState, on as spawnAgent, p as getAgentResumeGateBlockReason, q as init_agents, u as clearYieldForResumeSync, vn as listRunningAgents } from "./agent-state-FABw8neJ.js";
|
|
12
|
+
import { o as getInternalTokenSync, s as init_internal_token, t as INTERNAL_TOKEN_HEADER } from "./internal-token-BeIWG_kT.js";
|
|
13
|
+
import { D as normalizeModelOverrideSync, E as init_model_validation } from "./auto-spawn-consent-BesWchEi.js";
|
|
14
|
+
import { c as init_stack_health, n as collectDockerContainerLifecycleSnapshot, o as getWorkspaceStackHealth, r as composeProjectNameForWorkspace } from "./stack-health-BKfNaqMm.js";
|
|
17
15
|
import { a as PAN_DIRNAME, i as PAN_CONTINUE_FILENAME, m as init_types } from "./types-pLpbsNto.js";
|
|
18
|
-
import { A as init_xbrief_index, M as readXBriefDocument, _ as serializeXBriefDocument, c as isPlanningComplete, d as readPlan, k as findXBriefByIssue, l as mergeRecordStatusOverrides, r as findPlan, s as init_io, v as XBRIEF_INSPECTION_POLICIES, y as init_types$1 } from "./io-
|
|
19
|
-
import { c as init_dag, i as criticalPath, t as actionableDoc } from "./dag-
|
|
20
|
-
import { d as resolveWorkspaceRepoRootsSync, i as init_project_repos } from "./project-repos
|
|
21
|
-
import { a as init_tracker_config, t as getGitHubConfig } from "./tracker-config-
|
|
22
|
-
import { n as resolveGitHubIssueSync, t as init_tracker_utils } from "./tracker-utils-
|
|
23
|
-
import { r as notifyPipelineSync, t as init_pipeline_notifier } from "./pipeline-notifier-
|
|
24
|
-
import { a as getAllActiveQueues, c as init_merge_sync } from "./merge-sync-
|
|
25
|
-
import { S as setDeaconIgnored, _ as markWorkspaceStuck, d as getReviewStatusSync, h as loadReviewStatuses, o as clearWorkspaceStuck, p as init_review_status, r as clearFeedbackDeliveryStuck, w as setReviewStatusSync, x as setAutoMerge, y as registerReviewVerdictFeedbackDelivery } from "./review-status-
|
|
26
|
-
import { E as verifyAppCanMerge, M as withConcurrencyLimit, f as init_github_app, j as init_concurrency, m as isIntegrationPermissionError } from "./github-app-
|
|
27
|
-
import { a as init_events, i as getEventsFileSizeSync, l as init_wal, o as readEventsFromByteOffsetSync, r as forEachCostEventSync, t as appendCostEventSync } from "./events-
|
|
28
|
-
import
|
|
29
|
-
import {
|
|
30
|
-
import {
|
|
31
|
-
import {
|
|
32
|
-
import {
|
|
33
|
-
import {
|
|
34
|
-
import {
|
|
35
|
-
import {
|
|
36
|
-
import {
|
|
37
|
-
import { n as
|
|
38
|
-
import {
|
|
39
|
-
import {
|
|
40
|
-
import {
|
|
41
|
-
import {
|
|
42
|
-
import {
|
|
43
|
-
import { t as
|
|
44
|
-
import {
|
|
45
|
-
import { r as
|
|
46
|
-
import {
|
|
47
|
-
import {
|
|
48
|
-
import { t as
|
|
16
|
+
import { A as init_xbrief_index, M as readXBriefDocument, _ as serializeXBriefDocument, c as isPlanningComplete, d as readPlan, k as findXBriefByIssue, l as mergeRecordStatusOverrides, r as findPlan, s as init_io, v as XBRIEF_INSPECTION_POLICIES, y as init_types$1 } from "./io-BCtZoXHo.js";
|
|
17
|
+
import { c as init_dag, i as criticalPath, t as actionableDoc } from "./dag-o-dUpw1L.js";
|
|
18
|
+
import { d as resolveWorkspaceRepoRootsSync, i as init_project_repos } from "./project-repos-CsfvLtmr.js";
|
|
19
|
+
import { a as init_tracker_config, t as getGitHubConfig } from "./tracker-config-tfAOWgng.js";
|
|
20
|
+
import { n as resolveGitHubIssueSync, t as init_tracker_utils } from "./tracker-utils-Dbg_pVZg.js";
|
|
21
|
+
import { r as notifyPipelineSync, t as init_pipeline_notifier } from "./pipeline-notifier-p190L97e.js";
|
|
22
|
+
import { a as getAllActiveQueues, c as init_merge_sync } from "./merge-sync-YLvOPAry.js";
|
|
23
|
+
import { S as setDeaconIgnored, _ as markWorkspaceStuck, d as getReviewStatusSync, h as loadReviewStatuses, o as clearWorkspaceStuck, p as init_review_status, r as clearFeedbackDeliveryStuck, w as setReviewStatusSync, x as setAutoMerge, y as registerReviewVerdictFeedbackDelivery } from "./review-status-DpniqzPT.js";
|
|
24
|
+
import { E as verifyAppCanMerge, M as withConcurrencyLimit, f as init_github_app, j as init_concurrency, m as isIntegrationPermissionError } from "./github-app-BlMSzSTw.js";
|
|
25
|
+
import { a as init_events, i as getEventsFileSizeSync, l as init_wal, o as readEventsFromByteOffsetSync, r as forEachCostEventSync, t as appendCostEventSync } from "./events-B6xW8Cpm.js";
|
|
26
|
+
import "./reconciler-caYiRnPy.js";
|
|
27
|
+
import { n as getContainersReferencingWorkspacePath, r as init_workspace_manager } from "./workspace-manager-CM8RCrSc.js";
|
|
28
|
+
import { r as init_devcontainer_renderer, t as DEVCONTAINER_DIRNAME } from "./devcontainer-renderer-BiJhwFNi.js";
|
|
29
|
+
import { a as init_jsonl_parser, t as getActiveSessionModelSync } from "./jsonl-parser-Dfs1dlYE.js";
|
|
30
|
+
import { i as findWorkspacePath } from "./archive-planning-BL1ABtW0.js";
|
|
31
|
+
import { t as handlePostRebaseVerificationDeferral } from "./merge-verification-BfJRNMiD.js";
|
|
32
|
+
import { n as deliverReviewVerdictFeedbackFromStatus } from "./review-verdict-feedback-B2ojHFH5.js";
|
|
33
|
+
import { t as createInFlightGuard } from "./in-flight-guard-B7khcBdQ.js";
|
|
34
|
+
import { a as loadWorkspaceMetadataSync, i as listWorkspaceMetadataSync } from "./workspace-metadata-Cu6yfxBS.js";
|
|
35
|
+
import { n as enrichReviewStatusFromSessions } from "./review-status-enrichment-PDI4-faj.js";
|
|
36
|
+
import { n as generateDailySummary } from "./cli-CoQou1t_.js";
|
|
37
|
+
import { g as getDiffStat, h as getDiffBase, l as spawnReviewRoleForIssue, m as getChangedFiles } from "./review-agent-BRBTm1qE.js";
|
|
38
|
+
import { n as getTldrDaemonServiceSync, r as init_tldr_daemon } from "./tldr-daemon-McqCk2X7.js";
|
|
39
|
+
import { _ as syncMainIntoWorkspace, b as gitPush, x as listGitOperationsSync, y as MainDivergedError } from "./merge-agent-C-dsN9se.js";
|
|
40
|
+
import { F as enqueueMerge, I as getAllActiveQueues$1, L as getCurrentMerge, P as dequeueMerge, z as markMergeProcessing } from "./merge-FTk4LsnM.js";
|
|
41
|
+
import { t as rebaseFeatureBranch } from "./merge-rebase-KBw4rdh3.js";
|
|
42
|
+
import { t as getReleaseSetSync } from "./release-set-DOIDz2vw.js";
|
|
43
|
+
import { r as getCachedConflictGateMergeability } from "./conflict-gate-hAUCL-un.js";
|
|
44
|
+
import { r as runVerificationForIssue } from "./verification-runner-BEq5ZF-h.js";
|
|
45
|
+
import { a as registerDurableReviewPipelineHandler, i as registerDurableReviewDispatcher, r as init_durable_review_pipeline } from "./durable-review-pipeline-Djx_lvFd.js";
|
|
46
|
+
import { t as teardownWorkspace } from "./teardown-workspace-DMwomEG1.js";
|
|
47
|
+
import { t as init_rebuild_stack } from "./rebuild-stack-CyXMrj6K.js";
|
|
49
48
|
import { basename, dirname, join, resolve, sep } from "node:path";
|
|
50
49
|
import { Cause, Effect, Layer, Option, Stream } from "effect";
|
|
51
|
-
import {
|
|
52
|
-
import {
|
|
50
|
+
import { existsSync, mkdirSync, readFileSync, readdirSync, renameSync, writeFileSync } from "fs";
|
|
51
|
+
import { join as join$1 } from "path";
|
|
53
52
|
import { homedir } from "os";
|
|
54
53
|
import { homedir as homedir$1 } from "node:os";
|
|
55
54
|
import { existsSync as existsSync$1, mkdirSync as mkdirSync$1, readFileSync as readFileSync$1, statSync as statSync$1, writeFileSync as writeFileSync$1 } from "node:fs";
|
|
@@ -104,7 +103,7 @@ async function captureInterestedAgent(state, agentId) {
|
|
|
104
103
|
try {
|
|
105
104
|
const remoteState = await readFile(join(homedir$1(), ".overdeck", "agents", agentId, "remote-state.json"), "utf-8").then((text) => JSON.parse(text)).catch(() => null);
|
|
106
105
|
if (remoteState?.location === "remote" && remoteState?.vmName) {
|
|
107
|
-
const { getRemoteAgentOutput } = await import("./remote-agents-
|
|
106
|
+
const { getRemoteAgentOutput } = await import("./remote-agents-MuXx2gWm.js");
|
|
108
107
|
stdout = await getRemoteAgentOutput(agentId, remoteState.vmName, 50);
|
|
109
108
|
} else stdout = await Effect.runPromise(capturePane(agentId, 50));
|
|
110
109
|
} catch {
|
|
@@ -937,7 +936,7 @@ const postWorkspaceContainerActionRoute = HttpRouter.add("POST", "/api/workspace
|
|
|
937
936
|
}
|
|
938
937
|
if (!workspacePath) return jsonResponse({ error: `Workspace not found for ${issueId}` }, { status: 404 });
|
|
939
938
|
if (!composeFile && ["start", "restart"].includes(action)) {
|
|
940
|
-
const { ensureDevcontainerSync } = yield* Effect.promise(() => import("./ensure-devcontainer-
|
|
939
|
+
const { ensureDevcontainerSync } = yield* Effect.promise(() => import("./ensure-devcontainer-Dk6ZMOUC.js"));
|
|
941
940
|
if (ensureDevcontainerSync({
|
|
942
941
|
workspacePath,
|
|
943
942
|
issueId
|
|
@@ -1427,10 +1426,10 @@ init_paths();
|
|
|
1427
1426
|
init_events();
|
|
1428
1427
|
init_cost();
|
|
1429
1428
|
init_errors();
|
|
1430
|
-
function getAgentsDir
|
|
1429
|
+
function getAgentsDir() {
|
|
1431
1430
|
return join$1(process.env.HOME || homedir(), ".overdeck", "agents");
|
|
1432
1431
|
}
|
|
1433
|
-
function getClaudeProjectsDir
|
|
1432
|
+
function getClaudeProjectsDir() {
|
|
1434
1433
|
return join$1(process.env.HOME || homedir(), ".claude", "projects");
|
|
1435
1434
|
}
|
|
1436
1435
|
function getProjectsYamlPath() {
|
|
@@ -1440,7 +1439,7 @@ function getProjectsYamlPath() {
|
|
|
1440
1439
|
* Infer issueId from agent directory name
|
|
1441
1440
|
* e.g., 'agent-pan-105' -> 'PAN-105', 'agent-min-663' -> 'MIN-663'
|
|
1442
1441
|
*/
|
|
1443
|
-
function inferIssueId
|
|
1442
|
+
function inferIssueId(agentDir) {
|
|
1444
1443
|
const match = agentDir.replace(/^(agent|planning)-/, "").match(/^([a-z]+)-(\d+)$/i);
|
|
1445
1444
|
if (match) return `${match[1].toUpperCase()}-${match[2]}`;
|
|
1446
1445
|
return null;
|
|
@@ -1482,7 +1481,7 @@ function resolveWorkspace(issueId) {
|
|
|
1482
1481
|
function findSessionDirsByIssue(issueId) {
|
|
1483
1482
|
const dirs = [];
|
|
1484
1483
|
const issueLower = issueId.toLowerCase();
|
|
1485
|
-
const claudeDir = getClaudeProjectsDir
|
|
1484
|
+
const claudeDir = getClaudeProjectsDir();
|
|
1486
1485
|
try {
|
|
1487
1486
|
const entries = readdirSync(claudeDir);
|
|
1488
1487
|
for (const entry of entries) if (entry.includes(`feature-${issueLower}`)) {
|
|
@@ -1559,7 +1558,7 @@ function usageToCostEvents(usages, context) {
|
|
|
1559
1558
|
*/
|
|
1560
1559
|
function getSessionDir(workspacePath) {
|
|
1561
1560
|
const sessionDirName = encodeClaudeProjectDir(workspacePath);
|
|
1562
|
-
const sessionDir = join$1(getClaudeProjectsDir
|
|
1561
|
+
const sessionDir = join$1(getClaudeProjectsDir(), sessionDirName);
|
|
1563
1562
|
if (existsSync(sessionDir)) return sessionDir;
|
|
1564
1563
|
return null;
|
|
1565
1564
|
}
|
|
@@ -1567,7 +1566,7 @@ function getSessionDir(workspacePath) {
|
|
|
1567
1566
|
* Migrate a single agent's session data
|
|
1568
1567
|
*/
|
|
1569
1568
|
function migrateAgent(agentDir, stats) {
|
|
1570
|
-
const stateFile = join$1(getAgentsDir
|
|
1569
|
+
const stateFile = join$1(getAgentsDir(), agentDir, "state.json");
|
|
1571
1570
|
if (!existsSync(stateFile)) {
|
|
1572
1571
|
stats.warnings.push({
|
|
1573
1572
|
file: stateFile,
|
|
@@ -1585,7 +1584,7 @@ function migrateAgent(agentDir, stats) {
|
|
|
1585
1584
|
});
|
|
1586
1585
|
return;
|
|
1587
1586
|
}
|
|
1588
|
-
const inferredIssueId = inferIssueId
|
|
1587
|
+
const inferredIssueId = inferIssueId(agentDir);
|
|
1589
1588
|
const context = {
|
|
1590
1589
|
agentId: agentDir,
|
|
1591
1590
|
issueId: state.issueId || inferredIssueId || "UNKNOWN",
|
|
@@ -1683,7 +1682,7 @@ function migrateAllSessionsSync() {
|
|
|
1683
1682
|
totalTokens: 0
|
|
1684
1683
|
};
|
|
1685
1684
|
console.log("Starting migration of historical session data...");
|
|
1686
|
-
const agentsDir = getAgentsDir
|
|
1685
|
+
const agentsDir = getAgentsDir();
|
|
1687
1686
|
if (!existsSync(agentsDir)) {
|
|
1688
1687
|
console.log("No agents directory found - nothing to migrate");
|
|
1689
1688
|
return stats;
|
|
@@ -1710,578 +1709,6 @@ function migrateAllSessionsSync() {
|
|
|
1710
1709
|
return stats;
|
|
1711
1710
|
}
|
|
1712
1711
|
//#endregion
|
|
1713
|
-
//#region ../../lib/costs/attribution.ts
|
|
1714
|
-
init_conversations();
|
|
1715
|
-
init_infra();
|
|
1716
|
-
const NO_ISSUE_BUCKETS = {
|
|
1717
|
-
conversations: "CONVERSATIONS",
|
|
1718
|
-
flywheel: "FLYWHEEL",
|
|
1719
|
-
unattributed: "UNATTRIBUTED"
|
|
1720
|
-
};
|
|
1721
|
-
function classifySessionBucket(input, lookup) {
|
|
1722
|
-
const conversation = lookup(input);
|
|
1723
|
-
if (!conversation) return NO_ISSUE_BUCKETS.unattributed;
|
|
1724
|
-
if (conversation.name === "flywheel-orchestrator") return NO_ISSUE_BUCKETS.flywheel;
|
|
1725
|
-
return NO_ISSUE_BUCKETS.conversations;
|
|
1726
|
-
}
|
|
1727
|
-
function reclassifyUnknownCostEventsSync() {
|
|
1728
|
-
const db = getOverdeckDatabaseSync();
|
|
1729
|
-
const rows = db.prepare(`SELECT DISTINCT session_id AS sessionId, agent_id AS agentId
|
|
1730
|
-
FROM cost_events
|
|
1731
|
-
WHERE issue_id = 'UNKNOWN'`).all();
|
|
1732
|
-
let updated = 0;
|
|
1733
|
-
const update = db.prepare(`UPDATE cost_events
|
|
1734
|
-
SET issue_id = ?
|
|
1735
|
-
WHERE issue_id = 'UNKNOWN'
|
|
1736
|
-
AND session_id IS ?
|
|
1737
|
-
AND agent_id IS ?`);
|
|
1738
|
-
for (const row of rows) {
|
|
1739
|
-
const bucket = classifySessionBucket(row, findConversationForCostSessionSync);
|
|
1740
|
-
const result = update.run(bucket, row.sessionId, row.agentId);
|
|
1741
|
-
updated += result.changes;
|
|
1742
|
-
}
|
|
1743
|
-
return { updated };
|
|
1744
|
-
}
|
|
1745
|
-
//#endregion
|
|
1746
|
-
//#region ../../lib/costs/reconciler.ts
|
|
1747
|
-
/**
|
|
1748
|
-
* Cost Reconciler — Periodic catch-up sweep for cost tracking
|
|
1749
|
-
*
|
|
1750
|
-
* The live recording hook (heartbeat-hook → record-cost-event.js) captures costs
|
|
1751
|
-
* in real time, but can miss events due to hook failures, process crashes, or
|
|
1752
|
-
* system reboots. The reconciler ensures completeness by periodically sweeping
|
|
1753
|
-
* ALL Claude transcript files and importing any events not yet in SQLite.
|
|
1754
|
-
*
|
|
1755
|
-
* v2 Architecture: Scans ~/.claude/projects/ directly instead of going through
|
|
1756
|
-
* agent state.json files. This catches everything:
|
|
1757
|
-
* - Work agent sessions (from worktree workspaces)
|
|
1758
|
-
* - Planning agent sessions (from main project dirs)
|
|
1759
|
-
* - Specialist sessions (review, test, merge)
|
|
1760
|
-
* - Interactive/manual Claude sessions
|
|
1761
|
-
*
|
|
1762
|
-
* Key properties:
|
|
1763
|
-
* - Idempotent: dedup on request_id — safe to run any number of times
|
|
1764
|
-
* - Incremental: tracks byte offset per session — only reads new bytes
|
|
1765
|
-
* - Non-destructive: never deletes from SQLite, append-only
|
|
1766
|
-
* - Catches everything: scans all transcript files regardless of source
|
|
1767
|
-
*/
|
|
1768
|
-
init_cost();
|
|
1769
|
-
init_errors();
|
|
1770
|
-
init_conversations();
|
|
1771
|
-
/**
|
|
1772
|
-
* Map a pi-reported provider string to the AIProvider union used by the pricing
|
|
1773
|
-
* layer. zai/kimi/minimax/mimo and anything unknown collapse to 'custom' (which
|
|
1774
|
-
* is how these providers are keyed in DEFAULT_PRICING).
|
|
1775
|
-
*/
|
|
1776
|
-
function piProviderToAiProvider(provider) {
|
|
1777
|
-
if (provider === "anthropic") return "anthropic";
|
|
1778
|
-
if (provider === "openai") return "openai";
|
|
1779
|
-
if (provider === "google") return "google";
|
|
1780
|
-
return "custom";
|
|
1781
|
-
}
|
|
1782
|
-
function getAgentsDir() {
|
|
1783
|
-
return join$1(process.env.HOME || homedir(), ".overdeck", "agents");
|
|
1784
|
-
}
|
|
1785
|
-
function getClaudeProjectsDir() {
|
|
1786
|
-
return join$1(process.env.HOME || homedir(), ".claude", "projects");
|
|
1787
|
-
}
|
|
1788
|
-
/**
|
|
1789
|
-
* Extract session UUID from a transcript filename.
|
|
1790
|
-
* e.g., "678c8d8d-cefe-45ca-bebc-bafe602aff93.jsonl" → "678c8d8d-cefe-45ca-bebc-bafe602aff93"
|
|
1791
|
-
*/
|
|
1792
|
-
function extractSessionId(filename) {
|
|
1793
|
-
return basename$1(filename, ".jsonl");
|
|
1794
|
-
}
|
|
1795
|
-
function resolveUnmappedSessionIssueId(input, lookup = findConversationForCostSessionSync) {
|
|
1796
|
-
return classifySessionBucket(input, lookup);
|
|
1797
|
-
}
|
|
1798
|
-
/**
|
|
1799
|
-
* Decode a Claude projects directory name back to the original cwd path.
|
|
1800
|
-
* e.g., "-home-eltmon-Projects-krux-workspaces-feature-krux-4" → "/home/eltmon/Projects/krux/workspaces/feature-krux-4"
|
|
1801
|
-
*/
|
|
1802
|
-
function decodeClaudeDirName(dirName) {
|
|
1803
|
-
return "/" + dirName.replace(/^-/, "").replace(/-/g, "/");
|
|
1804
|
-
}
|
|
1805
|
-
/**
|
|
1806
|
-
* Build a reverse index: session UUID → agent context.
|
|
1807
|
-
* Sources:
|
|
1808
|
-
* 1. sessions.json files in agent directories (authoritative — written by heartbeat hook)
|
|
1809
|
-
* 2. Agent state.json for issue/workspace context
|
|
1810
|
-
*/
|
|
1811
|
-
function buildSessionIndex() {
|
|
1812
|
-
const index = /* @__PURE__ */ new Map();
|
|
1813
|
-
const agentsDir = getAgentsDir();
|
|
1814
|
-
if (!existsSync(agentsDir)) return index;
|
|
1815
|
-
let entries;
|
|
1816
|
-
try {
|
|
1817
|
-
entries = readdirSync(agentsDir);
|
|
1818
|
-
} catch {
|
|
1819
|
-
return index;
|
|
1820
|
-
}
|
|
1821
|
-
for (const agentDir of entries) {
|
|
1822
|
-
const agentPath = join$1(agentsDir, agentDir);
|
|
1823
|
-
const sessionsFile = join$1(agentPath, "sessions.json");
|
|
1824
|
-
let sessionIds = [];
|
|
1825
|
-
if (existsSync(sessionsFile)) try {
|
|
1826
|
-
sessionIds = JSON.parse(readFileSync(sessionsFile, "utf-8"));
|
|
1827
|
-
} catch {}
|
|
1828
|
-
const stateFile = join$1(agentPath, "state.json");
|
|
1829
|
-
let issueId = inferIssueId(agentDir);
|
|
1830
|
-
let stateRole;
|
|
1831
|
-
if (existsSync(stateFile)) try {
|
|
1832
|
-
const state = JSON.parse(readFileSync(stateFile, "utf-8"));
|
|
1833
|
-
if (state.issueId) issueId = state.issueId;
|
|
1834
|
-
if (state.role) stateRole = state.role;
|
|
1835
|
-
} catch {}
|
|
1836
|
-
let sessionType = stateRole || "work";
|
|
1837
|
-
const reviewSubRole = agentDir.match(/-review-(security|correctness|performance|requirements)$/i)?.[1]?.toLowerCase();
|
|
1838
|
-
if (reviewSubRole) sessionType = `review.${reviewSubRole}`;
|
|
1839
|
-
else if (agentDir.startsWith("planning-")) sessionType = "planning";
|
|
1840
|
-
else if (agentDir.includes("review")) sessionType = "review";
|
|
1841
|
-
else if (agentDir.includes("test")) sessionType = "test";
|
|
1842
|
-
else if (agentDir.includes("merge")) sessionType = "merge";
|
|
1843
|
-
for (const sid of sessionIds) index.set(sid, {
|
|
1844
|
-
agentId: agentDir,
|
|
1845
|
-
issueId: issueId ?? resolveUnmappedSessionIssueId({
|
|
1846
|
-
sessionId: sid,
|
|
1847
|
-
agentId: agentDir
|
|
1848
|
-
}),
|
|
1849
|
-
sessionType
|
|
1850
|
-
});
|
|
1851
|
-
}
|
|
1852
|
-
return index;
|
|
1853
|
-
}
|
|
1854
|
-
/**
|
|
1855
|
-
* Infer issue ID from a decoded path.
|
|
1856
|
-
* Looks for patterns like "feature-min-787", "feature/pan-208", etc.
|
|
1857
|
-
*/
|
|
1858
|
-
function inferIssueFromPath(decodedPath) {
|
|
1859
|
-
const match = decodedPath.match(/(?:feature[-/])?(pan|min|aud|krux|cli)[-/](\d+)/i);
|
|
1860
|
-
if (match) return `${match[1].toUpperCase()}-${match[2]}`;
|
|
1861
|
-
return null;
|
|
1862
|
-
}
|
|
1863
|
-
/**
|
|
1864
|
-
* Infer issue ID from agent directory name.
|
|
1865
|
-
* e.g., 'agent-pan-105' → 'PAN-105', 'planning-min-663' → 'MIN-663'
|
|
1866
|
-
*/
|
|
1867
|
-
function inferIssueId(agentDir) {
|
|
1868
|
-
const match = agentDir.replace(/^(agent|planning|specialist)-/, "").match(/^(?:.*-)?(pan|min|aud|krux|cli)-(\d+)$/i);
|
|
1869
|
-
if (match) return `${match[1].toUpperCase()}-${match[2]}`;
|
|
1870
|
-
return null;
|
|
1871
|
-
}
|
|
1872
|
-
function getSessionOffset(_sessionId) {
|
|
1873
|
-
return 0;
|
|
1874
|
-
}
|
|
1875
|
-
function saveSessionOffset(sessionId, byteOffset, newEvents, agentId, issueId, transcriptPath) {}
|
|
1876
|
-
/**
|
|
1877
|
-
* Read new bytes from a transcript file starting at the given offset.
|
|
1878
|
-
*/
|
|
1879
|
-
function readNewBytes(filePath, fromOffset) {
|
|
1880
|
-
let fd;
|
|
1881
|
-
try {
|
|
1882
|
-
fd = openSync(filePath, "r");
|
|
1883
|
-
} catch {
|
|
1884
|
-
return null;
|
|
1885
|
-
}
|
|
1886
|
-
try {
|
|
1887
|
-
const stat = fstatSync(fd);
|
|
1888
|
-
if (stat.size <= fromOffset) return {
|
|
1889
|
-
content: "",
|
|
1890
|
-
newSize: stat.size
|
|
1891
|
-
};
|
|
1892
|
-
const bytesToRead = stat.size - fromOffset;
|
|
1893
|
-
const buffer = Buffer.alloc(bytesToRead);
|
|
1894
|
-
readSync(fd, buffer, 0, bytesToRead, fromOffset);
|
|
1895
|
-
return {
|
|
1896
|
-
content: buffer.toString("utf-8"),
|
|
1897
|
-
newSize: stat.size
|
|
1898
|
-
};
|
|
1899
|
-
} finally {
|
|
1900
|
-
closeSync(fd);
|
|
1901
|
-
}
|
|
1902
|
-
}
|
|
1903
|
-
/**
|
|
1904
|
-
* Parse transcript content and extract cost events.
|
|
1905
|
-
* Only processes assistant messages with usage data and a requestId.
|
|
1906
|
-
*/
|
|
1907
|
-
function extractCostEvents(content, agentId, issueId, sessionType, sessionId) {
|
|
1908
|
-
const events = [];
|
|
1909
|
-
const lines = content.split("\n");
|
|
1910
|
-
for (const line of lines) {
|
|
1911
|
-
if (!line.trim()) continue;
|
|
1912
|
-
try {
|
|
1913
|
-
const entry = JSON.parse(line);
|
|
1914
|
-
if (entry.type !== "assistant" || !entry.message?.usage) continue;
|
|
1915
|
-
const requestId = entry.requestId ?? void 0;
|
|
1916
|
-
const usage = entry.message.usage;
|
|
1917
|
-
const model = entry.message.model || "claude-sonnet-4";
|
|
1918
|
-
const inputTokens = usage.input_tokens || 0;
|
|
1919
|
-
const outputTokens = usage.output_tokens || 0;
|
|
1920
|
-
const cacheReadTokens = usage.cache_read_input_tokens || 0;
|
|
1921
|
-
const cacheWriteTokens = usage.cache_creation_input_tokens || 0;
|
|
1922
|
-
if (inputTokens === 0 && outputTokens === 0 && cacheReadTokens === 0 && cacheWriteTokens === 0) continue;
|
|
1923
|
-
let provider = "anthropic";
|
|
1924
|
-
if (model.includes("gpt")) provider = "openai";
|
|
1925
|
-
else if (model.includes("gemini")) provider = "google";
|
|
1926
|
-
else if (model.includes("kimi")) provider = "custom";
|
|
1927
|
-
else if (model.toLowerCase().startsWith("minimax")) provider = "custom";
|
|
1928
|
-
const pricingModel = model.replace(/^(?:oai|cx|go)@/, "");
|
|
1929
|
-
const pricing = getPricingSync(provider, pricingModel);
|
|
1930
|
-
if (!pricing) continue;
|
|
1931
|
-
const cost = calculateCostSync({
|
|
1932
|
-
inputTokens,
|
|
1933
|
-
outputTokens,
|
|
1934
|
-
cacheReadTokens,
|
|
1935
|
-
cacheWriteTokens,
|
|
1936
|
-
cacheTTL: "5m"
|
|
1937
|
-
}, pricing);
|
|
1938
|
-
const timestamp = entry.timestamp || entry.ts || entry.created_at || (/* @__PURE__ */ new Date()).toISOString();
|
|
1939
|
-
events.push({
|
|
1940
|
-
ts: timestamp,
|
|
1941
|
-
type: "cost",
|
|
1942
|
-
agentId,
|
|
1943
|
-
issueId,
|
|
1944
|
-
sessionType,
|
|
1945
|
-
provider,
|
|
1946
|
-
model,
|
|
1947
|
-
input: inputTokens,
|
|
1948
|
-
output: outputTokens,
|
|
1949
|
-
cacheRead: cacheReadTokens,
|
|
1950
|
-
cacheWrite: cacheWriteTokens,
|
|
1951
|
-
cost,
|
|
1952
|
-
requestId,
|
|
1953
|
-
sessionId
|
|
1954
|
-
});
|
|
1955
|
-
} catch {}
|
|
1956
|
-
}
|
|
1957
|
-
return events;
|
|
1958
|
-
}
|
|
1959
|
-
/**
|
|
1960
|
-
* Parse Pi/oh-my-pi transcript content and extract cost events (PAN-1935).
|
|
1961
|
-
*
|
|
1962
|
-
* Pi's `message.usage` uses short camelCase keys (`input`, `output`,
|
|
1963
|
-
* `cacheRead`, `cacheWrite`) and the real model/provider live on `message`
|
|
1964
|
-
* (not inferred from a Claude-style `model` field). Cost is always computed
|
|
1965
|
-
* from tokens × pricing because pi reports `cost.total = 0` for non-Anthropic
|
|
1966
|
-
* providers. Exported for unit testing.
|
|
1967
|
-
*/
|
|
1968
|
-
function extractPiCostEvents(content, agentId, issueId, sessionType, sessionId) {
|
|
1969
|
-
const events = [];
|
|
1970
|
-
for (const line of content.split("\n")) {
|
|
1971
|
-
if (!line.trim()) continue;
|
|
1972
|
-
let entry;
|
|
1973
|
-
try {
|
|
1974
|
-
entry = JSON.parse(line);
|
|
1975
|
-
} catch {
|
|
1976
|
-
continue;
|
|
1977
|
-
}
|
|
1978
|
-
if (entry.type !== "message") continue;
|
|
1979
|
-
const usage = entry.message?.usage;
|
|
1980
|
-
if (!usage) continue;
|
|
1981
|
-
const inputTokens = usage.input ?? 0;
|
|
1982
|
-
const outputTokens = usage.output ?? 0;
|
|
1983
|
-
const cacheReadTokens = usage.cacheRead ?? 0;
|
|
1984
|
-
const cacheWriteTokens = usage.cacheWrite ?? 0;
|
|
1985
|
-
if (inputTokens === 0 && outputTokens === 0 && cacheReadTokens === 0 && cacheWriteTokens === 0) continue;
|
|
1986
|
-
const model = entry.message?.model || "unknown";
|
|
1987
|
-
const provider = piProviderToAiProvider(entry.message?.provider);
|
|
1988
|
-
const pricing = getPricingSync(provider, model.replace(/^(?:oai|cx|go)@/, ""));
|
|
1989
|
-
if (!pricing) continue;
|
|
1990
|
-
const cost = calculateCostSync({
|
|
1991
|
-
inputTokens,
|
|
1992
|
-
outputTokens,
|
|
1993
|
-
cacheReadTokens,
|
|
1994
|
-
cacheWriteTokens,
|
|
1995
|
-
cacheTTL: "5m"
|
|
1996
|
-
}, pricing);
|
|
1997
|
-
const requestId = entry.message?.responseId ?? (entry.id ? `${sessionId}#${entry.id}` : void 0);
|
|
1998
|
-
const timestamp = entry.timestamp || (/* @__PURE__ */ new Date()).toISOString();
|
|
1999
|
-
events.push({
|
|
2000
|
-
ts: timestamp,
|
|
2001
|
-
type: "cost",
|
|
2002
|
-
agentId,
|
|
2003
|
-
issueId,
|
|
2004
|
-
sessionType,
|
|
2005
|
-
provider,
|
|
2006
|
-
model,
|
|
2007
|
-
input: inputTokens,
|
|
2008
|
-
output: outputTokens,
|
|
2009
|
-
cacheRead: cacheReadTokens,
|
|
2010
|
-
cacheWrite: cacheWriteTokens,
|
|
2011
|
-
cost,
|
|
2012
|
-
requestId,
|
|
2013
|
-
sessionId
|
|
2014
|
-
});
|
|
2015
|
-
}
|
|
2016
|
-
return events;
|
|
2017
|
-
}
|
|
2018
|
-
/**
|
|
2019
|
-
* Pi session transcripts in an agent dir. Pi transcripts begin with a
|
|
2020
|
-
* `{"type":"session","version":3,...}` header; we detect that and skip the
|
|
2021
|
-
* sibling non-transcripts (activity.jsonl, cost-events.jsonl, pending-events).
|
|
2022
|
-
*/
|
|
2023
|
-
function findPiTranscriptFiles(agentDir) {
|
|
2024
|
-
let files;
|
|
2025
|
-
try {
|
|
2026
|
-
files = readdirSync(agentDir).filter((f) => f.endsWith(".jsonl"));
|
|
2027
|
-
} catch {
|
|
2028
|
-
return [];
|
|
2029
|
-
}
|
|
2030
|
-
const transcripts = [];
|
|
2031
|
-
for (const f of files) {
|
|
2032
|
-
if (f === "activity.jsonl" || f === "cost-events.jsonl" || f === "pending-events.jsonl") continue;
|
|
2033
|
-
const full = join$1(agentDir, f);
|
|
2034
|
-
try {
|
|
2035
|
-
const fd = openSync(full, "r");
|
|
2036
|
-
const buf = Buffer.alloc(128);
|
|
2037
|
-
const bytesRead = readSync(fd, buf, 0, 128, 0);
|
|
2038
|
-
closeSync(fd);
|
|
2039
|
-
const head = buf.toString("utf-8", 0, bytesRead);
|
|
2040
|
-
if (/"type"\s*:\s*"session"/.test(head)) transcripts.push(full);
|
|
2041
|
-
} catch {}
|
|
2042
|
-
}
|
|
2043
|
-
return transcripts;
|
|
2044
|
-
}
|
|
2045
|
-
/**
|
|
2046
|
-
* Sweep pi session transcripts under the per-agent dirs (~/.overdeck/agents)
|
|
2047
|
-
* and import their cost events through the same Overdeck cost writer the Claude
|
|
2048
|
-
* path uses (PAN-1935).
|
|
2049
|
-
* Independent of the pi extension hook, so it captures cost even when the
|
|
2050
|
-
* extension emits null usage or the wrong model label.
|
|
2051
|
-
*/
|
|
2052
|
-
async function reconcilePiTranscripts() {
|
|
2053
|
-
const result = {
|
|
2054
|
-
sessionsScanned: 0,
|
|
2055
|
-
sessionsWithNewData: 0,
|
|
2056
|
-
eventsImported: 0,
|
|
2057
|
-
duplicatesSkipped: 0,
|
|
2058
|
-
errors: [],
|
|
2059
|
-
earliestEventTs: null,
|
|
2060
|
-
latestEventTs: null
|
|
2061
|
-
};
|
|
2062
|
-
const agentsDir = getAgentsDir();
|
|
2063
|
-
if (!existsSync(agentsDir)) return result;
|
|
2064
|
-
let agentDirs;
|
|
2065
|
-
try {
|
|
2066
|
-
agentDirs = readdirSync(agentsDir);
|
|
2067
|
-
} catch {
|
|
2068
|
-
return result;
|
|
2069
|
-
}
|
|
2070
|
-
for (const agentDirName of agentDirs) {
|
|
2071
|
-
const agentPath = join$1(agentsDir, agentDirName);
|
|
2072
|
-
let issueId = inferIssueId(agentDirName);
|
|
2073
|
-
let sessionType = "work";
|
|
2074
|
-
const stateFile = join$1(agentPath, "state.json");
|
|
2075
|
-
if (existsSync(stateFile)) try {
|
|
2076
|
-
const st = JSON.parse(readFileSync(stateFile, "utf-8"));
|
|
2077
|
-
if (st.issueId) issueId = st.issueId;
|
|
2078
|
-
if (st.role) sessionType = st.role;
|
|
2079
|
-
} catch {}
|
|
2080
|
-
if (agentDirName.startsWith("planning-")) sessionType = "planning";
|
|
2081
|
-
const transcripts = findPiTranscriptFiles(agentPath);
|
|
2082
|
-
for (const transcriptPath of transcripts) {
|
|
2083
|
-
const sessionId = basename$1(transcriptPath, ".jsonl");
|
|
2084
|
-
const resolvedIssueId = issueId ?? resolveUnmappedSessionIssueId({
|
|
2085
|
-
sessionId,
|
|
2086
|
-
agentId: agentDirName
|
|
2087
|
-
});
|
|
2088
|
-
result.sessionsScanned++;
|
|
2089
|
-
try {
|
|
2090
|
-
const events = extractPiCostEvents(readFileSync(transcriptPath, "utf-8"), agentDirName, resolvedIssueId, sessionType, sessionId);
|
|
2091
|
-
if (events.length === 0) continue;
|
|
2092
|
-
result.sessionsWithNewData++;
|
|
2093
|
-
const { inserted, duplicates, earliestEventTs, latestEventTs } = await recordCostEventsThroughOverdeck$1(events, `reconciler:${transcriptPath}`);
|
|
2094
|
-
result.eventsImported += inserted;
|
|
2095
|
-
result.duplicatesSkipped += duplicates;
|
|
2096
|
-
mergeCoverage(result, {
|
|
2097
|
-
earliestEventTs,
|
|
2098
|
-
latestEventTs
|
|
2099
|
-
});
|
|
2100
|
-
} catch (err) {
|
|
2101
|
-
result.errors.push({
|
|
2102
|
-
path: transcriptPath,
|
|
2103
|
-
error: err instanceof Error ? err.message : String(err)
|
|
2104
|
-
});
|
|
2105
|
-
}
|
|
2106
|
-
}
|
|
2107
|
-
}
|
|
2108
|
-
return result;
|
|
2109
|
-
}
|
|
2110
|
-
function toOverdeckCostEvent$1(event, sourceFile) {
|
|
2111
|
-
return {
|
|
2112
|
-
ts: new Date(event.ts),
|
|
2113
|
-
issueId: event.issueId ? event.issueId : null,
|
|
2114
|
-
agentId: event.agentId ?? null,
|
|
2115
|
-
sessionId: event.sessionId ?? null,
|
|
2116
|
-
sessionType: event.sessionType ?? null,
|
|
2117
|
-
provider: event.provider ?? null,
|
|
2118
|
-
model: event.model ?? null,
|
|
2119
|
-
input: event.input ?? 0,
|
|
2120
|
-
output: event.output ?? 0,
|
|
2121
|
-
cacheRead: event.cacheRead ?? 0,
|
|
2122
|
-
cacheWrite: event.cacheWrite ?? 0,
|
|
2123
|
-
cost: event.cost ?? 0,
|
|
2124
|
-
requestId: event.requestId ?? null,
|
|
2125
|
-
sourceFile
|
|
2126
|
-
};
|
|
2127
|
-
}
|
|
2128
|
-
async function recordCostEventsThroughOverdeck$1(events, sourceFile, opts = {}) {
|
|
2129
|
-
let inserted = 0;
|
|
2130
|
-
let duplicates = 0;
|
|
2131
|
-
let earliestEventTs = null;
|
|
2132
|
-
let latestEventTs = null;
|
|
2133
|
-
for (const event of events) if (await Effect.runPromise(CostWriter.use((writer) => writer.record(toOverdeckCostEvent$1(event, sourceFile), { dryRun: opts.dryRun })).pipe(Effect.provide(CostDoorLive)))) {
|
|
2134
|
-
inserted++;
|
|
2135
|
-
const iso = new Date(event.ts).toISOString();
|
|
2136
|
-
if (earliestEventTs == null || iso < earliestEventTs) earliestEventTs = iso;
|
|
2137
|
-
if (latestEventTs == null || iso > latestEventTs) latestEventTs = iso;
|
|
2138
|
-
} else duplicates++;
|
|
2139
|
-
return {
|
|
2140
|
-
inserted,
|
|
2141
|
-
duplicates,
|
|
2142
|
-
earliestEventTs,
|
|
2143
|
-
latestEventTs
|
|
2144
|
-
};
|
|
2145
|
-
}
|
|
2146
|
-
function mergeCoverage(result, coverage) {
|
|
2147
|
-
if (coverage.earliestEventTs != null && (result.earliestEventTs == null || coverage.earliestEventTs < result.earliestEventTs)) result.earliestEventTs = coverage.earliestEventTs;
|
|
2148
|
-
if (coverage.latestEventTs != null && (result.latestEventTs == null || coverage.latestEventTs > result.latestEventTs)) result.latestEventTs = coverage.latestEventTs;
|
|
2149
|
-
}
|
|
2150
|
-
async function reconcilePromise(opts = {}) {
|
|
2151
|
-
const result = {
|
|
2152
|
-
sessionsScanned: 0,
|
|
2153
|
-
sessionsWithNewData: 0,
|
|
2154
|
-
eventsImported: 0,
|
|
2155
|
-
duplicatesSkipped: 0,
|
|
2156
|
-
errors: [],
|
|
2157
|
-
earliestEventTs: null,
|
|
2158
|
-
latestEventTs: null
|
|
2159
|
-
};
|
|
2160
|
-
const claudeProjectsDir = getClaudeProjectsDir();
|
|
2161
|
-
if (!existsSync(claudeProjectsDir)) return result;
|
|
2162
|
-
const sessionIndex = buildSessionIndex();
|
|
2163
|
-
let projectDirs;
|
|
2164
|
-
try {
|
|
2165
|
-
projectDirs = readdirSync(claudeProjectsDir);
|
|
2166
|
-
} catch {
|
|
2167
|
-
return result;
|
|
2168
|
-
}
|
|
2169
|
-
for (const dirName of projectDirs) {
|
|
2170
|
-
const projectDir = join$1(claudeProjectsDir, dirName);
|
|
2171
|
-
try {
|
|
2172
|
-
fstatSync(openSync(projectDir, "r"));
|
|
2173
|
-
} catch {}
|
|
2174
|
-
const pathIssueId = inferIssueFromPath(decodeClaudeDirName(dirName));
|
|
2175
|
-
let files;
|
|
2176
|
-
try {
|
|
2177
|
-
files = readdirSync(projectDir).filter((f) => f.endsWith(".jsonl"));
|
|
2178
|
-
} catch {
|
|
2179
|
-
continue;
|
|
2180
|
-
}
|
|
2181
|
-
for (const file of files) {
|
|
2182
|
-
const sessionId = extractSessionId(file);
|
|
2183
|
-
const transcriptPath = join$1(projectDir, file);
|
|
2184
|
-
result.sessionsScanned++;
|
|
2185
|
-
try {
|
|
2186
|
-
const mapping = sessionIndex.get(sessionId);
|
|
2187
|
-
const agentId = mapping?.agentId || "unattributed";
|
|
2188
|
-
const issueId = mapping?.issueId || pathIssueId || resolveUnmappedSessionIssueId({
|
|
2189
|
-
sessionId,
|
|
2190
|
-
agentId
|
|
2191
|
-
});
|
|
2192
|
-
const sessionType = mapping?.sessionType || "implementation";
|
|
2193
|
-
const lastOffset = getSessionOffset(sessionId);
|
|
2194
|
-
const readResult = readNewBytes(transcriptPath, lastOffset);
|
|
2195
|
-
if (!readResult || !readResult.content) {
|
|
2196
|
-
if (!opts.dryRun && readResult && readResult.newSize > lastOffset) saveSessionOffset(sessionId, readResult.newSize, 0, agentId, issueId, transcriptPath);
|
|
2197
|
-
continue;
|
|
2198
|
-
}
|
|
2199
|
-
const events = extractCostEvents(readResult.content, agentId, issueId, sessionType, sessionId);
|
|
2200
|
-
if (events.length === 0) {
|
|
2201
|
-
if (!opts.dryRun) saveSessionOffset(sessionId, readResult.newSize, 0, agentId, issueId, transcriptPath);
|
|
2202
|
-
continue;
|
|
2203
|
-
}
|
|
2204
|
-
result.sessionsWithNewData++;
|
|
2205
|
-
const { inserted, duplicates, earliestEventTs, latestEventTs } = await recordCostEventsThroughOverdeck$1(events, `reconciler:${transcriptPath}`, { dryRun: opts.dryRun });
|
|
2206
|
-
result.eventsImported += inserted;
|
|
2207
|
-
result.duplicatesSkipped += duplicates;
|
|
2208
|
-
mergeCoverage(result, {
|
|
2209
|
-
earliestEventTs,
|
|
2210
|
-
latestEventTs
|
|
2211
|
-
});
|
|
2212
|
-
if (!opts.dryRun) saveSessionOffset(sessionId, readResult.newSize, inserted, agentId, issueId, transcriptPath);
|
|
2213
|
-
} catch (err) {
|
|
2214
|
-
result.errors.push({
|
|
2215
|
-
path: transcriptPath,
|
|
2216
|
-
error: err instanceof Error ? err.message : String(err)
|
|
2217
|
-
});
|
|
2218
|
-
}
|
|
2219
|
-
}
|
|
2220
|
-
const subagentsDir = join$1(projectDir, "subagents");
|
|
2221
|
-
if (existsSync(subagentsDir)) try {
|
|
2222
|
-
const subFiles = readdirSync(subagentsDir).filter((f) => f.endsWith(".jsonl"));
|
|
2223
|
-
for (const file of subFiles) {
|
|
2224
|
-
const sessionId = `sub-${extractSessionId(file)}`;
|
|
2225
|
-
const transcriptPath = join$1(subagentsDir, file);
|
|
2226
|
-
result.sessionsScanned++;
|
|
2227
|
-
try {
|
|
2228
|
-
const mapping = sessionIndex.get(sessionId);
|
|
2229
|
-
const agentId = mapping?.agentId || "unattributed-subagent";
|
|
2230
|
-
const issueId = mapping?.issueId || pathIssueId || resolveUnmappedSessionIssueId({
|
|
2231
|
-
sessionId,
|
|
2232
|
-
agentId
|
|
2233
|
-
});
|
|
2234
|
-
const sessionType = mapping?.sessionType || "implementation";
|
|
2235
|
-
const readResult = readNewBytes(transcriptPath, getSessionOffset(sessionId));
|
|
2236
|
-
if (!readResult || !readResult.content) continue;
|
|
2237
|
-
const events = extractCostEvents(readResult.content, agentId, issueId, sessionType, sessionId);
|
|
2238
|
-
if (events.length === 0) {
|
|
2239
|
-
if (!opts.dryRun) saveSessionOffset(sessionId, readResult.newSize, 0, agentId, issueId, transcriptPath);
|
|
2240
|
-
continue;
|
|
2241
|
-
}
|
|
2242
|
-
result.sessionsWithNewData++;
|
|
2243
|
-
const { inserted, duplicates, earliestEventTs, latestEventTs } = await recordCostEventsThroughOverdeck$1(events, `reconciler:${transcriptPath}`, { dryRun: opts.dryRun });
|
|
2244
|
-
result.eventsImported += inserted;
|
|
2245
|
-
result.duplicatesSkipped += duplicates;
|
|
2246
|
-
mergeCoverage(result, {
|
|
2247
|
-
earliestEventTs,
|
|
2248
|
-
latestEventTs
|
|
2249
|
-
});
|
|
2250
|
-
if (!opts.dryRun) saveSessionOffset(sessionId, readResult.newSize, inserted, agentId, issueId, transcriptPath);
|
|
2251
|
-
} catch (err) {
|
|
2252
|
-
result.errors.push({
|
|
2253
|
-
path: transcriptPath,
|
|
2254
|
-
error: err instanceof Error ? err.message : String(err)
|
|
2255
|
-
});
|
|
2256
|
-
}
|
|
2257
|
-
}
|
|
2258
|
-
} catch {}
|
|
2259
|
-
}
|
|
2260
|
-
if (opts.includePi ?? true) {
|
|
2261
|
-
const piResult = await reconcilePiTranscripts();
|
|
2262
|
-
result.sessionsScanned += piResult.sessionsScanned;
|
|
2263
|
-
result.sessionsWithNewData += piResult.sessionsWithNewData;
|
|
2264
|
-
result.eventsImported += piResult.eventsImported;
|
|
2265
|
-
result.duplicatesSkipped += piResult.duplicatesSkipped;
|
|
2266
|
-
result.errors.push(...piResult.errors);
|
|
2267
|
-
mergeCoverage(result, piResult);
|
|
2268
|
-
}
|
|
2269
|
-
return result;
|
|
2270
|
-
}
|
|
2271
|
-
/**
|
|
2272
|
-
* Effect variant of reconcile. Per-file errors are still surfaced via
|
|
2273
|
-
* `result.errors`; only catastrophic failures (e.g. SQLite open failure)
|
|
2274
|
-
* surface on the Effect error channel.
|
|
2275
|
-
*/
|
|
2276
|
-
const reconcile = (opts = {}) => Effect.tryPromise({
|
|
2277
|
-
try: () => reconcilePromise(opts),
|
|
2278
|
-
catch: (cause) => new FsError({
|
|
2279
|
-
path: "<reconciler>",
|
|
2280
|
-
operation: "reconcile",
|
|
2281
|
-
cause
|
|
2282
|
-
})
|
|
2283
|
-
});
|
|
2284
|
-
//#endregion
|
|
2285
1712
|
//#region ../../lib/costs/retention.ts
|
|
2286
1713
|
init_events();
|
|
2287
1714
|
init_errors();
|
|
@@ -2821,9 +2248,9 @@ function mergeVerificationOptions(request) {
|
|
|
2821
2248
|
*/
|
|
2822
2249
|
async function recordCiGreenVerificationVerdict(issueId, workspacePath) {
|
|
2823
2250
|
try {
|
|
2824
|
-
const { snapshotWorkspaceHeadsPromise } = await import("./git-utils-
|
|
2251
|
+
const { snapshotWorkspaceHeadsPromise } = await import("./git-utils-BAMwn9Nf.js");
|
|
2825
2252
|
const verifiedAnchor = await snapshotWorkspaceHeadsPromise(issueId, workspacePath).catch(() => void 0);
|
|
2826
|
-
const { setReviewStatusSync } = await import("./review-status-
|
|
2253
|
+
const { setReviewStatusSync } = await import("./review-status-Bge_3XTR.js");
|
|
2827
2254
|
setReviewStatusSync(issueId, {
|
|
2828
2255
|
verificationStatus: "passed",
|
|
2829
2256
|
verificationNotes: "merge-verify: CI green on the merged tip (PAN-2487 local-gate skip)",
|
|
@@ -2842,7 +2269,7 @@ async function recordCiGreenVerificationVerdict(issueId, workspacePath) {
|
|
|
2842
2269
|
* the workspaces-route import cycle.
|
|
2843
2270
|
*/
|
|
2844
2271
|
async function prepareWorkAgentForRebase(opts) {
|
|
2845
|
-
const { appendShipLog } = await import("./ship-log-
|
|
2272
|
+
const { appendShipLog } = await import("./ship-log-D-CphNZx.js");
|
|
2846
2273
|
opts.setStatus({
|
|
2847
2274
|
mergeStep: "preparing-work-agent",
|
|
2848
2275
|
mergeNotes: `Preparing work agent ${opts.agentId} to rebase ${opts.scopeNote}…`
|
|
@@ -3267,7 +2694,7 @@ async function reconcileGitHubMergeStatus(issueId, status) {
|
|
|
3267
2694
|
const prRef = parseGitHubPullRequestUrl(status.prUrl);
|
|
3268
2695
|
if (!prRef) return false;
|
|
3269
2696
|
try {
|
|
3270
|
-
const { getPullRequestState, isGitHubAppConfigured } = await import("./github-app-
|
|
2697
|
+
const { getPullRequestState, isGitHubAppConfigured } = await import("./github-app-BWziYCf3.js");
|
|
3271
2698
|
if (!isGitHubAppConfigured()) return false;
|
|
3272
2699
|
const prState = await Effect.runPromise(getPullRequestState(prRef.owner, prRef.repo, prRef.number));
|
|
3273
2700
|
console.log(`[merge] reconcileGitHubMergeStatus: ${issueId} PR #${prRef.number} merged=${prState.merged} state=${prState.state}`);
|
|
@@ -3538,8 +2965,8 @@ async function triggerMerge(issueId, request = { kind: "normal" }) {
|
|
|
3538
2965
|
try {
|
|
3539
2966
|
if (request.kind === "normal" && workspaceInfo.isRemote && workspaceInfo.vmName) {
|
|
3540
2967
|
console.log(`[merge] Remote workspace detected for ${issueId}, using review artifact merge...`);
|
|
3541
|
-
const { getMergeSetSync, ensureMergeSetForIssueSync } = await import("./merge-set-
|
|
3542
|
-
const { getForgeAdapter } = await import("./forge-
|
|
2968
|
+
const { getMergeSetSync, ensureMergeSetForIssueSync } = await import("./merge-set-CVfEM57p.js");
|
|
2969
|
+
const { getForgeAdapter } = await import("./forge-4VVCRcF7.js");
|
|
3543
2970
|
const remotePrimaryRepo = (getMergeSetSync(issueId) || ensureMergeSetForIssueSync(issueId))?.repos[0];
|
|
3544
2971
|
const remoteTargetBranch = remotePrimaryRepo?.targetBranch || "main";
|
|
3545
2972
|
const remoteForge = remotePrimaryRepo?.forge || "github";
|
|
@@ -3575,7 +3002,7 @@ async function triggerMerge(issueId, request = { kind: "normal" }) {
|
|
|
3575
3002
|
...mergeCompletionStatus(request)
|
|
3576
3003
|
});
|
|
3577
3004
|
completePendingOperation(issueId, null);
|
|
3578
|
-
const { postMergeLifecycle } = await import("./merge-agent-
|
|
3005
|
+
const { postMergeLifecycle } = await import("./merge-agent-D-4_iQgy.js");
|
|
3579
3006
|
await postMergeLifecycle(issueId, projectPath);
|
|
3580
3007
|
return {
|
|
3581
3008
|
success: true,
|
|
@@ -3620,11 +3047,11 @@ async function triggerMerge(issueId, request = { kind: "normal" }) {
|
|
|
3620
3047
|
}
|
|
3621
3048
|
if (isPolyrepo && projectConfig?.workspace?.repos) {
|
|
3622
3049
|
console.log(`[merge] Polyrepo detected for ${issueId}, coordinating merge set...`);
|
|
3623
|
-
const { getMergeSetSync, ensureMergeSetForIssueSync, upsertMergeSetSync, withRepoStateSync } = await import("./merge-set-
|
|
3624
|
-
const { runQualityGates } = await import("./validation-
|
|
3625
|
-
const { reconcileStrandedRepos } = await import("./merge-completeness-
|
|
3626
|
-
const { getForgeAdapter } = await import("./forge-
|
|
3627
|
-
const { messageAgent } = await import("./agents-
|
|
3050
|
+
const { getMergeSetSync, ensureMergeSetForIssueSync, upsertMergeSetSync, withRepoStateSync } = await import("./merge-set-CVfEM57p.js");
|
|
3051
|
+
const { runQualityGates } = await import("./validation-nSrYiYvA.js");
|
|
3052
|
+
const { reconcileStrandedRepos } = await import("./merge-completeness-CoLJxfUY.js");
|
|
3053
|
+
const { getForgeAdapter } = await import("./forge-4VVCRcF7.js");
|
|
3054
|
+
const { messageAgent } = await import("./agents-DixZjXWm.js");
|
|
3628
3055
|
let mergeSet = getMergeSetSync(issueId) || ensureMergeSetForIssueSync(issueId);
|
|
3629
3056
|
if (!mergeSet) {
|
|
3630
3057
|
const error = `No merge set found for ${issueId}`;
|
|
@@ -3682,7 +3109,7 @@ async function triggerMerge(issueId, request = { kind: "normal" }) {
|
|
|
3682
3109
|
...mergeCompletionStatus(request)
|
|
3683
3110
|
});
|
|
3684
3111
|
completePendingOperation(issueId, null);
|
|
3685
|
-
const { postMergeLifecycle } = await import("./merge-agent-
|
|
3112
|
+
const { postMergeLifecycle } = await import("./merge-agent-D-4_iQgy.js");
|
|
3686
3113
|
advanceQueue();
|
|
3687
3114
|
await postMergeLifecycle(issueId, projectPath);
|
|
3688
3115
|
return {
|
|
@@ -3936,7 +3363,7 @@ async function triggerMerge(issueId, request = { kind: "normal" }) {
|
|
|
3936
3363
|
...mergeCompletionStatus(request)
|
|
3937
3364
|
});
|
|
3938
3365
|
completePendingOperation(issueId, null);
|
|
3939
|
-
const { postMergeLifecycle } = await import("./merge-agent-
|
|
3366
|
+
const { postMergeLifecycle } = await import("./merge-agent-D-4_iQgy.js");
|
|
3940
3367
|
advanceQueue();
|
|
3941
3368
|
await postMergeLifecycle(issueId, projectPath);
|
|
3942
3369
|
return {
|
|
@@ -3947,8 +3374,8 @@ async function triggerMerge(issueId, request = { kind: "normal" }) {
|
|
|
3947
3374
|
repos: mergeResults
|
|
3948
3375
|
};
|
|
3949
3376
|
}
|
|
3950
|
-
const { getMergeSetSync, ensureMergeSetForIssueSync } = await import("./merge-set-
|
|
3951
|
-
const { getForgeAdapter } = await import("./forge-
|
|
3377
|
+
const { getMergeSetSync, ensureMergeSetForIssueSync } = await import("./merge-set-CVfEM57p.js");
|
|
3378
|
+
const { getForgeAdapter } = await import("./forge-4VVCRcF7.js");
|
|
3952
3379
|
const primaryRepo = (getMergeSetSync(issueId) || ensureMergeSetForIssueSync(issueId))?.repos[0];
|
|
3953
3380
|
const targetBranch = primaryRepo?.targetBranch || "main";
|
|
3954
3381
|
const primaryForge = primaryRepo?.forge || "github";
|
|
@@ -3991,7 +3418,7 @@ async function triggerMerge(issueId, request = { kind: "normal" }) {
|
|
|
3991
3418
|
}
|
|
3992
3419
|
let preMergePrState;
|
|
3993
3420
|
if (githubPrRef) try {
|
|
3994
|
-
const { getPullRequestState, isGitHubAppConfigured } = await import("./github-app-
|
|
3421
|
+
const { getPullRequestState, isGitHubAppConfigured } = await import("./github-app-BWziYCf3.js");
|
|
3995
3422
|
if (isGitHubAppConfigured()) {
|
|
3996
3423
|
const prState = await Effect.runPromise(getPullRequestState(githubPrRef.owner, githubPrRef.repo, githubPrRef.number));
|
|
3997
3424
|
preMergePrState = prState;
|
|
@@ -4054,7 +3481,7 @@ async function triggerMerge(issueId, request = { kind: "normal" }) {
|
|
|
4054
3481
|
...mergeCompletionStatus(request)
|
|
4055
3482
|
});
|
|
4056
3483
|
completePendingOperation(issueId, null);
|
|
4057
|
-
const { postMergeLifecycle } = await import("./merge-agent-
|
|
3484
|
+
const { postMergeLifecycle } = await import("./merge-agent-D-4_iQgy.js");
|
|
4058
3485
|
await postMergeLifecycle(issueId, projectPath, branchName);
|
|
4059
3486
|
return {
|
|
4060
3487
|
success: true,
|
|
@@ -4068,8 +3495,8 @@ async function triggerMerge(issueId, request = { kind: "normal" }) {
|
|
|
4068
3495
|
} catch (prStateErr) {
|
|
4069
3496
|
console.warn(`[merge] Pre-merge PR state check failed for ${issueId}: ${prStateErr.message} — proceeding (check is best-effort)`);
|
|
4070
3497
|
}
|
|
4071
|
-
const { postMergeLifecycle } = await import("./merge-agent-
|
|
4072
|
-
const { beginShipLog, appendShipLog } = await import("./ship-log-
|
|
3498
|
+
const { postMergeLifecycle } = await import("./merge-agent-D-4_iQgy.js");
|
|
3499
|
+
const { beginShipLog, appendShipLog } = await import("./ship-log-D-CphNZx.js");
|
|
4073
3500
|
let rebaseResult;
|
|
4074
3501
|
if (preMergePrState?.mergeable === true && preMergePrState.mergeableState === "clean" && !preMergePrState.checksFailed && !preMergePrState.checksPending && !preMergePrState.draft && !preMergePrState.merged) {
|
|
4075
3502
|
console.log(`[merge] PR is CLEAN — merging directly without rebase for ${issueId}`);
|
|
@@ -4178,7 +3605,7 @@ async function triggerMerge(issueId, request = { kind: "normal" }) {
|
|
|
4178
3605
|
});
|
|
4179
3606
|
let skipLocalVerification = false;
|
|
4180
3607
|
if (primaryForge === "github" && artifactUrl) try {
|
|
4181
|
-
const { parsePullRequestRef, getCiCheckRunsStatePromise, isGitHubAppConfigured } = await import("./github-app-
|
|
3608
|
+
const { parsePullRequestRef, getCiCheckRunsStatePromise, isGitHubAppConfigured } = await import("./github-app-BWziYCf3.js");
|
|
4182
3609
|
if (isGitHubAppConfigured()) {
|
|
4183
3610
|
const ref = parsePullRequestRef({ url: artifactUrl });
|
|
4184
3611
|
if (ref) {
|
|
@@ -4203,7 +3630,7 @@ async function triggerMerge(issueId, request = { kind: "normal" }) {
|
|
|
4203
3630
|
const verifyResult = skipLocalVerification ? { outcome: "passed" } : await (async () => {
|
|
4204
3631
|
console.log(`[merge] Running post-rebase verification for ${issueId}...`);
|
|
4205
3632
|
appendShipLog(issueId, "Running post-rebase verification (full quality-gate suite)…", "verifying");
|
|
4206
|
-
const { runVerificationForIssue } = await import("./verification-runner-
|
|
3633
|
+
const { runVerificationForIssue } = await import("./verification-runner-CFjAuv9u.js");
|
|
4207
3634
|
return Effect.runPromise(runVerificationForIssue(issueId, workspacePath, { isRemote: false }, "merge-verify", {
|
|
4208
3635
|
...mergeVerificationOptions(request),
|
|
4209
3636
|
onGateLog: (line) => appendShipLog(issueId, line, "verifying")
|
|
@@ -4248,7 +3675,7 @@ async function triggerMerge(issueId, request = { kind: "normal" }) {
|
|
|
4248
3675
|
if (skipLocalVerification) await recordCiGreenVerificationVerdict(issueId, workspacePath);
|
|
4249
3676
|
setReviewStatus(issueId, { mergeStep: "reporting-statuses" });
|
|
4250
3677
|
try {
|
|
4251
|
-
const { getPullRequestState, isGitHubAppConfigured, reportCommitStatus } = await import("./github-app-
|
|
3678
|
+
const { getPullRequestState, isGitHubAppConfigured, reportCommitStatus } = await import("./github-app-BWziYCf3.js");
|
|
4252
3679
|
if (githubPrRef && isGitHubAppConfigured()) {
|
|
4253
3680
|
const sha = (await Effect.runPromise(getPullRequestState(githubPrRef.owner, githubPrRef.repo, githubPrRef.number))).headSha.trim();
|
|
4254
3681
|
if (sha) {
|
|
@@ -4276,7 +3703,7 @@ async function triggerMerge(issueId, request = { kind: "normal" }) {
|
|
|
4276
3703
|
} catch (prMergeErr) {
|
|
4277
3704
|
console.error(`[merge] Review artifact merge threw for ${issueId}:`, prMergeErr);
|
|
4278
3705
|
try {
|
|
4279
|
-
const { getPullRequestState, isGitHubAppConfigured } = await import("./github-app-
|
|
3706
|
+
const { getPullRequestState, isGitHubAppConfigured } = await import("./github-app-BWziYCf3.js");
|
|
4280
3707
|
if (githubPrRef && isGitHubAppConfigured()) {
|
|
4281
3708
|
artifactMerged = (await Effect.runPromise(getPullRequestState(githubPrRef.owner, githubPrRef.repo, githubPrRef.number))).merged;
|
|
4282
3709
|
if (artifactMerged) console.log(`[merge] Race-detected: PR #${githubPrRef.number} for ${issueId} was already merged despite thrown error; proceeding`);
|
|
@@ -4395,8 +3822,8 @@ const postForgeApproveRoute = HttpRouter.add("POST", "/api/issues/:issueId/forge
|
|
|
4395
3822
|
if (!parseIssueIdSync(issueId)) return jsonResponse({ error: "Invalid issue ID" }, { status: 400 });
|
|
4396
3823
|
if (!/^[A-Z]+-\d+$/i.test(issueId)) return jsonResponse({ error: "Invalid issue ID format" }, { status: 400 });
|
|
4397
3824
|
return yield* Effect.promise(async () => {
|
|
4398
|
-
const { getMergeSetSync, upsertMergeSetSync, withRepoArtifactUrlSync, withRepoStateSync } = await import("./merge-set-
|
|
4399
|
-
const { getForgeAdapter } = await import("./forge-
|
|
3825
|
+
const { getMergeSetSync, upsertMergeSetSync, withRepoArtifactUrlSync, withRepoStateSync } = await import("./merge-set-CVfEM57p.js");
|
|
3826
|
+
const { getForgeAdapter } = await import("./forge-4VVCRcF7.js");
|
|
4400
3827
|
let mergeSet = getMergeSetSync(issueId);
|
|
4401
3828
|
if (!mergeSet) return jsonResponse({ error: `No merge set found for ${issueId}` }, { status: 404 });
|
|
4402
3829
|
const results = [];
|
|
@@ -4457,7 +3884,7 @@ const postForgeApproveRoute = HttpRouter.add("POST", "/api/issues/:issueId/forge
|
|
|
4457
3884
|
}
|
|
4458
3885
|
}
|
|
4459
3886
|
if (results.filter((r) => r.approved).length > 0) {
|
|
4460
|
-
const { emitActivityEntrySync, emitActivityTtsSync } = await import("./activity-logger-
|
|
3887
|
+
const { emitActivityEntrySync, emitActivityTtsSync } = await import("./activity-logger-B0X2JJwM.js");
|
|
4461
3888
|
emitActivityEntrySync({
|
|
4462
3889
|
source: "dashboard",
|
|
4463
3890
|
level: "success",
|
|
@@ -4484,9 +3911,9 @@ const postForgeMergeRoute = HttpRouter.add("POST", "/api/issues/:issueId/forge-m
|
|
|
4484
3911
|
if (!parseIssueIdSync(issueId)) return jsonResponse({ error: "Invalid issue ID" }, { status: 400 });
|
|
4485
3912
|
if (!/^[A-Z]+-\d+$/i.test(issueId)) return jsonResponse({ error: "Invalid issue ID format" }, { status: 400 });
|
|
4486
3913
|
return yield* Effect.promise(async () => {
|
|
4487
|
-
const { getMergeSetSync, upsertMergeSetSync, withRepoArtifactUrlSync, withRepoStateSync } = await import("./merge-set-
|
|
4488
|
-
const { getForgeAdapter } = await import("./forge-
|
|
4489
|
-
const { assessRepoMergeCompleteness } = await import("./merge-completeness-
|
|
3914
|
+
const { getMergeSetSync, upsertMergeSetSync, withRepoArtifactUrlSync, withRepoStateSync } = await import("./merge-set-CVfEM57p.js");
|
|
3915
|
+
const { getForgeAdapter } = await import("./forge-4VVCRcF7.js");
|
|
3916
|
+
const { assessRepoMergeCompleteness } = await import("./merge-completeness-CoLJxfUY.js");
|
|
4490
3917
|
let mergeSet = getMergeSetSync(issueId);
|
|
4491
3918
|
if (!mergeSet) return jsonResponse({ error: `No merge set found for ${issueId}` }, { status: 404 });
|
|
4492
3919
|
const results = [];
|
|
@@ -4564,7 +3991,7 @@ const postForgeMergeRoute = HttpRouter.add("POST", "/api/issues/:issueId/forge-m
|
|
|
4564
3991
|
}
|
|
4565
3992
|
}
|
|
4566
3993
|
if (results.filter((r) => r.merged).length > 0) {
|
|
4567
|
-
const { emitActivityEntrySync, emitActivityTtsSync } = await import("./activity-logger-
|
|
3994
|
+
const { emitActivityEntrySync, emitActivityTtsSync } = await import("./activity-logger-B0X2JJwM.js");
|
|
4568
3995
|
emitActivityEntrySync({
|
|
4569
3996
|
source: "dashboard",
|
|
4570
3997
|
level: "success",
|
|
@@ -4689,7 +4116,7 @@ const postWorkspaceApproveRoute = HttpRouter.add("POST", "/api/issues/:issueId/a
|
|
|
4689
4116
|
console.log(`[approve] Starting role pipeline for ${issueId}...`);
|
|
4690
4117
|
let reviewResult;
|
|
4691
4118
|
try {
|
|
4692
|
-
const { spawnReviewRoleForIssue } = await import("./review-agent-
|
|
4119
|
+
const { spawnReviewRoleForIssue } = await import("./review-agent-Caodi0PX.js");
|
|
4693
4120
|
reviewResult = await Effect.runPromise(spawnReviewRoleForIssue({
|
|
4694
4121
|
issueId,
|
|
4695
4122
|
workspace: workspacePath,
|
|
@@ -4736,7 +4163,7 @@ const postWorkspaceApproveRoute = HttpRouter.add("POST", "/api/issues/:issueId/a
|
|
|
4736
4163
|
}
|
|
4737
4164
|
console.log(`[approve] Step 3/3: Running server-side rebase for ${issueId}...`);
|
|
4738
4165
|
try {
|
|
4739
|
-
const { rebaseFeatureBranch } = await import("./merge-rebase-
|
|
4166
|
+
const { rebaseFeatureBranch } = await import("./merge-rebase-Bj7eJAG4.js");
|
|
4740
4167
|
const workspacePathForRebase = join(projectPath, "workspaces", `feature-${issueId.toLowerCase()}`);
|
|
4741
4168
|
const rebaseResult = await Effect.runPromise(rebaseFeatureBranch(workspacePathForRebase, branchName, "main", issueId));
|
|
4742
4169
|
if (!rebaseResult.success) {
|
|
@@ -4756,7 +4183,7 @@ const postWorkspaceApproveRoute = HttpRouter.add("POST", "/api/issues/:issueId/a
|
|
|
4756
4183
|
completePendingOperation(issueId, pushResult.error);
|
|
4757
4184
|
return jsonResponse({ error: pushResult.error }, { status: pushResult.httpStatus });
|
|
4758
4185
|
}
|
|
4759
|
-
const { approve: lifecycleApprove } = await import("./lifecycle-
|
|
4186
|
+
const { approve: lifecycleApprove } = await import("./lifecycle-DDZ7w-BY.js");
|
|
4760
4187
|
const ghResolved = resolveGitHubIssueSync(issueId);
|
|
4761
4188
|
const isGitHubIssueFlag = ghResolved.isGitHub;
|
|
4762
4189
|
const lifecycleCtx = {
|
|
@@ -4790,7 +4217,7 @@ const getMergeQueueRoute = HttpRouter.add("GET", "/api/merge-queue", httpHandler
|
|
|
4790
4217
|
})));
|
|
4791
4218
|
const postInternalPipelineNotifyRoute = HttpRouter.add("POST", "/api/internal/pipeline/notify", httpHandler(Effect.gen(function* () {
|
|
4792
4219
|
const request = yield* HttpServerRequest.HttpServerRequest;
|
|
4793
|
-
const { INTERNAL_TOKEN_HEADER, getInternalTokenSync } = yield* Effect.promise(() => import("./internal-token-
|
|
4220
|
+
const { INTERNAL_TOKEN_HEADER, getInternalTokenSync } = yield* Effect.promise(() => import("./internal-token-BCTEqUCX.js"));
|
|
4794
4221
|
const expected = getInternalTokenSync();
|
|
4795
4222
|
if (!expected) return jsonResponse({
|
|
4796
4223
|
ok: false,
|
|
@@ -4804,7 +4231,7 @@ const postInternalPipelineNotifyRoute = HttpRouter.add("POST", "/api/internal/pi
|
|
|
4804
4231
|
}, 403);
|
|
4805
4232
|
const event = yield* readJsonBody;
|
|
4806
4233
|
const type = event.type;
|
|
4807
|
-
const { notifyPipelineSync } = yield* Effect.promise(() => import("./pipeline-notifier-
|
|
4234
|
+
const { notifyPipelineSync } = yield* Effect.promise(() => import("./pipeline-notifier-B5DPXvnr.js"));
|
|
4808
4235
|
switch (type) {
|
|
4809
4236
|
case "status_changed": {
|
|
4810
4237
|
const issueId = event.issueId;
|
|
@@ -5611,7 +5038,7 @@ const patchWorkspaceTieredExecutionRoute = HttpRouter.add("PATCH", "/api/workspa
|
|
|
5611
5038
|
if (override !== "on" && override !== "off" && override !== null && override !== void 0) return jsonResponse({ error: "Invalid tiered-execution override" }, { status: 400 });
|
|
5612
5039
|
const project = getProjectSync(extractPrefixSync(issueId) ?? issueId.split("-")[0]);
|
|
5613
5040
|
if (!project) return jsonResponse({ error: "Project not found" }, { status: 404 });
|
|
5614
|
-
yield* Effect.promise(() => import("./record-
|
|
5041
|
+
yield* Effect.promise(() => import("./record-DYOg97Iv.js").then((m) => m.writeRecordTieredExecutionOverride(project, issueId, override)));
|
|
5615
5042
|
const projectPath = project.path;
|
|
5616
5043
|
const location = yield* resolvePlanLocation(projectPath, issueId);
|
|
5617
5044
|
if (!location) return jsonResponse({ error: "No xBRIEF plan found for this workspace" }, { status: 404 });
|
|
@@ -6213,7 +5640,7 @@ const postWorkspaceReviewRoute = HttpRouter.add("POST", "/api/review/:issueId/tr
|
|
|
6213
5640
|
}
|
|
6214
5641
|
if (!workspaceInfo.exists) return jsonResponse({ error: "Workspace does not exist" }, { status: 400 });
|
|
6215
5642
|
const reviewModeProject = requestedReviewMode.mode === void 0 ? null : yield* Effect.promise(async () => {
|
|
6216
|
-
const { resolveProjectForIssue } = await import("./record-
|
|
5643
|
+
const { resolveProjectForIssue } = await import("./record-DYOg97Iv.js");
|
|
6217
5644
|
return resolveProjectForIssue(issueId);
|
|
6218
5645
|
});
|
|
6219
5646
|
if (requestedReviewMode.mode !== void 0 && !reviewModeProject) return jsonResponse({ error: `No project configured for ${issueId}` }, { status: 500 });
|
|
@@ -6250,7 +5677,7 @@ const postWorkspaceReviewRoute = HttpRouter.add("POST", "/api/review/:issueId/tr
|
|
|
6250
5677
|
}
|
|
6251
5678
|
if (requestedReviewMode.mode !== void 0 && reviewModeProject) {
|
|
6252
5679
|
const persistenceError = yield* Effect.promise(async () => {
|
|
6253
|
-
const { updateIssueRecord } = await import("./record-update-
|
|
5680
|
+
const { updateIssueRecord } = await import("./record-update-CDPEX7BH.js");
|
|
6254
5681
|
await updateIssueRecord(reviewModeProject, issueId, (record) => {
|
|
6255
5682
|
record.reviewMode = requestedReviewMode.mode;
|
|
6256
5683
|
});
|
|
@@ -6279,7 +5706,7 @@ const postWorkspaceReviewRoute = HttpRouter.add("POST", "/api/review/:issueId/tr
|
|
|
6279
5706
|
console.log(`Feature branch push note: ${errorMessage(pushErr)}`);
|
|
6280
5707
|
}
|
|
6281
5708
|
try {
|
|
6282
|
-
const { createReviewArtifactsForIssue } = await import("./review-artifacts-
|
|
5709
|
+
const { createReviewArtifactsForIssue } = await import("./review-artifacts-DgaDlbO4.js");
|
|
6283
5710
|
const artifactResult = await Effect.runPromise(createReviewArtifactsForIssue(issueId, workspacePath));
|
|
6284
5711
|
const primaryArtifact = artifactResult.mergeSet?.repos.find((repo) => !!repo.artifactUrl);
|
|
6285
5712
|
artifactResult.mergeSet?.repos.find((repo) => repo.mergeStatus !== "skipped")?.targetBranch;
|
|
@@ -6339,7 +5766,7 @@ const postWorkspaceReviewRoute = HttpRouter.add("POST", "/api/review/:issueId/tr
|
|
|
6339
5766
|
completePendingOperation(issueId, verifyOutcome.reason);
|
|
6340
5767
|
return;
|
|
6341
5768
|
}
|
|
6342
|
-
const { spawnReviewRoleForIssue } = await import("./review-agent-
|
|
5769
|
+
const { spawnReviewRoleForIssue } = await import("./review-agent-Caodi0PX.js");
|
|
6343
5770
|
const prUrl = getReviewStatusSync(issueId)?.prUrl;
|
|
6344
5771
|
const reviewResult = await Effect.runPromise(spawnReviewRoleForIssue({
|
|
6345
5772
|
issueId,
|
|
@@ -6475,7 +5902,7 @@ const postWorkspaceRequestReviewRoute = HttpRouter.add("POST", "/api/review/:iss
|
|
|
6475
5902
|
console.log(`[request-review] Feature branch push note: ${errorMessage(pushErr)}`);
|
|
6476
5903
|
}
|
|
6477
5904
|
const prUrl = getReviewStatusSync(issueId)?.prUrl;
|
|
6478
|
-
const { spawnReviewRoleForIssue } = await import("./review-agent-
|
|
5905
|
+
const { spawnReviewRoleForIssue } = await import("./review-agent-Caodi0PX.js");
|
|
6479
5906
|
const result = await Effect.runPromise(spawnReviewRoleForIssue({
|
|
6480
5907
|
issueId,
|
|
6481
5908
|
workspace: workspacePathRerun,
|
|
@@ -6525,7 +5952,7 @@ const postWorkspaceRequestReviewRoute = HttpRouter.add("POST", "/api/review/:iss
|
|
|
6525
5952
|
});
|
|
6526
5953
|
} else {
|
|
6527
5954
|
const workspacePath = join(resolved.projectPath, "workspaces", `feature-${issueId.toLowerCase()}`);
|
|
6528
|
-
const { spawnRun } = yield* Effect.promise(() => import("./agents-
|
|
5955
|
+
const { spawnRun } = yield* Effect.promise(() => import("./agents-DixZjXWm.js"));
|
|
6529
5956
|
try {
|
|
6530
5957
|
const testRun = yield* Effect.promise(() => spawnRun(issueId, "test", { workspace: workspacePath }));
|
|
6531
5958
|
setReviewStatus(issueId, { testStatus: "testing" });
|
|
@@ -6640,7 +6067,7 @@ const postWorkspaceRequestReviewRoute = HttpRouter.add("POST", "/api/review/:iss
|
|
|
6640
6067
|
testStatus: "pending",
|
|
6641
6068
|
reviewNotes
|
|
6642
6069
|
});
|
|
6643
|
-
const { spawnReviewRoleForIssue } = await import("./review-agent-
|
|
6070
|
+
const { spawnReviewRoleForIssue } = await import("./review-agent-Caodi0PX.js");
|
|
6644
6071
|
const result = await Effect.runPromise(spawnReviewRoleForIssue({
|
|
6645
6072
|
issueId,
|
|
6646
6073
|
workspace: workspacePath,
|
|
@@ -6990,7 +6417,7 @@ const postWorkspaceResetReviewRoute = HttpRouter.add("POST", "/api/review/:issue
|
|
|
6990
6417
|
const result = processResetReviewPipeline(issueId, resetWorkspace.exists);
|
|
6991
6418
|
if (result.httpStatus !== 200) return jsonResponse(result.body, { status: result.httpStatus });
|
|
6992
6419
|
try {
|
|
6993
|
-
const { resetPostMergeState } = yield* Effect.promise(() => import("./merge-agent-
|
|
6420
|
+
const { resetPostMergeState } = yield* Effect.promise(() => import("./merge-agent-D-4_iQgy.js"));
|
|
6994
6421
|
resetPostMergeState(issueId);
|
|
6995
6422
|
} catch (err) {
|
|
6996
6423
|
console.warn(`[reset-review] resetPostMergeState best-effort failed for ${issueId}:`, err);
|
|
@@ -6999,7 +6426,7 @@ const postWorkspaceResetReviewRoute = HttpRouter.add("POST", "/api/review/:issue
|
|
|
6999
6426
|
const rerun = body?.rerun === true;
|
|
7000
6427
|
if (rerun) try {
|
|
7001
6428
|
yield* Effect.promise(async () => {
|
|
7002
|
-
const { spawnReviewRoleForIssue } = await import("./review-agent-
|
|
6429
|
+
const { spawnReviewRoleForIssue } = await import("./review-agent-Caodi0PX.js");
|
|
7003
6430
|
const dispatchArgs = buildReviewRedispatchArgs(issueId, resetWorkspace, workspaceInfo, resolved);
|
|
7004
6431
|
if (dispatchArgs) {
|
|
7005
6432
|
const result = await Effect.runPromise(spawnReviewRoleForIssue({
|
|
@@ -7034,7 +6461,7 @@ const postReviewResyncRoute = HttpRouter.add("POST", "/api/review/:issueId/resyn
|
|
|
7034
6461
|
const postWorkspaceReviewPurgeRoute = HttpRouter.add("POST", "/api/review/:issueId/purge", httpHandler(Effect.gen(function* () {
|
|
7035
6462
|
const issueId = (yield* HttpRouter.params)["issueId"] ?? "";
|
|
7036
6463
|
if (!parseIssueIdSync(issueId)) return jsonResponse({ error: "Invalid issue ID" }, { status: 400 });
|
|
7037
|
-
const { purgeReviewAgentsForIssue } = yield* Effect.promise(() => import("./review-agent-
|
|
6464
|
+
const { purgeReviewAgentsForIssue } = yield* Effect.promise(() => import("./review-agent-Caodi0PX.js"));
|
|
7038
6465
|
const projectKey = resolveProjectFromIssueSync(issueId)?.projectKey;
|
|
7039
6466
|
const purge = yield* Effect.promise(() => purgeReviewAgentsForIssue(projectKey, issueId));
|
|
7040
6467
|
const workspaceInfo = getWorkspaceInfoForIssue(issueId);
|
|
@@ -7064,8 +6491,8 @@ const postWorkspaceAbortReviewRoute = HttpRouter.add("POST", "/api/review/:issue
|
|
|
7064
6491
|
success: false,
|
|
7065
6492
|
error: "Workspace does not exist"
|
|
7066
6493
|
}, { status: 400 });
|
|
7067
|
-
const { resolveProjectFromIssueSync } = yield* Effect.promise(() => import("./projects-
|
|
7068
|
-
const { killAllReviewerSessions } = yield* Effect.promise(() => import("./review-agent-
|
|
6494
|
+
const { resolveProjectFromIssueSync } = yield* Effect.promise(() => import("./projects-BMuEf14J.js"));
|
|
6495
|
+
const { killAllReviewerSessions } = yield* Effect.promise(() => import("./review-agent-Caodi0PX.js"));
|
|
7069
6496
|
const { killed, failed } = yield* killAllReviewerSessions(resolveProjectFromIssueSync(issueId)?.projectKey, issueId);
|
|
7070
6497
|
setReviewStatus(issueId, {
|
|
7071
6498
|
reviewStatus: "pending",
|
|
@@ -7138,8 +6565,8 @@ const getReviewConfigRoute = HttpRouter.add("GET", "/api/review/:issueId/config"
|
|
|
7138
6565
|
const issueId = ((yield* HttpRouter.params)["issueId"] ?? "").toUpperCase();
|
|
7139
6566
|
if (!parseIssueIdSync(issueId)) return jsonResponse({ error: "Invalid issue ID" }, { status: 400 });
|
|
7140
6567
|
return jsonResponse(yield* Effect.promise(async () => {
|
|
7141
|
-
const { readIssueRecordSync, resolveProjectForIssue } = await import("./record-
|
|
7142
|
-
const { resolveReviewMode } = await import("./review-agent-
|
|
6568
|
+
const { readIssueRecordSync, resolveProjectForIssue } = await import("./record-DYOg97Iv.js");
|
|
6569
|
+
const { resolveReviewMode } = await import("./review-agent-Caodi0PX.js");
|
|
7143
6570
|
const project = resolveProjectForIssue(issueId);
|
|
7144
6571
|
const record = project ? readIssueRecordSync(project, issueId) : null;
|
|
7145
6572
|
return {
|
|
@@ -7170,9 +6597,9 @@ const postReviewConfigRoute = HttpRouter.add("POST", "/api/review/:issueId/confi
|
|
|
7170
6597
|
return jsonResponse({ error: error instanceof Error ? error.message : String(error) }, { status: 400 });
|
|
7171
6598
|
}
|
|
7172
6599
|
return jsonResponse(yield* Effect.promise(async () => {
|
|
7173
|
-
const { resolveProjectForIssue } = await import("./record-
|
|
7174
|
-
const { updateIssueRecord } = await import("./record-update-
|
|
7175
|
-
const { resolveReviewMode } = await import("./review-agent-
|
|
6600
|
+
const { resolveProjectForIssue } = await import("./record-DYOg97Iv.js");
|
|
6601
|
+
const { updateIssueRecord } = await import("./record-update-CDPEX7BH.js");
|
|
6602
|
+
const { resolveReviewMode } = await import("./review-agent-Caodi0PX.js");
|
|
7176
6603
|
const record = await updateIssueRecord(resolveProjectForIssue(issueId), issueId, (current) => {
|
|
7177
6604
|
if (hasMode) if (body.reviewMode === null) delete current.reviewMode;
|
|
7178
6605
|
else current.reviewMode = body.reviewMode;
|
|
@@ -7599,7 +7026,7 @@ async function readWorkspacePlanningMarkdown(issueId, fileName) {
|
|
|
7599
7026
|
*/
|
|
7600
7027
|
async function readWorkspaceContinueFile(_projectPath, workspacePath, issueId) {
|
|
7601
7028
|
try {
|
|
7602
|
-
const { readRecordContinueViewSync, getProjectConfigFromWorkspacePath, resolveProjectForIssue } = await import("./record-
|
|
7029
|
+
const { readRecordContinueViewSync, getProjectConfigFromWorkspacePath, resolveProjectForIssue } = await import("./record-DYOg97Iv.js");
|
|
7603
7030
|
const recordView = readRecordContinueViewSync(resolveProjectForIssue(issueId) ?? getProjectConfigFromWorkspacePath(workspacePath), issueId);
|
|
7604
7031
|
return recordView ? JSON.stringify(recordView, null, 2) : null;
|
|
7605
7032
|
} catch {
|
|
@@ -8379,7 +7806,7 @@ const getWorkspaceReviewStatusRoute = HttpRouter.add("GET", "/api/review/:issueI
|
|
|
8379
7806
|
if (queuePosition === null) try {
|
|
8380
7807
|
const resolved = resolveProjectFromIssueSync(issueId);
|
|
8381
7808
|
if (resolved) {
|
|
8382
|
-
const { getQueueForProject } = yield* Effect.promise(() => import("./merge-
|
|
7809
|
+
const { getQueueForProject } = yield* Effect.promise(() => import("./merge-DOCR6pHi.js"));
|
|
8383
7810
|
const mergePos = findPositionInQueueSync(issueId, getQueueForProject(resolved.projectKey).map((e) => ({
|
|
8384
7811
|
id: String(e.id),
|
|
8385
7812
|
type: "task",
|
|
@@ -8419,7 +7846,7 @@ const postWorkspaceReviewStatusRoute = HttpRouter.add("POST", "/api/review/:issu
|
|
|
8419
7846
|
const workspaceInfo = getWorkspaceInfoForIssue(issueId);
|
|
8420
7847
|
if (workspaceInfo.exists && workspaceInfo.localPath) {
|
|
8421
7848
|
const localPath = workspaceInfo.localPath;
|
|
8422
|
-
const { snapshotWorkspaceHeadsPromise } = yield* Effect.promise(() => import("./git-utils-
|
|
7849
|
+
const { snapshotWorkspaceHeadsPromise } = yield* Effect.promise(() => import("./git-utils-BAMwn9Nf.js"));
|
|
8423
7850
|
try {
|
|
8424
7851
|
const headAnchor = yield* Effect.promise(() => snapshotWorkspaceHeadsPromise(issueId, localPath));
|
|
8425
7852
|
if (headAnchor) update.reviewedAtCommit = headAnchor;
|
|
@@ -8436,7 +7863,7 @@ const postWorkspaceReviewStatusRoute = HttpRouter.add("POST", "/api/review/:issu
|
|
|
8436
7863
|
if (verificationStatus) update.verificationStatus = verificationStatus;
|
|
8437
7864
|
if (readyForMerge !== void 0) update.readyForMerge = readyForMerge;
|
|
8438
7865
|
const status = setReviewStatus(issueId, update);
|
|
8439
|
-
const { getTmuxSessionName } = yield* Effect.promise(() => import("./specialists-
|
|
7866
|
+
const { getTmuxSessionName } = yield* Effect.promise(() => import("./specialists-CYt1U3Zm.js"));
|
|
8440
7867
|
const projectKey = resolveProjectFromIssueSync(issueId)?.projectKey;
|
|
8441
7868
|
if (reviewStatus && [
|
|
8442
7869
|
"passed",
|
|
@@ -8454,7 +7881,7 @@ const postWorkspaceReviewStatusRoute = HttpRouter.add("POST", "/api/review/:issu
|
|
|
8454
7881
|
const agentId = `agent-${issueId.toLowerCase()}`;
|
|
8455
7882
|
const feedbackBody = `CODE REVIEW ${reviewStatus.toUpperCase()} for ${issueId}:\n\n${reviewNotes}\n\n## REQUIRED: Fix ALL issues above, then invoke the /rebase-and-submit skill\n\n1. Read each blocking issue carefully\n2. Fix the code for EVERY issue listed\n3. Run tests locally to verify your fixes\n4. Commit every change\n5. Invoke the /rebase-and-submit skill for ${issueId} — this is an atomic task that runs pan done (which handles rebase + push + re-submit internally)\n\nDo NOT stop between steps. Do NOT run git push manually — the skill handles it. Do NOT stop until pan done has completed successfully.`;
|
|
8456
7883
|
yield* Effect.gen(function* () {
|
|
8457
|
-
const { writeFeedbackFile } = yield* Effect.promise(() => import("./feedback-writer-
|
|
7884
|
+
const { writeFeedbackFile } = yield* Effect.promise(() => import("./feedback-writer-BzN4qvaP.js"));
|
|
8458
7885
|
const fileResult = yield* writeFeedbackFile({
|
|
8459
7886
|
issueId,
|
|
8460
7887
|
workspacePath: getWorkspaceInfoForIssue(issueId).localPath,
|
|
@@ -8517,7 +7944,7 @@ const postWorkspaceReviewStatusRoute = HttpRouter.add("POST", "/api/review/:issu
|
|
|
8517
7944
|
const agentId = `agent-${issueId.toLowerCase()}`;
|
|
8518
7945
|
const feedbackBody = `TESTS FAILED for ${issueId}:\n\n${testNotes}\n\n## REQUIRED: Fix ALL test failures, then invoke the /rebase-and-submit skill\n\n1. Read each test failure carefully\n2. Fix the code causing EVERY failure\n3. Run the test suite locally to verify your fixes pass\n4. Commit every change\n5. Invoke the /rebase-and-submit skill for ${issueId} — this is an atomic task that runs pan done (which handles rebase + push + re-submit internally)\n\nDo NOT stop between steps. Do NOT run git push manually — the skill handles it. Do NOT stop until pan done has completed successfully.`;
|
|
8519
7946
|
yield* Effect.gen(function* () {
|
|
8520
|
-
const { writeFeedbackFile } = yield* Effect.promise(() => import("./feedback-writer-
|
|
7947
|
+
const { writeFeedbackFile } = yield* Effect.promise(() => import("./feedback-writer-BzN4qvaP.js"));
|
|
8521
7948
|
const fileResult = yield* writeFeedbackFile({
|
|
8522
7949
|
issueId,
|
|
8523
7950
|
workspacePath: getWorkspaceInfoForIssue(issueId).localPath,
|
|
@@ -8550,14 +7977,14 @@ const postWorkspaceReviewStatusRoute = HttpRouter.add("POST", "/api/review/:issu
|
|
|
8550
7977
|
} else console.log(`[review-status] ${issueId} automated tests passed, but another gate remains unresolved (uat=${status.uatStatus ?? "not-required"})`);
|
|
8551
7978
|
yield* Effect.promise(async () => {
|
|
8552
7979
|
try {
|
|
8553
|
-
const { resolveProjectFromIssueSync, getProjectSync } = await import("./projects-
|
|
7980
|
+
const { resolveProjectFromIssueSync, getProjectSync } = await import("./projects-BMuEf14J.js");
|
|
8554
7981
|
const project = resolveProjectFromIssueSync(issueId);
|
|
8555
7982
|
const repo = (project ? getProjectSync(project.projectKey) : null)?.github_repo;
|
|
8556
7983
|
if (!repo || !repo.includes("/")) return;
|
|
8557
7984
|
const [owner, name] = repo.split("/");
|
|
8558
7985
|
const wsInfo = getWorkspaceInfoForIssue(issueId);
|
|
8559
7986
|
if (!wsInfo?.localPath) return;
|
|
8560
|
-
const { postOverdeckTestsStatus } = await import("./github-app-
|
|
7987
|
+
const { postOverdeckTestsStatus } = await import("./github-app-BWziYCf3.js");
|
|
8561
7988
|
await postOverdeckTestsStatus(wsInfo.localPath, owner, name, "success", "Test specialist passed");
|
|
8562
7989
|
} catch (err) {
|
|
8563
7990
|
console.warn(`[review-status] Failed to post overdeck/tests for ${issueId}: ${err.message}`);
|
|
@@ -8601,7 +8028,7 @@ const postWorkspaceRefreshTokenRoute = HttpRouter.add("POST", "/api/workspaces/:
|
|
|
8601
8028
|
if (!parseIssueIdSync(issueId)) return jsonResponse({ error: "Invalid issue ID" }, { status: 400 });
|
|
8602
8029
|
const issueLower = issueId.toLowerCase();
|
|
8603
8030
|
const workspacePath = join(getProjectPath(void 0, extractPrefixSync(issueId) ?? issueId.split("-")[0]), "workspaces", `feature-${issueLower}`);
|
|
8604
|
-
const { refreshWorkspaceToken, isGitHubAppConfigured } = yield* Effect.promise(() => import("./github-app-
|
|
8031
|
+
const { refreshWorkspaceToken, isGitHubAppConfigured } = yield* Effect.promise(() => import("./github-app-BWziYCf3.js"));
|
|
8605
8032
|
if (!isGitHubAppConfigured()) return jsonResponse({
|
|
8606
8033
|
success: false,
|
|
8607
8034
|
error: "GitHub App not configured"
|
|
@@ -8621,6 +8048,6 @@ const postWorkspaceRefreshTokenRoute = HttpRouter.add("POST", "/api/workspaces/:
|
|
|
8621
8048
|
})));
|
|
8622
8049
|
const workspacesRouteLayer = Layer.mergeAll(workspaceDataRouteLayer, postWorkspaceRebuildRoute, postWorkspaceRebuildAndStartRoute, uatStackActionRouteLayer, getWorkspaceStateMdRoute, getWorkspaceInferenceMdRoute, stashCleanRouteLayer, containerOpsRouteLayer, postWorkspaceStartRoute, getWorkspaceReviewStatusRoute, postWorkspaceReviewStatusRoute, reviewPipelineRouteLayer, reviewControlRouteLayer, mergeOpsRouteLayer, postWorkspaceRefreshTokenRoute);
|
|
8623
8050
|
//#endregion
|
|
8624
|
-
export {
|
|
8051
|
+
export { startAgentOutputService as C, retainAgentOutputInterest as S, syncCacheSync as _, mergeOpsRouteLayer as a, resolveIssueHeadlineCost as b, shouldBlockApproveForDirtyStatus as c, eventsRouteLayer as d, resumeQueuedMerges as f, rebuildCacheSync as g, getCostsForIssueSync as h, isBranchAlreadyRebased as i, triggerMerge as l, migrateAllSessionsSync as m, buildRichPRBody as n, pushApproveMain as o, syncWalFromAllProjects as p, ensurePRExists as r, reconcileGitHubMergeStatus as s, workspacesRouteLayer as t, internalEventsRouteLayer as u, processPendingFeedbackDeliveries as v, stopAgentOutputService as w, getWorkspacePathForIssue as x, getCachedRunningAgents as y };
|
|
8625
8052
|
|
|
8626
|
-
//# sourceMappingURL=workspaces-
|
|
8053
|
+
//# sourceMappingURL=workspaces-C7LAuZfe.js.map
|