@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,744 +1,50 @@
|
|
|
1
1
|
import { a as __toCommonJS } from "./rolldown-runtime-DNCzzKnI.js";
|
|
2
|
-
import { Er as derefWorkhorse, J as getProjectConfigFromWorkspacePath,
|
|
3
|
-
import { l as init_activity_logger, o as emitActivityEntrySync } from "./activity-logger-
|
|
4
|
-
import {
|
|
5
|
-
import { C as
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import { A as saveAgentStateSync,
|
|
9
|
-
import { i as
|
|
10
|
-
import {
|
|
11
|
-
import { i as ensureInternalTokenSync, s as init_internal_token, t as INTERNAL_TOKEN_HEADER } from "./internal-token-DoVzb4b7.js";
|
|
12
|
-
import { E as init_model_validation, O as requireModelOverrideSync } from "./auto-spawn-consent-Dc4mtM-B.js";
|
|
13
|
-
import { C as setFlywheelGloballyPaused, c as init_control_settings, f as isFlywheelAutoPickupBacklog, l as isCloisterSpawnsPausedSync, v as setCloisterSpawnsPausedSync, y as setDeaconGloballyPaused } from "./control-settings-BMoDHY1G.js";
|
|
2
|
+
import { Er as derefWorkhorse, J as getProjectConfigFromWorkspacePath, On as resolveProjectFromIssueSync, Y as init_record, fn as init_projects, li as init_errors, nt as readRecordContinueViewSync, p as loadConfigSync, rt as resolveProjectForIssue, t as init_config_yaml, ui as AGENTS_DIR, yi as OVERDECK_HOME, zi as init_paths } from "./config-yaml-D60AnTIu.js";
|
|
3
|
+
import { l as init_activity_logger, o as emitActivityEntrySync } from "./activity-logger-SlTXYCVf.js";
|
|
4
|
+
import { C as init_tmux, E as killSession, U as sessionExists, W as sessionExistsSync, p as exactPaneTarget, r as capturePane, v as getManagedTmuxSocketName } from "./tmux-wnT_hg-s.js";
|
|
5
|
+
import { C as setFlywheelGloballyPaused, c as init_control_settings, f as isFlywheelAutoPickupBacklog, l as isCloisterSpawnsPausedSync, v as setCloisterSpawnsPausedSync, y as setDeaconGloballyPaused } from "./control-settings-Db0uXgVM.js";
|
|
6
|
+
import { c as getDailyTrendsSync, d as init_cost_sync, t as getAgentDailyCostSync } from "./cost-sync-DfmvLT9L.js";
|
|
7
|
+
import { i as CostWriter, t as CostDoorLive } from "./cost-3FyqKK56.js";
|
|
8
|
+
import { A as saveAgentStateSync, K as saveAgentRuntimeState, W as getAgentRuntimeStateSync, f as getAgentDir, g as getAgentStateSync, m as getAgentState, mn as stopAgentSync, on as spawnAgent, q as init_agents, yn as listRunningAgentsSync, zt as init_context_overflow } from "./agent-state-FABw8neJ.js";
|
|
9
|
+
import { i as ensureInternalTokenSync, s as init_internal_token, t as INTERNAL_TOKEN_HEADER } from "./internal-token-BeIWG_kT.js";
|
|
10
|
+
import { E as init_model_validation, O as requireModelOverrideSync } from "./auto-spawn-consent-BesWchEi.js";
|
|
14
11
|
import { r as isRoleTerminal } from "./review-status-source-Jq0BXmn3.js";
|
|
15
|
-
import { h as readWorkspacePlanSync, s as init_io } from "./io-
|
|
16
|
-
import { n as checkHookSync, p as init_hooks } from "./hooks-
|
|
17
|
-
import { a as loadCloisterConfigSync, n as getHealthThresholdsMs, r as init_config } from "./config-
|
|
12
|
+
import { h as readWorkspacePlanSync, s as init_io } from "./io-BCtZoXHo.js";
|
|
13
|
+
import { n as checkHookSync, p as init_hooks } from "./hooks-DJR1yR9w.js";
|
|
14
|
+
import { a as loadCloisterConfigSync, n as getHealthThresholdsMs, r as init_config } from "./config-_qaa1UXH.js";
|
|
18
15
|
import { t as init_reap_terminal_sessions } from "./reap-terminal-sessions-BaDSNR-k.js";
|
|
19
|
-
import { i as issue_service_singleton_exports, n as init_issue_service_singleton } from "./issue-service-singleton-
|
|
20
|
-
import { h as loadReviewStatuses, p as init_review_status, w as setReviewStatusSync } from "./review-status-
|
|
21
|
-
import { h as init_pickup, r as LEGACY_PARKED_LABELS } from "./pickup-
|
|
22
|
-
import "./flywheel-
|
|
23
|
-
import { C as getLastPatrolResult, D as isDeaconRunning, N as runPatrol, R as startDeacon, S as getDeaconStatus, r as assessDeaconPatrolFreshness, x as getDeaconLogs, z as stopDeacon } from "./deacon-
|
|
24
|
-
import { n as renderPrompt, t as init_prompts } from "./prompts-
|
|
25
|
-
import { t as getCloisterEventStore } from "./event-store-provider-
|
|
26
|
-
import { i as getRuntimeForAgent } from "./agent-idle-
|
|
27
|
-
import { n as init_issue_closed, r as isIssueClosed } from "./issue-closed-
|
|
28
|
-
import { t as init_specialists } from "./specialists-
|
|
29
|
-
import { s as getTmuxSessionName } from "./specialists-registry-
|
|
30
|
-
import { n as shouldSkipDispatchAsMerged } from "./merge-verification-
|
|
31
|
-
import { t as recordDeadEndNeedsYou } from "./dead-end-trip-
|
|
32
|
-
import { o as decideAutonomousWorkDispatch, s as gatherAutonomousWorkDispatchInput } from "./orphan-proposed-reconciler-
|
|
33
|
-
import { r as writeHealthEvent } from "./health-events-
|
|
34
|
-
import {
|
|
35
|
-
import { Context, Data, Effect, Layer, Schema } from "effect";
|
|
16
|
+
import { i as issue_service_singleton_exports, n as init_issue_service_singleton } from "./issue-service-singleton-C_sZ0HjP.js";
|
|
17
|
+
import { h as loadReviewStatuses, p as init_review_status, w as setReviewStatusSync } from "./review-status-DpniqzPT.js";
|
|
18
|
+
import { h as init_pickup, r as LEGACY_PARKED_LABELS } from "./pickup-Dle6k9Xt.js";
|
|
19
|
+
import "./flywheel-DWKd7bMc.js";
|
|
20
|
+
import { C as getLastPatrolResult, D as isDeaconRunning, N as runPatrol, R as startDeacon, S as getDeaconStatus, r as assessDeaconPatrolFreshness, x as getDeaconLogs, z as stopDeacon } from "./deacon-CsisLmPt.js";
|
|
21
|
+
import { n as renderPrompt, t as init_prompts } from "./prompts-CKpDt8Jn.js";
|
|
22
|
+
import { t as getCloisterEventStore } from "./event-store-provider-Bu1Qrg6v.js";
|
|
23
|
+
import { i as getRuntimeForAgent } from "./agent-idle-D-UQ7gDv.js";
|
|
24
|
+
import { n as init_issue_closed, r as isIssueClosed } from "./issue-closed-CiYAa6bX.js";
|
|
25
|
+
import { t as init_specialists } from "./specialists-D6MUU31Q.js";
|
|
26
|
+
import { s as getTmuxSessionName } from "./specialists-registry-Bng0OFGH.js";
|
|
27
|
+
import { n as shouldSkipDispatchAsMerged } from "./merge-verification-BfJRNMiD.js";
|
|
28
|
+
import { t as recordDeadEndNeedsYou } from "./dead-end-trip-Bs3hxIn6.js";
|
|
29
|
+
import { o as decideAutonomousWorkDispatch, s as gatherAutonomousWorkDispatchInput } from "./orphan-proposed-reconciler-nFUlquZt.js";
|
|
30
|
+
import { r as writeHealthEvent } from "./health-events-Bk3LjaJ9.js";
|
|
31
|
+
import { Data, Effect } from "effect";
|
|
36
32
|
import { appendFileSync, existsSync, mkdirSync, readFileSync, readdirSync, renameSync, statSync, unlinkSync, writeFileSync } from "fs";
|
|
37
|
-
import { dirname
|
|
38
|
-
import { existsSync as existsSync$1, readdirSync as readdirSync$1 } from "node:fs";
|
|
33
|
+
import { dirname, join } from "path";
|
|
39
34
|
import { createHash } from "crypto";
|
|
40
35
|
import { rm } from "fs/promises";
|
|
41
36
|
import { exec, execFile } from "node:child_process";
|
|
42
37
|
import { promisify } from "node:util";
|
|
43
38
|
import { exec as exec$1 } from "child_process";
|
|
44
39
|
import { promisify as promisify$1 } from "util";
|
|
45
|
-
|
|
46
|
-
|
|
40
|
+
//#region ../../lib/cloister/health.ts
|
|
41
|
+
init_paths();
|
|
47
42
|
init_errors();
|
|
48
43
|
init_projects();
|
|
49
44
|
init_record();
|
|
50
45
|
init_config_yaml();
|
|
51
46
|
init_activity_logger();
|
|
52
47
|
init_tmux();
|
|
53
|
-
init_drizzle_orm();
|
|
54
|
-
init_sqlite_core();
|
|
55
|
-
init_infra();
|
|
56
|
-
init_issues();
|
|
57
|
-
init_cost();
|
|
58
|
-
init_ohmypi_parser();
|
|
59
|
-
init_codex_parser();
|
|
60
|
-
init_paths();
|
|
61
|
-
init_tier_metrics();
|
|
62
|
-
function walkJsonl(dir) {
|
|
63
|
-
if (!existsSync$1(dir)) return [];
|
|
64
|
-
const result = [];
|
|
65
|
-
for (const entry of readdirSync$1(dir, { withFileTypes: true })) {
|
|
66
|
-
const full = join(dir, entry.name);
|
|
67
|
-
if (entry.isDirectory()) result.push(...walkJsonl(full));
|
|
68
|
-
else if (entry.name.endsWith(".jsonl")) result.push(full);
|
|
69
|
-
}
|
|
70
|
-
return result;
|
|
71
|
-
}
|
|
72
|
-
const costEventsTable = sqliteTable("cost_events", {
|
|
73
|
-
id: integer("id").primaryKey({ autoIncrement: true }),
|
|
74
|
-
ts: integer("ts", { mode: "timestamp_ms" }).notNull(),
|
|
75
|
-
issueId: text("issue_id"),
|
|
76
|
-
agentId: text("agent_id"),
|
|
77
|
-
sessionId: text("session_id"),
|
|
78
|
-
sessionType: text("session_type"),
|
|
79
|
-
provider: text("provider"),
|
|
80
|
-
model: text("model"),
|
|
81
|
-
input: integer("input"),
|
|
82
|
-
output: integer("output"),
|
|
83
|
-
cacheRead: integer("cache_read"),
|
|
84
|
-
cacheWrite: integer("cache_write"),
|
|
85
|
-
cost: real("cost"),
|
|
86
|
-
requestId: text("request_id"),
|
|
87
|
-
sourceFile: text("source_file")
|
|
88
|
-
});
|
|
89
|
-
const Tokens = Schema.Struct({
|
|
90
|
-
input: Schema.Number,
|
|
91
|
-
output: Schema.Number,
|
|
92
|
-
cacheRead: Schema.Number,
|
|
93
|
-
cacheWrite: Schema.Number
|
|
94
|
-
});
|
|
95
|
-
const CostEvent = Schema.Struct({
|
|
96
|
-
ts: Schema.Date,
|
|
97
|
-
issueId: Schema.NullOr(IssueId),
|
|
98
|
-
agentId: Schema.NullOr(Schema.String),
|
|
99
|
-
sessionId: Schema.NullOr(Schema.String),
|
|
100
|
-
sessionType: Schema.NullOr(Schema.String),
|
|
101
|
-
provider: Schema.NullOr(Schema.String),
|
|
102
|
-
model: Schema.NullOr(Schema.String),
|
|
103
|
-
input: Schema.Number,
|
|
104
|
-
output: Schema.Number,
|
|
105
|
-
cacheRead: Schema.Number,
|
|
106
|
-
cacheWrite: Schema.Number,
|
|
107
|
-
cost: Schema.Number,
|
|
108
|
-
requestId: Schema.NullOr(Schema.String),
|
|
109
|
-
sourceFile: Schema.NullOr(Schema.String),
|
|
110
|
-
warnings: Schema.optional(Schema.Array(Schema.Struct({
|
|
111
|
-
type: Schema.String,
|
|
112
|
-
provider: Schema.NullOr(Schema.String),
|
|
113
|
-
model: Schema.String,
|
|
114
|
-
reason: Schema.String
|
|
115
|
-
})))
|
|
116
|
-
});
|
|
117
|
-
const Rollup = Schema.Struct({
|
|
118
|
-
key: Schema.String,
|
|
119
|
-
role: Schema.optional(Schema.String),
|
|
120
|
-
cost: Schema.Number,
|
|
121
|
-
tokens: Tokens
|
|
122
|
-
});
|
|
123
|
-
const Window = Schema.Literals([
|
|
124
|
-
"day",
|
|
125
|
-
"week",
|
|
126
|
-
"month"
|
|
127
|
-
]);
|
|
128
|
-
const WindowSummary = Schema.Struct({
|
|
129
|
-
project: Schema.NullOr(Schema.String),
|
|
130
|
-
window: Window,
|
|
131
|
-
totalCost: Schema.Number,
|
|
132
|
-
totalTokens: Schema.Number,
|
|
133
|
-
entryCount: Schema.Number,
|
|
134
|
-
byModel: Schema.Record(Schema.String, Schema.Number)
|
|
135
|
-
});
|
|
136
|
-
const IssueCost = Schema.Struct({
|
|
137
|
-
issueId: IssueId,
|
|
138
|
-
totalCost: Schema.Number,
|
|
139
|
-
tokens: Tokens,
|
|
140
|
-
byModel: Schema.Record(Schema.String, Rollup),
|
|
141
|
-
byStage: Schema.Record(Schema.String, Schema.Record(Schema.String, Tokens))
|
|
142
|
-
});
|
|
143
|
-
const BudgetSpec = Schema.Struct({
|
|
144
|
-
name: Schema.String,
|
|
145
|
-
type: Schema.Literals([
|
|
146
|
-
"daily",
|
|
147
|
-
"monthly",
|
|
148
|
-
"project",
|
|
149
|
-
"issue",
|
|
150
|
-
"feature"
|
|
151
|
-
]),
|
|
152
|
-
limit: Schema.Number,
|
|
153
|
-
currency: Schema.String,
|
|
154
|
-
alertThreshold: Schema.Number
|
|
155
|
-
});
|
|
156
|
-
const Budget = Schema.Struct({
|
|
157
|
-
...BudgetSpec.fields,
|
|
158
|
-
id: Schema.String,
|
|
159
|
-
spent: Schema.Number,
|
|
160
|
-
enabled: Schema.Boolean
|
|
161
|
-
});
|
|
162
|
-
const BudgetStatus = Schema.Struct({
|
|
163
|
-
budget: Budget,
|
|
164
|
-
percentUsed: Schema.Number,
|
|
165
|
-
remaining: Schema.Number,
|
|
166
|
-
alert: Schema.Boolean,
|
|
167
|
-
exceeded: Schema.Boolean
|
|
168
|
-
});
|
|
169
|
-
var CostIngestError = class extends Schema.TaggedErrorClass()("CostIngestError", { reason: Schema.String }) {};
|
|
170
|
-
var BudgetNotFound = class extends Schema.TaggedErrorClass()("BudgetNotFound", { id: Schema.String }) {};
|
|
171
|
-
function mapBudget(b) {
|
|
172
|
-
return {
|
|
173
|
-
id: b.id,
|
|
174
|
-
name: b.name,
|
|
175
|
-
type: b.type,
|
|
176
|
-
limit: b.limit,
|
|
177
|
-
currency: b.currency,
|
|
178
|
-
alertThreshold: b.alertThreshold,
|
|
179
|
-
spent: b.spent,
|
|
180
|
-
enabled: b.enabled
|
|
181
|
-
};
|
|
182
|
-
}
|
|
183
|
-
function toTokens(r) {
|
|
184
|
-
return {
|
|
185
|
-
input: r.input ?? 0,
|
|
186
|
-
output: r.output ?? 0,
|
|
187
|
-
cacheRead: r.cacheRead ?? 0,
|
|
188
|
-
cacheWrite: r.cacheWrite ?? 0
|
|
189
|
-
};
|
|
190
|
-
}
|
|
191
|
-
function toRollup(key, r, role) {
|
|
192
|
-
return {
|
|
193
|
-
key,
|
|
194
|
-
...role ? { role } : {},
|
|
195
|
-
cost: r.cost ?? 0,
|
|
196
|
-
tokens: toTokens(r)
|
|
197
|
-
};
|
|
198
|
-
}
|
|
199
|
-
function issueIdFromAgentName(agentName) {
|
|
200
|
-
const match = agentName.match(/(?:^|-)((?:pan|min|aud|krux|cli)-\d+)(?:-|$)/i);
|
|
201
|
-
return match ? match[1].toUpperCase() : null;
|
|
202
|
-
}
|
|
203
|
-
function inferIssueFromPath(path) {
|
|
204
|
-
if (!path) return null;
|
|
205
|
-
const match = path.match(/(?:feature[-/])?(pan|min|aud|krux|cli)[-/](\d+)/i);
|
|
206
|
-
return match ? `${match[1].toUpperCase()}-${match[2]}` : null;
|
|
207
|
-
}
|
|
208
|
-
function inferIssueFromPiEncodedRootName(name) {
|
|
209
|
-
return inferIssueFromPath(name.replace(/--+/g, "/"));
|
|
210
|
-
}
|
|
211
|
-
function inferPiProvider(model, provider) {
|
|
212
|
-
if (provider) return provider;
|
|
213
|
-
const lower = model.toLowerCase();
|
|
214
|
-
if (lower.includes("kimi") || lower.startsWith("minimax")) return "custom";
|
|
215
|
-
if (lower.includes("claude")) return "anthropic";
|
|
216
|
-
if (lower.includes("gpt")) return "openai";
|
|
217
|
-
if (lower.includes("gemini")) return "google";
|
|
218
|
-
return null;
|
|
219
|
-
}
|
|
220
|
-
var CostResolver = class extends Context.Service()("overdeck/CostResolver") {};
|
|
221
|
-
const CostResolverLive = Layer.effect(CostResolver, Effect.gen(function* () {
|
|
222
|
-
const { q } = yield* Db;
|
|
223
|
-
const groupBySelect = {
|
|
224
|
-
cost: sql`SUM(${costEventsTable.cost})`,
|
|
225
|
-
input: sql`SUM(${costEventsTable.input})`,
|
|
226
|
-
output: sql`SUM(${costEventsTable.output})`,
|
|
227
|
-
cacheRead: sql`SUM(${costEventsTable.cacheRead})`,
|
|
228
|
-
cacheWrite: sql`SUM(${costEventsTable.cacheWrite})`
|
|
229
|
-
};
|
|
230
|
-
const summary = (window, project) => Effect.promise(async () => {
|
|
231
|
-
const days = {
|
|
232
|
-
day: 1,
|
|
233
|
-
week: 7,
|
|
234
|
-
month: 30
|
|
235
|
-
}[window];
|
|
236
|
-
const cutoff = /* @__PURE__ */ new Date(Date.now() - days * 864e5);
|
|
237
|
-
const where = project ? and(gte(costEventsTable.ts, cutoff), like(costEventsTable.issueId, `${project}-%`)) : gte(costEventsTable.ts, cutoff);
|
|
238
|
-
const [agg] = await q.select({
|
|
239
|
-
totalCost: sql`COALESCE(SUM(${costEventsTable.cost}), 0)`,
|
|
240
|
-
totalTokens: sql`COALESCE(SUM(COALESCE(${costEventsTable.input},0) + COALESCE(${costEventsTable.output},0) + COALESCE(${costEventsTable.cacheRead},0) + COALESCE(${costEventsTable.cacheWrite},0)), 0)`,
|
|
241
|
-
entryCount: sql`COUNT(*)`
|
|
242
|
-
}).from(costEventsTable).where(where);
|
|
243
|
-
const modelRows = await q.select({
|
|
244
|
-
model: costEventsTable.model,
|
|
245
|
-
cost: sql`COALESCE(SUM(${costEventsTable.cost}), 0)`
|
|
246
|
-
}).from(costEventsTable).where(where).groupBy(costEventsTable.model);
|
|
247
|
-
const byModel = {};
|
|
248
|
-
for (const r of modelRows) byModel[r.model ?? "unknown"] = r.cost ?? 0;
|
|
249
|
-
return {
|
|
250
|
-
project: project ?? null,
|
|
251
|
-
window,
|
|
252
|
-
totalCost: agg?.totalCost ?? 0,
|
|
253
|
-
totalTokens: agg?.totalTokens ?? 0,
|
|
254
|
-
entryCount: agg?.entryCount ?? 0,
|
|
255
|
-
byModel
|
|
256
|
-
};
|
|
257
|
-
});
|
|
258
|
-
const byIssue = () => Effect.promise(async () => {
|
|
259
|
-
return (await q.select({
|
|
260
|
-
key: costEventsTable.issueId,
|
|
261
|
-
...groupBySelect
|
|
262
|
-
}).from(costEventsTable).groupBy(costEventsTable.issueId)).map((r) => toRollup(r.key ?? "unattributed", r));
|
|
263
|
-
});
|
|
264
|
-
const issueDetail = (id) => Effect.promise(async () => {
|
|
265
|
-
const modelRows = await q.select({
|
|
266
|
-
model: costEventsTable.model,
|
|
267
|
-
...groupBySelect
|
|
268
|
-
}).from(costEventsTable).where(eq(costEventsTable.issueId, id)).groupBy(costEventsTable.model);
|
|
269
|
-
const byModel = {};
|
|
270
|
-
let totalCost = 0;
|
|
271
|
-
let totalInput = 0, totalOutput = 0, totalCacheRead = 0, totalCacheWrite = 0;
|
|
272
|
-
for (const r of modelRows) {
|
|
273
|
-
const key = r.model ?? "unknown";
|
|
274
|
-
const t = toTokens(r);
|
|
275
|
-
byModel[key] = {
|
|
276
|
-
key,
|
|
277
|
-
cost: r.cost ?? 0,
|
|
278
|
-
tokens: t
|
|
279
|
-
};
|
|
280
|
-
totalCost += r.cost ?? 0;
|
|
281
|
-
totalInput += t.input;
|
|
282
|
-
totalOutput += t.output;
|
|
283
|
-
totalCacheRead += t.cacheRead;
|
|
284
|
-
totalCacheWrite += t.cacheWrite;
|
|
285
|
-
}
|
|
286
|
-
const tokens = {
|
|
287
|
-
input: totalInput,
|
|
288
|
-
output: totalOutput,
|
|
289
|
-
cacheRead: totalCacheRead,
|
|
290
|
-
cacheWrite: totalCacheWrite
|
|
291
|
-
};
|
|
292
|
-
const stageRows = await q.select({
|
|
293
|
-
stage: costEventsTable.sessionType,
|
|
294
|
-
model: costEventsTable.model,
|
|
295
|
-
input: sql`SUM(${costEventsTable.input})`,
|
|
296
|
-
output: sql`SUM(${costEventsTable.output})`,
|
|
297
|
-
cacheRead: sql`SUM(${costEventsTable.cacheRead})`,
|
|
298
|
-
cacheWrite: sql`SUM(${costEventsTable.cacheWrite})`
|
|
299
|
-
}).from(costEventsTable).where(eq(costEventsTable.issueId, id)).groupBy(costEventsTable.sessionType, costEventsTable.model);
|
|
300
|
-
const byStage = {};
|
|
301
|
-
for (const r of stageRows) {
|
|
302
|
-
const stage = r.stage ?? "unknown";
|
|
303
|
-
const model = r.model ?? "unknown";
|
|
304
|
-
if (!byStage[stage]) byStage[stage] = {};
|
|
305
|
-
byStage[stage][model] = toTokens(r);
|
|
306
|
-
}
|
|
307
|
-
return {
|
|
308
|
-
issueId: id,
|
|
309
|
-
totalCost,
|
|
310
|
-
tokens,
|
|
311
|
-
byModel,
|
|
312
|
-
byStage
|
|
313
|
-
};
|
|
314
|
-
});
|
|
315
|
-
const byDay = (days, issue) => Effect.promise(async () => {
|
|
316
|
-
const cutoff = /* @__PURE__ */ new Date(Date.now() - days * 864e5);
|
|
317
|
-
const dayExpr = sql`DATE(${costEventsTable.ts}, 'unixepoch')`;
|
|
318
|
-
const where = issue ? and(gte(costEventsTable.ts, cutoff), eq(costEventsTable.issueId, issue)) : gte(costEventsTable.ts, cutoff);
|
|
319
|
-
return (await q.select({
|
|
320
|
-
key: dayExpr,
|
|
321
|
-
...groupBySelect
|
|
322
|
-
}).from(costEventsTable).where(where).groupBy(dayExpr).orderBy(sql`DATE(${costEventsTable.ts}, 'unixepoch') DESC`)).map((r) => toRollup(r.key ?? "", r));
|
|
323
|
-
});
|
|
324
|
-
const byModel = (issue) => Effect.promise(async () => {
|
|
325
|
-
return (await q.select({
|
|
326
|
-
key: costEventsTable.model,
|
|
327
|
-
...groupBySelect
|
|
328
|
-
}).from(costEventsTable).where(issue ? eq(costEventsTable.issueId, issue) : void 0).groupBy(costEventsTable.model)).map((r) => toRollup(r.key ?? "unknown", r));
|
|
329
|
-
});
|
|
330
|
-
const byAgent = (issue) => Effect.promise(async () => {
|
|
331
|
-
return (await q.select({
|
|
332
|
-
key: costEventsTable.agentId,
|
|
333
|
-
...groupBySelect
|
|
334
|
-
}).from(costEventsTable).where(issue ? eq(costEventsTable.issueId, issue) : void 0).groupBy(costEventsTable.agentId)).map((r) => {
|
|
335
|
-
const key = r.key ?? "unattributed";
|
|
336
|
-
return toRollup(key, r, deriveTieredAgentCostRole(key, issue));
|
|
337
|
-
});
|
|
338
|
-
});
|
|
339
|
-
const byBackgroundSource = (hours) => Effect.promise(async () => {
|
|
340
|
-
const cutoff = /* @__PURE__ */ new Date(Date.now() - hours * 36e5);
|
|
341
|
-
return (await q.select({
|
|
342
|
-
key: costEventsTable.sourceFile,
|
|
343
|
-
...groupBySelect
|
|
344
|
-
}).from(costEventsTable).where(and(gte(costEventsTable.ts, cutoff), sql`${costEventsTable.sourceFile} IS NOT NULL`)).groupBy(costEventsTable.sourceFile)).map((r) => toRollup(r.key ?? "unknown", r));
|
|
345
|
-
});
|
|
346
|
-
const byProject = () => Effect.promise(async () => {
|
|
347
|
-
const projExpr = sql`UPPER(SUBSTR(${costEventsTable.issueId}, 1, INSTR(${costEventsTable.issueId}, '-') - 1))`;
|
|
348
|
-
return (await q.select({
|
|
349
|
-
key: projExpr,
|
|
350
|
-
...groupBySelect
|
|
351
|
-
}).from(costEventsTable).where(sql`${costEventsTable.issueId} IS NOT NULL`).groupBy(projExpr)).map((r) => toRollup(r.key ?? "unknown", r));
|
|
352
|
-
});
|
|
353
|
-
const recent = (limit, since) => Effect.promise(async () => {
|
|
354
|
-
return (await q.select().from(costEventsTable).where(since ? gte(costEventsTable.ts, since) : void 0).orderBy(desc(costEventsTable.ts)).limit(limit)).map((r) => ({
|
|
355
|
-
ts: r.ts,
|
|
356
|
-
issueId: r.issueId ?? null,
|
|
357
|
-
agentId: r.agentId ?? null,
|
|
358
|
-
sessionId: r.sessionId ?? null,
|
|
359
|
-
sessionType: r.sessionType ?? null,
|
|
360
|
-
provider: r.provider ?? null,
|
|
361
|
-
model: r.model ?? null,
|
|
362
|
-
input: r.input ?? 0,
|
|
363
|
-
output: r.output ?? 0,
|
|
364
|
-
cacheRead: r.cacheRead ?? 0,
|
|
365
|
-
cacheWrite: r.cacheWrite ?? 0,
|
|
366
|
-
cost: r.cost ?? 0,
|
|
367
|
-
requestId: r.requestId ?? null,
|
|
368
|
-
sourceFile: r.sourceFile ?? null
|
|
369
|
-
}));
|
|
370
|
-
});
|
|
371
|
-
const listBudgets = () => Effect.sync(() => getAllBudgetsSync().map(mapBudget));
|
|
372
|
-
const checkBudget = (id) => Effect.gen(function* () {
|
|
373
|
-
const result = yield* Effect.sync(() => checkBudgetSync(id));
|
|
374
|
-
if (!result.budget) return yield* Effect.fail(new BudgetNotFound({ id }));
|
|
375
|
-
return {
|
|
376
|
-
budget: mapBudget(result.budget),
|
|
377
|
-
percentUsed: result.percentUsed,
|
|
378
|
-
remaining: result.remaining,
|
|
379
|
-
alert: result.alert,
|
|
380
|
-
exceeded: result.exceeded
|
|
381
|
-
};
|
|
382
|
-
});
|
|
383
|
-
return CostResolver.of({
|
|
384
|
-
summary,
|
|
385
|
-
byIssue,
|
|
386
|
-
issueDetail,
|
|
387
|
-
byDay,
|
|
388
|
-
byModel,
|
|
389
|
-
byAgent,
|
|
390
|
-
byBackgroundSource,
|
|
391
|
-
byProject,
|
|
392
|
-
recent,
|
|
393
|
-
listBudgets,
|
|
394
|
-
checkBudget
|
|
395
|
-
});
|
|
396
|
-
}));
|
|
397
|
-
var CostWriter = class extends Context.Service()("overdeck/CostWriter") {};
|
|
398
|
-
const CostDoorLive = Layer.effect(CostWriter, Effect.gen(function* () {
|
|
399
|
-
const { q } = yield* Db;
|
|
400
|
-
const archive = yield* CostArchive;
|
|
401
|
-
const bus = yield* EventBus;
|
|
402
|
-
const checkDuplicate = (e) => Effect.gen(function* () {
|
|
403
|
-
if (e.requestId == null && e.sourceFile == null) return false;
|
|
404
|
-
const condition = e.requestId != null ? eq(costEventsTable.requestId, e.requestId) : eq(costEventsTable.sourceFile, e.sourceFile);
|
|
405
|
-
return (yield* Effect.promise(() => q.select({ id: costEventsTable.id }).from(costEventsTable).where(condition).limit(1))).length > 0;
|
|
406
|
-
});
|
|
407
|
-
const record = (event, opts) => Effect.gen(function* () {
|
|
408
|
-
if (opts?.dryRun) {
|
|
409
|
-
if (yield* checkDuplicate(event)) return false;
|
|
410
|
-
return true;
|
|
411
|
-
}
|
|
412
|
-
yield* archive.append(event);
|
|
413
|
-
if (yield* checkDuplicate(event)) return false;
|
|
414
|
-
yield* Effect.promise(() => q.insert(costEventsTable).values({
|
|
415
|
-
ts: event.ts,
|
|
416
|
-
issueId: event.issueId,
|
|
417
|
-
agentId: event.agentId,
|
|
418
|
-
sessionId: event.sessionId,
|
|
419
|
-
sessionType: event.sessionType,
|
|
420
|
-
provider: event.provider,
|
|
421
|
-
model: event.model,
|
|
422
|
-
input: event.input,
|
|
423
|
-
output: event.output,
|
|
424
|
-
cacheRead: event.cacheRead,
|
|
425
|
-
cacheWrite: event.cacheWrite,
|
|
426
|
-
cost: event.cost,
|
|
427
|
-
requestId: event.requestId,
|
|
428
|
-
sourceFile: event.sourceFile
|
|
429
|
-
}).onConflictDoNothing());
|
|
430
|
-
yield* bus.emit({
|
|
431
|
-
type: "cost.recorded",
|
|
432
|
-
payload: {
|
|
433
|
-
issueId: event.issueId,
|
|
434
|
-
cost: event.cost
|
|
435
|
-
}
|
|
436
|
-
});
|
|
437
|
-
return true;
|
|
438
|
-
});
|
|
439
|
-
const reconcile = (opts) => Effect.gen(function* () {
|
|
440
|
-
const source = opts?.source ?? "claude";
|
|
441
|
-
const empty = {
|
|
442
|
-
imported: 0,
|
|
443
|
-
skipped: [],
|
|
444
|
-
sessionsScanned: 0,
|
|
445
|
-
eventsImported: 0,
|
|
446
|
-
duplicatesSkipped: 0,
|
|
447
|
-
errors: [],
|
|
448
|
-
earliestEventTs: null,
|
|
449
|
-
latestEventTs: null,
|
|
450
|
-
warnings: []
|
|
451
|
-
};
|
|
452
|
-
if (source !== "ohmypi" && source !== "codex") return empty;
|
|
453
|
-
const agentsDir = join(getOverdeckHome(), "agents");
|
|
454
|
-
const agentNames = yield* Effect.sync(() => {
|
|
455
|
-
if (!existsSync$1(agentsDir)) return [];
|
|
456
|
-
return readdirSync$1(agentsDir, { withFileTypes: true }).filter((e) => e.isDirectory()).map((e) => e.name);
|
|
457
|
-
});
|
|
458
|
-
let imported = 0;
|
|
459
|
-
const skipped = [];
|
|
460
|
-
let duplicatesSkipped = 0;
|
|
461
|
-
let sessionsScanned = 0;
|
|
462
|
-
let earliestEventTs = null;
|
|
463
|
-
let latestEventTs = null;
|
|
464
|
-
const errors = [];
|
|
465
|
-
const warnings = [];
|
|
466
|
-
const markSkipped = (file, reason) => {
|
|
467
|
-
skipped.push({
|
|
468
|
-
file,
|
|
469
|
-
reason
|
|
470
|
-
});
|
|
471
|
-
console.warn(`[cost-reconcile] skipped ${file}: ${reason}`);
|
|
472
|
-
};
|
|
473
|
-
const markWarning = (warning) => {
|
|
474
|
-
warnings.push(warning);
|
|
475
|
-
console.warn(`[cost-reconcile] warning ${warning.file}: ${warning.reason} provider=${warning.provider ?? "unknown"} model=${warning.model}`);
|
|
476
|
-
};
|
|
477
|
-
const noteImportedTimestamp = (ts) => {
|
|
478
|
-
const iso = ts.toISOString();
|
|
479
|
-
if (earliestEventTs == null || iso < earliestEventTs) earliestEventTs = iso;
|
|
480
|
-
if (latestEventTs == null || iso > latestEventTs) latestEventTs = iso;
|
|
481
|
-
};
|
|
482
|
-
const roots = agentNames.map((agentName) => ({
|
|
483
|
-
root: source === "ohmypi" ? join(agentsDir, agentName, "sessions") : join(agentsDir, agentName, "codex-home", "sessions"),
|
|
484
|
-
agentName,
|
|
485
|
-
issueId: issueIdFromAgentName(agentName),
|
|
486
|
-
sessionType: source
|
|
487
|
-
}));
|
|
488
|
-
if (source === "codex") for (const root of opts?.extraRoots ?? []) roots.push({
|
|
489
|
-
root,
|
|
490
|
-
agentName: "codex-global",
|
|
491
|
-
issueId: null,
|
|
492
|
-
sessionType: "codex",
|
|
493
|
-
inferIssueFromCwd: true
|
|
494
|
-
});
|
|
495
|
-
for (const extra of opts?.extraRootSpecs ?? []) {
|
|
496
|
-
if (source === "codex" && extra.kind === "codex-global") roots.push({
|
|
497
|
-
root: extra.root,
|
|
498
|
-
agentName: "codex-global",
|
|
499
|
-
issueId: null,
|
|
500
|
-
sessionType: "codex",
|
|
501
|
-
inferIssueFromCwd: true
|
|
502
|
-
});
|
|
503
|
-
if (source === "ohmypi" && extra.kind === "ohmypi-global") {
|
|
504
|
-
const encodedRoots = yield* Effect.sync(() => {
|
|
505
|
-
if (!existsSync$1(extra.root)) return [];
|
|
506
|
-
return readdirSync$1(extra.root, { withFileTypes: true }).filter((e) => e.isDirectory()).map((e) => ({
|
|
507
|
-
root: join(extra.root, e.name),
|
|
508
|
-
agentName: "pi-global",
|
|
509
|
-
issueId: inferIssueFromPiEncodedRootName(e.name) ?? "UNKNOWN",
|
|
510
|
-
sessionType: "ohmypi"
|
|
511
|
-
}));
|
|
512
|
-
});
|
|
513
|
-
roots.push(...encodedRoots);
|
|
514
|
-
}
|
|
515
|
-
if (source === "ohmypi" && extra.kind === "ohmypi-legacy-agents") {
|
|
516
|
-
const legacyRoots = yield* Effect.sync(() => {
|
|
517
|
-
if (!existsSync$1(extra.root)) return [];
|
|
518
|
-
return readdirSync$1(extra.root, { withFileTypes: true }).filter((e) => e.isDirectory()).map((e) => ({
|
|
519
|
-
root: join(extra.root, e.name, "sessions"),
|
|
520
|
-
agentName: e.name,
|
|
521
|
-
issueId: issueIdFromAgentName(e.name),
|
|
522
|
-
sessionType: "ohmypi"
|
|
523
|
-
}));
|
|
524
|
-
});
|
|
525
|
-
roots.push(...legacyRoots);
|
|
526
|
-
}
|
|
527
|
-
}
|
|
528
|
-
for (const root of roots) {
|
|
529
|
-
const sessionFiles = yield* Effect.sync(() => walkJsonl(root.root));
|
|
530
|
-
for (const sessionFile of sessionFiles) {
|
|
531
|
-
sessionsScanned++;
|
|
532
|
-
if (source === "ohmypi") {
|
|
533
|
-
const parsed = yield* Effect.sync(() => {
|
|
534
|
-
try {
|
|
535
|
-
return parseOhmypiSessionCostResultSync(sessionFile);
|
|
536
|
-
} catch (cause) {
|
|
537
|
-
const reason = cause instanceof Error ? cause.message : String(cause);
|
|
538
|
-
errors.push(`${sessionFile}: ${reason}`);
|
|
539
|
-
return {
|
|
540
|
-
ok: false,
|
|
541
|
-
reason
|
|
542
|
-
};
|
|
543
|
-
}
|
|
544
|
-
});
|
|
545
|
-
if (!parsed.ok) {
|
|
546
|
-
markSkipped(sessionFile, parsed.reason ?? "unreadable");
|
|
547
|
-
continue;
|
|
548
|
-
}
|
|
549
|
-
const events = parsed.usageEvents ?? [];
|
|
550
|
-
if (events.length === 0) {
|
|
551
|
-
markSkipped(sessionFile, "no-usage");
|
|
552
|
-
continue;
|
|
553
|
-
}
|
|
554
|
-
const unpricedWarnings = parsed.unpricedModels ?? [];
|
|
555
|
-
if (unpricedWarnings.length) markSkipped(sessionFile, "unpriced-model");
|
|
556
|
-
for (const usage of events) {
|
|
557
|
-
const derivedWarnings = unpricedWarnings.filter((warning) => warning.model === usage.model && warning.provider === usage.provider).map((warning) => ({
|
|
558
|
-
type: "unpriced-model",
|
|
559
|
-
...warning
|
|
560
|
-
}));
|
|
561
|
-
const eventWarnings = usage.warnings?.length ? usage.warnings : derivedWarnings;
|
|
562
|
-
for (const warning of eventWarnings) markWarning({
|
|
563
|
-
file: sessionFile,
|
|
564
|
-
reason: warning.reason,
|
|
565
|
-
provider: warning.provider,
|
|
566
|
-
model: warning.model
|
|
567
|
-
});
|
|
568
|
-
const ts = new Date(usage.timestamp);
|
|
569
|
-
if (yield* record({
|
|
570
|
-
ts,
|
|
571
|
-
issueId: root.issueId,
|
|
572
|
-
agentId: root.agentName,
|
|
573
|
-
sessionId: usage.sessionId,
|
|
574
|
-
sessionType: root.sessionType,
|
|
575
|
-
provider: inferPiProvider(usage.model, usage.provider),
|
|
576
|
-
model: usage.model,
|
|
577
|
-
input: usage.input,
|
|
578
|
-
output: usage.output,
|
|
579
|
-
cacheRead: usage.cacheRead,
|
|
580
|
-
cacheWrite: usage.cacheWrite,
|
|
581
|
-
cost: usage.cost,
|
|
582
|
-
requestId: usage.requestId,
|
|
583
|
-
sourceFile: sessionFile,
|
|
584
|
-
warnings: eventWarnings.length > 0 ? eventWarnings : void 0
|
|
585
|
-
}, { dryRun: opts?.dryRun })) {
|
|
586
|
-
imported++;
|
|
587
|
-
noteImportedTimestamp(ts);
|
|
588
|
-
} else duplicatesSkipped++;
|
|
589
|
-
}
|
|
590
|
-
continue;
|
|
591
|
-
}
|
|
592
|
-
const events = yield* Effect.sync(() => {
|
|
593
|
-
try {
|
|
594
|
-
return parseCodexSessionCostEventsSync(sessionFile);
|
|
595
|
-
} catch (cause) {
|
|
596
|
-
errors.push(`${sessionFile}: ${cause instanceof Error ? cause.message : String(cause)}`);
|
|
597
|
-
return [];
|
|
598
|
-
}
|
|
599
|
-
});
|
|
600
|
-
if (events.length === 0) {
|
|
601
|
-
markSkipped(sessionFile, "no-usage");
|
|
602
|
-
continue;
|
|
603
|
-
}
|
|
604
|
-
if (events.some((event) => event.model === "unknown")) markSkipped(sessionFile, "unknown-model");
|
|
605
|
-
const codexSession = root.inferIssueFromCwd ? yield* Effect.sync(() => parseCodexSessionSync(sessionFile)) : null;
|
|
606
|
-
const issueId = root.inferIssueFromCwd ? inferIssueFromPath(codexSession?.cwd) ?? "UNKNOWN" : root.issueId;
|
|
607
|
-
for (const usage of events) {
|
|
608
|
-
const ts = new Date(usage.timestamp);
|
|
609
|
-
if (yield* record({
|
|
610
|
-
ts,
|
|
611
|
-
issueId,
|
|
612
|
-
agentId: root.agentName,
|
|
613
|
-
sessionId: usage.sessionId,
|
|
614
|
-
sessionType: root.sessionType,
|
|
615
|
-
provider: usage.provider,
|
|
616
|
-
model: usage.model,
|
|
617
|
-
input: usage.input,
|
|
618
|
-
output: usage.output,
|
|
619
|
-
cacheRead: usage.cacheRead,
|
|
620
|
-
cacheWrite: usage.cacheWrite,
|
|
621
|
-
cost: usage.cost,
|
|
622
|
-
requestId: usage.requestId,
|
|
623
|
-
sourceFile: sessionFile
|
|
624
|
-
}, { dryRun: opts?.dryRun })) {
|
|
625
|
-
imported++;
|
|
626
|
-
noteImportedTimestamp(ts);
|
|
627
|
-
} else duplicatesSkipped++;
|
|
628
|
-
}
|
|
629
|
-
}
|
|
630
|
-
}
|
|
631
|
-
return {
|
|
632
|
-
imported,
|
|
633
|
-
skipped,
|
|
634
|
-
sessionsScanned,
|
|
635
|
-
eventsImported: imported,
|
|
636
|
-
duplicatesSkipped,
|
|
637
|
-
errors,
|
|
638
|
-
earliestEventTs,
|
|
639
|
-
latestEventTs,
|
|
640
|
-
warnings
|
|
641
|
-
};
|
|
642
|
-
});
|
|
643
|
-
const rebuild = () => Effect.gen(function* () {
|
|
644
|
-
return { events: 0 };
|
|
645
|
-
});
|
|
646
|
-
const createBudget = (spec) => Effect.gen(function* () {
|
|
647
|
-
return mapBudget(yield* Effect.sync(() => createBudgetSync({
|
|
648
|
-
...spec,
|
|
649
|
-
enabled: true
|
|
650
|
-
})));
|
|
651
|
-
});
|
|
652
|
-
const deleteBudget = (id) => Effect.gen(function* () {
|
|
653
|
-
if (!(yield* Effect.sync(() => deleteBudgetSync(id)))) return yield* Effect.fail(new BudgetNotFound({ id }));
|
|
654
|
-
});
|
|
655
|
-
return CostWriter.of({
|
|
656
|
-
record,
|
|
657
|
-
reconcile,
|
|
658
|
-
rebuild,
|
|
659
|
-
createBudget,
|
|
660
|
-
deleteBudget
|
|
661
|
-
});
|
|
662
|
-
})).pipe(Layer.provide(Layer.mergeAll(DbLive, EventBusLive.pipe(Layer.provide(DbLive)), CostArchiveLive)));
|
|
663
|
-
HttpApiGroup.make("costs").add(HttpApiEndpoint.get("summary", "/costs/summary", {
|
|
664
|
-
query: {
|
|
665
|
-
window: Schema.optional(Window),
|
|
666
|
-
project: Schema.optional(Schema.String)
|
|
667
|
-
},
|
|
668
|
-
success: WindowSummary
|
|
669
|
-
})).add(HttpApiEndpoint.get("byIssue", "/costs/by-issue", { success: Schema.Array(Rollup) })).add(HttpApiEndpoint.get("issueDetail", "/costs/issue/:id", {
|
|
670
|
-
params: { id: IssueId },
|
|
671
|
-
success: IssueCost
|
|
672
|
-
})).add(HttpApiEndpoint.get("byDay", "/costs/trends", {
|
|
673
|
-
query: {
|
|
674
|
-
days: Schema.optional(Schema.NumberFromString),
|
|
675
|
-
issueId: Schema.optional(IssueId)
|
|
676
|
-
},
|
|
677
|
-
success: Schema.Array(Rollup)
|
|
678
|
-
})).add(HttpApiEndpoint.get("byModel", "/costs/by-model", {
|
|
679
|
-
query: { issueId: Schema.optional(IssueId) },
|
|
680
|
-
success: Schema.Array(Rollup)
|
|
681
|
-
})).add(HttpApiEndpoint.get("byAgent", "/costs/by-agent", {
|
|
682
|
-
query: { issueId: Schema.optional(IssueId) },
|
|
683
|
-
success: Schema.Array(Rollup)
|
|
684
|
-
})).add(HttpApiEndpoint.get("byBackgroundSource", "/costs/background", {
|
|
685
|
-
query: { hours: Schema.optional(Schema.NumberFromString) },
|
|
686
|
-
success: Schema.Array(Rollup)
|
|
687
|
-
})).add(HttpApiEndpoint.get("byProject", "/costs/by-project", { success: Schema.Array(Rollup) })).add(HttpApiEndpoint.get("recent", "/costs/stream", {
|
|
688
|
-
query: {
|
|
689
|
-
limit: Schema.optional(Schema.NumberFromString),
|
|
690
|
-
since: Schema.optional(Schema.String)
|
|
691
|
-
},
|
|
692
|
-
success: Schema.Array(CostEvent)
|
|
693
|
-
})).add(HttpApiEndpoint.get("listBudgets", "/costs/budget", { success: Schema.Array(Budget) })).add(HttpApiEndpoint.get("checkBudget", "/costs/budget/:id", {
|
|
694
|
-
params: { id: Schema.String },
|
|
695
|
-
success: BudgetStatus,
|
|
696
|
-
error: BudgetNotFound
|
|
697
|
-
})).add(HttpApiEndpoint.post("reconcile", "/costs/reconcile", {
|
|
698
|
-
payload: Schema.Struct({
|
|
699
|
-
source: Schema.optional(Schema.Literals([
|
|
700
|
-
"claude",
|
|
701
|
-
"ohmypi",
|
|
702
|
-
"codex",
|
|
703
|
-
"acp",
|
|
704
|
-
"wal"
|
|
705
|
-
])),
|
|
706
|
-
dryRun: Schema.optional(Schema.Boolean),
|
|
707
|
-
extraRoots: Schema.optional(Schema.Array(Schema.String))
|
|
708
|
-
}),
|
|
709
|
-
success: Schema.Struct({
|
|
710
|
-
imported: Schema.Number,
|
|
711
|
-
skipped: Schema.Array(Schema.Struct({
|
|
712
|
-
file: Schema.String,
|
|
713
|
-
reason: Schema.String
|
|
714
|
-
})),
|
|
715
|
-
sessionsScanned: Schema.Number,
|
|
716
|
-
eventsImported: Schema.Number,
|
|
717
|
-
duplicatesSkipped: Schema.Number,
|
|
718
|
-
errors: Schema.Array(Schema.String),
|
|
719
|
-
earliestEventTs: Schema.NullOr(Schema.String),
|
|
720
|
-
latestEventTs: Schema.NullOr(Schema.String),
|
|
721
|
-
warnings: Schema.Array(Schema.Struct({
|
|
722
|
-
file: Schema.String,
|
|
723
|
-
reason: Schema.String,
|
|
724
|
-
provider: Schema.NullOr(Schema.String),
|
|
725
|
-
model: Schema.String
|
|
726
|
-
}))
|
|
727
|
-
}),
|
|
728
|
-
error: CostIngestError
|
|
729
|
-
})).add(HttpApiEndpoint.post("rebuild", "/costs/rebuild", {
|
|
730
|
-
success: Schema.Struct({ events: Schema.Number }),
|
|
731
|
-
error: CostIngestError
|
|
732
|
-
})).add(HttpApiEndpoint.post("createBudget", "/costs/budget", {
|
|
733
|
-
payload: BudgetSpec,
|
|
734
|
-
success: Budget,
|
|
735
|
-
error: CostIngestError
|
|
736
|
-
})).add(HttpApiEndpoint["delete"]("deleteBudget", "/costs/budget/:id", {
|
|
737
|
-
params: { id: Schema.String },
|
|
738
|
-
error: BudgetNotFound
|
|
739
|
-
}));
|
|
740
|
-
//#endregion
|
|
741
|
-
//#region ../../lib/cloister/health.ts
|
|
742
48
|
init_cost_sync();
|
|
743
49
|
init_control_settings();
|
|
744
50
|
init_io();
|
|
@@ -883,7 +189,7 @@ async function captureFiles(context, workspace, issueId) {
|
|
|
883
189
|
const recordView = readRecordContinueViewSync(resolveProjectForIssue(issueId) ?? getProjectConfigFromWorkspacePath(workspace), issueId);
|
|
884
190
|
if (recordView) context.continueState = recordView;
|
|
885
191
|
} catch {}
|
|
886
|
-
const claudeMd = join
|
|
192
|
+
const claudeMd = join(workspace, "CLAUDE.md");
|
|
887
193
|
if (existsSync(claudeMd)) context.claudeMd = readFileSync(claudeMd, "utf-8");
|
|
888
194
|
} catch (error) {
|
|
889
195
|
console.error("Error capturing files:", error);
|
|
@@ -1120,9 +426,9 @@ async function performKillAndSpawn(state, options) {
|
|
|
1120
426
|
const context = await Effect.runPromise(captureHandoffContext(state, options.targetModel, options.reason));
|
|
1121
427
|
stopAgentSync(state.id);
|
|
1122
428
|
const prompt = buildHandoffPrompt(context, options.additionalInstructions);
|
|
1123
|
-
const handoffDir = join
|
|
429
|
+
const handoffDir = join(getAgentDir(state.id), "handoffs");
|
|
1124
430
|
mkdirSync(handoffDir, { recursive: true });
|
|
1125
|
-
writeFileSync(join
|
|
431
|
+
writeFileSync(join(handoffDir, `handoff-${Date.now()}.md`), prompt);
|
|
1126
432
|
const newState = await spawnAgent({
|
|
1127
433
|
issueId: state.issueId,
|
|
1128
434
|
workspace: state.workspace,
|
|
@@ -1195,12 +501,11 @@ const performHandoff = (agentId, options) => Effect.tryPromise({
|
|
|
1195
501
|
* Monitors agent costs against configured limits and emits alerts.
|
|
1196
502
|
* Does NOT automatically stop agents - just provides visibility and warnings.
|
|
1197
503
|
*/
|
|
1198
|
-
init_paths();
|
|
1199
504
|
init_config();
|
|
1200
505
|
/**
|
|
1201
506
|
* Path to cost data file
|
|
1202
507
|
*/
|
|
1203
|
-
const COST_DATA_FILE = join
|
|
508
|
+
const COST_DATA_FILE = join(OVERDECK_HOME, "cost-data.json");
|
|
1204
509
|
/**
|
|
1205
510
|
* Load cost data from file
|
|
1206
511
|
*/
|
|
@@ -1235,7 +540,7 @@ function loadCostData() {
|
|
|
1235
540
|
*/
|
|
1236
541
|
function saveCostData(data) {
|
|
1237
542
|
try {
|
|
1238
|
-
const dir = dirname
|
|
543
|
+
const dir = dirname(COST_DATA_FILE);
|
|
1239
544
|
if (!existsSync(dir)) mkdirSync(dir, { recursive: true });
|
|
1240
545
|
const persisted = {
|
|
1241
546
|
perAgent: Object.fromEntries(data.perAgent),
|
|
@@ -1547,7 +852,7 @@ async function activeRoleRunExists(issueId, role, workspacePath) {
|
|
|
1547
852
|
if (stateRole === role && state.status === "starting" && !await Effect.runPromise(sessionExists(candidateId))) return isFreshStarting(state);
|
|
1548
853
|
if (!(stateRole === role && state.status !== "stopped" && state.status !== "error")) return false;
|
|
1549
854
|
if (workspacePath && state.roleRunHead) try {
|
|
1550
|
-
const { formatAnchorShort, snapshotWorkspaceHeadsPromise } = await import("./git-utils-
|
|
855
|
+
const { formatAnchorShort, snapshotWorkspaceHeadsPromise } = await import("./git-utils-BAMwn9Nf.js");
|
|
1551
856
|
const currentHead = await snapshotWorkspaceHeadsPromise(issueId, workspacePath);
|
|
1552
857
|
if (currentHead && currentHead !== state.roleRunHead) {
|
|
1553
858
|
console.log(`[cloister] ${issueId}: ${role} session ${candidateId} is stale (ran against ${formatAnchorShort(state.roleRunHead)}, HEAD is now ${formatAnchorShort(currentHead)}) — not active`);
|
|
@@ -1600,7 +905,7 @@ async function onIssueStateChangePromise(issueId, newState) {
|
|
|
1600
905
|
});
|
|
1601
906
|
return;
|
|
1602
907
|
}
|
|
1603
|
-
const { getReviewStatusSync } = await import("./review-status-
|
|
908
|
+
const { getReviewStatusSync } = await import("./review-status-Bge_3XTR.js");
|
|
1604
909
|
if (getReviewStatusSync(normalizedIssueId)?.mergeStatus === "merged") {
|
|
1605
910
|
const message = `${normalizedIssueId}: skipping ${role} dispatch — merge already landed (merge_status='merged' is terminal)`;
|
|
1606
911
|
console.log(`[cloister] ${message}`);
|
|
@@ -1667,7 +972,7 @@ async function onIssueStateChangePromise(issueId, newState) {
|
|
|
1667
972
|
return;
|
|
1668
973
|
}
|
|
1669
974
|
const branch = `feature/${normalizedIssueId.toLowerCase()}`;
|
|
1670
|
-
const { spawnReviewRoleForIssue } = await import("./review-agent-
|
|
975
|
+
const { spawnReviewRoleForIssue } = await import("./review-agent-Caodi0PX.js");
|
|
1671
976
|
const result = await Effect.runPromise(spawnReviewRoleForIssue({
|
|
1672
977
|
issueId: normalizedIssueId,
|
|
1673
978
|
workspace,
|
|
@@ -1685,7 +990,7 @@ async function onIssueStateChangePromise(issueId, newState) {
|
|
|
1685
990
|
}
|
|
1686
991
|
if (role === "test") {
|
|
1687
992
|
const branch = `feature/${normalizedIssueId.toLowerCase()}`;
|
|
1688
|
-
const { dispatchTestAgentAndNotify } = await import("./test-agent-queue-
|
|
993
|
+
const { dispatchTestAgentAndNotify } = await import("./test-agent-queue-Cu0D6BYe.js");
|
|
1689
994
|
await Effect.runPromise(dispatchTestAgentAndNotify(normalizedIssueId, workspace ?? void 0, branch));
|
|
1690
995
|
const message = `${normalizedIssueId}: test role dispatched from lifecycle state '${newState}'`;
|
|
1691
996
|
console.log(`[cloister] ${message}`);
|
|
@@ -1697,7 +1002,7 @@ async function onIssueStateChangePromise(issueId, newState) {
|
|
|
1697
1002
|
});
|
|
1698
1003
|
return;
|
|
1699
1004
|
}
|
|
1700
|
-
const { spawnRun } = await import("./agents-
|
|
1005
|
+
const { spawnRun } = await import("./agents-DixZjXWm.js");
|
|
1701
1006
|
if (role === "plan") {
|
|
1702
1007
|
const decision = decideAutonomousPlanDispatch(await gatherAutonomousPlanDispatchInput(normalizedIssueId));
|
|
1703
1008
|
if (!decision.allow) {
|
|
@@ -1825,9 +1130,9 @@ async function handleCloisterDomainEventPromise(event) {
|
|
|
1825
1130
|
const payload = payloadRecord(event);
|
|
1826
1131
|
const agentId = typeof payload["agentId"] === "string" ? payload["agentId"] : void 0;
|
|
1827
1132
|
if (agentId && payload["hookName"] === "PostCompact" && !agentId.startsWith("conv-")) try {
|
|
1828
|
-
const { continueCompactedAgentAfterHook } = await import("./compaction-continuation-
|
|
1829
|
-
const { findLastCompactBoundary } = await import("./conversation-service-
|
|
1830
|
-
const { deliverAgentMessage, getAgentStateSync } = await import("./agents-
|
|
1133
|
+
const { continueCompactedAgentAfterHook } = await import("./compaction-continuation-CVjbdGKt.js");
|
|
1134
|
+
const { findLastCompactBoundary } = await import("./conversation-service-BL-asWPX.js");
|
|
1135
|
+
const { deliverAgentMessage, getAgentStateSync } = await import("./agents-DixZjXWm.js");
|
|
1831
1136
|
const continued = await continueCompactedAgentAfterHook({
|
|
1832
1137
|
agentId,
|
|
1833
1138
|
capturePane: (target) => Effect.runPromise(capturePane(target, 80)),
|
|
@@ -1849,34 +1154,34 @@ async function handleCloisterDomainEventPromise(event) {
|
|
|
1849
1154
|
return;
|
|
1850
1155
|
}
|
|
1851
1156
|
if (event.type === "linear_mcp_auth.healthy") {
|
|
1852
|
-
const { processLinearMcpAuthWake } = await import("./linear-mcp-auth-
|
|
1157
|
+
const { processLinearMcpAuthWake } = await import("./linear-mcp-auth-CtRKSHy5.js");
|
|
1853
1158
|
await processLinearMcpAuthWake();
|
|
1854
1159
|
return;
|
|
1855
1160
|
}
|
|
1856
1161
|
if (event.type === "agent.stopped") {
|
|
1857
1162
|
const agentId = event.payload?.agentId;
|
|
1858
1163
|
if (agentId) {
|
|
1859
|
-
const { handleAgentStoppedEvent, handleAgentStoppedForOrphanReviewerSessions } = await import("./deacon-
|
|
1860
|
-
const { handleAgentLifecycleEventForIdleStack } = await import("./idle-stack-reaper-
|
|
1164
|
+
const { handleAgentStoppedEvent, handleAgentStoppedForOrphanReviewerSessions } = await import("./deacon-e6py3jkM.js");
|
|
1165
|
+
const { handleAgentLifecycleEventForIdleStack } = await import("./idle-stack-reaper-CBelVOE3.js");
|
|
1861
1166
|
handleAgentLifecycleEventForIdleStack(agentId);
|
|
1862
1167
|
const slotMatch = /^agent-(.+)-slot-\d+$/.exec(agentId);
|
|
1863
1168
|
await Promise.all([
|
|
1864
1169
|
handleAgentStoppedEvent(agentId),
|
|
1865
1170
|
handleAgentStoppedForOrphanReviewerSessions(agentId),
|
|
1866
|
-
slotMatch ? (await import("./messaging-
|
|
1171
|
+
slotMatch ? (await import("./messaging-Dfbhgjd6.js")).messageAgent(`agent-${slotMatch[1].toLowerCase()}`, `[swarm-event] ${agentId} stopped; run pan swarm status ${slotMatch[1].toUpperCase()} --json`, "reactive:swarm-event") : Promise.resolve()
|
|
1867
1172
|
]);
|
|
1868
1173
|
}
|
|
1869
1174
|
return;
|
|
1870
1175
|
}
|
|
1871
1176
|
if (event.type === "agent.started") {
|
|
1872
1177
|
const agentId = event.payload?.agentId;
|
|
1873
|
-
if (agentId) (await import("./idle-stack-reaper-
|
|
1178
|
+
if (agentId) (await import("./idle-stack-reaper-CBelVOE3.js")).handleAgentLifecycleEventForIdleStack(agentId);
|
|
1874
1179
|
return;
|
|
1875
1180
|
}
|
|
1876
1181
|
if (event.type === "agent.heartbeat_dead") {
|
|
1877
1182
|
const agentId = event.payload?.agentId;
|
|
1878
1183
|
if (agentId) {
|
|
1879
|
-
const { handleAgentHeartbeatDeadEvent } = await import("./deacon-
|
|
1184
|
+
const { handleAgentHeartbeatDeadEvent } = await import("./deacon-e6py3jkM.js");
|
|
1880
1185
|
await handleAgentHeartbeatDeadEvent(agentId, "event");
|
|
1881
1186
|
}
|
|
1882
1187
|
return;
|
|
@@ -1885,7 +1190,7 @@ async function handleCloisterDomainEventPromise(event) {
|
|
|
1885
1190
|
const payload = event.payload;
|
|
1886
1191
|
const issueId = payload?.issueId;
|
|
1887
1192
|
if (issueId) {
|
|
1888
|
-
const { handleReviewCoordinatorDied } = await import("./deacon-
|
|
1193
|
+
const { handleReviewCoordinatorDied } = await import("./deacon-e6py3jkM.js");
|
|
1889
1194
|
await handleReviewCoordinatorDied(issueId, payload?.sessionName ?? "", payload?.reason ?? "");
|
|
1890
1195
|
}
|
|
1891
1196
|
return;
|
|
@@ -1893,7 +1198,7 @@ async function handleCloisterDomainEventPromise(event) {
|
|
|
1893
1198
|
if (event.type === "work.completed") {
|
|
1894
1199
|
const issueId = event.payload?.issueId;
|
|
1895
1200
|
if (issueId) {
|
|
1896
|
-
const { handleWorkCompleted } = await import("./deacon-
|
|
1201
|
+
const { handleWorkCompleted } = await import("./deacon-e6py3jkM.js");
|
|
1897
1202
|
await handleWorkCompleted(issueId);
|
|
1898
1203
|
}
|
|
1899
1204
|
}
|
|
@@ -1904,12 +1209,12 @@ async function handleCloisterDomainEventPromise(event) {
|
|
|
1904
1209
|
const status = payload?.status?.toLowerCase();
|
|
1905
1210
|
if (issueId) {
|
|
1906
1211
|
if (canonicalStatus === "closed" || status === "closed") {
|
|
1907
|
-
const { handleIssueStatusChangedClosed } = await import("./closed-issue-reaper-
|
|
1212
|
+
const { handleIssueStatusChangedClosed } = await import("./closed-issue-reaper-TymtZM37.js");
|
|
1908
1213
|
await handleIssueStatusChangedClosed(issueId);
|
|
1909
1214
|
return;
|
|
1910
1215
|
}
|
|
1911
1216
|
if (canonicalStatus === "todo" || status === "planned" || status === "todo") {
|
|
1912
|
-
const { handleOrphanProposedSpec } = await import("./orphan-proposed-reconciler-
|
|
1217
|
+
const { handleOrphanProposedSpec } = await import("./orphan-proposed-reconciler-CnP0K2v3.js");
|
|
1913
1218
|
await handleOrphanProposedSpec(issueId);
|
|
1914
1219
|
}
|
|
1915
1220
|
}
|
|
@@ -1956,7 +1261,7 @@ const DEFAULT_FPP_CONFIG = {
|
|
|
1956
1261
|
/**
|
|
1957
1262
|
* Path to violations data file
|
|
1958
1263
|
*/
|
|
1959
|
-
const VIOLATIONS_DATA_FILE = join
|
|
1264
|
+
const VIOLATIONS_DATA_FILE = join(OVERDECK_HOME, "fpp-violations.json");
|
|
1960
1265
|
/**
|
|
1961
1266
|
* Load violations from file
|
|
1962
1267
|
*/
|
|
@@ -1976,7 +1281,7 @@ function loadViolations() {
|
|
|
1976
1281
|
*/
|
|
1977
1282
|
function saveViolations(violations) {
|
|
1978
1283
|
try {
|
|
1979
|
-
const dir = dirname
|
|
1284
|
+
const dir = dirname(VIOLATIONS_DATA_FILE);
|
|
1980
1285
|
if (!existsSync(dir)) mkdirSync(dir, { recursive: true });
|
|
1981
1286
|
const persisted = { violations: Array.from(violations.entries()) };
|
|
1982
1287
|
const tempFile = `${VIOLATIONS_DATA_FILE}.tmp`;
|
|
@@ -2102,12 +1407,12 @@ init_paths();
|
|
|
2102
1407
|
/**
|
|
2103
1408
|
* Handoff log file path
|
|
2104
1409
|
*/
|
|
2105
|
-
const HANDOFF_LOG_FILE = join
|
|
1410
|
+
const HANDOFF_LOG_FILE = join(OVERDECK_HOME, "logs", "handoffs.jsonl");
|
|
2106
1411
|
/**
|
|
2107
1412
|
* Ensure log directory exists
|
|
2108
1413
|
*/
|
|
2109
1414
|
function ensureLogDir() {
|
|
2110
|
-
const logDir = join
|
|
1415
|
+
const logDir = join(OVERDECK_HOME, "logs");
|
|
2111
1416
|
if (!existsSync(logDir)) mkdirSync(logDir, { recursive: true });
|
|
2112
1417
|
}
|
|
2113
1418
|
/**
|
|
@@ -2302,7 +1607,7 @@ async function rotateSpecialistSessionPromise(specialistName, workingDir) {
|
|
|
2302
1607
|
let memoryFile;
|
|
2303
1608
|
if (specialistName === "merge-agent" && workingDir) {
|
|
2304
1609
|
memoryContent = await Effect.runPromise(buildMergeAgentMemory(workingDir));
|
|
2305
|
-
memoryFile = join
|
|
1610
|
+
memoryFile = join(OVERDECK_HOME, `merge-agent-memory-${Date.now()}.md`);
|
|
2306
1611
|
writeFileSync(memoryFile, memoryContent);
|
|
2307
1612
|
console.log(`Built memory file: ${memoryFile}`);
|
|
2308
1613
|
}
|
|
@@ -2607,7 +1912,7 @@ async function performHealthCheck(host) {
|
|
|
2607
1912
|
for (const health of needsAttention) {
|
|
2608
1913
|
const idleAgentState = getAgentStateSync(health.agentId);
|
|
2609
1914
|
if (idleAgentState?.role === "sequencer") continue;
|
|
2610
|
-
const { shouldSkipIdlePokeForAgent } = await import("./stuck-remediation-
|
|
1915
|
+
const { shouldSkipIdlePokeForAgent } = await import("./stuck-remediation-DALieAkx.js");
|
|
2611
1916
|
if (shouldSkipIdlePokeForAgent(idleAgentState)) {
|
|
2612
1917
|
host.pokeProgress.delete(health.agentId);
|
|
2613
1918
|
continue;
|
|
@@ -2822,8 +2127,8 @@ async function checkCompletionMarkers(host) {
|
|
|
2822
2127
|
if (!existsSync(AGENTS_DIR)) return;
|
|
2823
2128
|
const agentDirs = readdirSync(AGENTS_DIR, { withFileTypes: true }).filter((d) => d.isDirectory() && d.name.startsWith("agent-"));
|
|
2824
2129
|
for (const dir of agentDirs) {
|
|
2825
|
-
const completedFile = join
|
|
2826
|
-
const processedFile = join
|
|
2130
|
+
const completedFile = join(AGENTS_DIR, dir.name, "completed");
|
|
2131
|
+
const processedFile = join(AGENTS_DIR, dir.name, "completed.processed");
|
|
2827
2132
|
if (!existsSync(completedFile)) continue;
|
|
2828
2133
|
if (existsSync(processedFile)) try {
|
|
2829
2134
|
if (statSync(completedFile).mtimeMs > statSync(processedFile).mtimeMs) {
|
|
@@ -2855,7 +2160,7 @@ async function checkCompletionMarkers(host) {
|
|
|
2855
2160
|
if (retryCount === Infinity) host.processedCompletions.delete(dir.name);
|
|
2856
2161
|
else if (retryCount >= 3) continue;
|
|
2857
2162
|
const issueId = dir.name.replace("agent-", "").toUpperCase();
|
|
2858
|
-
const { getReviewStatusSync } = await import("./review-status-
|
|
2163
|
+
const { getReviewStatusSync } = await import("./review-status-Bge_3XTR.js");
|
|
2859
2164
|
const existingReview = getReviewStatusSync(issueId);
|
|
2860
2165
|
if (existingReview && ["reviewing", "passed"].includes(existingReview.reviewStatus || "")) {
|
|
2861
2166
|
console.log(`🔔 Cloister: Completion marker for ${issueId} — review already ${existingReview.reviewStatus}, marking processed`);
|
|
@@ -2980,7 +2285,7 @@ async function progressFingerprint(_host, agentId) {
|
|
|
2980
2285
|
let head = "";
|
|
2981
2286
|
if (state?.workspace) try {
|
|
2982
2287
|
if (state.issueId) {
|
|
2983
|
-
const { snapshotWorkspaceHeadsPromise } = await import("./git-utils-
|
|
2288
|
+
const { snapshotWorkspaceHeadsPromise } = await import("./git-utils-BAMwn9Nf.js");
|
|
2984
2289
|
head = await snapshotWorkspaceHeadsPromise(state.issueId, state.workspace) ?? "";
|
|
2985
2290
|
} else {
|
|
2986
2291
|
const { stdout } = await execAsync("git rev-parse HEAD", {
|
|
@@ -3022,7 +2327,7 @@ async function pokeAgentWithEscalation(host, agentId) {
|
|
|
3022
2327
|
ineffective
|
|
3023
2328
|
});
|
|
3024
2329
|
if (ineffective >= 4) {
|
|
3025
|
-
const { setAgentPausedSync } = await import("./agent-state-
|
|
2330
|
+
const { setAgentPausedSync } = await import("./agent-state-BrUPf_7Z.js");
|
|
3026
2331
|
try {
|
|
3027
2332
|
setAgentPausedSync(agentId, `needs-you: idle-alive — no observable progress across ${ineffective + 1} pokes (idle-alive escalation)`);
|
|
3028
2333
|
host.emit({
|
|
@@ -3095,7 +2400,7 @@ async function handleAgentCrash(host, agentId) {
|
|
|
3095
2400
|
if (skipReason) {
|
|
3096
2401
|
let recoverUnfinishedOneShot = false;
|
|
3097
2402
|
if (ONE_SHOT_ROLES.has(agentState.role) && agentState.sessionId && agentState.issueId) try {
|
|
3098
|
-
const { getReviewStatusSync } = await import("./review-status-
|
|
2403
|
+
const { getReviewStatusSync } = await import("./review-status-Bge_3XTR.js");
|
|
3099
2404
|
const status = getReviewStatusSync(agentState.issueId);
|
|
3100
2405
|
recoverUnfinishedOneShot = !(status ? isRoleTerminal(agentState.role, {
|
|
3101
2406
|
reviewStatus: status.reviewStatus,
|
|
@@ -3303,8 +2608,8 @@ init_control_settings();
|
|
|
3303
2608
|
init_paths();
|
|
3304
2609
|
init_tmux();
|
|
3305
2610
|
init_activity_logger();
|
|
3306
|
-
const CLOISTER_STATE_FILE = join
|
|
3307
|
-
const LEGACY_SPECIALISTS_DIR = join
|
|
2611
|
+
const CLOISTER_STATE_FILE = join(OVERDECK_HOME, "cloister.state");
|
|
2612
|
+
const LEGACY_SPECIALISTS_DIR = join(OVERDECK_HOME, "specialists");
|
|
3308
2613
|
async function cleanupLegacySpecialistsDirectory() {
|
|
3309
2614
|
await rm(LEGACY_SPECIALISTS_DIR, {
|
|
3310
2615
|
recursive: true,
|
|
@@ -3532,7 +2837,7 @@ var CloisterService = class {
|
|
|
3532
2837
|
let clearedSpecialistCount = 0;
|
|
3533
2838
|
try {
|
|
3534
2839
|
if (existsSync(AGENTS_DIR)) {
|
|
3535
|
-
const { isRunning: isSpecialistRunning } = await import("./specialists-
|
|
2840
|
+
const { isRunning: isSpecialistRunning } = await import("./specialists-CYt1U3Zm.js");
|
|
3536
2841
|
const entries = readdirSync(AGENTS_DIR, { withFileTypes: true });
|
|
3537
2842
|
for (const entry of entries) {
|
|
3538
2843
|
if (!entry.isDirectory()) continue;
|
|
@@ -3567,8 +2872,8 @@ var CloisterService = class {
|
|
|
3567
2872
|
}
|
|
3568
2873
|
try {
|
|
3569
2874
|
const reviewStatuses = loadReviewStatuses();
|
|
3570
|
-
const { resolveProjectFromIssueSync } = await import("./projects-
|
|
3571
|
-
const { getTmuxSessionName, getAllProjectSpecialistStatuses } = await import("./specialists-
|
|
2875
|
+
const { resolveProjectFromIssueSync } = await import("./projects-BMuEf14J.js");
|
|
2876
|
+
const { getTmuxSessionName, getAllProjectSpecialistStatuses } = await import("./specialists-CYt1U3Zm.js");
|
|
3572
2877
|
const activeReviewIssues = /* @__PURE__ */ new Set();
|
|
3573
2878
|
try {
|
|
3574
2879
|
const projSpecs = await getAllProjectSpecialistStatuses();
|
|
@@ -3579,7 +2884,7 @@ var CloisterService = class {
|
|
|
3579
2884
|
}
|
|
3580
2885
|
const globalRs = getAgentRuntimeStateSync(getTmuxSessionName("review-agent"));
|
|
3581
2886
|
if (globalRs?.state === "active" && globalRs.currentIssue) activeReviewIssues.add(globalRs.currentIssue.toUpperCase());
|
|
3582
|
-
const { listRunningAgents } = await import("./agents-
|
|
2887
|
+
const { listRunningAgents } = await import("./agents-DixZjXWm.js");
|
|
3583
2888
|
const agents = await Effect.runPromise(listRunningAgents());
|
|
3584
2889
|
for (const agent of agents) {
|
|
3585
2890
|
if (agent.status === "stopped" || agent.status === "error") continue;
|
|
@@ -3622,7 +2927,7 @@ var CloisterService = class {
|
|
|
3622
2927
|
continue;
|
|
3623
2928
|
}
|
|
3624
2929
|
const branch = `feature/${issueId.toLowerCase()}`;
|
|
3625
|
-
const { spawnReviewRoleForIssue } = await import("./review-agent-
|
|
2930
|
+
const { spawnReviewRoleForIssue } = await import("./review-agent-Caodi0PX.js");
|
|
3626
2931
|
const dispatchResult = await Effect.runPromise(spawnReviewRoleForIssue({
|
|
3627
2932
|
issueId,
|
|
3628
2933
|
workspace,
|
|
@@ -3690,7 +2995,7 @@ var CloisterService = class {
|
|
|
3690
2995
|
});
|
|
3691
2996
|
await this.subscribeToDomainEvents();
|
|
3692
2997
|
try {
|
|
3693
|
-
const { processLinearMcpAuthWake } = await import("./linear-mcp-auth-
|
|
2998
|
+
const { processLinearMcpAuthWake } = await import("./linear-mcp-auth-CtRKSHy5.js");
|
|
3694
2999
|
await processLinearMcpAuthWake();
|
|
3695
3000
|
console.log(" ✓ Reconciled pending Linear MCP auth wakes");
|
|
3696
3001
|
} catch (error) {
|
|
@@ -3717,7 +3022,7 @@ var CloisterService = class {
|
|
|
3717
3022
|
console.log(" ✓ Cloister event store provider installed");
|
|
3718
3023
|
return;
|
|
3719
3024
|
}
|
|
3720
|
-
const { initEventStore } = await import("./event-store-
|
|
3025
|
+
const { initEventStore } = await import("./event-store-C50Qt-f1.js");
|
|
3721
3026
|
const store = await initEventStore();
|
|
3722
3027
|
this.eventStore = store;
|
|
3723
3028
|
this.domainEventUnsubscribe = store.subscribe((event) => {
|
|
@@ -4065,6 +3370,6 @@ function getCloisterService() {
|
|
|
4065
3370
|
return globalService;
|
|
4066
3371
|
}
|
|
4067
3372
|
//#endregion
|
|
4068
|
-
export { generateHealthSummary as a,
|
|
3373
|
+
export { generateHealthSummary as a, performHandoff as i, readCloisterStateFile as n, getAgentHealth as o, checkAllTriggers as r, getAgentsNeedingAttention as s, getCloisterService as t };
|
|
4069
3374
|
|
|
4070
|
-
//# sourceMappingURL=service-
|
|
3375
|
+
//# sourceMappingURL=service-CThO0Sar.js.map
|