@overdeck/desktop 0.45.16 → 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-DJYAvGv-.js → advancing-selfheal-DgwQgm4D.js} +6 -6
- package/server/{agent-gc-D0wDIeV1.js → agent-gc-kpzxqT7P.js} +3 -3
- package/server/agent-state-C_6TG-Ad.js +3 -0
- package/server/{agent-state-service-CZrayD_G.js → agent-state-service-BUfovFfB.js} +1 -1
- package/server/{agent-state-service-DFslS5go.js → agent-state-service-nUD3qfob.js} +5 -5
- package/server/agents-BA15AQqo.js +3 -0
- package/server/{briefing-freshness-DESTCWo-.js → agents-BHBxr8c9.js} +5 -131
- package/server/{archive-planning-CbghE9-o.js → archive-planning-CzCW9Ifl.js} +5 -10
- package/server/{archive-planning-CoyIbgGK.js → archive-planning-D-QsBufn.js} +1 -1
- package/server/{artifact-index-jobs-CcSrUoSE.js → artifact-index-jobs-qqa51B2Z.js} +2 -2
- package/server/{backlog-auto-trigger-BfgDsII0.js → backlog-auto-trigger-B7Bi0bvY.js} +2 -2
- package/server/{behavior-BTpYbAv4.js → behavior-CWqNMqE5.js} +2 -2
- package/server/briefing-freshness-DuxIE1yr.js +131 -0
- package/server/{checkpoint-manager-BwFdegJF.js → checkpoint-manager-DF6hb9Jw.js} +3 -3
- package/server/{checkpoint-manager-DWSXooZV.js → checkpoint-manager-DixkLus7.js} +1 -1
- package/server/checkpoint-worker.js +1 -1
- package/server/{checkpoints-fjadfOKF.js → checkpoints-B1Z42tJE.js} +1 -1
- package/server/{checkpoints-BtUonbs3.js → checkpoints-BiviJqei.js} +2 -2
- package/server/{claude-hooks-provision-DiK62u0k.js → claude-hooks-provision-BeMGi4ty.js} +1 -1
- package/server/{claude-hooks-provision-DAtxutOs.js → claude-hooks-provision-Du_PkMsp.js} +2 -2
- package/server/{claude-permissions-CThLgf8d.js → claude-permissions-BB6agcOZ.js} +2 -2
- package/server/{claude-settings-overlay-BF9MPIwx.js → claude-settings-overlay-CAq2oFSK.js} +2 -2
- package/server/{claude-settings-overlay-Dx_Uqcmv.js → claude-settings-overlay-DUWWLd6M.js} +1 -1
- package/server/cli-BFgrSWKV.js +3 -0
- package/server/{cli-ByKIIMfT.js → cli-C33xPZNm.js} +9 -9
- package/server/{cliproxy-C_GuT5DU.js → cliproxy-BQX1TL6N.js} +1 -1
- package/server/{cliproxy-B4c1BUvs.js → cliproxy-CGBA1GzA.js} +2 -2
- package/server/{close-issue-BOuLKr6e.js → close-issue-DNv8npc1.js} +5 -5
- package/server/{closed-issue-reaper-CksfuiFD.js → closed-issue-reaper-DrqgBJlr.js} +1 -1
- package/server/{closed-issue-reaper-DCAYzNXW.js → closed-issue-reaper-LoMnnjtJ.js} +9 -9
- package/server/codex-DxLivxri.js +3 -0
- package/server/{codex-parser-mFYZh8vR.js → codex-parser-DboQnEXN.js} +2 -2
- package/server/{codex-BbqIRZjd.js → codex-sgWVCGUd.js} +43 -18
- package/server/{config-Dj6N8EP9.js → config-6MCHOZ2N.js} +1 -1
- package/server/{config-DVLdmnMJ.js → config-DfaUXr6r.js} +2 -2
- package/server/{config-yaml-cNOZcEww.js → config-yaml-CqaAyn8y.js} +74 -74
- package/server/{conflict-gate-BMKm_5DV.js → conflict-gate-BF_zhcmb.js} +3 -3
- package/server/{conflict-gate-CuXUv-bP.js → conflict-gate-BubJprtD.js} +1 -1
- package/server/{context-layers-c0JqYHcS.js → context-layers-BFrxfl0l.js} +17 -3
- package/server/{context-layers-CeAwSYNt.js → context-layers-DWL_8HhY.js} +2 -2
- package/server/{control-settings-D4EFsRBd.js → control-settings-BguNQ1F_.js} +4 -4
- package/server/{conversation-compaction-kHVfVRg3.js → conversation-compaction-CRKAf2qP.js} +1 -1
- package/server/{conversation-compaction-BCggyih4.js → conversation-compaction-DxSXl0pT.js} +8 -8
- package/server/{conversation-service-BTzObqGi.js → conversation-service-DzuY9qoH.js} +1 -1
- package/server/{conversation-service-B8LFQQm1.js → conversation-service-mFVFdDQK.js} +6 -6
- package/server/{conversations-B-lcHv-5.js → conversations-BX5aD-6F.js} +4 -4
- package/server/{conversations-BM7zlXjr.js → conversations-BajHQ60c.js} +1 -1
- package/server/{cost-D9kPIY_5.js → cost-BoqD1Pxz.js} +2 -2
- package/server/{cost-BcpRQ-7o.js → cost-DuZ5vlv-.js} +3 -3
- package/server/{cost-sync-DF6odxK9.js → cost-sync-BYnmnMkY.js} +3 -3
- package/server/{dag-DKI3sOmX.js → dag-C6kYyF17.js} +7 -243
- package/server/{dangerous-git-ops-Bn18PEcN.js → dangerous-git-ops-q5OPtXMd.js} +1 -1
- package/server/dashboard-db-worker.js +6 -6
- package/server/{deacon-DONuopff.js → deacon-CwCiNuEZ.js} +3 -3
- package/server/{deacon-DdARMjZq.js → deacon-Dru5onpk.js} +233 -162
- package/server/{deacon-nudge-log-B-naf89q.js → deacon-nudge-log-ilDfxrhK.js} +1 -1
- package/server/{deacon-swarm-BNGkmYR_.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-C-34Sxyz.js → devcontainer-renderer-BqGNCzvN.js} +3 -3
- package/server/{dist-BMXvKiZP.js → dist-BwlEiLCU.js} +1 -1
- package/server/dist-Bx4KkgYL.js +3 -0
- package/server/{dist-src-BgGUblXg.js → dist-src-BE0Denfs.js} +1 -1
- package/server/{docker-apZ9pBYw.js → docker-CNjXS72x.js} +2 -2
- package/server/{ensure-devcontainer-Bqi1EF1P.js → ensure-devcontainer-5e9xOve4.js} +4 -4
- package/server/{ensure-devcontainer-Dq3KoOIl.js → ensure-devcontainer-C6gyUQdE.js} +1 -1
- package/server/{esm-shims-BEjvINX3.js → esm-shims-Cso7IGBC.js} +1 -1
- package/server/{event-store-CqDgfbAs.js → event-store-D9UhQyMS.js} +1 -1
- package/server/{event-store-D89fMfXS.js → event-store-KZnWUKWh.js} +3 -3
- package/server/{events-S_C0pvl6.js → events-2eFUPdqz.js} +3 -3
- package/server/{events-rIGncmP1.js → events-BYbvqZky.js} +1 -1
- package/server/{factory-DV18m0rc.js → factory-BtaRsHFC.js} +20 -17
- package/server/{feature-registry-population-CqZSnqQi.js → feature-registry-population-Ca2UaV0U.js} +4 -4
- package/server/{feature-registry-storage-BeXmNBwK.js → feature-registry-storage-DaP-bQxO.js} +2 -2
- package/server/{features-u5XeMaOK.js → features-DqvaoQoa.js} +2 -2
- package/server/{feedback-target-CwyWf0Dg.js → feedback-target-BXWdOiYI.js} +9 -7
- package/server/{feedback-target-DDG1PWl3.js → feedback-target-BblmMe9P.js} +1 -1
- package/server/{feedback-writer-BsJiw5aT.js → feedback-writer-CULeOOY4.js} +1 -1
- package/server/{feedback-writer-D20HSXre.js → feedback-writer-Dn8o9ZyE.js} +4 -4
- package/server/{flywheel-RCnHAgc4.js → flywheel-BUWdcfhq.js} +1 -1
- package/server/{flywheel-Dczmgchd.js → flywheel-CqkO3cDj.js} +15 -28
- package/server/{flywheel-9Y1X7IM-.js → flywheel-D9r1mw2U.js} +13 -13
- package/server/{flywheel-merge-order-DEtEd3aK.js → flywheel-merge-order-LDzQDwSg.js} +1 -1
- package/server/{flywheel-merge-order-CtCYsFJP.js → flywheel-merge-order-VtjUweEb.js} +6 -6
- package/server/forge-DJy3Zx4s.js +2 -0
- package/server/{forge-DFDThFil.js → forge-wEollMCi.js} +22 -12
- package/server/{from-NSJypkI8.js → from-B2tOYhYV.js} +1 -1
- package/server/{fts-db-C5A_TTOM.js → fts-db-Bgzn2RO7.js} +2 -2
- package/server/{fts-operations-DvCSimfU.js → fts-operations-Bj8yutnR.js} +2 -2
- package/server/{git-utils-Dr0L7mFk.js → git-utils-GxlL0tmt.js} +2 -2
- package/server/{git-utils-C0neHvQx.js → git-utils-q8jNoBts.js} +1 -1
- package/server/{github-app-Bwt9lK4A.js → github-app-BrYwK_Gb.js} +1 -1
- package/server/{github-app-u9-SX7Gc.js → github-app-tUbb8Ldr.js} +8 -3
- package/server/{github-client-Btyy3uan.js → github-client-BwBU41jK.js} +3 -3
- package/server/{github-client-Do3k-N1W.js → github-client-D6CNsftm.js} +1 -1
- package/server/{github-pr-lookup-DOF1U2WW.js → github-pr-lookup-BS5PqkJb.js} +2 -2
- package/server/{harness-resolve-C6g2R0Cd.js → harness-resolve-Dx8hUsvC.js} +3 -3
- package/server/{health-events-B4u-2a9m.js → health-events-2DLp-5Xp.js} +2 -2
- package/server/{health-events-Bos3sk5g.js → health-events-B0mj6Iae.js} +1 -1
- package/server/{hooks-uEr8WTx_.js → hooks-BDcQJDUe.js} +1 -1
- package/server/{hooks-BCoOjL_R.js → hooks-BS_JrvYP.js} +3 -3
- package/server/hume-B4seN95Y.js +3 -0
- package/server/{hume-BqxYKbUf.js → hume-BRhNKyXQ.js} +2 -2
- package/server/{idle-stack-reaper-DbZ8ukMd.js → idle-stack-reaper-BCITXNW5.js} +2 -2
- package/server/{idle-stack-reaper-H0W6XtHh.js → idle-stack-reaper-C1ymihno.js} +1 -1
- package/server/{infra-Ba9mS6e6.js → infra-_Kx1m9pm.js} +9 -4
- package/server/{injection-C1DKXeIZ.js → injection-Bvhyg_MV.js} +1 -1
- package/server/{injection-yrMBxzVq.js → injection-CCaYkofq.js} +7 -7
- package/server/{inspect-agent-B-mnb4uh.js → inspect-agent-BqyZ4pCo.js} +35 -67
- package/server/inspect-agent-DCJQm9Wu.js +2 -0
- package/server/{internal-token-BtqSbKTx.js → internal-token-Cl-1IxaE.js} +2 -2
- package/server/{internal-token-BPYEaXFh.js → internal-token-D-t28de5.js} +1 -1
- package/server/{io-VEGSAqsd.js → io-DkC4sFSy.js} +36 -43
- package/server/{issue-closed-BxcePXL-.js → issue-closed-Cpl4VDUM.js} +41 -6
- package/server/{issue-lifecycle--8MRxrG1.js → issue-lifecycle-CFR8TJ22.js} +22 -37
- package/server/{issue-lifecycle-CdMUauyb.js → issue-lifecycle-YNTy3OT3.js} +1 -1
- package/server/{issue-service-singleton-MZsDhAob.js → issue-service-singleton-D81mCts_.js} +1 -1
- package/server/{issue-service-singleton-CkTUI-eu.js → issue-service-singleton-ldvUUXi3.js} +29 -29
- package/server/{issues-CBAsuoAO.js → issues-DIEHt9sq.js} +2 -2
- package/server/{jsonl-parser-BUW5_sSK.js → jsonl-parser-Cd5jIqh7.js} +3 -3
- package/server/{label-cleanup-htK6fBRU.js → label-cleanup-Btny6Gyo.js} +3 -3
- package/server/{state-home-CEvD_v5F.js → launcher-generator-BXLM9f4b.js} +7 -127
- package/server/{layers-jjL16At6.js → layers-gCJlK62m.js} +2 -2
- package/server/lifecycle-D7aQUnTO.js +12 -0
- package/server/{lifecycle-io-DXv8Utct.js → lifecycle-io-DQBF-GHO.js} +1 -1
- package/server/{lifecycle-io-IehcRt2v.js → lifecycle-io-FfPUtz-y.js} +4 -4
- package/server/{linear-client-D9cSQfvD.js → linear-client-CDH2D6Qy.js} +3 -3
- package/server/{linear-client-By7hjwuN.js → linear-client-WrYrUIAH.js} +1 -1
- package/server/memory-fts-worker.js +1 -1
- package/server/{merge-BN8FGJ2q.js → merge-BsDgUxFz.js} +3 -3
- package/server/{merge-BLcEZNXz.js → merge-Dervs4BF.js} +1 -1
- package/server/{merge-agent-B3u2szOL.js → merge-agent-D6DNhe9j.js} +64 -51
- package/server/{merge-agent-ejC7Wos8.js → merge-agent-DMQTJMP0.js} +1 -1
- package/server/{merge-batch-DyqlgYGp.js → merge-batch-Bv6Z5K2H.js} +1 -1
- package/server/{merge-blockers-cq-aS2KG.js → merge-blockers-WWWi6Ur2.js} +2 -2
- package/server/merge-ops-h9OCnIVz.js +2 -0
- package/server/{merge-rebase-Dl7yIxtV.js → merge-rebase-Czth9ggm.js} +2 -2
- package/server/{merge-set-CZ9Nbay0.js → merge-set-DNc4zBqd.js} +3 -3
- package/server/{merge-set-Dy0D0r3i.js → merge-set-vuE3MEVt.js} +1 -1
- package/server/{merge-sync-D7jWLgCC.js → merge-sync-B2KSk54U.js} +2 -2
- package/server/{merge-sync-CG9kDCdT.js → merge-sync-B9nHdUGx.js} +1 -1
- package/server/{merge-train-CH33XJOH.js → merge-train-DJgr81tF.js} +3 -3
- package/server/{merge-train-deps-JoVdGnOg.js → merge-train-deps-B2OWS0k9.js} +4 -4
- package/server/{merge-verification-D4wTChdX.js → merge-verification-BBIXUEqa.js} +4 -4
- package/server/{multipart-parser-Csn8U-K9.js → multipart-parser-9DhuAkPd.js} +2 -2
- 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-DI_IS1p_.js → orphan-proposed-reconciler-B8H41C4a.js} +14 -24
- package/server/{orphan-proposed-reconciler-BIcNu4tl.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-CQIfKG8c.js → pan-dir-BTw4MdSe.js} +4 -4
- package/server/{paths-Blj6A9AJ.js → paths-Btkc8mzp.js} +2 -2
- package/server/{pipeline-notifier-BH4PAi-w.js → pipeline-notifier-3frIvSi3.js} +1 -1
- package/server/{pipeline-notifier-D_WYtEwl.js → pipeline-notifier-DTd19f18.js} +2 -2
- package/server/{project-pipelines-jMTitpeO.js → project-pipelines-B95fcAek.js} +2 -2
- package/server/projects-Dc9aoVoG.js +3 -0
- package/server/{prompts-B3njaImU.js → prompts-CIVmjHxn.js} +2 -2
- package/server/{providers-DnPxkHoG.js → providers-BLLk5IIb.js} +1 -1
- package/server/{providers-BbEyFhPX.js → providers-C-yWibCk.js} +7 -7
- package/server/public/assets/{chunk-BO2N2NFS-3qh9TUJi.js → chunk-BO2N2NFS-DzKZyoKY.js} +4 -4
- package/server/public/assets/{diagram-OG6HWLK6-D8UVTPj7.js → diagram-OG6HWLK6-Cx8mWUb8.js} +1 -1
- package/server/public/assets/{dist-BvLLn1YC.js → dist-BqccLhaw.js} +3 -3
- package/server/public/assets/{dist-CyubL7Wj.js → dist-rC3nAs_O.js} +1 -1
- package/server/public/assets/{ganttDiagram-6RSMTGT7-BI4E1LbQ.js → ganttDiagram-6RSMTGT7-DLYPLf5T.js} +1 -1
- package/server/public/assets/{highlighted-body-OFNGDK62-D_bapWkF.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-CEdobObr.js → linear-yqcXkDfj.js} +1 -1
- package/server/public/assets/mermaid-GHXKKRXX-CWdZ_heB.js +1 -0
- package/server/public/assets/{pieDiagram-4H26LBE5-DT79L01f.js → pieDiagram-4H26LBE5-DhraIOaV.js} +1 -1
- package/server/public/assets/{prod-CR_K2DFV.js → prod-DKUunUdN.js} +4 -4
- package/server/public/assets/{quadrantDiagram-W4KKPZXB-BEkKXXrL.js → quadrantDiagram-W4KKPZXB-DPiRcToa.js} +1 -1
- package/server/public/assets/{sankeyDiagram-5OEKKPKP-BxSCqn-j.js → sankeyDiagram-5OEKKPKP-3An5HNkZ.js} +1 -1
- package/server/public/assets/{xychartDiagram-2RQKCTM6-DicwJGG_.js → xychartDiagram-2RQKCTM6-lbEOjfqQ.js} +1 -1
- package/server/public/index.html +2 -2
- package/server/{pull-requests-43LPDfM8.js → pull-requests-D7AL5woD.js} +1 -1
- package/server/{pull-requests-DyUkQl4W.js → pull-requests-NDDNtqNq.js} +3 -3
- package/server/{agents-B9GwfCyp.js → queries-C0LCGG21.js} +710 -325
- package/server/{rally-BtWjybOa.js → rally-4oKvnxLG.js} +3 -3
- package/server/rally-DF5a3ioP.js +3 -0
- package/server/{rally-api-B-osULNL.js → rally-api-41tT6ikZ.js} +2 -2
- package/server/{rally-api-B-YA_oXx.js → rally-api-BsaQ8Vnz.js} +1 -1
- package/server/{rally-client-sErNQBO0.js → rally-client-Bo4hNcCZ.js} +5 -5
- package/server/{rally-client-CzFymP7P.js → rally-client-b5PT1x5L.js} +1 -1
- package/server/{reap-terminal-sessions-DnDQ7pf9.js → reap-terminal-sessions-BR39qflC.js} +1 -1
- package/server/{reap-terminal-sessions-2s-fvilz.js → reap-terminal-sessions-CFkuquQj.js} +1 -1
- package/server/{rebuild-stack-nGD_nPZo.js → rebuild-stack-C7JPUom6.js} +1 -1
- package/server/{rebuild-stack-CoU-HqZj.js → rebuild-stack-Ddv6W017.js} +5 -5
- package/server/{reconstruct-cache-Wj8GrYB0.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-CBLQXDlH.js → release-engine-BYzmIBf9.js} +5 -5
- package/server/{release-set-BNiqi7hy.js → release-set-7pnxFOWR.js} +3 -3
- package/server/{remote-DW_TWQnr.js → remote-Cvu4CSDk.js} +3 -3
- package/server/{remote-agents-C4cyxHQS.js → remote-agents-C2C6z9tj.js} +6 -33
- package/server/{remote-agents-Cv-U-_V8.js → remote-agents-DYY5fFpd.js} +1 -1
- package/server/{remote-completion-PhXGGFQy.js → remote-completion-2Kb4IDg_.js} +13 -13
- package/server/{remote-DcO9An_f.js → remote-rN0ecjHE.js} +3 -3
- package/server/resume-BFLl-yLn.js +3 -0
- package/server/{review-agent-Dn-yn7Zj.js → review-agent-BZvk0N5G.js} +31 -23
- package/server/{review-agent-u5q3ip7H.js → review-agent-CpSHLzed.js} +1 -1
- package/server/{review-artifacts-D4T04aYI.js → review-artifacts-PCo53YMn.js} +5 -19
- package/server/{review-context-Rc0VDLG_.js → review-context-M7QtJlJq.js} +8 -8
- package/server/{review-monitor-BC--miCO.js → review-monitor-BLC5mTTg.js} +2 -2
- package/server/{review-status-CG0iDuWa.js → review-status-77N3PoZr.js} +1 -1
- package/server/{review-status-Dc1l4dVz.js → review-status-DANr0t-v.js} +32 -58
- package/server/{review-status-enrichment-C1a1OG_1.js → review-status-enrichment-DwOg4UfL.js} +3 -3
- package/server/{review-status-sync-CfSixhhX.js → review-status-sync-Bd08OOFA.js} +1 -1
- package/server/{review-status-sync-CAr-hfnJ.js → review-status-sync-BjTUJ5fx.js} +2 -2
- package/server/{review-verdict-feedback-D2Q960wX.js → review-verdict-feedback-BsFLjN_6.js} +1 -1
- package/server/{review-verdict-feedback-CVDbIDBe.js → review-verdict-feedback-CBf-J_wS.js} +8 -8
- package/server/{rollup-DctoIu-A.js → rollup-Bu0f2EyN.js} +8 -8
- package/server/{rollup-CakjztPl.js → rollup-DTCCdEy4.js} +1 -1
- package/server/{scanner-BTM1jc_u.js → scanner-BlZ2vB7j.js} +7 -7
- package/server/{sequence-io-pnoIDGv4.js → sequence-io-ylyDtz2J.js} +4 -4
- package/server/{sequencer-agent-9Soi-WL-.js → sequencer-agent-DsWQ-87H.js} +6 -17
- package/server/server.js +4695 -4093
- package/server/{service-DfTVoqJg.js → service-CLVBC_1Y.js} +116 -90
- package/server/{session-fork-C4jAFHj8.js → session-fork-DlEIAhRy.js} +2 -2
- package/server/{session-history-DanhhiCw.js → session-history-bnOFKMwf.js} +4 -4
- package/server/settings-CP3GGon2.js +2 -0
- package/server/{settings-Cuc12oP_.js → settings-Cqa-8nyj.js} +2 -2
- package/server/{settings-DfT3f86D.js → settings-gJrdLZy2.js} +3 -3
- package/server/{shadow-engineering-bKuKTCn-.js → shadow-engineering-fq1YEKV3.js} +3 -3
- package/server/{shadow-state-CVHpRWlb.js → shadow-state-BqeFAygK.js} +1 -1
- package/server/{shadow-state-DJz6_pb_.js → shadow-state-RptE9Cau.js} +2 -2
- package/server/shadow-utils-BMWr5tRT.js +39 -0
- package/server/{ship-log-CwqPFfqx.js → ship-log-BRQQi2lU.js} +1 -1
- package/server/{smart-compaction-CiWfGfRZ.js → smart-compaction-CmoXpjeU.js} +7 -7
- package/server/{smart-compaction-B4KlpZGN.js → smart-compaction-DldUel4B.js} +1 -1
- package/server/{spawn-planning-session-CU-DwyDl.js → spawn-planning-session-CoS6LTc6.js} +16 -16
- package/server/{spawn-planning-session-D5N3RuLG.js → spawn-planning-session-DT2tSMxo.js} +1 -1
- package/server/{specialist-completion-CJcv-NXH.js → specialist-completion-pJtESo7m.js} +1 -1
- package/server/{specialist-context-B2HlbNxS.js → specialist-context-CspI4Eog.js} +5 -5
- package/server/{specialist-handoff-logger-CQyF1ygu.js → specialist-handoff-logger-Duz9RGvk.js} +2 -2
- package/server/{specialist-logs-CdcUpfjj.js → specialist-logs-DtSkPJZK.js} +3 -3
- package/server/{specialists-D7AcFi1u.js → specialists-CywEMwxk.js} +1 -1
- package/server/{specialists-k22_Btaq.js → specialists-D9-dMUtI.js} +1 -1
- package/server/{specialists-CFgw_0Q6.js → specialists-Dax7tqXC.js} +161 -448
- package/server/{specialists-CwzFdapR.js → specialists-GF42OOqd.js} +18 -18
- package/server/specs-VwcFtEDi.js +3 -0
- package/server/{src-B4TTzNSr.js → src-By3D85Ry.js} +6 -1
- package/server/{src-BvpMg4EB.js → src-CqyFg52C.js} +5 -5
- package/server/{src-D4YUZrwR.js → src-DhxM-eCb.js} +6 -6
- package/server/{stack-health-DVN7zRnL.js → stack-health-BsEVrJZ6.js} +1 -1
- package/server/{stack-health-CSgcYcr8.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-C13UaCL7.js → state-mapping-Ci0pkac4.js} +1 -1
- package/server/state-migrate-D3VveYfO.js +362 -0
- package/server/{stuck-remediation-CxsyxwFO.js → stuck-remediation-B699-p8v.js} +36 -41
- package/server/{stuck-remediation-nTIvhGOR.js → stuck-remediation-CaFYYTQW.js} +1 -1
- package/server/{summary-fork-CnRMPCYd.js → summary-fork-BxnF8Xh0.js} +2 -2
- package/server/{summary-fork-gKSoFAnK.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-CZMs8s0M.js → supervisor-liMgIPDF.js} +2 -2
- package/server/{swarm-readiness-h6-pwY8w.js → swarm-readiness-sXB1vhzo.js} +3 -3
- package/server/{system-prerequisites-DZZTi2G6.js → system-prerequisites-Bz6KdkFJ.js} +1 -13
- package/server/{teardown-workspace-B4D-oCVg.js → teardown-workspace-DvzqnmUF.js} +14 -71
- package/server/{test-agent-queue-CnuYku4B.js → test-agent-queue-hAU1Ah08.js} +5 -5
- package/server/{tldr-daemon-CuA8hz21.js → tldr-daemon-Bam7Xhoo.js} +2 -2
- package/server/{tldr-daemon-CgZQ3jmZ.js → tldr-daemon-DhGwd88s.js} +1 -1
- package/server/tmux-C-rgxRDA.js +3 -0
- package/server/{tmux-C3g9VFcg.js → tmux-U55cNGFG.js} +92 -4
- package/server/{token-g_sJ19g3.js → token-Dsa-i36o.js} +2 -2
- package/server/{token-util-DiwnnbJo.js → token-util-BWNpH96m.js} +1 -1
- package/server/token-util-DRt0j2nQ.js +3 -0
- package/server/{tracker-config-dQxC15vH.js → tracker-config-OkdbaUCm.js} +2 -2
- package/server/{tracker-utils--z8FLSWn.js → tracker-utils-CghXMF3q.js} +2 -2
- package/server/{tracker-utils-DkKyRT0H.js → tracker-utils-DdzUiPNU.js} +1 -1
- package/server/{tunnel-BpWZs0Jy.js → tunnel-D1YxesBL.js} +3 -3
- package/server/{tunnel-CN2px87h.js → tunnel-DjlzgTl3.js} +1 -1
- package/server/typed-errors-CH4roFIj.js +3 -0
- package/server/{typed-errors-sLpGfegz.js → typed-errors-n_Tnb4Fh.js} +3 -4
- package/server/{types-BLS_Zbmd.js → types-DOjWNv3Z.js} +1 -1
- package/server/{types-tlXf80x3.js → types-DXBMm4mX.js} +1 -1
- package/server/{uat-train-utGVmqdm.js → uat-train-CaaWs9Rp.js} +1 -1
- package/server/{uat-train-BRo6DM7p.js → uat-train-CqN34zFx.js} +24 -25
- package/server/{validation-CsPVsoA0.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-CMT5WRMS.js → verification-runner-BjHN80pJ.js} +338 -58
- package/server/verification-runner-ShYu5Ph3.js +2 -0
- package/server/{vtt-parser-C_XPlifj.js → vtt-parser-QnRfcjiU.js} +1 -1
- package/server/{work-agent-prompt-ZTAb2Hyf.js → work-agent-prompt-BiJ43Der.js} +12 -88
- package/server/workflows-B4C3lY9E.js +2 -0
- package/server/{workflows-CXRwhw_o.js → workflows-DkTotz_m.js} +17 -24
- package/server/{workspace-CNfuj1-5.js → workspace-CuN0ev4Z.js} +3 -3
- package/server/{workspace-9UEsKuiP.js → workspace-DQ4vVivd.js} +1 -1
- package/server/{workspace-config-ChWOECy0.js → workspace-config-C77NKnsV.js} +1 -1
- package/server/{workspace-manager-BO-6k3sP.js → workspace-manager-B1mYn0lN.js} +1 -1
- package/server/{workspace-manager-D8AByFIT.js → workspace-manager-Beeo2aKF.js} +23 -48
- package/server/{workspace-metadata-CvC268MN.js → workspace-metadata-BZC5BmoP.js} +2 -2
- package/server/{workspace-metadata-DZiJtnuF.js → workspace-metadata-Cy7_ZACL.js} +1 -1
- package/server/{workspaces-D-uIoqbg.js → workspaces-CGuzW1Ia.js} +182 -152
- 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-BZ_nQS1f.js +0 -33
- package/server/agent-state-lGvgPP4m.js +0 -3
- package/server/agents-CEcaxSkR.js +0 -3
- package/server/auto-commit-IW-eik_b.js +0 -3
- package/server/bd-process-lock-XAXAet9O.js +0 -390
- package/server/beads-B1u04n3o.js +0 -2
- package/server/beads-BeSMEjGT.js +0 -649
- package/server/beads-query-Dl4FhT8J.js +0 -95
- package/server/beads-restore-BUItPOjI.js +0 -23
- package/server/cli-D9cUTbBr.js +0 -3
- package/server/codex-BYPz6ZdF.js +0 -3
- package/server/compact-beads-CyJtoXJi.js +0 -94
- package/server/compact-beads-N00E4EVa.js +0 -3
- package/server/deacon-swarm-CvdFekIO.js +0 -2
- package/server/dist-BNwrgsUO.js +0 -3
- package/server/export-BJHSVwKP.js +0 -87
- package/server/forge-8y6aEPTB.js +0 -2
- package/server/hume-CerGi2RH.js +0 -3
- package/server/inspect-agent-CWkeAB7J.js +0 -2
- package/server/lifecycle-Ck2UR27D.js +0 -14
- package/server/merge-ops-CFkQtXEj.js +0 -2
- package/server/projects-CrBE6IhN.js +0 -3
- package/server/public/assets/index-BAZxZ-8I.js +0 -796
- package/server/public/assets/index-FBG3JBfq.css +0 -1
- package/server/public/assets/mermaid-GHXKKRXX-BYP8MI37.js +0 -1
- package/server/rally-oggyp4cs.js +0 -3
- package/server/record-lEYK__LD.js +0 -3
- package/server/recovery-trip-BT7nb9OV.js +0 -98
- package/server/resolver-C7dLn8OK.js +0 -158
- package/server/resume-BYZBIab-.js +0 -3
- package/server/settings-Cy7SCFO9.js +0 -2
- package/server/specs-RzcDgozr.js +0 -3
- package/server/supervisor-CfX192ma.js +0 -2
- package/server/tmux-By8E_Yv_.js +0 -3
- package/server/token-util-C9u4An3K.js +0 -3
- package/server/tracker-config-BzfVj41Z.js +0 -3
- package/server/typed-errors-CrN1AByg.js +0 -3
- package/server/validation-Dq_wwcw3.js +0 -3
- package/server/verification-runner-D0Uh-9jc.js +0 -2
- package/server/workflows-BLwxUMP7.js +0 -2
- package/server/writer-BUweuRPx.js +0 -3
- package/server/writer-CrP2xuBn.js +0 -251
package/server/beads-BeSMEjGT.js
DELETED
|
@@ -1,649 +0,0 @@
|
|
|
1
|
-
import { _ as updateItemStatus, b as init_types, d as readPlanSync, m as readWorkspacePlanSync, o as init_io, v as updateSubItemStatus, x as subItemsOf } from "./io-VEGSAqsd.js";
|
|
2
|
-
import { i as runBdWithRetry, n as init_bd_process_lock, o as init_home, s as resolveCanonicalBeadsHome, t as BdTransientFailure } from "./bd-process-lock-XAXAet9O.js";
|
|
3
|
-
import { n as init_resolver, t as createBeadsResolver } from "./resolver-C7dLn8OK.js";
|
|
4
|
-
import { t as init_beads_restore } from "./beads-restore-BUItPOjI.js";
|
|
5
|
-
import { n as init_writer, r as runMutationBatch, t as formatMutationBatchFailure } from "./writer-CrP2xuBn.js";
|
|
6
|
-
import { n as init_acceptance_criteria, t as extractACFromDocument } from "./acceptance-criteria-BZ_nQS1f.js";
|
|
7
|
-
import { Data, Effect } from "effect";
|
|
8
|
-
import { chmodSync, existsSync, mkdirSync, writeFileSync } from "fs";
|
|
9
|
-
import { join } from "path";
|
|
10
|
-
import { execFile } from "child_process";
|
|
11
|
-
import { promisify } from "util";
|
|
12
|
-
//#region ../../lib/bd-mutex.ts
|
|
13
|
-
/**
|
|
14
|
-
* Global mutex for bd (beads) CLI commands.
|
|
15
|
-
*
|
|
16
|
-
* Embedded Dolt uses file-based locking — only one process can hold the
|
|
17
|
-
* database lock at a time. When the dashboard spawns concurrent `bd` commands
|
|
18
|
-
* (e.g. planning-state queries for every kanban card), each process blocks
|
|
19
|
-
* waiting for the lock, creating a cascade of hundreds of hung processes.
|
|
20
|
-
*
|
|
21
|
-
* This mutex serializes all bd operations so only one runs at a time,
|
|
22
|
-
* preventing lock contention and process pile-up.
|
|
23
|
-
*/
|
|
24
|
-
init_beads_restore();
|
|
25
|
-
let pending = Promise.resolve();
|
|
26
|
-
async function withBdMutexPromise(fn) {
|
|
27
|
-
const result = pending.then(fn, fn);
|
|
28
|
-
pending = result.then(() => {}, () => {});
|
|
29
|
-
return result;
|
|
30
|
-
}
|
|
31
|
-
/**
|
|
32
|
-
* Effect-native variant of withBdMutex over a thunk that returns a no-context
|
|
33
|
-
* Effect. Serializes against all other bd-mutex callers via the Promise queue.
|
|
34
|
-
* The wrapped Effect must be no-context (R = never) since it is launched from
|
|
35
|
-
* inside a tryPromise — Layers cannot be threaded through the global mutex.
|
|
36
|
-
*/
|
|
37
|
-
const withBdMutex = (fn) => Effect.tryPromise({
|
|
38
|
-
try: () => withBdMutexPromise(() => Effect.runPromise(fn())),
|
|
39
|
-
catch: (e) => e
|
|
40
|
-
});
|
|
41
|
-
//#endregion
|
|
42
|
-
//#region ../../lib/vbrief/beads.ts
|
|
43
|
-
/**
|
|
44
|
-
* createBeadsFromVBrief
|
|
45
|
-
*
|
|
46
|
-
* Converts a vBRIEF plan document into beads tasks, preserving dependency
|
|
47
|
-
* relationships from blocking edges. This replaces LLM-generated `bd create`
|
|
48
|
-
* shell commands with a deterministic, programmatic conversion.
|
|
49
|
-
*/
|
|
50
|
-
init_bd_process_lock();
|
|
51
|
-
init_io();
|
|
52
|
-
init_acceptance_criteria();
|
|
53
|
-
init_types();
|
|
54
|
-
init_resolver();
|
|
55
|
-
init_writer();
|
|
56
|
-
init_home();
|
|
57
|
-
const execFileAsync = promisify(execFile);
|
|
58
|
-
function normalizeClearBeadsOptions(value = {}) {
|
|
59
|
-
if (typeof value === "number") return { timeoutMs: value };
|
|
60
|
-
return {
|
|
61
|
-
timeoutMs: BD_TIMEOUT_FLOOR_MS,
|
|
62
|
-
...value
|
|
63
|
-
};
|
|
64
|
-
}
|
|
65
|
-
function firstLine(value) {
|
|
66
|
-
return (typeof value === "string" ? value : value instanceof Error ? value.message : String(value ?? "")).split("\n")[0] || "unknown error";
|
|
67
|
-
}
|
|
68
|
-
function execFileErrorMessage(error) {
|
|
69
|
-
return firstLine(error?.stderr?.toString() || error?.message || error);
|
|
70
|
-
}
|
|
71
|
-
/** Bootstrap timeout for the latency probe that derives the operational timeout. */
|
|
72
|
-
const BD_PING_BOOTSTRAP_TIMEOUT_MS = 8e3;
|
|
73
|
-
/** Floor for the adaptive bd operational timeout. Preserves today's 30s default. */
|
|
74
|
-
const BD_TIMEOUT_FLOOR_MS = 3e4;
|
|
75
|
-
/** Ceiling for the adaptive bd operational timeout. Prevents near-unbounded waits. */
|
|
76
|
-
const BD_TIMEOUT_CEILING_MS = 18e4;
|
|
77
|
-
/** Multiplier applied to bd ping total_ms to derive the operational timeout. */
|
|
78
|
-
const BD_TIMEOUT_MULTIPLIER = 20;
|
|
79
|
-
/**
|
|
80
|
-
* Resolve the operational timeout for all bd calls in this finalize.
|
|
81
|
-
*
|
|
82
|
-
* - If OVERDECK_BD_TIMEOUT_MS is a positive integer, return it verbatim and
|
|
83
|
-
* do NOT probe bd.
|
|
84
|
-
* - Otherwise run `bd ping --json` once with a fixed bootstrap timeout, read
|
|
85
|
-
* total_ms, and clamp(total_ms * 20, 30s, 180s).
|
|
86
|
-
* - If the probe fails or returns unparseable JSON, return the 30s floor.
|
|
87
|
-
*
|
|
88
|
-
* The caller (createBeadsFromVBriefPromise) caches the result for the lifetime
|
|
89
|
-
* of one finalize so the probe runs once.
|
|
90
|
-
*/
|
|
91
|
-
async function resolveBdTimeout(workspacePath) {
|
|
92
|
-
const envValue = Number(process.env.OVERDECK_BD_TIMEOUT_MS);
|
|
93
|
-
if (Number.isInteger(envValue) && envValue > 0) return Math.min(BD_TIMEOUT_CEILING_MS, Math.max(BD_TIMEOUT_FLOOR_MS, envValue));
|
|
94
|
-
try {
|
|
95
|
-
const { stdout } = await execFileAsync("bd", ["ping", "--json"], {
|
|
96
|
-
encoding: "utf-8",
|
|
97
|
-
cwd: workspacePath,
|
|
98
|
-
timeout: BD_PING_BOOTSTRAP_TIMEOUT_MS
|
|
99
|
-
});
|
|
100
|
-
const parsed = JSON.parse(stdout);
|
|
101
|
-
const totalMs = typeof parsed?.total_ms === "number" ? parsed.total_ms : 0;
|
|
102
|
-
return Math.min(BD_TIMEOUT_CEILING_MS, Math.max(BD_TIMEOUT_FLOOR_MS, totalMs * BD_TIMEOUT_MULTIPLIER));
|
|
103
|
-
} catch {
|
|
104
|
-
return BD_TIMEOUT_FLOOR_MS;
|
|
105
|
-
}
|
|
106
|
-
}
|
|
107
|
-
function parseBdList(stdout) {
|
|
108
|
-
const parsed = JSON.parse(String(stdout || "[]"));
|
|
109
|
-
if (!Array.isArray(parsed)) throw new Error("bd list returned non-array JSON");
|
|
110
|
-
return parsed;
|
|
111
|
-
}
|
|
112
|
-
function beadIdsFromList(beads) {
|
|
113
|
-
return beads.map((bead) => bead?.id).filter((id) => id !== void 0 && id !== null && String(id).length > 0).map((id) => String(id));
|
|
114
|
-
}
|
|
115
|
-
async function listBeadsForIssue(workspacePath, issueLabel, options = {}) {
|
|
116
|
-
const result = await createBeadsResolver(workspacePath, { retry: normalizeClearBeadsOptions(options) }).getBeadsForIssue(issueLabel);
|
|
117
|
-
if (!result.ok) throw result.error;
|
|
118
|
-
return result.value;
|
|
119
|
-
}
|
|
120
|
-
/**
|
|
121
|
-
* After a bd create timeout or empty-stdout, recover the bead ID by exact-title
|
|
122
|
-
* re-query. A client-side timeout usually means the create succeeded on the
|
|
123
|
-
* server, so the only missing piece is the ID.
|
|
124
|
-
*
|
|
125
|
-
* Returns the recovered id, or null if no unique match is found. ambiguity=true
|
|
126
|
-
* means more than one bead matched the full title and the caller must NOT pick
|
|
127
|
-
* one silently.
|
|
128
|
-
*/
|
|
129
|
-
async function recoverBeadIdByTitle(workspacePath, issueLabel, fullTitle, timeoutMs) {
|
|
130
|
-
let beads;
|
|
131
|
-
try {
|
|
132
|
-
beads = await listBeadsForIssue(workspacePath, issueLabel, { timeoutMs });
|
|
133
|
-
} catch {
|
|
134
|
-
return {
|
|
135
|
-
id: null,
|
|
136
|
-
ambiguity: false
|
|
137
|
-
};
|
|
138
|
-
}
|
|
139
|
-
const matches = beads.filter((bead) => bead?.title === fullTitle);
|
|
140
|
-
if (matches.length === 1) {
|
|
141
|
-
const id = matches[0]?.id;
|
|
142
|
-
if (id !== void 0 && id !== null && String(id).length > 0) return {
|
|
143
|
-
id: String(id),
|
|
144
|
-
ambiguity: false
|
|
145
|
-
};
|
|
146
|
-
} else if (matches.length > 1) return {
|
|
147
|
-
id: null,
|
|
148
|
-
ambiguity: true
|
|
149
|
-
};
|
|
150
|
-
return {
|
|
151
|
-
id: null,
|
|
152
|
-
ambiguity: false
|
|
153
|
-
};
|
|
154
|
-
}
|
|
155
|
-
async function defaultBdSleep(ms) {
|
|
156
|
-
await new Promise((resolve) => setTimeout(resolve, ms));
|
|
157
|
-
}
|
|
158
|
-
/**
|
|
159
|
-
* Bounded exponential-backoff retry for idempotent bd operations.
|
|
160
|
-
*
|
|
161
|
-
* Retries `fn` up to `attempts` times (default 3), waiting
|
|
162
|
-
* `baseDelayMs * 2^(attempt-1)` milliseconds between attempts. Surfaces the
|
|
163
|
-
* last error once attempts are exhausted. Used only for reads/deletes — never
|
|
164
|
-
* for bd create, which is not idempotent.
|
|
165
|
-
*/
|
|
166
|
-
async function retryBd(fn, options = {}) {
|
|
167
|
-
const attempts = options.attempts ?? 3;
|
|
168
|
-
const baseDelayMs = options.baseDelayMs ?? 500;
|
|
169
|
-
const sleep = options.sleep ?? defaultBdSleep;
|
|
170
|
-
let lastError;
|
|
171
|
-
for (let attempt = 1; attempt <= attempts; attempt++) try {
|
|
172
|
-
return await fn();
|
|
173
|
-
} catch (error) {
|
|
174
|
-
lastError = error;
|
|
175
|
-
if (attempt < attempts) await sleep(baseDelayMs * Math.pow(2, attempt - 1));
|
|
176
|
-
}
|
|
177
|
-
throw lastError;
|
|
178
|
-
}
|
|
179
|
-
/**
|
|
180
|
-
* Post-condition verification for dependency edges.
|
|
181
|
-
*
|
|
182
|
-
* Issues one batched `bd dep list` over all created bead IDs, compares the
|
|
183
|
-
* actual `blocks` dependencies against plan.edges, and repairs any missing edge
|
|
184
|
-
* with `bd dep add`. Edges whose endpoints were not both captured are reported
|
|
185
|
-
* as errors and not repaired. After repairs, any edge that is still missing
|
|
186
|
-
* causes success:false so finalize exits non-zero rather than silently shipping
|
|
187
|
-
* a corrupt DAG.
|
|
188
|
-
*/
|
|
189
|
-
async function verifyAndRepairDependencyEdges(client, workspacePath, planEdges, beadIds, timeoutMs, retryOptions = {}) {
|
|
190
|
-
const blockEdges = planEdges.filter((edge) => edge.type === "blocks");
|
|
191
|
-
if (blockEdges.length === 0 || beadIds.size === 0) return {
|
|
192
|
-
success: true,
|
|
193
|
-
errors: []
|
|
194
|
-
};
|
|
195
|
-
const createdBeadIds = Array.from(new Set(beadIds.values()));
|
|
196
|
-
let actualDeps;
|
|
197
|
-
try {
|
|
198
|
-
actualDeps = parseBdList(await runBdWithRetry(`dep list for ${createdBeadIds.length} beads`, () => client.run([
|
|
199
|
-
"dep",
|
|
200
|
-
"list",
|
|
201
|
-
...createdBeadIds,
|
|
202
|
-
"--json"
|
|
203
|
-
]), {
|
|
204
|
-
...retryOptions,
|
|
205
|
-
workspacePath
|
|
206
|
-
}));
|
|
207
|
-
} catch (error) {
|
|
208
|
-
return {
|
|
209
|
-
success: false,
|
|
210
|
-
errors: [`dep list failed: ${execFileErrorMessage(error)}`]
|
|
211
|
-
};
|
|
212
|
-
}
|
|
213
|
-
const isBlocksDep = (dep) => dep?.dependency_type === "blocks" || dep?.type === "blocks" || dep?.relationship === "blocks";
|
|
214
|
-
const actualDepSet = new Set(actualDeps.filter(isBlocksDep).map((dep) => `${dep.issue_id}|${dep.depends_on_id ?? dep.id}`));
|
|
215
|
-
const errors = [];
|
|
216
|
-
const missingRepairs = [];
|
|
217
|
-
for (const edge of blockEdges) {
|
|
218
|
-
const beadFrom = beadIds.get(edge.from);
|
|
219
|
-
const beadTo = beadIds.get(edge.to);
|
|
220
|
-
if (!beadFrom || !beadTo) {
|
|
221
|
-
errors.push(`Missing bead IDs for dependency edge ${edge.from} -> ${edge.to}`);
|
|
222
|
-
continue;
|
|
223
|
-
}
|
|
224
|
-
const key = `${beadTo}|${beadFrom}`;
|
|
225
|
-
if (!actualDepSet.has(key)) missingRepairs.push({
|
|
226
|
-
from: edge.from,
|
|
227
|
-
to: edge.to,
|
|
228
|
-
beadFrom,
|
|
229
|
-
beadTo
|
|
230
|
-
});
|
|
231
|
-
}
|
|
232
|
-
for (const repair of missingRepairs) try {
|
|
233
|
-
await runBdWithRetry(`dep add ${repair.beadTo} ${repair.beadFrom}`, () => client.mutate([
|
|
234
|
-
"dep",
|
|
235
|
-
"add",
|
|
236
|
-
repair.beadTo,
|
|
237
|
-
repair.beadFrom
|
|
238
|
-
]), {
|
|
239
|
-
...retryOptions,
|
|
240
|
-
workspacePath
|
|
241
|
-
});
|
|
242
|
-
actualDepSet.add(`${repair.beadTo}|${repair.beadFrom}`);
|
|
243
|
-
} catch (error) {
|
|
244
|
-
errors.push(`Failed to repair dependency edge ${repair.from} -> ${repair.to}: ${execFileErrorMessage(error)}`);
|
|
245
|
-
}
|
|
246
|
-
for (const edge of blockEdges) {
|
|
247
|
-
const beadFrom = beadIds.get(edge.from);
|
|
248
|
-
const beadTo = beadIds.get(edge.to);
|
|
249
|
-
if (!beadFrom || !beadTo) continue;
|
|
250
|
-
const key = `${beadTo}|${beadFrom}`;
|
|
251
|
-
if (!actualDepSet.has(key)) errors.push(`Dependency edge ${edge.from} -> ${edge.to} still missing after repair`);
|
|
252
|
-
}
|
|
253
|
-
return {
|
|
254
|
-
success: errors.length === 0,
|
|
255
|
-
errors
|
|
256
|
-
};
|
|
257
|
-
}
|
|
258
|
-
/**
|
|
259
|
-
* Delete a single bead, treating "issue not found" as success. Under contention
|
|
260
|
-
* a delete can time out client-side while committing server-side; a retry then
|
|
261
|
-
* sees the bead as already gone. Catching that case makes deletion idempotent.
|
|
262
|
-
*/
|
|
263
|
-
async function deleteBead(client, id) {
|
|
264
|
-
try {
|
|
265
|
-
await client.mutate([
|
|
266
|
-
"delete",
|
|
267
|
-
id,
|
|
268
|
-
"--force"
|
|
269
|
-
]);
|
|
270
|
-
} catch (error) {
|
|
271
|
-
if (execFileErrorMessage(error).toLowerCase().includes("not found")) return;
|
|
272
|
-
throw error;
|
|
273
|
-
}
|
|
274
|
-
}
|
|
275
|
-
async function clearBeadsForIssue(workspacePath, issueLabel, timeoutMsOrOptions = {}) {
|
|
276
|
-
const options = normalizeClearBeadsOptions(timeoutMsOrOptions);
|
|
277
|
-
const batch = await runMutationBatch({
|
|
278
|
-
project: { workspacePath },
|
|
279
|
-
reason: `clear beads for ${issueLabel}`,
|
|
280
|
-
lockOptions: options
|
|
281
|
-
}, (client) => clearBeadsForIssueWithClient(client, workspacePath, issueLabel, options));
|
|
282
|
-
return batch.ok ? batch.value : {
|
|
283
|
-
cleared: 0,
|
|
284
|
-
errors: [formatMutationBatchFailure(batch)]
|
|
285
|
-
};
|
|
286
|
-
}
|
|
287
|
-
async function clearBeadsForIssueWithClient(client, workspacePath, issueLabel, options) {
|
|
288
|
-
let existingBeads;
|
|
289
|
-
try {
|
|
290
|
-
existingBeads = await listBeadsForIssue(workspacePath, issueLabel, options);
|
|
291
|
-
} catch (error) {
|
|
292
|
-
return {
|
|
293
|
-
cleared: 0,
|
|
294
|
-
errors: [`list failed: ${execFileErrorMessage(error)}`],
|
|
295
|
-
transientFailure: error instanceof BdTransientFailure ? error : void 0
|
|
296
|
-
};
|
|
297
|
-
}
|
|
298
|
-
const errors = [];
|
|
299
|
-
let cleared = 0;
|
|
300
|
-
for (const id of beadIdsFromList(existingBeads)) try {
|
|
301
|
-
await runBdWithRetry(`delete bead ${id} for ${issueLabel}`, () => deleteBead(client, id), {
|
|
302
|
-
...options,
|
|
303
|
-
workspacePath
|
|
304
|
-
});
|
|
305
|
-
cleared++;
|
|
306
|
-
} catch (error) {
|
|
307
|
-
errors.push(`delete ${id}: ${execFileErrorMessage(error)}`);
|
|
308
|
-
}
|
|
309
|
-
let residualBeads;
|
|
310
|
-
try {
|
|
311
|
-
residualBeads = await listBeadsForIssue(workspacePath, issueLabel, options);
|
|
312
|
-
} catch (error) {
|
|
313
|
-
errors.push(`post-delete list failed: ${execFileErrorMessage(error)}`);
|
|
314
|
-
return {
|
|
315
|
-
cleared,
|
|
316
|
-
errors,
|
|
317
|
-
transientFailure: error instanceof BdTransientFailure ? error : void 0
|
|
318
|
-
};
|
|
319
|
-
}
|
|
320
|
-
const residualIds = beadIdsFromList(residualBeads);
|
|
321
|
-
if (residualIds.length > 0) errors.push(`residual ${residualIds.length} beads after delete: ${residualIds.join(", ")}`);
|
|
322
|
-
return {
|
|
323
|
-
cleared,
|
|
324
|
-
errors
|
|
325
|
-
};
|
|
326
|
-
}
|
|
327
|
-
function resolveInspectionMetadata(policy, item) {
|
|
328
|
-
if (policy === "never") return {
|
|
329
|
-
requiresInspection: false,
|
|
330
|
-
inspectionDepth: "fast"
|
|
331
|
-
};
|
|
332
|
-
if (policy === "fast") return {
|
|
333
|
-
requiresInspection: true,
|
|
334
|
-
inspectionDepth: "fast"
|
|
335
|
-
};
|
|
336
|
-
if (policy === "deep") return {
|
|
337
|
-
requiresInspection: true,
|
|
338
|
-
inspectionDepth: "deep"
|
|
339
|
-
};
|
|
340
|
-
return {
|
|
341
|
-
requiresInspection: typeof item.metadata?.requiresInspection === "boolean" ? item.metadata.requiresInspection : false,
|
|
342
|
-
inspectionDepth: item.metadata?.inspectionDepth === "deep" ? "deep" : "fast"
|
|
343
|
-
};
|
|
344
|
-
}
|
|
345
|
-
async function createBeadsFromVBriefPromise(workspacePath, options = {}) {
|
|
346
|
-
const { planPath, lockOptions, ...retryOptions } = options;
|
|
347
|
-
const batch = await runMutationBatch({
|
|
348
|
-
project: { workspacePath },
|
|
349
|
-
reason: "create beads from vBRIEF",
|
|
350
|
-
lockOptions
|
|
351
|
-
}, async (bd) => withBdMutexPromise(async () => {
|
|
352
|
-
const created = [];
|
|
353
|
-
const errors = [];
|
|
354
|
-
const beadIds = /* @__PURE__ */ new Map();
|
|
355
|
-
try {
|
|
356
|
-
await execFileAsync("which", ["bd"], {
|
|
357
|
-
encoding: "utf-8",
|
|
358
|
-
timeout: 5e3
|
|
359
|
-
});
|
|
360
|
-
} catch {
|
|
361
|
-
return {
|
|
362
|
-
success: false,
|
|
363
|
-
created: [],
|
|
364
|
-
errors: ["bd (beads) CLI not found in PATH"],
|
|
365
|
-
beadIds
|
|
366
|
-
};
|
|
367
|
-
}
|
|
368
|
-
const beadsDir = join(workspacePath, ".beads");
|
|
369
|
-
const redirectPath = join(beadsDir, "redirect");
|
|
370
|
-
if (!existsSync(redirectPath)) {
|
|
371
|
-
mkdirSync(beadsDir, { recursive: true });
|
|
372
|
-
chmodSync(beadsDir, 448);
|
|
373
|
-
writeFileSync(redirectPath, resolveCanonicalBeadsHome(workspacePath) ?? "../../.beads", "utf8");
|
|
374
|
-
}
|
|
375
|
-
const doc = planPath ? readPlanSync(planPath) : readWorkspacePlanSync(workspacePath);
|
|
376
|
-
if (!doc) return {
|
|
377
|
-
success: false,
|
|
378
|
-
created: [],
|
|
379
|
-
errors: ["No plan.vbrief.json found in workspace"],
|
|
380
|
-
beadIds
|
|
381
|
-
};
|
|
382
|
-
const { plan } = doc;
|
|
383
|
-
const planEdges = plan.edges ?? [];
|
|
384
|
-
const inspectionPolicy = doc.vBRIEFInfo.inspectionPolicy ?? "auto";
|
|
385
|
-
const bdTimeoutMs = await resolveBdTimeout(workspacePath);
|
|
386
|
-
const issueLabel = plan.id.toLowerCase();
|
|
387
|
-
try {
|
|
388
|
-
await retryBd(() => execFileAsync("bd", ["ping", "--json"], {
|
|
389
|
-
encoding: "utf-8",
|
|
390
|
-
cwd: workspacePath,
|
|
391
|
-
timeout: bdTimeoutMs
|
|
392
|
-
}), { sleep: retryOptions.sleep });
|
|
393
|
-
} catch (connectError) {
|
|
394
|
-
try {
|
|
395
|
-
await execFileAsync("bd", ["doctor", "--fix"], {
|
|
396
|
-
encoding: "utf-8",
|
|
397
|
-
cwd: workspacePath,
|
|
398
|
-
timeout: bdTimeoutMs
|
|
399
|
-
});
|
|
400
|
-
await retryBd(() => execFileAsync("bd", ["ping", "--json"], {
|
|
401
|
-
encoding: "utf-8",
|
|
402
|
-
cwd: workspacePath,
|
|
403
|
-
timeout: bdTimeoutMs
|
|
404
|
-
}), { sleep: retryOptions.sleep });
|
|
405
|
-
} catch (retryError) {
|
|
406
|
-
return {
|
|
407
|
-
success: false,
|
|
408
|
-
created: [],
|
|
409
|
-
errors: [`beads probe failed after recovery (${execFileErrorMessage(retryError ?? connectError).split("\n")[0]})`],
|
|
410
|
-
beadIds
|
|
411
|
-
};
|
|
412
|
-
}
|
|
413
|
-
}
|
|
414
|
-
const clearResult = await clearBeadsForIssueWithClient(bd, workspacePath, issueLabel, {
|
|
415
|
-
...retryOptions,
|
|
416
|
-
timeoutMs: bdTimeoutMs
|
|
417
|
-
});
|
|
418
|
-
if (clearResult.errors.length > 0) return {
|
|
419
|
-
success: false,
|
|
420
|
-
created: [],
|
|
421
|
-
errors: clearResult.errors.map((error) => `dedup failed: ${error}`),
|
|
422
|
-
transientFailure: clearResult.transientFailure,
|
|
423
|
-
beadIds: /* @__PURE__ */ new Map()
|
|
424
|
-
};
|
|
425
|
-
if (clearResult.cleared > 0) console.log(`[beads] Cleared ${clearResult.cleared} existing beads for ${issueLabel} (verified)`);
|
|
426
|
-
const blockers = /* @__PURE__ */ new Map();
|
|
427
|
-
for (const item of plan.items) blockers.set(item.id, /* @__PURE__ */ new Set());
|
|
428
|
-
for (const edge of planEdges) if (edge.type === "blocks") {
|
|
429
|
-
const blockersOfTo = blockers.get(edge.to);
|
|
430
|
-
if (blockersOfTo) blockersOfTo.add(edge.from);
|
|
431
|
-
}
|
|
432
|
-
const inDegree = /* @__PURE__ */ new Map();
|
|
433
|
-
const adjacency = /* @__PURE__ */ new Map();
|
|
434
|
-
for (const item of plan.items) {
|
|
435
|
-
inDegree.set(item.id, 0);
|
|
436
|
-
adjacency.set(item.id, []);
|
|
437
|
-
}
|
|
438
|
-
for (const edge of planEdges) if (edge.type === "blocks") {
|
|
439
|
-
inDegree.set(edge.to, (inDegree.get(edge.to) ?? 0) + 1);
|
|
440
|
-
adjacency.get(edge.from)?.push(edge.to);
|
|
441
|
-
}
|
|
442
|
-
const queue = [];
|
|
443
|
-
for (const item of plan.items) if ((inDegree.get(item.id) ?? 0) === 0) queue.push(item.id);
|
|
444
|
-
const itemById = new Map(plan.items.map((i) => [i.id, i]));
|
|
445
|
-
const sortedIds = [];
|
|
446
|
-
while (queue.length > 0) {
|
|
447
|
-
const id = queue.shift();
|
|
448
|
-
sortedIds.push(id);
|
|
449
|
-
for (const dependent of adjacency.get(id) ?? []) {
|
|
450
|
-
const newDegree = (inDegree.get(dependent) ?? 1) - 1;
|
|
451
|
-
inDegree.set(dependent, newDegree);
|
|
452
|
-
if (newDegree === 0) queue.push(dependent);
|
|
453
|
-
}
|
|
454
|
-
}
|
|
455
|
-
const orderedIds = sortedIds.length === plan.items.length ? sortedIds : plan.items.map((i) => i.id);
|
|
456
|
-
for (let i = 0; i < orderedIds.length; i++) {
|
|
457
|
-
const itemId = orderedIds[i];
|
|
458
|
-
const item = itemById.get(itemId);
|
|
459
|
-
if (!item) continue;
|
|
460
|
-
const fullTitle = `${plan.id}: ${item.title}`;
|
|
461
|
-
const difficulty = item.metadata?.difficulty ?? "medium";
|
|
462
|
-
const issueLabel = item.metadata?.issueLabel ?? plan.id.toLowerCase();
|
|
463
|
-
const phase = item.metadata?.phase;
|
|
464
|
-
const beadMetadata = {
|
|
465
|
-
...item.metadata ?? {},
|
|
466
|
-
vbriefItemId: itemId,
|
|
467
|
-
...resolveInspectionMetadata(inspectionPolicy, item)
|
|
468
|
-
};
|
|
469
|
-
const labels = [issueLabel, `difficulty:${difficulty}`];
|
|
470
|
-
if (phase !== void 0) labels.push(`phase-${phase}`);
|
|
471
|
-
const labelStr = labels.join(",");
|
|
472
|
-
const description = [item.narrative?.Action ?? "", subItemsOf(item).filter((s) => s.metadata?.kind === "acceptance_criterion").map((s) => `- AC: ${s.title}`).join("\n")].filter(Boolean).join("\n");
|
|
473
|
-
const dependencyBeadIds = [...blockers.get(itemId) ?? []].map((blockerId) => beadIds.get(blockerId) ?? null).filter((d) => d !== null);
|
|
474
|
-
const args = [
|
|
475
|
-
"create",
|
|
476
|
-
fullTitle,
|
|
477
|
-
"--type",
|
|
478
|
-
"task",
|
|
479
|
-
"--silent",
|
|
480
|
-
"-l",
|
|
481
|
-
labelStr,
|
|
482
|
-
"--metadata",
|
|
483
|
-
JSON.stringify(beadMetadata)
|
|
484
|
-
];
|
|
485
|
-
if (description) args.push("-d", description);
|
|
486
|
-
if (dependencyBeadIds.length > 0) args.push("--deps", dependencyBeadIds.join(","));
|
|
487
|
-
console.log(`[beads] (${i + 1}/${orderedIds.length}) creating "${item.title}"`);
|
|
488
|
-
let capturedBeadId = null;
|
|
489
|
-
let createFailureMessage = null;
|
|
490
|
-
try {
|
|
491
|
-
capturedBeadId = (await bd.mutate(args)).trim() || null;
|
|
492
|
-
if (!capturedBeadId) createFailureMessage = `Created "${item.title}" but could not capture bead ID`;
|
|
493
|
-
} catch (error) {
|
|
494
|
-
const timedOut = error?.killed === true || /ETIMEDOUT/i.test(String(error?.code ?? ""));
|
|
495
|
-
const errMsg = error?.stderr?.toString() || error?.message || String(error);
|
|
496
|
-
const prefix = timedOut ? `timed out after ${Math.round(bdTimeoutMs / 1e3)}s` : errMsg.split("\n")[0];
|
|
497
|
-
createFailureMessage = `Failed to create "${item.title}": ${prefix}`;
|
|
498
|
-
}
|
|
499
|
-
if (capturedBeadId) {
|
|
500
|
-
beadIds.set(itemId, capturedBeadId);
|
|
501
|
-
created.push(fullTitle);
|
|
502
|
-
} else {
|
|
503
|
-
console.warn(`[beads] (${i + 1}/${orderedIds.length}) FAILED/EMPTY "${item.title}"; attempting title-based recovery`);
|
|
504
|
-
const recovered = await recoverBeadIdByTitle(workspacePath, issueLabel, fullTitle, bdTimeoutMs);
|
|
505
|
-
if (recovered.ambiguity) errors.push(`${createFailureMessage}; recovery found multiple beads titled "${fullTitle}"`);
|
|
506
|
-
else if (recovered.id) {
|
|
507
|
-
beadIds.set(itemId, recovered.id);
|
|
508
|
-
created.push(fullTitle);
|
|
509
|
-
console.log(`[beads] (${i + 1}/${orderedIds.length}) RECOVERED "${item.title}" as ${recovered.id}`);
|
|
510
|
-
} else errors.push(createFailureMessage ?? `Failed to create "${item.title}"`);
|
|
511
|
-
}
|
|
512
|
-
}
|
|
513
|
-
const edgeVerification = await verifyAndRepairDependencyEdges(bd, workspacePath, planEdges, beadIds, bdTimeoutMs, retryOptions);
|
|
514
|
-
errors.push(...edgeVerification.errors);
|
|
515
|
-
return {
|
|
516
|
-
success: errors.length === 0,
|
|
517
|
-
created,
|
|
518
|
-
errors,
|
|
519
|
-
beadIds
|
|
520
|
-
};
|
|
521
|
-
}));
|
|
522
|
-
return batch.ok ? batch.value : {
|
|
523
|
-
success: false,
|
|
524
|
-
created: [],
|
|
525
|
-
errors: [formatMutationBatchFailure(batch)],
|
|
526
|
-
beadIds: /* @__PURE__ */ new Map()
|
|
527
|
-
};
|
|
528
|
-
}
|
|
529
|
-
/**
|
|
530
|
-
* Syncs a bead's status to the corresponding vBRIEF item.
|
|
531
|
-
* Returns the vBRIEF item ID that was updated, or null if no match was found.
|
|
532
|
-
* Callers must provide knownTitle (from bd list/show output).
|
|
533
|
-
*/
|
|
534
|
-
async function readBeadTitle(beadId, workspacePath) {
|
|
535
|
-
const result = await createBeadsResolver(workspacePath).getBeadById(beadId);
|
|
536
|
-
return result.ok ? result.value?.title ?? null : null;
|
|
537
|
-
}
|
|
538
|
-
async function syncBeadStatusToVBriefPromise(beadId, workspacePath, status = "completed", knownTitle) {
|
|
539
|
-
try {
|
|
540
|
-
const doc = readWorkspacePlanSync(workspacePath);
|
|
541
|
-
if (!doc) return null;
|
|
542
|
-
let beadTitle = knownTitle ?? null;
|
|
543
|
-
if (!beadTitle) beadTitle = await readBeadTitle(beadId, workspacePath);
|
|
544
|
-
if (!beadTitle) return null;
|
|
545
|
-
const planId = doc.plan.id;
|
|
546
|
-
const prefix = `${planId}: `;
|
|
547
|
-
const itemTitle = beadTitle.toLowerCase().startsWith(prefix.toLowerCase()) ? beadTitle.slice(prefix.length) : beadTitle;
|
|
548
|
-
const itemTitleLower = itemTitle.toLowerCase();
|
|
549
|
-
const matchingItem = doc.plan.items.find((i) => i.title.toLowerCase() === itemTitleLower);
|
|
550
|
-
if (!matchingItem) {
|
|
551
|
-
console.warn(`[vbrief-sync] No plan item matches bead ${beadId} (title "${itemTitle}") in plan ${planId} — AC statuses for this bead were NOT synced`);
|
|
552
|
-
return null;
|
|
553
|
-
}
|
|
554
|
-
updateItemStatus(workspacePath, matchingItem.id, status);
|
|
555
|
-
if (status === "completed") {
|
|
556
|
-
for (const sub of subItemsOf(matchingItem)) if (sub.metadata?.kind === "acceptance_criterion" && sub.status !== "completed") updateSubItemStatus(workspacePath, matchingItem.id, sub.id, "completed");
|
|
557
|
-
}
|
|
558
|
-
console.log(`[vbrief-sync] Updated item "${matchingItem.id}" to "${status}" from bead ${beadId}`);
|
|
559
|
-
return matchingItem.id;
|
|
560
|
-
} catch (err) {
|
|
561
|
-
console.warn(`[vbrief-sync] Failed to sync bead ${beadId}: ${err.message}`);
|
|
562
|
-
return null;
|
|
563
|
-
}
|
|
564
|
-
}
|
|
565
|
-
/**
|
|
566
|
-
* Get structured AC status from a workspace's vBRIEF plan.
|
|
567
|
-
*
|
|
568
|
-
* Returns per-item AC counts (completed/pending/total) plus an overall
|
|
569
|
-
* allCompleted flag. Returns null if no plan exists or no AC are found
|
|
570
|
-
* (legacy workspace compatibility).
|
|
571
|
-
*
|
|
572
|
-
* Used by: verification gate, pan done, merge agent, prompt injection.
|
|
573
|
-
*/
|
|
574
|
-
function getVBriefACStatusSync(workspacePath) {
|
|
575
|
-
const doc = readWorkspacePlanSync(workspacePath);
|
|
576
|
-
if (!doc) return null;
|
|
577
|
-
const allCriteria = extractACFromDocument(doc);
|
|
578
|
-
if (allCriteria.length === 0) return null;
|
|
579
|
-
const itemMap = /* @__PURE__ */ new Map();
|
|
580
|
-
for (const ac of allCriteria) {
|
|
581
|
-
let item = itemMap.get(ac.itemId);
|
|
582
|
-
if (!item) {
|
|
583
|
-
item = {
|
|
584
|
-
itemId: ac.itemId,
|
|
585
|
-
itemTitle: ac.itemTitle,
|
|
586
|
-
completed: 0,
|
|
587
|
-
pending: 0,
|
|
588
|
-
total: 0,
|
|
589
|
-
criteria: []
|
|
590
|
-
};
|
|
591
|
-
itemMap.set(ac.itemId, item);
|
|
592
|
-
}
|
|
593
|
-
item.total++;
|
|
594
|
-
item.criteria.push(ac);
|
|
595
|
-
if (ac.status === "completed" || ac.status === "cancelled") item.completed++;
|
|
596
|
-
else item.pending++;
|
|
597
|
-
}
|
|
598
|
-
const items = Array.from(itemMap.values());
|
|
599
|
-
const totalCompleted = items.reduce((sum, i) => sum + i.completed, 0);
|
|
600
|
-
const totalPending = items.reduce((sum, i) => sum + i.pending, 0);
|
|
601
|
-
const totalCount = totalCompleted + totalPending;
|
|
602
|
-
return {
|
|
603
|
-
allCompleted: totalPending === 0,
|
|
604
|
-
items,
|
|
605
|
-
totalCompleted,
|
|
606
|
-
totalPending,
|
|
607
|
-
totalCount
|
|
608
|
-
};
|
|
609
|
-
}
|
|
610
|
-
/** Tagged error for beads Effect variants. */
|
|
611
|
-
var BeadsOperationError = class extends Data.TaggedError("BeadsOperationError") {};
|
|
612
|
-
/**
|
|
613
|
-
* Idempotent and internally serialized via bd-mutex. Calling N times yields
|
|
614
|
-
* exactly planItemCount beads or returns success:false with errors. Do NOT wrap
|
|
615
|
-
* callers in withBdMutex — it will deadlock.
|
|
616
|
-
*/
|
|
617
|
-
const createBeadsFromVBrief = (workspacePath, options = {}) => Effect.tryPromise({
|
|
618
|
-
try: () => createBeadsFromVBriefPromise(workspacePath, options),
|
|
619
|
-
catch: (cause) => new BeadsOperationError({
|
|
620
|
-
operation: "createBeadsFromVBrief",
|
|
621
|
-
workspacePath,
|
|
622
|
-
message: cause instanceof Error ? cause.message : String(cause),
|
|
623
|
-
cause
|
|
624
|
-
})
|
|
625
|
-
});
|
|
626
|
-
/** Effect variant of `syncBeadStatusToVBrief`. */
|
|
627
|
-
const syncBeadStatusToVBrief = (beadId, workspacePath, status = "completed", knownTitle) => Effect.tryPromise({
|
|
628
|
-
try: () => syncBeadStatusToVBriefPromise(beadId, workspacePath, status, knownTitle),
|
|
629
|
-
catch: (cause) => new BeadsOperationError({
|
|
630
|
-
operation: "syncBeadStatusToVBrief",
|
|
631
|
-
workspacePath,
|
|
632
|
-
message: cause instanceof Error ? cause.message : String(cause),
|
|
633
|
-
cause
|
|
634
|
-
})
|
|
635
|
-
});
|
|
636
|
-
/** Effect variant of `getVBriefACStatus`. */
|
|
637
|
-
const getVBriefACStatus = (workspacePath) => Effect.try({
|
|
638
|
-
try: () => getVBriefACStatusSync(workspacePath),
|
|
639
|
-
catch: (cause) => new BeadsOperationError({
|
|
640
|
-
operation: "getVBriefACStatus",
|
|
641
|
-
workspacePath,
|
|
642
|
-
message: cause instanceof Error ? cause.message : String(cause),
|
|
643
|
-
cause
|
|
644
|
-
})
|
|
645
|
-
});
|
|
646
|
-
//#endregion
|
|
647
|
-
export { getVBriefACStatusSync as a, syncBeadStatusToVBrief as c, getVBriefACStatus as i, withBdMutex as l, clearBeadsForIssue as n, resolveBdTimeout as o, createBeadsFromVBrief as r, retryBd as s, BeadsOperationError as t };
|
|
648
|
-
|
|
649
|
-
//# sourceMappingURL=beads-BeSMEjGT.js.map
|