@overdeck/desktop 0.49.2 → 0.50.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/drizzle/overdeck/0000_overdeck_init.sql +1 -0
- package/package.json +1 -1
- package/server/{acceptance-criteria-CHtDkHEL.js → acceptance-criteria-DFyrgxW5.js} +2 -2
- package/server/{active-dashboard-bundle-Byh6sP-q.js → active-dashboard-bundle-DbfgP8TS.js} +2 -2
- package/server/{activity-logger-Ck8qoluj.js → activity-logger-DtdKxzPh.js} +1 -1
- package/server/{activity-logger-BWZhVphb.js → activity-logger-ru8ggv-d.js} +3 -3
- package/server/{advancing-selfheal-65W4yUQi.js → advancing-selfheal-BdZ1iFJf.js} +11 -6
- package/server/{agent-gc-BNUudFnt.js → agent-gc-DBMg1vIc.js} +11 -11
- package/server/{agent-idle-ONBssBN_.js → agent-idle-CQlwmcRR.js} +11 -11
- package/server/{agent-state-CM8iVw5B.js → agent-state-B0v3fvGI.js} +1 -1
- package/server/{agent-state-BJhGIJZe.js → agent-state-BnyNoDWQ.js} +345 -402
- package/server/{agent-state-service-CiIuwzIs.js → agent-state-service-D95wBjA3.js} +5 -5
- package/server/{agent-state-service-CzHfoqKQ.js → agent-state-service-GK2Uy8zc.js} +1 -1
- package/server/{agents-DpCuoF65.js → agents-BdkVgjxC.js} +1 -1
- package/server/{agents-jXgqpHca.js → agents-DMs1aLRU.js} +4 -4
- package/server/{archive-planning-CGkU6UeL.js → archive-planning-CFf5FVHQ.js} +5 -5
- package/server/archive-planning-CNSWQPvz.js +2 -0
- package/server/{artifact-index-jobs-Ck4NRRkY.js → artifact-index-jobs-BdeB5RIY.js} +2 -2
- package/server/{assemble-CyvEBmmq.js → assemble-D88iFkP-.js} +2 -2
- package/server/{auto-spawn-consent-Dc4mtM-B.js → auto-spawn-consent-C1avLtkk.js} +7 -7
- package/server/{backlog-auto-trigger-CCEpr4YT.js → backlog-auto-trigger-oKIGNBzZ.js} +3 -3
- package/server/{behavior-BiCQzqyT.js → behavior-CPX0E2Fj.js} +49 -7
- package/server/{bridge-pool-patrol-Ce8rNPym.js → bridge-pool-patrol-DstxbANA.js} +2 -2
- package/server/{briefing-freshness-e_OEYZEe.js → briefing-freshness-FF0WLPMc.js} +2 -2
- package/server/build-info-Df2tkRrB.js +2 -0
- package/server/{build-info-BRw4QlYO.js → build-info-DiA6h4T6.js} +3 -3
- package/server/{checkpoint-manager-DOwRGFff.js → checkpoint-manager-CkXA-F6Z.js} +2 -2
- package/server/{checkpoint-manager-CKr42Usw.js → checkpoint-manager-D74ueYZp.js} +1 -1
- package/server/checkpoint-worker.js +1 -1
- package/server/{checkpoints-Cszp_0Np.js → checkpoints-Ds83fUb1.js} +2 -2
- package/server/{checkpoints-Cb6CWT4S.js → checkpoints-JIKy0UFv.js} +1 -1
- package/server/{claude-hooks-provision-C5JHpxTS.js → claude-hooks-provision-BJ8LNIAe.js} +1 -1
- package/server/{claude-hooks-provision-Cer2eFfj.js → claude-hooks-provision-D7Z8kANm.js} +2 -2
- package/server/{claude-permissions-Bc5kjX1q.js → claude-permissions-Bn53HCXr.js} +18 -3
- package/server/{claude-settings-overlay-m-VVZej1.js → claude-settings-overlay-CqJZjFqv.js} +2 -2
- package/server/{claude-settings-overlay-C7rWsnya.js → claude-settings-overlay-QByq1SQa.js} +1 -1
- package/server/{cli-BmczsfD6.js → cli-BXmAb7vN.js} +11 -11
- package/server/cli-BjznnCC3.js +2 -0
- package/server/{cliproxy-BpYpkogS.js → cliproxy-L_2OxNJf.js} +2 -2
- package/server/{cliproxy-_yUU0HRY.js → cliproxy-ltFu5xfR.js} +1 -1
- package/server/{close-issue-CxvRD0UI.js → close-issue-BZAf0Ii-.js} +5 -5
- package/server/{closed-issue-reaper-nMLRi5de.js → closed-issue-reaper-BJa8SbvQ.js} +13 -13
- package/server/{closed-issue-reaper-omOcUDBl.js → closed-issue-reaper-DVtyOI4C.js} +1 -1
- package/server/{codex-DZhFfcWu.js → codex-BqLZKVNm.js} +1 -1
- package/server/{codex-KaSKE-R3.js → codex-DSs-3aOm.js} +6 -6
- package/server/{compaction-continuation-Bjfi70G-.js → compaction-continuation-TG0HYkOq.js} +3 -3
- package/server/{config-ZGjvuR6J.js → config-Cx3N6gWz.js} +2 -2
- package/server/{config-Doq_tF-f.js → config-DP0VV7rX.js} +2 -2
- package/server/{config-CH1AqqIQ.js → config-DURnId0k.js} +1 -1
- package/server/{config-yaml-D9nfpEx1.js → config-yaml-OoH-ZpTb.js} +48 -9
- package/server/{conflict-gate-DcUTY4Gb.js → conflict-gate-SgOELW84.js} +5 -5
- package/server/{conflict-gate-D4XCtrm2.js → conflict-gate-pMfhBEVB.js} +1 -1
- package/server/{context-layers-BGj2Y9l3.js → context-layers-D0QBOPJJ.js} +2 -2
- package/server/{context-layers-BBTKP-Y4.js → context-layers-LY5zt0da.js} +3 -3
- package/server/{continue-i7Revg8D.js → continue-Cmzd6leL.js} +2 -2
- package/server/{control-settings-BMoDHY1G.js → control-settings-Bdud_B1j.js} +308 -5
- package/server/{conversation-compaction-DzIjYMfg.js → conversation-compaction-BX9UR8nl.js} +1 -1
- package/server/{conversation-compaction-D4VOmF7p.js → conversation-compaction-dFx_2wpa.js} +8 -8
- package/server/{conversation-service-CzZUJFEx.js → conversation-service-B3h1erHm.js} +1 -1
- package/server/{conversation-service-tQCIbBVZ.js → conversation-service-zgLM2g2D.js} +37 -13
- package/server/{conversations-bFDaD5YN.js → conversations-Ch7UGi0F.js} +1 -1
- package/server/{conversations-C75EFFjf.js → conversations-JyrMSeOh.js} +5 -5
- package/server/{cost-CiIwxH1D.js → cost-CxXv7ei-.js} +10 -2
- package/server/cost-DR57uJFP.js +838 -0
- package/server/{cost-BCWEkvro.js → cost-MZ7EZFDc.js} +3 -3
- package/server/{cost-sync-DOkdE_yB.js → cost-sync-Bq_dyq9k.js} +3 -3
- package/server/{dag-BPc74hwj.js → dag-CKUsr8wB.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-CzSZMtb-.js → deacon-BUOpTnmQ.js} +3 -3
- package/server/{deacon-B24dNzr8.js → deacon-C7qZxRuW.js} +125 -165
- package/server/{deacon-canonical-state-CkvxRPck.js → deacon-canonical-state-hcaZgjoT.js} +2 -2
- package/server/{deacon-event-client-Do6Z2gKl.js → deacon-event-client-Coiopt4u.js} +2 -2
- package/server/{deacon-event-client-BYIQBu0T.js → deacon-event-client-DJ71Tifg.js} +1 -1
- 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-Dv0-8bZG.js} +3 -3
- package/server/deacon.js +11 -11
- package/server/dead-end-trip-B91w2PGV.js +2 -0
- package/server/{dead-end-trip-CnVmjnya.js → dead-end-trip-DH_hA7yS.js} +3 -3
- package/server/{delivery-gyce0vQ7.js → delivery-zJM4aIkf.js} +1 -1
- package/server/{deploy-patrol-CEwwEYDM.js → deploy-patrol-Cv96N0s6.js} +8 -8
- package/server/deploy-queue-2cN86Lg4.js +2 -0
- package/server/{deploy-queue-r96ojDI3.js → deploy-queue-EcksuKE2.js} +2 -2
- package/server/{deploy-window-D_3hhfxt.js → deploy-window-BXbzS0zN.js} +4 -4
- package/server/{deploy-window-DeJK8mTK.js → deploy-window-CHgL_TTN.js} +1 -1
- package/server/{dev-supervisor-DZWwpENk.js → dev-supervisor-lNaYB136.js} +2 -2
- package/server/{devcontainer-renderer-d-9dCV_2.js → devcontainer-renderer-q8q9aXRd.js} +3 -3
- package/server/{dist-DsLAsFSh.js → dist-CoR2sivG.js} +1 -1
- package/server/dist-FHv1s5ez.js +3 -0
- package/server/{docker-CRPHBylA.js → docker-BNd0tMdS.js} +1 -1
- package/server/{docker-B2mUBzGk.js → docker-Dk-shfga.js} +3 -3
- package/server/{dod-DWtilRLx.js → dod-BAk5arLF.js} +1 -1
- package/server/{done-preflight-BDVdWed5.js → done-preflight-AiXnYYAy.js} +1 -1
- package/server/{done-preflight-D4ukUf-S.js → done-preflight-CukR3Br8.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-BjMV_gdX.js} +1 -1
- package/server/{ensure-devcontainer-BUeBRjmm.js → ensure-devcontainer-YXncXZ5Q.js} +4 -4
- package/server/{esm-shims-oAaKIa-a.js → esm-shims-deFq5Hhl.js} +1 -1
- package/server/{event-store-Db4w4YIY.js → event-store-CFnLP8w-.js} +1 -1
- package/server/{event-store-BCSgMubf.js → event-store-DbjldlXW.js} +5 -5
- package/server/{event-store-provider-DlSQND3V.js → event-store-provider-Bu1Qrg6v.js} +1 -1
- package/server/{events-B6zioJA_.js → events-Bb2x5ijT.js} +3 -3
- package/server/{factory-BrdqXBeK.js → factory-DfIQG-qW.js} +4 -4
- package/server/{feature-registry-storage-zh3ZXW6f.js → feature-registry-storage-BzAGS4DA.js} +2 -2
- package/server/{features-BGntOWdy.js → features-KxOILHX8.js} +2 -2
- package/server/{feedback-stuck-retirement-DpA5u1kt.js → feedback-stuck-retirement-BqTHm-1Z.js} +2 -2
- package/server/{feedback-target-D7GxdUYG.js → feedback-target-BjLidX0M.js} +10 -10
- package/server/{feedback-target-Ddqk93NF.js → feedback-target-D2CIZFwc.js} +1 -1
- package/server/{feedback-writer-CH2846DP.js → feedback-writer-BrSQ4fC-.js} +1 -1
- package/server/{feedback-writer-C1gCLFmp.js → feedback-writer-Dgrma-L1.js} +5 -5
- package/server/{flywheel-CjW2L7BS.js → flywheel-D5FchYg4.js} +16 -16
- package/server/{flywheel-HJt7QdWP.js → flywheel-Ds0eOd1P.js} +1 -1
- package/server/{flywheel-v1cCOBx-.js → flywheel-X6kvGnf2.js} +15 -15
- package/server/{flywheel-merge-order-D_yyAlND.js → flywheel-merge-order-BTY73Efv.js} +17 -15
- package/server/{flywheel-merge-order-4fNRN2F2.js → flywheel-merge-order-PTHnouQS.js} +1 -1
- package/server/{forge-RVTCK_5X.js → forge-B08cRXEb.js} +2 -2
- package/server/forge-egNLsjVi.js +2 -0
- package/server/{from-BnLgKYvw.js → from-C3dzmjSO.js} +1 -1
- package/server/{fs-lock-C7J-ugIf.js → fs-lock-DfiYlr5u.js} +2 -2
- package/server/{fts-operations-CU0B5WUx.js → fts-operations-Do1SP0w4.js} +2 -2
- package/server/{git-info-BSrI9owC.js → git-info-DMOSfJ9I.js} +1 -1
- package/server/{git-utils-DW8-jIUJ.js → git-utils-DfpFkvwk.js} +4 -4
- package/server/{git-utils-CsKV0Dis.js → git-utils-fcK3ZRNj.js} +1 -1
- package/server/{github-app-7ywLhuZO.js → github-app-Co8ZhyUJ.js} +2 -2
- package/server/{github-app-Oi5hdn1n.js → github-app-HAqQZZRD.js} +1 -1
- package/server/{github-client-Cy0fSj1a.js → github-client-C7MUxFzX.js} +1 -1
- package/server/{github-client-DAbuXLuk.js → github-client-wqbDCmlL.js} +2 -2
- package/server/{github-pr-lookup-Dhh3ec1V.js → github-pr-lookup-DdLCDdu9.js} +2 -2
- package/server/{harness-binary-tMmgJfC1.js → harness-binary-BuakhXkB.js} +2 -2
- package/server/{harness-resolve-DusNpVEe.js → harness-resolve-CISjc9FR.js} +4 -4
- package/server/{health-events-BYDZ9n2i.js → health-events-9RhRGZK1.js} +1 -1
- package/server/{health-events-DNw9Mzw9.js → health-events-CIE7gy34.js} +2 -2
- package/server/{hooks-B4wj32l2.js → hooks-CmL3TXla.js} +1 -1
- package/server/{hooks-BjBjxqNh.js → hooks-D55VTdQS.js} +2 -2
- package/server/{hume-BP9YbxaE.js → hume-1FJmNDTq.js} +2 -2
- package/server/hume-gXLmRhmN.js +3 -0
- package/server/{identity-C23uY8dZ.js → identity-CZbJ0xpl.js} +3 -3
- package/server/{idle-stack-reaper-BSxb1bln.js → idle-stack-reaper-CjovDCet.js} +4 -4
- package/server/{idle-stack-reaper-Bw0rU9GC.js → idle-stack-reaper-DhbFdkWv.js} +1 -1
- package/server/{in-flight-guard-DuxabAHT.js → in-flight-guard-B7khcBdQ.js} +1 -1
- package/server/{infra-CHIvOb9q.js → infra-BbSWNOpH.js} +10 -4
- package/server/{injection-BYUt8ml1.js → injection-BSnn_10a.js} +8 -8
- package/server/{injection-BviePcm3.js → injection-DsQDBSEi.js} +1 -1
- package/server/inspect-agent-BuSYgRQs.js +2 -0
- package/server/{inspect-agent-sV_19NxZ.js → inspect-agent-DS8j2v6U.js} +12 -12
- package/server/{internal-token-DoVzb4b7.js → internal-token-CUKcTWSG.js} +2 -2
- package/server/{internal-token-BOtIRJU7.js → internal-token-CkrMLCLU.js} +1 -1
- package/server/{io-DKrWd3gX.js → io-BgzG56av.js} +4 -4
- package/server/{issue-closed-6RQsAjDX.js → issue-closed-DZEwD3ol.js} +7 -7
- package/server/{issue-lifecycle-DOPVv7xz.js → issue-lifecycle-Bnfbpkmk.js} +1 -1
- package/server/{issue-lifecycle-D9nLErvS.js → issue-lifecycle-LgYeE1o2.js} +25 -25
- package/server/{issue-service-singleton-B2xy-IS9.js → issue-service-singleton-Bsb0GaY8.js} +10 -10
- package/server/{issue-service-singleton-CvgNAWqK.js → issue-service-singleton-COEqWNKE.js} +1 -1
- package/server/{issue-title-fallback-DTSCQVu0.js → issue-title-fallback-D4_b2XwP.js} +3 -3
- package/server/{issues-e_Ck1Ln2.js → issues-DYAEUW45.js} +2 -2
- package/server/{jsonl-parser-DqxVCZ1k.js → jsonl-parser-1IqHI9Yb.js} +3 -3
- package/server/{jsonl-resolver-07OS3qOr.js → jsonl-resolver-BJ8Hg-yD.js} +8 -8
- package/server/{kimi-code-vtXl2DR5.js → kimi-code-Cdkk9vRU.js} +1 -1
- package/server/{kimi-code-BjtAHIz1.js → kimi-code-DwqLCWFw.js} +11 -11
- package/server/{kimi-parser-B1lgy2Vt.js → kimi-parser-DFsZQArz.js} +2 -2
- package/server/{label-cleanup-D2zUMasf.js → label-cleanup-Bej6xDZK.js} +3 -3
- package/server/{lifecycle-0NOEzomy.js → lifecycle-BibLMHBH.js} +2 -2
- package/server/{lifecycle-DaCovZwn.js → lifecycle-CMpSB9sn.js} +6 -6
- package/server/{lifecycle-io-6WL46dsB.js → lifecycle-io-CCCAMefe.js} +5 -5
- package/server/{lifecycle-io-BBMTaP7S.js → lifecycle-io-CLWwYZaR.js} +1 -1
- package/server/{linear-client-BTGApNLo.js → linear-client-BtYl16Cy.js} +1 -1
- package/server/{linear-client-7fQThJTc.js → linear-client-fpL-qJEa.js} +2 -2
- package/server/{linear-mcp-auth-B8pYRsiU.js → linear-mcp-auth-CQ7ROT1X.js} +1 -1
- package/server/{linear-mcp-auth-Nk5s3L9M.js → linear-mcp-auth-nAYWoUbH.js} +5 -5
- package/server/memory-fts-worker.js +1 -1
- package/server/{memory-governor-Cqvbusr4.js → memory-governor-Mi5zF5zw.js} +87 -21
- package/server/{memory-pressure-patrol-DPb8foam.js → memory-pressure-patrol-CDeDh46A.js} +38 -14
- package/server/{merge-BB_bjJ9a.js → merge-DCuDLiy9.js} +1 -1
- package/server/{merge-FZ78_cEz.js → merge-_XIivhkq.js} +3 -3
- package/server/{merge-agent-BuoC_PRZ.js → merge-agent-svBDRWB6.js} +2 -2
- package/server/{merge-agent-B3jRrlS1.js → merge-agent-zF9vqWqY.js} +31 -31
- package/server/{merge-batch-B8bVjFWS.js → merge-batch-BJjzUUL7.js} +1 -1
- package/server/{merge-completeness-DQt7Qa7i.js → merge-completeness-CQPqu-pI.js} +4 -4
- package/server/{merge-completeness-DkdabVch.js → merge-completeness-CeQheehh.js} +1 -1
- package/server/merge-eligibility-CJrBhQQe.js +3 -0
- package/server/merge-eligibility-DhxVE8qU.js +51 -0
- package/server/merge-ops-CUzpOPtO.js +2 -0
- package/server/{merge-rebase-qq40s91P.js → merge-rebase-Bjo45m3k.js} +2 -2
- package/server/merge-rebase-DkfcUT60.js +2 -0
- package/server/{merge-set-BmRRflt0.js → merge-set-COZvz2nx.js} +4 -4
- package/server/{merge-set-BTNYvxM3.js → merge-set-ChxZgjBB.js} +1 -1
- package/server/{merge-sync-CJpOa0cZ.js → merge-sync-CCi1Esdx.js} +2 -2
- package/server/{merge-sync-0m2Q087q.js → merge-sync-DuJ6Vkl3.js} +1 -1
- package/server/{merge-train-iwKqjtCF.js → merge-train-DTJXF8ph.js} +4 -4
- package/server/{merge-train-deps-CH5Mr3vN.js → merge-train-deps-C0P0qGKe.js} +4 -4
- package/server/{merge-verification-JJc5GC2t.js → merge-verification-C5FexOBZ.js} +6 -6
- package/server/{merged-docker-cleanup-worker-CrhTdxZV.js → merged-docker-cleanup-worker-0SEDG3Ao.js} +1 -1
- package/server/{merged-docker-cleanup-worker-BOqWA373.js → merged-docker-cleanup-worker-C-kSp_jw.js} +3 -3
- package/server/{messaging-nuwStbdQ.js → messaging-DQi-WEFB.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 +28 -28
- 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 +10 -5
- package/server/node_modules/@types/node/buffer.d.ts +1 -0
- package/server/node_modules/@types/node/crypto.d.ts +2 -4
- package/server/node_modules/@types/node/dgram.d.ts +119 -4
- package/server/node_modules/@types/node/diagnostics_channel.d.ts +4 -4
- package/server/node_modules/@types/node/ffi.d.ts +1 -1
- package/server/node_modules/@types/node/fs/promises.d.ts +61 -65
- package/server/node_modules/@types/node/fs.d.ts +86 -76
- package/server/node_modules/@types/node/http.d.ts +18 -2
- package/server/node_modules/@types/node/http2.d.ts +12 -4
- package/server/node_modules/@types/node/index.d.ts +1 -0
- package/server/node_modules/@types/node/inspector.d.ts +2 -1
- package/server/node_modules/@types/node/net.d.ts +108 -16
- package/server/node_modules/@types/node/package.json +3 -3
- package/server/node_modules/@types/node/perf_hooks.d.ts +31 -19
- package/server/node_modules/@types/node/process.d.ts +52 -0
- package/server/node_modules/@types/node/quic.d.ts +252 -42
- package/server/node_modules/@types/node/sqlite.d.ts +6 -2
- package/server/node_modules/@types/node/stream/iter.d.ts +4 -4
- package/server/node_modules/@types/node/stream/web.d.ts +20 -0
- package/server/node_modules/@types/node/test.d.ts +36 -0
- package/server/node_modules/@types/node/tls.d.ts +50 -15
- package/server/node_modules/@types/node/ts5.6/buffer.buffer.d.ts +5 -0
- package/server/node_modules/@types/node/ts5.6/index.d.ts +1 -0
- package/server/node_modules/@types/node/ts5.7/index.d.ts +1 -0
- package/server/node_modules/@types/node/tty.d.ts +4 -3
- package/server/node_modules/@types/node/vfs.d.ts +211 -0
- package/server/node_modules/@types/node/vm.d.ts +1 -1
- package/server/node_modules/@types/node/zlib.d.ts +17 -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/README.md +1 -0
- package/server/node_modules/msgpackr/dist/index-no-eval.cjs +13 -7
- 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 +13 -7
- 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 +13 -7
- package/server/node_modules/msgpackr/dist/node.cjs.map +1 -1
- package/server/node_modules/msgpackr/dist/test.js +63 -7
- 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/index.d.cts +1 -0
- package/server/node_modules/msgpackr/index.d.ts +1 -0
- package/server/node_modules/msgpackr/pack.js +2 -2
- 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/node_modules/protobufjs/dist/light/protobuf.js +59 -6
- package/server/node_modules/protobufjs/dist/light/protobuf.js.map +1 -1
- package/server/node_modules/protobufjs/dist/light/protobuf.min.js +3 -3
- package/server/node_modules/protobufjs/dist/light/protobuf.min.js.map +1 -1
- package/server/node_modules/protobufjs/dist/minimal/protobuf.js +22 -2
- package/server/node_modules/protobufjs/dist/minimal/protobuf.js.map +1 -1
- package/server/node_modules/protobufjs/dist/minimal/protobuf.min.js +3 -3
- package/server/node_modules/protobufjs/dist/minimal/protobuf.min.js.map +1 -1
- package/server/node_modules/protobufjs/dist/protobuf.js +59 -6
- package/server/node_modules/protobufjs/dist/protobuf.js.map +1 -1
- package/server/node_modules/protobufjs/dist/protobuf.min.js +3 -3
- package/server/node_modules/protobufjs/dist/protobuf.min.js.map +1 -1
- package/server/node_modules/protobufjs/package.json +1 -1
- package/server/node_modules/protobufjs/src/decoder.js +32 -3
- package/server/node_modules/protobufjs/src/reader.js +20 -0
- package/server/node_modules/protobufjs/src/wrappers.js +5 -1
- package/server/node_modules/undici/docs/docs/api/Client.md +4 -0
- package/server/node_modules/undici/docs/docs/api/EnvHttpProxyAgent.md +3 -2
- package/server/node_modules/undici/docs/docs/api/EventSource.md +4 -0
- package/server/node_modules/undici/docs/docs/api/Interceptors.md +7 -3
- package/server/node_modules/undici/docs/docs/api/Socks5ProxyAgent.md +7 -1
- package/server/node_modules/undici/lib/cache/memory-cache-store.js +2 -2
- package/server/node_modules/undici/lib/core/symbols.js +2 -0
- package/server/node_modules/undici/lib/dispatcher/agent.js +7 -2
- package/server/node_modules/undici/lib/dispatcher/balanced-pool.js +7 -4
- package/server/node_modules/undici/lib/dispatcher/client-h1.js +12 -4
- package/server/node_modules/undici/lib/dispatcher/client-h2.js +43 -3
- package/server/node_modules/undici/lib/dispatcher/client.js +3 -2
- package/server/node_modules/undici/lib/dispatcher/dispatcher-base.js +13 -1
- package/server/node_modules/undici/lib/dispatcher/dispatcher.js +15 -1
- package/server/node_modules/undici/lib/dispatcher/dispatcher1-wrapper.js +3 -0
- package/server/node_modules/undici/lib/dispatcher/env-http-proxy-agent.js +10 -3
- package/server/node_modules/undici/lib/dispatcher/proxy-agent.js +18 -1
- package/server/node_modules/undici/lib/dispatcher/retry-agent.js +3 -0
- package/server/node_modules/undici/lib/dispatcher/round-robin-pool.js +1 -1
- package/server/node_modules/undici/lib/dispatcher/socks5-proxy-agent.js +91 -21
- package/server/node_modules/undici/lib/handler/cache-handler.js +29 -5
- package/server/node_modules/undici/lib/handler/decorator-handler.js +7 -1
- package/server/node_modules/undici/lib/handler/deduplication-handler.js +12 -6
- package/server/node_modules/undici/lib/handler/redirect-handler.js +21 -4
- package/server/node_modules/undici/lib/handler/retry-handler.js +148 -30
- package/server/node_modules/undici/lib/interceptor/cache.js +65 -12
- package/server/node_modules/undici/lib/interceptor/decompress.js +115 -13
- package/server/node_modules/undici/lib/interceptor/deduplicate.js +5 -4
- package/server/node_modules/undici/lib/interceptor/dns.js +7 -0
- package/server/node_modules/undici/lib/interceptor/dump.js +10 -23
- package/server/node_modules/undici/lib/mock/mock-agent.js +13 -1
- package/server/node_modules/undici/lib/mock/mock-utils.js +11 -10
- package/server/node_modules/undici/lib/util/cache.js +45 -3
- package/server/node_modules/undici/lib/web/cookies/parse.js +150 -147
- package/server/node_modules/undici/lib/web/eventsource/eventsource-stream.js +28 -1
- package/server/node_modules/undici/lib/web/eventsource/eventsource.js +13 -3
- package/server/node_modules/undici/lib/web/fetch/index.js +6 -0
- package/server/node_modules/undici/lib/web/fetch/request.js +2 -3
- package/server/node_modules/undici/lib/web/fetch/util.js +6 -1
- package/server/node_modules/undici/lib/web/webidl/index.js +3 -3
- package/server/node_modules/undici/lib/web/websocket/connection.js +1 -1
- package/server/node_modules/undici/lib/web/websocket/permessage-deflate.js +5 -0
- package/server/node_modules/undici/lib/web/websocket/stream/websocketstream.js +8 -10
- package/server/node_modules/undici/package.json +3 -3
- package/server/node_modules/undici/types/client.d.ts +10 -0
- package/server/node_modules/undici/types/interceptors.d.ts +2 -0
- package/server/node_modules/undici/types/mock-agent.d.ts +11 -10
- package/server/node_modules/undici/types/socks5-proxy-agent.d.ts +2 -0
- package/server/node_modules/undici-types/client.d.ts +8 -3
- package/server/node_modules/undici-types/connector.d.ts +1 -0
- package/server/node_modules/undici-types/cookies.d.ts +1 -1
- package/server/node_modules/undici-types/dispatcher.d.ts +3 -3
- package/server/node_modules/undici-types/errors.d.ts +10 -0
- package/server/node_modules/undici-types/fetch.d.ts +5 -1
- package/server/node_modules/undici-types/handlers.d.ts +2 -0
- package/server/node_modules/undici-types/interceptors.d.ts +1 -1
- package/server/node_modules/undici-types/mock-interceptor.d.ts +5 -1
- package/server/node_modules/undici-types/package.json +1 -1
- package/server/node_modules/undici-types/proxy-agent.d.ts +7 -0
- package/server/{orphan-proposed-reconciler-gf4TxfZb.js → orphan-proposed-reconciler--V8GIzmY.js} +2 -2
- package/server/{orphan-proposed-reconciler-Dmk0kO_p.js → orphan-proposed-reconciler-BSsKWmsB.js} +21 -21
- package/server/package-lock.json +29 -29
- package/server/package.json +1 -1
- package/server/{pan-dir-BMda7tQj.js → pan-dir-COaYhZel.js} +4 -4
- package/server/{parked-residue-BiHb8cD7.js → parked-residue-Dvr4W9P6.js} +68 -64
- package/server/{paths-DEe9j-kw.js → paths-Cm1Q7Old.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-DCCwbUj8.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-BRhU7XPx.js → pipeline-membership-gather-DGoDOfKO.js} +1 -1
- package/server/{pipeline-membership-gather-BK4dzh0X.js → pipeline-membership-gather-UN7kHpCD.js} +10 -10
- package/server/{pipeline-notifier-BNAV9kpa.js → pipeline-notifier-DfH2i_zP.js} +2 -2
- package/server/{pipeline-notifier-DvHLaXKb.js → pipeline-notifier-DsCfxoSU.js} +1 -1
- package/server/{post-merge-lifecycle-worker-DAWgzXQA.js → post-merge-lifecycle-worker-V51p8tSm.js} +2 -2
- package/server/{post-merge-state-DC2_0t12.js → post-merge-state-Cym5NVlB.js} +4 -4
- package/server/{prd-locations-BbAvqQmT.js → prd-locations-CPuMD55x.js} +3 -3
- package/server/{project-pipelines-By_5WcT4.js → project-pipelines-DdDKdXrG.js} +2 -2
- package/server/{project-repos-3bI6t4fO.js → project-repos-CNrLxJDg.js} +1 -1
- package/server/{project-repos--QeCg7yQ.js → project-repos-DqAT7YV6.js} +2 -2
- package/server/{project-resource-refresh-queue-BaZC79S3.js → project-resource-refresh-queue-C-umDazS.js} +1 -1
- package/server/{project-resource-refresh-queue-x-K9mvpP.js → project-resource-refresh-queue-Dh8k2SB7.js} +17 -17
- package/server/{projects-LftaVK99.js → projects-Crur9uCa.js} +1 -1
- package/server/{prompts-BotGu-6W.js → prompts-CvtVJUpG.js} +2 -2
- package/server/{providers-BL1I66sM.js → providers-1BlEh5x1.js} +7 -7
- package/server/{providers-Dqgz3MY5.js → providers-Bun8zer5.js} +1 -1
- package/server/public/assets/{chunk-BO2N2NFS-D5Fz5jND.js → chunk-BO2N2NFS-DzUNVdeo.js} +4 -4
- package/server/public/assets/{diagram-OG6HWLK6-Eux0gWFq.js → diagram-OG6HWLK6-D5iThVwA.js} +1 -1
- package/server/public/assets/{dist-D-JX_u7m.js → dist-BLq-IR2D.js} +3 -3
- package/server/public/assets/{dist-C3zShwhA.js → dist-RyrOs5EF.js} +1 -1
- package/server/public/assets/{ganttDiagram-6RSMTGT7-UH3aweia.js → ganttDiagram-6RSMTGT7-n8bUPXAS.js} +1 -1
- package/server/public/assets/{highlighted-body-OFNGDK62-ccIQ-WXS.js → highlighted-body-OFNGDK62-1npo3yiG.js} +1 -1
- package/server/public/assets/{index-BTVcdPve.js → index-BvN8bWpz.js} +149 -149
- package/server/public/assets/index-DgoS288w.css +1 -0
- package/server/public/assets/{linear-Cnnu4YQy.js → linear-Dd96gky1.js} +1 -1
- package/server/public/assets/mermaid-GHXKKRXX-fP93Za-W.js +1 -0
- package/server/public/assets/{pieDiagram-4H26LBE5-BD8-Tye6.js → pieDiagram-4H26LBE5-CynZvpYP.js} +1 -1
- package/server/public/assets/{prod-Ca6aKMts.js → prod-DBuCX9g-.js} +4 -4
- package/server/public/assets/{quadrantDiagram-W4KKPZXB-BmSrVyFD.js → quadrantDiagram-W4KKPZXB-BNlEKLKN.js} +1 -1
- package/server/public/assets/{sankeyDiagram-5OEKKPKP-CEGy8Das.js → sankeyDiagram-5OEKKPKP-Cq0AMnkD.js} +1 -1
- package/server/public/assets/{xychartDiagram-2RQKCTM6-VnQ8iY8s.js → xychartDiagram-2RQKCTM6-D7GXcBy2.js} +1 -1
- package/server/public/index.html +2 -2
- package/server/pull-requests-DV_rJ-1u.js +2 -0
- package/server/{pull-requests-Cp_FDT8-.js → pull-requests-DrhWU9MW.js} +3 -3
- package/server/{rally-bQpBzUNf.js → rally-D5QkIZeb.js} +3 -3
- package/server/rally-DlXjOIAG.js +3 -0
- package/server/{rally-api-Ij1Zt0NI.js → rally-api-BdNfpNGk.js} +1 -1
- package/server/{rally-api-CqAIJ8RX.js → rally-api-CNlcoTFM.js} +2 -2
- package/server/{rally-client-CN5vh4Ac.js → rally-client-BCU7mVWE.js} +1 -1
- package/server/{rally-client-qKbCNRVW.js → rally-client-C3eB9TM-.js} +4 -4
- package/server/{rebuild-stack-DrMyA_mA.js → rebuild-stack-BupKggo5.js} +2 -2
- package/server/{rebuild-stack-BNOMVh7C.js → rebuild-stack-CNknXJHL.js} +6 -6
- package/server/reconciler-ComAOr_F.js +657 -0
- package/server/{reconstruct-cache-mxIYCnqs.js → reconstruct-cache-DbjgwKRi.js} +7 -7
- package/server/{record-Ug18Cp4V.js → record-C4JJCL2f.js} +1 -1
- package/server/{record-update-WyhsREoH.js → record-update-CWwZsp9Y.js} +1 -1
- package/server/{record-update-dBGxL9OC.js → record-update-Cl56NqoQ.js} +5 -5
- package/server/{recovery-trip-BKLrL6NX.js → recovery-trip-DA7tCXbp.js} +3 -3
- package/server/{recovery-trip-wFAixKsg.js → recovery-trip-DFtSA8h5.js} +1 -1
- package/server/{release-engine-D9gaCBn9.js → release-engine-Dk99C48O.js} +5 -5
- package/server/{release-set-DPHHzEGx.js → release-set-x8KH3nrE.js} +3 -3
- package/server/{remote-BUEeUic6.js → remote-BMZmJC5E.js} +3 -3
- package/server/{remote-BU6ONLpv.js → remote-DyZIg94K.js} +3 -3
- package/server/{remote-agents-CSaTLi3u.js → remote-agents-Blb0vO_M.js} +6 -6
- package/server/{remote-agents-BVtASiOF.js → remote-agents-MbWzm5Fh.js} +1 -1
- package/server/{remote-completion-CBV3b9TI.js → remote-completion-Bcd13o-J.js} +12 -12
- package/server/{resolver-DvSMXty7.js → resolver-CZVWKCx0.js} +7 -7
- package/server/{resolver-gxv97jsQ.js → resolver-tJeEkPK5.js} +2 -2
- package/server/{resume-DvHuF-bm.js → resume-DmF2andq.js} +1 -1
- package/server/{review-agent-esZ0QXdY.js → review-agent-CmJeQc0K.js} +30 -30
- package/server/{review-agent-DgkUPRx0.js → review-agent-DM9S22BL.js} +2 -2
- package/server/{review-artifacts-DGGEobLp.js → review-artifacts-DCiaejJK.js} +6 -6
- package/server/{review-convoy-liveness-DmO8dIBH.js → review-convoy-liveness-C9F1Q1LN.js} +8 -8
- package/server/{review-run-recovery-Ct0q7FkE.js → review-run-recovery-C5TEICtx.js} +2 -2
- package/server/{review-run-recovery-DHiiw7d8.js → review-run-recovery-CRGBh7xs.js} +1 -1
- package/server/{review-status-yOGD2MuK.js → review-status-C3PJkfjv.js} +55 -45
- package/server/{review-status-C_kQeeX0.js → review-status-CDs0jQV6.js} +1 -1
- package/server/{review-status-emit-BZz1Y_22.js → review-status-emit-De6PF3ZH.js} +3 -3
- package/server/{review-status-enrichment-BWH0XW_m.js → review-status-enrichment-CclcG8jk.js} +3 -3
- package/server/{review-status-sync-Bq00Loey.js → review-status-sync-B3GKewT_.js} +1 -1
- package/server/{review-status-sync-2C9lk85r.js → review-status-sync-wvgdR1yZ.js} +11 -8
- package/server/{review-verdict-feedback-CE_tr2iQ.js → review-verdict-feedback-20s9pG0w.js} +7 -7
- package/server/{review-verdict-feedback-Brjaxoda.js → review-verdict-feedback-DkMx_cKj.js} +1 -1
- package/server/{review-verdict-writer-Ca2V7QSY.js → review-verdict-writer-BcG5RBWF.js} +7 -7
- package/server/{review-verdict-writer-CD-4kDVx.js → review-verdict-writer-CaJPCD-q.js} +1 -1
- package/server/{rollup-B6g9Nr6L.js → rollup-C-GXHbTG.js} +8 -8
- package/server/{rollup--g9ik1XQ.js → rollup-DR250WyW.js} +1 -1
- package/server/{scanner-YxIv-fG1.js → scanner-BEAzmMNs.js} +18 -11
- package/server/{search-DqMN4__-.js → search-BN0MYpZW.js} +2 -2
- package/server/{sequence-io--b3_PsWq.js → sequence-io-BmVO0K-_.js} +4 -4
- package/server/{sequencer-agent-CqouKVZG.js → sequencer-agent-CuA9PA_R.js} +6 -6
- package/server/server.js +599 -290
- package/server/{service-CEp-3iow.js → service-D1SZCxH8.js} +77 -772
- package/server/{session-fork-GtoeCh2H.js → session-fork--SMYFKVu.js} +2 -2
- package/server/{settings-Ch2pCVtt.js → settings-CETdzCl6.js} +3 -3
- package/server/{settings-CLQcdkoD.js → settings-CFi7CdJo.js} +2 -2
- package/server/settings-EGNbGKpP.js +2 -0
- package/server/{shadow-engineering-BxiFrIKv.js → shadow-engineering-CNTXaC9O.js} +2 -2
- package/server/{shadow-state-nGhCNXT2.js → shadow-state-6jSyeXQ7.js} +1 -1
- package/server/{shadow-state-CSA1vtxr.js → shadow-state-CtYJGNXt.js} +2 -2
- package/server/{shadow-utils-7q5QDmMj.js → shadow-utils-Cq5eMfwI.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-STA0P11l.js} +5 -5
- package/server/{ship-record-DHWH1hLz.js → ship-record-neN0oUI9.js} +1 -1
- package/server/{ship-status-BEkddXMT.js → ship-status-DzDpufmj.js} +2 -2
- package/server/{smart-compaction-BkzjVpWL.js → smart-compaction-CdtKIcDk.js} +1 -1
- package/server/{smart-compaction-D0TE1lBD.js → smart-compaction-tndAhwoc.js} +7 -7
- package/server/{spawn-planning-session-s406rw1N.js → spawn-planning-session-1XLgDLjR.js} +2 -2
- package/server/{spawn-planning-session-CkGweSCC.js → spawn-planning-session-CAncCBLX.js} +17 -17
- package/server/{specialist-completion-CTAjwH5j.js → specialist-completion-BMv3K54P.js} +1 -1
- package/server/{specialist-context-CKasRfYu.js → specialist-context-B054OP_a.js} +5 -5
- package/server/{specialist-handoff-logger-DrjrOmmn.js → specialist-handoff-logger-B7jzypoX.js} +2 -2
- package/server/{specialist-logs-Du6quZ0_.js → specialist-logs-DVhOLpwy.js} +3 -3
- package/server/{specialists-x-kPMhrL.js → specialists-8Pc--yZI.js} +2 -2
- package/server/{specialists-B-4zyE4Y.js → specialists-BVBIMc4L.js} +1 -1
- package/server/{specialists-b0dMMjWq.js → specialists-CC_Mnc47.js} +333 -118
- package/server/{specialists-CuDWiNdB.js → specialists-ChvCD2a-.js} +19 -19
- package/server/{specialists-registry-BYjs04iK.js → specialists-registry-Cim1fPcM.js} +2 -2
- package/server/{specialists-registry-1y6Rt_F1.js → specialists-registry-CoPNlhud.js} +1 -1
- package/server/specs-Dvq4sOy6.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-ypIKtkbE.js → stack-health-CvdnSVBV.js} +1 -1
- package/server/{stack-health-BQFSJc0l.js → stack-health-DPXaoAus.js} +3 -3
- package/server/{stale-task-claims-C2e1zdMT.js → stale-task-claims-UoNLemTn.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-C9S8FYKz.js} +8 -8
- package/server/{state-home-DdG8erBI.js → state-home-BhI8O5lU.js} +2 -2
- package/server/{state-migrate-C6H3jfHE.js → state-migrate-DtFHcOVZ.js} +6 -6
- package/server/{state-mirror-DF4Lfxm0.js → state-mirror-CpuHFxHb.js} +3 -3
- package/server/{stuck-remediation-BDa_tXgB.js → stuck-remediation-B4nKm7B2.js} +13 -13
- package/server/{stuck-remediation-BVNd9txd.js → stuck-remediation-hSOOYB9B.js} +1 -1
- package/server/{substrate-bug-weights-service-BbbCZEtJ.js → substrate-bug-weights-service-B9f0063E.js} +3 -3
- package/server/{summary-fork-BvcW6bq0.js → summary-fork-CUyEqFyc.js} +14 -15
- package/server/{summary-fork-DIQmtOuV.js → summary-fork-DZcsOvDD.js} +2 -2
- package/server/{supervisor-D3jC2c7A.js → supervisor-CGtOs9Em.js} +4 -4
- package/server/supervisor-DoJpD33i.js +2 -0
- package/server/{swarm-readiness-CMWAQuWM.js → swarm-readiness-0N2p9d2C.js} +3 -3
- package/server/{synthesis-verdict-C-pJOPsn.js → synthesis-verdict-CJdseCuz.js} +1 -1
- package/server/{synthesis-verdict-DVlrLF9A.js → synthesis-verdict-CQdLbK1-.js} +2 -2
- package/server/{system-prerequisites-QKtIYXI2.js → system-prerequisites-DkDOEjQP.js} +2 -2
- package/server/{teardown-workspace-cJea1OLo.js → teardown-workspace-BxFMcWu7.js} +16 -16
- package/server/{test-agent-queue-C5DI_gWX.js → test-agent-queue-Dxeae55k.js} +6 -6
- package/server/{test-verdict-C7kmd2_Y.js → test-verdict-CJ-to_Hc.js} +1 -1
- package/server/{test-verdict-DUbDHqeD.js → test-verdict-hW5kILg7.js} +2 -2
- package/server/{tldr-daemon-BNQHwblU.js → tldr-daemon-DKCumqHU.js} +1 -1
- package/server/{tldr-daemon-CO08YlfQ.js → tldr-daemon-caxXegkF.js} +2 -2
- package/server/{tmux-B8zsqD_6.js → tmux-C-hxv71f.js} +2 -2
- package/server/{tmux-DWEc4Ld9.js → tmux-CvAEO9yo.js} +2 -2
- package/server/{token-Bez-qCB2.js → token-BdfZLRg1.js} +1 -1
- package/server/{tracker-config-CJzPhSHv.js → tracker-config-BjqwtkcT.js} +2 -2
- package/server/{tracker-utils-DJAOAuMN.js → tracker-utils-0cDe6yil.js} +2 -2
- package/server/{traefik-connect-D3H5I6b9.js → traefik-connect-DoQvQ6oJ.js} +1 -1
- package/server/{tunnel-BSdKnW0U.js → tunnel-BEM7-jgE.js} +1 -1
- package/server/{tunnel-Cr3ctqxp.js → tunnel-SgALz_Pi.js} +3 -3
- package/server/{types-fzBp9cYi.js → types-PW4zkxCM.js} +1 -1
- package/server/{uat-failure-feedback-IZQ-J8jt.js → uat-failure-feedback-BQzpUFQ6.js} +5 -5
- package/server/{uat-promote-verification-DXApKcc2.js → uat-promote-verification-BUltWC-b.js} +5 -5
- package/server/{uat-train-CycEzpbE.js → uat-train-B71QG16n.js} +1 -1
- package/server/{uat-train-IIZlz7r3.js → uat-train-BLJ0AAIc.js} +0 -0
- package/server/{validate-Ur4xH5bN.js → validate-DqEp2Yb9.js} +3 -3
- package/server/{validation-Dr6V4PXx.js → validation-DHEsL3RP.js} +4 -4
- package/server/{validation-CHovCoTT.js → validation-k4EpMHm0.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-BC_zNOq5.js} +16 -16
- package/server/{verification-runner-BuqGwm2t.js → verification-runner-Bbc-8BbR.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-CQWlmw_y.js} +1 -1
- package/server/{work-agent-prompt-CioeOuM4.js → work-agent-prompt-DM3uza0_.js} +10 -10
- package/server/{work-agent-start-Ct1HVh6z.js → work-agent-start-BColr1oI.js} +1 -1
- package/server/{work-agent-start-B65Gqn9N.js → work-agent-start-cKf7rly8.js} +2 -2
- package/server/workflows-CLrEiTds.js +2 -0
- package/server/{workflows-AgFul1xc.js → workflows-DrC85n8j.js} +28 -28
- package/server/{workspace-Cy4sDd3q.js → workspace-ChRFy_F9.js} +3 -3
- package/server/{workspace-Cu3XlMXt.js → workspace-G3Cus8e9.js} +1 -1
- package/server/{workspace-anchor-drift-BI0Hz6zI.js → workspace-anchor-drift-DBbyK_Mf.js} +1 -1
- package/server/{workspace-anchor-drift-CMaqvizr.js → workspace-anchor-drift-z7TjOORC.js} +4 -4
- package/server/{workspace-config-DRYDO7Zr.js → workspace-config-D-bNq2CF.js} +1 -1
- package/server/{workspace-manager-CgovxDrO.js → workspace-manager-Db3pCmr7.js} +16 -16
- package/server/{workspace-manager-jfkKAEuO.js → workspace-manager-gz9Amovn.js} +1 -1
- package/server/{workspace-metadata-BNzODIv6.js → workspace-metadata-C5Ie2FMZ.js} +2 -2
- package/server/{workspace-metadata-BDqXzGGK.js → workspace-metadata-Do-L6GFP.js} +1 -1
- package/server/{workspaces-BJdPqx_J.js → workspaces-D0MWw7Mx.js} +123 -696
- package/sync-sources/rules/agent-message-delivery.md +21 -14
- package/sync-sources/rules/pan-handoff-focus-limit.md +3 -1
- package/sync-sources/skills/pan-gauntlet-loop/SKILL.md +94 -46
- package/sync-sources/skills/pan-handoff/SKILL.md +13 -2
- package/server/archive-planning-BW4MKNI7.js +0 -2
- package/server/build-info-Bj2vQEMh.js +0 -2
- package/server/cli-BRuzUT_I.js +0 -2
- package/server/dead-end-trip-6V_CwveT.js +0 -2
- package/server/deploy-queue-CjLErpgw.js +0 -2
- package/server/dist-fCA6y2bH.js +0 -3
- package/server/forge-bvak6vXJ.js +0 -2
- package/server/hume-TYTb6fDU.js +0 -3
- package/server/inspect-agent-JFEaYTRa.js +0 -2
- package/server/merge-ops-DabXHp2i.js +0 -2
- package/server/merge-rebase-CXq0qsgR.js +0 -2
- package/server/public/assets/index-2wV4ipy_.css +0 -1
- package/server/public/assets/mermaid-GHXKKRXX-Bjto8iJh.js +0 -1
- package/server/pull-requests-jVGcVq5G.js +0 -2
- package/server/rally-CxhVgIQ6.js +0 -3
- package/server/settings-DhtPDmmI.js +0 -2
- package/server/specs-IYsFlM-L.js +0 -3
- package/server/supervisor-v0cYN2Vp.js +0 -2
- package/server/workflows-CfHm8lVd.js +0 -2
- package/sync-sources/skills/pan-gauntlet-loop/references/lessons.md +0 -60
package/server/server.js
CHANGED
|
@@ -1,121 +1,124 @@
|
|
|
1
1
|
import { a as __toCommonJS, i as __require, n as __esmMin, o as __toESM, r as __exportAll, t as __commonJSMin } from "./rolldown-runtime-DNCzzKnI.js";
|
|
2
|
-
import { $n as updateProjectsConfigText, $
|
|
3
|
-
import { i as shouldRefuseHostDashboardPort, n as isNonPrimaryCheckoutRoot, r as readHostDashboardApiPort, t as getDashboardIdentity } from "./identity-
|
|
4
|
-
import { $ as
|
|
5
|
-
import { h as loadConfigSync$1, p as init_config, s as getDashboardApiUrlSync } from "./config-
|
|
6
|
-
import { c as emitDashboardLifecycleSync, l as init_activity_logger, o as emitActivityEntrySync, s as emitActivityTtsSync, t as appendDomainEventAsync } from "./activity-logger-
|
|
7
|
-
import { A as init_paths$1, O as OVERDECK_MIGRATION_PATH, f as init_infra, i as DbLive, k as getOverdeckDatabasePath, u as TmuxLive } from "./infra-
|
|
2
|
+
import { $n as updateProjectsConfigText, $t as findProjectByPathSync, A as validateTieredExecutionConfig, Ai as encodeClaudeProjectDir, An as resolveProjectKeyForCwdAsync, Ar as MODEL_DEPRECATIONS, Bi as isDeploymentGenerationRoot, Cn as registerProjectSync, Cr as DEFAULT_ROLES, Ct as flushAllPendingAutoCommits, D as resolveTieredExecutionBlock, Dn as resolveProjectFromIssue, E as init_tier_table, Ei as SYNC_SOURCES, En as resolveInfraRepo, Fi as getDocsTelemetryPath, Fr as modelSupportsImagesSync, Hi as packageRoot, Hn as validateVersionSyncConfig, Ht as init_state_read_home, In as setProjectMergeTrain, Ir as resolveModelIdSync, Jr as ROLE_EFFORTS, Jt as PROJECTS_CONFIG_FILE, Kn as extractPrefixSync, Kr as COMPLIANCE_MODES, Kt as init_project_key, Li as getLegacyHome, Mi as getDocsBudgetStatePath, Mr as getModelEffortLevelsSync, Ni as getDocsDisableStatePath, Nr as hasModelCapabilitySync, O as resolveTieredExecutionEnabled, Oi as activeDeploymentRepoRoot, On as resolveProjectFromIssueSync, Or as resolveModel, Pi as getDocsIndexPath, Pn as setProjectAutoMergeDefault, Pr as init_model_capabilities, Qn as init_projects_config_write, Qr as FsError, Ri as getOverdeckHome, Rn as setProjectSwarmPolicy, Sr as init_registry, T as TieredExecutionConfigError, Tr as computeModelOrigin, Tt as init_auto_commit, Un as init_projects_cache_events, Ut as resolveStateReadHomeAsync, Vi as isDevMode, Wi as sessionFilePath, Wn as subscribeProjectsConfigInvalidation, Wt as resolveStateReadHomeSync, Y as init_record, Yn as parseIssueIdSync, Yt as ProjectRenameError, Zt as extractTeamPrefix, _ as mergeConfigs, _n as listProjectsAsync, ai as ProcessSpawnError, b as mergeTtsDaemonConfigs, bn as loadProjectsConfigSync, br as init_openai_compatible_proxy, c as init_load, d as isTldrEnabledSync, ei as GitHubApiError, er as require_dist$1, f as loadConfigNoMigration, fn as init_projects, fr as getProviderForModelSync, g as jsYaml, gn as listProjects, h as init_js_yaml, hi as CLAUDE_DIR, hn as invalidateProjectsConfigCache, i as getConversationsConfig, jn as resolveProjectPath, kr as MODEL_CAPABILITIES, li as init_errors, lr as getBuiltInDefaultHarness, m as updateConversationsConfig, n as clearConfigCache, o as getGlobalConfigPath, on as getProjectSync, p as loadConfigSync, pr as init_providers, q as getIssueWorkspacePath, qn as init_issue_id, qr as PARENT_MODEL_REF, qt as projectKey, r as getConversationSearchConfigSync, rn as getIssuePrefix, rr as init_harness_policy, s as getOpenInEditorCommand, si as TrackerError, sr as UnknownModelError, t as init_config_yaml, tn as findProjectByTeamSync, tr as canUseHarnessSync, tt as readIssueRecordSync, ur as getKimiAnthropicBaseUrl, v as getDefaultDocsConfig, vi as LOGS_DIR, vn as listProjectsSync, wn as renameProject, wr as DEFAULT_WORKHORSES, wt as flushAutoCommits, x as DEFAULT_CONFIG$1, xr as defaultBackgroundAiFeatures, y as getDefaultTtsDaemonConfig, yi as OVERDECK_HOME, yr as getDashScopeUpstreamBaseUrl, zi as init_paths } from "./config-yaml-OoH-ZpTb.js";
|
|
3
|
+
import { i as shouldRefuseHostDashboardPort, n as isNonPrimaryCheckoutRoot, r as readHostDashboardApiPort, t as getDashboardIdentity } from "./identity-CZbJ0xpl.js";
|
|
4
|
+
import { $ as resolvePolicy, A as handleConversationSwitchModel, B as waitForTmuxSession$1, C as conversationSessionAliveFromState, Ct as getDefaultCwd, D as handleConversationRestartAll, E as handleConversationDelete, F as spawnConversationSession, G as extractConversationAttachmentPaths, H as cleanupOrphanedConversationAttachments, I as startConversationModelBackfill, J as isManagedConversationAttachmentPath, K as getConversationAttachmentsRoot, L as stopConversationRuntime, M as resolveAllowedHarness, N as resolveRegisteredProject, O as handleConversationResume, P as shouldReportUnresolvedLiveSession, Q as handleComposerCommandMessage, R as tmuxSessionExists, S as conversationNeedsRunningRepair, St as httpHandler, T as handleConversationCreate, Tt as jsonStringResponse, U as cleanupUnreferencedConversationAttachments, V as cleanupConversationAttachments, W as ensureConversationAttachmentDir, X as runInBatches, Y as removeConversationAttachment, Z as composerCommandResultHttpStatus, _ as handleConversationThinkingLevel, _t as waitForSessionRespawn, a as agentsRouteLayer, at as isInternalAgentRequest, b as resolveConversationDeliveryMethod, bt as validateOrigin$1, c as codexConversationPendingInput, ct as panCliInvocation, d as handleConversationCodexApproval, dt as dashboardSessionCookieHeader, et as ComposerCommandParseError, f as handleConversationCompact, ft as hasDashboardInternalToken, g as handleConversationPlanAction, gt as isRespawnPending, h as handleConversationPiAskAnswer, ht as rejectUnsafeDashboardMutationRequest, it as invalidateAgentsCache, j as isInsideGitWorkTree, k as handleConversationStop, l as deliverConversationViaControlChannel, m as handleConversationDeliveryMethod, mt as rejectUnauthorizedDashboardSessionMintRequest, nt as composerCommandConfirmationFromBody, o as saveAgentStateAndEmitEvent, ot as resolveRequestedStartedBy, p as handleConversationControlAck, pt as rejectUnauthorizedDashboardRequest, q as hasConversationAttachment, rt as evaluateSpawnGuardrails, s as saveAgentStateAndEmitEventProgram, t as specialistsRouteLayer, tt as ComposerCommandConfirmationError, u as handleConversationAbort, ut as dashboardCsrfToken, v as isPiControlChannelHarness, vt as getHeaderFromMap, w as handleConversationClearForkState, wt as jsonResponse, x as validateConversationControlAckOrigin, xt as validateOriginHeaders, y as pickDeliverAs, yt as isTrustedOriginForHost, z as waitForPiTuiReady } from "./specialists-CC_Mnc47.js";
|
|
5
|
+
import { h as loadConfigSync$1, p as init_config, s as getDashboardApiUrlSync } from "./config-Cx3N6gWz.js";
|
|
6
|
+
import { c as emitDashboardLifecycleSync, l as init_activity_logger, o as emitActivityEntrySync, s as emitActivityTtsSync, t as appendDomainEventAsync } from "./activity-logger-ru8ggv-d.js";
|
|
7
|
+
import { A as init_paths$1, O as OVERDECK_MIGRATION_PATH, f as init_infra, i as DbLive, k as getOverdeckDatabasePath, u as TmuxLive } from "./infra-BbSWNOpH.js";
|
|
8
8
|
import { n as openDatabase, t as init_driver } from "./driver-BtcFz-qu.js";
|
|
9
|
-
import { a as updateIssueRecord, i as init_record_update, r as clearRecordPipelineClosedOutSync } from "./record-update-
|
|
10
|
-
import { B as sendKeys, C as init_tmux, E as killSession, L as resizeWindow, S as getWindowDimensions, T as isPaneDead, U as sessionExists, V as sendKeysAsync, X as deliveryVerifyLine, Y as activeComposerRegion, Z as init_pane_composer, a as capturePaneText, dt as init_child_env, j as listSessionNames, lt as buildChildEnvSync, o as capturePaneViewport, ot as init_ui_theme, r as capturePane, s as createSession, st as setUiTheme, t as buildTmuxArgs, u as ensureManagedTmuxContextOnce, ut as buildChildEnvWithoutTmuxSync, w as isHarnessProcessAlive } from "./tmux-
|
|
11
|
-
import { a as getWorkspaceForIssue, c as listProjectTargets, f as resolveWorkspaceForCwd, i as getWorkspaceById, l as listProjects$1, o as init_resolver, s as listPinnedDocs, u as listWorkspaces } from "./resolver-
|
|
12
|
-
import { a as init_event_store, i as initEventStore, n as getEventStore } from "./event-store-
|
|
13
|
-
import { A as AgentRuntimeSnapshot, C as FlywheelStatus, E as SystemHealthSnapshot, M as ReviewStatusSnapshot, O as MemoryObservation, S as FlywheelRunId, T as DomainEvent, b as PanRpcGroup, j as AgentSnapshot, l as ContextLayerSaveRequest, n as COMPOSER_COMMAND_MANIFEST, p as FlywheelStats, r as compareIssueIds, s as getHarnessBehavior, t as init_src, u as ContextPreviewRequest, w as EDITORS, x as WS_METHODS, y as PanRpcError } from "./src-
|
|
14
|
-
import { a as EventStoreServiceLive, c as ReadModelService, f as toAgentResolution, i as EventStoreService, l as ReadModelServiceLive, m as toRole, n as IssueLifecycleLive, o as startProjectCiRefillAfterProjectionReady, p as toAgentStatus, s as resolveDefaultBranchHead, t as IssueLifecycle, u as activityEntriesFromStoredEvents } from "./issue-lifecycle-
|
|
15
|
-
import { c as init_agents, g as logAgentLifecycleSync, h as init_persistent_logger, n as AgentsResolverLive, u as listAllAgentsSync } from "./agents-
|
|
16
|
-
import { c as resolveMemoryRoot, d as resolveRagRunsFile, i as init_paths$2, l as resolveObservationsFile, m as resolveWorkspaceMemoryRoot, r as ensureParentDir, s as resolveMemoryBase, t as assertMemorySafeSegment } from "./paths-
|
|
17
|
-
import { i as recordBriefingSessionStart, n as ensureSessionContextBriefingFile, r as init_briefing_freshness, t as appendFreshBriefingUpdate } from "./briefing-freshness-
|
|
18
|
-
import { n as listFeatureRegistryEntries, t as init_feature_registry_storage } from "./feature-registry-storage-
|
|
19
|
-
import { a as diffAgainstMain, c as diffCheckpoints, d as diffPatchSinceCommit, f as findCommitAtTime, h as listCheckpoints, l as diffFilesAgainstHead, o as diffAgainstMainFiles, s as diffCheckpointFiles, t as captureCheckpoint, u as diffPatchFilesAgainstHead } from "./checkpoint-manager-
|
|
20
|
-
import {
|
|
21
|
-
import {
|
|
22
|
-
import { a as
|
|
23
|
-
import {
|
|
24
|
-
import {
|
|
25
|
-
import {
|
|
26
|
-
import { i as
|
|
27
|
-
import {
|
|
28
|
-
import {
|
|
29
|
-
import {
|
|
30
|
-
import {
|
|
31
|
-
import {
|
|
32
|
-
import {
|
|
33
|
-
import { l as
|
|
34
|
-
import {
|
|
35
|
-
import {
|
|
9
|
+
import { a as updateIssueRecord, i as init_record_update, r as clearRecordPipelineClosedOutSync } from "./record-update-Cl56NqoQ.js";
|
|
10
|
+
import { B as sendKeys, C as init_tmux, E as killSession, L as resizeWindow, S as getWindowDimensions, T as isPaneDead, U as sessionExists, V as sendKeysAsync, X as deliveryVerifyLine, Y as activeComposerRegion, Z as init_pane_composer, a as capturePaneText, dt as init_child_env, j as listSessionNames, lt as buildChildEnvSync, o as capturePaneViewport, ot as init_ui_theme, r as capturePane, s as createSession, st as setUiTheme, t as buildTmuxArgs, u as ensureManagedTmuxContextOnce, ut as buildChildEnvWithoutTmuxSync, w as isHarnessProcessAlive } from "./tmux-CvAEO9yo.js";
|
|
11
|
+
import { a as getWorkspaceForIssue, c as listProjectTargets, f as resolveWorkspaceForCwd, i as getWorkspaceById, l as listProjects$1, o as init_resolver, s as listPinnedDocs, u as listWorkspaces } from "./resolver-tJeEkPK5.js";
|
|
12
|
+
import { a as init_event_store, i as initEventStore, n as getEventStore } from "./event-store-DbjldlXW.js";
|
|
13
|
+
import { A as AgentRuntimeSnapshot, C as FlywheelStatus, E as SystemHealthSnapshot, M as ReviewStatusSnapshot, O as MemoryObservation, S as FlywheelRunId, T as DomainEvent, b as PanRpcGroup, j as AgentSnapshot, l as ContextLayerSaveRequest, n as COMPOSER_COMMAND_MANIFEST, p as FlywheelStats, r as compareIssueIds, s as getHarnessBehavior, t as init_src, u as ContextPreviewRequest, w as EDITORS, x as WS_METHODS, y as PanRpcError } from "./src-CdwN6WY6.js";
|
|
14
|
+
import { a as EventStoreServiceLive, c as ReadModelService, f as toAgentResolution, i as EventStoreService, l as ReadModelServiceLive, m as toRole, n as IssueLifecycleLive, o as startProjectCiRefillAfterProjectionReady, p as toAgentStatus, s as resolveDefaultBranchHead, t as IssueLifecycle, u as activityEntriesFromStoredEvents } from "./issue-lifecycle-LgYeE1o2.js";
|
|
15
|
+
import { c as init_agents, g as logAgentLifecycleSync, h as init_persistent_logger, n as AgentsResolverLive, u as listAllAgentsSync } from "./agents-DMs1aLRU.js";
|
|
16
|
+
import { c as resolveMemoryRoot, d as resolveRagRunsFile, i as init_paths$2, l as resolveObservationsFile, m as resolveWorkspaceMemoryRoot, r as ensureParentDir, s as resolveMemoryBase, t as assertMemorySafeSegment } from "./paths-Cm1Q7Old.js";
|
|
17
|
+
import { i as recordBriefingSessionStart, n as ensureSessionContextBriefingFile, r as init_briefing_freshness, t as appendFreshBriefingUpdate } from "./briefing-freshness-FF0WLPMc.js";
|
|
18
|
+
import { n as listFeatureRegistryEntries, t as init_feature_registry_storage } from "./feature-registry-storage-BzAGS4DA.js";
|
|
19
|
+
import { a as diffAgainstMain, c as diffCheckpoints, d as diffPatchSinceCommit, f as findCommitAtTime, h as listCheckpoints, l as diffFilesAgainstHead, o as diffAgainstMainFiles, s as diffCheckpointFiles, t as captureCheckpoint, u as diffPatchFilesAgainstHead } from "./checkpoint-manager-CkXA-F6Z.js";
|
|
20
|
+
import { D as setSetting, E as setMergeTrainEnabled, S as setFlywheelAutoPickupBacklog, T as setLastCleanShutdownAt, b as setDeaconGloballyPausedSync, c as init_control_settings, d as isDeaconGloballyPausedSync, f as isFlywheelAutoPickupBacklog, g as setBootReconciliationDecision, h as isMergeTrainEnabled, l as isCloisterSpawnsPausedSync, m as isFlywheelRequireUatBeforeMerge, n as FLYWHEEL_GLOBAL_PAUSE_KEY, p as isFlywheelGloballyPaused, r as getBootReconciliationState, s as getSetting, t as FLYWHEEL_ACTIVE_RUN_ID_KEY, v as setCloisterSpawnsPausedSync, w as setFlywheelRequireUatBeforeMerge } from "./control-settings-Bdud_B1j.js";
|
|
21
|
+
import { a as getCostForIssueAggregateSync, c as getDailyTrendsSync, d as init_cost_sync, l as getModelRollupSync, n as getBackgroundCostBySourceSync, p as queryCostEventsSync, r as getCavemanExperimentDataSync, s as getCostsByIssueSync, u as getTodayCostSync } from "./cost-sync-Bq_dyq9k.js";
|
|
22
|
+
import { a as collectCodexCostEvents, i as CostWriter, n as CostResolver, r as CostResolverLive, s as recordSkipVerdict, t as CostDoorLive } from "./cost-DR57uJFP.js";
|
|
23
|
+
import { t as init_behavior } from "./behavior-CPX0E2Fj.js";
|
|
24
|
+
import { $ as deliverCommitForReview, A as saveAgentStateSync, An as init_runtime_census, At as init_agent_input_detection, Dt as scanPendingInputsPromise, Et as isInteractiveRoleAgent, Gn as init_concurrency, H as waitForReadySignal, Ht as init_messaging, Ii as init_agent_record_sync, It as answerSessionPaneChoice, Jr as injectPiConversationMemory, Kt as init_operator_interventions, Li as readAgentHarnessModelRecordSync, Lt as captureSessionPaneChoice, Mn as refreshRuntimeCensus, Mr as resolveImplicitStaffing, Nn as runtimeCensusHasHarnessProcess, On as getRuntimeCensus, Ot as detectAwaitingInputForAgent, Rt as init_session_pane_choice, U as getAgentRuntimeState, Un as emergencyBrake, Ut as messageAgent, W as getAgentRuntimeStateSync, Wr as getProviderAuthMode, _n as listAgentStates, ai as init_claude_auth, ar as deliverAgentMessage, br as checkCodexAuthStatus, bt as getAgentJsonlMtime, et as init_tier_supervisor, f as getAgentDir, g as getAgentStateSync, gn as init_queries, hi as init_openai_auth, hr as probeTranscriptSince, ii as getClaudeAuthStatus, it as supervisorAgentId, jn as panePidsForSession, jr as init_staffing, kn as getRuntimeCensusSnapshot, kt as detectAwaitingInputFromPaneSync, li as getProviderEnvForModel, m as getAgentState, mi as getOpenAIAuthStatus, mr as init_transcript_landing, pr as captureTranscriptUserRecordSnapshot, q as init_agents$1, qt as operatorInterventionEvent, vn as listRunningAgents, vt as computeAgentEnrichment, wt as init_agent_enrichment, xr as init_codex_auth, yn as listRunningAgentsSync, yt as countPendingAskUserQuestionsForAgent, z as normalizeAgentId, zi as init_agent_runtime_mirror } from "./agent-state-BnyNoDWQ.js";
|
|
25
|
+
import { n as isBackgroundFeatureEnabled, t as init_features } from "./features-KxOILHX8.js";
|
|
26
|
+
import { i as init_settings, r as getMemoryWorkerConcurrency, t as areMemoryObservationsEnabled } from "./settings-CETdzCl6.js";
|
|
27
|
+
import { i as updateMemoryHealth, n as extractWithProviderPolicy, r as init_health, t as init_providers$1 } from "./providers-1BlEh5x1.js";
|
|
28
|
+
import { C as isCliproxyRunning, D as restartCliproxy, E as readPidFile, O as startCliproxy, S as isCliproxyInstalled, b as init_cliproxy, k as stopCliproxy, o as bridgeCodexAuthToCliproxy, p as getCliproxyAuthDir, x as installCliproxy } from "./cliproxy-L_2OxNJf.js";
|
|
29
|
+
import { i as ensureInternalTokenSync, o as getInternalTokenSync, s as init_internal_token, t as INTERNAL_TOKEN_HEADER } from "./internal-token-CUKcTWSG.js";
|
|
30
|
+
import { $ as unarchiveConversation, A as init_conversations, C as getConversationByName, E as getStuckForks, F as listFavoritedIds, G as setConversationClaudeSessionId, H as removeFavorite, I as markConversationActive, L as markConversationEnded, N as listArchivedConversationsWithEnrichment, O as importLegacyConversation, P as listConversations, Q as setImportedConversationLinks, R as markConversationRunning, S as getConversationById, St as init_discovered_sessions, T as getConversationLedgerCosts, V as recordConversationHandoff, W as setClearedToConvId, X as setFavorite, Y as setConversationProjectKey, Z as setForkRequest, _ as canRefineTitle, _t as getDiscoveredSessionById, b as createConversation, bt as getDiscoveredStats, ct as aggregateDiscoveredSessionCost, dt as countDiscoveredSessions, et as updateConversationCost, h as archiveConversation, ht as findDiscoveredSessions, it as updateForkStatus, j as isAgentConversationName, k as incrementForkRetryCount, lt as aggregateDiscoveredSessionCostBy, nt as updateConversationForkFallbackReason, rt as updateConversationTitle, v as canReplaceTitle, w as getConversationByTmuxSession, x as getConversationByClaudeSessionId, y as clearConversationFailureState, yt as getDiscoveredSessionBySessionId } from "./conversations-JyrMSeOh.js";
|
|
31
|
+
import { C as generateLauncherScriptSync, D as normalizeModelOverrideSync, E as init_model_validation, O as requireModelOverrideSync, T as MODEL_ID_PATTERN, w as init_launcher_generator } from "./auto-spawn-consent-C1avLtkk.js";
|
|
32
|
+
import { a as init_claude_permissions, r as getClaudePermissionFlagsStringSync } from "./claude-permissions-Bn53HCXr.js";
|
|
33
|
+
import { C as codexGlobalContextFile, D as init_layers, E as globalContextFile$1, F as resolveWorkspaceContextFile, L as workspaceContextFile, P as resolveProjectContextFile, b as renderForHarness, c as hasManagedRegion, f as userContentOutsideRegion, i as workspaceContextWithoutProjectLayer, l as init_render, r as init_assemble, s as configDisabledRuleNames, w as ensureProjectLayer, x as validateTemplate, y as init_harness } from "./assemble-D88iFkP-.js";
|
|
34
|
+
import { l as init_codex, s as findRolloutPath } from "./codex-DSs-3aOm.js";
|
|
35
|
+
import { i as prepareHarnessLaunch, r as init_harness_binary } from "./harness-binary-BuakhXkB.js";
|
|
36
36
|
import { n as init_review_status_source, t as classifyAdvancingSessionLifecycle } from "./review-status-source-Jq0BXmn3.js";
|
|
37
37
|
import { a as PAN_DIRNAME, d as PENDING_PROMOTION_FILENAME, f as WORKSPACE_RUNTIME_DIRNAME, i as PAN_CONTINUE_FILENAME, m as init_types, p as asPanSpecDocument } from "./types-pLpbsNto.js";
|
|
38
|
-
import { C as init_specs, D as writeSpecDocument, N as getProjectPanPaths, O as writeSpecForIssue, P as init_paths$3, S as findSpecByIssue, a as findWorkspaceDraftPlan, b as subItemsOf, c as isPlanningComplete, d as readPlan, h as readWorkspacePlanSync, m as readWorkspacePlan, r as findPlan, s as init_io, y as init_types$1 } from "./io-
|
|
39
|
-
import { n as resolveHarness, t as init_harness_resolve } from "./harness-resolve-
|
|
40
|
-
import { a as loadCloisterConfigSync, o as saveCloisterConfigSync, r as init_config$1, s as shouldAutoStart } from "./config-
|
|
41
|
-
import { a as init_state_home, c as isStateMigrated, i as ensureStateWorktree, r as clearStateMigrationCache, s as inspectStateMigration } from "./state-home-
|
|
42
|
-
import { i as checkPrdGateSync, s as promoteWorkspacePrdDraft, t as init_pan_dir } from "./pan-dir-
|
|
43
|
-
import { a as init_lifecycle_io, t as appendContinueSessionEntryForIssue } from "./lifecycle-io-
|
|
44
|
-
import { a as init_tracker_config, i as initTrackerConfigCache, n as getLinearApiKey, r as getRallyConfig, t as getGitHubConfig } from "./tracker-config-
|
|
45
|
-
import { r as init_swarm_readiness, t as analyzeSwarmReadiness } from "./swarm-readiness-
|
|
46
|
-
import { n as AgentStateServiceLive } from "./agent-state-service-
|
|
38
|
+
import { C as init_specs, D as writeSpecDocument, N as getProjectPanPaths, O as writeSpecForIssue, P as init_paths$3, S as findSpecByIssue, a as findWorkspaceDraftPlan, b as subItemsOf, c as isPlanningComplete, d as readPlan, h as readWorkspacePlanSync, m as readWorkspacePlan, r as findPlan, s as init_io, y as init_types$1 } from "./io-BgzG56av.js";
|
|
39
|
+
import { n as resolveHarness, t as init_harness_resolve } from "./harness-resolve-CISjc9FR.js";
|
|
40
|
+
import { a as loadCloisterConfigSync, o as saveCloisterConfigSync, r as init_config$1, s as shouldAutoStart } from "./config-DP0VV7rX.js";
|
|
41
|
+
import { a as init_state_home, c as isStateMigrated, i as ensureStateWorktree, r as clearStateMigrationCache, s as inspectStateMigration } from "./state-home-BhI8O5lU.js";
|
|
42
|
+
import { i as checkPrdGateSync, s as promoteWorkspacePrdDraft, t as init_pan_dir } from "./pan-dir-COaYhZel.js";
|
|
43
|
+
import { a as init_lifecycle_io, t as appendContinueSessionEntryForIssue } from "./lifecycle-io-CCCAMefe.js";
|
|
44
|
+
import { a as init_tracker_config, i as initTrackerConfigCache, n as getLinearApiKey, r as getRallyConfig, t as getGitHubConfig } from "./tracker-config-BjqwtkcT.js";
|
|
45
|
+
import { r as init_swarm_readiness, t as analyzeSwarmReadiness } from "./swarm-readiness-0N2p9d2C.js";
|
|
46
|
+
import { n as AgentStateServiceLive } from "./agent-state-service-D95wBjA3.js";
|
|
47
47
|
import { i as PlanEmpty, l as WorkspaceCreateError, n as AgentStartError, s as TrackerApiError, t as AgentAlreadyRunning, u as WorkspaceNotFound } from "./typed-errors-DXqf3RnP.js";
|
|
48
|
-
import { r as LinearClientOptionalLive, t as LinearClient } from "./linear-client-
|
|
49
|
-
import { r as GitHubClientOptionalLive, t as GitHubClient } from "./github-client-
|
|
50
|
-
import { r as RallyClientOptionalLive, t as RallyClient } from "./rally-client-
|
|
51
|
-
import { n as resolveGitHubIssueSync, r as resolveTrackerTypeSync, t as init_tracker_utils } from "./tracker-utils-
|
|
52
|
-
import { a as startSharedIssueService, c as parseIntegerHeader, i as issue_service_singleton_exports, n as init_issue_service_singleton, o as CacheService, s as init_cache_service, t as getSharedIssueService } from "./issue-service-singleton-
|
|
53
|
-
import { a as setPipelineHandlerSync, t as init_pipeline_notifier } from "./pipeline-notifier-
|
|
54
|
-
import { a as getMergeBlockerReconcileCandidates, l as init_review_status_sync } from "./review-status-sync-
|
|
55
|
-
import { S as requeueToPending, T as transitionToMerging, _ as markMerged, c as init_merge_sync, f as listActiveAutoMerges, g as markFailed, h as markBlocked, i as getActionableAutoMerge, j as listUatGenerationsSync, l as isFlywheelGloballyPaused$1, m as listProblemAutoMerges, n as countActionableAutoMerges, p as listDuePendingAutoMerges, t as cancelPending, v as markMergingBlocked, w as scheduleAutoMergeWithResult } from "./merge-sync-
|
|
56
|
-
import { C as setReviewStatus, F as init_install_id, I as init_config$2, L as resolveTelemetryEnabled, M as init_service, N as synchronizeAnalyticsServices, P as getOrCreateInstallId, R as telemetryEnvironmentForcesOff, _ as markWorkspaceStuck, a as clearStuckMergeStatuses, c as fixStuckCommentedReviews, d as getReviewStatusSync, h as loadReviewStatuses, i as clearReviewStatus, j as getAnalyticsService, l as fixStuckReadyForMerge, p as init_review_status, u as getReviewStatus, w as setReviewStatusSync } from "./review-status-
|
|
57
|
-
import { a as clearQueryExpansionCache, i as resolveKnowledgeBundleRoot, n as init_injection, o as init_query_expansion, r as injectPromptTimeMemory } from "./injection-
|
|
58
|
-
import { a as init_fts_db, i as closeMemoryFtsDatabases, n as init_search, o as runMemoryFtsStatement, s as runMemoryFtsTransaction, t as buildMatchQuery } from "./search-
|
|
48
|
+
import { r as LinearClientOptionalLive, t as LinearClient } from "./linear-client-fpL-qJEa.js";
|
|
49
|
+
import { r as GitHubClientOptionalLive, t as GitHubClient } from "./github-client-wqbDCmlL.js";
|
|
50
|
+
import { r as RallyClientOptionalLive, t as RallyClient } from "./rally-client-C3eB9TM-.js";
|
|
51
|
+
import { n as resolveGitHubIssueSync, r as resolveTrackerTypeSync, t as init_tracker_utils } from "./tracker-utils-0cDe6yil.js";
|
|
52
|
+
import { a as startSharedIssueService, c as parseIntegerHeader, i as issue_service_singleton_exports, n as init_issue_service_singleton, o as CacheService, s as init_cache_service, t as getSharedIssueService } from "./issue-service-singleton-Bsb0GaY8.js";
|
|
53
|
+
import { a as setPipelineHandlerSync, t as init_pipeline_notifier } from "./pipeline-notifier-DfH2i_zP.js";
|
|
54
|
+
import { a as getMergeBlockerReconcileCandidates, l as init_review_status_sync } from "./review-status-sync-wvgdR1yZ.js";
|
|
55
|
+
import { S as requeueToPending, T as transitionToMerging, _ as markMerged, c as init_merge_sync, f as listActiveAutoMerges, g as markFailed, h as markBlocked, i as getActionableAutoMerge, j as listUatGenerationsSync, l as isFlywheelGloballyPaused$1, m as listProblemAutoMerges, n as countActionableAutoMerges, p as listDuePendingAutoMerges, t as cancelPending, v as markMergingBlocked, w as scheduleAutoMergeWithResult } from "./merge-sync-CCi1Esdx.js";
|
|
56
|
+
import { C as setReviewStatus, F as init_install_id, I as init_config$2, L as resolveTelemetryEnabled, M as init_service, N as synchronizeAnalyticsServices, P as getOrCreateInstallId, R as telemetryEnvironmentForcesOff, _ as markWorkspaceStuck, a as clearStuckMergeStatuses, c as fixStuckCommentedReviews, d as getReviewStatusSync, h as loadReviewStatuses, i as clearReviewStatus, j as getAnalyticsService, l as fixStuckReadyForMerge, p as init_review_status, u as getReviewStatus, w as setReviewStatusSync } from "./review-status-C3PJkfjv.js";
|
|
57
|
+
import { a as clearQueryExpansionCache, i as resolveKnowledgeBundleRoot, n as init_injection, o as init_query_expansion, r as injectPromptTimeMemory } from "./injection-BSnn_10a.js";
|
|
58
|
+
import { a as init_fts_db, i as closeMemoryFtsDatabases, n as init_search, o as runMemoryFtsStatement, s as runMemoryFtsTransaction, t as buildMatchQuery } from "./search-BN0MYpZW.js";
|
|
59
59
|
import { n as require_auth_errors, r as require_token_error, t as require_token_util } from "./token-util-Crcay9j_.js";
|
|
60
|
-
import { D as init_advisory_checks, E as verifyAppCanMerge, M as withConcurrencyLimit, O as isAdvisoryCheckName, d as getPullRequestState, f as init_github_app, j as init_concurrency$1, l as getMergeBackendStatus, p as isGitHubAppConfigured } from "./github-app-
|
|
61
|
-
import { C as
|
|
62
|
-
import { S as parseAcpConversationMessages, _ as isOhmypiSessionFile, a as contextUsageFromParseResult, b as parseCodexConversationMessages, c as parseEntireConversation, d as init_kimi_conversation_parser, f as parseKimiConversationMessages, g as init_ohmypi_conversation_parser, h as parsePiConversationMessages, i as computeContextUsage, l as parseFromLastCompactBoundary, m as isPiSessionFile, n as gateSnapshotEmission, o as summarizeConversationActivity, p as init_pi_conversation_parser, r as watchConversation, s as parseConversationMessages, t as init_conversation_service, v as parseOhmypiConversationMessages, x as init_acp_conversation_parser, y as init_codex_conversation_parser } from "./conversation-service-
|
|
63
|
-
import { a as resolveClaudeSessionId, c as resolveKimiWirePath, i as resolveAgentHarness, l as resolvePiSessionPath, n as readLauncherPinnedSessionId, o as resolveCodexRolloutPath, r as resolveAcpTranscriptPath, s as resolveJsonlPath, t as init_jsonl_resolver } from "./jsonl-resolver-
|
|
64
|
-
import { a as enrichSessions, c as searchSessions, i as CostThresholdError, l as embed, n as getSessionsFeedFacets, o as embedSessions, r as listSessionsFeed, s as parseRelativeTime, t as scan } from "./scanner-
|
|
65
|
-
import { c as tailEventsSync, n as deduplicateEventsSync, s as readEventsSync } from "./events-
|
|
66
|
-
import { n as recordBackgroundAiCost, t as init_cost } from "./cost-
|
|
67
|
-
import { a as getByIssueId, i as parseFlywheelStatsWindow, n as derivePipelineRunStatsInputs, o as markFixed, r as computeFlywheelStats, s as upsert, t as listSubstrateBugWeights } from "./substrate-bug-weights-service-
|
|
68
|
-
import { n as
|
|
69
|
-
import {
|
|
70
|
-
import {
|
|
71
|
-
import {
|
|
72
|
-
import {
|
|
73
|
-
import {
|
|
74
|
-
import {
|
|
75
|
-
import {
|
|
76
|
-
import {
|
|
77
|
-
import { a as
|
|
78
|
-
import {
|
|
79
|
-
import {
|
|
80
|
-
import "./
|
|
81
|
-
import {
|
|
82
|
-
import
|
|
83
|
-
import { a as
|
|
84
|
-
import {
|
|
85
|
-
import {
|
|
86
|
-
import {
|
|
87
|
-
import {
|
|
88
|
-
import {
|
|
89
|
-
import {
|
|
90
|
-
import { a as
|
|
91
|
-
import {
|
|
92
|
-
import {
|
|
93
|
-
import { r as
|
|
94
|
-
import {
|
|
95
|
-
import {
|
|
96
|
-
import {
|
|
97
|
-
import { n as
|
|
98
|
-
import {
|
|
99
|
-
import { r as
|
|
100
|
-
import {
|
|
101
|
-
import {
|
|
102
|
-
import {
|
|
103
|
-
import {
|
|
104
|
-
import {
|
|
105
|
-
import {
|
|
106
|
-
import {
|
|
107
|
-
import {
|
|
108
|
-
import {
|
|
109
|
-
import {
|
|
110
|
-
import {
|
|
111
|
-
import {
|
|
112
|
-
import {
|
|
113
|
-
import {
|
|
114
|
-
import "./
|
|
115
|
-
import {
|
|
116
|
-
import { n as
|
|
117
|
-
import
|
|
118
|
-
import {
|
|
60
|
+
import { D as init_advisory_checks, E as verifyAppCanMerge, M as withConcurrencyLimit, O as isAdvisoryCheckName, d as getPullRequestState, f as init_github_app, j as init_concurrency$1, l as getMergeBackendStatus, p as isGitHubAppConfigured } from "./github-app-Co8ZhyUJ.js";
|
|
61
|
+
import { C as startAgentOutputService, S as retainAgentOutputInterest, _ as syncCacheSync, b as resolveIssueHeadlineCost, d as eventsRouteLayer, f as resumeQueuedMerges, g as rebuildCacheSync, h as getCostsForIssueSync, m as migrateAllSessionsSync, p as syncWalFromAllProjects, t as workspacesRouteLayer, u as internalEventsRouteLayer, v as processPendingFeedbackDeliveries, w as stopAgentOutputService, x as getWorkspacePathForIssue, y as getCachedRunningAgents } from "./workspaces-D0MWw7Mx.js";
|
|
62
|
+
import { S as parseAcpConversationMessages, _ as isOhmypiSessionFile, a as contextUsageFromParseResult, b as parseCodexConversationMessages, c as parseEntireConversation, d as init_kimi_conversation_parser, f as parseKimiConversationMessages, g as init_ohmypi_conversation_parser, h as parsePiConversationMessages, i as computeContextUsage, l as parseFromLastCompactBoundary, m as isPiSessionFile, n as gateSnapshotEmission, o as summarizeConversationActivity, p as init_pi_conversation_parser, r as watchConversation, s as parseConversationMessages, t as init_conversation_service, v as parseOhmypiConversationMessages, x as init_acp_conversation_parser, y as init_codex_conversation_parser } from "./conversation-service-zgLM2g2D.js";
|
|
63
|
+
import { a as resolveClaudeSessionId, c as resolveKimiWirePath, i as resolveAgentHarness, l as resolvePiSessionPath, n as readLauncherPinnedSessionId, o as resolveCodexRolloutPath, r as resolveAcpTranscriptPath, s as resolveJsonlPath, t as init_jsonl_resolver } from "./jsonl-resolver-BJ8Hg-yD.js";
|
|
64
|
+
import { a as enrichSessions, c as searchSessions, i as CostThresholdError, l as embed, n as getSessionsFeedFacets, o as embedSessions, r as listSessionsFeed, s as parseRelativeTime, t as scan } from "./scanner-BEAzmMNs.js";
|
|
65
|
+
import { c as tailEventsSync, n as deduplicateEventsSync, s as readEventsSync } from "./events-Bb2x5ijT.js";
|
|
66
|
+
import { n as recordBackgroundAiCost, t as init_cost } from "./cost-MZ7EZFDc.js";
|
|
67
|
+
import { a as getByIssueId, i as parseFlywheelStatsWindow, n as derivePipelineRunStatsInputs, o as markFixed, r as computeFlywheelStats, s as upsert, t as listSubstrateBugWeights } from "./substrate-bug-weights-service-B9f0063E.js";
|
|
68
|
+
import { i as reclassifyUnknownCostEventsSync, n as reconcile$1, r as recordCostEventsThroughOverdeck, t as collectPiCostEvents } from "./reconciler-ComAOr_F.js";
|
|
69
|
+
import { n as writeSequenceMd, t as parseSequenceMd } from "./sequence-io-BmVO0K-_.js";
|
|
70
|
+
import { _ as normalizeGate, d as computeEpicGroups, f as computeLanes, h as init_pickup, l as classifyIssue, m as computeWaves, p as computeStats, u as computeCohort, v as selectNeedsPlanning } from "./pickup-Dle6k9Xt.js";
|
|
71
|
+
import { C as readCurrentLatestFlywheelStatus, D as writeFlywheelLaunchMetadata, E as subscribeLatestFlywheelStatus, F as setItemRequirements, G as liveOrderIssueLookup, H as getBook, I as setSettings, K as normalizeOrderIssueId, L as setStatus, M as moveItem, N as removeItem, O as writeLatestFlywheelStatus, P as renameBook, R as backlogCandidates, S as nextFlywheelRunId, T as resolveLiveFlywheelRunId, U as getBookAsync, W as listBooks, a as isFlywheelDevcontainerRuntime, b as isFlywheelRunId, f as spawnFlywheelAgent, g as abortFlywheelRun, j as createBook, k as addItems, p as buildClassifyLookups, s as loadResumeSessionId, t as FLYWHEEL_ORCHESTRATOR_AGENT_ID, u as saveResumeSessionId, v as getFlywheelRunDetail, w as readFlywheelLaunchMetadata, x as listFlywheelRuns, z as computeBookProgress } from "./flywheel-D5FchYg4.js";
|
|
72
|
+
import { n as resolveConversationGitInfo } from "./git-info-DMOSfJ9I.js";
|
|
73
|
+
import { _ as classifyAgentHealth, c as getContainerHistory, d as getDeployStaleness, g as startSmeeProcessSync, h as isSmeeConfiguredSync, l as getCurrentDockerStats, o as getResourceStacks, p as getSystemHealthEvidenceSnapshot, s as formatUptime, u as getAcceptedSystemHealthSnapshot } from "./memory-governor-Mi5zF5zw.js";
|
|
74
|
+
import { D as detectPlatform, E as validateFeatureName, O as init_platform, S as init_worktree_ops, _ as updateWorkspaceLayout, b as readWorkspaceIdentity, c as installGitHooksInDir, d as init_writer, f as relocateWorkspace, g as unarchiveWorkspace, h as touchWorkspaceAccessed, l as archiveWorkspace, m as setWorkspaceRunCommand, p as setWorkspaceFavorite, s as init_git_hooks, u as createWorkspace, v as upsertProjectFromConfig, x as writeWorkspaceIdentity, y as init_identity_record } from "./workspace-manager-Db3pCmr7.js";
|
|
75
|
+
import { n as init_workspace_config, t as getDefaultWorkspaceConfigSync } from "./workspace-config-D-bNq2CF.js";
|
|
76
|
+
import { B as cleanupClosedIssueAgentDirectories, F as setAgentStatusChangedNotifier, I as setAgentStoppedNotifier, J as isBootReconciliationCandidate, K as extendBootReconciliationGrace, L as setMergeReadyNotifier, O as loadConfig, X as startBootReconciliation, Y as listBootReconciliationCandidates, Z as resolveSwarmPolicy, gt as paneShowsClaudeBootBlockingScreen, k as loadState, n as applyBootReconciliationDecision, q as isAutoResumableRole, r as assessDeaconPatrolFreshness, x as getDeaconLogs } from "./deacon-C7qZxRuW.js";
|
|
77
|
+
import { a as generateHealthSummary, n as readCloisterStateFile, o as getAgentHealth, s as getAgentsNeedingAttention, t as getCloisterService } from "./service-D1SZCxH8.js";
|
|
78
|
+
import { i as getRuntimeForAgent } from "./agent-idle-CQlwmcRR.js";
|
|
79
|
+
import { a as getShadowState, s as init_shadow_state } from "./shadow-state-CtYJGNXt.js";
|
|
80
|
+
import { n as init_issue_closed, t as clearIssueClosedCache } from "./issue-closed-DZEwD3ol.js";
|
|
81
|
+
import { r as parseArtifactRef } from "./forge-B08cRXEb.js";
|
|
82
|
+
import "./parked-residue-Dvr4W9P6.js";
|
|
83
|
+
import { a as writeFeedbackFile, i as init_feedback_writer } from "./feedback-writer-Dgrma-L1.js";
|
|
84
|
+
import { t as init_specialists } from "./specialists-ChvCD2a-.js";
|
|
85
|
+
import { a as getReviewerSessionName } from "./specialists-registry-Cim1fPcM.js";
|
|
86
|
+
import { a as readPrdContent, r as findPrdAnywhereSync } from "./prd-locations-CPuMD55x.js";
|
|
87
|
+
import { i as resolveBootGates, r as formatBootGateState } from "./no-resume-mode-DjMQRkId.js";
|
|
88
|
+
import { t as createInFlightGuard } from "./in-flight-guard-B7khcBdQ.js";
|
|
89
|
+
import { A as removeIssueParkedLabel, C as applyIssueParkedLabel, D as init_label_ops, E as applyIssueVetoedLabel, M as removeIssueReleasedLabel, N as removeIssueVetoedLabel, O as removeIssueBlocksMainLabel, S as applyIssueObjectionLabel, T as applyIssueReleasedLabel, g as parseIssueIdFromTextSync, h as init_resource_utils, j as removeIssueReadyLabel, k as removeIssueObjectionLabel, w as applyIssueReadyLabel, x as applyIssueBlocksMainLabel } from "./pipeline-membership-gather-UN7kHpCD.js";
|
|
90
|
+
import { a as spawnPlanningSession, r as resolveAutoSpawnOnFinalize } from "./spawn-planning-session-CAncCBLX.js";
|
|
91
|
+
import { r as computeMergeQueueFromCandidates, s as listEligibleCandidatesByProject } from "./flywheel-merge-order-BTY73Efv.js";
|
|
92
|
+
import { a as loadWorkspaceMetadataSync } from "./workspace-metadata-C5Ie2FMZ.js";
|
|
93
|
+
import { d as killRemoteAgent, m as loadRemoteAgentState, o as getRemoteAgentOutput, r as checkRemoteSpendCap, s as init_remote_agents, v as sendToRemoteAgent, y as spawnRemoteAgent } from "./remote-agents-Blb0vO_M.js";
|
|
94
|
+
import { _ as refreshMembershipSnapshotsForProjects, a as enqueueProjectsResourceRefresh, c as startProjectResourceConvergence, d as getCachedResourceAllocatedIssues, f as getResourceDetailIdentifiers, g as readPipelineMembershipSnapshotsForProjects, h as sanitizeResourceAllocatedIssues, l as stopProjectResourceRefreshQueue, m as isDiscoverableAgentSession, o as getProjectResourceRefreshQueueState, p as groupResourceAllocatedIssuesByProject, u as whenProjectResourceRefreshIdle, v as summarizePipelineMembership, y as unavailablePipelineMembership } from "./project-resource-refresh-queue-Dh8k2SB7.js";
|
|
95
|
+
import { r as spawnInspectAgent } from "./inspect-agent-DS8j2v6U.js";
|
|
96
|
+
import { r as lookupPullRequestNumberForBranch, t as githubPrLookupSource } from "./github-pr-lookup-DdLCDdu9.js";
|
|
97
|
+
import { a as fetchIssuePullRequestDiff, c as getCachedIssuePrTabResponse, i as fetchIssuePullRequestDetails, l as getIssuePrTabCacheGeneration, n as fetchIssueCheckRuns, r as fetchIssuePullRequest, s as bumpIssuePrTabCacheGeneration, u as setCachedIssuePrTabResponse } from "./pull-requests-DrhWU9MW.js";
|
|
98
|
+
import { n as DOD_ROWS } from "./dod-BAk5arLF.js";
|
|
99
|
+
import { n as resolveParkedPopulation, r as summarizeParked } from "./resolver-CZVWKCx0.js";
|
|
100
|
+
import { a as readCurrentStatus, l as maybeTriggerStatusRollup, s as readRecentObservations, u as writePendingTurn } from "./rollup-C-GXHbTG.js";
|
|
101
|
+
import { r as isExtendedReviewEnabled } from "./review-agent-CmJeQc0K.js";
|
|
102
|
+
import { n as getTldrDaemonServiceSync, r as init_tldr_daemon } from "./tldr-daemon-caxXegkF.js";
|
|
103
|
+
import { S as ensureSyncGitQuiescent, x as listGitOperationsSync } from "./merge-agent-zF9vqWqY.js";
|
|
104
|
+
import { t as readVerificationArtifact } from "./verification-artifact-DglwaHke.js";
|
|
105
|
+
import { t as getAgentCommandSync } from "./settings-CFi7CdJo.js";
|
|
106
|
+
import { r as isRemoteAvailable, t as createFlyProviderFromConfig } from "./remote-DyZIg94K.js";
|
|
107
|
+
import { n as init_claude_settings_overlay, t as detectProviderEnvConflicts } from "./claude-settings-overlay-CqJZjFqv.js";
|
|
108
|
+
import { _ as init_transcript_adapter, a as generateFallbackSummary, c as handoffPreconditionFallbackReason, d as prependFallbackFocus, f as requestHandoffFromAgent, g as getTranscriptAdapter, i as copySessionFromCompactBoundary, l as init_summary_fork, o as generateSummaryForFork, p as reserveSummaryForkSession, r as authorHandoffExternal, s as handoffFailureReason, u as logHandoffFallback } from "./summary-fork-CUyEqFyc.js";
|
|
109
|
+
import { a as init_conversation_compaction, c as shouldInterceptManualCompact, n as compactConversationNative, o as isCompacting } from "./conversation-compaction-dFx_2wpa.js";
|
|
110
|
+
import { n as loadShipRecords, r as publicShipStatus, t as aggregateGenerationShipStatus } from "./ship-status-DzDpufmj.js";
|
|
111
|
+
import { t as init_context_layers } from "./context-layers-LY5zt0da.js";
|
|
112
|
+
import { n as init_merge_eligibility, r as isMergeEligible, t as gatherMergeEligibility } from "./merge-eligibility-DhxVE8qU.js";
|
|
113
|
+
import { a as appendLinearMcpAuthHealthyEvent, r as appendLinearMcpAuthCallbackRelayedEvent, u as resolveLinearMcpAuthIntervention } from "./linear-mcp-auth-nAYWoUbH.js";
|
|
114
|
+
import { i as getMergeBlockersPayload, n as hasOrderIssuePrd, r as validateBookForStart, t as createOrderPrdLookup } from "./validate-DqEp2Yb9.js";
|
|
115
|
+
import { i as spawnSequencerAgent, n as clearFinishedSequencerRun, r as getSequencerRunStatus, t as SEQUENCER_AGENT_ID } from "./sequencer-agent-CuA9PA_R.js";
|
|
116
|
+
import { n as sameCanonicalReviewStatus, t as emitReviewStatusChanged } from "./review-status-emit-De6PF3ZH.js";
|
|
117
|
+
import "./supervisor-CGtOs9Em.js";
|
|
118
|
+
import { l as startUatTrainReconciler, u as stopUatTrainReconciler } from "./uat-train-BLJ0AAIc.js";
|
|
119
|
+
import { n as settlePendingLifecycleClaim, t as claimPendingLifecycleFile } from "./pending-lifecycle-claim-yAwDuGS4.js";
|
|
120
|
+
import { i as listTranscriptCheckpoints, r as getTranscriptCheckpoint$1 } from "./checkpoints-Ds83fUb1.js";
|
|
121
|
+
import { r as readPendingDeploy } from "./deploy-queue-EcksuKE2.js";
|
|
119
122
|
import { createRequire } from "node:module";
|
|
120
123
|
import { basename, delimiter, dirname, extname, isAbsolute, join, normalize, posix, relative, resolve, sep, win32 } from "node:path";
|
|
121
124
|
import { Cause, Context, Data, Duration, Effect, Exit, Fiber, FileSystem, Layer, Option, Path, Queue, Result, Schedule, Schema, Stream } from "effect";
|
|
@@ -724,7 +727,7 @@ const AgentSpawnerLive = Layer.effect(AgentSpawner, Effect.sync(() => ({
|
|
|
724
727
|
if (!existsSync$1(workspacePath)) throw new WorkspaceNotFound({ id: issueId });
|
|
725
728
|
const plan = readWorkspacePlanSync(workspacePath);
|
|
726
729
|
if (!plan || plan.plan.items.length === 0) throw new PlanEmpty({ id: issueId });
|
|
727
|
-
const { getAgentState, spawnAgent, normalizeAgentId } = await import("./agents-
|
|
730
|
+
const { getAgentState, spawnAgent, normalizeAgentId } = await import("./agents-BdkVgjxC.js");
|
|
728
731
|
const normalizedId = normalizeAgentId(issueId);
|
|
729
732
|
if ((await Effect.runPromise(getAgentState(normalizedId)))?.status === "running") throw new AgentAlreadyRunning({ id: issueId });
|
|
730
733
|
return {
|
|
@@ -756,7 +759,7 @@ const AgentSpawnerLive = Layer.effect(AgentSpawner, Effect.sync(() => ({
|
|
|
756
759
|
const { workspacePath, projectPath, issue } = opts;
|
|
757
760
|
if (!existsSync$1(workspacePath)) throw new WorkspaceNotFound({ id: issueId });
|
|
758
761
|
const sessionName = opts.sessionName ?? `planning-${issueId.toLowerCase()}`;
|
|
759
|
-
const { spawnPlanningSession } = await import("./spawn-planning-session-
|
|
762
|
+
const { spawnPlanningSession } = await import("./spawn-planning-session-1XLgDLjR.js");
|
|
760
763
|
const result = await spawnPlanningSession({
|
|
761
764
|
issue: {
|
|
762
765
|
id: issue.id,
|
|
@@ -790,14 +793,14 @@ const AgentSpawnerLive = Layer.effect(AgentSpawner, Effect.sync(() => ({
|
|
|
790
793
|
}),
|
|
791
794
|
kill: (agentId) => Effect.tryPromise({
|
|
792
795
|
try: async () => {
|
|
793
|
-
const { stopAgent } = await import("./agents-
|
|
796
|
+
const { stopAgent } = await import("./agents-BdkVgjxC.js");
|
|
794
797
|
await Effect.runPromise(stopAgent(agentId));
|
|
795
798
|
},
|
|
796
799
|
catch: () => void 0
|
|
797
800
|
}).pipe(Effect.ignore),
|
|
798
801
|
message: (agentId, msg) => Effect.tryPromise({
|
|
799
802
|
try: async () => {
|
|
800
|
-
const { messageAgent } = await import("./agents-
|
|
803
|
+
const { messageAgent } = await import("./agents-BdkVgjxC.js");
|
|
801
804
|
await messageAgent(agentId, msg);
|
|
802
805
|
},
|
|
803
806
|
catch: (err) => new AgentStartError({
|
|
@@ -808,8 +811,8 @@ const AgentSpawnerLive = Layer.effect(AgentSpawner, Effect.sync(() => ({
|
|
|
808
811
|
}),
|
|
809
812
|
deepWipe: (issueId, opts) => Effect.tryPromise({
|
|
810
813
|
try: async () => {
|
|
811
|
-
const { deepWipe } = await import("./workflows-
|
|
812
|
-
const { resolveProjectFromIssueSync } = await import("./projects-
|
|
814
|
+
const { deepWipe } = await import("./workflows-CLrEiTds.js");
|
|
815
|
+
const { resolveProjectFromIssueSync } = await import("./projects-Crur9uCa.js");
|
|
813
816
|
const project = resolveProjectFromIssueSync(issueId);
|
|
814
817
|
const projectPath = project?.projectPath ?? process.cwd();
|
|
815
818
|
await Effect.runPromise(deepWipe({
|
|
@@ -868,8 +871,8 @@ const WorkspaceServiceLive = Layer.effect(WorkspaceService, Effect.sync(() => {
|
|
|
868
871
|
const { workspacePath, branch } = getWorkspacePath(issueId);
|
|
869
872
|
const issueLower = issueId.toLowerCase();
|
|
870
873
|
if (existsSync$1(workspacePath)) return workspacePath;
|
|
871
|
-
const { createWorkspace } = await import("./workspace-manager-
|
|
872
|
-
const { loadProjectsConfigSync } = await import("./projects-
|
|
874
|
+
const { createWorkspace } = await import("./workspace-manager-gz9Amovn.js");
|
|
875
|
+
const { loadProjectsConfigSync } = await import("./projects-Crur9uCa.js");
|
|
873
876
|
const { projects } = loadProjectsConfigSync();
|
|
874
877
|
const project = resolveProjectFromIssueSync(issueId);
|
|
875
878
|
if (!project) throw new WorkspaceCreateError({
|
|
@@ -904,7 +907,7 @@ const WorkspaceServiceLive = Layer.effect(WorkspaceService, Effect.sync(() => {
|
|
|
904
907
|
const { workspacePath } = getWorkspacePath(issueId);
|
|
905
908
|
const issueLower = issueId.toLowerCase();
|
|
906
909
|
if (!existsSync$1(workspacePath)) throw new WorkspaceNotFound({ id: issueId });
|
|
907
|
-
const { removeWorkspace } = await import("./workspace-manager-
|
|
910
|
+
const { removeWorkspace } = await import("./workspace-manager-gz9Amovn.js");
|
|
908
911
|
const project = resolveProjectFromIssueSync(issueId);
|
|
909
912
|
if (!project) throw new WorkspaceCreateError({
|
|
910
913
|
id: issueId,
|
|
@@ -935,7 +938,7 @@ const WorkspaceServiceLive = Layer.effect(WorkspaceService, Effect.sync(() => {
|
|
|
935
938
|
try: async () => {
|
|
936
939
|
const { workspacePath } = getWorkspacePath(issueId);
|
|
937
940
|
const issueLower = issueId.toLowerCase();
|
|
938
|
-
const { stopWorkspaceDocker } = await import("./workspace-manager-
|
|
941
|
+
const { stopWorkspaceDocker } = await import("./workspace-manager-gz9Amovn.js");
|
|
939
942
|
await Effect.runPromise(stopWorkspaceDocker(workspacePath, issueLower));
|
|
940
943
|
},
|
|
941
944
|
catch: () => void 0
|
|
@@ -1004,7 +1007,7 @@ const WorkspaceServiceLive = Layer.effect(WorkspaceService, Effect.sync(() => {
|
|
|
1004
1007
|
join(workspacePath, ".devcontainer", "docker-compose.devcontainer.yml")
|
|
1005
1008
|
];
|
|
1006
1009
|
if (!composePaths.find((p) => existsSync$1(p))) {
|
|
1007
|
-
const { ensureDevcontainerSync } = await import("./ensure-devcontainer-
|
|
1010
|
+
const { ensureDevcontainerSync } = await import("./ensure-devcontainer-BjMV_gdX.js");
|
|
1008
1011
|
const ensure = ensureDevcontainerSync({
|
|
1009
1012
|
workspacePath,
|
|
1010
1013
|
issueId
|
|
@@ -17273,7 +17276,7 @@ var require_get_vercel_oidc_token = /* @__PURE__ */ __commonJSMin(((exports, mod
|
|
|
17273
17276
|
err = error;
|
|
17274
17277
|
}
|
|
17275
17278
|
try {
|
|
17276
|
-
const [{ getTokenPayload, isExpired }, { refreshToken }] = await Promise.all([await import("./token-util-DfUS3Lpp.js").then((m) => /* @__PURE__ */ __toESM(m.default)), await import("./token-
|
|
17279
|
+
const [{ getTokenPayload, isExpired }, { refreshToken }] = await Promise.all([await import("./token-util-DfUS3Lpp.js").then((m) => /* @__PURE__ */ __toESM(m.default)), await import("./token-BdfZLRg1.js").then((m) => /* @__PURE__ */ __toESM(m.default))]);
|
|
17277
17280
|
if (!token || isExpired(getTokenPayload(token), options?.expirationBufferMs)) {
|
|
17278
17281
|
await refreshToken(options);
|
|
17279
17282
|
token = getVercelOidcTokenSync();
|
|
@@ -29590,7 +29593,7 @@ var GoogleCloudTranscription = class {
|
|
|
29590
29593
|
}
|
|
29591
29594
|
async start(apiKey, model) {
|
|
29592
29595
|
try {
|
|
29593
|
-
const { SpeechClient } = await import("./src-
|
|
29596
|
+
const { SpeechClient } = await import("./src-C7gGe4KU.js").then((m) => /* @__PURE__ */ __toESM(m.default, 1)).then((module) => module.v1p1beta1 ?? module.v1);
|
|
29594
29597
|
if (this.closed) return;
|
|
29595
29598
|
const stream = new SpeechClient({ apiKey }).streamingRecognize({
|
|
29596
29599
|
config: {
|
|
@@ -30274,14 +30277,22 @@ function streamAgentOutput(eventStore, agentId) {
|
|
|
30274
30277
|
init_agent_input_detection();
|
|
30275
30278
|
init_tracker_config();
|
|
30276
30279
|
init_agent_enrichment();
|
|
30280
|
+
init_jsonl_resolver();
|
|
30281
|
+
init_control_settings();
|
|
30277
30282
|
init_acp_conversation_parser();
|
|
30278
30283
|
init_codex_conversation_parser();
|
|
30284
|
+
init_kimi_conversation_parser();
|
|
30279
30285
|
init_ohmypi_conversation_parser();
|
|
30280
30286
|
init_pi_conversation_parser();
|
|
30281
|
-
init_kimi_conversation_parser();
|
|
30282
30287
|
init_conversation_service();
|
|
30283
|
-
|
|
30284
|
-
|
|
30288
|
+
const transcriptParsers = {
|
|
30289
|
+
pi: parsePiConversationMessages,
|
|
30290
|
+
ohmypi: parseOhmypiConversationMessages,
|
|
30291
|
+
codex: parseCodexConversationMessages,
|
|
30292
|
+
acp: parseAcpConversationMessages,
|
|
30293
|
+
kimi: parseKimiConversationMessages,
|
|
30294
|
+
"claude-initial": (sessionFile) => parseEntireConversation(sessionFile, { flushPendingToolUse: false })
|
|
30295
|
+
};
|
|
30285
30296
|
const MAX_PENDING_JOBS = 32;
|
|
30286
30297
|
const SEMANTIC_SEARCH_TIMEOUT_MS = Number.parseInt(process.env["OVERDECK_SEMANTIC_SEARCH_TIMEOUT_MS"] ?? "15000", 10);
|
|
30287
30298
|
const COALESCED_OPERATIONS = new Set([
|
|
@@ -30289,16 +30300,23 @@ const COALESCED_OPERATIONS = new Set([
|
|
|
30289
30300
|
"enrichSessions",
|
|
30290
30301
|
"embedSessions",
|
|
30291
30302
|
"searchSessionsSemantic",
|
|
30292
|
-
"listSubstrateBugWeights"
|
|
30303
|
+
"listSubstrateBugWeights",
|
|
30304
|
+
"parseTranscriptSnapshot"
|
|
30293
30305
|
]);
|
|
30294
30306
|
const workers = {
|
|
30295
30307
|
read: null,
|
|
30296
30308
|
long: null,
|
|
30297
|
-
semantic: null
|
|
30309
|
+
semantic: null,
|
|
30310
|
+
parse: null
|
|
30298
30311
|
};
|
|
30299
30312
|
const pending = /* @__PURE__ */ new Map();
|
|
30300
30313
|
const sharedJobs = /* @__PURE__ */ new Map();
|
|
30301
30314
|
let latestSemanticJobId = null;
|
|
30315
|
+
function formatSlowJobLine(input) {
|
|
30316
|
+
if (input.waitMs <= 1e3 && input.runMs <= 1e3) return null;
|
|
30317
|
+
const bytes = input.bytes === void 0 ? "" : ` bytes=${input.bytes}`;
|
|
30318
|
+
return `[db-jobs] slow: op=${input.op} lane=${input.lane} waitMs=${input.waitMs} runMs=${input.runMs} depth=${input.depth}${bytes}`;
|
|
30319
|
+
}
|
|
30302
30320
|
function workerScriptUrl() {
|
|
30303
30321
|
return import.meta.url.endsWith(".ts") ? new URL("./dashboard-db-worker.ts", import.meta.url) : new URL("./dashboard-db-worker.js", import.meta.url);
|
|
30304
30322
|
}
|
|
@@ -30323,6 +30341,8 @@ function coalescingKey(operation, payload) {
|
|
|
30323
30341
|
}
|
|
30324
30342
|
function workerLane(operation) {
|
|
30325
30343
|
if (operation === "searchSessionsSemantic") return "semantic";
|
|
30344
|
+
if (operation === "parseTranscriptSnapshot") return "parse";
|
|
30345
|
+
if (operation === "costReconcileSweep") return "long";
|
|
30326
30346
|
return COALESCED_OPERATIONS.has(operation) ? "long" : "read";
|
|
30327
30347
|
}
|
|
30328
30348
|
function cancelOlderSemanticSearches() {
|
|
@@ -30347,12 +30367,28 @@ function getWorker(lane) {
|
|
|
30347
30367
|
if (message.progress !== void 0) {
|
|
30348
30368
|
job.progressChain = job.progressChain.then(async () => {
|
|
30349
30369
|
for (const listener of job.progressListeners) await listener(message.progress);
|
|
30370
|
+
}).finally(() => {
|
|
30371
|
+
worker.postMessage({
|
|
30372
|
+
id: message.id,
|
|
30373
|
+
ack: message.progressSeq
|
|
30374
|
+
});
|
|
30350
30375
|
});
|
|
30351
30376
|
return;
|
|
30352
30377
|
}
|
|
30353
30378
|
pending.delete(message.id);
|
|
30354
30379
|
if (job.timeout) clearTimeout(job.timeout);
|
|
30355
30380
|
if (job.lane === "semantic" && latestSemanticJobId === message.id) latestSemanticJobId = null;
|
|
30381
|
+
if (message.startedAt !== void 0 && message.finishedAt !== void 0) {
|
|
30382
|
+
const line = formatSlowJobLine({
|
|
30383
|
+
op: job.operation,
|
|
30384
|
+
lane: job.lane,
|
|
30385
|
+
waitMs: message.startedAt - job.enqueuedAt,
|
|
30386
|
+
runMs: message.finishedAt - message.startedAt,
|
|
30387
|
+
depth: [...pending.values()].filter((pendingJob) => pendingJob.lane === job.lane).length,
|
|
30388
|
+
bytes: message.bytes
|
|
30389
|
+
});
|
|
30390
|
+
if (line) console.warn(line);
|
|
30391
|
+
}
|
|
30356
30392
|
if (message.ok) {
|
|
30357
30393
|
job.progressChain.then(() => job.resolve(message.result), job.reject);
|
|
30358
30394
|
return;
|
|
@@ -30372,7 +30408,7 @@ function getWorker(lane) {
|
|
|
30372
30408
|
});
|
|
30373
30409
|
return worker;
|
|
30374
30410
|
}
|
|
30375
|
-
async function
|
|
30411
|
+
async function executeInline(operation, payload, onProgress) {
|
|
30376
30412
|
switch (operation) {
|
|
30377
30413
|
case "getDiscoveredStats": return getDiscoveredStats();
|
|
30378
30414
|
case "listDiscoveredSessions": {
|
|
@@ -30407,6 +30443,12 @@ async function runInline$1(operation, payload, onProgress) {
|
|
|
30407
30443
|
onProgress
|
|
30408
30444
|
});
|
|
30409
30445
|
case "getConversationByName": return getConversationByName(payload);
|
|
30446
|
+
case "parseTranscriptSnapshot": {
|
|
30447
|
+
const input = payload;
|
|
30448
|
+
const parser = transcriptParsers[input.parser];
|
|
30449
|
+
if (!parser) throw new Error(`Unknown transcript parser: ${input.parser}`);
|
|
30450
|
+
return parser(input.sessionFile);
|
|
30451
|
+
}
|
|
30410
30452
|
case "getSetting": return getSetting(payload);
|
|
30411
30453
|
case "setSetting": {
|
|
30412
30454
|
const input = payload;
|
|
@@ -30421,27 +30463,66 @@ async function runInline$1(operation, payload, onProgress) {
|
|
|
30421
30463
|
});
|
|
30422
30464
|
}
|
|
30423
30465
|
case "getArtifactBySlug": {
|
|
30424
|
-
const { getArtifactBySlugJob } = await import("./artifact-index-jobs-
|
|
30466
|
+
const { getArtifactBySlugJob } = await import("./artifact-index-jobs-BdeB5RIY.js");
|
|
30425
30467
|
return getArtifactBySlugJob(payload);
|
|
30426
30468
|
}
|
|
30427
30469
|
case "listArtifactsForWorkspaceOrIssue": {
|
|
30428
|
-
const { listArtifactsForWorkspaceOrIssueJob } = await import("./artifact-index-jobs-
|
|
30470
|
+
const { listArtifactsForWorkspaceOrIssueJob } = await import("./artifact-index-jobs-BdeB5RIY.js");
|
|
30429
30471
|
return listArtifactsForWorkspaceOrIssueJob(payload);
|
|
30430
30472
|
}
|
|
30431
30473
|
case "unshareArtifactBySlug": {
|
|
30432
|
-
const { unshareArtifactBySlugJob } = await import("./artifact-index-jobs-
|
|
30474
|
+
const { unshareArtifactBySlugJob } = await import("./artifact-index-jobs-BdeB5RIY.js");
|
|
30433
30475
|
return unshareArtifactBySlugJob(payload);
|
|
30434
30476
|
}
|
|
30477
|
+
case "costReconcileSweep": return payload.source === "pi" ? collectPiCostEvents({
|
|
30478
|
+
...payload,
|
|
30479
|
+
onBatch: async (batch) => onProgress?.(batch)
|
|
30480
|
+
}) : collectCodexCostEvents({
|
|
30481
|
+
...payload,
|
|
30482
|
+
onBatch: async (batch) => onProgress?.(batch)
|
|
30483
|
+
});
|
|
30484
|
+
}
|
|
30485
|
+
}
|
|
30486
|
+
async function runInline$1(operation, payload, onProgress) {
|
|
30487
|
+
const startedAt = Date.now();
|
|
30488
|
+
let bytes;
|
|
30489
|
+
try {
|
|
30490
|
+
const result = await executeInline(operation, payload, onProgress);
|
|
30491
|
+
if (operation === "parseTranscriptSnapshot") bytes = result.byteOffset;
|
|
30492
|
+
return result;
|
|
30493
|
+
} finally {
|
|
30494
|
+
const line = formatSlowJobLine({
|
|
30495
|
+
op: operation,
|
|
30496
|
+
lane: workerLane(operation),
|
|
30497
|
+
waitMs: 0,
|
|
30498
|
+
runMs: Date.now() - startedAt,
|
|
30499
|
+
depth: 0,
|
|
30500
|
+
bytes
|
|
30501
|
+
});
|
|
30502
|
+
if (line) console.warn(line);
|
|
30435
30503
|
}
|
|
30436
30504
|
}
|
|
30437
30505
|
function runDashboardDbJob(operation, payload, onProgress) {
|
|
30438
|
-
if (import.meta.url.endsWith(".ts") && process.env["VITEST"]) return runInline$1(operation, payload, onProgress);
|
|
30439
30506
|
const key = coalescingKey(operation, payload);
|
|
30440
30507
|
const existing = key ? sharedJobs.get(key) : void 0;
|
|
30441
30508
|
if (existing) {
|
|
30442
30509
|
if (onProgress) existing.progressListeners.add(onProgress);
|
|
30443
30510
|
return existing.promise;
|
|
30444
30511
|
}
|
|
30512
|
+
if (import.meta.url.endsWith(".ts") && process.env["VITEST"]) {
|
|
30513
|
+
const progressListeners = /* @__PURE__ */ new Set();
|
|
30514
|
+
if (onProgress) progressListeners.add(onProgress);
|
|
30515
|
+
const promise = runInline$1(operation, payload, onProgress);
|
|
30516
|
+
if (key) {
|
|
30517
|
+
sharedJobs.set(key, {
|
|
30518
|
+
lane: workerLane(operation),
|
|
30519
|
+
promise,
|
|
30520
|
+
progressListeners
|
|
30521
|
+
});
|
|
30522
|
+
promise.then(() => sharedJobs.delete(key), () => sharedJobs.delete(key));
|
|
30523
|
+
}
|
|
30524
|
+
return promise;
|
|
30525
|
+
}
|
|
30445
30526
|
if (pending.size >= MAX_PENDING_JOBS) return Promise.reject(/* @__PURE__ */ new Error("Dashboard database worker queue is full"));
|
|
30446
30527
|
const id = randomUUID$1();
|
|
30447
30528
|
const lane = workerLane(operation);
|
|
@@ -30468,7 +30549,8 @@ function runDashboardDbJob(operation, payload, onProgress) {
|
|
|
30468
30549
|
reject,
|
|
30469
30550
|
progressListeners,
|
|
30470
30551
|
progressChain: Promise.resolve(),
|
|
30471
|
-
timeout
|
|
30552
|
+
timeout,
|
|
30553
|
+
enqueuedAt: Date.now()
|
|
30472
30554
|
});
|
|
30473
30555
|
getWorker(lane).postMessage({
|
|
30474
30556
|
id,
|
|
@@ -31057,7 +31139,8 @@ async function startSubagentListPolling(sessionFile, pendingToolUseIds, emit) {
|
|
|
31057
31139
|
* are implemented via TerminalService (dual-runtime PTY, B20).
|
|
31058
31140
|
*/
|
|
31059
31141
|
init_src();
|
|
31060
|
-
|
|
31142
|
+
init_conversation_service();
|
|
31143
|
+
init_pi_conversation_parser();
|
|
31061
31144
|
init_paths();
|
|
31062
31145
|
init_projects();
|
|
31063
31146
|
function storedToDomainEvent(stored) {
|
|
@@ -31089,6 +31172,12 @@ function normalizedIssueId(value) {
|
|
|
31089
31172
|
function conversationDiscoveringStream() {
|
|
31090
31173
|
return Stream.succeed({ kind: "discovering" }).pipe(Stream.repeat(Schedule.fixed("2 seconds")));
|
|
31091
31174
|
}
|
|
31175
|
+
/**
|
|
31176
|
+
* Watch and emit full transcript snapshots for harnesses without incremental parsing.
|
|
31177
|
+
* Path resolution, file watching, debounce state, and event emission stay on the main
|
|
31178
|
+
* thread. Callers supply a parser callback that sends CPU-bound parsing through the
|
|
31179
|
+
* dashboard DB worker's parse lane via the job door.
|
|
31180
|
+
*/
|
|
31092
31181
|
function streamResolvedFullParseSnapshots(resolve, parse, model, unresolvedMeansEmpty = false) {
|
|
31093
31182
|
return Stream.callback((queue) => Effect.acquireRelease(Effect.promise(async () => {
|
|
31094
31183
|
let stopped = false;
|
|
@@ -31211,20 +31300,26 @@ function streamResolvedFullParseSnapshots(resolve, parse, model, unresolvedMeans
|
|
|
31211
31300
|
} };
|
|
31212
31301
|
}), (handle) => Effect.sync(() => handle.stop())));
|
|
31213
31302
|
}
|
|
31214
|
-
function ohmypiSnapshotParser(harness) {
|
|
31215
|
-
switch (harness) {
|
|
31216
|
-
case "pi": return parsePiConversationMessages;
|
|
31217
|
-
default: return parseOhmypiConversationMessages;
|
|
31218
|
-
}
|
|
31219
|
-
}
|
|
31220
31303
|
function streamHarnessFullParseSnapshots(sessionName, harness, model, unresolvedMeansEmpty = false, workspace = null) {
|
|
31221
31304
|
const behavior = getHarnessBehavior(harness);
|
|
31222
31305
|
const streamResolved = (resolve, parse) => streamResolvedFullParseSnapshots(resolve, parse, model, unresolvedMeansEmpty);
|
|
31223
31306
|
switch (behavior.transcriptKind) {
|
|
31224
|
-
case "ohmypi-jsonl": return streamResolved(() => resolvePiSessionPath(sessionName),
|
|
31225
|
-
|
|
31226
|
-
|
|
31227
|
-
|
|
31307
|
+
case "ohmypi-jsonl": return streamResolved(() => resolvePiSessionPath(sessionName), (file) => runDashboardDbJob("parseTranscriptSnapshot", {
|
|
31308
|
+
sessionFile: file,
|
|
31309
|
+
parser: harness === "pi" ? "pi" : "ohmypi"
|
|
31310
|
+
}));
|
|
31311
|
+
case "codex-rollout-jsonl": return streamResolved(() => resolveCodexRolloutPath(sessionName), (file) => runDashboardDbJob("parseTranscriptSnapshot", {
|
|
31312
|
+
sessionFile: file,
|
|
31313
|
+
parser: "codex"
|
|
31314
|
+
}));
|
|
31315
|
+
case "acp-jsonl": return streamResolved(() => resolveAcpTranscriptPath(sessionName), (file) => runDashboardDbJob("parseTranscriptSnapshot", {
|
|
31316
|
+
sessionFile: file,
|
|
31317
|
+
parser: "acp"
|
|
31318
|
+
}));
|
|
31319
|
+
case "kimi-wire-jsonl": return streamResolved(() => resolveKimiWirePath(sessionName, workspace ? { workspaceOverride: workspace } : {}), (file) => runDashboardDbJob("parseTranscriptSnapshot", {
|
|
31320
|
+
sessionFile: file,
|
|
31321
|
+
parser: "kimi"
|
|
31322
|
+
}));
|
|
31228
31323
|
default: return null;
|
|
31229
31324
|
}
|
|
31230
31325
|
}
|
|
@@ -31540,7 +31635,7 @@ const PanRpcLayer = PanRpcGroup.toLayer(Effect.gen(function* () {
|
|
|
31540
31635
|
}), (unsubscribe) => Effect.sync(() => unsubscribe()))),
|
|
31541
31636
|
[WS_METHODS.subscribeIssueEvents]: (input) => {
|
|
31542
31637
|
console.log(`[ws-rpc] subscribeIssueEvents invoked issueId=${input.issueId}`);
|
|
31543
|
-
import("./issue-service-singleton-
|
|
31638
|
+
import("./issue-service-singleton-COEqWNKE.js").then(({ getSharedIssueService }) => getSharedIssueService().backfillIssue(input.issueId)).catch(() => {});
|
|
31544
31639
|
return eventStore.streamEvents.pipe(Stream.filter(shouldBroadcastDashboardEvent), Stream.map(storedToDomainEvent), Stream.filter(passesDomainEventSchema), Stream.mapEffect((event) => getCachedAgentIssueLookup(readModel).pipe(Effect.map((lookup) => filterDomainEventForIssue(event, input.issueId, lookup)))), Stream.filter((event) => event !== null));
|
|
31545
31640
|
},
|
|
31546
31641
|
[WS_METHODS.subscribeTerminal]: (input) => terminalService.streamSession(input.sessionName, input.cols, input.rows),
|
|
@@ -31566,7 +31661,7 @@ const PanRpcLayer = PanRpcGroup.toLayer(Effect.gen(function* () {
|
|
|
31566
31661
|
[WS_METHODS.terminalResize]: (input) => terminalService.resize(input.sessionName, input.cols, input.rows),
|
|
31567
31662
|
[WS_METHODS.terminalClose]: (input) => terminalService.close(input.sessionName),
|
|
31568
31663
|
[WS_METHODS.subscribeConversationMessages]: (input) => Stream.unwrap(Effect.gen(function* () {
|
|
31569
|
-
const conv = getConversationByName
|
|
31664
|
+
const conv = yield* Effect.promise(() => runDashboardDbJob("getConversationByName", input.conversationName));
|
|
31570
31665
|
if (!conv && /^(agent-|planning-|specialist-|strike-|inspect-)|^(flywheel-orchestrator|conv-flywheel-orchestrator)$/.test(input.conversationName)) {
|
|
31571
31666
|
const harness = yield* Effect.promise(() => resolveAgentHarness(input.conversationName));
|
|
31572
31667
|
const stream = streamHarnessFullParseSnapshots(input.conversationName, harness, null);
|
|
@@ -31590,7 +31685,10 @@ const PanRpcLayer = PanRpcGroup.toLayer(Effect.gen(function* () {
|
|
|
31590
31685
|
Queue.offerUnsafe(queue, event);
|
|
31591
31686
|
} catch {}
|
|
31592
31687
|
};
|
|
31593
|
-
const initial = await
|
|
31688
|
+
const initial = await runDashboardDbJob("parseTranscriptSnapshot", {
|
|
31689
|
+
sessionFile,
|
|
31690
|
+
parser: "claude-initial"
|
|
31691
|
+
});
|
|
31594
31692
|
let currentByteOffset = initial.byteOffset;
|
|
31595
31693
|
let currentContextUsage = contextUsageFromParseResult(initial, model);
|
|
31596
31694
|
let highWaterCount = initial.messages.length;
|
|
@@ -33334,7 +33432,7 @@ async function closeIssuePullRequest(issueId, reason = "Canceled via Overdeck")
|
|
|
33334
33432
|
timeout: 15e3
|
|
33335
33433
|
});
|
|
33336
33434
|
try {
|
|
33337
|
-
const { setReviewStatusSync } = await import("./review-status-
|
|
33435
|
+
const { setReviewStatusSync } = await import("./review-status-CDs0jQV6.js");
|
|
33338
33436
|
setReviewStatusSync(issueId.toUpperCase(), { prUrl: void 0 });
|
|
33339
33437
|
} catch {}
|
|
33340
33438
|
return [`Closed PR #${prNumber} on ${githubCheck.owner}/${githubCheck.repo}`];
|
|
@@ -33388,7 +33486,7 @@ async function runDestructiveIssueLifecycle(id, mode, opts = {}) {
|
|
|
33388
33486
|
const { ctx, projectConfig } = buildLifecycleContext(id, getIssueDataService$8().getIssueSource(id) ?? void 0);
|
|
33389
33487
|
const deleteWorkspace = opts.deleteWorkspace ?? true;
|
|
33390
33488
|
cleanupLog.push(...await closeIssuePullRequest(id, mode === "cancel" ? "Canceled via Overdeck" : "Reset to Todo via Overdeck"));
|
|
33391
|
-
const { resetToTodo, cancelIssueWorkflow } = await import("./lifecycle-
|
|
33489
|
+
const { resetToTodo, cancelIssueWorkflow } = await import("./lifecycle-CMpSB9sn.js");
|
|
33392
33490
|
const workflow = mode === "cancel" ? cancelIssueWorkflow : resetToTodo;
|
|
33393
33491
|
const result = await Effect.runPromise(workflow(ctx, {
|
|
33394
33492
|
deleteWorkspace,
|
|
@@ -33403,7 +33501,7 @@ async function runDestructiveIssueLifecycle(id, mode, opts = {}) {
|
|
|
33403
33501
|
}));
|
|
33404
33502
|
cleanupLog.push(...result.steps.flatMap((step) => step.details || [step.error].filter(Boolean)));
|
|
33405
33503
|
if (mode === "cancel") try {
|
|
33406
|
-
const { transitionXBriefOnMain } = await import("./lifecycle-io-
|
|
33504
|
+
const { transitionXBriefOnMain } = await import("./lifecycle-io-CLWwYZaR.js");
|
|
33407
33505
|
const tx = await Effect.runPromise(transitionXBriefOnMain(ctx.projectPath, id, "cancelled", "cancelled", `scope: cancel ${id.toUpperCase()} xBRIEF`));
|
|
33408
33506
|
if (tx.moved) cleanupLog.push(`xBRIEF moved ${tx.fromDir} → cancelled`);
|
|
33409
33507
|
if (tx.committed) cleanupLog.push(`Committed xBRIEF cancellation on main`);
|
|
@@ -33411,8 +33509,8 @@ async function runDestructiveIssueLifecycle(id, mode, opts = {}) {
|
|
|
33411
33509
|
cleanupLog.push(`xBRIEF cancel transition failed (non-fatal): ${err?.message ?? err}`);
|
|
33412
33510
|
}
|
|
33413
33511
|
try {
|
|
33414
|
-
const { killAllReviewerSessions } = await import("./review-agent-
|
|
33415
|
-
const { resolveProjectFromIssueSync } = await import("./projects-
|
|
33512
|
+
const { killAllReviewerSessions } = await import("./review-agent-DM9S22BL.js");
|
|
33513
|
+
const { resolveProjectFromIssueSync } = await import("./projects-Crur9uCa.js");
|
|
33416
33514
|
const projectKey = resolveProjectFromIssueSync(id)?.projectKey;
|
|
33417
33515
|
if (projectKey) {
|
|
33418
33516
|
const { killed } = await Effect.runPromise(killAllReviewerSessions(projectKey, id.toUpperCase()));
|
|
@@ -33426,7 +33524,7 @@ async function runDestructiveIssueLifecycle(id, mode, opts = {}) {
|
|
|
33426
33524
|
cleanupLog.push("Cleared review status");
|
|
33427
33525
|
} catch {}
|
|
33428
33526
|
try {
|
|
33429
|
-
const { resetPostMergeState } = await import("./merge-agent-
|
|
33527
|
+
const { resetPostMergeState } = await import("./merge-agent-svBDRWB6.js");
|
|
33430
33528
|
resetPostMergeState(id);
|
|
33431
33529
|
resetPostMergeState(id.toUpperCase());
|
|
33432
33530
|
cleanupLog.push("Cleared merge state");
|
|
@@ -33446,7 +33544,7 @@ function closeIssueTransition(options) {
|
|
|
33446
33544
|
const { issueId, body, eventStore } = options;
|
|
33447
33545
|
const { reason } = body;
|
|
33448
33546
|
const projectPath = getProjectPath$3(void 0, extractPrefixSync(issueId) ?? issueId.split("-")[0]);
|
|
33449
|
-
const { close: closeWorkflow } = yield* Effect.promise(() => import("./lifecycle-
|
|
33547
|
+
const { close: closeWorkflow } = yield* Effect.promise(() => import("./lifecycle-CMpSB9sn.js"));
|
|
33450
33548
|
const githubCheck = isGitHubIssue$4(issueId);
|
|
33451
33549
|
const issueDataService = getIssueDataService$8();
|
|
33452
33550
|
const issueSource = issueDataService.getIssueSource(issueId);
|
|
@@ -33713,7 +33811,7 @@ function reopenIssueTransition(options) {
|
|
|
33713
33811
|
else clearReviewStatus(id.toUpperCase());
|
|
33714
33812
|
} catch {}
|
|
33715
33813
|
try {
|
|
33716
|
-
const { resetPostMergeState } = await import("./merge-agent-
|
|
33814
|
+
const { resetPostMergeState } = await import("./merge-agent-svBDRWB6.js");
|
|
33717
33815
|
resetPostMergeState(id);
|
|
33718
33816
|
resetPostMergeState(id.toUpperCase());
|
|
33719
33817
|
} catch {}
|
|
@@ -33777,7 +33875,7 @@ function moveIssueStatus(options) {
|
|
|
33777
33875
|
"done"
|
|
33778
33876
|
];
|
|
33779
33877
|
if (!targetStatus || !validStatuses.includes(targetStatus)) return jsonResponse({ error: `Invalid targetStatus. Must be one of: ${validStatuses.join(", ")}` }, { status: 400 });
|
|
33780
|
-
const { updateShadowState } = yield* Effect.promise(() => import("./shadow-state-
|
|
33878
|
+
const { updateShadowState } = yield* Effect.promise(() => import("./shadow-state-6jSyeXQ7.js"));
|
|
33781
33879
|
const issueState = {
|
|
33782
33880
|
backlog: "open",
|
|
33783
33881
|
todo: "open",
|
|
@@ -34020,7 +34118,7 @@ async function copySettingsToWorkspace(id) {
|
|
|
34020
34118
|
success: false,
|
|
34021
34119
|
error: "Workspace not found"
|
|
34022
34120
|
}, { status: 404 });
|
|
34023
|
-
const { copyOverdeckSettingsToWorkspaceSync } = await import("./workspace-manager-
|
|
34121
|
+
const { copyOverdeckSettingsToWorkspaceSync } = await import("./workspace-manager-gz9Amovn.js");
|
|
34024
34122
|
const result = copyOverdeckSettingsToWorkspaceSync(workspacePath);
|
|
34025
34123
|
return jsonResponse({
|
|
34026
34124
|
success: result.errors.length === 0 || result.copied.length > 0,
|
|
@@ -34526,7 +34624,7 @@ function restartFromPlan(options) {
|
|
|
34526
34624
|
});
|
|
34527
34625
|
const resetResult = yield* Effect.promise(async () => {
|
|
34528
34626
|
try {
|
|
34529
|
-
const { runGitResetHard } = await import("./dangerous-git-ops-
|
|
34627
|
+
const { runGitResetHard } = await import("./dangerous-git-ops-BOtXCFkT.js");
|
|
34530
34628
|
async function findPlanningCommit(grep, label) {
|
|
34531
34629
|
try {
|
|
34532
34630
|
const { stdout } = await execAsync$7(`git log --grep="${grep.replace(/"/g, "\\\"")}" --format=%H -1`, {
|
|
@@ -34973,7 +35071,7 @@ function closeOutIssue(id, opts = {}) {
|
|
|
34973
35071
|
}
|
|
34974
35072
|
const closeOutResult = yield* Effect.promise(async () => {
|
|
34975
35073
|
try {
|
|
34976
|
-
const { closeOut } = await import("./lifecycle-
|
|
35074
|
+
const { closeOut } = await import("./lifecycle-CMpSB9sn.js");
|
|
34977
35075
|
return {
|
|
34978
35076
|
ok: true,
|
|
34979
35077
|
result: await Effect.runPromise(closeOut(ctx, {
|
|
@@ -35063,7 +35161,7 @@ function bulkCloseOut(body) {
|
|
|
35063
35161
|
const invalidIds = issueIds.filter((id) => !isValidIssueId(id));
|
|
35064
35162
|
if (invalidIds.length > 0) return jsonResponse({ error: `Invalid issue ID format: ${invalidIds.join(", ")}` }, { status: 400 });
|
|
35065
35163
|
const eventStore = yield* EventStoreService;
|
|
35066
|
-
const { closeOut } = yield* Effect.promise(() => import("./lifecycle-
|
|
35164
|
+
const { closeOut } = yield* Effect.promise(() => import("./lifecycle-CMpSB9sn.js"));
|
|
35067
35165
|
const issueDataService = getIssueDataService$5();
|
|
35068
35166
|
const tasks = [];
|
|
35069
35167
|
const agentChecks = yield* withConcurrencyLimit(issueIds.map((id) => Effect.promise(async () => {
|
|
@@ -35288,8 +35386,8 @@ const getIssueShipLogRoute = HttpRouter.add("GET", "/api/issues/:id/ship-log", h
|
|
|
35288
35386
|
const id = (yield* HttpRouter.params)["id"] ?? "";
|
|
35289
35387
|
if (!parseIssueIdSync(id)) return jsonResponse({ error: "Invalid issue ID" }, { status: 400 });
|
|
35290
35388
|
return yield* Effect.promise(async () => {
|
|
35291
|
-
const { getShipLog } = await import("./ship-log-
|
|
35292
|
-
const { getReviewStatusSync } = await import("./review-status-
|
|
35389
|
+
const { getShipLog } = await import("./ship-log-D-CphNZx.js");
|
|
35390
|
+
const { getReviewStatusSync } = await import("./review-status-CDs0jQV6.js");
|
|
35293
35391
|
const log = getShipLog(id);
|
|
35294
35392
|
const rs = getReviewStatusSync(id);
|
|
35295
35393
|
return jsonResponse({
|
|
@@ -35304,8 +35402,8 @@ const getIssueVerificationRoute = HttpRouter.add("GET", "/api/issues/:id/verific
|
|
|
35304
35402
|
const id = (yield* HttpRouter.params)["id"] ?? "";
|
|
35305
35403
|
if (!parseIssueIdSync(id)) return jsonResponse({ error: "Invalid issue ID" }, { status: 400 });
|
|
35306
35404
|
return yield* Effect.promise(async () => {
|
|
35307
|
-
const { readVerificationArtifact } = await import("./verification-artifact-
|
|
35308
|
-
const { getReviewStatusSync } = await import("./review-status-
|
|
35405
|
+
const { readVerificationArtifact } = await import("./verification-artifact-Cmhgq4b_.js");
|
|
35406
|
+
const { getReviewStatusSync } = await import("./review-status-CDs0jQV6.js");
|
|
35309
35407
|
const { join } = await import("node:path");
|
|
35310
35408
|
const resolved = resolveProjectFromIssueSync(id);
|
|
35311
35409
|
const workspacePath = resolved ? join(resolved.projectPath, "workspaces", `feature-${id.toLowerCase()}`) : null;
|
|
@@ -40119,9 +40217,10 @@ function getAvailableModelsApi() {
|
|
|
40119
40217
|
}
|
|
40120
40218
|
}
|
|
40121
40219
|
const openaiOrder = {
|
|
40122
|
-
"gpt-
|
|
40123
|
-
"gpt-5.6-
|
|
40124
|
-
"gpt-5.6-
|
|
40220
|
+
"gpt-6-astra": 0,
|
|
40221
|
+
"gpt-5.6-sol": 1,
|
|
40222
|
+
"gpt-5.6-terra": 2,
|
|
40223
|
+
"gpt-5.6-luna": 3,
|
|
40125
40224
|
"gpt-5.5": 10,
|
|
40126
40225
|
"gpt-5.5-pro": 11,
|
|
40127
40226
|
"gpt-5.4": 20,
|
|
@@ -41304,7 +41403,7 @@ Be specific: reference actual file names, function names, requirement text, disc
|
|
|
41304
41403
|
const { command: cliCmd, args: cliArgs } = getAgentCommandSync(statusModelId);
|
|
41305
41404
|
const modelFlag = cliArgs.length > 0 ? ` ${cliArgs.join(" ")}` : "";
|
|
41306
41405
|
const promptFile = join(planningDir, ".status-review-prompt.tmp");
|
|
41307
|
-
const { getProviderForModelSync, getProviderEnvSync } = await import("./providers-
|
|
41406
|
+
const { getProviderForModelSync, getProviderEnvSync } = await import("./providers-Bun8zer5.js");
|
|
41308
41407
|
let providerEnvStr = "";
|
|
41309
41408
|
let providerEnv = {};
|
|
41310
41409
|
const statusProvider = getProviderForModelSync(statusModelId);
|
|
@@ -41387,7 +41486,7 @@ const postMissionControlUploadRoute = HttpRouter.add("POST", "/api/command-deck/
|
|
|
41387
41486
|
let safeName = filename.replace(/[^a-zA-Z0-9._-]/g, "-");
|
|
41388
41487
|
let processedContent = content;
|
|
41389
41488
|
if (safeName.endsWith(".vtt")) {
|
|
41390
|
-
const { vttToMarkdown } = yield* Effect.promise(() => import("./vtt-parser-
|
|
41489
|
+
const { vttToMarkdown } = yield* Effect.promise(() => import("./vtt-parser-Va--tv27.js"));
|
|
41391
41490
|
processedContent = vttToMarkdown(content);
|
|
41392
41491
|
safeName = safeName.replace(/\.vtt$/, ".md");
|
|
41393
41492
|
}
|
|
@@ -42683,7 +42782,7 @@ const resolveAndSpeak = (options, deps) => Effect.tryPromise({
|
|
|
42683
42782
|
//#endregion
|
|
42684
42783
|
//#region services/tts-playback.ts
|
|
42685
42784
|
const MAX_TTS_QUEUE_LENGTH = 20;
|
|
42686
|
-
const state$
|
|
42785
|
+
const state$2 = {
|
|
42687
42786
|
unsubscribe: null,
|
|
42688
42787
|
startPromise: null,
|
|
42689
42788
|
queue: [],
|
|
@@ -42728,16 +42827,16 @@ async function speakActivityTts(event) {
|
|
|
42728
42827
|
}
|
|
42729
42828
|
}
|
|
42730
42829
|
async function drainQueue() {
|
|
42731
|
-
if (state$
|
|
42732
|
-
state$
|
|
42830
|
+
if (state$2.processing) return;
|
|
42831
|
+
state$2.processing = true;
|
|
42733
42832
|
try {
|
|
42734
|
-
while (state$
|
|
42735
|
-
const event = state$
|
|
42833
|
+
while (state$2.queue.length > 0 && getTtsRuntimeConfig().enabled) {
|
|
42834
|
+
const event = state$2.queue.shift();
|
|
42736
42835
|
if (event) await speakActivityTts(event);
|
|
42737
42836
|
}
|
|
42738
|
-
if (!getTtsRuntimeConfig().enabled) state$
|
|
42837
|
+
if (!getTtsRuntimeConfig().enabled) state$2.queue = [];
|
|
42739
42838
|
} finally {
|
|
42740
|
-
state$
|
|
42839
|
+
state$2.processing = false;
|
|
42741
42840
|
}
|
|
42742
42841
|
}
|
|
42743
42842
|
const LIFECYCLE_EVENT_TYPES = new Set([
|
|
@@ -42753,14 +42852,14 @@ function enqueueActivityTts(event) {
|
|
|
42753
42852
|
const eventType = event.payload?.eventType;
|
|
42754
42853
|
if (eventType && LIFECYCLE_EVENT_TYPES.has(eventType) && config.lifecycle === false) return;
|
|
42755
42854
|
}
|
|
42756
|
-
if (state$
|
|
42855
|
+
if (state$2.queue.length >= MAX_TTS_QUEUE_LENGTH) {
|
|
42757
42856
|
const priority = eventPriority(event) ?? 1;
|
|
42758
42857
|
if (config.dropInfoWhenFull && priority >= 2) return;
|
|
42759
|
-
const dropIndex = config.dropInfoWhenFull ? dropIndexForFullQueue(state$
|
|
42858
|
+
const dropIndex = config.dropInfoWhenFull ? dropIndexForFullQueue(state$2.queue, priority) : 0;
|
|
42760
42859
|
if (dropIndex === void 0) return;
|
|
42761
|
-
state$
|
|
42860
|
+
state$2.queue.splice(dropIndex, 1);
|
|
42762
42861
|
}
|
|
42763
|
-
state$
|
|
42862
|
+
state$2.queue.push(event);
|
|
42764
42863
|
drainQueue();
|
|
42765
42864
|
}
|
|
42766
42865
|
function onEvent$1(event) {
|
|
@@ -42768,29 +42867,29 @@ function onEvent$1(event) {
|
|
|
42768
42867
|
enqueueActivityTts(event);
|
|
42769
42868
|
}
|
|
42770
42869
|
async function startTtsPlayback() {
|
|
42771
|
-
if (state$
|
|
42772
|
-
if (state$
|
|
42870
|
+
if (state$2.unsubscribe) return;
|
|
42871
|
+
if (state$2.startPromise) return state$2.startPromise;
|
|
42773
42872
|
if (!getTtsRuntimeConfig().enabled) {
|
|
42774
42873
|
console.log("[tts-playback] Disabled (tts.enabled=false)");
|
|
42775
42874
|
return;
|
|
42776
42875
|
}
|
|
42777
|
-
state$
|
|
42876
|
+
state$2.startPromise = (async () => {
|
|
42778
42877
|
const store = await initEventStore();
|
|
42779
|
-
if (state$
|
|
42780
|
-
state$
|
|
42878
|
+
if (state$2.unsubscribe) return;
|
|
42879
|
+
state$2.unsubscribe = store.subscribe(onEvent$1);
|
|
42781
42880
|
console.log("[tts-playback] Started");
|
|
42782
42881
|
})();
|
|
42783
42882
|
try {
|
|
42784
|
-
await state$
|
|
42883
|
+
await state$2.startPromise;
|
|
42785
42884
|
} finally {
|
|
42786
|
-
state$
|
|
42885
|
+
state$2.startPromise = null;
|
|
42787
42886
|
}
|
|
42788
42887
|
}
|
|
42789
42888
|
function stopTtsPlayback() {
|
|
42790
|
-
state$
|
|
42791
|
-
if (state$
|
|
42792
|
-
state$
|
|
42793
|
-
state$
|
|
42889
|
+
state$2.queue = [];
|
|
42890
|
+
if (state$2.unsubscribe) {
|
|
42891
|
+
state$2.unsubscribe();
|
|
42892
|
+
state$2.unsubscribe = null;
|
|
42794
42893
|
}
|
|
42795
42894
|
}
|
|
42796
42895
|
async function syncTtsPlaybackWithConfig() {
|
|
@@ -42901,6 +43000,24 @@ function unavailableProvider(provider, model, reason) {
|
|
|
42901
43000
|
};
|
|
42902
43001
|
}
|
|
42903
43002
|
//#endregion
|
|
43003
|
+
//#region ../../lib/conversation-search/health.ts
|
|
43004
|
+
const state$1 = {
|
|
43005
|
+
lastErrorAt: null,
|
|
43006
|
+
lastErrorReason: null,
|
|
43007
|
+
lastSuccessAt: null
|
|
43008
|
+
};
|
|
43009
|
+
function recordConversationSearchFailure(reason) {
|
|
43010
|
+
state$1.lastErrorAt = (/* @__PURE__ */ new Date()).toISOString();
|
|
43011
|
+
state$1.lastErrorReason = reason instanceof Error ? reason.message : String(reason);
|
|
43012
|
+
}
|
|
43013
|
+
function recordConversationSearchSuccess() {
|
|
43014
|
+
state$1.lastSuccessAt = (/* @__PURE__ */ new Date()).toISOString();
|
|
43015
|
+
}
|
|
43016
|
+
/** Snapshot copy — callers must not mutate live state. */
|
|
43017
|
+
function getConversationSearchHealth() {
|
|
43018
|
+
return { ...state$1 };
|
|
43019
|
+
}
|
|
43020
|
+
//#endregion
|
|
42904
43021
|
//#region ../../lib/database/conversation-embeddings-db.ts
|
|
42905
43022
|
/**
|
|
42906
43023
|
* Conversation Embeddings Sidecar Database (PAN-1395)
|
|
@@ -44096,7 +44213,12 @@ var ConversationSearchWatcher = class {
|
|
|
44096
44213
|
}).then((result) => {
|
|
44097
44214
|
if (signal.aborted || this.stopped) return;
|
|
44098
44215
|
if (result.disabled) this.log.warn(`[conversation-search] startup index skipped: ${result.unavailableReason ?? "disabled"}`);
|
|
44099
|
-
else {
|
|
44216
|
+
else if (result.errors.length > 0) {
|
|
44217
|
+
recordConversationSearchFailure(result.errors[result.errors.length - 1]?.message ?? "startup indexing reported errors");
|
|
44218
|
+
const prunedNote = result.sessionsPruned > 0 ? `, pruned ${result.sessionsPruned} stale session${result.sessionsPruned === 1 ? "" : "s"}` : "";
|
|
44219
|
+
this.log.warn(`[conversation-search] startup indexed with ${result.errors.length} error${result.errors.length === 1 ? "" : "s"} across ${result.filesScanned} file${result.filesScanned === 1 ? "" : "s"}${prunedNote}: ${result.errors[0]?.message}`);
|
|
44220
|
+
} else {
|
|
44221
|
+
recordConversationSearchSuccess();
|
|
44100
44222
|
const prunedNote = result.sessionsPruned > 0 ? `, pruned ${result.sessionsPruned} stale session${result.sessionsPruned === 1 ? "" : "s"}` : "";
|
|
44101
44223
|
this.log.log(`[conversation-search] startup indexed ${result.chunksIndexed} chunk${result.chunksIndexed === 1 ? "" : "s"} across ${result.filesScanned} file${result.filesScanned === 1 ? "" : "s"}${prunedNote}`);
|
|
44102
44224
|
}
|
|
@@ -44179,8 +44301,16 @@ var ConversationSearchWatcher = class {
|
|
|
44179
44301
|
filePath,
|
|
44180
44302
|
config: this.config,
|
|
44181
44303
|
signal
|
|
44182
|
-
}).
|
|
44183
|
-
if (
|
|
44304
|
+
}).then((result) => {
|
|
44305
|
+
if (result.disabled) return;
|
|
44306
|
+
const firstError = result.errors[0];
|
|
44307
|
+
if (firstError) recordConversationSearchFailure(firstError.message);
|
|
44308
|
+
else recordConversationSearchSuccess();
|
|
44309
|
+
}, (error) => {
|
|
44310
|
+
if (!isAbortError(error)) {
|
|
44311
|
+
recordConversationSearchFailure(error);
|
|
44312
|
+
this.log.warn(`[conversation-search] failed to index ${filePath}:`, error);
|
|
44313
|
+
}
|
|
44184
44314
|
}).finally(() => {
|
|
44185
44315
|
this.activeTasks.delete(task);
|
|
44186
44316
|
this.activeIndexers = Math.max(0, this.activeIndexers - 1);
|
|
@@ -45069,6 +45199,7 @@ const getConversationSearchStatusRoute = HttpRouter.add("GET", "/api/settings/co
|
|
|
45069
45199
|
return yield* Effect.try({
|
|
45070
45200
|
try: () => {
|
|
45071
45201
|
const config = getConversationSearchConfigSync();
|
|
45202
|
+
const health = getConversationSearchHealth();
|
|
45072
45203
|
if (!config.enabled) return jsonResponse({
|
|
45073
45204
|
enabled: false,
|
|
45074
45205
|
available: false,
|
|
@@ -45076,7 +45207,8 @@ const getConversationSearchStatusRoute = HttpRouter.add("GET", "/api/settings/co
|
|
|
45076
45207
|
dbPath: config.dbPath,
|
|
45077
45208
|
chunkCount: 0,
|
|
45078
45209
|
indexedFileCount: 0,
|
|
45079
|
-
lastIndexedAt: null
|
|
45210
|
+
lastIndexedAt: null,
|
|
45211
|
+
health
|
|
45080
45212
|
});
|
|
45081
45213
|
const provider = createConversationEmbeddingProvider({ config });
|
|
45082
45214
|
if (!provider.enabled) return jsonResponse({
|
|
@@ -45086,7 +45218,8 @@ const getConversationSearchStatusRoute = HttpRouter.add("GET", "/api/settings/co
|
|
|
45086
45218
|
dbPath: config.dbPath,
|
|
45087
45219
|
chunkCount: 0,
|
|
45088
45220
|
indexedFileCount: 0,
|
|
45089
|
-
lastIndexedAt: null
|
|
45221
|
+
lastIndexedAt: null,
|
|
45222
|
+
health
|
|
45090
45223
|
});
|
|
45091
45224
|
const db = openEmbeddingsDb(config.dbPath, dimensionsForModel(config.model));
|
|
45092
45225
|
try {
|
|
@@ -45096,7 +45229,8 @@ const getConversationSearchStatusRoute = HttpRouter.add("GET", "/api/settings/co
|
|
|
45096
45229
|
available: db.available && provider.enabled,
|
|
45097
45230
|
unavailableReason: db.unavailableReason,
|
|
45098
45231
|
dbPath: config.dbPath,
|
|
45099
|
-
...stats
|
|
45232
|
+
...stats,
|
|
45233
|
+
health
|
|
45100
45234
|
});
|
|
45101
45235
|
} finally {
|
|
45102
45236
|
db.close();
|
|
@@ -45154,13 +45288,20 @@ const postConversationSearchReindexRoute = HttpRouter.add("POST", "/api/settings
|
|
|
45154
45288
|
startedAt: Date.now()
|
|
45155
45289
|
};
|
|
45156
45290
|
try {
|
|
45157
|
-
|
|
45291
|
+
const result = await fullReindexConversationSearch({ onProgress: (p) => {
|
|
45158
45292
|
conversationReindexProgress = {
|
|
45159
45293
|
active: true,
|
|
45160
45294
|
startedAt: conversationReindexProgress.startedAt,
|
|
45161
45295
|
...p
|
|
45162
45296
|
};
|
|
45163
|
-
} })
|
|
45297
|
+
} });
|
|
45298
|
+
const firstError = result.errors[0];
|
|
45299
|
+
if (firstError) recordConversationSearchFailure(firstError.message);
|
|
45300
|
+
else if (!result.disabled) recordConversationSearchSuccess();
|
|
45301
|
+
return jsonResponse(result);
|
|
45302
|
+
} catch (error) {
|
|
45303
|
+
recordConversationSearchFailure(error);
|
|
45304
|
+
throw error;
|
|
45164
45305
|
} finally {
|
|
45165
45306
|
conversationReindexProgress = {
|
|
45166
45307
|
...conversationReindexProgress,
|
|
@@ -45858,7 +45999,7 @@ const postRallyValidateRoute = HttpRouter.add("POST", "/api/rally/validate", Eff
|
|
|
45858
45999
|
}, { status: 400 });
|
|
45859
46000
|
return yield* Effect.promise(async () => {
|
|
45860
46001
|
try {
|
|
45861
|
-
const { RallyRestApi } = await import("./rally-api-
|
|
46002
|
+
const { RallyRestApi } = await import("./rally-api-BdNfpNGk.js");
|
|
45862
46003
|
const api = new RallyRestApi({
|
|
45863
46004
|
apiKey,
|
|
45864
46005
|
server: server || "https://rally1.rallydev.com"
|
|
@@ -46242,7 +46383,7 @@ const getPlanningStatusRoute = HttpRouter.add("GET", "/api/planning/:issueId/sta
|
|
|
46242
46383
|
const remoteState = loadRemoteAgentState(sessionName);
|
|
46243
46384
|
const isRemote = !!remoteState;
|
|
46244
46385
|
const vmName = remoteState?.vmName ?? "";
|
|
46245
|
-
const { getAgentStateSync } = await import("./agents-
|
|
46386
|
+
const { getAgentStateSync } = await import("./agents-BdkVgjxC.js");
|
|
46246
46387
|
const agentStarting = getAgentStateSync(sessionName)?.status === "starting";
|
|
46247
46388
|
let tmuxSessionAlive = false;
|
|
46248
46389
|
if (!isRemote) try {
|
|
@@ -46386,7 +46527,7 @@ Continue the PLANNING session. Do NOT implement anything.
|
|
|
46386
46527
|
const agentCwd = workspacePath;
|
|
46387
46528
|
const harnessLaunch = await prepareHarnessLaunch("claude-code");
|
|
46388
46529
|
if (existsSync$1(outputFile)) await rename(outputFile, join(planningDir, `output-${Date.now()}.jsonl`));
|
|
46389
|
-
const { getAgentCommandSync } = await import("./settings-
|
|
46530
|
+
const { getAgentCommandSync } = await import("./settings-EGNbGKpP.js");
|
|
46390
46531
|
let msgPlanningModel = "claude-sonnet-5";
|
|
46391
46532
|
try {
|
|
46392
46533
|
msgPlanningModel = resolveModel("plan", void 0, loadConfigSync().config);
|
|
@@ -46509,7 +46650,7 @@ async function getIndexStats(rootPath, isMain) {
|
|
|
46509
46650
|
}
|
|
46510
46651
|
const getTldrStatusRoute = HttpRouter.add("GET", "/api/services/tldr/status", Effect.promise(async () => {
|
|
46511
46652
|
try {
|
|
46512
|
-
const { getTldrDaemonServiceSync } = await import("./tldr-daemon-
|
|
46653
|
+
const { getTldrDaemonServiceSync } = await import("./tldr-daemon-DKCumqHU.js");
|
|
46513
46654
|
const projectRoot = process.cwd();
|
|
46514
46655
|
const venvPath = join(projectRoot, ".venv");
|
|
46515
46656
|
const results = [];
|
|
@@ -46554,7 +46695,7 @@ const getTldrStatusRoute = HttpRouter.add("GET", "/api/services/tldr/status", Ef
|
|
|
46554
46695
|
}));
|
|
46555
46696
|
const postTldrStartRoute = HttpRouter.add("POST", "/api/services/tldr/start", Effect.promise(async () => {
|
|
46556
46697
|
try {
|
|
46557
|
-
const { getTldrDaemonServiceSync } = await import("./tldr-daemon-
|
|
46698
|
+
const { getTldrDaemonServiceSync } = await import("./tldr-daemon-DKCumqHU.js");
|
|
46558
46699
|
const projectRoot = process.cwd();
|
|
46559
46700
|
const venvPath = join(projectRoot, ".venv");
|
|
46560
46701
|
if (!existsSync$1(venvPath)) return jsonResponse({ error: "No .venv found in project root" }, { status: 404 });
|
|
@@ -46571,7 +46712,7 @@ const postTldrStartRoute = HttpRouter.add("POST", "/api/services/tldr/start", Ef
|
|
|
46571
46712
|
}));
|
|
46572
46713
|
const postTldrStopRoute = HttpRouter.add("POST", "/api/services/tldr/stop", Effect.promise(async () => {
|
|
46573
46714
|
try {
|
|
46574
|
-
const { getTldrDaemonServiceSync } = await import("./tldr-daemon-
|
|
46715
|
+
const { getTldrDaemonServiceSync } = await import("./tldr-daemon-DKCumqHU.js");
|
|
46575
46716
|
const projectRoot = process.cwd();
|
|
46576
46717
|
const venvPath = join(projectRoot, ".venv");
|
|
46577
46718
|
if (!existsSync$1(venvPath)) return jsonResponse({ error: "No .venv found in project root" }, { status: 404 });
|
|
@@ -46588,7 +46729,7 @@ const postTldrStopRoute = HttpRouter.add("POST", "/api/services/tldr/stop", Effe
|
|
|
46588
46729
|
}));
|
|
46589
46730
|
const postTldrReloadRoute = HttpRouter.add("POST", "/api/services/tldr/reload", Effect.promise(async () => {
|
|
46590
46731
|
try {
|
|
46591
|
-
const { getTldrDaemonServiceSync } = await import("./tldr-daemon-
|
|
46732
|
+
const { getTldrDaemonServiceSync } = await import("./tldr-daemon-DKCumqHU.js");
|
|
46592
46733
|
const enabled = isTldrEnabledSync();
|
|
46593
46734
|
const projectRoot = process.cwd();
|
|
46594
46735
|
const targets = [];
|
|
@@ -46940,7 +47081,7 @@ function resolveRestartGateBoot(state, nowMs) {
|
|
|
46940
47081
|
function emitThroughEventStore(snapshot) {
|
|
46941
47082
|
(async () => {
|
|
46942
47083
|
try {
|
|
46943
|
-
const { getEventStore } = await import("./event-store-
|
|
47084
|
+
const { getEventStore } = await import("./event-store-CFnLP8w-.js");
|
|
46944
47085
|
getEventStore().emitOnly({
|
|
46945
47086
|
type: "restart_gate.changed",
|
|
46946
47087
|
timestamp: (/* @__PURE__ */ new Date()).toISOString(),
|
|
@@ -47228,7 +47369,7 @@ const getVersionRoute = HttpRouter.add("GET", "/api/version", Effect.promise(asy
|
|
|
47228
47369
|
const version = await getOverdeckVersion();
|
|
47229
47370
|
let supervisorUrl = null;
|
|
47230
47371
|
try {
|
|
47231
|
-
const { getSupervisorUrlSync } = await import("./supervisor-
|
|
47372
|
+
const { getSupervisorUrlSync } = await import("./supervisor-DoJpD33i.js");
|
|
47232
47373
|
supervisorUrl = getSupervisorUrlSync();
|
|
47233
47374
|
} catch {}
|
|
47234
47375
|
return jsonResponse({
|
|
@@ -47238,11 +47379,11 @@ const getVersionRoute = HttpRouter.add("GET", "/api/version", Effect.promise(asy
|
|
|
47238
47379
|
});
|
|
47239
47380
|
}));
|
|
47240
47381
|
const getPrerequisitesRoute = HttpRouter.add("GET", "/api/prerequisites", Effect.promise(async () => {
|
|
47241
|
-
const { checkSystemPrerequisites } = await import("./system-prerequisites-
|
|
47382
|
+
const { checkSystemPrerequisites } = await import("./system-prerequisites-DkDOEjQP.js");
|
|
47242
47383
|
return jsonResponse(await checkSystemPrerequisites());
|
|
47243
47384
|
}));
|
|
47244
47385
|
const getSetupDiagnosticsRoute = HttpRouter.add("GET", "/api/diagnostics/setup", Effect.promise(async () => {
|
|
47245
|
-
const { collectSetupDiagnostics } = await import("./system-prerequisites-
|
|
47386
|
+
const { collectSetupDiagnostics } = await import("./system-prerequisites-DkDOEjQP.js");
|
|
47246
47387
|
return jsonResponse(await collectSetupDiagnostics(await getOverdeckVersion()));
|
|
47247
47388
|
}));
|
|
47248
47389
|
const getSyncStatusRoute = HttpRouter.add("GET", "/api/sync-status", Effect.sync(() => {
|
|
@@ -47422,7 +47563,7 @@ const postShadowMonitorRoute = HttpRouter.add("POST", "/api/shadow/:issueId/moni
|
|
|
47422
47563
|
const projectPath = await getProjectPath(issuePrefix);
|
|
47423
47564
|
const workspacePath = join(projectPath, "workspaces", `feature-${issueLower}`);
|
|
47424
47565
|
if (!existsSync$1(workspacePath)) return jsonResponse({ error: "Workspace not found" }, { status: 404 });
|
|
47425
|
-
const { gatherArtifacts, generateBasicInference, updateInferenceDocumentSync } = await import("./shadow-engineering-
|
|
47566
|
+
const { gatherArtifacts, generateBasicInference, updateInferenceDocumentSync } = await import("./shadow-engineering-CNTXaC9O.js");
|
|
47426
47567
|
const config = {
|
|
47427
47568
|
issueId,
|
|
47428
47569
|
workspacePath,
|
|
@@ -47452,7 +47593,7 @@ const postShadowObserveRoute = HttpRouter.add("POST", "/api/shadow/:issueId/obse
|
|
|
47452
47593
|
if (!existsSync$1(workspacePath)) return jsonResponse({ error: "Workspace not found" }, { status: 404 });
|
|
47453
47594
|
const ghConfig = getGitHubConfig();
|
|
47454
47595
|
if (!ghConfig) return jsonResponse({ error: "GitHub not configured - Observer requires GitHub" }, { status: 400 });
|
|
47455
|
-
const { runObserverCycle } = await import("./shadow-engineering-
|
|
47596
|
+
const { runObserverCycle } = await import("./shadow-engineering-CNTXaC9O.js");
|
|
47456
47597
|
const firstRepo = ghConfig.repos[0];
|
|
47457
47598
|
const config = {
|
|
47458
47599
|
issueId,
|
|
@@ -47892,7 +48033,11 @@ async function searchConversationChunks(input) {
|
|
|
47892
48033
|
searchVector: (embedding, candidateLimit) => handle.db.searchVector(embedding, candidateLimit)
|
|
47893
48034
|
},
|
|
47894
48035
|
provider: handle.provider
|
|
47895
|
-
}).then((hits) => filterLiveHits(handle.db, hits)).then(
|
|
48036
|
+
}).then((hits) => filterLiveHits(handle.db, hits)).then((hits) => {
|
|
48037
|
+
recordConversationSearchSuccess();
|
|
48038
|
+
resolve(hits);
|
|
48039
|
+
}, (error) => {
|
|
48040
|
+
recordConversationSearchFailure(error);
|
|
47896
48041
|
console.error("[conversation-search] service search failed:", error);
|
|
47897
48042
|
resolve([]);
|
|
47898
48043
|
});
|
|
@@ -49618,6 +49763,7 @@ async function getConversationsPendingInputFeed(deps) {
|
|
|
49618
49763
|
name: conv.name,
|
|
49619
49764
|
title: conv.title ?? null,
|
|
49620
49765
|
issueId: conv.issueId ?? null,
|
|
49766
|
+
harness: conv.harness ?? "claude-code",
|
|
49621
49767
|
...pending ? { pendingAskUserQuestion: pending } : {},
|
|
49622
49768
|
...pendingPlan ? { pendingProposedPlan: pendingPlan } : {},
|
|
49623
49769
|
...paneChoice ? { pendingPaneChoice: paneChoice } : {}
|
|
@@ -49631,8 +49777,7 @@ async function getConversationsPendingInputFeed(deps) {
|
|
|
49631
49777
|
}
|
|
49632
49778
|
async function getConversationRead(rawId, deps) {
|
|
49633
49779
|
try {
|
|
49634
|
-
const
|
|
49635
|
-
const conv = !Number.isNaN(numericId) && /^\d+$/.test(rawId) ? getConversationById(numericId) : getConversationByName(rawId);
|
|
49780
|
+
const conv = resolveConversationKey(rawId);
|
|
49636
49781
|
if (!conv) return result({ error: "Conversation not found" }, 404);
|
|
49637
49782
|
const sessionAlive = conv.status === "active" && !conv.forkStatus && await deps.tmuxSessionExists(conv.tmuxSession);
|
|
49638
49783
|
const convSf = await deps.resolveSessionFile(conv);
|
|
@@ -49877,8 +50022,14 @@ async function generateAiTitle(conversationName, firstMessage, deps) {
|
|
|
49877
50022
|
console.log(`[claude-invoke] SUCCESS purpose=conversation-title | model=${CONVERSATION_TITLE_MODEL} | conversation=${conversationName} | outputChars=${sanitized.length}`);
|
|
49878
50023
|
}
|
|
49879
50024
|
const MAX_TITLE_LENGTH = 200;
|
|
49880
|
-
function
|
|
49881
|
-
|
|
50025
|
+
function resolveConversationKey(key) {
|
|
50026
|
+
const numericId = Number(key);
|
|
50027
|
+
if (!Number.isNaN(numericId) && /^\d+$/.test(key)) return getConversationById(numericId);
|
|
50028
|
+
return getConversationByName(key) ?? getConversationByTmuxSession(key);
|
|
50029
|
+
}
|
|
50030
|
+
function patchConversationTitle(key, body) {
|
|
50031
|
+
const conv = resolveConversationKey(key);
|
|
50032
|
+
if (!conv) return {
|
|
49882
50033
|
status: 404,
|
|
49883
50034
|
body: { error: "Conversation not found" }
|
|
49884
50035
|
};
|
|
@@ -49888,7 +50039,7 @@ function patchConversationTitle(name, body) {
|
|
|
49888
50039
|
status: 400,
|
|
49889
50040
|
body: { error: `Title exceeds maximum length of ${MAX_TITLE_LENGTH} characters` }
|
|
49890
50041
|
};
|
|
49891
|
-
updateConversationTitle(name, trimmed, "manual");
|
|
50042
|
+
updateConversationTitle(conv.name, trimmed, "manual");
|
|
49892
50043
|
}
|
|
49893
50044
|
return {
|
|
49894
50045
|
status: 200,
|
|
@@ -51005,19 +51156,22 @@ async function refreshMergeStateFromGitHub(issueId, repo, prNumber) {
|
|
|
51005
51156
|
try {
|
|
51006
51157
|
const [owner, repoName] = repo.split("/");
|
|
51007
51158
|
if (!owner || !repoName) return;
|
|
51159
|
+
const { isGitHubAppConfigured, getPullRequestState } = await import("./github-app-HAqQZZRD.js");
|
|
51160
|
+
const githubAppConfigured = isGitHubAppConfigured();
|
|
51161
|
+
if (!githubAppConfigured && isInGraphQLCooldown()) return;
|
|
51162
|
+
const status = await Effect.runPromise(getReviewStatus(issueId));
|
|
51163
|
+
if (!status || status.retiredAt) return;
|
|
51008
51164
|
let mergeable;
|
|
51009
51165
|
let mergeState;
|
|
51010
51166
|
let isDraft;
|
|
51011
51167
|
let checksFailed;
|
|
51012
|
-
|
|
51013
|
-
if (isGitHubAppConfigured()) {
|
|
51168
|
+
if (githubAppConfigured) {
|
|
51014
51169
|
const prState = await Effect.runPromise(getPullRequestState(owner, repoName, prNumber));
|
|
51015
51170
|
mergeable = prState.mergeable === null ? "UNKNOWN" : prState.mergeable ? "MERGEABLE" : "CONFLICTING";
|
|
51016
51171
|
mergeState = (prState.mergeableState ?? "").toUpperCase();
|
|
51017
51172
|
isDraft = prState.draft;
|
|
51018
51173
|
checksFailed = prState.checksFailed;
|
|
51019
51174
|
} else {
|
|
51020
|
-
if (isInGraphQLCooldown()) return;
|
|
51021
51175
|
const { execFile } = await import("child_process");
|
|
51022
51176
|
const { promisify } = await import("util");
|
|
51023
51177
|
const execFileAsync = promisify(execFile);
|
|
@@ -51046,8 +51200,6 @@ async function refreshMergeStateFromGitHub(issueId, repo, prNumber) {
|
|
|
51046
51200
|
isDraft = pr.isDraft === true;
|
|
51047
51201
|
checksFailed = (pr.statusCheckRollup ?? []).some((check) => !isAdvisoryCheckName(check.name ?? check.context) && FAILING_CHECK_CONCLUSIONS.has((check.conclusion || check.state || "").toUpperCase()));
|
|
51048
51202
|
}
|
|
51049
|
-
const status = await Effect.runPromise(getReviewStatus(issueId));
|
|
51050
|
-
if (!status) return;
|
|
51051
51203
|
const isConflicting = mergeable === "CONFLICTING" || mergeState === "DIRTY";
|
|
51052
51204
|
const GH_NATIVE = new Set([
|
|
51053
51205
|
"merge_conflict",
|
|
@@ -51177,19 +51329,19 @@ async function handlePullRequestPromise(payload) {
|
|
|
51177
51329
|
"closed",
|
|
51178
51330
|
"reopened"
|
|
51179
51331
|
].includes(payload.action ?? "")) try {
|
|
51180
|
-
const { listProjectsSync, resolveProjectFromIssueSync } = await import("./projects-
|
|
51332
|
+
const { listProjectsSync, resolveProjectFromIssueSync } = await import("./projects-Crur9uCa.js");
|
|
51181
51333
|
const resolved = resolveProjectFromIssueSync(issueId);
|
|
51182
51334
|
const project = resolved ? listProjectsSync().find((entry) => entry.key === resolved.projectKey)?.config : void 0;
|
|
51183
51335
|
if (project) {
|
|
51184
|
-
const { enqueueProjectResourceRefresh } = await import("./project-resource-refresh-queue-
|
|
51336
|
+
const { enqueueProjectResourceRefresh } = await import("./project-resource-refresh-queue-C-umDazS.js");
|
|
51185
51337
|
enqueueProjectResourceRefresh(project, `pull_request:${payload.action}`);
|
|
51186
51338
|
}
|
|
51187
51339
|
} catch (err) {
|
|
51188
51340
|
console.warn(`[webhook] Failed to enqueue membership refresh for ${issueId}: ${err?.message ?? err}`);
|
|
51189
51341
|
}
|
|
51190
51342
|
if (payload.action === "closed" && pr.merged === true) try {
|
|
51191
|
-
const { postMergeLifecycle } = await import("./merge-agent-
|
|
51192
|
-
const { resolveProjectFromIssueSync } = await import("./projects-
|
|
51343
|
+
const { postMergeLifecycle } = await import("./merge-agent-svBDRWB6.js");
|
|
51344
|
+
const { resolveProjectFromIssueSync } = await import("./projects-Crur9uCa.js");
|
|
51193
51345
|
const project = resolveProjectFromIssueSync(issueId);
|
|
51194
51346
|
if (project) {
|
|
51195
51347
|
const branchName = pr.head.ref;
|
|
@@ -51202,12 +51354,17 @@ async function handlePullRequestPromise(payload) {
|
|
|
51202
51354
|
const headMayHaveMoved = [
|
|
51203
51355
|
"synchronize",
|
|
51204
51356
|
"opened",
|
|
51205
|
-
"reopened"
|
|
51357
|
+
"reopened",
|
|
51358
|
+
"closed"
|
|
51206
51359
|
].includes(payload.action ?? "");
|
|
51207
51360
|
const status = await loadAndValidateStatus(issueId, repo, pr.number, headMayHaveMoved ? void 0 : pr.head.sha);
|
|
51208
51361
|
if (!status) return;
|
|
51209
51362
|
const update = {};
|
|
51210
51363
|
let blockers = [...status.blockerReasons ?? []];
|
|
51364
|
+
if (payload.action === "closed" && pr.merged === false) {
|
|
51365
|
+
update.readyForMerge = false;
|
|
51366
|
+
update.retiredAt = (/* @__PURE__ */ new Date()).toISOString();
|
|
51367
|
+
}
|
|
51211
51368
|
if (!status.prUrl) update.prUrl = pr.html_url ?? `https://github.com/${repo}/pull/${pr.number}`;
|
|
51212
51369
|
if (!status.prNumber) update.prNumber = pr.number;
|
|
51213
51370
|
if (pr.head.sha && (!status.prHeadSha || payload.action === "synchronize")) update.prHeadSha = pr.head.sha;
|
|
@@ -51623,7 +51780,8 @@ function buildForkRequest(params) {
|
|
|
51623
51780
|
...params.handoffFocus !== void 0 ? { handoffFocus: params.handoffFocus } : {},
|
|
51624
51781
|
handoffAuthor: params.handoffAuthor,
|
|
51625
51782
|
...params.handoffAuthorModel !== void 0 ? { handoffAuthorModel: params.handoffAuthorModel } : {},
|
|
51626
|
-
...params.handoffAuthorHarness !== void 0 ? { handoffAuthorHarness: params.handoffAuthorHarness } : {}
|
|
51783
|
+
...params.handoffAuthorHarness !== void 0 ? { handoffAuthorHarness: params.handoffAuthorHarness } : {},
|
|
51784
|
+
...params.title !== void 0 ? { title: params.title } : {}
|
|
51627
51785
|
};
|
|
51628
51786
|
}
|
|
51629
51787
|
async function handleConversationHandoffDoc(name) {
|
|
@@ -51737,7 +51895,7 @@ function handleForkPipelineFailure(name, err) {
|
|
|
51737
51895
|
updateForkStatus(name, "failed", err instanceof Error ? err.message : String(err));
|
|
51738
51896
|
markConversationEnded(name);
|
|
51739
51897
|
}
|
|
51740
|
-
async function runForkPipeline(convName, parentConv, sessionId, summaryModel, forkMode = "summary", localSummaryOnly = false, includeThinkingInSummary, summaryHarness, handoffFocus, handoffAuthor = "external", handoffAuthorModel, handoffAuthorHarness) {
|
|
51898
|
+
async function runForkPipeline(convName, parentConv, sessionId, summaryModel, forkMode = "summary", localSummaryOnly = false, includeThinkingInSummary, summaryHarness, handoffFocus, handoffAuthor = "external", handoffAuthorModel, handoffAuthorHarness, customTitle) {
|
|
51741
51899
|
const conv = getConversationByName(convName);
|
|
51742
51900
|
if (!conv) throw new Error(`Fork conversation ${convName} not found`);
|
|
51743
51901
|
const parentSessionFile = await resolveForkSourceSessionFile(parentConv);
|
|
@@ -51814,7 +51972,7 @@ async function runForkPipeline(convName, parentConv, sessionId, summaryModel, fo
|
|
|
51814
51972
|
}
|
|
51815
51973
|
} else summary = await buildSummary();
|
|
51816
51974
|
updateConversationForkFallbackReason(convName, forkFallbackReason);
|
|
51817
|
-
updateConversationTitle(convName, effectiveForkMode === "handoff" ? handoffTitleFromFocus(handoffFocus, parentConv.title || parentConv.name) : `Summary Fork: ${parentConv.title || parentConv.name}
|
|
51975
|
+
updateConversationTitle(convName, customTitle ?? (effectiveForkMode === "handoff" ? handoffTitleFromFocus(handoffFocus, parentConv.title || parentConv.name) : `Summary Fork: ${parentConv.title || parentConv.name}`), "manual");
|
|
51818
51976
|
if (handoffDocPath) recordConversationHandoff(parentConv.name, convName, handoffDocPath);
|
|
51819
51977
|
updateForkStatus(convName, "spawning");
|
|
51820
51978
|
await ensureForkSessionReady(conv, sessionId, false);
|
|
@@ -51900,7 +52058,7 @@ async function recoverStuckForks() {
|
|
|
51900
52058
|
updateForkStatus(fork.name, "failed", `Parent conversation ${request.parentConversationName} not found`);
|
|
51901
52059
|
continue;
|
|
51902
52060
|
}
|
|
51903
|
-
await registerInFlightForkPipeline(runForkPipeline(fork.name, parentConv, request.sessionId, request.summaryModel, request.forkMode, request.localSummaryOnly, request.includeThinkingInSummary, request.summaryHarness, request.handoffFocus, request.handoffAuthor, request.handoffAuthorModel, request.handoffAuthorHarness));
|
|
52061
|
+
await registerInFlightForkPipeline(runForkPipeline(fork.name, parentConv, request.sessionId, request.summaryModel, request.forkMode, request.localSummaryOnly, request.includeThinkingInSummary, request.summaryHarness, request.handoffFocus, request.handoffAuthor, request.handoffAuthorModel, request.handoffAuthorHarness, request.title));
|
|
51904
52062
|
recovered += 1;
|
|
51905
52063
|
} catch (error) {
|
|
51906
52064
|
const message = error instanceof Error ? error.message : String(error);
|
|
@@ -52021,11 +52179,12 @@ async function handleConversationSummaryFork(name, body) {
|
|
|
52021
52179
|
...handoffFocus !== void 0 ? { handoffFocus } : {},
|
|
52022
52180
|
handoffAuthor,
|
|
52023
52181
|
...handoffAuthorModel !== void 0 ? { handoffAuthorModel } : {},
|
|
52024
|
-
...handoffAuthorHarness !== void 0 ? { handoffAuthorHarness } : {}
|
|
52182
|
+
...handoffAuthorHarness !== void 0 ? { handoffAuthorHarness } : {},
|
|
52183
|
+
...customTitle !== void 0 ? { title: customTitle } : {}
|
|
52025
52184
|
});
|
|
52026
52185
|
setForkRequest(newConv.name, JSON.stringify(forkRequest));
|
|
52027
52186
|
markConversationActive(newConv.name);
|
|
52028
|
-
registerInFlightForkPipeline(runForkPipeline(newConv.name, conv, sessionId, summaryModel, forkMode, localSummaryOnly, includeThinkingInSummary, summaryHarness, handoffFocus, handoffAuthor, handoffAuthorModel, handoffAuthorHarness)).catch((err) => {
|
|
52187
|
+
registerInFlightForkPipeline(runForkPipeline(newConv.name, conv, sessionId, summaryModel, forkMode, localSummaryOnly, includeThinkingInSummary, summaryHarness, handoffFocus, handoffAuthor, handoffAuthorModel, handoffAuthorHarness, customTitle)).catch((err) => {
|
|
52029
52188
|
handleForkPipelineFailure(newConv.name, err);
|
|
52030
52189
|
});
|
|
52031
52190
|
return jsonResponse({
|
|
@@ -52315,6 +52474,16 @@ const postConversationPaneChoiceRoute = HttpRouter.add("POST", "/api/conversatio
|
|
|
52315
52474
|
return jsonResponse(result.body, { status: result.status });
|
|
52316
52475
|
});
|
|
52317
52476
|
}));
|
|
52477
|
+
const postConversationPiAskAnswerRoute = HttpRouter.add("POST", "/api/conversations/:id/pi-ask-answer", Effect.gen(function* () {
|
|
52478
|
+
const originCheck = validateOrigin$1(yield* HttpServerRequest.HttpServerRequest);
|
|
52479
|
+
if (!originCheck.ok) return jsonResponse({ error: originCheck.error }, { status: 403 });
|
|
52480
|
+
const rawId = (yield* HttpRouter.params)["id"] ?? "";
|
|
52481
|
+
const body = yield* readJsonBody$10;
|
|
52482
|
+
return yield* Effect.promise(async () => {
|
|
52483
|
+
const result = await handleConversationPiAskAnswer(rawId, body);
|
|
52484
|
+
return jsonResponse(result.body, { status: result.status });
|
|
52485
|
+
});
|
|
52486
|
+
}));
|
|
52318
52487
|
const postConversationDeliveryMethodRoute = HttpRouter.add("POST", "/api/conversations/:name/delivery-method", Effect.gen(function* () {
|
|
52319
52488
|
const originCheck = validateOrigin$1(yield* HttpServerRequest.HttpServerRequest);
|
|
52320
52489
|
if (!originCheck.ok) return jsonResponse({ error: originCheck.error }, { status: 403 });
|
|
@@ -52516,7 +52685,7 @@ const getConversationAboutRoute = HttpRouter.add("GET", "/api/conversations/:nam
|
|
|
52516
52685
|
return conversationReadJson(await getConversationAbout(name, new URL(request.url, "http://localhost").searchParams.get("refresh") === "1", conversationReadDependencies));
|
|
52517
52686
|
});
|
|
52518
52687
|
}));
|
|
52519
|
-
const conversationsRouteLayer = Layer.mergeAll(getConversationsRoute, getConversationsPendingInputRoute, getArchivedConversationsRoute, getConversationRoute, getConversationHandoffDocRoute, postConversationRoute, patchConversationRoute, patchConversationMoveRoute, deleteConversationRoute, postConversationStopRoute, postConversationClearForkStateRoute, postConversationResumeRoute, postConversationSwitchModelRoute, postConversationThinkingLevelRoute, postConversationCompactRoute, postConversationAbortRoute, postConversationRestartAllRoute, postConversationArchiveRoute, postConversationUnarchiveRoute, getConversationMessagesRoute, getConversationMessageLocatorRoute, postConversationUploadImageRoute, postConversationDeleteImageRoute, postConversationMessageRoute, postConversationCodexApprovalRoute, postConversationPaneChoiceRoute, postConversationDeliveryMethodRoute, postConversationControlAckRoute, postConversationFavoriteRoute, deleteConversationFavoriteRoute, postConversationSummaryForkRoute, postConversationPlanActionRoute, getConversationDiffsRoute, getConversationDiffFullRoute, getConversationDiffTurnRoute, postConversationRetitleRoute, getConversationAboutRoute);
|
|
52688
|
+
const conversationsRouteLayer = Layer.mergeAll(getConversationsRoute, getConversationsPendingInputRoute, getArchivedConversationsRoute, getConversationRoute, getConversationHandoffDocRoute, postConversationRoute, patchConversationRoute, patchConversationMoveRoute, deleteConversationRoute, postConversationStopRoute, postConversationClearForkStateRoute, postConversationResumeRoute, postConversationSwitchModelRoute, postConversationThinkingLevelRoute, postConversationCompactRoute, postConversationAbortRoute, postConversationRestartAllRoute, postConversationArchiveRoute, postConversationUnarchiveRoute, getConversationMessagesRoute, getConversationMessageLocatorRoute, postConversationUploadImageRoute, postConversationDeleteImageRoute, postConversationMessageRoute, postConversationCodexApprovalRoute, postConversationPaneChoiceRoute, postConversationPiAskAnswerRoute, postConversationDeliveryMethodRoute, postConversationControlAckRoute, postConversationFavoriteRoute, deleteConversationFavoriteRoute, postConversationSummaryForkRoute, postConversationPlanActionRoute, getConversationDiffsRoute, getConversationDiffFullRoute, getConversationDiffTurnRoute, postConversationRetitleRoute, getConversationAboutRoute);
|
|
52520
52689
|
//#endregion
|
|
52521
52690
|
//#region routes/show.ts
|
|
52522
52691
|
/**
|
|
@@ -52723,7 +52892,7 @@ async function registerProjectFromPath(opts) {
|
|
|
52723
52892
|
registerProjectSync(key, projectConfig);
|
|
52724
52893
|
const seededContextLayer = ensureProjectLayer(fullPath);
|
|
52725
52894
|
try {
|
|
52726
|
-
const { preTrustDirectorySync } = await import("./workspace-manager-
|
|
52895
|
+
const { preTrustDirectorySync } = await import("./workspace-manager-gz9Amovn.js");
|
|
52727
52896
|
preTrustDirectorySync(fullPath);
|
|
52728
52897
|
} catch {}
|
|
52729
52898
|
let hooksInstalled = 0;
|
|
@@ -52886,7 +53055,7 @@ init_paths();
|
|
|
52886
53055
|
init_resource_utils();
|
|
52887
53056
|
const execAsync$3 = promisify(exec);
|
|
52888
53057
|
async function getIssueDataService() {
|
|
52889
|
-
const { getSharedIssueService } = await import("./issue-service-singleton-
|
|
53058
|
+
const { getSharedIssueService } = await import("./issue-service-singleton-COEqWNKE.js");
|
|
52890
53059
|
return getSharedIssueService();
|
|
52891
53060
|
}
|
|
52892
53061
|
/** Returns true if the path exists (any type). */
|
|
@@ -53288,7 +53457,7 @@ const getProjectReleaseStatusRoute = HttpRouter.add("GET", "/api/projects/:proje
|
|
|
53288
53457
|
const projectKey = (yield* HttpRouter.params)["projectKey"] ?? "";
|
|
53289
53458
|
return jsonResponse(yield* Effect.tryPromise({
|
|
53290
53459
|
try: async () => {
|
|
53291
|
-
const { fetchProjectReleaseStatus } = await import("./project-pipelines-
|
|
53460
|
+
const { fetchProjectReleaseStatus } = await import("./project-pipelines-DdDKdXrG.js");
|
|
53292
53461
|
return fetchProjectReleaseStatus(projectKey);
|
|
53293
53462
|
},
|
|
53294
53463
|
catch: (err) => new Error(err instanceof Error ? err.message : String(err))
|
|
@@ -53599,7 +53768,7 @@ init_projects();
|
|
|
53599
53768
|
const getProjectMergeTrainRoute = HttpRouter.add("GET", "/api/projects/:projectKey/merge-train", httpHandler(Effect.gen(function* () {
|
|
53600
53769
|
const config = getProjectSync((yield* HttpRouter.params)["projectKey"] ?? "");
|
|
53601
53770
|
if (!config) return jsonResponse({ error: "Project not found" }, { status: 404 });
|
|
53602
|
-
const { isMergeTrainEnabledForProject } = yield* Effect.promise(() => import("./merge-sync-
|
|
53771
|
+
const { isMergeTrainEnabledForProject } = yield* Effect.promise(() => import("./merge-sync-DuJ6Vkl3.js"));
|
|
53603
53772
|
return jsonResponse({
|
|
53604
53773
|
value: config.merge_train ?? null,
|
|
53605
53774
|
effective: isMergeTrainEnabledForProject(config)
|
|
@@ -53613,7 +53782,7 @@ const postProjectMergeTrainRoute = HttpRouter.add("POST", "/api/projects/:projec
|
|
|
53613
53782
|
if (!project) return jsonResponse({ error: "Project not found" }, { status: 404 });
|
|
53614
53783
|
const v = (yield* readProjectJsonBody).value;
|
|
53615
53784
|
if (v !== "enabled" && v !== "disabled" && v !== null) return jsonResponse({ error: "value must be 'enabled', 'disabled', or null" }, { status: 400 });
|
|
53616
|
-
const { isMergeTrainEnabledForProject } = yield* Effect.promise(() => import("./merge-sync-
|
|
53785
|
+
const { isMergeTrainEnabledForProject } = yield* Effect.promise(() => import("./merge-sync-DuJ6Vkl3.js"));
|
|
53617
53786
|
yield* Effect.promise(() => setProjectMergeTrain(key, v));
|
|
53618
53787
|
const updated = { ...project };
|
|
53619
53788
|
if (v === null) delete updated.merge_train;
|
|
@@ -53640,6 +53809,7 @@ const projectsMergeTrainRouteLayer = Layer.mergeAll(getProjectMergeTrainRoute, p
|
|
|
53640
53809
|
* frontend migrates — removing them is the remove-legacy-routes item.
|
|
53641
53810
|
*/
|
|
53642
53811
|
init_projects();
|
|
53812
|
+
init_merge_eligibility();
|
|
53643
53813
|
const readUnknownJsonBody$1 = Effect.gen(function* () {
|
|
53644
53814
|
const text = yield* (yield* HttpServerRequest.HttpServerRequest).text;
|
|
53645
53815
|
try {
|
|
@@ -53674,7 +53844,7 @@ async function queueEntryForProject(key, config, enabled) {
|
|
|
53674
53844
|
queue: []
|
|
53675
53845
|
};
|
|
53676
53846
|
const projectPath = resolve(config.path);
|
|
53677
|
-
const candidates = listEligibleCandidatesByProject(projectPath);
|
|
53847
|
+
const candidates = await listEligibleCandidatesByProject(projectPath);
|
|
53678
53848
|
if (candidates.length === 0) return {
|
|
53679
53849
|
...base,
|
|
53680
53850
|
queue: []
|
|
@@ -53691,7 +53861,7 @@ async function queueEntryForProject(key, config, enabled) {
|
|
|
53691
53861
|
* not blank the whole response, so a failed project reports an empty queue.
|
|
53692
53862
|
*/
|
|
53693
53863
|
async function getMergeTrainQueuesPayload() {
|
|
53694
|
-
const { isMergeTrainEnabledForProject } = await import("./merge-sync-
|
|
53864
|
+
const { isMergeTrainEnabledForProject } = await import("./merge-sync-DuJ6Vkl3.js");
|
|
53695
53865
|
const projects = listProjectsSync();
|
|
53696
53866
|
return (await Promise.allSettled(projects.map(({ key, config }) => queueEntryForProject(key, config, isMergeTrainEnabledForProject(config))))).flatMap((outcome, i) => {
|
|
53697
53867
|
if (outcome.status === "fulfilled") return [outcome.value];
|
|
@@ -53709,8 +53879,8 @@ async function getMergeTrainQueuesPayload() {
|
|
|
53709
53879
|
}
|
|
53710
53880
|
/** PAN-1696 AC2: per-project generation chains across every tracked project. */
|
|
53711
53881
|
async function getMergeTrainGenerationsPayload() {
|
|
53712
|
-
const { isMergeTrainEnabledForProject } = await import("./merge-sync-
|
|
53713
|
-
const { getUatGenerationsPayload } = await import("./uat-train-
|
|
53882
|
+
const { isMergeTrainEnabledForProject } = await import("./merge-sync-DuJ6Vkl3.js");
|
|
53883
|
+
const { getUatGenerationsPayload } = await import("./uat-train-B71QG16n.js");
|
|
53714
53884
|
return (await Promise.allSettled(listProjectsSync().map(async ({ key, config }) => ({
|
|
53715
53885
|
projectKey: key,
|
|
53716
53886
|
projectName: config.name,
|
|
@@ -53719,12 +53889,12 @@ async function getMergeTrainGenerationsPayload() {
|
|
|
53719
53889
|
})))).flatMap((outcome) => outcome.status === "fulfilled" ? [outcome.value] : []);
|
|
53720
53890
|
}
|
|
53721
53891
|
async function defaultOrderedIssueIdsForProject(projectPath) {
|
|
53722
|
-
const candidates = listEligibleCandidatesByProject(projectPath);
|
|
53892
|
+
const candidates = await listEligibleCandidatesByProject(projectPath);
|
|
53723
53893
|
if (candidates.length === 0) return [];
|
|
53724
53894
|
return (await Effect.runPromise(computeMergeQueueFromCandidates(candidates, projectPath).pipe(Effect.provide(layer)))).map((item) => item.issueId);
|
|
53725
53895
|
}
|
|
53726
53896
|
async function defaultMergeOne(issueId) {
|
|
53727
|
-
const { triggerMerge } = await import("./merge-ops-
|
|
53897
|
+
const { triggerMerge } = await import("./merge-ops-CUzpOPtO.js");
|
|
53728
53898
|
const r = await triggerMerge(issueId);
|
|
53729
53899
|
return r.success ? { ok: true } : {
|
|
53730
53900
|
ok: false,
|
|
@@ -53752,13 +53922,21 @@ async function postMergeTrainMergeNextPayload(payload, deps = {}) {
|
|
|
53752
53922
|
status: 404,
|
|
53753
53923
|
body: { error: `Unknown project key: ${projectKey}` }
|
|
53754
53924
|
};
|
|
53755
|
-
const { isMergeTrainEnabledForProject } = await import("./merge-sync-
|
|
53925
|
+
const { isMergeTrainEnabledForProject } = await import("./merge-sync-DuJ6Vkl3.js");
|
|
53756
53926
|
if (!isMergeTrainEnabledForProject(config)) return {
|
|
53757
53927
|
status: 409,
|
|
53758
53928
|
body: { error: `merge-train is disabled for project ${projectKey}` }
|
|
53759
53929
|
};
|
|
53760
53930
|
const issueIds = (await (deps.getOrderedIssueIds ?? defaultOrderedIssueIdsForProject)(resolve(config.path))).slice(0, n);
|
|
53761
|
-
const
|
|
53931
|
+
const memberships = await (deps.gatherEligibility ?? gatherMergeEligibility)(issueIds);
|
|
53932
|
+
for (const issueId of issueIds) {
|
|
53933
|
+
const membership = memberships.get(issueId.toUpperCase());
|
|
53934
|
+
if (!membership || !isMergeEligible(membership)) return {
|
|
53935
|
+
status: 409,
|
|
53936
|
+
body: { error: `${issueId} is not merge-eligible: ${membership?.reasons.join("; ") || "pipeline membership unavailable"}` }
|
|
53937
|
+
};
|
|
53938
|
+
}
|
|
53939
|
+
const { shipMergeBatch } = await import("./merge-batch-BJjzUUL7.js");
|
|
53762
53940
|
return {
|
|
53763
53941
|
status: 200,
|
|
53764
53942
|
body: {
|
|
@@ -53788,7 +53966,7 @@ async function postMergeTrainAssemblePayload(payload) {
|
|
|
53788
53966
|
status: 404,
|
|
53789
53967
|
body: { error: `Unknown project key: ${projectKey}` }
|
|
53790
53968
|
};
|
|
53791
|
-
const { runUatTrainReconcile } = await import("./uat-train-
|
|
53969
|
+
const { runUatTrainReconcile } = await import("./uat-train-B71QG16n.js");
|
|
53792
53970
|
return {
|
|
53793
53971
|
status: 200,
|
|
53794
53972
|
body: { projects: [{
|
|
@@ -53800,7 +53978,7 @@ async function postMergeTrainAssemblePayload(payload) {
|
|
|
53800
53978
|
}] }
|
|
53801
53979
|
};
|
|
53802
53980
|
}
|
|
53803
|
-
const { runUatTrainReconcileAllProjects } = await import("./uat-train-
|
|
53981
|
+
const { runUatTrainReconcileAllProjects } = await import("./uat-train-B71QG16n.js");
|
|
53804
53982
|
return {
|
|
53805
53983
|
status: 200,
|
|
53806
53984
|
body: { projects: await runUatTrainReconcileAllProjects({ force: true }) }
|
|
@@ -53816,13 +53994,13 @@ function uatGenerationNameFromParam(param) {
|
|
|
53816
53994
|
return decoded.startsWith("uat/") ? decoded : `uat/${decoded}`;
|
|
53817
53995
|
}
|
|
53818
53996
|
async function postMergeTrainGenerationShipPayload(name, version) {
|
|
53819
|
-
const { getUatGenerationSync } = await import("./merge-sync-
|
|
53997
|
+
const { getUatGenerationSync } = await import("./merge-sync-DuJ6Vkl3.js");
|
|
53820
53998
|
const generation = getUatGenerationSync(name);
|
|
53821
53999
|
if (!generation) return {
|
|
53822
54000
|
status: 404,
|
|
53823
54001
|
body: { error: `No UAT generation named ${name}` }
|
|
53824
54002
|
};
|
|
53825
|
-
const { shipPromotedBatch, ShipPromotedBatchError } = await import("./ship-record-
|
|
54003
|
+
const { shipPromotedBatch, ShipPromotedBatchError } = await import("./ship-record-neN0oUI9.js");
|
|
53826
54004
|
try {
|
|
53827
54005
|
return {
|
|
53828
54006
|
status: 200,
|
|
@@ -53850,7 +54028,7 @@ const postMergeTrainGenerationStackRoute = HttpRouter.add("POST", "/api/merge-tr
|
|
|
53850
54028
|
const authError = rejectUnsafeDashboardMutationRequest(yield* HttpServerRequest.HttpServerRequest);
|
|
53851
54029
|
if (authError) return authError;
|
|
53852
54030
|
const name = uatGenerationNameFromParam((yield* HttpRouter.params)["name"] ?? "");
|
|
53853
|
-
const { postUatGenerationStackPayload } = yield* Effect.promise(() => import("./uat-train-
|
|
54031
|
+
const { postUatGenerationStackPayload } = yield* Effect.promise(() => import("./uat-train-B71QG16n.js"));
|
|
53854
54032
|
const result = yield* Effect.promise(() => postUatGenerationStackPayload(name));
|
|
53855
54033
|
if (!result.ok) return jsonResponse({ error: result.error }, { status: result.status });
|
|
53856
54034
|
return jsonResponse({
|
|
@@ -53867,8 +54045,8 @@ const postMergeTrainGenerationPromoteRoute = HttpRouter.add("POST", "/api/merge-
|
|
|
53867
54045
|
const rawShipVersion = parsed.body["shipVersion"];
|
|
53868
54046
|
if (rawShipVersion !== void 0 && (typeof rawShipVersion !== "string" || !/^\d+\.\d+\.\d+$/.test(rawShipVersion))) return jsonResponse({ error: "shipVersion must look like 48.8.0" }, { status: 400 });
|
|
53869
54047
|
const name = uatGenerationNameFromParam((yield* HttpRouter.params)["name"] ?? "");
|
|
53870
|
-
const { postUatGenerationPromotePayload } = yield* Effect.promise(() => import("./uat-train-
|
|
53871
|
-
const { firePostMergeLifecycle } = yield* Effect.promise(() => import("./specialists-
|
|
54048
|
+
const { postUatGenerationPromotePayload } = yield* Effect.promise(() => import("./uat-train-B71QG16n.js"));
|
|
54049
|
+
const { firePostMergeLifecycle } = yield* Effect.promise(() => import("./specialists-BVBIMc4L.js"));
|
|
53872
54050
|
const result = yield* Effect.promise(() => postUatGenerationPromotePayload(name, firePostMergeLifecycle, rawShipVersion));
|
|
53873
54051
|
if (!result.success) return jsonResponse(result, { status: result.reason === "not-found" ? 404 : result.reason === "merge-failed" ? 500 : 409 });
|
|
53874
54052
|
return jsonResponse(result);
|
|
@@ -55543,7 +55721,7 @@ function getCheckpointWorker() {
|
|
|
55543
55721
|
return worker;
|
|
55544
55722
|
}
|
|
55545
55723
|
async function runInline(operation, payload) {
|
|
55546
|
-
const { claimTranscriptRange, commitTranscriptRange, releaseTranscriptRange, getTranscriptCheckpoint, listTranscriptCheckpoints } = await import("./checkpoints-
|
|
55724
|
+
const { claimTranscriptRange, commitTranscriptRange, releaseTranscriptRange, getTranscriptCheckpoint, listTranscriptCheckpoints } = await import("./checkpoints-JIKy0UFv.js");
|
|
55547
55725
|
switch (operation) {
|
|
55548
55726
|
case "claimTranscriptRange": return claimTranscriptRange(payload);
|
|
55549
55727
|
case "commitTranscriptRange": return commitTranscriptRange(payload);
|
|
@@ -56705,7 +56883,7 @@ function buildPendingTurn(input, fromOffset, toOffset, compressed) {
|
|
|
56705
56883
|
};
|
|
56706
56884
|
}
|
|
56707
56885
|
async function emitMemoryObservationCreated(observation, timestamp) {
|
|
56708
|
-
const { initEventStore } = await import("./event-store-
|
|
56886
|
+
const { initEventStore } = await import("./event-store-CFnLP8w-.js");
|
|
56709
56887
|
await (await initEventStore()).appendAsync({
|
|
56710
56888
|
type: "memory.observation_created",
|
|
56711
56889
|
timestamp,
|
|
@@ -57742,6 +57920,21 @@ const CLEAR_ON = new Set([
|
|
|
57742
57920
|
"StopFailure",
|
|
57743
57921
|
"PermissionDenied"
|
|
57744
57922
|
]);
|
|
57923
|
+
/**
|
|
57924
|
+
* A hook arriving from a conversation's own Claude session is affirmative
|
|
57925
|
+
* evidence the harness is alive and executing turns. If the fork/handoff
|
|
57926
|
+
* pipeline previously marked this conversation failed (the submit-confirmation
|
|
57927
|
+
* check can false-negative: pane echo of the submitted summary keeps the
|
|
57928
|
+
* composer match positive after a successful Enter), heal the verdict. The
|
|
57929
|
+
* dashboard treats forkStatus='failed' as terminal — gray dot, no composer —
|
|
57930
|
+
* so a stale verdict leaves an alive, working session uninteractable.
|
|
57931
|
+
*/
|
|
57932
|
+
function healFailedForkVerdictOnLiveActivity(conv) {
|
|
57933
|
+
if (conv.forkStatus !== "failed") return;
|
|
57934
|
+
console.log(`[hooks] clearing fork failure for ${conv.name} — hook activity proves the session is alive (was: ${conv.forkError ?? "failed"})`);
|
|
57935
|
+
clearConversationFailureState(conv.name);
|
|
57936
|
+
markConversationActive(conv.name);
|
|
57937
|
+
}
|
|
57745
57938
|
const MemoryTurnHookPayload = Schema.Struct({
|
|
57746
57939
|
session_id: Schema.String,
|
|
57747
57940
|
transcript_path: Schema.String,
|
|
@@ -58061,6 +58254,7 @@ const postPermissionEventRoute = HttpRouter.add("POST", "/api/hooks/permission-e
|
|
|
58061
58254
|
if (!sessionId || !hookEvent) return jsonResponse({ ok: true });
|
|
58062
58255
|
const conv = getConversationByClaudeSessionId(sessionId);
|
|
58063
58256
|
if (!conv) return jsonResponse({ ok: true });
|
|
58257
|
+
healFailedForkVerdictOnLiveActivity(conv);
|
|
58064
58258
|
const waiting = hookEvent === "PermissionRequest";
|
|
58065
58259
|
const clearing = CLEAR_ON.has(hookEvent);
|
|
58066
58260
|
if (!waiting && !clearing) return jsonResponse({ ok: true });
|
|
@@ -58086,6 +58280,7 @@ async function handleUserPromptSubmitBody(body, options = {}) {
|
|
|
58086
58280
|
if (!sessionId) return { ok: true };
|
|
58087
58281
|
const conv = getConversationByClaudeSessionId(sessionId);
|
|
58088
58282
|
if (!conv) return { ok: true };
|
|
58283
|
+
healFailedForkVerdictOnLiveActivity(conv);
|
|
58089
58284
|
if (conv.titleSource === "default") {
|
|
58090
58285
|
const derivedTitle = derivePromptTitle(prompt);
|
|
58091
58286
|
if (derivedTitle) updateConversationTitle(conv.name, derivedTitle, "auto");
|
|
@@ -59503,12 +59698,12 @@ async function pauseFlywheelRunForDashboard() {
|
|
|
59503
59698
|
if (before.activeRunId) try {
|
|
59504
59699
|
const { readFile } = await import("node:fs/promises");
|
|
59505
59700
|
const { join } = await import("node:path");
|
|
59506
|
-
const { getAgentDir } = await import("./agents-
|
|
59701
|
+
const { getAgentDir } = await import("./agents-BdkVgjxC.js");
|
|
59507
59702
|
const sessionId = (await readFile(join(getAgentDir(FLYWHEEL_ORCHESTRATOR_AGENT_ID), "session.id"), "utf-8")).trim();
|
|
59508
59703
|
if (sessionId) await saveResumeSessionId(before.activeRunId, sessionId);
|
|
59509
59704
|
} catch {}
|
|
59510
59705
|
await setPaused(true);
|
|
59511
|
-
await import("./agents-
|
|
59706
|
+
await import("./agents-BdkVgjxC.js").then(({ stopAgent }) => Effect.runPromise(stopAgent(FLYWHEEL_ORCHESTRATOR_AGENT_ID, "operator")));
|
|
59512
59707
|
return {
|
|
59513
59708
|
before,
|
|
59514
59709
|
after: await readGateSnapshot(),
|
|
@@ -59518,7 +59713,7 @@ async function pauseFlywheelRunForDashboard() {
|
|
|
59518
59713
|
async function abortFlywheelRunForDashboard() {
|
|
59519
59714
|
const candidate = await getActiveRunId();
|
|
59520
59715
|
if (!candidate) return { aborted: await resolveLiveFlywheelRunId() ?? null };
|
|
59521
|
-
const { stopAgent } = await import("./agents-
|
|
59716
|
+
const { stopAgent } = await import("./agents-BdkVgjxC.js");
|
|
59522
59717
|
await Effect.runPromise(stopAgent(FLYWHEEL_ORCHESTRATOR_AGENT_ID, "operator"));
|
|
59523
59718
|
await abortFlywheelRun(candidate);
|
|
59524
59719
|
return { aborted: candidate };
|
|
@@ -60197,7 +60392,7 @@ async function getFlywheelConversationPayload() {
|
|
|
60197
60392
|
};
|
|
60198
60393
|
}
|
|
60199
60394
|
async function postFlywheelReportPayload() {
|
|
60200
|
-
const { flywheelReportCommand } = await import("./flywheel-
|
|
60395
|
+
const { flywheelReportCommand } = await import("./flywheel-X6kvGnf2.js");
|
|
60201
60396
|
await flywheelReportCommand({ cwd: process.cwd() });
|
|
60202
60397
|
return {
|
|
60203
60398
|
status: 200,
|
|
@@ -60492,7 +60687,7 @@ const postFlywheelBriefRoute = HttpRouter.add("POST", "/api/flywheel/brief", htt
|
|
|
60492
60687
|
});
|
|
60493
60688
|
})));
|
|
60494
60689
|
const getUatCandidateRoute = HttpRouter.add("GET", "/api/flywheel/uat-candidate", httpHandler(Effect.gen(function* () {
|
|
60495
|
-
const { getUatCandidatePayload } = yield* Effect.promise(() => import("./uat-train-
|
|
60690
|
+
const { getUatCandidatePayload } = yield* Effect.promise(() => import("./uat-train-B71QG16n.js"));
|
|
60496
60691
|
return jsonResponse(yield* Effect.promise(() => getUatCandidatePayload()));
|
|
60497
60692
|
})));
|
|
60498
60693
|
const getFlywheelStateRoute = HttpRouter.add("GET", "/api/flywheel/state", httpHandler(Effect.gen(function* () {
|
|
@@ -60703,7 +60898,7 @@ function previewBrief(book) {
|
|
|
60703
60898
|
return `${lines.join("\n")}\n`;
|
|
60704
60899
|
}
|
|
60705
60900
|
async function defaultStartOrderBook(book, project) {
|
|
60706
|
-
const { startFlywheelRun } = await import("./flywheel-
|
|
60901
|
+
const { startFlywheelRun } = await import("./flywheel-X6kvGnf2.js");
|
|
60707
60902
|
return startFlywheelRun({
|
|
60708
60903
|
cwd: resolveProjectPath(project),
|
|
60709
60904
|
orders: book.id
|
|
@@ -61853,6 +62048,7 @@ function initSchema(db) {
|
|
|
61853
62048
|
release_notes TEXT,
|
|
61854
62049
|
updated_at TEXT NOT NULL,
|
|
61855
62050
|
ready_for_merge INTEGER NOT NULL DEFAULT 0,
|
|
62051
|
+
retired_at TEXT,
|
|
61856
62052
|
auto_requeue_count INTEGER DEFAULT 0,
|
|
61857
62053
|
merge_retry_count INTEGER DEFAULT 0,
|
|
61858
62054
|
pr_url TEXT,
|
|
@@ -62396,7 +62592,7 @@ function initSchema(db) {
|
|
|
62396
62592
|
CREATE INDEX IF NOT EXISTS idx_backlog_sequence_project_rank
|
|
62397
62593
|
ON backlog_sequence(project_key, rank);
|
|
62398
62594
|
`);
|
|
62399
|
-
db.pragma(`user_version =
|
|
62595
|
+
db.pragma(`user_version = 65`);
|
|
62400
62596
|
}
|
|
62401
62597
|
/**
|
|
62402
62598
|
* Run schema migrations if the database version is older than SCHEMA_VERSION.
|
|
@@ -62408,14 +62604,14 @@ function runMigrations(db, dbPath) {
|
|
|
62408
62604
|
initSchema(db);
|
|
62409
62605
|
return;
|
|
62410
62606
|
}
|
|
62411
|
-
if (currentVersion ===
|
|
62607
|
+
if (currentVersion === 65) {
|
|
62412
62608
|
tryIdempotentDdl(db, 61, "ALTER TABLE flywheel_substrate_bugs ADD COLUMN affected_criteria TEXT");
|
|
62413
62609
|
tryIdempotentDdl(db, 61, "ALTER TABLE agents ADD COLUMN started_by TEXT");
|
|
62414
62610
|
tryIdempotentDdl(db, 62, "ALTER TABLE review_status ADD COLUMN review_cycle_history TEXT");
|
|
62415
62611
|
tryIdempotentDdl(db, 62, "ALTER TABLE review_status ADD COLUMN conflicts_since TEXT");
|
|
62416
62612
|
return;
|
|
62417
62613
|
}
|
|
62418
|
-
if (currentVersion >
|
|
62614
|
+
if (currentVersion > 65) return;
|
|
62419
62615
|
if (currentVersion < 2) db.exec(`
|
|
62420
62616
|
DELETE FROM status_history
|
|
62421
62617
|
WHERE id NOT IN (
|
|
@@ -63083,7 +63279,8 @@ function runMigrations(db, dbPath) {
|
|
|
63083
63279
|
tryIdempotentDdl(db, 64, "ALTER TABLE review_status ADD COLUMN uat_status TEXT");
|
|
63084
63280
|
tryIdempotentDdl(db, 64, "ALTER TABLE review_status ADD COLUMN uat_notes TEXT");
|
|
63085
63281
|
}
|
|
63086
|
-
|
|
63282
|
+
if (currentVersion < 65) tryIdempotentDdl(db, 65, "ALTER TABLE review_status ADD COLUMN retired_at TEXT");
|
|
63283
|
+
db.pragma(`user_version = 65`);
|
|
63087
63284
|
}
|
|
63088
63285
|
//#endregion
|
|
63089
63286
|
//#region ../../lib/database/index.ts
|
|
@@ -64408,6 +64605,7 @@ init_review_status();
|
|
|
64408
64605
|
init_event_store();
|
|
64409
64606
|
const POLL_INTERVAL_MS$2 = 6e4;
|
|
64410
64607
|
let reconcileTimer = null;
|
|
64608
|
+
const reconcileTracking = /* @__PURE__ */ new Map();
|
|
64411
64609
|
function reviewStatusPayload(event) {
|
|
64412
64610
|
if (!event.payload || typeof event.payload !== "object") return null;
|
|
64413
64611
|
const payload = event.payload;
|
|
@@ -64419,9 +64617,10 @@ async function reconcileOnce() {
|
|
|
64419
64617
|
const canonicalByIssue = /* @__PURE__ */ new Map();
|
|
64420
64618
|
for (const issueId of Object.keys(cached)) {
|
|
64421
64619
|
const canonical = getReviewStatusSync(issueId);
|
|
64422
|
-
if (!canonical) continue;
|
|
64620
|
+
if (!canonical || canonical.retiredAt) continue;
|
|
64423
64621
|
canonicalByIssue.set(issueId.toUpperCase(), canonical);
|
|
64424
64622
|
}
|
|
64623
|
+
for (const issueId of reconcileTracking.keys()) if (!canonicalByIssue.has(issueId)) reconcileTracking.delete(issueId);
|
|
64425
64624
|
const store = getEventStore();
|
|
64426
64625
|
const latestByIssue = /* @__PURE__ */ new Map();
|
|
64427
64626
|
for (const event of store.queryLatestPerIssue("review.status_changed")) {
|
|
@@ -64432,10 +64631,25 @@ async function reconcileOnce() {
|
|
|
64432
64631
|
const latest = latestByIssue.get(issueId);
|
|
64433
64632
|
const latestPayload = latest ? reviewStatusPayload(latest) : null;
|
|
64434
64633
|
const lastUpdatedAt = latestPayload?.status.updatedAt ?? "";
|
|
64435
|
-
if (lastUpdatedAt > canonical.updatedAt)
|
|
64436
|
-
|
|
64634
|
+
if (lastUpdatedAt > canonical.updatedAt) {
|
|
64635
|
+
reconcileTracking.delete(issueId);
|
|
64636
|
+
continue;
|
|
64637
|
+
}
|
|
64638
|
+
if (lastUpdatedAt === canonical.updatedAt && latestPayload && sameCanonicalReviewStatus(latestPayload.status, canonical)) {
|
|
64639
|
+
reconcileTracking.delete(issueId);
|
|
64640
|
+
continue;
|
|
64641
|
+
}
|
|
64642
|
+
const tracking = reconcileTracking.get(issueId);
|
|
64643
|
+
if (tracking?.healedUpdatedAt === canonical.updatedAt) {
|
|
64644
|
+
if (tracking.warnedUpdatedAt !== canonical.updatedAt) {
|
|
64645
|
+
console.warn(`[review-status-reconcile] NOT CONVERGING for ${issueId}: canonical=${canonical.updatedAt} event=${lastUpdatedAt}`);
|
|
64646
|
+
tracking.warnedUpdatedAt = canonical.updatedAt;
|
|
64647
|
+
}
|
|
64648
|
+
continue;
|
|
64649
|
+
}
|
|
64437
64650
|
console.log(`[review-status-reconcile] re-emitting status for ${issueId} (canonical differs from last event — healing lost status_changed)`);
|
|
64438
64651
|
emitReviewStatusChanged((event) => store.append(event), issueId, canonical);
|
|
64652
|
+
reconcileTracking.set(issueId, { healedUpdatedAt: canonical.updatedAt });
|
|
64439
64653
|
}
|
|
64440
64654
|
}
|
|
64441
64655
|
function startReviewStatusReconcileService() {
|
|
@@ -65570,15 +65784,15 @@ async function announceNewRestart(deps = {}) {
|
|
|
65570
65784
|
return true;
|
|
65571
65785
|
}
|
|
65572
65786
|
let timer$2 = null;
|
|
65573
|
-
let running = false;
|
|
65787
|
+
let running$1 = false;
|
|
65574
65788
|
let runToken = 0;
|
|
65575
65789
|
function startRestartAnnouncer(deps = {}) {
|
|
65576
|
-
if (running) return;
|
|
65577
|
-
running = true;
|
|
65790
|
+
if (running$1) return;
|
|
65791
|
+
running$1 = true;
|
|
65578
65792
|
const token = ++runToken;
|
|
65579
65793
|
let remainingBootstrapPolls = BOOTSTRAP_FAST_POLL_COUNT;
|
|
65580
65794
|
const schedule = (delayMs) => {
|
|
65581
|
-
if (!running || token !== runToken) return;
|
|
65795
|
+
if (!running$1 || token !== runToken) return;
|
|
65582
65796
|
timer$2 = setTimeout(pass, delayMs);
|
|
65583
65797
|
timer$2.unref?.();
|
|
65584
65798
|
};
|
|
@@ -65596,7 +65810,7 @@ function startRestartAnnouncer(deps = {}) {
|
|
|
65596
65810
|
pass();
|
|
65597
65811
|
}
|
|
65598
65812
|
function stopRestartAnnouncer() {
|
|
65599
|
-
running = false;
|
|
65813
|
+
running$1 = false;
|
|
65600
65814
|
runToken += 1;
|
|
65601
65815
|
if (timer$2) clearTimeout(timer$2);
|
|
65602
65816
|
timer$2 = null;
|
|
@@ -66021,7 +66235,7 @@ const RESTART_MARKER = join$1(homedir(), ".overdeck", "dashboard-restarting.json
|
|
|
66021
66235
|
* loads new content-hashed chunk filenames (no ERR_MODULE_NOT_FOUND after rebuild).
|
|
66022
66236
|
*/
|
|
66023
66237
|
async function defaultLifecycleRunner(pending) {
|
|
66024
|
-
const { postMergeLifecycle, notifyTldrDaemon } = await import("./merge-agent-
|
|
66238
|
+
const { postMergeLifecycle, notifyTldrDaemon } = await import("./merge-agent-svBDRWB6.js");
|
|
66025
66239
|
await postMergeLifecycle(pending.issueId, pending.projectPath, pending.sourceBranch, { skipDeploy: true });
|
|
66026
66240
|
if (pending.sourceBranch) await notifyTldrDaemon(pending.projectPath, pending.sourceBranch);
|
|
66027
66241
|
}
|
|
@@ -66218,7 +66432,7 @@ function failureReason(result) {
|
|
|
66218
66432
|
return result.error ?? result.message ?? `merge returned status ${result.statusCode ?? "unknown"}`;
|
|
66219
66433
|
}
|
|
66220
66434
|
async function defaultMergeIssue(issueId) {
|
|
66221
|
-
const { triggerMerge } = await import("./merge-ops-
|
|
66435
|
+
const { triggerMerge } = await import("./merge-ops-CUzpOPtO.js");
|
|
66222
66436
|
return triggerMerge(issueId);
|
|
66223
66437
|
}
|
|
66224
66438
|
function defaultAnnounceFailure(issueId, reason) {
|
|
@@ -66373,21 +66587,113 @@ async function warnIfAppCannotMerge(deps = {}) {
|
|
|
66373
66587
|
}
|
|
66374
66588
|
}
|
|
66375
66589
|
//#endregion
|
|
66590
|
+
//#region services/conversation-rescan-scheduler.ts
|
|
66591
|
+
/**
|
|
66592
|
+
* Keeps the discovered-sessions FTS index fresh (PAN-3771 layer 2).
|
|
66593
|
+
* The Conversations-page search corpus previously only updated when someone
|
|
66594
|
+
* clicked Scan or ran `pan conv scan`, so installs that never rescanned had
|
|
66595
|
+
* weeks of invisible sessions. The scan is incremental: unchanged files are
|
|
66596
|
+
* skipped by size and mtime.
|
|
66597
|
+
*/
|
|
66598
|
+
const BOOT_DELAY_MS = 45e3;
|
|
66599
|
+
const RESCAN_INTERVAL_MS = 360 * 60 * 1e3;
|
|
66600
|
+
const LOG_PREFIX = "[conversation-rescan]";
|
|
66601
|
+
let bootTimer = null;
|
|
66602
|
+
let intervalTimer = null;
|
|
66603
|
+
let running = false;
|
|
66604
|
+
let stopped = false;
|
|
66605
|
+
async function runScanOnce(trigger) {
|
|
66606
|
+
if (running || stopped) return;
|
|
66607
|
+
running = true;
|
|
66608
|
+
try {
|
|
66609
|
+
const result = await scan({ mode: "system" });
|
|
66610
|
+
const elapsedMs = Math.round(result.durationMs);
|
|
66611
|
+
const summary = `${result.inserted} inserted, ${result.updated} updated, ${result.skipped} skipped, ${result.errors} errors`;
|
|
66612
|
+
console.log(`${LOG_PREFIX} ${trigger} scan complete: ${summary} (${elapsedMs}ms)`);
|
|
66613
|
+
} catch (error) {
|
|
66614
|
+
console.warn(`${LOG_PREFIX} ${trigger} scan failed:`, error);
|
|
66615
|
+
} finally {
|
|
66616
|
+
running = false;
|
|
66617
|
+
}
|
|
66618
|
+
}
|
|
66619
|
+
function startConversationRescanScheduler() {
|
|
66620
|
+
if (bootTimer !== null || intervalTimer !== null) return;
|
|
66621
|
+
stopped = false;
|
|
66622
|
+
bootTimer = setTimeout(() => {
|
|
66623
|
+
runScanOnce("boot");
|
|
66624
|
+
}, BOOT_DELAY_MS);
|
|
66625
|
+
if (typeof bootTimer.unref === "function") bootTimer.unref();
|
|
66626
|
+
intervalTimer = setInterval(() => {
|
|
66627
|
+
runScanOnce("interval");
|
|
66628
|
+
}, RESCAN_INTERVAL_MS);
|
|
66629
|
+
if (typeof intervalTimer.unref === "function") intervalTimer.unref();
|
|
66630
|
+
}
|
|
66631
|
+
async function stopConversationRescanScheduler() {
|
|
66632
|
+
if (bootTimer !== null) {
|
|
66633
|
+
clearTimeout(bootTimer);
|
|
66634
|
+
bootTimer = null;
|
|
66635
|
+
}
|
|
66636
|
+
if (intervalTimer !== null) {
|
|
66637
|
+
clearInterval(intervalTimer);
|
|
66638
|
+
intervalTimer = null;
|
|
66639
|
+
}
|
|
66640
|
+
stopped = true;
|
|
66641
|
+
}
|
|
66642
|
+
//#endregion
|
|
66376
66643
|
//#region services/cost-reconcile-service.ts
|
|
66644
|
+
/**
|
|
66645
|
+
* Periodic cost reconciliation delegates transcript walking and parsing to the
|
|
66646
|
+
* long DB worker lane. The main thread records returned events through the cost
|
|
66647
|
+
* write door and persists exact path/mtime/size skip verdicts for later sweeps.
|
|
66648
|
+
*/
|
|
66377
66649
|
const RECONCILE_INTERVAL_MS = 5 * 6e4;
|
|
66650
|
+
const RECONCILE_BATCH_EVENTS = 250;
|
|
66378
66651
|
let timer = null;
|
|
66379
66652
|
let inFlight$1 = null;
|
|
66380
66653
|
async function runCostReconcileOnce(reason) {
|
|
66381
66654
|
if (inFlight$1) return inFlight$1;
|
|
66382
66655
|
inFlight$1 = (async () => {
|
|
66383
|
-
const result =
|
|
66384
|
-
|
|
66656
|
+
const result = {
|
|
66657
|
+
eventsImported: 0,
|
|
66658
|
+
duplicatesSkipped: 0,
|
|
66659
|
+
cacheSkipped: 0,
|
|
66660
|
+
errors: []
|
|
66661
|
+
};
|
|
66662
|
+
const piCollected = await runDashboardDbJob("costReconcileSweep", {
|
|
66663
|
+
source: "pi",
|
|
66664
|
+
maxEvents: RECONCILE_BATCH_EVENTS
|
|
66665
|
+
}, async (progress) => {
|
|
66666
|
+
const batch = progress;
|
|
66667
|
+
for (const { event, sourceFile } of batch.events) {
|
|
66668
|
+
const recorded = await recordCostEventsThroughOverdeck([event], sourceFile);
|
|
66669
|
+
result.eventsImported += recorded.inserted;
|
|
66670
|
+
result.duplicatesSkipped += recorded.duplicates;
|
|
66671
|
+
}
|
|
66672
|
+
for (const verdict of batch.verdicts) recordSkipVerdict(verdict.path, verdict.mtimeMs, verdict.size, verdict.verdict);
|
|
66673
|
+
});
|
|
66674
|
+
result.cacheSkipped += piCollected.stats.cacheSkipped;
|
|
66675
|
+
result.errors.push(...piCollected.errors);
|
|
66676
|
+
if (result.eventsImported > 0 || result.cacheSkipped > 0 || result.errors.length > 0) console.log(`[cost-reconciler] ${reason} sweep: ${result.eventsImported} imported, ${result.cacheSkipped} cache-skipped, ${result.duplicatesSkipped} duplicate(s), ${result.errors.length} error(s)`);
|
|
66385
66677
|
if (result.errors.length > 0) for (const err of result.errors.slice(0, 5)) console.warn(`[cost-reconciler] ${err.path}: ${err.error}`);
|
|
66386
66678
|
const backfillResult = reclassifyUnknownCostEventsSync();
|
|
66387
66679
|
if (backfillResult.updated > 0) console.log(`[cost-reconciler] ${reason} UNKNOWN backfill: ${backfillResult.updated} updated`);
|
|
66388
66680
|
try {
|
|
66389
|
-
|
|
66390
|
-
|
|
66681
|
+
let imported = 0;
|
|
66682
|
+
const codexResult = await runDashboardDbJob("costReconcileSweep", {
|
|
66683
|
+
source: "codex",
|
|
66684
|
+
maxEvents: RECONCILE_BATCH_EVENTS
|
|
66685
|
+
}, async (progress) => {
|
|
66686
|
+
const batch = progress;
|
|
66687
|
+
for (const event of batch.events) {
|
|
66688
|
+
const normalized = {
|
|
66689
|
+
...event,
|
|
66690
|
+
ts: new Date(event.ts)
|
|
66691
|
+
};
|
|
66692
|
+
if (await Effect.runPromise(CostWriter.use((writer) => writer.record(normalized)).pipe(Effect.provide(CostDoorLive)))) imported++;
|
|
66693
|
+
}
|
|
66694
|
+
for (const verdict of batch.verdicts) recordSkipVerdict(verdict.path, verdict.mtimeMs, verdict.size, verdict.verdict);
|
|
66695
|
+
});
|
|
66696
|
+
console.log(`[cost-reconciler] ${reason} codex sweep: ${codexResult.stats.scanned} scanned, ${codexResult.stats.cacheSkipped} cache-skipped, ${imported} imported`);
|
|
66391
66697
|
} catch (err) {
|
|
66392
66698
|
console.warn("[cost-reconciler] codex sweep failed:", err instanceof Error ? err.message : err);
|
|
66393
66699
|
}
|
|
@@ -66721,7 +67027,7 @@ const defaultDependencies = {
|
|
|
66721
67027
|
inspect: inspectStateMigration,
|
|
66722
67028
|
ensureWorktree: ensureStateWorktree,
|
|
66723
67029
|
migrate: async (projectKey, project, signal) => {
|
|
66724
|
-
const { migrateProjectState } = await import("./state-migrate-
|
|
67030
|
+
const { migrateProjectState } = await import("./state-migrate-DtFHcOVZ.js");
|
|
66725
67031
|
await migrateProjectState(projectKey, { signal }, project);
|
|
66726
67032
|
},
|
|
66727
67033
|
clearCache: clearStateMigrationCache,
|
|
@@ -66933,7 +67239,7 @@ if (shouldStartStaleCheckRetriggerService()) {
|
|
|
66933
67239
|
}
|
|
66934
67240
|
if (process.env.OVERDECK_MODE === "desktop") (async () => {
|
|
66935
67241
|
try {
|
|
66936
|
-
const { provisionClaudeHooks } = await import("./claude-hooks-provision-
|
|
67242
|
+
const { provisionClaudeHooks } = await import("./claude-hooks-provision-BJ8LNIAe.js");
|
|
66937
67243
|
const result = await provisionClaudeHooks();
|
|
66938
67244
|
if (!result.ok) console.warn(`[overdeck] Claude hook provisioning skipped: ${result.reason}`);
|
|
66939
67245
|
else if (result.changed) console.log(`[overdeck] Claude hooks provisioned: ${result.binariesSynced} scripts, registered ${result.registered.length} hook(s)${result.pruned.length ? `, pruned ${result.pruned.length} stale` : ""}`);
|
|
@@ -67176,6 +67482,8 @@ startCostReconcileService();
|
|
|
67176
67482
|
console.log("[overdeck] Cost reconciler started");
|
|
67177
67483
|
const conversationSearchWatcher = startConversationSearchWatcher();
|
|
67178
67484
|
console.log(conversationSearchWatcher ? "[overdeck] Conversation search watcher started" : "[overdeck] Conversation search watcher skipped (conversationSearch.enabled=false)");
|
|
67485
|
+
startConversationRescanScheduler();
|
|
67486
|
+
console.log("[overdeck] Conversation rescan scheduler started (boot pass + 6h interval)");
|
|
67179
67487
|
let stopResourceRefreshServices = () => void 0;
|
|
67180
67488
|
(async () => {
|
|
67181
67489
|
const store = await initEventStore();
|
|
@@ -67278,7 +67586,7 @@ const handleShutdownSignal = async (signal) => {
|
|
|
67278
67586
|
await stopAllKnowledgeViewers().catch((err) => console.warn("[knowledge-viewer] shutdown failed:", err?.message ?? err));
|
|
67279
67587
|
await stopDeaconChild().catch((err) => console.warn("[deacon-supervisor] child shutdown failed:", err?.message ?? err));
|
|
67280
67588
|
try {
|
|
67281
|
-
const { killAllGateProcessGroups } = await import("./validation-
|
|
67589
|
+
const { killAllGateProcessGroups } = await import("./validation-k4EpMHm0.js");
|
|
67282
67590
|
const reaped = killAllGateProcessGroups();
|
|
67283
67591
|
if (reaped > 0) console.log(`[overdeck] reaped ${reaped} in-flight gate process group(s)`);
|
|
67284
67592
|
} catch (err) {
|
|
@@ -67286,6 +67594,7 @@ const handleShutdownSignal = async (signal) => {
|
|
|
67286
67594
|
}
|
|
67287
67595
|
await Effect.runPromise(flushAllPendingAutoCommits()).catch((err) => console.warn("[pan-dir/auto-commit] shutdown flush failed:", err));
|
|
67288
67596
|
await stopConversationSearchWatcher().catch((err) => console.warn("[conversation-search] watcher shutdown failed:", err));
|
|
67597
|
+
await stopConversationRescanScheduler();
|
|
67289
67598
|
closeConversationSearchService();
|
|
67290
67599
|
closeMemoryFtsDatabases();
|
|
67291
67600
|
process.exit(0);
|
|
@@ -67320,7 +67629,7 @@ setTimeout(() => {
|
|
|
67320
67629
|
});
|
|
67321
67630
|
});
|
|
67322
67631
|
}, 1e3);
|
|
67323
|
-
fixStuckReadyForMerge();
|
|
67632
|
+
await fixStuckReadyForMerge();
|
|
67324
67633
|
fixStuckCommentedReviews();
|
|
67325
67634
|
reconcileStaleGitHubBlockers().then((n) => {
|
|
67326
67635
|
if (n > 0) {
|
|
@@ -67334,7 +67643,7 @@ reconcileStaleGitHubBlockers().then((n) => {
|
|
|
67334
67643
|
}).catch((err) => console.warn(`[overdeck] Startup blocker reconciliation failed: ${err.message}`));
|
|
67335
67644
|
await startProjectCiRefillAfterProjectionReady(900 * 1e3);
|
|
67336
67645
|
try {
|
|
67337
|
-
const { resetProcessingToQueued, requeueOrphanedMergingAutoMerges } = await import("./merge-sync-
|
|
67646
|
+
const { resetProcessingToQueued, requeueOrphanedMergingAutoMerges } = await import("./merge-sync-DuJ6Vkl3.js");
|
|
67338
67647
|
const resetCount = resetProcessingToQueued();
|
|
67339
67648
|
if (resetCount > 0) {
|
|
67340
67649
|
console.log(`[overdeck] Reset ${resetCount} stuck merge queue entries to queued`);
|
|
@@ -67368,7 +67677,7 @@ else {
|
|
|
67368
67677
|
console.log("[overdeck] Auto-merge executor started");
|
|
67369
67678
|
}
|
|
67370
67679
|
try {
|
|
67371
|
-
const { reconcileInterruptedVerifications } = await import("./verification-runner-
|
|
67680
|
+
const { reconcileInterruptedVerifications } = await import("./verification-runner-Bbc-8BbR.js");
|
|
67372
67681
|
const interrupted = reconcileInterruptedVerifications();
|
|
67373
67682
|
if (interrupted > 0) console.log(`[overdeck] recovered ${interrupted} orphaned verification worker(s)`);
|
|
67374
67683
|
} catch (err) {
|