@overdeck/desktop 0.45.15 → 0.45.18
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/dist-electron/main.js +149 -158
- package/dist-electron/main.js.map +1 -1
- package/dist-electron/preload.js +17 -2
- package/dist-electron/preload.js.map +1 -1
- package/package.json +5 -4
- package/server/acceptance-criteria-aQFKQf-J.js +62 -0
- package/server/{advancing-selfheal-CSuZ31bB.js → advancing-selfheal-DgwQgm4D.js} +6 -5
- package/server/{agent-gc-D_DxfBHR.js → agent-gc-kpzxqT7P.js} +3 -3
- package/server/agent-state-C_6TG-Ad.js +3 -0
- package/server/{agent-state-service-C_2ZAQRP.js → agent-state-service-BUfovFfB.js} +1 -1
- package/server/{agent-state-service-BZkvgQf4.js → agent-state-service-nUD3qfob.js} +9 -52
- package/server/agents-BA15AQqo.js +3 -0
- package/server/{briefing-freshness-Kh5V8RTh.js → agents-BHBxr8c9.js} +5 -131
- package/server/{archive-planning-DkivCk1A.js → archive-planning-CzCW9Ifl.js} +5 -10
- package/server/{archive-planning-CTILQRnV.js → archive-planning-D-QsBufn.js} +1 -1
- package/server/{artifact-index-jobs-CmsvQ1ey.js → artifact-index-jobs-qqa51B2Z.js} +2 -2
- package/server/{backlog-auto-trigger-ueRaT8Dy.js → backlog-auto-trigger-B7Bi0bvY.js} +3 -3
- package/server/behavior-CWqNMqE5.js +10 -0
- package/server/briefing-freshness-DuxIE1yr.js +131 -0
- package/server/{checkpoint-manager-fu9oVsR-.js → checkpoint-manager-DF6hb9Jw.js} +3 -3
- package/server/{checkpoint-manager-CAFos8e1.js → checkpoint-manager-DixkLus7.js} +1 -1
- package/server/checkpoint-worker.js +1 -1
- package/server/{checkpoints-DvhGi8P_.js → checkpoints-B1Z42tJE.js} +1 -1
- package/server/{checkpoints-1BqOlS4q.js → checkpoints-BiviJqei.js} +2 -2
- package/server/claude-hooks-provision-BeMGi4ty.js +3 -0
- package/server/{claude-hooks-provision-s_wdpeVj.js → claude-hooks-provision-Du_PkMsp.js} +132 -114
- package/server/{claude-permissions-CaWqysff.js → claude-permissions-BB6agcOZ.js} +2 -2
- package/server/{claude-settings-overlay-CcTf0xzG.js → claude-settings-overlay-CAq2oFSK.js} +2 -2
- package/server/{claude-settings-overlay-BbA4FbVI.js → claude-settings-overlay-DUWWLd6M.js} +1 -1
- package/server/cli-BFgrSWKV.js +3 -0
- package/server/{cli-BwCvCUBK.js → cli-C33xPZNm.js} +9 -9
- package/server/{cliproxy-C2xC-3vH.js → cliproxy-BQX1TL6N.js} +1 -1
- package/server/{cliproxy-BsoNNDAj.js → cliproxy-CGBA1GzA.js} +2 -2
- package/server/{close-issue-BleIwP3f.js → close-issue-DNv8npc1.js} +5 -5
- package/server/{closed-issue-reaper-BwUUvjEW.js → closed-issue-reaper-DrqgBJlr.js} +1 -1
- package/server/{closed-issue-reaper-mC5pujeb.js → closed-issue-reaper-LoMnnjtJ.js} +9 -9
- package/server/codex-DxLivxri.js +3 -0
- package/server/{behavior-Cpj03N4v.js → codex-parser-DboQnEXN.js} +3 -9
- package/server/{codex-DW60_5j2.js → codex-sgWVCGUd.js} +43 -17
- package/server/{config-BRNQJXhA.js → config-6MCHOZ2N.js} +1 -1
- package/server/{config-ZNnMpIlh.js → config-DfaUXr6r.js} +2 -2
- package/server/{config-yaml-Dcz-8uit.js → config-yaml-CqaAyn8y.js} +149 -80
- package/server/{conflict-gate-DTje2Ll7.js → conflict-gate-BF_zhcmb.js} +3 -3
- package/server/{conflict-gate-DGT8jCLp.js → conflict-gate-BubJprtD.js} +1 -1
- package/server/{context-layers-BdUCQ-cl.js → context-layers-BFrxfl0l.js} +17 -3
- package/server/{context-layers-ByOWUjUg.js → context-layers-DWL_8HhY.js} +2 -2
- package/server/{control-settings-DwkAeooY.js → control-settings-BguNQ1F_.js} +4 -4
- package/server/{conversation-compaction-WYQZUVDm.js → conversation-compaction-CRKAf2qP.js} +1 -1
- package/server/{conversation-compaction-OTYgd6eg.js → conversation-compaction-DxSXl0pT.js} +8 -8
- package/server/{conversation-service-C_kNZPLx.js → conversation-service-DzuY9qoH.js} +1 -1
- package/server/{conversation-service-BR1OgvxO.js → conversation-service-mFVFdDQK.js} +6 -5
- package/server/{conversations-DG2M8WnT.js → conversations-BX5aD-6F.js} +4 -4
- package/server/{conversations-izHvSoAR.js → conversations-BajHQ60c.js} +1 -1
- package/server/{cost-DQ2ajr_m.js → cost-BoqD1Pxz.js} +2 -2
- package/server/{cost-B2mj17iG.js → cost-DuZ5vlv-.js} +3 -3
- package/server/{cost-sync-gTayEuWP.js → cost-sync-BYnmnMkY.js} +3 -3
- package/server/{dag-CqTehWpY.js → dag-C6kYyF17.js} +7 -243
- package/server/{dangerous-git-ops-DDWQlPC3.js → dangerous-git-ops-q5OPtXMd.js} +1 -1
- package/server/dashboard-db-worker.js +6 -6
- package/server/{deacon-BqW9HMew.js → deacon-CwCiNuEZ.js} +3 -3
- package/server/{deacon-DrKDBeJL.js → deacon-Dru5onpk.js} +258 -167
- package/server/{deacon-nudge-log-D1wEK6zF.js → deacon-nudge-log-ilDfxrhK.js} +1 -1
- package/server/{deacon-swarm-CO_A7xyd.js → deacon-swarm-BPmBmSoU.js} +298 -72
- package/server/deacon-swarm-CKyGJng1.js +2 -0
- package/server/deacon.js +14 -7
- package/server/{devcontainer-renderer-BQolp_qZ.js → devcontainer-renderer-BqGNCzvN.js} +3 -3
- package/server/{dist-Bc32rWJB.js → dist-BwlEiLCU.js} +1 -1
- package/server/dist-Bx4KkgYL.js +3 -0
- package/server/{dist-src-Byxt1ifL.js → dist-src-BE0Denfs.js} +1 -1
- package/server/{docker-s-esqZ__.js → docker-CNjXS72x.js} +2 -2
- package/server/{ensure-devcontainer-DA4-jF6R.js → ensure-devcontainer-5e9xOve4.js} +4 -4
- package/server/{ensure-devcontainer-pUVaT0h3.js → ensure-devcontainer-C6gyUQdE.js} +1 -1
- package/server/{esm-shims-CJHy8CZY.js → esm-shims-Cso7IGBC.js} +1 -1
- package/server/{event-store-CcJAhKCl.js → event-store-D9UhQyMS.js} +1 -1
- package/server/{event-store-DRte2Rwt.js → event-store-KZnWUKWh.js} +3 -3
- package/server/{events-Bej1w_k8.js → events-2eFUPdqz.js} +3 -3
- package/server/{events-CtsLScn8.js → events-BYbvqZky.js} +1 -1
- package/server/{factory-FN727tWr.js → factory-BtaRsHFC.js} +20 -17
- package/server/{feature-registry-population-ie-yBcQC.js → feature-registry-population-Ca2UaV0U.js} +4 -4
- package/server/{feature-registry-storage-CkZTFSsn.js → feature-registry-storage-DaP-bQxO.js} +2 -2
- package/server/{features-Dtm9ABuz.js → features-DqvaoQoa.js} +2 -2
- package/server/{feedback-target-BYtpyt1i.js → feedback-target-BXWdOiYI.js} +9 -7
- package/server/{feedback-target-DVJQDiE4.js → feedback-target-BblmMe9P.js} +1 -1
- package/server/{feedback-writer-DOUhyIW2.js → feedback-writer-CULeOOY4.js} +1 -1
- package/server/{feedback-writer-fdE1BzeL.js → feedback-writer-Dn8o9ZyE.js} +4 -4
- package/server/{flywheel-Bi82iiNl.js → flywheel-BUWdcfhq.js} +1 -1
- package/server/{flywheel-Bv3wv2S6.js → flywheel-CqkO3cDj.js} +15 -28
- package/server/{flywheel-CUErLAyN.js → flywheel-D9r1mw2U.js} +13 -13
- package/server/{flywheel-merge-order-DXjeBnJ1.js → flywheel-merge-order-LDzQDwSg.js} +1 -1
- package/server/{flywheel-merge-order-BaEN3iyN.js → flywheel-merge-order-VtjUweEb.js} +7 -7
- package/server/forge-DJy3Zx4s.js +2 -0
- package/server/{forge-ButEdJ31.js → forge-wEollMCi.js} +22 -12
- package/server/{from-CbtTxftl.js → from-B2tOYhYV.js} +1 -1
- package/server/{fts-db-CBgBLZcL.js → fts-db-Bgzn2RO7.js} +2 -2
- package/server/{fts-operations-CI9Xuo_1.js → fts-operations-Bj8yutnR.js} +2 -2
- package/server/{git-utils-ClfpP47N.js → git-utils-GxlL0tmt.js} +2 -2
- package/server/{git-utils-BCLRWQ-y.js → git-utils-q8jNoBts.js} +1 -1
- package/server/{github-app-DRD2woO0.js → github-app-BrYwK_Gb.js} +1 -1
- package/server/{github-app-DscZ0_B6.js → github-app-tUbb8Ldr.js} +8 -3
- package/server/{github-client-DpiZnxGH.js → github-client-BwBU41jK.js} +3 -3
- package/server/{github-client-iFRw8f7e.js → github-client-D6CNsftm.js} +1 -1
- package/server/{github-pr-lookup-D-EBexxC.js → github-pr-lookup-BS5PqkJb.js} +2 -2
- package/server/{harness-resolve-iMjyNUJ2.js → harness-resolve-Dx8hUsvC.js} +3 -3
- package/server/{health-events-CRdxDFN2.js → health-events-2DLp-5Xp.js} +2 -2
- package/server/{health-events-B_WsQyYm.js → health-events-B0mj6Iae.js} +1 -1
- package/server/{hooks-C1ScyVxP.js → hooks-BDcQJDUe.js} +1 -1
- package/server/{hooks-C9b7Vqpw.js → hooks-BS_JrvYP.js} +3 -3
- package/server/hume-B4seN95Y.js +3 -0
- package/server/{hume-TQ5pvOZ_.js → hume-BRhNKyXQ.js} +2 -2
- package/server/{idle-stack-reaper-B1kG7B_X.js → idle-stack-reaper-BCITXNW5.js} +2 -2
- package/server/{idle-stack-reaper-iFVOAoJy.js → idle-stack-reaper-C1ymihno.js} +1 -1
- package/server/{infra-bpq1MHKU.js → infra-_Kx1m9pm.js} +9 -4
- package/server/{injection-BLWfwTVZ.js → injection-Bvhyg_MV.js} +1 -1
- package/server/{injection-DJqWld1v.js → injection-CCaYkofq.js} +7 -7
- package/server/{inspect-agent-DytCsltn.js → inspect-agent-BqyZ4pCo.js} +35 -67
- package/server/inspect-agent-DCJQm9Wu.js +2 -0
- package/server/{internal-token-CjlhdufS.js → internal-token-Cl-1IxaE.js} +2 -2
- package/server/{internal-token-CCaWaTwE.js → internal-token-D-t28de5.js} +1 -1
- package/server/{io-BiQ2Cs3k.js → io-DkC4sFSy.js} +42 -56
- package/server/{issue-closed-FApNiOOs.js → issue-closed-Cpl4VDUM.js} +41 -6
- package/server/{issue-lifecycle-C-K53ASY.js → issue-lifecycle-CFR8TJ22.js} +22 -37
- package/server/{issue-lifecycle-BkFWNjlD.js → issue-lifecycle-YNTy3OT3.js} +1 -1
- package/server/{issue-service-singleton-bG1WdSdQ.js → issue-service-singleton-D81mCts_.js} +1 -1
- package/server/{issue-service-singleton-CuHGpJJP.js → issue-service-singleton-ldvUUXi3.js} +29 -29
- package/server/{issues-CwQMphDH.js → issues-DIEHt9sq.js} +2 -2
- package/server/{jsonl-parser-dNIjHgym.js → jsonl-parser-Cd5jIqh7.js} +3 -3
- package/server/{label-cleanup-DYvAZknd.js → label-cleanup-Btny6Gyo.js} +3 -3
- package/server/{state-home-CRowbXqU.js → launcher-generator-BXLM9f4b.js} +7 -127
- package/server/{layers-CD6FysRU.js → layers-gCJlK62m.js} +2 -2
- package/server/lifecycle-D7aQUnTO.js +12 -0
- package/server/{lifecycle-io-C_Wu0_i-.js → lifecycle-io-DQBF-GHO.js} +1 -1
- package/server/{lifecycle-io-CeYxP3cE.js → lifecycle-io-FfPUtz-y.js} +36 -47
- package/server/{linear-client-EtVyblVz.js → linear-client-CDH2D6Qy.js} +3 -3
- package/server/{linear-client-4qoKnuQu.js → linear-client-WrYrUIAH.js} +1 -1
- package/server/memory-fts-worker.js +1 -1
- package/server/{merge-7rqkTUm2.js → merge-BsDgUxFz.js} +3 -3
- package/server/{merge-brm721Es.js → merge-Dervs4BF.js} +1 -1
- package/server/{merge-agent-4Zhlgvqp.js → merge-agent-D6DNhe9j.js} +64 -51
- package/server/{merge-agent-36wfYm2u.js → merge-agent-DMQTJMP0.js} +1 -1
- package/server/{merge-batch-itfnwdsT.js → merge-batch-Bv6Z5K2H.js} +1 -1
- package/server/{merge-blockers-Bto_Oe_o.js → merge-blockers-WWWi6Ur2.js} +2 -2
- package/server/merge-ops-h9OCnIVz.js +2 -0
- package/server/{merge-rebase-Czfqfe4q.js → merge-rebase-Czth9ggm.js} +2 -2
- package/server/{merge-set-BIkGQL9j.js → merge-set-DNc4zBqd.js} +3 -3
- package/server/{merge-set-G1RHcu3D.js → merge-set-vuE3MEVt.js} +1 -1
- package/server/{merge-sync-B43Dybea.js → merge-sync-B2KSk54U.js} +2 -2
- package/server/{merge-sync-DIrmlZUr.js → merge-sync-B9nHdUGx.js} +1 -1
- package/server/{merge-train-DGqVuNZV.js → merge-train-DJgr81tF.js} +3 -3
- package/server/{merge-train-deps-q15XLnAS.js → merge-train-deps-B2OWS0k9.js} +4 -4
- package/server/{merge-verification-Cqfxx6bE.js → merge-verification-BBIXUEqa.js} +4 -4
- package/server/{multipart-parser-CiPxxfUH.js → multipart-parser-9DhuAkPd.js} +2 -2
- package/server/{no-resume-mode-yrPEQ_pC.js → no-resume-mode-Gh5R_YLF.js} +1 -1
- package/server/node_modules/.package-lock.json +11 -11
- package/server/node_modules/@effect/platform-node/node_modules/@effect/platform-node-shared/package.json +3 -3
- package/server/node_modules/toml/README.md +54 -0
- package/server/node_modules/toml/index.d.ts +42 -1
- package/server/node_modules/toml/index.js +3 -3
- package/server/node_modules/toml/lib/compiler.js +35 -3
- package/server/node_modules/toml/lib/parser.js +224 -143
- package/server/node_modules/toml/package.json +3 -1
- package/server/node_modules/ws/lib/receiver.js +15 -32
- package/server/node_modules/ws/lib/websocket-server.js +4 -4
- package/server/node_modules/ws/lib/websocket.js +4 -4
- package/server/node_modules/ws/package.json +5 -1
- package/server/{orphan-proposed-reconciler-BWWHn4Lr.js → orphan-proposed-reconciler-B8H41C4a.js} +14 -24
- package/server/{orphan-proposed-reconciler-DAD9FJtQ.js → orphan-proposed-reconciler-DbTmT7qy.js} +1 -1
- package/server/package-lock.json +12 -12
- package/server/package.json +1 -1
- package/server/{pan-dir-Bj7Hy8iu.js → pan-dir-BTw4MdSe.js} +4 -4
- package/server/{paths-C9DkhIOT.js → paths-Btkc8mzp.js} +2 -2
- package/server/{pickup-CKRuGDsB.js → pickup-BtvRBbvI.js} +1 -1
- package/server/{pipeline-notifier-BkKbQ8ji.js → pipeline-notifier-3frIvSi3.js} +1 -1
- package/server/{pipeline-notifier-CAurUste.js → pipeline-notifier-DTd19f18.js} +2 -2
- package/server/{project-pipelines-BRWaGmI4.js → project-pipelines-B95fcAek.js} +2 -2
- package/server/projects-Dc9aoVoG.js +3 -0
- package/server/{prompts-DfI5qbTW.js → prompts-CIVmjHxn.js} +2 -2
- package/server/{providers-D-5txBRc.js → providers-BLLk5IIb.js} +1 -1
- package/server/{providers-CWDXoaMA.js → providers-C-yWibCk.js} +7 -7
- package/server/public/assets/chunk-BO2N2NFS-DzKZyoKY.js +103 -0
- package/server/public/assets/{diagram-OG6HWLK6-Avtvq2qI.js → diagram-OG6HWLK6-Cx8mWUb8.js} +1 -1
- package/server/public/assets/{dist-BEHQuasD.js → dist-BqccLhaw.js} +3 -3
- package/server/public/assets/{dist-BvmY-qb1.js → dist-rC3nAs_O.js} +1 -1
- package/server/public/assets/{ganttDiagram-6RSMTGT7-7KhCd0fH.js → ganttDiagram-6RSMTGT7-DLYPLf5T.js} +1 -1
- package/server/public/assets/{highlighted-body-OFNGDK62-iQoBMTf0.js → highlighted-body-OFNGDK62-D4DqixbV.js} +1 -1
- package/server/public/assets/index-CPcysUHk.js +796 -0
- package/server/public/assets/index-H5M0yhM4.css +1 -0
- package/server/public/assets/{linear-CiJHW9g5.js → linear-yqcXkDfj.js} +1 -1
- package/server/public/assets/mermaid-GHXKKRXX-CWdZ_heB.js +1 -0
- package/server/public/assets/{pieDiagram-4H26LBE5-BOhmvUhW.js → pieDiagram-4H26LBE5-DhraIOaV.js} +1 -1
- package/server/public/assets/{prod-DmLBBqat.js → prod-DKUunUdN.js} +4 -4
- package/server/public/assets/{quadrantDiagram-W4KKPZXB-Cjku660G.js → quadrantDiagram-W4KKPZXB-DPiRcToa.js} +1 -1
- package/server/public/assets/{sankeyDiagram-5OEKKPKP-D52w5oPh.js → sankeyDiagram-5OEKKPKP-3An5HNkZ.js} +1 -1
- package/server/public/assets/{xychartDiagram-2RQKCTM6-BTO07_Iv.js → xychartDiagram-2RQKCTM6-lbEOjfqQ.js} +1 -1
- package/server/public/index.html +2 -2
- package/server/{pull-requests-CKZPWhjD.js → pull-requests-D7AL5woD.js} +1 -1
- package/server/{pull-requests-Bmre-Xlz.js → pull-requests-NDDNtqNq.js} +3 -3
- package/server/{agents-CsOzAmRg.js → queries-C0LCGG21.js} +743 -399
- package/server/{rally-BBd9tQ__.js → rally-4oKvnxLG.js} +3 -3
- package/server/rally-DF5a3ioP.js +3 -0
- package/server/{rally-api-DxZFObI_.js → rally-api-41tT6ikZ.js} +2 -2
- package/server/{rally-api-DDc85HIz.js → rally-api-BsaQ8Vnz.js} +1 -1
- package/server/{rally-client-DvvLiAQP.js → rally-client-Bo4hNcCZ.js} +5 -5
- package/server/{rally-client-BADHn0m_.js → rally-client-b5PT1x5L.js} +1 -1
- package/server/{reap-terminal-sessions-D_xvy-Mk.js → reap-terminal-sessions-BR39qflC.js} +1 -1
- package/server/{reap-terminal-sessions-D6JDJsqF.js → reap-terminal-sessions-CFkuquQj.js} +1 -1
- package/server/{rebuild-stack-GOsWqXi3.js → rebuild-stack-C7JPUom6.js} +1 -1
- package/server/{rebuild-stack-D19i080j.js → rebuild-stack-Ddv6W017.js} +6 -6
- package/server/{reconstruct-cache-lQrG4xGg.js → reconstruct-cache-Gqhm---K.js} +6 -6
- package/server/record-DLOqfbkI.js +3 -0
- package/server/record-update-BltEmPge.js +168 -0
- package/server/record-update-CDp7aTaT.js +3 -0
- package/server/recovery-trip-Cn7KJVkS.js +44 -0
- package/server/{release-engine-DxcMWRuK.js → release-engine-BYzmIBf9.js} +5 -5
- package/server/{release-set-BYsgX7o6.js → release-set-7pnxFOWR.js} +3 -3
- package/server/{remote-DmeL21dF.js → remote-Cvu4CSDk.js} +3 -3
- package/server/{remote-agents-BfQBE6MN.js → remote-agents-C2C6z9tj.js} +6 -33
- package/server/{remote-agents-DlvbzO7m.js → remote-agents-DYY5fFpd.js} +1 -1
- package/server/{remote-completion-BgkiSQmx.js → remote-completion-2Kb4IDg_.js} +13 -13
- package/server/{remote-8W2Yhygw.js → remote-rN0ecjHE.js} +3 -3
- package/server/resume-BFLl-yLn.js +3 -0
- package/server/{review-agent-D025Wt7w.js → review-agent-BZvk0N5G.js} +31 -23
- package/server/{review-agent-Rub0OpZc.js → review-agent-CpSHLzed.js} +1 -1
- package/server/{review-artifacts-CX951jTU.js → review-artifacts-PCo53YMn.js} +5 -19
- package/server/{review-context-DGGGR_w5.js → review-context-M7QtJlJq.js} +8 -8
- package/server/{review-monitor-0_qqMcnS.js → review-monitor-BLC5mTTg.js} +2 -2
- package/server/{review-status-Br6lAFGO.js → review-status-77N3PoZr.js} +1 -1
- package/server/{review-status-4qqLkRMu.js → review-status-DANr0t-v.js} +33 -59
- package/server/{review-status-enrichment-Cr8m3uVL.js → review-status-enrichment-DwOg4UfL.js} +3 -3
- package/server/{review-status-sync-D3KUhsdA.js → review-status-sync-Bd08OOFA.js} +1 -1
- package/server/{review-status-sync-OC-l1lNt.js → review-status-sync-BjTUJ5fx.js} +2 -2
- package/server/{review-verdict-feedback-YOzmsq9G.js → review-verdict-feedback-BsFLjN_6.js} +1 -1
- package/server/{review-verdict-feedback-DrWMuRaj.js → review-verdict-feedback-CBf-J_wS.js} +8 -8
- package/server/{rollup-CnxbwaLH.js → rollup-Bu0f2EyN.js} +8 -8
- package/server/{rollup-DmazRY0j.js → rollup-DTCCdEy4.js} +1 -1
- package/server/{scanner-DE1MqAaF.js → scanner-BlZ2vB7j.js} +7 -7
- package/server/{sequence-io-C0uoqfGx.js → sequence-io-ylyDtz2J.js} +4 -4
- package/server/{sequencer-agent-i-b2u4SJ.js → sequencer-agent-DsWQ-87H.js} +6 -17
- package/server/server.js +5670 -6392
- package/server/{service-D0_gh2tl.js → service-CLVBC_1Y.js} +116 -90
- package/server/{session-fork-DZ12vipL.js → session-fork-DlEIAhRy.js} +2 -2
- package/server/session-history-bnOFKMwf.js +168 -0
- package/server/settings-CP3GGon2.js +2 -0
- package/server/{settings-ByqjPtFO.js → settings-Cqa-8nyj.js} +2 -2
- package/server/{settings-DCC4BAqj.js → settings-gJrdLZy2.js} +3 -3
- package/server/{shadow-engineering-BhnmtW5m.js → shadow-engineering-fq1YEKV3.js} +3 -3
- package/server/{shadow-state-ByXZehsy.js → shadow-state-BqeFAygK.js} +1 -1
- package/server/{shadow-state-CKm8xWX9.js → shadow-state-RptE9Cau.js} +2 -2
- package/server/shadow-utils-BMWr5tRT.js +39 -0
- package/server/{ship-log-DE_0Cv_i.js → ship-log-BRQQi2lU.js} +1 -1
- package/server/{smart-compaction-D5Zen3AA.js → smart-compaction-CmoXpjeU.js} +7 -7
- package/server/{smart-compaction-h4_ca6Uk.js → smart-compaction-DldUel4B.js} +1 -1
- package/server/{spawn-planning-session-Dueit4WX.js → spawn-planning-session-CoS6LTc6.js} +16 -16
- package/server/{spawn-planning-session-Bgi7Ub02.js → spawn-planning-session-DT2tSMxo.js} +1 -1
- package/server/{specialist-completion-BZ8M-WZ0.js → specialist-completion-pJtESo7m.js} +1 -1
- package/server/{specialist-context-BMq83C58.js → specialist-context-CspI4Eog.js} +5 -5
- package/server/{specialist-handoff-logger-BxX1YefH.js → specialist-handoff-logger-Duz9RGvk.js} +2 -2
- package/server/{specialist-logs-BWZYcJ6P.js → specialist-logs-DtSkPJZK.js} +3 -3
- package/server/{specialists-ZkW4Mb7U.js → specialists-CywEMwxk.js} +1 -1
- package/server/{specialists-8ZAguXef.js → specialists-D9-dMUtI.js} +1 -1
- package/server/{specialists-BudKrjOu.js → specialists-Dax7tqXC.js} +1817 -560
- package/server/{specialists-DrPrC9Y9.js → specialists-GF42OOqd.js} +18 -18
- package/server/specs-VwcFtEDi.js +3 -0
- package/server/{src-DHn4Rd2F.js → src-By3D85Ry.js} +77 -1
- package/server/{src-Dv6L03vW.js → src-CqyFg52C.js} +5 -5
- package/server/{src-DNUUqkec.js → src-DhxM-eCb.js} +6 -6
- package/server/{stack-health-Dclm7_tu.js → stack-health-BsEVrJZ6.js} +1 -1
- package/server/{stack-health-DxsTx7II.js → stack-health-C-SnpRHh.js} +2 -2
- package/server/stale-task-claims-vTxmRzLi.js +69 -0
- package/server/state-home-Bur1y4oH.js +213 -0
- package/server/{state-mapping-BvAgFK8n.js → state-mapping-Ci0pkac4.js} +1 -1
- package/server/state-migrate-D3VveYfO.js +362 -0
- package/server/{stuck-remediation-CFWUP8_I.js → stuck-remediation-B699-p8v.js} +63 -46
- package/server/{stuck-remediation-CLHd-lrF.js → stuck-remediation-CaFYYTQW.js} +1 -1
- package/server/{summary-fork-CKc01Our.js → summary-fork-BxnF8Xh0.js} +2 -2
- package/server/{summary-fork-CtCwBJ2Z.js → summary-fork-COqYpVa3.js} +8 -8
- package/server/supervisor/{paths-3R6b989k.js → paths-Bk6hJRH9.js} +4 -3
- package/server/supervisor/pty-supervisor.js +2 -2
- package/server/supervisor/{pty-token-CScQ32Rj.js → pty-token-BZS5GYdG.js} +2 -2
- package/server/supervisor-eWAAmXKu.js +2 -0
- package/server/{supervisor-BA5D72Qa.js → supervisor-liMgIPDF.js} +2 -2
- package/server/{swarm-readiness-CL5sM9B1.js → swarm-readiness-sXB1vhzo.js} +3 -3
- package/server/{system-prerequisites-DmFSXIE5.js → system-prerequisites-Bz6KdkFJ.js} +1 -13
- package/server/{teardown-workspace-DWmFJzTw.js → teardown-workspace-DvzqnmUF.js} +14 -71
- package/server/{test-agent-queue-DjsQoV5X.js → test-agent-queue-hAU1Ah08.js} +6 -6
- package/server/{test-verdict-BSqsQp3G.js → test-verdict-CRsPpByy.js} +1 -1
- package/server/{test-verdict-D1AmZ2c0.js → test-verdict-CXMLATGc.js} +1 -1
- package/server/{tldr-daemon-C-MGomL8.js → tldr-daemon-Bam7Xhoo.js} +2 -2
- package/server/{tldr-daemon-DD9rI5gA.js → tldr-daemon-DhGwd88s.js} +1 -1
- package/server/tmux-C-rgxRDA.js +3 -0
- package/server/{tmux-C_d-lSIq.js → tmux-U55cNGFG.js} +92 -4
- package/server/{token-DfBf1bsd.js → token-Dsa-i36o.js} +2 -2
- package/server/{token-util-CROoF5ic.js → token-util-BWNpH96m.js} +1 -1
- package/server/token-util-DRt0j2nQ.js +3 -0
- package/server/{tracker-config-CNODpd11.js → tracker-config-OkdbaUCm.js} +2 -2
- package/server/{tracker-utils-Ch2_5GGf.js → tracker-utils-CghXMF3q.js} +2 -2
- package/server/{tracker-utils-B9ZoVA9b.js → tracker-utils-DdzUiPNU.js} +1 -1
- package/server/{traefik-connect-BF4x_LUQ.js → traefik-connect-CZYB3dlm.js} +1 -1
- package/server/{tunnel-r_5nHAI6.js → tunnel-D1YxesBL.js} +3 -3
- package/server/{tunnel-YD80_IHr.js → tunnel-DjlzgTl3.js} +1 -1
- package/server/typed-errors-CH4roFIj.js +3 -0
- package/server/{typed-errors-BEJhbjJg.js → typed-errors-n_Tnb4Fh.js} +3 -4
- package/server/{types-CE1m_daD.js → types-DOjWNv3Z.js} +1 -1
- package/server/{types-33JEP4LZ.js → types-DXBMm4mX.js} +1 -1
- package/server/{uat-train-DDI00aqD.js → uat-train-CaaWs9Rp.js} +1 -1
- package/server/{uat-train-DjkFWXge.js → uat-train-CqN34zFx.js} +24 -25
- package/server/{validation-DUTiJnyz.js → validation-4-z2Cw4z.js} +70 -23
- package/server/validation-DpTNakM6.js +3 -0
- package/server/verification-artifact-DK1xb1zG.js +56 -0
- package/server/verification-artifact-JD_edpZ9.js +2 -0
- package/server/{verification-runner-inLgeQux.js → verification-runner-BjHN80pJ.js} +338 -58
- package/server/verification-runner-ShYu5Ph3.js +2 -0
- package/server/{work-agent-prompt-fZljjA1_.js → work-agent-prompt-BiJ43Der.js} +12 -88
- package/server/workflows-B4C3lY9E.js +2 -0
- package/server/{workflows-oBnJ7Tm0.js → workflows-DkTotz_m.js} +17 -24
- package/server/{workspace-CNuW2j41.js → workspace-CuN0ev4Z.js} +3 -3
- package/server/{workspace-B2WOW9Hw.js → workspace-DQ4vVivd.js} +1 -1
- package/server/{workspace-config-CBgMGhWs.js → workspace-config-C77NKnsV.js} +1 -1
- package/server/{workspace-manager-DjUAJCSs.js → workspace-manager-B1mYn0lN.js} +1 -1
- package/server/{workspace-manager-CB-R07R3.js → workspace-manager-Beeo2aKF.js} +23 -48
- package/server/{workspace-metadata-9Nn5kgRl.js → workspace-metadata-BZC5BmoP.js} +2 -2
- package/server/{workspace-metadata-Fd58uUQG.js → workspace-metadata-Cy7_ZACL.js} +1 -1
- package/server/{workspaces-BjWXntty.js → workspaces-CGuzW1Ia.js} +191 -153
- package/sync-sources/hooks/ask-user-question-hook +7 -1
- package/sync-sources/hooks/codex-notify-hook +64 -8
- package/sync-sources/hooks/record-cost-event.js +1109 -36
- package/sync-sources/hooks/record-cost-event.js.map +1 -1
- package/sync-sources/hooks/statusline.sh +2 -2
- package/sync-sources/hooks/work-agent-stop-hook +1 -2
- package/server/acceptance-criteria-DHZk2ceV.js +0 -33
- package/server/agent-runtime-mirror-DrWxopNA.js +0 -37
- package/server/agent-state-EP2QFV9n.js +0 -3
- package/server/agents-DCvyTXNU.js +0 -3
- package/server/auto-commit-QAfsu3Sb.js +0 -3
- package/server/bd-process-lock-D3S4T4o-.js +0 -390
- package/server/beads-BGGxrkZ5.js +0 -649
- package/server/beads-CYsLiyIM.js +0 -2
- package/server/beads-query-B1DlJVp9.js +0 -95
- package/server/beads-restore-CyygSmmn.js +0 -23
- package/server/cli-ClIQwgMI.js +0 -3
- package/server/codex-B7DTpwEw.js +0 -3
- package/server/compact-beads-CK_hHEnB.js +0 -3
- package/server/compact-beads-DKL54y6j.js +0 -94
- package/server/deacon-swarm-BY5hKNaU.js +0 -2
- package/server/dist-DGTwcZhI.js +0 -3
- package/server/export-Dx_qJ3h8.js +0 -87
- package/server/forge-XlDgPQWs.js +0 -2
- package/server/hume-K1pi8jC4.js +0 -3
- package/server/inspect-agent-477VxQim.js +0 -2
- package/server/lifecycle-C_73gi-C.js +0 -14
- package/server/merge-ops-PzqsW69V.js +0 -2
- package/server/projects-KJ94e50I.js +0 -3
- package/server/public/assets/chunk-BO2N2NFS-ClukPsZQ.js +0 -103
- package/server/public/assets/index-DUFDmvmH.css +0 -1
- package/server/public/assets/index-DnTZ2QeN.js +0 -796
- package/server/public/assets/mermaid-GHXKKRXX-DZJOwgBG.js +0 -1
- package/server/rally-Dc2Wnxw2.js +0 -3
- package/server/record-pyB6VA32.js +0 -3
- package/server/recovery-trip-Dfh1tNHn.js +0 -98
- package/server/resolver-dTpSSzaH.js +0 -158
- package/server/resume-DhcIqsTm.js +0 -3
- package/server/settings-yydgaqhv.js +0 -2
- package/server/specs-DwoAEGrW.js +0 -3
- package/server/supervisor-DHjumXlL.js +0 -2
- package/server/tmux-x291Gjjb.js +0 -3
- package/server/token-util-xNaV-00f.js +0 -3
- package/server/tracker-config-DItsdelv.js +0 -3
- package/server/typed-errors-DSPn_xWP.js +0 -3
- package/server/validation-ict8hnXk.js +0 -3
- package/server/verification-runner-ATaLbpr5.js +0 -2
- package/server/workflows-tU7KKxQi.js +0 -2
- package/server/writer-CQMGzEkw.js +0 -3
- package/server/writer-fe1-8iGc.js +0 -251
|
@@ -0,0 +1,362 @@
|
|
|
1
|
+
import { Fn as init_projects, Gn as resolveInfraRepo, an as STATE_BRANCH_PATHS, cn as init_state_plane, dn as acquireStateMigrationLock, fn as init_state_migration_lock, kn as getProjectSync, nn as init_auto_commit, tn as flushAutoCommits } from "./config-yaml-CqaAyn8y.js";
|
|
2
|
+
import { l as stateWorktreePath, n as STATE_BRANCH, o as init_state_home, r as clearStateMigrationCache, t as MIGRATION_COMPLETE_MARKER } from "./state-home-Bur1y4oH.js";
|
|
3
|
+
import { dirname, join } from "node:path";
|
|
4
|
+
import { Effect } from "effect";
|
|
5
|
+
import { tmpdir } from "node:os";
|
|
6
|
+
import { copyFileSync, cpSync, existsSync, lstatSync, mkdirSync, readFileSync, readdirSync, renameSync, rmSync, writeFileSync } from "node:fs";
|
|
7
|
+
import { execFile } from "node:child_process";
|
|
8
|
+
import { promisify } from "node:util";
|
|
9
|
+
import { createHash } from "node:crypto";
|
|
10
|
+
//#region ../../lib/state-migration-manifest.ts
|
|
11
|
+
init_projects();
|
|
12
|
+
init_state_migration_lock();
|
|
13
|
+
init_state_plane();
|
|
14
|
+
init_auto_commit();
|
|
15
|
+
init_state_home();
|
|
16
|
+
function manifestEntry(source, destination) {
|
|
17
|
+
const stat = lstatSync(source);
|
|
18
|
+
const bytes = readFileSync(source);
|
|
19
|
+
return {
|
|
20
|
+
source,
|
|
21
|
+
destination,
|
|
22
|
+
mode: stat.mode & 511,
|
|
23
|
+
size: stat.size,
|
|
24
|
+
sha256: createHash("sha256").update(bytes).digest("hex")
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
function verifyStateMigrationManifest(entries) {
|
|
28
|
+
for (const expected of entries) {
|
|
29
|
+
const actual = manifestEntry(expected.destination, expected.destination);
|
|
30
|
+
if ((actual.mode & 64) !== (expected.mode & 64) || actual.size !== expected.size || actual.sha256 !== expected.sha256) throw new Error(`State migration no-loss mismatch: ${expected.source} -> ${expected.destination}`);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
//#endregion
|
|
34
|
+
//#region ../../cli/commands/admin/state-migrate.ts
|
|
35
|
+
const execFileAsync = promisify(execFile);
|
|
36
|
+
async function git(cwd, args, env) {
|
|
37
|
+
const { stdout } = await execFileAsync("git", args, {
|
|
38
|
+
cwd,
|
|
39
|
+
env: {
|
|
40
|
+
...process.env,
|
|
41
|
+
...env
|
|
42
|
+
},
|
|
43
|
+
encoding: "utf8",
|
|
44
|
+
maxBuffer: 32 * 1024 * 1024
|
|
45
|
+
});
|
|
46
|
+
return stdout.trim();
|
|
47
|
+
}
|
|
48
|
+
function destinationForTracked(path) {
|
|
49
|
+
if (!path.startsWith(".pan/")) return null;
|
|
50
|
+
const flat = path.slice(5);
|
|
51
|
+
return STATE_BRANCH_PATHS.some((prefix) => flat.startsWith(prefix)) ? flat : null;
|
|
52
|
+
}
|
|
53
|
+
async function trackedManifest(repo, sourceSha, stateRoot) {
|
|
54
|
+
return (await git(repo, [
|
|
55
|
+
"ls-tree",
|
|
56
|
+
"-r",
|
|
57
|
+
"--name-only",
|
|
58
|
+
sourceSha,
|
|
59
|
+
"--",
|
|
60
|
+
".pan"
|
|
61
|
+
])).split("\n").filter(Boolean).flatMap((path) => {
|
|
62
|
+
const destination = destinationForTracked(path);
|
|
63
|
+
if (!destination) return [];
|
|
64
|
+
const source = join(repo, path);
|
|
65
|
+
const target = join(stateRoot, destination);
|
|
66
|
+
if (!existsSync(target)) {
|
|
67
|
+
mkdirSync(dirname(target), { recursive: true });
|
|
68
|
+
copyFileSync(source, target);
|
|
69
|
+
}
|
|
70
|
+
return [manifestEntry(source, target)];
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
async function createOrphanStateCommit(repo, sourceSha) {
|
|
74
|
+
const index = join(tmpdir(), `overdeck-state-index-${process.pid}-${Date.now()}`);
|
|
75
|
+
const env = { GIT_INDEX_FILE: index };
|
|
76
|
+
try {
|
|
77
|
+
await git(repo, ["read-tree", "--empty"], env);
|
|
78
|
+
const rows = (await git(repo, [
|
|
79
|
+
"ls-tree",
|
|
80
|
+
"-r",
|
|
81
|
+
sourceSha,
|
|
82
|
+
"--",
|
|
83
|
+
".pan"
|
|
84
|
+
])).split("\n").filter(Boolean);
|
|
85
|
+
for (const row of rows) {
|
|
86
|
+
const match = row.match(/^(\d+)\s+\w+\s+([0-9a-f]+)\t(.+)$/);
|
|
87
|
+
if (!match) continue;
|
|
88
|
+
const destination = destinationForTracked(match[3]);
|
|
89
|
+
if (destination) await git(repo, [
|
|
90
|
+
"update-index",
|
|
91
|
+
"--add",
|
|
92
|
+
"--cacheinfo",
|
|
93
|
+
`${match[1]},${match[2]},${destination}`
|
|
94
|
+
], env);
|
|
95
|
+
}
|
|
96
|
+
return await git(repo, [
|
|
97
|
+
"commit-tree",
|
|
98
|
+
await git(repo, ["write-tree"], env),
|
|
99
|
+
"-m",
|
|
100
|
+
"chore(state): seed overdeck-state"
|
|
101
|
+
]);
|
|
102
|
+
} finally {
|
|
103
|
+
rmSync(index, { force: true });
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
function copyLegacyState(sourceRoot, stateRoot) {
|
|
107
|
+
const manifest = [];
|
|
108
|
+
for (const sourcePath of STATE_BRANCH_PATHS) {
|
|
109
|
+
const source = join(sourceRoot, ".pan", sourcePath);
|
|
110
|
+
if (!existsSync(source)) continue;
|
|
111
|
+
const destination = join(stateRoot, sourcePath);
|
|
112
|
+
cpSync(source, destination, {
|
|
113
|
+
recursive: true,
|
|
114
|
+
preserveTimestamps: true
|
|
115
|
+
});
|
|
116
|
+
const visit = (sourceDir, destinationDir) => {
|
|
117
|
+
for (const entry of readdirSync(sourceDir, { withFileTypes: true })) {
|
|
118
|
+
const sourceEntry = join(sourceDir, entry.name);
|
|
119
|
+
const destinationEntry = join(destinationDir, entry.name);
|
|
120
|
+
if (entry.isDirectory()) visit(sourceEntry, destinationEntry);
|
|
121
|
+
else if (entry.isFile()) manifest.push(manifestEntry(sourceEntry, destinationEntry));
|
|
122
|
+
}
|
|
123
|
+
};
|
|
124
|
+
visit(source, destination);
|
|
125
|
+
}
|
|
126
|
+
return manifest;
|
|
127
|
+
}
|
|
128
|
+
function hasNonStateDirtyState(porcelain) {
|
|
129
|
+
return porcelain.split("\n").filter(Boolean).some((line) => {
|
|
130
|
+
const path = line.slice(3).split(" -> ").at(-1) ?? "";
|
|
131
|
+
if (path === ".pan" || path.startsWith(".pan/")) return false;
|
|
132
|
+
return true;
|
|
133
|
+
});
|
|
134
|
+
}
|
|
135
|
+
function dedupeManifest(entries) {
|
|
136
|
+
return [...new Map(entries.map((entry) => [entry.destination, entry])).values()];
|
|
137
|
+
}
|
|
138
|
+
const GITIGNORE_MANAGED_LINES = [
|
|
139
|
+
"# PAN-2541: permanent state is on overdeck-state; workspace runtime stays local.",
|
|
140
|
+
".pan/",
|
|
141
|
+
".overdeck/continue.json",
|
|
142
|
+
".overdeck/spec.vbrief.json",
|
|
143
|
+
".overdeck/sessions.jsonl",
|
|
144
|
+
".overdeck/feedback/",
|
|
145
|
+
".overdeck/review/",
|
|
146
|
+
".overdeck/test/",
|
|
147
|
+
".overdeck/kickoff.md",
|
|
148
|
+
".overdeck/agent-mcp.json"
|
|
149
|
+
];
|
|
150
|
+
function rewriteGitignore(repo) {
|
|
151
|
+
const path = join(repo, ".gitignore");
|
|
152
|
+
const prior = existsSync(path) ? readFileSync(path, "utf8") : "";
|
|
153
|
+
const managed = new Set([...GITIGNORE_MANAGED_LINES, ".overdeck/"]);
|
|
154
|
+
const kept = prior.split("\n").filter((line) => !managed.has(line.trim()));
|
|
155
|
+
while (kept.length > 0 && kept[kept.length - 1]?.trim() === "") kept.pop();
|
|
156
|
+
writeFileSync(path, [
|
|
157
|
+
...kept,
|
|
158
|
+
"",
|
|
159
|
+
...GITIGNORE_MANAGED_LINES,
|
|
160
|
+
""
|
|
161
|
+
].join("\n"));
|
|
162
|
+
}
|
|
163
|
+
async function migrateProjectState(projectKey, options = {}, projectOverride) {
|
|
164
|
+
const project = projectOverride ?? getProjectSync(projectKey);
|
|
165
|
+
if (!project) throw new Error(`Unknown project: ${projectKey}`);
|
|
166
|
+
const { repoPath: repo } = resolveInfraRepo(project);
|
|
167
|
+
const legacyStateSource = project.path;
|
|
168
|
+
const sourceIsHostRepo = legacyStateSource === repo;
|
|
169
|
+
const stateRoot = stateWorktreePath(project, { projectKey });
|
|
170
|
+
console.log(`PAN-2541 state migration plan for ${projectKey}:`);
|
|
171
|
+
console.log(` ${legacyStateSource}/.pan/{${STATE_BRANCH_PATHS.map((p) => p.slice(0, -1)).join(",")}} -> ${stateRoot}/`);
|
|
172
|
+
console.log(` ${legacyStateSource}/.pan/context -> ${legacyStateSource}/.overdeck/context`);
|
|
173
|
+
if (options.dryRun) return;
|
|
174
|
+
const release = acquireStateMigrationLock(projectKey);
|
|
175
|
+
try {
|
|
176
|
+
await Effect.runPromise(flushAutoCommits(repo));
|
|
177
|
+
if (hasNonStateDirtyState(await git(repo, ["status", "--porcelain"]))) throw new Error("Primary checkout is dirty outside legacy state paths; migration refused before mutation");
|
|
178
|
+
await git(repo, [
|
|
179
|
+
"fetch",
|
|
180
|
+
"--prune",
|
|
181
|
+
"origin"
|
|
182
|
+
]);
|
|
183
|
+
const sourceMainSha = await git(repo, ["rev-parse", "main"]);
|
|
184
|
+
if (sourceMainSha !== await git(repo, ["rev-parse", "origin/main"])) throw new Error("main is not exactly at origin/main; migration refused");
|
|
185
|
+
if (await git(repo, ["show", `origin/overdeck-state:migration-complete.json`]).catch(() => "")) {
|
|
186
|
+
console.log("State migration already complete on origin; nothing to do.");
|
|
187
|
+
return;
|
|
188
|
+
}
|
|
189
|
+
let stateSha = await git(repo, ["rev-parse", STATE_BRANCH]).catch(() => "");
|
|
190
|
+
const remoteStateSha = await git(repo, ["rev-parse", `origin/${STATE_BRANCH}`]).catch(() => "");
|
|
191
|
+
if (stateSha && remoteStateSha && stateSha !== remoteStateSha) throw new Error("Local and remote overdeck-state diverged; refusing non-fast-forward migration");
|
|
192
|
+
if (!stateSha) {
|
|
193
|
+
stateSha = remoteStateSha || await createOrphanStateCommit(repo, sourceMainSha);
|
|
194
|
+
await git(repo, [
|
|
195
|
+
"update-ref",
|
|
196
|
+
`refs/heads/${STATE_BRANCH}`,
|
|
197
|
+
stateSha
|
|
198
|
+
]);
|
|
199
|
+
}
|
|
200
|
+
if (!remoteStateSha) await git(repo, [
|
|
201
|
+
"push",
|
|
202
|
+
"origin",
|
|
203
|
+
STATE_BRANCH
|
|
204
|
+
]);
|
|
205
|
+
if (!existsSync(stateRoot)) {
|
|
206
|
+
mkdirSync(dirname(stateRoot), { recursive: true });
|
|
207
|
+
await git(repo, [
|
|
208
|
+
"worktree",
|
|
209
|
+
"add",
|
|
210
|
+
stateRoot,
|
|
211
|
+
STATE_BRANCH
|
|
212
|
+
]);
|
|
213
|
+
}
|
|
214
|
+
const manifest = sourceIsHostRepo ? dedupeManifest([...await trackedManifest(repo, sourceMainSha, stateRoot), ...copyLegacyState(legacyStateSource, stateRoot)]) : copyLegacyState(legacyStateSource, stateRoot);
|
|
215
|
+
if (manifest.length > 0) {
|
|
216
|
+
await git(stateRoot, ["add", "--all"]);
|
|
217
|
+
if (await git(stateRoot, [
|
|
218
|
+
"diff",
|
|
219
|
+
"--cached",
|
|
220
|
+
"--name-only"
|
|
221
|
+
])) await git(stateRoot, [
|
|
222
|
+
"commit",
|
|
223
|
+
"-m",
|
|
224
|
+
"chore(state): seed legacy project state"
|
|
225
|
+
]);
|
|
226
|
+
await git(stateRoot, [
|
|
227
|
+
"push",
|
|
228
|
+
"origin",
|
|
229
|
+
STATE_BRANCH
|
|
230
|
+
]);
|
|
231
|
+
}
|
|
232
|
+
const untracked = sourceIsHostRepo ? (await git(repo, [
|
|
233
|
+
"ls-files",
|
|
234
|
+
"--others",
|
|
235
|
+
"--",
|
|
236
|
+
".pan"
|
|
237
|
+
])).split("\n").filter((path) => path.split("/").length === 2 && existsSync(join(repo, path)) && lstatSync(join(repo, path)).isFile()) : existsSync(join(legacyStateSource, ".pan")) ? readdirSync(join(legacyStateSource, ".pan"), { withFileTypes: true }).filter((entry) => entry.isFile()).map((entry) => `.pan/${entry.name}`) : [];
|
|
238
|
+
for (const path of untracked) {
|
|
239
|
+
if (!existsSync(join(legacyStateSource, path))) continue;
|
|
240
|
+
const destination = join(stateRoot, "notes", path.slice(5));
|
|
241
|
+
if (existsSync(destination)) {
|
|
242
|
+
if (!readFileSync(join(legacyStateSource, path)).equals(readFileSync(destination))) throw new Error(`Untracked-note destination collision: ${destination}`);
|
|
243
|
+
manifest.push(manifestEntry(join(legacyStateSource, path), destination));
|
|
244
|
+
continue;
|
|
245
|
+
}
|
|
246
|
+
mkdirSync(dirname(destination), { recursive: true });
|
|
247
|
+
copyFileSync(join(legacyStateSource, path), destination);
|
|
248
|
+
manifest.push(manifestEntry(join(legacyStateSource, path), destination));
|
|
249
|
+
}
|
|
250
|
+
if (untracked.length > 0) {
|
|
251
|
+
await git(stateRoot, ["add", "notes"]);
|
|
252
|
+
if (await git(stateRoot, [
|
|
253
|
+
"diff",
|
|
254
|
+
"--cached",
|
|
255
|
+
"--name-only"
|
|
256
|
+
])) await git(stateRoot, [
|
|
257
|
+
"commit",
|
|
258
|
+
"-m",
|
|
259
|
+
"chore(state): preserve untracked operator notes"
|
|
260
|
+
]);
|
|
261
|
+
await git(stateRoot, [
|
|
262
|
+
"push",
|
|
263
|
+
"origin",
|
|
264
|
+
STATE_BRANCH
|
|
265
|
+
]);
|
|
266
|
+
}
|
|
267
|
+
if (await git(repo, ["rev-parse", "main"]) !== sourceMainSha) throw new Error("main advanced during migration; refusing cleanup");
|
|
268
|
+
if (sourceIsHostRepo) await git(repo, [
|
|
269
|
+
"rm",
|
|
270
|
+
"-r",
|
|
271
|
+
"--cached",
|
|
272
|
+
"--ignore-unmatch",
|
|
273
|
+
".pan/records",
|
|
274
|
+
".pan/continues",
|
|
275
|
+
".pan/specs",
|
|
276
|
+
".pan/drafts",
|
|
277
|
+
".pan/review",
|
|
278
|
+
".pan/test",
|
|
279
|
+
".pan/feedback",
|
|
280
|
+
".pan/backlog",
|
|
281
|
+
".pan/notes"
|
|
282
|
+
]);
|
|
283
|
+
const oldContext = join(legacyStateSource, ".pan", "context");
|
|
284
|
+
const newContext = join(legacyStateSource, ".overdeck", "context");
|
|
285
|
+
let movedContext = false;
|
|
286
|
+
if (existsSync(oldContext) && !existsSync(newContext)) {
|
|
287
|
+
mkdirSync(dirname(newContext), { recursive: true });
|
|
288
|
+
renameSync(oldContext, newContext);
|
|
289
|
+
movedContext = true;
|
|
290
|
+
}
|
|
291
|
+
rewriteGitignore(legacyStateSource);
|
|
292
|
+
if (sourceIsHostRepo) {
|
|
293
|
+
if (await git(repo, [
|
|
294
|
+
"ls-files",
|
|
295
|
+
"--",
|
|
296
|
+
".pan/context"
|
|
297
|
+
])) await git(repo, [
|
|
298
|
+
"add",
|
|
299
|
+
"-u",
|
|
300
|
+
"--",
|
|
301
|
+
".pan/context"
|
|
302
|
+
]);
|
|
303
|
+
const addPaths = [".gitignore"];
|
|
304
|
+
if (movedContext || existsSync(newContext)) addPaths.push(".overdeck/context");
|
|
305
|
+
await git(repo, [
|
|
306
|
+
"add",
|
|
307
|
+
"--",
|
|
308
|
+
...addPaths
|
|
309
|
+
]);
|
|
310
|
+
if (await git(repo, [
|
|
311
|
+
"diff",
|
|
312
|
+
"--cached",
|
|
313
|
+
"--name-only"
|
|
314
|
+
])) await git(repo, [
|
|
315
|
+
"commit",
|
|
316
|
+
"-m",
|
|
317
|
+
"chore(state): move permanent state to overdeck-state"
|
|
318
|
+
]);
|
|
319
|
+
}
|
|
320
|
+
verifyStateMigrationManifest(manifest);
|
|
321
|
+
for (const entry of manifest) rmSync(entry.source, { force: true });
|
|
322
|
+
if (!sourceIsHostRepo) rmSync(join(legacyStateSource, ".pan"), {
|
|
323
|
+
recursive: true,
|
|
324
|
+
force: true
|
|
325
|
+
});
|
|
326
|
+
stateSha = await git(stateRoot, ["rev-parse", "HEAD"]);
|
|
327
|
+
writeFileSync(join(stateRoot, MIGRATION_COMPLETE_MARKER), `${JSON.stringify({
|
|
328
|
+
sourceMainSha,
|
|
329
|
+
stateBranchSha: stateSha,
|
|
330
|
+
completedAt: (/* @__PURE__ */ new Date()).toISOString(),
|
|
331
|
+
version: 1
|
|
332
|
+
}, null, 2)}\n`);
|
|
333
|
+
await git(stateRoot, ["add", MIGRATION_COMPLETE_MARKER]);
|
|
334
|
+
await git(stateRoot, [
|
|
335
|
+
"commit",
|
|
336
|
+
"-m",
|
|
337
|
+
"chore(state): complete state migration"
|
|
338
|
+
]);
|
|
339
|
+
await git(repo, [
|
|
340
|
+
"push",
|
|
341
|
+
"--atomic",
|
|
342
|
+
"--dry-run",
|
|
343
|
+
"origin",
|
|
344
|
+
"main",
|
|
345
|
+
STATE_BRANCH
|
|
346
|
+
]);
|
|
347
|
+
await git(repo, [
|
|
348
|
+
"push",
|
|
349
|
+
"--atomic",
|
|
350
|
+
"origin",
|
|
351
|
+
"main",
|
|
352
|
+
STATE_BRANCH
|
|
353
|
+
]);
|
|
354
|
+
clearStateMigrationCache();
|
|
355
|
+
} finally {
|
|
356
|
+
release();
|
|
357
|
+
}
|
|
358
|
+
}
|
|
359
|
+
//#endregion
|
|
360
|
+
export { migrateProjectState };
|
|
361
|
+
|
|
362
|
+
//# sourceMappingURL=state-migrate-D3VveYfO.js.map
|
|
@@ -1,16 +1,18 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import { n as CLAUDE_CODE_BEHAVIOR } from "./src-
|
|
4
|
-
import { c as init_review_status, s as getReviewStatusSync } from "./review-status-
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import { a as
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
11
|
-
import {
|
|
12
|
-
import {
|
|
13
|
-
import {
|
|
1
|
+
import { Fn as init_projects, Jr as getOverdeckHome, Sr as init_errors, Vr as encodeClaudeProjectDir, Yr as init_paths, fr as FsError, nr as extractPrefixSync, qn as resolveProjectFromIssueSync, rr as init_issue_id, yr as TmuxError } from "./config-yaml-CqaAyn8y.js";
|
|
2
|
+
import { E as killSessionSync, F as sendKeys, O as listPaneValuesSync, S as init_tmux, a as capturePaneSync, c as detectTerminalApiErrorSync, i as capturePane, z as sessionExistsSync } from "./tmux-U55cNGFG.js";
|
|
3
|
+
import { n as CLAUDE_CODE_BEHAVIOR } from "./src-By3D85Ry.js";
|
|
4
|
+
import { c as init_review_status, s as getReviewStatusSync } from "./review-status-DANr0t-v.js";
|
|
5
|
+
import { Fn as getAgentStateSync, K as createOhmypiRuntimeSync, L as messageAgent, M as resumeAgent, Un as markAgentTroubled, Y as spawnAgent, Yn as saveAgentStateSync, _t as init_config, a as listRunningAgentsSync, gr as saveAgentRuntimeState, ht as DEFAULT_CLOISTER_CONFIG, jn as getAgentDir, ln as determineModel, mr as getAgentRuntimeStateSync, pr as getAgentRuntimeState, q as init_ohmypi, s as init_agents, tn as init_pi_fifo, yt as loadCloisterConfigSync } from "./queries-C0LCGG21.js";
|
|
6
|
+
import { c as logDeaconEventSync, o as init_persistent_logger } from "./session-history-bnOFKMwf.js";
|
|
7
|
+
import { t as init_behavior } from "./behavior-CWqNMqE5.js";
|
|
8
|
+
import { a as init_tracker_config, t as getGitHubConfig } from "./tracker-config-OkdbaUCm.js";
|
|
9
|
+
import { m as readWorkspacePlanSync, o as init_io } from "./io-DkC4sFSy.js";
|
|
10
|
+
import { n as init_launcher_generator } from "./launcher-generator-BXLM9f4b.js";
|
|
11
|
+
import { i as createCodexRuntimeSync, l as init_codex } from "./codex-sgWVCGUd.js";
|
|
12
|
+
import { f as isFlywheelGloballyPaused, i as getFlywheelActiveRunId, s as init_control_settings } from "./control-settings-BguNQ1F_.js";
|
|
13
|
+
import { l as init_dag, o as getDispatchableItems } from "./dag-C6kYyF17.js";
|
|
14
|
+
import { a as init_jsonl_parser, i as getSessionFilesSync, r as getProjectDirsSync, s as parseClaudeSessionSync } from "./jsonl-parser-Cd5jIqh7.js";
|
|
15
|
+
import { t as recordRecoveryFailure } from "./recovery-trip-Cn7KJVkS.js";
|
|
14
16
|
import "node:path";
|
|
15
17
|
import { Effect } from "effect";
|
|
16
18
|
import { existsSync, mkdirSync, readFileSync, statSync, unlinkSync, writeFileSync } from "fs";
|
|
@@ -28,12 +30,13 @@ import "node:crypto";
|
|
|
28
30
|
init_paths();
|
|
29
31
|
init_issue_id();
|
|
30
32
|
init_projects();
|
|
31
|
-
init_review_status();
|
|
32
33
|
init_behavior();
|
|
33
34
|
init_persistent_logger();
|
|
35
|
+
init_review_status();
|
|
36
|
+
init_io();
|
|
34
37
|
init_codex();
|
|
35
38
|
init_launcher_generator();
|
|
36
|
-
|
|
39
|
+
init_dag();
|
|
37
40
|
init_agents();
|
|
38
41
|
init_tmux();
|
|
39
42
|
init_errors();
|
|
@@ -425,15 +428,19 @@ async function readFileTail(filePath, maxBytes) {
|
|
|
425
428
|
}
|
|
426
429
|
}
|
|
427
430
|
const ASK_USER_QUESTION_HOOK_DENY_MARKER = "PAN-1520";
|
|
431
|
+
const ASK_USER_QUESTION_HOOK_DENY_PHRASE = "surfaced to the operator in the Overdeck dashboard";
|
|
432
|
+
function isHookDenyText(text) {
|
|
433
|
+
return text.includes(ASK_USER_QUESTION_HOOK_DENY_MARKER) || text.includes(ASK_USER_QUESTION_HOOK_DENY_PHRASE);
|
|
434
|
+
}
|
|
428
435
|
function isAskUserQuestionHookDenyToolResult(item) {
|
|
429
436
|
if (item.is_error !== true) return false;
|
|
430
437
|
const content = item.content;
|
|
431
|
-
if (typeof content === "string") return content
|
|
438
|
+
if (typeof content === "string") return isHookDenyText(content);
|
|
432
439
|
if (Array.isArray(content)) return content.some((part) => {
|
|
433
|
-
if (typeof part === "string") return part
|
|
440
|
+
if (typeof part === "string") return isHookDenyText(part);
|
|
434
441
|
if (part && typeof part === "object" && "text" in part) {
|
|
435
442
|
const text = part.text;
|
|
436
|
-
return typeof text === "string" && text
|
|
443
|
+
return typeof text === "string" && isHookDenyText(text);
|
|
437
444
|
}
|
|
438
445
|
return false;
|
|
439
446
|
});
|
|
@@ -474,6 +481,7 @@ async function scanPendingInputsPromise(jsonlPath) {
|
|
|
474
481
|
const askAnswered = /* @__PURE__ */ new Set();
|
|
475
482
|
const askDeniedAwaitingUser = /* @__PURE__ */ new Set();
|
|
476
483
|
const exitPlanModeIds = /* @__PURE__ */ new Set();
|
|
484
|
+
const exitPlanModeCalls = /* @__PURE__ */ new Map();
|
|
477
485
|
const exitPlanModeAnswered = /* @__PURE__ */ new Set();
|
|
478
486
|
const enterPlanModeIds = /* @__PURE__ */ new Set();
|
|
479
487
|
const exitPlanModeFiredAfterEnter = /* @__PURE__ */ new Set();
|
|
@@ -495,6 +503,10 @@ async function scanPendingInputsPromise(jsonlPath) {
|
|
|
495
503
|
else if (item.name === "ExitPlanMode" && typeof item.id === "string") {
|
|
496
504
|
exitPlanModeIds.add(item.id);
|
|
497
505
|
exitPlanModeFiredAfterEnter.add(item.id);
|
|
506
|
+
if (typeof item.input?.plan === "string" && item.input.plan.trim()) exitPlanModeCalls.set(item.id, {
|
|
507
|
+
plan: item.input.plan,
|
|
508
|
+
timestamp: entry.timestamp || (/* @__PURE__ */ new Date()).toISOString()
|
|
509
|
+
});
|
|
498
510
|
} else if (item.name === "EnterPlanMode" && typeof item.id === "string") enterPlanModeIds.add(item.id);
|
|
499
511
|
}
|
|
500
512
|
if (item.type === "tool_result" && typeof item.tool_use_id === "string") {
|
|
@@ -508,11 +520,19 @@ async function scanPendingInputsPromise(jsonlPath) {
|
|
|
508
520
|
}
|
|
509
521
|
} catch {}
|
|
510
522
|
const askUserQuestions = Array.from(askToolCalls.entries()).filter(([id]) => !askAnswered.has(id)).map(([, question]) => question);
|
|
511
|
-
const
|
|
523
|
+
const pendingExitPlanId = Array.from(exitPlanModeIds).find((id) => !exitPlanModeAnswered.has(id));
|
|
524
|
+
const exitPlanModePending = pendingExitPlanId !== void 0;
|
|
525
|
+
const pendingCall = pendingExitPlanId ? exitPlanModeCalls.get(pendingExitPlanId) : void 0;
|
|
526
|
+
const pendingProposedPlan = pendingExitPlanId && pendingCall ? {
|
|
527
|
+
toolUseId: pendingExitPlanId,
|
|
528
|
+
askedAt: pendingCall.timestamp,
|
|
529
|
+
plan: pendingCall.plan
|
|
530
|
+
} : void 0;
|
|
512
531
|
return {
|
|
513
532
|
askUserQuestions,
|
|
514
533
|
enterPlanModeOpen: enterPlanModeIds.size > 0 && exitPlanModeFiredAfterEnter.size === 0,
|
|
515
|
-
exitPlanModePending
|
|
534
|
+
exitPlanModePending,
|
|
535
|
+
...pendingProposedPlan ? { pendingProposedPlan } : {}
|
|
516
536
|
};
|
|
517
537
|
} catch {
|
|
518
538
|
return {
|
|
@@ -544,6 +564,7 @@ async function computeAgentEnrichmentPromise(agentId, startedAt, hasActiveSpecia
|
|
|
544
564
|
let pendingQuestions = [];
|
|
545
565
|
let enterPlanModeOpen = false;
|
|
546
566
|
let exitPlanModePending = false;
|
|
567
|
+
let scannedProposedPlan;
|
|
547
568
|
if (!skipJsonlScan) {
|
|
548
569
|
const jsonlPath = await Effect.runPromise(getAgentJsonlPath(agentId));
|
|
549
570
|
if (jsonlPath) {
|
|
@@ -551,6 +572,7 @@ async function computeAgentEnrichmentPromise(agentId, startedAt, hasActiveSpecia
|
|
|
551
572
|
pendingQuestions = [...scan.askUserQuestions];
|
|
552
573
|
enterPlanModeOpen = scan.enterPlanModeOpen;
|
|
553
574
|
exitPlanModePending = scan.exitPlanModePending;
|
|
575
|
+
scannedProposedPlan = scan.pendingProposedPlan;
|
|
554
576
|
}
|
|
555
577
|
if (pendingQuestions.length > 0 && startedAt) {
|
|
556
578
|
const agentStartTime = new Date(startedAt).getTime();
|
|
@@ -600,6 +622,7 @@ async function computeAgentEnrichmentPromise(agentId, startedAt, hasActiveSpecia
|
|
|
600
622
|
if (enterPlanModeOpen && !exitPlanModePending) pendingInputKinds.push("enterPlanMode");
|
|
601
623
|
appendPaneDetectionKind(detection, pendingInputKinds);
|
|
602
624
|
}
|
|
625
|
+
const pendingProposedPlan = !shouldSuppressPendingInput && exitPlanModePending ? scannedProposedPlan : void 0;
|
|
603
626
|
return {
|
|
604
627
|
role,
|
|
605
628
|
hasPendingQuestion,
|
|
@@ -609,6 +632,7 @@ async function computeAgentEnrichmentPromise(agentId, startedAt, hasActiveSpecia
|
|
|
609
632
|
pendingInputCount: pendingInputKinds.length,
|
|
610
633
|
pendingInputKinds,
|
|
611
634
|
pendingAskUserQuestion,
|
|
635
|
+
pendingProposedPlan,
|
|
612
636
|
resolution: runtimeState?.resolution || "working",
|
|
613
637
|
resolutionCount: runtimeState?.resolutionCount || 0
|
|
614
638
|
};
|
|
@@ -1198,7 +1222,7 @@ async function evaluateWedgedReworkAgent(agent, config, now, actions) {
|
|
|
1198
1222
|
markAgentTroubled(agentId);
|
|
1199
1223
|
writeStuckRemediationState(agentId, stageState(3, now, firstStuck));
|
|
1200
1224
|
logAction(actions, transitionAction(3, issueId, idleMinutes, "rework-wedge-troubled"));
|
|
1201
|
-
surfaceStuckNeedsYou(agent, issueId, firstStuck, actions);
|
|
1225
|
+
await surfaceStuckNeedsYou(agent, issueId, firstStuck, actions);
|
|
1202
1226
|
return true;
|
|
1203
1227
|
}
|
|
1204
1228
|
killSessionSync(agentId);
|
|
@@ -1206,9 +1230,6 @@ async function evaluateWedgedReworkAgent(agent, config, now, actions) {
|
|
|
1206
1230
|
logAction(actions, transitionAction(3, issueId, idleMinutes, "killed-for-respawn"));
|
|
1207
1231
|
return true;
|
|
1208
1232
|
}
|
|
1209
|
-
function hasReadyBeads(readyByQueryRoot, agent, issueLabel) {
|
|
1210
|
-
return (readyByQueryRoot.get(resolveBeadsQueryRoot(agent.workspace))?.[issueLabel] ?? []).length > 0;
|
|
1211
|
-
}
|
|
1212
1233
|
function shouldCheckReadyBeadsForAgent(agent, now) {
|
|
1213
1234
|
const agentId = agent.id;
|
|
1214
1235
|
if (!agentId) return false;
|
|
@@ -1241,11 +1262,11 @@ function logAction(actions, action) {
|
|
|
1241
1262
|
console.log(action);
|
|
1242
1263
|
logDeaconEventSync(action);
|
|
1243
1264
|
}
|
|
1244
|
-
function surfaceStuckNeedsYou(agent, issueId, generation, actions) {
|
|
1265
|
+
async function surfaceStuckNeedsYou(agent, issueId, generation, actions) {
|
|
1245
1266
|
if (!agent.workspace) return;
|
|
1246
|
-
if (recordRecoveryFailure(agent.workspace, issueId, "stuck-remediation", generation, 1).emitNeedsYou) logAction(actions, `[deacon] needs-you ${issueId}: stuck remediation exhausted`);
|
|
1267
|
+
if ((await recordRecoveryFailure(agent.workspace, issueId, "stuck-remediation", generation, 1)).emitNeedsYou) logAction(actions, `[deacon] needs-you ${issueId}: stuck remediation exhausted`);
|
|
1247
1268
|
}
|
|
1248
|
-
async function evaluateAgent(agent, config, now, actions
|
|
1269
|
+
async function evaluateAgent(agent, config, now, actions) {
|
|
1249
1270
|
const agentId = agent.id;
|
|
1250
1271
|
if (!agentId) return;
|
|
1251
1272
|
if (agent.status !== "running") return;
|
|
@@ -1264,7 +1285,9 @@ async function evaluateAgent(agent, config, now, actions, readyByQueryRoot) {
|
|
|
1264
1285
|
if (!shouldCheckReadyBeadsForAgent(agent, now)) return;
|
|
1265
1286
|
if (!agent.workspace) return;
|
|
1266
1287
|
const issueId = issueIdForAgent(agent);
|
|
1267
|
-
|
|
1288
|
+
const plan = readWorkspacePlanSync(agent.workspace);
|
|
1289
|
+
if (!plan) return;
|
|
1290
|
+
if (getDispatchableItems(plan, /* @__PURE__ */ new Set()).length > 0) return;
|
|
1268
1291
|
const lastActivityMs = getAgentEffectiveLastActivityMs(agentId);
|
|
1269
1292
|
if (lastActivityMs === null) return;
|
|
1270
1293
|
if (!Number.isFinite(lastActivityMs)) return;
|
|
@@ -1280,11 +1303,19 @@ async function evaluateAgent(agent, config, now, actions, readyByQueryRoot) {
|
|
|
1280
1303
|
const idleMinutes = Math.floor((now - lastActivityMs) / 6e4);
|
|
1281
1304
|
const lastStage = stuckState?.lastStage ?? 0;
|
|
1282
1305
|
const firstStuck = firstStuckAt(lastActivity, stuckState);
|
|
1306
|
+
const terminalProviderError = detectTerminalApiErrorSync(capturePaneSync(agentId, 80));
|
|
1307
|
+
if (terminalProviderError) {
|
|
1308
|
+
markAgentTroubled(agentId);
|
|
1309
|
+
writeStuckRemediationState(agentId, stageState(3, now, firstStuck));
|
|
1310
|
+
logAction(actions, `${agentId} provider-terminal: ${terminalProviderError.summary}`);
|
|
1311
|
+
await surfaceStuckNeedsYou(agent, issueId, firstStuck, actions);
|
|
1312
|
+
return;
|
|
1313
|
+
}
|
|
1283
1314
|
if (idleMinutes >= config.stage3_minutes && lastStage < 3) {
|
|
1284
1315
|
markAgentTroubled(agentId);
|
|
1285
1316
|
writeStuckRemediationState(agentId, stageState(3, now, firstStuck));
|
|
1286
1317
|
logAction(actions, transitionAction(3, issueId, idleMinutes, "marked-troubled"));
|
|
1287
|
-
surfaceStuckNeedsYou(agent, issueId, firstStuck, actions);
|
|
1318
|
+
await surfaceStuckNeedsYou(agent, issueId, firstStuck, actions);
|
|
1288
1319
|
return;
|
|
1289
1320
|
}
|
|
1290
1321
|
if (idleMinutes >= config.stage2_minutes && lastStage < 2) {
|
|
@@ -1368,7 +1399,7 @@ async function remediateFlywheelOrchestrator(agentId, now, actions, reason) {
|
|
|
1368
1399
|
now
|
|
1369
1400
|
});
|
|
1370
1401
|
if (decision.kind === "noop") return;
|
|
1371
|
-
const { resumeFlywheel, pauseFlywheel } = await import("./flywheel-
|
|
1402
|
+
const { resumeFlywheel, pauseFlywheel } = await import("./flywheel-BUWdcfhq.js");
|
|
1372
1403
|
const prev = readStuckRemediationState(agentId);
|
|
1373
1404
|
const nowIso = new Date(now).toISOString();
|
|
1374
1405
|
if (decision.kind === "escalate") {
|
|
@@ -1451,25 +1482,11 @@ async function checkStuckAgentRemediation(opts = {}) {
|
|
|
1451
1482
|
const actions = [];
|
|
1452
1483
|
const now = opts.now ?? Date.now();
|
|
1453
1484
|
const runningAgents = listRunningAgentsSync();
|
|
1454
|
-
const readyByQueryRoot = /* @__PURE__ */ new Map();
|
|
1455
|
-
const workAgentsByQueryRoot = /* @__PURE__ */ new Map();
|
|
1456
1485
|
let sawFlywheelOrchestrator = false;
|
|
1457
|
-
for (const agent of runningAgents) {
|
|
1458
|
-
if (!shouldCheckReadyBeadsForAgent(agent, now)) continue;
|
|
1459
|
-
const queryRoot = resolveBeadsQueryRoot(agent.workspace);
|
|
1460
|
-
const workspaceAgents = workAgentsByQueryRoot.get(queryRoot) ?? [];
|
|
1461
|
-
workspaceAgents.push(agent);
|
|
1462
|
-
workAgentsByQueryRoot.set(queryRoot, workspaceAgents);
|
|
1463
|
-
}
|
|
1464
|
-
for (const [queryRoot, workspaceAgents] of workAgentsByQueryRoot) {
|
|
1465
|
-
const issueIds = workspaceAgents.map(issueIdForAgent);
|
|
1466
|
-
const ready = await Effect.runPromise(queryReadyBeadsByIssueLabels(queryRoot, issueIds, { acquisitionTimeoutMs: 500 }));
|
|
1467
|
-
readyByQueryRoot.set(queryRoot, ready.byIssue);
|
|
1468
|
-
}
|
|
1469
1486
|
for (const agent of runningAgents) {
|
|
1470
1487
|
if (agent.id === FLYWHEEL_ORCHESTRATOR_AGENT_ID || agent.role === "flywheel") sawFlywheelOrchestrator = true;
|
|
1471
1488
|
try {
|
|
1472
|
-
await evaluateAgent(agent, config, now, actions
|
|
1489
|
+
await evaluateAgent(agent, config, now, actions);
|
|
1473
1490
|
} catch (error) {
|
|
1474
1491
|
const message = `[deacon] stuck-remediation agent=${agent.id || "(unknown)"} error=${error instanceof Error ? error.message : String(error)}`;
|
|
1475
1492
|
console.error(message, error);
|
|
@@ -1488,4 +1505,4 @@ async function checkStuckAgentRemediation(opts = {}) {
|
|
|
1488
1505
|
//#endregion
|
|
1489
1506
|
export { parseCodexApprovalPrompt as _, isAgentIdleForNudge as a, countPendingAskUserQuestionsForAgent as c, getAgentPendingQuestions as d, getAgentWorkspace as f, normalizeAwaitingInputPrompt as g, detectAwaitingInputFromPaneSync as h, shouldSkipReviewStatus as i, getAgentJsonlMtime as l, detectAwaitingInputForAgent as m, decideFlywheelRemediation as n, getRuntimeForAgent as o, scanPendingInputsPromise as p, shouldSkipIdlePokeForAgent as r, computeAgentEnrichment as s, checkStuckAgentRemediation as t, getAgentJsonlPath as u };
|
|
1490
1507
|
|
|
1491
|
-
//# sourceMappingURL=stuck-remediation-
|
|
1508
|
+
//# sourceMappingURL=stuck-remediation-B699-p8v.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { r as shouldSkipIdlePokeForAgent } from "./stuck-remediation-
|
|
1
|
+
import { r as shouldSkipIdlePokeForAgent } from "./stuck-remediation-B699-p8v.js";
|
|
2
2
|
export { shouldSkipIdlePokeForAgent };
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import "./smart-compaction-
|
|
2
|
-
import { a as generateFallbackSummary, l as init_summary_fork } from "./summary-fork-
|
|
1
|
+
import "./smart-compaction-CmoXpjeU.js";
|
|
2
|
+
import { a as generateFallbackSummary, l as init_summary_fork } from "./summary-fork-COqYpVa3.js";
|
|
3
3
|
init_summary_fork();
|
|
4
4
|
export { generateFallbackSummary };
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { n as __esmMin } from "./rolldown-runtime-DNCzzKnI.js";
|
|
2
|
-
import {
|
|
3
|
-
import { St as deliverAgentMessage,
|
|
4
|
-
import { k as init_conversations } from "./conversations-
|
|
5
|
-
import { a as init_stack_health, i as getWorkspaceStackHealth } from "./stack-health-
|
|
6
|
-
import { a as runModelSummary, i as parseEntries, o as serializeConversation, r as init_smart_compaction, s as summarizeSerializedText, t as generateSmartSummary } from "./smart-compaction-
|
|
2
|
+
import { $r as sessionFilePath, Kr as getHandoffsDir, Sr as init_errors, Yr as init_paths, Zr as packageRoot, f as loadConfigSync, fr as FsError, t as init_config_yaml } from "./config-yaml-CqaAyn8y.js";
|
|
3
|
+
import { St as deliverAgentMessage, s as init_agents } from "./queries-C0LCGG21.js";
|
|
4
|
+
import { k as init_conversations } from "./conversations-BX5aD-6F.js";
|
|
5
|
+
import { a as init_stack_health, i as getWorkspaceStackHealth } from "./stack-health-C-SnpRHh.js";
|
|
6
|
+
import { a as runModelSummary, i as parseEntries, o as serializeConversation, r as init_smart_compaction, s as summarizeSerializedText, t as generateSmartSummary } from "./smart-compaction-CmoXpjeU.js";
|
|
7
7
|
import { join } from "node:path";
|
|
8
8
|
import { Effect } from "effect";
|
|
9
9
|
import { join as join$1 } from "path";
|
|
@@ -442,11 +442,11 @@ async function generateSummaryForFork(jsonlPath, summaryModel, includeThinkingIn
|
|
|
442
442
|
}
|
|
443
443
|
}
|
|
444
444
|
async function reserveSummaryForkSessionPromise(cwd) {
|
|
445
|
-
const { reserveForkSession } = await import("./session-fork-
|
|
445
|
+
const { reserveForkSession } = await import("./session-fork-DlEIAhRy.js");
|
|
446
446
|
return reserveForkSession(cwd);
|
|
447
447
|
}
|
|
448
448
|
async function copySessionFromCompactBoundaryPromise(sourcePath, destPath) {
|
|
449
|
-
const { copySessionForFork } = await import("./session-fork-
|
|
449
|
+
const { copySessionForFork } = await import("./session-fork-DlEIAhRy.js");
|
|
450
450
|
return copySessionForFork(sourcePath, destPath, { fullHistory: false });
|
|
451
451
|
}
|
|
452
452
|
/** Effect variant of generateFallbackSummary. */
|
|
@@ -521,4 +521,4 @@ var init_summary_fork = __esmMin((() => {
|
|
|
521
521
|
//#endregion
|
|
522
522
|
export { init_transcript_adapter as _, generateFallbackSummary as a, handoffPreconditionFallbackReason as c, prependFallbackFocus as d, requestHandoffFromAgent as f, getTranscriptAdapter as g, validateHandoffDoc as h, copySessionFromCompactBoundary as i, init_summary_fork as l, sanitizeHandoffDoc as m, HandoffValidationError as n, generateSummaryForFork as o, reserveSummaryForkSession as p, authorHandoffExternal as r, handoffFailureReason as s, HandoffStallError as t, logHandoffFallback as u };
|
|
523
523
|
|
|
524
|
-
//# sourceMappingURL=summary-fork-
|
|
524
|
+
//# sourceMappingURL=summary-fork-COqYpVa3.js.map
|