@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
|
@@ -27,8 +27,8 @@ MAG='\033[35m'; RED='\033[31m'; WHT='\033[37m'
|
|
|
27
27
|
# Helper: format token count
|
|
28
28
|
fmt() {
|
|
29
29
|
local n=${1:-0}
|
|
30
|
-
if (( n >= 1000000 )); then printf "%.1fM"
|
|
31
|
-
elif (( n >= 1000 )); then printf "%.1fk"
|
|
30
|
+
if (( n >= 1000000 )); then awk -v n="$n" 'BEGIN { printf "%.1fM", n / 1000000 }'
|
|
31
|
+
elif (( n >= 1000 )); then awk -v n="$n" 'BEGIN { printf "%.1fk", n / 1000 }'
|
|
32
32
|
else echo "$n"; fi
|
|
33
33
|
}
|
|
34
34
|
|
|
@@ -356,8 +356,7 @@ $OUTPUT
|
|
|
356
356
|
</terminal_output>
|
|
357
357
|
|
|
358
358
|
Decide FORGOT_COMPLETION if ANY of these are true AND the transcript does NOT show a 'pan work done' Bash invocation in the tail:
|
|
359
|
-
- the agent wrote a summary/wrap-up message ('all tests pass', 'implementation complete', 'all
|
|
360
|
-
- the agent closed beads or ran 'bd close' and finished with a prompt
|
|
359
|
+
- the agent wrote a summary/wrap-up message ('all tests pass', 'implementation complete', 'all vBRIEF tasks closed', 'ready for review', etc.) and then stopped
|
|
361
360
|
- the agent committed + pushed and the last message is a status summary instead of a pan-work-done command
|
|
362
361
|
|
|
363
362
|
Decide STILL_WORKING only if the tail clearly shows an in-progress task (mid-edit, running tests, reading files) with no wrap-up summary.
|
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
import { n as __esmMin } from "./rolldown-runtime-DNCzzKnI.js";
|
|
2
|
-
import { b as init_types, o as init_io, x as subItemsOf } from "./io-BiQ2Cs3k.js";
|
|
3
|
-
import "effect";
|
|
4
|
-
//#region ../../lib/vbrief/acceptance-criteria.ts
|
|
5
|
-
/**
|
|
6
|
-
* Extract AC from an already-loaded document (avoids re-reading the file).
|
|
7
|
-
*/
|
|
8
|
-
function isDeferredOrCancelledItem(item) {
|
|
9
|
-
const status = String(item.status);
|
|
10
|
-
return status === "cancelled" || status === "deferred" || item.metadata?.deferred === true;
|
|
11
|
-
}
|
|
12
|
-
function extractACFromDocument(doc) {
|
|
13
|
-
const criteria = [];
|
|
14
|
-
for (const item of doc.plan.items) {
|
|
15
|
-
if (isDeferredOrCancelledItem(item)) continue;
|
|
16
|
-
for (const sub of subItemsOf(item)) if (sub.metadata?.kind === "acceptance_criterion") criteria.push({
|
|
17
|
-
itemId: item.id,
|
|
18
|
-
itemTitle: item.title,
|
|
19
|
-
subItemId: sub.id,
|
|
20
|
-
title: sub.title,
|
|
21
|
-
status: sub.status
|
|
22
|
-
});
|
|
23
|
-
}
|
|
24
|
-
return criteria;
|
|
25
|
-
}
|
|
26
|
-
var init_acceptance_criteria = __esmMin((() => {
|
|
27
|
-
init_io();
|
|
28
|
-
init_types();
|
|
29
|
-
}));
|
|
30
|
-
//#endregion
|
|
31
|
-
export { init_acceptance_criteria as n, extractACFromDocument as t };
|
|
32
|
-
|
|
33
|
-
//# sourceMappingURL=acceptance-criteria-DHZk2ceV.js.map
|
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
import { n as __esmMin } from "./rolldown-runtime-DNCzzKnI.js";
|
|
2
|
-
import { Effect } from "effect";
|
|
3
|
-
//#region ../../lib/agent-runtime-mirror.ts
|
|
4
|
-
/**
|
|
5
|
-
* PAN-800 — in-process mirror of AgentStateService's canonical ref.
|
|
6
|
-
*
|
|
7
|
-
* The dashboard server writes into this mirror on every event fold so lib code
|
|
8
|
-
* running in the same process can read the latest AgentRuntimeSnapshot.
|
|
9
|
-
* CLI/out-of-process callers should prefer the async HTTP path in agent-runtime.ts.
|
|
10
|
-
*
|
|
11
|
-
* All exports are Effect-native (PAN-1249 wave-1 migration).
|
|
12
|
-
*/
|
|
13
|
-
function markAgentStateServiceInProcess() {
|
|
14
|
-
return Effect.sync(() => {
|
|
15
|
-
inProcessService = true;
|
|
16
|
-
});
|
|
17
|
-
}
|
|
18
|
-
function isAgentStateServiceInProcess() {
|
|
19
|
-
return Effect.sync(() => inProcessService);
|
|
20
|
-
}
|
|
21
|
-
function setAgentRuntimeMirror(next) {
|
|
22
|
-
return Effect.sync(() => {
|
|
23
|
-
mirror = next;
|
|
24
|
-
});
|
|
25
|
-
}
|
|
26
|
-
function getRuntimeSnapshot(agentId) {
|
|
27
|
-
return Effect.sync(() => mirror[agentId] ?? null);
|
|
28
|
-
}
|
|
29
|
-
var mirror, inProcessService;
|
|
30
|
-
var init_agent_runtime_mirror = __esmMin((() => {
|
|
31
|
-
mirror = {};
|
|
32
|
-
inProcessService = false;
|
|
33
|
-
}));
|
|
34
|
-
//#endregion
|
|
35
|
-
export { setAgentRuntimeMirror as a, markAgentStateServiceInProcess as i, init_agent_runtime_mirror as n, isAgentStateServiceInProcess as r, getRuntimeSnapshot as t };
|
|
36
|
-
|
|
37
|
-
//# sourceMappingURL=agent-runtime-mirror-DrWxopNA.js.map
|
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
import { Dn as clearAgentTroubledSync, Fn as init_agent_state, Pn as getAgentStateSync, Tn as clearAgentPausedSync, Xn as setAgentPausedSync } from "./agents-CsOzAmRg.js";
|
|
2
|
-
init_agent_state();
|
|
3
|
-
export { clearAgentPausedSync, clearAgentTroubledSync, getAgentStateSync, setAgentPausedSync };
|
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
import { $ as warnOnBareNumericIssueIds, $n as writeAgentStateJsonSync, $t as waitForPromptReady, An as getAgentDir, Bn as markAgentRunningState, C as restartAgent, Cn as __testInternals, Ct as deliverAgentPermissionDecision, Dn as clearAgentTroubledSync, E as resumeAgent, En as clearAgentTroubled, Et as setAgentDeliveryMethod, F as getActivity, Gt as getAgentRuntimeBaseCommand, Hn as markAgentTroubled, I as getLatestSessionId, In as isAgentPaused, It as retrieveSpawnTimeMemoryContext, J as dropLegacyAgentStatesMissingRoleAsync, Jn as saveAgentStateSync, Jt as getProviderAuthMode, K as stopAgent, Kn as resetAgentFailureCount, L as getLatestSessionIdSync, Ln as isAgentTroubled, Lt as transitionIssueToInProgress, Mn as getAgentState, Mt as assertWorkspaceStackHealthyForSpawn, Nn as getAgentStateFilePath, Nt as buildAgentLaunchConfig, On as clearYieldForResumeSync, P as appendActivity, Pn as getAgentStateSync, Q as listRunningAgentsSync, Qn as wipeAgentStateDirs, Qt as roleAgentDefinitionPath, R as getSessionId, Rn as isRole, Rt as transitionIssueToInReview, S as recoverAgent, Sn as SESSION_EXITED_BEFORE_KICKOFF, St as deliverAgentMessage, Tn as clearAgentPausedSync, Tt as deliverResumeMessageWithTranscriptConfirmation, U as spawnAgent, Un as recordAgentFailure, Ut as OHMYPI_AGENT_READY_TIMEOUT_SECONDS, Vn as markAgentStoppedState, W as spawnRun, Wn as recordAgentFailureSync, Wt as describeOhmypiSpawnFailure, X as listAgentStates, Xn as setAgentPausedSync, Yn as setAgentPaused, Yt as getRoleRuntimeBaseCommand, Z as listRunningAgents, Zn as setAgentYieldedSync, Zt as injectPiConversationMemory, _n as decideChannelsForWorkAgent, a as replayStandingAgent, b as autoRecoverAgents, bn as writeChannelsBridgeMcpConfig, cn as determineModel, dn as getProviderTmuxFlags, dr as normalizeAgentId, fr as resolveAgentTargetSync, gn as buildDefaultResumeContinueMessage, gr as getAgentRuntimeStateSync, hr as getAgentRuntimeState, i as replayCrashedStandingAgent, j as messageAgent, ln as getProviderEnvForModel, lr as clearReadySignal, mr as waitForReadySignal, n as compactAtTierRunBoundary, o as shouldReplayCompactAtTierRunBoundary, on as buildCavemanExports, pr as waitForAgentIdle, q as stopAgentSync, qn as saveAgentState, r as contextWindowForModel, sn as buildSpawnEnvForModel, t as init_agents, un as getProviderExportsForModel, ur as isQualifiedAgentId, vn as decideSupervisorForWorkAgent, vr as saveAgentRuntimeState, w as buildCompactRecoverySeed, wn as clearAgentPaused, wt as deliverInitialPromptWithRetry, x as detectCrashedAgents, xn as GOVERNOR_SLOT_PAUSE_REASON_PREFIX, yn as dismissDevChannelsDialog, z as saveSessionId } from "./agents-CsOzAmRg.js";
|
|
2
|
-
init_agents();
|
|
3
|
-
export { GOVERNOR_SLOT_PAUSE_REASON_PREFIX, OHMYPI_AGENT_READY_TIMEOUT_SECONDS, SESSION_EXITED_BEFORE_KICKOFF, __testInternals, appendActivity, assertWorkspaceStackHealthyForSpawn, autoRecoverAgents, buildAgentLaunchConfig, buildCavemanExports, buildCompactRecoverySeed, buildDefaultResumeContinueMessage, buildSpawnEnvForModel, clearAgentPaused, clearAgentPausedSync, clearAgentTroubled, clearAgentTroubledSync, clearReadySignal, clearYieldForResumeSync, compactAtTierRunBoundary, contextWindowForModel, decideChannelsForWorkAgent, decideSupervisorForWorkAgent, deliverAgentMessage, deliverAgentPermissionDecision, deliverInitialPromptWithRetry, deliverResumeMessageWithTranscriptConfirmation, describeOhmypiSpawnFailure, detectCrashedAgents, determineModel, dismissDevChannelsDialog, dropLegacyAgentStatesMissingRoleAsync, getActivity, getAgentDir, getAgentRuntimeBaseCommand, getAgentRuntimeState, getAgentRuntimeStateSync, getAgentState, getAgentStateFilePath, getAgentStateSync, getLatestSessionId, getLatestSessionIdSync, getProviderAuthMode, getProviderEnvForModel, getProviderExportsForModel, getProviderTmuxFlags, getRoleRuntimeBaseCommand, getSessionId, injectPiConversationMemory, isAgentPaused, isAgentTroubled, isQualifiedAgentId, isRole, listAgentStates, listRunningAgents, listRunningAgentsSync, markAgentRunningState, markAgentStoppedState, markAgentTroubled, messageAgent, normalizeAgentId, recordAgentFailure, recordAgentFailureSync, recoverAgent, replayCrashedStandingAgent, replayStandingAgent, resetAgentFailureCount, resolveAgentTargetSync, restartAgent, resumeAgent, retrieveSpawnTimeMemoryContext, roleAgentDefinitionPath, saveAgentRuntimeState, saveAgentState, saveAgentStateSync, saveSessionId, setAgentDeliveryMethod, setAgentPaused, setAgentPausedSync, setAgentYieldedSync, shouldReplayCompactAtTierRunBoundary, spawnAgent, spawnRun, stopAgent, stopAgentSync, transitionIssueToInProgress, transitionIssueToInReview, waitForAgentIdle, waitForPromptReady, waitForReadySignal, warnOnBareNumericIssueIds, wipeAgentStateDirs, writeAgentStateJsonSync, writeChannelsBridgeMcpConfig };
|
|
@@ -1,390 +0,0 @@
|
|
|
1
|
-
import { n as __esmMin } from "./rolldown-runtime-DNCzzKnI.js";
|
|
2
|
-
import { Kr as getOverdeckHome, Pn as init_projects, mn as resolveStateReadHomeSync, pn as init_state_read_home, qr as init_paths, xn as findProjectByPathSync } from "./config-yaml-Dcz-8uit.js";
|
|
3
|
-
import { dirname, isAbsolute, join, resolve } from "node:path";
|
|
4
|
-
import { Data } from "effect";
|
|
5
|
-
import "node:fs";
|
|
6
|
-
import { mkdir, open, readFile, realpath, unlink } from "node:fs/promises";
|
|
7
|
-
import { createHash } from "node:crypto";
|
|
8
|
-
import { AsyncLocalStorage } from "node:async_hooks";
|
|
9
|
-
//#region ../../lib/beads/home.ts
|
|
10
|
-
function resolveCanonicalBeadsHome(workspacePath = process.cwd(), project) {
|
|
11
|
-
let resolvedProject = project;
|
|
12
|
-
if (resolvedProject === void 0) try {
|
|
13
|
-
resolvedProject = findProjectByPathSync(workspacePath);
|
|
14
|
-
} catch {
|
|
15
|
-
resolvedProject = null;
|
|
16
|
-
}
|
|
17
|
-
if (!resolvedProject) return null;
|
|
18
|
-
const stateHome = resolveStateReadHomeSync(resolvedProject);
|
|
19
|
-
return resolve(stateHome.migrated ? stateHome.root : resolvedProject.path, ".beads");
|
|
20
|
-
}
|
|
21
|
-
var init_home = __esmMin((() => {
|
|
22
|
-
init_projects();
|
|
23
|
-
init_state_read_home();
|
|
24
|
-
}));
|
|
25
|
-
//#endregion
|
|
26
|
-
//#region ../../lib/bd-process-lock.ts
|
|
27
|
-
function isRecord(value) {
|
|
28
|
-
return typeof value === "object" && value !== null;
|
|
29
|
-
}
|
|
30
|
-
function isErrnoException(error) {
|
|
31
|
-
return error instanceof Error && "code" in error;
|
|
32
|
-
}
|
|
33
|
-
function pushString(parts, value) {
|
|
34
|
-
if (typeof value === "string" && value.trim().length > 0) parts.push(value);
|
|
35
|
-
}
|
|
36
|
-
function collectErrorText(error, parts = [], seen = /* @__PURE__ */ new Set()) {
|
|
37
|
-
if (error == null || seen.has(error)) return parts.join("\n");
|
|
38
|
-
seen.add(error);
|
|
39
|
-
if (typeof error === "string") {
|
|
40
|
-
pushString(parts, error);
|
|
41
|
-
return parts.join("\n");
|
|
42
|
-
}
|
|
43
|
-
if (!isRecord(error)) return parts.join("\n");
|
|
44
|
-
pushString(parts, error.stderr);
|
|
45
|
-
pushString(parts, error.message);
|
|
46
|
-
pushString(parts, error.stdout);
|
|
47
|
-
collectErrorText(error.cause, parts, seen);
|
|
48
|
-
return parts.join("\n");
|
|
49
|
-
}
|
|
50
|
-
function hasTransientErrnoCode(error, seen = /* @__PURE__ */ new Set()) {
|
|
51
|
-
if (error == null || seen.has(error)) return false;
|
|
52
|
-
seen.add(error);
|
|
53
|
-
if (!isRecord(error)) return false;
|
|
54
|
-
if (typeof error.code === "string" && TRANSIENT_BD_ERRNO_CODES.has(error.code)) return true;
|
|
55
|
-
return hasTransientErrnoCode(error.cause, seen);
|
|
56
|
-
}
|
|
57
|
-
/**
|
|
58
|
-
* Return true only for bd/Dolt lock-contention failures worth retrying.
|
|
59
|
-
*
|
|
60
|
-
* PAN-1629 reproduction note: the issue was triggered by concurrent `pan start`
|
|
61
|
-
* processes whose `bd list --json -l pan-<id> --status all --limit 0` child
|
|
62
|
-
* process failed while another process held the embedded Dolt DB lock. A local
|
|
63
|
-
* throwaway repo stress run (`.pan/tmp/bd-lock-repro-*`, 2026-06-10) exercised
|
|
64
|
-
* concurrent `bd list`/`bd create`; bd 1.0.4 serialized cleanly in that run, so
|
|
65
|
-
* this predicate is intentionally limited to the exact embedded-Dolt text
|
|
66
|
-
* documented by Beads for this condition (`database is locked`) plus equivalent
|
|
67
|
-
* OS lock-acquisition phrases (`resource temporarily unavailable`, `could not
|
|
68
|
-
* acquire ... lock`). Successful empty results are exit 0 + `[]`, not errors,
|
|
69
|
-
* and must remain non-transient.
|
|
70
|
-
*/
|
|
71
|
-
function isTransientBdError(error) {
|
|
72
|
-
if (error == null) return false;
|
|
73
|
-
if (isRecord(error) && error.killed === true) return true;
|
|
74
|
-
const text = collectErrorText(error);
|
|
75
|
-
if (TRANSIENT_BD_LOCK_PATTERNS.some((pattern) => pattern.test(text))) return true;
|
|
76
|
-
return hasTransientErrnoCode(error);
|
|
77
|
-
}
|
|
78
|
-
async function defaultSleep(ms) {
|
|
79
|
-
await new Promise((resolveSleep) => setTimeout(resolveSleep, ms));
|
|
80
|
-
}
|
|
81
|
-
async function realpathIfExists(path) {
|
|
82
|
-
try {
|
|
83
|
-
return await realpath(path);
|
|
84
|
-
} catch (error) {
|
|
85
|
-
if (isErrnoException(error) && error.code === "ENOENT") return path;
|
|
86
|
-
return path;
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
async function resolveSharedBeadsDir(workspacePath = process.cwd()) {
|
|
90
|
-
const canonical = resolveCanonicalBeadsHome(workspacePath);
|
|
91
|
-
if (canonical) return realpathIfExists(canonical);
|
|
92
|
-
const beadsDir = resolve(workspacePath, ".beads");
|
|
93
|
-
const redirectPath = join(beadsDir, "redirect");
|
|
94
|
-
try {
|
|
95
|
-
const target = (await readFile(redirectPath, "utf8")).trim();
|
|
96
|
-
if (target.length > 0) return realpathIfExists(isAbsolute(target) ? target : resolve(workspacePath, target));
|
|
97
|
-
} catch (error) {
|
|
98
|
-
if (!isErrnoException(error) || error.code !== "ENOENT") throw error;
|
|
99
|
-
}
|
|
100
|
-
const projectRootBeadsDir = resolve(workspacePath, "..", "..", ".beads");
|
|
101
|
-
try {
|
|
102
|
-
return await realpath(projectRootBeadsDir);
|
|
103
|
-
} catch (error) {
|
|
104
|
-
if (!isErrnoException(error) || error.code !== "ENOENT") throw error;
|
|
105
|
-
}
|
|
106
|
-
return realpathIfExists(beadsDir);
|
|
107
|
-
}
|
|
108
|
-
async function bdProcessLockPath(workspacePath = process.cwd()) {
|
|
109
|
-
const sharedBeadsDir = await resolveSharedBeadsDir(workspacePath);
|
|
110
|
-
const digest = createHash("sha256").update(sharedBeadsDir).digest("hex").slice(0, 16);
|
|
111
|
-
return join(getOverdeckHome(), "locks", `bd-${digest}.lock`);
|
|
112
|
-
}
|
|
113
|
-
async function readLockFileState(path) {
|
|
114
|
-
try {
|
|
115
|
-
const parsed = JSON.parse(await readFile(path, "utf8"));
|
|
116
|
-
if (typeof parsed.pid !== "number" || !Number.isFinite(parsed.pid) || typeof parsed.ts !== "number" || !Number.isFinite(parsed.ts) || typeof parsed.caller !== "string") return { kind: "invalid" };
|
|
117
|
-
return {
|
|
118
|
-
kind: "valid",
|
|
119
|
-
holder: {
|
|
120
|
-
pid: parsed.pid,
|
|
121
|
-
ts: parsed.ts,
|
|
122
|
-
caller: parsed.caller
|
|
123
|
-
}
|
|
124
|
-
};
|
|
125
|
-
} catch (error) {
|
|
126
|
-
if (isErrnoException(error) && error.code === "ENOENT") return { kind: "missing" };
|
|
127
|
-
return {
|
|
128
|
-
kind: "invalid",
|
|
129
|
-
error
|
|
130
|
-
};
|
|
131
|
-
}
|
|
132
|
-
}
|
|
133
|
-
async function readHolderFromPath(path) {
|
|
134
|
-
const state = await readLockFileState(path);
|
|
135
|
-
return state.kind === "valid" ? state.holder : null;
|
|
136
|
-
}
|
|
137
|
-
function isProcessAlive(pid) {
|
|
138
|
-
try {
|
|
139
|
-
process.kill(pid, 0);
|
|
140
|
-
return true;
|
|
141
|
-
} catch (error) {
|
|
142
|
-
return isErrnoException(error) && error.code === "EPERM";
|
|
143
|
-
}
|
|
144
|
-
}
|
|
145
|
-
function isStale(holder, now, staleLockMs) {
|
|
146
|
-
return now - holder.ts > staleLockMs || !isProcessAlive(holder.pid);
|
|
147
|
-
}
|
|
148
|
-
async function writeLockFile(path, holder) {
|
|
149
|
-
const file = await open(path, "wx", 384);
|
|
150
|
-
try {
|
|
151
|
-
await file.writeFile(`${JSON.stringify(holder)}\n`, "utf8");
|
|
152
|
-
} finally {
|
|
153
|
-
await file.close();
|
|
154
|
-
}
|
|
155
|
-
}
|
|
156
|
-
async function unlinkIfExists(path) {
|
|
157
|
-
try {
|
|
158
|
-
await unlink(path);
|
|
159
|
-
} catch (error) {
|
|
160
|
-
if (!isErrnoException(error) || error.code !== "ENOENT") throw error;
|
|
161
|
-
}
|
|
162
|
-
}
|
|
163
|
-
function matchesHolder(actual, expected) {
|
|
164
|
-
return actual?.pid === expected.pid && actual.ts === expected.ts && actual.caller === expected.caller;
|
|
165
|
-
}
|
|
166
|
-
function isLockHeldByCurrentExecution(path) {
|
|
167
|
-
return bdLockExecution.getStore()?.has(path) === true && heldBdProcessLocks.has(path);
|
|
168
|
-
}
|
|
169
|
-
async function acquireStaleBreaker(path, caller, options) {
|
|
170
|
-
const breakerPath = `${path}.break`;
|
|
171
|
-
for (let attempt = 0; attempt < 2; attempt += 1) {
|
|
172
|
-
const holder = {
|
|
173
|
-
pid: process.pid,
|
|
174
|
-
ts: options.now(),
|
|
175
|
-
caller: `${caller} stale bd lock breaker`
|
|
176
|
-
};
|
|
177
|
-
try {
|
|
178
|
-
await writeLockFile(breakerPath, holder);
|
|
179
|
-
let released = false;
|
|
180
|
-
return {
|
|
181
|
-
path: breakerPath,
|
|
182
|
-
holder,
|
|
183
|
-
async release() {
|
|
184
|
-
if (released) return;
|
|
185
|
-
released = true;
|
|
186
|
-
if (matchesHolder(await readHolderFromPath(breakerPath), holder)) await unlinkIfExists(breakerPath);
|
|
187
|
-
}
|
|
188
|
-
};
|
|
189
|
-
} catch (error) {
|
|
190
|
-
if (!isErrnoException(error) || error.code !== "EEXIST") throw error;
|
|
191
|
-
const existing = await readLockFileState(breakerPath);
|
|
192
|
-
if (existing.kind === "invalid") return null;
|
|
193
|
-
if (existing.kind === "valid" && !isStale(existing.holder, options.now(), options.staleLockMs)) return null;
|
|
194
|
-
await unlinkIfExists(breakerPath);
|
|
195
|
-
}
|
|
196
|
-
}
|
|
197
|
-
return null;
|
|
198
|
-
}
|
|
199
|
-
async function reclaimStaleLock(path, caller, options) {
|
|
200
|
-
const breaker = await acquireStaleBreaker(path, caller, options);
|
|
201
|
-
if (!breaker) return false;
|
|
202
|
-
try {
|
|
203
|
-
const existing = await readLockFileState(path);
|
|
204
|
-
if (existing.kind === "invalid") return false;
|
|
205
|
-
if (existing.kind === "valid" && !isStale(existing.holder, options.now(), options.staleLockMs)) return false;
|
|
206
|
-
await unlinkIfExists(path);
|
|
207
|
-
return true;
|
|
208
|
-
} finally {
|
|
209
|
-
await breaker.release();
|
|
210
|
-
}
|
|
211
|
-
}
|
|
212
|
-
async function acquireBdProcessLock(caller, options = {}) {
|
|
213
|
-
const path = options.lockPath ?? await bdProcessLockPath(options.workspacePath);
|
|
214
|
-
const staleLockMs = options.staleLockMs ?? DEFAULT_STALE_LOCK_MS;
|
|
215
|
-
const acquisitionTimeoutMs = options.acquisitionTimeoutMs ?? DEFAULT_ACQUIRE_TIMEOUT_MS;
|
|
216
|
-
const pollIntervalMs = options.pollIntervalMs ?? DEFAULT_ACQUIRE_POLL_MS;
|
|
217
|
-
const sleep = options.sleep ?? defaultSleep;
|
|
218
|
-
const now = options.now ?? Date.now;
|
|
219
|
-
const deadline = now() + acquisitionTimeoutMs;
|
|
220
|
-
await mkdir(dirname(path), { recursive: true });
|
|
221
|
-
if (isLockHeldByCurrentExecution(path)) {
|
|
222
|
-
const held = heldBdProcessLocks.get(path);
|
|
223
|
-
held.count += 1;
|
|
224
|
-
let released = false;
|
|
225
|
-
return {
|
|
226
|
-
path,
|
|
227
|
-
holder: held.holder,
|
|
228
|
-
async release() {
|
|
229
|
-
if (released) return;
|
|
230
|
-
released = true;
|
|
231
|
-
held.count -= 1;
|
|
232
|
-
if (held.count === 0) {
|
|
233
|
-
heldBdProcessLocks.delete(path);
|
|
234
|
-
if (matchesHolder(await readHolderFromPath(path), held.holder)) await unlinkIfExists(path);
|
|
235
|
-
}
|
|
236
|
-
}
|
|
237
|
-
};
|
|
238
|
-
}
|
|
239
|
-
while (true) {
|
|
240
|
-
const holder = {
|
|
241
|
-
pid: process.pid,
|
|
242
|
-
ts: now(),
|
|
243
|
-
caller
|
|
244
|
-
};
|
|
245
|
-
try {
|
|
246
|
-
await writeLockFile(path, holder);
|
|
247
|
-
heldBdProcessLocks.set(path, {
|
|
248
|
-
holder,
|
|
249
|
-
count: 1
|
|
250
|
-
});
|
|
251
|
-
let released = false;
|
|
252
|
-
return {
|
|
253
|
-
path,
|
|
254
|
-
holder,
|
|
255
|
-
async release() {
|
|
256
|
-
if (released) return;
|
|
257
|
-
released = true;
|
|
258
|
-
const current = heldBdProcessLocks.get(path);
|
|
259
|
-
if (current) {
|
|
260
|
-
current.count -= 1;
|
|
261
|
-
if (current.count === 0) {
|
|
262
|
-
heldBdProcessLocks.delete(path);
|
|
263
|
-
if (matchesHolder(await readHolderFromPath(path), holder)) await unlinkIfExists(path);
|
|
264
|
-
}
|
|
265
|
-
}
|
|
266
|
-
}
|
|
267
|
-
};
|
|
268
|
-
} catch (error) {
|
|
269
|
-
if (!isErrnoException(error) || error.code !== "EEXIST") throw new BdProcessLockError({
|
|
270
|
-
operation: "acquireBdProcessLock",
|
|
271
|
-
message: error instanceof Error ? error.message : String(error),
|
|
272
|
-
path,
|
|
273
|
-
caller,
|
|
274
|
-
cause: error
|
|
275
|
-
});
|
|
276
|
-
const existing = await readLockFileState(path);
|
|
277
|
-
if (existing.kind === "missing") continue;
|
|
278
|
-
if (existing.kind === "valid" && isStale(existing.holder, now(), staleLockMs)) {
|
|
279
|
-
if (await reclaimStaleLock(path, caller, {
|
|
280
|
-
now,
|
|
281
|
-
staleLockMs
|
|
282
|
-
})) continue;
|
|
283
|
-
}
|
|
284
|
-
const remainingMs = deadline - now();
|
|
285
|
-
if (remainingMs <= 0) {
|
|
286
|
-
if (existing.kind === "invalid") throw new BdProcessLockError({
|
|
287
|
-
operation: "acquireBdProcessLock",
|
|
288
|
-
message: `Timed out waiting for unreadable bd process lock at ${path}`,
|
|
289
|
-
path,
|
|
290
|
-
caller
|
|
291
|
-
});
|
|
292
|
-
throw new BdProcessLockError({
|
|
293
|
-
operation: "acquireBdProcessLock",
|
|
294
|
-
message: `Timed out waiting for bd process lock held by pid ${existing.holder.pid} (${existing.holder.caller})`,
|
|
295
|
-
path,
|
|
296
|
-
caller,
|
|
297
|
-
holder: existing.holder
|
|
298
|
-
});
|
|
299
|
-
}
|
|
300
|
-
await sleep(Math.min(pollIntervalMs, remainingMs));
|
|
301
|
-
}
|
|
302
|
-
}
|
|
303
|
-
}
|
|
304
|
-
async function withBdProcessLock(caller, fn, options = {}) {
|
|
305
|
-
const handle = await acquireBdProcessLock(caller, options);
|
|
306
|
-
try {
|
|
307
|
-
const inherited = bdLockExecution.getStore() ?? /* @__PURE__ */ new Set();
|
|
308
|
-
return await bdLockExecution.run(new Set([...inherited, handle.path]), fn);
|
|
309
|
-
} finally {
|
|
310
|
-
await handle.release();
|
|
311
|
-
}
|
|
312
|
-
}
|
|
313
|
-
function isRetryableBdFailure(error) {
|
|
314
|
-
return error instanceof BdProcessLockError || isTransientBdError(error);
|
|
315
|
-
}
|
|
316
|
-
function retryDelayMs(attempt, options) {
|
|
317
|
-
const base = Math.min(options.maxDelayMs, options.initialDelayMs * 2 ** Math.max(0, attempt - 1));
|
|
318
|
-
const jitter = Math.floor(base * .2 * options.random());
|
|
319
|
-
return Math.min(options.maxDelayMs, base + jitter);
|
|
320
|
-
}
|
|
321
|
-
async function runBdWithRetry(caller, fn, options = {}) {
|
|
322
|
-
const maxAttempts = options.maxAttempts ?? DEFAULT_RETRY_ATTEMPTS;
|
|
323
|
-
const initialDelayMs = options.initialDelayMs ?? DEFAULT_RETRY_INITIAL_DELAY_MS;
|
|
324
|
-
const maxDelayMs = options.maxDelayMs ?? DEFAULT_RETRY_MAX_DELAY_MS;
|
|
325
|
-
const random = options.random ?? Math.random;
|
|
326
|
-
const sleep = options.sleep ?? defaultSleep;
|
|
327
|
-
let lastError;
|
|
328
|
-
for (let attempt = 1; attempt <= maxAttempts; attempt += 1) try {
|
|
329
|
-
return await (options.lockAlreadyHeld ? fn() : withBdProcessLock(caller, fn, options));
|
|
330
|
-
} catch (error) {
|
|
331
|
-
lastError = error;
|
|
332
|
-
if (!isRetryableBdFailure(error) || attempt >= maxAttempts) break;
|
|
333
|
-
const delayMs = retryDelayMs(attempt, {
|
|
334
|
-
initialDelayMs,
|
|
335
|
-
maxDelayMs,
|
|
336
|
-
random
|
|
337
|
-
});
|
|
338
|
-
await options.onRetry?.({
|
|
339
|
-
attempt,
|
|
340
|
-
delayMs,
|
|
341
|
-
error
|
|
342
|
-
});
|
|
343
|
-
await sleep(delayMs);
|
|
344
|
-
}
|
|
345
|
-
if (isRetryableBdFailure(lastError)) throw new BdTransientFailure({
|
|
346
|
-
operation: "runBdWithRetry",
|
|
347
|
-
message: `bd operation failed after ${maxAttempts} attempts due to transient lock contention`,
|
|
348
|
-
attempts: maxAttempts,
|
|
349
|
-
caller,
|
|
350
|
-
holder: lastError instanceof BdProcessLockError ? lastError.holder : void 0,
|
|
351
|
-
cause: lastError
|
|
352
|
-
});
|
|
353
|
-
throw lastError;
|
|
354
|
-
}
|
|
355
|
-
var TRANSIENT_BD_ERRNO_CODES, TRANSIENT_BD_LOCK_PATTERNS, DEFAULT_STALE_LOCK_MS, DEFAULT_ACQUIRE_TIMEOUT_MS, DEFAULT_ACQUIRE_POLL_MS, DEFAULT_RETRY_ATTEMPTS, DEFAULT_RETRY_INITIAL_DELAY_MS, DEFAULT_RETRY_MAX_DELAY_MS, BdProcessLockError, BdTransientFailure, heldBdProcessLocks, bdLockExecution;
|
|
356
|
-
var init_bd_process_lock = __esmMin((() => {
|
|
357
|
-
init_paths();
|
|
358
|
-
init_home();
|
|
359
|
-
TRANSIENT_BD_ERRNO_CODES = new Set([
|
|
360
|
-
"EAGAIN",
|
|
361
|
-
"EBUSY",
|
|
362
|
-
"EWOULDBLOCK",
|
|
363
|
-
"ETIMEDOUT"
|
|
364
|
-
]);
|
|
365
|
-
TRANSIENT_BD_LOCK_PATTERNS = [
|
|
366
|
-
/\bdatabase is locked\b/i,
|
|
367
|
-
/\block held\b/i,
|
|
368
|
-
/\bfile is locked\b/i,
|
|
369
|
-
/\bresource temporarily unavailable\b/i,
|
|
370
|
-
/\bcould not acquire\b[^\n\r]*\block\b/i,
|
|
371
|
-
/\bfailed to acquire\b[^\n\r]*\block\b/i,
|
|
372
|
-
/\bunable to acquire\b[^\n\r]*\block\b/i,
|
|
373
|
-
/\bcould not obtain\b[^\n\r]*\block\b/i,
|
|
374
|
-
/\banother process\b[^\n\r]*\block/i
|
|
375
|
-
];
|
|
376
|
-
DEFAULT_STALE_LOCK_MS = 300 * 1e3;
|
|
377
|
-
DEFAULT_ACQUIRE_TIMEOUT_MS = 3e4;
|
|
378
|
-
DEFAULT_ACQUIRE_POLL_MS = 50;
|
|
379
|
-
DEFAULT_RETRY_ATTEMPTS = 3;
|
|
380
|
-
DEFAULT_RETRY_INITIAL_DELAY_MS = 100;
|
|
381
|
-
DEFAULT_RETRY_MAX_DELAY_MS = 1e3;
|
|
382
|
-
BdProcessLockError = class extends Data.TaggedError("BdProcessLockError") {};
|
|
383
|
-
BdTransientFailure = class extends Data.TaggedError("BdTransientFailure") {};
|
|
384
|
-
heldBdProcessLocks = /* @__PURE__ */ new Map();
|
|
385
|
-
bdLockExecution = new AsyncLocalStorage();
|
|
386
|
-
}));
|
|
387
|
-
//#endregion
|
|
388
|
-
export { withBdProcessLock as a, runBdWithRetry as i, init_bd_process_lock as n, init_home as o, resolveSharedBeadsDir as r, resolveCanonicalBeadsHome as s, BdTransientFailure as t };
|
|
389
|
-
|
|
390
|
-
//# sourceMappingURL=bd-process-lock-D3S4T4o-.js.map
|