opencode-swarm 7.200.13 → 7.200.14
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/binaries/win32-arm64/swarm-sandbox-runner.exe +0 -0
- package/binaries/win32-x64/swarm-sandbox-runner.exe +0 -0
- package/dist/cli/{attest-task-pvwft49v.js → attest-task-1bhnpxsr.js} +26 -26
- package/dist/cli/{auto-checkpoint-d42tskyk.js → auto-checkpoint-v0k01dwk.js} +4 -4
- package/dist/cli/{checkpoint-ga9vbvb1.js → checkpoint-w9fkn2v6.js} +8 -8
- package/dist/cli/{coder-settlement-rbhdzxs0.js → coder-settlement-4t577hx9.js} +4 -4
- package/dist/cli/{config-doctor-qh3aba3c.js → config-doctor-m4c4f4j3.js} +7 -7
- package/dist/cli/{core-vx7fxf4y.js → core-pqpsbekk.js} +1 -1
- package/dist/cli/{curator-drift-4e5nsjec.js → curator-drift-yb05q3a8.js} +5 -5
- package/dist/cli/{curator-llm-factory-cn47pa0k.js → curator-llm-factory-r2rsrmz4.js} +26 -26
- package/dist/cli/{curator-0nv1asjc.js → curator-sxq06cgw.js} +26 -26
- package/dist/cli/{doctor-knowledge-receipt-phase-id-5qs5w6jz.js → doctor-knowledge-receipt-phase-id-7z98yg2z.js} +4 -4
- package/dist/cli/{evidence-summary-service-fbhdnww1.js → evidence-summary-service-y3g4tg5y.js} +10 -10
- package/dist/cli/{gate-evidence-44bzkpnp.js → gate-evidence-7nasr4dk.js} +3 -3
- package/dist/cli/{guardrail-explain-ga6m57w3.js → guardrail-explain-zhq6djgr.js} +27 -27
- package/dist/cli/{guardrail-log-aekacstp.js → guardrail-log-enq4hp9f.js} +3 -3
- package/dist/cli/{guardrail-reset-ezjd8vtv.js → guardrail-reset-3k2x5vsr.js} +26 -26
- package/dist/cli/{hive-promoter-r8z673jn.js → hive-promoter-sstdct9j.js} +26 -26
- package/dist/cli/{index-cc2vkpg7.js → index-11aqm3bt.js} +1 -1
- package/dist/cli/{index-h8ta8mva.js → index-1520thw9.js} +1 -1
- package/dist/cli/{index-sx4fm1d2.js → index-25v6n1t3.js} +1 -1
- package/dist/cli/{index-v4g6rm68.js → index-39v48pf0.js} +3 -3
- package/dist/cli/{index-6kdyc1s7.js → index-5mbyavx0.js} +1 -1
- package/dist/cli/{index-8az4qgz7.js → index-6cnppnh7.js} +2 -2
- package/dist/cli/{index-6tpmpc0f.js → index-93xekq7n.js} +1 -1
- package/dist/cli/{index-x9gyt21k.js → index-9p3phwap.js} +2 -2
- package/dist/cli/{index-7811ftfy.js → index-b7y19187.js} +5 -5
- package/dist/cli/{index-nfjwshs6.js → index-fhrcyexn.js} +1 -1
- package/dist/cli/{index-dkg8meb8.js → index-g3mrxex7.js} +3 -3
- package/dist/cli/{index-qg38v82w.js → index-gsyv2s9g.js} +4 -4
- package/dist/cli/{index-6xaft4r3.js → index-gx2a1xgp.js} +1 -1
- package/dist/cli/{index-ffz00br0.js → index-h91a4abf.js} +3 -3
- package/dist/cli/{index-pxf512yn.js → index-j3me99q7.js} +3 -3
- package/dist/cli/{index-krrn8eg3.js → index-mem1hrkw.js} +1 -1
- package/dist/cli/{index-xfdx40ba.js → index-ne0s5g10.js} +5 -5
- package/dist/cli/{index-hs96g7xz.js → index-pdaycg02.js} +1 -1
- package/dist/cli/{index-h59n1rx5.js → index-phdf1pjq.js} +2 -2
- package/dist/cli/{index-1w9mc5ck.js → index-r160hfq9.js} +26 -26
- package/dist/cli/{index-a01knv2b.js → index-sm64f3fc.js} +542 -126
- package/dist/cli/{index-fh22ndnh.js → index-sxna6jn9.js} +1 -1
- package/dist/cli/{index-q0gtj1px.js → index-szwa4tek.js} +2 -2
- package/dist/cli/{index-165v1k07.js → index-szwmgbm4.js} +3 -3
- package/dist/cli/{index-9zw7mh20.js → index-t6dkmt0c.js} +3 -3
- package/dist/cli/{index-fxnj2qd5.js → index-vjdwrd9r.js} +1 -1
- package/dist/cli/{index-9v10n049.js → index-vqxvdx7n.js} +2 -2
- package/dist/cli/{index-1nnrz6yd.js → index-vv9k85h0.js} +6 -6
- package/dist/cli/{index-3jewj7q3.js → index-wj3a023e.js} +1 -1
- package/dist/cli/{index-8kta0a96.js → index-yc5e6yr5.js} +2 -2
- package/dist/cli/{index-0g2nvyn9.js → index-ztezaknp.js} +28 -28
- package/dist/cli/index.js +27 -27
- package/dist/cli/{knowledge-escalator-t29wynav.js → knowledge-escalator-h8j3v62j.js} +7 -7
- package/dist/cli/{knowledge-events-pqn56zk8.js → knowledge-events-f80mxhjd.js} +5 -5
- package/dist/cli/{knowledge-store-tset38av.js → knowledge-store-z0eb6xk5.js} +1 -1
- package/dist/cli/{knowledge-validator-6p132rab.js → knowledge-validator-k0jn2w06.js} +2 -2
- package/dist/cli/{mcp-j2zpg3pg.js → mcp-zg75c3e4.js} +1 -1
- package/dist/cli/{model-preflight-0n10a18z.js → model-preflight-2592b0fv.js} +26 -26
- package/dist/cli/{pending-delegations-qsvc60qb.js → pending-delegations-ek7600es.js} +2 -2
- package/dist/cli/{pr-subscriptions-zx205zj2.js → pr-subscriptions-wmzs42h3.js} +1 -1
- package/dist/cli/{pr-workflow-gate-04ypha5r.js → pr-workflow-gate-regg66xa.js} +26 -26
- package/dist/cli/{scan-cursor-6zb8bjmp.js → scan-cursor-rxpkxhj3.js} +2 -2
- package/dist/cli/{schema-9spe6r4w.js → schema-art9xdhq.js} +1 -1
- package/dist/cli/{scope-persistence-7b330a4k.js → scope-persistence-7ny8a0gk.js} +5 -5
- package/dist/cli/{server-q54h8edd.js → server-b4nczew1.js} +26 -26
- package/dist/cli/{skill-generator-k6gtr0fh.js → skill-generator-bbzwn7ny.js} +8 -8
- package/dist/cli/{snapshot-coordination-init-namz3ae3.js → snapshot-coordination-init-1v237k29.js} +26 -26
- package/dist/cli/{speckit-checkoff-40evtzf3.js → speckit-checkoff-tc2pswse.js} +3 -3
- package/dist/cli/{workflow-wal-file-qjez91sg.js → workflow-wal-file-4vh413p1.js} +2 -2
- package/dist/cli/{worktree-collision-ownership-k471ygv7.js → worktree-collision-ownership-vt740r91.js} +2 -2
- package/dist/cli/{worktree-isolation-5tbcb2j9.js → worktree-isolation-yqfqvtex.js} +26 -26
- package/dist/index.js +32 -15
- package/dist/memory/memory-family-migration.d.ts +57 -3
- package/dist/utils/ephemeral-session-teardown.d.ts +24 -5
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{createRequire}from"node:module";var __create=Object.create;var{getPrototypeOf:__getProtoOf,defineProperty:__defProp,getOwnPropertyNames:__getOwnPropNames,getOwnPropertyDescriptor:__getOwnPropDesc}=Object,__hasOwnProp=Object.prototype.hasOwnProperty;function __accessProp(key){return this[key]}var __toESMCache_node,__toESMCache_esm,__toESM=(mod,isNodeMode,target)=>{var canCache=mod!=null&&typeof mod==="object";if(canCache){var cache=isNodeMode?__toESMCache_node??=new WeakMap:__toESMCache_esm??=new WeakMap,cached=cache.get(mod);if(cached)return cached}target=mod!=null?__create(__getProtoOf(mod)):{};let to=isNodeMode||!mod||!mod.__esModule?__defProp(target,"default",{value:mod,enumerable:!0}):target;for(let key of __getOwnPropNames(mod))if(!__hasOwnProp.call(to,key))__defProp(to,key,{get:__accessProp.bind(mod,key),enumerable:!0});if(canCache)cache.set(mod,to);return to},__toCommonJS=(from)=>{var entry=(__moduleCache??=new WeakMap).get(from),desc;if(entry)return entry;if(entry=__defProp({},"__esModule",{value:!0}),from&&typeof from==="object"||typeof from==="function"){for(var key of __getOwnPropNames(from))if(!__hasOwnProp.call(entry,key))__defProp(entry,key,{get:__accessProp.bind(from,key),enumerable:!(desc=__getOwnPropDesc(from,key))||desc.enumerable})}return __moduleCache.set(from,entry),entry},__moduleCache,__commonJS=(cb,mod)=>()=>(mod||cb((mod={exports:{}}).exports,mod),mod.exports);var __returnValue=(v)=>v;function __exportSetter(name,newValue){this[name]=__returnValue.bind(null,newValue)}var __export=(target,all)=>{for(var name in all)__defProp(target,name,{get:all[name],enumerable:!0,configurable:!0,set:__exportSetter.bind(all,name)})};var __esm=(fn2,res)=>()=>(fn2&&(res=fn2(fn2=0)),res);var __require=createRequire(import.meta.url);var package_default;var init_package=__esm(()=>{package_default={name:"opencode-swarm",version:"7.200.13",description:"Architect-centric agentic swarm plugin for OpenCode - hub-and-spoke orchestration with SME consultation, code generation, and QA review",main:"dist/index.js",types:"dist/index.d.ts",exports:{".":{types:"./dist/index.d.ts",default:"./dist/index.js"},"./package.json":"./package.json"},bin:{"opencode-swarm":"./dist/cli/index.js"},type:"module",engines:{bun:">=1.3.13",node:">=22.13"},license:"MIT",repository:{type:"git",url:"https://github.com/ZaxbyHub/opencode-swarm.git"},publishConfig:{access:"public",registry:"https://registry.npmjs.org/"},keywords:["opencode","opencode-plugin","ai","agents","orchestration","swarm","multi-agent","llm"],files:["dist","dist/lang/grammars","binaries","evaluation-fixtures",".opencode/skills/brainstorm",".opencode/skills/specify",".opencode/skills/clarify-spec",".opencode/skills/swarm-resume",".opencode/skills/clarify",".opencode/skills/discover",".opencode/skills/consult",".opencode/skills/pre-phase-briefing",".opencode/skills/council",".opencode/skills/deep-dive",".opencode/skills/deep-research",".opencode/skills/codebase-review-swarm",".opencode/skills/swarm-implement",".opencode/skills/design-docs",".opencode/skills/swarm-pr-review",".opencode/skills/swarm",".opencode/skills/swarm-pr-feedback",".opencode/skills/swarm-pr-subscribe",".opencode/skills/swarm-ci-monitor",".opencode/skills/issue-ingest",".opencode/skills/swarm-plan",".opencode/skills/critic-gate",".opencode/skills/execute",".opencode/skills/phase-wrap",".opencode/skills/loop",".opencode/skills/writing-tests",".opencode/skills/running-tests",".opencode/skills/engineering-conventions",".opencode/skills/commit-pr",".opencode/skills/ci-failure-batching",".opencode/skills/gate-attribution",".opencode/skills/merge-queue-readiness",".opencode/skills/skill-edit-validation",".opencode/skills/worktree-retry-cleanup",".opencode/skills/test-file-split",".opencode/skills/fork-pr-operations",".opencode/skills/parallel-work-check",".opencode/skills/ci-fix-monitor",".opencode/skills/issue-tracer",".opencode/skills/orchestrating-subagents",".opencode/skills/durable-session-state","tests/fixtures/memory-recall","tests/fixtures/memory-recall-heldout","opencode-swarm.schema.json","README.md","LICENSE"],scripts:{clean:`bun -e "require('fs').rmSync('dist',{recursive:true,force:true})"`,build:"bun run clean && bun run scripts/generate-config-schema.ts && bun run scripts/copy-grammars.ts && bun build src/index.ts --outdir dist --target node --format esm --external web-tree-sitter --minify-whitespace --minify-syntax && bun build src/cli/index.ts --outdir dist/cli --target bun --format esm --external bash-parser --splitting && bun run scripts/copy-grammars.ts --to-dist && tsc --emitDeclarationOnly",typecheck:"tsc --noEmit",test:"bun test",lint:"biome lint .","lint:ci":"biome ci .","test:unit:ci":"bun scripts/ci/run-unit-tests-local.ts","validate:repo":"bun scripts/ci/repository-validation.ts","drift:check":"bun run scripts/drift-check.ts","check:pre-push":"bun run scripts/drift-check.ts --enforce --no-report && bun run check:registry-citations","schema:generate":"bun run scripts/generate-config-schema.ts","generate:commands-docs":"bun run scripts/generate-commands-docs.ts","check:runtime-src-refs":"bun run scripts/check-runtime-src-refs.ts","drift:fix":"bun run scripts/drift-check.ts --fix --confirm","skills:sync":"bun run scripts/sync-qa-gate-skills.ts",format:"biome format . --write",check:"biome check --write .",dev:"bun run build && opencode","package:smoke":"node scripts/package-smoke.mjs",prepare:"bun run build","repro:704":"node scripts/repro-704.mjs","repro:2669":"node scripts/repro-2669.mjs","repro:2670":"node scripts/repro-2670.mjs","repro:1144":"bun scripts/repro-1144.mjs","repro:1873":"bun build scripts/repro-1873-entry.ts --outdir dist-build-test/repro-1873 --target node --format esm && node scripts/repro-1873.mjs","repro:2487":"bun build scripts/repro-2487-parity-entry.ts --outdir dist-build-test/repro-2487 --target node --format esm && node scripts/repro-2487-parity.mjs","check:events":"bun run scripts/check-event-contract.ts","check:retention":"bun run scripts/check-retention-registry.ts","check:core-events":"bun run scripts/check-core-events-usage.ts","check:shell-audit":"bun run scripts/check-shell-audit-usage.ts","check:trajectory-store":"bun run scripts/check-trajectory-store-usage.ts","check:mock-cleanup":"bun run scripts/check-mock-cleanup.ts","check:invariants":"bun run scripts/check-invariants.ts","check:token-formula":"bun run scripts/check-token-formula.ts","check:cross-contamination":"bun run scripts/check-cross-contamination.ts","check:test-clock":"bun run scripts/check-test-clock.ts","check:test-file-cap":"bun run scripts/check-test-file-cap.ts","check:test-tmpdir":"bun run scripts/check-test-tmpdir.ts","check:bash-portability":"bun run scripts/check-bash-portability.ts","check:pending-fragment":"bun run scripts/check-pending-fragment.ts","check:gate-portability":"bun run scripts/check-gate-portability.ts","check:bare-spawn":"bun run scripts/check-bare-executable-spawn.ts","check:error-channel-discard":"bun run scripts/check-error-channel-discard.ts","check:path-identity":"bun run scripts/check-path-identity.ts","check:registry-citations":"bun run scripts/check-registry-citations.ts","check:memory-recall":"bun run scripts/memory-recall-regression.ts","check:retrieval-quality":"bun run scripts/retrieval-quality-regression.ts"},dependencies:{"@modelcontextprotocol/sdk":"^1.30.0","@opencode-ai/plugin":"^1.18.3","@opencode-ai/sdk":"^1.18.3","@vscode/tree-sitter-wasm":"^0.3.0","bash-parser":"^0.5.0","p-limit":"^7.3.0",picomatch:"^4.0.4","proper-lockfile":"^4.1.2","quick-lru":"^7.3.0","web-tree-sitter":"^0.25.0",zod:"4.3.6"},devDependencies:{"@biomejs/biome":"2.3.14","@types/picomatch":"^4.0.3","bun-types":"1.3.8","js-yaml":"^4.1.1",typescript:"^5.7.3"},peerDependencies:{"@xenova/transformers":"^2.17.2"},peerDependenciesMeta:{"@xenova/transformers":{optional:!0}}}});var QA_AGENTS,PIPELINE_AGENTS,ORCHESTRATOR_NAME="architect",ALL_SUBAGENT_NAMES,ALL_AGENT_NAMES;var init_agent_names=__esm(()=>{QA_AGENTS=["reviewer","critic","critic_oversight","critic_finding_validator"],PIPELINE_AGENTS=["explorer","coder","test_engineer"],ALL_SUBAGENT_NAMES=["sme","researcher","docs","docs_design","designer","critic_sounding_board","critic_drift_verifier","critic_hallucination_verifier","critic_architecture_supervisor","curator_init","curator_phase","curator_postmortem","curator_consolidation","council_generalist","council_skeptic","council_domain_expert","skill_improver","spec_writer",...QA_AGENTS,...PIPELINE_AGENTS],ALL_AGENT_NAMES=["architect",...ALL_SUBAGENT_NAMES]});function getPrWorkflowToolCapability(toolName,mode){let metadata=TOOL_METADATA[toolName];if(!metadata?.prWorkflow?.modes.includes(mode))return null;return metadata.prWorkflow.capability}var TOOL_METADATA,TOOL_NAMES,TOOL_NAME_SET,TOOL_DESCRIPTIONS,AGENT_TOOL_MAP;var init_tool_metadata=__esm(()=>{init_agent_names();TOOL_METADATA={diff:{description:"structured git diff with contract change detection",agents:["architect","reviewer","critic_finding_validator","critic_oversight","coder","test_engineer"],prWorkflow:{modes:["PR_REVIEW","PR_FEEDBACK"],capability:"observe"}},diff_summary:{description:"filter classified AST changes by category, risk level, or file for reviewer drill-down",agents:["architect","reviewer","critic_finding_validator","critic_oversight"],prWorkflow:{modes:["PR_REVIEW","PR_FEEDBACK"],capability:"observe"}},syntax_check:{description:"check syntax of source files using tree-sitter parsers across multiple languages, returning per-file errors",agents:["architect","coder","test_engineer"],prWorkflow:{modes:["PR_REVIEW"],capability:"validate"}},placeholder_scan:{description:"todo and FIXME comment detection",agents:["architect","reviewer","critic_finding_validator"],prWorkflow:{modes:["PR_REVIEW","PR_FEEDBACK"],capability:"observe"}},imports:{description:"find all consumers that import from a given file — use before refactoring shared modules to avoid breaking unseen dependents",agents:["architect","sme","researcher","docs","docs_design","critic_sounding_board","critic_drift_verifier","critic_hallucination_verifier","reviewer","critic_finding_validator","critic","coder","test_engineer"],prWorkflow:{modes:["PR_REVIEW","PR_FEEDBACK"],capability:"observe"}},lint:{description:"run project linter in check or fix mode; supports biome, eslint, ruff, clippy, and more, returns structured results",agents:["architect","reviewer","critic_finding_validator","coder"],prWorkflow:{modes:["PR_REVIEW"],capability:"validate"}},secretscan:{description:"scan for secrets (API keys, tokens, passwords) via regex and entropy; returns redacted previews, excludes common dirs",agents:["architect","reviewer","critic_finding_validator","critic_oversight"],prWorkflow:{modes:["PR_REVIEW"],capability:"validate"}},sast_scan:{description:"static analysis security scan",agents:["architect","reviewer","critic_finding_validator","critic_oversight"],prWorkflow:{modes:["PR_REVIEW"],capability:"validate"}},build_check:{description:"discover and run build, typecheck, and test commands for various project ecosystems in the working directory",agents:["architect","coder","test_engineer"]},pre_check_batch:{description:"parallel verification: lint:check + secretscan + sast_scan + quality_budget",agents:["architect","reviewer","critic_finding_validator"]},quality_budget:{description:"code quality budget check",agents:["architect"],prWorkflow:{modes:["PR_REVIEW"],capability:"validate"}},symbols:{description:"extract exported symbols (functions, classes, interfaces, types) from source files; supports TypeScript, JavaScript, Python, Rust, Go, Dart, Ruby, PHP, and Java",agents:["architect","sme","researcher","docs","docs_design","designer","critic_sounding_board","critic_drift_verifier","critic_hallucination_verifier","spec_writer","reviewer","critic_finding_validator","critic","coder","test_engineer"]},complexity_hotspots:{description:"git churn × complexity risk map",agents:["architect","sme","researcher","critic_sounding_board","critic_drift_verifier","critic_hallucination_verifier","reviewer","critic_finding_validator","critic","critic_oversight","explorer","test_engineer"]},schema_drift:{description:"OpenAPI spec vs route drift",agents:["architect","sme","researcher","docs","explorer"],prWorkflow:{modes:["PR_REVIEW","PR_FEEDBACK"],capability:"observe"}},todo_extract:{description:"structured TODO/FIXME extraction; with task_id, records the high-priority count as todo_scan gate evidence",agents:["architect","researcher","docs","explorer","coder"],prWorkflow:{modes:["PR_REVIEW","PR_FEEDBACK"],capability:"observe"}},evidence_check:{description:"verify task evidence completeness",agents:["architect","critic_oversight"]},check_gate_status:{description:"check the gate status of a specific task",agents:["architect","critic_oversight"]},completion_verify:{description:"verify completed tasks have required evidence",agents:["architect","critic_oversight"]},complete_pr_workflow:{description:"validate terminal PR workflow evidence and clear its durable session gate",agents:["architect"]},abort_pr_workflow:{description:"abort an unrecoverable PR_REVIEW/PR_FEEDBACK mechanical gate and clear its durable session state",agents:["architect"]},authorize_pr_review_reentry:{description:"issue a one-use, identity-bound reviewer/test_engineer re-entry authorization for the active PR_REVIEW workflow (issue #2383)",agents:["architect"]},submit_pr_review_result:{description:"submit one child-bound typed result for an active PR-review base or micro discovery lane",agents:[],prWorkflow:{modes:["PR_REVIEW"],capability:"validate"}},approve_plan_critic:{description:"record a MANUAL plan_critic_gate approval snapshot to unblock the ratchet-tighter critic_pre_plan execution gate when the critic already returned APPROVED but the mechanical recorder failed to persist it (issue #2012), or as the sanctioned recovery for a bookkeeping-grade hashed-field repair under the critic-gate PLAN FREEZE rule (the reason must state which case applies)",agents:["architect"]},approve_retry_sounding_board:{description:"record a MANUAL critic_sounding_board gate entry to unblock the coder retry circuit-breaker gate when the sounding board returned APPROVED but the mechanical recorder missed it (issue #2703)",agents:["architect"]},recover_rework_task:{description:"recover a task wedged at rework_required when the reviewer/test_engineer verdict did not require a code change: write a supervised stage_a_passed so those gates can be re-dispatched without re-running the coder (issue #2755)",agents:["architect"]},recover_stage_a_task:{description:"recover a task wedged in the settlement-backed Stage A deadlock — workflow at idle/blocked while a COMMITTED accepted coder settlement and green post-settlement pre-check proof justify Stage A: write a settlement-backed stage_a_passed so reviewer/test_engineer can be dispatched, without re-running the coder (issue #2828)",agents:["architect"]},prepare_pr_workflow_checkout:{description:"prepare an auditable PR workflow checkout or restore its exact original branch/HEAD and preserved stash after terminal cleanup",agents:["architect"]},invalidate_pr_feedback_publication:{description:"invalidate the armed PR_FEEDBACK publication generation so approved content can change, superseding every content-dependent approval and reopening the exact scoped rework + fresh-review path (issue #2108)",agents:["architect"]},record_implementation_review:{description:"record fresh-context reviewer + critic APPROVE verdicts for the implementation diff so the /swarm issue --trace workflow can satisfy its review gate before commit-pr handoff",agents:["architect"]},record_issue_publication:{description:"record a publication receipt so the /swarm issue --trace workflow reaches its terminal published state after the PR is created/updated",agents:["architect"]},record_issue_reproduction:{description:"record the reproduction outcome for the current traced issue so the /swarm issue --trace workflow can satisfy its reproduction gate and transition to PLAN",agents:["architect"]},record_recurrence_sweep:{description:"record the recurrence sweep (defect class, predicates, hit dispositions, guardrail proof, related-problems results) so the /swarm issue --trace workflow can satisfy its recurrence gate before commit-pr handoff",agents:["architect"]},record_branch_freshness:{description:"record the Phase 0 branch-freshness outcome (synced / behind:<n> / fetch-failed:<reason> plus optional user override) so the /swarm issue --trace workflow can pass its freshness gate before transitioning to PLAN (issue #2564)",agents:["architect"]},record_trace_validation:{description:"record one per-phase trace-check.sh validator outcome (phase, pass/fail, reviewedCommit, treeId) so the /swarm issue --trace workflow can satisfy its validator-receipt gate before commit-pr handoff (issue #2564)",agents:["architect"]},record_merge_approval:{description:"record the human merge approval bound to the exact PR head SHA so the /swarm issue --trace workflow reaches its terminal merge_approval_recorded state — recorded for audit only, never certified or driven by the plugin (issue #2564)",agents:["architect"]},rebind_pr_feedback_head:{description:"rebind a PR_FEEDBACK workflow to a new verified remote PR head after merge/rebase/conflict repair, invalidating ancestry-bound receipts so the mechanical ladder re-runs",agents:["architect"]},run_pr_feedback_stage_a:{description:"execute and persist mandatory PR-feedback Stage A checks on a content-bound revision",agents:["architect"]},submit_council_verdicts:{description:"submit pre-collected council member verdicts for synthesis (architect MUST dispatch critic/reviewer/sme/test_engineer/explorer as Agent tasks first; this tool synthesizes only, it does not contact members)",agents:[]},submit_phase_council_verdicts:{description:"submit pre-collected phase-level council member verdicts for holistic phase synthesis (architect MUST dispatch all 5 council members with phase-scoped context first; this tool synthesizes only, it does not contact members)",agents:[]},declare_council_criteria:{description:"pre-declare acceptance criteria for a task before the coder starts work; criteria are read back during council evaluation",agents:[]},sbom_generate:{description:"SBOM generation for dependency inventory",agents:["architect"]},checkpoint:{description:"create named git checkpoints for save, restore, and delete — use before risky operations to enable rollback; a destructive restore previews first and requires the confirm_token issued in the preview (#2946)",agents:["architect"]},pkg_audit:{description:"dependency vulnerability scan — npm/pip/cargo",agents:["architect","critic_hallucination_verifier","reviewer","critic_finding_validator","critic_oversight","test_engineer"],prWorkflow:{modes:["PR_REVIEW"],capability:"validate"}},parse_lane_candidates:{description:"Parse [CANDIDATE] rows from a dispatch_lanes or collect_lane_results artifact (by output_ref), produce structured records with provenance, optionally persist to a per-batch sidecar JSONL. Pure-parser variant exists as internal module.",agents:["architect"]},plan_conflict_check:{description:"read-only advisory check (#1656): compute a pairwise file-conflict matrix for N proposed parallel task groups using declared scopes and optional git co-change; returns a verdict (all_disjoint / conflicts_present / unknown_scopes), per-pair evidence, and a suggested serialization order. Writes nothing — the execution gate independently recomputes the verdict inline at dispatch time via the same helper. Call BEFORE attempting parallel dispatch to confirm disjointness.",agents:["architect"]},write_pr_review_trigger_eval:{description:"persist the complete PR-review trigger evaluation with exact-set validation, dispatch provenance, and live merge-base verification",agents:["architect"]},write_pr_review_artifact:{description:"persist schema-validated PR-review findings checkpoints and exact actionable feedback handoffs under the active run; reviewer verdicts marked `UNVERIFIED` persist to the findings ledger as `PENDING` records routed back to the reviewer — do not resubmit a row whose verdict is already recorded",agents:["architect"]},pr_review_submission:{description:"submit a settled, head-bound PR review to GitHub through the gh PR Review API after the PR_REVIEW gate clears; architect-only, refuses while a gate is active or the run was aborted after settlement",agents:["architect"]},export_pr_review_partial_results:{description:"export the validated partial results of an ABORTED PR_REVIEW run as a partial, non-authoritative artifact bound per-item to receipt-authenticated findings; architect-only, requires the gate cleared and an abort event binding session and head, never implies completion or feedback consent",agents:["architect"]},prepare_pr_feedback_scope:{description:"prepare an exact file scope for one PR-feedback coder Task after immutable feedback verification settles",agents:["architect"]},prepare_pr_feedback_commit_message:{description:"author a PR_FEEDBACK commit message that cannot go inline (e.g. a Co-Authored-By trailer) into a file OUTSIDE the repository; returns the path for git commit -F",agents:["architect"]},test_runner:{description:"auto-detect and run tests",agents:["architect","reviewer","critic_finding_validator","test_engineer"]},test_impact:{description:"identify test files impacted by changed source files via import analysis",agents:["architect","reviewer","critic_finding_validator","critic_oversight","test_engineer"],prWorkflow:{modes:["PR_REVIEW","PR_FEEDBACK"],capability:"observe"}},mutation_test:{description:"executes pre-generated mutation patches against tests, evaluates kill rate against quality gate thresholds; test selection comes from explicit files (override) or source_files derived via the impact analyzer with a typed bounded fallback",agents:["architect","test_engineer"]},generate_mutants:{description:"generate LLM-based mutation testing patches for source files; returns MutationPatch[] for direct consumption by the mutation_test tool",agents:["architect"]},detect_domains:{description:"detect which SME domains are relevant for a given text",agents:["architect","sme","docs","docs_design","critic_sounding_board","critic_drift_verifier","critic_hallucination_verifier","critic","critic_oversight","explorer"]},git_blame:{description:"per-line git blame metadata: sha, author, date, summary for each line in a file",agents:["reviewer","critic_finding_validator","explorer","architect"],prWorkflow:{modes:["PR_REVIEW","PR_FEEDBACK"],capability:"observe"}},gitingest:{description:"fetch a GitHub repository full content via gitingest.com",agents:["architect","docs","explorer"],prWorkflow:{modes:["PR_REVIEW","PR_FEEDBACK"],capability:"observe"}},retrieve_summary:{description:"retrieve the full content of a stored tool output summary",agents:["architect","sme","docs","docs_design","designer","critic_sounding_board","critic_drift_verifier","critic_hallucination_verifier","critic_architecture_supervisor","spec_writer","reviewer","critic_finding_validator","critic","coder","test_engineer"],prWorkflow:{modes:["PR_REVIEW","PR_FEEDBACK"],capability:"observe"}},retrieve_lane_output:{description:"retrieve paged full dispatch lane output by output_ref; use before consuming truncated lane previews or routing candidates from lane results",agents:["architect"],prWorkflow:{modes:["PR_REVIEW","PR_FEEDBACK"],capability:"observe"}},extract_code_blocks:{description:"extract code blocks from text content and save them to files",agents:["docs","docs_design","designer","spec_writer","coder","test_engineer"]},phase_complete:{description:"preflight every applicable phase gate, report all blockers, and atomically commit a current passing snapshot",agents:["architect"]},run_phase_review:{description:"run the bounded phase-final review engine and persist complete content-addressed review evidence",agents:["architect"]},repair_gate_evidence:{description:"quarantine recoverable exact-task gate evidence, rebuild from durable requirements, recover receipt-backed legacy marker wedges or the exact sentinel-only historical reset, and refuse every other receipt-less reconstruction",agents:["architect"]},repair_knowledge_receipt_ledger:{description:"validate or repair authoritative knowledge receipts, preserve corrupt authority in bounded quarantine, require scoped re-evaluation, and backfill stable phase ids across the whole ledger (operation backfill_phase_id; phase/session_id do not scope the backfill)",agents:["architect"]},record_directive_override:{description:"record an audited architect override for identified critical-directive violations without bypassing unreadable authority",agents:["architect"]},save_plan:{description:"save a structured implementation plan",agents:["architect"]},update_task_status:{description:"mark tasks complete, track phase progress",agents:["architect"]},lint_spec:{description:"validate .swarm/spec.md format and required fields",agents:["architect","spec_writer"]},write_retro:{description:"document phase retrospectives via phase_complete workflow, capture lessons learned",agents:["architect"]},write_drift_evidence:{description:"write drift verification evidence for a completed phase",agents:["architect"]},write_hallucination_evidence:{description:"write hallucination verification evidence for a completed phase",agents:["architect"]},write_mutation_evidence:{description:"write mutation gate evidence for a completed phase; normalizes PASS/WARN/FAIL/SKIP verdicts and writes .swarm/evidence/{phase}/mutation-gate.json",agents:["architect"]},declare_scope:{description:"declare file scope for next coder delegation",agents:["architect"]},scope_validate:{description:"validate shell writes against an inline file scope",agents:["architect"]},knowledge_query:{description:"query swarm or hive knowledge with optional filters",agents:["architect","skill_improver","spec_writer"]},doc_scan:{description:"scan project documentation files and build an index manifest",agents:["architect","docs_design","skill_improver","spec_writer","explorer"]},doc_extract:{description:"extract actionable constraints from project documentation",agents:["architect","docs_design","skill_improver","spec_writer"]},curator_analyze:{description:"run curator phase analysis and optionally apply knowledge recommendations",agents:["architect"]},consensus_mine:{description:"mine cross-run consensus from existing .swarm evidence into an immutable proposals-only report; also deletes its own reports past consensus.report_retention, appends to the shared recommendation dedup ledger (in the shared cohort root, outside this project, when a knowledge link is active), and mirrors proposals into pending swarm-memory proposals when memory is enabled",agents:["architect","curator_phase","curator_postmortem"]},knowledge_add:{description:"store a new lesson in the knowledge base",agents:["architect","coder"]},knowledge_recall:{description:"search the knowledge base for relevant past decisions",agents:["architect","sme","docs","docs_design","designer","critic_sounding_board","critic_drift_verifier","critic_hallucination_verifier","critic_architecture_supervisor","curator_init","curator_phase","skill_improver","spec_writer","reviewer","critic_finding_validator","critic","critic_oversight","explorer","coder","test_engineer"]},knowledge_remove:{description:"delete an outdated swarm knowledge entry by ID (swarm tier only)",agents:["architect"]},co_change_analyzer:{description:"detect hidden couplings by analyzing git history",agents:["architect"]},context_status:{description:"report current context-window headroom for the active session — returns tokens-used, usageSource (provider|estimated), model-limit with provenance (modelLimitSource: host|override|provider_cap|native|fallback; modelLimitResolution: user_provider_model|user_model|user_default|live_model_limit|static_provider_cap|static_native|static_default; fallbackActive: true when the denominator came from a static table or the flat 128k default — treat headroom as uncertain), usage-percent, threshold-state (none/warn/critical), model name, and provider. Pure read-only: no state mutation, no warning injection. Works whether context_budget.enabled is true or false.",agents:["architect"]},search:{description:"Workspace-scoped ripgrep-style text search with structured JSON output. Supports literal and regex modes, glob filtering, and result limits. NOTE: This is text search, not structural AST search — use symbols and imports tools for structural queries.",agents:["architect","sme","docs","docs_design","designer","critic_hallucination_verifier","skill_improver","spec_writer","reviewer","critic_finding_validator","critic_oversight","explorer","coder","test_engineer","researcher"]},ast_grep:{description:"Read-only structural AST search using ast-grep patterns with optional language and glob filters. Use for syntax-aware code pattern searches; does not rewrite files.",agents:["architect","sme","docs","docs_design","critic_hallucination_verifier","spec_writer","explorer","coder","test_engineer","researcher"]},actionlint_scan:{description:"Run actionlint against GitHub Actions workflow YAML files with structured findings. Resolves actionlint lazily and does not modify files.",agents:["architect","test_engineer"],prWorkflow:{modes:["PR_REVIEW"],capability:"validate"}},osv_scan:{description:"Run OSV-Scanner against a workspace path and return structured dependency vulnerability findings. Resolves osv-scanner lazily and does not modify files.",agents:["architect","test_engineer"],prWorkflow:{modes:["PR_REVIEW"],capability:"validate"}},gh_evidence:{description:"Fetch bounded GitHub pull request or issue metadata through gh for review and CI evidence. Resolves gh lazily and is read-only.",agents:["architect","researcher"],prWorkflow:{modes:["PR_REVIEW","PR_FEEDBACK"],capability:"observe"}},pr_workflow_status:{description:"Read-only architect observation of local git state (HEAD, branch, clean/dirty with a bounded changed-file list, remotes) plus a session-pinned PR workflow gate summary and the PR_FEEDBACK publication-generation section (state, attempts, invalidation reason, recovery guidance). For an active PR_REVIEW gate it also projects that derived state read-only: per-boundary settlement (post_explorer / post_reviewer / post_critic), per-lane coverage (accepted, rejected, one-line latest finding), and the bounded candidate inventory, each degrading to a typed unavailable state rather than an absence claim. Use to observe state under the fail-closed PR_REVIEW/PR_FEEDBACK gate. Never executes PR-controlled scripts and never reads another session gate.",agents:["architect"],prWorkflow:{modes:["PR_REVIEW","PR_FEEDBACK"],capability:"observe"}},batch_symbols:{description:"Batched symbol extraction across multiple files. Returns per-file symbol summaries with isolated error handling.",agents:["architect","critic_hallucination_verifier","reviewer","critic_finding_validator","critic_oversight","explorer"]},suggest_patch:{description:"Reviewer-safe structured patch suggestion tool. Produces context-anchored patch artifacts without file modification. Returns structured diagnostics on context mismatch.",agents:["architect","reviewer","critic_finding_validator"]},req_coverage:{description:"query requirement coverage status for tracked functional requirements",agents:["critic_sounding_board","critic_drift_verifier","critic_hallucination_verifier","spec_writer","critic","critic_oversight"]},get_approved_plan:{description:"retrieve the last critic-approved immutable plan snapshot for baseline drift comparison",agents:["critic_drift_verifier","critic","critic_oversight"]},repo_map:{description:"query the repo code graph: importers, dependencies, blast radius, localization, ontology facts, package boundaries, and heuristic preflight packets before refactoring; ontology findings are advisory, not formal proofs",agents:["architect","critic_sounding_board","critic_drift_verifier","critic_hallucination_verifier","critic_architecture_supervisor","reviewer","critic_finding_validator","critic","critic_oversight","explorer","coder","test_engineer"],prWorkflow:{modes:["PR_REVIEW","PR_FEEDBACK"],capability:"observe"}},get_qa_gate_profile:{description:"retrieve the QA gate profile for the current or exact future plan identity: gates (reviewer, test_engineer, sme_enabled, critic_pre_plan, sast_enabled, council_mode, hallucination_guard, mutation_test, phase_council, drift_check, final_council), lock state, profile hash, the calling session’s ratchet-tighter overrides, and the EFFECTIVE gates (profile merged with those overrides; durable across restart). Read-only and never creates state.",agents:["architect"]},set_qa_gates:{description:"configure the QA gate profile for the current plan or bootstrap an exact future plan with swarm_id and plan_title. Architect-only. The initial selection may set explicit true/false values over defaults; later changes are ratchet-tighter and rejected once locked after critic approval. Supports: reviewer, test_engineer, sme_enabled, critic_pre_plan, sast_enabled, council_mode, hallucination_guard, mutation_test, phase_council, drift_check, final_council, plus adopt_legacy_binding_only for exact-binding recovery without mutating gates.",agents:["architect"]},web_search:{description:"External web search (Tavily or Brave) for architect-driven council research, SME domain research, researcher auto-research, and skill-improver research. Returns titled results with snippets, URLs, normalized query metadata, temporal intent, freshness, and removed stale years. Config-gated on council.general.enabled in the resolved config: global ~/.config/opencode/opencode-swarm.json, then project .opencode/opencode-swarm.json overrides. Requires a search API key. Used by the architect in MODE: COUNCIL to gather a RESEARCH CONTEXT before dispatching council agents, by SME for opt-in external skill/source evaluation, and by the researcher agent for multi-source auto-research.",agents:["sme","researcher","skill_improver"]},web_fetch:{description:"Fetch the readable text of a single http(s) URL (architect-only). Returns decoded page text, document title, final URL after redirects, and an evidence reference. Reads primary sources that web_search only surfaces as snippets. Config-gated on council.general.enabled. Blocks private/loopback/link-local/metadata addresses (re-validated and re-pinned across redirects); enforces timeout and body size cap.",agents:[]},convene_general_council:{description:"Synthesize responses from a multi-model General Council. Accepts parallel member responses (Round 1, optionally Round 2), detects disagreements, and returns consensus points, persisting disagreements, and a structured synthesis. Architect-only. Config-gated on council.general.enabled in the resolved config: global ~/.config/opencode/opencode-swarm.json, then project .opencode/opencode-swarm.json overrides.",agents:[]},write_final_council_evidence:{description:"Persist project-scoped final council evidence to .swarm/evidence/final-council.json. PREREQUISITE: dispatch critic, reviewer, sme, test_engineer, and explorer as project-scoped Agent tasks and collect their CouncilMemberVerdict JSON — this tool synthesizes only. Rejects on insufficient quorum or CONCERNS with unresolved requiredFixes; normalizes verdicts to approved/concerns/rejected. Architect-only.",agents:[]},skill_generate:{description:"compile knowledge entries into a structured SKILL.md draft",agents:["skill_improver"]},skill_list:{description:"list generated skill files and their status",agents:["skill_improver"]},skill_apply:{description:"activate a draft skill proposal",agents:[]},skill_inspect:{description:"inspect the content and source entries of a skill file",agents:["skill_improver"]},run_stale_reconciliation:{description:"reconcile skills against the knowledge store: mark skills stale when source knowledge is archived or deleted, or clear stale markers",agents:["architect"]},skill_regenerate:{description:"regenerate an active skill by re-clustering its source knowledge entries and updating the SKILL.md in place",agents:[]},skill_retire:{description:"retire a generated skill by adding a retired.marker file; retired skills are excluded from scoring and injection",agents:[]},skill_improve:{description:"run the skill_improver agent to review and refine skills",agents:["skill_improver"]},spec_write:{description:"author or update .swarm/spec.md for the current project",agents:["spec_writer"]},knowledge_receipt:{description:"file a receipt for retrieved knowledge (applied/ignored/contradicted + new lessons), recorded as immutable knowledge events",agents:["architect","sme","docs","docs_design","designer","critic_sounding_board","critic_drift_verifier","critic_hallucination_verifier","critic_architecture_supervisor","curator_init","curator_phase","skill_improver","spec_writer","reviewer","critic_finding_validator","critic","coder","test_engineer"]},knowledge_receipt_status:{description:"receipt status",agents:["architect"]},knowledge_archive:{description:"archive (default), quarantine, or purge a swarm or hive knowledge entry by ID with an immutable audit tombstone; purge requires an admin flag",agents:["architect"]},swarm_memory_recall:{description:"recall scoped Swarm memory for the current repository as untrusted background",agents:[]},swarm_memory_propose:{description:"create a pending Swarm memory proposal; does not write durable memory directly",agents:[]},swarm_memory_outcome:{description:"record useful, dead-end, or corrected outcomes and, when enabled, synchronously refresh deterministic memory lessons",agents:[]},swarm_command:{description:"run supported /swarm commands through the canonical command registry",agents:["architect","sme","researcher","docs","docs_design","designer","reviewer","critic_finding_validator","critic","explorer","coder","test_engineer"]},dispatch_lanes:{description:"dispatch read-only exploration/review lanes concurrently and BLOCK until all finish; prefer dispatch_lanes_async for non-blocking dispatch, use this only when promptAsync is unavailable",agents:["architect"]},dispatch_lanes_async:{description:"launch read-only advisory lanes non-blockingly and return a batch id plus lane session handles immediately; each lane agent must be a registered generated agent name (unregistered bare roles are refused on multi-swarm hosts); launch_timeout_ms is only a promptAsync acceptance budget, not a lane runtime timeout; poll incrementally with collect_lane_results (wait omitted), or join with wait: true for all results",agents:["architect"]},collect_lane_results:{description:"collect/poll a dispatch_lanes_async batch — OBSERVATION ONLY; it can never cancel or abort a lane. A presumed-stale sweep runs on every call, settling lanes past the horizon: idle host to stale, unobservable host to a typed liveness error. The wait budget (timeout_ms) bounds this observer call only — its expiry, a missing messages client, or a degraded liveness probe never kills a lane, never proves it died, and never settles anything. If a collection returns pending lanes, poll again first; busy/retry host status is live evidence, not failure. Cancellation is a distinct, explicit, authorized, potentially destructive action: use cancel_lane_batch (confirm: true + reason), never this tool. An explicit operator cancellation settles as the distinct operator_cancelled class — not liveness. Unsettled lanes are reported in pending_lanes (batch_id, lane_id, status, output_ref) regardless of include_pending. Does not advance workflow gates. Settled-lane inline output is delivered once: later polls set output_omitted_repeat: true and omit output but keep output_ref for retrieval via retrieve_lane_output.",agents:["architect"]},cancel_lane_batch:{description:"cancel ACTIVE lanes of a dispatch_lanes_async batch — the only cancellation surface (collect_lane_results cannot cancel). Destructive and authorization-gated: requires confirm: true + a bounded reason, recorded on cancelled terminals as the distinct operator_cancelled class (never liveness; not auto-retryable, never consumes retry budget — re-dispatch explicitly). Race-safe per lane: busy/retry refused (live work is never destroyed — human force path: /swarm abort-pr-workflow); degraded/absent status probe refuses the whole batch fail-closed; idle or host-unknown sessions may be cancelled; a child completing in the race window is preserved; an abort timeout never claims cancellation.",agents:["architect"]},summarize_work:{description:"emit a short structured summary of completed work (key decisions, assumptions, risks, constraints) at task completion; rolls up per phase for architecture-supervisor review. Advisory, never blocks.",agents:["architect","sme","researcher","docs","docs_design","designer","explorer","coder","test_engineer"]},write_architecture_supervisor_evidence:{description:"persist the architecture supervisor verdict for a phase (architect MUST dispatch critic_architecture_supervisor first and collect its JSON verdict; this tool persists only, it does not contact the supervisor)",agents:["architect"]},lean_turbo_plan_lanes:{description:"partition phase tasks into parallel lanes based on file-scope conflicts for Lean Turbo execution",agents:[]},lean_turbo_acquire_locks:{description:"acquire file locks for all files in a lane (all-or-nothing) before lane execution",agents:[]},lean_turbo_runner_status:{description:"read Lean Turbo run state from .swarm/turbo-state.json",agents:[]},lean_turbo_critic:{description:"dispatch a read-only critic agent to evaluate boundary conditions for a completed Lean Turbo phase (satisfies the turbo.lean.phase_critic gate)",agents:[]},lean_turbo_review:{description:"dispatch a read-only reviewer agent to evaluate a completed Lean Turbo phase",agents:[]},lean_turbo_run_phase:{description:"Execute a phase using Lean Turbo parallel lane execution. Plans lanes, acquires file locks, and dispatches coder agents concurrently. Use when Lean Turbo is active and you want to execute all tasks in a phase in parallel lanes.",agents:[]},lean_turbo_status:{description:"returns Lean Turbo configuration and active status for the current session",agents:[]},swarm_apply_patch:{description:"Apply a unified diff patch to workspace files with exact context matching, atomic writes, and path validation. Use standard unified diff format only — does NOT support *** Begin Patch / *** Update File payloads (use native apply_patch for those).",agents:["coder","test_engineer"]},external_skill_discover:{description:"Discover external skill candidates from configured sources. Returns a disabled message when external_skills.curation_enabled is false.",agents:[]},external_skill_list:{description:"List external skill candidates in the quarantine store. Returns a disabled message when external_skills.curation_enabled is false.",agents:[]},external_skill_inspect:{description:"Inspect a specific external skill candidate by ID. Returns a disabled message when external_skills.curation_enabled is false.",agents:[]},external_skill_promote:{description:"Promote a validated external skill candidate to an active generated skill. Returns a disabled message when external_skills.curation_enabled is false.",agents:[]},external_skill_reject:{description:"Reject an external skill candidate after evaluation. Returns a disabled message when external_skills.curation_enabled is false.",agents:[]},external_skill_delete:{description:"Delete an external skill candidate from the quarantine store. Returns a disabled message when external_skills.curation_enabled is false.",agents:[]},external_skill_revoke:{description:"Revoke a previously promoted external skill. Returns a disabled message when external_skills.curation_enabled is false.",agents:[]},epic_next_wave:{description:"Epic Mode: the single, idempotent way forward while an epic is open. Closes the active wave once every task is resolved (recording per-task outcomes and declared-vs-actual divergence, which Epic learning uses to plan later waves), keeps phases in order, and issues the next wave of disjoint tasks with dispatch instructions. Returns a status: dispatch | declare-scopes | in-progress | blocked | phase-ready-for-review | epic-complete | refused. Requires `epic.mode.enabled: true` and an epic opened by `/swarm epic start`.",agents:[]},epic_phase_review:{description:"Epic Mode phase readiness: dispatch a read-only phase reviewer, then (only if it APPROVES) a read-only phase critic over the completed phase; parse both verdicts from the agents and record them to .swarm/evidence/{phase}/epic-phase-review.json. Required by phase_complete while an epic is open for the current plan; re-run after any fix (evidence is bound to the plan and phase task evidence).",agents:[]}},TOOL_NAMES=Object.keys(TOOL_METADATA),TOOL_NAME_SET=new Set(TOOL_NAMES);TOOL_DESCRIPTIONS=Object.fromEntries(Object.entries(TOOL_METADATA).map(([name,meta])=>[name,meta.description])),AGENT_TOOL_MAP=(()=>{let map=Object.fromEntries(ALL_AGENT_NAMES.map((agent)=>[agent,[]]));for(let[name,meta]of Object.entries(TOOL_METADATA))for(let agent of meta.agents)map[agent].push(name);return map})()});function scanOverrideForDangerousKeys(value,path,depth){if(depth>=10)return;if(Array.isArray(value)){for(let i=0;i<value.length;i++)scanOverrideForDangerousKeys(value[i],`${path}[${i}]`,depth+1);return}if(typeof value!=="object"||value===null)return;for(let key of Object.keys(value)){if(DANGEROUS_MERGE_KEYS.has(key))throw new DangerousMergeKeyError(key,path);scanOverrideForDangerousKeys(value[key],`${path}.${key}`,depth+1)}}function deepMergeInternal(base,override,depth,path){if(depth>=10)throw Error("deepMerge exceeded maximum depth of 10");let result={...base};for(let key of Object.keys(override)){let baseVal=base[key],overrideVal=override[key];if(typeof baseVal==="object"&&baseVal!==null&&typeof overrideVal==="object"&&overrideVal!==null&&!Array.isArray(baseVal)&&!Array.isArray(overrideVal))result[key]=deepMergeInternal(baseVal,overrideVal,depth+1,`${path}.${key}`);else result[key]=overrideVal}return result}function deepMerge(base,override){if(!base)return override;if(!override)return base;return scanOverrideForDangerousKeys(override,"$",0),deepMergeInternal(base,override,0,"$")}var MAX_MERGE_DEPTH=10,DANGEROUS_MERGE_KEYS,DangerousMergeKeyError;var init_merge=__esm(()=>{DANGEROUS_MERGE_KEYS=new Set(["__proto__","constructor","prototype"]);DangerousMergeKeyError=class DangerousMergeKeyError extends Error{key;path;constructor(key,path){super(`deepMerge refused dangerous key "${key}" at "${path}": prototype-pollution carriers (__proto__/constructor/prototype) are never merged`);this.key=key;this.path=path;this.name="DangerousMergeKeyError"}}});function freezeSet(items,name="CLAUDE_CODE_NATIVE_COMMANDS"){let set=new Set(items),proxy=new Proxy(set,{get(target,prop){if(prop==="add"||prop==="delete"||prop==="clear")return()=>{throw TypeError(`${name} is readonly`)};if(prop==="forEach")return(callback,thisArg)=>{let wrapped=(v,k)=>callback.call(thisArg??void 0,v,k,proxy);return set.forEach(wrapped)};let value=Reflect.get(target,prop);return typeof value==="function"?value.bind(target):value},set(){throw TypeError(`${name} is readonly`)},deleteProperty(){throw TypeError(`${name} is readonly`)},defineProperty(){throw TypeError(`${name} is readonly`)},setPrototypeOf(){throw TypeError(`${name} is readonly`)}});return proxy}function isQAAgent(name){return QA_AGENTS.includes(name)}function isSubagent(name){return ALL_SUBAGENT_NAMES.includes(name)}function isLowCapabilityModel(modelId){let lower=(modelId||"").toLowerCase();return LOW_CAPABILITY_MODELS.some((substr)=>lower.includes(substr))}var OPENCODE_NATIVE_AGENTS,CLAUDE_CODE_NATIVE_COMMANDS,OPENCODE_NATIVE_COMMANDS,MEMORY_AGENT_TOOL_MAP,EXTERNAL_SKILL_TOOL_NAMES,EXTERNAL_SKILL_AGENT_TOOL_MAP,COUNCIL_TOOL_NAMES,COUNCIL_AGENT_TOOL_MAP,GENERAL_COUNCIL_TOOL_NAMES,GENERAL_COUNCIL_AGENT_TOOL_MAP,TURBO_TOOL_NAMES,TURBO_AGENT_TOOL_MAP,EPIC_TOOL_NAMES,EPIC_AGENT_TOOL_MAP,SKILL_TOOL_NAMES,SKILL_AGENT_TOOL_MAP,PR_REVIEW_CHILD_TOOL_NAMES,PR_REVIEW_CHILD_AGENT_TOOL_MAP,WRITE_TOOL_NAMES,SUMMARIZER_EXEMPT_TOOL_NAMES,DEFAULT_MODELS,DEFAULT_AGENT_CONFIGS,DEFAULT_SCORING_CONFIG,LOW_CAPABILITY_MODELS,TURBO_MODE_BANNER=`## \uD83D\uDE80 TURBO MODE ACTIVE
|
|
1
|
+
import{createRequire}from"node:module";var __create=Object.create;var{getPrototypeOf:__getProtoOf,defineProperty:__defProp,getOwnPropertyNames:__getOwnPropNames,getOwnPropertyDescriptor:__getOwnPropDesc}=Object,__hasOwnProp=Object.prototype.hasOwnProperty;function __accessProp(key){return this[key]}var __toESMCache_node,__toESMCache_esm,__toESM=(mod,isNodeMode,target)=>{var canCache=mod!=null&&typeof mod==="object";if(canCache){var cache=isNodeMode?__toESMCache_node??=new WeakMap:__toESMCache_esm??=new WeakMap,cached=cache.get(mod);if(cached)return cached}target=mod!=null?__create(__getProtoOf(mod)):{};let to=isNodeMode||!mod||!mod.__esModule?__defProp(target,"default",{value:mod,enumerable:!0}):target;for(let key of __getOwnPropNames(mod))if(!__hasOwnProp.call(to,key))__defProp(to,key,{get:__accessProp.bind(mod,key),enumerable:!0});if(canCache)cache.set(mod,to);return to},__toCommonJS=(from)=>{var entry=(__moduleCache??=new WeakMap).get(from),desc;if(entry)return entry;if(entry=__defProp({},"__esModule",{value:!0}),from&&typeof from==="object"||typeof from==="function"){for(var key of __getOwnPropNames(from))if(!__hasOwnProp.call(entry,key))__defProp(entry,key,{get:__accessProp.bind(from,key),enumerable:!(desc=__getOwnPropDesc(from,key))||desc.enumerable})}return __moduleCache.set(from,entry),entry},__moduleCache,__commonJS=(cb,mod)=>()=>(mod||cb((mod={exports:{}}).exports,mod),mod.exports);var __returnValue=(v)=>v;function __exportSetter(name,newValue){this[name]=__returnValue.bind(null,newValue)}var __export=(target,all)=>{for(var name in all)__defProp(target,name,{get:all[name],enumerable:!0,configurable:!0,set:__exportSetter.bind(all,name)})};var __esm=(fn2,res)=>()=>(fn2&&(res=fn2(fn2=0)),res);var __require=createRequire(import.meta.url);var package_default;var init_package=__esm(()=>{package_default={name:"opencode-swarm",version:"7.200.14",description:"Architect-centric agentic swarm plugin for OpenCode - hub-and-spoke orchestration with SME consultation, code generation, and QA review",main:"dist/index.js",types:"dist/index.d.ts",exports:{".":{types:"./dist/index.d.ts",default:"./dist/index.js"},"./package.json":"./package.json"},bin:{"opencode-swarm":"./dist/cli/index.js"},type:"module",engines:{bun:">=1.3.13",node:">=22.13"},license:"MIT",repository:{type:"git",url:"https://github.com/ZaxbyHub/opencode-swarm.git"},publishConfig:{access:"public",registry:"https://registry.npmjs.org/"},keywords:["opencode","opencode-plugin","ai","agents","orchestration","swarm","multi-agent","llm"],files:["dist","dist/lang/grammars","binaries","evaluation-fixtures",".opencode/skills/brainstorm",".opencode/skills/specify",".opencode/skills/clarify-spec",".opencode/skills/swarm-resume",".opencode/skills/clarify",".opencode/skills/discover",".opencode/skills/consult",".opencode/skills/pre-phase-briefing",".opencode/skills/council",".opencode/skills/deep-dive",".opencode/skills/deep-research",".opencode/skills/codebase-review-swarm",".opencode/skills/swarm-implement",".opencode/skills/design-docs",".opencode/skills/swarm-pr-review",".opencode/skills/swarm",".opencode/skills/swarm-pr-feedback",".opencode/skills/swarm-pr-subscribe",".opencode/skills/swarm-ci-monitor",".opencode/skills/issue-ingest",".opencode/skills/swarm-plan",".opencode/skills/critic-gate",".opencode/skills/execute",".opencode/skills/phase-wrap",".opencode/skills/loop",".opencode/skills/writing-tests",".opencode/skills/running-tests",".opencode/skills/engineering-conventions",".opencode/skills/commit-pr",".opencode/skills/ci-failure-batching",".opencode/skills/gate-attribution",".opencode/skills/merge-queue-readiness",".opencode/skills/skill-edit-validation",".opencode/skills/worktree-retry-cleanup",".opencode/skills/test-file-split",".opencode/skills/fork-pr-operations",".opencode/skills/parallel-work-check",".opencode/skills/ci-fix-monitor",".opencode/skills/issue-tracer",".opencode/skills/orchestrating-subagents",".opencode/skills/durable-session-state","tests/fixtures/memory-recall","tests/fixtures/memory-recall-heldout","opencode-swarm.schema.json","README.md","LICENSE"],scripts:{clean:`bun -e "require('fs').rmSync('dist',{recursive:true,force:true})"`,build:"bun run clean && bun run scripts/generate-config-schema.ts && bun run scripts/copy-grammars.ts && bun build src/index.ts --outdir dist --target node --format esm --external web-tree-sitter --minify-whitespace --minify-syntax && bun build src/cli/index.ts --outdir dist/cli --target bun --format esm --external bash-parser --splitting && bun run scripts/copy-grammars.ts --to-dist && tsc --emitDeclarationOnly",typecheck:"tsc --noEmit",test:"bun test",lint:"biome lint .","lint:ci":"biome ci .","test:unit:ci":"bun scripts/ci/run-unit-tests-local.ts","validate:repo":"bun scripts/ci/repository-validation.ts","drift:check":"bun run scripts/drift-check.ts","check:pre-push":"bun run scripts/drift-check.ts --enforce --no-report && bun run check:registry-citations","schema:generate":"bun run scripts/generate-config-schema.ts","generate:commands-docs":"bun run scripts/generate-commands-docs.ts","check:runtime-src-refs":"bun run scripts/check-runtime-src-refs.ts","drift:fix":"bun run scripts/drift-check.ts --fix --confirm","skills:sync":"bun run scripts/sync-qa-gate-skills.ts",format:"biome format . --write",check:"biome check --write .",dev:"bun run build && opencode","package:smoke":"node scripts/package-smoke.mjs",prepare:"bun run build","repro:704":"node scripts/repro-704.mjs","repro:2669":"node scripts/repro-2669.mjs","repro:2670":"node scripts/repro-2670.mjs","repro:1144":"bun scripts/repro-1144.mjs","repro:1873":"bun build scripts/repro-1873-entry.ts --outdir dist-build-test/repro-1873 --target node --format esm && node scripts/repro-1873.mjs","repro:2487":"bun build scripts/repro-2487-parity-entry.ts --outdir dist-build-test/repro-2487 --target node --format esm && node scripts/repro-2487-parity.mjs","check:events":"bun run scripts/check-event-contract.ts","check:retention":"bun run scripts/check-retention-registry.ts","check:core-events":"bun run scripts/check-core-events-usage.ts","check:shell-audit":"bun run scripts/check-shell-audit-usage.ts","check:trajectory-store":"bun run scripts/check-trajectory-store-usage.ts","check:mock-cleanup":"bun run scripts/check-mock-cleanup.ts","check:invariants":"bun run scripts/check-invariants.ts","check:token-formula":"bun run scripts/check-token-formula.ts","check:cross-contamination":"bun run scripts/check-cross-contamination.ts","check:test-clock":"bun run scripts/check-test-clock.ts","check:test-file-cap":"bun run scripts/check-test-file-cap.ts","check:test-tmpdir":"bun run scripts/check-test-tmpdir.ts","check:bash-portability":"bun run scripts/check-bash-portability.ts","check:pending-fragment":"bun run scripts/check-pending-fragment.ts","check:gate-portability":"bun run scripts/check-gate-portability.ts","check:bare-spawn":"bun run scripts/check-bare-executable-spawn.ts","check:error-channel-discard":"bun run scripts/check-error-channel-discard.ts","check:path-identity":"bun run scripts/check-path-identity.ts","check:registry-citations":"bun run scripts/check-registry-citations.ts","check:memory-recall":"bun run scripts/memory-recall-regression.ts","check:retrieval-quality":"bun run scripts/retrieval-quality-regression.ts"},dependencies:{"@modelcontextprotocol/sdk":"^1.30.0","@opencode-ai/plugin":"^1.18.3","@opencode-ai/sdk":"^1.18.3","@vscode/tree-sitter-wasm":"^0.3.0","bash-parser":"^0.5.0","p-limit":"^7.3.0",picomatch:"^4.0.4","proper-lockfile":"^4.1.2","quick-lru":"^7.3.0","web-tree-sitter":"^0.25.0",zod:"4.3.6"},devDependencies:{"@biomejs/biome":"2.3.14","@types/picomatch":"^4.0.3","bun-types":"1.3.8","js-yaml":"^4.1.1",typescript:"^5.7.3"},peerDependencies:{"@xenova/transformers":"^2.17.2"},peerDependenciesMeta:{"@xenova/transformers":{optional:!0}}}});var QA_AGENTS,PIPELINE_AGENTS,ORCHESTRATOR_NAME="architect",ALL_SUBAGENT_NAMES,ALL_AGENT_NAMES;var init_agent_names=__esm(()=>{QA_AGENTS=["reviewer","critic","critic_oversight","critic_finding_validator"],PIPELINE_AGENTS=["explorer","coder","test_engineer"],ALL_SUBAGENT_NAMES=["sme","researcher","docs","docs_design","designer","critic_sounding_board","critic_drift_verifier","critic_hallucination_verifier","critic_architecture_supervisor","curator_init","curator_phase","curator_postmortem","curator_consolidation","council_generalist","council_skeptic","council_domain_expert","skill_improver","spec_writer",...QA_AGENTS,...PIPELINE_AGENTS],ALL_AGENT_NAMES=["architect",...ALL_SUBAGENT_NAMES]});function getPrWorkflowToolCapability(toolName,mode){let metadata=TOOL_METADATA[toolName];if(!metadata?.prWorkflow?.modes.includes(mode))return null;return metadata.prWorkflow.capability}var TOOL_METADATA,TOOL_NAMES,TOOL_NAME_SET,TOOL_DESCRIPTIONS,AGENT_TOOL_MAP;var init_tool_metadata=__esm(()=>{init_agent_names();TOOL_METADATA={diff:{description:"structured git diff with contract change detection",agents:["architect","reviewer","critic_finding_validator","critic_oversight","coder","test_engineer"],prWorkflow:{modes:["PR_REVIEW","PR_FEEDBACK"],capability:"observe"}},diff_summary:{description:"filter classified AST changes by category, risk level, or file for reviewer drill-down",agents:["architect","reviewer","critic_finding_validator","critic_oversight"],prWorkflow:{modes:["PR_REVIEW","PR_FEEDBACK"],capability:"observe"}},syntax_check:{description:"check syntax of source files using tree-sitter parsers across multiple languages, returning per-file errors",agents:["architect","coder","test_engineer"],prWorkflow:{modes:["PR_REVIEW"],capability:"validate"}},placeholder_scan:{description:"todo and FIXME comment detection",agents:["architect","reviewer","critic_finding_validator"],prWorkflow:{modes:["PR_REVIEW","PR_FEEDBACK"],capability:"observe"}},imports:{description:"find all consumers that import from a given file — use before refactoring shared modules to avoid breaking unseen dependents",agents:["architect","sme","researcher","docs","docs_design","critic_sounding_board","critic_drift_verifier","critic_hallucination_verifier","reviewer","critic_finding_validator","critic","coder","test_engineer"],prWorkflow:{modes:["PR_REVIEW","PR_FEEDBACK"],capability:"observe"}},lint:{description:"run project linter in check or fix mode; supports biome, eslint, ruff, clippy, and more, returns structured results",agents:["architect","reviewer","critic_finding_validator","coder"],prWorkflow:{modes:["PR_REVIEW"],capability:"validate"}},secretscan:{description:"scan for secrets (API keys, tokens, passwords) via regex and entropy; returns redacted previews, excludes common dirs",agents:["architect","reviewer","critic_finding_validator","critic_oversight"],prWorkflow:{modes:["PR_REVIEW"],capability:"validate"}},sast_scan:{description:"static analysis security scan",agents:["architect","reviewer","critic_finding_validator","critic_oversight"],prWorkflow:{modes:["PR_REVIEW"],capability:"validate"}},build_check:{description:"discover and run build, typecheck, and test commands for various project ecosystems in the working directory",agents:["architect","coder","test_engineer"]},pre_check_batch:{description:"parallel verification: lint:check + secretscan + sast_scan + quality_budget",agents:["architect","reviewer","critic_finding_validator"]},quality_budget:{description:"code quality budget check",agents:["architect"],prWorkflow:{modes:["PR_REVIEW"],capability:"validate"}},symbols:{description:"extract exported symbols (functions, classes, interfaces, types) from source files; supports TypeScript, JavaScript, Python, Rust, Go, Dart, Ruby, PHP, and Java",agents:["architect","sme","researcher","docs","docs_design","designer","critic_sounding_board","critic_drift_verifier","critic_hallucination_verifier","spec_writer","reviewer","critic_finding_validator","critic","coder","test_engineer"]},complexity_hotspots:{description:"git churn × complexity risk map",agents:["architect","sme","researcher","critic_sounding_board","critic_drift_verifier","critic_hallucination_verifier","reviewer","critic_finding_validator","critic","critic_oversight","explorer","test_engineer"]},schema_drift:{description:"OpenAPI spec vs route drift",agents:["architect","sme","researcher","docs","explorer"],prWorkflow:{modes:["PR_REVIEW","PR_FEEDBACK"],capability:"observe"}},todo_extract:{description:"structured TODO/FIXME extraction; with task_id, records the high-priority count as todo_scan gate evidence",agents:["architect","researcher","docs","explorer","coder"],prWorkflow:{modes:["PR_REVIEW","PR_FEEDBACK"],capability:"observe"}},evidence_check:{description:"verify task evidence completeness",agents:["architect","critic_oversight"]},check_gate_status:{description:"check the gate status of a specific task",agents:["architect","critic_oversight"]},completion_verify:{description:"verify completed tasks have required evidence",agents:["architect","critic_oversight"]},complete_pr_workflow:{description:"validate terminal PR workflow evidence and clear its durable session gate",agents:["architect"]},abort_pr_workflow:{description:"abort an unrecoverable PR_REVIEW/PR_FEEDBACK mechanical gate and clear its durable session state",agents:["architect"]},authorize_pr_review_reentry:{description:"issue a one-use, identity-bound reviewer/test_engineer re-entry authorization for the active PR_REVIEW workflow (issue #2383)",agents:["architect"]},submit_pr_review_result:{description:"submit one child-bound typed result for an active PR-review base or micro discovery lane",agents:[],prWorkflow:{modes:["PR_REVIEW"],capability:"validate"}},approve_plan_critic:{description:"record a MANUAL plan_critic_gate approval snapshot to unblock the ratchet-tighter critic_pre_plan execution gate when the critic already returned APPROVED but the mechanical recorder failed to persist it (issue #2012), or as the sanctioned recovery for a bookkeeping-grade hashed-field repair under the critic-gate PLAN FREEZE rule (the reason must state which case applies)",agents:["architect"]},approve_retry_sounding_board:{description:"record a MANUAL critic_sounding_board gate entry to unblock the coder retry circuit-breaker gate when the sounding board returned APPROVED but the mechanical recorder missed it (issue #2703)",agents:["architect"]},recover_rework_task:{description:"recover a task wedged at rework_required when the reviewer/test_engineer verdict did not require a code change: write a supervised stage_a_passed so those gates can be re-dispatched without re-running the coder (issue #2755)",agents:["architect"]},recover_stage_a_task:{description:"recover a task wedged in the settlement-backed Stage A deadlock — workflow at idle/blocked while a COMMITTED accepted coder settlement and green post-settlement pre-check proof justify Stage A: write a settlement-backed stage_a_passed so reviewer/test_engineer can be dispatched, without re-running the coder (issue #2828)",agents:["architect"]},prepare_pr_workflow_checkout:{description:"prepare an auditable PR workflow checkout or restore its exact original branch/HEAD and preserved stash after terminal cleanup",agents:["architect"]},invalidate_pr_feedback_publication:{description:"invalidate the armed PR_FEEDBACK publication generation so approved content can change, superseding every content-dependent approval and reopening the exact scoped rework + fresh-review path (issue #2108)",agents:["architect"]},record_implementation_review:{description:"record fresh-context reviewer + critic APPROVE verdicts for the implementation diff so the /swarm issue --trace workflow can satisfy its review gate before commit-pr handoff",agents:["architect"]},record_issue_publication:{description:"record a publication receipt so the /swarm issue --trace workflow reaches its terminal published state after the PR is created/updated",agents:["architect"]},record_issue_reproduction:{description:"record the reproduction outcome for the current traced issue so the /swarm issue --trace workflow can satisfy its reproduction gate and transition to PLAN",agents:["architect"]},record_recurrence_sweep:{description:"record the recurrence sweep (defect class, predicates, hit dispositions, guardrail proof, related-problems results) so the /swarm issue --trace workflow can satisfy its recurrence gate before commit-pr handoff",agents:["architect"]},record_branch_freshness:{description:"record the Phase 0 branch-freshness outcome (synced / behind:<n> / fetch-failed:<reason> plus optional user override) so the /swarm issue --trace workflow can pass its freshness gate before transitioning to PLAN (issue #2564)",agents:["architect"]},record_trace_validation:{description:"record one per-phase trace-check.sh validator outcome (phase, pass/fail, reviewedCommit, treeId) so the /swarm issue --trace workflow can satisfy its validator-receipt gate before commit-pr handoff (issue #2564)",agents:["architect"]},record_merge_approval:{description:"record the human merge approval bound to the exact PR head SHA so the /swarm issue --trace workflow reaches its terminal merge_approval_recorded state — recorded for audit only, never certified or driven by the plugin (issue #2564)",agents:["architect"]},rebind_pr_feedback_head:{description:"rebind a PR_FEEDBACK workflow to a new verified remote PR head after merge/rebase/conflict repair, invalidating ancestry-bound receipts so the mechanical ladder re-runs",agents:["architect"]},run_pr_feedback_stage_a:{description:"execute and persist mandatory PR-feedback Stage A checks on a content-bound revision",agents:["architect"]},submit_council_verdicts:{description:"submit pre-collected council member verdicts for synthesis (architect MUST dispatch critic/reviewer/sme/test_engineer/explorer as Agent tasks first; this tool synthesizes only, it does not contact members)",agents:[]},submit_phase_council_verdicts:{description:"submit pre-collected phase-level council member verdicts for holistic phase synthesis (architect MUST dispatch all 5 council members with phase-scoped context first; this tool synthesizes only, it does not contact members)",agents:[]},declare_council_criteria:{description:"pre-declare acceptance criteria for a task before the coder starts work; criteria are read back during council evaluation",agents:[]},sbom_generate:{description:"SBOM generation for dependency inventory",agents:["architect"]},checkpoint:{description:"create named git checkpoints for save, restore, and delete — use before risky operations to enable rollback; a destructive restore previews first and requires the confirm_token issued in the preview (#2946)",agents:["architect"]},pkg_audit:{description:"dependency vulnerability scan — npm/pip/cargo",agents:["architect","critic_hallucination_verifier","reviewer","critic_finding_validator","critic_oversight","test_engineer"],prWorkflow:{modes:["PR_REVIEW"],capability:"validate"}},parse_lane_candidates:{description:"Parse [CANDIDATE] rows from a dispatch_lanes or collect_lane_results artifact (by output_ref), produce structured records with provenance, optionally persist to a per-batch sidecar JSONL. Pure-parser variant exists as internal module.",agents:["architect"]},plan_conflict_check:{description:"read-only advisory check (#1656): compute a pairwise file-conflict matrix for N proposed parallel task groups using declared scopes and optional git co-change; returns a verdict (all_disjoint / conflicts_present / unknown_scopes), per-pair evidence, and a suggested serialization order. Writes nothing — the execution gate independently recomputes the verdict inline at dispatch time via the same helper. Call BEFORE attempting parallel dispatch to confirm disjointness.",agents:["architect"]},write_pr_review_trigger_eval:{description:"persist the complete PR-review trigger evaluation with exact-set validation, dispatch provenance, and live merge-base verification",agents:["architect"]},write_pr_review_artifact:{description:"persist schema-validated PR-review findings checkpoints and exact actionable feedback handoffs under the active run; reviewer verdicts marked `UNVERIFIED` persist to the findings ledger as `PENDING` records routed back to the reviewer — do not resubmit a row whose verdict is already recorded",agents:["architect"]},pr_review_submission:{description:"submit a settled, head-bound PR review to GitHub through the gh PR Review API after the PR_REVIEW gate clears; architect-only, refuses while a gate is active or the run was aborted after settlement",agents:["architect"]},export_pr_review_partial_results:{description:"export the validated partial results of an ABORTED PR_REVIEW run as a partial, non-authoritative artifact bound per-item to receipt-authenticated findings; architect-only, requires the gate cleared and an abort event binding session and head, never implies completion or feedback consent",agents:["architect"]},prepare_pr_feedback_scope:{description:"prepare an exact file scope for one PR-feedback coder Task after immutable feedback verification settles",agents:["architect"]},prepare_pr_feedback_commit_message:{description:"author a PR_FEEDBACK commit message that cannot go inline (e.g. a Co-Authored-By trailer) into a file OUTSIDE the repository; returns the path for git commit -F",agents:["architect"]},test_runner:{description:"auto-detect and run tests",agents:["architect","reviewer","critic_finding_validator","test_engineer"]},test_impact:{description:"identify test files impacted by changed source files via import analysis",agents:["architect","reviewer","critic_finding_validator","critic_oversight","test_engineer"],prWorkflow:{modes:["PR_REVIEW","PR_FEEDBACK"],capability:"observe"}},mutation_test:{description:"executes pre-generated mutation patches against tests, evaluates kill rate against quality gate thresholds; test selection comes from explicit files (override) or source_files derived via the impact analyzer with a typed bounded fallback",agents:["architect","test_engineer"]},generate_mutants:{description:"generate LLM-based mutation testing patches for source files; returns MutationPatch[] for direct consumption by the mutation_test tool",agents:["architect"]},detect_domains:{description:"detect which SME domains are relevant for a given text",agents:["architect","sme","docs","docs_design","critic_sounding_board","critic_drift_verifier","critic_hallucination_verifier","critic","critic_oversight","explorer"]},git_blame:{description:"per-line git blame metadata: sha, author, date, summary for each line in a file",agents:["reviewer","critic_finding_validator","explorer","architect"],prWorkflow:{modes:["PR_REVIEW","PR_FEEDBACK"],capability:"observe"}},gitingest:{description:"fetch a GitHub repository full content via gitingest.com",agents:["architect","docs","explorer"],prWorkflow:{modes:["PR_REVIEW","PR_FEEDBACK"],capability:"observe"}},retrieve_summary:{description:"retrieve the full content of a stored tool output summary",agents:["architect","sme","docs","docs_design","designer","critic_sounding_board","critic_drift_verifier","critic_hallucination_verifier","critic_architecture_supervisor","spec_writer","reviewer","critic_finding_validator","critic","coder","test_engineer"],prWorkflow:{modes:["PR_REVIEW","PR_FEEDBACK"],capability:"observe"}},retrieve_lane_output:{description:"retrieve paged full dispatch lane output by output_ref; use before consuming truncated lane previews or routing candidates from lane results",agents:["architect"],prWorkflow:{modes:["PR_REVIEW","PR_FEEDBACK"],capability:"observe"}},extract_code_blocks:{description:"extract code blocks from text content and save them to files",agents:["docs","docs_design","designer","spec_writer","coder","test_engineer"]},phase_complete:{description:"preflight every applicable phase gate, report all blockers, and atomically commit a current passing snapshot",agents:["architect"]},run_phase_review:{description:"run the bounded phase-final review engine and persist complete content-addressed review evidence",agents:["architect"]},repair_gate_evidence:{description:"quarantine recoverable exact-task gate evidence, rebuild from durable requirements, recover receipt-backed legacy marker wedges or the exact sentinel-only historical reset, and refuse every other receipt-less reconstruction",agents:["architect"]},repair_knowledge_receipt_ledger:{description:"validate or repair authoritative knowledge receipts, preserve corrupt authority in bounded quarantine, require scoped re-evaluation, and backfill stable phase ids across the whole ledger (operation backfill_phase_id; phase/session_id do not scope the backfill)",agents:["architect"]},record_directive_override:{description:"record an audited architect override for identified critical-directive violations without bypassing unreadable authority",agents:["architect"]},save_plan:{description:"save a structured implementation plan",agents:["architect"]},update_task_status:{description:"mark tasks complete, track phase progress",agents:["architect"]},lint_spec:{description:"validate .swarm/spec.md format and required fields",agents:["architect","spec_writer"]},write_retro:{description:"document phase retrospectives via phase_complete workflow, capture lessons learned",agents:["architect"]},write_drift_evidence:{description:"write drift verification evidence for a completed phase",agents:["architect"]},write_hallucination_evidence:{description:"write hallucination verification evidence for a completed phase",agents:["architect"]},write_mutation_evidence:{description:"write mutation gate evidence for a completed phase; normalizes PASS/WARN/FAIL/SKIP verdicts and writes .swarm/evidence/{phase}/mutation-gate.json",agents:["architect"]},declare_scope:{description:"declare file scope for next coder delegation",agents:["architect"]},scope_validate:{description:"validate shell writes against an inline file scope",agents:["architect"]},knowledge_query:{description:"query swarm or hive knowledge with optional filters",agents:["architect","skill_improver","spec_writer"]},doc_scan:{description:"scan project documentation files and build an index manifest",agents:["architect","docs_design","skill_improver","spec_writer","explorer"]},doc_extract:{description:"extract actionable constraints from project documentation",agents:["architect","docs_design","skill_improver","spec_writer"]},curator_analyze:{description:"run curator phase analysis and optionally apply knowledge recommendations",agents:["architect"]},consensus_mine:{description:"mine cross-run consensus from existing .swarm evidence into an immutable proposals-only report; also deletes its own reports past consensus.report_retention, appends to the shared recommendation dedup ledger (in the shared cohort root, outside this project, when a knowledge link is active), and mirrors proposals into pending swarm-memory proposals when memory is enabled",agents:["architect","curator_phase","curator_postmortem"]},knowledge_add:{description:"store a new lesson in the knowledge base",agents:["architect","coder"]},knowledge_recall:{description:"search the knowledge base for relevant past decisions",agents:["architect","sme","docs","docs_design","designer","critic_sounding_board","critic_drift_verifier","critic_hallucination_verifier","critic_architecture_supervisor","curator_init","curator_phase","skill_improver","spec_writer","reviewer","critic_finding_validator","critic","critic_oversight","explorer","coder","test_engineer"]},knowledge_remove:{description:"delete an outdated swarm knowledge entry by ID (swarm tier only)",agents:["architect"]},co_change_analyzer:{description:"detect hidden couplings by analyzing git history",agents:["architect"]},context_status:{description:"report current context-window headroom for the active session — returns tokens-used, usageSource (provider|estimated), model-limit with provenance (modelLimitSource: host|override|provider_cap|native|fallback; modelLimitResolution: user_provider_model|user_model|user_default|live_model_limit|static_provider_cap|static_native|static_default; fallbackActive: true when the denominator came from a static table or the flat 128k default — treat headroom as uncertain), usage-percent, threshold-state (none/warn/critical), model name, and provider. Pure read-only: no state mutation, no warning injection. Works whether context_budget.enabled is true or false.",agents:["architect"]},search:{description:"Workspace-scoped ripgrep-style text search with structured JSON output. Supports literal and regex modes, glob filtering, and result limits. NOTE: This is text search, not structural AST search — use symbols and imports tools for structural queries.",agents:["architect","sme","docs","docs_design","designer","critic_hallucination_verifier","skill_improver","spec_writer","reviewer","critic_finding_validator","critic_oversight","explorer","coder","test_engineer","researcher"]},ast_grep:{description:"Read-only structural AST search using ast-grep patterns with optional language and glob filters. Use for syntax-aware code pattern searches; does not rewrite files.",agents:["architect","sme","docs","docs_design","critic_hallucination_verifier","spec_writer","explorer","coder","test_engineer","researcher"]},actionlint_scan:{description:"Run actionlint against GitHub Actions workflow YAML files with structured findings. Resolves actionlint lazily and does not modify files.",agents:["architect","test_engineer"],prWorkflow:{modes:["PR_REVIEW"],capability:"validate"}},osv_scan:{description:"Run OSV-Scanner against a workspace path and return structured dependency vulnerability findings. Resolves osv-scanner lazily and does not modify files.",agents:["architect","test_engineer"],prWorkflow:{modes:["PR_REVIEW"],capability:"validate"}},gh_evidence:{description:"Fetch bounded GitHub pull request or issue metadata through gh for review and CI evidence. Resolves gh lazily and is read-only.",agents:["architect","researcher"],prWorkflow:{modes:["PR_REVIEW","PR_FEEDBACK"],capability:"observe"}},pr_workflow_status:{description:"Read-only architect observation of local git state (HEAD, branch, clean/dirty with a bounded changed-file list, remotes) plus a session-pinned PR workflow gate summary and the PR_FEEDBACK publication-generation section (state, attempts, invalidation reason, recovery guidance). For an active PR_REVIEW gate it also projects that derived state read-only: per-boundary settlement (post_explorer / post_reviewer / post_critic), per-lane coverage (accepted, rejected, one-line latest finding), and the bounded candidate inventory, each degrading to a typed unavailable state rather than an absence claim. Use to observe state under the fail-closed PR_REVIEW/PR_FEEDBACK gate. Never executes PR-controlled scripts and never reads another session gate.",agents:["architect"],prWorkflow:{modes:["PR_REVIEW","PR_FEEDBACK"],capability:"observe"}},batch_symbols:{description:"Batched symbol extraction across multiple files. Returns per-file symbol summaries with isolated error handling.",agents:["architect","critic_hallucination_verifier","reviewer","critic_finding_validator","critic_oversight","explorer"]},suggest_patch:{description:"Reviewer-safe structured patch suggestion tool. Produces context-anchored patch artifacts without file modification. Returns structured diagnostics on context mismatch.",agents:["architect","reviewer","critic_finding_validator"]},req_coverage:{description:"query requirement coverage status for tracked functional requirements",agents:["critic_sounding_board","critic_drift_verifier","critic_hallucination_verifier","spec_writer","critic","critic_oversight"]},get_approved_plan:{description:"retrieve the last critic-approved immutable plan snapshot for baseline drift comparison",agents:["critic_drift_verifier","critic","critic_oversight"]},repo_map:{description:"query the repo code graph: importers, dependencies, blast radius, localization, ontology facts, package boundaries, and heuristic preflight packets before refactoring; ontology findings are advisory, not formal proofs",agents:["architect","critic_sounding_board","critic_drift_verifier","critic_hallucination_verifier","critic_architecture_supervisor","reviewer","critic_finding_validator","critic","critic_oversight","explorer","coder","test_engineer"],prWorkflow:{modes:["PR_REVIEW","PR_FEEDBACK"],capability:"observe"}},get_qa_gate_profile:{description:"retrieve the QA gate profile for the current or exact future plan identity: gates (reviewer, test_engineer, sme_enabled, critic_pre_plan, sast_enabled, council_mode, hallucination_guard, mutation_test, phase_council, drift_check, final_council), lock state, profile hash, the calling session’s ratchet-tighter overrides, and the EFFECTIVE gates (profile merged with those overrides; durable across restart). Read-only and never creates state.",agents:["architect"]},set_qa_gates:{description:"configure the QA gate profile for the current plan or bootstrap an exact future plan with swarm_id and plan_title. Architect-only. The initial selection may set explicit true/false values over defaults; later changes are ratchet-tighter and rejected once locked after critic approval. Supports: reviewer, test_engineer, sme_enabled, critic_pre_plan, sast_enabled, council_mode, hallucination_guard, mutation_test, phase_council, drift_check, final_council, plus adopt_legacy_binding_only for exact-binding recovery without mutating gates.",agents:["architect"]},web_search:{description:"External web search (Tavily or Brave) for architect-driven council research, SME domain research, researcher auto-research, and skill-improver research. Returns titled results with snippets, URLs, normalized query metadata, temporal intent, freshness, and removed stale years. Config-gated on council.general.enabled in the resolved config: global ~/.config/opencode/opencode-swarm.json, then project .opencode/opencode-swarm.json overrides. Requires a search API key. Used by the architect in MODE: COUNCIL to gather a RESEARCH CONTEXT before dispatching council agents, by SME for opt-in external skill/source evaluation, and by the researcher agent for multi-source auto-research.",agents:["sme","researcher","skill_improver"]},web_fetch:{description:"Fetch the readable text of a single http(s) URL (architect-only). Returns decoded page text, document title, final URL after redirects, and an evidence reference. Reads primary sources that web_search only surfaces as snippets. Config-gated on council.general.enabled. Blocks private/loopback/link-local/metadata addresses (re-validated and re-pinned across redirects); enforces timeout and body size cap.",agents:[]},convene_general_council:{description:"Synthesize responses from a multi-model General Council. Accepts parallel member responses (Round 1, optionally Round 2), detects disagreements, and returns consensus points, persisting disagreements, and a structured synthesis. Architect-only. Config-gated on council.general.enabled in the resolved config: global ~/.config/opencode/opencode-swarm.json, then project .opencode/opencode-swarm.json overrides.",agents:[]},write_final_council_evidence:{description:"Persist project-scoped final council evidence to .swarm/evidence/final-council.json. PREREQUISITE: dispatch critic, reviewer, sme, test_engineer, and explorer as project-scoped Agent tasks and collect their CouncilMemberVerdict JSON — this tool synthesizes only. Rejects on insufficient quorum or CONCERNS with unresolved requiredFixes; normalizes verdicts to approved/concerns/rejected. Architect-only.",agents:[]},skill_generate:{description:"compile knowledge entries into a structured SKILL.md draft",agents:["skill_improver"]},skill_list:{description:"list generated skill files and their status",agents:["skill_improver"]},skill_apply:{description:"activate a draft skill proposal",agents:[]},skill_inspect:{description:"inspect the content and source entries of a skill file",agents:["skill_improver"]},run_stale_reconciliation:{description:"reconcile skills against the knowledge store: mark skills stale when source knowledge is archived or deleted, or clear stale markers",agents:["architect"]},skill_regenerate:{description:"regenerate an active skill by re-clustering its source knowledge entries and updating the SKILL.md in place",agents:[]},skill_retire:{description:"retire a generated skill by adding a retired.marker file; retired skills are excluded from scoring and injection",agents:[]},skill_improve:{description:"run the skill_improver agent to review and refine skills",agents:["skill_improver"]},spec_write:{description:"author or update .swarm/spec.md for the current project",agents:["spec_writer"]},knowledge_receipt:{description:"file a receipt for retrieved knowledge (applied/ignored/contradicted + new lessons), recorded as immutable knowledge events",agents:["architect","sme","docs","docs_design","designer","critic_sounding_board","critic_drift_verifier","critic_hallucination_verifier","critic_architecture_supervisor","curator_init","curator_phase","skill_improver","spec_writer","reviewer","critic_finding_validator","critic","coder","test_engineer"]},knowledge_receipt_status:{description:"receipt status",agents:["architect"]},knowledge_archive:{description:"archive (default), quarantine, or purge a swarm or hive knowledge entry by ID with an immutable audit tombstone; purge requires an admin flag",agents:["architect"]},swarm_memory_recall:{description:"recall scoped Swarm memory for the current repository as untrusted background",agents:[]},swarm_memory_propose:{description:"create a pending Swarm memory proposal; does not write durable memory directly",agents:[]},swarm_memory_outcome:{description:"record useful, dead-end, or corrected outcomes and, when enabled, synchronously refresh deterministic memory lessons",agents:[]},swarm_command:{description:"run supported /swarm commands through the canonical command registry",agents:["architect","sme","researcher","docs","docs_design","designer","reviewer","critic_finding_validator","critic","explorer","coder","test_engineer"]},dispatch_lanes:{description:"dispatch read-only exploration/review lanes concurrently and BLOCK until all finish; prefer dispatch_lanes_async for non-blocking dispatch, use this only when promptAsync is unavailable",agents:["architect"]},dispatch_lanes_async:{description:"launch read-only advisory lanes non-blockingly and return a batch id plus lane session handles immediately; each lane agent must be a registered generated agent name (unregistered bare roles are refused on multi-swarm hosts); launch_timeout_ms is only a promptAsync acceptance budget, not a lane runtime timeout; poll incrementally with collect_lane_results (wait omitted), or join with wait: true for all results",agents:["architect"]},collect_lane_results:{description:"collect/poll a dispatch_lanes_async batch — OBSERVATION ONLY; it can never cancel or abort a lane. A presumed-stale sweep runs on every call, settling lanes past the horizon: idle host to stale, unobservable host to a typed liveness error. The wait budget (timeout_ms) bounds this observer call only — its expiry, a missing messages client, or a degraded liveness probe never kills a lane, never proves it died, and never settles anything. If a collection returns pending lanes, poll again first; busy/retry host status is live evidence, not failure. Cancellation is a distinct, explicit, authorized, potentially destructive action: use cancel_lane_batch (confirm: true + reason), never this tool. An explicit operator cancellation settles as the distinct operator_cancelled class — not liveness. Unsettled lanes are reported in pending_lanes (batch_id, lane_id, status, output_ref) regardless of include_pending. Does not advance workflow gates. Settled-lane inline output is delivered once: later polls set output_omitted_repeat: true and omit output but keep output_ref for retrieval via retrieve_lane_output.",agents:["architect"]},cancel_lane_batch:{description:"cancel ACTIVE lanes of a dispatch_lanes_async batch — the only cancellation surface (collect_lane_results cannot cancel). Destructive and authorization-gated: requires confirm: true + a bounded reason, recorded on cancelled terminals as the distinct operator_cancelled class (never liveness; not auto-retryable, never consumes retry budget — re-dispatch explicitly). Race-safe per lane: busy/retry refused (live work is never destroyed — human force path: /swarm abort-pr-workflow); degraded/absent status probe refuses the whole batch fail-closed; idle or host-unknown sessions may be cancelled; a child completing in the race window is preserved; an abort timeout never claims cancellation.",agents:["architect"]},summarize_work:{description:"emit a short structured summary of completed work (key decisions, assumptions, risks, constraints) at task completion; rolls up per phase for architecture-supervisor review. Advisory, never blocks.",agents:["architect","sme","researcher","docs","docs_design","designer","explorer","coder","test_engineer"]},write_architecture_supervisor_evidence:{description:"persist the architecture supervisor verdict for a phase (architect MUST dispatch critic_architecture_supervisor first and collect its JSON verdict; this tool persists only, it does not contact the supervisor)",agents:["architect"]},lean_turbo_plan_lanes:{description:"partition phase tasks into parallel lanes based on file-scope conflicts for Lean Turbo execution",agents:[]},lean_turbo_acquire_locks:{description:"acquire file locks for all files in a lane (all-or-nothing) before lane execution",agents:[]},lean_turbo_runner_status:{description:"read Lean Turbo run state from .swarm/turbo-state.json",agents:[]},lean_turbo_critic:{description:"dispatch a read-only critic agent to evaluate boundary conditions for a completed Lean Turbo phase (satisfies the turbo.lean.phase_critic gate)",agents:[]},lean_turbo_review:{description:"dispatch a read-only reviewer agent to evaluate a completed Lean Turbo phase",agents:[]},lean_turbo_run_phase:{description:"Execute a phase using Lean Turbo parallel lane execution. Plans lanes, acquires file locks, and dispatches coder agents concurrently. Use when Lean Turbo is active and you want to execute all tasks in a phase in parallel lanes.",agents:[]},lean_turbo_status:{description:"returns Lean Turbo configuration and active status for the current session",agents:[]},swarm_apply_patch:{description:"Apply a unified diff patch to workspace files with exact context matching, atomic writes, and path validation. Use standard unified diff format only — does NOT support *** Begin Patch / *** Update File payloads (use native apply_patch for those).",agents:["coder","test_engineer"]},external_skill_discover:{description:"Discover external skill candidates from configured sources. Returns a disabled message when external_skills.curation_enabled is false.",agents:[]},external_skill_list:{description:"List external skill candidates in the quarantine store. Returns a disabled message when external_skills.curation_enabled is false.",agents:[]},external_skill_inspect:{description:"Inspect a specific external skill candidate by ID. Returns a disabled message when external_skills.curation_enabled is false.",agents:[]},external_skill_promote:{description:"Promote a validated external skill candidate to an active generated skill. Returns a disabled message when external_skills.curation_enabled is false.",agents:[]},external_skill_reject:{description:"Reject an external skill candidate after evaluation. Returns a disabled message when external_skills.curation_enabled is false.",agents:[]},external_skill_delete:{description:"Delete an external skill candidate from the quarantine store. Returns a disabled message when external_skills.curation_enabled is false.",agents:[]},external_skill_revoke:{description:"Revoke a previously promoted external skill. Returns a disabled message when external_skills.curation_enabled is false.",agents:[]},epic_next_wave:{description:"Epic Mode: the single, idempotent way forward while an epic is open. Closes the active wave once every task is resolved (recording per-task outcomes and declared-vs-actual divergence, which Epic learning uses to plan later waves), keeps phases in order, and issues the next wave of disjoint tasks with dispatch instructions. Returns a status: dispatch | declare-scopes | in-progress | blocked | phase-ready-for-review | epic-complete | refused. Requires `epic.mode.enabled: true` and an epic opened by `/swarm epic start`.",agents:[]},epic_phase_review:{description:"Epic Mode phase readiness: dispatch a read-only phase reviewer, then (only if it APPROVES) a read-only phase critic over the completed phase; parse both verdicts from the agents and record them to .swarm/evidence/{phase}/epic-phase-review.json. Required by phase_complete while an epic is open for the current plan; re-run after any fix (evidence is bound to the plan and phase task evidence).",agents:[]}},TOOL_NAMES=Object.keys(TOOL_METADATA),TOOL_NAME_SET=new Set(TOOL_NAMES);TOOL_DESCRIPTIONS=Object.fromEntries(Object.entries(TOOL_METADATA).map(([name,meta])=>[name,meta.description])),AGENT_TOOL_MAP=(()=>{let map=Object.fromEntries(ALL_AGENT_NAMES.map((agent)=>[agent,[]]));for(let[name,meta]of Object.entries(TOOL_METADATA))for(let agent of meta.agents)map[agent].push(name);return map})()});function scanOverrideForDangerousKeys(value,path,depth){if(depth>=10)return;if(Array.isArray(value)){for(let i=0;i<value.length;i++)scanOverrideForDangerousKeys(value[i],`${path}[${i}]`,depth+1);return}if(typeof value!=="object"||value===null)return;for(let key of Object.keys(value)){if(DANGEROUS_MERGE_KEYS.has(key))throw new DangerousMergeKeyError(key,path);scanOverrideForDangerousKeys(value[key],`${path}.${key}`,depth+1)}}function deepMergeInternal(base,override,depth,path){if(depth>=10)throw Error("deepMerge exceeded maximum depth of 10");let result={...base};for(let key of Object.keys(override)){let baseVal=base[key],overrideVal=override[key];if(typeof baseVal==="object"&&baseVal!==null&&typeof overrideVal==="object"&&overrideVal!==null&&!Array.isArray(baseVal)&&!Array.isArray(overrideVal))result[key]=deepMergeInternal(baseVal,overrideVal,depth+1,`${path}.${key}`);else result[key]=overrideVal}return result}function deepMerge(base,override){if(!base)return override;if(!override)return base;return scanOverrideForDangerousKeys(override,"$",0),deepMergeInternal(base,override,0,"$")}var MAX_MERGE_DEPTH=10,DANGEROUS_MERGE_KEYS,DangerousMergeKeyError;var init_merge=__esm(()=>{DANGEROUS_MERGE_KEYS=new Set(["__proto__","constructor","prototype"]);DangerousMergeKeyError=class DangerousMergeKeyError extends Error{key;path;constructor(key,path){super(`deepMerge refused dangerous key "${key}" at "${path}": prototype-pollution carriers (__proto__/constructor/prototype) are never merged`);this.key=key;this.path=path;this.name="DangerousMergeKeyError"}}});function freezeSet(items,name="CLAUDE_CODE_NATIVE_COMMANDS"){let set=new Set(items),proxy=new Proxy(set,{get(target,prop){if(prop==="add"||prop==="delete"||prop==="clear")return()=>{throw TypeError(`${name} is readonly`)};if(prop==="forEach")return(callback,thisArg)=>{let wrapped=(v,k)=>callback.call(thisArg??void 0,v,k,proxy);return set.forEach(wrapped)};let value=Reflect.get(target,prop);return typeof value==="function"?value.bind(target):value},set(){throw TypeError(`${name} is readonly`)},deleteProperty(){throw TypeError(`${name} is readonly`)},defineProperty(){throw TypeError(`${name} is readonly`)},setPrototypeOf(){throw TypeError(`${name} is readonly`)}});return proxy}function isQAAgent(name){return QA_AGENTS.includes(name)}function isSubagent(name){return ALL_SUBAGENT_NAMES.includes(name)}function isLowCapabilityModel(modelId){let lower=(modelId||"").toLowerCase();return LOW_CAPABILITY_MODELS.some((substr)=>lower.includes(substr))}var OPENCODE_NATIVE_AGENTS,CLAUDE_CODE_NATIVE_COMMANDS,OPENCODE_NATIVE_COMMANDS,MEMORY_AGENT_TOOL_MAP,EXTERNAL_SKILL_TOOL_NAMES,EXTERNAL_SKILL_AGENT_TOOL_MAP,COUNCIL_TOOL_NAMES,COUNCIL_AGENT_TOOL_MAP,GENERAL_COUNCIL_TOOL_NAMES,GENERAL_COUNCIL_AGENT_TOOL_MAP,TURBO_TOOL_NAMES,TURBO_AGENT_TOOL_MAP,EPIC_TOOL_NAMES,EPIC_AGENT_TOOL_MAP,SKILL_TOOL_NAMES,SKILL_AGENT_TOOL_MAP,PR_REVIEW_CHILD_TOOL_NAMES,PR_REVIEW_CHILD_AGENT_TOOL_MAP,WRITE_TOOL_NAMES,SUMMARIZER_EXEMPT_TOOL_NAMES,DEFAULT_MODELS,DEFAULT_AGENT_CONFIGS,DEFAULT_SCORING_CONFIG,LOW_CAPABILITY_MODELS,TURBO_MODE_BANNER=`## \uD83D\uDE80 TURBO MODE ACTIVE
|
|
2
2
|
|
|
3
3
|
**Speed optimization enabled for this session.**
|
|
4
4
|
|
|
@@ -1267,9 +1267,9 @@ ${warnings.map((w)=>`Detected signal: ${w}`).join(`
|
|
|
1267
1267
|
`).filter((line)=>line.trim().length>0).length,bytes:stat11.size}}catch{return{lines:0,bytes:0}}}function compactTerminalRecords(view,checkpoint2){let now=Date.now(),terminals=Object.entries(view).filter(([,rec])=>rec.status!=="active").sort((a,b)=>b[1].updatedAt-a[1].updatedAt);if(terminals.length===0)return null;if(!terminals.some(([,rec])=>now-rec.updatedAt>PR_SUBSCRIPTION_LIMITS.terminalMaxAgeMs)&&terminals.length<=PR_SUBSCRIPTION_LIMITS.terminalRecordsHigh)return null;let kept=0;for(let[key2,rec]of terminals)if(now-rec.updatedAt>PR_SUBSCRIPTION_LIMITS.terminalMaxAgeMs||kept>=PR_SUBSCRIPTION_LIMITS.terminalRecordsLow){if(rec.status==="removed")checkpoint2.terminalSummary.removed+=1;else checkpoint2.terminalSummary.expired+=1;checkpoint2.terminalSummary.lastTerminalAt=Math.max(checkpoint2.terminalSummary.lastTerminalAt??0,rec.updatedAt),delete view[key2]}else kept+=1;return checkpoint2.maintenance.compactions+=1,checkpoint2.maintenance.lastCompactedAt=now,{kind:"compact"}}function maybeArchiveLegacy(directory,checkpoint2){let migration=checkpoint2.migration;if(!migration||!migration.done||migration.archived)return null;let legacy=storePath3(directory),stat11;try{stat11=_internals98.archiveStatSync(legacy)}catch(err){if(err.code==="ENOENT")migration.archived=!0;else log(`[pr-monitor] legacy archive inspection deferred: ${storageErrorCode(err)}`);return null}if(stat11.size!==migration.sourceBytes||stat11.mtimeMs!==migration.sourceMtimeMs)return null;_internals98.beforeArchiveLegacy(directory);try{stat11=_internals98.archiveStatSync(legacy)}catch{return null}if(stat11.size!==migration.sourceBytes||stat11.mtimeMs!==migration.sourceMtimeMs)return null;let archive=legacyArchivePath(directory),next=legacyArchiveNextPath(directory),previous=legacyArchivePreviousPath(directory);try{_internals98.beforeArchiveRename(directory);try{fs65.unlinkSync(next)}catch{}_internals98.renameWithRetry(legacy,next);let archivedStat=_internals98.archiveStatSync(next);if(archivedStat.size!==migration.sourceBytes||archivedStat.mtimeMs!==migration.sourceMtimeMs)return _internals98.renameWithRetry(next,legacy),null;let archivedAt=new Date;fs65.utimesSync(next,archivedAt,archivedAt);let movedPrevious=!1;try{fs65.unlinkSync(previous)}catch{}try{_internals98.renameWithRetry(archive,previous),movedPrevious=!0}catch(err){if(err.code!=="ENOENT")throw err}try{_internals98.renameWithRetry(next,archive)}catch(err){if(movedPrevious)_internals98.renameWithRetry(previous,archive);throw _internals98.renameWithRetry(next,legacy),err}if(movedPrevious)try{fs65.unlinkSync(previous)}catch{}}catch(err){try{if(fs65.existsSync(next)&&!fs65.existsSync(legacy))_internals98.renameWithRetry(next,legacy)}catch{}return log(`[pr-monitor] legacy archive deferred: ${storageErrorCode(err)}`),null}try{let now=Date.now()/1000;fs65.utimesSync(legacyArchivePath(directory),now,now)}catch{}return migration.archived=!0,{kind:"archive"}}function reconcileLegacyArchiveStaging(directory,migration){let legacy=storePath3(directory),archive=legacyArchivePath(directory),next=legacyArchiveNextPath(directory),previous=legacyArchivePreviousPath(directory),legacyExists=fileExistsStrict(legacy),archiveExists=fileExistsStrict(archive),nextExists=fileExistsStrict(next),previousExists=fileExistsStrict(previous);if(!nextExists&&!previousExists)return;if(legacyExists){if(!archiveExists&&previousExists)_internals98.renameWithRetry(previous,archive),archiveExists=!0,previousExists=!1;if(!archiveExists&&nextExists){let candidate=fs65.statSync(next);if(migration.done&&candidate.size===migration.sourceBytes&&candidate.mtimeMs===migration.sourceMtimeMs)_internals98.renameWithRetry(next,archive),archiveExists=!0,nextExists=!1}if(archiveExists&&previousExists)fs65.unlinkSync(previous);if(nextExists)fs65.unlinkSync(next);return}if(archiveExists){if(nextExists)_internals98.renameWithRetry(next,legacy),migration.archived=!1,legacyExists=!0,nextExists=!1;if(previousExists)fs65.unlinkSync(previous);return}if(previousExists){if(_internals98.renameWithRetry(previous,archive),archiveExists=!0,previousExists=!1,nextExists)fs65.unlinkSync(next),legacyExists=!0,nextExists=!1;return}if(nextExists){let candidate=fs65.statSync(next);if(migration.done&&candidate.size===migration.sourceBytes&&candidate.mtimeMs===migration.sourceMtimeMs)_internals98.renameWithRetry(next,archive);else _internals98.renameWithRetry(next,legacy),migration.archived=!1}}function cleanupStaleLegacyArchive(directory){try{let stat11=fs65.statSync(legacyArchivePath(directory));if(Date.now()-stat11.mtimeMs>PR_SUBSCRIPTION_LIMITS.legacyArchiveTtlMs)fs65.unlinkSync(legacyArchivePath(directory))}catch{}}function emitHealthTelemetry(directory,trigger,checkpoint2){let records=Object.values(checkpoint2.records),healthPayload={trigger,active_count:records.filter((r)=>r.status==="active").length,terminal_count:records.filter((r)=>r.status!=="active").length,compactions:checkpoint2.maintenance.compactions,corrupt_count:checkpoint2.maintenance.corruptLegacyRecords,dropped_audit_count:checkpoint2.maintenance.droppedAuditTransitions,checkpoint_bytes:Buffer.byteLength(`${JSON.stringify(checkpoint2)}
|
|
1268
1268
|
`,"utf-8"),limit_bytes:PR_SUBSCRIPTION_LIMITS.maxCheckpointBytes,recovery_resets:checkpoint2.maintenance.resets};telemetry.prSubscriptionHealth(healthPayload),observeStoreHealth({directory,kind:"pr_subscription_health",payload:healthPayload})}function warnLegacyOverLimit(directory,size){let key2=canonicalRootKey(directory);if(legacyOverLimitWarned.has(key2))return;if(legacyOverLimitWarned.size>=32)legacyOverLimitWarned.delete(legacyOverLimitWarned.keys().next().value);legacyOverLimitWarned.set(key2,!0),log(`[pr-monitor] legacy subscriptions.jsonl is ${size} bytes (>${PR_SUBSCRIPTION_LIMITS.legacySourceMaxBytes}); refusing to fold it — archive or split the file so its subscriptions can be re-subscribed, then remove it (reported via /swarm pr status)`)}function warnMigrationCapacity(directory,records){let key2=canonicalRootKey(directory);if(migrationCapacityWarned.has(key2))return;if(migrationCapacityWarned.size>=32)migrationCapacityWarned.delete(migrationCapacityWarned.keys().next().value);migrationCapacityWarned.set(key2,!0),log(`[pr-monitor] legacy subscriptions.jsonl folds to ${records} records (>checkpoint capacity ${PR_SUBSCRIPTION_LIMITS.maxCheckpointRecords}); migration refused — archive or split the file so its subscriptions can be re-subscribed, then remove it`)}function overlayLegacy(directory,checkpoint2){let view={...checkpoint2.records},legacy=storePath3(directory),stat11=null;try{stat11=fs65.statSync(legacy)}catch{}if(stat11===null)return{view,usedLegacy:!1,absorbed:0,corruptLines:0,overLimit:!1,aborted:!1};if(stat11.size>PR_SUBSCRIPTION_LIMITS.legacySourceMaxBytes)return warnLegacyOverLimit(directory,stat11.size),{view,usedLegacy:!1,absorbed:0,corruptLines:0,overLimit:!0,aborted:!1};let migration=checkpoint2.migration;if(migration===null||!migration.done){let baselineRecords=migration?.baselineRecords??{...checkpoint2.records},sameGeneration=migration!==null&&stat11.size===migration.sourceBytes&&stat11.mtimeMs===migration.sourceMtimeMs,cursor=sameGeneration?migration.scannedBytes:0,discardingOversizeLine=sameGeneration?migration.discardingOversizeLine:!1;if(!sameGeneration&&migration!==null)view={...baselineRecords};let fold2=foldLegacyRegion(legacy,cursor,Number.MAX_SAFE_INTEGER,discardingOversizeLine);if(fold2.ioError)return{view,usedLegacy:!1,absorbed:0,corruptLines:0,overLimit:!1,aborted:!0};let absorbed2=mergeFoldedRecords(view,fold2.folded);return{view,usedLegacy:!0,absorbed:absorbed2,corruptLines:fold2.corruptLines,overLimit:!1,aborted:fold2.aborted}}if(stat11.size===migration.sourceBytes&&stat11.mtimeMs===migration.sourceMtimeMs)return{view,usedLegacy:!1,absorbed:0,corruptLines:0,overLimit:!1,aborted:!1};let fold=foldLegacyRegion(legacy,0,Number.MAX_SAFE_INTEGER);if(fold.ioError)return{view,usedLegacy:!1,absorbed:0,corruptLines:0,overLimit:!1,aborted:!0};let absorbed=mergeFoldedRecords(view,fold.folded);return{view,usedLegacy:!0,absorbed,corruptLines:fold.corruptLines,overLimit:!1,aborted:fold.aborted}}async function loadViewForRead(directory){if(ensurePrSubscriptionCoordinationImported(directory,!1)){let coordinationView=readCoordinationSubscriptions(directory)??{},checkpointRead=readCheckpoint(directory);if(checkpointRead.kind==="ok"&&sameProjectRoot(checkpointRead.value.rootPath,directory)&&checkpointRead.value.migration?.done===!1){let pendingCheckpoint=cloneCheckpoint(checkpointRead.value);pendingCheckpoint.records={...pendingCheckpoint.records,...coordinationView};let overlaid=overlayLegacy(directory,pendingCheckpoint);return{view:overlaid.view,recoverySource:overlaid.usedLegacy?"checkpoint+legacy":"checkpoint"}}return{view:coordinationView,recoverySource:"checkpoint"}}let read=readCheckpoint(directory),pendingCoordination=readCoordinationSubscriptions(directory);if(read.kind==="ok"&&sameProjectRoot(read.value.rootPath,directory)&&read.value.migration?.done===!1&&pendingCoordination!==null&&Object.keys(pendingCoordination).length>0){let pendingCheckpoint=cloneCheckpoint(read.value);pendingCheckpoint.records={...pendingCheckpoint.records,...pendingCoordination};let overlaid=overlayLegacy(directory,pendingCheckpoint);return{view:overlaid.view,recoverySource:overlaid.usedLegacy?"checkpoint+legacy":"checkpoint"}}if(read.kind==="ok"){if(!sameProjectRoot(read.value.rootPath,directory))return{view:{},recoverySource:"foreign"};if(read.value.migration?.done===!0){if(!legacyProjectionFingerprintMatches(directory,read.value)){if(fileExistsStrict(legacyArchivePath(directory)))return retireAuthoritativeLegacyShadow(directory),{view:{...read.value.records},recoverySource:"checkpoint"};let overlaid2=overlayLegacy(directory,read.value);if(overlaid2.usedLegacy&&!overlaid2.aborted)return{view:overlaid2.view,recoverySource:"checkpoint+legacy"}}return{view:{...read.value.records},recoverySource:"checkpoint"}}let overlaid=overlayLegacy(directory,read.value);return{view:overlaid.view,recoverySource:overlaid.usedLegacy?"checkpoint+legacy":"checkpoint"}}if(read.kind==="invalid"){let legacy=storePath3(directory),view2={},size=fileSizeOrNull(legacy);if(size!==null&&size<=PR_SUBSCRIPTION_LIMITS.legacySourceMaxBytes){let fold2=foldLegacyRegion(legacy,0,Number.MAX_SAFE_INTEGER);if(!fold2.ioError)mergeFoldedRecords(view2,fold2.folded)}else if(size!==null)warnLegacyOverLimit(directory,size);return{view:view2,recoverySource:"corrupt-recovered"}}let legacyPath=storePath3(directory),legacyStat;try{legacyStat=fs65.statSync(legacyPath)}catch{return{view:{},recoverySource:"empty"}}let legacySize=legacyStat.size;if(legacySize>PR_SUBSCRIPTION_LIMITS.legacySourceMaxBytes)return warnLegacyOverLimit(directory,legacySize),{view:{},recoverySource:"legacy-log"};let fold=foldLegacyRegion(legacyPath,0,Number.MAX_SAFE_INTEGER),view={};if(fold.ioError)return{view,recoverySource:"legacy-log"};if(mergeFoldedRecords(view,fold.folded),!fold.aborted)_internals98.beforeBootstrapLock(directory),await bootstrapCheckpointFromLegacy(directory);return{view,recoverySource:"legacy-log"}}async function bootstrapCheckpointFromLegacy(directory){let key2=canonicalRootKeyFresh(directory);if(bootstrapAttempted.has(key2))return;if(bootstrapAttempted.size>=32)bootstrapAttempted.delete(bootstrapAttempted.keys().next().value);bootstrapAttempted.set(key2,!0);try{await withEvidenceLock(directory,PR_SUBSCRIPTIONS_FILE,STORE_LOCK_AGENT,STORE_LOCK_TASK,async()=>{if(readCheckpoint(directory).kind!=="absent")return;let beforeFold;try{beforeFold=fs65.statSync(storePath3(directory))}catch{return}let lockedFold=foldLegacyRegion(storePath3(directory),0,PR_SUBSCRIPTION_LIMITS.legacySourceMaxBytes);if(lockedFold.ioError)return;let afterFold;try{afterFold=fs65.statSync(storePath3(directory))}catch{return}if(afterFold.size!==beforeFold.size||afterFold.mtimeMs!==beforeFold.mtimeMs)return;let foldedView={};mergeFoldedRecords(foldedView,lockedFold.folded);let checkpoint2=freshCheckpoint(directory);checkpoint2.records={...foldedView};let terminals=Object.values(foldedView).filter((rec)=>rec.status!=="active");checkpoint2.terminalSummary.lastTerminalAt=terminals.length?Math.max(...terminals.map((rec)=>rec.updatedAt)):null,checkpoint2.maintenance.corruptLegacyRecords=lockedFold.corruptLines,checkpoint2.migration={scannedBytes:lockedFold.nextByte,sourceBytes:beforeFold.size,sourceMtimeMs:beforeFold.mtimeMs,corruptLines:lockedFold.corruptLines,discardingOversizeLine:!1,baselineRecords:{},baselineTerminalSummary:{removed:0,expired:0,lastTerminalAt:null},done:!0,archived:!1,startedAt:Date.now()},checkpoint2.sequence=1,checkpoint2.updatedAt=Date.now();let auditCompaction=prepareAuditCompaction(directory);persistCheckpointWithAuditCompaction(directory,checkpoint2,auditCompaction);let archiveEvent=maybeArchiveLegacy(directory,checkpoint2);if(archiveEvent)checkpoint2.sequence+=1,checkpoint2.updatedAt=Date.now(),_internals98.writeCheckpointFile(directory,checkpoint2);if(flushAuditEvents(directory,[{kind:"migrate-complete"},...archiveEvent?[archiveEvent]:[]],checkpoint2.sequence,checkpoint2.maintenance),emitHealthTelemetry(directory,"migrate-complete",checkpoint2),archiveEvent)emitHealthTelemetry(directory,"archive",checkpoint2)},PR_SUBSCRIPTION_LIMITS.bootstrapLockTimeoutMs)}catch(err){log(`[pr-monitor] read-bootstrap skipped: ${storageErrorCode(err)}`)}}function loadViewForWrite(directory){let audit=[],dirty=!1,reboundForeign=!1,checkpoint2,read=readCheckpoint(directory),archiveDeferredForExternalRewrite=!1;if(read.kind==="ok"&&sameProjectRoot(read.value.rootPath,directory))checkpoint2=cloneCheckpoint(read.value);else if(read.kind==="ok"){let displaced=Object.keys(read.value.records).length,legacy2=storePath3(directory),foreignLegacyExists=!1;try{_internals98.statSync(legacy2),foreignLegacyExists=!0}catch(err){if(err.code!=="ENOENT")throw Error(`PR subscription foreign legacy log could not be inspected; refusing to rebind (${storageErrorCode(err)})`)}if(foreignLegacyExists){let foreignLegacy=foreignLegacySlotPath(directory);try{try{fs65.unlinkSync(foreignLegacy)}catch{}_internals98.renameWithRetry(legacy2,foreignLegacy)}catch(err){throw Error(`PR subscription foreign legacy log could not be quarantined; refusing to rebind (${storageErrorCode(err)})`)}}if(!quarantineCheckpoint(directory,"foreign"))throw Error("PR subscription foreign checkpoint could not be quarantined; refusing to rebind");checkpoint2=freshCheckpoint(directory),checkpoint2.maintenance.resets+=read.value.maintenance.resets+1,audit.push({kind:"foreign-rebind"}),dirty=!0,log(`[pr-monitor] foreign checkpoint quarantined (${displaced} displaced records, recorded root ${read.value.rootPath}); store rebound to ${directory}`),reboundForeign=!0}else if(read.kind==="invalid")quarantineCheckpoint(directory,"corrupt"),checkpoint2=freshCheckpoint(directory),checkpoint2.maintenance.resets+=1,audit.push({kind:"corrupt-quarantine"}),dirty=!0,log(`[pr-monitor] corrupt checkpoint quarantined; store rebound to ${directory}`);else checkpoint2=freshCheckpoint(directory);if(!reboundForeign&&checkpoint2.migration!==null)try{reconcileLegacyArchiveStaging(directory,checkpoint2.migration)}catch(err){throw Error(`PR subscription legacy archive staging could not be reconciled; refusing mutation (${storageErrorCode(err)})`)}let legacy=storePath3(directory),legacyStat=null;try{legacyStat=_internals98.statSync(legacy)}catch(err){if(err.code!=="ENOENT")throw Error(`PR subscription legacy store could not be inspected; refusing mutation (${storageErrorCode(err)})`)}let view;if(reboundForeign)legacyStat=null;if(legacyStat===null){view={...checkpoint2.records};let importedShadowExists=fileExistsStrict(importedShadowPath(legacy)),archiveExists=fileExistsStrict(legacyArchivePath(directory));if(checkpoint2.migration?.done&&!checkpoint2.migration.archived&&(archiveExists||!importedShadowExists))checkpoint2.migration.archived=!0,dirty=!0;return{checkpoint:checkpoint2,view,audit,dirty}}if(legacyStat.size>PR_SUBSCRIPTION_LIMITS.legacySourceMaxBytes)throw warnLegacyOverLimit(directory,legacyStat.size),Error(`PR subscription legacy store exceeds the ${PR_SUBSCRIPTION_LIMITS.legacySourceMaxBytes}-byte migration ceiling; refusing mutation until the file is archived or split`);if(checkpoint2.migration?.done===!0&&checkpoint2.migration.archived&&legacyProjectionFingerprintMatches(directory,checkpoint2))checkpoint2.migration.archived=!1,dirty=!0;if(checkpoint2.migration?.done===!0&&!legacyProjectionFingerprintMatches(directory,checkpoint2)){try{fs65.unlinkSync(projectionMarkerPath(legacy))}catch(error93){if(error93.code!=="ENOENT")throw error93}checkpoint2.migration=null,dirty=!0,archiveDeferredForExternalRewrite=!0}let{size:legacySize,mtimeMs:legacyMtime}=legacyStat,migration=checkpoint2.migration;if(migration===null||!migration.done){let baselineRecords=migration?.baselineRecords??{...checkpoint2.records},baselineTerminalSummary=migration?.baselineTerminalSummary??{...checkpoint2.terminalSummary},sameGeneration=migration!==null&&legacySize===migration.sourceBytes&&legacyMtime===migration.sourceMtimeMs,cursor=sameGeneration?migration.scannedBytes:0,startedAt=sameGeneration?migration.startedAt:Date.now(),corruptTotal=sameGeneration?migration.corruptLines:0,discardingOversizeLine=sameGeneration?migration.discardingOversizeLine:!1;if(!sameGeneration&&migration!==null)checkpoint2.records={...baselineRecords},checkpoint2.terminalSummary={...baselineTerminalSummary},checkpoint2.maintenance.corruptLegacyRecords=Math.max(0,checkpoint2.maintenance.corruptLegacyRecords-migration.corruptLines);view={...checkpoint2.records};let capacityRefused=!1,foldedThisOperation=0;while(!0){let chunkStart=cursor,remainingOperationBytes=Math.max(1,PR_SUBSCRIPTION_LIMITS.migrationMaxBytesPerOperation-foldedThisOperation),fold=foldLegacyRegion(legacy,cursor,Math.min(PR_SUBSCRIPTION_LIMITS.migrationChunkBytes,remainingOperationBytes),discardingOversizeLine);if(fold.ioError)throw Error("PR subscription legacy migration read failed (I/O error)");if(mergeFoldedRecords(view,fold.folded),checkpoint2.maintenance.corruptLegacyRecords+=fold.corruptLines,corruptTotal+=fold.corruptLines,discardingOversizeLine=fold.discardingOversizeLine,cursor=fold.nextByte,foldedThisOperation+=Math.max(0,cursor-chunkStart),fold.aborted){let progress=cloneCheckpoint(checkpoint2);return progress.records={...view},progress.migration={scannedBytes:cursor,sourceBytes:legacySize,sourceMtimeMs:legacyMtime,corruptLines:corruptTotal,discardingOversizeLine,baselineRecords:{...baselineRecords},baselineTerminalSummary:{...baselineTerminalSummary},done:!1,archived:!1,startedAt},progress.updatedAt=Date.now(),progress.sequence+=1,writeCheckpointFile(directory,progress),checkpoint2.sequence=progress.sequence,log(`[pr-monitor] legacy scan aborted by an I/O error after ${cursor} bytes — migration stays incomplete and will retry`),dirty=!0,{checkpoint:checkpoint2,view,audit,dirty}}let compactEvent=compactTerminalRecords(view,checkpoint2);if(compactEvent)audit.push(compactEvent);if(Object.keys(view).length>PR_SUBSCRIPTION_LIMITS.maxCheckpointRecords){capacityRefused=!0,warnMigrationCapacity(directory,Object.keys(view).length);break}let deferLargeInitialGeneration=!sameGeneration&&legacySize>PR_SUBSCRIPTION_LIMITS.migrationMaxBytesPerOperation&&foldedThisOperation>=PR_SUBSCRIPTION_LIMITS.migrationMaxBytesPerOperation;if(!fold.eof||deferLargeInitialGeneration){let progress=cloneCheckpoint(checkpoint2);if(progress.records={...view},progress.migration={scannedBytes:cursor,sourceBytes:legacySize,sourceMtimeMs:legacyMtime,corruptLines:corruptTotal,discardingOversizeLine,baselineRecords:{...baselineRecords},baselineTerminalSummary:{...baselineTerminalSummary},done:!1,archived:!1,startedAt},progress.updatedAt=Date.now(),progress.sequence+=1,writeCheckpointFile(directory,progress),checkpoint2.sequence=progress.sequence,dirty=!0,foldedThisOperation>=PR_SUBSCRIPTION_LIMITS.migrationMaxBytesPerOperation)throw Error(`PR subscription legacy migration is in progress (${cursor}/${legacySize} bytes); retry the operation to continue`);continue}checkpoint2.migration={scannedBytes:cursor,sourceBytes:legacySize,sourceMtimeMs:legacyMtime,corruptLines:corruptTotal,discardingOversizeLine:!1,baselineRecords:{},baselineTerminalSummary:{removed:0,expired:0,lastTerminalAt:null},done:!0,archived:archiveDeferredForExternalRewrite,startedAt},audit.push({kind:"migrate-complete"}),dirty=!0;break}if(capacityRefused)return{checkpoint:checkpoint2,view,audit,dirty:!1};return{checkpoint:checkpoint2,view,audit,dirty}}if(!legacyProjectionFingerprintMatches(directory,checkpoint2)){let legacyPath=storePath3(directory);if(fileExistsStrict(projectionMarkerPath(legacyPath))){let overlaid=overlayLegacy(directory,checkpoint2);return{checkpoint:checkpoint2,view:overlaid.view,audit,dirty}}retireAuthoritativeLegacyShadow(directory)}return{checkpoint:checkpoint2,view:{...checkpoint2.records},audit,dirty}}function finalizeWrite(directory,loaded,opAudit){let{checkpoint:checkpoint2}=loaded,events=[...loaded.audit,...opAudit],compactEvent=compactTerminalRecords(loaded.view,checkpoint2);if(compactEvent)events.push(compactEvent);if(!loaded.dirty&&events.length===0){let archiveEvent2=maybeArchiveLegacy(directory,checkpoint2);if(!archiveEvent2)return;checkpoint2.updatedAt=Date.now(),checkpoint2.sequence+=1;let auditCompaction2=prepareAuditCompaction(directory);persistCheckpointWithAuditCompaction(directory,checkpoint2,auditCompaction2),flushAuditEvents(directory,[archiveEvent2],checkpoint2.sequence,checkpoint2.maintenance),cleanupStaleLegacyArchive(directory),emitHealthTelemetry(directory,"archive",checkpoint2);return}checkpoint2.records=loaded.view,checkpoint2.updatedAt=Date.now(),checkpoint2.rootPath=path107.resolve(directory),checkpoint2.sequence+=1;let auditCompaction=prepareAuditCompaction(directory);if(persistCheckpointWithAuditCompaction(directory,checkpoint2,auditCompaction),checkpoint2.migration?.done===!0){let legacyPath=storePath3(directory);try{let legacyStat=fs65.statSync(legacyPath);if(legacyStat.size!==checkpoint2.migration.sourceBytes||legacyStat.mtimeMs!==checkpoint2.migration.sourceMtimeMs){let legacyPayload=Object.values(checkpoint2.records).map((entry)=>JSON.stringify(entry)).join(`
|
|
1269
1269
|
`)+(Object.keys(checkpoint2.records).length>0?`
|
|
1270
|
-
`:"");writeLegacyStoreFile(legacyPath,legacyPayload),fs65.writeFileSync(projectionMarkerPath(legacyPath),"","utf-8"),legacyStat=fs65.statSync(legacyPath)}checkpoint2.migration.sourceBytes=legacyStat.size,checkpoint2.migration.scannedBytes=legacyStat.size,checkpoint2.migration.sourceMtimeMs=legacyStat.mtimeMs}catch{}}flushAuditEvents(directory,events,checkpoint2.sequence,checkpoint2.maintenance);let archiveEvent=maybeArchiveLegacy(directory,checkpoint2);if(archiveEvent)events.push(archiveEvent),checkpoint2.sequence+=1,_internals98.writeCheckpointFile(directory,checkpoint2),flushAuditEvents(directory,[archiveEvent],checkpoint2.sequence,checkpoint2.maintenance);cleanupStaleLegacyArchive(directory);let coordinationView=readCoordinationSubscriptions(directory);if(coordinationView!==null&&!isDeepStrictEqualByJson(coordinationView,loaded.view))persistCoordinationSubscriptions(directory,{...loaded.view});for(let kind of["compact","migrate-complete","archive","foreign-rebind","corrupt-quarantine"])if(events.some((event)=>event.kind===kind))emitHealthTelemetry(directory,kind,checkpoint2)}async function subscribe(directory,input){if(!directory||directory.trim()==="")throw Error("directory is required");if(!input.sessionID||input.sessionID.trim()==="")throw Error("sessionID is required and must be non-empty");if(!input.repoFullName||input.repoFullName.trim()==="")throw Error("repoFullName is required and must be non-empty");if(!input.prUrl||input.prUrl.trim()==="")throw Error("prUrl is required and must be non-empty");if(!input.prNumber||!Number.isInteger(input.prNumber)||input.prNumber<=0)throw Error("prNumber is required and must be a positive integer");let correlationId=buildCorrelationId(input.sessionID,input.repoFullName,input.prNumber),now=Date.now();return withEvidenceLock(directory,PR_SUBSCRIPTIONS_FILE,STORE_LOCK_AGENT,STORE_LOCK_TASK,async()=>{if(canUseCoordinationWritePath(directory)){let view=readCoordinationSubscriptions(directory)??{},match2=Object.values(view).find((r)=>r.correlationId===correlationId&&r.status==="active");if(match2)return onSubscriptionCreated?.(directory,match2),match2;if(input.maxSubscriptions===void 0||input.maxSubscriptions>0){let limit=input.maxSubscriptions!==void 0?input.maxSubscriptions:PR_SUBSCRIPTION_LIMITS.defaultMaxActiveSubscriptions,activeCount=Object.values(view).filter((r)=>r.status==="active").length;if(activeCount>=limit)throw Error(`PR subscription limit reached: ${activeCount}/${limit}`)}let record4={correlationId,sessionID:input.sessionID,prNumber:input.prNumber,repoFullName:input.repoFullName,prUrl:input.prUrl,...input.forge?{forge:input.forge}:{},lastCheckedAt:now,isWatching:!0,hasUnaddressedEvents:!1,status:"active",createdAt:now,updatedAt:now,errorCount:0};return validateRecord3(record4),view[correlationId]=record4,persistCoordinationSubscriptions(directory,view,!0,[{kind:"subscribe",correlationId}]),onSubscriptionCreated?.(directory,record4),record4}let loaded=loadViewForWrite(directory),match=Object.values(loaded.view).find((r)=>r.correlationId===correlationId&&r.status==="active");if(match)return onSubscriptionCreated?.(directory,match),finalizeWrite(directory,loaded,[]),match;if(input.maxSubscriptions===void 0||input.maxSubscriptions>0){let limit=input.maxSubscriptions!==void 0?input.maxSubscriptions:PR_SUBSCRIPTION_LIMITS.defaultMaxActiveSubscriptions,activeCount=Object.values(loaded.view).filter((r)=>r.status==="active").length;if(activeCount>=limit)throw Error(`PR subscription limit reached: ${activeCount}/${limit}`)}let record3={correlationId,sessionID:input.sessionID,prNumber:input.prNumber,repoFullName:input.repoFullName,prUrl:input.prUrl,...input.forge?{forge:input.forge}:{},lastCheckedAt:now,isWatching:!0,hasUnaddressedEvents:!1,status:"active",createdAt:now,updatedAt:now,errorCount:0};return validateRecord3(record3),loaded.view[correlationId]=record3,loaded.dirty=!0,finalizeWrite(directory,loaded,[{kind:"subscribe",correlationId}]),onSubscriptionCreated?.(directory,record3),record3})}async function unsubscribe(directory,correlationId){if(!correlationId)return null;return withEvidenceLock(directory,PR_SUBSCRIPTIONS_FILE,STORE_LOCK_AGENT,STORE_LOCK_TASK,async()=>{if(canUseCoordinationWritePath(directory)){let view=readCoordinationSubscriptions(directory)??{},match2=Object.values(view).find((r)=>r.correlationId===correlationId&&r.status==="active");if(!match2)return null;let removed2={...match2,status:"removed",isWatching:!1,updatedAt:Date.now()};return view[correlationId]=removed2,persistCoordinationSubscriptions(directory,view,!0,[{kind:"unsubscribe",correlationId}]),removed2}let loaded=loadViewForWrite(directory),match=Object.values(loaded.view).find((r)=>r.correlationId===correlationId&&r.status==="active");if(!match)return finalizeWrite(directory,loaded,[]),null;let now=Date.now(),removed={...match,status:"removed",isWatching:!1,updatedAt:now};return loaded.view[correlationId]=removed,loaded.dirty=!0,finalizeWrite(directory,loaded,[{kind:"unsubscribe",correlationId}]),removed})}async function listActive(directory){let{view}=await loadViewForRead(directory);return Object.values(view).filter((r)=>r.status==="active")}async function lookupByPr(directory,repoFullName,prNumber){let{view}=await loadViewForRead(directory);for(let record3 of Object.values(view))if(record3.status==="active"&&record3.repoFullName===repoFullName&&record3.prNumber===prNumber)return record3;return null}async function findSubscriptionRecordForPrUrl(directory,key2){if(key2.repoFullName!==void 0&&key2.prNumber!==void 0){let record3=await lookupByPr(directory,key2.repoFullName,key2.prNumber);if(record3&&(!key2.sessionID||record3.sessionID===key2.sessionID)&&(key2.prUrl===void 0||record3.prUrl===key2.prUrl||subscriptionPrUrlMatches(record3,key2.prUrl)))return record3;if(!key2.sessionID)return null}if(key2.prUrl===void 0&&key2.repoFullName===void 0)return null;if(key2.prUrl===void 0){let active2=await listActive(directory);for(let record3 of active2){if(key2.sessionID&&record3.sessionID!==key2.sessionID)continue;if(record3.repoFullName===key2.repoFullName&&record3.prNumber===key2.prNumber)return record3}return null}let active=await listActive(directory);for(let record3 of active){if(key2.sessionID&&record3.sessionID!==key2.sessionID)continue;if(record3.prUrl===key2.prUrl||subscriptionPrUrlMatches(record3,key2.prUrl))return record3}return null}function subscriptionPrUrlMatches(record3,prUrl){let left=canonicalForgePrUrl(record3.prUrl,record3.forge),right=canonicalForgePrUrl(prUrl,record3.forge);return left!==null&&left===right}async function updateSnapshot(directory,correlationId,updates){if(!correlationId)return null;return withEvidenceLock(directory,PR_SUBSCRIPTIONS_FILE,STORE_LOCK_AGENT,STORE_LOCK_TASK,async()=>{let existingCoordination=readCoordinationSubscriptions(directory);if(existingCoordination!==null&&!fileExistsStrict(storePath3(directory))&&!hasLegacyReconciliationArtifacts(directory)){let match2=Object.values(existingCoordination).find((r)=>r.correlationId===correlationId&&r.status==="active");if(!match2)return null;if(!snapshotUpdateHasChanges(match2,updates))return match2;let updated2={...match2,...updates,correlationId,sessionID:match2.sessionID,repoFullName:match2.repoFullName,prNumber:match2.prNumber,prUrl:match2.prUrl,createdAt:match2.createdAt,updatedAt:Date.now()};return validateRecord3(updated2),existingCoordination[correlationId]=updated2,persistCoordinationSubscriptions(directory,existingCoordination),updated2}if(canUseCoordinationWritePath(directory)){let view=readCoordinationSubscriptions(directory)??{},match2=Object.values(view).find((r)=>r.correlationId===correlationId&&r.status==="active");if(!match2)return null;if(!snapshotUpdateHasChanges(match2,updates))return match2;let updated2={...match2,...updates,correlationId,sessionID:match2.sessionID,repoFullName:match2.repoFullName,prNumber:match2.prNumber,prUrl:match2.prUrl,createdAt:match2.createdAt,updatedAt:Date.now()};return validateRecord3(updated2),view[correlationId]=updated2,persistCoordinationSubscriptions(directory,view),updated2}let loaded=loadViewForWrite(directory),match=Object.values(loaded.view).find((r)=>r.correlationId===correlationId&&r.status==="active");if(!match)return finalizeWrite(directory,loaded,[]),null;if(!snapshotUpdateHasChanges(match,updates))return finalizeWrite(directory,loaded,[]),match;let updated={...match,...updates,correlationId,sessionID:match.sessionID,repoFullName:match.repoFullName,prNumber:match.prNumber,prUrl:match.prUrl,createdAt:match.createdAt,updatedAt:Date.now()};return validateRecord3(updated),loaded.view[correlationId]=updated,loaded.dirty=!0,finalizeWrite(directory,loaded,[]),updated})}async function sweepStale(directory,ttlDays,mergedPrs){if(!ttlDays||ttlDays<=0)return 0;let ttlMs=ttlDays*86400000,now=Date.now();try{return await withEvidenceLock(directory,PR_SUBSCRIPTIONS_FILE,STORE_LOCK_AGENT,STORE_LOCK_TASK,async()=>{if(canUseCoordinationWritePath(directory)){let view=readCoordinationSubscriptions(directory)??{},swept2=0,expiredCorrelationIds=[],now2=Date.now();for(let record3 of Object.values(view)){if(record3.status!=="active")continue;let prKey=`${record3.repoFullName}::${record3.prNumber}`,isMerged=mergedPrs?.has(prKey)??!1,isStale=now2-record3.updatedAt>ttlMs;if(isMerged||isStale&&!record3.hasUnaddressedEvents)view[record3.correlationId]={...record3,status:"expired",isWatching:!1,updatedAt:now2},expiredCorrelationIds.push(record3.correlationId),swept2+=1}if(swept2>0)persistCoordinationSubscriptions(directory,view,!0,expiredCorrelationIds.map((correlationId)=>({kind:"expired",correlationId})));return swept2}let loaded=loadViewForWrite(directory),opAudit=[],swept=0;for(let record3 of Object.values(loaded.view)){if(record3.status!=="active")continue;let prKey=`${record3.repoFullName}::${record3.prNumber}`,isMerged=mergedPrs?.has(prKey)??!1,isStale=now-record3.updatedAt>ttlMs;if(isMerged){loaded.view[record3.correlationId]={...record3,status:"expired",isWatching:!1,updatedAt:now},swept+=1,opAudit.push({kind:"expired",correlationId:record3.correlationId}),loaded.dirty=!0,log(`[pr-monitor] Swept subscription: merged/closed: ${prKey}`);continue}if(isStale&&!record3.hasUnaddressedEvents)loaded.view[record3.correlationId]={...record3,status:"expired",isWatching:!1,updatedAt:now},swept+=1,opAudit.push({kind:"expired",correlationId:record3.correlationId}),loaded.dirty=!0,log(`[pr-monitor] Swept subscription: stale (TTL ${ttlDays}d): ${prKey}`)}return finalizeWrite(directory,loaded,opAudit),swept})}catch(err){return log(`[pr-monitor] sweepStale failed: ${err instanceof Error?err.message:String(err)}`),0}}async function getPrSubscriptionHealth(directory){try{let coordinationView=readCoordinationSubscriptions(directory),read=readCheckpoint(directory),migrationPending=read.kind==="ok"&&sameProjectRoot(read.value.rootPath,directory)&&read.value.migration?.done===!1;if(coordinationView!==null&&Object.keys(coordinationView).length>0&&!migrationPending){let audit2=auditStats(directory),archiveBytes2=fileSizeOrNull(legacyArchivePath(directory))??0,checkpointBytes2=fileSizeOrNull(checkpointPath(directory))??0,health2=healthFromView(coordinationView,buildCoordinationProjectionCheckpoint(directory,coordinationView));return health2.recoverySource="checkpoint",applyFileStats(health2,checkpointBytes2,audit2,archiveBytes2),health2}let audit=auditStats(directory),archiveBytes=fileSizeOrNull(legacyArchivePath(directory))??0,checkpointBytes=fileSizeOrNull(checkpointPath(directory))??0,legacySize=fileSizeOrNull(storePath3(directory)),legacyOverLimit=legacySize!==null&&legacySize>PR_SUBSCRIPTION_LIMITS.legacySourceMaxBytes,health;if(read.kind==="ok"&&!sameProjectRoot(read.value.rootPath,directory))health=emptyHealth2(),health.recoverySource="foreign";else if(read.kind==="invalid"){if(legacySize!==null&&!legacyOverLimit){let fold=foldLegacyRegion(storePath3(directory),0,Number.MAX_SAFE_INTEGER),view={};if(!fold.ioError)mergeFoldedRecords(view,fold.folded);health=healthFromView(view,freshCheckpoint(directory)),health.corruptLegacyRecords=fold.corruptLines}else health=emptyHealth2();health.recoverySource="corrupt-recovered"}else if(read.kind==="absent"){if(legacySize===null||legacyOverLimit)health=emptyHealth2();else{let fold=foldLegacyRegion(storePath3(directory),0,Number.MAX_SAFE_INTEGER),view={};if(!fold.ioError)mergeFoldedRecords(view,fold.folded);health=healthFromView(view,freshCheckpoint(directory)),health.corruptLegacyRecords=fold.corruptLines}health.recoverySource=legacySize===null?"empty":"legacy-log"}else{let pendingCheckpoint=migrationPending&&coordinationView!==null?(()=>{let merged=cloneCheckpoint(read.value);return merged.records={...merged.records,...coordinationView},merged})():read.value,overlaid=overlayLegacy(directory,pendingCheckpoint);health=healthFromView(overlaid.view,read.value),health.recoverySource=overlaid.usedLegacy?"checkpoint+legacy":"checkpoint"}return health.legacyOverLimit=legacyOverLimit,applyFileStats(health,checkpointBytes,audit,archiveBytes),health}catch(err){return log(`[pr-monitor] getPrSubscriptionHealth failed: ${storageErrorCode(err)}`),emptyHealth2()}}function applyFileStats(health,checkpointBytes,audit,archiveBytes){health.checkpointBytes=checkpointBytes,health.pressurePct=checkpointBytes===0?0:Math.round(checkpointBytes/health.checkpointLimitBytes*1000)/10,health.auditLines=audit.lines,health.auditBytes=audit.bytes,health.legacyArchiveBytes=archiveBytes}function emptyHealth2(){return{schemaVersion:1,sequence:0,checkpointAgeMs:null,checkpointBytes:0,checkpointLimitBytes:PR_SUBSCRIPTION_LIMITS.maxCheckpointBytes,pressurePct:0,activeCount:0,removedCount:0,expiredCount:0,terminalSummary:{removed:0,expired:0,lastTerminalAt:null},auditLines:0,auditBytes:0,auditLimitBytes:PR_SUBSCRIPTION_LIMITS.auditMaxBytesHigh,compactions:0,corruptLegacyRecords:0,droppedAuditTransitions:0,resets:0,recoverySource:"empty",migration:null,legacyArchiveBytes:0,legacyOverLimit:!1}}function healthFromView(view,checkpoint2){let records=Object.values(view),health=emptyHealth2();return health.sequence=checkpoint2.sequence,health.checkpointAgeMs=checkpoint2.sequence>0?Date.now()-checkpoint2.updatedAt:null,health.activeCount=records.filter((r)=>r.status==="active").length,health.removedCount=records.filter((r)=>r.status==="removed").length,health.expiredCount=records.filter((r)=>r.status==="expired").length,health.terminalSummary={...checkpoint2.terminalSummary},health.compactions=checkpoint2.maintenance.compactions,health.corruptLegacyRecords=checkpoint2.maintenance.corruptLegacyRecords,health.droppedAuditTransitions=checkpoint2.maintenance.droppedAuditTransitions,health.resets=checkpoint2.maintenance.resets,health.migration=checkpoint2.migration?{done:checkpoint2.migration.done,scannedBytes:checkpoint2.migration.scannedBytes,sourceBytes:checkpoint2.migration.sourceBytes}:null,health}var PR_SUBSCRIPTIONS_FILE="pr-monitor/subscriptions.jsonl",PR_SUBSCRIPTIONS_CHECKPOINT_FILE="pr-monitor/subscriptions.checkpoint.json",PR_SUBSCRIPTIONS_AUDIT_FILE="pr-monitor/subscriptions.audit.jsonl",LEGACY_ARCHIVE_FILE="pr-monitor/subscriptions.legacy.jsonl",FOREIGN_CHECKPOINT_FILE="pr-monitor/subscriptions.checkpoint.foreign.json",CORRUPT_CHECKPOINT_FILE="pr-monitor/subscriptions.checkpoint.corrupt.json",FOREIGN_LEGACY_FILE="pr-monitor/subscriptions.legacy.foreign.jsonl",PR_SUBSCRIPTION_COORDINATION_NAMESPACE="background.pr-subscription",STORE_LOCK_AGENT="pr-monitor",STORE_LOCK_TASK="pr-subscriptions",PR_SUBSCRIPTION_LIMITS,onSubscriptionCreated=null,prMonitorWorkerHandlers,MAX_PR_MONITOR_WORKER_HANDLERS=64,RecordSchema,TerminalSummarySchema,MigrationSchema,MaintenanceSchema,CheckpointSchema,PrSubscriptionCapacityError,legacyOverLimitWarned,migrationCapacityWarned,bootstrapAttempted,_internals98;var init_pr_subscriptions=__esm(()=>{init_zod();init_db();init_lock();init_learning_health();init_utils2();init_forge_provider();init_telemetry();init_utils();init_atomic_write();init_canonical_root();PR_SUBSCRIPTION_LIMITS={readChunkBytes:65536,maxRecordBytes:65536,migrationChunkBytes:1048576,migrationMaxBytesPerOperation:8388608,legacySourceMaxBytes:67108864,defaultMaxActiveSubscriptions:20,maxCheckpointRecords:512,maxCheckpointBytes:262144,checkpointHardReadBytes:1048576,terminalRecordsHigh:60,terminalRecordsLow:30,terminalMaxAgeMs:2592000000,auditMaxLinesHigh:500,auditMaxLinesLow:250,auditMaxBytesHigh:131072,auditMaxBytesLow:65536,legacyArchiveTtlMs:604800000,bootstrapLockTimeoutMs:5000};prMonitorWorkerHandlers=new Map;RecordSchema=exports_external.object({correlationId:exports_external.string().min(1),sessionID:exports_external.string().min(1),prNumber:exports_external.number().int().positive(),repoFullName:exports_external.string().regex(/^[^/\s]+(?:\/[^/\s]+)+$/,"Must be owner/repo format (GitLab nested namespaces allowed)"),prUrl:exports_external.string().min(1),forge:exports_external.object({provider:exports_external.literal("gitlab"),host:exports_external.string().min(1)}).optional(),headRefOid:exports_external.string().optional(),lastCheckedAt:exports_external.number(),lastCommentId:exports_external.string().optional(),lastCheckRunSet:exports_external.string().optional(),mergeableState:exports_external.string().optional(),mergeGroupRunStatus:exports_external.string().optional(),mergeGroupRunConclusion:exports_external.string().optional(),mergeGroupRunHtmlUrl:exports_external.string().optional(),isWatching:exports_external.boolean(),hasUnaddressedEvents:exports_external.boolean(),status:exports_external.enum(["active","removed","expired"]),createdAt:exports_external.number(),updatedAt:exports_external.number(),errorCount:exports_external.number().int().min(0),customPollIntervalSeconds:exports_external.number().int().positive().optional(),customFailureThreshold:exports_external.number().int().min(0).optional(),customCooldownSeconds:exports_external.number().int().min(0).optional()}).strict().superRefine((record3,ctx)=>{if(isForgePrUrl(record3.prUrl))return;if(record3.forge&&isForgePrUrl(record3.prUrl,{provider:record3.forge.provider,host:record3.forge.host}))return;ctx.addIssue({code:exports_external.ZodIssueCode.custom,path:["prUrl"],message:"Must be a valid PR URL (GitHub /pull/N or GitLab /-/merge_requests/N)"})}),TerminalSummarySchema=exports_external.object({removed:exports_external.number().int().min(0),expired:exports_external.number().int().min(0),lastTerminalAt:exports_external.number().int().nullable()}).strict(),MigrationSchema=exports_external.object({scannedBytes:exports_external.number().int().nonnegative(),sourceBytes:exports_external.number().int().nonnegative(),sourceMtimeMs:exports_external.number().nonnegative(),corruptLines:exports_external.number().int().nonnegative(),discardingOversizeLine:exports_external.boolean().optional().default(!1),baselineRecords:exports_external.record(exports_external.string(),RecordSchema).optional().default({}),baselineTerminalSummary:TerminalSummarySchema.optional().default({removed:0,expired:0,lastTerminalAt:null}),done:exports_external.boolean(),archived:exports_external.boolean(),startedAt:exports_external.number().int().nonnegative()}).strict(),MaintenanceSchema=exports_external.object({compactions:exports_external.number().int().nonnegative(),droppedAuditTransitions:exports_external.number().int().nonnegative(),corruptLegacyRecords:exports_external.number().int().nonnegative(),lastCompactedAt:exports_external.number().int().nullable(),resets:exports_external.number().int().nonnegative()}).strict(),CheckpointSchema=exports_external.object({schemaVersion:exports_external.literal(1),sequence:exports_external.number().int().positive(),rootPath:exports_external.string().min(1).max(4096),updatedAt:exports_external.number().int().nonnegative(),records:exports_external.record(exports_external.string(),RecordSchema),terminalSummary:TerminalSummarySchema,migration:MigrationSchema.nullable(),maintenance:MaintenanceSchema}).strict();PrSubscriptionCapacityError=class PrSubscriptionCapacityError extends Error{constructor(message){super(message);this.name="PrSubscriptionCapacityError"}};legacyOverLimitWarned=new Map;migrationCapacityWarned=new Map;bootstrapAttempted=new Map;_internals98={afterCheckpointFstat:(_filePath)=>{},archiveStatSync:fs65.statSync,auditCompactionWrite:atomicWriteSwarmFileSync,beforeBootstrapLock:(_directory2)=>{},beforeArchiveLegacy:(_directory2)=>{},beforeArchiveRename:(_directory2)=>{},foldLegacyRegion,legacyCloseSync:fs65.closeSync,legacyFstatSync:fs65.fstatSync,mergeFoldedRecords,readSync:fs65.readSync,renameWithRetry:renameWithRetry6,sameProjectRoot,statSync:fs65.statSync,writeCheckpointFile}});var exports_state={};__export(exports_state,{updateTaskWorkflowCache:()=>updateTaskWorkflowCache,updateAgentEventTime:()=>updateAgentEventTime,takeReviewerScopeGeneration:()=>takeReviewerScopeGeneration,sweepStaleSessions:()=>sweepStaleSessions,swarmState:()=>swarmState,startReviewerScopeGeneration:()=>startReviewerScopeGeneration,startAgentSession:()=>startAgentSession,settleReviewerScopeMergeback:()=>settleReviewerScopeMergeback,setSessionEnvironment:()=>setSessionEnvironment,setSessionBudget:()=>setSessionBudget,setLiveContextWindow:()=>setLiveContextWindow,setFinalPromptPressure:()=>setFinalPromptPressure,setFinalAccountingWarningBand:()=>setFinalAccountingWarningBand,setDispatchParent:()=>setDispatchParent,setCriticalShownIds:()=>setCriticalShownIds,reviewerScopeGenerationHasDeclaredOverlap:()=>reviewerScopeGenerationHasDeclaredOverlap,resolveSessionWorkspaceDirectory:()=>resolveSessionWorkspaceDirectory,resolveInitialTurboMode:()=>resolveInitialTurboMode,resolveDispatchParent:()=>resolveDispatchParent,resetSwarmStatePreservingSingletons:()=>resetSwarmStatePreservingSingletons,resetSwarmState:()=>resetSwarmState,resetModifiedFilesForTask:()=>resetModifiedFilesForTask,reserveStageBRouteEvidence:()=>reserveStageBRouteEvidence,rehydrateSessionFromDisk:()=>rehydrateSessionFromDisk,rehydratePrSubscriptions:()=>rehydratePrSubscriptions,recordStageBRouteEvidence:()=>recordStageBRouteEvidence,recordStageBCompletion:()=>recordStageBCompletion,recordSessionWorkspaceRoot:()=>recordSessionWorkspaceRoot,recordReviewerScopeGenerationFileFingerprint:()=>recordReviewerScopeGenerationFileFingerprint,recordReviewerScopeGenerationFile:()=>recordReviewerScopeGenerationFile,recordReviewerScopeGenerationCaptureFailure:()=>recordReviewerScopeGenerationCaptureFailure,recordPrimaryOwner:()=>recordPrimaryOwner,recordPhaseAgentDispatch:()=>recordPhaseAgentDispatch,recordPendingDispatchAuthorization:()=>recordPendingDispatchAuthorization,recordModifiedFilesForTask:()=>recordModifiedFilesForTask,recordModifiedFileForTask:()=>recordModifiedFileForTask,pruneOldWindows:()=>pruneOldWindows,peekReviewerScopeGenerationClaim:()=>peekReviewerScopeGenerationClaim,peekReviewerScopeGenerationByStatus:()=>peekReviewerScopeGenerationByStatus,peekReadyReviewerScopeGeneration:()=>peekReadyReviewerScopeGeneration,maybeSweepStaleSessions:()=>maybeSweepStaleSessions,markStageBRouteRequired:()=>markStageBRouteRequired,markReviewerScopeGenerationReady:()=>markReviewerScopeGenerationReady,markReviewerScopeGenerationNoChange:()=>markReviewerScopeGenerationNoChange,markReviewerScopeGenerationMergebackPending:()=>markReviewerScopeGenerationMergebackPending,isSwarmOwnedSession:()=>isSwarmOwnedSession,isStageBRouteRequired:()=>isStageBRouteRequired,isReviewerScopeGenerationCurrent:()=>isReviewerScopeGenerationCurrent,isRegisteredSwarmSubagent:()=>isRegisteredSwarmSubagent,isCouncilGateActive:()=>isCouncilGateActive,incrementGateDenialCount:()=>incrementGateDenialCount,hasModifiedFilesForTask:()=>hasModifiedFilesForTask,hasBothStageBCompletions:()=>hasBothStageBCompletions,hasActiveTurboMode:()=>hasActiveTurboMode,hasActiveLeanTurbo:()=>hasActiveLeanTurbo,hasActiveFullAuto:()=>hasActiveFullAuto,getTaskState:()=>getTaskState,getStageBRouteEvidence:()=>getStageBRouteEvidence,getSessionEnvironment:()=>getSessionEnvironment,getSessionBudgetTokens:()=>getSessionBudgetTokens,getSessionBudgetPct:()=>getSessionBudgetPct,getRunContext:()=>getRunContext,getReviewerScopeOwnershipHistory:()=>getReviewerScopeOwnershipHistory,getReviewerScopeGenerationForCoderCall:()=>getReviewerScopeGenerationForCoderCall,getResolvedAutoProceed:()=>getResolvedAutoProceed,getRehydrationCache:()=>getRehydrationCache,getPrimaryOwner:()=>getPrimaryOwner,getModifiedFilesForTask:()=>getModifiedFilesForTask,getLiveContextWindow:()=>getLiveContextWindow,getLiveContextModelIdentity:()=>getLiveContextModelIdentity,getFinalPromptPressure:()=>getFinalPromptPressure,getFinalAccountingWarningBand:()=>getFinalAccountingWarningBand,getDisplayFinalPromptPressure:()=>getDisplayFinalPromptPressure,getDisplayBudget:()=>getDisplayBudget,getAgentSession:()=>getAgentSession,getActiveWindow:()=>getActiveWindow,getActiveFullAutoSessionID:()=>getActiveFullAutoSessionID,ensureSessionEnvironment:()=>ensureSessionEnvironment,ensureAgentSession:()=>ensureAgentSession,endAgentSession:()=>endAgentSession,discardReviewerScopeGenerationForCoderCall:()=>discardReviewerScopeGenerationForCoderCall,discardReviewerScopeGenerationClaim:()=>discardReviewerScopeGenerationClaim,defaultRunContext:()=>defaultRunContext,completeModifiedFilesForTask:()=>completeModifiedFilesForTask,clearStageBRouteRequired:()=>clearStageBRouteRequired,clearStageBRouteEvidence:()=>clearStageBRouteEvidence,clearGateDenialCount:()=>clearGateDenialCount,clearFinalAccountingWarningBands:()=>clearFinalAccountingWarningBands,clearDispatchLineageForSession:()=>clearDispatchLineageForSession,clearCriticalShownIds:()=>clearCriticalShownIds,claimReviewerScopeGeneration:()=>claimReviewerScopeGeneration,canAdvanceTaskState:()=>canAdvanceTaskState,buildRehydrationCache:()=>buildRehydrationCache,buildGateDenialDirectiveKey:()=>buildGateDenialDirectiveKey,beginInvocation:()=>beginInvocation,attachReviewerScopeGenerationDispatchSnapshot:()=>attachReviewerScopeGenerationDispatchSnapshot,applyRehydrationCache:()=>applyRehydrationCache,advanceTaskStateAndPersist:()=>advanceTaskStateAndPersist,advanceTaskState:()=>advanceTaskState,addKnowledgeAckDedup:()=>addKnowledgeAckDedup,_resetCouncilDisagreementWarnings:()=>_resetCouncilDisagreementWarnings,_internals:()=>_internals99,REVIEWER_SCOPE_GENERATION_TTL_MS:()=>REVIEWER_SCOPE_GENERATION_TTL_MS,PENDING_DISPATCH_AUTHORIZATION_TTL_MS:()=>PENDING_DISPATCH_AUTHORIZATION_TTL_MS,MAX_TRACKED_TASK_FILE_ATTRIBUTIONS:()=>MAX_TRACKED_TASK_FILE_ATTRIBUTIONS,MAX_TRACKED_KNOWLEDGE_ACKS:()=>MAX_TRACKED_KNOWLEDGE_ACKS,MAX_TRACKED_GATE_DENIALS:()=>MAX_TRACKED_GATE_DENIALS,MAX_TRACKED_DISPATCH_PARENTS:()=>MAX_TRACKED_DISPATCH_PARENTS,MAX_TRACKED_CRITICAL_SHOWN:()=>MAX_TRACKED_CRITICAL_SHOWN,MAX_TRACKED_CONTEXT_WINDOWS:()=>MAX_TRACKED_CONTEXT_WINDOWS,MAX_TRACKED_BUDGET_SESSIONS:()=>MAX_TRACKED_BUDGET_SESSIONS,MAX_REVIEWER_SCOPE_OWNERSHIP_HISTORY:()=>MAX_REVIEWER_SCOPE_OWNERSHIP_HISTORY,MAX_REVIEWER_SCOPE_GENERATION_FILES:()=>MAX_REVIEWER_SCOPE_GENERATION_FILES,MAX_REVIEWER_SCOPE_GENERATIONS:()=>MAX_REVIEWER_SCOPE_GENERATIONS,AgentRunContext:()=>AgentRunContext});import{randomUUID as randomUUID14}from"node:crypto";import*as fs66 from"node:fs/promises";import*as path108 from"node:path";function compareWorkflowStatePrecedence(left,right){return compareTaskWorkflowStateRank(left,right)}function cloneReviewerScopeGeneration(generation){return{...generation,declaredFiles:[...generation.declaredFiles],modifiedFiles:[...generation.modifiedFiles],modifiedFileFingerprints:generation.modifiedFileFingerprints.map((entry)=>({...entry})),captureFailures:generation.captureFailures.map((entry)=>({...entry})),reviewerDispatchScope:generation.reviewerDispatchScope?{...generation.reviewerDispatchScope,files:[...generation.reviewerDispatchScope.files]}:void 0}}function cloneReviewerScopeOwnershipTombstone(tombstone){return{...tombstone,declaredFiles:[...tombstone.declaredFiles],modifiedFiles:[...tombstone.modifiedFiles],modifiedFileFingerprints:tombstone.modifiedFileFingerprints.map((fingerprint2)=>({...fingerprint2}))}}function createNonTransientCircuitState(agentName,invocationId){return{ownerAgent:stripKnownSwarmPrefix(agentName),ownerInvocationId:invocationId,category:null,sameCategoryCount:0,hardStop:!1,lastSignal:null}}function getRunContext(runId){if(!runId)return defaultRunContext;return _runContexts.get(runId)??defaultRunContext}function resetSwarmState(){swarmState.activeToolCalls.clear(),swarmState.toolAggregates.clear(),swarmState.activeAgent.clear(),swarmState.primaryOwnerBySession.clear(),swarmState.delegationChains.clear(),swarmState.pendingEvents=0,swarmState.lastBudgetBySession.clear(),swarmState.finalPromptPressureBySession.clear(),clearAllTurnLedgers(),swarmState.finalAccountingWarningBandsBySession.clear(),swarmState.liveContextWindows.clear(),swarmState.agentSessions.clear(),clearSnapshotSessionOwnerships(),_lastIdleSweepAtMs=0,clearTrajectoryCache(),clearTrajectoryStepCounters(),swarmState.pendingRehydrations.clear(),swarmState.opencodeClient=null,swarmState.curatorInitAgentNames=[],swarmState.curatorPhaseAgentNames=[],swarmState.curatorPostmortemAgentNames=[],swarmState.curatorConsolidationAgentNames=[],swarmState.skillImproverAgentNames=[],swarmState.specWriterAgentNames=[],swarmState.currentCriticalShownIds.clear(),swarmState.knowledgeAckDedup.clear(),swarmState.gateDenialCounts.clear(),swarmState.generatedAgentNames=[],swarmState.dispatchParentByChildSession.clear(),swarmState.pendingDispatchAuthorizations=[],clearHydrationOwnershipState(),swarmState.fullAutoEnabledInConfig=!1,swarmState.environmentProfiles.clear(),clearAllActionCircuits(),clearAllTaskModelRoutingState(),clearPendingCoderScope();for(let binding of clearScopeBindings())clearScopeBindingFromDisk({directory:binding.workspaceIdentity,binding});resetStandardWorktreeIsolationState(),resetRealtimeLearningNudgeState(),_councilDisagreementWarned.clear()}function resetSwarmStatePreservingSingletons(){let{opencodeClient:preservedOpencodeClient,fullAutoEnabledInConfig:preservedFullAutoEnabledInConfig,curatorInitAgentNames:preservedCuratorInitAgentNames,curatorPhaseAgentNames:preservedCuratorPhaseAgentNames,curatorPostmortemAgentNames:preservedCuratorPostmortemAgentNames,curatorConsolidationAgentNames:preservedCuratorConsolidationAgentNames,skillImproverAgentNames:preservedSkillImproverAgentNames,specWriterAgentNames:preservedSpecWriterAgentNames,generatedAgentNames:preservedGeneratedAgentNames}=swarmState;resetSwarmState(),swarmState.opencodeClient=preservedOpencodeClient,swarmState.fullAutoEnabledInConfig=preservedFullAutoEnabledInConfig,swarmState.curatorInitAgentNames=preservedCuratorInitAgentNames,swarmState.curatorPhaseAgentNames=preservedCuratorPhaseAgentNames,swarmState.curatorPostmortemAgentNames=preservedCuratorPostmortemAgentNames,swarmState.curatorConsolidationAgentNames=preservedCuratorConsolidationAgentNames,swarmState.skillImproverAgentNames=preservedSkillImproverAgentNames,swarmState.specWriterAgentNames=preservedSpecWriterAgentNames,swarmState.generatedAgentNames=preservedGeneratedAgentNames}function pruneExpiredPendingDispatchAuthorizations(now){let pendings=swarmState.pendingDispatchAuthorizations;if(pendings.length===0)return;let alive=pendings.filter((pending)=>now-pending.recordedAt<=PENDING_DISPATCH_AUTHORIZATION_TTL_MS);if(alive.length!==pendings.length)swarmState.pendingDispatchAuthorizations=alive}function recordPendingDispatchAuthorization(parentSessionId,agentName){if(!parentSessionId||!agentName)return;let now=Date.now();if(pruneExpiredPendingDispatchAuthorizations(now),swarmState.pendingDispatchAuthorizations.push({parentSessionId,agentName:stripKnownSwarmPrefix(agentName).toLowerCase(),recordedAt:now}),swarmState.pendingDispatchAuthorizations.length>MAX_TRACKED_DISPATCH_PARENTS)swarmState.pendingDispatchAuthorizations.splice(0,swarmState.pendingDispatchAuthorizations.length-MAX_TRACKED_DISPATCH_PARENTS)}function setDispatchParentEntry(childSessionId,parentSessionId){if(!childSessionId||!parentSessionId)return;if(swarmState.dispatchParentByChildSession.delete(childSessionId),swarmState.dispatchParentByChildSession.set(childSessionId,parentSessionId),swarmState.dispatchParentByChildSession.size>MAX_TRACKED_DISPATCH_PARENTS){let oldestKey=swarmState.dispatchParentByChildSession.keys().next().value;if(oldestKey!==void 0)swarmState.dispatchParentByChildSession.delete(oldestKey)}}function setDispatchParent(childSessionId,parentSessionId){if(!childSessionId||!parentSessionId)return;setDispatchParentEntry(childSessionId,parentSessionId);let now=Date.now();pruneExpiredPendingDispatchAuthorizations(now);let normalizedParent=parentSessionId,pendings=swarmState.pendingDispatchAuthorizations,matchIndex=pendings.findIndex((pending)=>pending.parentSessionId===normalizedParent);if(matchIndex>=0)pendings.splice(matchIndex,1)}function resolveDispatchParent(childSessionId){return swarmState.dispatchParentByChildSession.get(childSessionId)}function adoptPendingDispatchAuthorization(newSessionId,agentName){if(swarmState.dispatchParentByChildSession.has(newSessionId))return;let normalizedRole=stripKnownSwarmPrefix(agentName).toLowerCase();if(!normalizedRole)return;let now=Date.now();pruneExpiredPendingDispatchAuthorizations(now);let pendings=swarmState.pendingDispatchAuthorizations,matchIndex=pendings.findIndex((pending)=>pending.agentName===normalizedRole);if(matchIndex<0)return;let[adopted]=pendings.splice(matchIndex,1);if(!adopted)return;setDispatchParentEntry(newSessionId,adopted.parentSessionId)}function clearDispatchLineageForSession(sessionId){swarmState.dispatchParentByChildSession.delete(sessionId);for(let[child,parent]of swarmState.dispatchParentByChildSession)if(parent===sessionId)swarmState.dispatchParentByChildSession.delete(child);swarmState.pendingDispatchAuthorizations=swarmState.pendingDispatchAuthorizations.filter((pending)=>pending.parentSessionId!==sessionId)}function isBoundedGenerationValue(value,maxLength){return value.length>0&&value.length<=maxLength&&!Array.from(value).some((char)=>{let code=char.charCodeAt(0);return code<=31||code===127})}function reviewerScopeGenerationKey(taskId,coderCallID,generation){return`${taskId}\x00${coderCallID}\x00${generation}`}function reviewerScopeOwnershipKey(taskId,coderCallID,generation,sessionIncarnation){return`${taskId}\x00${coderCallID}\x00${generation}\x00${sessionIncarnation}`}function ensureReviewerScopeGenerationState(session){return session.reviewerScopeGenerations??=new Map,session.reviewerScopeGenerationCounter??=0,session.reviewerScopeIncarnation??=randomUUID14(),session.reviewerScopeLatestGenerationByTask??=new Map,session.reviewerScopeOwnershipHistory??=new Map,{generations:session.reviewerScopeGenerations,counter:session.reviewerScopeGenerationCounter,incarnation:session.reviewerScopeIncarnation,latestByTask:session.reviewerScopeLatestGenerationByTask,ownershipHistory:session.reviewerScopeOwnershipHistory}}function sweepReviewerScopeGenerations(session,now){let{generations}=ensureReviewerScopeGenerationState(session);for(let[key2,entry]of generations){if(entry.status==="claimed"||entry.status==="mergeback_pending"||entry.status==="mergeback_mismatch")continue;if(!Number.isFinite(entry.createdAt)||now<entry.createdAt||now-entry.createdAt>REVIEWER_SCOPE_GENERATION_TTL_MS)generations.delete(key2)}}function startReviewerScopeGeneration(input){let session=swarmState.agentSessions.get(input.parentSessionID);if(!session||!isBoundedGenerationValue(input.taskId,512)||!isBoundedGenerationValue(input.coderCallID,512)||!input.captureDirectory.trim()||!input.workspaceIdentity.trim())return null;let now=input.createdAt??Date.now();sweepReviewerScopeGenerations(session,now);let{generations,counter,incarnation,latestByTask}=ensureReviewerScopeGenerationState(session);for(let[key3,entry]of generations)if(entry.taskId===input.taskId&&entry.status!=="claimed")generations.delete(key3);while(generations.size>=MAX_REVIEWER_SCOPE_GENERATIONS){let oldestUnclaimed=[...generations.entries()].find(([,entry])=>entry.status!=="claimed")?.[0];if(!oldestUnclaimed)return null;generations.delete(oldestUnclaimed)}session.reviewerScopeGenerationCounter=counter>=Number.MAX_SAFE_INTEGER?1:counter+1;let generation={taskId:input.taskId,coderCallID:input.coderCallID,generation:session.reviewerScopeGenerationCounter,sessionIncarnation:incarnation,background:input.background===!0,captureDirectory:input.captureDirectory,workspaceIdentity:input.workspaceIdentity,declaredFiles:[...new Set(input.declaredFiles??[])],modifiedFiles:[],modifiedFileFingerprints:[],captureFailures:[],status:"collecting",createdAt:now};if(!latestByTask.has(generation.taskId))while(latestByTask.size>=MAX_REVIEWER_SCOPE_GENERATIONS){let oldestTask=latestByTask.keys().next().value;if(!oldestTask)break;latestByTask.delete(oldestTask)}latestByTask.delete(generation.taskId),latestByTask.set(generation.taskId,{generation:generation.generation,coderCallID:generation.coderCallID,sessionIncarnation:generation.sessionIncarnation});let key2=reviewerScopeGenerationKey(generation.taskId,generation.coderCallID,generation.generation);return generations.set(key2,generation),cloneReviewerScopeGeneration(generation)}function recordReviewerScopeGenerationFile(input){let session=swarmState.agentSessions.get(input.parentSessionID);if(!session||!isBoundedGenerationValue(input.file,4096)||!isBoundedGenerationValue(input.taskId,512)||!isBoundedGenerationValue(input.coderCallID,512))return!1;sweepReviewerScopeGenerations(session,input.now??Date.now());let{generations}=ensureReviewerScopeGenerationState(session),matches=[...generations.values()].filter((entry)=>entry.taskId===input.taskId&&entry.coderCallID===input.coderCallID&&entry.status==="collecting");if(matches.length!==1)return!1;let generation=matches[0];if(generation.modifiedFiles.includes(input.file))return!0;if(generation.modifiedFiles.length>=MAX_REVIEWER_SCOPE_GENERATION_FILES){let key2=reviewerScopeGenerationKey(generation.taskId,generation.coderCallID,generation.generation);return generations.delete(key2),!1}return generation.modifiedFiles.push(input.file),!0}function recordReviewerScopeGenerationFileFingerprint(input){let session=swarmState.agentSessions.get(input.parentSessionID);if(!session)return!1;let{generations}=ensureReviewerScopeGenerationState(session),matches=[...generations.values()].filter((entry)=>entry.taskId===input.taskId&&entry.coderCallID===input.coderCallID&&entry.status==="collecting");if(matches.length!==1)return!1;let generation=matches[0];if(!generation.modifiedFiles.includes(input.fingerprint.file))return!1;generation.captureFailures=generation.captureFailures.filter((entry)=>entry.file!==input.fingerprint.file);let existingIndex=generation.modifiedFileFingerprints.findIndex((entry)=>entry.file===input.fingerprint.file);if(existingIndex>=0)return generation.modifiedFileFingerprints[existingIndex]={...input.fingerprint},!0;if(generation.modifiedFileFingerprints.length>=MAX_REVIEWER_SCOPE_GENERATION_FILES)return!1;return generation.modifiedFileFingerprints.push({...input.fingerprint}),!0}function recordReviewerScopeGenerationCaptureFailure(input){let session=swarmState.agentSessions.get(input.parentSessionID);if(!session||!isBoundedGenerationValue(input.file,4096))return!1;let{generations}=ensureReviewerScopeGenerationState(session),matches=[...generations.values()].filter((entry)=>entry.taskId===input.taskId&&entry.coderCallID===input.coderCallID&&entry.status==="collecting");if(matches.length!==1)return!1;let generation=matches[0],now=input.at??Date.now();generation.modifiedFileFingerprints=generation.modifiedFileFingerprints.filter((entry)=>entry.file!==input.file);let existingIndex=generation.captureFailures.findIndex((entry)=>entry.file===input.file);if(existingIndex>=0){let existing=generation.captureFailures[existingIndex];return generation.captureFailures[existingIndex]={...existing,code:input.code,retryable:input.retryable,attempts:existing.attempts+1,at:now},!0}if(generation.captureFailures.length>=MAX_REVIEWER_SCOPE_GENERATION_FILES)generation.captureFailures.shift();return generation.captureFailures.push({file:input.file,code:input.code,retryable:input.retryable,attempts:1,at:now}),!0}function markReviewerScopeGenerationReady(input){let session=swarmState.agentSessions.get(input.parentSessionID);if(!session)return!1;let now=input.readyAt??Date.now();sweepReviewerScopeGenerations(session,now);let{generations}=ensureReviewerScopeGenerationState(session),matches=[...generations.values()].filter((entry)=>entry.taskId===input.taskId&&entry.coderCallID===input.coderCallID&&(entry.status==="collecting"||entry.status==="ready"));if(matches.length!==1)return!1;let generation=matches[0];if(generation.status==="ready")return!0;if(input.primaryWorkspaceIdentity&&generation.workspaceIdentity!==input.primaryWorkspaceIdentity)return!1;if(!(generation.modifiedFiles.length===generation.modifiedFileFingerprints.length&&generation.modifiedFiles.every((file3)=>generation.modifiedFileFingerprints.some((entry)=>entry.file===file3))))return!1;return generation.status="ready",generation.readyAt=now,!0}function markReviewerScopeGenerationNoChange(input){let session=swarmState.agentSessions.get(input.parentSessionID);if(!session)return!1;let now=input.at??Date.now();sweepReviewerScopeGenerations(session,now);let{generations}=ensureReviewerScopeGenerationState(session),matches=[...generations.values()].filter((entry)=>entry.taskId===input.taskId&&entry.coderCallID===input.coderCallID&&entry.status==="collecting");if(matches.length!==1)return!1;let generation=matches[0];if(generation.modifiedFiles.length!==0)return!1;return generation.status="no_change",generation.readyAt=now,!0}function markReviewerScopeGenerationMergebackPending(input){let session=swarmState.agentSessions.get(input.parentSessionID);if(!session)return!1;let{generations}=ensureReviewerScopeGenerationState(session),matches=[...generations.values()].filter((entry)=>(input.taskId===void 0||entry.taskId===input.taskId)&&entry.coderCallID===input.coderCallID&&(entry.status==="collecting"||entry.status==="ready"));if(matches.length!==1)return!1;if(matches[0].status==="mergeback_pending")return!0;return matches[0].status="mergeback_pending",!0}function settleReviewerScopeMergeback(input){let session=swarmState.agentSessions.get(input.parentSessionID);if(!session)return!1;let{generations}=ensureReviewerScopeGenerationState(session),matches=[...generations.values()].filter((entry)=>(input.taskId===void 0||entry.taskId===input.taskId)&&entry.coderCallID===input.coderCallID&&entry.status==="mergeback_pending");if(matches.length!==1)return!1;let generation=matches[0],now=input.outcome.at??Date.now();if(input.outcome.verified){if(generation.status="ready",generation.readyAt===void 0)generation.readyAt=now;return generation.mergeback={verifiedAt:now,primaryWorkspaceIdentity:input.outcome.primaryWorkspaceIdentity},generation.captureDirectory=input.outcome.primaryDirectory,generation.workspaceIdentity=input.outcome.primaryWorkspaceIdentity,!0}return generation.status="mergeback_mismatch",generation.mergeback={failedAt:now,reason:input.outcome.reason},!0}function getReviewerScopeGenerationForCoderCall(input){let session=swarmState.agentSessions.get(input.parentSessionID);if(!session)return null;sweepReviewerScopeGenerations(session,input.now??Date.now());let{generations}=ensureReviewerScopeGenerationState(session),matches=[...generations.values()].filter((entry)=>entry.coderCallID===input.coderCallID&&(input.taskId===void 0||entry.taskId===input.taskId));return matches.length===1?cloneReviewerScopeGeneration(matches[0]):null}function peekReadyReviewerScopeGeneration(input){let session=swarmState.agentSessions.get(input.parentSessionID);if(!session)return null;sweepReviewerScopeGenerations(session,input.now??Date.now());let{generations}=ensureReviewerScopeGenerationState(session),matches=[...generations.values()].filter((entry)=>entry.taskId===input.taskId&&entry.status==="ready");return matches.length===1?cloneReviewerScopeGeneration(matches[0]):null}function peekReviewerScopeGenerationByStatus(input){let session=swarmState.agentSessions.get(input.parentSessionID);if(!session)return null;sweepReviewerScopeGenerations(session,input.now??Date.now());let{generations}=ensureReviewerScopeGenerationState(session),matches=[...generations.values()].filter((entry)=>entry.taskId===input.taskId&&entry.status===input.status);return matches.length===1?cloneReviewerScopeGeneration(matches[0]):null}function claimReviewerScopeGeneration(input){let session=swarmState.agentSessions.get(input.parentSessionID);if(!session||!isBoundedGenerationValue(input.taskId,512)||!isBoundedGenerationValue(input.reviewerCallID,512))return null;sweepReviewerScopeGenerations(session,input.now??Date.now());let{generations}=ensureReviewerScopeGenerationState(session),matches=[...generations.values()].filter((entry)=>entry.taskId===input.taskId&&entry.status==="ready");if(matches.length!==1)return null;return matches[0].status="claimed",matches[0].reviewerCallID=input.reviewerCallID,cloneReviewerScopeGeneration(matches[0])}function attachReviewerScopeGenerationDispatchSnapshot(input){let session=swarmState.agentSessions.get(input.parentSessionID);if(!session)return!1;let{generations}=ensureReviewerScopeGenerationState(session),matches=[...generations.values()].filter((entry)=>entry.taskId===input.taskId&&entry.reviewerCallID===input.reviewerCallID&&entry.status==="claimed"&&entry.coderCallID===input.snapshot.coderCallID&&entry.generation===input.snapshot.generation&&entry.sessionIncarnation===input.snapshot.sessionIncarnation);if(matches.length!==1)return!1;return matches[0].reviewerDispatchScope={...input.snapshot,files:[...input.snapshot.files]},!0}function takeReviewerScopeGeneration(input){let session=swarmState.agentSessions.get(input.parentSessionID);if(!session)return null;sweepReviewerScopeGenerations(session,input.now??Date.now());let{generations}=ensureReviewerScopeGenerationState(session),matches=[...generations.entries()].filter(([,entry])=>entry.taskId===input.taskId&&entry.reviewerCallID===input.reviewerCallID&&entry.status==="claimed");if(matches.length!==1)return null;let[key2,generation]=matches[0];if(generation.background===!0&&generation.readyAt!==void 0&&Number.isFinite(generation.createdAt)&&Number.isFinite(generation.readyAt)){let{ownershipHistory}=ensureReviewerScopeGenerationState(session);while(ownershipHistory.size>=MAX_REVIEWER_SCOPE_OWNERSHIP_HISTORY){let oldestKey=ownershipHistory.keys().next().value;if(!oldestKey)break;ownershipHistory.delete(oldestKey)}let tombstone={parentSessionID:input.parentSessionID,taskId:generation.taskId,coderCallID:generation.coderCallID,generation:generation.generation,sessionIncarnation:generation.sessionIncarnation,background:!0,captureDirectory:generation.captureDirectory,workspaceIdentity:generation.workspaceIdentity,declaredFiles:[...generation.declaredFiles],modifiedFiles:[...generation.modifiedFiles],modifiedFileFingerprints:generation.modifiedFileFingerprints.map((fingerprint2)=>({...fingerprint2})),createdAt:generation.createdAt,readyAt:generation.readyAt??input.now??Date.now(),consumedAt:input.now??Date.now()};ownershipHistory.set(reviewerScopeOwnershipKey(tombstone.taskId,tombstone.coderCallID,tombstone.generation,tombstone.sessionIncarnation),tombstone)}return generations.delete(key2),cloneReviewerScopeGeneration(generation)}function getReviewerScopeOwnershipHistory(input){let session=swarmState.agentSessions.get(input.parentSessionID);if(!session)return[];let{ownershipHistory}=ensureReviewerScopeGenerationState(session);return[...ownershipHistory.values()].map(cloneReviewerScopeOwnershipTombstone)}function peekReviewerScopeGenerationClaim(input){let session=swarmState.agentSessions.get(input.parentSessionID);if(!session)return null;sweepReviewerScopeGenerations(session,input.now??Date.now());let{generations}=ensureReviewerScopeGenerationState(session),matches=[...generations.values()].filter((entry)=>entry.taskId===input.taskId&&entry.reviewerCallID===input.reviewerCallID&&entry.status==="claimed");return matches.length===1?cloneReviewerScopeGeneration(matches[0]):null}function discardReviewerScopeGenerationClaim(input){let session=swarmState.agentSessions.get(input.parentSessionID);if(!session)return!1;let{generations}=ensureReviewerScopeGenerationState(session),matches=[...generations.entries()].filter(([,entry])=>(input.taskId===void 0||entry.taskId===input.taskId)&&entry.reviewerCallID===input.reviewerCallID&&entry.status==="claimed");if(matches.length!==1)return!1;return generations.delete(matches[0][0]),!0}function reviewerScopeGenerationHasDeclaredOverlap(input){let session=swarmState.agentSessions.get(input.parentSessionID);if(!session)return!1;let{generations}=ensureReviewerScopeGenerationState(session),declared=new Set(input.declaredFiles);return[...generations.values()].some((entry)=>entry.status==="collecting"&&(entry.taskId!==input.taskId||entry.coderCallID!==input.coderCallID)&&entry.declaredFiles.some((file3)=>declared.has(file3)))}function discardReviewerScopeGenerationForCoderCall(input){let session=swarmState.agentSessions.get(input.parentSessionID);if(!session)return!1;let{generations}=ensureReviewerScopeGenerationState(session),matches=[...generations.entries()].filter(([,entry])=>(input.taskId===void 0||entry.taskId===input.taskId)&&entry.coderCallID===input.coderCallID&&entry.status!=="claimed");if(matches.length!==1)return!1;return generations.delete(matches[0][0]),!0}function isReviewerScopeGenerationCurrent(input){let session=swarmState.agentSessions.get(input.parentSessionID);if(!session)return!1;let{incarnation,latestByTask}=ensureReviewerScopeGenerationState(session),latest=latestByTask.get(input.taskId);return incarnation===input.sessionIncarnation&&latest?.generation===input.generation&&latest.coderCallID===input.coderCallID&&latest.sessionIncarnation===input.sessionIncarnation}function sweepStaleSessions(staleDurationMs=STALE_SESSION_TTL_MS,now=Date.now(),directory){let staleIds=[];for(let[id,session]of swarmState.agentSessions)if(now-session.lastToolCallTime>staleDurationMs){if(directory&&isSnapshotSessionOwnedLocally(id)&&!isSnapshotSessionAuthoritativelyStale(directory,id,staleDurationMs,now))continue;staleIds.push(id)}for(let id of staleIds){if(directory&&isSnapshotSessionOwnedLocally(id)){try{deleteSnapshotSessionRows(directory,id,"stale")}catch(error93){warn("[state] durable stale-session teardown failed:",error93 instanceof Error?error93.message:String(error93))}try{clearOverrideForSession(directory,id)}catch(error93){warn("[state] durable stale-session override teardown failed:",error93 instanceof Error?error93.message:String(error93))}}releaseSnapshotSessionOwnership(id),swarmState.agentSessions.delete(id),swarmState.delegationChains.delete(id),clearDispatchLineageForSession(id),swarmState.activeAgent.delete(id),swarmState.primaryOwnerBySession.delete(id)}return staleIds}function maybeSweepStaleSessions(staleDurationMs=STALE_SESSION_TTL_MS,now=Date.now(),directory){if(now-_lastIdleSweepAtMs<IDLE_SWEEP_COOLDOWN_MS)return[];return _lastIdleSweepAtMs=now,sweepStaleSessions(staleDurationMs,now,directory)}function resolveInitialTurboMode(directory){if(!directory)return!1;try{return _internals99.loadPluginConfigWithMeta(directory).config.turbo_mode===!0&&!(epicSentinelExists(directory)&&isEpicOpenForProject(directory))}catch{return!1}}function startAgentSession(sessionId,agentName,staleDurationMs=STALE_SESSION_TTL_MS,directory){let now=Date.now();if(claimSnapshotSessionOwnership(sessionId,!0),typeof directory==="string"&&directory.trim()==="")directory=void 0;let owningProjectKey=directory?hydrationProjectKey(directory):void 0,hydrationAuthority=owningProjectKey?captureCurrentHydrationAuthority(owningProjectKey):void 0,hydrationStamp=owningProjectKey?nextSessionHydrationStamp(owningProjectKey):void 0,hydrationAuthorityEpoch2=hydrationAuthority?.authorityEpoch;sweepStaleSessions(staleDurationMs,now,directory);let initialTurboMode=resolveInitialTurboMode(directory),sessionState={agentName,lastToolCallTime:now,lastAgentEventTime:now,delegationActive:!1,activeInvocationId:0,lastInvocationIdByAgent:{},windows:{},nonTransientCircuit:createNonTransientCircuitState(agentName,0),pendingToolExecutions:new Map,lastCompactionHint:0,architectWriteCount:0,lastCoderDelegationTaskId:null,currentTaskId:null,gateLog:new Map,reviewerCallCount:new Map,lastGateFailure:null,partialGateWarningsIssuedForTask:new Set,completionGateWarnedForTask:new Set,selfFixAttempted:!1,selfCodingWarnedAtCount:0,catastrophicPhaseWarnings:new Set,lastPhaseCompleteTimestamp:0,lastPhaseCompletePhase:0,phaseAgentsDispatched:new Set,lastCompletedPhaseAgentsDispatched:new Set,qaSkipCount:0,qaSkipTaskIds:[],taskWorkflowStates:new Map,taskWorkflowCache:new Map,stageBCompletion:new Map,stageBRouteEvidence:new Map,stageBRouteRequiredTasks:new Set,taskCouncilApproved:new Map,taskCouncilWorkflowGeneration:new Map,pendingCouncilRequirements:new Map,lastGateOutcome:null,declaredCoderScope:null,lastScopeViolation:null,scopeViolationDetected:!1,modifiedFilesByTask:new Map,modifiedFilesThisCoderTask:[],reviewerScopeGenerations:new Map,reviewerScopeGenerationCounter:0,reviewerScopeIncarnation:randomUUID14(),reviewerScopeLatestGenerationByTask:new Map,reviewerScopeOwnershipHistory:new Map,turboMode:initialTurboMode,turboStrategy:void 0,leanTurboActive:!1,leanTurboCurrentPhase:void 0,maxConcurrencyOverride:void 0,qaGateSessionOverrides:{},fullAutoMode:!1,fullAutoInteractionCount:0,fullAutoDeadlockCount:0,fullAutoLastQuestionHash:null,model_fallback_index:0,modelFallbackExhausted:!1,coderRevisions:0,revisionLimitHit:!1,loopDetectionWindow:[],pendingAdvisoryMessages:[],sessionRehydratedAt:0,owningProjectKey,hydrationStamp,hydrationAuthorityEpoch:hydrationAuthorityEpoch2,prmPatternCounts:new Map,prmEscalationLevel:0,prmLastPatternDetected:null,prmTrajectoryStep:0,prmHardStopPending:!1,prmHardStopInjectPending:!1,prmInjectedAdvisoryKeys:new Set,prmStruckEpisodes:new Map,prmLadderCounts:new Map,prmEpisodes:new Map,prmEpisodeGeneration:0,executionEpisodeArmed:!1,prSubscriptions:new Map};if(swarmState.agentSessions.set(sessionId,sessionState),directory){try{recordSessionStart(directory,now)}catch{}queueMicrotask(()=>{maybeSuggestWorktreeLink(directory,sessionId)})}if(telemetry.sessionStarted(sessionId,agentName),swarmState.activeAgent.set(sessionId,agentName),_internals99.applyRehydrationCache(sessionState),directory){let liveSession=sessionState,shouldCommitRehydration=()=>hydrationAuthority!==void 0&&isHydrationAuthorityCurrent(hydrationAuthority)&&swarmState.agentSessions.get(sessionId)===liveSession,rehydrationPromise;rehydrationPromise=_internals99.rehydrateSessionFromDisk(directory,sessionState,shouldCommitRehydration).then(async()=>{if(!shouldCommitRehydration())return;try{let subscriptions=await _internals99.rehydratePrSubscriptions(sessionId,directory);if(!shouldCommitRehydration())return;sessionState.prSubscriptions=subscriptions}catch(err){warn("[state] PR subscription rehydration failed, starting with empty subscriptions:",err instanceof Error?err.message:String(err))}}).catch((err)=>{warn("[state] Rehydration failed:",err instanceof Error?err.message:String(err))}).finally(()=>{swarmState.pendingRehydrations.delete(rehydrationPromise)}),swarmState.pendingRehydrations.add(rehydrationPromise)}}function endAgentSession(sessionId,directory){if(directory){try{deleteSnapshotSessionRows(directory,sessionId)}catch(error93){warn("[state] durable snapshot session teardown failed:",error93 instanceof Error?error93.message:String(error93))}try{clearOverrideForSession(directory,sessionId)}catch(error93){warn("[state] durable session override teardown failed:",error93 instanceof Error?error93.message:String(error93))}}releaseSnapshotSessionOwnership(sessionId);let removedBindings=clearScopeBindings((binding)=>binding.ownerSessionId===sessionId||binding.parentOwnerSessionId===sessionId);for(let binding of removedBindings)clearScopeBindingFromDisk({directory:binding.workspaceIdentity,binding});swarmState.agentSessions.delete(sessionId),swarmState.activeAgent.delete(sessionId),swarmState.delegationChains.delete(sessionId),swarmState.primaryOwnerBySession.delete(sessionId),clearDispatchLineageForSession(sessionId),clearRealtimeLearningNudgeSession(sessionId),resetSessionQueue(sessionId),resetPrmPatternSupport(sessionId)}function getAgentSession(sessionId){return swarmState.agentSessions.get(sessionId)}function ensureAgentSession(sessionId,agentName,directory){let now=Date.now();claimSnapshotSessionOwnership(sessionId,!0);let session=swarmState.agentSessions.get(sessionId);if(session){if(agentName&&agentName!==session.agentName){let oldName=session.agentName;if(session.agentName=agentName,telemetry.agentActivated(sessionId,agentName,oldName),session.delegationActive=!1,session.lastAgentEventTime=now,session.nonTransientCircuit=createNonTransientCircuitState(agentName,0),!session.windows)session.activeInvocationId=0,session.lastInvocationIdByAgent={},session.windows={}}if(!session.windows)session.activeInvocationId=0,session.lastInvocationIdByAgent={},session.windows={};if(session.nonTransientCircuit===void 0)session.nonTransientCircuit=createNonTransientCircuitState(session.agentName,session.activeInvocationId??0);if(session.pendingToolExecutions===void 0)session.pendingToolExecutions=new Map;if(session.lastCompactionHint===void 0)session.lastCompactionHint=0;if(session.architectWriteCount===void 0)session.architectWriteCount=0;if(session.lastCoderDelegationTaskId===void 0)session.lastCoderDelegationTaskId=null;if(session.currentTaskId===void 0)session.currentTaskId=null;if(!session.gateLog)session.gateLog=new Map;if(!session.reviewerCallCount)session.reviewerCallCount=new Map;if(session.lastGateFailure===void 0)session.lastGateFailure=null;if(!session.partialGateWarningsIssuedForTask)session.partialGateWarningsIssuedForTask=new Set;if(!session.completionGateWarnedForTask)session.completionGateWarnedForTask=new Set;if(session.selfFixAttempted===void 0)session.selfFixAttempted=!1;if(session.selfCodingWarnedAtCount===void 0)session.selfCodingWarnedAtCount=0;if(!session.catastrophicPhaseWarnings)session.catastrophicPhaseWarnings=new Set;if(session.lastPhaseCompleteTimestamp===void 0)session.lastPhaseCompleteTimestamp=0;if(session.lastPhaseCompletePhase===void 0)session.lastPhaseCompletePhase=0;if(!session.phaseAgentsDispatched)session.phaseAgentsDispatched=new Set;if(!session.lastCompletedPhaseAgentsDispatched)session.lastCompletedPhaseAgentsDispatched=new Set;if(session.qaSkipCount===void 0)session.qaSkipCount=0;if(!session.qaSkipTaskIds)session.qaSkipTaskIds=[];if(!session.taskWorkflowStates)session.taskWorkflowStates=new Map;if(!session.taskWorkflowCache)session.taskWorkflowCache=new Map;if(!session.stageBCompletion)session.stageBCompletion=new Map;if(!session.stageBRouteEvidence)session.stageBRouteEvidence=new Map;if(!session.stageBRouteRequiredTasks)session.stageBRouteRequiredTasks=new Set;if(!session.taskCouncilApproved)session.taskCouncilApproved=new Map;if(!session.pendingCouncilRequirements)session.pendingCouncilRequirements=new Map;if(session.lastGateOutcome===void 0)session.lastGateOutcome=null;if(session.declaredCoderScope===void 0)session.declaredCoderScope=null;if(session.lastScopeViolation===void 0)session.lastScopeViolation=null;if(!(session.modifiedFilesByTask instanceof Map)){if(session.modifiedFilesByTask=new Map,isValidTaskId2(session.currentTaskId)&&Array.isArray(session.modifiedFilesThisCoderTask)&&session.modifiedFilesThisCoderTask.length>0)session.modifiedFilesByTask.set(session.currentTaskId,[...new Set(session.modifiedFilesThisCoderTask)])}if(projectModifiedFilesForActiveTask(session),!session.reviewerScopeGenerations)session.reviewerScopeGenerations=new Map;if(session.reviewerScopeGenerationCounter===void 0)session.reviewerScopeGenerationCounter=0;if(!session.reviewerScopeIncarnation)session.reviewerScopeIncarnation=randomUUID14();if(!session.reviewerScopeLatestGenerationByTask)session.reviewerScopeLatestGenerationByTask=new Map;if(!session.reviewerScopeOwnershipHistory)session.reviewerScopeOwnershipHistory=new Map;if(session.scopeViolationDetected===void 0)session.scopeViolationDetected=!1;if(session.turboMode===void 0)session.turboMode=!1;if(session.turboStrategy===void 0)session.turboStrategy=void 0;if(session.leanTurboActive===void 0)session.leanTurboActive=!1;if(session.leanTurboCurrentPhase===void 0)session.leanTurboCurrentPhase=void 0;if(session.qaGateSessionOverrides===void 0)session.qaGateSessionOverrides={};if(session.model_fallback_index===void 0)session.model_fallback_index=0;if(session.modelFallbackExhausted===void 0)session.modelFallbackExhausted=!1;if(session.loopDetectionWindow===void 0)session.loopDetectionWindow=[];if(session.pendingAdvisoryMessages===void 0)session.pendingAdvisoryMessages=[];if(session.coderRevisions===void 0)session.coderRevisions=0;if(session.revisionLimitHit===void 0)session.revisionLimitHit=!1;if(session.sessionRehydratedAt===void 0)session.sessionRehydratedAt=0;if(session.prmPatternCounts===void 0)session.prmPatternCounts=new Map;if(session.prmEscalationLevel===void 0)session.prmEscalationLevel=0;if(session.prmLastPatternDetected===void 0)session.prmLastPatternDetected=null;if(session.prmTrajectoryStep===void 0)session.prmTrajectoryStep=0;if(session.prmHardStopPending===void 0)session.prmHardStopPending=!1;if(session.prmHardStopInjectPending===void 0)session.prmHardStopInjectPending=!1;if(!session.prmInjectedAdvisoryKeys)session.prmInjectedAdvisoryKeys=new Set;if(!session.prmStruckEpisodes)session.prmStruckEpisodes=new Map;if(!session.prmLadderCounts)session.prmLadderCounts=new Map;if(session.executionEpisodeArmed===void 0)session.executionEpisodeArmed=!1;if(!session.prSubscriptions)session.prSubscriptions=new Map;return session.lastToolCallTime=now,maybeSweepStaleSessions(STALE_SESSION_TTL_MS,now,directory),session}if(_internals99.startAgentSession(sessionId,agentName??"unknown",7200000,directory),session=swarmState.agentSessions.get(sessionId),!session)throw Error(`Failed to create guardrail session for ${sessionId}`);if(agentName&&agentName!=="unknown")adoptPendingDispatchAuthorization(sessionId,agentName);return session}function recordPrimaryOwner(sessionId,agentName){if(!sessionId||!agentName)return;if(isRegisteredSwarmSubagent(agentName))return;if(NON_OWNABLE_AGENT_NAMES.has(agentName.toLowerCase()))return;swarmState.primaryOwnerBySession.delete(sessionId);while(swarmState.primaryOwnerBySession.size>=MAX_TRACKED_PRIMARY_OWNERS){let oldest=swarmState.primaryOwnerBySession.keys().next().value;if(typeof oldest!=="string")break;swarmState.primaryOwnerBySession.delete(oldest)}swarmState.primaryOwnerBySession.set(sessionId,agentName)}function getPrimaryOwner(sessionId){return swarmState.primaryOwnerBySession.get(sessionId)}function isRegisteredSwarmSubagent(agentName){let stripped=stripKnownSwarmPrefix(agentName);return SWARM_SUBAGENT_NAME_SET.has(stripped)}function isSwarmOwnedSession(sessionID){let resolved=swarmState.activeAgent.get(sessionID)??swarmState.agentSessions.get(sessionID)?.agentName;if(typeof resolved!=="string"||!resolved)return!1;return SWARM_AGENT_NAME_SET.has(stripKnownSwarmPrefix(resolved))}function recordSessionWorkspaceRoot(sessionId,laneRoot){let trimmed=laneRoot.trim();if(!trimmed)return;let session=swarmState.agentSessions.get(sessionId);if(!session)return;session.workspaceDirectory=trimmed}function resolveSessionWorkspaceDirectory(sessionId,fallbackDirectory){let recorded=swarmState.agentSessions.get(sessionId)?.workspaceDirectory;if(recorded?.trim())return recorded;return fallbackDirectory}function updateAgentEventTime(sessionId){let session=swarmState.agentSessions.get(sessionId);if(session)session.lastAgentEventTime=Date.now()}function beginInvocation(sessionId,agentName){let session=swarmState.agentSessions.get(sessionId);if(!session)throw Error(`Cannot begin invocation: session ${sessionId} does not exist`);let stripped=stripKnownSwarmPrefix(agentName),lastId=session.lastInvocationIdByAgent[stripped]||0;if(lastId>0)clearInvocationActionCircuits(sessionId,lastId),clearPendingTaskModelRoutesForSession(sessionId,"invocation");let newId=lastId+1;if(session.lastInvocationIdByAgent[stripped]=newId,session.activeInvocationId=newId,session.nonTransientCircuit=createNonTransientCircuitState(stripped,newId),stripped===ORCHESTRATOR_NAME)return null;let now=Date.now(),window2={id:newId,agentName:stripped,startedAtMs:now,toolCalls:0,consecutiveErrors:0,hardLimitHit:!1,lastSuccessTimeMs:now,recentToolCalls:[],warningIssued:!1,warningReason:"",transientRetryCount:0},key2=`${stripped}:${newId}`;return session.windows[key2]=window2,pruneOldWindows(sessionId,86400000,50),window2}function getActiveWindow(sessionId){let session=swarmState.agentSessions.get(sessionId);if(!session||!session.windows)return;let key2=`${stripKnownSwarmPrefix(session.agentName)}:${session.activeInvocationId}`;return session.windows[key2]}function pruneOldWindows(sessionId,maxAgeMs=86400000,maxWindows=50){let session=swarmState.agentSessions.get(sessionId);if(!session||!session.windows)return;let now=Date.now(),toKeep=Object.entries(session.windows).filter(([_,window2])=>now-window2.startedAtMs<maxAgeMs).sort((a,b)=>b[1].startedAtMs-a[1].startedAtMs).slice(0,maxWindows);session.windows=Object.fromEntries(toKeep)}function recordPhaseAgentDispatch(sessionId,agentName){let session=swarmState.agentSessions.get(sessionId);if(!session)return;if(!session.phaseAgentsDispatched)session.phaseAgentsDispatched=new Set;let normalizedName=stripKnownSwarmPrefix(agentName);session.phaseAgentsDispatched.add(normalizedName)}function ensureModifiedFilesByTask(session){if(!(session.modifiedFilesByTask instanceof Map))session.modifiedFilesByTask=new Map;return session.modifiedFilesByTask}function projectModifiedFilesForActiveTask(session){let taskId=session.currentTaskId;session.modifiedFilesThisCoderTask=isValidTaskId2(taskId)&&session.modifiedFilesByTask instanceof Map?[...session.modifiedFilesByTask.get(taskId)??[]]:[]}function ensureModifiedFileTaskSlot(session,taskId){if(!isValidTaskId2(taskId))return!1;let entries=ensureModifiedFilesByTask(session);if(entries.has(taskId))return!0;while(entries.size>=MAX_TRACKED_TASK_FILE_ATTRIBUTIONS){let reclaimable=[...entries.keys()].find((candidate)=>candidate!==taskId&&session.taskWorkflowStates?.get(candidate)==="complete");if(!reclaimable)return!1;entries.delete(reclaimable)}return entries.set(taskId,[]),!0}function recordModifiedFilesForTask(session,taskId,files,workspaceDirectory){if(!ensureModifiedFileTaskSlot(session,taskId))return!1;let normalized=[...new Set(files.map((file3)=>canonicalAttributionPath(file3,workspaceDirectory)).filter((file3)=>file3!==null))];if(session.modifiedFilesByTask.set(taskId,normalized),session.currentTaskId===taskId)projectModifiedFilesForActiveTask(session);return!0}function recordModifiedFileForTask(session,taskId,file3,workspaceDirectory){if(typeof file3!=="string"||file3.trim().length===0)return!1;if(!ensureModifiedFileTaskSlot(session,taskId))return!1;let canonical=canonicalAttributionPath(file3,workspaceDirectory);if(canonical===null)return!0;let entries=ensureModifiedFilesByTask(session),current=entries.get(taskId)??[];if(current.includes(canonical))return!0;if(entries.set(taskId,[...current,canonical]),session.currentTaskId===taskId)projectModifiedFilesForActiveTask(session);return!0}function hasModifiedFilesForTask(session,taskId){if(!session)return!1;if(!isValidTaskId2(taskId))return!1;if(!(session.modifiedFilesByTask instanceof Map))return!1;return session.modifiedFilesByTask.has(taskId)}function getModifiedFilesForTask(session,taskId){if(!isValidTaskId2(taskId))return[];return[...ensureModifiedFilesByTask(session).get(taskId)??[]]}function resetModifiedFilesForTask(session,taskId,options){if(!isValidTaskId2(taskId))return!1;let entries=ensureModifiedFilesByTask(session);if(options?.remove)entries.delete(taskId);else{if(!ensureModifiedFileTaskSlot(session,taskId))return!1;entries.set(taskId,[])}if(session.currentTaskId===taskId)projectModifiedFilesForActiveTask(session);return!0}function completeModifiedFilesForTask(session,taskId){let projectRoot=session.owningProjectKey;if(projectRoot===void 0||!isEpicOpenForProject(projectRoot))resetModifiedFilesForTask(session,taskId,{remove:!0})}function isValidTaskId2(taskId){if(taskId===null||taskId===void 0)return!1;if(typeof taskId!=="string")return!1;return taskId.trim().length>0}function ensureTaskWorkflowCache(session){if(!session.taskWorkflowCache)session.taskWorkflowCache=new Map;return session.taskWorkflowCache}function updateTaskWorkflowCache(session,taskId,overrides2){let cache2=ensureTaskWorkflowCache(session),existing=cache2.get(taskId);cache2.set(taskId,{generation:overrides2.generation??existing?.generation??0,retryCount:overrides2.retryCount??existing?.retryCount??0,lastOutcome:overrides2.lastOutcome??existing?.lastOutcome??"none",lastTransitionId:overrides2.lastTransitionId??existing?.lastTransitionId??null,updatedAt:overrides2.updatedAt??existing?.updatedAt??""})}function advanceTaskState(session,taskId,newState2,options,councilConfig){if(!isValidTaskId2(taskId))return;if(!session||!(session.taskWorkflowStates instanceof Map))throw Error("INVALID_SESSION: session.taskWorkflowStates must be a Map instance");let current=session.taskWorkflowStates.get(taskId)??"idle",currentIndex=LINEAR_STATE_ORDER.indexOf(current),newIndex=LINEAR_STATE_ORDER.indexOf(newState2);if(currentIndex===-1||newIndex===-1||newIndex<=currentIndex)throw Error(`INVALID_TASK_STATE_TRANSITION: ${taskId} ${current} → ${newState2}`);if(newState2==="complete"&¤t!=="tests_run"){let councilEntry=session.taskCouncilApproved?.get(taskId),effectiveMinimum=councilConfig?.requireAllMembers?5:councilConfig?.minimumMembers??3,councilApproved=councilEntry?.verdict==="APPROVE"&&(councilEntry.quorumSize??0)>=effectiveMinimum,pastPreCheck=currentIndex>=LINEAR_STATE_ORDER.indexOf("pre_check_passed");if(!councilApproved||!pastPreCheck)throw Error(`INVALID_TASK_STATE_TRANSITION: ${taskId} cannot reach complete from ${current} — must pass through tests_run first (or have council APPROVE after pre_check)`)}if(session.taskWorkflowStates.set(taskId,newState2),updateTaskWorkflowCache(session,taskId,{updatedAt:new Date().toISOString()}),newState2==="complete")session.stageBCompletion?.delete(taskId),clearStageBRouteEvidence(session,taskId),clearStageBRouteRequired(session,taskId),completeModifiedFilesForTask(session,taskId);if(options?.emitTelemetry!==!1)telemetry.taskStateChanged(options?.telemetrySessionId??session.agentName,taskId,newState2,current)}function canAdvanceTaskState(session,taskId,newState2,councilConfig){if(!isValidTaskId2(taskId))return!1;if(!session||!(session.taskWorkflowStates instanceof Map))return!1;let current=session.taskWorkflowStates.get(taskId)??"idle",currentIndex=LINEAR_STATE_ORDER.indexOf(current),newIndex=LINEAR_STATE_ORDER.indexOf(newState2);if(currentIndex===-1||newIndex===-1||newIndex<=currentIndex)return!1;if(newState2==="complete"&¤t!=="tests_run"){let councilEntry=session.taskCouncilApproved?.get(taskId),effectiveMinimum=councilConfig?.requireAllMembers?5:councilConfig?.minimumMembers??3,councilApproved=councilEntry?.verdict==="APPROVE"&&(councilEntry.quorumSize??0)>=effectiveMinimum,pastPreCheck=currentIndex>=LINEAR_STATE_ORDER.indexOf("pre_check_passed");if(!councilApproved||!pastPreCheck)return!1}return!0}async function advanceTaskStateAndPersist(session,taskId,newState2,_directory2,options,councilConfig){if(newState2==="coder_delegated"||newState2==="complete")throw Error(`TASK_WORKFLOW_CENTRAL_TRANSACTION_REQUIRED: ${taskId} → ${newState2} must use exact-task durable transition APIs`);advanceTaskState(session,taskId,newState2,options,councilConfig)}function getTaskState(session,taskId){if(!isValidTaskId2(taskId))return"idle";if(!session.taskWorkflowStates)session.taskWorkflowStates=new Map;return session.taskWorkflowStates.get(taskId)??"idle"}function recordStageBCompletion(session,taskId,agent){if(!isValidTaskId2(taskId))return;if(!session.stageBCompletion)session.stageBCompletion=new Map;let existing=session.stageBCompletion.get(taskId);if(existing)existing.add(agent);else session.stageBCompletion.set(taskId,new Set([agent]))}function reserveStageBRouteEvidence(session,taskId,evidence){if(!isValidTaskId2(taskId))return null;if(!session.stageBRouteEvidence)session.stageBRouteEvidence=new Map;let entries=session.stageBRouteEvidence.get(taskId)??[],dispatchIdentity=(entry)=>{if(!entry.callId||!entry.childSessionId||typeof entry.generation!=="number")return null;return[entry.role,entry.sessionId??"",entry.taskId??"",entry.callId,entry.childSessionId,String(entry.generation)].join("\x00")},incomingDispatchIdentity=dispatchIdentity(evidence),existingIndex=entries.findIndex((entry)=>entry.role===evidence.role&&(incomingDispatchIdentity!==null&&dispatchIdentity(entry)===incomingDispatchIdentity||incomingDispatchIdentity===null&&dispatchIdentity(entry)===null&&entry.identity===evidence.identity));if(existingIndex>=0){let previousEntry=entries[existingIndex],reservedEntry2={...evidence};return entries[existingIndex]=reservedEntry2,session.stageBRouteEvidence.set(taskId,entries),()=>{if(session.stageBRouteEvidence?.get(taskId)!==entries)return;let reservedIndex=entries.indexOf(reservedEntry2);if(reservedIndex<0)return;entries[reservedIndex]=previousEntry}}if(entries.length>=32)return null;let reservedEntry={...evidence};return entries.push(reservedEntry),session.stageBRouteEvidence.set(taskId,entries),()=>{if(session.stageBRouteEvidence?.get(taskId)!==entries)return;let reservedIndex=entries.indexOf(reservedEntry);if(reservedIndex<0)return;if(entries.splice(reservedIndex,1),entries.length===0)session.stageBRouteEvidence?.delete(taskId)}}function recordStageBRouteEvidence(session,taskId,evidence){return reserveStageBRouteEvidence(session,taskId,evidence)!==null}function getStageBRouteEvidence(session,taskId){return(session.stageBRouteEvidence?.get(taskId)??[]).map((entry)=>({...entry}))}function clearStageBRouteEvidence(session,taskId){session.stageBRouteEvidence?.delete(taskId)}function markStageBRouteRequired(session,taskId){if(!session.stageBRouteRequiredTasks)session.stageBRouteRequiredTasks=new Set;session.stageBRouteRequiredTasks.add(taskId)}function isStageBRouteRequired(session,taskId){return session.stageBRouteRequiredTasks?.has(taskId)===!0}function clearStageBRouteRequired(session,taskId){session.stageBRouteRequiredTasks?.delete(taskId)}function hasBothStageBCompletions(session,taskId){if(!isValidTaskId2(taskId))return!1;let completions=session.stageBCompletion?.get(taskId);if(!completions)return!1;return completions.has("reviewer")&&completions.has("test_engineer")}async function isCouncilGateActive(directory,council,sessionOverrides={}){let enabled=council?.enabled===!0,plan=null;try{plan=await loadPlanJsonOnly(directory)}catch{plan=null}if(!plan)return!1;let planId=derivePlanId(plan),lookup=null;try{lookup=getProfileLookupForIdentity(directory,plan)}catch(err){let msg=err instanceof Error?err.message:String(err);if(!(msg.includes("SQLITE_CANTOPEN")||msg.includes("ENOENT")))warn(`[isCouncilGateActive] getProfile threw unexpectedly for plan ${planId}: ${msg}. Treating council as inactive.`);lookup=null}if(!lookup||lookup.kind==="missing")return!1;if(lookup.kind==="unbound_legacy")return enabled&&lookup.profile.gates.council_mode===!0;let profile=lookup.profile,councilMode=getEffectiveGates(profile,sessionOverrides).council_mode===!0;if(enabled&&councilMode)return!0;if(enabled!==councilMode&&!_councilDisagreementWarned.has(planId))_councilDisagreementWarned.add(planId),warn(`[delegation-gate] Council mode mismatch for plan ${planId}: pluginConfig.council.enabled=${enabled}, QaGates.council_mode=${councilMode}. Falling back to Stage B (non-council) per-task advancement.`);return!1}function _resetCouncilDisagreementWarnings(){_councilDisagreementWarned.clear()}function planStatusToWorkflowState(status){switch(status){case"in_progress":return"idle";case"completed":return"complete";case"blocked":return"blocked";case"closed":return"closed";default:return"idle"}}function evidenceToWorkflowState(evidence){let snapshot=getTaskWorkflowSnapshot(evidence);return{state:snapshot.state,generation:snapshot.generation,authoritative:snapshot.authoritative,retryCount:snapshot.retryCount,lastOutcome:snapshot.lastOutcome,lastTransitionId:snapshot.lastTransitionId,updatedAt:snapshot.updatedAt}}async function readPlanFromDisk(directory){try{let planPath=path108.join(directory,".swarm","plan.json"),content=await fs66.readFile(planPath,"utf-8"),parsed=JSON.parse(content);return PlanSchema.parse(parsed)}catch{return null}}async function readGateEvidenceFromDisk(directory){let evidenceMap=new Map;try{let evidenceDir=path108.join(directory,".swarm","evidence"),entries=await fs66.readdir(evidenceDir,{withFileTypes:!0});for(let entry of entries){if(!entry.isFile()||!entry.name.endsWith(".json"))continue;let taskId=entry.name.replace(/\.json$/,"");if(!/^\d+\.\d+(\.\d+)*$/.test(taskId))continue;try{let filePath=path108.join(evidenceDir,entry.name),content=await fs66.readFile(filePath,"utf-8"),parsed=parseTaskEvidence(content,taskId);evidenceMap.set(taskId,parsed)}catch{}}}catch{}return evidenceMap}async function buildRehydrationCache(directory,options){let projectKey=hydrationProjectKey(directory),buildAuthority=captureCurrentHydrationAuthority(projectKey),planTaskStates=new Map,plan=options&&Object.hasOwn(options,"planOverride")?options.planOverride:await readPlanFromDisk(directory),cachePlan=plan??null;if(plan)for(let phase of plan.phases??[])for(let task of phase.tasks??[])planTaskStates.set(task.id,planStatusToWorkflowState(task.status));let evidenceMap=await readGateEvidenceFromDisk(directory),councilConfig;try{councilConfig=loadPluginConfig(directory).council}catch{councilConfig=void 0}if(options?.shouldCommit&&!options.shouldCommit()||!isHydrationAuthorityCurrent(buildAuthority))return{committed:!1,reason:"superseded"};return setRehydrationCache(projectKey,{planTaskStates,evidenceMap,taskIdentityContext:{plan:cachePlan,councilConfig}},buildAuthority)?{committed:!0}:{committed:!1,reason:"superseded"}}function applyRehydrationCache(session,projectKey){let resolvedKey=projectKey??session.owningProjectKey;if(!resolvedKey)return;let cache2=getRehydrationCache(resolvedKey);if(!cache2)return;if(!session.taskWorkflowStates)session.taskWorkflowStates=new Map;if(!session.taskWorkflowCache)session.taskWorkflowCache=new Map;if(!session.taskCouncilApproved)session.taskCouncilApproved=new Map;let{planTaskStates,evidenceMap,taskIdentityContext}=cache2;for(let[taskId,planState]of planTaskStates){let existingState=session.taskWorkflowStates.get(taskId),existingCache=ensureTaskWorkflowCache(session).get(taskId),evidence=evidenceMap.get(taskId);if(evidence){let derivedWorkflow=evidenceToWorkflowState(evidence);if(derivedWorkflow.authoritative){session.taskWorkflowStates.set(taskId,derivedWorkflow.state),updateTaskWorkflowCache(session,taskId,{generation:derivedWorkflow.generation,retryCount:derivedWorkflow.retryCount,lastOutcome:derivedWorkflow.lastOutcome,lastTransitionId:derivedWorkflow.lastTransitionId,updatedAt:derivedWorkflow.updatedAt});continue}}if((existingCache?.generation??0)>0)continue;if(existingState==null||compareWorkflowStatePrecedence(planState,existingState)>0)session.taskWorkflowStates.set(taskId,planState)}let VALID_COUNCIL_VERDICTS=new Set(["APPROVE","REJECT","CONCERNS"]);for(let[taskId,evidence]of evidenceMap){let council=evidence.gates?.council;if(!council){session.taskCouncilApproved.delete(taskId);continue}let rawIdentityDigest=council.identity_digest;if(typeof rawIdentityDigest!=="string"||!/^[a-f0-9]{64}$/.test(rawIdentityDigest)){session.taskCouncilApproved.delete(taskId);continue}let expectedIdentity=computeCouncilReviewIdentity({level:"task",scope:{kind:"task",taskId},plan:taskIdentityContext.plan,config:taskIdentityContext.councilConfig});if(rawIdentityDigest!==expectedIdentity.identityDigest){session.taskCouncilApproved.delete(taskId);continue}let councilWorkflow=getTaskWorkflowSnapshot(evidence);if(!councilWorkflow.authoritative||council.workflowGeneration!==councilWorkflow.generation||councilWorkflow.state!=="pre_check_passed"){session.taskCouncilApproved.delete(taskId);continue}let rawVerdict=council.verdict;if(!rawVerdict||typeof rawVerdict!=="string")continue;if(!VALID_COUNCIL_VERDICTS.has(rawVerdict))continue;let verdict=rawVerdict,roundNumber=council.roundNumber;if(typeof roundNumber!=="number"||!Number.isFinite(roundNumber))roundNumber=1;let rawQuorumSize=council.quorumSize,quorumSize=typeof rawQuorumSize==="number"&&Number.isFinite(rawQuorumSize)&&rawQuorumSize>=1?rawQuorumSize:1;session.taskCouncilApproved.set(taskId,{verdict,roundNumber,quorumSize})}}async function rehydrateSessionFromDisk(directory,session,shouldCommit){let cacheBuild=shouldCommit?await _internals99.buildRehydrationCache(directory,{shouldCommit}):await _internals99.buildRehydrationCache(directory);if(cacheBuild&&!cacheBuild.committed)return;if(shouldCommit&&!shouldCommit())return;_internals99.applyRehydrationCache(session,hydrationProjectKey(directory))}function hasActiveTurboMode(sessionID){if(sessionID)return swarmState.agentSessions.get(sessionID)?.turboMode===!0;for(let[_sessionId,session]of swarmState.agentSessions)if(session.turboMode===!0)return!0;return!1}function hasActiveFullAuto(sessionID){if(sessionID)return swarmState.agentSessions.get(sessionID)?.fullAutoMode===!0;for(let[_sessionId,session]of swarmState.agentSessions)if(session.fullAutoMode===!0)return!0;return!1}function getActiveFullAutoSessionID(){let activeId,activeLastToolCall=-1;for(let[id,session]of swarmState.agentSessions){if(session.fullAutoMode!==!0)continue;let lastToolCall=session.lastToolCallTime??0;if(activeId===void 0||lastToolCall>activeLastToolCall)activeId=id,activeLastToolCall=lastToolCall}return activeId}function hasActiveLeanTurbo(sessionID){if(sessionID){let session=swarmState.agentSessions.get(sessionID);return session?.turboMode===!0&&session?.turboStrategy==="lean"&&session?.leanTurboActive===!0}for(let[_sessionId,session]of swarmState.agentSessions)if(session.turboMode===!0&&session.turboStrategy==="lean"&&session.leanTurboActive===!0)return!0;return!1}function getResolvedAutoProceed(session,planAutoProceed){return session.autoProceedOverride??planAutoProceed??!1}function setSessionEnvironment(sessionId,profile){swarmState.environmentProfiles.set(sessionId,profile)}function getSessionEnvironment(sessionId){return swarmState.environmentProfiles.get(sessionId)}function ensureSessionEnvironment(sessionId){let existing=swarmState.environmentProfiles.get(sessionId);if(existing)return existing;let profile=detectEnvironmentProfile();return swarmState.environmentProfiles.set(sessionId,profile),Promise.resolve().then(() => (init_telemetry(),exports_telemetry)).then(({telemetry:telemetry2})=>{telemetry2.environmentDetected(sessionId,profile.hostOS,profile.shellFamily,profile.executionMode)}).catch(()=>{}),profile}function setLiveContextWindow(sessionID,tokens,identity){if(!sessionID)return;let map3=swarmState.liveContextWindows,modelID=trimLiveContextIdentity(identity?.modelID),providerID=trimLiveContextIdentity(identity?.providerID),hasIdentity=Boolean(modelID||providerID),existing=map3.get(sessionID);if(!(typeof tokens==="number"&&Number.isFinite(tokens)&&tokens>=1)){if(!hasIdentity)return;if(existing&&liveContextIdentityMatches(existing,{modelID,providerID})&&existing.tokens!==void 0)return;if(map3.has(sessionID))map3.delete(sessionID);map3.set(sessionID,{modelID,providerID}),evictOldestLiveContextWindow(map3,sessionID);return}if(!hasIdentity&&existing&&(existing.modelID||existing.providerID))return;if(map3.has(sessionID))map3.delete(sessionID);map3.set(sessionID,{tokens:Math.floor(tokens),modelID,providerID}),evictOldestLiveContextWindow(map3,sessionID)}function getLiveContextWindow(sessionID,identity){if(!sessionID)return;let cached3=swarmState.liveContextWindows.get(sessionID);if(!cached3)return;if(identity&&!liveContextIdentityMatches(cached3,identity))return;return cached3.tokens}function getLiveContextModelIdentity(sessionID){if(!sessionID)return;let cached3=swarmState.liveContextWindows.get(sessionID);if(!cached3)return;return{modelID:cached3.modelID,providerID:cached3.providerID}}function evictOldestLiveContextWindow(map3,sessionID){if(map3.size<=MAX_TRACKED_CONTEXT_WINDOWS)return;let oldest=map3.keys().next().value;if(oldest!==void 0&&oldest!==sessionID)map3.delete(oldest)}function trimLiveContextIdentity(value){let trimmed=value?.trim();return trimmed?trimmed:void 0}function normalizeLiveContextIdentity(value){return trimLiveContextIdentity(value)?.toLowerCase()??""}function liveContextIdentityMatches(left,right){return normalizeLiveContextIdentity(left.modelID)===normalizeLiveContextIdentity(right.modelID)&&normalizeLiveContextIdentity(left.providerID)===normalizeLiveContextIdentity(right.providerID)}function setSessionBudget(sessionID,pct,tokens){let map3=swarmState.lastBudgetBySession;if(map3.has(sessionID))map3.delete(sessionID);if(map3.set(sessionID,{pct,tokens}),map3.size>MAX_TRACKED_BUDGET_SESSIONS){let oldest=map3.keys().next().value;if(oldest!==void 0&&oldest!==sessionID)map3.delete(oldest)}}function setFinalPromptPressure(sessionID,snapshot){let map3=swarmState.finalPromptPressureBySession;if(map3.has(sessionID))map3.delete(sessionID);if(map3.set(sessionID,snapshot),map3.size>MAX_TRACKED_BUDGET_SESSIONS){let oldest=map3.keys().next().value;if(oldest!==void 0&&oldest!==sessionID)map3.delete(oldest)}}function getFinalPromptPressure(sessionID){if(!sessionID)return;return swarmState.finalPromptPressureBySession.get(sessionID)}function setFinalAccountingWarningBand(sessionID,band){let map3=swarmState.finalAccountingWarningBandsBySession,entry=map3.get(sessionID)??{warn:!1,critical:!1};if(map3.has(sessionID))map3.delete(sessionID);if(band==="critical")entry.critical=!0;else entry.warn=!0;if(map3.set(sessionID,entry),map3.size>MAX_TRACKED_BUDGET_SESSIONS){let oldest=map3.keys().next().value;if(oldest!==void 0&&oldest!==sessionID)map3.delete(oldest)}}function getFinalAccountingWarningBand(sessionID,band){if(!sessionID)return!1;let entry=swarmState.finalAccountingWarningBandsBySession.get(sessionID);if(!entry)return!1;return band==="critical"?entry.critical:entry.warn}function clearFinalAccountingWarningBands(){swarmState.finalAccountingWarningBandsBySession.clear()}function getSessionBudgetPct(sessionID){if(!sessionID)return 0;return swarmState.lastBudgetBySession.get(sessionID)?.pct??0}function getSessionBudgetTokens(sessionID){if(!sessionID)return 0;return swarmState.lastBudgetBySession.get(sessionID)?.tokens??0}function getDisplayBudget(){let best=null;for(let entry of swarmState.lastBudgetBySession.values())if(entry.pct>0&&(best===null||entry.pct>best.pct))best=entry;return best}function getDisplayFinalPromptPressure(){let best=null;for(let entry of swarmState.finalPromptPressureBySession.values())if(entry.pct>0&&(best===null||entry.pct>best.pct))best=entry;return best}function setCriticalShownIds(sessionID,value){let map3=swarmState.currentCriticalShownIds;if(map3.has(sessionID))map3.delete(sessionID);if(map3.set(sessionID,value),map3.size>MAX_TRACKED_CRITICAL_SHOWN){let oldest=map3.keys().next().value;if(oldest!==void 0&&oldest!==sessionID)map3.delete(oldest)}}function clearCriticalShownIds(sessionID){return swarmState.currentCriticalShownIds.delete(sessionID)}function buildGateDenialDirectiveKey(ids){return[...ids].sort().join(",")}function incrementGateDenialCount(sessionID,directiveKey){let map3=swarmState.gateDenialCounts,existing=map3.get(sessionID),count2=existing&&existing.directiveKey===directiveKey?existing.count+1:1;if(map3.has(sessionID))map3.delete(sessionID);if(map3.set(sessionID,{count:count2,directiveKey}),map3.size>MAX_TRACKED_GATE_DENIALS){let oldest=map3.keys().next().value;if(oldest!==void 0&&oldest!==sessionID)map3.delete(oldest)}return count2}function clearGateDenialCount(sessionID){swarmState.gateDenialCounts.delete(sessionID)}function addKnowledgeAckDedup(key2){let set3=swarmState.knowledgeAckDedup;if(set3.has(key2))return;if(set3.add(key2),set3.size>MAX_TRACKED_KNOWLEDGE_ACKS){let oldest=set3.values().next().value;if(oldest!==void 0)set3.delete(oldest)}}async function rehydratePrSubscriptions(sessionID,directory){let map3=new Map;try{let{listActive:listActive2}=await Promise.resolve().then(() => (init_pr_subscriptions(),exports_pr_subscriptions)),records=await listActive2(directory);for(let record3 of records){if(record3.sessionID!==sessionID)continue;let key2=`${record3.repoFullName}::${record3.prNumber}`;map3.set(key2,{prNumber:record3.prNumber,repoFullName:record3.repoFullName,prUrl:record3.prUrl,lastKnownStatus:record3.mergeableState??"unknown",lastPollTime:record3.lastCheckedAt,errorCount:record3.errorCount,isWatching:record3.isWatching})}}catch(err){warn(`[state] rehydratePrSubscriptions failed for session ${sessionID}: ${err instanceof Error?err.message:String(err)}`)}return map3}var _councilDisagreementWarned,MAX_TRACKED_TASK_FILE_ATTRIBUTIONS=128,LINEAR_STATE_ORDER,_toolAggregates,defaultRunContext,_runContexts,swarmState,STALE_SESSION_TTL_MS=7200000,MAX_REVIEWER_SCOPE_GENERATION_FILES=256,MAX_REVIEWER_SCOPE_GENERATIONS=256,MAX_REVIEWER_SCOPE_OWNERSHIP_HISTORY=256,REVIEWER_SCOPE_GENERATION_TTL_MS,MAX_TRACKED_DISPATCH_PARENTS=200,PENDING_DISPATCH_AUTHORIZATION_TTL_MS=600000,IDLE_SWEEP_COOLDOWN_MS=60000,_lastIdleSweepAtMs=0,SWARM_AGENT_NAME_SET,SWARM_SUBAGENT_NAME_SET,MAX_TRACKED_PRIMARY_OWNERS=1000,NON_OWNABLE_AGENT_NAMES,MAX_TRACKED_BUDGET_SESSIONS=500,MAX_TRACKED_CRITICAL_SHOWN=500,MAX_TRACKED_KNOWLEDGE_ACKS=5000,MAX_TRACKED_GATE_DENIALS=500,MAX_TRACKED_CONTEXT_WINDOWS=500,_internals99;var init_state=__esm(()=>{init_agent_names();init_constants();init_loader();init_plan_schema();init_schema();init_council_review_identity();init_qa_gate_profile();init_qa_gate_session_override();init_lifecycle();init_action_circuit();init_gate_evidence();init_delegation_gate();init_realtime_learning_nudge();init_trajectory_step_state();init_candidate_queue();init_prm_pattern_support();init_task_model_routing();init_manager();init_utils3();init_trajectory_store();init_scope_binding();init_scope_persistence();init_injection_budget();init_hydration_ownership();init_session_start_store();init_snapshot_store();init_worktree_link_suggestion();init_telemetry();init_logger();init_path();_councilDisagreementWarned=new Set,LINEAR_STATE_ORDER=["idle","coder_delegated","pre_check_passed","reviewer_run","tests_run","complete"];_toolAggregates=new Map,defaultRunContext=new AgentRunContext("default",_toolAggregates),_runContexts=new Map;swarmState={activeToolCalls:defaultRunContext.activeToolCalls,toolAggregates:defaultRunContext.toolAggregates,activeAgent:defaultRunContext.activeAgent,primaryOwnerBySession:new Map,delegationChains:defaultRunContext.delegationChains,pendingEvents:0,opencodeClient:null,curatorInitAgentNames:[],curatorPhaseAgentNames:[],curatorPostmortemAgentNames:[],curatorConsolidationAgentNames:[],skillImproverAgentNames:[],specWriterAgentNames:[],currentCriticalShownIds:new Map,knowledgeAckDedup:new Set,gateDenialCounts:new Map,generatedAgentNames:[],lastBudgetBySession:new Map,finalPromptPressureBySession:new Map,finalAccountingWarningBandsBySession:new Map,liveContextWindows:new Map,dispatchParentByChildSession:new Map,pendingDispatchAuthorizations:[],agentSessions:defaultRunContext.agentSessions,pendingRehydrations:new Set,fullAutoEnabledInConfig:!1,environmentProfiles:defaultRunContext.environmentProfiles};REVIEWER_SCOPE_GENERATION_TTL_MS=STALE_SESSION_TTL_MS;SWARM_AGENT_NAME_SET=new Set(ALL_AGENT_NAMES),SWARM_SUBAGENT_NAME_SET=new Set(ALL_SUBAGENT_NAMES),NON_OWNABLE_AGENT_NAMES=new Set(["compaction","title","summary","explore"]);_internals99={swarmState,resetSwarmState,ensureAgentSession,startAgentSession,loadPluginConfigWithMeta,resolveInitialTurboMode,getAgentSession,beginInvocation,getActiveWindow,advanceTaskState,getTaskState,hasActiveFullAuto,hasActiveTurboMode,hasActiveLeanTurbo,buildRehydrationCache,applyRehydrationCache,rehydrateSessionFromDisk,rehydratePrSubscriptions,isCouncilGateActive,defaultRunContext}});async function boundedSessionCall(call,timeoutMs,timeoutLabel,failureLabel,sessionId){let timer;try{await Promise.race([call(),new Promise((_resolve,reject2)=>{timer=setTimeout(()=>reject2(Error(`${timeoutLabel} after ${timeoutMs}ms`)),Math.max(1,timeoutMs))})])}catch(error93){_internals100.log(`${failureLabel} for ephemeral session`,{sessionId,error:error93 instanceof Error?error93.message:String(error93)})}finally{if(timer)clearTimeout(timer)}}async function boundedAbortEphemeralSession(session,sessionId,timeoutMs=DEFAULT_EPHEMERAL_ABORT_TIMEOUT_MS){if(typeof session.abort!=="function")return;await _internals100.boundedSessionCall(()=>session.abort({path:{id:sessionId}}),timeoutMs,"ephemeral session abort timed out","ephemeral session abort failed",sessionId)}async function boundedDeleteEphemeralSession(session,sessionId,timeoutMs=DEFAULT_EPHEMERAL_TEARDOWN_DELETE_TIMEOUT_MS){await _internals100.boundedSessionCall(()=>session.delete({path:{id:sessionId}}),timeoutMs,"ephemeral session delete timed out","ephemeral session delete failed",sessionId)}async function teardownEphemeralSession(session,sessionId,options={}){let abortTimeoutMs=options.abortTimeoutMs??DEFAULT_EPHEMERAL_ABORT_TIMEOUT_MS,deleteTimeoutMs=options.deleteTimeoutMs??DEFAULT_EPHEMERAL_TEARDOWN_DELETE_TIMEOUT_MS;if(!(options.skipAbort??!1))await _internals100.boundedAbort(session,sessionId,abortTimeoutMs);await _internals100.boundedDelete(session,sessionId,deleteTimeoutMs)}async function sessionExists(session,sessionId,verifyTimeoutMs){if(typeof session.get!=="function")return!0;try{let body=(await withTimeout(session.get({path:{id:sessionId}}),verifyTimeoutMs,Error(`ephemeral session verify timed out after ${verifyTimeoutMs}ms`)))?.data;if(body===void 0||body===null)return!1;return!0}catch{return!1}}async function teardownEphemeralSessionVerified(session,sessionId,options={}){let verifyTimeoutMs=options.verifyTimeoutMs??DEFAULT_EPHEMERAL_VERIFY_TIMEOUT_MS,attempts=Math.min(6,Math.max(2,options.maxDeleteAttempts??DEFAULT_EPHEMERAL_MAX_DELETE_ATTEMPTS));if(typeof session.get!=="function")return await teardownEphemeralSession(session,sessionId,options),{ok:!1,sessionId,attempts:1,kind:"ephemeral-session-teardown-unverified",reason:"get-unavailable"};let deleteAttempts=0;for(;;){if(await teardownEphemeralSession(session,sessionId,{...options,skipAbort:deleteAttempts>0?!0:options.skipAbort}),deleteAttempts+=1,!await _internals100.sessionExists(session,sessionId,verifyTimeoutMs))return{ok:!0,sessionId,attempts:deleteAttempts};if(deleteAttempts>=attempts)return{ok:!1,sessionId,attempts:deleteAttempts,kind:"ephemeral-session-teardown-unverified",reason:"session-survived-bounded-retries"}}}var DEFAULT_EPHEMERAL_ABORT_TIMEOUT_MS=5000,DEFAULT_EPHEMERAL_TEARDOWN_DELETE_TIMEOUT_MS=2000,DEFAULT_EPHEMERAL_VERIFY_TIMEOUT_MS=2000,DEFAULT_EPHEMERAL_MAX_DELETE_ATTEMPTS=3,_internals100;var init_ephemeral_session_teardown=__esm(()=>{init_logger();init_timeout();_internals100={boundedSessionCall,boundedAbort:boundedAbortEphemeralSession,boundedDelete:boundedDeleteEphemeralSession,sessionExists,log}});var init_worktree=__esm(()=>{init_core3();init_merge2()});function verifyReviewerScopeGenerationMergeBack(input){try{let generation=getReviewerScopeGenerationForCoderCall({parentSessionID:input.parentSessionID,taskId:input.taskId,coderCallID:input.coderCallID,now:input.now});if(!generation||generation.modifiedFiles.length===0)return;if(generation.status!=="collecting"&&generation.status!=="mergeback_pending")return;if(generation.status==="collecting"){if(!markReviewerScopeGenerationMergebackPending({parentSessionID:input.parentSessionID,taskId:input.taskId,coderCallID:input.coderCallID,at:input.now}))return}let session=ensureAgentSession(input.parentSessionID),deadlineAt=(input.now??Date.now())+REVIEWER_SCOPE_CAPTURE_BATCH_DEADLINE_MS;for(let file3 of generation.modifiedFiles){let stored=generation.modifiedFileFingerprints.find((entry)=>entry.file===file3);if(!stored){settleReviewerScopeMergeback({parentSessionID:input.parentSessionID,taskId:input.taskId,coderCallID:input.coderCallID,outcome:{verified:!1,reason:`incomplete fingerprints: ${file3} has no stored capture`,at:input.now}}),pushAdvisory(session,`REVIEWER_SCOPE_MERGEBACK_MISMATCH: task ${input.taskId}: merge-back verification found no stored fingerprint for ${file3}. ACTION[architect]: re-dispatch the coder for this task`);return}let captured=captureReviewerScopeFileFingerprint(input.primaryDirectory,file3,{deadlineAt});if(captured.kind==="capture_failed"){settleReviewerScopeMergeback({parentSessionID:input.parentSessionID,taskId:input.taskId,coderCallID:input.coderCallID,outcome:{verified:!1,reason:`capture ${captured.code} on ${captured.file}`,at:input.now}}),pushAdvisory(session,`REVIEWER_SCOPE_MERGEBACK_MISMATCH: task ${input.taskId}: primary-checkout capture failed for ${captured.file} (${captured.code}). ACTION[architect]: verify the primary checkout, then re-dispatch the reviewer`);return}let capturedFingerprint=reviewerScopeCaptureToFingerprint(captured);if(!capturedFingerprint||!reviewerScopeFileFingerprintsEqual(stored,capturedFingerprint)){settleReviewerScopeMergeback({parentSessionID:input.parentSessionID,taskId:input.taskId,coderCallID:input.coderCallID,outcome:{verified:!1,reason:`primary bytes differ from lane manifest on ${file3}`,at:input.now}}),pushAdvisory(session,`REVIEWER_SCOPE_MERGEBACK_MISMATCH: task ${input.taskId}: primary-checkout bytes differ from the lane manifest on ${file3}; lane evidence retained. ACTION[architect]: resolve the merge conflict or re-dispatch the coder`);return}}let primaryIdentity=canonicalWorkspaceIdentity(input.primaryDirectory);settleReviewerScopeMergeback({parentSessionID:input.parentSessionID,taskId:input.taskId,coderCallID:input.coderCallID,outcome:{verified:!0,primaryWorkspaceIdentity:primaryIdentity??input.primaryDirectory,primaryDirectory:input.primaryDirectory,at:input.now}}),pushAdvisory(session,`REVIEWER_SCOPE_MERGEBACK_VERIFIED: task ${input.taskId}: primary checkout matches the lane manifest exactly; reviewer dispatch is enabled`)}catch(error93){try{let session=ensureAgentSession(input.parentSessionID);pushAdvisory(session,`REVIEWER_SCOPE_MERGEBACK_MISMATCH: task ${input.taskId}: merge-back verification errored (${String(error93).slice(0,200)}). ACTION[architect]: re-dispatch the reviewer to retry verification`),settleReviewerScopeMergeback({parentSessionID:input.parentSessionID,taskId:input.taskId,coderCallID:input.coderCallID,outcome:{verified:!1,reason:"verification error",at:input.now}})}catch{}}}var init_reviewer_scope_mergeback=__esm(()=>{init_scope_binding();init_state();init_reviewer_scope_file_fingerprint()});import{createHash as createHash50,randomBytes as randomBytes7}from"node:crypto";import*as fs67 from"node:fs";import*as path109 from"node:path";function nowMs2(input){return input??Date.now()}function sha2566(input){return createHash50("sha256").update(input).digest("hex")}function storePath4(directory){return path109.join(directory,STORE_RELATIVE_PATH)}function journalPath2(directory){return path109.join(directory,JOURNAL_RELATIVE_PATH)}function credentialPath(directory,authorityDigest){return path109.join(directory,CREDENTIAL_DIRECTORY,`${authorityDigest}.json`)}function readAuthorityLockRecord(lockPath){try{let parsed=JSON.parse(fs67.readFileSync(lockPath,"utf8"));if(typeof parsed?.nonce==="string"&&typeof parsed?.acquiredAt==="number"&&Number.isFinite(parsed.acquiredAt)&&typeof parsed?.pid==="number"&&Number.isInteger(parsed.pid))return{nonce:parsed.nonce,acquiredAt:parsed.acquiredAt,pid:parsed.pid}}catch{}return}function writeAuthorityLockRecord(lockPath,record3){try{return fs67.writeFileSync(lockPath,JSON.stringify(record3,null,2),{flag:"wx"}),!0}catch{return!1}}function isProcessAlive2(pid){if(!Number.isSafeInteger(pid)||pid<=0)return!1;try{return process.kill(pid,0),!0}catch{return!1}}function acquireAuthorityLock(directory){let lockPath=path109.join(directory,AUTHORITY_LOCK_RELATIVE_PATH);fs67.mkdirSync(path109.dirname(lockPath),{recursive:!0});let nonce=randomBytes7(16).toString("hex"),acquiredAt=Date.now(),attempt=()=>writeAuthorityLockRecord(lockPath,{nonce,acquiredAt,pid:process.pid});if(!attempt())try{let observed=readAuthorityLockRecord(lockPath);if(!observed)return;if(Date.now()-fs67.statSync(lockPath).mtimeMs>AUTHORITY_LOCK_STALE_MS){if(isProcessAlive2(observed.pid))return;let reread=readAuthorityLockRecord(lockPath);if(reread&&reread.nonce===observed.nonce&&reread.acquiredAt===observed.acquiredAt&&reread.pid===observed.pid){if(fs67.unlinkSync(lockPath),!attempt())return}}}catch{return}let acquired=readAuthorityLockRecord(lockPath);if(!acquired||acquired.nonce!==nonce)return;let released=!1;return()=>{if(released)return;released=!0;try{if(readAuthorityLockRecord(lockPath)?.nonce===nonce)fs67.unlinkSync(lockPath)}catch{}}}function taskKey(parentSessionId,taskId){return`${parentSessionId}::${taskId}`}function stableStringify(value){if(Array.isArray(value))return`[${value.map((item)=>stableStringify(item)).join(",")}]`;if(value&&typeof value==="object")return`{${Object.entries(value).sort(([left],[right])=>left.localeCompare(right)).map(([key2,item])=>`${JSON.stringify(key2)}:${stableStringify(item)}`).join(",")}}`;return JSON.stringify(value)}function digestAuthorityIdentity(input){return sha2566(stableStringify({originalCallID:input.originalCallID,parentSessionId:input.parentSessionId,taskId:input.taskId,reservationId:input.reservationId,generation:input.generation,canonicalBranch:input.canonicalBranch,canonicalPath:input.canonicalPath,laneBranch:input.laneBranch,lanePath:input.lanePath,expectedPrimaryHead:input.expectedPrimaryHead,sourceBaseOid:input.sourceBaseOid,sourceHeadOid:input.sourceHeadOid,targetHeadOid:input.targetHeadOid,strategy:input.strategy,declaredConflictFiles:input.declaredConflictFiles??[]}))}function nonEmpty(value){return typeof value==="string"&&value.length>0&&value.length<=4096}function isHex40(value){return typeof value==="string"&&HEX_40_RE.test(value)}function isOidArray(value){return Array.isArray(value)&&value.length<=4096&&value.every(isHex40)}function isSettlementEvidence(value){if(!value||typeof value!=="object"||Array.isArray(value))return!1;let candidate=value;return isOidArray(candidate.sourceCommitOrder)&&isOidArray(candidate.rewrittenCommitOrder)&&candidate.sourceCommitOrder.length===candidate.rewrittenCommitOrder.length}function isStrategy(value){return value==="merge"||value==="rebase"||value==="cherry-pick"}function isImmutableIdentity(value){if(!value||typeof value!=="object"||Array.isArray(value))return!1;let candidate=value;return nonEmpty(candidate.originalCallID)&&nonEmpty(candidate.parentSessionId)&&nonEmpty(candidate.taskId)&&nonEmpty(candidate.reservationId)&&typeof candidate.generation==="number"&&Number.isInteger(candidate.generation)&&candidate.generation>0&&nonEmpty(candidate.canonicalBranch)&&nonEmpty(candidate.canonicalPath)&&nonEmpty(candidate.laneBranch)&&nonEmpty(candidate.lanePath)&&isHex40(candidate.expectedPrimaryHead)&&isHex40(candidate.sourceBaseOid)&&isHex40(candidate.sourceHeadOid)&&isHex40(candidate.targetHeadOid)&&isStrategy(candidate.strategy)&&(candidate.declaredConflictFiles===void 0||Array.isArray(candidate.declaredConflictFiles)&&candidate.declaredConflictFiles.every((item)=>nonEmpty(item)))&&typeof candidate.createdAt==="number"&&Number.isFinite(candidate.createdAt)&&candidate.createdAt>=0}function isClaimState(value){if(!value||typeof value!=="object"||Array.isArray(value))return!1;let candidate=value;return nonEmpty(candidate.claimantCallID)&&nonEmpty(candidate.claimantSessionId)&&nonEmpty(candidate.childSessionId)&&typeof candidate.claimRevision==="number"&&Number.isInteger(candidate.claimRevision)&&candidate.claimRevision>0&&typeof candidate.attempt==="number"&&Number.isInteger(candidate.attempt)&&candidate.attempt>0&&typeof candidate.leaseExpiresAt==="number"&&Number.isFinite(candidate.leaseExpiresAt)&&candidate.leaseExpiresAt>=0&&nonEmpty(candidate.claimTokenDigest)&&typeof candidate.claimedAt==="number"&&Number.isFinite(candidate.claimedAt)&&candidate.claimedAt>=0}function isAuthority(value){if(!value||typeof value!=="object"||Array.isArray(value))return!1;let candidate=value,claimCursor=candidate.claimCursor&&typeof candidate.claimCursor==="object"?candidate.claimCursor:void 0,validStatus=candidate.status==="preserved"||candidate.status==="claimed"||candidate.status==="released"||candidate.status==="finalized";return candidate.schemaVersion===2&&nonEmpty(candidate.authorityDigest)&&isImmutableIdentity(candidate.immutable)&&validStatus&&(candidate.claim===void 0||isClaimState(candidate.claim))&&(claimCursor===void 0||typeof claimCursor.lastClaimRevision==="number"&&Number.isInteger(claimCursor.lastClaimRevision)&&claimCursor.lastClaimRevision>0&&typeof claimCursor.lastAttempt==="number"&&Number.isInteger(claimCursor.lastAttempt)&&claimCursor.lastAttempt>0)&&(candidate.status!=="claimed"||candidate.claim!==void 0)&&(candidate.finalizedAt===void 0||typeof candidate.finalizedAt==="number"&&Number.isFinite(candidate.finalizedAt)&&candidate.finalizedAt>=0)&&(candidate.settlement===void 0||isSettlementEvidence(candidate.settlement))}function isJournalEntry(value){if(!value||typeof value!=="object"||Array.isArray(value))return!1;let candidate=value,validState=candidate.state==="PREPARED"||candidate.state==="COMMITTED"||candidate.state==="CLAIM_RENEWED"||candidate.state==="ABORTED"||candidate.state==="RELEASED"||candidate.state==="FINALIZED";return candidate.schemaVersion===1&&nonEmpty(candidate.authorityDigest)&&validState&&nonEmpty(candidate.claimantCallID)&&nonEmpty(candidate.claimantSessionId)&&(candidate.childSessionId===void 0||nonEmpty(candidate.childSessionId))&&typeof candidate.claimRevision==="number"&&Number.isInteger(candidate.claimRevision)&&candidate.claimRevision>0&&typeof candidate.attempt==="number"&&Number.isInteger(candidate.attempt)&&candidate.attempt>0&&typeof candidate.leaseExpiresAt==="number"&&Number.isFinite(candidate.leaseExpiresAt)&&candidate.leaseExpiresAt>=0&&nonEmpty(candidate.claimTokenDigest)&&typeof candidate.preparedAt==="number"&&Number.isFinite(candidate.preparedAt)&&candidate.preparedAt>=0&&(candidate.credentialInstalledAt===void 0||typeof candidate.credentialInstalledAt==="number"&&Number.isFinite(candidate.credentialInstalledAt)&&candidate.credentialInstalledAt>=0)&&(candidate.committedAt===void 0||typeof candidate.committedAt==="number"&&Number.isFinite(candidate.committedAt)&&candidate.committedAt>=0)&&(candidate.abortedAt===void 0||typeof candidate.abortedAt==="number"&&Number.isFinite(candidate.abortedAt)&&candidate.abortedAt>=0)&&(candidate.reason===void 0||nonEmpty(candidate.reason))}function isCredential(value){if(!value||typeof value!=="object"||Array.isArray(value))return!1;let candidate=value;return candidate.schemaVersion===1&&nonEmpty(candidate.authorityDigest)&&nonEmpty(candidate.claimantCallID)&&nonEmpty(candidate.claimantSessionId)&&nonEmpty(candidate.childSessionId)&&typeof candidate.claimRevision==="number"&&Number.isInteger(candidate.claimRevision)&&candidate.claimRevision>0&&nonEmpty(candidate.rawToken)&&typeof candidate.leaseExpiresAt==="number"&&Number.isFinite(candidate.leaseExpiresAt)&&candidate.leaseExpiresAt>=0&&typeof candidate.createdAt==="number"&&Number.isFinite(candidate.createdAt)&&candidate.createdAt>=0}function rebuildIndex(authorities){let bySessionTask={};for(let authority of[...authorities].sort((left,right)=>right.immutable.generation-left.immutable.generation||right.immutable.createdAt-left.immutable.createdAt)){let key2=taskKey(authority.immutable.parentSessionId,authority.immutable.taskId),digests=bySessionTask[key2]??[];digests.push(authority.authorityDigest),bySessionTask[key2]=digests}return{bySessionTask}}function emptyJournal(){return{schemaVersion:1,entries:[]}}function readBoundedJsonFile2(filePath,maxBytes){try{if(fs67.statSync(filePath).size>maxBytes)return{ok:!1,reason:`${path109.basename(filePath)} exceeds the ${maxBytes}-byte safety bound`};let raw=fs67.readFileSync(filePath,"utf8");if(Buffer.byteLength(raw,"utf8")>maxBytes)return{ok:!1,reason:`${path109.basename(filePath)} changed beyond the ${maxBytes}-byte safety bound`};return{ok:!0,value:JSON.parse(raw)}}catch(error93){if(error93.code==="ENOENT")return{ok:!0,value:void 0};return{ok:!1,reason:`${path109.basename(filePath)} is unreadable or malformed: ${error93 instanceof Error?error93.message:String(error93)}`}}}function loadStoreStrict(directory){let loaded=readBoundedJsonFile2(storePath4(directory),MAX_STORE_BYTES);if(!loaded.ok)return{status:"uncertain",reason:loaded.reason};if(loaded.value===void 0)return{status:"ok",authorities:[]};let parsed=loaded.value;if(parsed.schemaVersion===1)return{status:"unsupported-legacy",reason:"worktree recovery v1 records are unsupported for claim mutation"};if(parsed.schemaVersion!==2)return{status:"uncertain",reason:`unknown worktree recovery schema version: ${String(parsed.schemaVersion)}`};if(!Array.isArray(parsed.authorities))return{status:"uncertain",reason:"worktree recovery store does not contain an authorities array"};if(parsed.authorities.length>MAX_STORE_AUTHORITIES)return{status:"uncertain",reason:`worktree recovery authority count exceeds the ${MAX_STORE_AUTHORITIES}-record safety bound`};for(let authority of parsed.authorities)if(!isAuthority(authority))return{status:"uncertain",reason:"worktree recovery store contains an invalid authority record"};return{status:"ok",authorities:[...parsed.authorities]}}function loadStoreWritable(directory){let scanned=loadStoreStrict(directory);if(scanned.status==="unsupported-legacy")return{ok:!1,code:"unsupported_legacy",reason:scanned.reason};if(scanned.status==="uncertain")return{ok:!1,code:"uncertain_store",reason:scanned.reason};return{schemaVersion:2,authorities:scanned.authorities,index:rebuildIndex(scanned.authorities)}}function loadJournal(directory){let loaded=readBoundedJsonFile2(journalPath2(directory),MAX_JOURNAL_BYTES2);if(!loaded.ok||loaded.value===void 0)return emptyJournal();let parsed=loaded.value;if(parsed.schemaVersion!==1||!Array.isArray(parsed.entries))return emptyJournal();let entries=[];for(let entry of parsed.entries)if(isJournalEntry(entry))entries.push(entry);return{schemaVersion:1,entries:entries.slice(-MAX_JOURNAL_ENTRIES)}}function updateStore(store,authorities){return store.authorities=authorities,store.index=rebuildIndex(authorities),store}function currentClaimMatches(authority,request){if(!authority.claim)return!1;return authority.claim.claimantCallID===request.claimantCallID&&authority.claim.claimRevision===request.claimRevision&&authority.claim.claimTokenDigest===sha2566(request.rawToken)}function latestJournalEntriesByAuthority(journal){let latest=new Map;for(let entry of journal.entries)latest.set(entry.authorityDigest,entry);return[...latest.values()]}function recordJournalEntry(directory,entry){let journal=loadJournal(directory);if(journal.entries.push(entry),journal.entries.length>MAX_JOURNAL_ENTRIES)journal.entries=journal.entries.slice(-MAX_JOURNAL_ENTRIES);return _internals101.writeClaimJournal(journalPath2(directory),journal),journal}function writeCredential(directory,credential){let targetPath=credentialPath(directory,credential.authorityDigest);_internals101.writeCredentialFile(targetPath,credential);try{fs67.chmodSync(targetPath,384)}catch{}return targetPath}function readCredential(directory,authorityDigest){let loaded=readBoundedJsonFile2(credentialPath(directory,authorityDigest),MAX_CREDENTIAL_BYTES);if(!loaded.ok||loaded.value===void 0)return;return isCredential(loaded.value)?loaded.value:void 0}function removeCredentialIfMatch(directory,entry){let credential=readCredential(directory,entry.authorityDigest);if(credential&&credential.claimRevision===entry.claimRevision&&credential.claimantCallID===entry.claimantCallID)try{fs67.unlinkSync(credentialPath(directory,entry.authorityDigest))}catch{}}function baseMutationFailure(code,reason){return{ok:!1,code,reason}}function publishWorktreeRecoveryAuthorityUnlocked(directory,input){let store=loadStoreWritable(directory);if("ok"in store)return store;let immutable={...input,createdAt:nowMs2()};if(!isImmutableIdentity(immutable))return baseMutationFailure("uncertain_store","invalid immutable recovery authority input");let authorityDigest=digestAuthorityIdentity(input),existing=store.authorities.find((authority2)=>authority2.authorityDigest===authorityDigest);if(existing)return{ok:!0,authority:existing};let authority={schemaVersion:2,authorityDigest,immutable,status:"preserved"},nextAuthorities=[...store.authorities,authority];if(nextAuthorities.length>MAX_STORE_AUTHORITIES)return baseMutationFailure("uncertain_store",`worktree recovery authority count exceeds the ${MAX_STORE_AUTHORITIES}-record safety bound`);return _internals101.writeRecoveryStore(storePath4(directory),updateStore(store,nextAuthorities),"publish"),{ok:!0,authority}}function publishWorktreeRecoveryAuthority(directory,input){let release=acquireAuthorityLock(directory);if(!release)return baseMutationFailure("busy","worktree recovery authority store is locked");try{return publishWorktreeRecoveryAuthorityUnlocked(directory,input)}finally{release()}}function scanWorktreeRecoveryAuthoritiesForRecovery(directory){return loadStoreStrict(directory)}function lookupWorktreeRecoveryAuthoritiesByTask(directory,query){let scanned=loadStoreStrict(directory);if(scanned.status!=="ok")return scanned;return{status:"ok",authorities:scanned.authorities.filter((authority)=>authority.immutable.parentSessionId===query.parentSessionId&&authority.immutable.taskId===query.taskId).sort((left,right)=>right.immutable.generation-left.immutable.generation||right.immutable.createdAt-left.immutable.createdAt)}}async function claimWorktreeRecoveryAuthorityUnlocked(directory,request){let store=loadStoreWritable(directory);if("ok"in store)return store;let authorityIndex=store.authorities.findIndex((authority2)=>authority2.authorityDigest===request.authorityDigest);if(authorityIndex===-1)return baseMutationFailure("not_found","worktree recovery authority not found");let authority=store.authorities[authorityIndex];if(authority.status==="finalized")return baseMutationFailure("finalized","finalized worktree recovery authority cannot be claimed again");let currentTime=nowMs2(request.now),previousClaim=authority.claim;if(previousClaim&&previousClaim.leaseExpiresAt>currentTime)return baseMutationFailure("busy","worktree recovery authority is already claimed");if(previousClaim&&previousClaim.leaseExpiresAt<=currentTime){if(!request.revalidateExpiredClaim)return baseMutationFailure("revalidation_required","expired worktree recovery claims require full revalidation before transfer");let verdict=await request.revalidateExpiredClaim({authority,previousClaim});if(!verdict.ok)return baseMutationFailure("revalidation_failed",verdict.reason)}let nextAttempt=(previousClaim?.attempt??authority.claimCursor?.lastAttempt??0)+1,maxAttempts=request.maxAttempts??DEFAULT_MAX_ATTEMPTS;if(nextAttempt>maxAttempts)return baseMutationFailure("retry_cap_exceeded",`worktree recovery claim attempt ${nextAttempt} exceeds the ${maxAttempts}-attempt safety cap`);let nextRevision=(previousClaim?.claimRevision??authority.claimCursor?.lastClaimRevision??0)+1,rawToken=_internals101.generateRawToken(),claimTokenDigest=sha2566(rawToken);recordJournalEntry(directory,{schemaVersion:1,authorityDigest:authority.authorityDigest,state:"PREPARED",claimantCallID:request.claimantCallID,claimantSessionId:request.claimantSessionId,claimRevision:nextRevision,attempt:nextAttempt,leaseExpiresAt:currentTime+request.leaseMs,claimTokenDigest,preparedAt:currentTime});let childSessionId=await request.createChildSession(),refreshedStore=loadStoreWritable(directory);if("ok"in refreshedStore)throw Error(`worktree recovery authority could not be revalidated: ${refreshedStore.reason}`);let refreshedAuthority=refreshedStore.authorities.find((candidate)=>candidate.authorityDigest===request.authorityDigest);if(!refreshedAuthority||stableStringify({status:refreshedAuthority.status,claim:refreshedAuthority.claim,claimCursor:refreshedAuthority.claimCursor,immutable:refreshedAuthority.immutable})!==stableStringify({status:authority.status,claim:authority.claim,claimCursor:authority.claimCursor,immutable:authority.immutable}))throw recordJournalEntry(directory,{schemaVersion:1,authorityDigest:authority.authorityDigest,state:"ABORTED",claimantCallID:request.claimantCallID,claimantSessionId:request.claimantSessionId,childSessionId,claimRevision:nextRevision,attempt:nextAttempt,leaseExpiresAt:currentTime+request.leaseMs,claimTokenDigest,preparedAt:currentTime,abortedAt:nowMs2(),reason:"authority changed while child session was being created"}),Error("worktree recovery authority changed while child session was being created");recordJournalEntry(directory,{schemaVersion:1,authorityDigest:authority.authorityDigest,state:"PREPARED",claimantCallID:request.claimantCallID,claimantSessionId:request.claimantSessionId,childSessionId,claimRevision:nextRevision,attempt:nextAttempt,leaseExpiresAt:currentTime+request.leaseMs,claimTokenDigest,preparedAt:currentTime});let credential={schemaVersion:1,authorityDigest:authority.authorityDigest,claimantCallID:request.claimantCallID,claimantSessionId:request.claimantSessionId,childSessionId,claimRevision:nextRevision,rawToken,leaseExpiresAt:currentTime+request.leaseMs,createdAt:currentTime},writtenCredentialPath=writeCredential(directory,credential);recordJournalEntry(directory,{schemaVersion:1,authorityDigest:authority.authorityDigest,state:"PREPARED",claimantCallID:request.claimantCallID,claimantSessionId:request.claimantSessionId,childSessionId,claimRevision:nextRevision,attempt:nextAttempt,leaseExpiresAt:currentTime+request.leaseMs,claimTokenDigest,preparedAt:currentTime,credentialInstalledAt:currentTime});let claimedAuthority={...authority,status:"claimed",claim:{claimantCallID:request.claimantCallID,claimantSessionId:request.claimantSessionId,childSessionId,claimRevision:nextRevision,attempt:nextAttempt,leaseExpiresAt:currentTime+request.leaseMs,claimTokenDigest,claimedAt:currentTime},claimCursor:{lastClaimRevision:nextRevision,lastAttempt:nextAttempt}},nextAuthorities=[...store.authorities];return nextAuthorities[authorityIndex]=claimedAuthority,_internals101.writeRecoveryStore(storePath4(directory),updateStore(store,nextAuthorities),"claim-commit"),recordJournalEntry(directory,{schemaVersion:1,authorityDigest:authority.authorityDigest,state:"COMMITTED",claimantCallID:request.claimantCallID,claimantSessionId:request.claimantSessionId,childSessionId,claimRevision:nextRevision,attempt:nextAttempt,leaseExpiresAt:currentTime+request.leaseMs,claimTokenDigest,preparedAt:currentTime,credentialInstalledAt:currentTime,committedAt:currentTime}),{ok:!0,authority:claimedAuthority,rawToken,credentialPath:writtenCredentialPath}}async function claimWorktreeRecoveryAuthority(directory,request){let release=acquireAuthorityLock(directory);if(!release)return baseMutationFailure("busy","worktree recovery authority store is locked");try{return await claimWorktreeRecoveryAuthorityUnlocked(directory,request)}finally{release()}}function renewWorktreeRecoveryClaimUnlocked(directory,request){let store=loadStoreWritable(directory);if("ok"in store)return store;let index=store.authorities.findIndex((authority2)=>authority2.authorityDigest===request.authorityDigest);if(index===-1)return baseMutationFailure("not_found","worktree recovery authority not found");let authority=store.authorities[index];if(!currentClaimMatches(authority,request))return baseMutationFailure("stale_claim","worktree recovery claim is stale or does not match the current claimant");let renewed={...authority,claim:{...authority.claim,leaseExpiresAt:nowMs2(request.now)+request.leaseMs}},nextAuthorities=[...store.authorities];return nextAuthorities[index]=renewed,_internals101.writeRecoveryStore(storePath4(directory),updateStore(store,nextAuthorities),"claim-renew"),writeCredential(directory,{schemaVersion:1,authorityDigest:renewed.authorityDigest,claimantCallID:renewed.claim.claimantCallID,claimantSessionId:renewed.claim.claimantSessionId,childSessionId:renewed.claim.childSessionId,claimRevision:renewed.claim.claimRevision,rawToken:request.rawToken,leaseExpiresAt:renewed.claim.leaseExpiresAt,createdAt:renewed.claim.claimedAt}),recordJournalEntry(directory,{schemaVersion:1,authorityDigest:renewed.authorityDigest,state:"CLAIM_RENEWED",claimantCallID:renewed.claim.claimantCallID,claimantSessionId:renewed.claim.claimantSessionId,childSessionId:renewed.claim.childSessionId,claimRevision:renewed.claim.claimRevision,attempt:renewed.claim.attempt,leaseExpiresAt:renewed.claim.leaseExpiresAt,claimTokenDigest:renewed.claim.claimTokenDigest,preparedAt:renewed.claim.claimedAt,committedAt:nowMs2(request.now),reason:"claim lease renewed"}),{ok:!0,authority:renewed}}function renewWorktreeRecoveryClaim(directory,request){let release=acquireAuthorityLock(directory);if(!release)return baseMutationFailure("busy","worktree recovery authority store is locked");try{return renewWorktreeRecoveryClaimUnlocked(directory,request)}finally{release()}}function releaseWorktreeRecoveryClaimUnlocked(directory,request){let store=loadStoreWritable(directory);if("ok"in store)return store;let index=store.authorities.findIndex((authority2)=>authority2.authorityDigest===request.authorityDigest);if(index===-1)return baseMutationFailure("not_found","worktree recovery authority not found");let authority=store.authorities[index];if(!currentClaimMatches(authority,request))return baseMutationFailure("stale_claim","worktree recovery claim is stale or does not match the current claimant");let released={...authority,status:"preserved",claim:void 0,claimCursor:authority.claim?{lastClaimRevision:authority.claim.claimRevision,lastAttempt:authority.claim.attempt}:authority.claimCursor},nextAuthorities=[...store.authorities];return nextAuthorities[index]=released,_internals101.writeRecoveryStore(storePath4(directory),updateStore(store,nextAuthorities),"claim-release"),recordJournalEntry(directory,{schemaVersion:1,authorityDigest:authority.authorityDigest,state:"RELEASED",claimantCallID:authority.claim.claimantCallID,claimantSessionId:authority.claim.claimantSessionId,childSessionId:authority.claim.childSessionId,claimRevision:authority.claim.claimRevision,attempt:authority.claim.attempt,leaseExpiresAt:authority.claim.leaseExpiresAt,claimTokenDigest:authority.claim.claimTokenDigest,preparedAt:authority.claim.claimedAt,committedAt:nowMs2(request.now),reason:"claim released after preserved settlement"}),removeCredentialIfMatch(directory,request),{ok:!0,authority:released}}function releaseWorktreeRecoveryClaim(directory,request){let release=acquireAuthorityLock(directory);if(!release)return baseMutationFailure("busy","worktree recovery authority store is locked");try{return releaseWorktreeRecoveryClaimUnlocked(directory,request)}finally{release()}}function finalizeWorktreeRecoveryAuthorityUnlocked(directory,request){let store=loadStoreWritable(directory);if("ok"in store)return store;let index=store.authorities.findIndex((authority2)=>authority2.authorityDigest===request.authorityDigest);if(index===-1)return baseMutationFailure("not_found","worktree recovery authority not found");let authority=store.authorities[index];if(!currentClaimMatches(authority,request))return baseMutationFailure("stale_claim","worktree recovery claim is stale or does not match the current claimant");let finalized={...authority,status:"finalized",claim:void 0,claimCursor:authority.claim?{lastClaimRevision:authority.claim.claimRevision,lastAttempt:authority.claim.attempt}:authority.claimCursor,finalizedAt:nowMs2(request.now),settlement:request.settlement},nextAuthorities=[...store.authorities];return nextAuthorities[index]=finalized,_internals101.writeRecoveryStore(storePath4(directory),updateStore(store,nextAuthorities),"claim-finalize"),recordJournalEntry(directory,{schemaVersion:1,authorityDigest:authority.authorityDigest,state:"FINALIZED",claimantCallID:authority.claim.claimantCallID,claimantSessionId:authority.claim.claimantSessionId,childSessionId:authority.claim.childSessionId,claimRevision:authority.claim.claimRevision,attempt:authority.claim.attempt,leaseExpiresAt:authority.claim.leaseExpiresAt,claimTokenDigest:authority.claim.claimTokenDigest,preparedAt:authority.claim.claimedAt,committedAt:nowMs2(request.now),reason:"claim finalized after landed settlement"}),removeCredentialIfMatch(directory,request),{ok:!0,authority:finalized}}function finalizeWorktreeRecoveryAuthority(directory,request){let release=acquireAuthorityLock(directory);if(!release)return baseMutationFailure("busy","worktree recovery authority store is locked");try{return finalizeWorktreeRecoveryAuthorityUnlocked(directory,request)}finally{release()}}function replayWorktreeRecoveryClaimJournalUnlocked(directory,options){let outcomes=[],storeScan=loadStoreStrict(directory),authorities=new Map((storeScan.status==="ok"?storeScan.authorities:[]).map((authority)=>[authority.authorityDigest,authority]));for(let entry of latestJournalEntriesByAuthority(loadJournal(directory))){if(entry.state==="ABORTED"||entry.state==="CLAIM_RENEWED"||entry.state==="RELEASED"||entry.state==="FINALIZED"){outcomes.push({authorityDigest:entry.authorityDigest,outcome:"noop"});continue}if(entry.state==="COMMITTED"){let current2=authorities.get(entry.authorityDigest);if(current2&&!current2.claim&¤t2.claimCursor?.lastClaimRevision===entry.claimRevision&&(current2.status==="preserved"||current2.status==="finalized")){recordJournalEntry(directory,{...entry,state:current2.status==="finalized"?"FINALIZED":"RELEASED",reason:"repaired terminal claim journal after interrupted settlement"}),removeCredentialIfMatch(directory,entry),outcomes.push({authorityDigest:entry.authorityDigest,outcome:"repaired_terminal_claim"});continue}if(current2?.claim&¤t2.claim.claimRevision===entry.claimRevision&¤t2.claim.claimTokenDigest===entry.claimTokenDigest){let credential2=readCredential(directory,entry.authorityDigest),released=credential2?releaseWorktreeRecoveryClaimUnlocked(directory,{authorityDigest:entry.authorityDigest,claimantCallID:entry.claimantCallID,claimRevision:entry.claimRevision,rawToken:credential2.rawToken}):void 0;outcomes.push({authorityDigest:entry.authorityDigest,outcome:released?.ok?"released_orphaned_committed_claim":"uncertain_committed_without_authority"})}else outcomes.push({authorityDigest:entry.authorityDigest,outcome:"uncertain_committed_without_authority"});continue}let current=authorities.get(entry.authorityDigest);if(current?.claim&¤t.claim.claimRevision===entry.claimRevision&¤t.claim.claimTokenDigest===entry.claimTokenDigest){recordJournalEntry(directory,{...entry,state:"COMMITTED",committedAt:nowMs2()}),outcomes.push({authorityDigest:entry.authorityDigest,outcome:"committed_claim_stable"});continue}let credential=readCredential(directory,entry.authorityDigest);if(credential&&credential.claimRevision===entry.claimRevision&&credential.claimantCallID===entry.claimantCallID){removeCredentialIfMatch(directory,entry),recordJournalEntry(directory,{...entry,state:"ABORTED",abortedAt:nowMs2(),reason:"removed uncommitted credential during replay"}),options?.onAbortPreparedClaim?.(entry),outcomes.push({authorityDigest:entry.authorityDigest,outcome:"removed_uncommitted_credential"});continue}recordJournalEntry(directory,{...entry,state:"ABORTED",abortedAt:nowMs2(),reason:"prepared claim never reached credential install or commit"}),options?.onAbortPreparedClaim?.(entry),outcomes.push({authorityDigest:entry.authorityDigest,outcome:"aborted_prepared_claim"})}return outcomes}function replayWorktreeRecoveryClaimJournal(directory,options){let release=acquireAuthorityLock(directory);if(!release)throw Error("worktree recovery authority store is locked");try{return replayWorktreeRecoveryClaimJournalUnlocked(directory,options)}finally{release()}}var STORE_RELATIVE_PATH,JOURNAL_RELATIVE_PATH,CREDENTIAL_DIRECTORY,AUTHORITY_LOCK_RELATIVE_PATH,AUTHORITY_LOCK_STALE_MS=600000,MAX_STORE_BYTES=2097152,MAX_STORE_AUTHORITIES=512,MAX_JOURNAL_BYTES2=2097152,MAX_JOURNAL_ENTRIES=512,MAX_CREDENTIAL_BYTES=16384,DEFAULT_MAX_ATTEMPTS=8,HEX_40_RE,_internals101;var init_worktree_recovery_authority=__esm(()=>{init_atomic_write();STORE_RELATIVE_PATH=path109.join(".swarm","worktree-merge-recovery-v2.json"),JOURNAL_RELATIVE_PATH=path109.join(".swarm","worktree-merge-recovery-v2-journal.json"),CREDENTIAL_DIRECTORY=path109.join(".swarm","worktree-recovery-claims"),AUTHORITY_LOCK_RELATIVE_PATH=path109.join(".swarm","locks","worktree-recovery-authority.lock"),HEX_40_RE=/^[0-9a-f]{40}$/i;_internals101={generateRawToken:()=>randomBytes7(32).toString("hex"),writeRecoveryStore:(targetPath,store,_phase)=>{atomicWriteSwarmFileSync(targetPath,JSON.stringify(store,null,2))},writeClaimJournal:(targetPath,journal)=>{atomicWriteSwarmFileSync(targetPath,JSON.stringify(journal,null,2))},writeCredentialFile:(targetPath,credential)=>{atomicWriteSwarmFileSync(targetPath,JSON.stringify(credential,null,2),{mode:384})},getRecoveryStorePath:storePath4,getClaimJournalPath:journalPath2,getCredentialPath:credentialPath,acquireAuthorityLock,readClaimJournal(directory){return loadJournal(directory)},resetForTest(){}}});import*as fs68 from"node:fs";import*as path110 from"node:path";function decodeTagPart(value){if(!value||!/^[A-Za-z0-9_-]+$/.test(value))return null;let decoded=Buffer.from(value,"base64url").toString("utf8");return decoded&&Buffer.from(decoded,"utf8").toString("base64url")===value?decoded:null}async function scanBackgroundWorktreeOwnershipTagsForRecovery(directory){try{fs68.statSync(path110.join(directory,".git"))}catch(error93){if(error93.code==="ENOENT")return{status:"ok",owners:[]};return{status:"uncertain",reason:`Git metadata could not be inspected: ${error93 instanceof Error?error93.message:String(error93)}`}}let proc;try{proc=bunSpawn([resolveGitExecutable(),"-C",directory,"for-each-ref",`--count=${MAX_OWNERSHIP_TAGS+1}`,"--format=%(refname:strip=2)%00%(objectname)","refs/tags/swarm-preserved-owner/"],{stdin:"ignore",stdout:"pipe",stderr:"ignore",timeout:OWNERSHIP_TAG_SCAN_TIMEOUT_MS});let exitCode=await proc.exited;if(exitCode!==0)return{status:"uncertain",reason:`ownership tag scan exited ${exitCode}`};let lines=(await proc.stdout.text()).split(/\r?\n/).map((line)=>line.trim()).filter(Boolean);if(lines.length>MAX_OWNERSHIP_TAGS)return{status:"uncertain",reason:`ownership tag scan exceeded the ${MAX_OWNERSHIP_TAGS}-tag safety bound`};let owners=[];for(let line of lines){let[tag,ref,...extra]=line.split("\x00"),segments=tag?.split("/")??[],sessionId=decodeTagPart(segments[1]??""),laneId=decodeTagPart(segments[2]??""),callDigest=segments[3];if(extra.length>0||segments.length!==4||segments[0]!=="swarm-preserved-owner"||!sessionId||!laneId||!callDigest||!/^[0-9a-f]{12}$/.test(callDigest)||!ref||!/^[0-9a-f]{40,64}$/i.test(ref))return{status:"uncertain",reason:`malformed background ownership tag entry "${tag??""}"`};owners.push({sessionId,laneId,callDigest,ref})}return{status:"ok",owners}}catch(error93){return{status:"uncertain",reason:`ownership tag scan failed: ${error93 instanceof Error?error93.message:String(error93)}`}}finally{try{proc?.kill()}catch{}}}var OWNERSHIP_TAG_SCAN_TIMEOUT_MS=2000,MAX_OWNERSHIP_TAGS=512;var init_worktree_ownership_tag=__esm(()=>{init_bun_compat();init_git_executable()});var exports_worktree_collision_ownership={};__export(exports_worktree_collision_ownership,{inspectStandardWorktreeCollisionOwnership:()=>inspectStandardWorktreeCollisionOwnership,_internals:()=>_internals102});import*as fs69 from"node:fs";function descriptorCoordinateMatch(descriptor,identity){let branchMatches=descriptor.branchName===identity.branchName,pathMatches2=canonicalRootKeyFresh(descriptor.worktreePath)===canonicalRootKeyFresh(identity.worktreePath);if(!branchMatches&&!pathMatches2)return"none";if(!branchMatches||!pathMatches2||descriptor.parentSessionId!==identity.parentSessionId||descriptor.taskId!==identity.taskId)return"uncertain";return"exact"}function isProvenSettled(record3){let settlement=record3.coderSettlement;return settlement?.state==="settled"&&settlement.outcome?.kind==="standard-worktree"&&(settlement.outcome.result==="merged"||settlement.outcome.result==="unchanged")}function classifyRecord(record3,identity,ownerKind){if(!record3.worktree)return null;let coordinates=descriptorCoordinateMatch(record3.worktree,identity);if(coordinates==="none")return null;if(coordinates==="uncertain")return{status:"uncertain",reason:`${ownerKind} background owner has conflicting identity for branch "${identity.branchName}"`};if(isProvenSettled(record3))return null;let lifecycle=record3.coderSettlement?.state==="preserved"?"preserved":"active";return{status:"protected",ownerKind,lifecycle,reason:`${ownerKind} background owner ${record3.correlationId} is ${record3.status}`+(record3.coderSettlement?` with coder settlement ${record3.coderSettlement.state}`:" without a settled workspace outcome")}}async function inspectStandardWorktreeCollisionOwnership(identity){let provisioning=scanWorktreeProvisioningOwnersForRecovery(identity.directory);if(provisioning.status==="uncertain")return provisioning;let now=Date.now();for(let owner of provisioning.owners){if(!(owner.parentSessionId===identity.parentSessionId||owner.worktreeSessionId===identity.parentSessionId))continue;if(owner.schemaVersion===1||owner.taskId===identity.taskId){let leaseIsLive=now-owner.createdAt<=WORKTREE_PROVISIONING_OWNER_LEASE_MS;if(!leaseIsLive)try{_internals102.statSync(identity.worktreePath)}catch(error93){let code=error93.code;if(code!=="ENOENT"&&code!=="ENOTDIR")return{status:"uncertain",reason:`expired provisioning owner ${owner.callID} lane liveness is unreadable: ${error93 instanceof Error?error93.message:String(error93)}`};if(!_internals102.removeWorktreeProvisioningOwner(identity.directory,owner.callID,owner.schemaVersion===3?{reservationId:owner.reservationId,generation:owner.generation,branchName:owner.branchName}:void 0))return{status:"uncertain",reason:`expired provisioning owner ${owner.callID} could not be removed`};continue}return{status:"protected",ownerKind:"provisioning",lifecycle:"active",reason:!leaseIsLive?`provisioning owner ${owner.callID} lease expired, but its exact lane path still exists`:owner.schemaVersion===1?`legacy provisioning owner ${owner.callID} cannot disprove ownership of this same-session lane`:`provisioning owner ${owner.callID} is active for task ${identity.taskId}`}}}let fallback=await scanDelegationFallbacksForRecovery(identity.directory);if(fallback.status==="uncertain")return fallback;for(let artifact of fallback.owners){let classified=classifyRecord(artifact.record,identity,"fallback");if(classified)return classified}let primary=scanDelegationsForRecovery(identity.directory);if(primary.status==="uncertain")return primary;for(let record3 of primary.owners){let classified=classifyRecord(record3,identity,"primary");if(classified)return classified}let tags=await scanBackgroundWorktreeOwnershipTagsForRecovery(identity.directory);if(tags.status==="uncertain")return tags;for(let owner of tags.owners)if(owner.sessionId===identity.parentSessionId&&owner.laneId===identity.taskId)return{status:"protected",ownerKind:"ownership-tag",lifecycle:"preserved",reason:`durable ownership tag ${owner.callDigest} preserves this same-session lane`};let mergeStatus=scanWorktreeMergeFailuresForRecovery(identity.directory);if(mergeStatus.status==="uncertain")return mergeStatus;for(let[,failure]of mergeStatus.failures){let branchMatches=failure.branch===identity.branchName,pathMatches2=typeof failure.worktreePath==="string"&&canonicalRootKeyFresh(failure.worktreePath)===canonicalRootKeyFresh(identity.worktreePath);if(!branchMatches&&!pathMatches2)continue;if(!branchMatches||!pathMatches2)return{status:"uncertain",reason:`merge-status owner has conflicting identity for branch "${identity.branchName}"`};return{status:"protected",ownerKind:"merge-status",lifecycle:"preserved",reason:`merge-status records ${failure.outcome} at stage ${failure.stage}`}}return{status:"unowned"}}var _internals102;var init_worktree_collision_ownership=__esm(()=>{init_pending_delegations();init_canonical_root();init_worktree_merge_status();init_worktree_ownership_tag();init_worktree_provisioning_owner();_internals102={statSync:fs69.statSync,removeWorktreeProvisioningOwner}});var exports_worktree_isolation={};__export(exports_worktree_isolation,{standardWorktreeSerializationSessions:()=>standardWorktreeSerializationSessions,standardWorktreeByCallID:()=>standardWorktreeByCallID,sanitizeWorktreeTaskId:()=>sanitizeWorktreeTaskId,runSerializedWithMergeBacks:()=>runSerializedWithMergeBacks,resolveWorktreeIsolationConfig:()=>resolveWorktreeIsolationConfig,resetStandardWorktreeIsolationState:()=>resetStandardWorktreeIsolationState,recordLaneChildSession:()=>recordLaneChildSession,readLaneEnvFileFromDisk:()=>readLaneEnvFileFromDisk,preserveDirtyWorktreeForCallId:()=>preserveDirtyWorktreeForCallId,preserveDirtyWorktreeAtPath:()=>preserveDirtyWorktreeAtPath,preserveBackgroundWorktreeOwnershipForCallId:()=>preserveBackgroundWorktreeOwnershipForCallId,precreateStandardWorktreeSession:()=>precreateStandardWorktreeSession,preProvisionCollisionCheck:()=>preProvisionCollisionCheck,parseLeanLaneIndex:()=>parseLeanLaneIndex,laneChildSessionAgents:()=>laneChildSessionAgents,isLaneOwnedByCurrentSession:()=>isLaneOwnedByCurrentSession,getStandardWorktreeDegradationReason:()=>getStandardWorktreeDegradationReason,finishStandardWorktreeDispatch:()=>finishStandardWorktreeDispatch,computeLaneRuntimeProfile:()=>computeLaneRuntimeProfile,cleanupStandardWorktreeForCallId:()=>cleanupStandardWorktreeForCallId,checkStandardWorktreeSerializationRelease:()=>checkStandardWorktreeSerializationRelease,awaitingMergeByCallID:()=>awaitingMergeByCallID,assertTaskIdNotForeignLaneSession:()=>assertTaskIdNotForeignLaneSession,abortStandardWorktreeDispatch:()=>abortStandardWorktreeDispatch,_internals:()=>_internals96,MAX_TRACKED_STANDARD_WORKTREE_CALLS:()=>MAX_TRACKED_STANDARD_WORKTREE_CALLS});import{createHash as createHash51}from"node:crypto";import*as fs70 from"node:fs/promises";import*as path111 from"node:path";function parseLeanLaneIndex(laneId){let match=/^lane-(\d+)$/.exec(laneId);if(match){let n=parseInt(match[1],10);return Number.isNaN(n)?0:n-1}return 0}function computeLaneRuntimeProfile(runtime,laneIndex,worktreePath){if(!runtime?.enabled)return;let portStride=runtime.port_stride??1,envOverrides={};if(runtime.port_base!==void 0){let portBase=runtime.port_base,port=Math.min(portBase+laneIndex*portStride,65535);envOverrides.PORT=String(port)}if(runtime.env_overrides)Object.assign(envOverrides,runtime.env_overrides);if(runtime.cache_redirects)for(let[envName,basePath]of Object.entries(runtime.cache_redirects)){let laneSuffix=path111.join(basePath,`lane-${laneIndex}`);envOverrides[envName]=laneSuffix}return{laneIndex,worktreePath,envOverrides}}function allocateStandardLaneIndex(parentSessionID){let current=standardWorktreeLaneIndexBySession.get(parentSessionID)??0;return standardWorktreeLaneIndexBySession.set(parentSessionID,current+1),current}function recordLaneChildSession(sessionId,agent){laneChildSessionAgents.delete(sessionId),laneChildSessionAgents.set(sessionId,agent);while(laneChildSessionAgents.size>LANE_CHILD_SESSION_LIMIT){let oldest=laneChildSessionAgents.keys().next().value;if(oldest===void 0)break;laneChildSessionAgents.delete(oldest)}}function assertTaskIdNotForeignLaneSession(args2){if(!args2)return;let taskId=typeof args2.task_id==="string"?args2.task_id.trim():"";if(!taskId)return;let owner=laneChildSessionAgents.get(taskId);if(owner===void 0)return;let requested=typeof args2.subagent_type==="string"?stripKnownSwarmPrefix(args2.subagent_type).toLowerCase():"";if(requested===owner)return;throw Error(`TASK_SESSION_RESUME_MISMATCH: task_id "${taskId}" is the session this plugin created for an isolated ${owner} lane; passing it would resume that ${owner} session as ${requested||"another agent"} (its lane, history and scope). `+'Set task_id to the plan task id (e.g. "1.1") or omit it; never pass a `ses_…` id returned in a Task result '+`for a different agent. Omitting it starts a fresh ${requested||"agent"} session.`)}async function createSessionWithinBudget(promise3,label,onLateResolve,timeoutMs=_internals96.worktreeSessionCreateTimeoutMs){let settled=new Promise((resolveState)=>{promise3.then((result)=>resolveState({status:"fulfilled",result}),()=>resolveState({status:"rejected"}))});try{return await withTimeout(promise3,timeoutMs,Error(`${label} deadline expired after ${timeoutMs}ms (worktree.session_create_timeout_ms)`))}catch(error93){let teardown=settled.then(async(state2)=>{if(state2.status==="fulfilled")await onLateResolve?.(state2.result)},()=>{}).catch((teardownError)=>{log(`[worktree-isolation] ${label} late-settle teardown failed: ${teardownError instanceof Error?teardownError.message:String(teardownError)}`)});throw await withTimeout(teardown,_internals96.worktreeSessionCreateSettleGraceMs,Error(`${label} settle grace expired`)).catch(()=>{}),error93}}function resolveSessionCreateTimeoutMs(args2){return args2.config?.worktree?.session_create_timeout_ms??_internals96.worktreeSessionCreateTimeoutMs}async function handleStrandedLane(lane){recordDeadLaneReclaim(lane.directory,{lanePath:lane.lanePath,branchName:lane.branchName,parentSessionId:lane.parentSessionID,taskId:lane.taskId,reason:lane.reason});let session=ensureAgentSession(lane.parentSessionID);pushAdvisory(session,`WORKTREE_LANE_STRANDED: lane ${lane.lanePath} could not be removed (${lane.reason}). A child session or system process may hold .swarm/swarm.db (WAL); its DB handle was released via closeProjectDb before this attempt. reclaim scheduled at next start.`)}function rememberStandardWorktreeDispatch(dispatch){standardWorktreeByCallID.set(dispatch.callID,dispatch)}function resolveRecoveryTaskId(input){return input.planTaskId??input.taskId}function toRecoveryStrategy(strategy){return strategy}function hasStandardWorktreeDispatchCapacity(){return standardWorktreeByCallID.size<MAX_TRACKED_STANDARD_WORKTREE_CALLS}function hasInFlightStandardWorktreeDispatch(parentSessionID){for(let dispatch of standardWorktreeByCallID.values())if(dispatch.parentSessionID===parentSessionID)return!0;for(let record3 of awaitingMergeByCallID.values())if(record3.parentSessionID===parentSessionID)return!0;return!1}function handleStandardWorktreeFailure(parentSessionID,policy,message){if(policy==="required")throw new StandardWorktreeLifecycleError(message);if(hasInFlightStandardWorktreeDispatch(parentSessionID))throw new StandardWorktreeLifecycleError(`STANDARD_WORKTREE_ISOLATION_UNSAFE: ${message} Sibling coder task(s) are isolated in worktrees for this session, so dispatching this coder un-isolated in the main tree would risk a merge-back collision. Wait for in-flight coder task(s) to be reviewed and merged, then retry.`);serializeStandardWorktreeDispatches(parentSessionID,message)}function resolveWorktreeLifecycleLockWaitMs(sessionCreateTimeoutMs){let createMs=Math.max(0,sessionCreateTimeoutMs),coverHolder=createMs+WORKTREE_LIFECYCLE_LOCK_WAIT_MARGIN_MS,roomInHook=WORKTREE_DISPATCH_HOOK_BUDGET_MS-createMs-WORKTREE_SESSION_CREATE_SETTLE_GRACE_MS-WORKTREE_PROVISION_ALLOWANCE_MS;return Math.max(WORKTREE_LIFECYCLE_LOCK_WAIT_MIN_MS,Math.min(coverHolder,roomInHook))}async function acquireWorktreeLifecycleLockWithin(directory,taskId,waitMs){let deadline=_internals96.now()+Math.max(0,waitMs);for(;;){let attempt=await _internals96.tryAcquireWorktreeLifecycleLock(directory,WORKTREE_LIFECYCLE_LOCK_FILE,"worktree-provisioning",taskId);if(attempt.acquired)return attempt;let remaining=deadline-_internals96.now();if(remaining<=0)return attempt;await _internals96.sleep(Math.min(remaining,50+Math.floor(Math.random()*200)))}}function hardStopStandardWorktreeLifecycle(parentSessionID,message){let session=ensureAgentSession(parentSessionID);throw pushAdvisory(session,message),new StandardWorktreeLifecycleError(message)}function serializeStandardWorktreeDispatches(sessionID,message){if(!rememberStandardWorktreeSerializationSession(sessionID)){let session2=ensureAgentSession(sessionID);pushAdvisory(session2,`${message} Serialization tracking is at capacity (256 sessions active); continuing in normal parallel mode.`);return}standardWorktreeDegradationReasonBySession.set(sessionID,{reason:message,at:Date.now()});let session=ensureAgentSession(sessionID);session.maxConcurrencyOverride=1,pushAdvisory(session,`${message} Serializing standard coder dispatches for this session.`)}function getStandardWorktreeDegradationReason(sessionID){return standardWorktreeDegradationReasonBySession.get(sessionID)}function resetStandardWorktreeIsolationState(){standardWorktreeByCallID.clear(),standardWorktreeSerializationSessions.clear(),laneChildSessionAgents.clear(),serializationStateBySessionID.clear(),standardWorktreeDegradationReasonBySession.clear(),awaitingMergeByCallID.clear(),standardWorktreeMergeQueue=Promise.resolve(),standardWorktreeLaneIndexBySession.clear()}function releaseStandardWorktreeSerialization(sessionID){if(!standardWorktreeSerializationSessions.has(sessionID))return!1;standardWorktreeSerializationSessions.delete(sessionID),serializationStateBySessionID.delete(sessionID),standardWorktreeDegradationReasonBySession.delete(sessionID);let session=ensureAgentSession(sessionID);return session.maxConcurrencyOverride=void 0,pushAdvisory(session,`WORKTREE_SERIALIZATION_RELEASED: ${sessionID} regains parallel dispatch eligibility (release-after-dispatches or TTL).`),!0}function checkStandardWorktreeSerializationRelease(sessionID,config3){let state2=serializationStateBySessionID.get(sessionID);if(!state2)return;let count2=config3.serialization_release_after_dispatches??5,ttl=config3.serialization_release_after_ms??60000;if(state2.successfulDispatchesSince>=count2){releaseStandardWorktreeSerialization(sessionID);return}if(Date.now()-state2.serializedAt>=ttl)releaseStandardWorktreeSerialization(sessionID)}function rememberStandardWorktreeSerializationSession(sessionID){if(standardWorktreeSerializationSessions.size>=MAX_TRACKED_STANDARD_WORKTREE_CALLS){let evicted=!1;for(let key2 of serializationStateBySessionID.keys())if(!hasInFlightStandardWorktreeDispatch(key2)){standardWorktreeSerializationSessions.delete(key2),serializationStateBySessionID.delete(key2),standardWorktreeDegradationReasonBySession.delete(key2),evicted=!0;break}if(!evicted)return log(`[worktree-isolation] serialization set at cap with all sessions active; refusing eviction for ${sessionID}`),!1}if(standardWorktreeSerializationSessions.add(sessionID),!serializationStateBySessionID.has(sessionID))serializationStateBySessionID.set(sessionID,{sessionID,serializedAt:Date.now(),successfulDispatchesSince:0});return!0}function sanitizeWorktreeTaskId(raw){return raw.replace(/[^A-Za-z0-9._-]/g,"-").slice(0,64)||"task"}async function preProvisionCollisionCheck(taskId,directory,_sessionId){let proc;try{proc=_internals96.bunSpawn([_internals96.resolveGitExecutable(),"-C",directory,"worktree","list","--porcelain"],{stdin:"ignore",stdout:"pipe",stderr:"pipe",timeout:WORKTREE_LIST_TIMEOUT_MS})}catch(error93){let detail=`git worktree list could not start in ${directory}: ${error93 instanceof Error?error93.message:String(error93)}`;return log(`[swarm] preProvisionCollisionCheck: ${detail}`),{collision:!1,uncertainty:detail}}let stdout="",stderr="";try{let exitCode=await proc.exited;if(stdout=await proc.stdout.text(),stderr=await proc.stderr.text(),exitCode!==0){if(stderr.toLowerCase().includes("not a git repository"))return{collision:!1};return log(`[swarm] preProvisionCollisionCheck: git worktree list failed (exit ${exitCode}): ${stderr}`),{collision:!1,uncertainty:stderr.trim()||`git worktree list exited ${exitCode}`}}}finally{try{proc.kill()}catch{}}let entries=[],current={path:"",branch:void 0,prunable:!1};for(let rawLine of stdout.split(`
|
|
1271
|
-
`)){let line=rawLine.trim();if(line.startsWith("worktree ")){if(current.path)entries.push(current);current={path:line.slice(9),branch:void 0,prunable:!1}}else if(line.startsWith("branch "))current.branch=line.slice(7);else if(line==="prunable"||line.startsWith("prunable "))current.prunable=!0}if(current.path)entries.push(current);for(let entry of entries){if(!entry.branch)continue;if(entry.prunable)continue;let branchName=entry.branch.startsWith("refs/heads/")?entry.branch.slice(11):entry.branch,segments=branchName.split("/");if(segments.length>=4&&segments[0]==="swarm"&&segments[1]==="lane"){if(segments[3]===taskId){let ownerSessionId=segments[2];return{collision:!0,existingBranch:branchName,ownerSessionId,worktreePath:entry.path}}}if(segments.length>=3&&segments[0]==="swarm-lane"){if(segments[2]===taskId){let ownerSessionId=segments[1];return{collision:!0,existingBranch:branchName,ownerSessionId,worktreePath:entry.path}}}}return{collision:!1}}function isLaneOwnedByCurrentSession(branchName,expectedSessionId){return _internals38.extractSessionId(branchName)===expectedSessionId}async function inspectStandardWorktreeCollisionOwnership2(identity){return(await Promise.resolve().then(() => (init_worktree_collision_ownership(),exports_worktree_collision_ownership))).inspectStandardWorktreeCollisionOwnership(identity)}async function runRecoveryGit(directory,args2,timeoutMs=15000){let proc;try{proc=_internals96.bunSpawn([_internals96.resolveGitExecutable(),"-C",directory,...args2],{stdin:"ignore",stdout:"pipe",stderr:"pipe",timeout:timeoutMs,env:{...process.env,LC_ALL:"C"}});let exitCode=await proc.exited,stdout=await proc.stdout.text(),stderr=await proc.stderr.text();return{exitCode,stdout,stderr}}catch(error93){return{exitCode:1,stdout:"",stderr:error93 instanceof Error?error93.message:String(error93)}}finally{try{proc?.kill()}catch{}}}async function pathExists3(targetPath){try{return await fs70.stat(targetPath),!0}catch{return!1}}async function buildWorktreeRecoveryPublishIdentity(input){let mergeBase=await runRecoveryGit(input.directory,["merge-base",input.provenance.targetHeadBefore,input.provenance.sourceHead]),mergeBaseOid=mergeBase.stdout.trim();if(mergeBase.exitCode!==0||!/^[0-9a-f]{40}$|^[0-9a-f]{64}$/.test(mergeBaseOid))return;let targetHead=await runRecoveryGit(input.directory,["rev-parse","HEAD"]),targetHeadOid=targetHead.stdout.trim();if(targetHead.exitCode!==0||!/^[0-9a-f]{40}$|^[0-9a-f]{64}$/.test(targetHeadOid))return;return{originalCallID:input.dispatch.callID,parentSessionId:input.dispatch.parentSessionID,taskId:input.taskId,reservationId:input.dispatch.reservationId??`worktree:${input.dispatch.parentSessionID}:${input.taskId}`,generation:input.dispatch.generation??1,canonicalBranch:input.dispatch.canonicalBranch??input.dispatch.handle.branchName,canonicalPath:input.dispatch.canonicalPath??input.dispatch.handle.worktreePath,laneBranch:input.dispatch.handle.branchName,lanePath:input.dispatch.handle.worktreePath,expectedPrimaryHead:input.provenance.targetHeadBefore,sourceBaseOid:mergeBaseOid,sourceHeadOid:input.provenance.sourceHead,targetHeadOid,strategy:toRecoveryStrategy(input.provenance.strategy),...input.conflictFiles&&input.conflictFiles.length>0?{declaredConflictFiles:input.conflictFiles}:{}}}async function publishRecoveryAuthorityForSettlement(input){if(input.dispatch.recoveryClaim||!input.provenance)return{ok:!0};let identity=await _internals96.buildWorktreeRecoveryPublishIdentity({directory:input.directory,dispatch:input.dispatch,taskId:input.taskId,provenance:input.provenance,conflictFiles:input.conflictFiles});if(!identity)return{ok:!1,code:"identity_unavailable",reason:"worktree recovery publish identity could not be derived from the merge provenance"};let published=_internals96.publishWorktreeRecoveryAuthority(input.directory,identity);return published.ok?{ok:!0}:{ok:!1,code:published.code,reason:published.reason}}function isExactRecoveryClaimantStillActive(authority){let claim=authority.claim;if(!claim)return!1;if(standardWorktreeByCallID.has(claim.claimantCallID)||awaitingMergeByCallID.has(claim.claimantCallID))return!0;let childSession=swarmState.agentSessions.get(claim.childSessionId);if(!childSession?.workspaceDirectory?.trim())return!1;return sameProjectRoot(childSession.workspaceDirectory,authority.immutable.lanePath)}function describeRecoveryMutationFailure(input){return`recovery claim ${input.action} failed (${input.code}): ${input.reason}`}function maybeSelectRecoverableAuthority(lookup,collision){if(lookup.status!=="ok")return{status:"uncertain",reason:lookup.reason};let authority=lookup.authorities.find((candidate)=>candidate.status!=="finalized"&&candidate.immutable.laneBranch===collision.existingBranch&&candidate.immutable.lanePath===collision.worktreePath);return authority?{status:"match",authority}:{status:"none"}}async function precreateStandardWorktreeSession(args2){let configuredWorktree=resolveWorktreeIsolationConfig(args2.config),worktreeConfig=args2.isolationRequired&&configuredWorktree.policy==="auto"?{...configuredWorktree,policy:"required"}:configuredWorktree;if(worktreeConfig.policy==="disabled")return;if(standardWorktreeSerializationSessions.has(args2.parentSessionID)){if(checkStandardWorktreeSerializationRelease(args2.parentSessionID,worktreeConfig),!standardWorktreeSerializationSessions.has(args2.parentSessionID))return}if(!hasStandardWorktreeDispatchCapacity()){if(worktreeConfig.policy==="required")throw Error("STANDARD_WORKTREE_TRACKING_CAP_EXCEEDED: too many standard worktree coder dispatches are already awaiting merge-back.");serializeStandardWorktreeDispatches(args2.parentSessionID,"STANDARD_WORKTREE_TRACKING_CAP_EXCEEDED: too many standard worktree coder dispatches are already awaiting merge-back.");return}let client=swarmState.opencodeClient;if(!client){handleStandardWorktreeFailure(args2.parentSessionID,worktreeConfig.policy,"STANDARD_WORKTREE_ISOLATION_UNAVAILABLE: OpenCode SDK client is unavailable; standard parallel coder work cannot be isolated.");return}let laneIndex=allocateStandardLaneIndex(args2.parentSessionID),provisioningOwnerIdentity={reservationId:args2.reservationId??`foreground:${args2.parentSessionID}:${resolveRecoveryTaskId(args2)}:${args2.callID}`,generation:Math.max(1,args2.generation??1),branchName:makeWorktreeBranchName(args2.parentSessionID,args2.taskId,{purpose:"lane"})},recoveryLaunch,lifecycleLockWaitMs=resolveWorktreeLifecycleLockWaitMs(resolveSessionCreateTimeoutMs(args2)),lifecycleLock=await acquireWorktreeLifecycleLockWithin(args2.directory,args2.taskId,lifecycleLockWaitMs);if(!lifecycleLock.acquired)hardStopStandardWorktreeLifecycle(args2.parentSessionID,`STANDARD_WORKTREE_LIFECYCLE_BUSY: the worktree lifecycle lock stayed busy for ${Math.round(lifecycleLockWaitMs/1000)}s (another lane is provisioning or init orphan recovery is running); retry this coder dispatch. `+"The wait follows worktree.session_create_timeout_ms: that budget plus 5s, at least 10s, and — up to the default 30s budget — short enough that this dispatch (its own session create and worktree provisioning included) still fits the 60s host hook budget.");try{let collision=await _internals96.preProvisionCollisionCheck(args2.taskId,args2.directory,args2.parentSessionID);if(collision.uncertainty)hardStopStandardWorktreeLifecycle(args2.parentSessionID,`STANDARD_WORKTREE_COLLISION_SCAN_UNCERTAIN: ${collision.uncertainty}. Destructive cleanup and provisioning were blocked.`);if(collision.collision){if(!collision.existingBranch||!collision.worktreePath||!isLaneOwnedByCurrentSession(collision.existingBranch,args2.parentSessionID)){let ownerInfo=collision.ownerSessionId?` owned by session ${collision.ownerSessionId}`:" with uncertain ownership";hardStopStandardWorktreeLifecycle(args2.parentSessionID,`PREPROVISION_COLLISION: task ${args2.taskId} already has a lane on branch ${collision.existingBranch??"unknown"}${ownerInfo}; cleanup and provisioning were blocked.`)}for(let dispatch of _internals96.standardWorktreeByCallID.values())if(dispatch.handle.branchName===collision.existingBranch)hardStopStandardWorktreeLifecycle(args2.parentSessionID,`PREPROVISION_COLLISION_ACTIVE: branch ${collision.existingBranch} is still tracked by an active standard-worktree dispatch.`);for(let record3 of _internals96.awaitingMergeByCallID.values())if(record3.branch===collision.existingBranch)hardStopStandardWorktreeLifecycle(args2.parentSessionID,`PREPROVISION_COLLISION_AWAITING_MERGE: branch ${collision.existingBranch} is still awaiting merge-back.`);let recoveryCandidate=maybeSelectRecoverableAuthority(_internals96.lookupWorktreeRecoveryAuthoritiesByTask(args2.directory,{parentSessionId:args2.parentSessionID,taskId:resolveRecoveryTaskId(args2)}),collision);if(recoveryCandidate.status==="uncertain")hardStopStandardWorktreeLifecycle(args2.parentSessionID,`STANDARD_WORKTREE_RECOVERY_AUTHORITY_UNCERTAIN: ${recoveryCandidate.reason}. Recovery re-dispatch was blocked.`);if(recoveryCandidate.status==="match"){let recoveredChildSessionId="",claimed;try{claimed=await _internals96.claimWorktreeRecoveryAuthority(args2.directory,{authorityDigest:recoveryCandidate.authority.authorityDigest,claimantCallID:args2.callID,claimantSessionId:args2.parentSessionID,leaseMs:WORKTREE_RECOVERY_CLAIM_LEASE_MS,createChildSession:async()=>{let createResult=await createSessionWithinBudget(client.session.create({body:{parentID:args2.parentSessionID,title:`${args2.description??args2.taskId} (worktree recovery lane)`},query:{directory:collision.worktreePath}}),"STANDARD_WORKTREE_RECOVERY_SESSION_CREATE",async(result)=>{let lateChildSessionId=result.data?.id;if(lateChildSessionId){let verification=await teardownEphemeralSessionVerified(client.session,lateChildSessionId);if(!verification.ok)pushAdvisory(ensureAgentSession(args2.parentSessionID),`WORKTREE_RECOVERY_CHILD_SESSION_LEAKED: recovery child session ${lateChildSessionId} survived verified teardown (${verification.reason}); it holds the lane swarm.db at ${collision.worktreePath}. Retry the dispatch or restart the host to release it.`)}},resolveSessionCreateTimeoutMs(args2));if(recoveredChildSessionId=createResult.data?.id??"",!recoveredChildSessionId){let createError=createResult.error;throw Error(typeof createError==="string"?createError:JSON.stringify(createError??"missing session id"))}return recoveredChildSessionId},revalidateExpiredClaim:async({authority})=>{if(isExactRecoveryClaimantStillActive(authority))return{ok:!1,reason:"expired recovery claim still belongs to a live claimant session or dispatch"};if(authority.immutable.laneBranch!==collision.existingBranch||authority.immutable.lanePath!==collision.worktreePath)return{ok:!1,reason:"preserved lane coordinates drifted before claim transfer"};try{await fs70.stat(authority.immutable.lanePath)}catch{return{ok:!1,reason:"preserved lane path is no longer live"}}let laneHead=await runRecoveryGit(args2.directory,["rev-parse",`${authority.immutable.laneBranch}^{commit}`]);if(laneHead.exitCode!==0||laneHead.stdout.trim()!==authority.immutable.sourceHeadOid)return{ok:!1,reason:"preserved lane head changed since authority publication"};return{ok:!0}}})}catch(error93){if(_internals96.replayWorktreeRecoveryClaimJournal(args2.directory),recoveredChildSessionId){let verification=await teardownEphemeralSessionVerified(client.session,recoveredChildSessionId);if(!verification.ok)pushAdvisory(ensureAgentSession(args2.parentSessionID),`WORKTREE_RECOVERY_CHILD_SESSION_LEAKED: recovery child session ${recoveredChildSessionId} survived verified teardown (${verification.reason}); it holds the lane swarm.db at ${collision.worktreePath}. Retry the dispatch or restart the host to release it.`)}hardStopStandardWorktreeLifecycle(args2.parentSessionID,`STANDARD_WORKTREE_RECOVERY_SESSION_CREATE_FAILED: ${error93 instanceof Error?error93.message:String(error93)}. The PREPARED claim was rolled back and recovery re-dispatch was blocked.`)}if(!claimed.ok)hardStopStandardWorktreeLifecycle(args2.parentSessionID,`STANDARD_WORKTREE_RECOVERY_CLAIM_FAILED: ${claimed.reason}. The recovery child session ${recoveredChildSessionId} was created but the preserved lane was not reassigned.`);recoveryLaunch={childSessionId:recoveredChildSessionId,worktreePath:collision.worktreePath,branchName:collision.existingBranch,strategy:recoveryCandidate.authority.immutable.strategy,reservationId:recoveryCandidate.authority.immutable.reservationId,generation:recoveryCandidate.authority.immutable.generation,provisioningOwner:{reservationId:recoveryCandidate.authority.immutable.reservationId,generation:recoveryCandidate.authority.immutable.generation,branchName:collision.existingBranch},canonicalBranch:recoveryCandidate.authority.immutable.canonicalBranch,canonicalPath:recoveryCandidate.authority.immutable.canonicalPath,recoveryClaim:{authorityDigest:recoveryCandidate.authority.authorityDigest,claimRevision:claimed.authority.claim?.claimRevision??recoveryCandidate.authority.claimCursor?.lastClaimRevision??1,rawToken:claimed.rawToken,coordinates:{sourceBaseOid:recoveryCandidate.authority.immutable.sourceBaseOid,sourceHeadOid:recoveryCandidate.authority.immutable.sourceHeadOid,targetHeadOid:recoveryCandidate.authority.immutable.targetHeadOid,strategy:recoveryCandidate.authority.immutable.strategy}}}}if(!recoveryLaunch){let ownership=await _internals96.inspectStandardWorktreeCollisionOwnership({directory:args2.directory,parentSessionId:args2.parentSessionID,taskId:args2.taskId,branchName:collision.existingBranch,worktreePath:collision.worktreePath});if(ownership.status==="uncertain")hardStopStandardWorktreeLifecycle(args2.parentSessionID,`STANDARD_WORKTREE_OWNERSHIP_UNCERTAIN: ${ownership.reason}. Destructive cleanup and provisioning were blocked.`);if(ownership.status==="protected")hardStopStandardWorktreeLifecycle(args2.parentSessionID,`STANDARD_WORKTREE_OWNER_PROTECTED: ${ownership.ownerKind} owner is ${ownership.lifecycle}; ${ownership.reason}. Destructive cleanup and provisioning were blocked.`);let collisionPathExists=!0;try{await fs70.stat(collision.worktreePath)}catch(error93){let code=error93.code;if(code==="ENOENT"||code==="ENOTDIR")collisionPathExists=!1;else hardStopStandardWorktreeLifecycle(args2.parentSessionID,`STANDARD_WORKTREE_COLLISION_PATH_STAT_FAILED: ${error93 instanceof Error?error93.message:String(error93)}. Destructive cleanup and provisioning were blocked.`)}if(collisionPathExists){let preserveResult=await _internals96.preserveDirtyWorktreeAtPath(collision.worktreePath,collision.existingBranch,"denied",args2.directory,worktreeConfig.worktree_dir);if(preserveResult.outcome==="preserve-failed")hardStopStandardWorktreeLifecycle(args2.parentSessionID,`STANDARD_WORKTREE_PRESERVATION_FAILED_ABORT_CLEANUP: pre-provision collision for task ${args2.taskId} could not be preserved (${preserveResult.error}). Cleanup and provisioning were blocked.`);closeProjectDb(collision.worktreePath);let removeResult=await _internals96.removeWorktree(collision.worktreePath,args2.directory,{force:!0,worktreeDir:worktreeConfig.worktree_dir});if("error"in removeResult)hardStopStandardWorktreeLifecycle(args2.parentSessionID,`STANDARD_WORKTREE_COLLISION_REMOVE_FAILED: ${removeResult.error}. Provisioning was blocked.`);let cleanupResult=await _internals96.postMergeCleanup(args2.directory,collision.existingBranch);if("error"in cleanupResult)hardStopStandardWorktreeLifecycle(args2.parentSessionID,`STANDARD_WORKTREE_COLLISION_BRANCH_CLEANUP_FAILED: ${cleanupResult.error}. Provisioning was blocked.`)}else{let pruneResult=await _internals96.pruneStaleWorktreeMetadata(args2.directory);if("error"in pruneResult)hardStopStandardWorktreeLifecycle(args2.parentSessionID,`STANDARD_WORKTREE_COLLISION_PRUNE_FAILED: ${pruneResult.error}. Provisioning was blocked without deleting the lane branch.`)}let verification=await _internals96.preProvisionCollisionCheck(args2.taskId,args2.directory,args2.parentSessionID);if(verification.uncertainty||verification.collision)hardStopStandardWorktreeLifecycle(args2.parentSessionID,`STANDARD_WORKTREE_COLLISION_CLEANUP_UNVERIFIED: ${verification.uncertainty??"git still reports the colliding lane after cleanup"}. Provisioning was blocked.`)}}_internals96.recordWorktreeProvisioningOwner(args2.directory,{callID:args2.callID,parentSessionId:args2.parentSessionID,worktreeSessionId:args2.parentSessionID,taskId:args2.taskId,...provisioningOwnerIdentity})}catch(error93){if(error93 instanceof StandardWorktreeLifecycleError)throw error93;hardStopStandardWorktreeLifecycle(args2.parentSessionID,`STANDARD_WORKTREE_OWNER_PERSIST_FAILED: ${error93 instanceof Error?error93.message:String(error93)}.`)}finally{try{await lifecycleLock.lock._release?.()}catch{}}let childSessionId="",handle,mergeStrategy,reservationId,generation,canonicalBranch,canonicalPath,recoveryClaim;if(recoveryLaunch)childSessionId=recoveryLaunch.childSessionId,handle={worktreePath:recoveryLaunch.worktreePath,branchName:recoveryLaunch.branchName,purpose:"lane",id:sanitizeWorktreeTaskId(args2.taskId),sessionId:args2.parentSessionID},mergeStrategy=recoveryLaunch.strategy,reservationId=recoveryLaunch.reservationId,generation=recoveryLaunch.generation,provisioningOwnerIdentity=recoveryLaunch.provisioningOwner,canonicalBranch=recoveryLaunch.canonicalBranch,canonicalPath=recoveryLaunch.canonicalPath,recoveryClaim=recoveryLaunch.recoveryClaim;else{reservationId=args2.reservationId??`foreground:${args2.parentSessionID}:${resolveRecoveryTaskId(args2)}:${args2.callID}`,generation=provisioningOwnerIdentity.generation,canonicalPath=args2.directory;let provisionResult;try{provisionResult=await _internals96.provisionWorktree(args2.directory,args2.taskId,args2.parentSessionID,{purpose:"lane",worktreeDir:worktreeConfig.worktree_dir,mergeStrategy:worktreeConfig.merge_strategy,depsStrategy:worktreeConfig.deps_strategy,scope:args2.scope})}catch(error93){throw _internals96.removeWorktreeProvisioningOwner(args2.directory,args2.callID,provisioningOwnerIdentity),error93}if("error"in provisionResult){_internals96.removeWorktreeProvisioningOwner(args2.directory,args2.callID,provisioningOwnerIdentity);let message=`STANDARD_WORKTREE_PROVISION_FAILED: ${provisionResult.error}.`;handleStandardWorktreeFailure(args2.parentSessionID,worktreeConfig.policy,message);return}handle=provisionResult,mergeStrategy=worktreeConfig.merge_strategy,recordLiveLaneOwner(args2.directory,{lanePath:handle.worktreePath,branchName:handle.branchName,sessionId:args2.parentSessionID,taskId:args2.taskId})}let originalPrompt=typeof args2.outputArgs.prompt==="string"?args2.outputArgs.prompt:"";args2.outputArgs.prompt=["<worktree_lane_context>",`authoritative_lane_root: ${JSON.stringify(handle.worktreePath)}`,"All FILE declarations and scope-bound edit/write paths must be workspace-relative to authoritative_lane_root.","Remain in authoritative_lane_root: do not change directory into, or edit/write through, the primary checkout or any other worktree.","Example: FILE: src/example.ts means <authoritative_lane_root>/src/example.ts, never <primary-checkout>/src/example.ts.","Do not declare project-root absolute paths; resolve and operate inside this lane root.","</worktree_lane_context>","",originalPrompt].join(`
|
|
1272
|
-
`);let laneProfile=computeLaneRuntimeProfile(worktreeConfig.runtime_isolation,laneIndex,handle.worktreePath);if(laneProfile)try{let{writeLaneProfileToDiskReal:writeLaneProfileToDiskReal2}=await Promise.resolve().then(() => (init_core3(),exports_core3));await writeLaneProfileToDiskReal2(handle.worktreePath,laneProfile.laneIndex,laneProfile.envOverrides)}catch{}if((worktreeConfig.deps_strategy??"skip")==="skip"){let desc=(args2.description??args2.taskId??"").toLowerCase();if(/\btests?\b/.test(desc)||/\bbuild(ing|s)?\b/.test(desc)||/\blint(ing|er)?\b/.test(desc)||/\bchecks?\b/.test(desc)){let session=ensureAgentSession(args2.parentSessionID);pushAdvisory(session,`WORKTREE_DEPS_SKIP: task ${args2.taskId} was provisioned with deps_strategy: 'skip' (default). This task's gates appear to include test/build commands; the lane may lack node_modules. Set worktree.deps_strategy to 'copy' or 'link' (or use a non-worktree lane) if the task requires host dependencies.`)}}if(!recoveryLaunch){let createResult;try{createResult=await createSessionWithinBudget(client.session.create({body:{parentID:args2.parentSessionID,title:`${args2.description??args2.taskId} (worktree lane)`},query:{directory:handle.worktreePath}}),"STANDARD_WORKTREE_SESSION_CREATE",async(result)=>{let lateChildSessionId=result.data?.id;if(lateChildSessionId){let verification=await teardownEphemeralSessionVerified(client.session,lateChildSessionId);if(!verification.ok)await handleStrandedLane({directory:args2.directory,parentSessionID:args2.parentSessionID,lanePath:handle.worktreePath,branchName:handle.branchName,taskId:args2.taskId,reason:`late child session ${lateChildSessionId} survived verified teardown (${verification.reason})`})}},resolveSessionCreateTimeoutMs(args2))}catch(error93){closeProjectDb(handle.worktreePath);let removal=await _internals96.removeWorktree(handle.worktreePath,args2.directory,{force:!0,worktreeDir:worktreeConfig.worktree_dir}).catch((cleanupError)=>({error:cleanupError instanceof Error?cleanupError.message:String(cleanupError)})),removalError=typeof removal==="object"&&removal!==null&&"error"in removal&&typeof removal.error==="string"?removal.error:void 0;if(removalError)log(`[worktree-isolation] session-create failure cleanup could not remove lane ${handle.worktreePath}: ${removalError}`),await handleStrandedLane({directory:args2.directory,parentSessionID:args2.parentSessionID,lanePath:handle.worktreePath,branchName:handle.branchName,taskId:args2.taskId,reason:removalError});_internals96.removeWorktreeProvisioningOwner(args2.directory,args2.callID,provisioningOwnerIdentity);let message=`STANDARD_WORKTREE_SESSION_CREATE_FAILED: ${error93 instanceof Error?error93.message:String(error93)}.`;handleStandardWorktreeFailure(args2.parentSessionID,worktreeConfig.policy,message);return}if(!createResult?.data?.id){closeProjectDb(handle.worktreePath);let removal=await _internals96.removeWorktree(handle.worktreePath,args2.directory,{force:!0,worktreeDir:worktreeConfig.worktree_dir}).catch((cleanupError)=>({error:cleanupError instanceof Error?cleanupError.message:String(cleanupError)})),removalError=typeof removal==="object"&&removal!==null&&"error"in removal&&typeof removal.error==="string"?removal.error:void 0;if(removalError)log(`[worktree-isolation] session-create failure cleanup could not remove lane ${handle.worktreePath}: ${removalError}`),await handleStrandedLane({directory:args2.directory,parentSessionID:args2.parentSessionID,lanePath:handle.worktreePath,branchName:handle.branchName,taskId:args2.taskId,reason:removalError});_internals96.removeWorktreeProvisioningOwner(args2.directory,args2.callID,provisioningOwnerIdentity);let createError=createResult.error,message=`STANDARD_WORKTREE_SESSION_CREATE_FAILED: ${typeof createError==="string"?createError:JSON.stringify(createError??"missing session id")}.`;handleStandardWorktreeFailure(args2.parentSessionID,worktreeConfig.policy,message);return}childSessionId=createResult.data.id}if(!childSessionId)throw Error("STANDARD_WORKTREE_SESSION_CREATE_FAILED: missing child session id.");args2.outputArgs.task_id=childSessionId,recordLaneChildSession(childSessionId,"coder"),ensureAgentSession(childSessionId,"coder",handle.worktreePath),recordSessionWorkspaceRoot(childSessionId,handle.worktreePath),rememberStandardWorktreeDispatch({callID:args2.callID,parentSessionID:args2.parentSessionID,taskId:args2.taskId,planTaskId:args2.planTaskId,reservationId,generation,provisioningOwner:provisioningOwnerIdentity,canonicalBranch,canonicalPath,handle,mergeStrategy,recoveryClaim,laneIndex,worktree_dir:worktreeConfig.worktree_dir})}async function preserveBackgroundWorktreeOwnershipForCallId(callID){let dispatch=standardWorktreeByCallID.get(callID);if(!dispatch)return{outcome:"not-found"};let refProc;try{refProc=_internals96.bunSpawn([_internals96.resolveGitExecutable(),"-C",dispatch.handle.worktreePath,"rev-parse","HEAD"],{stdin:"ignore",stdout:"pipe",stderr:"pipe",timeout:PRESERVE_COMMIT_TIMEOUT_MS})}catch(error93){return{outcome:"preserve-failed",error:`git rev-parse could not start: ${error93 instanceof Error?error93.message:String(error93)}`}}let ref="";try{let exitCode=await refProc.exited;if(exitCode!==0)return{outcome:"preserve-failed",error:await refProc.stderr.text()||`git rev-parse exited ${exitCode}`};ref=(await refProc.stdout.text()).trim()}finally{try{refProc.kill()}catch{}}if(!ref)return{outcome:"preserve-failed",error:"git rev-parse returned empty"};let session=Buffer.from(dispatch.handle.sessionId,"utf8").toString("base64url"),lane=Buffer.from(dispatch.handle.id,"utf8").toString("base64url"),callDigest=createHash51("sha256").update(callID).digest("hex").slice(0,12),tag=`swarm-preserved-owner/${session}/${lane}/${callDigest}`,tagProc;try{tagProc=_internals96.bunSpawn([_internals96.resolveGitExecutable(),"-C",dispatch.handle.worktreePath,"tag",tag,ref],{stdin:"ignore",stdout:"pipe",stderr:"pipe",timeout:PRESERVE_COMMIT_TIMEOUT_MS})}catch(error93){return{outcome:"preserve-failed",error:`git tag could not start: ${error93 instanceof Error?error93.message:String(error93)}`}}try{let exitCode=await tagProc.exited;if(exitCode!==0)return{outcome:"preserve-failed",error:await tagProc.stderr.text()||`git tag exited ${exitCode}`}}finally{try{tagProc.kill()}catch{}}return{outcome:"preserved",tag,ref}}async function preserveDirtyWorktreeForCallId(callID,reason,_directory2,_worktree_dir){let dispatch=standardWorktreeByCallID.get(callID),worktreePath,parentSessionID;if(dispatch)worktreePath=dispatch.handle.worktreePath,parentSessionID=dispatch.parentSessionID;else{let awaiting=awaitingMergeByCallID.get(callID);if(!awaiting)return{outcome:"clean",preserved:!1};worktreePath=awaiting.worktreePath,parentSessionID=awaiting.parentSessionID}let statusProc;try{statusProc=_internals96.bunSpawn([_internals96.resolveGitExecutable(),"-C",worktreePath,"status","--porcelain"],{stdin:"ignore",stdout:"pipe",stderr:"pipe",timeout:PRESERVE_COMMIT_TIMEOUT_MS})}catch(error93){return{outcome:"preserve-failed",preserved:!1,error:`git status could not start: ${error93 instanceof Error?error93.message:String(error93)}`}}let statusStdout="",statusStderr="";try{let exitCode=await statusProc.exited;if(statusStdout=await statusProc.stdout.text(),statusStderr=await statusProc.stderr.text(),exitCode!==0)return log(`[swarm] preserveDirtyWorktreeForCallId: git status failed for ${callID}: ${statusStderr}`),{outcome:"preserve-failed",preserved:!1,error:`git status failed: ${statusStderr||`exit ${exitCode}`}`}}finally{try{statusProc.kill()}catch{}}if(statusStdout.trim()==="")return{outcome:"clean",preserved:!1};let addProc;try{addProc=_internals96.bunSpawn([_internals96.resolveGitExecutable(),"-C",worktreePath,"add","-A"],{stdin:"ignore",stdout:"pipe",stderr:"pipe",timeout:PRESERVE_COMMIT_TIMEOUT_MS})}catch(error93){return{outcome:"preserve-failed",preserved:!1,error:`git add could not start: ${error93 instanceof Error?error93.message:String(error93)}`}}try{let addExit=await addProc.exited;if(addExit!==0){let addErr=await addProc.stderr.text();return log(`[swarm] preserveDirtyWorktreeForCallId: git add failed for ${callID}: ${addErr}`),{outcome:"preserve-failed",preserved:!1,error:`git add failed: ${addErr||`exit ${addExit}`}`}}}finally{try{addProc.kill()}catch{}}let isoDate=new Date().toISOString(),sanitizedCallID=callID.replace(/[^A-Za-z0-9._-]/g,"-").slice(0,64),commitMessage=`swarm-preserved: ${reason} for callID ${sanitizedCallID} at ${isoDate}`,commitProc;try{commitProc=_internals96.bunSpawn([_internals96.resolveGitExecutable(),"-C",worktreePath,"commit","-m",commitMessage],{stdin:"ignore",stdout:"pipe",stderr:"pipe",timeout:PRESERVE_COMMIT_TIMEOUT_MS})}catch(error93){return{outcome:"preserve-failed",preserved:!1,error:`git commit could not start: ${error93 instanceof Error?error93.message:String(error93)}`}}let commitHash="";try{let commitExit=await commitProc.exited;if(commitExit!==0){let commitErr=await commitProc.stderr.text();return log(`[swarm] preserveDirtyWorktreeForCallId: git commit failed for ${callID}: ${commitErr}`),{outcome:"preserve-failed",preserved:!1,error:`git commit failed: ${commitErr||`exit ${commitExit}`}`}}}finally{try{commitProc.kill()}catch{}}let hashProc;try{hashProc=_internals96.bunSpawn([_internals96.resolveGitExecutable(),"-C",worktreePath,"rev-parse","HEAD"],{stdin:"ignore",stdout:"pipe",stderr:"pipe",timeout:PRESERVE_COMMIT_TIMEOUT_MS})}catch(error93){return{outcome:"preserve-failed",preserved:!1,error:`git rev-parse could not start: ${error93 instanceof Error?error93.message:String(error93)}`}}try{let hashExit=await hashProc.exited;if(hashExit!==0){let hashErr=await hashProc.stderr.text();return log(`[swarm] preserveDirtyWorktreeForCallId: git rev-parse failed for ${callID}: ${hashErr}`),{outcome:"preserve-failed",preserved:!1,error:`git rev-parse failed: ${hashErr||`exit ${hashExit}`}`}}commitHash=(await hashProc.stdout.text()).trim()}finally{try{hashProc.kill()}catch{}}if(!commitHash)return{outcome:"preserve-failed",preserved:!1,error:"git rev-parse returned empty hash"};let shortHash=commitHash.slice(0,8),tagName=`swarm-preserved-${sanitizedCallID}-${shortHash}`,tagProc;try{tagProc=_internals96.bunSpawn([_internals96.resolveGitExecutable(),"-C",worktreePath,"tag",tagName],{stdin:"ignore",stdout:"pipe",stderr:"pipe",timeout:PRESERVE_COMMIT_TIMEOUT_MS})}catch(error93){return{outcome:"preserve-failed",preserved:!1,error:`git tag could not start: ${error93 instanceof Error?error93.message:String(error93)}`}}try{let tagExit=await tagProc.exited;if(tagExit!==0){let tagErr=await tagProc.stderr.text();return log(`[swarm] preserveDirtyWorktreeForCallId: git tag failed for ${callID}: ${tagErr}`),{outcome:"preserve-failed",preserved:!1,error:`git tag failed: ${tagErr||`exit ${tagExit}`}`}}}finally{try{tagProc.kill()}catch{}}let session=ensureAgentSession(parentSessionID);return pushAdvisory(session,`STANDARD_WORKTREE_PRESERVED: dispatch ${callID} dirty work preserved as commit ${commitHash} (tag: ${tagName}; reason: ${reason}); worktree will be cleaned.`),{outcome:"preserved",preserved:!0,ref:commitHash}}async function preserveDirtyWorktreeAtPath(worktreePath,branchName,reason,_directory2,_worktree_dir){let statusProc;try{statusProc=_internals96.bunSpawn([_internals96.resolveGitExecutable(),"-C",worktreePath,"status","--porcelain"],{stdin:"ignore",stdout:"pipe",stderr:"pipe",timeout:PRESERVE_COMMIT_TIMEOUT_MS})}catch(error93){return{outcome:"preserve-failed",preserved:!1,error:`git status could not start: ${error93 instanceof Error?error93.message:String(error93)}`}}let statusStdout="",statusStderr="";try{let exitCode=await statusProc.exited;if(statusStdout=await statusProc.stdout.text(),statusStderr=await statusProc.stderr.text(),exitCode!==0)return log(`[swarm] preserveDirtyWorktreeAtPath: git status failed for ${worktreePath}: ${statusStderr}`),{outcome:"preserve-failed",preserved:!1,error:`git status failed: ${statusStderr||`exit ${exitCode}`}`}}finally{try{statusProc.kill()}catch{}}if(statusStdout.trim()==="")return{outcome:"clean",preserved:!1};let addProc;try{addProc=_internals96.bunSpawn([_internals96.resolveGitExecutable(),"-C",worktreePath,"add","-A"],{stdin:"ignore",stdout:"pipe",stderr:"pipe",timeout:PRESERVE_COMMIT_TIMEOUT_MS})}catch(error93){return{outcome:"preserve-failed",preserved:!1,error:`git add could not start: ${error93 instanceof Error?error93.message:String(error93)}`}}try{let addExit=await addProc.exited;if(addExit!==0){let addErr=await addProc.stderr.text();return log(`[swarm] preserveDirtyWorktreeAtPath: git add failed for ${worktreePath}: ${addErr}`),{outcome:"preserve-failed",preserved:!1,error:`git add failed: ${addErr||`exit ${addExit}`}`}}}finally{try{addProc.kill()}catch{}}let isoDate=new Date().toISOString(),sanitizedPath=worktreePath.replace(/[^A-Za-z0-9._-]/g,"-").slice(0,64),sanitizedBranch=branchName.replace(/[^A-Za-z0-9._-]/g,"-").slice(0,64),commitMessage=`swarm-preserved: ${reason} for worktree ${sanitizedPath} at ${isoDate}`,commitProc;try{commitProc=_internals96.bunSpawn([_internals96.resolveGitExecutable(),"-C",worktreePath,"commit","-m",commitMessage],{stdin:"ignore",stdout:"pipe",stderr:"pipe",timeout:PRESERVE_COMMIT_TIMEOUT_MS})}catch(error93){return{outcome:"preserve-failed",preserved:!1,error:`git commit could not start: ${error93 instanceof Error?error93.message:String(error93)}`}}let commitHash="";try{let commitExit=await commitProc.exited;if(commitExit!==0){let commitErr=await commitProc.stderr.text();return log(`[swarm] preserveDirtyWorktreeAtPath: git commit failed for ${worktreePath}: ${commitErr}`),{outcome:"preserve-failed",preserved:!1,error:`git commit failed: ${commitErr||`exit ${commitExit}`}`}}}finally{try{commitProc.kill()}catch{}}let hashProc;try{hashProc=_internals96.bunSpawn([_internals96.resolveGitExecutable(),"-C",worktreePath,"rev-parse","HEAD"],{stdin:"ignore",stdout:"pipe",stderr:"pipe",timeout:PRESERVE_COMMIT_TIMEOUT_MS})}catch(error93){return{outcome:"preserve-failed",preserved:!1,error:`git rev-parse could not start: ${error93 instanceof Error?error93.message:String(error93)}`}}try{let hashExit=await hashProc.exited;if(hashExit!==0){let hashErr=await hashProc.stderr.text();return log(`[swarm] preserveDirtyWorktreeAtPath: git rev-parse failed for ${worktreePath}: ${hashErr}`),{outcome:"preserve-failed",preserved:!1,error:`git rev-parse failed: ${hashErr||`exit ${hashExit}`}`}}commitHash=(await hashProc.stdout.text()).trim()}finally{try{hashProc.kill()}catch{}}if(!commitHash)return{outcome:"preserve-failed",preserved:!1,error:"git rev-parse returned empty hash"};let shortHash=commitHash.slice(0,8),tagName=`swarm-preserved-worktree-${sanitizedBranch}-${shortHash}`,tagProc;try{tagProc=_internals96.bunSpawn([_internals96.resolveGitExecutable(),"-C",worktreePath,"tag",tagName],{stdin:"ignore",stdout:"pipe",stderr:"pipe",timeout:PRESERVE_COMMIT_TIMEOUT_MS})}catch(error93){return{outcome:"preserve-failed",preserved:!1,error:`git tag could not start: ${error93 instanceof Error?error93.message:String(error93)}`}}try{let tagExit=await tagProc.exited;if(tagExit!==0){let tagErr=await tagProc.stderr.text();return log(`[swarm] preserveDirtyWorktreeAtPath: git tag failed for ${worktreePath}: ${tagErr}`),{outcome:"preserve-failed",preserved:!1,error:`git tag failed: ${tagErr||`exit ${tagExit}`}`}}}finally{try{tagProc.kill()}catch{}}return{outcome:"preserved",preserved:!0,ref:commitHash}}async function cleanupStandardWorktreeForCallId(callID,reason,directory,worktree_dir,options){let dispatch=standardWorktreeByCallID.get(callID),worktreePath,branchName,parentSessionID;if(dispatch)worktreePath=dispatch.handle.worktreePath,branchName=dispatch.handle.branchName,parentSessionID=dispatch.parentSessionID;else{let awaiting=awaitingMergeByCallID.get(callID);if(!awaiting)return{removedWorktree:!1,cleanedBranch:!1,preservedRecoveryLane:!1};worktreePath=awaiting.worktreePath,branchName=awaiting.branch,parentSessionID=awaiting.parentSessionID}if(dispatch?.recoveryClaim&&(reason==="denied"||reason==="cancelled")){let renewResult=_internals96.renewWorktreeRecoveryClaim(directory,{authorityDigest:dispatch.recoveryClaim.authorityDigest,claimantCallID:callID,claimRevision:dispatch.recoveryClaim.claimRevision,rawToken:dispatch.recoveryClaim.rawToken,leaseMs:WORKTREE_RECOVERY_CLAIM_LEASE_MS});if(!renewResult.ok){let message=`STANDARD_WORKTREE_RECOVERY_ABORT_RELEASE_FAILED: dispatch ${callID} preserved lane ${worktreePath} (${branchName}) after ${reason}, but ${describeRecoveryMutationFailure({action:"renew",code:renewResult.code,reason:renewResult.reason})}. No tracking teardown was performed.`,session3=ensureAgentSession(parentSessionID);throw pushAdvisory(session3,message),Error(message)}let releaseResult=_internals96.releaseWorktreeRecoveryClaim(directory,{authorityDigest:dispatch.recoveryClaim.authorityDigest,claimantCallID:callID,claimRevision:dispatch.recoveryClaim.claimRevision,rawToken:dispatch.recoveryClaim.rawToken});if(!releaseResult.ok){let message=`STANDARD_WORKTREE_RECOVERY_ABORT_RELEASE_FAILED: dispatch ${callID} preserved lane ${worktreePath} (${branchName}) after ${reason}, but ${describeRecoveryMutationFailure({action:"release",code:releaseResult.code,reason:releaseResult.reason})}. No tracking teardown was performed.`,session3=ensureAgentSession(parentSessionID);throw pushAdvisory(session3,message),Error(message)}standardWorktreeByCallID.delete(callID),awaitingMergeByCallID.delete(callID);let session2=ensureAgentSession(parentSessionID);return pushAdvisory(session2,`STANDARD_WORKTREE_RECOVERY_ABORT_PRESERVED: dispatch ${callID} released its recovery claim and preserved lane ${worktreePath} (${branchName}) after ${reason}.`),{removedWorktree:!1,cleanedBranch:!1,preservedRecoveryLane:!0}}let preserveResult;if(reason==="denied"||reason==="cancelled"){try{preserveResult=await _internals96.preserveDirtyWorktreeForCallId(callID,reason,directory,worktree_dir)}catch(err){log(`[swarm] cleanupStandardWorktreeForCallId: preserveDirtyWorktreeForCallId threw for ${callID}: ${err}`),preserveResult={outcome:"preserve-failed",preserved:!1,error:String(err)}}if(preserveResult.outcome==="clean")try{preserveResult=await _internals96.preserveDirtyWorktreeForCallId(callID,reason,directory,worktree_dir)}catch(err){log(`[swarm] cleanupStandardWorktreeForCallId: final preservation check threw for ${callID}: ${err}`),preserveResult={outcome:"preserve-failed",preserved:!1,error:String(err)}}}if(preserveResult&&preserveResult.outcome==="preserve-failed"){standardWorktreeByCallID.delete(callID),awaitingMergeByCallID.delete(callID);let session2=ensureAgentSession(parentSessionID);return pushAdvisory(session2,`STANDARD_WORKTREE_PRESERVATION_FAILED_ABORT_CLEANUP: dispatch ${callID} has dirty uncommitted work but preservation failed (${preserveResult.error}). Cleanup aborted to protect uncommitted work. Investigate and resolve manually. Worktree=${worktreePath}; branch=${branchName}.`),{removedWorktree:!1,cleanedBranch:!1,preservedRecoveryLane:!1}}let removedWorktree=!1;try{closeProjectDb(worktreePath);let result=await _internals96.removeWorktree(worktreePath,directory,{force:!0,worktreeDir:worktree_dir});if(!("error"in result))removedWorktree=!0;else if(!result.error.startsWith("CODER_SETTLEMENT_ARTIFACT_REMOVAL_REFUSED:")&&result.error.includes("is not a working tree")&&await pathExists3(worktreePath)&&isPathUnderSwarmWorktreeBase(worktreePath,directory,worktree_dir?[worktree_dir]:[]))try{await _internals96.withSettlementArtifactLifecycle(directory,async()=>{await _internals96.assertSettlementArtifactsRemovable(directory,{path:worktreePath,branch:branchName}),await fs70.rm(worktreePath,{recursive:!0,force:!0}),removedWorktree=!await pathExists3(worktreePath)})}catch(err){log(`[swarm] cleanupStandardWorktreeForCallId: residual directory cleanup failed for ${callID}: ${err}`)}}catch(err){log(`[swarm] cleanupStandardWorktreeForCallId: removeWorktree failed for ${callID}: ${err}`)}let cleanedBranch=!1;if(options?.retainBranch){let retainedSession=ensureAgentSession(parentSessionID);pushAdvisory(retainedSession,`STANDARD_WORKTREE_BRANCH_RETAINED: dispatch ${callID} removed worktree ${worktreePath} but retained branch ${branchName} as the recovery backup; the landed changes may be unstaged or committed.`)}else try{cleanedBranch=!("error"in await _internals96.postMergeCleanup(directory,branchName))}catch(err){log(`[swarm] cleanupStandardWorktreeForCallId: postMergeCleanup failed for ${callID}: ${err}`)}standardWorktreeByCallID.delete(callID),awaitingMergeByCallID.delete(callID);let session=ensureAgentSession(parentSessionID);return pushAdvisory(session,`STANDARD_WORKTREE_CLEANUP: dispatch ${callID} cleaned up (reason: ${reason}); worktree=${worktreePath}; branch=${branchName}.`),{removedWorktree,cleanedBranch,preservedRecoveryLane:!1}}async function abortStandardWorktreeDispatch(callID,reason,directory){let dispatch=standardWorktreeByCallID.get(callID);if(!dispatch){let session=ensureAgentSession("unknown");pushAdvisory(session,`STANDARD_WORKTREE_ABORT_NOOP: dispatch ${callID} has no tracked worktree to abort (reason: ${reason}).`);return}await cleanupStandardWorktreeForCallId(callID,reason,directory,dispatch.worktree_dir)}function runSerializedWithMergeBacks(task){let queued=standardWorktreeMergeQueue.then(task,task);return standardWorktreeMergeQueue=queued,queued}async function finishStandardWorktreeDispatch(directory,dispatch,config3,callID,settlement={}){let wtConfig=config3?resolveWorktreeIsolationConfig(config3):DEFAULT_WORKTREE_ISOLATION_CONFIG,resolvedCallID=callID??dispatch.callID,run=async()=>{let statusKey=dispatch.planTaskId??dispatch.taskId,failRecoverySettlement=(stage,message,provenance)=>{recordWorktreeMergeFailure(statusKey,{outcome:"failed",stage,message,worktreePath:dispatch.handle.worktreePath,branch:dispatch.handle.branchName,completedAt:Date.now()});let session=ensureAgentSession(dispatch.parentSessionID);return pushAdvisory(session,`STANDARD_WORKTREE_RECOVERY_MUTATION_FAILED: task ${dispatch.taskId} preserved at ${dispatch.handle.worktreePath}; ${message}.`),{outcome:"failed",stage,message,provenance}},renewRecoveryClaimLease=(phase,provenance)=>{if(!dispatch.recoveryClaim)return;let renewed=_internals96.renewWorktreeRecoveryClaim(directory,{authorityDigest:dispatch.recoveryClaim.authorityDigest,claimantCallID:resolvedCallID,claimRevision:dispatch.recoveryClaim.claimRevision,rawToken:dispatch.recoveryClaim.rawToken,leaseMs:WORKTREE_RECOVERY_CLAIM_LEASE_MS});if(renewed.ok)return;return failRecoverySettlement("recovery-claim-renew",`The live recovery lane could not extend its lease ${phase}; ${describeRecoveryMutationFailure({action:"renew",code:renewed.code,reason:renewed.reason})}`,provenance)},releaseRecoveryClaim=(provenance)=>{if(!dispatch.recoveryClaim)return;let released=_internals96.releaseWorktreeRecoveryClaim(directory,{authorityDigest:dispatch.recoveryClaim.authorityDigest,claimantCallID:resolvedCallID,claimRevision:dispatch.recoveryClaim.claimRevision,rawToken:dispatch.recoveryClaim.rawToken});if(released.ok)return;return failRecoverySettlement("recovery-claim-release",`The preserved recovery lane could not release its exact claim after settlement; ${describeRecoveryMutationFailure({action:"release",code:released.code,reason:released.reason})}`,provenance)},publishRecoveryAuthority=async(provenance,conflictFiles)=>{let published=await publishRecoveryAuthorityForSettlement({directory,dispatch,taskId:statusKey,provenance,conflictFiles});if(published.ok)return;return failRecoverySettlement("recovery-authority-publish",`The preserved original lane could not publish recoverable authority; ${describeRecoveryMutationFailure({action:"publish",code:published.code,reason:published.reason})}`,provenance)},preMergeRenewFailure=renewRecoveryClaimLease("before merge-back");if(preMergeRenewFailure)return preMergeRenewFailure;let mergeResult=await(async()=>{if(!dispatch.recoveryClaim){let epicLanding=settlement.commitLanding===void 0?_internals96.epicCommitLandingFor(directory,dispatch.planTaskId):void 0;if(epicLanding&&"refused"in epicLanding)return{failed:!0,stage:epicLanding.stage,message:epicLanding.message};return _internals96.attemptMergeBackFromDirty(dispatch.handle.worktreePath,dispatch.handle.branchName,directory,getMergeStrategy({merge_strategy:dispatch.mergeStrategy}),{operationId:settlement.operationId,resume:settlement.resume,onBeforeMerge:settlement.onBeforeMerge,commitLanding:settlement.commitLanding??epicLanding?.commitLanding,...epicLanding?{landingCommitMessage:epicLanding.landingCommitMessage}:{}})}let coordinates=dispatch.recoveryClaim.coordinates;if(!coordinates)return{failed:!0,stage:"recovery-coordinates",message:"Claimed recovery lane is missing immutable Git coordinates"};let provenance={operationId:settlement.operationId??`recovery:${dispatch.recoveryClaim.authorityDigest}`,sourceHead:coordinates.sourceHeadOid,targetHeadBefore:coordinates.targetHeadOid,branchName:dispatch.handle.branchName,strategy:coordinates.strategy};if(settlement.onBeforeMerge)await settlement.onBeforeMerge(provenance);let recovered=await _internals96.recoverMergeBackFromImmutableCoordinates(directory,coordinates);if("merged"in recovered&&recovered.merged){if(recovered.sourceCommitOrder&&recovered.rewrittenCommitOrder)dispatch.recoveryClaim.settlement={sourceCommitOrder:recovered.sourceCommitOrder,rewrittenCommitOrder:recovered.rewrittenCommitOrder};return{merged:!0,strategy:recovered.strategy,autoCommitted:!1,cleaned:!0,reconciled:!1,provenance}}if("conflict"in recovered&&recovered.conflict)return{partial:!0,stage:"conflict",autoCommitted:!1,cleaned:!0,message:recovered.message,conflictFiles:recovered.files,provenance};return{failed:!0,stage:"recovery",message:"error"in recovered?recovered.error:"Immutable recovery returned an unexpected result",provenance}})();if("merged"in mergeResult&&mergeResult.merged){let mergedSettlement={outcome:"merged",strategy:mergeResult.strategy,autoCommitted:mergeResult.autoCommitted??!1,cleaned:mergeResult.cleaned??!1,reconciled:mergeResult.reconciled??!1,provenance:mergeResult.provenance};if(settlement.onMerged)try{await settlement.onMerged(mergedSettlement)}catch(error93){let failedSettlement={outcome:"failed",stage:"settlement-persist",message:`Git merge-back succeeded but settlement persistence failed: ${String(error93)}`,provenance:mergeResult.provenance},publishFailure=await publishRecoveryAuthority(mergeResult.provenance);if(publishFailure)failedSettlement.message=`${failedSettlement.message} ${publishFailure.message}`;let releaseFailure=releaseRecoveryClaim(mergeResult.provenance);if(releaseFailure)failedSettlement.message=`${failedSettlement.message} ${releaseFailure.message}`;recordWorktreeMergeFailure(statusKey,{outcome:"failed",stage:failedSettlement.stage,message:failedSettlement.message,worktreePath:dispatch.handle.worktreePath,branch:dispatch.handle.branchName,completedAt:Date.now()});let session=ensureAgentSession(dispatch.parentSessionID);return pushAdvisory(session,`STANDARD_WORKTREE_SETTLEMENT_PERSIST_FAILED: task ${dispatch.taskId} landed in ${directory}, but settlement persistence failed; worktree and branch preserved at ${dispatch.handle.worktreePath} (${dispatch.handle.branchName}).`),failedSettlement}let preCleanupRenewFailure=renewRecoveryClaimLease("before cleanup/finalization",mergeResult.provenance);if(preCleanupRenewFailure)return preCleanupRenewFailure;let cleanupResult=await cleanupStandardWorktreeForCallId(resolvedCallID,"success",directory,dispatch.worktree_dir,{retainBranch:mergeResult.strategy==="squash-unstaged"});if(dispatch.recoveryClaim){let request={authorityDigest:dispatch.recoveryClaim.authorityDigest,claimantCallID:resolvedCallID,claimRevision:dispatch.recoveryClaim.claimRevision,rawToken:dispatch.recoveryClaim.rawToken,settlement:dispatch.recoveryClaim.settlement};if(cleanupResult.removedWorktree&&cleanupResult.cleanedBranch){let finalized=_internals96.finalizeWorktreeRecoveryAuthority(directory,request);if(!finalized.ok)return failRecoverySettlement("recovery-claim-finalize",`The merged recovery lane was cleaned up but could not finalize its exact claim; ${describeRecoveryMutationFailure({action:"finalize",code:finalized.code,reason:finalized.reason})}`,mergeResult.provenance)}else{let releaseFailure=releaseRecoveryClaim(mergeResult.provenance);if(releaseFailure)return releaseFailure}}clearWorktreeMergeStatus(statusKey);try{let{removeLaneProfileFromDiskReal:removeLaneProfileFromDiskReal2}=await Promise.resolve().then(() => (init_core3(),exports_core3));await removeLaneProfileFromDiskReal2(dispatch.handle.worktreePath,dispatch.laneIndex)}catch{}let state2=serializationStateBySessionID.get(dispatch.parentSessionID);if(state2)state2.successfulDispatchesSince++,checkStandardWorktreeSerializationRelease(dispatch.parentSessionID,wtConfig);try{verifyReviewerScopeGenerationMergeBack({parentSessionID:dispatch.parentSessionID,taskId:statusKey,coderCallID:resolvedCallID,primaryDirectory:directory})}catch{}return mergedSettlement}if("partial"in mergeResult){let publishFailure=await publishRecoveryAuthority(mergeResult.provenance,mergeResult.conflictFiles);if(publishFailure)return publishFailure;let releaseFailure=releaseRecoveryClaim(mergeResult.provenance);if(releaseFailure)return releaseFailure;recordWorktreeMergeFailure(statusKey,{outcome:"partial",stage:mergeResult.stage,message:mergeResult.message,worktreePath:dispatch.handle.worktreePath,branch:dispatch.handle.branchName,completedAt:Date.now()});let session=ensureAgentSession(dispatch.parentSessionID);pushAdvisory(session,`STANDARD_WORKTREE_MERGE_PARTIAL: task ${dispatch.taskId} preserved at ${dispatch.handle.worktreePath}; stage: ${mergeResult.stage}; ${mergeResult.message}`+(mergeResult.code?` (code: ${mergeResult.code})`:"")+(mergeResult.recoveryHint?` ${mergeResult.recoveryHint}`:""));try{markReviewerScopeGenerationMergebackPending({parentSessionID:dispatch.parentSessionID,taskId:statusKey,coderCallID:resolvedCallID})}catch{}return{outcome:"partial",stage:mergeResult.stage,message:mergeResult.message,autoCommitted:mergeResult.autoCommitted,cleaned:mergeResult.cleaned,conflictFiles:mergeResult.conflictFiles,code:mergeResult.code,recoveryHint:mergeResult.recoveryHint,provenance:mergeResult.provenance}}if("failed"in mergeResult){let publishFailure=await publishRecoveryAuthority(mergeResult.provenance);if(publishFailure)return publishFailure;let releaseFailure=releaseRecoveryClaim(mergeResult.provenance);if(releaseFailure)return releaseFailure;recordWorktreeMergeFailure(statusKey,{outcome:"failed",stage:mergeResult.stage,message:mergeResult.message,worktreePath:dispatch.handle.worktreePath,branch:dispatch.handle.branchName,completedAt:Date.now()});let session=ensureAgentSession(dispatch.parentSessionID),location=mergeResult.stage===SOURCE_WORKTREE_GONE_STAGE||mergeResult.stage===SOURCE_WORKTREE_UNCERTAIN_STAGE?`lane worktree ${dispatch.handle.worktreePath} no longer exists`:`preserved at ${dispatch.handle.worktreePath}`;pushAdvisory(session,`STANDARD_WORKTREE_MERGE_FAILED: task ${dispatch.taskId} ${location}; stage: ${mergeResult.stage}; ${mergeResult.message}.`);try{markReviewerScopeGenerationMergebackPending({parentSessionID:dispatch.parentSessionID,taskId:statusKey,coderCallID:resolvedCallID})}catch{}return{outcome:"failed",stage:mergeResult.stage,message:mergeResult.message,provenance:mergeResult.provenance}}return{outcome:"failed",stage:"merge",message:"Merge-back returned an unexpected result"}},queuedRun=standardWorktreeMergeQueue.then(run,run);standardWorktreeMergeQueue=queuedRun;let result;try{result=await queuedRun}catch(error93){if(standardWorktreeByCallID.delete(resolvedCallID),awaitingMergeByCallID.delete(resolvedCallID),dispatch.recoveryClaim)try{_internals96.releaseWorktreeRecoveryClaim(directory,{authorityDigest:dispatch.recoveryClaim.authorityDigest,claimantCallID:resolvedCallID,claimRevision:dispatch.recoveryClaim.claimRevision,rawToken:dispatch.recoveryClaim.rawToken})}catch{}let message=`Unexpected worktree settlement failure: ${error93 instanceof Error?error93.message:String(error93)}`;recordWorktreeMergeFailure(dispatch.planTaskId??dispatch.taskId,{outcome:"failed",stage:"merge",message,worktreePath:dispatch.handle.worktreePath,branch:dispatch.handle.branchName,completedAt:Date.now()});let session=ensureAgentSession(dispatch.parentSessionID);return pushAdvisory(session,`STANDARD_WORKTREE_SETTLEMENT_FAILED: task ${dispatch.taskId} preserved at ${dispatch.handle.worktreePath}; ${message}.`),{outcome:"failed",stage:"merge",message}}if(resolvedCallID)awaitingMergeByCallID.delete(resolvedCallID);return result}async function readLaneEnvFileFromDisk(worktreePath,laneIndex){let envPath=path111.join(worktreePath,".swarm","lanes",`${laneIndex}.env`),content;try{content=await fs70.readFile(envPath,"utf-8")}catch(err){if(err.code==="ENOENT")return{};return log(`[worktree-isolation] failed to read lane env file ${envPath}: ${err.message}`),{}}let result={};for(let rawLine of content.split(`
|
|
1270
|
+
`:"");writeLegacyStoreFile(legacyPath,legacyPayload),fs65.writeFileSync(projectionMarkerPath(legacyPath),"","utf-8"),legacyStat=fs65.statSync(legacyPath)}checkpoint2.migration.sourceBytes=legacyStat.size,checkpoint2.migration.scannedBytes=legacyStat.size,checkpoint2.migration.sourceMtimeMs=legacyStat.mtimeMs}catch{}}flushAuditEvents(directory,events,checkpoint2.sequence,checkpoint2.maintenance);let archiveEvent=maybeArchiveLegacy(directory,checkpoint2);if(archiveEvent)events.push(archiveEvent),checkpoint2.sequence+=1,_internals98.writeCheckpointFile(directory,checkpoint2),flushAuditEvents(directory,[archiveEvent],checkpoint2.sequence,checkpoint2.maintenance);cleanupStaleLegacyArchive(directory);let coordinationView=readCoordinationSubscriptions(directory);if(coordinationView!==null&&!isDeepStrictEqualByJson(coordinationView,loaded.view))persistCoordinationSubscriptions(directory,{...loaded.view});for(let kind of["compact","migrate-complete","archive","foreign-rebind","corrupt-quarantine"])if(events.some((event)=>event.kind===kind))emitHealthTelemetry(directory,kind,checkpoint2)}async function subscribe(directory,input){if(!directory||directory.trim()==="")throw Error("directory is required");if(!input.sessionID||input.sessionID.trim()==="")throw Error("sessionID is required and must be non-empty");if(!input.repoFullName||input.repoFullName.trim()==="")throw Error("repoFullName is required and must be non-empty");if(!input.prUrl||input.prUrl.trim()==="")throw Error("prUrl is required and must be non-empty");if(!input.prNumber||!Number.isInteger(input.prNumber)||input.prNumber<=0)throw Error("prNumber is required and must be a positive integer");let correlationId=buildCorrelationId(input.sessionID,input.repoFullName,input.prNumber),now=Date.now();return withEvidenceLock(directory,PR_SUBSCRIPTIONS_FILE,STORE_LOCK_AGENT,STORE_LOCK_TASK,async()=>{if(canUseCoordinationWritePath(directory)){let view=readCoordinationSubscriptions(directory)??{},match2=Object.values(view).find((r)=>r.correlationId===correlationId&&r.status==="active");if(match2)return onSubscriptionCreated?.(directory,match2),match2;if(input.maxSubscriptions===void 0||input.maxSubscriptions>0){let limit=input.maxSubscriptions!==void 0?input.maxSubscriptions:PR_SUBSCRIPTION_LIMITS.defaultMaxActiveSubscriptions,activeCount=Object.values(view).filter((r)=>r.status==="active").length;if(activeCount>=limit)throw Error(`PR subscription limit reached: ${activeCount}/${limit}`)}let record4={correlationId,sessionID:input.sessionID,prNumber:input.prNumber,repoFullName:input.repoFullName,prUrl:input.prUrl,...input.forge?{forge:input.forge}:{},lastCheckedAt:now,isWatching:!0,hasUnaddressedEvents:!1,status:"active",createdAt:now,updatedAt:now,errorCount:0};return validateRecord3(record4),view[correlationId]=record4,persistCoordinationSubscriptions(directory,view,!0,[{kind:"subscribe",correlationId}]),onSubscriptionCreated?.(directory,record4),record4}let loaded=loadViewForWrite(directory),match=Object.values(loaded.view).find((r)=>r.correlationId===correlationId&&r.status==="active");if(match)return onSubscriptionCreated?.(directory,match),finalizeWrite(directory,loaded,[]),match;if(input.maxSubscriptions===void 0||input.maxSubscriptions>0){let limit=input.maxSubscriptions!==void 0?input.maxSubscriptions:PR_SUBSCRIPTION_LIMITS.defaultMaxActiveSubscriptions,activeCount=Object.values(loaded.view).filter((r)=>r.status==="active").length;if(activeCount>=limit)throw Error(`PR subscription limit reached: ${activeCount}/${limit}`)}let record3={correlationId,sessionID:input.sessionID,prNumber:input.prNumber,repoFullName:input.repoFullName,prUrl:input.prUrl,...input.forge?{forge:input.forge}:{},lastCheckedAt:now,isWatching:!0,hasUnaddressedEvents:!1,status:"active",createdAt:now,updatedAt:now,errorCount:0};return validateRecord3(record3),loaded.view[correlationId]=record3,loaded.dirty=!0,finalizeWrite(directory,loaded,[{kind:"subscribe",correlationId}]),onSubscriptionCreated?.(directory,record3),record3})}async function unsubscribe(directory,correlationId){if(!correlationId)return null;return withEvidenceLock(directory,PR_SUBSCRIPTIONS_FILE,STORE_LOCK_AGENT,STORE_LOCK_TASK,async()=>{if(canUseCoordinationWritePath(directory)){let view=readCoordinationSubscriptions(directory)??{},match2=Object.values(view).find((r)=>r.correlationId===correlationId&&r.status==="active");if(!match2)return null;let removed2={...match2,status:"removed",isWatching:!1,updatedAt:Date.now()};return view[correlationId]=removed2,persistCoordinationSubscriptions(directory,view,!0,[{kind:"unsubscribe",correlationId}]),removed2}let loaded=loadViewForWrite(directory),match=Object.values(loaded.view).find((r)=>r.correlationId===correlationId&&r.status==="active");if(!match)return finalizeWrite(directory,loaded,[]),null;let now=Date.now(),removed={...match,status:"removed",isWatching:!1,updatedAt:now};return loaded.view[correlationId]=removed,loaded.dirty=!0,finalizeWrite(directory,loaded,[{kind:"unsubscribe",correlationId}]),removed})}async function listActive(directory){let{view}=await loadViewForRead(directory);return Object.values(view).filter((r)=>r.status==="active")}async function lookupByPr(directory,repoFullName,prNumber){let{view}=await loadViewForRead(directory);for(let record3 of Object.values(view))if(record3.status==="active"&&record3.repoFullName===repoFullName&&record3.prNumber===prNumber)return record3;return null}async function findSubscriptionRecordForPrUrl(directory,key2){if(key2.repoFullName!==void 0&&key2.prNumber!==void 0){let record3=await lookupByPr(directory,key2.repoFullName,key2.prNumber);if(record3&&(!key2.sessionID||record3.sessionID===key2.sessionID)&&(key2.prUrl===void 0||record3.prUrl===key2.prUrl||subscriptionPrUrlMatches(record3,key2.prUrl)))return record3;if(!key2.sessionID)return null}if(key2.prUrl===void 0&&key2.repoFullName===void 0)return null;if(key2.prUrl===void 0){let active2=await listActive(directory);for(let record3 of active2){if(key2.sessionID&&record3.sessionID!==key2.sessionID)continue;if(record3.repoFullName===key2.repoFullName&&record3.prNumber===key2.prNumber)return record3}return null}let active=await listActive(directory);for(let record3 of active){if(key2.sessionID&&record3.sessionID!==key2.sessionID)continue;if(record3.prUrl===key2.prUrl||subscriptionPrUrlMatches(record3,key2.prUrl))return record3}return null}function subscriptionPrUrlMatches(record3,prUrl){let left=canonicalForgePrUrl(record3.prUrl,record3.forge),right=canonicalForgePrUrl(prUrl,record3.forge);return left!==null&&left===right}async function updateSnapshot(directory,correlationId,updates){if(!correlationId)return null;return withEvidenceLock(directory,PR_SUBSCRIPTIONS_FILE,STORE_LOCK_AGENT,STORE_LOCK_TASK,async()=>{let existingCoordination=readCoordinationSubscriptions(directory);if(existingCoordination!==null&&!fileExistsStrict(storePath3(directory))&&!hasLegacyReconciliationArtifacts(directory)){let match2=Object.values(existingCoordination).find((r)=>r.correlationId===correlationId&&r.status==="active");if(!match2)return null;if(!snapshotUpdateHasChanges(match2,updates))return match2;let updated2={...match2,...updates,correlationId,sessionID:match2.sessionID,repoFullName:match2.repoFullName,prNumber:match2.prNumber,prUrl:match2.prUrl,createdAt:match2.createdAt,updatedAt:Date.now()};return validateRecord3(updated2),existingCoordination[correlationId]=updated2,persistCoordinationSubscriptions(directory,existingCoordination),updated2}if(canUseCoordinationWritePath(directory)){let view=readCoordinationSubscriptions(directory)??{},match2=Object.values(view).find((r)=>r.correlationId===correlationId&&r.status==="active");if(!match2)return null;if(!snapshotUpdateHasChanges(match2,updates))return match2;let updated2={...match2,...updates,correlationId,sessionID:match2.sessionID,repoFullName:match2.repoFullName,prNumber:match2.prNumber,prUrl:match2.prUrl,createdAt:match2.createdAt,updatedAt:Date.now()};return validateRecord3(updated2),view[correlationId]=updated2,persistCoordinationSubscriptions(directory,view),updated2}let loaded=loadViewForWrite(directory),match=Object.values(loaded.view).find((r)=>r.correlationId===correlationId&&r.status==="active");if(!match)return finalizeWrite(directory,loaded,[]),null;if(!snapshotUpdateHasChanges(match,updates))return finalizeWrite(directory,loaded,[]),match;let updated={...match,...updates,correlationId,sessionID:match.sessionID,repoFullName:match.repoFullName,prNumber:match.prNumber,prUrl:match.prUrl,createdAt:match.createdAt,updatedAt:Date.now()};return validateRecord3(updated),loaded.view[correlationId]=updated,loaded.dirty=!0,finalizeWrite(directory,loaded,[]),updated})}async function sweepStale(directory,ttlDays,mergedPrs){if(!ttlDays||ttlDays<=0)return 0;let ttlMs=ttlDays*86400000,now=Date.now();try{return await withEvidenceLock(directory,PR_SUBSCRIPTIONS_FILE,STORE_LOCK_AGENT,STORE_LOCK_TASK,async()=>{if(canUseCoordinationWritePath(directory)){let view=readCoordinationSubscriptions(directory)??{},swept2=0,expiredCorrelationIds=[],now2=Date.now();for(let record3 of Object.values(view)){if(record3.status!=="active")continue;let prKey=`${record3.repoFullName}::${record3.prNumber}`,isMerged=mergedPrs?.has(prKey)??!1,isStale=now2-record3.updatedAt>ttlMs;if(isMerged||isStale&&!record3.hasUnaddressedEvents)view[record3.correlationId]={...record3,status:"expired",isWatching:!1,updatedAt:now2},expiredCorrelationIds.push(record3.correlationId),swept2+=1}if(swept2>0)persistCoordinationSubscriptions(directory,view,!0,expiredCorrelationIds.map((correlationId)=>({kind:"expired",correlationId})));return swept2}let loaded=loadViewForWrite(directory),opAudit=[],swept=0;for(let record3 of Object.values(loaded.view)){if(record3.status!=="active")continue;let prKey=`${record3.repoFullName}::${record3.prNumber}`,isMerged=mergedPrs?.has(prKey)??!1,isStale=now-record3.updatedAt>ttlMs;if(isMerged){loaded.view[record3.correlationId]={...record3,status:"expired",isWatching:!1,updatedAt:now},swept+=1,opAudit.push({kind:"expired",correlationId:record3.correlationId}),loaded.dirty=!0,log(`[pr-monitor] Swept subscription: merged/closed: ${prKey}`);continue}if(isStale&&!record3.hasUnaddressedEvents)loaded.view[record3.correlationId]={...record3,status:"expired",isWatching:!1,updatedAt:now},swept+=1,opAudit.push({kind:"expired",correlationId:record3.correlationId}),loaded.dirty=!0,log(`[pr-monitor] Swept subscription: stale (TTL ${ttlDays}d): ${prKey}`)}return finalizeWrite(directory,loaded,opAudit),swept})}catch(err){return log(`[pr-monitor] sweepStale failed: ${err instanceof Error?err.message:String(err)}`),0}}async function getPrSubscriptionHealth(directory){try{let coordinationView=readCoordinationSubscriptions(directory),read=readCheckpoint(directory),migrationPending=read.kind==="ok"&&sameProjectRoot(read.value.rootPath,directory)&&read.value.migration?.done===!1;if(coordinationView!==null&&Object.keys(coordinationView).length>0&&!migrationPending){let audit2=auditStats(directory),archiveBytes2=fileSizeOrNull(legacyArchivePath(directory))??0,checkpointBytes2=fileSizeOrNull(checkpointPath(directory))??0,health2=healthFromView(coordinationView,buildCoordinationProjectionCheckpoint(directory,coordinationView));return health2.recoverySource="checkpoint",applyFileStats(health2,checkpointBytes2,audit2,archiveBytes2),health2}let audit=auditStats(directory),archiveBytes=fileSizeOrNull(legacyArchivePath(directory))??0,checkpointBytes=fileSizeOrNull(checkpointPath(directory))??0,legacySize=fileSizeOrNull(storePath3(directory)),legacyOverLimit=legacySize!==null&&legacySize>PR_SUBSCRIPTION_LIMITS.legacySourceMaxBytes,health;if(read.kind==="ok"&&!sameProjectRoot(read.value.rootPath,directory))health=emptyHealth2(),health.recoverySource="foreign";else if(read.kind==="invalid"){if(legacySize!==null&&!legacyOverLimit){let fold=foldLegacyRegion(storePath3(directory),0,Number.MAX_SAFE_INTEGER),view={};if(!fold.ioError)mergeFoldedRecords(view,fold.folded);health=healthFromView(view,freshCheckpoint(directory)),health.corruptLegacyRecords=fold.corruptLines}else health=emptyHealth2();health.recoverySource="corrupt-recovered"}else if(read.kind==="absent"){if(legacySize===null||legacyOverLimit)health=emptyHealth2();else{let fold=foldLegacyRegion(storePath3(directory),0,Number.MAX_SAFE_INTEGER),view={};if(!fold.ioError)mergeFoldedRecords(view,fold.folded);health=healthFromView(view,freshCheckpoint(directory)),health.corruptLegacyRecords=fold.corruptLines}health.recoverySource=legacySize===null?"empty":"legacy-log"}else{let pendingCheckpoint=migrationPending&&coordinationView!==null?(()=>{let merged=cloneCheckpoint(read.value);return merged.records={...merged.records,...coordinationView},merged})():read.value,overlaid=overlayLegacy(directory,pendingCheckpoint);health=healthFromView(overlaid.view,read.value),health.recoverySource=overlaid.usedLegacy?"checkpoint+legacy":"checkpoint"}return health.legacyOverLimit=legacyOverLimit,applyFileStats(health,checkpointBytes,audit,archiveBytes),health}catch(err){return log(`[pr-monitor] getPrSubscriptionHealth failed: ${storageErrorCode(err)}`),emptyHealth2()}}function applyFileStats(health,checkpointBytes,audit,archiveBytes){health.checkpointBytes=checkpointBytes,health.pressurePct=checkpointBytes===0?0:Math.round(checkpointBytes/health.checkpointLimitBytes*1000)/10,health.auditLines=audit.lines,health.auditBytes=audit.bytes,health.legacyArchiveBytes=archiveBytes}function emptyHealth2(){return{schemaVersion:1,sequence:0,checkpointAgeMs:null,checkpointBytes:0,checkpointLimitBytes:PR_SUBSCRIPTION_LIMITS.maxCheckpointBytes,pressurePct:0,activeCount:0,removedCount:0,expiredCount:0,terminalSummary:{removed:0,expired:0,lastTerminalAt:null},auditLines:0,auditBytes:0,auditLimitBytes:PR_SUBSCRIPTION_LIMITS.auditMaxBytesHigh,compactions:0,corruptLegacyRecords:0,droppedAuditTransitions:0,resets:0,recoverySource:"empty",migration:null,legacyArchiveBytes:0,legacyOverLimit:!1}}function healthFromView(view,checkpoint2){let records=Object.values(view),health=emptyHealth2();return health.sequence=checkpoint2.sequence,health.checkpointAgeMs=checkpoint2.sequence>0?Date.now()-checkpoint2.updatedAt:null,health.activeCount=records.filter((r)=>r.status==="active").length,health.removedCount=records.filter((r)=>r.status==="removed").length,health.expiredCount=records.filter((r)=>r.status==="expired").length,health.terminalSummary={...checkpoint2.terminalSummary},health.compactions=checkpoint2.maintenance.compactions,health.corruptLegacyRecords=checkpoint2.maintenance.corruptLegacyRecords,health.droppedAuditTransitions=checkpoint2.maintenance.droppedAuditTransitions,health.resets=checkpoint2.maintenance.resets,health.migration=checkpoint2.migration?{done:checkpoint2.migration.done,scannedBytes:checkpoint2.migration.scannedBytes,sourceBytes:checkpoint2.migration.sourceBytes}:null,health}var PR_SUBSCRIPTIONS_FILE="pr-monitor/subscriptions.jsonl",PR_SUBSCRIPTIONS_CHECKPOINT_FILE="pr-monitor/subscriptions.checkpoint.json",PR_SUBSCRIPTIONS_AUDIT_FILE="pr-monitor/subscriptions.audit.jsonl",LEGACY_ARCHIVE_FILE="pr-monitor/subscriptions.legacy.jsonl",FOREIGN_CHECKPOINT_FILE="pr-monitor/subscriptions.checkpoint.foreign.json",CORRUPT_CHECKPOINT_FILE="pr-monitor/subscriptions.checkpoint.corrupt.json",FOREIGN_LEGACY_FILE="pr-monitor/subscriptions.legacy.foreign.jsonl",PR_SUBSCRIPTION_COORDINATION_NAMESPACE="background.pr-subscription",STORE_LOCK_AGENT="pr-monitor",STORE_LOCK_TASK="pr-subscriptions",PR_SUBSCRIPTION_LIMITS,onSubscriptionCreated=null,prMonitorWorkerHandlers,MAX_PR_MONITOR_WORKER_HANDLERS=64,RecordSchema,TerminalSummarySchema,MigrationSchema,MaintenanceSchema,CheckpointSchema,PrSubscriptionCapacityError,legacyOverLimitWarned,migrationCapacityWarned,bootstrapAttempted,_internals98;var init_pr_subscriptions=__esm(()=>{init_zod();init_db();init_lock();init_learning_health();init_utils2();init_forge_provider();init_telemetry();init_utils();init_atomic_write();init_canonical_root();PR_SUBSCRIPTION_LIMITS={readChunkBytes:65536,maxRecordBytes:65536,migrationChunkBytes:1048576,migrationMaxBytesPerOperation:8388608,legacySourceMaxBytes:67108864,defaultMaxActiveSubscriptions:20,maxCheckpointRecords:512,maxCheckpointBytes:262144,checkpointHardReadBytes:1048576,terminalRecordsHigh:60,terminalRecordsLow:30,terminalMaxAgeMs:2592000000,auditMaxLinesHigh:500,auditMaxLinesLow:250,auditMaxBytesHigh:131072,auditMaxBytesLow:65536,legacyArchiveTtlMs:604800000,bootstrapLockTimeoutMs:5000};prMonitorWorkerHandlers=new Map;RecordSchema=exports_external.object({correlationId:exports_external.string().min(1),sessionID:exports_external.string().min(1),prNumber:exports_external.number().int().positive(),repoFullName:exports_external.string().regex(/^[^/\s]+(?:\/[^/\s]+)+$/,"Must be owner/repo format (GitLab nested namespaces allowed)"),prUrl:exports_external.string().min(1),forge:exports_external.object({provider:exports_external.literal("gitlab"),host:exports_external.string().min(1)}).optional(),headRefOid:exports_external.string().optional(),lastCheckedAt:exports_external.number(),lastCommentId:exports_external.string().optional(),lastCheckRunSet:exports_external.string().optional(),mergeableState:exports_external.string().optional(),mergeGroupRunStatus:exports_external.string().optional(),mergeGroupRunConclusion:exports_external.string().optional(),mergeGroupRunHtmlUrl:exports_external.string().optional(),isWatching:exports_external.boolean(),hasUnaddressedEvents:exports_external.boolean(),status:exports_external.enum(["active","removed","expired"]),createdAt:exports_external.number(),updatedAt:exports_external.number(),errorCount:exports_external.number().int().min(0),customPollIntervalSeconds:exports_external.number().int().positive().optional(),customFailureThreshold:exports_external.number().int().min(0).optional(),customCooldownSeconds:exports_external.number().int().min(0).optional()}).strict().superRefine((record3,ctx)=>{if(isForgePrUrl(record3.prUrl))return;if(record3.forge&&isForgePrUrl(record3.prUrl,{provider:record3.forge.provider,host:record3.forge.host}))return;ctx.addIssue({code:exports_external.ZodIssueCode.custom,path:["prUrl"],message:"Must be a valid PR URL (GitHub /pull/N or GitLab /-/merge_requests/N)"})}),TerminalSummarySchema=exports_external.object({removed:exports_external.number().int().min(0),expired:exports_external.number().int().min(0),lastTerminalAt:exports_external.number().int().nullable()}).strict(),MigrationSchema=exports_external.object({scannedBytes:exports_external.number().int().nonnegative(),sourceBytes:exports_external.number().int().nonnegative(),sourceMtimeMs:exports_external.number().nonnegative(),corruptLines:exports_external.number().int().nonnegative(),discardingOversizeLine:exports_external.boolean().optional().default(!1),baselineRecords:exports_external.record(exports_external.string(),RecordSchema).optional().default({}),baselineTerminalSummary:TerminalSummarySchema.optional().default({removed:0,expired:0,lastTerminalAt:null}),done:exports_external.boolean(),archived:exports_external.boolean(),startedAt:exports_external.number().int().nonnegative()}).strict(),MaintenanceSchema=exports_external.object({compactions:exports_external.number().int().nonnegative(),droppedAuditTransitions:exports_external.number().int().nonnegative(),corruptLegacyRecords:exports_external.number().int().nonnegative(),lastCompactedAt:exports_external.number().int().nullable(),resets:exports_external.number().int().nonnegative()}).strict(),CheckpointSchema=exports_external.object({schemaVersion:exports_external.literal(1),sequence:exports_external.number().int().positive(),rootPath:exports_external.string().min(1).max(4096),updatedAt:exports_external.number().int().nonnegative(),records:exports_external.record(exports_external.string(),RecordSchema),terminalSummary:TerminalSummarySchema,migration:MigrationSchema.nullable(),maintenance:MaintenanceSchema}).strict();PrSubscriptionCapacityError=class PrSubscriptionCapacityError extends Error{constructor(message){super(message);this.name="PrSubscriptionCapacityError"}};legacyOverLimitWarned=new Map;migrationCapacityWarned=new Map;bootstrapAttempted=new Map;_internals98={afterCheckpointFstat:(_filePath)=>{},archiveStatSync:fs65.statSync,auditCompactionWrite:atomicWriteSwarmFileSync,beforeBootstrapLock:(_directory2)=>{},beforeArchiveLegacy:(_directory2)=>{},beforeArchiveRename:(_directory2)=>{},foldLegacyRegion,legacyCloseSync:fs65.closeSync,legacyFstatSync:fs65.fstatSync,mergeFoldedRecords,readSync:fs65.readSync,renameWithRetry:renameWithRetry6,sameProjectRoot,statSync:fs65.statSync,writeCheckpointFile}});var exports_state={};__export(exports_state,{updateTaskWorkflowCache:()=>updateTaskWorkflowCache,updateAgentEventTime:()=>updateAgentEventTime,takeReviewerScopeGeneration:()=>takeReviewerScopeGeneration,sweepStaleSessions:()=>sweepStaleSessions,swarmState:()=>swarmState,startReviewerScopeGeneration:()=>startReviewerScopeGeneration,startAgentSession:()=>startAgentSession,settleReviewerScopeMergeback:()=>settleReviewerScopeMergeback,setSessionEnvironment:()=>setSessionEnvironment,setSessionBudget:()=>setSessionBudget,setLiveContextWindow:()=>setLiveContextWindow,setFinalPromptPressure:()=>setFinalPromptPressure,setFinalAccountingWarningBand:()=>setFinalAccountingWarningBand,setDispatchParent:()=>setDispatchParent,setCriticalShownIds:()=>setCriticalShownIds,reviewerScopeGenerationHasDeclaredOverlap:()=>reviewerScopeGenerationHasDeclaredOverlap,resolveSessionWorkspaceDirectory:()=>resolveSessionWorkspaceDirectory,resolveInitialTurboMode:()=>resolveInitialTurboMode,resolveDispatchParent:()=>resolveDispatchParent,resetSwarmStatePreservingSingletons:()=>resetSwarmStatePreservingSingletons,resetSwarmState:()=>resetSwarmState,resetModifiedFilesForTask:()=>resetModifiedFilesForTask,reserveStageBRouteEvidence:()=>reserveStageBRouteEvidence,rehydrateSessionFromDisk:()=>rehydrateSessionFromDisk,rehydratePrSubscriptions:()=>rehydratePrSubscriptions,recordStageBRouteEvidence:()=>recordStageBRouteEvidence,recordStageBCompletion:()=>recordStageBCompletion,recordSessionWorkspaceRoot:()=>recordSessionWorkspaceRoot,recordReviewerScopeGenerationFileFingerprint:()=>recordReviewerScopeGenerationFileFingerprint,recordReviewerScopeGenerationFile:()=>recordReviewerScopeGenerationFile,recordReviewerScopeGenerationCaptureFailure:()=>recordReviewerScopeGenerationCaptureFailure,recordPrimaryOwner:()=>recordPrimaryOwner,recordPhaseAgentDispatch:()=>recordPhaseAgentDispatch,recordPendingDispatchAuthorization:()=>recordPendingDispatchAuthorization,recordModifiedFilesForTask:()=>recordModifiedFilesForTask,recordModifiedFileForTask:()=>recordModifiedFileForTask,pruneOldWindows:()=>pruneOldWindows,peekReviewerScopeGenerationClaim:()=>peekReviewerScopeGenerationClaim,peekReviewerScopeGenerationByStatus:()=>peekReviewerScopeGenerationByStatus,peekReadyReviewerScopeGeneration:()=>peekReadyReviewerScopeGeneration,maybeSweepStaleSessions:()=>maybeSweepStaleSessions,markStageBRouteRequired:()=>markStageBRouteRequired,markReviewerScopeGenerationReady:()=>markReviewerScopeGenerationReady,markReviewerScopeGenerationNoChange:()=>markReviewerScopeGenerationNoChange,markReviewerScopeGenerationMergebackPending:()=>markReviewerScopeGenerationMergebackPending,isSwarmOwnedSession:()=>isSwarmOwnedSession,isStageBRouteRequired:()=>isStageBRouteRequired,isReviewerScopeGenerationCurrent:()=>isReviewerScopeGenerationCurrent,isRegisteredSwarmSubagent:()=>isRegisteredSwarmSubagent,isCouncilGateActive:()=>isCouncilGateActive,incrementGateDenialCount:()=>incrementGateDenialCount,hasModifiedFilesForTask:()=>hasModifiedFilesForTask,hasBothStageBCompletions:()=>hasBothStageBCompletions,hasActiveTurboMode:()=>hasActiveTurboMode,hasActiveLeanTurbo:()=>hasActiveLeanTurbo,hasActiveFullAuto:()=>hasActiveFullAuto,getTaskState:()=>getTaskState,getStageBRouteEvidence:()=>getStageBRouteEvidence,getSessionEnvironment:()=>getSessionEnvironment,getSessionBudgetTokens:()=>getSessionBudgetTokens,getSessionBudgetPct:()=>getSessionBudgetPct,getRunContext:()=>getRunContext,getReviewerScopeOwnershipHistory:()=>getReviewerScopeOwnershipHistory,getReviewerScopeGenerationForCoderCall:()=>getReviewerScopeGenerationForCoderCall,getResolvedAutoProceed:()=>getResolvedAutoProceed,getRehydrationCache:()=>getRehydrationCache,getPrimaryOwner:()=>getPrimaryOwner,getModifiedFilesForTask:()=>getModifiedFilesForTask,getLiveContextWindow:()=>getLiveContextWindow,getLiveContextModelIdentity:()=>getLiveContextModelIdentity,getFinalPromptPressure:()=>getFinalPromptPressure,getFinalAccountingWarningBand:()=>getFinalAccountingWarningBand,getDisplayFinalPromptPressure:()=>getDisplayFinalPromptPressure,getDisplayBudget:()=>getDisplayBudget,getAgentSession:()=>getAgentSession,getActiveWindow:()=>getActiveWindow,getActiveFullAutoSessionID:()=>getActiveFullAutoSessionID,ensureSessionEnvironment:()=>ensureSessionEnvironment,ensureAgentSession:()=>ensureAgentSession,endAgentSession:()=>endAgentSession,discardReviewerScopeGenerationForCoderCall:()=>discardReviewerScopeGenerationForCoderCall,discardReviewerScopeGenerationClaim:()=>discardReviewerScopeGenerationClaim,defaultRunContext:()=>defaultRunContext,completeModifiedFilesForTask:()=>completeModifiedFilesForTask,clearStageBRouteRequired:()=>clearStageBRouteRequired,clearStageBRouteEvidence:()=>clearStageBRouteEvidence,clearGateDenialCount:()=>clearGateDenialCount,clearFinalAccountingWarningBands:()=>clearFinalAccountingWarningBands,clearDispatchLineageForSession:()=>clearDispatchLineageForSession,clearCriticalShownIds:()=>clearCriticalShownIds,claimReviewerScopeGeneration:()=>claimReviewerScopeGeneration,canAdvanceTaskState:()=>canAdvanceTaskState,buildRehydrationCache:()=>buildRehydrationCache,buildGateDenialDirectiveKey:()=>buildGateDenialDirectiveKey,beginInvocation:()=>beginInvocation,attachReviewerScopeGenerationDispatchSnapshot:()=>attachReviewerScopeGenerationDispatchSnapshot,applyRehydrationCache:()=>applyRehydrationCache,advanceTaskStateAndPersist:()=>advanceTaskStateAndPersist,advanceTaskState:()=>advanceTaskState,addKnowledgeAckDedup:()=>addKnowledgeAckDedup,_resetCouncilDisagreementWarnings:()=>_resetCouncilDisagreementWarnings,_internals:()=>_internals99,REVIEWER_SCOPE_GENERATION_TTL_MS:()=>REVIEWER_SCOPE_GENERATION_TTL_MS,PENDING_DISPATCH_AUTHORIZATION_TTL_MS:()=>PENDING_DISPATCH_AUTHORIZATION_TTL_MS,MAX_TRACKED_TASK_FILE_ATTRIBUTIONS:()=>MAX_TRACKED_TASK_FILE_ATTRIBUTIONS,MAX_TRACKED_KNOWLEDGE_ACKS:()=>MAX_TRACKED_KNOWLEDGE_ACKS,MAX_TRACKED_GATE_DENIALS:()=>MAX_TRACKED_GATE_DENIALS,MAX_TRACKED_DISPATCH_PARENTS:()=>MAX_TRACKED_DISPATCH_PARENTS,MAX_TRACKED_CRITICAL_SHOWN:()=>MAX_TRACKED_CRITICAL_SHOWN,MAX_TRACKED_CONTEXT_WINDOWS:()=>MAX_TRACKED_CONTEXT_WINDOWS,MAX_TRACKED_BUDGET_SESSIONS:()=>MAX_TRACKED_BUDGET_SESSIONS,MAX_REVIEWER_SCOPE_OWNERSHIP_HISTORY:()=>MAX_REVIEWER_SCOPE_OWNERSHIP_HISTORY,MAX_REVIEWER_SCOPE_GENERATION_FILES:()=>MAX_REVIEWER_SCOPE_GENERATION_FILES,MAX_REVIEWER_SCOPE_GENERATIONS:()=>MAX_REVIEWER_SCOPE_GENERATIONS,AgentRunContext:()=>AgentRunContext});import{randomUUID as randomUUID14}from"node:crypto";import*as fs66 from"node:fs/promises";import*as path108 from"node:path";function compareWorkflowStatePrecedence(left,right){return compareTaskWorkflowStateRank(left,right)}function cloneReviewerScopeGeneration(generation){return{...generation,declaredFiles:[...generation.declaredFiles],modifiedFiles:[...generation.modifiedFiles],modifiedFileFingerprints:generation.modifiedFileFingerprints.map((entry)=>({...entry})),captureFailures:generation.captureFailures.map((entry)=>({...entry})),reviewerDispatchScope:generation.reviewerDispatchScope?{...generation.reviewerDispatchScope,files:[...generation.reviewerDispatchScope.files]}:void 0}}function cloneReviewerScopeOwnershipTombstone(tombstone){return{...tombstone,declaredFiles:[...tombstone.declaredFiles],modifiedFiles:[...tombstone.modifiedFiles],modifiedFileFingerprints:tombstone.modifiedFileFingerprints.map((fingerprint2)=>({...fingerprint2}))}}function createNonTransientCircuitState(agentName,invocationId){return{ownerAgent:stripKnownSwarmPrefix(agentName),ownerInvocationId:invocationId,category:null,sameCategoryCount:0,hardStop:!1,lastSignal:null}}function getRunContext(runId){if(!runId)return defaultRunContext;return _runContexts.get(runId)??defaultRunContext}function resetSwarmState(){swarmState.activeToolCalls.clear(),swarmState.toolAggregates.clear(),swarmState.activeAgent.clear(),swarmState.primaryOwnerBySession.clear(),swarmState.delegationChains.clear(),swarmState.pendingEvents=0,swarmState.lastBudgetBySession.clear(),swarmState.finalPromptPressureBySession.clear(),clearAllTurnLedgers(),swarmState.finalAccountingWarningBandsBySession.clear(),swarmState.liveContextWindows.clear(),swarmState.agentSessions.clear(),clearSnapshotSessionOwnerships(),_lastIdleSweepAtMs=0,clearTrajectoryCache(),clearTrajectoryStepCounters(),swarmState.pendingRehydrations.clear(),swarmState.opencodeClient=null,swarmState.curatorInitAgentNames=[],swarmState.curatorPhaseAgentNames=[],swarmState.curatorPostmortemAgentNames=[],swarmState.curatorConsolidationAgentNames=[],swarmState.skillImproverAgentNames=[],swarmState.specWriterAgentNames=[],swarmState.currentCriticalShownIds.clear(),swarmState.knowledgeAckDedup.clear(),swarmState.gateDenialCounts.clear(),swarmState.generatedAgentNames=[],swarmState.dispatchParentByChildSession.clear(),swarmState.pendingDispatchAuthorizations=[],clearHydrationOwnershipState(),swarmState.fullAutoEnabledInConfig=!1,swarmState.environmentProfiles.clear(),clearAllActionCircuits(),clearAllTaskModelRoutingState(),clearPendingCoderScope();for(let binding of clearScopeBindings())clearScopeBindingFromDisk({directory:binding.workspaceIdentity,binding});resetStandardWorktreeIsolationState(),resetRealtimeLearningNudgeState(),_councilDisagreementWarned.clear()}function resetSwarmStatePreservingSingletons(){let{opencodeClient:preservedOpencodeClient,fullAutoEnabledInConfig:preservedFullAutoEnabledInConfig,curatorInitAgentNames:preservedCuratorInitAgentNames,curatorPhaseAgentNames:preservedCuratorPhaseAgentNames,curatorPostmortemAgentNames:preservedCuratorPostmortemAgentNames,curatorConsolidationAgentNames:preservedCuratorConsolidationAgentNames,skillImproverAgentNames:preservedSkillImproverAgentNames,specWriterAgentNames:preservedSpecWriterAgentNames,generatedAgentNames:preservedGeneratedAgentNames}=swarmState;resetSwarmState(),swarmState.opencodeClient=preservedOpencodeClient,swarmState.fullAutoEnabledInConfig=preservedFullAutoEnabledInConfig,swarmState.curatorInitAgentNames=preservedCuratorInitAgentNames,swarmState.curatorPhaseAgentNames=preservedCuratorPhaseAgentNames,swarmState.curatorPostmortemAgentNames=preservedCuratorPostmortemAgentNames,swarmState.curatorConsolidationAgentNames=preservedCuratorConsolidationAgentNames,swarmState.skillImproverAgentNames=preservedSkillImproverAgentNames,swarmState.specWriterAgentNames=preservedSpecWriterAgentNames,swarmState.generatedAgentNames=preservedGeneratedAgentNames}function pruneExpiredPendingDispatchAuthorizations(now){let pendings=swarmState.pendingDispatchAuthorizations;if(pendings.length===0)return;let alive=pendings.filter((pending)=>now-pending.recordedAt<=PENDING_DISPATCH_AUTHORIZATION_TTL_MS);if(alive.length!==pendings.length)swarmState.pendingDispatchAuthorizations=alive}function recordPendingDispatchAuthorization(parentSessionId,agentName){if(!parentSessionId||!agentName)return;let now=Date.now();if(pruneExpiredPendingDispatchAuthorizations(now),swarmState.pendingDispatchAuthorizations.push({parentSessionId,agentName:stripKnownSwarmPrefix(agentName).toLowerCase(),recordedAt:now}),swarmState.pendingDispatchAuthorizations.length>MAX_TRACKED_DISPATCH_PARENTS)swarmState.pendingDispatchAuthorizations.splice(0,swarmState.pendingDispatchAuthorizations.length-MAX_TRACKED_DISPATCH_PARENTS)}function setDispatchParentEntry(childSessionId,parentSessionId){if(!childSessionId||!parentSessionId)return;if(swarmState.dispatchParentByChildSession.delete(childSessionId),swarmState.dispatchParentByChildSession.set(childSessionId,parentSessionId),swarmState.dispatchParentByChildSession.size>MAX_TRACKED_DISPATCH_PARENTS){let oldestKey=swarmState.dispatchParentByChildSession.keys().next().value;if(oldestKey!==void 0)swarmState.dispatchParentByChildSession.delete(oldestKey)}}function setDispatchParent(childSessionId,parentSessionId){if(!childSessionId||!parentSessionId)return;setDispatchParentEntry(childSessionId,parentSessionId);let now=Date.now();pruneExpiredPendingDispatchAuthorizations(now);let normalizedParent=parentSessionId,pendings=swarmState.pendingDispatchAuthorizations,matchIndex=pendings.findIndex((pending)=>pending.parentSessionId===normalizedParent);if(matchIndex>=0)pendings.splice(matchIndex,1)}function resolveDispatchParent(childSessionId){return swarmState.dispatchParentByChildSession.get(childSessionId)}function adoptPendingDispatchAuthorization(newSessionId,agentName){if(swarmState.dispatchParentByChildSession.has(newSessionId))return;let normalizedRole=stripKnownSwarmPrefix(agentName).toLowerCase();if(!normalizedRole)return;let now=Date.now();pruneExpiredPendingDispatchAuthorizations(now);let pendings=swarmState.pendingDispatchAuthorizations,matchIndex=pendings.findIndex((pending)=>pending.agentName===normalizedRole);if(matchIndex<0)return;let[adopted]=pendings.splice(matchIndex,1);if(!adopted)return;setDispatchParentEntry(newSessionId,adopted.parentSessionId)}function clearDispatchLineageForSession(sessionId){swarmState.dispatchParentByChildSession.delete(sessionId);for(let[child,parent]of swarmState.dispatchParentByChildSession)if(parent===sessionId)swarmState.dispatchParentByChildSession.delete(child);swarmState.pendingDispatchAuthorizations=swarmState.pendingDispatchAuthorizations.filter((pending)=>pending.parentSessionId!==sessionId)}function isBoundedGenerationValue(value,maxLength){return value.length>0&&value.length<=maxLength&&!Array.from(value).some((char)=>{let code=char.charCodeAt(0);return code<=31||code===127})}function reviewerScopeGenerationKey(taskId,coderCallID,generation){return`${taskId}\x00${coderCallID}\x00${generation}`}function reviewerScopeOwnershipKey(taskId,coderCallID,generation,sessionIncarnation){return`${taskId}\x00${coderCallID}\x00${generation}\x00${sessionIncarnation}`}function ensureReviewerScopeGenerationState(session){return session.reviewerScopeGenerations??=new Map,session.reviewerScopeGenerationCounter??=0,session.reviewerScopeIncarnation??=randomUUID14(),session.reviewerScopeLatestGenerationByTask??=new Map,session.reviewerScopeOwnershipHistory??=new Map,{generations:session.reviewerScopeGenerations,counter:session.reviewerScopeGenerationCounter,incarnation:session.reviewerScopeIncarnation,latestByTask:session.reviewerScopeLatestGenerationByTask,ownershipHistory:session.reviewerScopeOwnershipHistory}}function sweepReviewerScopeGenerations(session,now){let{generations}=ensureReviewerScopeGenerationState(session);for(let[key2,entry]of generations){if(entry.status==="claimed"||entry.status==="mergeback_pending"||entry.status==="mergeback_mismatch")continue;if(!Number.isFinite(entry.createdAt)||now<entry.createdAt||now-entry.createdAt>REVIEWER_SCOPE_GENERATION_TTL_MS)generations.delete(key2)}}function startReviewerScopeGeneration(input){let session=swarmState.agentSessions.get(input.parentSessionID);if(!session||!isBoundedGenerationValue(input.taskId,512)||!isBoundedGenerationValue(input.coderCallID,512)||!input.captureDirectory.trim()||!input.workspaceIdentity.trim())return null;let now=input.createdAt??Date.now();sweepReviewerScopeGenerations(session,now);let{generations,counter,incarnation,latestByTask}=ensureReviewerScopeGenerationState(session);for(let[key3,entry]of generations)if(entry.taskId===input.taskId&&entry.status!=="claimed")generations.delete(key3);while(generations.size>=MAX_REVIEWER_SCOPE_GENERATIONS){let oldestUnclaimed=[...generations.entries()].find(([,entry])=>entry.status!=="claimed")?.[0];if(!oldestUnclaimed)return null;generations.delete(oldestUnclaimed)}session.reviewerScopeGenerationCounter=counter>=Number.MAX_SAFE_INTEGER?1:counter+1;let generation={taskId:input.taskId,coderCallID:input.coderCallID,generation:session.reviewerScopeGenerationCounter,sessionIncarnation:incarnation,background:input.background===!0,captureDirectory:input.captureDirectory,workspaceIdentity:input.workspaceIdentity,declaredFiles:[...new Set(input.declaredFiles??[])],modifiedFiles:[],modifiedFileFingerprints:[],captureFailures:[],status:"collecting",createdAt:now};if(!latestByTask.has(generation.taskId))while(latestByTask.size>=MAX_REVIEWER_SCOPE_GENERATIONS){let oldestTask=latestByTask.keys().next().value;if(!oldestTask)break;latestByTask.delete(oldestTask)}latestByTask.delete(generation.taskId),latestByTask.set(generation.taskId,{generation:generation.generation,coderCallID:generation.coderCallID,sessionIncarnation:generation.sessionIncarnation});let key2=reviewerScopeGenerationKey(generation.taskId,generation.coderCallID,generation.generation);return generations.set(key2,generation),cloneReviewerScopeGeneration(generation)}function recordReviewerScopeGenerationFile(input){let session=swarmState.agentSessions.get(input.parentSessionID);if(!session||!isBoundedGenerationValue(input.file,4096)||!isBoundedGenerationValue(input.taskId,512)||!isBoundedGenerationValue(input.coderCallID,512))return!1;sweepReviewerScopeGenerations(session,input.now??Date.now());let{generations}=ensureReviewerScopeGenerationState(session),matches=[...generations.values()].filter((entry)=>entry.taskId===input.taskId&&entry.coderCallID===input.coderCallID&&entry.status==="collecting");if(matches.length!==1)return!1;let generation=matches[0];if(generation.modifiedFiles.includes(input.file))return!0;if(generation.modifiedFiles.length>=MAX_REVIEWER_SCOPE_GENERATION_FILES){let key2=reviewerScopeGenerationKey(generation.taskId,generation.coderCallID,generation.generation);return generations.delete(key2),!1}return generation.modifiedFiles.push(input.file),!0}function recordReviewerScopeGenerationFileFingerprint(input){let session=swarmState.agentSessions.get(input.parentSessionID);if(!session)return!1;let{generations}=ensureReviewerScopeGenerationState(session),matches=[...generations.values()].filter((entry)=>entry.taskId===input.taskId&&entry.coderCallID===input.coderCallID&&entry.status==="collecting");if(matches.length!==1)return!1;let generation=matches[0];if(!generation.modifiedFiles.includes(input.fingerprint.file))return!1;generation.captureFailures=generation.captureFailures.filter((entry)=>entry.file!==input.fingerprint.file);let existingIndex=generation.modifiedFileFingerprints.findIndex((entry)=>entry.file===input.fingerprint.file);if(existingIndex>=0)return generation.modifiedFileFingerprints[existingIndex]={...input.fingerprint},!0;if(generation.modifiedFileFingerprints.length>=MAX_REVIEWER_SCOPE_GENERATION_FILES)return!1;return generation.modifiedFileFingerprints.push({...input.fingerprint}),!0}function recordReviewerScopeGenerationCaptureFailure(input){let session=swarmState.agentSessions.get(input.parentSessionID);if(!session||!isBoundedGenerationValue(input.file,4096))return!1;let{generations}=ensureReviewerScopeGenerationState(session),matches=[...generations.values()].filter((entry)=>entry.taskId===input.taskId&&entry.coderCallID===input.coderCallID&&entry.status==="collecting");if(matches.length!==1)return!1;let generation=matches[0],now=input.at??Date.now();generation.modifiedFileFingerprints=generation.modifiedFileFingerprints.filter((entry)=>entry.file!==input.file);let existingIndex=generation.captureFailures.findIndex((entry)=>entry.file===input.file);if(existingIndex>=0){let existing=generation.captureFailures[existingIndex];return generation.captureFailures[existingIndex]={...existing,code:input.code,retryable:input.retryable,attempts:existing.attempts+1,at:now},!0}if(generation.captureFailures.length>=MAX_REVIEWER_SCOPE_GENERATION_FILES)generation.captureFailures.shift();return generation.captureFailures.push({file:input.file,code:input.code,retryable:input.retryable,attempts:1,at:now}),!0}function markReviewerScopeGenerationReady(input){let session=swarmState.agentSessions.get(input.parentSessionID);if(!session)return!1;let now=input.readyAt??Date.now();sweepReviewerScopeGenerations(session,now);let{generations}=ensureReviewerScopeGenerationState(session),matches=[...generations.values()].filter((entry)=>entry.taskId===input.taskId&&entry.coderCallID===input.coderCallID&&(entry.status==="collecting"||entry.status==="ready"));if(matches.length!==1)return!1;let generation=matches[0];if(generation.status==="ready")return!0;if(input.primaryWorkspaceIdentity&&generation.workspaceIdentity!==input.primaryWorkspaceIdentity)return!1;if(!(generation.modifiedFiles.length===generation.modifiedFileFingerprints.length&&generation.modifiedFiles.every((file3)=>generation.modifiedFileFingerprints.some((entry)=>entry.file===file3))))return!1;return generation.status="ready",generation.readyAt=now,!0}function markReviewerScopeGenerationNoChange(input){let session=swarmState.agentSessions.get(input.parentSessionID);if(!session)return!1;let now=input.at??Date.now();sweepReviewerScopeGenerations(session,now);let{generations}=ensureReviewerScopeGenerationState(session),matches=[...generations.values()].filter((entry)=>entry.taskId===input.taskId&&entry.coderCallID===input.coderCallID&&entry.status==="collecting");if(matches.length!==1)return!1;let generation=matches[0];if(generation.modifiedFiles.length!==0)return!1;return generation.status="no_change",generation.readyAt=now,!0}function markReviewerScopeGenerationMergebackPending(input){let session=swarmState.agentSessions.get(input.parentSessionID);if(!session)return!1;let{generations}=ensureReviewerScopeGenerationState(session),matches=[...generations.values()].filter((entry)=>(input.taskId===void 0||entry.taskId===input.taskId)&&entry.coderCallID===input.coderCallID&&(entry.status==="collecting"||entry.status==="ready"));if(matches.length!==1)return!1;if(matches[0].status==="mergeback_pending")return!0;return matches[0].status="mergeback_pending",!0}function settleReviewerScopeMergeback(input){let session=swarmState.agentSessions.get(input.parentSessionID);if(!session)return!1;let{generations}=ensureReviewerScopeGenerationState(session),matches=[...generations.values()].filter((entry)=>(input.taskId===void 0||entry.taskId===input.taskId)&&entry.coderCallID===input.coderCallID&&entry.status==="mergeback_pending");if(matches.length!==1)return!1;let generation=matches[0],now=input.outcome.at??Date.now();if(input.outcome.verified){if(generation.status="ready",generation.readyAt===void 0)generation.readyAt=now;return generation.mergeback={verifiedAt:now,primaryWorkspaceIdentity:input.outcome.primaryWorkspaceIdentity},generation.captureDirectory=input.outcome.primaryDirectory,generation.workspaceIdentity=input.outcome.primaryWorkspaceIdentity,!0}return generation.status="mergeback_mismatch",generation.mergeback={failedAt:now,reason:input.outcome.reason},!0}function getReviewerScopeGenerationForCoderCall(input){let session=swarmState.agentSessions.get(input.parentSessionID);if(!session)return null;sweepReviewerScopeGenerations(session,input.now??Date.now());let{generations}=ensureReviewerScopeGenerationState(session),matches=[...generations.values()].filter((entry)=>entry.coderCallID===input.coderCallID&&(input.taskId===void 0||entry.taskId===input.taskId));return matches.length===1?cloneReviewerScopeGeneration(matches[0]):null}function peekReadyReviewerScopeGeneration(input){let session=swarmState.agentSessions.get(input.parentSessionID);if(!session)return null;sweepReviewerScopeGenerations(session,input.now??Date.now());let{generations}=ensureReviewerScopeGenerationState(session),matches=[...generations.values()].filter((entry)=>entry.taskId===input.taskId&&entry.status==="ready");return matches.length===1?cloneReviewerScopeGeneration(matches[0]):null}function peekReviewerScopeGenerationByStatus(input){let session=swarmState.agentSessions.get(input.parentSessionID);if(!session)return null;sweepReviewerScopeGenerations(session,input.now??Date.now());let{generations}=ensureReviewerScopeGenerationState(session),matches=[...generations.values()].filter((entry)=>entry.taskId===input.taskId&&entry.status===input.status);return matches.length===1?cloneReviewerScopeGeneration(matches[0]):null}function claimReviewerScopeGeneration(input){let session=swarmState.agentSessions.get(input.parentSessionID);if(!session||!isBoundedGenerationValue(input.taskId,512)||!isBoundedGenerationValue(input.reviewerCallID,512))return null;sweepReviewerScopeGenerations(session,input.now??Date.now());let{generations}=ensureReviewerScopeGenerationState(session),matches=[...generations.values()].filter((entry)=>entry.taskId===input.taskId&&entry.status==="ready");if(matches.length!==1)return null;return matches[0].status="claimed",matches[0].reviewerCallID=input.reviewerCallID,cloneReviewerScopeGeneration(matches[0])}function attachReviewerScopeGenerationDispatchSnapshot(input){let session=swarmState.agentSessions.get(input.parentSessionID);if(!session)return!1;let{generations}=ensureReviewerScopeGenerationState(session),matches=[...generations.values()].filter((entry)=>entry.taskId===input.taskId&&entry.reviewerCallID===input.reviewerCallID&&entry.status==="claimed"&&entry.coderCallID===input.snapshot.coderCallID&&entry.generation===input.snapshot.generation&&entry.sessionIncarnation===input.snapshot.sessionIncarnation);if(matches.length!==1)return!1;return matches[0].reviewerDispatchScope={...input.snapshot,files:[...input.snapshot.files]},!0}function takeReviewerScopeGeneration(input){let session=swarmState.agentSessions.get(input.parentSessionID);if(!session)return null;sweepReviewerScopeGenerations(session,input.now??Date.now());let{generations}=ensureReviewerScopeGenerationState(session),matches=[...generations.entries()].filter(([,entry])=>entry.taskId===input.taskId&&entry.reviewerCallID===input.reviewerCallID&&entry.status==="claimed");if(matches.length!==1)return null;let[key2,generation]=matches[0];if(generation.background===!0&&generation.readyAt!==void 0&&Number.isFinite(generation.createdAt)&&Number.isFinite(generation.readyAt)){let{ownershipHistory}=ensureReviewerScopeGenerationState(session);while(ownershipHistory.size>=MAX_REVIEWER_SCOPE_OWNERSHIP_HISTORY){let oldestKey=ownershipHistory.keys().next().value;if(!oldestKey)break;ownershipHistory.delete(oldestKey)}let tombstone={parentSessionID:input.parentSessionID,taskId:generation.taskId,coderCallID:generation.coderCallID,generation:generation.generation,sessionIncarnation:generation.sessionIncarnation,background:!0,captureDirectory:generation.captureDirectory,workspaceIdentity:generation.workspaceIdentity,declaredFiles:[...generation.declaredFiles],modifiedFiles:[...generation.modifiedFiles],modifiedFileFingerprints:generation.modifiedFileFingerprints.map((fingerprint2)=>({...fingerprint2})),createdAt:generation.createdAt,readyAt:generation.readyAt??input.now??Date.now(),consumedAt:input.now??Date.now()};ownershipHistory.set(reviewerScopeOwnershipKey(tombstone.taskId,tombstone.coderCallID,tombstone.generation,tombstone.sessionIncarnation),tombstone)}return generations.delete(key2),cloneReviewerScopeGeneration(generation)}function getReviewerScopeOwnershipHistory(input){let session=swarmState.agentSessions.get(input.parentSessionID);if(!session)return[];let{ownershipHistory}=ensureReviewerScopeGenerationState(session);return[...ownershipHistory.values()].map(cloneReviewerScopeOwnershipTombstone)}function peekReviewerScopeGenerationClaim(input){let session=swarmState.agentSessions.get(input.parentSessionID);if(!session)return null;sweepReviewerScopeGenerations(session,input.now??Date.now());let{generations}=ensureReviewerScopeGenerationState(session),matches=[...generations.values()].filter((entry)=>entry.taskId===input.taskId&&entry.reviewerCallID===input.reviewerCallID&&entry.status==="claimed");return matches.length===1?cloneReviewerScopeGeneration(matches[0]):null}function discardReviewerScopeGenerationClaim(input){let session=swarmState.agentSessions.get(input.parentSessionID);if(!session)return!1;let{generations}=ensureReviewerScopeGenerationState(session),matches=[...generations.entries()].filter(([,entry])=>(input.taskId===void 0||entry.taskId===input.taskId)&&entry.reviewerCallID===input.reviewerCallID&&entry.status==="claimed");if(matches.length!==1)return!1;return generations.delete(matches[0][0]),!0}function reviewerScopeGenerationHasDeclaredOverlap(input){let session=swarmState.agentSessions.get(input.parentSessionID);if(!session)return!1;let{generations}=ensureReviewerScopeGenerationState(session),declared=new Set(input.declaredFiles);return[...generations.values()].some((entry)=>entry.status==="collecting"&&(entry.taskId!==input.taskId||entry.coderCallID!==input.coderCallID)&&entry.declaredFiles.some((file3)=>declared.has(file3)))}function discardReviewerScopeGenerationForCoderCall(input){let session=swarmState.agentSessions.get(input.parentSessionID);if(!session)return!1;let{generations}=ensureReviewerScopeGenerationState(session),matches=[...generations.entries()].filter(([,entry])=>(input.taskId===void 0||entry.taskId===input.taskId)&&entry.coderCallID===input.coderCallID&&entry.status!=="claimed");if(matches.length!==1)return!1;return generations.delete(matches[0][0]),!0}function isReviewerScopeGenerationCurrent(input){let session=swarmState.agentSessions.get(input.parentSessionID);if(!session)return!1;let{incarnation,latestByTask}=ensureReviewerScopeGenerationState(session),latest=latestByTask.get(input.taskId);return incarnation===input.sessionIncarnation&&latest?.generation===input.generation&&latest.coderCallID===input.coderCallID&&latest.sessionIncarnation===input.sessionIncarnation}function sweepStaleSessions(staleDurationMs=STALE_SESSION_TTL_MS,now=Date.now(),directory){let staleIds=[];for(let[id,session]of swarmState.agentSessions)if(now-session.lastToolCallTime>staleDurationMs){if(directory&&isSnapshotSessionOwnedLocally(id)&&!isSnapshotSessionAuthoritativelyStale(directory,id,staleDurationMs,now))continue;staleIds.push(id)}for(let id of staleIds){if(directory&&isSnapshotSessionOwnedLocally(id)){try{deleteSnapshotSessionRows(directory,id,"stale")}catch(error93){warn("[state] durable stale-session teardown failed:",error93 instanceof Error?error93.message:String(error93))}try{clearOverrideForSession(directory,id)}catch(error93){warn("[state] durable stale-session override teardown failed:",error93 instanceof Error?error93.message:String(error93))}}releaseSnapshotSessionOwnership(id),swarmState.agentSessions.delete(id),swarmState.delegationChains.delete(id),clearDispatchLineageForSession(id),swarmState.activeAgent.delete(id),swarmState.primaryOwnerBySession.delete(id)}return staleIds}function maybeSweepStaleSessions(staleDurationMs=STALE_SESSION_TTL_MS,now=Date.now(),directory){if(now-_lastIdleSweepAtMs<IDLE_SWEEP_COOLDOWN_MS)return[];return _lastIdleSweepAtMs=now,sweepStaleSessions(staleDurationMs,now,directory)}function resolveInitialTurboMode(directory){if(!directory)return!1;try{return _internals99.loadPluginConfigWithMeta(directory).config.turbo_mode===!0&&!(epicSentinelExists(directory)&&isEpicOpenForProject(directory))}catch{return!1}}function startAgentSession(sessionId,agentName,staleDurationMs=STALE_SESSION_TTL_MS,directory){let now=Date.now();if(claimSnapshotSessionOwnership(sessionId,!0),typeof directory==="string"&&directory.trim()==="")directory=void 0;let owningProjectKey=directory?hydrationProjectKey(directory):void 0,hydrationAuthority=owningProjectKey?captureCurrentHydrationAuthority(owningProjectKey):void 0,hydrationStamp=owningProjectKey?nextSessionHydrationStamp(owningProjectKey):void 0,hydrationAuthorityEpoch2=hydrationAuthority?.authorityEpoch;sweepStaleSessions(staleDurationMs,now,directory);let initialTurboMode=resolveInitialTurboMode(directory),sessionState={agentName,lastToolCallTime:now,lastAgentEventTime:now,delegationActive:!1,activeInvocationId:0,lastInvocationIdByAgent:{},windows:{},nonTransientCircuit:createNonTransientCircuitState(agentName,0),pendingToolExecutions:new Map,lastCompactionHint:0,architectWriteCount:0,lastCoderDelegationTaskId:null,currentTaskId:null,gateLog:new Map,reviewerCallCount:new Map,lastGateFailure:null,partialGateWarningsIssuedForTask:new Set,completionGateWarnedForTask:new Set,selfFixAttempted:!1,selfCodingWarnedAtCount:0,catastrophicPhaseWarnings:new Set,lastPhaseCompleteTimestamp:0,lastPhaseCompletePhase:0,phaseAgentsDispatched:new Set,lastCompletedPhaseAgentsDispatched:new Set,qaSkipCount:0,qaSkipTaskIds:[],taskWorkflowStates:new Map,taskWorkflowCache:new Map,stageBCompletion:new Map,stageBRouteEvidence:new Map,stageBRouteRequiredTasks:new Set,taskCouncilApproved:new Map,taskCouncilWorkflowGeneration:new Map,pendingCouncilRequirements:new Map,lastGateOutcome:null,declaredCoderScope:null,lastScopeViolation:null,scopeViolationDetected:!1,modifiedFilesByTask:new Map,modifiedFilesThisCoderTask:[],reviewerScopeGenerations:new Map,reviewerScopeGenerationCounter:0,reviewerScopeIncarnation:randomUUID14(),reviewerScopeLatestGenerationByTask:new Map,reviewerScopeOwnershipHistory:new Map,turboMode:initialTurboMode,turboStrategy:void 0,leanTurboActive:!1,leanTurboCurrentPhase:void 0,maxConcurrencyOverride:void 0,qaGateSessionOverrides:{},fullAutoMode:!1,fullAutoInteractionCount:0,fullAutoDeadlockCount:0,fullAutoLastQuestionHash:null,model_fallback_index:0,modelFallbackExhausted:!1,coderRevisions:0,revisionLimitHit:!1,loopDetectionWindow:[],pendingAdvisoryMessages:[],sessionRehydratedAt:0,owningProjectKey,hydrationStamp,hydrationAuthorityEpoch:hydrationAuthorityEpoch2,prmPatternCounts:new Map,prmEscalationLevel:0,prmLastPatternDetected:null,prmTrajectoryStep:0,prmHardStopPending:!1,prmHardStopInjectPending:!1,prmInjectedAdvisoryKeys:new Set,prmStruckEpisodes:new Map,prmLadderCounts:new Map,prmEpisodes:new Map,prmEpisodeGeneration:0,executionEpisodeArmed:!1,prSubscriptions:new Map};if(swarmState.agentSessions.set(sessionId,sessionState),directory){try{recordSessionStart(directory,now)}catch{}queueMicrotask(()=>{maybeSuggestWorktreeLink(directory,sessionId)})}if(telemetry.sessionStarted(sessionId,agentName),swarmState.activeAgent.set(sessionId,agentName),_internals99.applyRehydrationCache(sessionState),directory){let liveSession=sessionState,shouldCommitRehydration=()=>hydrationAuthority!==void 0&&isHydrationAuthorityCurrent(hydrationAuthority)&&swarmState.agentSessions.get(sessionId)===liveSession,rehydrationPromise;rehydrationPromise=_internals99.rehydrateSessionFromDisk(directory,sessionState,shouldCommitRehydration).then(async()=>{if(!shouldCommitRehydration())return;try{let subscriptions=await _internals99.rehydratePrSubscriptions(sessionId,directory);if(!shouldCommitRehydration())return;sessionState.prSubscriptions=subscriptions}catch(err){warn("[state] PR subscription rehydration failed, starting with empty subscriptions:",err instanceof Error?err.message:String(err))}}).catch((err)=>{warn("[state] Rehydration failed:",err instanceof Error?err.message:String(err))}).finally(()=>{swarmState.pendingRehydrations.delete(rehydrationPromise)}),swarmState.pendingRehydrations.add(rehydrationPromise)}}function endAgentSession(sessionId,directory){if(directory){try{deleteSnapshotSessionRows(directory,sessionId)}catch(error93){warn("[state] durable snapshot session teardown failed:",error93 instanceof Error?error93.message:String(error93))}try{clearOverrideForSession(directory,sessionId)}catch(error93){warn("[state] durable session override teardown failed:",error93 instanceof Error?error93.message:String(error93))}}releaseSnapshotSessionOwnership(sessionId);let removedBindings=clearScopeBindings((binding)=>binding.ownerSessionId===sessionId||binding.parentOwnerSessionId===sessionId);for(let binding of removedBindings)clearScopeBindingFromDisk({directory:binding.workspaceIdentity,binding});swarmState.agentSessions.delete(sessionId),swarmState.activeAgent.delete(sessionId),swarmState.delegationChains.delete(sessionId),swarmState.primaryOwnerBySession.delete(sessionId),clearDispatchLineageForSession(sessionId),clearRealtimeLearningNudgeSession(sessionId),resetSessionQueue(sessionId),resetPrmPatternSupport(sessionId)}function getAgentSession(sessionId){return swarmState.agentSessions.get(sessionId)}function ensureAgentSession(sessionId,agentName,directory){let now=Date.now();claimSnapshotSessionOwnership(sessionId,!0);let session=swarmState.agentSessions.get(sessionId);if(session){if(agentName&&agentName!==session.agentName){let oldName=session.agentName;if(session.agentName=agentName,telemetry.agentActivated(sessionId,agentName,oldName),session.delegationActive=!1,session.lastAgentEventTime=now,session.nonTransientCircuit=createNonTransientCircuitState(agentName,0),!session.windows)session.activeInvocationId=0,session.lastInvocationIdByAgent={},session.windows={}}if(!session.windows)session.activeInvocationId=0,session.lastInvocationIdByAgent={},session.windows={};if(session.nonTransientCircuit===void 0)session.nonTransientCircuit=createNonTransientCircuitState(session.agentName,session.activeInvocationId??0);if(session.pendingToolExecutions===void 0)session.pendingToolExecutions=new Map;if(session.lastCompactionHint===void 0)session.lastCompactionHint=0;if(session.architectWriteCount===void 0)session.architectWriteCount=0;if(session.lastCoderDelegationTaskId===void 0)session.lastCoderDelegationTaskId=null;if(session.currentTaskId===void 0)session.currentTaskId=null;if(!session.gateLog)session.gateLog=new Map;if(!session.reviewerCallCount)session.reviewerCallCount=new Map;if(session.lastGateFailure===void 0)session.lastGateFailure=null;if(!session.partialGateWarningsIssuedForTask)session.partialGateWarningsIssuedForTask=new Set;if(!session.completionGateWarnedForTask)session.completionGateWarnedForTask=new Set;if(session.selfFixAttempted===void 0)session.selfFixAttempted=!1;if(session.selfCodingWarnedAtCount===void 0)session.selfCodingWarnedAtCount=0;if(!session.catastrophicPhaseWarnings)session.catastrophicPhaseWarnings=new Set;if(session.lastPhaseCompleteTimestamp===void 0)session.lastPhaseCompleteTimestamp=0;if(session.lastPhaseCompletePhase===void 0)session.lastPhaseCompletePhase=0;if(!session.phaseAgentsDispatched)session.phaseAgentsDispatched=new Set;if(!session.lastCompletedPhaseAgentsDispatched)session.lastCompletedPhaseAgentsDispatched=new Set;if(session.qaSkipCount===void 0)session.qaSkipCount=0;if(!session.qaSkipTaskIds)session.qaSkipTaskIds=[];if(!session.taskWorkflowStates)session.taskWorkflowStates=new Map;if(!session.taskWorkflowCache)session.taskWorkflowCache=new Map;if(!session.stageBCompletion)session.stageBCompletion=new Map;if(!session.stageBRouteEvidence)session.stageBRouteEvidence=new Map;if(!session.stageBRouteRequiredTasks)session.stageBRouteRequiredTasks=new Set;if(!session.taskCouncilApproved)session.taskCouncilApproved=new Map;if(!session.pendingCouncilRequirements)session.pendingCouncilRequirements=new Map;if(session.lastGateOutcome===void 0)session.lastGateOutcome=null;if(session.declaredCoderScope===void 0)session.declaredCoderScope=null;if(session.lastScopeViolation===void 0)session.lastScopeViolation=null;if(!(session.modifiedFilesByTask instanceof Map)){if(session.modifiedFilesByTask=new Map,isValidTaskId2(session.currentTaskId)&&Array.isArray(session.modifiedFilesThisCoderTask)&&session.modifiedFilesThisCoderTask.length>0)session.modifiedFilesByTask.set(session.currentTaskId,[...new Set(session.modifiedFilesThisCoderTask)])}if(projectModifiedFilesForActiveTask(session),!session.reviewerScopeGenerations)session.reviewerScopeGenerations=new Map;if(session.reviewerScopeGenerationCounter===void 0)session.reviewerScopeGenerationCounter=0;if(!session.reviewerScopeIncarnation)session.reviewerScopeIncarnation=randomUUID14();if(!session.reviewerScopeLatestGenerationByTask)session.reviewerScopeLatestGenerationByTask=new Map;if(!session.reviewerScopeOwnershipHistory)session.reviewerScopeOwnershipHistory=new Map;if(session.scopeViolationDetected===void 0)session.scopeViolationDetected=!1;if(session.turboMode===void 0)session.turboMode=!1;if(session.turboStrategy===void 0)session.turboStrategy=void 0;if(session.leanTurboActive===void 0)session.leanTurboActive=!1;if(session.leanTurboCurrentPhase===void 0)session.leanTurboCurrentPhase=void 0;if(session.qaGateSessionOverrides===void 0)session.qaGateSessionOverrides={};if(session.model_fallback_index===void 0)session.model_fallback_index=0;if(session.modelFallbackExhausted===void 0)session.modelFallbackExhausted=!1;if(session.loopDetectionWindow===void 0)session.loopDetectionWindow=[];if(session.pendingAdvisoryMessages===void 0)session.pendingAdvisoryMessages=[];if(session.coderRevisions===void 0)session.coderRevisions=0;if(session.revisionLimitHit===void 0)session.revisionLimitHit=!1;if(session.sessionRehydratedAt===void 0)session.sessionRehydratedAt=0;if(session.prmPatternCounts===void 0)session.prmPatternCounts=new Map;if(session.prmEscalationLevel===void 0)session.prmEscalationLevel=0;if(session.prmLastPatternDetected===void 0)session.prmLastPatternDetected=null;if(session.prmTrajectoryStep===void 0)session.prmTrajectoryStep=0;if(session.prmHardStopPending===void 0)session.prmHardStopPending=!1;if(session.prmHardStopInjectPending===void 0)session.prmHardStopInjectPending=!1;if(!session.prmInjectedAdvisoryKeys)session.prmInjectedAdvisoryKeys=new Set;if(!session.prmStruckEpisodes)session.prmStruckEpisodes=new Map;if(!session.prmLadderCounts)session.prmLadderCounts=new Map;if(session.executionEpisodeArmed===void 0)session.executionEpisodeArmed=!1;if(!session.prSubscriptions)session.prSubscriptions=new Map;return session.lastToolCallTime=now,maybeSweepStaleSessions(STALE_SESSION_TTL_MS,now,directory),session}if(_internals99.startAgentSession(sessionId,agentName??"unknown",7200000,directory),session=swarmState.agentSessions.get(sessionId),!session)throw Error(`Failed to create guardrail session for ${sessionId}`);if(agentName&&agentName!=="unknown")adoptPendingDispatchAuthorization(sessionId,agentName);return session}function recordPrimaryOwner(sessionId,agentName){if(!sessionId||!agentName)return;if(isRegisteredSwarmSubagent(agentName))return;if(NON_OWNABLE_AGENT_NAMES.has(agentName.toLowerCase()))return;swarmState.primaryOwnerBySession.delete(sessionId);while(swarmState.primaryOwnerBySession.size>=MAX_TRACKED_PRIMARY_OWNERS){let oldest=swarmState.primaryOwnerBySession.keys().next().value;if(typeof oldest!=="string")break;swarmState.primaryOwnerBySession.delete(oldest)}swarmState.primaryOwnerBySession.set(sessionId,agentName)}function getPrimaryOwner(sessionId){return swarmState.primaryOwnerBySession.get(sessionId)}function isRegisteredSwarmSubagent(agentName){let stripped=stripKnownSwarmPrefix(agentName);return SWARM_SUBAGENT_NAME_SET.has(stripped)}function isSwarmOwnedSession(sessionID){let resolved=swarmState.activeAgent.get(sessionID)??swarmState.agentSessions.get(sessionID)?.agentName;if(typeof resolved!=="string"||!resolved)return!1;return SWARM_AGENT_NAME_SET.has(stripKnownSwarmPrefix(resolved))}function recordSessionWorkspaceRoot(sessionId,laneRoot){let trimmed=laneRoot.trim();if(!trimmed)return;let session=swarmState.agentSessions.get(sessionId);if(!session)return;session.workspaceDirectory=trimmed}function resolveSessionWorkspaceDirectory(sessionId,fallbackDirectory){let recorded=swarmState.agentSessions.get(sessionId)?.workspaceDirectory;if(recorded?.trim())return recorded;return fallbackDirectory}function updateAgentEventTime(sessionId){let session=swarmState.agentSessions.get(sessionId);if(session)session.lastAgentEventTime=Date.now()}function beginInvocation(sessionId,agentName){let session=swarmState.agentSessions.get(sessionId);if(!session)throw Error(`Cannot begin invocation: session ${sessionId} does not exist`);let stripped=stripKnownSwarmPrefix(agentName),lastId=session.lastInvocationIdByAgent[stripped]||0;if(lastId>0)clearInvocationActionCircuits(sessionId,lastId),clearPendingTaskModelRoutesForSession(sessionId,"invocation");let newId=lastId+1;if(session.lastInvocationIdByAgent[stripped]=newId,session.activeInvocationId=newId,session.nonTransientCircuit=createNonTransientCircuitState(stripped,newId),stripped===ORCHESTRATOR_NAME)return null;let now=Date.now(),window2={id:newId,agentName:stripped,startedAtMs:now,toolCalls:0,consecutiveErrors:0,hardLimitHit:!1,lastSuccessTimeMs:now,recentToolCalls:[],warningIssued:!1,warningReason:"",transientRetryCount:0},key2=`${stripped}:${newId}`;return session.windows[key2]=window2,pruneOldWindows(sessionId,86400000,50),window2}function getActiveWindow(sessionId){let session=swarmState.agentSessions.get(sessionId);if(!session||!session.windows)return;let key2=`${stripKnownSwarmPrefix(session.agentName)}:${session.activeInvocationId}`;return session.windows[key2]}function pruneOldWindows(sessionId,maxAgeMs=86400000,maxWindows=50){let session=swarmState.agentSessions.get(sessionId);if(!session||!session.windows)return;let now=Date.now(),toKeep=Object.entries(session.windows).filter(([_,window2])=>now-window2.startedAtMs<maxAgeMs).sort((a,b)=>b[1].startedAtMs-a[1].startedAtMs).slice(0,maxWindows);session.windows=Object.fromEntries(toKeep)}function recordPhaseAgentDispatch(sessionId,agentName){let session=swarmState.agentSessions.get(sessionId);if(!session)return;if(!session.phaseAgentsDispatched)session.phaseAgentsDispatched=new Set;let normalizedName=stripKnownSwarmPrefix(agentName);session.phaseAgentsDispatched.add(normalizedName)}function ensureModifiedFilesByTask(session){if(!(session.modifiedFilesByTask instanceof Map))session.modifiedFilesByTask=new Map;return session.modifiedFilesByTask}function projectModifiedFilesForActiveTask(session){let taskId=session.currentTaskId;session.modifiedFilesThisCoderTask=isValidTaskId2(taskId)&&session.modifiedFilesByTask instanceof Map?[...session.modifiedFilesByTask.get(taskId)??[]]:[]}function ensureModifiedFileTaskSlot(session,taskId){if(!isValidTaskId2(taskId))return!1;let entries=ensureModifiedFilesByTask(session);if(entries.has(taskId))return!0;while(entries.size>=MAX_TRACKED_TASK_FILE_ATTRIBUTIONS){let reclaimable=[...entries.keys()].find((candidate)=>candidate!==taskId&&session.taskWorkflowStates?.get(candidate)==="complete");if(!reclaimable)return!1;entries.delete(reclaimable)}return entries.set(taskId,[]),!0}function recordModifiedFilesForTask(session,taskId,files,workspaceDirectory){if(!ensureModifiedFileTaskSlot(session,taskId))return!1;let normalized=[...new Set(files.map((file3)=>canonicalAttributionPath(file3,workspaceDirectory)).filter((file3)=>file3!==null))];if(session.modifiedFilesByTask.set(taskId,normalized),session.currentTaskId===taskId)projectModifiedFilesForActiveTask(session);return!0}function recordModifiedFileForTask(session,taskId,file3,workspaceDirectory){if(typeof file3!=="string"||file3.trim().length===0)return!1;if(!ensureModifiedFileTaskSlot(session,taskId))return!1;let canonical=canonicalAttributionPath(file3,workspaceDirectory);if(canonical===null)return!0;let entries=ensureModifiedFilesByTask(session),current=entries.get(taskId)??[];if(current.includes(canonical))return!0;if(entries.set(taskId,[...current,canonical]),session.currentTaskId===taskId)projectModifiedFilesForActiveTask(session);return!0}function hasModifiedFilesForTask(session,taskId){if(!session)return!1;if(!isValidTaskId2(taskId))return!1;if(!(session.modifiedFilesByTask instanceof Map))return!1;return session.modifiedFilesByTask.has(taskId)}function getModifiedFilesForTask(session,taskId){if(!isValidTaskId2(taskId))return[];return[...ensureModifiedFilesByTask(session).get(taskId)??[]]}function resetModifiedFilesForTask(session,taskId,options){if(!isValidTaskId2(taskId))return!1;let entries=ensureModifiedFilesByTask(session);if(options?.remove)entries.delete(taskId);else{if(!ensureModifiedFileTaskSlot(session,taskId))return!1;entries.set(taskId,[])}if(session.currentTaskId===taskId)projectModifiedFilesForActiveTask(session);return!0}function completeModifiedFilesForTask(session,taskId){let projectRoot=session.owningProjectKey;if(projectRoot===void 0||!isEpicOpenForProject(projectRoot))resetModifiedFilesForTask(session,taskId,{remove:!0})}function isValidTaskId2(taskId){if(taskId===null||taskId===void 0)return!1;if(typeof taskId!=="string")return!1;return taskId.trim().length>0}function ensureTaskWorkflowCache(session){if(!session.taskWorkflowCache)session.taskWorkflowCache=new Map;return session.taskWorkflowCache}function updateTaskWorkflowCache(session,taskId,overrides2){let cache2=ensureTaskWorkflowCache(session),existing=cache2.get(taskId);cache2.set(taskId,{generation:overrides2.generation??existing?.generation??0,retryCount:overrides2.retryCount??existing?.retryCount??0,lastOutcome:overrides2.lastOutcome??existing?.lastOutcome??"none",lastTransitionId:overrides2.lastTransitionId??existing?.lastTransitionId??null,updatedAt:overrides2.updatedAt??existing?.updatedAt??""})}function advanceTaskState(session,taskId,newState2,options,councilConfig){if(!isValidTaskId2(taskId))return;if(!session||!(session.taskWorkflowStates instanceof Map))throw Error("INVALID_SESSION: session.taskWorkflowStates must be a Map instance");let current=session.taskWorkflowStates.get(taskId)??"idle",currentIndex=LINEAR_STATE_ORDER.indexOf(current),newIndex=LINEAR_STATE_ORDER.indexOf(newState2);if(currentIndex===-1||newIndex===-1||newIndex<=currentIndex)throw Error(`INVALID_TASK_STATE_TRANSITION: ${taskId} ${current} → ${newState2}`);if(newState2==="complete"&¤t!=="tests_run"){let councilEntry=session.taskCouncilApproved?.get(taskId),effectiveMinimum=councilConfig?.requireAllMembers?5:councilConfig?.minimumMembers??3,councilApproved=councilEntry?.verdict==="APPROVE"&&(councilEntry.quorumSize??0)>=effectiveMinimum,pastPreCheck=currentIndex>=LINEAR_STATE_ORDER.indexOf("pre_check_passed");if(!councilApproved||!pastPreCheck)throw Error(`INVALID_TASK_STATE_TRANSITION: ${taskId} cannot reach complete from ${current} — must pass through tests_run first (or have council APPROVE after pre_check)`)}if(session.taskWorkflowStates.set(taskId,newState2),updateTaskWorkflowCache(session,taskId,{updatedAt:new Date().toISOString()}),newState2==="complete")session.stageBCompletion?.delete(taskId),clearStageBRouteEvidence(session,taskId),clearStageBRouteRequired(session,taskId),completeModifiedFilesForTask(session,taskId);if(options?.emitTelemetry!==!1)telemetry.taskStateChanged(options?.telemetrySessionId??session.agentName,taskId,newState2,current)}function canAdvanceTaskState(session,taskId,newState2,councilConfig){if(!isValidTaskId2(taskId))return!1;if(!session||!(session.taskWorkflowStates instanceof Map))return!1;let current=session.taskWorkflowStates.get(taskId)??"idle",currentIndex=LINEAR_STATE_ORDER.indexOf(current),newIndex=LINEAR_STATE_ORDER.indexOf(newState2);if(currentIndex===-1||newIndex===-1||newIndex<=currentIndex)return!1;if(newState2==="complete"&¤t!=="tests_run"){let councilEntry=session.taskCouncilApproved?.get(taskId),effectiveMinimum=councilConfig?.requireAllMembers?5:councilConfig?.minimumMembers??3,councilApproved=councilEntry?.verdict==="APPROVE"&&(councilEntry.quorumSize??0)>=effectiveMinimum,pastPreCheck=currentIndex>=LINEAR_STATE_ORDER.indexOf("pre_check_passed");if(!councilApproved||!pastPreCheck)return!1}return!0}async function advanceTaskStateAndPersist(session,taskId,newState2,_directory2,options,councilConfig){if(newState2==="coder_delegated"||newState2==="complete")throw Error(`TASK_WORKFLOW_CENTRAL_TRANSACTION_REQUIRED: ${taskId} → ${newState2} must use exact-task durable transition APIs`);advanceTaskState(session,taskId,newState2,options,councilConfig)}function getTaskState(session,taskId){if(!isValidTaskId2(taskId))return"idle";if(!session.taskWorkflowStates)session.taskWorkflowStates=new Map;return session.taskWorkflowStates.get(taskId)??"idle"}function recordStageBCompletion(session,taskId,agent){if(!isValidTaskId2(taskId))return;if(!session.stageBCompletion)session.stageBCompletion=new Map;let existing=session.stageBCompletion.get(taskId);if(existing)existing.add(agent);else session.stageBCompletion.set(taskId,new Set([agent]))}function reserveStageBRouteEvidence(session,taskId,evidence){if(!isValidTaskId2(taskId))return null;if(!session.stageBRouteEvidence)session.stageBRouteEvidence=new Map;let entries=session.stageBRouteEvidence.get(taskId)??[],dispatchIdentity=(entry)=>{if(!entry.callId||!entry.childSessionId||typeof entry.generation!=="number")return null;return[entry.role,entry.sessionId??"",entry.taskId??"",entry.callId,entry.childSessionId,String(entry.generation)].join("\x00")},incomingDispatchIdentity=dispatchIdentity(evidence),existingIndex=entries.findIndex((entry)=>entry.role===evidence.role&&(incomingDispatchIdentity!==null&&dispatchIdentity(entry)===incomingDispatchIdentity||incomingDispatchIdentity===null&&dispatchIdentity(entry)===null&&entry.identity===evidence.identity));if(existingIndex>=0){let previousEntry=entries[existingIndex],reservedEntry2={...evidence};return entries[existingIndex]=reservedEntry2,session.stageBRouteEvidence.set(taskId,entries),()=>{if(session.stageBRouteEvidence?.get(taskId)!==entries)return;let reservedIndex=entries.indexOf(reservedEntry2);if(reservedIndex<0)return;entries[reservedIndex]=previousEntry}}if(entries.length>=32)return null;let reservedEntry={...evidence};return entries.push(reservedEntry),session.stageBRouteEvidence.set(taskId,entries),()=>{if(session.stageBRouteEvidence?.get(taskId)!==entries)return;let reservedIndex=entries.indexOf(reservedEntry);if(reservedIndex<0)return;if(entries.splice(reservedIndex,1),entries.length===0)session.stageBRouteEvidence?.delete(taskId)}}function recordStageBRouteEvidence(session,taskId,evidence){return reserveStageBRouteEvidence(session,taskId,evidence)!==null}function getStageBRouteEvidence(session,taskId){return(session.stageBRouteEvidence?.get(taskId)??[]).map((entry)=>({...entry}))}function clearStageBRouteEvidence(session,taskId){session.stageBRouteEvidence?.delete(taskId)}function markStageBRouteRequired(session,taskId){if(!session.stageBRouteRequiredTasks)session.stageBRouteRequiredTasks=new Set;session.stageBRouteRequiredTasks.add(taskId)}function isStageBRouteRequired(session,taskId){return session.stageBRouteRequiredTasks?.has(taskId)===!0}function clearStageBRouteRequired(session,taskId){session.stageBRouteRequiredTasks?.delete(taskId)}function hasBothStageBCompletions(session,taskId){if(!isValidTaskId2(taskId))return!1;let completions=session.stageBCompletion?.get(taskId);if(!completions)return!1;return completions.has("reviewer")&&completions.has("test_engineer")}async function isCouncilGateActive(directory,council,sessionOverrides={}){let enabled=council?.enabled===!0,plan=null;try{plan=await loadPlanJsonOnly(directory)}catch{plan=null}if(!plan)return!1;let planId=derivePlanId(plan),lookup=null;try{lookup=getProfileLookupForIdentity(directory,plan)}catch(err){let msg=err instanceof Error?err.message:String(err);if(!(msg.includes("SQLITE_CANTOPEN")||msg.includes("ENOENT")))warn(`[isCouncilGateActive] getProfile threw unexpectedly for plan ${planId}: ${msg}. Treating council as inactive.`);lookup=null}if(!lookup||lookup.kind==="missing")return!1;if(lookup.kind==="unbound_legacy")return enabled&&lookup.profile.gates.council_mode===!0;let profile=lookup.profile,councilMode=getEffectiveGates(profile,sessionOverrides).council_mode===!0;if(enabled&&councilMode)return!0;if(enabled!==councilMode&&!_councilDisagreementWarned.has(planId))_councilDisagreementWarned.add(planId),warn(`[delegation-gate] Council mode mismatch for plan ${planId}: pluginConfig.council.enabled=${enabled}, QaGates.council_mode=${councilMode}. Falling back to Stage B (non-council) per-task advancement.`);return!1}function _resetCouncilDisagreementWarnings(){_councilDisagreementWarned.clear()}function planStatusToWorkflowState(status){switch(status){case"in_progress":return"idle";case"completed":return"complete";case"blocked":return"blocked";case"closed":return"closed";default:return"idle"}}function evidenceToWorkflowState(evidence){let snapshot=getTaskWorkflowSnapshot(evidence);return{state:snapshot.state,generation:snapshot.generation,authoritative:snapshot.authoritative,retryCount:snapshot.retryCount,lastOutcome:snapshot.lastOutcome,lastTransitionId:snapshot.lastTransitionId,updatedAt:snapshot.updatedAt}}async function readPlanFromDisk(directory){try{let planPath=path108.join(directory,".swarm","plan.json"),content=await fs66.readFile(planPath,"utf-8"),parsed=JSON.parse(content);return PlanSchema.parse(parsed)}catch{return null}}async function readGateEvidenceFromDisk(directory){let evidenceMap=new Map;try{let evidenceDir=path108.join(directory,".swarm","evidence"),entries=await fs66.readdir(evidenceDir,{withFileTypes:!0});for(let entry of entries){if(!entry.isFile()||!entry.name.endsWith(".json"))continue;let taskId=entry.name.replace(/\.json$/,"");if(!/^\d+\.\d+(\.\d+)*$/.test(taskId))continue;try{let filePath=path108.join(evidenceDir,entry.name),content=await fs66.readFile(filePath,"utf-8"),parsed=parseTaskEvidence(content,taskId);evidenceMap.set(taskId,parsed)}catch{}}}catch{}return evidenceMap}async function buildRehydrationCache(directory,options){let projectKey=hydrationProjectKey(directory),buildAuthority=captureCurrentHydrationAuthority(projectKey),planTaskStates=new Map,plan=options&&Object.hasOwn(options,"planOverride")?options.planOverride:await readPlanFromDisk(directory),cachePlan=plan??null;if(plan)for(let phase of plan.phases??[])for(let task of phase.tasks??[])planTaskStates.set(task.id,planStatusToWorkflowState(task.status));let evidenceMap=await readGateEvidenceFromDisk(directory),councilConfig;try{councilConfig=loadPluginConfig(directory).council}catch{councilConfig=void 0}if(options?.shouldCommit&&!options.shouldCommit()||!isHydrationAuthorityCurrent(buildAuthority))return{committed:!1,reason:"superseded"};return setRehydrationCache(projectKey,{planTaskStates,evidenceMap,taskIdentityContext:{plan:cachePlan,councilConfig}},buildAuthority)?{committed:!0}:{committed:!1,reason:"superseded"}}function applyRehydrationCache(session,projectKey){let resolvedKey=projectKey??session.owningProjectKey;if(!resolvedKey)return;let cache2=getRehydrationCache(resolvedKey);if(!cache2)return;if(!session.taskWorkflowStates)session.taskWorkflowStates=new Map;if(!session.taskWorkflowCache)session.taskWorkflowCache=new Map;if(!session.taskCouncilApproved)session.taskCouncilApproved=new Map;let{planTaskStates,evidenceMap,taskIdentityContext}=cache2;for(let[taskId,planState]of planTaskStates){let existingState=session.taskWorkflowStates.get(taskId),existingCache=ensureTaskWorkflowCache(session).get(taskId),evidence=evidenceMap.get(taskId);if(evidence){let derivedWorkflow=evidenceToWorkflowState(evidence);if(derivedWorkflow.authoritative){session.taskWorkflowStates.set(taskId,derivedWorkflow.state),updateTaskWorkflowCache(session,taskId,{generation:derivedWorkflow.generation,retryCount:derivedWorkflow.retryCount,lastOutcome:derivedWorkflow.lastOutcome,lastTransitionId:derivedWorkflow.lastTransitionId,updatedAt:derivedWorkflow.updatedAt});continue}}if((existingCache?.generation??0)>0)continue;if(existingState==null||compareWorkflowStatePrecedence(planState,existingState)>0)session.taskWorkflowStates.set(taskId,planState)}let VALID_COUNCIL_VERDICTS=new Set(["APPROVE","REJECT","CONCERNS"]);for(let[taskId,evidence]of evidenceMap){let council=evidence.gates?.council;if(!council){session.taskCouncilApproved.delete(taskId);continue}let rawIdentityDigest=council.identity_digest;if(typeof rawIdentityDigest!=="string"||!/^[a-f0-9]{64}$/.test(rawIdentityDigest)){session.taskCouncilApproved.delete(taskId);continue}let expectedIdentity=computeCouncilReviewIdentity({level:"task",scope:{kind:"task",taskId},plan:taskIdentityContext.plan,config:taskIdentityContext.councilConfig});if(rawIdentityDigest!==expectedIdentity.identityDigest){session.taskCouncilApproved.delete(taskId);continue}let councilWorkflow=getTaskWorkflowSnapshot(evidence);if(!councilWorkflow.authoritative||council.workflowGeneration!==councilWorkflow.generation||councilWorkflow.state!=="pre_check_passed"){session.taskCouncilApproved.delete(taskId);continue}let rawVerdict=council.verdict;if(!rawVerdict||typeof rawVerdict!=="string")continue;if(!VALID_COUNCIL_VERDICTS.has(rawVerdict))continue;let verdict=rawVerdict,roundNumber=council.roundNumber;if(typeof roundNumber!=="number"||!Number.isFinite(roundNumber))roundNumber=1;let rawQuorumSize=council.quorumSize,quorumSize=typeof rawQuorumSize==="number"&&Number.isFinite(rawQuorumSize)&&rawQuorumSize>=1?rawQuorumSize:1;session.taskCouncilApproved.set(taskId,{verdict,roundNumber,quorumSize})}}async function rehydrateSessionFromDisk(directory,session,shouldCommit){let cacheBuild=shouldCommit?await _internals99.buildRehydrationCache(directory,{shouldCommit}):await _internals99.buildRehydrationCache(directory);if(cacheBuild&&!cacheBuild.committed)return;if(shouldCommit&&!shouldCommit())return;_internals99.applyRehydrationCache(session,hydrationProjectKey(directory))}function hasActiveTurboMode(sessionID){if(sessionID)return swarmState.agentSessions.get(sessionID)?.turboMode===!0;for(let[_sessionId,session]of swarmState.agentSessions)if(session.turboMode===!0)return!0;return!1}function hasActiveFullAuto(sessionID){if(sessionID)return swarmState.agentSessions.get(sessionID)?.fullAutoMode===!0;for(let[_sessionId,session]of swarmState.agentSessions)if(session.fullAutoMode===!0)return!0;return!1}function getActiveFullAutoSessionID(){let activeId,activeLastToolCall=-1;for(let[id,session]of swarmState.agentSessions){if(session.fullAutoMode!==!0)continue;let lastToolCall=session.lastToolCallTime??0;if(activeId===void 0||lastToolCall>activeLastToolCall)activeId=id,activeLastToolCall=lastToolCall}return activeId}function hasActiveLeanTurbo(sessionID){if(sessionID){let session=swarmState.agentSessions.get(sessionID);return session?.turboMode===!0&&session?.turboStrategy==="lean"&&session?.leanTurboActive===!0}for(let[_sessionId,session]of swarmState.agentSessions)if(session.turboMode===!0&&session.turboStrategy==="lean"&&session.leanTurboActive===!0)return!0;return!1}function getResolvedAutoProceed(session,planAutoProceed){return session.autoProceedOverride??planAutoProceed??!1}function setSessionEnvironment(sessionId,profile){swarmState.environmentProfiles.set(sessionId,profile)}function getSessionEnvironment(sessionId){return swarmState.environmentProfiles.get(sessionId)}function ensureSessionEnvironment(sessionId){let existing=swarmState.environmentProfiles.get(sessionId);if(existing)return existing;let profile=detectEnvironmentProfile();return swarmState.environmentProfiles.set(sessionId,profile),Promise.resolve().then(() => (init_telemetry(),exports_telemetry)).then(({telemetry:telemetry2})=>{telemetry2.environmentDetected(sessionId,profile.hostOS,profile.shellFamily,profile.executionMode)}).catch(()=>{}),profile}function setLiveContextWindow(sessionID,tokens,identity){if(!sessionID)return;let map3=swarmState.liveContextWindows,modelID=trimLiveContextIdentity(identity?.modelID),providerID=trimLiveContextIdentity(identity?.providerID),hasIdentity=Boolean(modelID||providerID),existing=map3.get(sessionID);if(!(typeof tokens==="number"&&Number.isFinite(tokens)&&tokens>=1)){if(!hasIdentity)return;if(existing&&liveContextIdentityMatches(existing,{modelID,providerID})&&existing.tokens!==void 0)return;if(map3.has(sessionID))map3.delete(sessionID);map3.set(sessionID,{modelID,providerID}),evictOldestLiveContextWindow(map3,sessionID);return}if(!hasIdentity&&existing&&(existing.modelID||existing.providerID))return;if(map3.has(sessionID))map3.delete(sessionID);map3.set(sessionID,{tokens:Math.floor(tokens),modelID,providerID}),evictOldestLiveContextWindow(map3,sessionID)}function getLiveContextWindow(sessionID,identity){if(!sessionID)return;let cached3=swarmState.liveContextWindows.get(sessionID);if(!cached3)return;if(identity&&!liveContextIdentityMatches(cached3,identity))return;return cached3.tokens}function getLiveContextModelIdentity(sessionID){if(!sessionID)return;let cached3=swarmState.liveContextWindows.get(sessionID);if(!cached3)return;return{modelID:cached3.modelID,providerID:cached3.providerID}}function evictOldestLiveContextWindow(map3,sessionID){if(map3.size<=MAX_TRACKED_CONTEXT_WINDOWS)return;let oldest=map3.keys().next().value;if(oldest!==void 0&&oldest!==sessionID)map3.delete(oldest)}function trimLiveContextIdentity(value){let trimmed=value?.trim();return trimmed?trimmed:void 0}function normalizeLiveContextIdentity(value){return trimLiveContextIdentity(value)?.toLowerCase()??""}function liveContextIdentityMatches(left,right){return normalizeLiveContextIdentity(left.modelID)===normalizeLiveContextIdentity(right.modelID)&&normalizeLiveContextIdentity(left.providerID)===normalizeLiveContextIdentity(right.providerID)}function setSessionBudget(sessionID,pct,tokens){let map3=swarmState.lastBudgetBySession;if(map3.has(sessionID))map3.delete(sessionID);if(map3.set(sessionID,{pct,tokens}),map3.size>MAX_TRACKED_BUDGET_SESSIONS){let oldest=map3.keys().next().value;if(oldest!==void 0&&oldest!==sessionID)map3.delete(oldest)}}function setFinalPromptPressure(sessionID,snapshot){let map3=swarmState.finalPromptPressureBySession;if(map3.has(sessionID))map3.delete(sessionID);if(map3.set(sessionID,snapshot),map3.size>MAX_TRACKED_BUDGET_SESSIONS){let oldest=map3.keys().next().value;if(oldest!==void 0&&oldest!==sessionID)map3.delete(oldest)}}function getFinalPromptPressure(sessionID){if(!sessionID)return;return swarmState.finalPromptPressureBySession.get(sessionID)}function setFinalAccountingWarningBand(sessionID,band){let map3=swarmState.finalAccountingWarningBandsBySession,entry=map3.get(sessionID)??{warn:!1,critical:!1};if(map3.has(sessionID))map3.delete(sessionID);if(band==="critical")entry.critical=!0;else entry.warn=!0;if(map3.set(sessionID,entry),map3.size>MAX_TRACKED_BUDGET_SESSIONS){let oldest=map3.keys().next().value;if(oldest!==void 0&&oldest!==sessionID)map3.delete(oldest)}}function getFinalAccountingWarningBand(sessionID,band){if(!sessionID)return!1;let entry=swarmState.finalAccountingWarningBandsBySession.get(sessionID);if(!entry)return!1;return band==="critical"?entry.critical:entry.warn}function clearFinalAccountingWarningBands(){swarmState.finalAccountingWarningBandsBySession.clear()}function getSessionBudgetPct(sessionID){if(!sessionID)return 0;return swarmState.lastBudgetBySession.get(sessionID)?.pct??0}function getSessionBudgetTokens(sessionID){if(!sessionID)return 0;return swarmState.lastBudgetBySession.get(sessionID)?.tokens??0}function getDisplayBudget(){let best=null;for(let entry of swarmState.lastBudgetBySession.values())if(entry.pct>0&&(best===null||entry.pct>best.pct))best=entry;return best}function getDisplayFinalPromptPressure(){let best=null;for(let entry of swarmState.finalPromptPressureBySession.values())if(entry.pct>0&&(best===null||entry.pct>best.pct))best=entry;return best}function setCriticalShownIds(sessionID,value){let map3=swarmState.currentCriticalShownIds;if(map3.has(sessionID))map3.delete(sessionID);if(map3.set(sessionID,value),map3.size>MAX_TRACKED_CRITICAL_SHOWN){let oldest=map3.keys().next().value;if(oldest!==void 0&&oldest!==sessionID)map3.delete(oldest)}}function clearCriticalShownIds(sessionID){return swarmState.currentCriticalShownIds.delete(sessionID)}function buildGateDenialDirectiveKey(ids){return[...ids].sort().join(",")}function incrementGateDenialCount(sessionID,directiveKey){let map3=swarmState.gateDenialCounts,existing=map3.get(sessionID),count2=existing&&existing.directiveKey===directiveKey?existing.count+1:1;if(map3.has(sessionID))map3.delete(sessionID);if(map3.set(sessionID,{count:count2,directiveKey}),map3.size>MAX_TRACKED_GATE_DENIALS){let oldest=map3.keys().next().value;if(oldest!==void 0&&oldest!==sessionID)map3.delete(oldest)}return count2}function clearGateDenialCount(sessionID){swarmState.gateDenialCounts.delete(sessionID)}function addKnowledgeAckDedup(key2){let set3=swarmState.knowledgeAckDedup;if(set3.has(key2))return;if(set3.add(key2),set3.size>MAX_TRACKED_KNOWLEDGE_ACKS){let oldest=set3.values().next().value;if(oldest!==void 0)set3.delete(oldest)}}async function rehydratePrSubscriptions(sessionID,directory){let map3=new Map;try{let{listActive:listActive2}=await Promise.resolve().then(() => (init_pr_subscriptions(),exports_pr_subscriptions)),records=await listActive2(directory);for(let record3 of records){if(record3.sessionID!==sessionID)continue;let key2=`${record3.repoFullName}::${record3.prNumber}`;map3.set(key2,{prNumber:record3.prNumber,repoFullName:record3.repoFullName,prUrl:record3.prUrl,lastKnownStatus:record3.mergeableState??"unknown",lastPollTime:record3.lastCheckedAt,errorCount:record3.errorCount,isWatching:record3.isWatching})}}catch(err){warn(`[state] rehydratePrSubscriptions failed for session ${sessionID}: ${err instanceof Error?err.message:String(err)}`)}return map3}var _councilDisagreementWarned,MAX_TRACKED_TASK_FILE_ATTRIBUTIONS=128,LINEAR_STATE_ORDER,_toolAggregates,defaultRunContext,_runContexts,swarmState,STALE_SESSION_TTL_MS=7200000,MAX_REVIEWER_SCOPE_GENERATION_FILES=256,MAX_REVIEWER_SCOPE_GENERATIONS=256,MAX_REVIEWER_SCOPE_OWNERSHIP_HISTORY=256,REVIEWER_SCOPE_GENERATION_TTL_MS,MAX_TRACKED_DISPATCH_PARENTS=200,PENDING_DISPATCH_AUTHORIZATION_TTL_MS=600000,IDLE_SWEEP_COOLDOWN_MS=60000,_lastIdleSweepAtMs=0,SWARM_AGENT_NAME_SET,SWARM_SUBAGENT_NAME_SET,MAX_TRACKED_PRIMARY_OWNERS=1000,NON_OWNABLE_AGENT_NAMES,MAX_TRACKED_BUDGET_SESSIONS=500,MAX_TRACKED_CRITICAL_SHOWN=500,MAX_TRACKED_KNOWLEDGE_ACKS=5000,MAX_TRACKED_GATE_DENIALS=500,MAX_TRACKED_CONTEXT_WINDOWS=500,_internals99;var init_state=__esm(()=>{init_agent_names();init_constants();init_loader();init_plan_schema();init_schema();init_council_review_identity();init_qa_gate_profile();init_qa_gate_session_override();init_lifecycle();init_action_circuit();init_gate_evidence();init_delegation_gate();init_realtime_learning_nudge();init_trajectory_step_state();init_candidate_queue();init_prm_pattern_support();init_task_model_routing();init_manager();init_utils3();init_trajectory_store();init_scope_binding();init_scope_persistence();init_injection_budget();init_hydration_ownership();init_session_start_store();init_snapshot_store();init_worktree_link_suggestion();init_telemetry();init_logger();init_path();_councilDisagreementWarned=new Set,LINEAR_STATE_ORDER=["idle","coder_delegated","pre_check_passed","reviewer_run","tests_run","complete"];_toolAggregates=new Map,defaultRunContext=new AgentRunContext("default",_toolAggregates),_runContexts=new Map;swarmState={activeToolCalls:defaultRunContext.activeToolCalls,toolAggregates:defaultRunContext.toolAggregates,activeAgent:defaultRunContext.activeAgent,primaryOwnerBySession:new Map,delegationChains:defaultRunContext.delegationChains,pendingEvents:0,opencodeClient:null,curatorInitAgentNames:[],curatorPhaseAgentNames:[],curatorPostmortemAgentNames:[],curatorConsolidationAgentNames:[],skillImproverAgentNames:[],specWriterAgentNames:[],currentCriticalShownIds:new Map,knowledgeAckDedup:new Set,gateDenialCounts:new Map,generatedAgentNames:[],lastBudgetBySession:new Map,finalPromptPressureBySession:new Map,finalAccountingWarningBandsBySession:new Map,liveContextWindows:new Map,dispatchParentByChildSession:new Map,pendingDispatchAuthorizations:[],agentSessions:defaultRunContext.agentSessions,pendingRehydrations:new Set,fullAutoEnabledInConfig:!1,environmentProfiles:defaultRunContext.environmentProfiles};REVIEWER_SCOPE_GENERATION_TTL_MS=STALE_SESSION_TTL_MS;SWARM_AGENT_NAME_SET=new Set(ALL_AGENT_NAMES),SWARM_SUBAGENT_NAME_SET=new Set(ALL_SUBAGENT_NAMES),NON_OWNABLE_AGENT_NAMES=new Set(["compaction","title","summary","explore"]);_internals99={swarmState,resetSwarmState,ensureAgentSession,startAgentSession,loadPluginConfigWithMeta,resolveInitialTurboMode,getAgentSession,beginInvocation,getActiveWindow,advanceTaskState,getTaskState,hasActiveFullAuto,hasActiveTurboMode,hasActiveLeanTurbo,buildRehydrationCache,applyRehydrationCache,rehydrateSessionFromDisk,rehydratePrSubscriptions,isCouncilGateActive,defaultRunContext}});async function boundedSessionCall(call,timeoutMs,timeoutLabel,failureLabel,sessionId){let timer;try{await Promise.race([call(),new Promise((_resolve,reject2)=>{timer=setTimeout(()=>reject2(Error(`${timeoutLabel} after ${timeoutMs}ms`)),Math.max(1,timeoutMs))})])}catch(error93){_internals100.log(`${failureLabel} for ephemeral session`,{sessionId,error:error93 instanceof Error?error93.message:String(error93)})}finally{if(timer)clearTimeout(timer)}}async function boundedAbortEphemeralSession(session,sessionId,timeoutMs=DEFAULT_EPHEMERAL_ABORT_TIMEOUT_MS){if(typeof session.abort!=="function")return;await _internals100.boundedSessionCall(()=>session.abort({path:{id:sessionId}}),timeoutMs,"ephemeral session abort timed out","ephemeral session abort failed",sessionId)}async function boundedDeleteEphemeralSession(session,sessionId,timeoutMs=DEFAULT_EPHEMERAL_TEARDOWN_DELETE_TIMEOUT_MS){await _internals100.boundedSessionCall(()=>session.delete({path:{id:sessionId}}),timeoutMs,"ephemeral session delete timed out","ephemeral session delete failed",sessionId)}async function teardownEphemeralSession(session,sessionId,options={}){let abortTimeoutMs=options.abortTimeoutMs??DEFAULT_EPHEMERAL_ABORT_TIMEOUT_MS,deleteTimeoutMs=options.deleteTimeoutMs??DEFAULT_EPHEMERAL_TEARDOWN_DELETE_TIMEOUT_MS;if(!(options.skipAbort??!1))await _internals100.boundedAbort(session,sessionId,abortTimeoutMs);await _internals100.boundedDelete(session,sessionId,deleteTimeoutMs)}function isTransientTransportError(err){if(typeof err!=="object"||err===null)return!1;if(err instanceof TypeError)return!0;let coded=err;if(typeof coded.code==="string"&&TRANSIENT_TRANSPORT_ERROR_CODES.has(coded.code))return!0;return coded.name==="AbortError"}async function sessionExists(session,sessionId,verifyTimeoutMs){if(typeof session.get!=="function")return"alive";let verifyTimeoutError=Error(`ephemeral session verify timed out after ${verifyTimeoutMs}ms`);try{let result=await withTimeout(session.get({path:{id:sessionId}}),verifyTimeoutMs,verifyTimeoutError),body=result?.data;if(body===void 0||body===null){let envelopeError=result?.error;if(envelopeError!==void 0&&envelopeError!==null&&isTransientTransportError(envelopeError))return"unreadable";return"gone"}return"alive"}catch(err){if(err===verifyTimeoutError)return"unreadable";if(isTransientTransportError(err))return"unreadable";return"gone"}}async function teardownEphemeralSessionVerified(session,sessionId,options={}){let verifyTimeoutMs=options.verifyTimeoutMs??DEFAULT_EPHEMERAL_VERIFY_TIMEOUT_MS,attempts=Math.min(6,Math.max(2,options.maxDeleteAttempts??DEFAULT_EPHEMERAL_MAX_DELETE_ATTEMPTS));if(typeof session.get!=="function")return await teardownEphemeralSession(session,sessionId,options),{ok:!1,sessionId,attempts:1,kind:"ephemeral-session-teardown-unverified",reason:"get-unavailable"};let deleteAttempts=0;for(;;){await teardownEphemeralSession(session,sessionId,{...options,skipAbort:deleteAttempts>0?!0:options.skipAbort}),deleteAttempts+=1;let existence=await _internals100.sessionExists(session,sessionId,verifyTimeoutMs);if(existence==="gone")return{ok:!0,sessionId,attempts:deleteAttempts};if(existence==="unreadable")return{ok:!1,sessionId,attempts:deleteAttempts,kind:"ephemeral-session-teardown-unverified",reason:"verify-unreadable"};if(deleteAttempts>=attempts)return{ok:!1,sessionId,attempts:deleteAttempts,kind:"ephemeral-session-teardown-unverified",reason:"session-survived-bounded-retries"}}}var DEFAULT_EPHEMERAL_ABORT_TIMEOUT_MS=5000,DEFAULT_EPHEMERAL_TEARDOWN_DELETE_TIMEOUT_MS=2000,DEFAULT_EPHEMERAL_VERIFY_TIMEOUT_MS=2000,DEFAULT_EPHEMERAL_MAX_DELETE_ATTEMPTS=3,TRANSIENT_TRANSPORT_ERROR_CODES,_internals100;var init_ephemeral_session_teardown=__esm(()=>{init_logger();init_timeout();TRANSIENT_TRANSPORT_ERROR_CODES=new Set(["ECONNRESET","ECONNREFUSED","EAI_AGAIN","ETIMEDOUT","ENOTFOUND","EPIPE","UND_ERR_SOCKET"]);_internals100={boundedSessionCall,boundedAbort:boundedAbortEphemeralSession,boundedDelete:boundedDeleteEphemeralSession,sessionExists,isTransientTransportError,log}});var init_worktree=__esm(()=>{init_core3();init_merge2()});function verifyReviewerScopeGenerationMergeBack(input){try{let generation=getReviewerScopeGenerationForCoderCall({parentSessionID:input.parentSessionID,taskId:input.taskId,coderCallID:input.coderCallID,now:input.now});if(!generation||generation.modifiedFiles.length===0)return;if(generation.status!=="collecting"&&generation.status!=="mergeback_pending")return;if(generation.status==="collecting"){if(!markReviewerScopeGenerationMergebackPending({parentSessionID:input.parentSessionID,taskId:input.taskId,coderCallID:input.coderCallID,at:input.now}))return}let session=ensureAgentSession(input.parentSessionID),deadlineAt=(input.now??Date.now())+REVIEWER_SCOPE_CAPTURE_BATCH_DEADLINE_MS;for(let file3 of generation.modifiedFiles){let stored=generation.modifiedFileFingerprints.find((entry)=>entry.file===file3);if(!stored){settleReviewerScopeMergeback({parentSessionID:input.parentSessionID,taskId:input.taskId,coderCallID:input.coderCallID,outcome:{verified:!1,reason:`incomplete fingerprints: ${file3} has no stored capture`,at:input.now}}),pushAdvisory(session,`REVIEWER_SCOPE_MERGEBACK_MISMATCH: task ${input.taskId}: merge-back verification found no stored fingerprint for ${file3}. ACTION[architect]: re-dispatch the coder for this task`);return}let captured=captureReviewerScopeFileFingerprint(input.primaryDirectory,file3,{deadlineAt});if(captured.kind==="capture_failed"){settleReviewerScopeMergeback({parentSessionID:input.parentSessionID,taskId:input.taskId,coderCallID:input.coderCallID,outcome:{verified:!1,reason:`capture ${captured.code} on ${captured.file}`,at:input.now}}),pushAdvisory(session,`REVIEWER_SCOPE_MERGEBACK_MISMATCH: task ${input.taskId}: primary-checkout capture failed for ${captured.file} (${captured.code}). ACTION[architect]: verify the primary checkout, then re-dispatch the reviewer`);return}let capturedFingerprint=reviewerScopeCaptureToFingerprint(captured);if(!capturedFingerprint||!reviewerScopeFileFingerprintsEqual(stored,capturedFingerprint)){settleReviewerScopeMergeback({parentSessionID:input.parentSessionID,taskId:input.taskId,coderCallID:input.coderCallID,outcome:{verified:!1,reason:`primary bytes differ from lane manifest on ${file3}`,at:input.now}}),pushAdvisory(session,`REVIEWER_SCOPE_MERGEBACK_MISMATCH: task ${input.taskId}: primary-checkout bytes differ from the lane manifest on ${file3}; lane evidence retained. ACTION[architect]: resolve the merge conflict or re-dispatch the coder`);return}}let primaryIdentity=canonicalWorkspaceIdentity(input.primaryDirectory);settleReviewerScopeMergeback({parentSessionID:input.parentSessionID,taskId:input.taskId,coderCallID:input.coderCallID,outcome:{verified:!0,primaryWorkspaceIdentity:primaryIdentity??input.primaryDirectory,primaryDirectory:input.primaryDirectory,at:input.now}}),pushAdvisory(session,`REVIEWER_SCOPE_MERGEBACK_VERIFIED: task ${input.taskId}: primary checkout matches the lane manifest exactly; reviewer dispatch is enabled`)}catch(error93){try{let session=ensureAgentSession(input.parentSessionID);pushAdvisory(session,`REVIEWER_SCOPE_MERGEBACK_MISMATCH: task ${input.taskId}: merge-back verification errored (${String(error93).slice(0,200)}). ACTION[architect]: re-dispatch the reviewer to retry verification`),settleReviewerScopeMergeback({parentSessionID:input.parentSessionID,taskId:input.taskId,coderCallID:input.coderCallID,outcome:{verified:!1,reason:"verification error",at:input.now}})}catch{}}}var init_reviewer_scope_mergeback=__esm(()=>{init_scope_binding();init_state();init_reviewer_scope_file_fingerprint()});import{createHash as createHash50,randomBytes as randomBytes7}from"node:crypto";import*as fs67 from"node:fs";import*as path109 from"node:path";function nowMs2(input){return input??Date.now()}function sha2566(input){return createHash50("sha256").update(input).digest("hex")}function storePath4(directory){return path109.join(directory,STORE_RELATIVE_PATH)}function journalPath2(directory){return path109.join(directory,JOURNAL_RELATIVE_PATH)}function credentialPath(directory,authorityDigest){return path109.join(directory,CREDENTIAL_DIRECTORY,`${authorityDigest}.json`)}function readAuthorityLockRecord(lockPath){try{let parsed=JSON.parse(fs67.readFileSync(lockPath,"utf8"));if(typeof parsed?.nonce==="string"&&typeof parsed?.acquiredAt==="number"&&Number.isFinite(parsed.acquiredAt)&&typeof parsed?.pid==="number"&&Number.isInteger(parsed.pid))return{nonce:parsed.nonce,acquiredAt:parsed.acquiredAt,pid:parsed.pid}}catch{}return}function writeAuthorityLockRecord(lockPath,record3){try{return fs67.writeFileSync(lockPath,JSON.stringify(record3,null,2),{flag:"wx"}),!0}catch{return!1}}function isProcessAlive2(pid){if(!Number.isSafeInteger(pid)||pid<=0)return!1;try{return process.kill(pid,0),!0}catch{return!1}}function acquireAuthorityLock(directory){let lockPath=path109.join(directory,AUTHORITY_LOCK_RELATIVE_PATH);fs67.mkdirSync(path109.dirname(lockPath),{recursive:!0});let nonce=randomBytes7(16).toString("hex"),acquiredAt=Date.now(),attempt=()=>writeAuthorityLockRecord(lockPath,{nonce,acquiredAt,pid:process.pid});if(!attempt())try{let observed=readAuthorityLockRecord(lockPath);if(!observed)return;if(Date.now()-fs67.statSync(lockPath).mtimeMs>AUTHORITY_LOCK_STALE_MS){if(isProcessAlive2(observed.pid))return;let reread=readAuthorityLockRecord(lockPath);if(reread&&reread.nonce===observed.nonce&&reread.acquiredAt===observed.acquiredAt&&reread.pid===observed.pid){if(fs67.unlinkSync(lockPath),!attempt())return}}}catch{return}let acquired=readAuthorityLockRecord(lockPath);if(!acquired||acquired.nonce!==nonce)return;let released=!1;return()=>{if(released)return;released=!0;try{if(readAuthorityLockRecord(lockPath)?.nonce===nonce)fs67.unlinkSync(lockPath)}catch{}}}function taskKey(parentSessionId,taskId){return`${parentSessionId}::${taskId}`}function stableStringify(value){if(Array.isArray(value))return`[${value.map((item)=>stableStringify(item)).join(",")}]`;if(value&&typeof value==="object")return`{${Object.entries(value).sort(([left],[right])=>left.localeCompare(right)).map(([key2,item])=>`${JSON.stringify(key2)}:${stableStringify(item)}`).join(",")}}`;return JSON.stringify(value)}function digestAuthorityIdentity(input){return sha2566(stableStringify({originalCallID:input.originalCallID,parentSessionId:input.parentSessionId,taskId:input.taskId,reservationId:input.reservationId,generation:input.generation,canonicalBranch:input.canonicalBranch,canonicalPath:input.canonicalPath,laneBranch:input.laneBranch,lanePath:input.lanePath,expectedPrimaryHead:input.expectedPrimaryHead,sourceBaseOid:input.sourceBaseOid,sourceHeadOid:input.sourceHeadOid,targetHeadOid:input.targetHeadOid,strategy:input.strategy,declaredConflictFiles:input.declaredConflictFiles??[]}))}function nonEmpty(value){return typeof value==="string"&&value.length>0&&value.length<=4096}function isHex40(value){return typeof value==="string"&&HEX_40_RE.test(value)}function isOidArray(value){return Array.isArray(value)&&value.length<=4096&&value.every(isHex40)}function isSettlementEvidence(value){if(!value||typeof value!=="object"||Array.isArray(value))return!1;let candidate=value;return isOidArray(candidate.sourceCommitOrder)&&isOidArray(candidate.rewrittenCommitOrder)&&candidate.sourceCommitOrder.length===candidate.rewrittenCommitOrder.length}function isStrategy(value){return value==="merge"||value==="rebase"||value==="cherry-pick"}function isImmutableIdentity(value){if(!value||typeof value!=="object"||Array.isArray(value))return!1;let candidate=value;return nonEmpty(candidate.originalCallID)&&nonEmpty(candidate.parentSessionId)&&nonEmpty(candidate.taskId)&&nonEmpty(candidate.reservationId)&&typeof candidate.generation==="number"&&Number.isInteger(candidate.generation)&&candidate.generation>0&&nonEmpty(candidate.canonicalBranch)&&nonEmpty(candidate.canonicalPath)&&nonEmpty(candidate.laneBranch)&&nonEmpty(candidate.lanePath)&&isHex40(candidate.expectedPrimaryHead)&&isHex40(candidate.sourceBaseOid)&&isHex40(candidate.sourceHeadOid)&&isHex40(candidate.targetHeadOid)&&isStrategy(candidate.strategy)&&(candidate.declaredConflictFiles===void 0||Array.isArray(candidate.declaredConflictFiles)&&candidate.declaredConflictFiles.every((item)=>nonEmpty(item)))&&typeof candidate.createdAt==="number"&&Number.isFinite(candidate.createdAt)&&candidate.createdAt>=0}function isClaimState(value){if(!value||typeof value!=="object"||Array.isArray(value))return!1;let candidate=value;return nonEmpty(candidate.claimantCallID)&&nonEmpty(candidate.claimantSessionId)&&nonEmpty(candidate.childSessionId)&&typeof candidate.claimRevision==="number"&&Number.isInteger(candidate.claimRevision)&&candidate.claimRevision>0&&typeof candidate.attempt==="number"&&Number.isInteger(candidate.attempt)&&candidate.attempt>0&&typeof candidate.leaseExpiresAt==="number"&&Number.isFinite(candidate.leaseExpiresAt)&&candidate.leaseExpiresAt>=0&&nonEmpty(candidate.claimTokenDigest)&&typeof candidate.claimedAt==="number"&&Number.isFinite(candidate.claimedAt)&&candidate.claimedAt>=0}function isAuthority(value){if(!value||typeof value!=="object"||Array.isArray(value))return!1;let candidate=value,claimCursor=candidate.claimCursor&&typeof candidate.claimCursor==="object"?candidate.claimCursor:void 0,validStatus=candidate.status==="preserved"||candidate.status==="claimed"||candidate.status==="released"||candidate.status==="finalized";return candidate.schemaVersion===2&&nonEmpty(candidate.authorityDigest)&&isImmutableIdentity(candidate.immutable)&&validStatus&&(candidate.claim===void 0||isClaimState(candidate.claim))&&(claimCursor===void 0||typeof claimCursor.lastClaimRevision==="number"&&Number.isInteger(claimCursor.lastClaimRevision)&&claimCursor.lastClaimRevision>0&&typeof claimCursor.lastAttempt==="number"&&Number.isInteger(claimCursor.lastAttempt)&&claimCursor.lastAttempt>0)&&(candidate.status!=="claimed"||candidate.claim!==void 0)&&(candidate.finalizedAt===void 0||typeof candidate.finalizedAt==="number"&&Number.isFinite(candidate.finalizedAt)&&candidate.finalizedAt>=0)&&(candidate.settlement===void 0||isSettlementEvidence(candidate.settlement))}function isJournalEntry(value){if(!value||typeof value!=="object"||Array.isArray(value))return!1;let candidate=value,validState=candidate.state==="PREPARED"||candidate.state==="COMMITTED"||candidate.state==="CLAIM_RENEWED"||candidate.state==="ABORTED"||candidate.state==="RELEASED"||candidate.state==="FINALIZED";return candidate.schemaVersion===1&&nonEmpty(candidate.authorityDigest)&&validState&&nonEmpty(candidate.claimantCallID)&&nonEmpty(candidate.claimantSessionId)&&(candidate.childSessionId===void 0||nonEmpty(candidate.childSessionId))&&typeof candidate.claimRevision==="number"&&Number.isInteger(candidate.claimRevision)&&candidate.claimRevision>0&&typeof candidate.attempt==="number"&&Number.isInteger(candidate.attempt)&&candidate.attempt>0&&typeof candidate.leaseExpiresAt==="number"&&Number.isFinite(candidate.leaseExpiresAt)&&candidate.leaseExpiresAt>=0&&nonEmpty(candidate.claimTokenDigest)&&typeof candidate.preparedAt==="number"&&Number.isFinite(candidate.preparedAt)&&candidate.preparedAt>=0&&(candidate.credentialInstalledAt===void 0||typeof candidate.credentialInstalledAt==="number"&&Number.isFinite(candidate.credentialInstalledAt)&&candidate.credentialInstalledAt>=0)&&(candidate.committedAt===void 0||typeof candidate.committedAt==="number"&&Number.isFinite(candidate.committedAt)&&candidate.committedAt>=0)&&(candidate.abortedAt===void 0||typeof candidate.abortedAt==="number"&&Number.isFinite(candidate.abortedAt)&&candidate.abortedAt>=0)&&(candidate.reason===void 0||nonEmpty(candidate.reason))}function isCredential(value){if(!value||typeof value!=="object"||Array.isArray(value))return!1;let candidate=value;return candidate.schemaVersion===1&&nonEmpty(candidate.authorityDigest)&&nonEmpty(candidate.claimantCallID)&&nonEmpty(candidate.claimantSessionId)&&nonEmpty(candidate.childSessionId)&&typeof candidate.claimRevision==="number"&&Number.isInteger(candidate.claimRevision)&&candidate.claimRevision>0&&nonEmpty(candidate.rawToken)&&typeof candidate.leaseExpiresAt==="number"&&Number.isFinite(candidate.leaseExpiresAt)&&candidate.leaseExpiresAt>=0&&typeof candidate.createdAt==="number"&&Number.isFinite(candidate.createdAt)&&candidate.createdAt>=0}function rebuildIndex(authorities){let bySessionTask={};for(let authority of[...authorities].sort((left,right)=>right.immutable.generation-left.immutable.generation||right.immutable.createdAt-left.immutable.createdAt)){let key2=taskKey(authority.immutable.parentSessionId,authority.immutable.taskId),digests=bySessionTask[key2]??[];digests.push(authority.authorityDigest),bySessionTask[key2]=digests}return{bySessionTask}}function emptyJournal(){return{schemaVersion:1,entries:[]}}function readBoundedJsonFile2(filePath,maxBytes){try{if(fs67.statSync(filePath).size>maxBytes)return{ok:!1,reason:`${path109.basename(filePath)} exceeds the ${maxBytes}-byte safety bound`};let raw=fs67.readFileSync(filePath,"utf8");if(Buffer.byteLength(raw,"utf8")>maxBytes)return{ok:!1,reason:`${path109.basename(filePath)} changed beyond the ${maxBytes}-byte safety bound`};return{ok:!0,value:JSON.parse(raw)}}catch(error93){if(error93.code==="ENOENT")return{ok:!0,value:void 0};return{ok:!1,reason:`${path109.basename(filePath)} is unreadable or malformed: ${error93 instanceof Error?error93.message:String(error93)}`}}}function loadStoreStrict(directory){let loaded=readBoundedJsonFile2(storePath4(directory),MAX_STORE_BYTES);if(!loaded.ok)return{status:"uncertain",reason:loaded.reason};if(loaded.value===void 0)return{status:"ok",authorities:[]};let parsed=loaded.value;if(parsed.schemaVersion===1)return{status:"unsupported-legacy",reason:"worktree recovery v1 records are unsupported for claim mutation"};if(parsed.schemaVersion!==2)return{status:"uncertain",reason:`unknown worktree recovery schema version: ${String(parsed.schemaVersion)}`};if(!Array.isArray(parsed.authorities))return{status:"uncertain",reason:"worktree recovery store does not contain an authorities array"};if(parsed.authorities.length>MAX_STORE_AUTHORITIES)return{status:"uncertain",reason:`worktree recovery authority count exceeds the ${MAX_STORE_AUTHORITIES}-record safety bound`};for(let authority of parsed.authorities)if(!isAuthority(authority))return{status:"uncertain",reason:"worktree recovery store contains an invalid authority record"};return{status:"ok",authorities:[...parsed.authorities]}}function loadStoreWritable(directory){let scanned=loadStoreStrict(directory);if(scanned.status==="unsupported-legacy")return{ok:!1,code:"unsupported_legacy",reason:scanned.reason};if(scanned.status==="uncertain")return{ok:!1,code:"uncertain_store",reason:scanned.reason};return{schemaVersion:2,authorities:scanned.authorities,index:rebuildIndex(scanned.authorities)}}function loadJournal(directory){let loaded=readBoundedJsonFile2(journalPath2(directory),MAX_JOURNAL_BYTES2);if(!loaded.ok||loaded.value===void 0)return emptyJournal();let parsed=loaded.value;if(parsed.schemaVersion!==1||!Array.isArray(parsed.entries))return emptyJournal();let entries=[];for(let entry of parsed.entries)if(isJournalEntry(entry))entries.push(entry);return{schemaVersion:1,entries:entries.slice(-MAX_JOURNAL_ENTRIES)}}function updateStore(store,authorities){return store.authorities=authorities,store.index=rebuildIndex(authorities),store}function currentClaimMatches(authority,request){if(!authority.claim)return!1;return authority.claim.claimantCallID===request.claimantCallID&&authority.claim.claimRevision===request.claimRevision&&authority.claim.claimTokenDigest===sha2566(request.rawToken)}function latestJournalEntriesByAuthority(journal){let latest=new Map;for(let entry of journal.entries)latest.set(entry.authorityDigest,entry);return[...latest.values()]}function recordJournalEntry(directory,entry){let journal=loadJournal(directory);if(journal.entries.push(entry),journal.entries.length>MAX_JOURNAL_ENTRIES)journal.entries=journal.entries.slice(-MAX_JOURNAL_ENTRIES);return _internals101.writeClaimJournal(journalPath2(directory),journal),journal}function writeCredential(directory,credential){let targetPath=credentialPath(directory,credential.authorityDigest);_internals101.writeCredentialFile(targetPath,credential);try{fs67.chmodSync(targetPath,384)}catch{}return targetPath}function readCredential(directory,authorityDigest){let loaded=readBoundedJsonFile2(credentialPath(directory,authorityDigest),MAX_CREDENTIAL_BYTES);if(!loaded.ok||loaded.value===void 0)return;return isCredential(loaded.value)?loaded.value:void 0}function removeCredentialIfMatch(directory,entry){let credential=readCredential(directory,entry.authorityDigest);if(credential&&credential.claimRevision===entry.claimRevision&&credential.claimantCallID===entry.claimantCallID)try{fs67.unlinkSync(credentialPath(directory,entry.authorityDigest))}catch{}}function baseMutationFailure(code,reason){return{ok:!1,code,reason}}function publishWorktreeRecoveryAuthorityUnlocked(directory,input){let store=loadStoreWritable(directory);if("ok"in store)return store;let immutable={...input,createdAt:nowMs2()};if(!isImmutableIdentity(immutable))return baseMutationFailure("uncertain_store","invalid immutable recovery authority input");let authorityDigest=digestAuthorityIdentity(input),existing=store.authorities.find((authority2)=>authority2.authorityDigest===authorityDigest);if(existing)return{ok:!0,authority:existing};let authority={schemaVersion:2,authorityDigest,immutable,status:"preserved"},nextAuthorities=[...store.authorities,authority];if(nextAuthorities.length>MAX_STORE_AUTHORITIES)return baseMutationFailure("uncertain_store",`worktree recovery authority count exceeds the ${MAX_STORE_AUTHORITIES}-record safety bound`);return _internals101.writeRecoveryStore(storePath4(directory),updateStore(store,nextAuthorities),"publish"),{ok:!0,authority}}function publishWorktreeRecoveryAuthority(directory,input){let release=acquireAuthorityLock(directory);if(!release)return baseMutationFailure("busy","worktree recovery authority store is locked");try{return publishWorktreeRecoveryAuthorityUnlocked(directory,input)}finally{release()}}function scanWorktreeRecoveryAuthoritiesForRecovery(directory){return loadStoreStrict(directory)}function lookupWorktreeRecoveryAuthoritiesByTask(directory,query){let scanned=loadStoreStrict(directory);if(scanned.status!=="ok")return scanned;return{status:"ok",authorities:scanned.authorities.filter((authority)=>authority.immutable.parentSessionId===query.parentSessionId&&authority.immutable.taskId===query.taskId).sort((left,right)=>right.immutable.generation-left.immutable.generation||right.immutable.createdAt-left.immutable.createdAt)}}async function claimWorktreeRecoveryAuthorityUnlocked(directory,request){let store=loadStoreWritable(directory);if("ok"in store)return store;let authorityIndex=store.authorities.findIndex((authority2)=>authority2.authorityDigest===request.authorityDigest);if(authorityIndex===-1)return baseMutationFailure("not_found","worktree recovery authority not found");let authority=store.authorities[authorityIndex];if(authority.status==="finalized")return baseMutationFailure("finalized","finalized worktree recovery authority cannot be claimed again");let currentTime=nowMs2(request.now),previousClaim=authority.claim;if(previousClaim&&previousClaim.leaseExpiresAt>currentTime)return baseMutationFailure("busy","worktree recovery authority is already claimed");if(previousClaim&&previousClaim.leaseExpiresAt<=currentTime){if(!request.revalidateExpiredClaim)return baseMutationFailure("revalidation_required","expired worktree recovery claims require full revalidation before transfer");let verdict=await request.revalidateExpiredClaim({authority,previousClaim});if(!verdict.ok)return baseMutationFailure("revalidation_failed",verdict.reason)}let nextAttempt=(previousClaim?.attempt??authority.claimCursor?.lastAttempt??0)+1,maxAttempts=request.maxAttempts??DEFAULT_MAX_ATTEMPTS;if(nextAttempt>maxAttempts)return baseMutationFailure("retry_cap_exceeded",`worktree recovery claim attempt ${nextAttempt} exceeds the ${maxAttempts}-attempt safety cap`);let nextRevision=(previousClaim?.claimRevision??authority.claimCursor?.lastClaimRevision??0)+1,rawToken=_internals101.generateRawToken(),claimTokenDigest=sha2566(rawToken);recordJournalEntry(directory,{schemaVersion:1,authorityDigest:authority.authorityDigest,state:"PREPARED",claimantCallID:request.claimantCallID,claimantSessionId:request.claimantSessionId,claimRevision:nextRevision,attempt:nextAttempt,leaseExpiresAt:currentTime+request.leaseMs,claimTokenDigest,preparedAt:currentTime});let childSessionId=await request.createChildSession(),refreshedStore=loadStoreWritable(directory);if("ok"in refreshedStore)throw Error(`worktree recovery authority could not be revalidated: ${refreshedStore.reason}`);let refreshedAuthority=refreshedStore.authorities.find((candidate)=>candidate.authorityDigest===request.authorityDigest);if(!refreshedAuthority||stableStringify({status:refreshedAuthority.status,claim:refreshedAuthority.claim,claimCursor:refreshedAuthority.claimCursor,immutable:refreshedAuthority.immutable})!==stableStringify({status:authority.status,claim:authority.claim,claimCursor:authority.claimCursor,immutable:authority.immutable}))throw recordJournalEntry(directory,{schemaVersion:1,authorityDigest:authority.authorityDigest,state:"ABORTED",claimantCallID:request.claimantCallID,claimantSessionId:request.claimantSessionId,childSessionId,claimRevision:nextRevision,attempt:nextAttempt,leaseExpiresAt:currentTime+request.leaseMs,claimTokenDigest,preparedAt:currentTime,abortedAt:nowMs2(),reason:"authority changed while child session was being created"}),Error("worktree recovery authority changed while child session was being created");recordJournalEntry(directory,{schemaVersion:1,authorityDigest:authority.authorityDigest,state:"PREPARED",claimantCallID:request.claimantCallID,claimantSessionId:request.claimantSessionId,childSessionId,claimRevision:nextRevision,attempt:nextAttempt,leaseExpiresAt:currentTime+request.leaseMs,claimTokenDigest,preparedAt:currentTime});let credential={schemaVersion:1,authorityDigest:authority.authorityDigest,claimantCallID:request.claimantCallID,claimantSessionId:request.claimantSessionId,childSessionId,claimRevision:nextRevision,rawToken,leaseExpiresAt:currentTime+request.leaseMs,createdAt:currentTime},writtenCredentialPath=writeCredential(directory,credential);recordJournalEntry(directory,{schemaVersion:1,authorityDigest:authority.authorityDigest,state:"PREPARED",claimantCallID:request.claimantCallID,claimantSessionId:request.claimantSessionId,childSessionId,claimRevision:nextRevision,attempt:nextAttempt,leaseExpiresAt:currentTime+request.leaseMs,claimTokenDigest,preparedAt:currentTime,credentialInstalledAt:currentTime});let claimedAuthority={...authority,status:"claimed",claim:{claimantCallID:request.claimantCallID,claimantSessionId:request.claimantSessionId,childSessionId,claimRevision:nextRevision,attempt:nextAttempt,leaseExpiresAt:currentTime+request.leaseMs,claimTokenDigest,claimedAt:currentTime},claimCursor:{lastClaimRevision:nextRevision,lastAttempt:nextAttempt}},nextAuthorities=[...store.authorities];return nextAuthorities[authorityIndex]=claimedAuthority,_internals101.writeRecoveryStore(storePath4(directory),updateStore(store,nextAuthorities),"claim-commit"),recordJournalEntry(directory,{schemaVersion:1,authorityDigest:authority.authorityDigest,state:"COMMITTED",claimantCallID:request.claimantCallID,claimantSessionId:request.claimantSessionId,childSessionId,claimRevision:nextRevision,attempt:nextAttempt,leaseExpiresAt:currentTime+request.leaseMs,claimTokenDigest,preparedAt:currentTime,credentialInstalledAt:currentTime,committedAt:currentTime}),{ok:!0,authority:claimedAuthority,rawToken,credentialPath:writtenCredentialPath}}async function claimWorktreeRecoveryAuthority(directory,request){let release=acquireAuthorityLock(directory);if(!release)return baseMutationFailure("busy","worktree recovery authority store is locked");try{return await claimWorktreeRecoveryAuthorityUnlocked(directory,request)}finally{release()}}function renewWorktreeRecoveryClaimUnlocked(directory,request){let store=loadStoreWritable(directory);if("ok"in store)return store;let index=store.authorities.findIndex((authority2)=>authority2.authorityDigest===request.authorityDigest);if(index===-1)return baseMutationFailure("not_found","worktree recovery authority not found");let authority=store.authorities[index];if(!currentClaimMatches(authority,request))return baseMutationFailure("stale_claim","worktree recovery claim is stale or does not match the current claimant");let renewed={...authority,claim:{...authority.claim,leaseExpiresAt:nowMs2(request.now)+request.leaseMs}},nextAuthorities=[...store.authorities];return nextAuthorities[index]=renewed,_internals101.writeRecoveryStore(storePath4(directory),updateStore(store,nextAuthorities),"claim-renew"),writeCredential(directory,{schemaVersion:1,authorityDigest:renewed.authorityDigest,claimantCallID:renewed.claim.claimantCallID,claimantSessionId:renewed.claim.claimantSessionId,childSessionId:renewed.claim.childSessionId,claimRevision:renewed.claim.claimRevision,rawToken:request.rawToken,leaseExpiresAt:renewed.claim.leaseExpiresAt,createdAt:renewed.claim.claimedAt}),recordJournalEntry(directory,{schemaVersion:1,authorityDigest:renewed.authorityDigest,state:"CLAIM_RENEWED",claimantCallID:renewed.claim.claimantCallID,claimantSessionId:renewed.claim.claimantSessionId,childSessionId:renewed.claim.childSessionId,claimRevision:renewed.claim.claimRevision,attempt:renewed.claim.attempt,leaseExpiresAt:renewed.claim.leaseExpiresAt,claimTokenDigest:renewed.claim.claimTokenDigest,preparedAt:renewed.claim.claimedAt,committedAt:nowMs2(request.now),reason:"claim lease renewed"}),{ok:!0,authority:renewed}}function renewWorktreeRecoveryClaim(directory,request){let release=acquireAuthorityLock(directory);if(!release)return baseMutationFailure("busy","worktree recovery authority store is locked");try{return renewWorktreeRecoveryClaimUnlocked(directory,request)}finally{release()}}function releaseWorktreeRecoveryClaimUnlocked(directory,request){let store=loadStoreWritable(directory);if("ok"in store)return store;let index=store.authorities.findIndex((authority2)=>authority2.authorityDigest===request.authorityDigest);if(index===-1)return baseMutationFailure("not_found","worktree recovery authority not found");let authority=store.authorities[index];if(!currentClaimMatches(authority,request))return baseMutationFailure("stale_claim","worktree recovery claim is stale or does not match the current claimant");let released={...authority,status:"preserved",claim:void 0,claimCursor:authority.claim?{lastClaimRevision:authority.claim.claimRevision,lastAttempt:authority.claim.attempt}:authority.claimCursor},nextAuthorities=[...store.authorities];return nextAuthorities[index]=released,_internals101.writeRecoveryStore(storePath4(directory),updateStore(store,nextAuthorities),"claim-release"),recordJournalEntry(directory,{schemaVersion:1,authorityDigest:authority.authorityDigest,state:"RELEASED",claimantCallID:authority.claim.claimantCallID,claimantSessionId:authority.claim.claimantSessionId,childSessionId:authority.claim.childSessionId,claimRevision:authority.claim.claimRevision,attempt:authority.claim.attempt,leaseExpiresAt:authority.claim.leaseExpiresAt,claimTokenDigest:authority.claim.claimTokenDigest,preparedAt:authority.claim.claimedAt,committedAt:nowMs2(request.now),reason:"claim released after preserved settlement"}),removeCredentialIfMatch(directory,request),{ok:!0,authority:released}}function releaseWorktreeRecoveryClaim(directory,request){let release=acquireAuthorityLock(directory);if(!release)return baseMutationFailure("busy","worktree recovery authority store is locked");try{return releaseWorktreeRecoveryClaimUnlocked(directory,request)}finally{release()}}function finalizeWorktreeRecoveryAuthorityUnlocked(directory,request){let store=loadStoreWritable(directory);if("ok"in store)return store;let index=store.authorities.findIndex((authority2)=>authority2.authorityDigest===request.authorityDigest);if(index===-1)return baseMutationFailure("not_found","worktree recovery authority not found");let authority=store.authorities[index];if(!currentClaimMatches(authority,request))return baseMutationFailure("stale_claim","worktree recovery claim is stale or does not match the current claimant");let finalized={...authority,status:"finalized",claim:void 0,claimCursor:authority.claim?{lastClaimRevision:authority.claim.claimRevision,lastAttempt:authority.claim.attempt}:authority.claimCursor,finalizedAt:nowMs2(request.now),settlement:request.settlement},nextAuthorities=[...store.authorities];return nextAuthorities[index]=finalized,_internals101.writeRecoveryStore(storePath4(directory),updateStore(store,nextAuthorities),"claim-finalize"),recordJournalEntry(directory,{schemaVersion:1,authorityDigest:authority.authorityDigest,state:"FINALIZED",claimantCallID:authority.claim.claimantCallID,claimantSessionId:authority.claim.claimantSessionId,childSessionId:authority.claim.childSessionId,claimRevision:authority.claim.claimRevision,attempt:authority.claim.attempt,leaseExpiresAt:authority.claim.leaseExpiresAt,claimTokenDigest:authority.claim.claimTokenDigest,preparedAt:authority.claim.claimedAt,committedAt:nowMs2(request.now),reason:"claim finalized after landed settlement"}),removeCredentialIfMatch(directory,request),{ok:!0,authority:finalized}}function finalizeWorktreeRecoveryAuthority(directory,request){let release=acquireAuthorityLock(directory);if(!release)return baseMutationFailure("busy","worktree recovery authority store is locked");try{return finalizeWorktreeRecoveryAuthorityUnlocked(directory,request)}finally{release()}}function replayWorktreeRecoveryClaimJournalUnlocked(directory,options){let outcomes=[],storeScan=loadStoreStrict(directory),authorities=new Map((storeScan.status==="ok"?storeScan.authorities:[]).map((authority)=>[authority.authorityDigest,authority]));for(let entry of latestJournalEntriesByAuthority(loadJournal(directory))){if(entry.state==="ABORTED"||entry.state==="CLAIM_RENEWED"||entry.state==="RELEASED"||entry.state==="FINALIZED"){outcomes.push({authorityDigest:entry.authorityDigest,outcome:"noop"});continue}if(entry.state==="COMMITTED"){let current2=authorities.get(entry.authorityDigest);if(current2&&!current2.claim&¤t2.claimCursor?.lastClaimRevision===entry.claimRevision&&(current2.status==="preserved"||current2.status==="finalized")){recordJournalEntry(directory,{...entry,state:current2.status==="finalized"?"FINALIZED":"RELEASED",reason:"repaired terminal claim journal after interrupted settlement"}),removeCredentialIfMatch(directory,entry),outcomes.push({authorityDigest:entry.authorityDigest,outcome:"repaired_terminal_claim"});continue}if(current2?.claim&¤t2.claim.claimRevision===entry.claimRevision&¤t2.claim.claimTokenDigest===entry.claimTokenDigest){let credential2=readCredential(directory,entry.authorityDigest),released=credential2?releaseWorktreeRecoveryClaimUnlocked(directory,{authorityDigest:entry.authorityDigest,claimantCallID:entry.claimantCallID,claimRevision:entry.claimRevision,rawToken:credential2.rawToken}):void 0;outcomes.push({authorityDigest:entry.authorityDigest,outcome:released?.ok?"released_orphaned_committed_claim":"uncertain_committed_without_authority"})}else outcomes.push({authorityDigest:entry.authorityDigest,outcome:"uncertain_committed_without_authority"});continue}let current=authorities.get(entry.authorityDigest);if(current?.claim&¤t.claim.claimRevision===entry.claimRevision&¤t.claim.claimTokenDigest===entry.claimTokenDigest){recordJournalEntry(directory,{...entry,state:"COMMITTED",committedAt:nowMs2()}),outcomes.push({authorityDigest:entry.authorityDigest,outcome:"committed_claim_stable"});continue}let credential=readCredential(directory,entry.authorityDigest);if(credential&&credential.claimRevision===entry.claimRevision&&credential.claimantCallID===entry.claimantCallID){removeCredentialIfMatch(directory,entry),recordJournalEntry(directory,{...entry,state:"ABORTED",abortedAt:nowMs2(),reason:"removed uncommitted credential during replay"}),options?.onAbortPreparedClaim?.(entry),outcomes.push({authorityDigest:entry.authorityDigest,outcome:"removed_uncommitted_credential"});continue}recordJournalEntry(directory,{...entry,state:"ABORTED",abortedAt:nowMs2(),reason:"prepared claim never reached credential install or commit"}),options?.onAbortPreparedClaim?.(entry),outcomes.push({authorityDigest:entry.authorityDigest,outcome:"aborted_prepared_claim"})}return outcomes}function replayWorktreeRecoveryClaimJournal(directory,options){let release=acquireAuthorityLock(directory);if(!release)throw Error("worktree recovery authority store is locked");try{return replayWorktreeRecoveryClaimJournalUnlocked(directory,options)}finally{release()}}var STORE_RELATIVE_PATH,JOURNAL_RELATIVE_PATH,CREDENTIAL_DIRECTORY,AUTHORITY_LOCK_RELATIVE_PATH,AUTHORITY_LOCK_STALE_MS=600000,MAX_STORE_BYTES=2097152,MAX_STORE_AUTHORITIES=512,MAX_JOURNAL_BYTES2=2097152,MAX_JOURNAL_ENTRIES=512,MAX_CREDENTIAL_BYTES=16384,DEFAULT_MAX_ATTEMPTS=8,HEX_40_RE,_internals101;var init_worktree_recovery_authority=__esm(()=>{init_atomic_write();STORE_RELATIVE_PATH=path109.join(".swarm","worktree-merge-recovery-v2.json"),JOURNAL_RELATIVE_PATH=path109.join(".swarm","worktree-merge-recovery-v2-journal.json"),CREDENTIAL_DIRECTORY=path109.join(".swarm","worktree-recovery-claims"),AUTHORITY_LOCK_RELATIVE_PATH=path109.join(".swarm","locks","worktree-recovery-authority.lock"),HEX_40_RE=/^[0-9a-f]{40}$/i;_internals101={generateRawToken:()=>randomBytes7(32).toString("hex"),writeRecoveryStore:(targetPath,store,_phase)=>{atomicWriteSwarmFileSync(targetPath,JSON.stringify(store,null,2))},writeClaimJournal:(targetPath,journal)=>{atomicWriteSwarmFileSync(targetPath,JSON.stringify(journal,null,2))},writeCredentialFile:(targetPath,credential)=>{atomicWriteSwarmFileSync(targetPath,JSON.stringify(credential,null,2),{mode:384})},getRecoveryStorePath:storePath4,getClaimJournalPath:journalPath2,getCredentialPath:credentialPath,acquireAuthorityLock,readClaimJournal(directory){return loadJournal(directory)},resetForTest(){}}});import*as fs68 from"node:fs";import*as path110 from"node:path";function decodeTagPart(value){if(!value||!/^[A-Za-z0-9_-]+$/.test(value))return null;let decoded=Buffer.from(value,"base64url").toString("utf8");return decoded&&Buffer.from(decoded,"utf8").toString("base64url")===value?decoded:null}async function scanBackgroundWorktreeOwnershipTagsForRecovery(directory){try{fs68.statSync(path110.join(directory,".git"))}catch(error93){if(error93.code==="ENOENT")return{status:"ok",owners:[]};return{status:"uncertain",reason:`Git metadata could not be inspected: ${error93 instanceof Error?error93.message:String(error93)}`}}let proc;try{proc=bunSpawn([resolveGitExecutable(),"-C",directory,"for-each-ref",`--count=${MAX_OWNERSHIP_TAGS+1}`,"--format=%(refname:strip=2)%00%(objectname)","refs/tags/swarm-preserved-owner/"],{stdin:"ignore",stdout:"pipe",stderr:"ignore",timeout:OWNERSHIP_TAG_SCAN_TIMEOUT_MS});let exitCode=await proc.exited;if(exitCode!==0)return{status:"uncertain",reason:`ownership tag scan exited ${exitCode}`};let lines=(await proc.stdout.text()).split(/\r?\n/).map((line)=>line.trim()).filter(Boolean);if(lines.length>MAX_OWNERSHIP_TAGS)return{status:"uncertain",reason:`ownership tag scan exceeded the ${MAX_OWNERSHIP_TAGS}-tag safety bound`};let owners=[];for(let line of lines){let[tag,ref,...extra]=line.split("\x00"),segments=tag?.split("/")??[],sessionId=decodeTagPart(segments[1]??""),laneId=decodeTagPart(segments[2]??""),callDigest=segments[3];if(extra.length>0||segments.length!==4||segments[0]!=="swarm-preserved-owner"||!sessionId||!laneId||!callDigest||!/^[0-9a-f]{12}$/.test(callDigest)||!ref||!/^[0-9a-f]{40,64}$/i.test(ref))return{status:"uncertain",reason:`malformed background ownership tag entry "${tag??""}"`};owners.push({sessionId,laneId,callDigest,ref})}return{status:"ok",owners}}catch(error93){return{status:"uncertain",reason:`ownership tag scan failed: ${error93 instanceof Error?error93.message:String(error93)}`}}finally{try{proc?.kill()}catch{}}}var OWNERSHIP_TAG_SCAN_TIMEOUT_MS=2000,MAX_OWNERSHIP_TAGS=512;var init_worktree_ownership_tag=__esm(()=>{init_bun_compat();init_git_executable()});var exports_worktree_collision_ownership={};__export(exports_worktree_collision_ownership,{inspectStandardWorktreeCollisionOwnership:()=>inspectStandardWorktreeCollisionOwnership,_internals:()=>_internals102});import*as fs69 from"node:fs";function descriptorCoordinateMatch(descriptor,identity){let branchMatches=descriptor.branchName===identity.branchName,pathMatches2=canonicalRootKeyFresh(descriptor.worktreePath)===canonicalRootKeyFresh(identity.worktreePath);if(!branchMatches&&!pathMatches2)return"none";if(!branchMatches||!pathMatches2||descriptor.parentSessionId!==identity.parentSessionId||descriptor.taskId!==identity.taskId)return"uncertain";return"exact"}function isProvenSettled(record3){let settlement=record3.coderSettlement;return settlement?.state==="settled"&&settlement.outcome?.kind==="standard-worktree"&&(settlement.outcome.result==="merged"||settlement.outcome.result==="unchanged")}function classifyRecord(record3,identity,ownerKind){if(!record3.worktree)return null;let coordinates=descriptorCoordinateMatch(record3.worktree,identity);if(coordinates==="none")return null;if(coordinates==="uncertain")return{status:"uncertain",reason:`${ownerKind} background owner has conflicting identity for branch "${identity.branchName}"`};if(isProvenSettled(record3))return null;let lifecycle=record3.coderSettlement?.state==="preserved"?"preserved":"active";return{status:"protected",ownerKind,lifecycle,reason:`${ownerKind} background owner ${record3.correlationId} is ${record3.status}`+(record3.coderSettlement?` with coder settlement ${record3.coderSettlement.state}`:" without a settled workspace outcome")}}async function inspectStandardWorktreeCollisionOwnership(identity){let provisioning=scanWorktreeProvisioningOwnersForRecovery(identity.directory);if(provisioning.status==="uncertain")return provisioning;let now=Date.now();for(let owner of provisioning.owners){if(!(owner.parentSessionId===identity.parentSessionId||owner.worktreeSessionId===identity.parentSessionId))continue;if(owner.schemaVersion===1||owner.taskId===identity.taskId){let leaseIsLive=now-owner.createdAt<=WORKTREE_PROVISIONING_OWNER_LEASE_MS;if(!leaseIsLive)try{_internals102.statSync(identity.worktreePath)}catch(error93){let code=error93.code;if(code!=="ENOENT"&&code!=="ENOTDIR")return{status:"uncertain",reason:`expired provisioning owner ${owner.callID} lane liveness is unreadable: ${error93 instanceof Error?error93.message:String(error93)}`};if(!_internals102.removeWorktreeProvisioningOwner(identity.directory,owner.callID,owner.schemaVersion===3?{reservationId:owner.reservationId,generation:owner.generation,branchName:owner.branchName}:void 0))return{status:"uncertain",reason:`expired provisioning owner ${owner.callID} could not be removed`};continue}return{status:"protected",ownerKind:"provisioning",lifecycle:"active",reason:!leaseIsLive?`provisioning owner ${owner.callID} lease expired, but its exact lane path still exists`:owner.schemaVersion===1?`legacy provisioning owner ${owner.callID} cannot disprove ownership of this same-session lane`:`provisioning owner ${owner.callID} is active for task ${identity.taskId}`}}}let fallback=await scanDelegationFallbacksForRecovery(identity.directory);if(fallback.status==="uncertain")return fallback;for(let artifact of fallback.owners){let classified=classifyRecord(artifact.record,identity,"fallback");if(classified)return classified}let primary=scanDelegationsForRecovery(identity.directory);if(primary.status==="uncertain")return primary;for(let record3 of primary.owners){let classified=classifyRecord(record3,identity,"primary");if(classified)return classified}let tags=await scanBackgroundWorktreeOwnershipTagsForRecovery(identity.directory);if(tags.status==="uncertain")return tags;for(let owner of tags.owners)if(owner.sessionId===identity.parentSessionId&&owner.laneId===identity.taskId)return{status:"protected",ownerKind:"ownership-tag",lifecycle:"preserved",reason:`durable ownership tag ${owner.callDigest} preserves this same-session lane`};let mergeStatus=scanWorktreeMergeFailuresForRecovery(identity.directory);if(mergeStatus.status==="uncertain")return mergeStatus;for(let[,failure]of mergeStatus.failures){let branchMatches=failure.branch===identity.branchName,pathMatches2=typeof failure.worktreePath==="string"&&canonicalRootKeyFresh(failure.worktreePath)===canonicalRootKeyFresh(identity.worktreePath);if(!branchMatches&&!pathMatches2)continue;if(!branchMatches||!pathMatches2)return{status:"uncertain",reason:`merge-status owner has conflicting identity for branch "${identity.branchName}"`};return{status:"protected",ownerKind:"merge-status",lifecycle:"preserved",reason:`merge-status records ${failure.outcome} at stage ${failure.stage}`}}return{status:"unowned"}}var _internals102;var init_worktree_collision_ownership=__esm(()=>{init_pending_delegations();init_canonical_root();init_worktree_merge_status();init_worktree_ownership_tag();init_worktree_provisioning_owner();_internals102={statSync:fs69.statSync,removeWorktreeProvisioningOwner}});var exports_worktree_isolation={};__export(exports_worktree_isolation,{standardWorktreeSerializationSessions:()=>standardWorktreeSerializationSessions,standardWorktreeByCallID:()=>standardWorktreeByCallID,sanitizeWorktreeTaskId:()=>sanitizeWorktreeTaskId,runSerializedWithMergeBacks:()=>runSerializedWithMergeBacks,resolveWorktreeIsolationConfig:()=>resolveWorktreeIsolationConfig,resetStandardWorktreeIsolationState:()=>resetStandardWorktreeIsolationState,recordLaneChildSession:()=>recordLaneChildSession,readLaneEnvFileFromDisk:()=>readLaneEnvFileFromDisk,preserveDirtyWorktreeForCallId:()=>preserveDirtyWorktreeForCallId,preserveDirtyWorktreeAtPath:()=>preserveDirtyWorktreeAtPath,preserveBackgroundWorktreeOwnershipForCallId:()=>preserveBackgroundWorktreeOwnershipForCallId,precreateStandardWorktreeSession:()=>precreateStandardWorktreeSession,preProvisionCollisionCheck:()=>preProvisionCollisionCheck,parseLeanLaneIndex:()=>parseLeanLaneIndex,laneChildSessionAgents:()=>laneChildSessionAgents,isLaneOwnedByCurrentSession:()=>isLaneOwnedByCurrentSession,getStandardWorktreeDegradationReason:()=>getStandardWorktreeDegradationReason,finishStandardWorktreeDispatch:()=>finishStandardWorktreeDispatch,computeLaneRuntimeProfile:()=>computeLaneRuntimeProfile,cleanupStandardWorktreeForCallId:()=>cleanupStandardWorktreeForCallId,checkStandardWorktreeSerializationRelease:()=>checkStandardWorktreeSerializationRelease,awaitingMergeByCallID:()=>awaitingMergeByCallID,assertTaskIdNotForeignLaneSession:()=>assertTaskIdNotForeignLaneSession,abortStandardWorktreeDispatch:()=>abortStandardWorktreeDispatch,_internals:()=>_internals96,MAX_TRACKED_STANDARD_WORKTREE_CALLS:()=>MAX_TRACKED_STANDARD_WORKTREE_CALLS});import{createHash as createHash51}from"node:crypto";import*as fs70 from"node:fs/promises";import*as path111 from"node:path";function parseLeanLaneIndex(laneId){let match=/^lane-(\d+)$/.exec(laneId);if(match){let n=parseInt(match[1],10);return Number.isNaN(n)?0:n-1}return 0}function computeLaneRuntimeProfile(runtime,laneIndex,worktreePath){if(!runtime?.enabled)return;let portStride=runtime.port_stride??1,envOverrides={};if(runtime.port_base!==void 0){let portBase=runtime.port_base,port=Math.min(portBase+laneIndex*portStride,65535);envOverrides.PORT=String(port)}if(runtime.env_overrides)Object.assign(envOverrides,runtime.env_overrides);if(runtime.cache_redirects)for(let[envName,basePath]of Object.entries(runtime.cache_redirects)){let laneSuffix=path111.join(basePath,`lane-${laneIndex}`);envOverrides[envName]=laneSuffix}return{laneIndex,worktreePath,envOverrides}}function allocateStandardLaneIndex(parentSessionID){let current=standardWorktreeLaneIndexBySession.get(parentSessionID)??0;return standardWorktreeLaneIndexBySession.set(parentSessionID,current+1),current}function recordLaneChildSession(sessionId,agent){laneChildSessionAgents.delete(sessionId),laneChildSessionAgents.set(sessionId,agent);while(laneChildSessionAgents.size>LANE_CHILD_SESSION_LIMIT){let oldest=laneChildSessionAgents.keys().next().value;if(oldest===void 0)break;laneChildSessionAgents.delete(oldest)}}function assertTaskIdNotForeignLaneSession(args2){if(!args2)return;let taskId=typeof args2.task_id==="string"?args2.task_id.trim():"";if(!taskId)return;let owner=laneChildSessionAgents.get(taskId);if(owner===void 0)return;let requested=typeof args2.subagent_type==="string"?stripKnownSwarmPrefix(args2.subagent_type).toLowerCase():"";if(requested===owner)return;throw Error(`TASK_SESSION_RESUME_MISMATCH: task_id "${taskId}" is the session this plugin created for an isolated ${owner} lane; passing it would resume that ${owner} session as ${requested||"another agent"} (its lane, history and scope). `+'Set task_id to the plan task id (e.g. "1.1") or omit it; never pass a `ses_…` id returned in a Task result '+`for a different agent. Omitting it starts a fresh ${requested||"agent"} session.`)}async function createSessionWithinBudget(promise3,label,onLateResolve,timeoutMs=_internals96.worktreeSessionCreateTimeoutMs){let settled=new Promise((resolveState)=>{promise3.then((result)=>resolveState({status:"fulfilled",result}),()=>resolveState({status:"rejected"}))});try{return await withTimeout(promise3,timeoutMs,Error(`${label} deadline expired after ${timeoutMs}ms (worktree.session_create_timeout_ms)`))}catch(error93){let teardown=settled.then(async(state2)=>{if(state2.status==="fulfilled")await onLateResolve?.(state2.result)},()=>{}).catch((teardownError)=>{log(`[worktree-isolation] ${label} late-settle teardown failed: ${teardownError instanceof Error?teardownError.message:String(teardownError)}`)});throw await withTimeout(teardown,_internals96.worktreeSessionCreateSettleGraceMs,Error(`${label} settle grace expired`)).catch(()=>{}),error93}}function resolveSessionCreateTimeoutMs(args2){return args2.config?.worktree?.session_create_timeout_ms??_internals96.worktreeSessionCreateTimeoutMs}async function handleStrandedLane(lane){recordDeadLaneReclaim(lane.directory,{lanePath:lane.lanePath,branchName:lane.branchName,parentSessionId:lane.parentSessionID,taskId:lane.taskId,reason:lane.reason});let session=ensureAgentSession(lane.parentSessionID);pushAdvisory(session,`WORKTREE_LANE_STRANDED: lane ${lane.lanePath} could not be removed (${lane.reason}). A child session or system process may hold .swarm/swarm.db (WAL); its DB handle was released via closeProjectDb before this attempt. reclaim scheduled at next start.`)}function rememberStandardWorktreeDispatch(dispatch){standardWorktreeByCallID.set(dispatch.callID,dispatch)}function resolveRecoveryTaskId(input){return input.planTaskId??input.taskId}function toRecoveryStrategy(strategy){return strategy}function hasStandardWorktreeDispatchCapacity(){return standardWorktreeByCallID.size<MAX_TRACKED_STANDARD_WORKTREE_CALLS}function hasInFlightStandardWorktreeDispatch(parentSessionID){for(let dispatch of standardWorktreeByCallID.values())if(dispatch.parentSessionID===parentSessionID)return!0;for(let record3 of awaitingMergeByCallID.values())if(record3.parentSessionID===parentSessionID)return!0;return!1}function handleStandardWorktreeFailure(parentSessionID,policy,message){if(policy==="required")throw new StandardWorktreeLifecycleError(message);if(hasInFlightStandardWorktreeDispatch(parentSessionID))throw new StandardWorktreeLifecycleError(`STANDARD_WORKTREE_ISOLATION_UNSAFE: ${message} Sibling coder task(s) are isolated in worktrees for this session, so dispatching this coder un-isolated in the main tree would risk a merge-back collision. Wait for in-flight coder task(s) to be reviewed and merged, then retry.`);serializeStandardWorktreeDispatches(parentSessionID,message)}function resolveWorktreeLifecycleLockWaitMs(sessionCreateTimeoutMs){let createMs=Math.max(0,sessionCreateTimeoutMs),coverHolder=createMs+WORKTREE_LIFECYCLE_LOCK_WAIT_MARGIN_MS,roomInHook=WORKTREE_DISPATCH_HOOK_BUDGET_MS-createMs-WORKTREE_SESSION_CREATE_SETTLE_GRACE_MS-WORKTREE_PROVISION_ALLOWANCE_MS;return Math.max(WORKTREE_LIFECYCLE_LOCK_WAIT_MIN_MS,Math.min(coverHolder,roomInHook))}async function acquireWorktreeLifecycleLockWithin(directory,taskId,waitMs){let deadline=_internals96.now()+Math.max(0,waitMs);for(;;){let attempt=await _internals96.tryAcquireWorktreeLifecycleLock(directory,WORKTREE_LIFECYCLE_LOCK_FILE,"worktree-provisioning",taskId);if(attempt.acquired)return attempt;let remaining=deadline-_internals96.now();if(remaining<=0)return attempt;await _internals96.sleep(Math.min(remaining,50+Math.floor(Math.random()*200)))}}function hardStopStandardWorktreeLifecycle(parentSessionID,message){let session=ensureAgentSession(parentSessionID);throw pushAdvisory(session,message),new StandardWorktreeLifecycleError(message)}function serializeStandardWorktreeDispatches(sessionID,message){if(!rememberStandardWorktreeSerializationSession(sessionID)){let session2=ensureAgentSession(sessionID);pushAdvisory(session2,`${message} Serialization tracking is at capacity (256 sessions active); continuing in normal parallel mode.`);return}standardWorktreeDegradationReasonBySession.set(sessionID,{reason:message,at:Date.now()});let session=ensureAgentSession(sessionID);session.maxConcurrencyOverride=1,pushAdvisory(session,`${message} Serializing standard coder dispatches for this session.`)}function getStandardWorktreeDegradationReason(sessionID){return standardWorktreeDegradationReasonBySession.get(sessionID)}function resetStandardWorktreeIsolationState(){standardWorktreeByCallID.clear(),standardWorktreeSerializationSessions.clear(),laneChildSessionAgents.clear(),serializationStateBySessionID.clear(),standardWorktreeDegradationReasonBySession.clear(),awaitingMergeByCallID.clear(),standardWorktreeMergeQueue=Promise.resolve(),standardWorktreeLaneIndexBySession.clear()}function releaseStandardWorktreeSerialization(sessionID){if(!standardWorktreeSerializationSessions.has(sessionID))return!1;standardWorktreeSerializationSessions.delete(sessionID),serializationStateBySessionID.delete(sessionID),standardWorktreeDegradationReasonBySession.delete(sessionID);let session=ensureAgentSession(sessionID);return session.maxConcurrencyOverride=void 0,pushAdvisory(session,`WORKTREE_SERIALIZATION_RELEASED: ${sessionID} regains parallel dispatch eligibility (release-after-dispatches or TTL).`),!0}function checkStandardWorktreeSerializationRelease(sessionID,config3){let state2=serializationStateBySessionID.get(sessionID);if(!state2)return;let count2=config3.serialization_release_after_dispatches??5,ttl=config3.serialization_release_after_ms??60000;if(state2.successfulDispatchesSince>=count2){releaseStandardWorktreeSerialization(sessionID);return}if(Date.now()-state2.serializedAt>=ttl)releaseStandardWorktreeSerialization(sessionID)}function rememberStandardWorktreeSerializationSession(sessionID){if(standardWorktreeSerializationSessions.size>=MAX_TRACKED_STANDARD_WORKTREE_CALLS){let evicted=!1;for(let key2 of serializationStateBySessionID.keys())if(!hasInFlightStandardWorktreeDispatch(key2)){standardWorktreeSerializationSessions.delete(key2),serializationStateBySessionID.delete(key2),standardWorktreeDegradationReasonBySession.delete(key2),evicted=!0;break}if(!evicted)return log(`[worktree-isolation] serialization set at cap with all sessions active; refusing eviction for ${sessionID}`),!1}if(standardWorktreeSerializationSessions.add(sessionID),!serializationStateBySessionID.has(sessionID))serializationStateBySessionID.set(sessionID,{sessionID,serializedAt:Date.now(),successfulDispatchesSince:0});return!0}function sanitizeWorktreeTaskId(raw){return raw.replace(/[^A-Za-z0-9._-]/g,"-").slice(0,64)||"task"}async function preProvisionCollisionCheck(taskId,directory,_sessionId){let proc;try{proc=_internals96.bunSpawn([_internals96.resolveGitExecutable(),"-C",directory,"worktree","list","--porcelain"],{stdin:"ignore",stdout:"pipe",stderr:"pipe",timeout:WORKTREE_LIST_TIMEOUT_MS})}catch(error93){let detail=`git worktree list could not start in ${directory}: ${error93 instanceof Error?error93.message:String(error93)}`;return log(`[swarm] preProvisionCollisionCheck: ${detail}`),{collision:!1,uncertainty:detail}}let stdout="",stderr="";try{let exitCode=await proc.exited;if(stdout=await proc.stdout.text(),stderr=await proc.stderr.text(),exitCode!==0){if(stderr.toLowerCase().includes("not a git repository"))return{collision:!1};return log(`[swarm] preProvisionCollisionCheck: git worktree list failed (exit ${exitCode}): ${stderr}`),{collision:!1,uncertainty:stderr.trim()||`git worktree list exited ${exitCode}`}}}finally{try{proc.kill()}catch{}}let entries=[],current={path:"",branch:void 0,prunable:!1};for(let rawLine of stdout.split(`
|
|
1271
|
+
`)){let line=rawLine.trim();if(line.startsWith("worktree ")){if(current.path)entries.push(current);current={path:line.slice(9),branch:void 0,prunable:!1}}else if(line.startsWith("branch "))current.branch=line.slice(7);else if(line==="prunable"||line.startsWith("prunable "))current.prunable=!0}if(current.path)entries.push(current);for(let entry of entries){if(!entry.branch)continue;if(entry.prunable)continue;let branchName=entry.branch.startsWith("refs/heads/")?entry.branch.slice(11):entry.branch,segments=branchName.split("/");if(segments.length>=4&&segments[0]==="swarm"&&segments[1]==="lane"){if(segments[3]===taskId){let ownerSessionId=segments[2];return{collision:!0,existingBranch:branchName,ownerSessionId,worktreePath:entry.path}}}if(segments.length>=3&&segments[0]==="swarm-lane"){if(segments[2]===taskId){let ownerSessionId=segments[1];return{collision:!0,existingBranch:branchName,ownerSessionId,worktreePath:entry.path}}}}return{collision:!1}}function isLaneOwnedByCurrentSession(branchName,expectedSessionId){return _internals38.extractSessionId(branchName)===expectedSessionId}async function inspectStandardWorktreeCollisionOwnership2(identity){return(await Promise.resolve().then(() => (init_worktree_collision_ownership(),exports_worktree_collision_ownership))).inspectStandardWorktreeCollisionOwnership(identity)}async function runRecoveryGit(directory,args2,timeoutMs=15000){let proc;try{proc=_internals96.bunSpawn([_internals96.resolveGitExecutable(),"-C",directory,...args2],{stdin:"ignore",stdout:"pipe",stderr:"pipe",timeout:timeoutMs,env:{...process.env,LC_ALL:"C"}});let exitCode=await proc.exited,stdout=await proc.stdout.text(),stderr=await proc.stderr.text();return{exitCode,stdout,stderr}}catch(error93){return{exitCode:1,stdout:"",stderr:error93 instanceof Error?error93.message:String(error93)}}finally{try{proc?.kill()}catch{}}}async function pathExists3(targetPath){try{return await fs70.stat(targetPath),!0}catch{return!1}}async function buildWorktreeRecoveryPublishIdentity(input){let mergeBase=await runRecoveryGit(input.directory,["merge-base",input.provenance.targetHeadBefore,input.provenance.sourceHead]),mergeBaseOid=mergeBase.stdout.trim();if(mergeBase.exitCode!==0||!/^[0-9a-f]{40}$|^[0-9a-f]{64}$/.test(mergeBaseOid))return;let targetHead=await runRecoveryGit(input.directory,["rev-parse","HEAD"]),targetHeadOid=targetHead.stdout.trim();if(targetHead.exitCode!==0||!/^[0-9a-f]{40}$|^[0-9a-f]{64}$/.test(targetHeadOid))return;return{originalCallID:input.dispatch.callID,parentSessionId:input.dispatch.parentSessionID,taskId:input.taskId,reservationId:input.dispatch.reservationId??`worktree:${input.dispatch.parentSessionID}:${input.taskId}`,generation:input.dispatch.generation??1,canonicalBranch:input.dispatch.canonicalBranch??input.dispatch.handle.branchName,canonicalPath:input.dispatch.canonicalPath??input.dispatch.handle.worktreePath,laneBranch:input.dispatch.handle.branchName,lanePath:input.dispatch.handle.worktreePath,expectedPrimaryHead:input.provenance.targetHeadBefore,sourceBaseOid:mergeBaseOid,sourceHeadOid:input.provenance.sourceHead,targetHeadOid,strategy:toRecoveryStrategy(input.provenance.strategy),...input.conflictFiles&&input.conflictFiles.length>0?{declaredConflictFiles:input.conflictFiles}:{}}}async function publishRecoveryAuthorityForSettlement(input){if(input.dispatch.recoveryClaim||!input.provenance)return{ok:!0};let identity=await _internals96.buildWorktreeRecoveryPublishIdentity({directory:input.directory,dispatch:input.dispatch,taskId:input.taskId,provenance:input.provenance,conflictFiles:input.conflictFiles});if(!identity)return{ok:!1,code:"identity_unavailable",reason:"worktree recovery publish identity could not be derived from the merge provenance"};let published=_internals96.publishWorktreeRecoveryAuthority(input.directory,identity);return published.ok?{ok:!0}:{ok:!1,code:published.code,reason:published.reason}}function isExactRecoveryClaimantStillActive(authority){let claim=authority.claim;if(!claim)return!1;if(standardWorktreeByCallID.has(claim.claimantCallID)||awaitingMergeByCallID.has(claim.claimantCallID))return!0;let childSession=swarmState.agentSessions.get(claim.childSessionId);if(!childSession?.workspaceDirectory?.trim())return!1;return sameProjectRoot(childSession.workspaceDirectory,authority.immutable.lanePath)}function describeRecoveryMutationFailure(input){return`recovery claim ${input.action} failed (${input.code}): ${input.reason}`}function maybeSelectRecoverableAuthority(lookup,collision){if(lookup.status!=="ok")return{status:"uncertain",reason:lookup.reason};let authority=lookup.authorities.find((candidate)=>candidate.status!=="finalized"&&candidate.immutable.laneBranch===collision.existingBranch&&candidate.immutable.lanePath===collision.worktreePath);return authority?{status:"match",authority}:{status:"none"}}async function precreateStandardWorktreeSession(args2){let configuredWorktree=resolveWorktreeIsolationConfig(args2.config),worktreeConfig=args2.isolationRequired&&configuredWorktree.policy==="auto"?{...configuredWorktree,policy:"required"}:configuredWorktree;if(worktreeConfig.policy==="disabled")return;if(standardWorktreeSerializationSessions.has(args2.parentSessionID)){if(checkStandardWorktreeSerializationRelease(args2.parentSessionID,worktreeConfig),!standardWorktreeSerializationSessions.has(args2.parentSessionID))return}if(!hasStandardWorktreeDispatchCapacity()){if(worktreeConfig.policy==="required")throw Error("STANDARD_WORKTREE_TRACKING_CAP_EXCEEDED: too many standard worktree coder dispatches are already awaiting merge-back.");serializeStandardWorktreeDispatches(args2.parentSessionID,"STANDARD_WORKTREE_TRACKING_CAP_EXCEEDED: too many standard worktree coder dispatches are already awaiting merge-back.");return}let client=swarmState.opencodeClient;if(!client){handleStandardWorktreeFailure(args2.parentSessionID,worktreeConfig.policy,"STANDARD_WORKTREE_ISOLATION_UNAVAILABLE: OpenCode SDK client is unavailable; standard parallel coder work cannot be isolated.");return}let laneIndex=allocateStandardLaneIndex(args2.parentSessionID),provisioningOwnerIdentity={reservationId:args2.reservationId??`foreground:${args2.parentSessionID}:${resolveRecoveryTaskId(args2)}:${args2.callID}`,generation:Math.max(1,args2.generation??1),branchName:makeWorktreeBranchName(args2.parentSessionID,args2.taskId,{purpose:"lane"})},recoveryLaunch,lifecycleLockWaitMs=resolveWorktreeLifecycleLockWaitMs(resolveSessionCreateTimeoutMs(args2)),lifecycleLock=await acquireWorktreeLifecycleLockWithin(args2.directory,args2.taskId,lifecycleLockWaitMs);if(!lifecycleLock.acquired)hardStopStandardWorktreeLifecycle(args2.parentSessionID,`STANDARD_WORKTREE_LIFECYCLE_BUSY: the worktree lifecycle lock stayed busy for ${Math.round(lifecycleLockWaitMs/1000)}s (another lane is provisioning or init orphan recovery is running); retry this coder dispatch. `+"The wait follows worktree.session_create_timeout_ms: that budget plus 5s, at least 10s, and — up to the default 30s budget — short enough that this dispatch (its own session create and worktree provisioning included) still fits the 60s host hook budget.");try{let collision=await _internals96.preProvisionCollisionCheck(args2.taskId,args2.directory,args2.parentSessionID);if(collision.uncertainty)hardStopStandardWorktreeLifecycle(args2.parentSessionID,`STANDARD_WORKTREE_COLLISION_SCAN_UNCERTAIN: ${collision.uncertainty}. Destructive cleanup and provisioning were blocked.`);if(collision.collision){if(!collision.existingBranch||!collision.worktreePath||!isLaneOwnedByCurrentSession(collision.existingBranch,args2.parentSessionID)){let ownerInfo=collision.ownerSessionId?` owned by session ${collision.ownerSessionId}`:" with uncertain ownership";hardStopStandardWorktreeLifecycle(args2.parentSessionID,`PREPROVISION_COLLISION: task ${args2.taskId} already has a lane on branch ${collision.existingBranch??"unknown"}${ownerInfo}; cleanup and provisioning were blocked.`)}for(let dispatch of _internals96.standardWorktreeByCallID.values())if(dispatch.handle.branchName===collision.existingBranch)hardStopStandardWorktreeLifecycle(args2.parentSessionID,`PREPROVISION_COLLISION_ACTIVE: branch ${collision.existingBranch} is still tracked by an active standard-worktree dispatch.`);for(let record3 of _internals96.awaitingMergeByCallID.values())if(record3.branch===collision.existingBranch)hardStopStandardWorktreeLifecycle(args2.parentSessionID,`PREPROVISION_COLLISION_AWAITING_MERGE: branch ${collision.existingBranch} is still awaiting merge-back.`);let recoveryCandidate=maybeSelectRecoverableAuthority(_internals96.lookupWorktreeRecoveryAuthoritiesByTask(args2.directory,{parentSessionId:args2.parentSessionID,taskId:resolveRecoveryTaskId(args2)}),collision);if(recoveryCandidate.status==="uncertain")hardStopStandardWorktreeLifecycle(args2.parentSessionID,`STANDARD_WORKTREE_RECOVERY_AUTHORITY_UNCERTAIN: ${recoveryCandidate.reason}. Recovery re-dispatch was blocked.`);if(recoveryCandidate.status==="match"){let recoveredChildSessionId="",claimed;try{claimed=await _internals96.claimWorktreeRecoveryAuthority(args2.directory,{authorityDigest:recoveryCandidate.authority.authorityDigest,claimantCallID:args2.callID,claimantSessionId:args2.parentSessionID,leaseMs:WORKTREE_RECOVERY_CLAIM_LEASE_MS,createChildSession:async()=>{let createResult=await createSessionWithinBudget(client.session.create({body:{parentID:args2.parentSessionID,title:`${args2.description??args2.taskId} (worktree recovery lane)`},query:{directory:collision.worktreePath}}),"STANDARD_WORKTREE_RECOVERY_SESSION_CREATE",async(result)=>{let lateChildSessionId=result.data?.id;if(lateChildSessionId){let verification=await teardownEphemeralSessionVerified(client.session,lateChildSessionId);if(!verification.ok)pushAdvisory(ensureAgentSession(args2.parentSessionID),`WORKTREE_RECOVERY_CHILD_SESSION_LEAKED: recovery child session ${lateChildSessionId} was not confirmed deleted by verified teardown (${verification.reason}); it holds the lane swarm.db at ${collision.worktreePath}. Retry the dispatch or restart the host to release it.`)}},resolveSessionCreateTimeoutMs(args2));if(recoveredChildSessionId=createResult.data?.id??"",!recoveredChildSessionId){let createError=createResult.error;throw Error(typeof createError==="string"?createError:JSON.stringify(createError??"missing session id"))}return recoveredChildSessionId},revalidateExpiredClaim:async({authority})=>{if(isExactRecoveryClaimantStillActive(authority))return{ok:!1,reason:"expired recovery claim still belongs to a live claimant session or dispatch"};if(authority.immutable.laneBranch!==collision.existingBranch||authority.immutable.lanePath!==collision.worktreePath)return{ok:!1,reason:"preserved lane coordinates drifted before claim transfer"};try{await fs70.stat(authority.immutable.lanePath)}catch{return{ok:!1,reason:"preserved lane path is no longer live"}}let laneHead=await runRecoveryGit(args2.directory,["rev-parse",`${authority.immutable.laneBranch}^{commit}`]);if(laneHead.exitCode!==0||laneHead.stdout.trim()!==authority.immutable.sourceHeadOid)return{ok:!1,reason:"preserved lane head changed since authority publication"};return{ok:!0}}})}catch(error93){if(_internals96.replayWorktreeRecoveryClaimJournal(args2.directory),recoveredChildSessionId){let verification=await teardownEphemeralSessionVerified(client.session,recoveredChildSessionId);if(!verification.ok)pushAdvisory(ensureAgentSession(args2.parentSessionID),`WORKTREE_RECOVERY_CHILD_SESSION_LEAKED: recovery child session ${recoveredChildSessionId} was not confirmed deleted by verified teardown (${verification.reason}); it holds the lane swarm.db at ${collision.worktreePath}. Retry the dispatch or restart the host to release it.`)}hardStopStandardWorktreeLifecycle(args2.parentSessionID,`STANDARD_WORKTREE_RECOVERY_SESSION_CREATE_FAILED: ${error93 instanceof Error?error93.message:String(error93)}. The PREPARED claim was rolled back and recovery re-dispatch was blocked.`)}if(!claimed.ok)hardStopStandardWorktreeLifecycle(args2.parentSessionID,`STANDARD_WORKTREE_RECOVERY_CLAIM_FAILED: ${claimed.reason}. The recovery child session ${recoveredChildSessionId} was created but the preserved lane was not reassigned.`);recoveryLaunch={childSessionId:recoveredChildSessionId,worktreePath:collision.worktreePath,branchName:collision.existingBranch,strategy:recoveryCandidate.authority.immutable.strategy,reservationId:recoveryCandidate.authority.immutable.reservationId,generation:recoveryCandidate.authority.immutable.generation,provisioningOwner:{reservationId:recoveryCandidate.authority.immutable.reservationId,generation:recoveryCandidate.authority.immutable.generation,branchName:collision.existingBranch},canonicalBranch:recoveryCandidate.authority.immutable.canonicalBranch,canonicalPath:recoveryCandidate.authority.immutable.canonicalPath,recoveryClaim:{authorityDigest:recoveryCandidate.authority.authorityDigest,claimRevision:claimed.authority.claim?.claimRevision??recoveryCandidate.authority.claimCursor?.lastClaimRevision??1,rawToken:claimed.rawToken,coordinates:{sourceBaseOid:recoveryCandidate.authority.immutable.sourceBaseOid,sourceHeadOid:recoveryCandidate.authority.immutable.sourceHeadOid,targetHeadOid:recoveryCandidate.authority.immutable.targetHeadOid,strategy:recoveryCandidate.authority.immutable.strategy}}}}if(!recoveryLaunch){let ownership=await _internals96.inspectStandardWorktreeCollisionOwnership({directory:args2.directory,parentSessionId:args2.parentSessionID,taskId:args2.taskId,branchName:collision.existingBranch,worktreePath:collision.worktreePath});if(ownership.status==="uncertain")hardStopStandardWorktreeLifecycle(args2.parentSessionID,`STANDARD_WORKTREE_OWNERSHIP_UNCERTAIN: ${ownership.reason}. Destructive cleanup and provisioning were blocked.`);if(ownership.status==="protected")hardStopStandardWorktreeLifecycle(args2.parentSessionID,`STANDARD_WORKTREE_OWNER_PROTECTED: ${ownership.ownerKind} owner is ${ownership.lifecycle}; ${ownership.reason}. Destructive cleanup and provisioning were blocked.`);let collisionPathExists=!0;try{await fs70.stat(collision.worktreePath)}catch(error93){let code=error93.code;if(code==="ENOENT"||code==="ENOTDIR")collisionPathExists=!1;else hardStopStandardWorktreeLifecycle(args2.parentSessionID,`STANDARD_WORKTREE_COLLISION_PATH_STAT_FAILED: ${error93 instanceof Error?error93.message:String(error93)}. Destructive cleanup and provisioning were blocked.`)}if(collisionPathExists){let preserveResult=await _internals96.preserveDirtyWorktreeAtPath(collision.worktreePath,collision.existingBranch,"denied",args2.directory,worktreeConfig.worktree_dir);if(preserveResult.outcome==="preserve-failed")hardStopStandardWorktreeLifecycle(args2.parentSessionID,`STANDARD_WORKTREE_PRESERVATION_FAILED_ABORT_CLEANUP: pre-provision collision for task ${args2.taskId} could not be preserved (${preserveResult.error}). Cleanup and provisioning were blocked.`);closeProjectDb(collision.worktreePath);let removeResult=await _internals96.removeWorktree(collision.worktreePath,args2.directory,{force:!0,worktreeDir:worktreeConfig.worktree_dir});if("error"in removeResult)hardStopStandardWorktreeLifecycle(args2.parentSessionID,`STANDARD_WORKTREE_COLLISION_REMOVE_FAILED: ${removeResult.error}. Provisioning was blocked.`);let cleanupResult=await _internals96.postMergeCleanup(args2.directory,collision.existingBranch);if("error"in cleanupResult)hardStopStandardWorktreeLifecycle(args2.parentSessionID,`STANDARD_WORKTREE_COLLISION_BRANCH_CLEANUP_FAILED: ${cleanupResult.error}. Provisioning was blocked.`)}else{let pruneResult=await _internals96.pruneStaleWorktreeMetadata(args2.directory);if("error"in pruneResult)hardStopStandardWorktreeLifecycle(args2.parentSessionID,`STANDARD_WORKTREE_COLLISION_PRUNE_FAILED: ${pruneResult.error}. Provisioning was blocked without deleting the lane branch.`)}let verification=await _internals96.preProvisionCollisionCheck(args2.taskId,args2.directory,args2.parentSessionID);if(verification.uncertainty||verification.collision)hardStopStandardWorktreeLifecycle(args2.parentSessionID,`STANDARD_WORKTREE_COLLISION_CLEANUP_UNVERIFIED: ${verification.uncertainty??"git still reports the colliding lane after cleanup"}. Provisioning was blocked.`)}}_internals96.recordWorktreeProvisioningOwner(args2.directory,{callID:args2.callID,parentSessionId:args2.parentSessionID,worktreeSessionId:args2.parentSessionID,taskId:args2.taskId,...provisioningOwnerIdentity})}catch(error93){if(error93 instanceof StandardWorktreeLifecycleError)throw error93;hardStopStandardWorktreeLifecycle(args2.parentSessionID,`STANDARD_WORKTREE_OWNER_PERSIST_FAILED: ${error93 instanceof Error?error93.message:String(error93)}.`)}finally{try{await lifecycleLock.lock._release?.()}catch{}}let childSessionId="",handle,mergeStrategy,reservationId,generation,canonicalBranch,canonicalPath,recoveryClaim;if(recoveryLaunch)childSessionId=recoveryLaunch.childSessionId,handle={worktreePath:recoveryLaunch.worktreePath,branchName:recoveryLaunch.branchName,purpose:"lane",id:sanitizeWorktreeTaskId(args2.taskId),sessionId:args2.parentSessionID},mergeStrategy=recoveryLaunch.strategy,reservationId=recoveryLaunch.reservationId,generation=recoveryLaunch.generation,provisioningOwnerIdentity=recoveryLaunch.provisioningOwner,canonicalBranch=recoveryLaunch.canonicalBranch,canonicalPath=recoveryLaunch.canonicalPath,recoveryClaim=recoveryLaunch.recoveryClaim;else{reservationId=args2.reservationId??`foreground:${args2.parentSessionID}:${resolveRecoveryTaskId(args2)}:${args2.callID}`,generation=provisioningOwnerIdentity.generation,canonicalPath=args2.directory;let provisionResult;try{provisionResult=await _internals96.provisionWorktree(args2.directory,args2.taskId,args2.parentSessionID,{purpose:"lane",worktreeDir:worktreeConfig.worktree_dir,mergeStrategy:worktreeConfig.merge_strategy,depsStrategy:worktreeConfig.deps_strategy,scope:args2.scope})}catch(error93){throw _internals96.removeWorktreeProvisioningOwner(args2.directory,args2.callID,provisioningOwnerIdentity),error93}if("error"in provisionResult){_internals96.removeWorktreeProvisioningOwner(args2.directory,args2.callID,provisioningOwnerIdentity);let message=`STANDARD_WORKTREE_PROVISION_FAILED: ${provisionResult.error}.`;handleStandardWorktreeFailure(args2.parentSessionID,worktreeConfig.policy,message);return}handle=provisionResult,mergeStrategy=worktreeConfig.merge_strategy,recordLiveLaneOwner(args2.directory,{lanePath:handle.worktreePath,branchName:handle.branchName,sessionId:args2.parentSessionID,taskId:args2.taskId})}let originalPrompt=typeof args2.outputArgs.prompt==="string"?args2.outputArgs.prompt:"";args2.outputArgs.prompt=["<worktree_lane_context>",`authoritative_lane_root: ${JSON.stringify(handle.worktreePath)}`,"All FILE declarations and scope-bound edit/write paths must be workspace-relative to authoritative_lane_root.","Remain in authoritative_lane_root: do not change directory into, or edit/write through, the primary checkout or any other worktree.","Example: FILE: src/example.ts means <authoritative_lane_root>/src/example.ts, never <primary-checkout>/src/example.ts.","Do not declare project-root absolute paths; resolve and operate inside this lane root.","</worktree_lane_context>","",originalPrompt].join(`
|
|
1272
|
+
`);let laneProfile=computeLaneRuntimeProfile(worktreeConfig.runtime_isolation,laneIndex,handle.worktreePath);if(laneProfile)try{let{writeLaneProfileToDiskReal:writeLaneProfileToDiskReal2}=await Promise.resolve().then(() => (init_core3(),exports_core3));await writeLaneProfileToDiskReal2(handle.worktreePath,laneProfile.laneIndex,laneProfile.envOverrides)}catch{}if((worktreeConfig.deps_strategy??"skip")==="skip"){let desc=(args2.description??args2.taskId??"").toLowerCase();if(/\btests?\b/.test(desc)||/\bbuild(ing|s)?\b/.test(desc)||/\blint(ing|er)?\b/.test(desc)||/\bchecks?\b/.test(desc)){let session=ensureAgentSession(args2.parentSessionID);pushAdvisory(session,`WORKTREE_DEPS_SKIP: task ${args2.taskId} was provisioned with deps_strategy: 'skip' (default). This task's gates appear to include test/build commands; the lane may lack node_modules. Set worktree.deps_strategy to 'copy' or 'link' (or use a non-worktree lane) if the task requires host dependencies.`)}}if(!recoveryLaunch){let createResult;try{createResult=await createSessionWithinBudget(client.session.create({body:{parentID:args2.parentSessionID,title:`${args2.description??args2.taskId} (worktree lane)`},query:{directory:handle.worktreePath}}),"STANDARD_WORKTREE_SESSION_CREATE",async(result)=>{let lateChildSessionId=result.data?.id;if(lateChildSessionId){let verification=await teardownEphemeralSessionVerified(client.session,lateChildSessionId);if(!verification.ok)await handleStrandedLane({directory:args2.directory,parentSessionID:args2.parentSessionID,lanePath:handle.worktreePath,branchName:handle.branchName,taskId:args2.taskId,reason:`late child session ${lateChildSessionId} was not confirmed deleted by verified teardown (${verification.reason})`})}},resolveSessionCreateTimeoutMs(args2))}catch(error93){closeProjectDb(handle.worktreePath);let removal=await _internals96.removeWorktree(handle.worktreePath,args2.directory,{force:!0,worktreeDir:worktreeConfig.worktree_dir}).catch((cleanupError)=>({error:cleanupError instanceof Error?cleanupError.message:String(cleanupError)})),removalError=typeof removal==="object"&&removal!==null&&"error"in removal&&typeof removal.error==="string"?removal.error:void 0;if(removalError)log(`[worktree-isolation] session-create failure cleanup could not remove lane ${handle.worktreePath}: ${removalError}`),await handleStrandedLane({directory:args2.directory,parentSessionID:args2.parentSessionID,lanePath:handle.worktreePath,branchName:handle.branchName,taskId:args2.taskId,reason:removalError});_internals96.removeWorktreeProvisioningOwner(args2.directory,args2.callID,provisioningOwnerIdentity);let message=`STANDARD_WORKTREE_SESSION_CREATE_FAILED: ${error93 instanceof Error?error93.message:String(error93)}.`;handleStandardWorktreeFailure(args2.parentSessionID,worktreeConfig.policy,message);return}if(!createResult?.data?.id){closeProjectDb(handle.worktreePath);let removal=await _internals96.removeWorktree(handle.worktreePath,args2.directory,{force:!0,worktreeDir:worktreeConfig.worktree_dir}).catch((cleanupError)=>({error:cleanupError instanceof Error?cleanupError.message:String(cleanupError)})),removalError=typeof removal==="object"&&removal!==null&&"error"in removal&&typeof removal.error==="string"?removal.error:void 0;if(removalError)log(`[worktree-isolation] session-create failure cleanup could not remove lane ${handle.worktreePath}: ${removalError}`),await handleStrandedLane({directory:args2.directory,parentSessionID:args2.parentSessionID,lanePath:handle.worktreePath,branchName:handle.branchName,taskId:args2.taskId,reason:removalError});_internals96.removeWorktreeProvisioningOwner(args2.directory,args2.callID,provisioningOwnerIdentity);let createError=createResult.error,message=`STANDARD_WORKTREE_SESSION_CREATE_FAILED: ${typeof createError==="string"?createError:JSON.stringify(createError??"missing session id")}.`;handleStandardWorktreeFailure(args2.parentSessionID,worktreeConfig.policy,message);return}childSessionId=createResult.data.id}if(!childSessionId)throw Error("STANDARD_WORKTREE_SESSION_CREATE_FAILED: missing child session id.");args2.outputArgs.task_id=childSessionId,recordLaneChildSession(childSessionId,"coder"),ensureAgentSession(childSessionId,"coder",handle.worktreePath),recordSessionWorkspaceRoot(childSessionId,handle.worktreePath),rememberStandardWorktreeDispatch({callID:args2.callID,parentSessionID:args2.parentSessionID,taskId:args2.taskId,planTaskId:args2.planTaskId,reservationId,generation,provisioningOwner:provisioningOwnerIdentity,canonicalBranch,canonicalPath,handle,mergeStrategy,recoveryClaim,laneIndex,worktree_dir:worktreeConfig.worktree_dir})}async function preserveBackgroundWorktreeOwnershipForCallId(callID){let dispatch=standardWorktreeByCallID.get(callID);if(!dispatch)return{outcome:"not-found"};let refProc;try{refProc=_internals96.bunSpawn([_internals96.resolveGitExecutable(),"-C",dispatch.handle.worktreePath,"rev-parse","HEAD"],{stdin:"ignore",stdout:"pipe",stderr:"pipe",timeout:PRESERVE_COMMIT_TIMEOUT_MS})}catch(error93){return{outcome:"preserve-failed",error:`git rev-parse could not start: ${error93 instanceof Error?error93.message:String(error93)}`}}let ref="";try{let exitCode=await refProc.exited;if(exitCode!==0)return{outcome:"preserve-failed",error:await refProc.stderr.text()||`git rev-parse exited ${exitCode}`};ref=(await refProc.stdout.text()).trim()}finally{try{refProc.kill()}catch{}}if(!ref)return{outcome:"preserve-failed",error:"git rev-parse returned empty"};let session=Buffer.from(dispatch.handle.sessionId,"utf8").toString("base64url"),lane=Buffer.from(dispatch.handle.id,"utf8").toString("base64url"),callDigest=createHash51("sha256").update(callID).digest("hex").slice(0,12),tag=`swarm-preserved-owner/${session}/${lane}/${callDigest}`,tagProc;try{tagProc=_internals96.bunSpawn([_internals96.resolveGitExecutable(),"-C",dispatch.handle.worktreePath,"tag",tag,ref],{stdin:"ignore",stdout:"pipe",stderr:"pipe",timeout:PRESERVE_COMMIT_TIMEOUT_MS})}catch(error93){return{outcome:"preserve-failed",error:`git tag could not start: ${error93 instanceof Error?error93.message:String(error93)}`}}try{let exitCode=await tagProc.exited;if(exitCode!==0)return{outcome:"preserve-failed",error:await tagProc.stderr.text()||`git tag exited ${exitCode}`}}finally{try{tagProc.kill()}catch{}}return{outcome:"preserved",tag,ref}}async function preserveDirtyWorktreeForCallId(callID,reason,_directory2,_worktree_dir){let dispatch=standardWorktreeByCallID.get(callID),worktreePath,parentSessionID;if(dispatch)worktreePath=dispatch.handle.worktreePath,parentSessionID=dispatch.parentSessionID;else{let awaiting=awaitingMergeByCallID.get(callID);if(!awaiting)return{outcome:"clean",preserved:!1};worktreePath=awaiting.worktreePath,parentSessionID=awaiting.parentSessionID}let statusProc;try{statusProc=_internals96.bunSpawn([_internals96.resolveGitExecutable(),"-C",worktreePath,"status","--porcelain"],{stdin:"ignore",stdout:"pipe",stderr:"pipe",timeout:PRESERVE_COMMIT_TIMEOUT_MS})}catch(error93){return{outcome:"preserve-failed",preserved:!1,error:`git status could not start: ${error93 instanceof Error?error93.message:String(error93)}`}}let statusStdout="",statusStderr="";try{let exitCode=await statusProc.exited;if(statusStdout=await statusProc.stdout.text(),statusStderr=await statusProc.stderr.text(),exitCode!==0)return log(`[swarm] preserveDirtyWorktreeForCallId: git status failed for ${callID}: ${statusStderr}`),{outcome:"preserve-failed",preserved:!1,error:`git status failed: ${statusStderr||`exit ${exitCode}`}`}}finally{try{statusProc.kill()}catch{}}if(statusStdout.trim()==="")return{outcome:"clean",preserved:!1};let addProc;try{addProc=_internals96.bunSpawn([_internals96.resolveGitExecutable(),"-C",worktreePath,"add","-A"],{stdin:"ignore",stdout:"pipe",stderr:"pipe",timeout:PRESERVE_COMMIT_TIMEOUT_MS})}catch(error93){return{outcome:"preserve-failed",preserved:!1,error:`git add could not start: ${error93 instanceof Error?error93.message:String(error93)}`}}try{let addExit=await addProc.exited;if(addExit!==0){let addErr=await addProc.stderr.text();return log(`[swarm] preserveDirtyWorktreeForCallId: git add failed for ${callID}: ${addErr}`),{outcome:"preserve-failed",preserved:!1,error:`git add failed: ${addErr||`exit ${addExit}`}`}}}finally{try{addProc.kill()}catch{}}let isoDate=new Date().toISOString(),sanitizedCallID=callID.replace(/[^A-Za-z0-9._-]/g,"-").slice(0,64),commitMessage=`swarm-preserved: ${reason} for callID ${sanitizedCallID} at ${isoDate}`,commitProc;try{commitProc=_internals96.bunSpawn([_internals96.resolveGitExecutable(),"-C",worktreePath,"commit","-m",commitMessage],{stdin:"ignore",stdout:"pipe",stderr:"pipe",timeout:PRESERVE_COMMIT_TIMEOUT_MS})}catch(error93){return{outcome:"preserve-failed",preserved:!1,error:`git commit could not start: ${error93 instanceof Error?error93.message:String(error93)}`}}let commitHash="";try{let commitExit=await commitProc.exited;if(commitExit!==0){let commitErr=await commitProc.stderr.text();return log(`[swarm] preserveDirtyWorktreeForCallId: git commit failed for ${callID}: ${commitErr}`),{outcome:"preserve-failed",preserved:!1,error:`git commit failed: ${commitErr||`exit ${commitExit}`}`}}}finally{try{commitProc.kill()}catch{}}let hashProc;try{hashProc=_internals96.bunSpawn([_internals96.resolveGitExecutable(),"-C",worktreePath,"rev-parse","HEAD"],{stdin:"ignore",stdout:"pipe",stderr:"pipe",timeout:PRESERVE_COMMIT_TIMEOUT_MS})}catch(error93){return{outcome:"preserve-failed",preserved:!1,error:`git rev-parse could not start: ${error93 instanceof Error?error93.message:String(error93)}`}}try{let hashExit=await hashProc.exited;if(hashExit!==0){let hashErr=await hashProc.stderr.text();return log(`[swarm] preserveDirtyWorktreeForCallId: git rev-parse failed for ${callID}: ${hashErr}`),{outcome:"preserve-failed",preserved:!1,error:`git rev-parse failed: ${hashErr||`exit ${hashExit}`}`}}commitHash=(await hashProc.stdout.text()).trim()}finally{try{hashProc.kill()}catch{}}if(!commitHash)return{outcome:"preserve-failed",preserved:!1,error:"git rev-parse returned empty hash"};let shortHash=commitHash.slice(0,8),tagName=`swarm-preserved-${sanitizedCallID}-${shortHash}`,tagProc;try{tagProc=_internals96.bunSpawn([_internals96.resolveGitExecutable(),"-C",worktreePath,"tag",tagName],{stdin:"ignore",stdout:"pipe",stderr:"pipe",timeout:PRESERVE_COMMIT_TIMEOUT_MS})}catch(error93){return{outcome:"preserve-failed",preserved:!1,error:`git tag could not start: ${error93 instanceof Error?error93.message:String(error93)}`}}try{let tagExit=await tagProc.exited;if(tagExit!==0){let tagErr=await tagProc.stderr.text();return log(`[swarm] preserveDirtyWorktreeForCallId: git tag failed for ${callID}: ${tagErr}`),{outcome:"preserve-failed",preserved:!1,error:`git tag failed: ${tagErr||`exit ${tagExit}`}`}}}finally{try{tagProc.kill()}catch{}}let session=ensureAgentSession(parentSessionID);return pushAdvisory(session,`STANDARD_WORKTREE_PRESERVED: dispatch ${callID} dirty work preserved as commit ${commitHash} (tag: ${tagName}; reason: ${reason}); worktree will be cleaned.`),{outcome:"preserved",preserved:!0,ref:commitHash}}async function preserveDirtyWorktreeAtPath(worktreePath,branchName,reason,_directory2,_worktree_dir){let statusProc;try{statusProc=_internals96.bunSpawn([_internals96.resolveGitExecutable(),"-C",worktreePath,"status","--porcelain"],{stdin:"ignore",stdout:"pipe",stderr:"pipe",timeout:PRESERVE_COMMIT_TIMEOUT_MS})}catch(error93){return{outcome:"preserve-failed",preserved:!1,error:`git status could not start: ${error93 instanceof Error?error93.message:String(error93)}`}}let statusStdout="",statusStderr="";try{let exitCode=await statusProc.exited;if(statusStdout=await statusProc.stdout.text(),statusStderr=await statusProc.stderr.text(),exitCode!==0)return log(`[swarm] preserveDirtyWorktreeAtPath: git status failed for ${worktreePath}: ${statusStderr}`),{outcome:"preserve-failed",preserved:!1,error:`git status failed: ${statusStderr||`exit ${exitCode}`}`}}finally{try{statusProc.kill()}catch{}}if(statusStdout.trim()==="")return{outcome:"clean",preserved:!1};let addProc;try{addProc=_internals96.bunSpawn([_internals96.resolveGitExecutable(),"-C",worktreePath,"add","-A"],{stdin:"ignore",stdout:"pipe",stderr:"pipe",timeout:PRESERVE_COMMIT_TIMEOUT_MS})}catch(error93){return{outcome:"preserve-failed",preserved:!1,error:`git add could not start: ${error93 instanceof Error?error93.message:String(error93)}`}}try{let addExit=await addProc.exited;if(addExit!==0){let addErr=await addProc.stderr.text();return log(`[swarm] preserveDirtyWorktreeAtPath: git add failed for ${worktreePath}: ${addErr}`),{outcome:"preserve-failed",preserved:!1,error:`git add failed: ${addErr||`exit ${addExit}`}`}}}finally{try{addProc.kill()}catch{}}let isoDate=new Date().toISOString(),sanitizedPath=worktreePath.replace(/[^A-Za-z0-9._-]/g,"-").slice(0,64),sanitizedBranch=branchName.replace(/[^A-Za-z0-9._-]/g,"-").slice(0,64),commitMessage=`swarm-preserved: ${reason} for worktree ${sanitizedPath} at ${isoDate}`,commitProc;try{commitProc=_internals96.bunSpawn([_internals96.resolveGitExecutable(),"-C",worktreePath,"commit","-m",commitMessage],{stdin:"ignore",stdout:"pipe",stderr:"pipe",timeout:PRESERVE_COMMIT_TIMEOUT_MS})}catch(error93){return{outcome:"preserve-failed",preserved:!1,error:`git commit could not start: ${error93 instanceof Error?error93.message:String(error93)}`}}let commitHash="";try{let commitExit=await commitProc.exited;if(commitExit!==0){let commitErr=await commitProc.stderr.text();return log(`[swarm] preserveDirtyWorktreeAtPath: git commit failed for ${worktreePath}: ${commitErr}`),{outcome:"preserve-failed",preserved:!1,error:`git commit failed: ${commitErr||`exit ${commitExit}`}`}}}finally{try{commitProc.kill()}catch{}}let hashProc;try{hashProc=_internals96.bunSpawn([_internals96.resolveGitExecutable(),"-C",worktreePath,"rev-parse","HEAD"],{stdin:"ignore",stdout:"pipe",stderr:"pipe",timeout:PRESERVE_COMMIT_TIMEOUT_MS})}catch(error93){return{outcome:"preserve-failed",preserved:!1,error:`git rev-parse could not start: ${error93 instanceof Error?error93.message:String(error93)}`}}try{let hashExit=await hashProc.exited;if(hashExit!==0){let hashErr=await hashProc.stderr.text();return log(`[swarm] preserveDirtyWorktreeAtPath: git rev-parse failed for ${worktreePath}: ${hashErr}`),{outcome:"preserve-failed",preserved:!1,error:`git rev-parse failed: ${hashErr||`exit ${hashExit}`}`}}commitHash=(await hashProc.stdout.text()).trim()}finally{try{hashProc.kill()}catch{}}if(!commitHash)return{outcome:"preserve-failed",preserved:!1,error:"git rev-parse returned empty hash"};let shortHash=commitHash.slice(0,8),tagName=`swarm-preserved-worktree-${sanitizedBranch}-${shortHash}`,tagProc;try{tagProc=_internals96.bunSpawn([_internals96.resolveGitExecutable(),"-C",worktreePath,"tag",tagName],{stdin:"ignore",stdout:"pipe",stderr:"pipe",timeout:PRESERVE_COMMIT_TIMEOUT_MS})}catch(error93){return{outcome:"preserve-failed",preserved:!1,error:`git tag could not start: ${error93 instanceof Error?error93.message:String(error93)}`}}try{let tagExit=await tagProc.exited;if(tagExit!==0){let tagErr=await tagProc.stderr.text();return log(`[swarm] preserveDirtyWorktreeAtPath: git tag failed for ${worktreePath}: ${tagErr}`),{outcome:"preserve-failed",preserved:!1,error:`git tag failed: ${tagErr||`exit ${tagExit}`}`}}}finally{try{tagProc.kill()}catch{}}return{outcome:"preserved",preserved:!0,ref:commitHash}}async function cleanupStandardWorktreeForCallId(callID,reason,directory,worktree_dir,options){let dispatch=standardWorktreeByCallID.get(callID),worktreePath,branchName,parentSessionID;if(dispatch)worktreePath=dispatch.handle.worktreePath,branchName=dispatch.handle.branchName,parentSessionID=dispatch.parentSessionID;else{let awaiting=awaitingMergeByCallID.get(callID);if(!awaiting)return{removedWorktree:!1,cleanedBranch:!1,preservedRecoveryLane:!1};worktreePath=awaiting.worktreePath,branchName=awaiting.branch,parentSessionID=awaiting.parentSessionID}if(dispatch?.recoveryClaim&&(reason==="denied"||reason==="cancelled")){let renewResult=_internals96.renewWorktreeRecoveryClaim(directory,{authorityDigest:dispatch.recoveryClaim.authorityDigest,claimantCallID:callID,claimRevision:dispatch.recoveryClaim.claimRevision,rawToken:dispatch.recoveryClaim.rawToken,leaseMs:WORKTREE_RECOVERY_CLAIM_LEASE_MS});if(!renewResult.ok){let message=`STANDARD_WORKTREE_RECOVERY_ABORT_RELEASE_FAILED: dispatch ${callID} preserved lane ${worktreePath} (${branchName}) after ${reason}, but ${describeRecoveryMutationFailure({action:"renew",code:renewResult.code,reason:renewResult.reason})}. No tracking teardown was performed.`,session3=ensureAgentSession(parentSessionID);throw pushAdvisory(session3,message),Error(message)}let releaseResult=_internals96.releaseWorktreeRecoveryClaim(directory,{authorityDigest:dispatch.recoveryClaim.authorityDigest,claimantCallID:callID,claimRevision:dispatch.recoveryClaim.claimRevision,rawToken:dispatch.recoveryClaim.rawToken});if(!releaseResult.ok){let message=`STANDARD_WORKTREE_RECOVERY_ABORT_RELEASE_FAILED: dispatch ${callID} preserved lane ${worktreePath} (${branchName}) after ${reason}, but ${describeRecoveryMutationFailure({action:"release",code:releaseResult.code,reason:releaseResult.reason})}. No tracking teardown was performed.`,session3=ensureAgentSession(parentSessionID);throw pushAdvisory(session3,message),Error(message)}standardWorktreeByCallID.delete(callID),awaitingMergeByCallID.delete(callID);let session2=ensureAgentSession(parentSessionID);return pushAdvisory(session2,`STANDARD_WORKTREE_RECOVERY_ABORT_PRESERVED: dispatch ${callID} released its recovery claim and preserved lane ${worktreePath} (${branchName}) after ${reason}.`),{removedWorktree:!1,cleanedBranch:!1,preservedRecoveryLane:!0}}let preserveResult;if(reason==="denied"||reason==="cancelled"){try{preserveResult=await _internals96.preserveDirtyWorktreeForCallId(callID,reason,directory,worktree_dir)}catch(err){log(`[swarm] cleanupStandardWorktreeForCallId: preserveDirtyWorktreeForCallId threw for ${callID}: ${err}`),preserveResult={outcome:"preserve-failed",preserved:!1,error:String(err)}}if(preserveResult.outcome==="clean")try{preserveResult=await _internals96.preserveDirtyWorktreeForCallId(callID,reason,directory,worktree_dir)}catch(err){log(`[swarm] cleanupStandardWorktreeForCallId: final preservation check threw for ${callID}: ${err}`),preserveResult={outcome:"preserve-failed",preserved:!1,error:String(err)}}}if(preserveResult&&preserveResult.outcome==="preserve-failed"){standardWorktreeByCallID.delete(callID),awaitingMergeByCallID.delete(callID);let session2=ensureAgentSession(parentSessionID);return pushAdvisory(session2,`STANDARD_WORKTREE_PRESERVATION_FAILED_ABORT_CLEANUP: dispatch ${callID} has dirty uncommitted work but preservation failed (${preserveResult.error}). Cleanup aborted to protect uncommitted work. Investigate and resolve manually. Worktree=${worktreePath}; branch=${branchName}.`),{removedWorktree:!1,cleanedBranch:!1,preservedRecoveryLane:!1}}let removedWorktree=!1;try{closeProjectDb(worktreePath);let result=await _internals96.removeWorktree(worktreePath,directory,{force:!0,worktreeDir:worktree_dir});if(!("error"in result))removedWorktree=!0;else if(!result.error.startsWith("CODER_SETTLEMENT_ARTIFACT_REMOVAL_REFUSED:")&&result.error.includes("is not a working tree")&&await pathExists3(worktreePath)&&isPathUnderSwarmWorktreeBase(worktreePath,directory,worktree_dir?[worktree_dir]:[]))try{await _internals96.withSettlementArtifactLifecycle(directory,async()=>{await _internals96.assertSettlementArtifactsRemovable(directory,{path:worktreePath,branch:branchName}),await fs70.rm(worktreePath,{recursive:!0,force:!0}),removedWorktree=!await pathExists3(worktreePath)})}catch(err){log(`[swarm] cleanupStandardWorktreeForCallId: residual directory cleanup failed for ${callID}: ${err}`)}}catch(err){log(`[swarm] cleanupStandardWorktreeForCallId: removeWorktree failed for ${callID}: ${err}`)}let cleanedBranch=!1;if(options?.retainBranch){let retainedSession=ensureAgentSession(parentSessionID);pushAdvisory(retainedSession,`STANDARD_WORKTREE_BRANCH_RETAINED: dispatch ${callID} removed worktree ${worktreePath} but retained branch ${branchName} as the recovery backup; the landed changes may be unstaged or committed.`)}else try{cleanedBranch=!("error"in await _internals96.postMergeCleanup(directory,branchName))}catch(err){log(`[swarm] cleanupStandardWorktreeForCallId: postMergeCleanup failed for ${callID}: ${err}`)}standardWorktreeByCallID.delete(callID),awaitingMergeByCallID.delete(callID);let session=ensureAgentSession(parentSessionID);return pushAdvisory(session,`STANDARD_WORKTREE_CLEANUP: dispatch ${callID} cleaned up (reason: ${reason}); worktree=${worktreePath}; branch=${branchName}.`),{removedWorktree,cleanedBranch,preservedRecoveryLane:!1}}async function abortStandardWorktreeDispatch(callID,reason,directory){let dispatch=standardWorktreeByCallID.get(callID);if(!dispatch){let session=ensureAgentSession("unknown");pushAdvisory(session,`STANDARD_WORKTREE_ABORT_NOOP: dispatch ${callID} has no tracked worktree to abort (reason: ${reason}).`);return}await cleanupStandardWorktreeForCallId(callID,reason,directory,dispatch.worktree_dir)}function runSerializedWithMergeBacks(task){let queued=standardWorktreeMergeQueue.then(task,task);return standardWorktreeMergeQueue=queued,queued}async function finishStandardWorktreeDispatch(directory,dispatch,config3,callID,settlement={}){let wtConfig=config3?resolveWorktreeIsolationConfig(config3):DEFAULT_WORKTREE_ISOLATION_CONFIG,resolvedCallID=callID??dispatch.callID,run=async()=>{let statusKey=dispatch.planTaskId??dispatch.taskId,failRecoverySettlement=(stage,message,provenance)=>{recordWorktreeMergeFailure(statusKey,{outcome:"failed",stage,message,worktreePath:dispatch.handle.worktreePath,branch:dispatch.handle.branchName,completedAt:Date.now()});let session=ensureAgentSession(dispatch.parentSessionID);return pushAdvisory(session,`STANDARD_WORKTREE_RECOVERY_MUTATION_FAILED: task ${dispatch.taskId} preserved at ${dispatch.handle.worktreePath}; ${message}.`),{outcome:"failed",stage,message,provenance}},renewRecoveryClaimLease=(phase,provenance)=>{if(!dispatch.recoveryClaim)return;let renewed=_internals96.renewWorktreeRecoveryClaim(directory,{authorityDigest:dispatch.recoveryClaim.authorityDigest,claimantCallID:resolvedCallID,claimRevision:dispatch.recoveryClaim.claimRevision,rawToken:dispatch.recoveryClaim.rawToken,leaseMs:WORKTREE_RECOVERY_CLAIM_LEASE_MS});if(renewed.ok)return;return failRecoverySettlement("recovery-claim-renew",`The live recovery lane could not extend its lease ${phase}; ${describeRecoveryMutationFailure({action:"renew",code:renewed.code,reason:renewed.reason})}`,provenance)},releaseRecoveryClaim=(provenance)=>{if(!dispatch.recoveryClaim)return;let released=_internals96.releaseWorktreeRecoveryClaim(directory,{authorityDigest:dispatch.recoveryClaim.authorityDigest,claimantCallID:resolvedCallID,claimRevision:dispatch.recoveryClaim.claimRevision,rawToken:dispatch.recoveryClaim.rawToken});if(released.ok)return;return failRecoverySettlement("recovery-claim-release",`The preserved recovery lane could not release its exact claim after settlement; ${describeRecoveryMutationFailure({action:"release",code:released.code,reason:released.reason})}`,provenance)},publishRecoveryAuthority=async(provenance,conflictFiles)=>{let published=await publishRecoveryAuthorityForSettlement({directory,dispatch,taskId:statusKey,provenance,conflictFiles});if(published.ok)return;return failRecoverySettlement("recovery-authority-publish",`The preserved original lane could not publish recoverable authority; ${describeRecoveryMutationFailure({action:"publish",code:published.code,reason:published.reason})}`,provenance)},preMergeRenewFailure=renewRecoveryClaimLease("before merge-back");if(preMergeRenewFailure)return preMergeRenewFailure;let mergeResult=await(async()=>{if(!dispatch.recoveryClaim){let epicLanding=settlement.commitLanding===void 0?_internals96.epicCommitLandingFor(directory,dispatch.planTaskId):void 0;if(epicLanding&&"refused"in epicLanding)return{failed:!0,stage:epicLanding.stage,message:epicLanding.message};return _internals96.attemptMergeBackFromDirty(dispatch.handle.worktreePath,dispatch.handle.branchName,directory,getMergeStrategy({merge_strategy:dispatch.mergeStrategy}),{operationId:settlement.operationId,resume:settlement.resume,onBeforeMerge:settlement.onBeforeMerge,commitLanding:settlement.commitLanding??epicLanding?.commitLanding,...epicLanding?{landingCommitMessage:epicLanding.landingCommitMessage}:{}})}let coordinates=dispatch.recoveryClaim.coordinates;if(!coordinates)return{failed:!0,stage:"recovery-coordinates",message:"Claimed recovery lane is missing immutable Git coordinates"};let provenance={operationId:settlement.operationId??`recovery:${dispatch.recoveryClaim.authorityDigest}`,sourceHead:coordinates.sourceHeadOid,targetHeadBefore:coordinates.targetHeadOid,branchName:dispatch.handle.branchName,strategy:coordinates.strategy};if(settlement.onBeforeMerge)await settlement.onBeforeMerge(provenance);let recovered=await _internals96.recoverMergeBackFromImmutableCoordinates(directory,coordinates);if("merged"in recovered&&recovered.merged){if(recovered.sourceCommitOrder&&recovered.rewrittenCommitOrder)dispatch.recoveryClaim.settlement={sourceCommitOrder:recovered.sourceCommitOrder,rewrittenCommitOrder:recovered.rewrittenCommitOrder};return{merged:!0,strategy:recovered.strategy,autoCommitted:!1,cleaned:!0,reconciled:!1,provenance}}if("conflict"in recovered&&recovered.conflict)return{partial:!0,stage:"conflict",autoCommitted:!1,cleaned:!0,message:recovered.message,conflictFiles:recovered.files,provenance};return{failed:!0,stage:"recovery",message:"error"in recovered?recovered.error:"Immutable recovery returned an unexpected result",provenance}})();if("merged"in mergeResult&&mergeResult.merged){let mergedSettlement={outcome:"merged",strategy:mergeResult.strategy,autoCommitted:mergeResult.autoCommitted??!1,cleaned:mergeResult.cleaned??!1,reconciled:mergeResult.reconciled??!1,provenance:mergeResult.provenance};if(settlement.onMerged)try{await settlement.onMerged(mergedSettlement)}catch(error93){let failedSettlement={outcome:"failed",stage:"settlement-persist",message:`Git merge-back succeeded but settlement persistence failed: ${String(error93)}`,provenance:mergeResult.provenance},publishFailure=await publishRecoveryAuthority(mergeResult.provenance);if(publishFailure)failedSettlement.message=`${failedSettlement.message} ${publishFailure.message}`;let releaseFailure=releaseRecoveryClaim(mergeResult.provenance);if(releaseFailure)failedSettlement.message=`${failedSettlement.message} ${releaseFailure.message}`;recordWorktreeMergeFailure(statusKey,{outcome:"failed",stage:failedSettlement.stage,message:failedSettlement.message,worktreePath:dispatch.handle.worktreePath,branch:dispatch.handle.branchName,completedAt:Date.now()});let session=ensureAgentSession(dispatch.parentSessionID);return pushAdvisory(session,`STANDARD_WORKTREE_SETTLEMENT_PERSIST_FAILED: task ${dispatch.taskId} landed in ${directory}, but settlement persistence failed; worktree and branch preserved at ${dispatch.handle.worktreePath} (${dispatch.handle.branchName}).`),failedSettlement}let preCleanupRenewFailure=renewRecoveryClaimLease("before cleanup/finalization",mergeResult.provenance);if(preCleanupRenewFailure)return preCleanupRenewFailure;let cleanupResult=await cleanupStandardWorktreeForCallId(resolvedCallID,"success",directory,dispatch.worktree_dir,{retainBranch:mergeResult.strategy==="squash-unstaged"});if(dispatch.recoveryClaim){let request={authorityDigest:dispatch.recoveryClaim.authorityDigest,claimantCallID:resolvedCallID,claimRevision:dispatch.recoveryClaim.claimRevision,rawToken:dispatch.recoveryClaim.rawToken,settlement:dispatch.recoveryClaim.settlement};if(cleanupResult.removedWorktree&&cleanupResult.cleanedBranch){let finalized=_internals96.finalizeWorktreeRecoveryAuthority(directory,request);if(!finalized.ok)return failRecoverySettlement("recovery-claim-finalize",`The merged recovery lane was cleaned up but could not finalize its exact claim; ${describeRecoveryMutationFailure({action:"finalize",code:finalized.code,reason:finalized.reason})}`,mergeResult.provenance)}else{let releaseFailure=releaseRecoveryClaim(mergeResult.provenance);if(releaseFailure)return releaseFailure}}clearWorktreeMergeStatus(statusKey);try{let{removeLaneProfileFromDiskReal:removeLaneProfileFromDiskReal2}=await Promise.resolve().then(() => (init_core3(),exports_core3));await removeLaneProfileFromDiskReal2(dispatch.handle.worktreePath,dispatch.laneIndex)}catch{}let state2=serializationStateBySessionID.get(dispatch.parentSessionID);if(state2)state2.successfulDispatchesSince++,checkStandardWorktreeSerializationRelease(dispatch.parentSessionID,wtConfig);try{verifyReviewerScopeGenerationMergeBack({parentSessionID:dispatch.parentSessionID,taskId:statusKey,coderCallID:resolvedCallID,primaryDirectory:directory})}catch{}return mergedSettlement}if("partial"in mergeResult){let publishFailure=await publishRecoveryAuthority(mergeResult.provenance,mergeResult.conflictFiles);if(publishFailure)return publishFailure;let releaseFailure=releaseRecoveryClaim(mergeResult.provenance);if(releaseFailure)return releaseFailure;recordWorktreeMergeFailure(statusKey,{outcome:"partial",stage:mergeResult.stage,message:mergeResult.message,worktreePath:dispatch.handle.worktreePath,branch:dispatch.handle.branchName,completedAt:Date.now()});let session=ensureAgentSession(dispatch.parentSessionID);pushAdvisory(session,`STANDARD_WORKTREE_MERGE_PARTIAL: task ${dispatch.taskId} preserved at ${dispatch.handle.worktreePath}; stage: ${mergeResult.stage}; ${mergeResult.message}`+(mergeResult.code?` (code: ${mergeResult.code})`:"")+(mergeResult.recoveryHint?` ${mergeResult.recoveryHint}`:""));try{markReviewerScopeGenerationMergebackPending({parentSessionID:dispatch.parentSessionID,taskId:statusKey,coderCallID:resolvedCallID})}catch{}return{outcome:"partial",stage:mergeResult.stage,message:mergeResult.message,autoCommitted:mergeResult.autoCommitted,cleaned:mergeResult.cleaned,conflictFiles:mergeResult.conflictFiles,code:mergeResult.code,recoveryHint:mergeResult.recoveryHint,provenance:mergeResult.provenance}}if("failed"in mergeResult){let publishFailure=await publishRecoveryAuthority(mergeResult.provenance);if(publishFailure)return publishFailure;let releaseFailure=releaseRecoveryClaim(mergeResult.provenance);if(releaseFailure)return releaseFailure;recordWorktreeMergeFailure(statusKey,{outcome:"failed",stage:mergeResult.stage,message:mergeResult.message,worktreePath:dispatch.handle.worktreePath,branch:dispatch.handle.branchName,completedAt:Date.now()});let session=ensureAgentSession(dispatch.parentSessionID),location=mergeResult.stage===SOURCE_WORKTREE_GONE_STAGE||mergeResult.stage===SOURCE_WORKTREE_UNCERTAIN_STAGE?`lane worktree ${dispatch.handle.worktreePath} no longer exists`:`preserved at ${dispatch.handle.worktreePath}`;pushAdvisory(session,`STANDARD_WORKTREE_MERGE_FAILED: task ${dispatch.taskId} ${location}; stage: ${mergeResult.stage}; ${mergeResult.message}.`);try{markReviewerScopeGenerationMergebackPending({parentSessionID:dispatch.parentSessionID,taskId:statusKey,coderCallID:resolvedCallID})}catch{}return{outcome:"failed",stage:mergeResult.stage,message:mergeResult.message,provenance:mergeResult.provenance}}return{outcome:"failed",stage:"merge",message:"Merge-back returned an unexpected result"}},queuedRun=standardWorktreeMergeQueue.then(run,run);standardWorktreeMergeQueue=queuedRun;let result;try{result=await queuedRun}catch(error93){if(standardWorktreeByCallID.delete(resolvedCallID),awaitingMergeByCallID.delete(resolvedCallID),dispatch.recoveryClaim)try{_internals96.releaseWorktreeRecoveryClaim(directory,{authorityDigest:dispatch.recoveryClaim.authorityDigest,claimantCallID:resolvedCallID,claimRevision:dispatch.recoveryClaim.claimRevision,rawToken:dispatch.recoveryClaim.rawToken})}catch{}let message=`Unexpected worktree settlement failure: ${error93 instanceof Error?error93.message:String(error93)}`;recordWorktreeMergeFailure(dispatch.planTaskId??dispatch.taskId,{outcome:"failed",stage:"merge",message,worktreePath:dispatch.handle.worktreePath,branch:dispatch.handle.branchName,completedAt:Date.now()});let session=ensureAgentSession(dispatch.parentSessionID);return pushAdvisory(session,`STANDARD_WORKTREE_SETTLEMENT_FAILED: task ${dispatch.taskId} preserved at ${dispatch.handle.worktreePath}; ${message}.`),{outcome:"failed",stage:"merge",message}}if(resolvedCallID)awaitingMergeByCallID.delete(resolvedCallID);return result}async function readLaneEnvFileFromDisk(worktreePath,laneIndex){let envPath=path111.join(worktreePath,".swarm","lanes",`${laneIndex}.env`),content;try{content=await fs70.readFile(envPath,"utf-8")}catch(err){if(err.code==="ENOENT")return{};return log(`[worktree-isolation] failed to read lane env file ${envPath}: ${err.message}`),{}}let result={};for(let rawLine of content.split(`
|
|
1273
1273
|
`)){let line=rawLine.trim();if(!line||line.startsWith("#"))continue;let eqIdx=line.indexOf("=");if(eqIdx<0)continue;let k=line.slice(0,eqIdx),v=line.slice(eqIdx+1);if(!isValidEnvKey(k))continue;if(isUntrustedEnvKey(k))continue;result[k]=v}return result}var MAX_TRACKED_STANDARD_WORKTREE_CALLS=256,awaitingMergeByCallID,standardWorktreeByCallID,standardWorktreeSerializationSessions,LANE_CHILD_SESSION_LIMIT=512,laneChildSessionAgents,standardWorktreeMergeQueue,standardWorktreeLaneIndexBySession,serializationStateBySessionID,WORKTREE_RECOVERY_CLAIM_LEASE_MS=300000,WORKTREE_SESSION_CREATE_TIMEOUT_MS=30000,WORKTREE_SESSION_CREATE_SETTLE_GRACE_MS=5000,StandardWorktreeLifecycleError,WORKTREE_LIFECYCLE_LOCK_WAIT_MARGIN_MS=5000,WORKTREE_LIFECYCLE_LOCK_WAIT_MIN_MS=1e4,WORKTREE_DISPATCH_HOOK_BUDGET_MS=60000,WORKTREE_PROVISION_ALLOWANCE_MS=15000,standardWorktreeDegradationReasonBySession,WORKTREE_LIST_TIMEOUT_MS=15000,PRESERVE_COMMIT_TIMEOUT_MS=30000,_internals96;var init_worktree_isolation=__esm(()=>{init_constants();init_schema();init_project_db();init_task_landing();init_file_locks();init_lane_owners();init_executor();init_state();init_bun_compat();init_canonical_root();init_ephemeral_session_teardown();init_git_executable();init_logger();init_timeout();init_worktree();init_merge2();init_settlement_artifact_lifecycle();init_reviewer_scope_mergeback();init_dead_lane_reclaim();init_worktree_merge_status();init_worktree_provisioning_owner();init_worktree_recovery_authority();init_worktree_isolation_config();awaitingMergeByCallID=new Map,standardWorktreeByCallID=new Map,standardWorktreeSerializationSessions=new Set,laneChildSessionAgents=new Map;standardWorktreeMergeQueue=Promise.resolve(),standardWorktreeLaneIndexBySession=new Map,serializationStateBySessionID=new Map;StandardWorktreeLifecycleError=class StandardWorktreeLifecycleError extends Error{kind="standard-worktree-lifecycle";constructor(message){super(message);this.name="StandardWorktreeLifecycleError"}};standardWorktreeDegradationReasonBySession=new Map;_internals96={withSettlementArtifactLifecycle,assertSettlementArtifactsRemovable,epicCommitLandingFor,provisionWorktree,removeWorktree,attemptMergeBackFromDirty,recoverMergeBackFromImmutableCoordinates,postMergeCleanup,pruneStaleWorktreeMetadata,readLaneEnvFileFromDisk,serializationStateBySessionID,rememberStandardWorktreeSerializationSession,awaitingMergeByCallID,startupOrphanRecovery,cleanupOrphanedBranches,cleanupStandardWorktreeForCallId,preserveDirtyWorktreeForCallId,preserveBackgroundWorktreeOwnershipForCallId,tryAcquireWorktreeLifecycleLock:tryAcquireLock,acquireWorktreeLifecycleLockWithin,resolveWorktreeLifecycleLockWaitMs,now:()=>Date.now(),sleep:(ms)=>new Promise((resolve56)=>setTimeout(resolve56,ms)),recordWorktreeProvisioningOwner,removeWorktreeProvisioningOwner,lookupWorktreeRecoveryAuthoritiesByTask,claimWorktreeRecoveryAuthority,renewWorktreeRecoveryClaim,releaseWorktreeRecoveryClaim,finalizeWorktreeRecoveryAuthority,publishWorktreeRecoveryAuthority,replayWorktreeRecoveryClaimJournal,buildWorktreeRecoveryPublishIdentity,preserveDirtyWorktreeAtPath,worktreeSessionCreateTimeoutMs:WORKTREE_SESSION_CREATE_TIMEOUT_MS,worktreeSessionCreateSettleGraceMs:WORKTREE_SESSION_CREATE_SETTLE_GRACE_MS,createSessionWithinBudget,abortStandardWorktreeDispatch,standardWorktreeByCallID,preProvisionCollisionCheck,inspectStandardWorktreeCollisionOwnership:inspectStandardWorktreeCollisionOwnership2,isLaneOwnedByCurrentSession,bunSpawn,resolveGitExecutable}});var exports_coder_settlement={};__export(exports_coder_settlement,{transferCoderSettlementToBackground:()=>transferCoderSettlementToBackground,settleCoderDispatch:()=>settleCoderDispatch,releaseCoderDispatchOwnership:()=>releaseCoderDispatchOwnership,recoverStaleCoderSettlements:()=>recoverStaleCoderSettlements,recoverCoderSettlement:()=>recoverCoderSettlement,recordCoderMergeProvenance:()=>recordCoderMergeProvenance,listCoderSettlementWalStates:()=>listCoderSettlementWalStates,hasUnattributedEmptyScopeMutation:()=>hasUnattributedEmptyScopeMutation,completeCoderSettlementCleanup:()=>completeCoderSettlementCleanup,beginCoderSettlement:()=>beginCoderSettlement,assertNoUnsettledCoderDispatch:()=>assertNoUnsettledCoderDispatch,abortCoderSettlementIfDoomed:()=>abortCoderSettlementIfDoomed,abortCoderSettlement:()=>abortCoderSettlement,_internals:()=>_internals103});import{spawnSync as spawnSync11}from"node:child_process";import{randomUUID as randomUUID15}from"node:crypto";import{existsSync as existsSync54}from"node:fs";import{readdir as readdir6}from"node:fs/promises";function dispatchKey(directory,taskId,transitionId){return`${canonicalRootKeyFresh(directory)}\x00${taskId}\x00${transitionId}`}function walPath(directory,taskId){return validateSwarmPath(directory,`coder-settlements/${taskId}.json`)}async function readWal3(filePath,taskId){return readWorkflowWalFile("coder-settlement",filePath,taskId)}async function withSettlementLock(directory,taskId,actor,operation){let target=`coder-settlements/${taskId}.json`,lock=await tryAcquireLock(directory,target,actor,`coder-settlement-${taskId}-${Date.now()}`);if(!lock.acquired)throw Error(`CODER_SETTLEMENT_LOCKED: task ${taskId}`);try{return await operation()}finally{await lock.lock._release?.().catch(()=>{return})}}async function writeWal3(filePath,wal){await writeWorkflowWalFile("coder-settlement",filePath,wal)}async function appendSettlementEvent(directory,action,wal,extra){try{appendCoreEventSync(directory,{type:"coder_settlement",action,timestamp:new Date().toISOString(),taskId:wal.taskId,transitionId:wal.transitionId,actor:wal.actor,...extra??{}})}catch(error93){criticalWarn(`[coder-settlement] lifecycle event write failed (${action} ${wal.taskId}): ${error93 instanceof Error?error93.message:String(error93)}`)}}function baselineAttributionDoomed(baseline){if(baseline.gitHead===null)return!0;return Array.isArray(baseline.changedFiles)&&baseline.changedFiles.length>0}function hasUnattributedEmptyScopeMutation(declaredFiles,rawObservedFiles){return Array.isArray(declaredFiles)&&declaredFiles.length===0&&Array.isArray(rawObservedFiles)&&rawObservedFiles.length>0}function doomedReason(baseline){if(baseline.gitHead===null)return"launch workspace has no git baseline (not a git repository, or git unavailable at dispatch)";return`launch baseline was dirty with ${String(baseline.changedFiles?.length??0)} pre-existing uncommitted/untracked change(s)`}function isProcessAlive3(processId){if(processId===process.pid)return!0;try{return process.kill(processId,0),!0}catch(error93){return error93.code==="EPERM"}}async function scopedObservedFiles(directory,context){let baseline={...context.baseline,directory},observed=await changedFilesSinceSnapshotAsync(directory,baseline);if(!observed||!context.declaredFiles)return null;if(hasUnattributedEmptyScopeMutation(context.declaredFiles,observed))return observed;return observed.filter((filePath)=>isPathWithinDeclaredScope(filePath,context.declaredFiles??[],directory))}function settlementTransitionEvent(wal){return wal.accepted?{type:"accepted_mutation",agentType:"coder",context:{testEngineerExempt:wal.testEngineerExempt===!0,settlementFailed:wal.settlementFailed===!0},expectedGeneration:wal.expectedGeneration,transitionId:wal.transitionId}:{type:"dispatch_no_mutation",agentType:"coder",context:{declaredFiles:wal.context.declaredFiles,settlementTransitionId:wal.transitionId},expectedGeneration:wal.expectedGeneration,transitionId:wal.transitionId}}function withLandedUnstaged(worktree,landedUnstaged){if(worktree===void 0||landedUnstaged===void 0)return worktree;return{...worktree,landedUnstaged}}async function commitPrepared(directory,wal,options){return withTaskEvidenceTransaction(directory,wal.taskId,wal.actor,async(transaction)=>{let lockedWal=await readWal3(walPath(directory,wal.taskId),wal.taskId);if(lockedWal===null)throw Error("CODER_SETTLEMENT_WAL_MISSING");if(lockedWal.transitionId!==wal.transitionId)throw Error("CODER_SETTLEMENT_WAL_REPLACED");let transitionEvent=settlementTransitionEvent(lockedWal),snapshot=getTaskWorkflowSnapshot(transaction.read());if(lockedWal.accepted===!0?snapshot.authoritative&&snapshot.state===(lockedWal.settlementFailed===!0?"rework_required":"coder_delegated")&&snapshot.generation===lockedWal.expectedGeneration+1&&snapshot.lastOutcome===(lockedWal.settlementFailed===!0?"accepted_mutation_failed":"accepted_mutation")&&snapshot.lastTransitionId===lockedWal.transitionId:snapshot.authoritative&&snapshot.generation===lockedWal.expectedGeneration&&(lockedWal.context.declaredFiles?.length===0?snapshot.noMutationSettlement?.transitionId===lockedWal.transitionId:snapshot.lastOutcome==="dispatch_no_mutation"&&snapshot.lastTransitionId===lockedWal.transitionId)){let evidence2=transaction.read();if(lockedWal.accepted===!0)await ensureTaskGateRequirementsReceiptForSettledTransition(directory,lockedWal.taskId,evidence2,transitionEvent);if(lockedWal.state!=="COMMITTED")lockedWal={...lockedWal,state:"COMMITTED",cleanupComplete:lockedWal.worktree===void 0,worktree:withLandedUnstaged(lockedWal.worktree,options?.landedUnstaged)},await writeWal3(walPath(directory,wal.taskId),lockedWal),await appendSettlementEvent(directory,"settled",lockedWal,{resumed:!0});return{evidence:evidence2,accepted:lockedWal.accepted===!0,alreadyApplied:!0}}if(lockedWal.state!=="PREPARED"&&!(lockedWal.state==="COMMITTED"&&lockedWal.accepted!==!0&&snapshot.state==="idle"))throw Error("CODER_SETTLEMENT_NOT_PREPARED");let evidence=await transaction.transition(transitionEvent);return lockedWal={...lockedWal,state:"COMMITTED",cleanupComplete:lockedWal.worktree===void 0,worktree:withLandedUnstaged(lockedWal.worktree,options?.landedUnstaged)},await writeWal3(walPath(directory,wal.taskId),lockedWal),await appendSettlementEvent(directory,"settled",lockedWal),{evidence,accepted:lockedWal.accepted===!0,alreadyApplied:!1}})}async function beginCoderSettlement(options){if(options.context.baseline.gitHead===null){if((await captureWorkspaceSnapshotAsync(options.directory)).gitHead!==null)throw Error(`CODER_SETTLEMENT_BASELINE_UNAVAILABLE: the launch baseline for task ${options.taskId} has no git HEAD — the observation directory (${options.context.baseline.directory}) is not a git repository or git is unavailable there. An unregistered worktree lane (a lane directory that git worktree list does not know) produces exactly this. The task was not dispatched and no settlement state was created; retry the dispatch, or set worktree.policy "disabled" to run coders in the primary tree.`)}let filePath=walPath(options.directory,options.taskId),ownsActiveDispatch=!1;if(await withSettlementLock(options.directory,options.taskId,options.actor,()=>withTaskEvidenceTransaction(options.directory,options.taskId,options.actor,async(transaction)=>{let snapshot=getTaskWorkflowSnapshot(transaction.read());if(snapshot.generation!==options.expectedGeneration)throw Error(`TASK_WORKFLOW_GENERATION_MISMATCH: expected ${options.expectedGeneration}, found ${snapshot.generation}`);let existing=await readWal3(filePath,options.taskId);if(existing!==null){if((existing.state==="DISPATCHED"||existing.state==="PREPARED")&&existing.transitionId!==options.transitionId)throw Error(`CODER_SETTLEMENT_IN_PROGRESS: transition ${existing.transitionId} owns task ${options.taskId}, so transition ${options.transitionId} cannot dispatch it (${filePath}, state ${existing.state}). Wait for the owning transition to settle or run /swarm recover ${options.taskId} (or /swarm reset-session), then retry; do not remove the WAL by hand.`);if(existing.transitionId===options.transitionId){if(!(existing.actor===options.actor&&existing.expectedGeneration===options.expectedGeneration&&JSON.stringify(existing.context)===JSON.stringify(options.context)&&JSON.stringify(existing.worktree)===JSON.stringify(options.worktree)))throw Error("CODER_SETTLEMENT_IDEMPOTENCY_CONFLICT");if(existing.state==="ABORTED")throw Error("CODER_SETTLEMENT_IDEMPOTENCY_CONFLICT");ownsActiveDispatch=existing.state==="DISPATCHED"&&existing.runtimeId===runtimeId;return}}let publish=async()=>{if(options.worktree){if(canonicalRootKeyFresh(options.context.baseline.directory)!==canonicalRootKeyFresh(options.worktree.worktreePath)||options.context.baseline.gitHead===null)throw Error("CODER_SETTLEMENT_DISPATCH_ARTIFACT_CHANGED");await _internals103.validateSettlementLane(options.worktree.worktreePath,options.worktree.branchName,options.context.baseline.gitHead)}await transaction.transition({type:"dispatch_attempted",agentType:"coder",expectedGeneration:options.expectedGeneration,transitionId:options.transitionId}),await writeWal3(filePath,{version:1,state:"DISPATCHED",taskId:options.taskId,transitionId:options.transitionId,actor:options.actor,processId:process.pid,runtimeId,expectedGeneration:options.expectedGeneration,context:options.context,...options.worktree?{worktree:options.worktree}:{},recordedAt:new Date().toISOString()}),ownsActiveDispatch=!0,await appendSettlementEvent(options.directory,"dispatched",{taskId:options.taskId,transitionId:options.transitionId,actor:options.actor})};if(options.worktree)await _internals103.withSettlementArtifactLifecycle(options.directory,publish);else await publish()})),ownsActiveDispatch){let key2=dispatchKey(options.directory,options.taskId,options.transitionId);if(!liveDispatches.has(key2)&&liveDispatches.size>=MAX_LIVE_DISPATCHES)throw Error("CODER_SETTLEMENT_CAPACITY_EXCEEDED");liveDispatches.add(key2)}}async function settleCoderDispatch(options){return withSettlementLock(options.directory,options.taskId,"coder-settlement",async()=>{let filePath=walPath(options.directory,options.taskId),wal=await readWal3(filePath,options.taskId);if(wal===null)throw Error("CODER_SETTLEMENT_WAL_MISSING");if(wal.transitionId!==options.transitionId)throw Error("CODER_SETTLEMENT_WAL_REPLACED");let unattributedEmptyScopeMutation=hasUnattributedEmptyScopeMutation(wal.context.declaredFiles,options.observedFiles),accepted=options.accepted||unattributedEmptyScopeMutation,settlementFailed=options.settlementFailed===!0||unattributedEmptyScopeMutation;if(wal.state==="COMMITTED"){if(wal.accepted!==accepted||wal.testEngineerExempt!==options.testEngineerExempt||wal.settlementFailed!==settlementFailed)throw Error("CODER_SETTLEMENT_IDEMPOTENCY_CONFLICT");return commitPrepared(options.directory,wal,{landedUnstaged:options.landedUnstaged})}if(wal.state==="ABORTED")throw Error("CODER_SETTLEMENT_IDEMPOTENCY_CONFLICT");if(wal.state==="PREPARED"&&(wal.accepted!==accepted||wal.testEngineerExempt!==options.testEngineerExempt||wal.settlementFailed!==settlementFailed))throw Error("CODER_SETTLEMENT_IDEMPOTENCY_CONFLICT");let prepared={...wal,state:"PREPARED",accepted,testEngineerExempt:options.testEngineerExempt,settlementFailed};if(wal.state!=="PREPARED")await writeWal3(filePath,prepared);liveDispatches.delete(dispatchKey(options.directory,options.taskId,options.transitionId));try{return await commitPrepared(options.directory,prepared,{landedUnstaged:options.landedUnstaged})}finally{let finalWal=await readWal3(filePath,options.taskId);if(finalWal!==null&&finalWal.state==="COMMITTED")liveDispatches.delete(dispatchKey(options.directory,options.taskId,options.transitionId))}})}async function abortCoderSettlement(options){let{outcome,worktree}=await withSettlementLock(options.directory,options.taskId,"coder-abort",async()=>abortDispatchedWalUnderLock(options.directory,options.taskId,options.transitionId,options.reason));if(worktree&&outcome!=="not-dispatched")try{await completeCoderSettlementCleanup(options.directory,options.taskId,options.transitionId)}catch(error93){criticalWarn(`[coder-settlement] aborted settlement worktree cleanup failed for task ${options.taskId}: ${error93 instanceof Error?error93.message:String(error93)}`)}return outcome}async function transferCoderSettlementToBackground(options){return withSettlementLock(options.directory,options.taskId,"coder-background-transfer",async()=>{let filePath=walPath(options.directory,options.taskId),wal=await readWal3(filePath,options.taskId);if(wal===null)return"missing";if(wal.taskId!==options.taskId||wal.transitionId!==options.transitionId)throw Error("CODER_SETTLEMENT_WAL_REPLACED");if(wal.state==="PREPARED")throw Error("CODER_SETTLEMENT_IN_PROGRESS");if(wal.state!=="DISPATCHED")return liveDispatches.delete(dispatchKey(options.directory,options.taskId,options.transitionId)),"already-terminal";let reason="ownership transferred to durable background completion";return await writeWal3(filePath,{...wal,state:"ABORTED",abortReason:reason,cleanupComplete:!0}),liveDispatches.delete(dispatchKey(options.directory,options.taskId,options.transitionId)),await appendSettlementEvent(options.directory,"aborted",wal,{reason,ownership:"background-delegation"}),"transferred"})}async function abortDispatchedWalUnderLock(directory,taskId,transitionId,reason){let filePath=walPath(directory,taskId),wal=await readWal3(filePath,taskId);if(wal===null)throw Error("CODER_SETTLEMENT_WAL_MISSING");if(wal.transitionId!==transitionId)throw Error("CODER_SETTLEMENT_WAL_REPLACED");if(wal.state==="ABORTED")return{outcome:"already-aborted",worktree:wal.worktree!==void 0};if(wal.state!=="DISPATCHED")return{outcome:"not-dispatched",worktree:!1};return await writeWal3(filePath,{...wal,state:"ABORTED",abortReason:reason}),liveDispatches.delete(dispatchKey(directory,taskId,transitionId)),await appendSettlementEvent(directory,"aborted",wal,{reason}),{outcome:"aborted",worktree:wal.worktree!==void 0}}async function abortCoderSettlementIfDoomed(options){let filePath=walPath(options.directory,options.taskId),wal;try{wal=await readWal3(filePath,options.taskId)}catch{return"not-doomed"}if(wal===null)return"not-doomed";if(wal.state==="ABORTED")return"already-aborted";if(wal.transitionId!==options.transitionId||wal.state!=="DISPATCHED")return"not-doomed";if(!baselineAttributionDoomed(wal.context.baseline))return"not-doomed";let outcome=await abortCoderSettlement({directory:options.directory,taskId:options.taskId,transitionId:options.transitionId,reason:doomedReason(wal.context.baseline)});return outcome==="aborted"||outcome==="already-aborted"?outcome:"not-doomed"}async function recordCoderMergeProvenance(options){await withSettlementLock(options.directory,options.taskId,"coder-merge-provenance",async()=>{let filePath=walPath(options.directory,options.taskId),wal=await readWal3(filePath,options.taskId);if(wal===null)throw Error("CODER_SETTLEMENT_WAL_MISSING");if(wal.taskId!==options.taskId||wal.transitionId!==options.transitionId)throw Error("CODER_SETTLEMENT_WAL_REPLACED");if(wal.state!=="DISPATCHED"){if(!(JSON.stringify(wal.mergeProvenance)===JSON.stringify(options.provenance)&&JSON.stringify(wal.observedFiles)===JSON.stringify(options.observedFiles)))throw Error("CODER_SETTLEMENT_IDEMPOTENCY_CONFLICT");return}await writeWal3(filePath,{...wal,mergeProvenance:options.provenance,observedFiles:[...options.observedFiles]})})}function probeBranchExists(directory,branchName){let result=spawnSync11(resolveGitExecutable(),["-C",directory,"show-ref","--verify","--quiet",`refs/heads/${branchName}`],{cwd:directory,stdio:["ignore","ignore","ignore"],timeout:5000,windowsHide:!0});if(result.error)throw result.error;if(result.status===0)return!0;if(result.status===1)return!1;throw Error(`CODER_SETTLEMENT_CLEANUP_UNCERTAIN: git show-ref exited with status ${String(result.status)}`)}async function cleanupRecoveredWorktree(directory,descriptor,options){let retainBranch=options?.retainBranch??descriptor.landedUnstaged===!0,branchExists=()=>_internals103.branchExists(directory,descriptor.branchName),hasResidue=existsSync54(descriptor.worktreePath)||branchExists(),{awaitingMergeByCallID:awaitingMergeByCallID2,cleanupStandardWorktreeForCallId:cleanupStandardWorktreeForCallId2,standardWorktreeByCallID:standardWorktreeByCallID2}=await Promise.resolve().then(() => (init_worktree_isolation(),exports_worktree_isolation));if(standardWorktreeByCallID2.delete(descriptor.callID),hasResidue)awaitingMergeByCallID2.set(descriptor.callID,{callID:descriptor.callID,parentSessionID:descriptor.parentSessionId,taskId:descriptor.taskId,...descriptor.planTaskId?{planTaskId:descriptor.planTaskId}:{},branch:descriptor.branchName,worktreePath:descriptor.worktreePath,mergeStrategy:descriptor.mergeStrategy,queuedAt:Date.now()});if(hasResidue)await cleanupStandardWorktreeForCallId2(descriptor.callID,"success",directory,descriptor.worktreeDir??void 0,retainBranch?{retainBranch:!0}:void 0);if(existsSync54(descriptor.worktreePath)||branchExists()&&!retainBranch)throw Error("CODER_SETTLEMENT_WORKTREE_CLEANUP_UNVERIFIED");let provisioningOwner=descriptor.provisioningOwner??(descriptor.reservationId!==void 0&&descriptor.generation!==void 0?{reservationId:descriptor.reservationId,generation:descriptor.generation,branchName:descriptor.branchName}:void 0);if(!_internals103.removeWorktreeProvisioningOwner(directory,descriptor.callID,provisioningOwner))throw Error("CODER_SETTLEMENT_OWNER_CLEANUP_FAILED")}function shouldEmitHistoricalOrphanAdvisory(key2){let now=Date.now(),last=historicalOrphanAdvisoryAt.get(key2);if(last!==void 0&&now-last>=0&&now-last<HISTORICAL_ORPHAN_ADVISORY_COOLDOWN_MS)return!1;historicalOrphanAdvisoryAt.delete(key2),historicalOrphanAdvisoryAt.set(key2,now);while(historicalOrphanAdvisoryAt.size>MAX_HISTORICAL_ORPHAN_ADVISORIES){let oldest=historicalOrphanAdvisoryAt.keys().next().value;if(oldest===void 0)break;historicalOrphanAdvisoryAt.delete(oldest)}return!0}async function preserveHistoricalSelfHealedSource(directory,wal){if(wal.state!=="ABORTED"||!wal.abortReason?.startsWith("CODER_SETTLEMENT_SELF_HEALED_MISSING_WORKTREE")||!wal.mergeProvenance||await probeSettlementSource(directory,wal.mergeProvenance.sourceHead)!=="present")return"none";let source=wal.mergeProvenance.sourceHead,backup=await preserveSettlementSource(directory,source),landed=await reconcileLandedMerge(directory,wal.mergeProvenance);if(landed.landed&&landed.method!=="worktree-match")return await releaseSettlementSource(directory,source),"none";if(shouldEmitHistoricalOrphanAdvisory(`${canonicalRootKeyFresh(directory)}\x00${wal.taskId}\x00${source}`)){let message=`RECOVERABLE_ORPHAN_COMMIT: historical aborted task ${wal.taskId} source ${source} is retained at ${backup}; apply it explicitly after reviewing the current task generation. The settlement remains ABORTED. This report is advisory: task status, dispatch and close are not blocked by it.`;criticalWarn(message),advisoryWarn(message)}return"orphan"}async function completeCoderSettlementCleanup(directory,taskId,transitionId){await withSettlementLock(directory,taskId,"coder-cleanup",async()=>{let filePath=walPath(directory,taskId),wal=await readWal3(filePath,taskId);if(wal===null)throw Error("CODER_SETTLEMENT_WAL_MISSING");if(wal.taskId!==taskId||wal.transitionId!==transitionId)throw Error("CODER_SETTLEMENT_WAL_REPLACED");if(wal.state!=="COMMITTED"&&wal.state!=="ABORTED")throw Error("CODER_SETTLEMENT_NOT_COMMITTED");if(await preserveHistoricalSelfHealedSource(directory,wal)==="orphan")return;if(!wal.worktree||wal.cleanupComplete===!0)return;await cleanupRecoveredWorktree(directory,wal.worktree),await writeWal3(filePath,{...wal,cleanupComplete:!0})})}async function selfHealMissingLaneWorktree(directory,filePath,taskId,transitionId,descriptor,detail){if(existsSync54(descriptor.worktreePath))return!1;if(_internals103.branchExists(directory,descriptor.branchName))return!1;let currentWal=await readWal3(filePath,taskId);if(currentWal?.mergeProvenance){let source=currentWal.mergeProvenance.sourceHead;if(await probeSettlementSource(directory,source)==="present"){let backup=await preserveSettlementSource(directory,source);throw Error(`RECOVERABLE_ORPHAN_COMMIT: task ${taskId} source ${source} is retained at ${backup}; settlement remains pending.`)}}let reason=`CODER_SETTLEMENT_SELF_HEALED_MISSING_WORKTREE: ${detail}`;if((await abortDispatchedWalUnderLock(directory,taskId,transitionId,reason)).outcome==="not-dispatched")return!1;try{await cleanupRecoveredWorktree(directory,descriptor);let healedWal=await readWal3(filePath,taskId);if(healedWal!==null)await writeWal3(filePath,{...healedWal,cleanupComplete:!0})}catch(error93){criticalWarn(`[coder-settlement] self-healed task ${taskId} but residual cleanup failed: ${error93 instanceof Error?error93.message:String(error93)}`)}let message=`STALE_CODER_SETTLEMENT_SELF_HEALED: task ${taskId} was blocked by a coder settlement whose lane worktree "${descriptor.worktreePath}" and lane branch "${descriptor.branchName}" no longer exist. Nothing was recoverable, so the write-ahead log at "${filePath}" was marked terminal (ABORTED) and the task was unblocked. Re-dispatch the task if its work still needs doing.`;return criticalWarn(message),advisoryWarn(message),!0}async function recoverCoderSettlement(directory,taskId){return withSettlementLock(directory,taskId,"coder-recovery",async()=>{let filePath=walPath(directory,taskId),existingWal=await readWal3(filePath,taskId);if(existingWal===null)return null;let wal=existingWal;if(wal.state==="ABORTED")return await preserveHistoricalSelfHealedSource(directory,wal),null;if(wal.state==="COMMITTED"){if(wal.worktree&&wal.cleanupComplete!==!0)await cleanupRecoveredWorktree(directory,wal.worktree),await writeWal3(filePath,{...wal,cleanupComplete:!0});return null}let key2=dispatchKey(directory,taskId,wal.transitionId);if(liveDispatches.has(key2)||wal.processId!==process.pid&&isProcessAlive3(wal.processId))throw Error(`CODER_DISPATCH_IN_PROGRESS: transition ${wal.transitionId} still owns task ${taskId} (${filePath}, state ${wal.state}, pid ${wal.processId}). Wait for that dispatch to settle or run /swarm recover ${taskId} (or /swarm reset-session) to unwedge it; do not remove the WAL by hand.`);if(wal.state==="DISPATCHED"){if(wal.worktree){let worktree=wal.worktree,sourceState=wal.mergeProvenance?await probeSettlementSource(directory,wal.mergeProvenance.sourceHead):void 0;if(sourceState==="absent"&&await selfHealMissingLaneWorktree(directory,filePath,taskId,wal.transitionId,worktree,"the recorded source object, lane branch and checkout are absent"))return null;let observed2=wal.observedFiles??await scopedObservedFiles(worktree.worktreePath,wal.context);if(observed2===null)throw Error(`CODER_SETTLEMENT_RECOVERY_UNCERTAIN: transition ${wal.transitionId} for isolated task ${taskId} could not attribute worktree changes to the declared scope (${filePath}, state ${wal.state}). Run /swarm recover ${taskId} (or /swarm reset-session), then retry; do not remove the WAL by hand.`);let unattributedEmptyScopeMutation2=hasUnattributedEmptyScopeMutation(wal.context.declaredFiles,observed2),accepted=observed2.length>0||unattributedEmptyScopeMutation2,settlementFailed=wal.settlementFailed===!0||unattributedEmptyScopeMutation2;if(wal.mergeProvenance&&sourceState!=="absent"){let landed=await reconcileLandedMerge(directory,wal.mergeProvenance);if(landed.landed){let landedUnstaged=landed.method==="worktree-match";if(landedUnstaged)await preserveSettlementSource(directory,wal.mergeProvenance.sourceHead);else await releaseSettlementSource(directory,wal.mergeProvenance.sourceHead);wal={...wal,state:"PREPARED",observedFiles:observed2,accepted,settlementFailed,testEngineerExempt:isMarkdownOnlyTaskChange(wal.context.declaredFiles,observed2)},await writeWal3(filePath,wal);let committed2=await commitPrepared(directory,wal,{landedUnstaged});await cleanupRecoveredWorktree(directory,worktree,{retainBranch:landedUnstaged});let reconciledWal=await readWal3(filePath,taskId);if(reconciledWal===null)throw Error("CODER_SETTLEMENT_WAL_MISSING");return await writeWal3(filePath,{...reconciledWal,cleanupComplete:!0}),committed2}if(await preserveSettlementSource(directory,wal.mergeProvenance.sourceHead),landed.error)throw Error(`CODER_SETTLEMENT_RECOVERY_UNCERTAIN: transition ${wal.transitionId} for task ${taskId} could not reconcile the landed merge (${filePath}, state ${wal.state}): ${landed.error}. Run /swarm recover ${taskId} (or /swarm reset-session), then retry; do not remove the WAL by hand.`)}let{awaitingMergeByCallID:awaitingMergeByCallID2,finishStandardWorktreeDispatch:finishStandardWorktreeDispatch2,standardWorktreeByCallID:standardWorktreeByCallID2}=await Promise.resolve().then(() => (init_worktree_isolation(),exports_worktree_isolation)),descriptor=wal.worktree,reconstructedDispatch={callID:descriptor.callID,parentSessionID:descriptor.parentSessionId,taskId:descriptor.taskId,...descriptor.planTaskId?{planTaskId:descriptor.planTaskId}:{},handle:{worktreePath:descriptor.worktreePath,branchName:descriptor.branchName,purpose:"lane",id:descriptor.worktreeId,sessionId:descriptor.worktreeSessionId},mergeStrategy:descriptor.mergeStrategy,laneIndex:descriptor.laneIndex,...descriptor.worktreeDir?{worktree_dir:descriptor.worktreeDir}:{}};standardWorktreeByCallID2.delete(descriptor.callID),awaitingMergeByCallID2.set(descriptor.callID,{callID:descriptor.callID,parentSessionID:descriptor.parentSessionId,taskId:descriptor.taskId,...descriptor.planTaskId?{planTaskId:descriptor.planTaskId}:{},branch:descriptor.branchName,worktreePath:descriptor.worktreePath,mergeStrategy:descriptor.mergeStrategy,queuedAt:Date.now()});let recovered=null,mergeResult=await finishStandardWorktreeDispatch2(directory,reconstructedDispatch,void 0,descriptor.callID,{operationId:wal.transitionId,...wal.mergeProvenance?{resume:wal.mergeProvenance}:{},onBeforeMerge:async(provenance)=>{wal={...wal,mergeProvenance:provenance,observedFiles:observed2},await writeWal3(filePath,wal)},onMerged:async(mergedResult)=>{wal={...wal,state:"PREPARED",accepted,settlementFailed,testEngineerExempt:isMarkdownOnlyTaskChange(wal.context.declaredFiles,observed2)},await writeWal3(filePath,wal),recovered=await commitPrepared(directory,wal,{landedUnstaged:mergedResult.strategy==="squash-unstaged"})}});if(mergeResult.outcome!=="merged"||recovered===null){if(mergeResult.outcome==="failed"&&mergeResult.stage===SOURCE_WORKTREE_GONE_STAGE&&await selfHealMissingLaneWorktree(directory,filePath,taskId,wal.transitionId,descriptor,mergeResult.message))return null;throw Error(`CODER_SETTLEMENT_MERGE_RECOVERY_REQUIRED: transition ${wal.transitionId} for task ${taskId} worktree merge-back did not reach merged (${filePath}, state ${wal.state}, outcome ${mergeResult.outcome}${mergeResult.outcome==="failed"&&mergeResult.message?`: ${mergeResult.message}`:""}). Run /swarm recover ${taskId} (or /swarm reset-session), then retry; do not remove the WAL by hand.`)}await cleanupRecoveredWorktree(directory,descriptor,{retainBranch:mergeResult.strategy==="squash-unstaged"});let committedWal=await readWal3(filePath,taskId);if(committedWal===null)throw Error("CODER_SETTLEMENT_WAL_MISSING");return await writeWal3(filePath,{...committedWal,cleanupComplete:!0}),recovered}let rawObserved=await changedFilesSinceSnapshotAsync(directory,wal.context.baseline),unattributedEmptyScopeMutation=hasUnattributedEmptyScopeMutation(wal.context.declaredFiles,rawObserved),observed;if(rawObserved===null){if(baselineAttributionDoomed(wal.context.baseline)){let aborted3=await abortDispatchedWalUnderLock(directory,taskId,wal.transitionId,doomedReason(wal.context.baseline));if(aborted3.outcome==="aborted"||aborted3.outcome==="already-aborted")return null}observed=null}else if(wal.context.declaredFiles===null)observed=[];else observed=unattributedEmptyScopeMutation?rawObserved:rawObserved.filter((filePath2)=>isPathWithinDeclaredScope(filePath2,wal.context.declaredFiles??[],directory));if(observed===null)throw Error(`CODER_SETTLEMENT_RECOVERY_UNCERTAIN: transition ${wal.transitionId} for task ${taskId} workspace changes could not be attributed to the declared scope (${filePath}, state ${wal.state}). Run /swarm recover ${taskId} (or /swarm reset-session), then retry; do not remove the WAL by hand.`);wal={...wal,state:"PREPARED",accepted:observed.length>0,settlementFailed:wal.settlementFailed===!0||unattributedEmptyScopeMutation,testEngineerExempt:isMarkdownOnlyTaskChange(wal.context.declaredFiles,observed)},await writeWal3(filePath,wal)}let committed=await commitPrepared(directory,wal);if(wal.worktree){await cleanupRecoveredWorktree(directory,wal.worktree);let committedWal=await readWal3(filePath,taskId);if(committedWal===null)throw Error("CODER_SETTLEMENT_WAL_MISSING");await writeWal3(filePath,{...committedWal,cleanupComplete:!0})}return committed})}function releaseCoderDispatchOwnership(directory,taskId,transitionId){liveDispatches.delete(dispatchKey(directory,taskId,transitionId))}async function assertNoUnsettledCoderDispatch(directory,taskId){let filePath=walPath(directory,taskId),wal=await readWal3(filePath,taskId);if(wal===null)return;if(wal.state==="DISPATCHED"||wal.state==="PREPARED")throw Error(`CODER_SETTLEMENT_RECOVERY_REQUIRED: transition ${wal.transitionId} must settle before task ${taskId} can change plan status (${filePath}, state ${wal.state}). Run /swarm recover ${taskId} (or /swarm reset-session), then retry.`)}async function listCoderSettlementWalStates(directory){let entries;try{let dirPath=validateSwarmPath(directory,"coder-settlements");entries=await readdir6(dirPath)}catch{return{states:[],truncated:!1}}let matching=entries.filter((entry)=>SETTLEMENT_WAL_FILE_PATTERN.test(entry)),states=[];for(let entry of matching.sort().slice(0,MAX_SETTLEMENT_WAL_SCAN)){let taskId=entry.slice(0,-5);try{let wal=await readWal3(walPath(directory,taskId),taskId);if(wal===null)continue;states.push({taskId,state:wal.state,transitionId:wal.transitionId,processId:wal.processId,recordedAt:wal.recordedAt,accepted:wal.accepted===!0?!0:void 0,declaredFiles:wal.context?.declaredFiles??null,expectedGeneration:wal.expectedGeneration,ownedInProcess:liveDispatches.has(dispatchKey(directory,taskId,wal.transitionId)),ownedByLiveForeignPid:wal.processId!==process.pid&&isProcessAlive3(wal.processId)})}catch{states.push({taskId,state:"unreadable",ownedInProcess:!1,ownedByLiveForeignPid:!1})}}return{states,truncated:matching.length>MAX_SETTLEMENT_WAL_SCAN}}async function recoverStaleCoderSettlements(directory,options){let{states:listed,truncated}=await listCoderSettlementWalStates(directory),filter=options?.taskIds?new Set(options.taskIds):void 0,results=[];for(let entry of listed){if(filter&&!filter.has(entry.taskId))continue;if(entry.state==="unreadable"){results.push({taskId:entry.taskId,outcome:"unreadable_wal"});continue}if(entry.state==="ABORTED"||entry.state==="COMMITTED"){try{await _internals103.recoverCoderSettlement(directory,entry.taskId),results.push({taskId:entry.taskId,outcome:"already_terminal",state:entry.state})}catch(error93){results.push({taskId:entry.taskId,outcome:"error",message:error93 instanceof Error?error93.message:String(error93)})}continue}if(entry.ownedInProcess&&options?.force!==!0){results.push({taskId:entry.taskId,outcome:"owned_in_process",transitionId:entry.transitionId??""});continue}if(entry.ownedByLiveForeignPid){results.push({taskId:entry.taskId,outcome:"owned_by_live_foreign_pid",processId:entry.processId??-1});continue}let forced=entry.ownedInProcess&&options?.force===!0;if(forced&&entry.transitionId)releaseCoderDispatchOwnership(directory,entry.taskId,entry.transitionId),await appendSettlementEvent(directory,"recovered",{taskId:entry.taskId,transitionId:entry.transitionId,actor:"swarm-recovery"},{forced:!0,stage:"ownership-release"});try{let recovered=await _internals103.recoverCoderSettlement(directory,entry.taskId);if(recovered===null){let current=null;try{current=await readWal3(walPath(directory,entry.taskId),entry.taskId)}catch{current=null}if(current&&(current.state==="COMMITTED"||current.state==="ABORTED")){results.push({taskId:entry.taskId,outcome:"already_terminal",state:current.state});continue}results.push({taskId:entry.taskId,outcome:"error",message:"settlement WAL disappeared during recovery"});continue}await appendSettlementEvent(directory,"recovered",{taskId:entry.taskId,transitionId:entry.transitionId??"",actor:"swarm-recovery"},{forced,accepted:recovered.accepted,previousTransitionId:entry.transitionId??"",previousState:entry.state,...typeof entry.expectedGeneration==="number"?{expectedGeneration:entry.expectedGeneration}:{}}),results.push({taskId:entry.taskId,outcome:"recovered",accepted:recovered.accepted,forced})}catch(error93){let message=error93 instanceof Error?error93.message:String(error93);await appendSettlementEvent(directory,"recovery-failed",{taskId:entry.taskId,transitionId:entry.transitionId??"",actor:"swarm-recovery"},{forced,error:message}),results.push({taskId:entry.taskId,outcome:"error",message})}}return{results,truncated}}var LIVE_DISPATCHES_SYMBOL,globalRegistry3,liveDispatches,runtimeId,MAX_LIVE_DISPATCHES=512,HISTORICAL_ORPHAN_ADVISORY_COOLDOWN_MS=600000,MAX_HISTORICAL_ORPHAN_ADVISORIES=256,historicalOrphanAdvisoryAt,MAX_SETTLEMENT_WAL_SCAN=200,SETTLEMENT_WAL_FILE_PATTERN,_internals103;var init_coder_settlement=__esm(()=>{init_workspace_snapshot();init_core_events();init_gate_evidence();init_gate_evidence_classification();init_worktree_provisioning_owner();init_utils2();init_file_locks();init_path_identity();init_warning_buffer();init_canonical_root();init_git_executable();init_logger();init_merge2();init_settlement_artifact_lifecycle();init_settlement_source_recovery();init_workflow_wal_file();LIVE_DISPATCHES_SYMBOL=Symbol.for("opencode-swarm.workflow.coder-settlement.live-dispatches"),globalRegistry3=globalThis;if(!globalRegistry3[LIVE_DISPATCHES_SYMBOL])globalRegistry3[LIVE_DISPATCHES_SYMBOL]=new Set;liveDispatches=globalRegistry3[LIVE_DISPATCHES_SYMBOL],runtimeId=randomUUID15();historicalOrphanAdvisoryAt=new Map;SETTLEMENT_WAL_FILE_PATTERN=/^[\w.\-:]+\.json$/;_internals103={liveDispatches,withSettlementArtifactLifecycle,validateSettlementLane,removeWorktreeProvisioningOwner,branchExists:probeBranchExists,recoverCoderSettlement,historicalOrphanAdvisoryAt}});var exports_pending_delegations={};__export(exports_pending_delegations,{writeDelegationFallback:()=>writeDelegationFallback,updateCoderSettlement:()=>updateCoderSettlement,sweepStaleDelegations:()=>sweepStaleDelegations,supersedeStaleLivenessVerdictLane:()=>supersedeStaleLivenessVerdictLane,scanDelegationsForRecovery:()=>scanDelegationsForRecovery,scanDelegationFallbacksForRecovery:()=>scanDelegationFallbacksForRecovery,scanBackgroundCoderReservationsForAdmission:()=>scanBackgroundCoderReservationsForAdmission,reserveBackgroundCoderSlot:()=>reserveBackgroundCoderSlot,replacePendingBackgroundAdvisory:()=>replacePendingBackgroundAdvisory,removeDelegationFallback:()=>removeDelegationFallback,releasePreparedBackgroundAdvisories:()=>releasePreparedBackgroundAdvisories,releaseBackgroundCoderReservation:()=>releaseBackgroundCoderReservation,registerStaleSweepObserver:()=>registerStaleSweepObserver,registerLegacyCoderSettlementReconciler:()=>registerLegacyCoderSettlementReconciler,recordedPrReviewResultReceipt:()=>recordedPrReviewResultReceipt,recordPendingDelegationDetailed:()=>recordPendingDelegationDetailed,recordPendingDelegation:()=>recordPendingDelegation,recordDelegationIngestionResult:()=>recordDelegationIngestionResult,readDelegationsDetailed:()=>readDelegationsDetailed,readDelegations:()=>readDelegations,readDelegationFallback:()=>readDelegationFallback,putPendingBackgroundAdvisory:()=>putPendingBackgroundAdvisory,publishPrReviewResultReceipt:()=>publishPrReviewResultReceipt,promoteDelegationFallback:()=>promoteDelegationFallback,preparePendingBackgroundAdvisories:()=>preparePendingBackgroundAdvisories,normalizeBackgroundObservedFiles:()=>normalizeBackgroundObservedFiles,markLegacyCoderSettlementTransferPending:()=>markLegacyCoderSettlementTransferPending,maintainBackgroundDelegations:()=>maintainBackgroundDelegations,listDelegationFallbacks:()=>listDelegationFallbacks,isUnsettledWorktreeOwner:()=>isUnsettledWorktreeOwner,isTerminalDelegationStatus:()=>isTerminalDelegationStatus,findOpenAsyncLaneBatches:()=>findOpenAsyncLaneBatches,findDelegationForCompletion:()=>findDelegationForCompletion,findByCorrelationIdDetailed:()=>findByCorrelationIdDetailed,findByCorrelationId:()=>findByCorrelationId,findByBatchIdDetailed:()=>findByBatchIdDetailed,findByBatchId:()=>findByBatchId,compactBackgroundDelegations:()=>compactBackgroundDelegations,clearLegacyCoderSettlementTransferPending:()=>clearLegacyCoderSettlementTransferPending,claimTerminalResult:()=>claimTerminalResult,claimDelegationIngestion:()=>claimDelegationIngestion,claimCoderSettlement:()=>claimCoderSettlement,buildTypedDelegationTerminal:()=>buildTypedDelegationTerminal,buildPromptSnapshot:()=>buildPromptSnapshot,buildBackgroundCompletionEventId:()=>buildBackgroundCompletionEventId,buildBackgroundCoderReservationId:()=>buildBackgroundCoderReservationId,bindBackgroundCoderReservation:()=>bindBackgroundCoderReservation,appendDelegationTransition:()=>appendDelegationTransition,acknowledgeObservedBackgroundAdvisories:()=>acknowledgeObservedBackgroundAdvisories,_internals:()=>_internals104,_checkpointInternals:()=>_checkpointInternals,TOMBSTONE_MIN_AGE_MS:()=>TOMBSTONE_MIN_AGE_MS,MAX_RECOVERY_LEDGER_BYTES:()=>MAX_RECOVERY_LEDGER_BYTES,MAX_LIVE_BACKGROUND_FALLBACKS:()=>MAX_LIVE_BACKGROUND_FALLBACKS,MAX_LIVE_BACKGROUND_CODER_RESERVATIONS:()=>MAX_LIVE_BACKGROUND_CODER_RESERVATIONS,MAX_CHECKPOINT_RECORDS:()=>MAX_CHECKPOINT_RECORDS,MAX_CHECKPOINT_BYTES:()=>MAX_CHECKPOINT_BYTES,MAX_BACKGROUND_OBSERVED_FILES:()=>MAX_BACKGROUND_OBSERVED_FILES,MAX_BACKGROUND_ADVISORY_CHARS:()=>MAX_BACKGROUND_ADVISORY_CHARS,LEGACY_CODER_SETTLEMENT_PENDING_ADVISORY_MARKER:()=>LEGACY_CODER_SETTLEMENT_PENDING_ADVISORY_MARKER,DELEGATION_READ_RETRY_DELAY_MS:()=>DELEGATION_READ_RETRY_DELAY_MS,DELEGATION_COMPACTION_LOW_WATER_BYTES:()=>DELEGATION_COMPACTION_LOW_WATER_BYTES,DELEGATION_COMPACTION_HIGH_WATER_BYTES:()=>DELEGATION_COMPACTION_HIGH_WATER_BYTES,DEFAULT_SWEEPABLE_DELEGATION_STATUSES:()=>DEFAULT_SWEEPABLE_DELEGATION_STATUSES,DEFAULT_STALE_DELEGATION_TIMEOUT_MS:()=>DEFAULT_STALE_DELEGATION_TIMEOUT_MS,BACKGROUND_INGESTION_LEASE_MS:()=>BACKGROUND_INGESTION_LEASE_MS,BACKGROUND_DELEGATION_FALLBACK_DIR:()=>BACKGROUND_DELEGATION_FALLBACK_DIR,BACKGROUND_DELEGATIONS_MANIFEST_FILE:()=>BACKGROUND_DELEGATIONS_MANIFEST_FILE,BACKGROUND_DELEGATIONS_FILE:()=>BACKGROUND_DELEGATIONS_FILE,BACKGROUND_DELEGATIONS_CHECKPOINT_FILE:()=>BACKGROUND_DELEGATIONS_CHECKPOINT_FILE,BACKGROUND_CODER_RESERVATION_LEASE_MS:()=>BACKGROUND_CODER_RESERVATION_LEASE_MS,BACKGROUND_CODER_RESERVATION_LEASE_MIN_MS:()=>BACKGROUND_CODER_RESERVATION_LEASE_MIN_MS,BACKGROUND_CODER_RESERVATION_LEASE_MAX_MS:()=>BACKGROUND_CODER_RESERVATION_LEASE_MAX_MS,BACKGROUND_CODER_RESERVATIONS_FILE:()=>BACKGROUND_CODER_RESERVATIONS_FILE});import{createHash as createHash52}from"node:crypto";import*as fs71 from"node:fs";import*as path112 from"node:path";import{isDeepStrictEqual}from"node:util";function clampReservationLeaseMs(leaseMs){if(leaseMs===void 0)return BACKGROUND_CODER_RESERVATION_LEASE_MS;if(!Number.isFinite(leaseMs))return BACKGROUND_CODER_RESERVATION_LEASE_MS;return Math.min(Math.max(Math.round(leaseMs),BACKGROUND_CODER_RESERVATION_LEASE_MIN_MS),BACKGROUND_CODER_RESERVATION_LEASE_MAX_MS)}function isValidReservationGeneration(generation){return generation===void 0||Number.isInteger(generation)&&generation>=1&&generation<=MAX_BACKGROUND_DELEGATION_GENERATION}function storePath5(directory){return validateSwarmPath(directory,BACKGROUND_DELEGATIONS_FILE)}function checkpointPath2(directory){return validateSwarmPath(directory,BACKGROUND_DELEGATIONS_CHECKPOINT_FILE)}function manifestPath(directory){return validateSwarmPath(directory,BACKGROUND_DELEGATIONS_MANIFEST_FILE)}function importedShadowPath2(filePath){return`${filePath}.imported`}function projectionMarkerPath2(filePath){return`${filePath}.sqlite-projection`}function coordinationReservationLeaseKey(reservation){return{namespace:RESERVATION_LEASE_NAMESPACE,entityKey:reservation.reservationId,generation:reservation.generation??1,ownerToken:reservation.reservationId}}function releaseReservationLeaseIfPresent(directory,reservation){let leaseKey=coordinationReservationLeaseKey(reservation),existing=getCoordinationLease(directory,leaseKey.namespace,leaseKey.entityKey);if(!existing)return;if(existing.generation!==leaseKey.generation||existing.ownerToken!==leaseKey.ownerToken||!releaseCoordinationLease(directory,leaseKey.namespace,leaseKey.entityKey,leaseKey.generation,leaseKey.ownerToken))throw Error(`reservation lease authority mismatch for ${reservation.reservationId}`)}function coordinationRowsToDelegations(directory){if(!projectDbExists(directory))return null;try{let rows=listCoordinationStates(directory,DELEGATION_COORDINATION_NAMESPACE,MAX_COORDINATION_STATE_LIST_ROWS);if(rows.length>=MAX_COORDINATION_STATE_LIST_ROWS)throw Error(`delegation coordination read reached its ${MAX_COORDINATION_STATE_LIST_ROWS}-row safety bound`);return rows.map((row)=>{let parsed=RecordSchema2.safeParse(JSON.parse(row.payload));if(!parsed.success)throw Error(`delegation coordination row failed schema validation for ${row.entityKey}`);if(parsed.data.correlationId!==row.entityKey)throw Error(`delegation coordination row authority binding mismatch: payload correlationId does not equal entity key ${row.entityKey}`);if(Math.max(parsed.data.generation??1,1)!==row.generation)throw Error(`delegation coordination row authority binding mismatch: payload generation does not equal row generation for ${row.entityKey}`);if(parsed.data.status!==row.status)throw Error(`delegation coordination row authority binding mismatch: payload status does not equal row status for ${row.entityKey}`);return parsed.data}).sort((left,right)=>left.createdAt===right.createdAt?left.correlationId.localeCompare(right.correlationId):left.createdAt-right.createdAt)}catch(error93){return recordLedgerUncertainty(directory,error93 instanceof Error?error93.message:String(error93),"coordination-read"),null}}function archiveShadowFileBestEffort2(filePath){if(!fs71.existsSync(filePath))return;let importedPath=importedShadowPath2(filePath);try{if(fs71.existsSync(importedPath))return;fs71.renameSync(filePath,importedPath)}catch(error93){warn(`[background] shadow archive failed for ${path112.basename(filePath)}: ${error93 instanceof Error?error93.message:String(error93)}`)}}function writeDelegationShadowProjection(directory,records){ensureSwarmDir3(directory);let payload=records.map((record3)=>JSON.stringify(record3)).join(`
|
|
1274
1274
|
`)+(records.length>0?`
|
|
1275
1275
|
`:"");fs71.writeFileSync(storePath5(directory),payload,"utf-8"),fs71.writeFileSync(projectionMarkerPath2(storePath5(directory)),"","utf-8")}function loadLegacyDelegationsStrict(directory){let load=loadFoldedState(directory,{strict:!0});if(load.status==="uncertain")return recordLedgerUncertainty(directory,load.reason,"legacy-import",load.repairHint),null;return[...load.records.values()]}function delegationShadowMatches(directory,records){let load=loadFoldedState(directory,{strict:!1});if(load.status==="uncertain")return!1;return isDeepStrictEqual([...load.records.values()].sort((left,right)=>left.correlationId.localeCompare(right.correlationId)),[...records].sort((left,right)=>left.correlationId.localeCompare(right.correlationId)))}function delegationShadowDigest(directory,records){let hash4=createHash52("sha256");hash4.update(JSON.stringify(records));for(let filePath of[storePath5(directory),checkpointPath2(directory),manifestPath(directory)]){if(!fs71.existsSync(filePath))continue;hash4.update(path112.basename(filePath)),hash4.update(fs71.readFileSync(filePath))}return hash4.digest("hex")}function ensureDelegationCoordinationImported(directory,createIfNeeded){let dbExists=projectDbExists(directory);if(!createIfNeeded&&!dbExists)return"absent";let existing=dbExists?coordinationRowsToDelegations(directory):null;if(dbExists&&existing===null)return"uncertain";if(existing&&existing.length>0){if(createIfNeeded)return"ready";if(!(fs71.existsSync(projectionMarkerPath2(storePath5(directory)))&&delegationShadowMatches(directory,existing))){for(let filePath of[storePath5(directory),checkpointPath2(directory),manifestPath(directory)])archiveShadowFileBestEffort2(filePath);writeDelegationShadowProjection(directory,existing)}return"ready"}let legacyRecords=loadLegacyDelegationsStrict(directory);if(legacyRecords===null)return"uncertain";if(legacyRecords.length===0&&!fs71.existsSync(storePath5(directory))&&!fs71.existsSync(checkpointPath2(directory))&&!fs71.existsSync(manifestPath(directory))){if(!createIfNeeded)return"absent";return withCoordinationTransaction(directory,()=>{return}),"ready"}if(importCoordinationOnce(directory,{source:BACKGROUND_DELEGATIONS_FILE,sourceDigest:delegationShadowDigest(directory,legacyRecords),rowCount:legacyRecords.length,emptyNamespace:DELEGATION_COORDINATION_NAMESPACE},()=>{for(let record3 of legacyRecords){let result=transitionCoordinationState(directory,{namespace:DELEGATION_COORDINATION_NAMESPACE,entityKey:record3.correlationId,expectedRevision:null,generation:Math.max(record3.generation??1,1),status:record3.status,payload:JSON.stringify(record3)});if(result.outcome!=="applied")throw Error(`delegation import failed for ${record3.correlationId}: ${result.outcome}`)}})==="imported")archiveShadowFileBestEffort2(storePath5(directory)),archiveShadowFileBestEffort2(checkpointPath2(directory)),archiveShadowFileBestEffort2(manifestPath(directory)),writeDelegationShadowProjection(directory,legacyRecords);return"ready"}function pruneCoordinationDelegationRows(directory){let terminals=listCoordinationStates(directory,DELEGATION_COORDINATION_NAMESPACE,MAX_COORDINATION_STATE_LIST_ROWS).filter((row)=>!isCheckpointLiveRecord(JSON.parse(row.payload))).sort((left,right)=>left.updatedAt.localeCompare(right.updatedAt)),excessTerminals=Math.max(0,terminals.length-MAX_COORDINATION_TERMINAL_ROWS);for(let row of terminals.slice(0,excessTerminals))deleteCoordinationState(directory,DELEGATION_COORDINATION_NAMESPACE,row.entityKey,row.revision);if(listCoordinationStates(directory,DELEGATION_COORDINATION_NAMESPACE,MAX_COORDINATION_STATE_LIST_ROWS).length>=MAX_COORDINATION_DELEGATION_ROWS)throw Error(`delegation coordination state reached its ${MAX_COORDINATION_DELEGATION_ROWS}-row safety bound`)}function portableSyncSleep(ms){try{Atomics.wait(new Int32Array(new SharedArrayBuffer(4)),0,0,ms)}catch{let start=Date.now();while(Date.now()-start<ms);}}function writeDurableFileSync(target,contents){let tmp=`${target}.tmp-${process.pid}-${Math.random().toString(36).slice(2,10)}`;try{let fd=fs71.openSync(tmp,"w");try{if(typeof contents==="string")fs71.writeSync(fd,contents);else fs71.writeSync(fd,contents,0,contents.length);fs71.fsyncSync(fd)}finally{fs71.closeSync(fd)}_checkpointInternals.renameWithRetry(tmp,target)}catch(err){try{fs71.rmSync(tmp,{force:!0})}catch{}throw err}try{let dfd=fs71.openSync(path112.dirname(target),"r");try{fs71.fsyncSync(dfd)}finally{fs71.closeSync(dfd)}}catch{}}function readJsonFileWithRetry(target){let raw;try{raw=fs71.readFileSync(target,"utf-8")}catch(err){let code=err.code;if(code==="ENOENT")return{status:"absent"};return{status:"invalid",reason:`unreadable (${code??"unknown error"})`}}try{return{status:"ok",value:JSON.parse(raw)}}catch(err){return{status:"invalid",reason:`malformed JSON (${err instanceof Error?err.message:String(err)})`}}}function readDelegationManifest(directory){let read=readJsonFileWithRetry(manifestPath(directory));if(read.status==="absent")return{kind:"absent"};if(read.status==="invalid")return{kind:"invalid",reason:read.reason};let parsed=ManifestSchema.safeParse(read.value);if(!parsed.success)return{kind:"invalid",reason:"manifest fails schema validation"};return{kind:"ok",manifest:parsed.data}}function readDelegationCheckpoint(directory){let bytes=0;try{bytes=fs71.statSync(checkpointPath2(directory)).size}catch{}if(bytes>MAX_CHECKPOINT_BYTES)return{kind:"invalid",reason:`checkpoint exceeds the ${MAX_CHECKPOINT_BYTES}-byte bound`};let read=readJsonFileWithRetry(checkpointPath2(directory));if(read.status==="absent")return{kind:"absent"};if(read.status==="invalid")return{kind:"invalid",reason:read.reason};let parsed=CheckpointSchema2.safeParse(read.value);if(!parsed.success)return{kind:"invalid",reason:"checkpoint fails schema validation"};return{kind:"ok",checkpoint:parsed.data,bytes}}function sha256Hex(data){return createHash52("sha256").update(data).digest("hex")}function checkpointPayloadChecksum(checkpoint2){return sha256Hex(JSON.stringify([checkpoint2.schemaVersion,checkpoint2.sequence,checkpoint2.writerId,checkpoint2.rootPath,checkpoint2.createdAt,checkpoint2.cutLedgerBytes,checkpoint2.cutLedgerDigest,checkpoint2.records,checkpoint2.closed,checkpoint2.audit]))}function loadFoldedState(directory,options){let manifestRead=readDelegationManifest(directory);if(manifestRead.kind==="invalid")return{status:"uncertain",reason:`background delegation manifest is invalid: ${manifestRead.reason}`,repairHint:CHECKPOINT_RESET_HINT};if(manifestRead.kind==="absent")return loadLegacyLedger(directory,options.strict);let manifest=manifestRead.manifest;if(!sameProjectRoot(manifest.rootPath,directory))return{status:"uncertain",reason:"background delegation checkpoint is bound to a different project root",repairHint:CHECKPOINT_REBIND_HINT};let checkpointRead=readDelegationCheckpoint(directory);if(checkpointRead.kind==="invalid"||checkpointRead.kind==="absent")return{status:"uncertain",reason:`background delegation checkpoint is invalid${checkpointRead.kind==="invalid"?`: ${checkpointRead.reason}`:" (file missing)"} while a manifest is published`,repairHint:CHECKPOINT_RESET_HINT};let checkpoint2=checkpointRead.checkpoint;if(checkpoint2.sequence!==manifest.sequence&&checkpoint2.sequence!==manifest.sequence+1)return{status:"uncertain",reason:`background delegation checkpoint/manifest sequence mismatch (checkpoint ${checkpoint2.sequence}, manifest ${manifest.sequence})`,repairHint:CHECKPOINT_RESET_HINT};if(checkpoint2.sequence===manifest.sequence&&manifest.checkpointChecksum!==checkpoint2.payloadChecksum)return{status:"uncertain",reason:"background delegation manifest checksum does not match its checkpoint",repairHint:CHECKPOINT_RESET_HINT};if(checkpointPayloadChecksum(checkpoint2)!==checkpoint2.payloadChecksum)return{status:"uncertain",reason:"background delegation checkpoint payload checksum mismatch",repairHint:CHECKPOINT_RESET_HINT};let stat12;try{stat12=fs71.statSync(storePath5(directory))}catch(error93){return{status:"uncertain",reason:`background delegation ledger metadata is unreadable: ${error93 instanceof Error?error93.message:String(error93)}`}}let tail,mode;if(stat12.size>=checkpoint2.cutLedgerBytes&&checkpoint2.cutLedgerBytes>0){let prefix=readLedgerRegion(directory,0,checkpoint2.cutLedgerBytes);if(sha256Hex(prefix)===checkpoint2.cutLedgerDigest){let suffixBytes=stat12.size-checkpoint2.cutLedgerBytes;if(suffixBytes>MAX_RECOVERY_LEDGER_BYTES)return{status:"uncertain",reason:`background delegation ledger changed beyond the ${MAX_RECOVERY_LEDGER_BYTES}-byte recovery bound`};tail=suffixBytes===0?Buffer.alloc(0):readLedgerRegion(directory,checkpoint2.cutLedgerBytes,suffixBytes),mode="checkpoint+ledger-suffix"}else tail=readBoundedRecentLedgerWindow(directory,stat12.size),mode="checkpoint+tail"}else tail=readBoundedRecentLedgerWindow(directory,stat12.size),mode="checkpoint+tail";let records=new Map;for(let record3 of checkpoint2.records)records.set(record3.correlationId,record3);for(let summary of checkpoint2.closed)records.set(summary.correlationId,summary);let lenientSkips=emptyLenientLedgerSkipCounts(),foldError=foldLedgerTail(records,tail,options.strict,checkpoint2,lenientSkips);if(foldError)return{status:"uncertain",reason:foldError};if(!options.strict)recordLenientLedgerSkips(directory,mode,lenientSkips);return{status:"ok",mode,records,manifest,checkpoint:checkpoint2}}function readLedgerRegion(directory,offset,length){let fd=fs71.openSync(storePath5(directory),"r");try{let buffer=Buffer.alloc(length),read=0;while(read<length){let n=fs71.readSync(fd,buffer,read,length-read,offset+read);if(n<=0)break;read+=n}return read===length?buffer:buffer.subarray(0,read)}finally{fs71.closeSync(fd)}}function readBoundedRecentLedgerWindow(directory,size){if(size===0)return Buffer.alloc(0);if(size<=MAX_RECOVERY_LEDGER_BYTES)return readLedgerRegion(directory,0,size);let window2=readLedgerRegion(directory,size-MAX_RECOVERY_LEDGER_BYTES,MAX_RECOVERY_LEDGER_BYTES),firstNewline=window2.indexOf(10);return firstNewline===-1?Buffer.alloc(0):window2.subarray(firstNewline+1)}function foldLedgerTail(records,tail,strict,checkpoint2,lenientSkips){let lineNumber=0;for(let line of tail.toString("utf-8").split(`
|
|
@@ -3692,23 +3692,38 @@ ${freshPreamble}`:`<curator_briefing>${truncatedBriefing}</curator_briefing>`}}c
|
|
|
3692
3692
|
`);let criticalIds=filteredEntries.filter((e)=>renderedDirectiveIdSet.has(e.id)).filter((e)=>e.directive_priority==="critical"&&isActiveStatus(e.status)).map((e)=>e.id);if(cachedShownIds.length>0){let byId=new Map(filteredEntries.map((entry)=>[entry.id,entry])),cohortId=await _internals192.ensureCohortIdCached(directory,sessionId),sourceLinkId=_internals192.readLinkPointer(directory)?.linkId,architectPhaseId=extractPhaseIdFromLabel(retrievalCtx.currentPhase),membership=await _internals192.commitDisplayedMembership(directory,{trace_id:search.trace_id,session_id:sessionId,exposure_kind:"architect_directive",phase:retrievalCtx.currentPhase,...architectPhaseId!==void 0?{phase_id:architectPhaseId}:{},task_id:retrievalCtx.taskId,agent:"architect",cohort_id:cohortId,source_link_id:sourceLinkId,grace_days:config3.receipt_close_grace_days,entries:cachedShownIds.map((id,index)=>({entry_id:id,critical:criticalIds.includes(id),rank:index+1,score:byId.get(id)?.finalScore}))});if(!membership.ok||membership.memberships.some((item)=>item.terminal)){if(cachedInjectionText="",cachedShownIds=[],cachedCriticalIds=[],sessionId)clearCriticalShownIds(sessionId);recordInjectionSkip(directory,membership.ok?"terminal_trace_reuse":membership.code,{agent:agentName,sessionId,phase:currentPhase,extra:{trace_id:search.trace_id}});return}}injectKnowledgeMessage(output,cachedInjectionText,sessionId);let sessionID=sessionId;if(sessionID)if(cachedCriticalIds=criticalIds,criticalIds.length>0)setCriticalShownIds(sessionID,{ids:criticalIds,phase:`Phase ${currentPhase}`,generatedAt:Date.now()});else clearCriticalShownIds(sessionID);if(cachedShownIds.length>0){let phaseLabel=`Phase ${currentPhase}`,scoreById=new Map(filteredEntries.map((e)=>[e.id,e.finalScore])),ranks={},scores={};cachedShownIds.forEach((id,idx)=>{ranks[id]=idx+1,scores[id]=scoreById.get(id)??0}),await _internals192.recordKnowledgeEvent(directory,{type:"retrieved",trace_id:search.trace_id,session_id:sessionId,phase:retrievalCtx.currentPhase,task_id:retrievalCtx.taskId,agent:"architect",query:retrievalCtx.lastUserMessage??retrievalCtx.currentPhase??"",retrieval_mode:"auto_injection",result_ids:cachedShownIds,ranks,scores}),_internals192.recordKnowledgeShown(directory,cachedShownIds,{phase:phaseLabel,tool:retrievalCtx.currentTool,action:retrievalCtx.currentAction,targetAgent:retrievalCtx.targetAgent,taskId:retrievalCtx.taskId}).catch(()=>{}),_internals192.recordLessonsShown(directory,cachedShownIds,phaseLabel).catch(()=>{}),_internals192.confirmEntriesPhase(directory,cachedShownIds,currentPhase,projectName).catch(()=>{})}})}var INJECTION_SENTINEL,defaultSearchKnowledge,sanitizeLessonForContext,DELEGATE_DIRECTIVE_BLOCK_TAG="<delegate_knowledge_directives>",DELEGATE_INJECT_HARD_CHAR_CAP=2000,knowledgeGeneration=0,DELEGATED_AGENTS,DELEGATE_DEFAULT_TOOLS,DIRECTIVE_PRIORITY_RANK,_internals192;var init_knowledge_injector=__esm(()=>{init_reviewer_directive_compliance();init_schema();init_manager();init_injection_budget();init_run_memory();init_state();init_logger();init_cohort_cache();init_curator_drift();init_extractors();init_host_boundary();init_knowledge_application();init_knowledge_escalator();init_knowledge_events();init_knowledge_link();init_knowledge_reader();init_knowledge_receipt_ledger();init_knowledge_store();init_knowledge_types();init_model_limits();init_phase_directives();init_search_knowledge();init_system_guidance_carrier();init_utils2();INJECTION_SENTINEL=`${String.fromCharCode(8204)}[[KNOWLEDGE-INJECTED]]`,defaultSearchKnowledge=searchKnowledge;sanitizeLessonForContext=sanitizeContextText;DELEGATED_AGENTS=new Set(["coder","reviewer","test_engineer","sme","docs","designer","critic","curator"]);DELEGATE_DEFAULT_TOOLS={coder:["edit","write","patch","bash"],reviewer:["read","grep","glob"],test_engineer:["edit","write","bash","read"],sme:["read","grep","glob","webfetch"],docs:["read","edit","write","grep"],designer:["read","write","edit"],critic:["read","grep","glob"],curator:["read","grep","glob"]};DIRECTIVE_PRIORITY_RANK={critical:0,high:1,medium:2,low:3};_internals192={searchKnowledge,recordKnowledgeEvent,recordKnowledgeShown,readRecentEscalations,buildEscalationBriefing,recordLessonsShown,confirmEntriesPhase,commitDisplayedMembership,commitEmptyRetrieval,queryLiveMemberships,ensureCohortIdCached,readLinkPointer}});import{createHash as createHash91}from"node:crypto";import{existsSync as existsSync118,mkdirSync as mkdirSync71,mkdtempSync as mkdtempSync5,rmSync as rmSync30,statSync as statSync77,writeFileSync as writeFileSync40}from"node:fs";import{tmpdir as tmpdir17}from"node:os";import path235 from"node:path";function pairingConfig(injectCharBudget){return{enabled:!0,swarm_max_entries:100,hive_max_entries:200,auto_promote_days:90,max_inject_count:5,dedup_threshold:0.6,scope_filter:["global"],hive_enabled:!1,rejected_max_entries:20,validation_enabled:!0,evergreen_confidence:0.9,evergreen_utility:0.8,low_utility_threshold:0.3,min_retrievals_for_utility:3,schema_version:1,inject_char_budget:injectCharBudget}}function makeMessages(sessionId){return swarmState.activeAgent.set(sessionId,"architect"),{messages:[{info:{role:"user",sessionID:sessionId},parts:[{type:"text",text:"continue the current task"}]}]}}function injectedText(output){return output.messages.filter((m)=>m.parts?.some((p)=>p.text?.includes("[[KNOWLEDGE-INJECTED]]"))).map((m)=>m.parts?.map((p)=>p.text??"").join("")??"").join(`
|
|
3693
3693
|
`)}function selectedLabelsFromRenderedText(text){let labels=new Set;for(let match of text.matchAll(SENTINEL_PATTERN))labels.add(match[1]);return[...labels].sort()}async function materializeTaskStore(projectDir,task2){mkdirSync71(path235.join(projectDir,".swarm"),{recursive:!0});let storePath6=resolveSwarmKnowledgePath(projectDir);for(let record3 of task2.records){let lesson=`__PAIRING_LABEL_${record3.label}__ ${record3.lesson}`.slice(0,280),entry={id:createHash91("sha1").update(`${task2.id}:${record3.label}`).digest("hex"),tier:"swarm",lesson,category:"process",tags:record3.tags??[],scope:"global",confidence:0.85,status:"established",confirmed_by:[],retrieval_outcomes:{applied_count:0,succeeded_after_count:0,failed_after_count:0},schema_version:1,created_at:FIXED_EPOCH,updated_at:FIXED_EPOCH,project_name:"instruction-pairing",...record3.directivePriority?{directive_priority:record3.directivePriority}:{}};await appendKnowledge(storePath6,entry)}}function eventsFileSize(projectDir){let eventsPath=path235.join(projectDir,".swarm","knowledge-events.jsonl");try{return existsSync118(eventsPath)?statSync77(eventsPath).size:-1}catch{return-1}}async function measureInvocation(hook,sessionId,candidateHit){let root=sessionTempRoot.get(sessionId),before=root?eventsFileSize(root):-1,output=makeMessages(sessionId),started=performance.now();await hook({},output);let latencyMs=performance.now()-started,text=injectedText(output),cacheReads=0,cacheReadsBasis="cold-instance-by-construction";if(candidateHit&&root){let after=eventsFileSize(root);if(before>=0&&after>=0)cacheReads=after===before?1:0,cacheReadsBasis="events-file-delta";else cacheReads=1,cacheReadsBasis="protocol-assumed"}return{latencyMs,cacheReads,cacheReadsBasis,renderedText:text}}async function runTaskPairing(task2,injectCharBudget){let root=mkdtempSync5(path235.join(tmpdir17(),`pairing-${task2.id}-`)),sessionId=`pairing-${task2.id}`;sessionTempRoot.set(sessionId,root);try{await materializeTaskStore(root,task2);let config3=pairingConfig(injectCharBudget),uncachedHook=createKnowledgeInjectorHook(root,config3,{},void 0),uncached=await measureInvocation(uncachedHook,sessionId,!1),cachedHook=createKnowledgeInjectorHook(root,config3,{},void 0);await measureInvocation(cachedHook,sessionId,!1);let cached3=await measureInvocation(cachedHook,sessionId,!0),uncachedLabels=selectedLabelsFromRenderedText(uncached.renderedText),cachedLabels=selectedLabelsFromRenderedText(cached3.renderedText),expectedHits=(labels)=>task2.expectedLabels.filter((label)=>labels.includes(label)).length,cachedSet=new Set(cachedLabels),uncachedSet=new Set(uncachedLabels),qualityOutcome="identical";if(cachedSet.size!==uncachedSet.size||[...cachedSet].some((label)=>!uncachedSet.has(label)))qualityOutcome=expectedHits(cachedLabels)>expectedHits(uncachedLabels)?"improved":"degraded";return{task:{id:task2.id},arm_cached:{latency_ms:Math.max(0,cached3.latencyMs),cache_reads:cached3.cacheReads,cache_reads_basis:cached3.cacheReadsBasis,rendered_prefix_chars:cached3.renderedText.length,uncached_cost:Math.max(0,uncached.latencyMs),quality:{expected_hit_count:expectedHits(cachedLabels),expected_total:task2.expectedLabels.length,selected_labels:cachedLabels}},arm_uncached:{latency_ms:Math.max(0,uncached.latencyMs),cache_reads:uncached.cacheReads,cache_reads_basis:uncached.cacheReadsBasis,rendered_prefix_chars:uncached.renderedText.length,uncached_cost:Math.max(0,uncached.latencyMs),quality:{expected_hit_count:expectedHits(uncachedLabels),expected_total:task2.expectedLabels.length,selected_labels:uncachedLabels}},quality_outcome:qualityOutcome,negative_result:qualityOutcome!=="improved"}}finally{swarmState.activeAgent.delete(sessionId),sessionTempRoot.delete(sessionId),rmSync30(root,{recursive:!0,force:!0})}}async function verifyCacheInvalidation(){let root=mkdtempSync5(path235.join(tmpdir17(),"pairing-invalidation-")),sessionId="pairing-invalidation";sessionTempRoot.set("pairing-invalidation",root);try{mkdirSync71(path235.join(root,".swarm"),{recursive:!0});let briefingPath=path235.join(root,".swarm","curator-briefing.md");writeFileSync40(briefingPath,"PAIRING-BRIEFING-v1 original","utf8"),invalidateCachedArtifact(briefingPath);let hook=createKnowledgeInjectorHook(root,pairingConfig(DEFAULT_INJECT_CHAR_BUDGET));if(!(await measureInvocation(hook,"pairing-invalidation",!1)).renderedText.includes("PAIRING-BRIEFING-v1"))return{verified:!1,detail:"setup failure: prime invocation did not inject the briefing"};writeFileSync40(briefingPath,"PAIRING-BRIEFING-v2 updated","utf8"),invalidateCachedArtifact(briefingPath);let second=await measureInvocation(hook,"pairing-invalidation",!0),fresh=second.renderedText.includes("PAIRING-BRIEFING-v2")&&!second.renderedText.includes("PAIRING-BRIEFING-v1");return{verified:fresh,detail:fresh?"identical-context replay after a curator-briefing change injected the fresh instruction set":"identical-context replay after a curator-briefing change re-served the stale cached instruction set"}}finally{swarmState.activeAgent.delete("pairing-invalidation"),sessionTempRoot.delete("pairing-invalidation"),rmSync30(root,{recursive:!0,force:!0})}}function stableJson2(value){if(Array.isArray(value))return`[${value.map(stableJson2).join(",")}]`;if(value&&typeof value==="object")return`{${Object.entries(value).sort(([a],[b])=>a.localeCompare(b)).map(([key2,item])=>`${JSON.stringify(key2)}:${stableJson2(item)}`).join("")}}`;return JSON.stringify(value)}async function runInstructionSelectionPairing(options){let tasks=options.tasks??DEFAULT_INSTRUCTION_PAIRING_TASKS,injectCharBudget=options.injectCharBudget??DEFAULT_INJECT_CHAR_BUDGET,modelId=options.modelId??"offline-deterministic",pairs=[];for(let task2 of tasks)pairs.push(await runTaskPairing(task2,injectCharBudget));let cacheInvalidation=await verifyCacheInvalidation(),taskSetId=createHash91("sha256").update(stableJson2(tasks)).digest("hex"),instructionSetDigest=createHash91("sha256").update(stableJson2({task_set:taskSetId,inject_char_budget:injectCharBudget,cache_invalidation_verified:cacheInvalidation.verified})).digest("hex"),report={schema_version:1,generated_at:new Date().toISOString(),identity:{task_set_id:taskSetId,model_id:modelId,budget_chars:injectCharBudget,instruction_set_digest:instructionSetDigest},pairs,measurement:{latency_denominator:"wall-clock milliseconds of the measured hook invocation (cached arm: the identical-context replay; uncached arm: the cold regeneration)",cost_denominator:"uncached arm regeneration latency in milliseconds, reported on both arms as the paired avoided-regeneration reference; absolute values only",prefix_denominator:"characters of the injected host-renderable guidance carrier for the measured invocation"},negative_results_retained:!0,cache_invalidation:cacheInvalidation};if(options.reportPath){let dest=path235.resolve(options.directory,options.reportPath),normalizedDir=path235.resolve(options.directory)+path235.sep;if(!dest.startsWith(normalizedDir))throw Error(`reportPath must resolve inside the project directory: ${options.reportPath}`);mkdirSync71(path235.dirname(dest),{recursive:!0}),writeFileSync40(dest,`${JSON.stringify(report,null,2)}
|
|
3694
3694
|
`,"utf8")}else if(options.writeReport){let dest=path235.join(options.directory,".swarm","memory","instruction-pairing-report.json");mkdirSync71(path235.dirname(dest),{recursive:!0}),writeFileSync40(dest,`${JSON.stringify(report,null,2)}
|
|
3695
|
-
`,"utf8")}return report}var FIXED_EPOCH="2026-01-01T00:00:00.000Z",DEFAULT_INJECT_CHAR_BUDGET=4000,SENTINEL_PATTERN,DEFAULT_INSTRUCTION_PAIRING_TASKS,sessionTempRoot;var init_instruction_pairing=__esm(()=>{init_knowledge_injector();init_knowledge_store();init_state();init_swarm_artifact_cache();SENTINEL_PATTERN=/__PAIRING_LABEL_([A-Za-z0-9-]+)__/g,DEFAULT_INSTRUCTION_PAIRING_TASKS=[{id:"pairing-default-ci-triage",lastUserMessage:"Review the CI failure on the merge queue and decide whether to batch it with the earlier gate failure.",expectedLabels:["ci-failure-batching","gate-attribution"],records:[{label:"ci-failure-batching",lesson:"Batch identical CI failures from one merge-queue run before triage.",directivePriority:"high",tags:["ci","merge-queue"]},{label:"gate-attribution",lesson:"Attribute required-check failures to the exact gate, not the workflow.",directivePriority:"high",tags:["ci","attribution"]},{label:"worktree-retry-cleanup",lesson:"Remove retry worktrees once the flaky test is quarantined.",directivePriority:"medium"}]},{id:"pairing-default-instruction-budget",lastUserMessage:"The architect prompt is over budget; trim the instruction prefix before dispatching.",expectedLabels:["instruction-budget"],records:[{label:"instruction-budget",lesson:"Trim lowest-priority directives first when the injection budget is exceeded.",directivePriority:"critical"},{label:"parallel-work-check",lesson:"Check for parallel work before editing shared files.",directivePriority:"medium"}]},{id:"pairing-default-skill-hygiene",lastUserMessage:"Validate the skill edits against the mirror contract before pushing.",expectedLabels:["skill-edit-validation"],records:[{label:"skill-edit-validation",lesson:"Validate skill edits against the mirror contract before push.",directivePriority:"high",tags:["skills"]},{label:"merge-queue-readiness",lesson:"Confirm merge-queue readiness gates before promoting a branch.",directivePriority:"medium"}]}];sessionTempRoot=new Map});var MEMORY_FAMILY,MIGRATED_MEMORY_FILENAMES;var init_memory_family_manifest=__esm(()=>{MEMORY_FAMILY=[{filename:"memory.db",scope:"canonical",mergeStrategy:"sqlite-file-copy",note:"SQLite memory database (records, proposals, events, recall usage, rewards, embedding config). FTS/vec indexes travel inside as derived state."},{filename:"memories.jsonl",scope:"canonical",mergeStrategy:"append-union",note:"JSONL provider memory records (legacy/debug mode only)."},{filename:"proposals.jsonl",scope:"canonical",mergeStrategy:"append-union",note:"JSONL provider pending proposals."},{filename:"audit.jsonl",scope:"canonical",mergeStrategy:"append-union",note:"JSONL provider audit events."},{filename:"reward-events.jsonl",scope:"canonical",mergeStrategy:"append-union",note:"JSONL provider reward events."},{filename:"outcome-events.jsonl",scope:"canonical",mergeStrategy:"append-union",note:"Generation-bound memory outcome events keyed by invocation id."},{filename:"consolidation-log.jsonl",scope:"canonical",mergeStrategy:"append-union",note:"Consolidation pass idempotency log (phaseNumber-keyed)."},{filename:"backups/",scope:"derived",mergeStrategy:"skip",note:"Pre-migration source backups (rebuildable; not migrated)."},{filename:"export/",scope:"derived",mergeStrategy:"skip",note:"JSONL export artifacts (rebuildable; not migrated)."}],MIGRATED_MEMORY_FILENAMES=MEMORY_FAMILY.filter((m)=>m.mergeStrategy!=="skip").map((m)=>m.filename)});import{copyFileSync as copyFileSync5,existsSync as existsSync119,readFileSync as readFileSync97,unlinkSync as unlinkSync39}from"node:fs";import{mkdir as mkdir36,rename as rename15}from"node:fs/promises";import*as path236 from"node:path";function lockErrorCode(error93){return typeof error93==="object"&&error93!==null&&"code"in error93?String(error93.code):void 0}function makeAdmissionError(cause){if(lockErrorCode(cause)==="ELOCKED")return new MemoryMigrationLockError("contention","memory-family-migration: destination lock contention after bounded retries; retry the link or unlink command",cause);let code=lockErrorCode(cause);return new MemoryMigrationLockError("storage",`memory-family-migration: destination lock acquisition failed${code?` (${code})`:""}`,cause)}function readJsonl3(filePath){if(!existsSync119(filePath))return[];try{let content=readFileSync97(filePath,"utf-8"),out=[];for(let line of content.split(`
|
|
3696
|
-
`)){let trimmed=line.trim();if(!trimmed)continue;try{out.push(JSON.parse(trimmed))}catch{}}return out}catch{return[]}}function appendUnionById2(destination,source){let result=[...destination],
|
|
3695
|
+
`,"utf8")}return report}var FIXED_EPOCH="2026-01-01T00:00:00.000Z",DEFAULT_INJECT_CHAR_BUDGET=4000,SENTINEL_PATTERN,DEFAULT_INSTRUCTION_PAIRING_TASKS,sessionTempRoot;var init_instruction_pairing=__esm(()=>{init_knowledge_injector();init_knowledge_store();init_state();init_swarm_artifact_cache();SENTINEL_PATTERN=/__PAIRING_LABEL_([A-Za-z0-9-]+)__/g,DEFAULT_INSTRUCTION_PAIRING_TASKS=[{id:"pairing-default-ci-triage",lastUserMessage:"Review the CI failure on the merge queue and decide whether to batch it with the earlier gate failure.",expectedLabels:["ci-failure-batching","gate-attribution"],records:[{label:"ci-failure-batching",lesson:"Batch identical CI failures from one merge-queue run before triage.",directivePriority:"high",tags:["ci","merge-queue"]},{label:"gate-attribution",lesson:"Attribute required-check failures to the exact gate, not the workflow.",directivePriority:"high",tags:["ci","attribution"]},{label:"worktree-retry-cleanup",lesson:"Remove retry worktrees once the flaky test is quarantined.",directivePriority:"medium"}]},{id:"pairing-default-instruction-budget",lastUserMessage:"The architect prompt is over budget; trim the instruction prefix before dispatching.",expectedLabels:["instruction-budget"],records:[{label:"instruction-budget",lesson:"Trim lowest-priority directives first when the injection budget is exceeded.",directivePriority:"critical"},{label:"parallel-work-check",lesson:"Check for parallel work before editing shared files.",directivePriority:"medium"}]},{id:"pairing-default-skill-hygiene",lastUserMessage:"Validate the skill edits against the mirror contract before pushing.",expectedLabels:["skill-edit-validation"],records:[{label:"skill-edit-validation",lesson:"Validate skill edits against the mirror contract before push.",directivePriority:"high",tags:["skills"]},{label:"merge-queue-readiness",lesson:"Confirm merge-queue readiness gates before promoting a branch.",directivePriority:"medium"}]}];sessionTempRoot=new Map});var MEMORY_FAMILY,MIGRATED_MEMORY_FILENAMES;var init_memory_family_manifest=__esm(()=>{MEMORY_FAMILY=[{filename:"memory.db",scope:"canonical",mergeStrategy:"sqlite-file-copy",note:"SQLite memory database (records, proposals, events, recall usage, rewards, embedding config). FTS/vec indexes travel inside as derived state."},{filename:"memories.jsonl",scope:"canonical",mergeStrategy:"append-union",note:"JSONL provider memory records (legacy/debug mode only)."},{filename:"proposals.jsonl",scope:"canonical",mergeStrategy:"append-union",note:"JSONL provider pending proposals."},{filename:"audit.jsonl",scope:"canonical",mergeStrategy:"append-union",note:"JSONL provider audit events."},{filename:"reward-events.jsonl",scope:"canonical",mergeStrategy:"append-union",note:"JSONL provider reward events."},{filename:"outcome-events.jsonl",scope:"canonical",mergeStrategy:"append-union",note:"Generation-bound memory outcome events keyed by invocation id."},{filename:"consolidation-log.jsonl",scope:"canonical",mergeStrategy:"append-union",note:"Consolidation pass idempotency log (phaseNumber-keyed)."},{filename:"backups/",scope:"derived",mergeStrategy:"skip",note:"Pre-migration source backups (rebuildable; not migrated)."},{filename:"export/",scope:"derived",mergeStrategy:"skip",note:"JSONL export artifacts (rebuildable; not migrated)."}],MIGRATED_MEMORY_FILENAMES=MEMORY_FAMILY.filter((m)=>m.mergeStrategy!=="skip").map((m)=>m.filename)});import{copyFileSync as copyFileSync5,existsSync as existsSync119,readFileSync as readFileSync97,unlinkSync as unlinkSync39}from"node:fs";import{mkdir as mkdir36,rename as rename15}from"node:fs/promises";import*as path236 from"node:path";function lockErrorCode(error93){return typeof error93==="object"&&error93!==null&&"code"in error93?String(error93.code):void 0}function makeAdmissionError(cause){if(lockErrorCode(cause)==="ELOCKED")return new MemoryMigrationLockError("contention","memory-family-migration: destination lock contention after bounded retries; retry the link or unlink command",cause);let code=lockErrorCode(cause);return new MemoryMigrationLockError("storage",`memory-family-migration: destination lock acquisition failed${code?` (${code})`:""}`,cause)}function rowRecency(row,keys){if(typeof row!=="object"||row===null)return;let o=row;for(let key2 of keys){let value=o[key2];if(typeof value==="string"){let ms2=Date.parse(value);if(!Number.isNaN(ms2))return ms2}}return}function rowId(row){if(typeof row!=="object"||row===null)return null;let o=row;return typeof o.id==="string"?o.id:null}function rowIsTombstone(row){if(typeof row!=="object"||row===null)return!1;let metadata=row.metadata;return typeof metadata==="object"&&metadata!==null&&metadata.deleted===!0}function readJsonl3(filePath){if(!existsSync119(filePath))return[];try{let content=readFileSync97(filePath,"utf-8"),out=[];for(let line of content.split(`
|
|
3696
|
+
`)){let trimmed=line.trim();if(!trimmed)continue;try{out.push(JSON.parse(trimmed))}catch{}}return out}catch{return[]}}function appendUnionById2(destination,source,options={}){let memberFilename=options.memberFilename??"memories.jsonl",recencyKeys=MEMBER_RECENCY_KEYS[memberFilename]??[],result=[...destination],effectiveLast=new Map,seenRowJson=new Set;for(let row of destination){let id=rowId(row);if(id!==null)effectiveLast.set(id,row);seenRowJson.add(JSON.stringify(row))}let added=0,skipped=0,superseded=0,unresolvedCollisions=[],resurrectedIds=[];for(let src of source){let id=rowId(src);if(id===null){let json3=JSON.stringify(src);if(seenRowJson.has(json3)){skipped++;continue}result.push(src),seenRowJson.add(json3),added++;continue}let destRow=effectiveLast.get(id);if(destRow===void 0){result.push(src),effectiveLast.set(id,src),added++;continue}if(JSON.stringify(destRow)===JSON.stringify(src)){skipped++;continue}if(recencyKeys.length===0){unresolvedCollisions.push(id),skipped++;continue}let destRecency=rowRecency(destRow,recencyKeys),srcRecency=rowRecency(src,recencyKeys),sourceWins;if(memberFilename==="proposals.jsonl"){if(destRecency===void 0&&srcRecency===void 0){unresolvedCollisions.push(id),skipped++;continue}sourceWins=destRecency===void 0?!0:srcRecency===void 0?!1:srcRecency>destRecency}else{if(destRecency===void 0||srcRecency===void 0){unresolvedCollisions.push(id),skipped++;continue}sourceWins=srcRecency>destRecency}if(!sourceWins){if(rowIsTombstone(destRow)&&!rowIsTombstone(src))superseded++;else skipped++;continue}if(rowIsTombstone(destRow)&&!rowIsTombstone(src)){resurrectedIds.push(id),result.push(src),effectiveLast.set(id,src);continue}result.push(src),effectiveLast.set(id,src),superseded++}return{merged:result,added,skipped,superseded,unresolvedCollisions,resurrectedIds}}function appendUnionOutcomeEvents(destination,source){let result=destination.map(validateOutcomeEvent),byId=new Map(result.map((event)=>[event.id,event])),added=0,skipped=0;for(let value of source){let event=validateOutcomeEvent(value),existing=byId.get(event.id);if(assertEventIdentityCompatible(existing,event),existing){skipped++;continue}result.push(event),byId.set(event.id,event),added++}return{merged:result,added,skipped}}function serializeJsonl(values){if(values.length===0)return"";return`${values.map((e)=>JSON.stringify(e)).join(`
|
|
3697
3697
|
`)}
|
|
3698
3698
|
`}function validateSerializedJsonl(serialized2){for(let line of serialized2.split(`
|
|
3699
|
-
`)){let trimmed=line.trim();if(!trimmed)continue;try{let parsed=JSON.parse(trimmed);if(!parsed||typeof parsed!=="object")return!1}catch{return!1}}return!0}function stageSqliteDb(sourceStoragePath,destDir){let sourceDbPath=path236.join(sourceStoragePath,"memory.db");if(!existsSync119(sourceDbPath))return null;let stagedPath=path236.join(destDir,".memory.db.stage");copyFileSync5(sourceDbPath,stagedPath);for(let suffix of["-wal","-shm"]){let sidecar=`${sourceDbPath}${suffix}`;if(existsSync119(sidecar))try{copyFileSync5(sidecar,`${stagedPath}${suffix}`)}catch{}}return{stagedPath}}async function mergeStagedSqlite(destStoragePath,stagedPath){let destDbPath=path236.join(destStoragePath,"memory.db");if(!existsSync119(destDbPath)){await rename15(stagedPath,destDbPath);for(let suffix of["-wal","-shm"]){let stagedSidecar=`${stagedPath}${suffix}`;if(existsSync119(stagedSidecar))try{await rename15(stagedSidecar,`${destDbPath}${suffix}`)}catch{}}return{merged:await countRowsSafe(destDbPath),skipped:0}}try{let{
|
|
3699
|
+
`)){let trimmed=line.trim();if(!trimmed)continue;try{let parsed=JSON.parse(trimmed);if(!parsed||typeof parsed!=="object")return!1}catch{return!1}}return!0}function stageSqliteDb(sourceStoragePath,destDir){let sourceDbPath=path236.join(sourceStoragePath,"memory.db");if(!existsSync119(sourceDbPath))return null;let stagedPath=path236.join(destDir,".memory.db.stage");copyFileSync5(sourceDbPath,stagedPath);for(let suffix of["-wal","-shm"]){let sidecar=`${sourceDbPath}${suffix}`;if(existsSync119(sidecar))try{copyFileSync5(sidecar,`${stagedPath}${suffix}`)}catch{}}return{stagedPath}}async function mergeStagedSqlite(destStoragePath,stagedPath){let destDbPath=path236.join(destStoragePath,"memory.db");if(!existsSync119(destDbPath)){await rename15(stagedPath,destDbPath);for(let suffix of["-wal","-shm"]){let stagedSidecar=`${stagedPath}${suffix}`;if(existsSync119(stagedSidecar))try{await rename15(stagedSidecar,`${destDbPath}${suffix}`)}catch{}}return{merged:await countRowsSafe(destDbPath),skipped:0,audit:{filename:"memory.db",resurrectedIds:[],supersededCount:0,unresolvedCollisions:[]}}}try{let tableColumns=function(schema,table){try{return db.query(`PRAGMA ${schema}.table_info(${table})`).all().map((r)=>r.name)}catch{return[]}},mergeMemoryItemsRecency=function(){let destCols=tableColumns("main","memory_items"),stagedCols=tableColumns("staged","memory_items"),shared=destCols.filter((c)=>stagedCols.includes(c));if(!(destCols.length>0&&destCols.length===stagedCols.length&&shared.length===destCols.length)||!shared.includes("updated_at"))return{merged:db.run("INSERT OR IGNORE INTO memory_items SELECT * FROM staged.memory_items;").changes??0,skipped:0,resurrectedIds:[],supersededCount:0};let overlaps=db.query(`SELECT destination.id AS id,
|
|
3700
|
+
destination.deleted AS dest_deleted,
|
|
3701
|
+
source.deleted AS src_deleted,
|
|
3702
|
+
destination.updated_at AS dest_at,
|
|
3703
|
+
source.updated_at AS src_at
|
|
3704
|
+
FROM memory_items AS destination
|
|
3705
|
+
JOIN staged.memory_items AS source ON source.id = destination.id`).all(),resurrectedIds=[],supersededCount=0;for(let row of overlaps){let srcNewer=row.src_at>row.dest_at;if(row.dest_deleted===1&&row.src_deleted===0&&srcNewer)resurrectedIds.push(row.id);else if(srcNewer)supersededCount++;else if(row.dest_deleted===1&&row.src_deleted===0)supersededCount++}let colList=shared.join(", "),setList=shared.filter((c)=>c!=="id"&&c!=="valid_from"&&c!=="supersedes_reason").map((c)=>`${c} = excluded.${c}`).join(`,
|
|
3706
|
+
`),validFromClause=shared.includes("valid_from")?`,
|
|
3707
|
+
valid_from = memory_items.valid_from`:"",supersedesClause=shared.includes("supersedes_reason")?`,
|
|
3708
|
+
supersedes_reason = COALESCE(excluded.supersedes_reason, memory_items.supersedes_reason)`:"",merged=db.run(`INSERT INTO memory_items (${colList})
|
|
3709
|
+
SELECT ${colList} FROM staged.memory_items WHERE true
|
|
3710
|
+
ON CONFLICT(id) DO UPDATE SET
|
|
3711
|
+
${setList}${validFromClause}${supersedesClause}
|
|
3712
|
+
WHERE excluded.updated_at > memory_items.updated_at;`).changes??0,stagedCount=db.query("SELECT COUNT(*) AS n FROM staged.memory_items").get()?.n??0,newIds=Math.max(0,stagedCount-overlaps.length),updated=Math.min(Math.max(0,merged-newIds),overlaps.length),skipped=Math.max(0,overlaps.length-updated);if(updated>0){if((db.query("SELECT COUNT(*) AS n FROM sqlite_master WHERE type='table' AND name='memory_items_fts'").get()?.n??0)>0)db.run("DELETE FROM memory_items_fts;")}return{merged,skipped,resurrectedIds,supersededCount}},{loadDatabaseCtor:loadDatabaseCtor2}=await Promise.resolve().then(() => (init_sqlite_loader(),exports_sqlite_loader)),db=new(loadDatabaseCtor2())(destDbPath),attached=!1,transactionActive=!1;try{let safePath=stagedPath.replace(/'/g,"''");db.run(`ATTACH DATABASE '${safePath}' AS staged;`),attached=!0,db.run("BEGIN IMMEDIATE"),transactionActive=!0,db.run(`CREATE TABLE IF NOT EXISTS memory_outcomes (
|
|
3700
3713
|
id TEXT PRIMARY KEY,
|
|
3701
3714
|
memory_id TEXT NOT NULL,
|
|
3702
3715
|
generation TEXT NOT NULL,
|
|
3703
3716
|
at TEXT NOT NULL,
|
|
3704
3717
|
event_json TEXT NOT NULL
|
|
3705
3718
|
);`),db.run(`CREATE INDEX IF NOT EXISTS idx_memory_outcomes_memory_generation
|
|
3706
|
-
ON memory_outcomes(memory_id, generation, at, id);`);let tables=["memory_items","memory_proposals","memory_events","memory_recall_usage","memory_reward_events","memory_outcomes"],merged=0,skippedDueToError=0,failedTables=[];for(let table of tables)try{let stashed=db.query(`SELECT COUNT(*) AS n FROM staged.sqlite_master WHERE type='table' AND name='${table}'`).get();if(!stashed||stashed.n===0)continue;if(table==="
|
|
3719
|
+
ON memory_outcomes(memory_id, generation, at, id);`);let tables=["memory_items","memory_proposals","memory_events","memory_recall_usage","memory_reward_events","memory_outcomes"],merged=0,skippedCollisions=0,skippedDueToError=0,failedTables=[],unresolvedCollisions=[],resurrectedIds=[],supersededCount=0;for(let table of tables)try{let stashed=db.query(`SELECT COUNT(*) AS n FROM staged.sqlite_master WHERE type='table' AND name='${table}'`).get();if(!stashed||stashed.n===0)continue;if(table==="memory_items"){let outcome=mergeMemoryItemsRecency();merged+=outcome.merged,skippedCollisions+=outcome.skipped,resurrectedIds=outcome.resurrectedIds,supersededCount=outcome.supersededCount;continue}if(table==="memory_proposals"){let collided=db.query(`SELECT destination.id AS id
|
|
3720
|
+
FROM memory_proposals AS destination
|
|
3721
|
+
JOIN staged.memory_proposals AS source ON source.id = destination.id`).all();for(let row of collided)unresolvedCollisions.push(row.id)}if(table==="memory_outcomes"){let overlaps=db.query(`SELECT destination.id,
|
|
3707
3722
|
destination.event_json AS destination_json,
|
|
3708
3723
|
source.event_json AS source_json
|
|
3709
3724
|
FROM memory_outcomes AS destination
|
|
3710
3725
|
JOIN staged.memory_outcomes AS source ON source.id = destination.id
|
|
3711
|
-
ORDER BY destination.id`).all();for(let overlap2 of overlaps){let destinationEvent=validateOutcomeEvent(JSON.parse(overlap2.destination_json)),sourceEvent=validateOutcomeEvent(JSON.parse(overlap2.source_json));if(destinationEvent.id!==overlap2.id||sourceEvent.id!==overlap2.id)throw Error(`outcome event ${overlap2.id} has invalid row identity`);assertEventIdentityCompatible(destinationEvent,sourceEvent)}}let result=db.run(`INSERT OR IGNORE INTO ${table} SELECT * FROM staged.${table};`);merged+=result.changes??0}catch(err){if(table==="memory_outcomes")throw err;skippedDueToError++,failedTables.push(`${table} (${err instanceof Error?err.message:String(err)})`)}if(db.run("COMMIT"),transactionActive=!1,failedTables.length>0)warn(`[memory-family-migration] ${failedTables.length} table(s) skipped during SQLite ATTACH merge: ${failedTables.join(", ")}`);return{merged,skipped:skippedDueToError}}catch(error93){if(transactionActive){try{db.run("ROLLBACK")}catch{}transactionActive=!1}throw error93}finally{if(attached)try{db.run("DETACH DATABASE staged;")}catch{}db.close();try{unlinkSync39(stagedPath);for(let suffix of["-wal","-shm"])try{unlinkSync39(`${stagedPath}${suffix}`)}catch{}}catch{}}}catch(err){throw Error(`memory-family-migration: failed to merge SQLite into non-empty destination ${destDbPath}: ${err instanceof Error?err.message:String(err)}`)}}async function countRowsSafe(dbPath){try{let{loadDatabaseCtor:loadDatabaseCtor2}=await Promise.resolve().then(() => (init_sqlite_loader(),exports_sqlite_loader)),db=new(loadDatabaseCtor2())(dbPath);try{return db.query("SELECT COUNT(*) AS n FROM memory_items").get()?.n??0}finally{db.close()}}catch{return 0}}async function migrateMemoryFamily(destRoot,sourceRoot){let destStoragePath=rootStoragePath(destRoot),sourceStoragePath=rootStoragePath(sourceRoot);await mkdir36(destStoragePath,{recursive:!0});let destRelease=null;try{destRelease=await _internals193.lockfile.lock(destStoragePath,{...MIGRATION_LOCK_RETRIES,stale:MIGRATION_LOCK_STALE_MS,realpath:!1})}catch(error93){throw makeAdmissionError(error93)}let perMember=[];try{for(let member of MEMORY_FAMILY){if(member.mergeStrategy==="skip")continue;let srcPath=path236.join(sourceStoragePath,member.filename),destPath=path236.join(destStoragePath,member.filename);if(member.mergeStrategy==="sqlite-file-copy"){if(!existsSync119(srcPath)){perMember.push({filename:member.filename,merged:0,skipped:0});continue}let staged=stageSqliteDb(sourceStoragePath,destStoragePath);if(!staged){perMember.push({filename:member.filename,merged:0,skipped:0});continue}let{merged,skipped}=await mergeStagedSqlite(destStoragePath,staged.stagedPath);perMember.push({filename:member.filename,merged,skipped});continue}if(member.mergeStrategy==="append-union"){if(!existsSync119(srcPath)){perMember.push({filename:member.filename,merged:0,skipped:0});continue}let srcData=readJsonl3(srcPath),destData=readJsonl3(destPath)
|
|
3726
|
+
ORDER BY destination.id`).all();for(let overlap2 of overlaps){let destinationEvent=validateOutcomeEvent(JSON.parse(overlap2.destination_json)),sourceEvent=validateOutcomeEvent(JSON.parse(overlap2.source_json));if(destinationEvent.id!==overlap2.id||sourceEvent.id!==overlap2.id)throw Error(`outcome event ${overlap2.id} has invalid row identity`);assertEventIdentityCompatible(destinationEvent,sourceEvent)}}let result=db.run(`INSERT OR IGNORE INTO ${table} SELECT * FROM staged.${table};`);merged+=result.changes??0}catch(err){if(table==="memory_outcomes")throw err;skippedDueToError++,failedTables.push(`${table} (${err instanceof Error?err.message:String(err)})`)}if(db.run("COMMIT"),transactionActive=!1,failedTables.length>0)warn(`[memory-family-migration] ${failedTables.length} table(s) skipped during SQLite ATTACH merge: ${failedTables.join(", ")}`);return{merged,skipped:skippedDueToError+skippedCollisions,audit:{filename:"memory.db",resurrectedIds,supersededCount,unresolvedCollisions}}}catch(error93){if(transactionActive){try{db.run("ROLLBACK")}catch{}transactionActive=!1}throw error93}finally{if(attached)try{db.run("DETACH DATABASE staged;")}catch{}db.close();try{unlinkSync39(stagedPath);for(let suffix of["-wal","-shm"])try{unlinkSync39(`${stagedPath}${suffix}`)}catch{}}catch{}}}catch(err){throw Error(`memory-family-migration: failed to merge SQLite into non-empty destination ${destDbPath}: ${err instanceof Error?err.message:String(err)}`)}}async function countRowsSafe(dbPath){try{let{loadDatabaseCtor:loadDatabaseCtor2}=await Promise.resolve().then(() => (init_sqlite_loader(),exports_sqlite_loader)),db=new(loadDatabaseCtor2())(dbPath);try{return db.query("SELECT COUNT(*) AS n FROM memory_items").get()?.n??0}finally{db.close()}}catch{return 0}}async function migrateMemoryFamily(destRoot,sourceRoot){let destStoragePath=rootStoragePath(destRoot),sourceStoragePath=rootStoragePath(sourceRoot);await mkdir36(destStoragePath,{recursive:!0});let destRelease=null;try{destRelease=await _internals193.lockfile.lock(destStoragePath,{...MIGRATION_LOCK_RETRIES,stale:MIGRATION_LOCK_STALE_MS,realpath:!1})}catch(error93){throw makeAdmissionError(error93)}let perMember=[],auditEntries=[];try{for(let member of MEMORY_FAMILY){if(member.mergeStrategy==="skip")continue;let srcPath=path236.join(sourceStoragePath,member.filename),destPath=path236.join(destStoragePath,member.filename);if(member.mergeStrategy==="sqlite-file-copy"){if(!existsSync119(srcPath)){perMember.push({filename:member.filename,merged:0,skipped:0,superseded:0});continue}let staged=stageSqliteDb(sourceStoragePath,destStoragePath);if(!staged){perMember.push({filename:member.filename,merged:0,skipped:0,superseded:0});continue}let{merged,skipped,audit}=await mergeStagedSqlite(destStoragePath,staged.stagedPath);if(perMember.push({filename:member.filename,merged,skipped,superseded:audit.supersededCount}),audit.resurrectedIds.length>0||audit.supersededCount>0||audit.unresolvedCollisions.length>0)auditEntries.push(audit);continue}if(member.mergeStrategy==="append-union"){if(!existsSync119(srcPath)){perMember.push({filename:member.filename,merged:0,skipped:0,superseded:0});continue}let srcData=readJsonl3(srcPath),destData=readJsonl3(destPath);if(member.filename==="outcome-events.jsonl"){let{merged:merged2,added:added2,skipped:skipped2}=appendUnionOutcomeEvents(destData,srcData),serialized3=serializeJsonl(merged2);if(!validateSerializedJsonl(serialized3))throw Error(`memory-family-migration: validation failed for ${member.filename}; aborting before commit`);await atomicWriteFile(destPath,serialized3),perMember.push({filename:member.filename,merged:added2,skipped:skipped2,superseded:0});continue}let{merged,added,skipped,superseded,unresolvedCollisions,resurrectedIds}=appendUnionById2(destData,srcData,{memberFilename:member.filename}),serialized2=serializeJsonl(merged);if(!validateSerializedJsonl(serialized2))throw Error(`memory-family-migration: validation failed for ${member.filename}; aborting before commit`);if(await atomicWriteFile(destPath,serialized2),perMember.push({filename:member.filename,merged:added,skipped,superseded}),resurrectedIds.length>0||superseded>0||unresolvedCollisions.length>0)auditEntries.push({filename:member.filename,resurrectedIds,supersededCount:superseded,unresolvedCollisions})}}if(isCohortRoot(sourceRoot)){let backupDir=path236.join(destStoragePath,"backups");await mkdir36(backupDir,{recursive:!0});let stamp=new Date().toISOString().replace(/[:.]/g,"-"),sourceDbPath=path236.join(sourceStoragePath,"memory.db");if(existsSync119(sourceDbPath)){try{copyFileSync5(sourceDbPath,path236.join(backupDir,`memory.db.pre-merge-${stamp}`))}catch{}try{let{readdirSync:readdirSync34,unlinkSync:rmFileSync}=await import("node:fs"),backups=readdirSync34(backupDir).filter((f)=>f.startsWith("memory.db.pre-merge-")).sort();while(backups.length>MAX_BACKUPS){let oldest=backups.shift();if(oldest)rmFileSync(path236.join(backupDir,oldest))}}catch{}}}}finally{if(destRelease)try{await destRelease()}catch{}}return{perMember,audit:auditEntries}}var import_proper_lockfile16,lockfile16,MemoryMigrationLockError,MAX_BACKUPS=5,MEMBER_RECENCY_KEYS,_internals193;var init_memory_family_migration=__esm(()=>{init_task_file();init_family_migration_shared();init_logger();init_memory_family_manifest();init_outcome_events();init_storage_root();import_proper_lockfile16=__toESM(require_proper_lockfile(),1),lockfile16=import_proper_lockfile16.default;MemoryMigrationLockError=class MemoryMigrationLockError extends Error{category;cause;code;constructor(category,message,cause){super(message);this.name="MemoryMigrationLockError",this.category=category,this.code=`MEMORY_MIGRATION_LOCK_${category.toUpperCase()}`,this.cause=cause}};MEMBER_RECENCY_KEYS={"memories.jsonl":["updatedAt","updated_at"],"proposals.jsonl":["reviewedAt"]};_internals193={appendUnionById:appendUnionById2,appendUnionOutcomeEvents,serializeJsonl,validateSerializedJsonl,stageSqliteDb,mergeStagedSqlite,countRowsSafe,lockfile:lockfile16}});function parseJavaImports(rawContent){let imports=[],content=maskCommentsAndLiterals(rawContent),re=/^[ \t]*import[ \t]+(static[ \t]+)?([A-Za-z_][\w.]*(?:\.\*)?)[ \t]*;?[ \t]*\r?$/gm;for(let m=re.exec(content);m!==null;m=re.exec(content)){let isStatic=Boolean(m[1]),raw=m[2];if(raw.endsWith(".*")){imports.push({specifier:raw,importType:"namespace",bindings:[]});continue}let imported=finalDottedSegment(raw),specifier=isStatic?raw.split(".").slice(0,-1).join("."):raw;imports.push({specifier,importType:"named",bindings:[{imported,local:imported}]})}return imports}function maskCommentsAndLiterals(content){let out="",i=0,n=content.length;while(i<n){let ch=content[i],next=i+1<n?content[i+1]:"",next2=i+2<n?content[i+2]:"";if(ch==='"'&&next==='"'&&next2==='"'){out+=" ",i+=3;while(i<n){if(content[i]==='"'&&content[i+1]==='"'&&content[i+2]==='"'){out+=" ",i+=3;break}out+=content[i]===`
|
|
3712
3727
|
`?`
|
|
3713
3728
|
`:" ",i++}continue}if(ch==="/"&&next==="/"){while(i<n&&content[i]!==`
|
|
3714
3729
|
`)out+=" ",i++;continue}if(ch==="/"&&next==="*"){out+=" ",i+=2;while(i<n){if(content[i]==="*"&&content[i+1]==="/"){out+=" ",i+=2;break}out+=content[i]===`
|
|
@@ -4043,12 +4058,14 @@ ${freshPreamble}`:`<curator_briefing>${truncatedBriefing}</curator_briefing>`}}c
|
|
|
4043
4058
|
`);let cohortDir=resolveLinkDir(pointer.linkId),lines=["\uD83D\uDD17 Memory is shared across linked worktrees.",` link id: ${pointer.linkId}`];if(pointer.cohortId)lines.push(` cohort: ${pointer.cohortId}`);if(pointer.identitySource)lines.push(` identity: ${pointer.identitySource}`);if(pointer.degraded)lines.push(" ⚠ degraded: cohort id is machine-local (not portable across machines).");if(lines.push(` shared at: ${path246.join(cohortDir,"memory")}`),lines.push(` since: ${pointer.createdAt}`),pointer.generation!==void 0)lines.push(` generation: ${pointer.generation}`);return lines.push("Run `/swarm memory unlink` to stop sharing (keeps a local copy)."),lines.join(`
|
|
4044
4059
|
`)}async function handleMemoryLinkCommand(directory,args2){if(args2[0]==="status")return formatStatus2(directory);let nameArg=args2.find((a)=>!a.startsWith("--")),linkId,displayName,cohort;if(nameArg){let sanitized=sanitizeLinkId(nameArg);if(!sanitized)return`❌ Invalid link name "${nameArg}". Use letters, digits, '.', '-', or '_'.`;linkId=sanitized,displayName=nameArg;try{cohort=await resolveCohortId(directory)}catch{}}else try{cohort=await resolveCohortId(directory),linkId=cohort.cohortId}catch(error93){return`❌ Failed to resolve cohort identity: ${error93 instanceof Error?error93.message:String(error93)}`}if(cohort?.degraded)criticalWarn(`[opencode-swarm] Cohort identity for memory link is degraded (source: ${cohort.source}). The shared memory store will be cohesive for sibling worktrees on THIS machine, but it is not a portable cohort identity (no usable git remote).`);let existing=readMemoryLinkPointer(directory);if(existing&&existing.linkId===linkId)return`ℹ️ Memory is already linked to "${linkId}".
|
|
4045
4060
|
${formatStatus2(directory)}`;let{config:loadedConfig}=loadPluginConfigWithMeta(directory),memoryConfig=MemoryConfigSchema.parse(loadedConfig.memory??{});if(!memoryConfig.link?.enabled)return["❌ Memory sharing is not enabled. Set `memory.link.enabled: true` in your","opencode.json config before running `/swarm memory link`."].join(`
|
|
4046
|
-
`);let cohortDir=resolveLinkDir(linkId),localRoot={kind:"local",root:path246.join(directory,".swarm"),directory},cohortRoot={kind:"cohort",cohortRoot:path246.join(cohortDir,"memory"),cohortId:cohort?.cohortId??linkId,generation:(existing?.generation??0)+1,linkId,directory};evictAndCloseForRoot(localRoot);let totalMerged=0,totalSkipped=0,familySummary="";try{let result=await migrateMemoryFamily(cohortRoot,localRoot);for(let m of result.perMember)totalMerged+=m.merged,totalSkipped+=m.skipped;familySummary=result.perMember.filter((m)=>m.merged>0||m.skipped>0).map((m)=>` ${m.filename}: ${m.merged} merged, ${m.skipped} kept`).join(`
|
|
4047
|
-
`)}catch(error93){return`❌ Failed to migrate the memory family into the cohort store: ${error93 instanceof Error?error93.message:String(error93)}`}try{await mkdir39(cohortRoot.cohortRoot,{recursive:!0});let fingerprintInput=buildMemoryCohortFingerprintInput(memoryConfig),fingerprint2=computeMemoryCohortFingerprint(fingerprintInput);await writeFile22(path246.join(cohortRoot.cohortRoot,"memory-cohort-config.json"),JSON.stringify({fingerprint:fingerprint2,algorithm_version:FINGERPRINT_ALGORITHM_VERSION,config:fingerprintInput,updated_at:new Date().toISOString()},null,2),"utf-8")}catch{}let pointer={version:2,linkId,name:displayName,createdAt:new Date().toISOString(),cohortId:cohort?.cohortId,identitySource:cohort?.source,degraded:cohort?.degraded,generation:(existing?.generation??0)+1};try{await writeMemoryLinkPointer(directory,pointer)}catch(error93){return`❌ Failed to write memory link pointer: ${error93 instanceof Error?error93.message:String(error93)}`}let relinkNote=existing?`
|
|
4061
|
+
`);let cohortDir=resolveLinkDir(linkId),localRoot={kind:"local",root:path246.join(directory,".swarm"),directory},cohortRoot={kind:"cohort",cohortRoot:path246.join(cohortDir,"memory"),cohortId:cohort?.cohortId??linkId,generation:(existing?.generation??0)+1,linkId,directory};evictAndCloseForRoot(localRoot);let totalMerged=0,totalSkipped=0,totalSuperseded=0,familySummary="",familyAuditNote="";try{let result=await migrateMemoryFamily(cohortRoot,localRoot);for(let m of result.perMember)totalMerged+=m.merged,totalSkipped+=m.skipped,totalSuperseded+=m.superseded;familySummary=result.perMember.filter((m)=>m.merged>0||m.skipped>0||m.superseded>0).map((m)=>` ${m.filename}: ${m.merged} merged, ${m.skipped} kept${m.superseded>0?`, ${m.superseded} recency-resolved`:""}`).join(`
|
|
4062
|
+
`),familyAuditNote=formatFamilyAuditNote(result.audit)}catch(error93){return`❌ Failed to migrate the memory family into the cohort store: ${error93 instanceof Error?error93.message:String(error93)}`}try{await mkdir39(cohortRoot.cohortRoot,{recursive:!0});let fingerprintInput=buildMemoryCohortFingerprintInput(memoryConfig),fingerprint2=computeMemoryCohortFingerprint(fingerprintInput);await writeFile22(path246.join(cohortRoot.cohortRoot,"memory-cohort-config.json"),JSON.stringify({fingerprint:fingerprint2,algorithm_version:FINGERPRINT_ALGORITHM_VERSION,config:fingerprintInput,updated_at:new Date().toISOString()},null,2),"utf-8")}catch{}let pointer={version:2,linkId,name:displayName,createdAt:new Date().toISOString(),cohortId:cohort?.cohortId,identitySource:cohort?.source,degraded:cohort?.degraded,generation:(existing?.generation??0)+1};try{await writeMemoryLinkPointer(directory,pointer)}catch(error93){return`❌ Failed to write memory link pointer: ${error93 instanceof Error?error93.message:String(error93)}`}let relinkNote=existing?`
|
|
4048
4063
|
(Re-linked from previous memory link "${existing.linkId}".)`:"",familyNote=familySummary?`
|
|
4049
|
-
${familySummary}`:""
|
|
4050
|
-
|
|
4051
|
-
`)}
|
|
4064
|
+
${familySummary}`:"",auditNote=familyAuditNote?`
|
|
4065
|
+
${familyAuditNote}`:"";return[`\uD83D\uDD17 Linked this worktree's memory to shared cohort store "${linkId}".`,` migrated the memory family (${totalMerged} new, ${totalSkipped} already present${totalSuperseded>0?`, ${totalSuperseded} resolved by recency`:""}).`,` shared at: ${cohortRoot.cohortRoot}`,"All worktrees linked to this id now read and write the same memory."+relinkNote+familyNote+auditNote].join(`
|
|
4066
|
+
`)}function formatFamilyAuditNote(audit){let resurrected=[...new Set(audit.flatMap((m)=>m.resurrectedIds))],unresolved=[...new Set(audit.flatMap((m)=>m.unresolvedCollisions))],totalSuperseded=audit.reduce((sum,m)=>sum+m.supersededCount,0),fmtIds=(ids)=>{let shown=ids.slice(0,5).map((raw)=>{let id=sanitizeString(raw);return id.length>40?`${id.slice(0,39)}…`:id}),more=ids.length>5?` +${ids.length-5} more`:"";return`ids: ${shown.join(", ")}${more}`},lines=[];if(resurrected.length>0)lines.push(`⚠ ${resurrected.length} record(s) deleted in one store were re-added from the other (${fmtIds(resurrected)}).`);if(totalSuperseded>0)lines.push(`ℹ ${totalSuperseded} record collision(s) resolved by recency — the newer state won.`);if(unresolved.length>0)lines.push(`⚠ ${unresolved.length} collision(s) had no recency signal; the pre-existing version was kept (${fmtIds(unresolved)}).`);return lines.join(`
|
|
4067
|
+
`)}async function handleMemoryUnlinkCommand(directory,args2){let noCopy=args2.includes("--no-copy"),pointer=readMemoryLinkPointer(directory);if(!pointer)return"ℹ️ Memory is not linked. Nothing to unlink.";let unlinkAuditNote="",cohortDir=resolveLinkDir(pointer.linkId),localRoot=wrapLocalRoot(directory),cohortRoot={kind:"cohort",cohortRoot:path246.join(cohortDir,"memory"),cohortId:pointer.cohortId??pointer.linkId,generation:pointer.generation??0,linkId:pointer.linkId,directory};if(evictAndCloseForRoot(localRoot),evictAndCloseForRoot(cohortRoot),!noCopy)try{let result=await migrateMemoryFamily(localRoot,cohortRoot);unlinkAuditNote=formatFamilyAuditNote(result.audit)}catch(error93){return`❌ Failed to copy the cohort memory family back to local storage: ${error93 instanceof Error?error93.message:String(error93)}`}try{await removeMemoryLinkPointer(directory)}catch(error93){return`❌ Failed to remove memory link pointer: ${error93 instanceof Error?error93.message:String(error93)}`}return[`\uD83D\uDD13 Unlinked memory. ${noCopy?"No local copy was made (--no-copy).":"A local copy of the cohort memory family has been restored."}`,` The shared cohort store at ${cohortRoot.cohortRoot} is NOT deleted`," (other worktrees may still be linked to it).",...unlinkAuditNote?[unlinkAuditNote]:[]].join(`
|
|
4068
|
+
`)}var init_memory_link2=__esm(()=>{init_candidate_sidecar_store();init_config2();init_schema();init_cohort_identity();init_memory_family_migration();init_memory_link();init_provider_pool();init_redaction();init_storage_root();init_logger()});async function getPlanData(directory,phaseArg){let plan=await _internals199.loadPlanJsonOnly(directory);if(plan){let fullMarkdown=_internals199.derivePlanMarkdown(plan);if(phaseArg===void 0||phaseArg===null||phaseArg==="")return{hasPlan:!0,fullMarkdown,requestedPhase:null,phaseMarkdown:null,errorMessage:null,isLegacy:!1};let phaseNum2=typeof phaseArg==="number"?phaseArg:parseInt(String(phaseArg),10);if(Number.isNaN(phaseNum2))return{hasPlan:!0,fullMarkdown,requestedPhase:null,phaseMarkdown:null,errorMessage:`Invalid phase number: "${phaseArg}"`,isLegacy:!1};if(!plan.phases.find((p)=>p.id===phaseNum2))return{hasPlan:!0,fullMarkdown,requestedPhase:phaseNum2,phaseMarkdown:null,errorMessage:`Phase ${phaseNum2} not found in plan.`,isLegacy:!1};let phaseMarkdown2=extractPhaseMarkdown(fullMarkdown,phaseNum2);return{hasPlan:!0,fullMarkdown,requestedPhase:phaseNum2,phaseMarkdown:phaseMarkdown2,errorMessage:null,isLegacy:!1}}let planContent=await _internals199.readSwarmFileAsync(directory,"plan.md");if(!planContent)return{hasPlan:!1,fullMarkdown:"",requestedPhase:null,phaseMarkdown:null,errorMessage:null,isLegacy:!0};if(phaseArg===void 0||phaseArg===null||phaseArg==="")return{hasPlan:!0,fullMarkdown:planContent,requestedPhase:null,phaseMarkdown:null,errorMessage:null,isLegacy:!0};let phaseNum=typeof phaseArg==="number"?phaseArg:parseInt(String(phaseArg),10);if(Number.isNaN(phaseNum))return{hasPlan:!0,fullMarkdown:planContent,requestedPhase:null,phaseMarkdown:null,errorMessage:`Invalid phase number: "${phaseArg}"`,isLegacy:!0};let phaseMarkdown=extractPhaseMarkdown(planContent,phaseNum);if(phaseMarkdown===null)return{hasPlan:!0,fullMarkdown:planContent,requestedPhase:phaseNum,phaseMarkdown:null,errorMessage:`Phase ${phaseNum} not found in plan.`,isLegacy:!0};return{hasPlan:!0,fullMarkdown:planContent,requestedPhase:phaseNum,phaseMarkdown,errorMessage:null,isLegacy:!0}}function extractPhaseMarkdown(markdown,phaseNum){let lines=markdown.split(`
|
|
4052
4069
|
`),phaseLines=[],inTargetPhase=!1;for(let line of lines){let phaseMatch=line.match(/^## Phase (\d+)/);if(phaseMatch){if(parseInt(phaseMatch[1],10)===phaseNum){inTargetPhase=!0,phaseLines.push(line);continue}else if(inTargetPhase)break}if(inTargetPhase&&line.trim()==="---"&&phaseLines.length>1)break;if(inTargetPhase)phaseLines.push(line)}return phaseLines.length>0?phaseLines.join(`
|
|
4053
4070
|
`).trim():null}function formatPlanMarkdown(planData){if(!planData.hasPlan)return"No active swarm plan found.";if(planData.errorMessage!==null)return planData.errorMessage;if(planData.requestedPhase!==null&&planData.phaseMarkdown)return planData.phaseMarkdown;return planData.fullMarkdown}async function handlePlanCommand(directory,args2){let phaseArg=args2.length>0?args2[0]:void 0,planData=await getPlanData(directory,phaseArg);return formatPlanMarkdown(planData)}var _internals199;var init_plan_service=__esm(()=>{init_utils2();init_manager();_internals199={loadPlanJsonOnly,derivePlanMarkdown,readSwarmFileAsync}});var init_plan=__esm(()=>{init_plan_service()});function parsePostMortemArgs(args2){let scope="project";for(let i=0;i<args2.length;i++){let arg=args2[i];if(arg==="--scope"){let value=args2[i+1];if(value!=="session"&&value!=="project")return{force:args2.includes("--force"),scope,error:"Invalid --scope value. Use --scope session or --scope project."};scope=value,i++;continue}if(arg.startsWith("--scope=")){let value=arg.slice(8);if(value!=="session"&&value!=="project")return{force:args2.includes("--force"),scope,error:"Invalid --scope value. Use --scope=session or --scope=project."};scope=value}}return{force:args2.includes("--force"),scope}}async function handlePostMortemCommand(directory,args2,options){try{let parsedArgs=parsePostMortemArgs(args2);if(parsedArgs.error)return parsedArgs.error;let pmOptions={force:parsedArgs.force,scope:parsedArgs.scope,sessionID:options?.sessionID};if(options?.sessionID)try{pmOptions.llmDelegate=_internals200.createCuratorLLMDelegate(directory,"postmortem",options.sessionID)}catch{}let result=await _internals200.runCuratorPostMortem(directory,pmOptions),lines=[];if(result.success){if(lines.push("## Post-Mortem Report Generated"),lines.push(""),result.reportPath)lines.push(`Report: \`${result.reportPath}\``);if(result.summary)lines.push(""),lines.push(result.summary)}else lines.push("## Post-Mortem Failed"),lines.push(""),lines.push("The post-mortem report could not be generated.");if(result.warnings.length>0){lines.push(""),lines.push("### Warnings");for(let w of result.warnings)lines.push(`- ${w}`)}return lines.join(`
|
|
4054
4071
|
`)}catch(err){return`Error running post-mortem: ${err instanceof Error?err.message:String(err)}. Run /swarm diagnose to check .swarm/ health.`}}var _internals200;var init_post_mortem=__esm(()=>{init_curator_llm_factory();init_curator_postmortem();_internals200={createCuratorLLMDelegate,runCuratorPostMortem}});function isPrFeedbackCommandError(value){return"error"in value}function isPrFeedbackContinuationRequest(value){return"runId"in value&&"handoffPath"in value}function parseContinuationClause(rest){if(rest.length===0)return null;if(rest[0].toLowerCase()!=="continue")return null;if(rest[1]?.toLowerCase()!=="from")return null;let rawPath=rest[2];if(!rawPath)return{instructions:"",errorKind:"continuation",error:'Malformed PR-feedback continuation: expected "continue from .swarm/pr-review/<run_id>/feedback-handoff.json"'};let normalizedPath=rawPath.replace(/\\/g,"/"),matched=normalizedPath.match(PR_REVIEW_HANDOFF_PATH_PATTERN);if(!matched)return{instructions:"",errorKind:"continuation",error:"PR-feedback continuation must use .swarm/pr-review/<run_id>/feedback-handoff.json"};if(rest.length!==3)return{instructions:"",errorKind:"continuation",error:'PR-feedback continuation must use the exact form "continue from .swarm/pr-review/<run_id>/feedback-handoff.json"'};return{runId:matched[1],handoffPath:normalizedPath,instructions:""}}function parsePrFeedbackCommandInput(directory,args2){let rest=args2.filter((t)=>t.trim().length>0);if(rest.length===0)return{instructions:""};let prUrl,tail2=rest;if(looksLikePrRef(rest[0])){let resolved=resolvePrCommandInput([rest[0]],directory);if(resolved===null)return{instructions:"",error:"PR-feedback command requires a PR reference",errorKind:"pr-reference"};if("error"in resolved)return{instructions:"",error:resolved.error,errorKind:"pr-reference"};prUrl=resolved.prUrl,tail2=rest.slice(1)}let continuation=parseContinuationClause(tail2);if(continuation){if(isPrFeedbackCommandError(continuation))return continuation;if(!isPrFeedbackContinuationRequest(continuation))return{instructions:"",error:"Malformed PR-feedback continuation request"};return{prUrl,instructions:continuation.instructions,continuation}}return{prUrl,instructions:sanitizeInstructions(tail2.join(" "))}}function handlePrFeedbackCommand(directory,args2){let parsed=parsePrFeedbackCommandInput(directory,args2);if(parsed.error){if(parsed.errorKind==="pr-reference")return[`Error: ${parsed.error}`,"","That looked like a PR reference but could not be resolved. Pass a full","URL or `owner/repo#N`, or omit the reference to start a no-PR feedback","session (e.g. `/swarm pr-feedback address the review notes`)."].join(`
|
|
@@ -7742,7 +7759,7 @@ MICRO WORKED EXAMPLE:
|
|
|
7742
7759
|
${CANDIDATE_HEADERS.micro_lane}
|
|
7743
7760
|
[CANDIDATE] | example-micro-001 | example-micro | MEDIUM | correctness | src/a.ts:12 | claim without pipes | invariant without pipes | evidence without pipes | HIGH
|
|
7744
7761
|
Zero findings: ${CLEAN_TEMPLATES.micro_lane}
|
|
7745
|
-
${EXPLORER_CANDIDATE_COMMON_END}`,READ_ONLY_LANE_ROLES=new Set(["explorer","reviewer","test_engineer","critic","critic_oversight","critic_sounding_board","critic_drift_verifier","critic_hallucination_verifier","critic_architecture_supervisor","critic_finding_validator","sme","researcher","council_generalist","council_skeptic","council_domain_expert"]),READ_ONLY_TOOL_DENYLIST=[...new Set([...WRITE_TOOL_NAMES,"extract_code_blocks","multiedit","multi_edit","todo_write","save_plan","update_task_status","phase_complete","declare_scope","declare_council_criteria","submit_council_verdicts","submit_phase_council_verdicts","set_qa_gates","write_retro","write_drift_evidence","write_hallucination_evidence","write_mutation_evidence","knowledge_add","knowledge_remove","consensus_mine","summarize_work","doc_scan","lint"])],LaneSchema=exports_external.object({id:exports_external.string().min(1).max(80).regex(/^[A-Za-z0-9][A-Za-z0-9_.-]*$/).describe("Stable lane identifier, unique within this dispatch batch"),agent:exports_external.string().min(1).max(120).describe("Read-only swarm agent name, including any generated swarm prefix"),prompt:exports_external.string().min(1).max(MAX_PROMPT_CHARS).describe("Full lane prompt to send to the requested agent"),workflow_lane:exports_external.string().min(1).max(120).optional().describe("Required mechanical policy identifier in PR workflows; distinct from the retry-safe lane id"),owned_workflow_lanes:exports_external.array(exports_external.string().trim().min(1).max(120)).min(1).max(11).optional().describe("Complete dimension/family set a consolidated PR-review base or micro lane covers under the controller-computed depth tier; must include workflow_lane. Omit for singleton lanes."),feedback_item_ids:exports_external.array(exports_external.string().trim().min(1).max(120)).min(1).optional().describe("PR-feedback ledger item IDs owned exclusively by this lane"),review_item_ids:exports_external.array(exports_external.string().trim().min(1).max(160)).min(1).max(MAX_PR_REVIEW_COLLECTION_RECEIPT_ITEM_IDS).optional().describe("Candidate/finding IDs owned by a PR-review reviewer or critic lane; every ID requires a parseable verdict row")}),DispatchLanesArgsSchema=exports_external.object({lanes:exports_external.array(LaneSchema).min(1).max(MAX_LANES).describe("Read-only lane specs to dispatch concurrently"),common_prompt:exports_external.string().min(1).regex(/\S/,"common_prompt must contain non-whitespace content").max(MAX_PROMPT_CHARS-COMMON_PROMPT_SEPARATOR.length-1).optional().describe("Optional shared context prepended to every lane prompt. Send large shared context (PR diff, obligation ledger, scope) ONCE here instead of inlining the same blob into each lane prompt; this keeps the tool-call payload small and avoids malformed/truncated tool-call JSON. Combined common_prompt + per-lane prompt must not exceed the per-lane character limit."),max_concurrent:exports_external.number().int().min(1).max(MAX_LANES).optional().describe("Maximum lanes in flight at once; defaults to lane count"),timeout_ms:exports_external.number().int().min(10).max(MAX_TIMEOUT_MS4).optional().describe("Per-lane timeout in milliseconds. For blocking dispatch this covers session create and prompt execution; for async dispatch this covers launch only, never lane runtime."),orientation:exports_external.boolean().optional().describe("Prepend a bounded, deterministic repo-graph orientation block (mission-relevant files, repo hubs, freshness line) to common_prompt when the repo graph is fresh and relevant. No schema default: availability depends on graph state, resolved at execute time (omitted ⇒ attempted, skipped when no fresh graph exists). Explicitly false disables the block entirely.")}).superRefine(refineWorkflowLaneNamespace),PR_REVIEW_MICRO_TRIGGER_LANE_IDS=new Set(PR_REVIEW_TRIGGER_DEFINITIONS.map((definition)=>definition.id));function refineWorkflowLaneNamespace(value,ctx){let mode=value.mode;if(!mode)return;let isBase=mode.startsWith("swarm-pr-review:base"),isMicro=mode.startsWith("swarm-pr-review:micro");if(!isBase&&!isMicro)return;let valid=isBase?new Set(PR_REVIEW_BASE_DIMENSION_IDS):PR_REVIEW_MICRO_TRIGGER_LANE_IDS,vocabulary=isBase?PR_REVIEW_BASE_DIMENSION_IDS.join(", "):[...PR_REVIEW_MICRO_TRIGGER_LANE_IDS].join(", "),kind=isBase?"base dimension":"micro trigger";for(let lane of value.lanes){let labels=[...lane.workflow_lane?[lane.workflow_lane]:[],...lane.owned_workflow_lanes??[]];for(let label of labels)if(!valid.has(label)){ctx.addIssue({code:"custom",path:["lanes"],message:`lane workflow label "${label}" is not a ${kind} id for mode "${mode}"; valid ids: ${vocabulary}`});return}}}var DispatchLanesAsyncArgsSchema=DispatchLanesArgsSchema.extend({launch_timeout_ms:exports_external.number().int().min(10).max(MAX_TIMEOUT_MS4).optional().describe("Async launch acceptance timeout in milliseconds. This only bounds session creation and promptAsync acceptance; it is never a lane runtime timeout. Deprecated alias: timeout_ms."),batch_id:exports_external.string().min(1).max(MAX_BATCH_ID_CHARS2).regex(/^[A-Za-z0-9][A-Za-z0-9_.:-]*$/).optional().describe("Stable async batch id for later collection; generated when omitted"),mode:exports_external.string().min(1).max(80).optional().describe('Advisory workflow mode, such as deep-dive. PR-review stages are COLON-SUFFIXED and the suffix is required. Accepted values: swarm-pr-review:base, swarm-pr-review:micro, swarm-pr-review:council, swarm-pr-review:reviewer, swarm-pr-review:critic, swarm-pr-feedback:verification. A bare "swarm-pr-review" does NOT enter the PR-review path — it skips the merge-base bind and later fails with "exact merge-base scope was not verified".'),pr_head_sha:exports_external.string().min(1).max(80).optional().describe("Full 40-char SHA of the PR head commit under review. Required when mode starts with swarm-pr-review: or swarm-pr-feedback:."),base_sha:exports_external.string().regex(/^[0-9a-f]{6,64}$/i).optional().describe("Exact merge base of base_ref and pr_head_sha — NOT the base branch tip. The controller recomputes `git merge-base -- <base_ref> <pr_head_sha>` and rejects any mismatch. Required when mode starts with swarm-pr-review:."),base_ref:exports_external.string().regex(/^(?!-)[A-Za-z0-9][A-Za-z0-9._/-]{0,255}$/).optional().describe("Base branch ref used to recompute the merge base. Use the REMOTE-TRACKING form (origin/main), and compute base_sha against that same ref. A local branch ref (main, refs/heads/main) is only as fresh as the last fetch — the PR-review preflight fetches refs/pull/<N>/head and not the base branch, so a local ref commonly resolves to a different merge base and the dispatch is rejected. Required when mode starts with swarm-pr-review:."),scope:exports_external.string().min(1).max(500).optional(),trigger_evaluation:exports_external.array(PrReviewInlineTriggerRowSchema).min(1).optional().describe("Complete repository-agnostic trigger ledger required for the first swarm-pr-review:micro dispatch. The first successful micro dispatch freezes it in same-session workflow state; any subsequent micro batch may omit this property and reuse that exact frozen ledger. If supplied later, it must remain exactly identical. MATCHED families are dispatched and inapplicable families are NOT_TRIGGERED."),feedback_inventory:exports_external.array(exports_external.string().trim().min(1).max(120)).min(1).optional().describe("Complete immutable feedback item inventory required for swarm-pr-feedback:verification"),pr_review_wave_stage:exports_external.enum(["canary","fanout"]).optional().describe('PR_REVIEW base-only staged dispatch marker. Required with pr_review_wave_attempt at depth tier M or L while pr_review_resilience is enabled. Use "canary" for the singleton probe lane and "fanout" for the follow-up batch that partitions the remaining unresolved base obligations.'),pr_review_wave_attempt:exports_external.number().int().min(0).max(2).optional().describe("PR_REVIEW base-only staged attempt number, required together with pr_review_wave_stage at depth tier M or L while resilience is enabled: attempt 0 is the initial wave, followed by at most two retry attempts (1 and 2) over the exact unresolved-obligation target left by the previous attempt."),pr_review_contract_retry:exports_external.boolean().optional().describe("PR_REVIEW base-only contract retry marker. Use only for one admitted retry of exactly one dimension whose previous terminal record was a contract failure; it is mutually exclusive with pr_review_wave_stage and pr_review_wave_attempt and does not consume staged retry budget.")}),CollectLaneResultsArgsSchema=exports_external.object({batch_id:exports_external.string().min(1).max(MAX_BATCH_ID_CHARS2),wait:exports_external.boolean().optional().describe("Poll until all lanes settle or timeout"),timeout_ms:exports_external.number().int().min(0).max(MAX_COLLECT_TIMEOUT_MS).optional().describe("Total wait budget when wait=true"),include_pending:exports_external.boolean().optional().describe("Include pending/running lanes in lane_results. Defaults to true for non-blocking polls and false for wait=true joins."),cancel_pending:exports_external.boolean().optional().describe("Deprecated destructive flag: a no-op request, kept for schema compatibility. This collector is observation-only and never aborts or settles a lane. When true, the response carries typed cancellation_refused guidance pointing at cancel_lane_batch (confirm + reason), the only authorized cancellation surface.")});function validatePrReviewMicroDispatch(args2,depthTier){let evaluation=args2.trigger_evaluation;if(!evaluation)throw Error("BLOCKED: initial PR_REVIEW micro dispatch requires the complete trigger_evaluation ledger; after the first successful same-session micro dispatch freezes it, a later micro batch may omit the property and reuse that exact ledger");let validated;try{validated=validatePrReviewInlineTriggerLedger(evaluation)}catch(error93){throw Error(`BLOCKED: ${error93 instanceof Error?error93.message:String(error93)}`)}let required3=new Set(validated.matchedIds),laneOwnership=args2.lanes.map((lane)=>({label:lane.workflow_lane??"",owned:lane.owned_workflow_lanes?.length?lane.owned_workflow_lanes:lane.workflow_lane?[lane.workflow_lane]:[]}));if(depthTier==="L"&&laneOwnership.some((lane)=>lane.owned.length!==1))throw Error("BLOCKED: PR_REVIEW micro dispatch at depth tier L requires one dedicated lane per risk family; consolidated owned_workflow_lanes are allowed only at tiers S and M");let flattened=laneOwnership.flatMap((lane)=>lane.owned),duplicates=flattened.filter((value,index)=>flattened.indexOf(value)!==index),unmatched=flattened.filter((triggerId)=>!required3.has(triggerId)),invalidLabels=laneOwnership.filter((lane)=>lane.label.length===0||!lane.owned.includes(lane.label)).map((lane)=>lane.label||"(missing workflow_lane)");if(invalidLabels.length>0||duplicates.length>0||unmatched.length>0)throw Error(`BLOCKED: PR_REVIEW micro lanes must have unique workflow_lane IDs from the mandatory repository-agnostic lane set, with workflow_lane contained in its own owned set; invalid: ${[...new Set([...invalidLabels,...duplicates,...unmatched])].join(", ")}`);let coversAllFamilies=required3.size>0&&[...required3].every((id)=>flattened.includes(id)),microFloor=Math.min(PR_REVIEW_MICRO_LANE_FLOORS[depthTier],required3.size);if(coversAllFamilies&&laneOwnership.length<microFloor)throw Error(`BLOCKED: PR_REVIEW micro dispatch at depth tier ${depthTier} covering all ${required3.size} matched risk families requires at least ${microFloor} lanes; received ${laneOwnership.length}. Partial retry batches covering a subset of matched families are exempt; NOT_TRIGGERED families must not be dispatched.`)}var _internals298={getSessionOps:()=>swarmState.opencodeClient?.session??null,getGeneratedAgentNames:()=>swarmState.generatedAgentNames,createParallelDispatcher,loadPluginConfig,resolvePrWorkflowRevisionDigestAsync,resolveExactMergeBaseAsync,validatePrWorkflowTransportRecovery,validateExactStructuredReceiptCoverage:validateExactStructuredReceiptCoverage2,now:()=>Date.now(),sleep:sleep5};class PrReviewStructuredPromptUnsupportedError extends Error{constructor(message="structured PR-review prompt transport is unsupported"){super(message);this.name="PrReviewStructuredPromptUnsupportedError"}}function effectivePrReviewResilienceConfig(configured,gateState){let policy=gateState?.prReviewResilience?.policy;return{enabled:configured.enabled,canary_probe_ms:policy?.canaryProbeMs??configured.canary_probe_ms,status_probe_timeout_ms:policy?.statusProbeTimeoutMs??configured.status_probe_timeout_ms,correlated_failure_threshold:policy?.correlatedFailureThreshold??configured.correlated_failure_threshold,max_retry_attempts_after_initial:policy?.maxRetryAttemptsAfterInitial??configured.max_retry_attempts_after_initial,circuit_open_duration_ms:policy?.circuitOpenDurationMs??configured.circuit_open_duration_ms}}async function executeDispatchLanes(args2,directory,context={}){let parsed=DispatchLanesArgsSchema.safeParse(args2);if(!parsed.success)return failureResult2({failure_class:"invalid_args",message:"Invalid dispatch_lanes arguments",errors:boundZodIssues(parsed.error.issues)});let duplicateLaneIds=findDuplicateLaneIds(parsed.data.lanes);if(duplicateLaneIds.length>0)return failureResult2({failure_class:"invalid_args",message:"Lane IDs must be unique within one dispatch_lanes batch",errors:duplicateLaneIds.map((id)=>`Duplicate lane id: ${id}`)});if(context.sessionID?.trim())try{await enforcePrWorkflowDispatchLanesAsync(directory,context.sessionID,"dispatch_lanes")}catch(error93){return failureResult2({failure_class:"invalid_args",message:error93 instanceof Error?error93.message:"PR workflow gate rejected dispatch"})}let session=_internals298.getSessionOps();if(!session)return failureResult2({failure_class:"no_client",message:"OpenCode session client is not available"});let orientedCommonPrompt=await augmentCommonPromptWithOrientation(directory,parsed.data.lanes,parsed.data.common_prompt,parsed.data.orientation,context.sessionID),common=applyCommonPrompt(parsed.data.lanes,orientedCommonPrompt);if(!common.ok)return failureResult2({failure_class:"invalid_args",message:"Invalid dispatch_lanes arguments",errors:common.errors});let requiresMandatoryExplorerFormat=common.lanes.some((lane)=>lane.workflow_lane!==void 0||(lane.owned_workflow_lanes?.length??0)>0),formatted=applyExplorerFormatSuffix(common.lanes,{failClosed:requiresMandatoryExplorerFormat});if(!formatted.ok)return failureResult2({failure_class:"invalid_args",message:"Invalid explorer output-format contract",errors:formatted.errors});let lanes=formatted.lanes,maxConcurrent=Math.min(parsed.data.max_concurrent??lanes.length,lanes.length,MAX_LANES),timeoutMs=parsed.data.timeout_ms??DEFAULT_TIMEOUT_MS5,dispatcher=_internals298.createParallelDispatcher({enabled:!0,maxConcurrentTasks:maxConcurrent,evidenceLockTimeoutMs:0}),limit=pLimit(maxConcurrent);try{let laneResults=await Promise.all(lanes.map((lane)=>limit(()=>runLane(session,dispatcher,lane,directory,timeoutMs,context))));return buildResult(laneResults,maxConcurrent,timeoutMs)}finally{dispatcher.shutdown()}}async function executeDispatchLanesAsync(args2,directory,context={}){let parsed=DispatchLanesAsyncArgsSchema.safeParse(args2);if(!parsed.success)return asyncFailureResult({failure_class:"invalid_args",message:"Invalid dispatch_lanes_async arguments",errors:boundZodIssues(parsed.error.issues)});if(typeof parsed.data.mode==="string"){let normalizedMode=parsed.data.mode.trim();parsed.data.mode=normalizedMode.length>0?normalizedMode:void 0}let duplicateLaneIds=findDuplicateLaneIds(parsed.data.lanes);if(duplicateLaneIds.length>0)return asyncFailureResult({failure_class:"invalid_args",message:"Lane IDs must be unique within one dispatch_lanes_async batch",errors:duplicateLaneIds.map((id)=>`Duplicate lane id: ${id}`)});let requestedBatchId=parsed.data.batch_id??makeBatchId(),session=_internals298.getSessionOps();if(!session||typeof session.promptAsync!=="function")return asyncFailureResult({failure_class:"no_client",message:"OpenCode session promptAsync client is not available"});let orientedCommonPrompt=await augmentCommonPromptWithOrientation(directory,parsed.data.lanes,parsed.data.common_prompt,parsed.data.orientation,context.sessionID),common=applyCommonPrompt(parsed.data.lanes,orientedCommonPrompt);if(!common.ok)return asyncFailureResult({failure_class:"invalid_args",message:"Invalid dispatch_lanes_async arguments",errors:common.errors});let lanes=common.lanes,batchId=requestedBatchId,duplicateRead=findByBatchIdDetailed(directory,batchId);if(duplicateRead.status==="uncertain")return asyncFailureResult({failure_class:"invalid_args",message:`batch uniqueness unverifiable: delegation store unreadable after ${duplicateRead.attempts} attempts (${duplicateRead.reason})`,errors:[`batch_id uniqueness could not be verified: ${batchId}; retry once the delegation store is readable`]});if(duplicateRead.value.length>0)return asyncFailureResult({failure_class:"invalid_args",message:`Async lane batch already exists: ${batchId}`,errors:[`batch_id must be unique: ${batchId}`]});let verifiedPrHead,workflowRevisionDigest,verifiedReviewBaseSha,prReviewWorkflowInstanceId,prReviewWorkflowRevision,bareWorkflowMode=["swarm-pr-review","swarm-pr-feedback"].find((prefix)=>parsed.data.mode?.trim()===prefix);if(bareWorkflowMode)return asyncFailureResult({failure_class:"invalid_args",message:bareWorkflowMode==="swarm-pr-review"?'BLOCKED: mode "swarm-pr-review" is missing its required stage suffix. Use one of: swarm-pr-review:base, swarm-pr-review:micro, swarm-pr-review:council, swarm-pr-review:reviewer, swarm-pr-review:critic.':'BLOCKED: mode "swarm-pr-feedback" is missing its required stage suffix. Use swarm-pr-feedback:verification.'});if((parsed.data.pr_review_wave_stage!==void 0||parsed.data.pr_review_wave_attempt!==void 0)&&parsed.data.mode!=="swarm-pr-review:base")return asyncFailureResult({failure_class:"invalid_args",message:'BLOCKED: pr_review_wave_stage and pr_review_wave_attempt are valid only when mode is exactly "swarm-pr-review:base".'});if(parsed.data.pr_review_contract_retry&&parsed.data.mode!=="swarm-pr-review:base")return asyncFailureResult({failure_class:"invalid_args",message:'BLOCKED: pr_review_contract_retry is valid only when mode is exactly "swarm-pr-review:base".'});if(context.sessionID?.trim()&&parsed.data.pr_head_sha&&(parsed.data.mode?.startsWith("swarm-pr-review:")||parsed.data.mode?.startsWith("swarm-pr-feedback:")))try{verifiedPrHead=await assertCurrentCheckoutHead(directory,parsed.data.pr_head_sha,parsed.data.mode?.startsWith("swarm-pr-feedback:")?"PR_FEEDBACK":"PR_REVIEW");let resolvedDigest=_internals298.resolvePrWorkflowRevisionDigestAsync!==resolvePrWorkflowRevisionDigestAsync?await _internals298.resolvePrWorkflowRevisionDigestAsync(directory,parsed.data.pr_head_sha).then((digest5)=>digest5?{ok:!0,digest:digest5}:{ok:!1,reason:"seam-unavailable"}):await resolvePrWorkflowRevisionDigestDetailedAsync(directory,parsed.data.pr_head_sha);if(!resolvedDigest.ok)throw Error(`BLOCKED: PR workflow could not compute a bounded current-revision digest for pr_head_sha "${parsed.data.pr_head_sha}"; `+describePrWorkflowRevisionDigestFailure(resolvedDigest));if(workflowRevisionDigest=resolvedDigest.digest,parsed.data.mode?.startsWith("swarm-pr-review:")){if(!parsed.data.base_sha||!parsed.data.base_ref)throw Error("BLOCKED: PR_REVIEW dispatch requires exact base_sha and base_ref");let resolvedBase=await _internals298.resolveExactMergeBaseAsync(directory,parsed.data.base_ref,parsed.data.pr_head_sha);if(!resolvedBase)throw Error(`BLOCKED: PR_REVIEW could not resolve a merge base for base_ref="${parsed.data.base_ref}" and pr_head_sha=${parsed.data.pr_head_sha} in "${directory}". The ref may not exist locally — the PR-review preflight fetches only refs/pull/<N>/head, not the base branch. Fetch it and pass the remote-tracking form using two separate standalone commands. First run: git -C "${directory}" fetch origin <base-branch>. Then run: git -C "${directory}" merge-base -- origin/<base-branch> ${parsed.data.pr_head_sha}`);if(resolvedBase.toLowerCase()!==parsed.data.base_sha.toLowerCase())throw Error(`BLOCKED: PR_REVIEW merge-base mismatch. git merge-base -- "${parsed.data.base_ref}" ${parsed.data.pr_head_sha} in "${directory}" resolved to ${resolvedBase}, but base_sha=${parsed.data.base_sha} was passed. If you computed base_sha against a remote-tracking ref, pass that SAME ref as base_ref — a local branch of the same name (main, refs/heads/main) may be stale and yields a different merge base. Verify with: git -C "${directory}" merge-base -- "${parsed.data.base_ref}" ${parsed.data.pr_head_sha}`);verifiedReviewBaseSha=resolvedBase}}catch(error93){return asyncFailureResult({failure_class:"invalid_args",message:error93 instanceof Error?error93.message:"PR workflow checkout head verification failed"})}if(parsed.data.mode?.startsWith("swarm-pr-review:")&&!parsed.data.pr_head_sha)return asyncFailureResult({failure_class:"invalid_args",message:"BLOCKED: active PR_REVIEW dispatch requires pr_head_sha"});if(parsed.data.mode?.startsWith("swarm-pr-feedback:")&&!parsed.data.pr_head_sha)return asyncFailureResult({failure_class:"invalid_args",message:"BLOCKED: PR_FEEDBACK dispatch requires pr_head_sha"});let prReviewPresentationOrder,prReviewOrderUnstableItemIds,prReviewReviewerSeverities;if(context.sessionID?.trim()&&parsed.data.pr_head_sha&&(parsed.data.mode==="swarm-pr-review:reviewer"||parsed.data.mode==="swarm-pr-review:critic"))try{if((await readPrWorkflowGateState(directory,context.sessionID))?.mode==="PR_REVIEW")if(parsed.data.mode==="swarm-pr-review:reviewer")prReviewPresentationOrder=await derivePrReviewPresentationOrder(directory,context.sessionID);else{prReviewOrderUnstableItemIds=await derivePrReviewOrderUnstableItems(directory,context.sessionID);let derivedSeverities=await derivePrReviewReviewerSeverities(directory,context.sessionID);if(derivedSeverities.size>0)prReviewReviewerSeverities=Object.assign(Object.create(null),Object.fromEntries(derivedSeverities))}}catch(error93){return asyncFailureResult({failure_class:"invalid_args",message:error93 instanceof Error?error93.message:"PR workflow counterbalancing derivation failed"})}let formatExplorerLanes=(input)=>applyExplorerFormatSuffix(input,{failClosed:Boolean(parsed.data.mode?.startsWith("swarm-pr-review:")||parsed.data.mode?.startsWith("swarm-pr-feedback:")),mode:parsed.data.mode}),contractPromptLanes=(input)=>applyPrWorkflowPromptContract(input,{mode:parsed.data.mode,batchId:parsed.data.mode==="swarm-pr-review:base"||parsed.data.mode==="swarm-pr-review:micro"?batchId:void 0,prHeadSha:verifiedPrHead,revisionDigest:workflowRevisionDigest,scope:verifiedReviewBaseSha?`complete PR diff ${verifiedReviewBaseSha}...${verifiedPrHead}`:"the complete immutable feedback inventory on the exact checked-out revision",callerFocus:parsed.data.scope,presentationOrder:prReviewPresentationOrder,orderUnstableItemIds:prReviewOrderUnstableItemIds,reviewerSeverities:prReviewReviewerSeverities});if(parsed.data.pr_review_wave_stage==="fanout"||(parsed.data.mode==="swarm-pr-review:base"||parsed.data.mode==="swarm-pr-review:micro")&&parsed.data.lanes.some((lane)=>(lane.owned_workflow_lanes?.length??0)>0)){let formatted=formatExplorerLanes(lanes);if(!formatted.ok)return asyncFailureResult({failure_class:"invalid_args",message:"Invalid mandatory PR workflow explorer output contract",errors:formatted.errors});let contracted=contractPromptLanes(formatted.lanes);if(!contracted.ok)return asyncFailureResult({failure_class:"invalid_args",message:"Invalid mandatory PR workflow prompt contract",errors:contracted.errors});lanes=contracted.lanes}else{let contracted=contractPromptLanes(lanes);if(!contracted.ok)return asyncFailureResult({failure_class:"invalid_args",message:"Invalid mandatory PR workflow prompt contract",errors:contracted.errors});let formatted=formatExplorerLanes(contracted.lanes);if(!formatted.ok)return asyncFailureResult({failure_class:"invalid_args",message:"Invalid mandatory PR workflow explorer output contract",errors:formatted.errors});lanes=formatted.lanes}if(context.sessionID?.trim())try{let gateState=await enforcePrWorkflowDispatchLanesAsync(directory,context.sessionID,"dispatch_lanes_async");if(!gateState&&parsed.data.mode?.startsWith("swarm-pr-review:"))gateState=await activatePrWorkflow(directory,context.sessionID,"PR_REVIEW",{requireCheckoutPreflight:!0});else if(!gateState&&parsed.data.mode==="swarm-pr-feedback:verification")gateState=await activatePrWorkflow(directory,context.sessionID,"PR_FEEDBACK",{requireCheckoutPreflight:!0});if(gateState?.mode==="PR_REVIEW"){let headSha=parsed.data.pr_head_sha;if(!headSha)throw Error("BLOCKED: active PR_REVIEW dispatch requires pr_head_sha");if(!verifiedReviewBaseSha||!parsed.data.base_ref)throw Error("BLOCKED: PR_REVIEW exact merge-base scope was not verified");gateState=await bindPrReviewBase(directory,context.sessionID,{prHeadSha:headSha,baseRef:parsed.data.base_ref,baseSha:verifiedReviewBaseSha});let laneSpecs=parsed.data.lanes.map((lane)=>({laneId:lane.id,workflowLane:lane.workflow_lane,reviewItemIds:lane.review_item_ids,ownedWorkflowLanes:lane.owned_workflow_lanes,agent:lane.agent})),depthTier=gateState.prReviewDepthTier??"L";if(parsed.data.mode==="swarm-pr-review:base"){let configuredResilience=_internals298.loadPluginConfig(directory).pr_review_resilience??DEFAULT_PR_REVIEW_RESILIENCE_CONFIG,effectiveResilience=effectivePrReviewResilienceConfig(configuredResilience,gateState),contractRetry=parsed.data.pr_review_contract_retry===!0,waveStage=parsed.data.pr_review_wave_stage,waveAttempt=parsed.data.pr_review_wave_attempt;if(contractRetry&&(waveStage!==void 0||waveAttempt!==void 0))throw Error("BLOCKED: PR_REVIEW contract retry is mutually exclusive with pr_review_wave_stage and pr_review_wave_attempt");if(waveStage===void 0!==(waveAttempt===void 0))throw Error("BLOCKED: PR_REVIEW staged base dispatch requires both pr_review_wave_stage and pr_review_wave_attempt together");if(waveStage!==void 0&&waveAttempt!==void 0&&(!effectiveResilience.enabled||depthTier==="S"))throw Error("BLOCKED: staged PR_REVIEW base dispatch is valid only when pr_review_resilience is enabled at depth tier M or L");if(effectiveResilience.enabled&&depthTier!=="S"&&!contractRetry&&(waveStage===void 0||waveAttempt===void 0))throw Error("BLOCKED: PR_REVIEW base dispatch at depth tier M or L requires canary-first pr_review_wave_stage and pr_review_wave_attempt while pr_review_resilience is enabled");let stagedBaseDispatch=effectiveResilience.enabled&&depthTier!=="S"&&waveStage!==void 0&&waveAttempt!==void 0,effectiveMaxConcurrent=parsed.data.max_concurrent??parsed.data.lanes.length;if((gateState.prReviewBaseDispatches?.length??0)===0&&!stagedBaseDispatch){let ownedDimensionIds=parsed.data.lanes.flatMap((lane)=>lane.owned_workflow_lanes?.length?lane.owned_workflow_lanes:lane.workflow_lane?[lane.workflow_lane]:[]),coversAllSixExactlyOnce=ownedDimensionIds.length===PR_REVIEW_BASE_DIMENSION_IDS.length&&new Set(ownedDimensionIds).size===PR_REVIEW_BASE_DIMENSION_IDS.length&&PR_REVIEW_BASE_DIMENSION_IDS.every((dimensionId)=>ownedDimensionIds.includes(dimensionId));if(depthTier==="L"){if(parsed.data.lanes.length!==6||effectiveMaxConcurrent!==6||parsed.data.lanes.some((lane)=>(lane.owned_workflow_lanes?.length??1)!==1))throw Error(`BLOCKED: initial PR_REVIEW base dispatch requires exactly six lanes and max_concurrent: 6 at depth tier L (consolidated owned_workflow_lanes are allowed only at tiers S and M); each lane owns exactly one dimension and may set workflow_lane to it, omitting owned_workflow_lanes; valid dimensions: ${PR_REVIEW_BASE_DIMENSION_IDS.join(", ")}`)}else if(!coversAllSixExactlyOnce||parsed.data.lanes.length<PR_REVIEW_BASE_LANE_FLOORS[depthTier]||parsed.data.lanes.length>PR_REVIEW_BASE_DIMENSION_IDS.length||effectiveMaxConcurrent!==parsed.data.lanes.length)throw Error(`BLOCKED: initial PR_REVIEW base dispatch at depth tier ${depthTier} requires between ${PR_REVIEW_BASE_LANE_FLOORS[depthTier]} and ${PR_REVIEW_BASE_DIMENSION_IDS.length} lanes whose owned_workflow_lanes partition all six dimensions exactly once, with max_concurrent equal to the lane count; valid dimensions: ${PR_REVIEW_BASE_DIMENSION_IDS.join(", ")}; a lane with one dimension may set workflow_lane to it and omit owned_workflow_lanes`)}if(stagedBaseDispatch){if(waveStage==="canary"){if(parsed.data.lanes.length!==1||effectiveMaxConcurrent!==1||parsed.data.lanes.some((lane)=>(lane.owned_workflow_lanes?.length??1)!==1))throw Error("BLOCKED: PR_REVIEW staged base canary requires exactly one singleton lane and max_concurrent: 1")}else if(effectiveMaxConcurrent!==parsed.data.lanes.length)throw Error("BLOCKED: PR_REVIEW staged base fanout requires max_concurrent equal to the lane count")}for(let lane of parsed.data.lanes)if(resolveGeneratedAgentRole(lane.agent,swarmState.generatedAgentNames)!=="explorer")throw Error(`BLOCKED: PR_REVIEW base lane "${lane.id}" must use the explorer role`);gateState=await enforcePrReviewBaseDimensions(directory,context.sessionID,laneSpecs,{batchId,prHeadSha:headSha,revisionDigest:workflowRevisionDigest,prReviewContractRetry:contractRetry,prReviewWaveStage:waveStage,prReviewWaveAttempt:waveAttempt,prReviewResiliencePolicy:effectiveResilience}),prReviewWorkflowInstanceId=gateState.workflowInstanceId,prReviewWorkflowRevision=gateState.revision}else if(parsed.data.mode==="swarm-pr-review:micro"){if(await assertPrReviewBaseCoverageSettled2(directory,context.sessionID),gateState.prHeadSha&&gateState.prHeadSha!==headSha)throw Error(`BLOCKED: PR_REVIEW head mismatch; expected "${gateState.prHeadSha}", received "${headSha}"`);for(let lane of parsed.data.lanes)if(resolveGeneratedAgentRole(lane.agent,swarmState.generatedAgentNames)!=="explorer")throw Error(`BLOCKED: PR_REVIEW micro lane "${lane.id}" must use the explorer role`);let effectiveTriggerEvaluation=parsed.data.trigger_evaluation!==void 0?parsed.data.trigger_evaluation:gateState.prReviewTriggerLedger;validatePrReviewMicroDispatch({...parsed.data,trigger_evaluation:effectiveTriggerEvaluation},depthTier),gateState=await bindPrReviewTriggerLedger(directory,context.sessionID,effectiveTriggerEvaluation),gateState=await recordPrReviewMicroFamilyDispatch(directory,context.sessionID,laneSpecs,{batchId,prHeadSha:headSha}),prReviewWorkflowInstanceId=gateState.workflowInstanceId,prReviewWorkflowRevision=gateState.revision}else if(parsed.data.mode==="swarm-pr-review:council"||parsed.data.mode==="swarm-pr-review:reviewer"||parsed.data.mode==="swarm-pr-review:critic"){let phase=parsed.data.mode.endsWith(":council")?"council":parsed.data.mode.endsWith(":reviewer")?"reviewer":"critic";if(parsed.data.lanes.some((lane)=>lane.owned_workflow_lanes))throw Error(`BLOCKED: PR_REVIEW ${phase} lanes must not declare owned_workflow_lanes; depth-tier consolidation applies only to base and micro discovery lanes`);for(let lane of parsed.data.lanes){let role=resolveGeneratedAgentRole(lane.agent,swarmState.generatedAgentNames);if(phase==="council"&&!role.startsWith("council_")||phase==="reviewer"&&role!=="reviewer"||phase==="critic"&&role!=="critic")throw Error(`BLOCKED: PR_REVIEW ${phase} lane "${lane.id}" uses invalid role "${role||lane.agent}"${phase==="critic"?" — PR critic lanes must use the critic agent (critic_finding_validator and other critic-family roles cannot emit [CRITIC] rows)":""}`);let agentValidation=validateLaneAgent(lane.agent,context);if(!agentValidation.ok)throw Error(`BLOCKED: PR_REVIEW ${phase} lane "${lane.id}" agent "${lane.agent}" is not launchable on this host: ${agentValidation.error}`)}await recordPrReviewValidationBatch(directory,context.sessionID,phase,laneSpecs,{batchId,prHeadSha:headSha,expectedPresentationOrder:prReviewPresentationOrder,generatedAgentNames:swarmState.generatedAgentNames})}else throw Error("BLOCKED: active PR_REVIEW requires a structured base, micro, council, reviewer, or critic mode")}else if(gateState?.mode==="PR_FEEDBACK"){let headSha=parsed.data.pr_head_sha;if(!headSha)throw Error("BLOCKED: PR_FEEDBACK dispatch requires pr_head_sha");if(parsed.data.lanes.some((lane)=>lane.owned_workflow_lanes))throw Error("BLOCKED: PR_FEEDBACK lanes must not declare owned_workflow_lanes; depth-tier consolidation applies only to PR_REVIEW base and micro discovery lanes");if(parsed.data.mode==="swarm-pr-feedback:verification")await declarePrFeedbackInventory(directory,context.sessionID,parsed.data.feedback_inventory??[],{prHeadSha:headSha}),await enforcePrFeedbackVerificationOwnership(directory,context.sessionID,parsed.data.lanes.map((lane)=>({laneId:lane.id,ownedItemIds:lane.feedback_item_ids??[]})),{batchId,prHeadSha:headSha});else if(parsed.data.mode==="swarm-pr-feedback:stage-b-reviewer"||parsed.data.mode==="swarm-pr-feedback:stage-b-test"||parsed.data.mode==="swarm-pr-feedback:closeout-reviewer"||parsed.data.mode==="swarm-pr-feedback:closeout-critic"){if(parsed.data.lanes.length!==1||(parsed.data.max_concurrent??parsed.data.lanes.length)!==1)throw Error("BLOCKED: each ordered PR_FEEDBACK gate requires exactly one lane and max_concurrent: 1");let phase=parsed.data.mode.slice(18),lane=parsed.data.lanes[0],role=resolveGeneratedAgentRole(lane.agent,swarmState.generatedAgentNames),expectedRole=phase==="stage-b-test"?"test_engineer":phase==="closeout-critic"?"critic":"reviewer";if(lane.workflow_lane!==phase||role!==expectedRole)throw Error(`BLOCKED: PR_FEEDBACK ${phase} requires workflow_lane "${phase}" and role "${expectedRole}"`);await recordPrFeedbackGateBatch(directory,context.sessionID,phase,{laneId:lane.id,ownedItemIds:lane.feedback_item_ids??[]},{batchId,prHeadSha:headSha,revisionDigest:workflowRevisionDigest??""})}else throw Error("BLOCKED: active PR_FEEDBACK requires structured verification, Stage B reviewer/test, and closeout reviewer/critic modes")}}catch(error93){return asyncFailureResult({failure_class:error93 instanceof PrReviewResilienceCircuitOpenError?"circuit_open":error93 instanceof PrReviewResilienceRetryExhaustedError?"retry_exhausted":"invalid_args",message:error93 instanceof Error?error93.message:"PR workflow gate rejected dispatch"})}let canonicalWorkflowScope=verifiedReviewBaseSha?`complete PR diff ${verifiedReviewBaseSha}...${verifiedPrHead}`:parsed.data.mode?.startsWith("swarm-pr-feedback:")?"the complete immutable feedback inventory on the exact checked-out revision":parsed.data.scope,maxConcurrent=Math.min(parsed.data.max_concurrent??lanes.length,lanes.length,MAX_LANES),launchTimeoutMs=parsed.data.launch_timeout_ms??parsed.data.timeout_ms??DEFAULT_ASYNC_LAUNCH_TIMEOUT_MS,dispatcher=_internals298.createParallelDispatcher({enabled:!0,maxConcurrentTasks:maxConcurrent,evidenceLockTimeoutMs:0}),limit=pLimit(maxConcurrent);try{let laneResults=await Promise.all(lanes.map((lane)=>limit(()=>launchAsyncLane({session,dispatcher,lane,directory,timeoutMs:launchTimeoutMs,context,batchId,mode:parsed.data.mode,prHeadSha:parsed.data.pr_head_sha,gitHead:verifiedPrHead,dirtyHash:workflowRevisionDigest,scope:canonicalWorkflowScope,prReviewWorkflowInstanceId,prReviewWorkflowRevision}))));if(parsed.data.mode==="swarm-pr-review:base"&&context.sessionID?.trim()&&(parsed.data.pr_review_wave_stage!==void 0||parsed.data.pr_review_contract_retry===!0))try{await rollbackPrReviewBaseAdmissionIfUnlaunched(directory,context.sessionID,batchId,parsed.data.pr_review_contract_retry===!0)}catch(error93){throw log("pr-review base-admission rollback failed",{batchId,sessionID:context.sessionID,error:error93 instanceof Error?error93.message:String(error93)}),error93}if((parsed.data.mode==="swarm-pr-review:reviewer"||parsed.data.mode==="swarm-pr-review:critic")&&context.sessionID?.trim()&&!laneResults.some((lane)=>lane.status==="pending"))try{await rollbackPrReviewValidationBatchIfUnlaunched(directory,context.sessionID,batchId)}catch(error93){log("pr-review validation-batch rollback failed",{batchId,sessionID:context.sessionID,error:error93 instanceof Error?error93.message:String(error93)})}let failed=laneResults.filter((lane)=>lane.status==="failed"),rejected2=laneResults.filter((lane)=>lane.status==="rejected"),pending=laneResults.filter((lane)=>lane.status==="pending");return{success:failed.length===0&&rejected2.length===0,batch_id:batchId,dispatched:laneResults.length,pending:pending.length,failed:failed.length,rejected:rejected2.length,max_concurrent:maxConcurrent,launch_timeout_ms:launchTimeoutMs,timeout_ms:launchTimeoutMs,lane_results:laneResults}}finally{dispatcher.shutdown()}}async function executeCollectLaneResults(args2,directory,context={}){let parsed=CollectLaneResultsArgsSchema.safeParse(args2);if(!parsed.success)return collectFailureResult({failure_class:"invalid_args",batch_id:"",message:"Invalid collect_lane_results arguments",errors:boundZodIssues(parsed.error.issues)});let timeoutMs=parsed.data.timeout_ms??DEFAULT_COLLECT_TIMEOUT_MS,deadline=_internals298.now()+timeoutMs,hostTimeouts=new Set,collectionResourceFailures=new Map,receiptAppendFailureLogs=new Set,settleFailureLogs=new Map,batchFilter=context.sessionID!==void 0?{parentSessionId:context.sessionID}:void 0,initialRead=findByBatchIdDetailed(directory,parsed.data.batch_id,batchFilter);if(initialRead.status==="uncertain")return collectFailureResult({failure_class:"store_unreadable",batch_id:parsed.data.batch_id,message:`Delegation store unreadable after ${initialRead.attempts} attempts; batch ${parsed.data.batch_id} is UNKNOWN, not absent (${initialRead.reason})`});let records=initialRead.value;if(records.length===0)return collectFailureResult({failure_class:"not_found",batch_id:parsed.data.batch_id,message:`No async lane batch found for ${parsed.data.batch_id}`});await recoverTerminalLaneReceipts(directory,records);let revisionSnapshots=new Map,supersessionScannedCorrelationIds=new Set,session=_internals298.getSessionOps();if(!session||typeof session.messages!=="function"){let reviewReceiptFallbacks2=await resolvePrReviewReceiptFallbacks(directory,context.sessionID,records),result2=buildCollectResult(parsed.data.batch_id,records,parsed.data.include_pending??parsed.data.wait!==!0,{directory,sessionID:context.sessionID,reviewReceipts:reviewReceiptFallbacks2}),observed=reducePrReviewEvent({sessionID:context.sessionID??"",revision:0},{type:"collection_observed",diagnostic:"host_unavailable",pendingLaneIds:records.filter((record3)=>!isTerminalDelegationStatus2(record3.status)).map((record3)=>record3.laneId??record3.correlationId)}),diagnosticCode=observed.status==="applied"?observed.effects.find((effect)=>effect.kind==="emit_diagnostic")?.code??"collection_host_unavailable":"collection_host_unavailable";if(result2.failure_class="no_client",result2.message="OpenCode session messages client is not available; lane state is reported as stored and no lane was cancelled or terminalized. Poll again once the host client is available, or use cancel_lane_batch (confirm + reason) for an explicit cancellation; the presumed-stale backstop remains.",parsed.data.cancel_pending===!0){let refusals=collectCancellationRefusals(records,null,"observer-unavailable");if(refusals.length>0)result2.cancellation_refused=refusals}return result2.errors=[`OpenCode session messages client is not available (${diagnosticCode})`],await attachPendingLaneLiveness(result2,directory,records,deadline),result2}let keepPolling=!0,pollIntervalMs=COLLECT_POLL_INTERVAL_MS,lastStatusTypes=null;while(keepPolling){if(records.some((record3)=>record3.status==="pending"||record3.status==="running"))lastStatusTypes=await probeLaneStatusTypesForPass(session,directory,deadline,hostTimeouts);await collectOnce(session,directory,records,lastStatusTypes,deadline,hostTimeouts,receiptAppendFailureLogs,collectionResourceFailures,settleFailureLogs,revisionSnapshots),await supersedeStaleLivenessVerdictLanesFromCollect({session,directory,records,deadline,hostTimeouts,revisionSnapshots,scannedCorrelationIds:supersessionScannedCorrelationIds}),await sweepStaleAsyncLaneRecords(session,directory,records,DEFAULT_ASYNC_STALE_TIMEOUT_MS,deadline,hostTimeouts);let pollRead=findByBatchIdDetailed(directory,parsed.data.batch_id,batchFilter);if(pollRead.status==="uncertain"){if(addLaneDiagnostic(collectionResourceFailures,`batch:${parsed.data.batch_id}`,`collect re-read uncertain: delegation store unreadable after ${pollRead.attempts} attempts (${pollRead.reason}); settlement UNKNOWN, continuing to poll`),parsed.data.wait!==!0){keepPolling=!1;continue}}else if(records=pollRead.value,allSettled(records)||parsed.data.wait!==!0){keepPolling=!1;continue}if(_internals298.now()>=deadline){keepPolling=!1;continue}await _internals298.sleep(Math.min(pollIntervalMs,Math.max(0,deadline-_internals298.now()))),pollIntervalMs=nextCollectPollInterval(pollIntervalMs)}let reviewReceiptFallbacks=await resolvePrReviewReceiptFallbacks(directory,context.sessionID,records),result=buildCollectResult(parsed.data.batch_id,records,parsed.data.include_pending??parsed.data.wait!==!0,{directory,sessionID:context.sessionID,reviewReceipts:reviewReceiptFallbacks});if(await attachPendingLaneLiveness(result,directory,records,deadline),parsed.data.cancel_pending===!0){let refusals=collectCancellationRefusals(records,lastStatusTypes,"observer-degraded");if(refusals.length>0)result.cancellation_refused=refusals,result.message=`${result.message?`${result.message} `:""}cancel_pending is observation-only: ${refusals.length} lane(s) refused; use cancel_lane_batch (confirm: true + reason) for an authorized cancellation.`}if(hostTimeouts.size>0)result.message=result.pending>0?"Collection deadline exhausted while waiting for OpenCode host calls; pending lanes remain safe to retry.":"Collection recovered and settled all lanes despite bounded OpenCode host-call timeouts; no collection retry is required.";let starvedProbeCount=(result.pending_liveness??[]).filter((lane)=>lane.degradedReason===PR_WORKFLOW_PROBE_SKIPPED_NO_BUDGET_REASON).length;if(starvedProbeCount>0)result.message=`${result.message?`${result.message} `:""}${starvedProbeCount} pending-liveness probe(s) skipped for budget (${PR_WORKFLOW_PROBE_SKIPPED_NO_BUDGET_REASON}); lanes may be further settled than reported.`;let diagnostics=assembleCollectionDiagnostics(hostTimeouts,settleFailureLogs,collectionResourceFailures);if(diagnostics.length>0)result.errors=diagnostics;return result}async function attachPendingLaneLiveness(result,directory,records,deadline){if(result.pending<=0)return;let pendingLiveness=await collectPrWorkflowPendingLaneLiveness(directory,records,{probeBudgetMs:Math.max(0,deadline-_internals298.now())});if(pendingLiveness.length>0)result.pending_liveness=pendingLiveness}async function createLaneSession(args2){let generation=1,decision=args2.dispatcher.dispatch(args2.lane.id);while(!0){if(decision.action!=="dispatch")return{ok:!1,generation,error:`dispatcher ${decision.action}: ${decision.reason}`};let createTimeoutMessage=`Lane "${args2.lane.id}" session.create timed out after ${args2.timeoutMs}ms`,createPromise;try{createPromise=args2.session.create(buildLaneSessionCreateArgs(args2.directory,args2.lane,args2.context))}catch(error93){createPromise=Promise.reject(error93)}let createTimedOut=!1;createPromise.then((result)=>{if(createTimedOut&&result.data?.id)scheduleSessionCleanup(args2.session,result.data.id)}).catch(()=>{return});let failureSignal,failureMessage;try{let result=await withTimeout2(createPromise,args2.timeoutMs,createTimeoutMessage);if(result.data?.id)return{ok:!0,sessionId:result.data.id,generation,slotId:decision.slot.slotId,runId:decision.slot.runId};failureSignal=result.error,failureMessage=result.error===void 0||result.error===null?"session.create failed: malformed response without a session id":`session.create failed: ${formatError3(result.error)}`}catch(error93){if(failureSignal=error93,failureMessage=formatError3(error93),failureMessage===createTimeoutMessage)createTimedOut=!0}if((createTimedOut||isRetryableSessionCreateFailure(failureSignal))&&generation<MAX_SESSION_CREATE_GENERATIONS){args2.dispatcher.releaseSlot(decision.slot.slotId),generation++,decision=args2.dispatcher.dispatch(args2.lane.id);continue}return{ok:!1,error:failureMessage,generation,slotId:decision.slot.slotId,runId:decision.slot.runId}}}function isRetryableSessionCreateFailure(error93){if(error93===void 0||error93===null)return!1;let seen=new WeakSet,pending=[{value:error93,depth:0}],visited=0,signalChars=0,transient=!1,permanent=!1,truncated=!1;while(pending.length>0&&visited<MAX_CREATE_FAILURE_WALK_NODES){let current=pending.shift();visited++;let{value,depth,key:key3}=current;if((key3==="isRetryable"||key3==="retryable")&&value===!1)permanent=!0;if(typeof value==="number"&&Number.isInteger(value)){if(key3===void 0||CREATE_FAILURE_STATUS_KEYS.has(key3)){if(TRANSIENT_CREATE_STATUS_CODES.has(value))transient=!0;if(PERMANENT_CREATE_STATUS_CODES.has(value))permanent=!0}continue}if(typeof value==="string"){if(key3!==void 0&&!CREATE_FAILURE_SCALAR_KEYS.has(key3))continue;if(key3!==void 0&&CREATE_FAILURE_STATUS_KEYS.has(key3)&&/^\d+$/.test(value)){let numericStatus=Number(value);if(TRANSIENT_CREATE_STATUS_CODES.has(numericStatus))transient=!0;if(PERMANENT_CREATE_STATUS_CODES.has(numericStatus))permanent=!0}let remaining=MAX_CREATE_FAILURE_SIGNAL_CHARS-signalChars;if(remaining<=0){truncated=!0;continue}let signal2=value.slice(0,remaining);if(signal2.length<value.length)truncated=!0;if(signalChars+=signal2.length,PERMANENT_CREATE_SIGNAL_PATTERN.test(signal2))permanent=!0;if(TRANSIENT_CREATE_SIGNAL_PATTERN.test(signal2))transient=!0;continue}if(typeof value!=="object"&&typeof value!=="function"||value===null)continue;let object3=value;if(seen.has(object3))continue;if(seen.add(object3),depth>=MAX_CREATE_FAILURE_WALK_DEPTH){truncated=!0;continue}let isArray=!1;try{isArray=Array.isArray(object3)}catch{truncated=!0;continue}if(isArray){let arrayLength;try{let lengthDescriptor=Object.getOwnPropertyDescriptor(object3,"length");if(!lengthDescriptor||!("value"in lengthDescriptor)||typeof lengthDescriptor.value!=="number"||!Number.isSafeInteger(lengthDescriptor.value)||lengthDescriptor.value<0){truncated=!0;continue}arrayLength=lengthDescriptor.value}catch{truncated=!0;continue}let remainingNodes=MAX_CREATE_FAILURE_WALK_NODES-visited,itemCount=Math.min(arrayLength,remainingNodes);if(itemCount<arrayLength)truncated=!0;for(let index=0;index<itemCount;index++){let descriptor;try{descriptor=Object.getOwnPropertyDescriptor(object3,index)}catch{truncated=!0;continue}if(!descriptor)continue;if(!("value"in descriptor)){truncated=!0;continue}pending.push({value:descriptor.value,depth:depth+1,key:key3})}continue}for(let propertyKey of CREATE_FAILURE_FIELD_KEYS){if(pending.length+visited>=MAX_CREATE_FAILURE_WALK_NODES){truncated=!0;break}let descriptor;try{descriptor=Object.getOwnPropertyDescriptor(object3,propertyKey)}catch{truncated=!0;continue}if(!descriptor)continue;if(!("value"in descriptor)){truncated=!0;continue}pending.push({value:descriptor.value,depth:depth+1,key:propertyKey})}}if(pending.length>0)truncated=!0;return transient&&!permanent&&!truncated}async function launchAsyncLane(args2){let validation2=validateLaneAgent(args2.lane.agent,args2.context),role=validation2.role,startedAt=isoNow2();if(!validation2.ok)return{id:args2.lane.id,agent:args2.lane.agent,role,status:"rejected",started_at:startedAt,completed_at:isoNow2(),error:validation2.error};let create=await createLaneSession({session:args2.session,dispatcher:args2.dispatcher,lane:args2.lane,directory:args2.directory,timeoutMs:args2.timeoutMs,context:args2.context});try{if(!create.ok)return failedLane(args2.lane,role,startedAt,create.error,create.slotId,create.runId,void 0,create.generation);let sessionId=create.sessionId,legacyTranscriptCompatibility=args2.mode==="swarm-pr-review:base"||args2.mode==="swarm-pr-review:micro"?prReviewLegacyTranscriptCompatibilityEnabled(_internals298.loadPluginConfig(args2.directory).pr_review_legacy_transcript_compatibility):void 0,pendingOutcome=await recordPendingDelegationDetailed(args2.directory,{correlationId:sessionId,jobId:args2.prReviewWorkflowInstanceId?encodePrReviewWorkflowBinding(args2.prReviewWorkflowInstanceId):null,subagentSessionId:sessionId,parentSessionId:args2.context.sessionID?.trim()||`dispatch_lanes_async:${args2.batchId}`,callID:args2.batchId,normalizedAgent:role,swarmPrefixedAgent:args2.lane.agent,planTaskId:null,evidenceTaskId:null,batchId:args2.batchId,laneId:args2.lane.id,mode:args2.mode??"advisory",workflowLane:args2.lane.workflow_lane,ownedWorkflowLanes:args2.lane.owned_workflow_lanes,prReviewLegacyTranscriptCompatibility:legacyTranscriptCompatibility,promptHash:promptHash(args2.lane,args2.directory,args2.batchId),workspace:{directory:args2.directory,gitHead:args2.gitHead??null,dirtyHash:args2.dirtyHash??null,prHeadSha:args2.prHeadSha??null,scope:args2.scope??null},...args2.prReviewWorkflowRevision!==void 0?{workflowGeneration:args2.prReviewWorkflowRevision}:{},generation:create.generation});if(pendingOutcome.status==="duplicate"||pendingOutcome.status==="conflict")return failedLane(args2.lane,role,startedAt,pendingOutcome.status==="duplicate"?"Async lane session.create returned an already-recorded correlation id":"Async lane session.create returned a correlation id owned by a different background delegation",create.slotId,create.runId,sessionId,create.generation);if(pendingOutcome.status==="failed")return cleanupAsyncLaunchSession(args2.session,sessionId),failedLane(args2.lane,role,startedAt,"Failed to record async lane in background delegation ledger",create.slotId,create.runId,sessionId,create.generation);return emitDelegationBegin(pendingOutcome.record),scheduleAsyncLanePrompt({session:args2.session,directory:args2.directory,sessionId,lane:args2.lane,timeoutMs:args2.timeoutMs,mode:args2.mode,structuredAdapter:args2.context.prReviewStructuredPromptAdapter}),{id:args2.lane.id,agent:args2.lane.agent,role,status:"pending",session_id:sessionId,slot_id:create.slotId,run_id:create.runId,generation:create.generation,started_at:startedAt,completed_at:isoNow2()}}catch(error93){return failedLane(args2.lane,role,startedAt,formatError3(error93),create.slotId,create.runId,create.ok?create.sessionId:void 0,create.generation)}finally{if(create.slotId)args2.dispatcher.releaseSlot(create.slotId)}}async function collectOnce(session,directory,records,statusTypes,deadline,hostTimeouts,receiptAppendFailureLogs,collectionResourceFailures,settleFailureLogs,revisionSnapshots){let activeRecords=records.filter((record3)=>record3.status==="pending"||record3.status==="running");if(activeRecords.length===0)return;let refreshLimit=pLimit(COLLECT_REFRESH_CONCURRENCY),fetchLaneRecord=async(record3)=>{let laneLabel=record3.laneId??record3.correlationId,needsRevisionDigest=Boolean(record3.workspace?.prHeadSha),laneBudgets=reserveConcurrentLaneCallBudgets(deadline,activeRecords.length,typeof session.status==="function",needsRevisionDigest),readiness=laneReadinessFromProbeTypes(statusTypes,record3.subagentSessionId);if(readiness==="busy")return{kind:"skipped"};try{let messages=await withCollectionDeadline(()=>session.messages({path:{id:record3.subagentSessionId},query:{directory,limit:ASYNC_MESSAGE_FETCH_LIMIT}}),deadline,`session.messages for lane "${laneLabel}"`,hostTimeouts,laneBudgets.messagesBudgetMs);return{kind:"fetched",readiness,messages,laneBudgets}}catch(error93){return{kind:"messages-error",error:error93}}},fetched=await Promise.all(activeRecords.map((record3)=>refreshLimit(()=>fetchLaneRecord(record3)))),pendingSettlements=[];for(let index=0;index<activeRecords.length;index++){let record3=activeRecords[index],laneLabel=record3.laneId??record3.correlationId,outcome=fetched[index];if(!outcome||outcome.kind==="skipped")continue;if(outcome.kind==="messages-error"){let messageTimeoutPrefix=`session.messages for lane "${laneLabel}" exceeded the remaining collect_lane_results budget`;if(![...hostTimeouts].some((entry)=>entry.startsWith(messageTimeoutPrefix)))addLaneDiagnostic(collectionResourceFailures,laneLabel,`session.messages transport error for lane "${laneLabel}"; lane left pending: ${safeDiagnosticCause(outcome.error)}`);continue}let{readiness,messages,laneBudgets}=outcome;if(!messages.data){if(messages.error)addLaneDiagnostic(collectionResourceFailures,laneLabel,`session.messages returned an error for lane "${laneLabel}"; lane left pending: ${safeDiagnosticCause(messages.error)}`);continue}clearLaneDiagnostics(collectionResourceFailures,laneLabel);let transcript=extractAssistantTranscript(messages.data),relyingOnCompletedAtOnly=readiness!=="idle"&&Number.isFinite(transcript.completedAt),hostSaysRetryable=transcript.terminalError?.kind!=="aborted"&&transcript.terminalError?.hostRetryable===!0;if(transcript.terminalError&&!transcript.text&&!transcript.windowTruncated&&(Number.isFinite(transcript.completedAt)||readiness==="idle")&&!(relyingOnCompletedAtOnly&&hostSaysRetryable)){let settledStatus=transcript.terminalError.kind==="aborted"?"cancelled":"error",reason=laneTerminalErrorReason(transcript.terminalError),settled=await settleDelegationTerminal(directory,record3,{status:settledStatus,result:{error:reason,chars:reason.length,truncated:!1,digest:digestText2(reason),terminalErrorClass:terminalErrorClassFromLaneTerminalError(transcript.terminalError),...settledStatus==="error"?{workflowLaneFailureClass:"resource"}:{}}},{},_internals298.now());if(settled.kind==="claimed")clearLaneDiagnostics(settleFailureLogs,laneLabel),cleanupAsyncLaunchSession(session,record3.subagentSessionId);else if(isBenignSettleOutcome(settled.kind))clearLaneDiagnostics(settleFailureLogs,laneLabel);else if(settled.kind==="uncertain")addLaneDiagnostic(settleFailureLogs,laneLabel,`terminal settle deferred for lane "${laneLabel}"; delegation store unreadable (${settled.reason??"unclassified"}); lane left open for retry`);else addLaneDiagnostic(settleFailureLogs,laneLabel,`terminal settle write did not land for lane "${laneLabel}"; lane left open`);continue}if(record3.result?.prReviewResultReceipt&&!transcript.text){if(await settleCollectedLaneFromReceipt({directory,record:record3,deadline,hostTimeouts,revisionSnapshots,revisionDigestBudgetMs:laneBudgets.revisionDigestBudgetMs,settleFailureLogs}))continue}if(!transcript.text&&!transcript.terminalError&&messages.data.length>0&&(readiness==="idle"||transcript.terminalAssistantProof===!0)){let freshRecordRead=findByCorrelationIdDetailed(directory,record3.correlationId),freshRecord2=freshRecordRead.status==="ok"?freshRecordRead.value:null;if(freshRecordRead.status!=="ok"||!freshRecord2)continue;if(freshRecord2.result?.prReviewResultReceipt)continue;let silentLaneReason=readiness==="idle"?`lane ${laneLabel} idle with no assistant output: settled as liveness without waiting the stale horizon`:`lane ${laneLabel} ended with a terminal but textless assistant message: settled as liveness`,silentLivenessResult=record3.result?{...record3.result,workflowLaneFailureClass:"liveness"}:{error:silentLaneReason,chars:silentLaneReason.length,truncated:!1,digest:digestText2(silentLaneReason),workflowLaneFailureClass:"liveness"};if(!await appendDelegationTransition(directory,record3.correlationId,{status:"stale",result:silentLivenessResult,expectedCurrentStatuses:["pending","running"],terminalResult:buildTypedDelegationTerminal(record3,"stale",silentLivenessResult,_internals298.now())}))addLaneDiagnostic(settleFailureLogs,laneLabel,`idle liveness settle write did not land for lane "${laneLabel}"; lane left open for retry`);continue}if(!transcript.text)continue;if(readiness==="unknown"&&!transcript.terminalAssistantProof)continue;pendingSettlements.push(settleCollectedLane({directory,record:record3,transcript,deadline,hostTimeouts,revisionDigestBudgetMs:laneBudgets.revisionDigestBudgetMs,receiptAppendFailureLogs,revisionSnapshots,settleFailureLogs}))}await Promise.all(pendingSettlements)}function isSupersedeableStaleLivenessVerdictRecord(record3){return record3.status==="stale"&&(record3.mode==="swarm-pr-review:reviewer"||record3.mode==="swarm-pr-review:critic")&&(record3.result?.workflowLaneFailureClass==="liveness"||record3.terminalResult?.result.workflowLaneFailureClass==="liveness")}async function supersedeStaleLivenessVerdictLanesFromCollect(args2){if(typeof args2.session.messages!=="function")return;let candidates=args2.records.filter(isSupersedeableStaleLivenessVerdictRecord).filter((record3)=>!args2.scannedCorrelationIds.has(record3.correlationId));if(candidates.length===0)return;let budgets2=reserveCollectionLaneCallBudgets(args2.deadline,candidates.length,typeof args2.session.status==="function",candidates.some((record3)=>Boolean(record3.workspace?.prHeadSha)));for(let record3 of candidates){if(args2.deadline-_internals298.now()<=0)return;args2.scannedCorrelationIds.add(record3.correlationId);let laneLabel=record3.laneId??record3.correlationId,messages;try{messages=await withCollectionDeadline(()=>args2.session.messages({path:{id:record3.subagentSessionId},query:{directory:args2.directory,limit:ASYNC_MESSAGE_FETCH_LIMIT}}),args2.deadline,`session.messages for lane "${laneLabel}" (stale-liveness supersession scan)`,args2.hostTimeouts,budgets2.messagesBudgetMs)}catch{continue}if(!messages.data)continue;let transcript=extractAssistantTranscript(messages.data);if(!transcript.text)continue;let digestResolution=await resolveCollectLaneRevisionDigest({directory:args2.directory,prHeadSha:record3.workspace?.prHeadSha,laneLabel,deadline:args2.deadline,hostTimeouts:args2.hostTimeouts,revisionSnapshots:args2.revisionSnapshots,budgetMs:budgets2.revisionDigestBudgetMs});if(digestResolution.status==="unavailable")continue;let output=prepareLaneOutput({directory:args2.directory,batchId:record3.batchId??record3.callID,laneId:record3.laneId??record3.correlationId,agent:record3.swarmPrefixedAgent,role:record3.normalizedAgent,sessionId:record3.subagentSessionId,parentSessionId:record3.parentSessionId,mode:record3.mode,workflowLane:record3.workflowLane,prHeadSha:record3.workspace?.prHeadSha??void 0,gitHead:record3.workspace?.gitHead??void 0,revisionDigest:digestResolution.digest,scope:record3.workspace?.scope??void 0,source:"collect_lane_results",text:transcript.text,messageCount:transcript.messageCount,transcriptIncomplete:transcript.transcriptIncomplete}),validatedResult={text:output.output,chars:output.output_chars,truncated:output.output_truncated,digest:output.output_digest,...output.output_ref?{outputRef:output.output_ref}:{},outputPreviewChars:output.output.length,...output.output_degraded!==void 0?{outputDegraded:output.output_degraded}:{},...output.output_artifact_error?{outputArtifactError:output.output_artifact_error}:{},...output.transcript_incomplete!==void 0?{transcriptIncomplete:output.transcript_incomplete}:{},messageCount:transcript.messageCount},artifact=output.output_ref?readLaneOutput(args2.directory,output.output_ref)?.artifact??null:null,validation2;try{validation2=await withCollectionDeadline(()=>_internals298.validatePrWorkflowTransportRecovery({directory:args2.directory,record:record3,result:validatedResult,artifact,revisionDigest:digestResolution.digest??""}),args2.deadline,`transport recovery validation for lane "${laneLabel}" (stale-liveness supersession scan)`,args2.hostTimeouts)}catch{continue}if(!validation2.ok)continue;try{await supersedeStaleLivenessVerdictLane(args2.directory,{correlationId:record3.correlationId,validatedResult})}catch{}}}function revisionSnapshotKey(directory,prHeadSha){return`${canonicalRootKeyFresh(directory)}\x00${prHeadSha??""}`}var MAX_DIAGNOSTICS_PER_LANE=3,MAX_HOST_TIMEOUT_DIAGNOSTICS=MAX_LANES*4,MAX_LANE_DIAGNOSTICS_PER_CHANNEL=MAX_LANES*MAX_DIAGNOSTICS_PER_LANE;function assembleCollectionDiagnostics(hostTimeouts,settleFailureLogs,collectionResourceFailures){return[...flattenLaneDiagnostics(settleFailureLogs),...flattenLaneDiagnostics(collectionResourceFailures),...[...hostTimeouts].slice(0,MAX_HOST_TIMEOUT_DIAGNOSTICS)]}function addLaneDiagnostic(diagnostics,laneLabel,message){let entries2=diagnostics.get(laneLabel);if(entries2===void 0)entries2=new Set,diagnostics.set(laneLabel,entries2);if(entries2.has(message))return;if(entries2.size>=MAX_DIAGNOSTICS_PER_LANE)return;entries2.add(message)}function clearLaneDiagnostics(diagnostics,laneLabel){diagnostics.delete(laneLabel)}function flattenLaneDiagnostics(diagnostics){let flat=[];for(let entries2 of diagnostics.values())for(let entry of entries2){if(flat.length>=MAX_LANE_DIAGNOSTICS_PER_CHANNEL)return flat;flat.push(entry)}return flat}var MAX_DIAGNOSTIC_CAUSE_CHARS=160;function safeDiagnosticCause(error93){let redacted=sanitizeFailureEvidenceDisplay(formatError3(error93));if(redacted.length===0)return"(no detail)";return redacted.length>MAX_DIAGNOSTIC_CAUSE_CHARS?`${redacted.slice(0,MAX_DIAGNOSTIC_CAUSE_CHARS)}…`:redacted}function resolveCollectExpectedWorkflowIdentity(record3,parentState){if(record3.mode!=="swarm-pr-review:base"&&record3.mode!=="swarm-pr-review:micro"&&record3.mode!=="swarm-pr-review:council")return;let workflowInstanceId=decodePrReviewWorkflowBinding(record3.jobId),workflowRevision=record3.workflowGeneration;if(!workflowInstanceId||workflowRevision===void 0)return;if(!parentState||parentState.mode!=="PR_REVIEW")return;if(parentState.workflowInstanceId!==workflowInstanceId)return;let baseSha=parentState.prReviewBaseSha;if(!baseSha)return;return{workflowInstanceId,workflowRevision,baseSha}}async function resolveCollectLaneRevisionDigest(args2){if(!args2.prHeadSha)return{status:"resolved",digest:void 0};try{let key3=revisionSnapshotKey(args2.directory,args2.prHeadSha),snapshot2=args2.revisionSnapshots.get(key3);if(snapshot2===void 0){snapshot2=_internals298.resolvePrWorkflowRevisionDigestAsync(args2.directory,args2.prHeadSha);let pending=snapshot2;pending.catch(()=>{if(args2.revisionSnapshots.get(key3)===pending)args2.revisionSnapshots.delete(key3)}),args2.revisionSnapshots.set(key3,pending)}let shared=snapshot2;return{status:"resolved",digest:await withCollectionDeadline(()=>shared,args2.deadline,`revision digest for lane "${args2.laneLabel}"`,args2.hostTimeouts,args2.budgetMs)??void 0}}catch{return{status:"unavailable"}}}async function settleCollectedLaneFromReceipt(args2){let{directory,record:record3}=args2,laneLabel=record3.laneId??record3.correlationId;if(record3.mode!=="swarm-pr-review:base"&&record3.mode!=="swarm-pr-review:micro"&&record3.mode!=="swarm-pr-review:council")return!1;let digestResolution=await resolveCollectLaneRevisionDigest({directory,prHeadSha:record3.workspace?.prHeadSha,laneLabel,deadline:args2.deadline,hostTimeouts:args2.hostTimeouts,revisionSnapshots:args2.revisionSnapshots,budgetMs:args2.revisionDigestBudgetMs});if(digestResolution.status==="unavailable")return!1;let collectExpectedIdentity;if(record3.parentSessionId?.trim())try{let parentState=await readPrWorkflowGateStateFromDisk(directory,record3.parentSessionId.trim());collectExpectedIdentity=resolveCollectExpectedWorkflowIdentity(record3,parentState)}catch{collectExpectedIdentity=void 0}let receiptExpected={mode:record3.mode,workflowLane:record3.workflowLane??"",ownedWorkflowLanes:record3.ownedWorkflowLanes,prHeadSha:record3.workspace?.prHeadSha??"",gitHead:record3.workspace?.gitHead??"",revisionDigest:digestResolution.digest??"",reviewScope:record3.workspace?.scope??void 0,...collectExpectedIdentity??{}},receiptProspectiveResult={...record3.result??{chars:0,truncated:!1,digest:digestText2("")}},structuredCoverage=_internals298.validateExactStructuredReceiptCoverage({record:record3,result:receiptProspectiveResult,artifact:null,expected:receiptExpected});if(structuredCoverage.status!=="accepted")return!1;let receipt=structuredCoverage.receipt,receiptText=JSON.stringify(receipt,null,2),stored=storeLaneOutput(directory,{batchId:record3.batchId??record3.callID,laneId:record3.laneId??record3.correlationId,agent:record3.swarmPrefixedAgent,role:record3.normalizedAgent,sessionId:record3.subagentSessionId,parentSessionId:record3.parentSessionId,mode:record3.mode,workflowLane:record3.workflowLane,prHeadSha:record3.workspace?.prHeadSha??void 0,gitHead:record3.workspace?.gitHead??void 0,revisionDigest:digestResolution.digest??void 0,scope:record3.workspace?.scope??void 0,source:"collect_lane_results",text:receiptText});if(!stored.ref||stored.degraded)return addLaneDiagnostic(args2.settleFailureLogs,laneLabel,`receipt settle deferred for lane "${laneLabel}"; lane-output store degraded (${stored.error??"no artifact ref"}); lane left open for retry`),!1;let preview=buildLaneOutputPreview({text:receiptText,ref:stored.ref,degraded:stored.degraded,maxChars:MAX_LANE_OUTPUT_CHARS}),settledResult={text:preview.output,chars:stored.chars,truncated:preview.output_truncated,digest:stored.digest,outputRef:stored.ref,prReviewResultReceipt:receipt};if(!await appendDelegationTransition(directory,record3.correlationId,{status:"completed",result:settledResult,expectedCurrentStatuses:["pending","running"],terminalResult:buildTypedDelegationTerminal(record3,"completed",settledResult,_internals298.now())}))return addLaneDiagnostic(args2.settleFailureLogs,laneLabel,`receipt settle write did not land for lane "${laneLabel}"; lane left open`),!1;return!0}var LANE_REJECTION_ROW_UNIDENTIFIED="(unidentified)";function extractLaneRejectionRowId(failure){try{let parsed=JSON.parse(failure.actual),candidate2=[...Array.isArray(parsed.unexpectedIds)?parsed.unexpectedIds:[],...Array.isArray(parsed.invalidOrMissingIds)?parsed.invalidOrMissingIds:[]].find((id)=>typeof id==="string"&&id.trim().length>0);if(typeof candidate2==="string")return candidate2}catch{}let strayId=/"unexpectedIds":\s*\[\s*"([^"]+)"/.exec(failure.actual);if(strayId)return strayId[1];let missingId=/"invalidOrMissingIds":\s*\[\s*"([^"]+)"/.exec(failure.actual);if(missingId)return missingId[1];let discoveryRow=/\brow (\d+)\b/.exec(failure.actual);if(discoveryRow)return discoveryRow[1];return LANE_REJECTION_ROW_UNIDENTIFIED}function persistLaneRejectionDetail(directory,record3,fullDetail){return storeLaneOutput(directory,{batchId:record3.batchId??record3.callID,laneId:record3.laneId??record3.correlationId,agent:record3.swarmPrefixedAgent,role:record3.normalizedAgent,sessionId:record3.subagentSessionId,parentSessionId:record3.parentSessionId,mode:record3.mode,workflowLane:record3.workflowLane,prHeadSha:record3.workspace?.prHeadSha??void 0,gitHead:record3.workspace?.gitHead??void 0,scope:record3.workspace?.scope??void 0,source:"collect_lane_results",text:fullDetail}).ref}function composeLaneRejectionError(args2){let rowId=args2.failure?extractLaneRejectionRowId(args2.failure):LANE_REJECTION_ROW_UNIDENTIFIED,predicate=args2.failure?args2.failure.predicate:LANE_REJECTION_ROW_UNIDENTIFIED,header=`${args2.errorCode}: row=${rowId} predicate=${predicate}`,identity=`; batch=${args2.record.batchId??"(missing)"} lane=${args2.record.laneId??"(missing)"} workflow_lane=${args2.record.workflowLane??"(missing)"}`,renderedDetail=args2.failure?formatPrReviewLaneValidationFailure(args2.failure):args2.inlineDetail??"",tail2=args2.detailTail?`; ${args2.detailTail}`:"",artifactRef=persistLaneRejectionDetail(args2.directory,args2.record,`${header}${identity}
|
|
7762
|
+
${EXPLORER_CANDIDATE_COMMON_END}`,READ_ONLY_LANE_ROLES=new Set(["explorer","reviewer","test_engineer","critic","critic_oversight","critic_sounding_board","critic_drift_verifier","critic_hallucination_verifier","critic_architecture_supervisor","critic_finding_validator","sme","researcher","council_generalist","council_skeptic","council_domain_expert"]),READ_ONLY_TOOL_DENYLIST=[...new Set([...WRITE_TOOL_NAMES,"extract_code_blocks","multiedit","multi_edit","todo_write","save_plan","update_task_status","phase_complete","declare_scope","declare_council_criteria","submit_council_verdicts","submit_phase_council_verdicts","set_qa_gates","write_retro","write_drift_evidence","write_hallucination_evidence","write_mutation_evidence","knowledge_add","knowledge_remove","consensus_mine","summarize_work","doc_scan","lint"])],LaneSchema=exports_external.object({id:exports_external.string().min(1).max(80).regex(/^[A-Za-z0-9][A-Za-z0-9_.-]*$/).describe("Stable lane identifier, unique within this dispatch batch"),agent:exports_external.string().min(1).max(120).describe("Read-only swarm agent name, including any generated swarm prefix"),prompt:exports_external.string().min(1).max(MAX_PROMPT_CHARS).describe("Full lane prompt to send to the requested agent"),workflow_lane:exports_external.string().min(1).max(120).optional().describe("Required mechanical policy identifier in PR workflows; distinct from the retry-safe lane id"),owned_workflow_lanes:exports_external.array(exports_external.string().trim().min(1).max(120)).min(1).max(11).optional().describe("Complete dimension/family set a consolidated PR-review base or micro lane covers under the controller-computed depth tier; must include workflow_lane. Omit for singleton lanes."),feedback_item_ids:exports_external.array(exports_external.string().trim().min(1).max(120)).min(1).optional().describe("PR-feedback ledger item IDs owned exclusively by this lane"),review_item_ids:exports_external.array(exports_external.string().trim().min(1).max(160)).min(1).max(MAX_PR_REVIEW_COLLECTION_RECEIPT_ITEM_IDS).optional().describe("Candidate/finding IDs owned by a PR-review reviewer or critic lane; every ID requires a parseable verdict row")}),DispatchLanesArgsSchema=exports_external.object({lanes:exports_external.array(LaneSchema).min(1).max(MAX_LANES).describe("Read-only lane specs to dispatch concurrently"),common_prompt:exports_external.string().min(1).regex(/\S/,"common_prompt must contain non-whitespace content").max(MAX_PROMPT_CHARS-COMMON_PROMPT_SEPARATOR.length-1).optional().describe("Optional shared context prepended to every lane prompt. Send large shared context (PR diff, obligation ledger, scope) ONCE here instead of inlining the same blob into each lane prompt; this keeps the tool-call payload small and avoids malformed/truncated tool-call JSON. Combined common_prompt + per-lane prompt must not exceed the per-lane character limit."),max_concurrent:exports_external.number().int().min(1).max(MAX_LANES).optional().describe("Maximum lanes in flight at once; defaults to lane count"),timeout_ms:exports_external.number().int().min(10).max(MAX_TIMEOUT_MS4).optional().describe("Per-lane timeout in milliseconds. For blocking dispatch this covers session create and prompt execution; for async dispatch this covers launch only, never lane runtime."),orientation:exports_external.boolean().optional().describe("Prepend a bounded, deterministic repo-graph orientation block (mission-relevant files, repo hubs, freshness line) to common_prompt when the repo graph is fresh and relevant. No schema default: availability depends on graph state, resolved at execute time (omitted ⇒ attempted, skipped when no fresh graph exists). Explicitly false disables the block entirely.")}).superRefine(refineWorkflowLaneNamespace),PR_REVIEW_MICRO_TRIGGER_LANE_IDS=new Set(PR_REVIEW_TRIGGER_DEFINITIONS.map((definition)=>definition.id));function refineWorkflowLaneNamespace(value,ctx){let mode=value.mode;if(!mode)return;let isBase=mode.startsWith("swarm-pr-review:base"),isMicro=mode.startsWith("swarm-pr-review:micro");if(!isBase&&!isMicro)return;let valid=isBase?new Set(PR_REVIEW_BASE_DIMENSION_IDS):PR_REVIEW_MICRO_TRIGGER_LANE_IDS,vocabulary=isBase?PR_REVIEW_BASE_DIMENSION_IDS.join(", "):[...PR_REVIEW_MICRO_TRIGGER_LANE_IDS].join(", "),kind=isBase?"base dimension":"micro trigger";for(let lane of value.lanes){let labels=[...lane.workflow_lane?[lane.workflow_lane]:[],...lane.owned_workflow_lanes??[]];for(let label of labels)if(!valid.has(label)){ctx.addIssue({code:"custom",path:["lanes"],message:`lane workflow label "${label}" is not a ${kind} id for mode "${mode}"; valid ids: ${vocabulary}`});return}}}var DispatchLanesAsyncArgsSchema=DispatchLanesArgsSchema.extend({launch_timeout_ms:exports_external.number().int().min(10).max(MAX_TIMEOUT_MS4).optional().describe("Async launch acceptance timeout in milliseconds. This only bounds session creation and promptAsync acceptance; it is never a lane runtime timeout. Deprecated alias: timeout_ms."),batch_id:exports_external.string().min(1).max(MAX_BATCH_ID_CHARS2).regex(/^[A-Za-z0-9][A-Za-z0-9_.:-]*$/).optional().describe("Stable async batch id for later collection; generated when omitted"),mode:exports_external.string().min(1).max(80).optional().describe('Advisory workflow mode, such as deep-dive. PR-review stages are COLON-SUFFIXED and the suffix is required. Accepted values: swarm-pr-review:base, swarm-pr-review:micro, swarm-pr-review:council, swarm-pr-review:reviewer, swarm-pr-review:critic, swarm-pr-feedback:verification. A bare "swarm-pr-review" does NOT enter the PR-review path — it skips the merge-base bind and later fails with "exact merge-base scope was not verified".'),pr_head_sha:exports_external.string().min(1).max(80).optional().describe("Full 40-char SHA of the PR head commit under review. Required when mode starts with swarm-pr-review: or swarm-pr-feedback:."),base_sha:exports_external.string().regex(/^[0-9a-f]{6,64}$/i).optional().describe("Exact merge base of base_ref and pr_head_sha — NOT the base branch tip. The controller recomputes `git merge-base -- <base_ref> <pr_head_sha>` and rejects any mismatch. Required when mode starts with swarm-pr-review:."),base_ref:exports_external.string().regex(/^(?!-)[A-Za-z0-9][A-Za-z0-9._/-]{0,255}$/).optional().describe("Base branch ref used to recompute the merge base. Use the REMOTE-TRACKING form (origin/main), and compute base_sha against that same ref. A local branch ref (main, refs/heads/main) is only as fresh as the last fetch — the PR-review preflight fetches refs/pull/<N>/head and not the base branch, so a local ref commonly resolves to a different merge base and the dispatch is rejected. Required when mode starts with swarm-pr-review:."),scope:exports_external.string().min(1).max(500).optional(),trigger_evaluation:exports_external.array(PrReviewInlineTriggerRowSchema).min(1).optional().describe("Complete repository-agnostic trigger ledger required for the first swarm-pr-review:micro dispatch. The first successful micro dispatch freezes it in same-session workflow state; any subsequent micro batch may omit this property and reuse that exact frozen ledger. If supplied later, it must remain exactly identical. MATCHED families are dispatched and inapplicable families are NOT_TRIGGERED."),feedback_inventory:exports_external.array(exports_external.string().trim().min(1).max(120)).min(1).optional().describe("Complete immutable feedback item inventory required for swarm-pr-feedback:verification"),pr_review_wave_stage:exports_external.enum(["canary","fanout"]).optional().describe('PR_REVIEW base-only staged dispatch marker. Required with pr_review_wave_attempt at depth tier M or L while pr_review_resilience is enabled. Use "canary" for the singleton probe lane and "fanout" for the follow-up batch that partitions the remaining unresolved base obligations.'),pr_review_wave_attempt:exports_external.number().int().min(0).max(2).optional().describe("PR_REVIEW base-only staged attempt number, required together with pr_review_wave_stage at depth tier M or L while resilience is enabled: attempt 0 is the initial wave, followed by at most two retry attempts (1 and 2) over the exact unresolved-obligation target left by the previous attempt."),pr_review_contract_retry:exports_external.boolean().optional().describe("PR_REVIEW base-only contract retry marker. Use only for one admitted retry of exactly one dimension whose previous terminal record was a contract failure; it is mutually exclusive with pr_review_wave_stage and pr_review_wave_attempt and does not consume staged retry budget.")}),CollectLaneResultsArgsSchema=exports_external.object({batch_id:exports_external.string().min(1).max(MAX_BATCH_ID_CHARS2),wait:exports_external.boolean().optional().describe("Poll until all lanes settle or timeout"),timeout_ms:exports_external.number().int().min(0).max(MAX_COLLECT_TIMEOUT_MS).optional().describe("Total wait budget when wait=true"),include_pending:exports_external.boolean().optional().describe("Include pending/running lanes in lane_results. Defaults to true for non-blocking polls and false for wait=true joins."),cancel_pending:exports_external.boolean().optional().describe("Deprecated destructive flag: a no-op request, kept for schema compatibility. This collector is observation-only and never aborts or settles a lane. When true, the response carries typed cancellation_refused guidance pointing at cancel_lane_batch (confirm + reason), the only authorized cancellation surface.")});function validatePrReviewMicroDispatch(args2,depthTier){let evaluation=args2.trigger_evaluation;if(!evaluation)throw Error("BLOCKED: initial PR_REVIEW micro dispatch requires the complete trigger_evaluation ledger; after the first successful same-session micro dispatch freezes it, a later micro batch may omit the property and reuse that exact ledger");let validated;try{validated=validatePrReviewInlineTriggerLedger(evaluation)}catch(error93){throw Error(`BLOCKED: ${error93 instanceof Error?error93.message:String(error93)}`)}let required3=new Set(validated.matchedIds),laneOwnership=args2.lanes.map((lane)=>({label:lane.workflow_lane??"",owned:lane.owned_workflow_lanes?.length?lane.owned_workflow_lanes:lane.workflow_lane?[lane.workflow_lane]:[]}));if(depthTier==="L"&&laneOwnership.some((lane)=>lane.owned.length!==1))throw Error("BLOCKED: PR_REVIEW micro dispatch at depth tier L requires one dedicated lane per risk family; consolidated owned_workflow_lanes are allowed only at tiers S and M");let flattened=laneOwnership.flatMap((lane)=>lane.owned),duplicates=flattened.filter((value,index)=>flattened.indexOf(value)!==index),unmatched=flattened.filter((triggerId)=>!required3.has(triggerId)),invalidLabels=laneOwnership.filter((lane)=>lane.label.length===0||!lane.owned.includes(lane.label)).map((lane)=>lane.label||"(missing workflow_lane)");if(invalidLabels.length>0||duplicates.length>0||unmatched.length>0)throw Error(`BLOCKED: PR_REVIEW micro lanes must have unique workflow_lane IDs from the mandatory repository-agnostic lane set, with workflow_lane contained in its own owned set; invalid: ${[...new Set([...invalidLabels,...duplicates,...unmatched])].join(", ")}`);let coversAllFamilies=required3.size>0&&[...required3].every((id)=>flattened.includes(id)),microFloor=Math.min(PR_REVIEW_MICRO_LANE_FLOORS[depthTier],required3.size);if(coversAllFamilies&&laneOwnership.length<microFloor)throw Error(`BLOCKED: PR_REVIEW micro dispatch at depth tier ${depthTier} covering all ${required3.size} matched risk families requires at least ${microFloor} lanes; received ${laneOwnership.length}. Partial retry batches covering a subset of matched families are exempt; NOT_TRIGGERED families must not be dispatched.`)}var _internals298={getSessionOps:()=>swarmState.opencodeClient?.session??null,getGeneratedAgentNames:()=>swarmState.generatedAgentNames,createParallelDispatcher,loadPluginConfig,resolvePrWorkflowRevisionDigestAsync,resolveExactMergeBaseAsync,validatePrWorkflowTransportRecovery,validateExactStructuredReceiptCoverage:validateExactStructuredReceiptCoverage2,now:()=>Date.now(),sleep:sleep5};class PrReviewStructuredPromptUnsupportedError extends Error{constructor(message="structured PR-review prompt transport is unsupported"){super(message);this.name="PrReviewStructuredPromptUnsupportedError"}}function effectivePrReviewResilienceConfig(configured,gateState){let policy=gateState?.prReviewResilience?.policy;return{enabled:configured.enabled,canary_probe_ms:policy?.canaryProbeMs??configured.canary_probe_ms,status_probe_timeout_ms:policy?.statusProbeTimeoutMs??configured.status_probe_timeout_ms,correlated_failure_threshold:policy?.correlatedFailureThreshold??configured.correlated_failure_threshold,max_retry_attempts_after_initial:policy?.maxRetryAttemptsAfterInitial??configured.max_retry_attempts_after_initial,circuit_open_duration_ms:policy?.circuitOpenDurationMs??configured.circuit_open_duration_ms}}async function executeDispatchLanes(args2,directory,context={}){let parsed=DispatchLanesArgsSchema.safeParse(args2);if(!parsed.success)return failureResult2({failure_class:"invalid_args",message:"Invalid dispatch_lanes arguments",errors:boundZodIssues(parsed.error.issues)});let duplicateLaneIds=findDuplicateLaneIds(parsed.data.lanes);if(duplicateLaneIds.length>0)return failureResult2({failure_class:"invalid_args",message:"Lane IDs must be unique within one dispatch_lanes batch",errors:duplicateLaneIds.map((id)=>`Duplicate lane id: ${id}`)});if(context.sessionID?.trim())try{await enforcePrWorkflowDispatchLanesAsync(directory,context.sessionID,"dispatch_lanes")}catch(error93){return failureResult2({failure_class:"invalid_args",message:error93 instanceof Error?error93.message:"PR workflow gate rejected dispatch"})}let session=_internals298.getSessionOps();if(!session)return failureResult2({failure_class:"no_client",message:"OpenCode session client is not available"});let orientedCommonPrompt=await augmentCommonPromptWithOrientation(directory,parsed.data.lanes,parsed.data.common_prompt,parsed.data.orientation,context.sessionID),common=applyCommonPrompt(parsed.data.lanes,orientedCommonPrompt);if(!common.ok)return failureResult2({failure_class:"invalid_args",message:"Invalid dispatch_lanes arguments",errors:common.errors});let requiresMandatoryExplorerFormat=common.lanes.some((lane)=>lane.workflow_lane!==void 0||(lane.owned_workflow_lanes?.length??0)>0),formatted=applyExplorerFormatSuffix(common.lanes,{failClosed:requiresMandatoryExplorerFormat});if(!formatted.ok)return failureResult2({failure_class:"invalid_args",message:"Invalid explorer output-format contract",errors:formatted.errors});let lanes=formatted.lanes,maxConcurrent=Math.min(parsed.data.max_concurrent??lanes.length,lanes.length,MAX_LANES),timeoutMs=parsed.data.timeout_ms??DEFAULT_TIMEOUT_MS5,dispatcher=_internals298.createParallelDispatcher({enabled:!0,maxConcurrentTasks:maxConcurrent,evidenceLockTimeoutMs:0}),limit=pLimit(maxConcurrent);try{let laneResults=await Promise.all(lanes.map((lane)=>limit(()=>runLane(session,dispatcher,lane,directory,timeoutMs,context))));return buildResult(laneResults,maxConcurrent,timeoutMs)}finally{dispatcher.shutdown()}}async function executeDispatchLanesAsync(args2,directory,context={}){let parsed=DispatchLanesAsyncArgsSchema.safeParse(args2);if(!parsed.success)return asyncFailureResult({failure_class:"invalid_args",message:"Invalid dispatch_lanes_async arguments",errors:boundZodIssues(parsed.error.issues)});if(typeof parsed.data.mode==="string"){let normalizedMode=parsed.data.mode.trim();parsed.data.mode=normalizedMode.length>0?normalizedMode:void 0}let duplicateLaneIds=findDuplicateLaneIds(parsed.data.lanes);if(duplicateLaneIds.length>0)return asyncFailureResult({failure_class:"invalid_args",message:"Lane IDs must be unique within one dispatch_lanes_async batch",errors:duplicateLaneIds.map((id)=>`Duplicate lane id: ${id}`)});let requestedBatchId=parsed.data.batch_id??makeBatchId(),session=_internals298.getSessionOps();if(!session||typeof session.promptAsync!=="function")return asyncFailureResult({failure_class:"no_client",message:"OpenCode session promptAsync client is not available"});let orientedCommonPrompt=await augmentCommonPromptWithOrientation(directory,parsed.data.lanes,parsed.data.common_prompt,parsed.data.orientation,context.sessionID),common=applyCommonPrompt(parsed.data.lanes,orientedCommonPrompt);if(!common.ok)return asyncFailureResult({failure_class:"invalid_args",message:"Invalid dispatch_lanes_async arguments",errors:common.errors});let lanes=common.lanes,batchId=requestedBatchId,duplicateRead=findByBatchIdDetailed(directory,batchId);if(duplicateRead.status==="uncertain")return asyncFailureResult({failure_class:"invalid_args",message:`batch uniqueness unverifiable: delegation store unreadable after ${duplicateRead.attempts} attempts (${duplicateRead.reason})`,errors:[`batch_id uniqueness could not be verified: ${batchId}; retry once the delegation store is readable`]});if(duplicateRead.value.length>0)return asyncFailureResult({failure_class:"invalid_args",message:`Async lane batch already exists: ${batchId}`,errors:[`batch_id must be unique: ${batchId}`]});let verifiedPrHead,workflowRevisionDigest,verifiedReviewBaseSha,prReviewWorkflowInstanceId,prReviewWorkflowRevision,bareWorkflowMode=["swarm-pr-review","swarm-pr-feedback"].find((prefix)=>parsed.data.mode?.trim()===prefix);if(bareWorkflowMode)return asyncFailureResult({failure_class:"invalid_args",message:bareWorkflowMode==="swarm-pr-review"?'BLOCKED: mode "swarm-pr-review" is missing its required stage suffix. Use one of: swarm-pr-review:base, swarm-pr-review:micro, swarm-pr-review:council, swarm-pr-review:reviewer, swarm-pr-review:critic.':'BLOCKED: mode "swarm-pr-feedback" is missing its required stage suffix. Use swarm-pr-feedback:verification.'});if((parsed.data.pr_review_wave_stage!==void 0||parsed.data.pr_review_wave_attempt!==void 0)&&parsed.data.mode!=="swarm-pr-review:base")return asyncFailureResult({failure_class:"invalid_args",message:'BLOCKED: pr_review_wave_stage and pr_review_wave_attempt are valid only when mode is exactly "swarm-pr-review:base".'});if(parsed.data.pr_review_contract_retry&&parsed.data.mode!=="swarm-pr-review:base")return asyncFailureResult({failure_class:"invalid_args",message:'BLOCKED: pr_review_contract_retry is valid only when mode is exactly "swarm-pr-review:base".'});if(context.sessionID?.trim()&&parsed.data.pr_head_sha&&(parsed.data.mode?.startsWith("swarm-pr-review:")||parsed.data.mode?.startsWith("swarm-pr-feedback:")))try{verifiedPrHead=await assertCurrentCheckoutHead(directory,parsed.data.pr_head_sha,parsed.data.mode?.startsWith("swarm-pr-feedback:")?"PR_FEEDBACK":"PR_REVIEW");let resolvedDigest=_internals298.resolvePrWorkflowRevisionDigestAsync!==resolvePrWorkflowRevisionDigestAsync?await _internals298.resolvePrWorkflowRevisionDigestAsync(directory,parsed.data.pr_head_sha).then((digest5)=>digest5?{ok:!0,digest:digest5}:{ok:!1,reason:"seam-unavailable"}):await resolvePrWorkflowRevisionDigestDetailedAsync(directory,parsed.data.pr_head_sha);if(!resolvedDigest.ok)throw Error(`BLOCKED: PR workflow could not compute a bounded current-revision digest for pr_head_sha "${parsed.data.pr_head_sha}"; `+describePrWorkflowRevisionDigestFailure(resolvedDigest));if(workflowRevisionDigest=resolvedDigest.digest,parsed.data.mode?.startsWith("swarm-pr-review:")){if(!parsed.data.base_sha||!parsed.data.base_ref)throw Error("BLOCKED: PR_REVIEW dispatch requires exact base_sha and base_ref");let resolvedBase=await _internals298.resolveExactMergeBaseAsync(directory,parsed.data.base_ref,parsed.data.pr_head_sha);if(!resolvedBase)throw Error(`BLOCKED: PR_REVIEW could not resolve a merge base for base_ref="${parsed.data.base_ref}" and pr_head_sha=${parsed.data.pr_head_sha} in "${directory}". The ref may not exist locally — the PR-review preflight fetches only refs/pull/<N>/head, not the base branch. Fetch it and pass the remote-tracking form using two separate standalone commands. First run: git -C "${directory}" fetch origin <base-branch>. Then run: git -C "${directory}" merge-base -- origin/<base-branch> ${parsed.data.pr_head_sha}`);if(resolvedBase.toLowerCase()!==parsed.data.base_sha.toLowerCase())throw Error(`BLOCKED: PR_REVIEW merge-base mismatch. git merge-base -- "${parsed.data.base_ref}" ${parsed.data.pr_head_sha} in "${directory}" resolved to ${resolvedBase}, but base_sha=${parsed.data.base_sha} was passed. If you computed base_sha against a remote-tracking ref, pass that SAME ref as base_ref — a local branch of the same name (main, refs/heads/main) may be stale and yields a different merge base. Verify with: git -C "${directory}" merge-base -- "${parsed.data.base_ref}" ${parsed.data.pr_head_sha}`);verifiedReviewBaseSha=resolvedBase}}catch(error93){return asyncFailureResult({failure_class:"invalid_args",message:error93 instanceof Error?error93.message:"PR workflow checkout head verification failed"})}if(parsed.data.mode?.startsWith("swarm-pr-review:")&&!parsed.data.pr_head_sha)return asyncFailureResult({failure_class:"invalid_args",message:"BLOCKED: active PR_REVIEW dispatch requires pr_head_sha"});if(parsed.data.mode?.startsWith("swarm-pr-feedback:")&&!parsed.data.pr_head_sha)return asyncFailureResult({failure_class:"invalid_args",message:"BLOCKED: PR_FEEDBACK dispatch requires pr_head_sha"});let prReviewPresentationOrder,prReviewOrderUnstableItemIds,prReviewReviewerSeverities;if(context.sessionID?.trim()&&parsed.data.pr_head_sha&&(parsed.data.mode==="swarm-pr-review:reviewer"||parsed.data.mode==="swarm-pr-review:critic"))try{if((await readPrWorkflowGateState(directory,context.sessionID))?.mode==="PR_REVIEW")if(parsed.data.mode==="swarm-pr-review:reviewer")prReviewPresentationOrder=await derivePrReviewPresentationOrder(directory,context.sessionID);else{prReviewOrderUnstableItemIds=await derivePrReviewOrderUnstableItems(directory,context.sessionID);let derivedSeverities=await derivePrReviewReviewerSeverities(directory,context.sessionID);if(derivedSeverities.size>0)prReviewReviewerSeverities=Object.assign(Object.create(null),Object.fromEntries(derivedSeverities))}}catch(error93){return asyncFailureResult({failure_class:"invalid_args",message:error93 instanceof Error?error93.message:"PR workflow counterbalancing derivation failed"})}let formatExplorerLanes=(input)=>applyExplorerFormatSuffix(input,{failClosed:Boolean(parsed.data.mode?.startsWith("swarm-pr-review:")||parsed.data.mode?.startsWith("swarm-pr-feedback:")),mode:parsed.data.mode}),contractPromptLanes=(input)=>applyPrWorkflowPromptContract(input,{mode:parsed.data.mode,batchId:parsed.data.mode==="swarm-pr-review:base"||parsed.data.mode==="swarm-pr-review:micro"?batchId:void 0,prHeadSha:verifiedPrHead,revisionDigest:workflowRevisionDigest,scope:verifiedReviewBaseSha?`complete PR diff ${verifiedReviewBaseSha}...${verifiedPrHead}`:"the complete immutable feedback inventory on the exact checked-out revision",callerFocus:parsed.data.scope,presentationOrder:prReviewPresentationOrder,orderUnstableItemIds:prReviewOrderUnstableItemIds,reviewerSeverities:prReviewReviewerSeverities});if(parsed.data.pr_review_wave_stage==="fanout"||(parsed.data.mode==="swarm-pr-review:base"||parsed.data.mode==="swarm-pr-review:micro")&&parsed.data.lanes.some((lane)=>(lane.owned_workflow_lanes?.length??0)>0)){let formatted=formatExplorerLanes(lanes);if(!formatted.ok)return asyncFailureResult({failure_class:"invalid_args",message:"Invalid mandatory PR workflow explorer output contract",errors:formatted.errors});let contracted=contractPromptLanes(formatted.lanes);if(!contracted.ok)return asyncFailureResult({failure_class:"invalid_args",message:"Invalid mandatory PR workflow prompt contract",errors:contracted.errors});lanes=contracted.lanes}else{let contracted=contractPromptLanes(lanes);if(!contracted.ok)return asyncFailureResult({failure_class:"invalid_args",message:"Invalid mandatory PR workflow prompt contract",errors:contracted.errors});let formatted=formatExplorerLanes(contracted.lanes);if(!formatted.ok)return asyncFailureResult({failure_class:"invalid_args",message:"Invalid mandatory PR workflow explorer output contract",errors:formatted.errors});lanes=formatted.lanes}if(context.sessionID?.trim())try{let gateState=await enforcePrWorkflowDispatchLanesAsync(directory,context.sessionID,"dispatch_lanes_async");if(!gateState&&parsed.data.mode?.startsWith("swarm-pr-review:"))gateState=await activatePrWorkflow(directory,context.sessionID,"PR_REVIEW",{requireCheckoutPreflight:!0});else if(!gateState&&parsed.data.mode==="swarm-pr-feedback:verification")gateState=await activatePrWorkflow(directory,context.sessionID,"PR_FEEDBACK",{requireCheckoutPreflight:!0});if(gateState?.mode==="PR_REVIEW"){let headSha=parsed.data.pr_head_sha;if(!headSha)throw Error("BLOCKED: active PR_REVIEW dispatch requires pr_head_sha");if(!verifiedReviewBaseSha||!parsed.data.base_ref)throw Error("BLOCKED: PR_REVIEW exact merge-base scope was not verified");gateState=await bindPrReviewBase(directory,context.sessionID,{prHeadSha:headSha,baseRef:parsed.data.base_ref,baseSha:verifiedReviewBaseSha});let laneSpecs=parsed.data.lanes.map((lane)=>({laneId:lane.id,workflowLane:lane.workflow_lane,reviewItemIds:lane.review_item_ids,ownedWorkflowLanes:lane.owned_workflow_lanes,agent:lane.agent})),depthTier=gateState.prReviewDepthTier??"L";if(parsed.data.mode==="swarm-pr-review:base"){let configuredResilience=_internals298.loadPluginConfig(directory).pr_review_resilience??DEFAULT_PR_REVIEW_RESILIENCE_CONFIG,effectiveResilience=effectivePrReviewResilienceConfig(configuredResilience,gateState),contractRetry=parsed.data.pr_review_contract_retry===!0,waveStage=parsed.data.pr_review_wave_stage,waveAttempt=parsed.data.pr_review_wave_attempt;if(contractRetry&&(waveStage!==void 0||waveAttempt!==void 0))throw Error("BLOCKED: PR_REVIEW contract retry is mutually exclusive with pr_review_wave_stage and pr_review_wave_attempt");if(waveStage===void 0!==(waveAttempt===void 0))throw Error("BLOCKED: PR_REVIEW staged base dispatch requires both pr_review_wave_stage and pr_review_wave_attempt together");if(waveStage!==void 0&&waveAttempt!==void 0&&(!effectiveResilience.enabled||depthTier==="S"))throw Error("BLOCKED: staged PR_REVIEW base dispatch is valid only when pr_review_resilience is enabled at depth tier M or L");if(effectiveResilience.enabled&&depthTier!=="S"&&!contractRetry&&(waveStage===void 0||waveAttempt===void 0))throw Error("BLOCKED: PR_REVIEW base dispatch at depth tier M or L requires canary-first pr_review_wave_stage and pr_review_wave_attempt while pr_review_resilience is enabled");let stagedBaseDispatch=effectiveResilience.enabled&&depthTier!=="S"&&waveStage!==void 0&&waveAttempt!==void 0,effectiveMaxConcurrent=parsed.data.max_concurrent??parsed.data.lanes.length;if((gateState.prReviewBaseDispatches?.length??0)===0&&!stagedBaseDispatch){let ownedDimensionIds=parsed.data.lanes.flatMap((lane)=>lane.owned_workflow_lanes?.length?lane.owned_workflow_lanes:lane.workflow_lane?[lane.workflow_lane]:[]),coversAllSixExactlyOnce=ownedDimensionIds.length===PR_REVIEW_BASE_DIMENSION_IDS.length&&new Set(ownedDimensionIds).size===PR_REVIEW_BASE_DIMENSION_IDS.length&&PR_REVIEW_BASE_DIMENSION_IDS.every((dimensionId)=>ownedDimensionIds.includes(dimensionId));if(depthTier==="L"){if(parsed.data.lanes.length!==6||effectiveMaxConcurrent!==6||parsed.data.lanes.some((lane)=>(lane.owned_workflow_lanes?.length??1)!==1))throw Error(`BLOCKED: initial PR_REVIEW base dispatch requires exactly six lanes and max_concurrent: 6 at depth tier L (consolidated owned_workflow_lanes are allowed only at tiers S and M); each lane owns exactly one dimension and may set workflow_lane to it, omitting owned_workflow_lanes; valid dimensions: ${PR_REVIEW_BASE_DIMENSION_IDS.join(", ")}`)}else if(!coversAllSixExactlyOnce||parsed.data.lanes.length<PR_REVIEW_BASE_LANE_FLOORS[depthTier]||parsed.data.lanes.length>PR_REVIEW_BASE_DIMENSION_IDS.length||effectiveMaxConcurrent!==parsed.data.lanes.length)throw Error(`BLOCKED: initial PR_REVIEW base dispatch at depth tier ${depthTier} requires between ${PR_REVIEW_BASE_LANE_FLOORS[depthTier]} and ${PR_REVIEW_BASE_DIMENSION_IDS.length} lanes whose owned_workflow_lanes partition all six dimensions exactly once, with max_concurrent equal to the lane count; valid dimensions: ${PR_REVIEW_BASE_DIMENSION_IDS.join(", ")}; a lane with one dimension may set workflow_lane to it and omit owned_workflow_lanes`)}if(stagedBaseDispatch){if(waveStage==="canary"){if(parsed.data.lanes.length!==1||effectiveMaxConcurrent!==1||parsed.data.lanes.some((lane)=>(lane.owned_workflow_lanes?.length??1)!==1))throw Error("BLOCKED: PR_REVIEW staged base canary requires exactly one singleton lane and max_concurrent: 1")}else if(effectiveMaxConcurrent!==parsed.data.lanes.length)throw Error("BLOCKED: PR_REVIEW staged base fanout requires max_concurrent equal to the lane count")}for(let lane of parsed.data.lanes)if(resolveGeneratedAgentRole(lane.agent,swarmState.generatedAgentNames)!=="explorer")throw Error(`BLOCKED: PR_REVIEW base lane "${lane.id}" must use the explorer role`);gateState=await enforcePrReviewBaseDimensions(directory,context.sessionID,laneSpecs,{batchId,prHeadSha:headSha,revisionDigest:workflowRevisionDigest,prReviewContractRetry:contractRetry,prReviewWaveStage:waveStage,prReviewWaveAttempt:waveAttempt,prReviewResiliencePolicy:effectiveResilience}),prReviewWorkflowInstanceId=gateState.workflowInstanceId,prReviewWorkflowRevision=gateState.revision}else if(parsed.data.mode==="swarm-pr-review:micro"){if(await assertPrReviewBaseCoverageSettled2(directory,context.sessionID),gateState.prHeadSha&&gateState.prHeadSha!==headSha)throw Error(`BLOCKED: PR_REVIEW head mismatch; expected "${gateState.prHeadSha}", received "${headSha}"`);for(let lane of parsed.data.lanes)if(resolveGeneratedAgentRole(lane.agent,swarmState.generatedAgentNames)!=="explorer")throw Error(`BLOCKED: PR_REVIEW micro lane "${lane.id}" must use the explorer role`);let effectiveTriggerEvaluation=parsed.data.trigger_evaluation!==void 0?parsed.data.trigger_evaluation:gateState.prReviewTriggerLedger;validatePrReviewMicroDispatch({...parsed.data,trigger_evaluation:effectiveTriggerEvaluation},depthTier),gateState=await bindPrReviewTriggerLedger(directory,context.sessionID,effectiveTriggerEvaluation),gateState=await recordPrReviewMicroFamilyDispatch(directory,context.sessionID,laneSpecs,{batchId,prHeadSha:headSha}),prReviewWorkflowInstanceId=gateState.workflowInstanceId,prReviewWorkflowRevision=gateState.revision}else if(parsed.data.mode==="swarm-pr-review:council"||parsed.data.mode==="swarm-pr-review:reviewer"||parsed.data.mode==="swarm-pr-review:critic"){let phase=parsed.data.mode.endsWith(":council")?"council":parsed.data.mode.endsWith(":reviewer")?"reviewer":"critic";if(parsed.data.lanes.some((lane)=>lane.owned_workflow_lanes))throw Error(`BLOCKED: PR_REVIEW ${phase} lanes must not declare owned_workflow_lanes; depth-tier consolidation applies only to base and micro discovery lanes`);for(let lane of parsed.data.lanes){let role=resolveGeneratedAgentRole(lane.agent,swarmState.generatedAgentNames);if(phase==="council"&&!role.startsWith("council_")||phase==="reviewer"&&role!=="reviewer"||phase==="critic"&&role!=="critic")throw Error(`BLOCKED: PR_REVIEW ${phase} lane "${lane.id}" uses invalid role "${role||lane.agent}"${phase==="critic"?" — PR critic lanes must use the critic agent (critic_finding_validator and other critic-family roles cannot emit [CRITIC] rows)":""}`);let agentValidation=validateLaneAgent(lane.agent,context);if(!agentValidation.ok)throw Error(`BLOCKED: PR_REVIEW ${phase} lane "${lane.id}" agent "${lane.agent}" is not launchable on this host: ${agentValidation.error}`)}await recordPrReviewValidationBatch(directory,context.sessionID,phase,laneSpecs,{batchId,prHeadSha:headSha,expectedPresentationOrder:prReviewPresentationOrder,generatedAgentNames:swarmState.generatedAgentNames})}else throw Error("BLOCKED: active PR_REVIEW requires a structured base, micro, council, reviewer, or critic mode")}else if(gateState?.mode==="PR_FEEDBACK"){let headSha=parsed.data.pr_head_sha;if(!headSha)throw Error("BLOCKED: PR_FEEDBACK dispatch requires pr_head_sha");if(parsed.data.lanes.some((lane)=>lane.owned_workflow_lanes))throw Error("BLOCKED: PR_FEEDBACK lanes must not declare owned_workflow_lanes; depth-tier consolidation applies only to PR_REVIEW base and micro discovery lanes");if(parsed.data.mode==="swarm-pr-feedback:verification")await declarePrFeedbackInventory(directory,context.sessionID,parsed.data.feedback_inventory??[],{prHeadSha:headSha}),await enforcePrFeedbackVerificationOwnership(directory,context.sessionID,parsed.data.lanes.map((lane)=>({laneId:lane.id,ownedItemIds:lane.feedback_item_ids??[]})),{batchId,prHeadSha:headSha});else if(parsed.data.mode==="swarm-pr-feedback:stage-b-reviewer"||parsed.data.mode==="swarm-pr-feedback:stage-b-test"||parsed.data.mode==="swarm-pr-feedback:closeout-reviewer"||parsed.data.mode==="swarm-pr-feedback:closeout-critic"){if(parsed.data.lanes.length!==1||(parsed.data.max_concurrent??parsed.data.lanes.length)!==1)throw Error("BLOCKED: each ordered PR_FEEDBACK gate requires exactly one lane and max_concurrent: 1");let phase=parsed.data.mode.slice(18),lane=parsed.data.lanes[0],role=resolveGeneratedAgentRole(lane.agent,swarmState.generatedAgentNames),expectedRole=phase==="stage-b-test"?"test_engineer":phase==="closeout-critic"?"critic":"reviewer";if(lane.workflow_lane!==phase||role!==expectedRole)throw Error(`BLOCKED: PR_FEEDBACK ${phase} requires workflow_lane "${phase}" and role "${expectedRole}"`);await recordPrFeedbackGateBatch(directory,context.sessionID,phase,{laneId:lane.id,ownedItemIds:lane.feedback_item_ids??[]},{batchId,prHeadSha:headSha,revisionDigest:workflowRevisionDigest??""})}else throw Error("BLOCKED: active PR_FEEDBACK requires structured verification, Stage B reviewer/test, and closeout reviewer/critic modes")}}catch(error93){return asyncFailureResult({failure_class:error93 instanceof PrReviewResilienceCircuitOpenError?"circuit_open":error93 instanceof PrReviewResilienceRetryExhaustedError?"retry_exhausted":"invalid_args",message:error93 instanceof Error?error93.message:"PR workflow gate rejected dispatch"})}let canonicalWorkflowScope=verifiedReviewBaseSha?`complete PR diff ${verifiedReviewBaseSha}...${verifiedPrHead}`:parsed.data.mode?.startsWith("swarm-pr-feedback:")?"the complete immutable feedback inventory on the exact checked-out revision":parsed.data.scope,maxConcurrent=Math.min(parsed.data.max_concurrent??lanes.length,lanes.length,MAX_LANES),launchTimeoutMs=parsed.data.launch_timeout_ms??parsed.data.timeout_ms??DEFAULT_ASYNC_LAUNCH_TIMEOUT_MS,dispatcher=_internals298.createParallelDispatcher({enabled:!0,maxConcurrentTasks:maxConcurrent,evidenceLockTimeoutMs:0}),limit=pLimit(maxConcurrent);try{let laneResults=await Promise.all(lanes.map((lane)=>limit(()=>launchAsyncLane({session,dispatcher,lane,directory,timeoutMs:launchTimeoutMs,context,batchId,mode:parsed.data.mode,prHeadSha:parsed.data.pr_head_sha,gitHead:verifiedPrHead,dirtyHash:workflowRevisionDigest,scope:canonicalWorkflowScope,prReviewWorkflowInstanceId,prReviewWorkflowRevision}))));if(parsed.data.mode==="swarm-pr-review:base"&&context.sessionID?.trim()&&(parsed.data.pr_review_wave_stage!==void 0||parsed.data.pr_review_contract_retry===!0))try{await rollbackPrReviewBaseAdmissionIfUnlaunched(directory,context.sessionID,batchId,parsed.data.pr_review_contract_retry===!0)}catch(error93){throw log("pr-review base-admission rollback failed",{batchId,sessionID:context.sessionID,error:error93 instanceof Error?error93.message:String(error93)}),error93}if((parsed.data.mode==="swarm-pr-review:reviewer"||parsed.data.mode==="swarm-pr-review:critic")&&context.sessionID?.trim()&&!laneResults.some((lane)=>lane.status==="pending"))try{await rollbackPrReviewValidationBatchIfUnlaunched(directory,context.sessionID,batchId)}catch(error93){log("pr-review validation-batch rollback failed",{batchId,sessionID:context.sessionID,error:error93 instanceof Error?error93.message:String(error93)})}let failed=laneResults.filter((lane)=>lane.status==="failed"),rejected2=laneResults.filter((lane)=>lane.status==="rejected"),pending=laneResults.filter((lane)=>lane.status==="pending");return{success:failed.length===0&&rejected2.length===0,batch_id:batchId,dispatched:laneResults.length,pending:pending.length,failed:failed.length,rejected:rejected2.length,max_concurrent:maxConcurrent,launch_timeout_ms:launchTimeoutMs,timeout_ms:launchTimeoutMs,lane_results:laneResults}}finally{dispatcher.shutdown()}}async function executeCollectLaneResults(args2,directory,context={}){let parsed=CollectLaneResultsArgsSchema.safeParse(args2);if(!parsed.success)return collectFailureResult({failure_class:"invalid_args",batch_id:"",message:"Invalid collect_lane_results arguments",errors:boundZodIssues(parsed.error.issues)});let timeoutMs=parsed.data.timeout_ms??DEFAULT_COLLECT_TIMEOUT_MS,deadline=_internals298.now()+timeoutMs,hostTimeouts=new Set,collectionResourceFailures=new Map,receiptAppendFailureLogs=new Set,settleFailureLogs=new Map,batchFilter=context.sessionID!==void 0?{parentSessionId:context.sessionID}:void 0,initialRead=findByBatchIdDetailed(directory,parsed.data.batch_id,batchFilter);if(initialRead.status==="uncertain")return collectFailureResult({failure_class:"store_unreadable",batch_id:parsed.data.batch_id,message:`Delegation store unreadable after ${initialRead.attempts} attempts; batch ${parsed.data.batch_id} is UNKNOWN, not absent (${initialRead.reason})`});let records=initialRead.value;if(records.length===0)return collectFailureResult({failure_class:"not_found",batch_id:parsed.data.batch_id,message:`No async lane batch found for ${parsed.data.batch_id}`});await recoverTerminalLaneReceipts(directory,records);let revisionSnapshots=new Map,supersessionScannedCorrelationIds=new Set,session=_internals298.getSessionOps();if(!session||typeof session.messages!=="function"){let reviewReceiptFallbacks2=await resolvePrReviewReceiptFallbacks(directory,context.sessionID,records),result2=buildCollectResult(parsed.data.batch_id,records,parsed.data.include_pending??parsed.data.wait!==!0,{directory,sessionID:context.sessionID,reviewReceipts:reviewReceiptFallbacks2}),observed=reducePrReviewEvent({sessionID:context.sessionID??"",revision:0},{type:"collection_observed",diagnostic:"host_unavailable",pendingLaneIds:records.filter((record3)=>!isTerminalDelegationStatus2(record3.status)).map((record3)=>record3.laneId??record3.correlationId)}),diagnosticCode=observed.status==="applied"?observed.effects.find((effect)=>effect.kind==="emit_diagnostic")?.code??"collection_host_unavailable":"collection_host_unavailable";if(result2.failure_class="no_client",result2.message="OpenCode session messages client is not available; lane state is reported as stored and no lane was cancelled or terminalized. Poll again once the host client is available, or use cancel_lane_batch (confirm + reason) for an explicit cancellation; the presumed-stale backstop remains.",parsed.data.cancel_pending===!0){let refusals=collectCancellationRefusals(records,null,"observer-unavailable");if(refusals.length>0)result2.cancellation_refused=refusals}return result2.errors=[`OpenCode session messages client is not available (${diagnosticCode})`],await attachPendingLaneLiveness(result2,directory,records,deadline),result2}let keepPolling=!0,pollIntervalMs=COLLECT_POLL_INTERVAL_MS,lastStatusTypes=null;while(keepPolling){if(records.some((record3)=>record3.status==="pending"||record3.status==="running"))lastStatusTypes=await probeLaneStatusTypesForPass(session,directory,deadline,hostTimeouts);await collectOnce(session,directory,records,lastStatusTypes,deadline,hostTimeouts,receiptAppendFailureLogs,collectionResourceFailures,settleFailureLogs,revisionSnapshots),await supersedeStaleLivenessVerdictLanesFromCollect({session,directory,records,deadline,hostTimeouts,revisionSnapshots,scannedCorrelationIds:supersessionScannedCorrelationIds}),await sweepStaleAsyncLaneRecords(session,directory,records,DEFAULT_ASYNC_STALE_TIMEOUT_MS,deadline,hostTimeouts);let pollRead=findByBatchIdDetailed(directory,parsed.data.batch_id,batchFilter);if(pollRead.status==="uncertain"){if(addLaneDiagnostic(collectionResourceFailures,`batch:${parsed.data.batch_id}`,`collect re-read uncertain: delegation store unreadable after ${pollRead.attempts} attempts (${pollRead.reason}); settlement UNKNOWN, continuing to poll`),parsed.data.wait!==!0){keepPolling=!1;continue}}else if(records=pollRead.value,allSettled(records)||parsed.data.wait!==!0){keepPolling=!1;continue}if(_internals298.now()>=deadline){keepPolling=!1;continue}await _internals298.sleep(Math.min(pollIntervalMs,Math.max(0,deadline-_internals298.now()))),pollIntervalMs=nextCollectPollInterval(pollIntervalMs)}let reviewReceiptFallbacks=await resolvePrReviewReceiptFallbacks(directory,context.sessionID,records),result=buildCollectResult(parsed.data.batch_id,records,parsed.data.include_pending??parsed.data.wait!==!0,{directory,sessionID:context.sessionID,reviewReceipts:reviewReceiptFallbacks});if(await attachPendingLaneLiveness(result,directory,records,deadline),parsed.data.cancel_pending===!0){let refusals=collectCancellationRefusals(records,lastStatusTypes,"observer-degraded");if(refusals.length>0)result.cancellation_refused=refusals,result.message=`${result.message?`${result.message} `:""}cancel_pending is observation-only: ${refusals.length} lane(s) refused; use cancel_lane_batch (confirm: true + reason) for an authorized cancellation.`}if(hostTimeouts.size>0)result.message=result.pending>0?"Collection deadline exhausted while waiting for OpenCode host calls; pending lanes remain safe to retry.":"Collection recovered and settled all lanes despite bounded OpenCode host-call timeouts; no collection retry is required.";let starvedProbeCount=(result.pending_liveness??[]).filter((lane)=>lane.degradedReason===PR_WORKFLOW_PROBE_SKIPPED_NO_BUDGET_REASON).length;if(starvedProbeCount>0)result.message=`${result.message?`${result.message} `:""}${starvedProbeCount} pending-liveness probe(s) skipped for budget (${PR_WORKFLOW_PROBE_SKIPPED_NO_BUDGET_REASON}); lanes may be further settled than reported.`;let diagnostics=assembleCollectionDiagnostics(hostTimeouts,settleFailureLogs,collectionResourceFailures);if(diagnostics.length>0)result.errors=diagnostics;return result}async function attachPendingLaneLiveness(result,directory,records,deadline){if(result.pending<=0)return;let pendingLiveness=await collectPrWorkflowPendingLaneLiveness(directory,records,{probeBudgetMs:Math.max(0,deadline-_internals298.now())});if(pendingLiveness.length>0)result.pending_liveness=pendingLiveness}async function createLaneSession(args2){let generation=1,decision=args2.dispatcher.dispatch(args2.lane.id);while(!0){if(decision.action!=="dispatch")return{ok:!1,generation,error:`dispatcher ${decision.action}: ${decision.reason}`};let createTimeoutMessage=`Lane "${args2.lane.id}" session.create timed out after ${args2.timeoutMs}ms`,createPromise;try{createPromise=args2.session.create(buildLaneSessionCreateArgs(args2.directory,args2.lane,args2.context))}catch(error93){createPromise=Promise.reject(error93)}let createTimedOut=!1;createPromise.then((result)=>{if(createTimedOut&&result.data?.id)scheduleSessionCleanup(args2.session,result.data.id)}).catch(()=>{return});let failureSignal,failureMessage;try{let result=await withTimeout2(createPromise,args2.timeoutMs,createTimeoutMessage);if(result.data?.id)return{ok:!0,sessionId:result.data.id,generation,slotId:decision.slot.slotId,runId:decision.slot.runId};failureSignal=result.error,failureMessage=result.error===void 0||result.error===null?"session.create failed: malformed response without a session id":`session.create failed: ${formatError3(result.error)}`}catch(error93){if(failureSignal=error93,failureMessage=formatError3(error93),failureMessage===createTimeoutMessage)createTimedOut=!0}if((createTimedOut||isRetryableSessionCreateFailure(failureSignal))&&generation<MAX_SESSION_CREATE_GENERATIONS){args2.dispatcher.releaseSlot(decision.slot.slotId),generation++,decision=args2.dispatcher.dispatch(args2.lane.id);continue}return{ok:!1,error:failureMessage,generation,slotId:decision.slot.slotId,runId:decision.slot.runId}}}function isRetryableSessionCreateFailure(error93){if(error93===void 0||error93===null)return!1;let seen=new WeakSet,pending=[{value:error93,depth:0}],visited=0,signalChars=0,transient=!1,permanent=!1,truncated=!1;while(pending.length>0&&visited<MAX_CREATE_FAILURE_WALK_NODES){let current=pending.shift();visited++;let{value,depth,key:key3}=current;if((key3==="isRetryable"||key3==="retryable")&&value===!1)permanent=!0;if(typeof value==="number"&&Number.isInteger(value)){if(key3===void 0||CREATE_FAILURE_STATUS_KEYS.has(key3)){if(TRANSIENT_CREATE_STATUS_CODES.has(value))transient=!0;if(PERMANENT_CREATE_STATUS_CODES.has(value))permanent=!0}continue}if(typeof value==="string"){if(key3!==void 0&&!CREATE_FAILURE_SCALAR_KEYS.has(key3))continue;if(key3!==void 0&&CREATE_FAILURE_STATUS_KEYS.has(key3)&&/^\d+$/.test(value)){let numericStatus=Number(value);if(TRANSIENT_CREATE_STATUS_CODES.has(numericStatus))transient=!0;if(PERMANENT_CREATE_STATUS_CODES.has(numericStatus))permanent=!0}let remaining=MAX_CREATE_FAILURE_SIGNAL_CHARS-signalChars;if(remaining<=0){truncated=!0;continue}let signal2=value.slice(0,remaining);if(signal2.length<value.length)truncated=!0;if(signalChars+=signal2.length,PERMANENT_CREATE_SIGNAL_PATTERN.test(signal2))permanent=!0;if(TRANSIENT_CREATE_SIGNAL_PATTERN.test(signal2))transient=!0;continue}if(typeof value!=="object"&&typeof value!=="function"||value===null)continue;let object3=value;if(seen.has(object3))continue;if(seen.add(object3),depth>=MAX_CREATE_FAILURE_WALK_DEPTH){truncated=!0;continue}let isArray=!1;try{isArray=Array.isArray(object3)}catch{truncated=!0;continue}if(isArray){let arrayLength;try{let lengthDescriptor=Object.getOwnPropertyDescriptor(object3,"length");if(!lengthDescriptor||!("value"in lengthDescriptor)||typeof lengthDescriptor.value!=="number"||!Number.isSafeInteger(lengthDescriptor.value)||lengthDescriptor.value<0){truncated=!0;continue}arrayLength=lengthDescriptor.value}catch{truncated=!0;continue}let remainingNodes=MAX_CREATE_FAILURE_WALK_NODES-visited,itemCount=Math.min(arrayLength,remainingNodes);if(itemCount<arrayLength)truncated=!0;for(let index=0;index<itemCount;index++){let descriptor;try{descriptor=Object.getOwnPropertyDescriptor(object3,index)}catch{truncated=!0;continue}if(!descriptor)continue;if(!("value"in descriptor)){truncated=!0;continue}pending.push({value:descriptor.value,depth:depth+1,key:key3})}continue}for(let propertyKey of CREATE_FAILURE_FIELD_KEYS){if(pending.length+visited>=MAX_CREATE_FAILURE_WALK_NODES){truncated=!0;break}let descriptor;try{descriptor=Object.getOwnPropertyDescriptor(object3,propertyKey)}catch{truncated=!0;continue}if(!descriptor)continue;if(!("value"in descriptor)){truncated=!0;continue}pending.push({value:descriptor.value,depth:depth+1,key:propertyKey})}}if(pending.length>0)truncated=!0;return transient&&!permanent&&!truncated}async function launchAsyncLane(args2){let validation2=validateLaneAgent(args2.lane.agent,args2.context),role=validation2.role,startedAt=isoNow2();if(!validation2.ok)return{id:args2.lane.id,agent:args2.lane.agent,role,status:"rejected",started_at:startedAt,completed_at:isoNow2(),error:validation2.error};let create=await createLaneSession({session:args2.session,dispatcher:args2.dispatcher,lane:args2.lane,directory:args2.directory,timeoutMs:args2.timeoutMs,context:args2.context});try{if(!create.ok)return failedLane(args2.lane,role,startedAt,create.error,create.slotId,create.runId,void 0,create.generation);let sessionId=create.sessionId,legacyTranscriptCompatibility=args2.mode==="swarm-pr-review:base"||args2.mode==="swarm-pr-review:micro"?prReviewLegacyTranscriptCompatibilityEnabled(_internals298.loadPluginConfig(args2.directory).pr_review_legacy_transcript_compatibility):void 0,pendingOutcome=await recordPendingDelegationDetailed(args2.directory,{correlationId:sessionId,jobId:args2.prReviewWorkflowInstanceId?encodePrReviewWorkflowBinding(args2.prReviewWorkflowInstanceId):null,subagentSessionId:sessionId,parentSessionId:args2.context.sessionID?.trim()||`dispatch_lanes_async:${args2.batchId}`,callID:args2.batchId,normalizedAgent:role,swarmPrefixedAgent:args2.lane.agent,planTaskId:null,evidenceTaskId:null,batchId:args2.batchId,laneId:args2.lane.id,mode:args2.mode??"advisory",workflowLane:args2.lane.workflow_lane,ownedWorkflowLanes:args2.lane.owned_workflow_lanes,prReviewLegacyTranscriptCompatibility:legacyTranscriptCompatibility,promptHash:promptHash(args2.lane,args2.directory,args2.batchId),workspace:{directory:args2.directory,gitHead:args2.gitHead??null,dirtyHash:args2.dirtyHash??null,prHeadSha:args2.prHeadSha??null,scope:args2.scope??null},...args2.prReviewWorkflowRevision!==void 0?{workflowGeneration:args2.prReviewWorkflowRevision}:{},generation:create.generation});if(pendingOutcome.status==="duplicate"||pendingOutcome.status==="conflict")return failedLane(args2.lane,role,startedAt,pendingOutcome.status==="duplicate"?"Async lane session.create returned an already-recorded correlation id":"Async lane session.create returned a correlation id owned by a different background delegation",create.slotId,create.runId,sessionId,create.generation);if(pendingOutcome.status==="failed")return cleanupAsyncLaunchSession(args2.session,sessionId),failedLane(args2.lane,role,startedAt,"Failed to record async lane in background delegation ledger",create.slotId,create.runId,sessionId,create.generation);return emitDelegationBegin(pendingOutcome.record),scheduleAsyncLanePrompt({session:args2.session,directory:args2.directory,sessionId,lane:args2.lane,timeoutMs:args2.timeoutMs,mode:args2.mode,structuredAdapter:args2.context.prReviewStructuredPromptAdapter}),{id:args2.lane.id,agent:args2.lane.agent,role,status:"pending",session_id:sessionId,slot_id:create.slotId,run_id:create.runId,generation:create.generation,started_at:startedAt,completed_at:isoNow2()}}catch(error93){return failedLane(args2.lane,role,startedAt,formatError3(error93),create.slotId,create.runId,create.ok?create.sessionId:void 0,create.generation)}finally{if(create.slotId)args2.dispatcher.releaseSlot(create.slotId)}}async function collectOnce(session,directory,records,statusTypes,deadline,hostTimeouts,receiptAppendFailureLogs,collectionResourceFailures,settleFailureLogs,revisionSnapshots){let activeRecords=records.filter((record3)=>record3.status==="pending"||record3.status==="running");if(activeRecords.length===0)return;let refreshLimit=pLimit(COLLECT_REFRESH_CONCURRENCY),fetchLaneRecord=async(record3)=>{let laneLabel=record3.laneId??record3.correlationId,needsRevisionDigest=Boolean(record3.workspace?.prHeadSha),laneBudgets=reserveConcurrentLaneCallBudgets(deadline,activeRecords.length,typeof session.status==="function",needsRevisionDigest),readiness=laneReadinessFromProbeTypes(statusTypes,record3.subagentSessionId);if(readiness==="busy")return{kind:"skipped"};try{let messages=await withCollectionDeadline(()=>session.messages({path:{id:record3.subagentSessionId},query:{directory,limit:ASYNC_MESSAGE_FETCH_LIMIT}}),deadline,`session.messages for lane "${laneLabel}"`,hostTimeouts,laneBudgets.messagesBudgetMs);return{kind:"fetched",readiness,messages,laneBudgets}}catch(error93){return{kind:"messages-error",error:error93}}},fetched=await Promise.all(activeRecords.map((record3)=>refreshLimit(()=>fetchLaneRecord(record3)))),pendingSettlements=[];for(let index=0;index<activeRecords.length;index++){let record3=activeRecords[index],laneLabel=record3.laneId??record3.correlationId,outcome=fetched[index];if(!outcome||outcome.kind==="skipped")continue;if(outcome.kind==="messages-error"){let messageTimeoutPrefix=`session.messages for lane "${laneLabel}" exceeded the remaining collect_lane_results budget`;if(![...hostTimeouts].some((entry)=>entry.startsWith(messageTimeoutPrefix)))addLaneDiagnostic(collectionResourceFailures,laneLabel,`session.messages transport error for lane "${laneLabel}"; lane left pending: ${safeDiagnosticCause(outcome.error)}`);continue}let{readiness,messages,laneBudgets}=outcome;if(!messages.data){if(messages.error)addLaneDiagnostic(collectionResourceFailures,laneLabel,`session.messages returned an error for lane "${laneLabel}"; lane left pending: ${safeDiagnosticCause(messages.error)}`);continue}clearLaneDiagnostics(collectionResourceFailures,laneLabel);let transcript=extractAssistantTranscript(messages.data),relyingOnCompletedAtOnly=readiness!=="idle"&&Number.isFinite(transcript.completedAt),hostSaysRetryable=transcript.terminalError?.kind!=="aborted"&&transcript.terminalError?.hostRetryable===!0;if(transcript.terminalError&&!transcript.text&&!transcript.windowTruncated&&(Number.isFinite(transcript.completedAt)||readiness==="idle")&&!(relyingOnCompletedAtOnly&&hostSaysRetryable)){let settledStatus=transcript.terminalError.kind==="aborted"?"cancelled":"error",reason=laneTerminalErrorReason(transcript.terminalError),settled=await settleDelegationTerminal(directory,record3,{status:settledStatus,result:{error:reason,chars:reason.length,truncated:!1,digest:digestText2(reason),terminalErrorClass:terminalErrorClassFromLaneTerminalError(transcript.terminalError),...settledStatus==="error"?{workflowLaneFailureClass:"resource"}:{}}},{},_internals298.now());if(settled.kind==="claimed")clearLaneDiagnostics(settleFailureLogs,laneLabel),cleanupAsyncLaunchSession(session,record3.subagentSessionId);else if(isBenignSettleOutcome(settled.kind))clearLaneDiagnostics(settleFailureLogs,laneLabel);else if(settled.kind==="uncertain")addLaneDiagnostic(settleFailureLogs,laneLabel,`terminal settle deferred for lane "${laneLabel}"; delegation store unreadable (${settled.reason??"unclassified"}); lane left open for retry`);else addLaneDiagnostic(settleFailureLogs,laneLabel,`terminal settle write did not land for lane "${laneLabel}"; lane left open`);continue}if(record3.result?.prReviewResultReceipt&&!transcript.text){if(await settleCollectedLaneFromReceipt({directory,record:record3,deadline,hostTimeouts,revisionSnapshots,revisionDigestBudgetMs:laneBudgets.revisionDigestBudgetMs,settleFailureLogs}))continue}if(!transcript.text&&!transcript.terminalError&&messages.data.length>0&&(readiness==="idle"||transcript.terminalAssistantProof===!0)){let freshRecordRead=findByCorrelationIdDetailed(directory,record3.correlationId),freshRecord2=freshRecordRead.status==="ok"?freshRecordRead.value:null;if(freshRecordRead.status!=="ok"||!freshRecord2)continue;if(freshRecord2.result?.prReviewResultReceipt)continue;let silentLaneReason=readiness==="idle"?`lane ${laneLabel} idle with no assistant output: settled as liveness without waiting the stale horizon`:`lane ${laneLabel} ended with a terminal but textless assistant message: settled as liveness`,silentLivenessResult=record3.result?{...record3.result,workflowLaneFailureClass:"liveness"}:{error:silentLaneReason,chars:silentLaneReason.length,truncated:!1,digest:digestText2(silentLaneReason),workflowLaneFailureClass:"liveness"};if(!await appendDelegationTransition(directory,record3.correlationId,{status:"stale",result:silentLivenessResult,expectedCurrentStatuses:["pending","running"],terminalResult:buildTypedDelegationTerminal(record3,"stale",silentLivenessResult,_internals298.now())}))addLaneDiagnostic(settleFailureLogs,laneLabel,`idle liveness settle write did not land for lane "${laneLabel}"; lane left open for retry`);continue}if(!transcript.text)continue;if(readiness==="unknown"&&!transcript.terminalAssistantProof)continue;pendingSettlements.push(settleCollectedLane({directory,record:record3,transcript,deadline,hostTimeouts,revisionDigestBudgetMs:laneBudgets.revisionDigestBudgetMs,receiptAppendFailureLogs,revisionSnapshots,settleFailureLogs}))}await Promise.all(pendingSettlements)}function isSupersedeableStaleLivenessVerdictRecord(record3){return record3.status==="stale"&&(record3.mode==="swarm-pr-review:reviewer"||record3.mode==="swarm-pr-review:critic")&&(record3.result?.workflowLaneFailureClass==="liveness"||record3.terminalResult?.result.workflowLaneFailureClass==="liveness")}async function supersedeStaleLivenessVerdictLanesFromCollect(args2){if(typeof args2.session.messages!=="function")return;let candidates=args2.records.filter(isSupersedeableStaleLivenessVerdictRecord).filter((record3)=>!args2.scannedCorrelationIds.has(record3.correlationId));if(candidates.length===0)return;let budgets2=reserveCollectionLaneCallBudgets(args2.deadline,candidates.length,typeof args2.session.status==="function",candidates.some((record3)=>Boolean(record3.workspace?.prHeadSha)));for(let record3 of candidates){if(args2.deadline-_internals298.now()<=0)return;args2.scannedCorrelationIds.add(record3.correlationId);let laneLabel=record3.laneId??record3.correlationId,messages;try{messages=await withCollectionDeadline(()=>args2.session.messages({path:{id:record3.subagentSessionId},query:{directory:args2.directory,limit:ASYNC_MESSAGE_FETCH_LIMIT}}),args2.deadline,`session.messages for lane "${laneLabel}" (stale-liveness supersession scan)`,args2.hostTimeouts,budgets2.messagesBudgetMs)}catch{continue}if(!messages.data)continue;let transcript=extractAssistantTranscript(messages.data);if(!transcript.text)continue;let digestResolution=await resolveCollectLaneRevisionDigest({directory:args2.directory,prHeadSha:record3.workspace?.prHeadSha,laneLabel,deadline:args2.deadline,hostTimeouts:args2.hostTimeouts,revisionSnapshots:args2.revisionSnapshots,budgetMs:budgets2.revisionDigestBudgetMs});if(digestResolution.status==="unavailable")continue;let output=prepareLaneOutput({directory:args2.directory,batchId:record3.batchId??record3.callID,laneId:record3.laneId??record3.correlationId,agent:record3.swarmPrefixedAgent,role:record3.normalizedAgent,sessionId:record3.subagentSessionId,parentSessionId:record3.parentSessionId,mode:record3.mode,workflowLane:record3.workflowLane,prHeadSha:record3.workspace?.prHeadSha??void 0,gitHead:record3.workspace?.gitHead??void 0,revisionDigest:digestResolution.digest,scope:record3.workspace?.scope??void 0,source:"collect_lane_results",text:transcript.text,messageCount:transcript.messageCount,transcriptIncomplete:transcript.transcriptIncomplete}),validatedResult={text:output.output,chars:output.output_chars,truncated:output.output_truncated,digest:output.output_digest,...output.output_ref?{outputRef:output.output_ref}:{},outputPreviewChars:output.output.length,...output.output_degraded!==void 0?{outputDegraded:output.output_degraded}:{},...output.output_artifact_error?{outputArtifactError:output.output_artifact_error}:{},...output.transcript_incomplete!==void 0?{transcriptIncomplete:output.transcript_incomplete}:{},messageCount:transcript.messageCount},artifact=output.output_ref?readLaneOutput(args2.directory,output.output_ref)?.artifact??null:null,validation2;try{validation2=await withCollectionDeadline(()=>_internals298.validatePrWorkflowTransportRecovery({directory:args2.directory,record:record3,result:validatedResult,artifact,revisionDigest:digestResolution.digest??""}),args2.deadline,`transport recovery validation for lane "${laneLabel}" (stale-liveness supersession scan)`,args2.hostTimeouts)}catch{continue}if(!validation2.ok)continue;try{await supersedeStaleLivenessVerdictLane(args2.directory,{correlationId:record3.correlationId,validatedResult})}catch{}}}function revisionSnapshotKey(directory,prHeadSha){return`${canonicalRootKeyFresh(directory)}\x00${prHeadSha??""}`}var MAX_DIAGNOSTICS_PER_LANE=3,MAX_HOST_TIMEOUT_DIAGNOSTICS=MAX_LANES*4,MAX_LANE_DIAGNOSTICS_PER_CHANNEL=MAX_LANES*MAX_DIAGNOSTICS_PER_LANE;function assembleCollectionDiagnostics(hostTimeouts,settleFailureLogs,collectionResourceFailures){return[...flattenLaneDiagnostics(settleFailureLogs),...flattenLaneDiagnostics(collectionResourceFailures),...[...hostTimeouts].slice(0,MAX_HOST_TIMEOUT_DIAGNOSTICS)]}function addLaneDiagnostic(diagnostics,laneLabel,message){let entries2=diagnostics.get(laneLabel);if(entries2===void 0)entries2=new Set,diagnostics.set(laneLabel,entries2);if(entries2.has(message))return;if(entries2.size>=MAX_DIAGNOSTICS_PER_LANE)return;entries2.add(message)}function clearLaneDiagnostics(diagnostics,laneLabel){diagnostics.delete(laneLabel)}function flattenLaneDiagnostics(diagnostics){let flat=[];for(let entries2 of diagnostics.values())for(let entry of entries2){if(flat.length>=MAX_LANE_DIAGNOSTICS_PER_CHANNEL)return flat;flat.push(entry)}return flat}var MAX_DIAGNOSTIC_CAUSE_CHARS=160;function safeDiagnosticCause(error93){let redacted=sanitizeFailureEvidenceDisplay(formatError3(error93));if(redacted.length===0)return"(no detail)";return redacted.length>MAX_DIAGNOSTIC_CAUSE_CHARS?`${redacted.slice(0,MAX_DIAGNOSTIC_CAUSE_CHARS)}…`:redacted}function resolveCollectExpectedWorkflowIdentity(record3,parentState){if(record3.mode!=="swarm-pr-review:base"&&record3.mode!=="swarm-pr-review:micro"&&record3.mode!=="swarm-pr-review:council")return;let workflowInstanceId=decodePrReviewWorkflowBinding(record3.jobId),workflowRevision=record3.workflowGeneration;if(!workflowInstanceId||workflowRevision===void 0)return;if(!parentState||parentState.mode!=="PR_REVIEW")return;if(parentState.workflowInstanceId!==workflowInstanceId)return;let baseSha=parentState.prReviewBaseSha;if(!baseSha)return;return{workflowInstanceId,workflowRevision,baseSha}}async function resolveCollectLaneRevisionDigest(args2){if(!args2.prHeadSha)return{status:"resolved",digest:void 0};try{let key3=revisionSnapshotKey(args2.directory,args2.prHeadSha),snapshot2=args2.revisionSnapshots.get(key3);if(snapshot2===void 0){snapshot2=_internals298.resolvePrWorkflowRevisionDigestAsync(args2.directory,args2.prHeadSha);let pending=snapshot2;pending.catch(()=>{if(args2.revisionSnapshots.get(key3)===pending)args2.revisionSnapshots.delete(key3)}),args2.revisionSnapshots.set(key3,pending)}let shared=snapshot2;return{status:"resolved",digest:await withCollectionDeadline(()=>shared,args2.deadline,`revision digest for lane "${args2.laneLabel}"`,args2.hostTimeouts,args2.budgetMs)??void 0}}catch{return{status:"unavailable"}}}async function settleCollectedLaneFromReceipt(args2){let{directory,record:record3}=args2,laneLabel=record3.laneId??record3.correlationId;if(record3.mode!=="swarm-pr-review:base"&&record3.mode!=="swarm-pr-review:micro"&&record3.mode!=="swarm-pr-review:council")return!1;let digestResolution=await resolveCollectLaneRevisionDigest({directory,prHeadSha:record3.workspace?.prHeadSha,laneLabel,deadline:args2.deadline,hostTimeouts:args2.hostTimeouts,revisionSnapshots:args2.revisionSnapshots,budgetMs:args2.revisionDigestBudgetMs});if(digestResolution.status==="unavailable")return!1;let collectExpectedIdentity;if(record3.parentSessionId?.trim())try{let parentState=await readPrWorkflowGateStateFromDisk(directory,record3.parentSessionId.trim());collectExpectedIdentity=resolveCollectExpectedWorkflowIdentity(record3,parentState)}catch{collectExpectedIdentity=void 0}let receiptExpected={mode:record3.mode,workflowLane:record3.workflowLane??"",ownedWorkflowLanes:record3.ownedWorkflowLanes,prHeadSha:record3.workspace?.prHeadSha??"",gitHead:record3.workspace?.gitHead??"",revisionDigest:digestResolution.digest??"",reviewScope:record3.workspace?.scope??void 0,...collectExpectedIdentity??{}},receiptProspectiveResult={...record3.result??{chars:0,truncated:!1,digest:digestText2("")}},structuredCoverage=_internals298.validateExactStructuredReceiptCoverage({record:record3,result:receiptProspectiveResult,artifact:null,expected:receiptExpected});if(structuredCoverage.status!=="accepted")return!1;let receipt=structuredCoverage.receipt,receiptText=JSON.stringify(receipt,null,2),stored=storeLaneOutput(directory,{batchId:record3.batchId??record3.callID,laneId:record3.laneId??record3.correlationId,agent:record3.swarmPrefixedAgent,role:record3.normalizedAgent,sessionId:record3.subagentSessionId,parentSessionId:record3.parentSessionId,mode:record3.mode,workflowLane:record3.workflowLane,prHeadSha:record3.workspace?.prHeadSha??void 0,gitHead:record3.workspace?.gitHead??void 0,revisionDigest:digestResolution.digest??void 0,scope:record3.workspace?.scope??void 0,source:"collect_lane_results",text:receiptText});if(!stored.ref||stored.degraded)return addLaneDiagnostic(args2.settleFailureLogs,laneLabel,`receipt settle deferred for lane "${laneLabel}"; lane-output store degraded (${stored.error??"no artifact ref"}); lane left open for retry`),!1;let preview=buildLaneOutputPreview({text:receiptText,ref:stored.ref,degraded:stored.degraded,maxChars:MAX_LANE_OUTPUT_CHARS}),settledResult={text:preview.output,chars:stored.chars,truncated:preview.output_truncated,digest:stored.digest,outputRef:stored.ref,prReviewResultReceipt:receipt};if(!await appendDelegationTransition(directory,record3.correlationId,{status:"completed",result:settledResult,expectedCurrentStatuses:["pending","running"],terminalResult:buildTypedDelegationTerminal(record3,"completed",settledResult,_internals298.now())}))return addLaneDiagnostic(args2.settleFailureLogs,laneLabel,`receipt settle write did not land for lane "${laneLabel}"; lane left open`),!1;return!0}var LANE_REJECTION_ROW_UNIDENTIFIED="(unidentified)";function extractLaneRejectionRowId(failure){try{let parsed=JSON.parse(failure.actual),candidate2=[...Array.isArray(parsed.unexpectedIds)?parsed.unexpectedIds:[],...Array.isArray(parsed.invalidOrMissingIds)?parsed.invalidOrMissingIds:[]].find((id)=>typeof id==="string"&&id.trim().length>0);if(typeof candidate2==="string")return candidate2}catch{}let strayId=/"unexpectedIds":\s*\[\s*"([^"]+)"/.exec(failure.actual);if(strayId)return strayId[1];let missingId=/"invalidOrMissingIds":\s*\[\s*"([^"]+)"/.exec(failure.actual);if(missingId)return missingId[1];let discoveryRow=/\brow (\d+)\b/.exec(failure.actual);if(discoveryRow)return discoveryRow[1];return LANE_REJECTION_ROW_UNIDENTIFIED}function persistLaneRejectionDetail(directory,record3,fullDetail){return storeLaneOutput(directory,{batchId:record3.batchId??record3.callID,laneId:record3.laneId??record3.correlationId,agent:record3.swarmPrefixedAgent,role:record3.normalizedAgent,sessionId:record3.subagentSessionId,parentSessionId:record3.parentSessionId,mode:record3.mode,workflowLane:record3.workflowLane,prHeadSha:record3.workspace?.prHeadSha??void 0,gitHead:record3.workspace?.gitHead??void 0,scope:record3.workspace?.scope??void 0,source:"collect_lane_results",text:fullDetail}).ref}function composeLaneRejectionError(args2){let rowId2=args2.failure?extractLaneRejectionRowId(args2.failure):LANE_REJECTION_ROW_UNIDENTIFIED,predicate=args2.failure?args2.failure.predicate:LANE_REJECTION_ROW_UNIDENTIFIED,header=`${args2.errorCode}: row=${rowId2} predicate=${predicate}`,identity=`; batch=${args2.record.batchId??"(missing)"} lane=${args2.record.laneId??"(missing)"} workflow_lane=${args2.record.workflowLane??"(missing)"}`,renderedDetail=args2.failure?formatPrReviewLaneValidationFailure(args2.failure):args2.inlineDetail??"",tail2=args2.detailTail?`; ${args2.detailTail}`:"",artifactRef=persistLaneRejectionDetail(args2.directory,args2.record,`${header}${identity}
|
|
7746
7763
|
${renderedDetail}${args2.inlineDetail?`
|
|
7747
7764
|
${args2.inlineDetail}`:""}${tail2}`);return`${header}${identity}; detail in artifact ${artifactRef??"(unavailable)"}; ${renderedDetail}${tail2}`.slice(0,1024)}async function settleCollectedLane(args2){let{directory,record:record3,transcript,deadline,hostTimeouts,receiptAppendFailureLogs,revisionSnapshots,settleFailureLogs}=args2,laneLabel=record3.laneId??record3.correlationId,collectedRevisionDigest,prHeadSha=record3.workspace?.prHeadSha;if(prHeadSha)try{let key3=revisionSnapshotKey(directory,prHeadSha),snapshot2=revisionSnapshots.get(key3);if(snapshot2===void 0){snapshot2=_internals298.resolvePrWorkflowRevisionDigestAsync(directory,prHeadSha);let pending=snapshot2;pending.catch(()=>{if(revisionSnapshots.get(key3)===pending)revisionSnapshots.delete(key3)}),revisionSnapshots.set(key3,pending)}let shared=snapshot2;collectedRevisionDigest=await withCollectionDeadline(()=>shared,deadline,`revision digest for lane "${laneLabel}"`,hostTimeouts,args2.revisionDigestBudgetMs)??void 0}catch(error93){addLaneDiagnostic(settleFailureLogs,laneLabel,`revision snapshot unavailable for lane "${laneLabel}"; lane left pending: ${safeDiagnosticCause(error93)}`);return}clearLaneDiagnostics(settleFailureLogs,laneLabel);let output=prepareLaneOutput({directory,batchId:record3.batchId??record3.callID,laneId:record3.laneId??record3.correlationId,agent:record3.swarmPrefixedAgent,role:record3.normalizedAgent,sessionId:record3.subagentSessionId,parentSessionId:record3.parentSessionId,mode:record3.mode,workflowLane:record3.workflowLane,prHeadSha:record3.workspace?.prHeadSha??void 0,gitHead:record3.workspace?.gitHead??void 0,revisionDigest:collectedRevisionDigest,scope:record3.workspace?.scope??void 0,source:"collect_lane_results",text:transcript.text,messageCount:transcript.messageCount,transcriptIncomplete:transcript.transcriptIncomplete}),prospectiveResult={text:output.output,chars:output.output_chars,truncated:output.output_truncated,digest:output.output_digest,...output.output_ref?{outputRef:output.output_ref}:{},outputPreviewChars:output.output.length,...output.output_degraded!==void 0?{outputDegraded:output.output_degraded}:{},...output.output_artifact_error?{outputArtifactError:output.output_artifact_error}:{},...output.transcript_incomplete!==void 0?{transcriptIncomplete:output.transcript_incomplete}:{},messageCount:transcript.messageCount,...record3.result?.prReviewResultReceipt?{prReviewResultReceipt:record3.result.prReviewResultReceipt}:{}},terminalStatus="completed";if(record3.mode==="swarm-pr-review:base"||record3.mode==="swarm-pr-review:micro"||record3.mode==="swarm-pr-review:council"){let artifact=output.output_ref?readLaneOutput(directory,output.output_ref)?.artifact??null:null,collectExpectedIdentity;if(record3.parentSessionId?.trim())try{let parentState=await readPrWorkflowGateStateFromDisk(directory,record3.parentSessionId.trim());collectExpectedIdentity=resolveCollectExpectedWorkflowIdentity(record3,parentState)}catch{collectExpectedIdentity=void 0}let expectedValidation={mode:record3.mode,workflowLane:record3.workflowLane??"",ownedWorkflowLanes:record3.ownedWorkflowLanes,prHeadSha:record3.workspace?.prHeadSha??"",gitHead:record3.workspace?.gitHead??"",revisionDigest:collectedRevisionDigest??"",reviewScope:record3.workspace?.scope??void 0,...collectExpectedIdentity??{}},validation2=validatePrReviewDiscoveryLaneCompletion2({record:record3,result:prospectiveResult,artifact,expected:expectedValidation});if(!validation2.ok&&!prospectiveResult.prReviewResultReceipt){let freshRead=findByCorrelationIdDetailed(directory,record3.correlationId),freshReceipt=freshRead.status==="ok"?freshRead.value?.result?.prReviewResultReceipt??freshRead.value?.terminalResult?.result.prReviewResultReceipt:void 0;if(freshReceipt)prospectiveResult={...prospectiveResult,prReviewResultReceipt:freshReceipt},validation2=validatePrReviewDiscoveryLaneCompletion2({record:record3,result:prospectiveResult,artifact,expected:expectedValidation})}if(validation2.ok&&validation2.salvaged?.length){if(prospectiveResult.salvagedWorkflowLanes=[...validation2.salvaged],validation2.recoveries?.length)prospectiveResult.salvagedWorkflowLaneRecoveries=[...validation2.recoveries]}if(!validation2.ok){terminalStatus="error",prospectiveResult.workflowLaneFailureClass="contract";let family=record3.mode==="swarm-pr-review:base"?"base_explorer":"micro_lane";prospectiveResult.error=composeLaneRejectionError({directory,record:record3,errorCode:"PR_REVIEW_DISCOVERY_CONTRACT_INVALID",failure:validation2.failure,detailTail:`expected candidate row: ${CANDIDATE_HEADERS[family]}; expected clean row: ${CLEAN_TEMPLATES[family]}`})}}let isPrReviewVerdictLane=record3.mode==="swarm-pr-review:reviewer"||record3.mode==="swarm-pr-review:critic";if((isPrReviewVerdictLane||record3.mode==="swarm-pr-feedback:verification"||record3.mode==="swarm-pr-feedback:stage-b-reviewer"||record3.mode==="swarm-pr-feedback:stage-b-test"||record3.mode==="swarm-pr-feedback:closeout-reviewer"||record3.mode==="swarm-pr-feedback:closeout-critic")&&(isPrReviewVerdictLane||prospectiveResult.truncated===!0||prospectiveResult.transcriptIncomplete===!0)){let artifact=output.output_ref?readLaneOutput(directory,output.output_ref)?.artifact??null:null,transportValidationOperation=`transport recovery validation for lane "${record3.laneId??record3.correlationId}"`,transportValidationDeadlineDiagnosticPrefix=`${transportValidationOperation} exceeded the remaining collect_lane_results budget (`,validation2;try{validation2=await withCollectionDeadline(()=>_internals298.validatePrWorkflowTransportRecovery({directory,record:record3,result:prospectiveResult,artifact,revisionDigest:collectedRevisionDigest??""}),deadline,transportValidationOperation,hostTimeouts)}catch(error93){if(formatError3(error93).startsWith(transportValidationDeadlineDiagnosticPrefix))return;if(terminalStatus="error",prospectiveResult.error=composeLaneRejectionError({directory,record:record3,errorCode:"PR_WORKFLOW_CONTRACT_INVALID",inlineDetail:formatError3(error93)}),isPrReviewVerdictLane&&transcript.terminalError?.kind!=="aborted")prospectiveResult.workflowLaneFailureClass="verdict_contract";await settleDelegationTerminal(directory,record3,{status:terminalStatus,result:prospectiveResult},{},_internals298.now());return}if(validation2.receipt){let receiptPresentationOrder;try{receiptPresentationOrder=(record3.batchId?await readPrWorkflowGateState(directory,record3.parentSessionId):null)?.prReviewBatchCoherence?.[record3.batchId??""]?.presentationOrder}catch{receiptPresentationOrder=void 0}let resultWithReceipt=appendPrReviewCollectionReceipt(record3,prospectiveResult,validation2.receipt,receiptPresentationOrder);if(!resultWithReceipt){if(consumePrReviewReceiptAppendFailureLog(receiptAppendFailureLogs,record3.parentSessionId,record3.correlationId))log(`[dispatch-lanes] withheld PR-review terminal result without receipt: correlation=${record3.correlationId} batch=${record3.batchId??"(missing)"} lane=${record3.laneId??"(missing)"}`);return}prospectiveResult=resultWithReceipt}if(!validation2.ok){terminalStatus="error";let errorCode3=validation2.failure?.predicate==="reviewer.verdict_rows"||validation2.failure?.predicate==="critic.verdict_rows"?"PR_REVIEW_VERDICT_CONTRACT_INVALID":"PR_WORKFLOW_CONTRACT_INVALID";if(prospectiveResult.error=composeLaneRejectionError({directory,record:record3,errorCode:errorCode3,failure:validation2.failure,...validation2.failure?{}:{inlineDetail:validation2.reason}}),isPrReviewVerdictLane&&transcript.terminalError?.kind!=="aborted")prospectiveResult.workflowLaneFailureClass="verdict_contract"}else if(validation2.recoveries?.length){let workflowLane=record3.workflowLane?.trim();if(workflowLane)prospectiveResult.salvagedWorkflowLanes=[workflowLane];prospectiveResult.salvagedWorkflowLaneRecoveries=[...prospectiveResult.salvagedWorkflowLaneRecoveries??[],...validation2.recoveries]}}if((await settleDelegationTerminal(directory,record3,{status:terminalStatus,result:prospectiveResult},{transcript:transcript.text,startedAt:record3.createdAt,model:laneConfiguredModel(record3)},_internals298.now())).kind==="not_open")addLaneDiagnostic(settleFailureLogs,laneLabel,`terminal settle claim did not land for lane "${laneLabel}"; record still open — left for the next collection pass`)}function laneConfiguredModel(record3){let prefixed=record3.swarmPrefixedAgent,baseRole=stripKnownSwarmPrefix(prefixed),swarmID=baseRole!==prefixed?prefixed.slice(0,prefixed.length-baseRole.length-1):void 0;return getSwarmAgents(swarmID)?.[baseRole]?.model}function consumePrReviewReceiptAppendFailureLog(loggedFailures,parentSessionId,correlationId){let key3=`${parentSessionId}\x00${correlationId}`;if(loggedFailures.has(key3))return!1;return loggedFailures.add(key3),!0}class LanePromptLaunchRejectionError extends Error{constructor(message){super(message);this.name="LanePromptLaunchRejectionError"}}function scheduleAsyncLanePrompt(args2){queueMicrotask(()=>{startAsyncLanePrompt(args2).catch(async(error93)=>{let message=formatError3(error93);await appendAsyncLaneLaunchError(args2.directory,args2.session,args2.sessionId,message)})})}async function startAsyncLanePrompt(args2){if(args2.structuredAdapter&&(args2.mode==="swarm-pr-review:base"||args2.mode==="swarm-pr-review:micro"))try{await withTimeout2(args2.structuredAdapter.promptJsonSchema({sessionId:args2.sessionId,agent:args2.lane.agent,schema:exports_external.toJSONSchema(PrReviewLaneResultEnvelopeSchema),parts:[{type:"text",text:args2.lane.prompt}]}),args2.timeoutMs,`Lane "${args2.lane.id}" structured PR-review launch timed out after ${args2.timeoutMs}ms`);return}catch(error93){if(!(error93 instanceof PrReviewStructuredPromptUnsupportedError)){await appendAsyncLaneLaunchError(args2.directory,args2.session,args2.sessionId,formatError3(error93));return}}let promptController=new AbortController,baseRole=stripKnownSwarmPrefix(args2.lane.agent),swarmID=baseRole!==args2.lane.agent?args2.lane.agent.slice(0,args2.lane.agent.length-baseRole.length-1):void 0,swarmAgents=getSwarmAgents(swarmID),lanePrimaryModel=swarmAgents?.[baseRole]?.model,laneFallbackModels=swarmAgents?.[baseRole]?.fallback_models??[],registry4=_internals298.getGeneratedAgentNames();if(registry4.length>0&&!registry4.some((name)=>name.toLowerCase()===args2.lane.agent.toLowerCase())&&!swarmAgents?.[baseRole]&&!lanePrimaryModel&&laneFallbackModels.length===0){await appendAsyncLaneLaunchError(args2.directory,args2.session,args2.sessionId,`Lane "${args2.lane.id}" agent "${args2.lane.agent}" resolves no registered swarm agent and no model; refusing to launch a lane the host cannot run`);return}let promptResult;try{promptResult=(await dispatchWithModelFallback({dispatch:async(model,context)=>{let result=await withTimeout2(args2.session.promptAsync({path:{id:args2.sessionId},query:{directory:args2.directory},body:{agent:args2.lane.agent,...model?{model}:{},tools:buildReadOnlyTools(args2.mode),parts:[{type:"text",text:args2.lane.prompt}]},signal:promptController.signal}),context.remainingMs??args2.timeoutMs,`Lane "${args2.lane.id}" session.promptAsync launch timed out after ${context.remainingMs??args2.timeoutMs}ms`,promptController);if(result.error)throw new LanePromptLaunchRejectionError(`session.promptAsync launch failed: ${formatError3(result.error)}`);return result},classify:(error93)=>{if(!(error93 instanceof LanePromptLaunchRejectionError))return"permanent";return isTransientProviderError(error93.message)?"transient":"permanent"},maxTransientRetriesPerModel:0,deadlineAtMs:_internals298.now()+args2.timeoutMs,now:_internals298.now,scope:{sessionID:args2.sessionId,invocationID:`dispatch-lanes-async:${args2.lane.id}`,swarmID,role:baseRole},primaryModel:swarmAgents?.[baseRole]?.model,fallbackModels:swarmAgents?.[baseRole]?.fallback_models??[]})).result}catch(error93){await appendAsyncLaneLaunchError(args2.directory,args2.session,args2.sessionId,formatError3(error93));return}if(promptResult.error){await appendAsyncLaneLaunchError(args2.directory,args2.session,args2.sessionId,`session.promptAsync launch failed: ${formatError3(promptResult.error)}`);return}await appendDelegationTransition(args2.directory,args2.sessionId,{status:"running"})}async function appendAsyncLaneLaunchError(directory,session,sessionId,message){let recordRead=findByCorrelationIdDetailed(directory,sessionId);if(recordRead.status==="uncertain"){warnDelegationReadUncertainOnce2(`launch-error settle skipped for lane session ${sessionId}`,recordRead),cleanupAsyncLaunchSession(session,sessionId);return}let record3=recordRead.value,launchErrorResult={error:message,chars:message.length,truncated:!1,digest:digestText2(message),workflowLaneFailureClass:"resource"};if(record3)await settleDelegationTerminal(directory,record3,{status:"error",result:launchErrorResult},{},_internals298.now());else await appendDelegationTransition(directory,sessionId,{status:"error",result:launchErrorResult,terminalResult:buildTypedDelegationTerminal({correlationId:sessionId,jobId:null},"error",launchErrorResult,_internals298.now())});cleanupAsyncLaunchSession(session,sessionId)}async function probeLaneStatusTypesForPass(session,directory,deadline,hostTimeouts){if(typeof session.status!=="function")return null;let remainingMs2=Math.max(0,deadline-_internals298.now());if(remainingMs2===0)return null;let allowedMs=Math.min(MAX_STATUS_CALL_BUDGET_MS,remainingMs2);try{let status2=await withCollectionDeadline(()=>session.status({query:{directory}}),deadline,"session.status batched lane probe for collect pass",hostTimeouts,allowedMs);if(status2.error||!status2.data)return null;let types2=new Map;for(let[sessionId,entry]of Object.entries(status2.data))if(entry&&typeof entry.type==="string")types2.set(sessionId,entry.type);return types2}catch{return null}}var CANCELLATION_REFUSAL_NEXT_ACTION="collect_lane_results cannot cancel: issue cancel_lane_batch (confirm: true + reason) for an authorized cancellation";function collectCancellationRefusals(records,statusTypes,degradedReason){let refusals=[];for(let record3 of records){if(isTerminalDelegationStatus2(record3.status))continue;let laneId=record3.laneId??record3.correlationId;if(!statusTypes){refusals.push({lane_id:laneId,degraded_reason:degradedReason,next_action:CANCELLATION_REFUSAL_NEXT_ACTION});continue}let type=statusTypes.get(record3.subagentSessionId);refusals.push({lane_id:laneId,host_status:type??"unknown",next_action:type==="busy"||type==="retry"?`${CANCELLATION_REFUSAL_NEXT_ACTION}; the host reports this lane ${type} (live)`:CANCELLATION_REFUSAL_NEXT_ACTION})}return refusals}function laneReadinessFromProbeTypes(statusTypes,sessionId){if(!statusTypes)return"unknown";let type=statusTypes.get(sessionId);if(type===void 0)return"unknown";if(type==="idle")return"idle";if(type==="busy"||type==="retry")return"busy";return"unknown"}async function getLaneCollectionReadiness(session,directory,sessionId,deadline,hostTimeouts,statusBudgetMs){if(typeof session.status!=="function")return"unknown";try{let status2=await withCollectionDeadline(()=>session.status({query:{directory}}),deadline,`session.status for lane session "${sessionId}"`,hostTimeouts,statusBudgetMs);if(status2.error||!status2.data)return"unknown";let current=status2.data[sessionId];if(current===void 0)return"unknown";if(current.type==="idle")return"idle";if(current.type==="busy"||current.type==="retry")return"busy";return"unknown"}catch{return"unknown"}}var DELEGATION_READ_UNCERTAIN_LOG_LIMIT2=64,delegationReadUncertainLogged2=new Set;function warnDelegationReadUncertainOnce2(label,uncertain2){let key3=`${label}\x00${uncertain2.reason}`;if(delegationReadUncertainLogged2.has(key3))return;if(delegationReadUncertainLogged2.size>=DELEGATION_READ_UNCERTAIN_LOG_LIMIT2){let oldest=delegationReadUncertainLogged2.values().next().value;if(oldest!==void 0)delegationReadUncertainLogged2.delete(oldest)}delegationReadUncertainLogged2.add(key3),warn(`${label}: delegation store unreadable after ${uncertain2.attempts} attempts (${uncertain2.reason}); skipping this pass`)}var SWEEP_LIVENESS_SETTLE_BUDGET_MS=250;async function sweepStaleAsyncLaneRecords(session,directory,records,staleTimeoutMs,deadline,hostTimeouts){if(staleTimeoutMs<=0)return;let now2=_internals298.now(),settleReserveMs=Math.min(SWEEP_LIVENESS_SETTLE_BUDGET_MS,Math.max(0,deadline-now2));for(let record3 of records){let currentBeforeReadiness=getCurrentStaleSweepCandidate(directory,record3,staleTimeoutMs,now2);if(!currentBeforeReadiness)continue;let statusBudgetMs=reserveCollectionLaneCallBudgets(deadline,records.length,typeof session.status==="function").statusBudgetMs;if(!(typeof session.status!=="function"||settleReserveMs>0&&deadline-_internals298.now()>0))continue;let readiness=await getLaneCollectionReadiness(session,directory,currentBeforeReadiness.subagentSessionId,deadline,hostTimeouts,Math.max(statusBudgetMs,settleReserveMs));if(readiness==="busy")continue;if(readiness==="unknown"){let currentUnknown=getCurrentStaleSweepCandidate(directory,record3,staleTimeoutMs,now2);if(!currentUnknown)continue;if(currentUnknown.result)continue;let reason=`lane ${currentUnknown.laneId??currentUnknown.correlationId} presumed dead: host session unobservable`;await settleDelegationTerminal(directory,currentUnknown,{status:"error",result:{error:reason,chars:reason.length,truncated:!1,digest:digestText2(reason),workflowLaneFailureClass:"liveness"}},{},_internals298.now());continue}let currentAfterReadiness=getCurrentStaleSweepCandidate(directory,record3,staleTimeoutMs,now2);if(!currentAfterReadiness)continue;let idleStaleReason=`lane ${currentAfterReadiness.laneId??currentAfterReadiness.correlationId} presumed stale: idle host session past the stale horizon`,idleLivenessResult=currentAfterReadiness.result?{...currentAfterReadiness.result,workflowLaneFailureClass:"liveness"}:{error:idleStaleReason,chars:idleStaleReason.length,truncated:!1,digest:digestText2(idleStaleReason),workflowLaneFailureClass:"liveness"},idleTerminal=buildTypedDelegationTerminal(currentAfterReadiness,"stale",idleLivenessResult,_internals298.now());await appendDelegationTransition(directory,currentAfterReadiness.correlationId,{status:"stale",result:idleLivenessResult,expectedCurrentStatuses:["pending","running","ingestion_error"],terminalResult:idleTerminal})}}function getCurrentStaleSweepCandidate(directory,record3,staleTimeoutMs,now2){let currentRead=findByCorrelationIdDetailed(directory,record3.correlationId);if(currentRead.status==="uncertain")return warnDelegationReadUncertainOnce2(`stale sweep skipped lane ${record3.laneId??record3.correlationId}`,currentRead),null;let current=currentRead.value;if(!current)return null;if(current.subagentSessionId!==record3.subagentSessionId)return null;if((current.generation??1)!==(record3.generation??1))return null;if(current.status!=="pending"&¤t.status!=="running"&¤t.status!=="ingestion_error")return null;if(now2-current.updatedAt<=staleTimeoutMs)return null;return current}var LANE_TERMINAL_REASON_MESSAGE_BUDGET=100;function laneTerminalErrorReason(error93){let message=error93.message.slice(0,LANE_TERMINAL_REASON_MESSAGE_BUDGET),status2=error93.statusCode===void 0?"":` status=${error93.statusCode}`,retryable=error93.hostRetryable===void 0?"":` host_retryable=${error93.hostRetryable}`;return`${error93.category}: ${message} [kind=${error93.kind} name=${error93.name}${status2}${retryable}]`}function terminalErrorClassFromLaneTerminalError(error93){let category=error93.category.trim().length>0?error93.category.trim().slice(0,128):"unknown";return{kind:error93.kind,category,...error93.statusCode===void 0?{}:{statusCode:error93.statusCode},...error93.hostRetryable===void 0?{}:{hostRetryable:error93.hostRetryable}}}function readErrorDataRecord(error93){if(typeof error93!=="object"||error93===null)return{};let data=error93.data;return typeof data==="object"&&data!==null?data:{}}function classifyLaneTerminalError(error93){let name=typeof error93?.name==="string"?error93.name.slice(0,64):"UnknownError",data=readErrorDataRecord(error93),topLevelMessage=error93?.message,rawMessage=typeof data.message==="string"&&data.message.trim().length>0?data.message:typeof topLevelMessage==="string"&&topLevelMessage.trim().length>0?topLevelMessage:typeof error93==="string"&&error93.trim().length>0?error93:name,statusCode=typeof data.statusCode==="number"&&Number.isFinite(data.statusCode)?data.statusCode:void 0,hostRetryable=typeof data.isRetryable==="boolean"?data.isRetryable:void 0,kind=name==="MessageAbortedError"?"aborted":name==="MessageOutputLengthError"?"output_length":name==="APIError"||name==="ProviderAuthError"?"provider":"unknown",classified=classifyProviderFailure(statusCode===void 0?rawMessage:{message:rawMessage,status:statusCode}),category=kind==="aborted"?"provider.cancelled":classified.category;return{kind,name,message:classified.evidence.display,statusCode:statusCode??classified.evidence.statusCode,hostRetryable,category}}function extractAssistantTranscript(messages){let assistantTexts=[],lastAssistantInfo;for(let message of messages){if(message.info?.role!=="assistant")continue;lastAssistantInfo=message.info;let text=extractText3(message.parts);if(text.trim().length>0)assistantTexts.push(text)}let completedAt=lastAssistantInfo?.time?.completed,finish=typeof lastAssistantInfo?.finish==="string"?lastAssistantInfo.finish.toLowerCase():"",terminalAssistantFinish=finish==="stop"||finish==="length"||finish==="content-filter",terminalAssistantProof=typeof completedAt==="number"&&Number.isFinite(completedAt)&&terminalAssistantFinish&&lastAssistantInfo?.error===void 0,windowEndsAtTerminalAssistant=messages[messages.length-1]?.info?.role==="assistant"&&terminalAssistantProof;return{text:assistantTexts.join(`
|
|
7748
7765
|
|