omp-fabric 0.85.0
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/LICENSE +21 -0
- package/README.md +170 -0
- package/THIRD_PARTY_NOTICES.md +33 -0
- package/dist/activity/store.d.ts +32 -0
- package/dist/activity/store.d.ts.map +1 -0
- package/dist/activity/types.d.ts +104 -0
- package/dist/activity/types.d.ts.map +1 -0
- package/dist/actors/binding-store.d.ts +17 -0
- package/dist/actors/binding-store.d.ts.map +1 -0
- package/dist/actors/context.d.ts +13 -0
- package/dist/actors/context.d.ts.map +1 -0
- package/dist/actors/delivery-policy.d.ts +8 -0
- package/dist/actors/delivery-policy.d.ts.map +1 -0
- package/dist/actors/directory.d.ts +47 -0
- package/dist/actors/directory.d.ts.map +1 -0
- package/dist/actors/global-registry.d.ts +47 -0
- package/dist/actors/global-registry.d.ts.map +1 -0
- package/dist/actors/host-event-observer.d.ts +5 -0
- package/dist/actors/host-event-observer.d.ts.map +1 -0
- package/dist/actors/host-event-payload.d.ts +14 -0
- package/dist/actors/host-event-payload.d.ts.map +1 -0
- package/dist/actors/manager.d.ts +175 -0
- package/dist/actors/manager.d.ts.map +1 -0
- package/dist/actors/predicate.d.ts +7 -0
- package/dist/actors/predicate.d.ts.map +1 -0
- package/dist/actors/types.d.ts +211 -0
- package/dist/actors/types.d.ts.map +1 -0
- package/dist/agents/bash-worktree-add.d.ts +24 -0
- package/dist/agents/bash-worktree-add.d.ts.map +1 -0
- package/dist/agents/budget-ledger.d.ts +88 -0
- package/dist/agents/budget-ledger.d.ts.map +1 -0
- package/dist/agents/claude-cli.d.ts +32 -0
- package/dist/agents/claude-cli.d.ts.map +1 -0
- package/dist/agents/claude-cli.js +17 -0
- package/dist/agents/claude-cli.js.map +7 -0
- package/dist/agents/clone-first-worktree.d.ts +17 -0
- package/dist/agents/clone-first-worktree.d.ts.map +1 -0
- package/dist/agents/compact-control.d.ts +32 -0
- package/dist/agents/compact-control.d.ts.map +1 -0
- package/dist/agents/compact-control.js +127 -0
- package/dist/agents/compact-control.js.map +7 -0
- package/dist/agents/constants.d.ts +5 -0
- package/dist/agents/constants.d.ts.map +1 -0
- package/dist/agents/cow-clone.d.ts +8 -0
- package/dist/agents/cow-clone.d.ts.map +1 -0
- package/dist/agents/handoff.d.ts +19 -0
- package/dist/agents/handoff.d.ts.map +1 -0
- package/dist/agents/manager.d.ts +68 -0
- package/dist/agents/manager.d.ts.map +1 -0
- package/dist/agents/omp-binary.d.ts +7 -0
- package/dist/agents/omp-binary.d.ts.map +1 -0
- package/dist/agents/rm.d.ts +15 -0
- package/dist/agents/rm.d.ts.map +1 -0
- package/dist/agents/semaphore.d.ts +7 -0
- package/dist/agents/semaphore.d.ts.map +1 -0
- package/dist/agents/session-export.d.ts +9 -0
- package/dist/agents/session-export.d.ts.map +1 -0
- package/dist/agents/thinking-transfer.d.ts +39 -0
- package/dist/agents/thinking-transfer.d.ts.map +1 -0
- package/dist/agents/transports/herdr-transport.d.ts +10 -0
- package/dist/agents/transports/herdr-transport.d.ts.map +1 -0
- package/dist/agents/transports/localterm-transport.d.ts +7 -0
- package/dist/agents/transports/localterm-transport.d.ts.map +1 -0
- package/dist/agents/transports/process-transport.d.ts +7 -0
- package/dist/agents/transports/process-transport.d.ts.map +1 -0
- package/dist/agents/transports/process-utils.d.ts +29 -0
- package/dist/agents/transports/process-utils.d.ts.map +1 -0
- package/dist/agents/transports/screen-transport.d.ts +7 -0
- package/dist/agents/transports/screen-transport.d.ts.map +1 -0
- package/dist/agents/transports/tmux-transport.d.ts +7 -0
- package/dist/agents/transports/tmux-transport.d.ts.map +1 -0
- package/dist/agents/types.d.ts +251 -0
- package/dist/agents/types.d.ts.map +1 -0
- package/dist/agents/veda-cli.d.ts +22 -0
- package/dist/agents/veda-cli.d.ts.map +1 -0
- package/dist/agents/veda-cli.js +13 -0
- package/dist/agents/veda-cli.js.map +7 -0
- package/dist/agents/worktree-manager.d.ts +14 -0
- package/dist/agents/worktree-manager.d.ts.map +1 -0
- package/dist/agents/worktree-paths.d.ts +5 -0
- package/dist/agents/worktree-paths.d.ts.map +1 -0
- package/dist/async-settlement.d.ts +4 -0
- package/dist/async-settlement.d.ts.map +1 -0
- package/dist/audit/details.d.ts +82 -0
- package/dist/audit/details.d.ts.map +1 -0
- package/dist/audit/index.d.ts +4 -0
- package/dist/audit/index.d.ts.map +1 -0
- package/dist/audit/projection.d.ts +20 -0
- package/dist/audit/projection.d.ts.map +1 -0
- package/dist/audit/trace.d.ts +95 -0
- package/dist/audit/trace.d.ts.map +1 -0
- package/dist/capture/catalog.d.ts +29 -0
- package/dist/capture/catalog.d.ts.map +1 -0
- package/dist/capture/interceptor.d.ts +21 -0
- package/dist/capture/interceptor.d.ts.map +1 -0
- package/dist/capture/wrapper.d.ts +15 -0
- package/dist/capture/wrapper.d.ts.map +1 -0
- package/dist/chunks/chunk-2GQC324T.js +5001 -0
- package/dist/chunks/chunk-2GQC324T.js.map +7 -0
- package/dist/chunks/chunk-2KEWFW56.js +1229 -0
- package/dist/chunks/chunk-2KEWFW56.js.map +7 -0
- package/dist/chunks/chunk-3J7BKUNG.js +354 -0
- package/dist/chunks/chunk-3J7BKUNG.js.map +7 -0
- package/dist/chunks/chunk-4A4MVZQW.js +253 -0
- package/dist/chunks/chunk-4A4MVZQW.js.map +7 -0
- package/dist/chunks/chunk-4HQDSTHN.js +221 -0
- package/dist/chunks/chunk-4HQDSTHN.js.map +7 -0
- package/dist/chunks/chunk-4LEDA76O.js +688 -0
- package/dist/chunks/chunk-4LEDA76O.js.map +7 -0
- package/dist/chunks/chunk-5GTPD4BA.js +1318 -0
- package/dist/chunks/chunk-5GTPD4BA.js.map +7 -0
- package/dist/chunks/chunk-5IWFSDU5.js +87 -0
- package/dist/chunks/chunk-5IWFSDU5.js.map +7 -0
- package/dist/chunks/chunk-6N4XGAZY.js +21 -0
- package/dist/chunks/chunk-6N4XGAZY.js.map +7 -0
- package/dist/chunks/chunk-6QBPSZJ5.js +647 -0
- package/dist/chunks/chunk-6QBPSZJ5.js.map +7 -0
- package/dist/chunks/chunk-6X6WUU2K.js +73 -0
- package/dist/chunks/chunk-6X6WUU2K.js.map +7 -0
- package/dist/chunks/chunk-7363CD5A.js +38 -0
- package/dist/chunks/chunk-7363CD5A.js.map +7 -0
- package/dist/chunks/chunk-77FQHHZD.js +231 -0
- package/dist/chunks/chunk-77FQHHZD.js.map +7 -0
- package/dist/chunks/chunk-7BIA5BJN.js +112 -0
- package/dist/chunks/chunk-7BIA5BJN.js.map +7 -0
- package/dist/chunks/chunk-7BOAOKWH.js +64 -0
- package/dist/chunks/chunk-7BOAOKWH.js.map +7 -0
- package/dist/chunks/chunk-7TB7NXSL.js +58 -0
- package/dist/chunks/chunk-7TB7NXSL.js.map +7 -0
- package/dist/chunks/chunk-7VIQNUPS.js +17 -0
- package/dist/chunks/chunk-7VIQNUPS.js.map +7 -0
- package/dist/chunks/chunk-CT2AJ2UI.js +225 -0
- package/dist/chunks/chunk-CT2AJ2UI.js.map +7 -0
- package/dist/chunks/chunk-DLXPTBPL.js +151 -0
- package/dist/chunks/chunk-DLXPTBPL.js.map +7 -0
- package/dist/chunks/chunk-ED3BRM6P.js +17 -0
- package/dist/chunks/chunk-ED3BRM6P.js.map +7 -0
- package/dist/chunks/chunk-G2IBGGBM.js +42 -0
- package/dist/chunks/chunk-G2IBGGBM.js.map +7 -0
- package/dist/chunks/chunk-GKOFZ76R.js +1596 -0
- package/dist/chunks/chunk-GKOFZ76R.js.map +7 -0
- package/dist/chunks/chunk-HDJBUXDX.js +1102 -0
- package/dist/chunks/chunk-HDJBUXDX.js.map +7 -0
- package/dist/chunks/chunk-IGVDD2HT.js +10 -0
- package/dist/chunks/chunk-IGVDD2HT.js.map +7 -0
- package/dist/chunks/chunk-JHKOG5GS.js +187 -0
- package/dist/chunks/chunk-JHKOG5GS.js.map +7 -0
- package/dist/chunks/chunk-JP4LIZFT.js +1334 -0
- package/dist/chunks/chunk-JP4LIZFT.js.map +7 -0
- package/dist/chunks/chunk-JSBTB3P6.js +127 -0
- package/dist/chunks/chunk-JSBTB3P6.js.map +7 -0
- package/dist/chunks/chunk-KAD7UWT2.js +99 -0
- package/dist/chunks/chunk-KAD7UWT2.js.map +7 -0
- package/dist/chunks/chunk-KIH3KLZU.js +95 -0
- package/dist/chunks/chunk-KIH3KLZU.js.map +7 -0
- package/dist/chunks/chunk-KIREBD2V.js +2208 -0
- package/dist/chunks/chunk-KIREBD2V.js.map +7 -0
- package/dist/chunks/chunk-LMAVZN7J.js +8 -0
- package/dist/chunks/chunk-LMAVZN7J.js.map +7 -0
- package/dist/chunks/chunk-NCPJZXLM.js +57 -0
- package/dist/chunks/chunk-NCPJZXLM.js.map +7 -0
- package/dist/chunks/chunk-OJZNMROB.js +195 -0
- package/dist/chunks/chunk-OJZNMROB.js.map +7 -0
- package/dist/chunks/chunk-OPTP4PSE.js +469 -0
- package/dist/chunks/chunk-OPTP4PSE.js.map +7 -0
- package/dist/chunks/chunk-QPXSCMTG.js +24 -0
- package/dist/chunks/chunk-QPXSCMTG.js.map +7 -0
- package/dist/chunks/chunk-ROKMBLGN.js +1265 -0
- package/dist/chunks/chunk-ROKMBLGN.js.map +7 -0
- package/dist/chunks/chunk-SXMWV447.js +2445 -0
- package/dist/chunks/chunk-SXMWV447.js.map +7 -0
- package/dist/chunks/chunk-T5ZA5YRU.js +786 -0
- package/dist/chunks/chunk-T5ZA5YRU.js.map +7 -0
- package/dist/chunks/chunk-T6OAX4FO.js +1835 -0
- package/dist/chunks/chunk-T6OAX4FO.js.map +7 -0
- package/dist/chunks/chunk-U5FYOMG5.js +119 -0
- package/dist/chunks/chunk-U5FYOMG5.js.map +7 -0
- package/dist/chunks/chunk-UOSJZXJV.js +142 -0
- package/dist/chunks/chunk-UOSJZXJV.js.map +7 -0
- package/dist/chunks/chunk-UPCARIJP.js +6627 -0
- package/dist/chunks/chunk-UPCARIJP.js.map +7 -0
- package/dist/chunks/chunk-VPPIJRNZ.js +50 -0
- package/dist/chunks/chunk-VPPIJRNZ.js.map +7 -0
- package/dist/chunks/chunk-XU5Z4JCQ.js +297 -0
- package/dist/chunks/chunk-XU5Z4JCQ.js.map +7 -0
- package/dist/chunks/chunk-YWEXP724.js +427 -0
- package/dist/chunks/chunk-YWEXP724.js.map +7 -0
- package/dist/chunks/chunk-YZZIKJX6.js +60 -0
- package/dist/chunks/chunk-YZZIKJX6.js.map +7 -0
- package/dist/chunks/chunk-ZNAJDPT7.js +2203 -0
- package/dist/chunks/chunk-ZNAJDPT7.js.map +7 -0
- package/dist/chunks/chunk-ZTM45GH5.js +163 -0
- package/dist/chunks/chunk-ZTM45GH5.js.map +7 -0
- package/dist/commands/fabric.d.ts +17 -0
- package/dist/commands/fabric.d.ts.map +1 -0
- package/dist/compaction/bounds.d.ts +23 -0
- package/dist/compaction/bounds.d.ts.map +1 -0
- package/dist/compaction/branch-details.d.ts +83 -0
- package/dist/compaction/branch-details.d.ts.map +1 -0
- package/dist/compaction/branch-summary.d.ts +9 -0
- package/dist/compaction/branch-summary.d.ts.map +1 -0
- package/dist/compaction/enrichers.d.ts +10 -0
- package/dist/compaction/enrichers.d.ts.map +1 -0
- package/dist/compaction/hook.d.ts +98 -0
- package/dist/compaction/hook.d.ts.map +1 -0
- package/dist/compaction/hook.js +19 -0
- package/dist/compaction/hook.js.map +7 -0
- package/dist/compaction/instructions.d.ts +38 -0
- package/dist/compaction/instructions.d.ts.map +1 -0
- package/dist/compaction/normalize.d.ts +83 -0
- package/dist/compaction/normalize.d.ts.map +1 -0
- package/dist/compaction/projections.d.ts +31 -0
- package/dist/compaction/projections.d.ts.map +1 -0
- package/dist/compaction/qa.d.ts +27 -0
- package/dist/compaction/qa.d.ts.map +1 -0
- package/dist/compaction/render.d.ts +10 -0
- package/dist/compaction/render.d.ts.map +1 -0
- package/dist/compaction/threshold.d.ts +5 -0
- package/dist/compaction/threshold.d.ts.map +1 -0
- package/dist/compaction/trace-events.d.ts +23 -0
- package/dist/compaction/trace-events.d.ts.map +1 -0
- package/dist/components/catalog.d.ts +25 -0
- package/dist/components/catalog.d.ts.map +1 -0
- package/dist/components/effect-scope.d.ts +31 -0
- package/dist/components/effect-scope.d.ts.map +1 -0
- package/dist/components/loader.d.ts +27 -0
- package/dist/components/loader.d.ts.map +1 -0
- package/dist/components/model-guidance.d.ts +48 -0
- package/dist/components/model-guidance.d.ts.map +1 -0
- package/dist/components/provider-component.d.ts +31 -0
- package/dist/components/provider-component.d.ts.map +1 -0
- package/dist/components/supervisor.d.ts +29 -0
- package/dist/components/supervisor.d.ts.map +1 -0
- package/dist/components/types.d.ts +140 -0
- package/dist/components/types.d.ts.map +1 -0
- package/dist/config-migrations.d.ts +11 -0
- package/dist/config-migrations.d.ts.map +1 -0
- package/dist/config.d.ts +269 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/core/action-registry.d.ts +159 -0
- package/dist/core/action-registry.d.ts.map +1 -0
- package/dist/core/action-registry.js +17 -0
- package/dist/core/action-registry.js.map +7 -0
- package/dist/core/action-repair.d.ts +20 -0
- package/dist/core/action-repair.d.ts.map +1 -0
- package/dist/core/agent-dir.d.ts +2 -0
- package/dist/core/agent-dir.d.ts.map +1 -0
- package/dist/core/approval-controller.d.ts +30 -0
- package/dist/core/approval-controller.d.ts.map +1 -0
- package/dist/core/atomic-write.d.ts +15 -0
- package/dist/core/atomic-write.d.ts.map +1 -0
- package/dist/core/auto-approval-classifier.d.ts +13 -0
- package/dist/core/auto-approval-classifier.d.ts.map +1 -0
- package/dist/core/call-preview.d.ts +8 -0
- package/dist/core/call-preview.d.ts.map +1 -0
- package/dist/core/child-tool-allowlist.d.ts +3 -0
- package/dist/core/child-tool-allowlist.d.ts.map +1 -0
- package/dist/core/compact-controller.d.ts +42 -0
- package/dist/core/compact-controller.d.ts.map +1 -0
- package/dist/core/core-override-guidance.d.ts +7 -0
- package/dist/core/core-override-guidance.d.ts.map +1 -0
- package/dist/core/direct-tool-approval.d.ts +19 -0
- package/dist/core/direct-tool-approval.d.ts.map +1 -0
- package/dist/core/effect-conflict.d.ts +3 -0
- package/dist/core/effect-conflict.d.ts.map +1 -0
- package/dist/core/file-lock.d.ts +12 -0
- package/dist/core/file-lock.d.ts.map +1 -0
- package/dist/core/model-resolution.d.ts +62 -0
- package/dist/core/model-resolution.d.ts.map +1 -0
- package/dist/core/model-usage.d.ts +8 -0
- package/dist/core/model-usage.d.ts.map +1 -0
- package/dist/core/omp-bash-error.d.ts +11 -0
- package/dist/core/omp-bash-error.d.ts.map +1 -0
- package/dist/core/omp-tools.d.ts +9 -0
- package/dist/core/omp-tools.d.ts.map +1 -0
- package/dist/core/provider-bindings.d.ts +47 -0
- package/dist/core/provider-bindings.d.ts.map +1 -0
- package/dist/core/proxy-contract.d.ts +18 -0
- package/dist/core/proxy-contract.d.ts.map +1 -0
- package/dist/core/session-context.d.ts +6 -0
- package/dist/core/session-context.d.ts.map +1 -0
- package/dist/core/skill-block.d.ts +10 -0
- package/dist/core/skill-block.d.ts.map +1 -0
- package/dist/core/skill-dir.d.ts +4 -0
- package/dist/core/skill-dir.d.ts.map +1 -0
- package/dist/core/skill-prompt.d.ts +3 -0
- package/dist/core/skill-prompt.d.ts.map +1 -0
- package/dist/core/skill-references.d.ts +7 -0
- package/dist/core/skill-references.d.ts.map +1 -0
- package/dist/core/stable-hash.d.ts +3 -0
- package/dist/core/stable-hash.d.ts.map +1 -0
- package/dist/core/system-guidance.d.ts +12 -0
- package/dist/core/system-guidance.d.ts.map +1 -0
- package/dist/core/token-math.d.ts +16 -0
- package/dist/core/token-math.d.ts.map +1 -0
- package/dist/core/tool-ownership.d.ts +52 -0
- package/dist/core/tool-ownership.d.ts.map +1 -0
- package/dist/core/tool-result-proxy.d.ts +18 -0
- package/dist/core/tool-result-proxy.d.ts.map +1 -0
- package/dist/entropy/active.d.ts +7 -0
- package/dist/entropy/active.d.ts.map +1 -0
- package/dist/entropy/compiled-store.d.ts +16 -0
- package/dist/entropy/compiled-store.d.ts.map +1 -0
- package/dist/entropy/compiled-surface.d.ts +51 -0
- package/dist/entropy/compiled-surface.d.ts.map +1 -0
- package/dist/entropy/compiler.d.ts +28 -0
- package/dist/entropy/compiler.d.ts.map +1 -0
- package/dist/entropy/corpus.d.ts +22 -0
- package/dist/entropy/corpus.d.ts.map +1 -0
- package/dist/entropy/fingerprint.d.ts +9 -0
- package/dist/entropy/fingerprint.d.ts.map +1 -0
- package/dist/entropy/index.d.ts +15 -0
- package/dist/entropy/index.d.ts.map +1 -0
- package/dist/entropy/index.js +172 -0
- package/dist/entropy/index.js.map +7 -0
- package/dist/entropy/meter.d.ts +10 -0
- package/dist/entropy/meter.d.ts.map +1 -0
- package/dist/entropy/passes.d.ts +13 -0
- package/dist/entropy/passes.d.ts.map +1 -0
- package/dist/entropy/pool-store.d.ts +15 -0
- package/dist/entropy/pool-store.d.ts.map +1 -0
- package/dist/entropy/pool.d.ts +41 -0
- package/dist/entropy/pool.d.ts.map +1 -0
- package/dist/entropy/presentation.d.ts +13 -0
- package/dist/entropy/presentation.d.ts.map +1 -0
- package/dist/entropy/sessions.d.ts +47 -0
- package/dist/entropy/sessions.d.ts.map +1 -0
- package/dist/entropy/surface.d.ts +30 -0
- package/dist/entropy/surface.d.ts.map +1 -0
- package/dist/entropy/trial.d.ts +35 -0
- package/dist/entropy/trial.d.ts.map +1 -0
- package/dist/entropy/types.d.ts +158 -0
- package/dist/entropy/types.d.ts.map +1 -0
- package/dist/execution-service.d.ts +63 -0
- package/dist/execution-service.d.ts.map +1 -0
- package/dist/fabric-exec-arguments.d.ts +5 -0
- package/dist/fabric-exec-arguments.d.ts.map +1 -0
- package/dist/fabric-exec-tool.d.ts +8 -0
- package/dist/fabric-exec-tool.d.ts.map +1 -0
- package/dist/fabric-runtime-state.d.ts +90 -0
- package/dist/fabric-runtime-state.d.ts.map +1 -0
- package/dist/fabric-runtime-state.js +13060 -0
- package/dist/fabric-runtime-state.js.map +7 -0
- package/dist/fabric-state.d.ts +89 -0
- package/dist/fabric-state.d.ts.map +1 -0
- package/dist/failure-progress.d.ts +3 -0
- package/dist/failure-progress.d.ts.map +1 -0
- package/dist/host-compatibility.d.ts +5 -0
- package/dist/host-compatibility.d.ts.map +1 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +5719 -0
- package/dist/index.js.map +7 -0
- package/dist/lifecycle/broker.d.ts +30 -0
- package/dist/lifecycle/broker.d.ts.map +1 -0
- package/dist/lifecycle/delivery-scheduler.d.ts +30 -0
- package/dist/lifecycle/delivery-scheduler.d.ts.map +1 -0
- package/dist/lifecycle/types.d.ts +91 -0
- package/dist/lifecycle/types.d.ts.map +1 -0
- package/dist/log-tail.d.ts +11 -0
- package/dist/log-tail.d.ts.map +1 -0
- package/dist/main-agent.d.ts +70 -0
- package/dist/main-agent.d.ts.map +1 -0
- package/dist/memory/context.d.ts +112 -0
- package/dist/memory/context.d.ts.map +1 -0
- package/dist/memory/digest.d.ts +48 -0
- package/dist/memory/digest.d.ts.map +1 -0
- package/dist/memory/digest.js +7 -0
- package/dist/memory/digest.js.map +7 -0
- package/dist/memory/discovery.d.ts +43 -0
- package/dist/memory/discovery.d.ts.map +1 -0
- package/dist/memory/discovery.js +23 -0
- package/dist/memory/discovery.js.map +7 -0
- package/dist/memory/index.d.ts +107 -0
- package/dist/memory/index.d.ts.map +1 -0
- package/dist/memory/lineage.d.ts +20 -0
- package/dist/memory/lineage.d.ts.map +1 -0
- package/dist/memory/normalize.d.ts +170 -0
- package/dist/memory/normalize.d.ts.map +1 -0
- package/dist/memory/normalize.js +22 -0
- package/dist/memory/normalize.js.map +7 -0
- package/dist/memory/regex.d.ts +19 -0
- package/dist/memory/regex.d.ts.map +1 -0
- package/dist/memory/search.d.ts +98 -0
- package/dist/memory/search.d.ts.map +1 -0
- package/dist/memory/search.js +22 -0
- package/dist/memory/search.js.map +7 -0
- package/dist/memory/tokenize.d.ts +24 -0
- package/dist/memory/tokenize.d.ts.map +1 -0
- package/dist/mesh/store.d.ts +78 -0
- package/dist/mesh/store.d.ts.map +1 -0
- package/dist/output-budget.d.ts +12 -0
- package/dist/output-budget.d.ts.map +1 -0
- package/dist/prewalk/arm.d.ts +8 -0
- package/dist/prewalk/arm.d.ts.map +1 -0
- package/dist/prewalk/controller.d.ts +60 -0
- package/dist/prewalk/controller.d.ts.map +1 -0
- package/dist/prewalk/fs-drift.d.ts +19 -0
- package/dist/prewalk/fs-drift.d.ts.map +1 -0
- package/dist/prewalk/handoff.d.ts +45 -0
- package/dist/prewalk/handoff.d.ts.map +1 -0
- package/dist/protocol.d.ts +273 -0
- package/dist/protocol.d.ts.map +1 -0
- package/dist/protocol.js +46 -0
- package/dist/protocol.js.map +7 -0
- package/dist/providers/agents-actions.d.ts +3 -0
- package/dist/providers/agents-actions.d.ts.map +1 -0
- package/dist/providers/agents-provider.d.ts +59 -0
- package/dist/providers/agents-provider.d.ts.map +1 -0
- package/dist/providers/arg-normalization.d.ts +15 -0
- package/dist/providers/arg-normalization.d.ts.map +1 -0
- package/dist/providers/captured-tools-provider.d.ts +23 -0
- package/dist/providers/captured-tools-provider.d.ts.map +1 -0
- package/dist/providers/compact-provider.d.ts +14 -0
- package/dist/providers/compact-provider.d.ts.map +1 -0
- package/dist/providers/components-provider.d.ts +12 -0
- package/dist/providers/components-provider.d.ts.map +1 -0
- package/dist/providers/mcp-descriptor-cache.d.ts +47 -0
- package/dist/providers/mcp-descriptor-cache.d.ts.map +1 -0
- package/dist/providers/mcp-provider.d.ts +27 -0
- package/dist/providers/mcp-provider.d.ts.map +1 -0
- package/dist/providers/memory-provider.d.ts +35 -0
- package/dist/providers/memory-provider.d.ts.map +1 -0
- package/dist/providers/memory-provider.js +16 -0
- package/dist/providers/memory-provider.js.map +7 -0
- package/dist/providers/mesh-provider.d.ts +17 -0
- package/dist/providers/mesh-provider.d.ts.map +1 -0
- package/dist/providers/omp-bash-cwd.d.ts +31 -0
- package/dist/providers/omp-bash-cwd.d.ts.map +1 -0
- package/dist/providers/omp-tools-provider.d.ts +15 -0
- package/dist/providers/omp-tools-provider.d.ts.map +1 -0
- package/dist/providers/schema-provider.d.ts +15 -0
- package/dist/providers/schema-provider.d.ts.map +1 -0
- package/dist/providers/state-provider.d.ts +16 -0
- package/dist/providers/state-provider.d.ts.map +1 -0
- package/dist/providers/write-diff-limits.d.ts +5 -0
- package/dist/providers/write-diff-limits.d.ts.map +1 -0
- package/dist/providers/write-preview.d.ts +3 -0
- package/dist/providers/write-preview.d.ts.map +1 -0
- package/dist/ref-names.d.ts +2 -0
- package/dist/ref-names.d.ts.map +1 -0
- package/dist/repairs/active.d.ts +7 -0
- package/dist/repairs/active.d.ts.map +1 -0
- package/dist/repairs/apply.d.ts +7 -0
- package/dist/repairs/apply.d.ts.map +1 -0
- package/dist/repairs/catalog-digest.d.ts +5 -0
- package/dist/repairs/catalog-digest.d.ts.map +1 -0
- package/dist/repairs/classify.d.ts +10 -0
- package/dist/repairs/classify.d.ts.map +1 -0
- package/dist/repairs/compiler.d.ts +33 -0
- package/dist/repairs/compiler.d.ts.map +1 -0
- package/dist/repairs/promote.d.ts +4 -0
- package/dist/repairs/promote.d.ts.map +1 -0
- package/dist/repairs/store.d.ts +10 -0
- package/dist/repairs/store.d.ts.map +1 -0
- package/dist/repairs/types.d.ts +49 -0
- package/dist/repairs/types.d.ts.map +1 -0
- package/dist/residency/actor-client.d.ts +16 -0
- package/dist/residency/actor-client.d.ts.map +1 -0
- package/dist/residency/actor-client.js +9 -0
- package/dist/residency/actor-client.js.map +7 -0
- package/dist/residency/client.d.ts +44 -0
- package/dist/residency/client.d.ts.map +1 -0
- package/dist/residency/host.d.ts +3 -0
- package/dist/residency/host.d.ts.map +1 -0
- package/dist/residency/host.js +25 -0
- package/dist/residency/host.js.map +7 -0
- package/dist/residency/launcher-owner.d.ts +7 -0
- package/dist/residency/launcher-owner.d.ts.map +1 -0
- package/dist/residency/launcher.d.ts +3 -0
- package/dist/residency/launcher.d.ts.map +1 -0
- package/dist/residency/launcher.js +152 -0
- package/dist/residency/launcher.js.map +7 -0
- package/dist/residency/omp-entry.d.ts +3 -0
- package/dist/residency/omp-entry.d.ts.map +1 -0
- package/dist/residency/omp-entry.js +41 -0
- package/dist/residency/omp-entry.js.map +7 -0
- package/dist/residency/protocol.d.ts +119 -0
- package/dist/residency/protocol.d.ts.map +1 -0
- package/dist/run-display.d.ts +3 -0
- package/dist/run-display.d.ts.map +1 -0
- package/dist/runtime/core-override-guest-types.d.ts +15 -0
- package/dist/runtime/core-override-guest-types.d.ts.map +1 -0
- package/dist/runtime/core-override-guest-types.js +291 -0
- package/dist/runtime/core-override-guest-types.js.map +7 -0
- package/dist/runtime/core-tool-properties.d.ts +6 -0
- package/dist/runtime/core-tool-properties.d.ts.map +1 -0
- package/dist/runtime/dynamic-guest-types.d.ts +3 -0
- package/dist/runtime/dynamic-guest-types.d.ts.map +1 -0
- package/dist/runtime/dynamic-guest-types.js +226 -0
- package/dist/runtime/dynamic-guest-types.js.map +7 -0
- package/dist/runtime/guest-code-repair.d.ts +2 -0
- package/dist/runtime/guest-code-repair.d.ts.map +1 -0
- package/dist/runtime/guest-stack-map.d.ts +11 -0
- package/dist/runtime/guest-stack-map.d.ts.map +1 -0
- package/dist/runtime/guest-types.d.ts +35 -0
- package/dist/runtime/guest-types.d.ts.map +1 -0
- package/dist/runtime/guest-types.js +13 -0
- package/dist/runtime/guest-types.js.map +7 -0
- package/dist/runtime/node-process-child-source.d.ts +2 -0
- package/dist/runtime/node-process-child-source.d.ts.map +1 -0
- package/dist/runtime/node-process-runtime.d.ts +10 -0
- package/dist/runtime/node-process-runtime.d.ts.map +1 -0
- package/dist/runtime/node-process-runtime.js +319 -0
- package/dist/runtime/node-process-runtime.js.map +7 -0
- package/dist/runtime/orchestration.d.ts +3 -0
- package/dist/runtime/orchestration.d.ts.map +1 -0
- package/dist/runtime/quickjs-runtime.d.ts +24 -0
- package/dist/runtime/quickjs-runtime.d.ts.map +1 -0
- package/dist/runtime/quickjs-runtime.js +12 -0
- package/dist/runtime/quickjs-runtime.js.map +7 -0
- package/dist/runtime/type-checker.d.ts +21 -0
- package/dist/runtime/type-checker.d.ts.map +1 -0
- package/dist/runtime/type-checker.js +15 -0
- package/dist/runtime/type-checker.js.map +7 -0
- package/dist/runtime-paths.d.ts +7 -0
- package/dist/runtime-paths.d.ts.map +1 -0
- package/dist/schema/controller.d.ts +35 -0
- package/dist/schema/controller.d.ts.map +1 -0
- package/dist/schema/types.d.ts +86 -0
- package/dist/schema/types.d.ts.map +1 -0
- package/dist/schema/workspace.d.ts +19 -0
- package/dist/schema/workspace.d.ts.map +1 -0
- package/dist/speculation/eligibility.d.ts +22 -0
- package/dist/speculation/eligibility.d.ts.map +1 -0
- package/dist/speculation/freshness.d.ts +10 -0
- package/dist/speculation/freshness.d.ts.map +1 -0
- package/dist/speculation/partial-json.d.ts +9 -0
- package/dist/speculation/partial-json.d.ts.map +1 -0
- package/dist/speculation/scanner.d.ts +13 -0
- package/dist/speculation/scanner.d.ts.map +1 -0
- package/dist/speculation/scanner.js +182 -0
- package/dist/speculation/scanner.js.map +7 -0
- package/dist/speculation/store.d.ts +39 -0
- package/dist/speculation/store.d.ts.map +1 -0
- package/dist/speculation/stream-tap.d.ts +27 -0
- package/dist/speculation/stream-tap.d.ts.map +1 -0
- package/dist/speculation/types.d.ts +44 -0
- package/dist/speculation/types.d.ts.map +1 -0
- package/dist/state/complexity.d.ts +13 -0
- package/dist/state/complexity.d.ts.map +1 -0
- package/dist/state/evidence-runner.d.ts +17 -0
- package/dist/state/evidence-runner.d.ts.map +1 -0
- package/dist/state/store.d.ts +76 -0
- package/dist/state/store.d.ts.map +1 -0
- package/dist/state/types.d.ts +165 -0
- package/dist/state/types.d.ts.map +1 -0
- package/dist/storage/retention.d.ts +22 -0
- package/dist/storage/retention.d.ts.map +1 -0
- package/dist/thinking.d.ts +19 -0
- package/dist/thinking.d.ts.map +1 -0
- package/dist/topology/control-plane.d.ts +58 -0
- package/dist/topology/control-plane.d.ts.map +1 -0
- package/dist/topology/participant-directory.d.ts +33 -0
- package/dist/topology/participant-directory.d.ts.map +1 -0
- package/dist/topology/peer-settle.d.ts +51 -0
- package/dist/topology/peer-settle.d.ts.map +1 -0
- package/dist/topology/records.d.ts +6 -0
- package/dist/topology/records.d.ts.map +1 -0
- package/dist/topology/types.d.ts +89 -0
- package/dist/topology/types.d.ts.map +1 -0
- package/dist/type-error-guidance.d.ts +3 -0
- package/dist/type-error-guidance.d.ts.map +1 -0
- package/dist/ui/arc-group.d.ts +17 -0
- package/dist/ui/arc-group.d.ts.map +1 -0
- package/dist/ui/code-preview-shell.d.ts +26 -0
- package/dist/ui/code-preview-shell.d.ts.map +1 -0
- package/dist/ui/code-preview.d.ts +53 -0
- package/dist/ui/code-preview.d.ts.map +1 -0
- package/dist/ui/controller.d.ts +20 -0
- package/dist/ui/controller.d.ts.map +1 -0
- package/dist/ui/conversation-chrome.d.ts +15 -0
- package/dist/ui/conversation-chrome.d.ts.map +1 -0
- package/dist/ui/conversation-chrome.js +10 -0
- package/dist/ui/conversation-chrome.js.map +7 -0
- package/dist/ui/conversation-native-reader.d.ts +106 -0
- package/dist/ui/conversation-native-reader.d.ts.map +1 -0
- package/dist/ui/conversation-native-reader.js +784 -0
- package/dist/ui/conversation-native-reader.js.map +7 -0
- package/dist/ui/conversation-queue-store.d.ts +12 -0
- package/dist/ui/conversation-queue-store.d.ts.map +1 -0
- package/dist/ui/conversation-queue.d.ts +242 -0
- package/dist/ui/conversation-queue.d.ts.map +1 -0
- package/dist/ui/conversation-render.d.ts +45 -0
- package/dist/ui/conversation-render.d.ts.map +1 -0
- package/dist/ui/conversation-shortcut.d.ts +3 -0
- package/dist/ui/conversation-shortcut.d.ts.map +1 -0
- package/dist/ui/conversation-targets.d.ts +7 -0
- package/dist/ui/conversation-targets.d.ts.map +1 -0
- package/dist/ui/conversation-targets.js +12 -0
- package/dist/ui/conversation-targets.js.map +7 -0
- package/dist/ui/conversation-transcript.d.ts +25 -0
- package/dist/ui/conversation-transcript.d.ts.map +1 -0
- package/dist/ui/conversation.d.ts +170 -0
- package/dist/ui/conversation.d.ts.map +1 -0
- package/dist/ui/conversation.js +1868 -0
- package/dist/ui/conversation.js.map +7 -0
- package/dist/ui/core-tool-render.d.ts +20 -0
- package/dist/ui/core-tool-render.d.ts.map +1 -0
- package/dist/ui/dashboard-detail.d.ts +68 -0
- package/dist/ui/dashboard-detail.d.ts.map +1 -0
- package/dist/ui/dashboard-fabric-graph.d.ts +50 -0
- package/dist/ui/dashboard-fabric-graph.d.ts.map +1 -0
- package/dist/ui/dashboard-model.d.ts +111 -0
- package/dist/ui/dashboard-model.d.ts.map +1 -0
- package/dist/ui/dashboard-presentation.d.ts +6 -0
- package/dist/ui/dashboard-presentation.d.ts.map +1 -0
- package/dist/ui/dashboard.d.ts +188 -0
- package/dist/ui/dashboard.d.ts.map +1 -0
- package/dist/ui/dashboard.js +4604 -0
- package/dist/ui/dashboard.js.map +7 -0
- package/dist/ui/diff-background.d.ts +12 -0
- package/dist/ui/diff-background.d.ts.map +1 -0
- package/dist/ui/dynamic-border.d.ts +8 -0
- package/dist/ui/dynamic-border.d.ts.map +1 -0
- package/dist/ui/escape-halt.d.ts +11 -0
- package/dist/ui/escape-halt.d.ts.map +1 -0
- package/dist/ui/fabric-actor-delivery-selector.d.ts +17 -0
- package/dist/ui/fabric-actor-delivery-selector.d.ts.map +1 -0
- package/dist/ui/fabric-actor-tool-selector.d.ts +22 -0
- package/dist/ui/fabric-actor-tool-selector.d.ts.map +1 -0
- package/dist/ui/fabric-code-parser.d.ts +8 -0
- package/dist/ui/fabric-code-parser.d.ts.map +1 -0
- package/dist/ui/fabric-host-event-selector.d.ts +29 -0
- package/dist/ui/fabric-host-event-selector.d.ts.map +1 -0
- package/dist/ui/fabric-model-selector.d.ts +64 -0
- package/dist/ui/fabric-model-selector.d.ts.map +1 -0
- package/dist/ui/fabric-render.d.ts +113 -0
- package/dist/ui/fabric-render.d.ts.map +1 -0
- package/dist/ui/fabric-thinking-selector.d.ts +26 -0
- package/dist/ui/fabric-thinking-selector.d.ts.map +1 -0
- package/dist/ui/fabric-title-hint.d.ts +2 -0
- package/dist/ui/fabric-title-hint.d.ts.map +1 -0
- package/dist/ui/format.d.ts +9 -0
- package/dist/ui/format.d.ts.map +1 -0
- package/dist/ui/highlight.d.ts +69 -0
- package/dist/ui/highlight.d.ts.map +1 -0
- package/dist/ui/model-picker.d.ts +46 -0
- package/dist/ui/model-picker.d.ts.map +1 -0
- package/dist/ui/model-picker.js +17 -0
- package/dist/ui/model-picker.js.map +7 -0
- package/dist/ui/preview-lines.d.ts +16 -0
- package/dist/ui/preview-lines.d.ts.map +1 -0
- package/dist/ui/row-balance.d.ts +29 -0
- package/dist/ui/row-balance.d.ts.map +1 -0
- package/dist/ui/settings.d.ts +57 -0
- package/dist/ui/settings.d.ts.map +1 -0
- package/dist/ui/settings.js +1908 -0
- package/dist/ui/settings.js.map +7 -0
- package/dist/ui/shiki-language.d.ts +7 -0
- package/dist/ui/shiki-language.d.ts.map +1 -0
- package/dist/ui/shiki-theme.d.ts +7 -0
- package/dist/ui/shiki-theme.d.ts.map +1 -0
- package/dist/ui/snapshot.d.ts +7 -0
- package/dist/ui/snapshot.d.ts.map +1 -0
- package/dist/ui/spinner.d.ts +6 -0
- package/dist/ui/spinner.d.ts.map +1 -0
- package/dist/ui/state-file-preview.d.ts +13 -0
- package/dist/ui/state-file-preview.d.ts.map +1 -0
- package/dist/ui/structured.d.ts +9 -0
- package/dist/ui/structured.d.ts.map +1 -0
- package/dist/ui/symbol-theme.d.ts +3 -0
- package/dist/ui/symbol-theme.d.ts.map +1 -0
- package/dist/ui/tool-call-timing.d.ts +2 -0
- package/dist/ui/tool-call-timing.d.ts.map +1 -0
- package/dist/ui/tool-display.d.ts +8 -0
- package/dist/ui/tool-display.d.ts.map +1 -0
- package/dist/ui/topology.d.ts +162 -0
- package/dist/ui/topology.d.ts.map +1 -0
- package/dist/ui/transcript-parser.d.ts +18 -0
- package/dist/ui/transcript-parser.d.ts.map +1 -0
- package/dist/ui/transcript-reader.d.ts +10 -0
- package/dist/ui/transcript-reader.d.ts.map +1 -0
- package/dist/ui/transcript-sanitization.d.ts +14 -0
- package/dist/ui/transcript-sanitization.d.ts.map +1 -0
- package/dist/ui/transcript.d.ts +52 -0
- package/dist/ui/transcript.d.ts.map +1 -0
- package/dist/ui/types.d.ts +84 -0
- package/dist/ui/types.d.ts.map +1 -0
- package/dist/ui/widget.d.ts +16 -0
- package/dist/ui/widget.d.ts.map +1 -0
- package/dist/ui/word-diff/alignment.d.ts +6 -0
- package/dist/ui/word-diff/alignment.d.ts.map +1 -0
- package/dist/ui/word-diff/change-block.d.ts +18 -0
- package/dist/ui/word-diff/change-block.d.ts.map +1 -0
- package/dist/ui/word-diff/changed-line.d.ts +14 -0
- package/dist/ui/word-diff/changed-line.d.ts.map +1 -0
- package/dist/ui/word-diff/emphasis.d.ts +9 -0
- package/dist/ui/word-diff/emphasis.d.ts.map +1 -0
- package/dist/ui/word-diff/line-emphasis.d.ts +7 -0
- package/dist/ui/word-diff/line-emphasis.d.ts.map +1 -0
- package/dist/ui/word-diff/line-matching.d.ts +10 -0
- package/dist/ui/word-diff/line-matching.d.ts.map +1 -0
- package/dist/ui/word-diff/line-similarity.d.ts +16 -0
- package/dist/ui/word-diff/line-similarity.d.ts.map +1 -0
- package/dist/ui/word-diff/normalize.d.ts +3 -0
- package/dist/ui/word-diff/normalize.d.ts.map +1 -0
- package/dist/ui/word-diff/parse.d.ts +17 -0
- package/dist/ui/word-diff/parse.d.ts.map +1 -0
- package/dist/ui/word-diff/range-refinement.d.ts +5 -0
- package/dist/ui/word-diff/range-refinement.d.ts.map +1 -0
- package/dist/ui/word-diff/ranges.d.ts +11 -0
- package/dist/ui/word-diff/ranges.d.ts.map +1 -0
- package/dist/ui/word-diff/smart-filter.d.ts +3 -0
- package/dist/ui/word-diff/smart-filter.d.ts.map +1 -0
- package/dist/ui/word-diff/sparse-line-matching.d.ts +25 -0
- package/dist/ui/word-diff/sparse-line-matching.d.ts.map +1 -0
- package/dist/ui/word-diff/text-boundaries.d.ts +11 -0
- package/dist/ui/word-diff/text-boundaries.d.ts.map +1 -0
- package/dist/ui/word-diff/token-alignment.d.ts +9 -0
- package/dist/ui/word-diff/token-alignment.d.ts.map +1 -0
- package/dist/ui/word-diff/token-text-refinement.d.ts +4 -0
- package/dist/ui/word-diff/token-text-refinement.d.ts.map +1 -0
- package/dist/ui/word-diff/tokens.d.ts +16 -0
- package/dist/ui/word-diff/tokens.d.ts.map +1 -0
- package/dist/ui/word-diff/types.d.ts +10 -0
- package/dist/ui/word-diff/types.d.ts.map +1 -0
- package/dist/util.d.ts +3 -0
- package/dist/util.d.ts.map +1 -0
- package/dist/worker/options.d.ts +3 -0
- package/dist/worker/options.d.ts.map +1 -0
- package/dist/worker/options.js +104 -0
- package/dist/worker/options.js.map +7 -0
- package/dist/worker/run-record.d.ts +22 -0
- package/dist/worker/run-record.d.ts.map +1 -0
- package/dist/worker/run-record.js +123 -0
- package/dist/worker/run-record.js.map +7 -0
- package/dist/worker/session-export.d.ts +45 -0
- package/dist/worker/session-export.d.ts.map +1 -0
- package/dist/worker/session-export.js +91 -0
- package/dist/worker/session-export.js.map +7 -0
- package/dist/worker.d.ts +3 -0
- package/dist/worker.d.ts.map +1 -0
- package/dist/worker.js +1061 -0
- package/dist/worker.js.map +7 -0
- package/docs/agents.md +564 -0
- package/docs/architecture.md +139 -0
- package/docs/audit-trace.md +116 -0
- package/docs/certification.md +134 -0
- package/docs/compaction.md +332 -0
- package/docs/component-calculus.md +191 -0
- package/docs/components.md +329 -0
- package/docs/configuration.md +478 -0
- package/docs/entropy.md +396 -0
- package/docs/interface.md +149 -0
- package/docs/memory-recall.md +614 -0
- package/docs/programmatic-compaction.md +207 -0
- package/docs/provider-component-calculus.md +378 -0
- package/docs/providers.md +109 -0
- package/docs/repairs.md +69 -0
- package/docs/residency-runtime.md +82 -0
- package/docs/schema-enforcement.md +166 -0
- package/docs/skills.md +48 -0
- package/docs/speculation.md +132 -0
- package/docs/state-layer.md +197 -0
- package/package.json +116 -0
- package/skills/fabric-advisor/SKILL.md +29 -0
- package/skills/fabric-ambient/SKILL.md +44 -0
- package/skills/fabric-ambient/references/setup.md +90 -0
- package/skills/fabric-council/SKILL.md +94 -0
- package/skills/fabric-exec/SKILL.md +123 -0
- package/skills/fabric-exec/references/agents.md +211 -0
- package/skills/fabric-exec/references/mcp.md +49 -0
- package/skills/fabric-exec/references/mesh.md +51 -0
- package/skills/fabric-fusion/SKILL.md +332 -0
- package/skills/fabric-guide/SKILL.md +28 -0
- package/skills/fabric-rlm/SKILL.md +284 -0
- package/skills/fabric-schema/SKILL.md +121 -0
- package/skills/fabric-spec/SKILL.md +42 -0
- package/skills/fabric-supervisor/SKILL.md +37 -0
- package/skills/fabric-swarm/SKILL.md +80 -0
- package/skills/fabric-workflow/SKILL.md +133 -0
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/fabric-runtime-state.ts", "../src/actors/global-registry.ts", "../src/actors/context.ts", "../src/actors/host-event-payload.ts", "../src/components/catalog.ts", "../src/components/effect-scope.ts", "../src/components/supervisor.ts", "../src/components/loader.ts", "../src/core/compact-controller.ts", "../src/core/tool-result-proxy.ts", "../src/runtime/orchestration.ts", "../src/execution-service.ts", "../src/repairs/apply.ts", "../src/repairs/catalog-digest.ts", "../src/repairs/promote.ts", "../src/repairs/store.ts", "../src/repairs/types.ts", "../src/repairs/compiler.ts", "../src/speculation/eligibility.ts", "../src/speculation/freshness.ts", "../src/speculation/store.ts", "../src/speculation/partial-json.ts", "../src/speculation/stream-tap.ts", "../src/lifecycle/delivery-scheduler.ts", "../src/providers/agents-actions.ts", "../src/residency/client.ts", "../src/providers/agents-provider.ts", "../src/providers/captured-tools-provider.ts", "../src/core/child-tool-allowlist.ts", "../src/providers/compact-provider.ts", "../src/providers/components-provider.ts", "../src/providers/mcp-descriptor-cache.ts", "../src/providers/mcp-provider.ts", "../src/providers/mesh-provider.ts", "../src/providers/omp-tools-provider.ts", "../src/agents/bash-worktree-add.ts", "../src/providers/omp-bash-cwd.ts", "../src/providers/write-preview.ts", "../src/schema/controller.ts", "../src/schema/types.ts", "../src/schema/workspace.ts", "../src/providers/schema-provider.ts", "../src/state/store.ts", "../src/state/complexity.ts", "../src/state/evidence-runner.ts", "../src/providers/state-provider.ts"],
|
|
4
|
+
"sourcesContent": ["import type { ExtensionContext } from \"@oh-my-pi/pi-coding-agent\";\nimport { resolveAgentDir } from \"./core/agent-dir.js\";\nimport {\n resolveAvailableOmpModel,\n type FabricModelCandidate,\n} from \"./core/model-resolution.js\";\nimport { loadModelUsage } from \"./core/model-usage.js\";\nimport type { ExtensionAPI } from \"@oh-my-pi/pi-coding-agent\";\nimport path from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport { FabricActivityStore } from \"./activity/store.js\";\nimport { ActorDirectory } from \"./actors/directory.js\";\nimport { resolveOmpBinary } from \"./agents/omp-binary.js\";\nimport { isOmpShellRef } from \"./core/omp-tools.js\";\nimport { GlobalActorRegistry } from \"./actors/global-registry.js\";\nimport { buildActorContext } from \"./actors/context.js\";\nimport { actorDeliveryNotice } from \"./actors/delivery-policy.js\";\nimport { prepareFabricActorHostPayload } from \"./actors/host-event-payload.js\";\nimport type { FabricActorHostEvent } from \"./actors/types.js\";\nimport { CapturedToolCatalog, type CapturedToolEntry } from \"./capture/catalog.js\";\nimport { FabricComponentCatalog } from \"./components/catalog.js\";\nimport { FabricComponentLoader } from \"./components/loader.js\";\nimport {\n resolveFabricModelGuidance,\n type FabricOwnedModelGuidance,\n} from \"./components/model-guidance.js\";\nimport { FabricComponentSupervisor } from \"./components/supervisor.js\";\nimport {\n createProviderComponent,\n FABRIC_COMPONENT_PROVIDER_NAMES,\n FABRIC_PROVIDER_COMPONENT_PREFIX,\n FabricProviderComponentManifest,\n type FabricProviderComponent,\n} from \"./components/provider-component.js\";\nimport type {\n FabricComponentDefinition,\n FabricComponentGraph,\n FabricComponentInfo,\n} from \"./components/types.js\";\nimport {\n DEFAULT_FABRIC_CONFIG,\n loadFabricConfig,\n type FabricConfig,\n type FabricResultFormat,\n type FabricSchemaMode,\n} from \"./config.js\";\nimport {\n ActionRegistry,\n type FabricCapabilityViewLease,\n type ResolvedFabricAction,\n} from \"./core/action-registry.js\";\nimport { FabricSessionApprovals } from \"./core/approval-controller.js\";\nimport { CompactController, type CompactLastCommit, type CompactPendingIntent } from \"./core/compact-controller.js\";\nimport { FabricToolResultProxy } from \"./core/tool-result-proxy.js\";\nimport { FabricExecutionService, type FabricExecutionResult } from \"./execution-service.js\";\nimport { RepairCompiler } from \"./repairs/compiler.js\";\nimport {\n clearActiveRepairCompiler,\n setActiveRepairCompiler,\n} from \"./repairs/active.js\";\nimport { loadCompiledSurface } from \"./entropy/compiled-store.js\";\nimport {\n clearActiveCompiledSurface,\n setActiveCompiledSurface,\n} from \"./entropy/active.js\";\nimport {\n isSpeculationEligible,\n mcpAllowlistMatch,\n TIER_A_SPECULATION_REFS,\n} from \"./speculation/eligibility.js\";\nimport { createFreshnessChecker } from \"./speculation/freshness.js\";\nimport { FabricSpeculationStore } from \"./speculation/store.js\";\nimport { FabricSpeculationStreamTap } from \"./speculation/stream-tap.js\";\nimport type {\n FabricSpeculationCandidate,\n FabricSpeculationReplay,\n} from \"./speculation/types.js\";\nimport { MeshStore, type MeshIdentity } from \"./mesh/store.js\";\nimport { LifecycleBroker } from \"./lifecycle/broker.js\";\nimport type { FabricLifecycleEventType } from \"./lifecycle/types.js\";\nimport { FabricControlPlane } from \"./topology/control-plane.js\";\nimport { ParticipantDirectory } from \"./topology/participant-directory.js\";\nimport type {\n FabricParticipantInfo,\n FabricParticipantListOptions,\n FabricPeerInfo,\n} from \"./topology/types.js\";\nimport { actorParticipantRecord, agentParticipantRecords } from \"./topology/records.js\";\nimport { PrewalkController } from \"./prewalk/controller.js\";\nimport { PrewalkDriftTracker } from \"./prewalk/fs-drift.js\";\nimport {\n claimFabricFsDriftHandoff,\n claimFabricHandoff,\n runFabricHandoffAtBoundary,\n type PendingFabricHandoff,\n} from \"./prewalk/handoff.js\";\nimport type { AgentToolResultMessage } from \"./agents/types.js\";\nimport {\n MainAgentController,\n resolveFabricIdentity,\n type FabricAgentMessageDelivery,\n type FabricAgentMessageResult,\n type FabricMainAgentInfo,\n} from \"./main-agent.js\";\nimport { AgentsProvider } from \"./providers/agents-provider.js\";\nimport { CapturedToolsProvider } from \"./providers/captured-tools-provider.js\";\nimport { CompactProvider } from \"./providers/compact-provider.js\";\nimport { ComponentsProvider } from \"./providers/components-provider.js\";\nimport { McpDescriptorCacheStore } from \"./providers/mcp-descriptor-cache.js\";\nimport { McpProvider, type McpProviderHooks } from \"./providers/mcp-provider.js\";\nimport { MemoryProvider, type MemoryProviderContext } from \"./providers/memory-provider.js\";\nimport { MeshProvider } from \"./providers/mesh-provider.js\";\nimport { OmpToolsProvider } from \"./providers/omp-tools-provider.js\";\nimport { SchemaProvider } from \"./providers/schema-provider.js\";\nimport { StateProvider } from \"./providers/state-provider.js\";\nimport { SchemaController } from \"./schema/controller.js\";\nimport { StateStore } from \"./state/store.js\";\nimport {\n FABRIC_COMPONENT_DISCOVER_EVENT,\n FABRIC_PROVIDER_DISCOVER_EVENT,\n type FabricActionDescriptor,\n type FabricComponentDiscovery,\n type FabricInvocationContext,\n type FabricProvider,\n type FabricProviderDiscovery,\n} from \"./protocol.js\";\nimport { AgentManager } from \"./agents/manager.js\";\nimport { ResidencyClient } from \"./residency/client.js\";\nimport { RESIDENT_HOST_FORMAT, residentRoot } from \"./residency/protocol.js\";\nimport type { FabricRuntimePaths } from \"./runtime-paths.js\";\n\nconst BACKGROUND_COMPLETION_MAX_CHARS = 8_000;\nconst inheritedCapabilityRequirements = (): string[] => {\n const source = process.env.OMP_FABRIC_CAPABILITY_REQUIREMENTS;\n if (!source) return [];\n const parsed: unknown = JSON.parse(source);\n if (!Array.isArray(parsed) || parsed.length > 128) {\n throw new Error(\"OMP_FABRIC_CAPABILITY_REQUIREMENTS must be an array of at most 128 refs\");\n }\n const refs = parsed.filter((value): value is string => typeof value === \"string\");\n if (refs.length !== parsed.length || refs.some((ref) => ref.length > 256 || !ref.includes(\".\"))) {\n throw new Error(\"OMP_FABRIC_CAPABILITY_REQUIREMENTS contains an invalid provider.action ref\");\n }\n return [...new Set(refs)];\n};\n\nconst escapeXmlText = (value: string): string =>\n value.replaceAll(\"&\", \"&\").replaceAll(\"<\", \"<\").replaceAll(\">\", \">\");\n\n\nexport interface FabricRuntimeStateOptions {\n activity?: FabricActivityStore;\n prewalk?: PrewalkController;\n prewalkDrift?: PrewalkDriftTracker;\n sessionApprovals?: FabricSessionApprovals;\n paths?: FabricRuntimePaths;\n}\n\nexport class FabricRuntimeState {\n #registry: ActionRegistry | undefined;\n #mcpProvider: McpProvider | undefined;\n #config: FabricConfig | undefined;\n #execution: FabricExecutionService | undefined;\n #repairs: RepairCompiler | undefined;\n #speculationStore: FabricSpeculationStore | undefined;\n #speculationTap: FabricSpeculationStreamTap | undefined;\n #agents: AgentManager | undefined;\n #actors: ActorDirectory | undefined;\n #globalActors: GlobalActorRegistry | undefined;\n #mesh: MeshStore | undefined;\n #identity: MeshIdentity | undefined;\n #mainAgent: MainAgentController | undefined;\n #participants: ParticipantDirectory | undefined;\n #control: FabricControlPlane | undefined;\n #lifecycle: LifecycleBroker | undefined;\n #residency: ResidencyClient | undefined;\n #agentsProvider: AgentsProvider | undefined;\n #compact: CompactController | undefined;\n #schema: SchemaController | undefined;\n #componentSupervisor: FabricComponentSupervisor | undefined;\n #componentLoader: FabricComponentLoader | undefined;\n readonly #componentTransitionSignatures = new Map<string, string>();\n readonly #componentTransitionPublications = new Set<Promise<void>>();\n #sessionCapabilityLease: FabricCapabilityViewLease | undefined;\n #unsubscribeCapturedCatalog: (() => void) | undefined;\n #cwd: string | undefined;\n readonly #externalProviders = new Map<string, FabricProvider>();\n readonly #builtinComponentNames = new Set<string>();\n readonly componentCatalog = new FabricComponentCatalog();\n readonly activity: FabricActivityStore;\n readonly prewalk: PrewalkController;\n readonly prewalkDrift: PrewalkDriftTracker;\n readonly sessionApprovals: FabricSessionApprovals;\n readonly #paths: FabricRuntimePaths | undefined;\n #widgetDismissedAt = 0;\n #suppressResidentGuidanceSync = false;\n\n constructor(\n readonly omp: ExtensionAPI,\n readonly capturedTools: CapturedToolCatalog,\n options: FabricRuntimeStateOptions = {},\n ) {\n this.activity = options.activity ?? new FabricActivityStore();\n this.prewalk = options.prewalk ?? new PrewalkController();\n this.prewalkDrift = options.prewalkDrift ?? new PrewalkDriftTracker();\n this.sessionApprovals = options.sessionApprovals ?? new FabricSessionApprovals();\n this.#paths = options.paths;\n }\n\n get initialized(): boolean {\n return Boolean(this.#execution);\n }\n\n get widgetDismissedAt(): number {\n return this.#widgetDismissedAt;\n }\n\n set widgetDismissedAt(value: number) {\n this.#widgetDismissedAt = value;\n }\n\n get cwd(): string | undefined {\n return this.#cwd;\n }\n\n get config(): FabricConfig {\n if (!this.#config) throw new Error(\"OMP Fabric has not initialized\");\n return this.#config;\n }\n\n /** Stream tap for speculative PTC; undefined when speculation is disabled. */\n get speculationTap(): FabricSpeculationStreamTap | undefined {\n return this.#speculationTap;\n }\n\n /** Turn-boundary backstop: tap state and unserved entries never outlive a turn. */\n resetSpeculation(): void {\n this.#speculationTap?.reset();\n this.#speculationStore?.reset();\n }\n\n // Speculative PTC: the store is the epoch-checked promise cache consumed by\n // ActionRegistry.invoke; the tap watches fabric_exec argument streaming and\n // launches literal-args Tier-A calls early (docs/speculation.md).\n #wireSpeculation(): void {\n const config = this.#config;\n const registry = this.#registry;\n if (!config || !registry || !config.speculation.enabled) return;\n const { speculation } = config;\n const store = new FabricSpeculationStore(speculation);\n registry.setSpeculation(store, (action: ResolvedFabricAction) =>\n isSpeculationEligible(\n {\n ref: action.ref,\n provider: action.provider,\n risk: action.risk,\n effectKind: action.effect?.kind,\n ...(action.annotations ? { annotations: action.annotations } : {}),\n },\n speculation.mcpAllowlist,\n ));\n this.#speculationStore = store;\n this.#speculationTap = new FabricSpeculationStreamTap({\n enabled: () => this.#config?.speculation.enabled === true,\n maxBufferBytes: () => this.#config?.speculation.maxBufferBytes ?? 2 * 1024 * 1024,\n isEligible: (ref) =>\n TIER_A_SPECULATION_REFS.has(ref) ||\n (ref.startsWith(\"mcp.\") &&\n mcpAllowlistMatch(\n ref.slice(\"mcp.\".length),\n this.#config?.speculation.mcpAllowlist ?? [],\n )),\n launch: (toolCallId, candidate, extensionContext) => {\n void this.#launchSpeculation(toolCallId, candidate, extensionContext).catch(\n () => undefined,\n );\n },\n });\n // The scanner pulls in the TypeScript compiler; load it in the background\n // so session startup never pays. Streams that open first are re-scanned in\n // full once the factory lands (their extractors buffered the prefix).\n void import(\"./speculation/scanner.js\").then(\n (module) => {\n this.#speculationTap?.setScannerFactory(() => new module.LiteralCallScanner());\n },\n () => undefined,\n );\n }\n\n async #launchSpeculation(\n toolCallId: string,\n candidate: FabricSpeculationCandidate,\n context: ExtensionContext,\n ): Promise<void> {\n const registry = this.#registry;\n const store = this.#speculationStore;\n if (!registry || !store || this.#config?.speculation.enabled !== true) return;\n const replay: FabricSpeculationReplay = {};\n const lightContext: FabricInvocationContext = {\n cwd: context.cwd,\n signal: undefined,\n parentToolCallId: toolCallId,\n nestedToolCallId: \"fabric-speculation\",\n extensionContext: context,\n update() {},\n ...(this.#sessionCapabilityLease?.view\n ? { capabilityView: this.#sessionCapabilityLease.view }\n : {}),\n };\n const speculation = await registry.speculate(\n candidate.ref,\n candidate.args,\n lightContext,\n replay,\n );\n if (!speculation) return;\n store.launch(\n toolCallId,\n candidate.ref,\n speculation.preparedArgs,\n speculation.execute,\n createFreshnessChecker(candidate.ref, speculation.preparedArgs, context.cwd),\n replay,\n speculation.bindingToken,\n );\n }\n\n get registry(): ActionRegistry {\n if (!this.#registry) throw new Error(\"OMP Fabric has not initialized\");\n return this.#registry;\n }\n\n get components(): FabricComponentLoader {\n if (!this.#componentLoader) throw new Error(\"OMP Fabric has not initialized\");\n return this.#componentLoader;\n }\n\n get execution(): FabricExecutionService {\n if (!this.#execution) throw new Error(\"OMP Fabric has not initialized\");\n return this.#execution;\n }\n\n get agents(): AgentManager {\n if (!this.#agents) throw new Error(\"OMP Fabric has not initialized\");\n return this.#agents;\n }\n\n get actors(): ActorDirectory {\n if (!this.#actors) throw new Error(\"OMP Fabric has not initialized\");\n return this.#actors;\n }\n\n get globalActors(): GlobalActorRegistry {\n if (!this.#globalActors) throw new Error(\"OMP Fabric has not initialized\");\n return this.#globalActors;\n }\n\n get mesh(): MeshStore {\n if (!this.#mesh) throw new Error(\"OMP Fabric has not initialized\");\n return this.#mesh;\n }\n\n mainAgentInfo(context?: ExtensionContext): FabricMainAgentInfo {\n if (!this.#mainAgent) throw new Error(\"OMP Fabric has not initialized\");\n return this.#mainAgent.info(context);\n }\n\n peerInfos(): FabricPeerInfo[] {\n return this.#participants?.peers() ?? [];\n }\n\n componentGraph(): FabricComponentGraph {\n return this.#componentLoader?.graph() ?? { components: [], edges: [], cycles: [] };\n }\n\n modelGuidance(): FabricOwnedModelGuidance[] {\n return this.#componentSupervisor?.guidance() ?? [];\n }\n\n participantInfos(options: FabricParticipantListOptions = {}): FabricParticipantInfo[] {\n return this.#participants?.list(options) ?? [];\n }\n\n async queueUserMessage(\n targetId: string,\n message: string,\n delivery: FabricAgentMessageDelivery,\n ): Promise<FabricAgentMessageResult> {\n if (!this.#mainAgent || !this.#agentsProvider) {\n throw new Error(\"OMP Fabric has not initialized\");\n }\n if (this.#mainAgent.matches(targetId) && this.#mainAgent.local) {\n return this.#mainAgent.deliverUser(message, delivery);\n }\n return this.#agentsProvider.routeMessage(targetId, message, undefined, delivery);\n }\n\n async stopParticipant(targetId: string): Promise<unknown> {\n if (!this.#agentsProvider) throw new Error(\"OMP Fabric has not initialized\");\n return this.#agentsProvider.stopParticipant(targetId);\n }\n\n get compact(): CompactController {\n if (!this.#compact) throw new Error(\"OMP Fabric has not initialized\");\n return this.#compact;\n }\n\n get repairs(): RepairCompiler {\n if (!this.#repairs) throw new Error(\"OMP Fabric has not initialized\");\n return this.#repairs;\n }\n\n async initialize(context: ExtensionContext, bootstrapConfig?: FabricConfig): Promise<void> {\n this.#suppressResidentGuidanceSync = true;\n try {\n await this.#closeInternal();\n } finally {\n this.#suppressResidentGuidanceSync = false;\n }\n for (const name of this.#builtinComponentNames) this.componentCatalog.unregister(name);\n this.#builtinComponentNames.clear();\n this.prewalk.cancel();\n this.prewalkDrift.clear();\n context.ui.setStatus(\"fabric-prewalk\", undefined);\n this.#speculationTap?.reset();\n this.#speculationStore?.reset();\n this.#speculationTap = undefined;\n this.#speculationStore = undefined;\n this.activity.reset();\n this.sessionApprovals.approvedRisks.clear();\n this.#cwd = context.cwd;\n const projectTrusted = context.isProjectTrusted();\n this.#config = bootstrapConfig ?? loadFabricConfig({\n cwd: context.cwd,\n agentDir: resolveAgentDir(),\n projectTrusted,\n });\n this.#registry = new ActionRegistry(\n new FabricToolResultProxy(() => this.capturedTools.runner),\n );\n this.#wireSpeculation();\n this.#unsubscribeCapturedCatalog?.();\n this.#unsubscribeCapturedCatalog = this.capturedTools.subscribe(() => {\n this.#registry?.notifyCatalogChanged(\"extensions\");\n this.#refreshRepairCatalog();\n });\n this.#componentSupervisor = new FabricComponentSupervisor(this.#registry, {\n invocationContext: () => ({\n cwd: context.cwd,\n signal: undefined,\n parentToolCallId: \"fabric-component\",\n nestedToolCallId: \"fabric-component\",\n extensionContext: context,\n update() {},\n }),\n maxResultChars: this.#config.executor.maxNestedResultChars,\n acquire: async (ref, args, invocation) => {\n const action = await this.#registry!.describe(ref, invocation);\n await this.#schema?.authorize(action.ref, invocation.parentToolCallId);\n return this.#registry!.acquireScoped(ref, args, invocation);\n },\n invoke: (ref, args, invocation) => this.#registry!.invoke(ref, args, {\n ...invocation,\n ...(this.#schema\n ? { authorize: (action) => this.#schema!.authorize(action.ref, invocation.parentToolCallId) }\n : {}),\n approve: async () => {},\n audits: [],\n maxResultChars: this.#config!.executor.maxNestedResultChars,\n }),\n });\n this.#componentSupervisor.subscribe((componentId) =>\n this.#observeComponentTransitions(componentId),\n );\n this.#componentLoader = new FabricComponentLoader(\n this.componentCatalog,\n this.#componentSupervisor,\n );\n this.#registry.register(new ComponentsProvider(this.#componentLoader));\n const builtinManifest = new FabricProviderComponentManifest(\n this.componentCatalog,\n this.#componentLoader,\n );\n const installBuiltin = async (component: FabricProviderComponent): Promise<void> => {\n await builtinManifest.install(component);\n this.#builtinComponentNames.add(component.definition.name);\n };\n const enforceSchema = this.#config.schema.mode === \"enforce\";\n const effectiveFullCodeMode = this.#config.fullCodeMode || enforceSchema;\n // Enforce keeps this provider private to the OMP adapter: core overrides\n // still resolve through omp.* while the schema authorizer blocks protected\n // mutations and external effects. Do not expose the generic extensions.*\n // namespace in enforce mode.\n const capturedToolsProvider =\n effectiveFullCodeMode && (this.#config.capture.enabled || enforceSchema)\n ? new CapturedToolsProvider(this.capturedTools)\n : undefined;\n if (effectiveFullCodeMode) {\n await installBuiltin(createProviderComponent({\n provider: \"omp\",\n description: \"OMP core tools adapter\",\n create: () => OmpToolsProvider.create(\n context.cwd,\n this.capturedTools,\n capturedToolsProvider,\n ),\n }));\n }\n await installBuiltin(createProviderComponent({\n provider: \"mcp\",\n description: \"MCP runtime and descriptor cache\",\n create: () => new McpProvider(context.cwd, this.#config!.mcp, {\n ...(this.#config!.mcp.cache.enabled\n ? {\n cache: new McpDescriptorCacheStore(\n path.join(\n process.env.OMP_FABRIC_PROJECT_ROOT ?? context.cwd,\n \".omp\",\n \"fabric\",\n \"mcp-cache.json\",\n ),\n ),\n }\n : {}),\n hooks: {\n onSliceChanged: () => {\n this.#registry?.notifyCatalogChanged(\"mcp\");\n },\n },\n }),\n mounted: (provider) => { this.#mcpProvider = provider; },\n unmounted: (provider) => {\n if (this.#mcpProvider === provider) this.#mcpProvider = undefined;\n },\n start: (provider) => { provider.warmup(); },\n }));\n if (capturedToolsProvider && !enforceSchema) {\n await installBuiltin(createProviderComponent({\n provider: \"extensions\",\n description: \"Captured extension tool catalog\",\n create: () => capturedToolsProvider,\n }));\n }\n const sessionId = context.sessionManager.getSessionId();\n const { identity, mainAgentId } = resolveFabricIdentity(sessionId);\n const fabricSessionId = process.env.OMP_FABRIC_SESSION_ID?.trim() || sessionId;\n const ownsPersistentActorRegistry =\n identity.kind === \"main\" &&\n !enforceSchema &&\n projectTrusted &&\n this.#config.mesh.enabled;\n const mainAgent = new MainAgentController(\n this.omp,\n mainAgentId,\n identity.kind === \"main\" && identity.id === mainAgentId,\n context.cwd,\n identity.kind === \"main\" ? sessionId : undefined,\n );\n this.#mainAgent = mainAgent;\n const projectRoot = process.env.OMP_FABRIC_PROJECT_ROOT ?? context.cwd;\n const configuredMeshRoot = this.#config.mesh.root;\n const meshRoot =\n process.env.OMP_FABRIC_MESH_ROOT ??\n (configuredMeshRoot\n ? path.resolve(projectRoot, configuredMeshRoot)\n : path.join(projectRoot, \".omp\", \"fabric\", \"mesh\"));\n this.#mesh = new MeshStore(\n meshRoot,\n this.#config.mesh.maxEventBytes,\n this.#config.mesh.maxReadEvents,\n );\n const hostId = identity.kind === \"main\" ? mainAgentId : `runtime:${sessionId}`;\n this.#participants = new ParticipantDirectory(this.#mesh, {\n enabled: this.#config.mesh.enabled,\n hostId,\n rootId: mainAgentId,\n identity,\n ...(process.env.OMP_FABRIC_OWNER_HOST_ID\n ? { selfOwnerHostId: process.env.OMP_FABRIC_OWNER_HOST_ID }\n : {}),\n ...(process.env.OMP_FABRIC_OWNER_IDENTITY_ID\n ? { selfOwnerIdentityId: process.env.OMP_FABRIC_OWNER_IDENTITY_ID }\n : {}),\n });\n this.#control = new FabricControlPlane(this.#mesh, identity, {\n enabled: this.#config.mesh.enabled,\n hostId,\n pollMs: this.#config.mesh.actorPollMs,\n });\n if (this.#config.mesh.enabled) {\n await installBuiltin(createProviderComponent({\n provider: \"mesh\",\n description: \"Project mesh and participant directory\",\n create: () => new MeshProvider(this.#mesh!, identity, this.#participants!),\n }));\n await installBuiltin(createProviderComponent({\n provider: \"state\",\n description: \"Labeled world state over the project mesh\",\n requires: [\"mesh.get\"],\n create: () => new StateProvider(this.#mesh!, identity),\n }));\n } else {\n const meshDisabled =\n 'disabled by configuration (mesh.enabled=false); set \"mesh\": { \"enabled\": true } in .omp/fabric.json or the agent fabric.json';\n this.#registry.markUnavailable(\"mesh\", `${meshDisabled} to enable mesh.* actions`);\n this.#registry.markUnavailable(\"state\", `${meshDisabled}; state.* actions run on the mesh`);\n }\n this.#schema = new SchemaController(\n context.cwd,\n this.#config.schema,\n this.#mesh,\n identity,\n new StateStore(this.#mesh),\n );\n await installBuiltin(createProviderComponent({\n provider: \"schema\",\n description: \"Schema verification and workspace transactions\",\n create: () => new SchemaProvider(this.#schema!),\n }));\n this.#identity = identity;\n this.#compact = new CompactController({\n onRequest: (intent) => void this.#publishCompactEvent(\"requested\", intent),\n onCommit: (info) => void this.#publishCompactEvent(info.status, info),\n });\n await installBuiltin(createProviderComponent({\n provider: \"compact\",\n description: \"Host context compaction controller\",\n create: () => new CompactProvider(this.#compact!),\n }));\n const agentConfig = enforceSchema\n ? { ...this.#config.agents, enabled: false }\n : this.#config.agents;\n const modelsConfig = this.#config.models;\n const visibleOmpModels = () => {\n try {\n return context.modelRegistry.getAvailable();\n } catch {\n return [];\n }\n };\n const ompModelState = (models = visibleOmpModels()) => {\n const available: FabricModelCandidate[] = models.map((model) => ({\n provider: String(model.provider),\n id: String(model.id),\n ...(typeof model.name === \"string\" ? { name: model.name } : {}),\n }));\n const defaultModel = context.model\n ? `${context.model.provider}/${context.model.id}`\n : undefined;\n return {\n available,\n aliases: structuredClone(modelsConfig.aliases),\n ...(defaultModel ? { defaultModel } : {}),\n };\n };\n const resolveParticipantOmpModel = (selector?: string) => {\n const models = visibleOmpModels();\n const state = ompModelState(models);\n const query = selector?.trim() || state.defaultModel || \"\";\n const resolved = resolveAvailableOmpModel(query, {\n aliases: state.aliases,\n available: state.available,\n lastUsed: loadModelUsage(),\n });\n const model = models.find(\n (candidate) =>\n String(candidate.provider).toLowerCase() === resolved.provider.toLowerCase() &&\n String(candidate.id).toLowerCase() === resolved.id.toLowerCase(),\n );\n if (!model) {\n throw new Error(\n `Model ${JSON.stringify(query)} is not available to this OMP session. ` +\n 'Use agents.models({ runner: \"omp\" }) to list the models visible to this session.',\n );\n }\n return { key: `${resolved.provider}/${resolved.id}`, model };\n };\n this.#agents = new AgentManager(context.cwd, agentConfig, {\n fullCodeMode: this.#config.fullCodeMode,\n mainAgentId,\n fabricSessionId,\n meshRoot,\n projectRoot,\n hostId,\n identityId: identity.id,\n retention: this.#config.retention,\n ...(this.#paths\n ? {\n workerPath: this.#paths.worker,\n fabricExtensionPath: this.#paths.extension,\n }\n : {}),\n resolveParticipantGuidance: ({ model, runner }) => {\n const targetModel = model ?? (runner === \"omp\" && context.model\n ? `${context.model.provider}/${context.model.id}`\n : undefined);\n if (!targetModel) return undefined;\n return resolveFabricModelGuidance(this.modelGuidance(), {\n model: targetModel,\n target: \"participant\",\n includeSlots: false,\n }).appendText || undefined;\n },\n prepareOmpModel: async (modelKey) => {\n const resolved = resolveParticipantOmpModel(modelKey);\n const auth = await context.modelRegistry.getApiKeyAndHeaders(resolved.model);\n if (!auth.ok) throw new Error(auth.error);\n return resolved.key;\n },\n onLifecycle: (event) => {\n const lifecycle = this.#lifecycle;\n if (lifecycle) void lifecycle.publish(event).catch(() => undefined);\n },\n onBackgroundComplete: (result) => {\n const durationMs = Math.max(0, (result.finishedAt ?? Date.now()) - result.startedAt);\n const duration =\n durationMs < 60_000\n ? `${Math.round(durationMs / 1_000)}s`\n : `${(durationMs / 60_000).toFixed(1)}m`;\n const summary = result.text || result.error || \"no result\";\n const clippedSummary =\n summary.length > BACKGROUND_COMPLETION_MAX_CHARS\n ? `${summary.slice(0, BACKGROUND_COMPLETION_MAX_CHARS)}\\n[completion truncated]`\n : summary;\n this.omp.sendMessage(\n {\n customType: \"omp-fabric-agent-complete\",\n content: `Fabric agent ${result.id.slice(0, 8)} ${result.status} after ${duration}: ${clippedSummary}`,\n display: true,\n details: result,\n },\n { deliverAs: \"followUp\", triggerTurn: true },\n );\n },\n });\n const canManageActor = (actorId: string): boolean | undefined => {\n const participant = this.#participants?.get(actorId);\n return participant ? participant.ownerHostId === hostId : undefined;\n };\n const lineageAlive = (rootId: string): boolean =>\n this.#participants?.get(rootId) !== undefined;\n const actorRoots = {\n project: path.join(meshRoot, \"actors\"),\n session: path.join(meshRoot, \"actors\", fabricSessionId),\n };\n const acquireActorCapabilityView = (\n requirements: Parameters<ActionRegistry[\"acquireCapabilityView\"]>[0],\n signal: AbortSignal,\n ) => this.#registry!.acquireCapabilityView(requirements, {\n cwd: context.cwd,\n signal,\n parentToolCallId: \"fabric-actor-capability\",\n nestedToolCallId: \"fabric-actor-capability\",\n extensionContext: context,\n update() {},\n });\n this.#actors = new ActorDirectory([\n fabricSessionId,\n identity,\n this.#mesh,\n enforceSchema ? { ...this.#config.mesh, enabled: false } : this.#config.mesh,\n this.#agents,\n ({ actor, message, delivery, triggerTurn }) => {\n const text = message.text ?? \"\";\n if (!text) return;\n const deliveryNotice = actorDeliveryNotice(delivery, triggerTurn);\n this.omp.sendMessage(\n {\n customType: \"omp-fabric-actor\",\n content: [\n `<fabric-actor name=${JSON.stringify(actor.name)} id=${JSON.stringify(actor.id)}>\\n${escapeXmlText(text)}\\n</fabric-actor>`,\n deliveryNotice,\n ]\n .filter((line): line is string => Boolean(line))\n .join(\"\\n\"),\n display: true,\n details: {\n actor,\n message,\n delivery: { mode: delivery, triggerTurn, passive: Boolean(deliveryNotice) },\n },\n },\n { deliverAs: delivery, triggerTurn },\n );\n },\n ownsPersistentActorRegistry\n ? {\n persistent: true,\n mainAgent,\n canManageActor,\n lineageAlive,\n claimResidency: \"session\",\n rootId: mainAgentId,\n retention: this.#config.retention,\n resolveOmpModel: (model) => resolveParticipantOmpModel(model).key,\n acquireCapabilityView: acquireActorCapabilityView,\n }\n : {\n persistent: false,\n mainAgent,\n canManageActor,\n lineageAlive,\n claimResidency: \"session\",\n rootId: mainAgentId,\n retention: this.#config.retention,\n resolveOmpModel: (model) => resolveParticipantOmpModel(model).key,\n acquireCapabilityView: acquireActorCapabilityView,\n },\n ], actorRoots, this.#config.mesh.actorScope);\n this.#registry.subscribeProviderChanges(() => {\n this.#actors?.retryCapabilityWaiters();\n this.#refreshRepairCatalog();\n });\n this.#lifecycle = new LifecycleBroker(\n this.#mesh,\n identity,\n this.#participants,\n {\n enabled: this.#config.mesh.enabled && !enforceSchema,\n pollMs: this.#config.mesh.actorPollMs,\n maxReadEvents: this.#config.mesh.maxReadEvents,\n },\n async (subscription, event) => {\n if (!this.#agentsProvider) throw new Error(\"Fabric agents provider is unavailable\");\n await this.#agentsProvider.deliverLifecycle(subscription, event);\n },\n );\n this.#globalActors = new GlobalActorRegistry(resolveAgentDir(), this.#config.mesh.maxEventBytes);\n this.#residency = ownsPersistentActorRegistry\n ? new ResidencyClient({\n config: {\n format: RESIDENT_HOST_FORMAT,\n rootId: mainAgentId,\n sessionId,\n cwd: context.cwd,\n projectRoot,\n meshRoot,\n actorRoot: actorRoots.project,\n sessionActorRoot: actorRoots.session,\n residencyRoot: residentRoot(meshRoot, mainAgentId),\n fullCodeMode: this.#config.fullCodeMode,\n agents: structuredClone(this.#config.agents),\n mesh: structuredClone(this.#config.mesh),\n retention: structuredClone(this.#config.retention),\n workerPath: this.#paths?.worker ?? fileURLToPath(new URL(\"./worker.js\", import.meta.url)),\n fabricExtensionPath: this.#paths?.extension ?? fileURLToPath(new URL(\"./index.js\", import.meta.url)),\n ompBinary: resolveOmpBinary(),\n claudeBinary:\n process.env.OMP_FABRIC_CLAUDE_BINARY ?? this.#config.agents.claude.binary,\n vedaBinary:\n process.env.OMP_FABRIC_VEDA_BINARY ?? this.#config.agents.veda.binary,\n models: ompModelState(),\n modelGuidance: [],\n },\n mesh: this.#mesh,\n participants: this.#participants,\n mainAgent,\n ompModelState,\n ...(this.#paths ? { hostPath: this.#paths.residentHost } : {}),\n })\n : undefined;\n const firstSeenAgents = new Map<string, number>();\n if (mainAgent.local) {\n this.#participants.registerSource(() => [\n this.#participants!.root(mainAgent.info(context)),\n ]);\n }\n this.#participants.registerSource(() =>\n agentParticipantRecords(\n this.#agents!.listForUi(),\n mainAgentId,\n hostId,\n identity.id,\n identity.id,\n firstSeenAgents,\n ),\n );\n this.#participants.registerSource(() =>\n this.#actors!.listOwned().map((actor) =>\n actorParticipantRecord(actor, mainAgentId, hostId, identity.id, identity.id),\n ),\n );\n this.#agents.subscribeUi(() => this.#participants?.scheduleRefresh());\n this.#actors.subscribe(() => this.#participants?.scheduleRefresh());\n const agentsProvider = new AgentsProvider(\n this.#agents,\n this.#actors,\n this.#globalActors,\n mainAgent,\n this.#participants,\n this.#control,\n this.#lifecycle,\n () => this.#config?.ui.showAgentToolPreview ?? true,\n this.#residency,\n false,\n () => this.#config?.models ?? DEFAULT_FABRIC_CONFIG.models,\n );\n this.#agentsProvider = agentsProvider;\n this.#control.start((command, from, signal) =>\n agentsProvider.acceptControl(command, from, signal));\n try {\n await this.#participants.start();\n } catch (error) {\n const detail = error instanceof Error ? error.message : String(error);\n console.warn(\n `[omp-fabric] Initial mesh publish failed (${detail}); the participant heartbeat will keep retrying.`,\n );\n if (context.hasUI) {\n context.ui.notify(\n `OMP Fabric could not reach the mesh (${detail}); retrying in the background.`,\n \"warning\",\n );\n }\n }\n this.#lifecycle.start();\n this.#residency?.start();\n await installBuiltin(createProviderComponent({\n provider: \"agents\",\n description: \"Agents, actors, lifecycle delivery, and residency control\",\n create: () => agentsProvider,\n }));\n if (this.#config.memory.enabled) {\n const sessionFile = context.sessionManager.getSessionFile();\n const memoryContext: MemoryProviderContext = {\n agentDir: resolveAgentDir(),\n cwd: context.cwd,\n config: this.#config.memory,\n sessionId,\n ...(sessionFile ? { sessionFile } : {}),\n getLiveBranch: () => ({\n entries: context.sessionManager.getBranch(),\n leafId: context.sessionManager.getLeafId(),\n }),\n };\n await installBuiltin(createProviderComponent({\n provider: \"memory\",\n description: \"Session memory index and source hydration\",\n create: () => new MemoryProvider(memoryContext),\n }));\n } else {\n this.#registry.markUnavailable(\n \"memory\",\n 'disabled by configuration (memory.enabled=false); set \"memory\": { \"enabled\": true } in .omp/fabric.json or the agent fabric.json to enable memory.* actions',\n );\n }\n const expectedBuiltinProviders = new Set<string>([\n ...(effectiveFullCodeMode ? [\"omp\"] : []),\n ...(capturedToolsProvider ? [\"extensions\"] : []),\n \"mcp\",\n ...(this.#config.mesh.enabled ? [\"mesh\", \"state\"] : []),\n \"schema\",\n \"compact\",\n \"agents\",\n ...(this.#config.memory.enabled ? [\"memory\"] : []),\n ]);\n builtinManifest.assertActive(expectedBuiltinProviders, this.#registry);\n for (const provider of this.#externalProviders.values()) {\n this.#registry.register(provider);\n }\n this.#execution = new FabricExecutionService(\n this.#registry,\n this.#config,\n this.activity,\n this.#schema,\n undefined,\n this.sessionApprovals,\n this.capturedTools,\n );\n const discovery: FabricProviderDiscovery = {\n version: 1,\n register: (provider, options) => this.registerExternal(provider, options),\n };\n this.omp.events.emit(FABRIC_PROVIDER_DISCOVER_EVENT, discovery);\n const componentDiscovery: FabricComponentDiscovery = {\n version: 1,\n register: (component, options) => this.registerExternalComponent(component, options),\n };\n this.omp.events.emit(FABRIC_COMPONENT_DISCOVER_EVENT, componentDiscovery);\n await this.#componentLoader.reconcile(enforceSchema ? [] : this.#config.components);\n const inheritedRequirements = inheritedCapabilityRequirements();\n const inheritedDigest = process.env.OMP_FABRIC_CAPABILITY_DIGEST;\n const hasInheritedCommit =\n process.env.OMP_FABRIC_CAPABILITY_REQUIREMENTS !== undefined && Boolean(inheritedDigest);\n if (inheritedRequirements.length > 0 || hasInheritedCommit) {\n const lease = await this.#registry.acquireCapabilityView(inheritedRequirements, {\n cwd: context.cwd,\n signal: undefined,\n parentToolCallId: \"fabric-capability-commit\",\n nestedToolCallId: \"fabric-capability-commit\",\n extensionContext: context,\n update() {},\n });\n if (!lease.satisfied || !lease.view) {\n await lease.release();\n throw new Error(\n `Required Fabric capabilities are unavailable: ${lease.missing.join(\", \")}`,\n );\n }\n const expectedDigest = inheritedDigest;\n if (expectedDigest && lease.view.semanticDigest !== expectedDigest) {\n await lease.release();\n throw new Error(\n `Fabric capability commitment mismatch: expected ${expectedDigest}, resolved ${lease.view.semanticDigest}`,\n );\n }\n this.#sessionCapabilityLease = lease;\n this.#execution.setCapabilityView(lease.view);\n }\n this.#repairs = new RepairCompiler({\n agentDir: resolveAgentDir(),\n enabled: this.#config.repairs.enabled,\n });\n // Commit the stable catalog surface before promotion can reach the\n // active compiler: an active compiler whose surface has not been\n // committed yet must never persist under a mid-reconcile catalog.\n this.#refreshRepairCatalog();\n setActiveRepairCompiler(this.#repairs);\n // The compiled entropy surface loads beside the repair table: every\n // enforcement consult re-proves the recorded base digest against the\n // live declared schema, so the overlay follows the live surface. A\n // damaged artifact keeps enforcement off and surfaces in /fabric entropy.\n setActiveCompiledSurface(\n this.#config.entropy.compile ? loadCompiledSurface(resolveAgentDir()).file : undefined,\n );\n }\n\n async ensure(context: ExtensionContext): Promise<void> {\n if (!this.initialized || this.#cwd !== context.cwd) await this.initialize(context);\n }\n\n // Accepts the config FabricState just loaded so a /fabric settings save\n // costs one loadFabricConfig instead of two. The runtime still stamps\n // schema.mode from its own previous config, preserving the existing\n // in-memory override chain (state and runtime share the same preserved\n // mode by construction: the runtime's config originates from FabricState).\n // Ephemeral schema mode override: mutates the live config in place so the\n // per-call readers (SchemaController.authorize, the top-level tool gate,\n // ExecutionService's runtime selection) see the change immediately without\n // a provider-topology rebuild. FabricState owns the coupling rules.\n setSchemaMode(mode: FabricSchemaMode, executorRuntime: FabricConfig[\"executor\"][\"runtime\"]): void {\n if (!this.#config) return;\n this.#config.schema.mode = mode;\n this.#config.executor.runtime = executorRuntime;\n }\n\n reloadConfig(context: ExtensionContext, next: FabricConfig): void {\n if (!this.#config || !this.#cwd) return;\n next.schema.mode = this.#config.schema.mode;\n const previousComponents = structuredClone(this.#config.components);\n deepAssign(this.#config as unknown as Record<string, unknown>, next as unknown as Record<string, unknown>);\n // The persisted master switch wins over any live arm: disabling prewalk\n // via /fabric settings (or an external config edit followed by a reload)\n // cancels the arm so no later boundary can claim behind the user's back.\n if (next.prewalk.enabled === false && this.prewalk.status().state !== \"idle\") {\n this.prewalk.cancel();\n this.prewalkDrift.drop(context.sessionManager.getSessionId());\n if (context.hasUI) context.ui.setStatus(\"fabric-prewalk\", undefined);\n }\n void this.#componentLoader?.reconcile(next.components).catch((error) => {\n if (this.#config) this.#config.components = previousComponents;\n const detail = error instanceof Error ? error.message : String(error);\n if (context.hasUI) context.ui.notify(`OMP Fabric component reload failed: ${detail}`, \"error\");\n });\n }\n\n async claimHandoff(\n execution: FabricExecutionResult,\n sessionId: string,\n resultFormat: FabricResultFormat,\n outerToolCallId: string,\n ): Promise<PendingFabricHandoff | undefined> {\n // Defense in depth behind cancel-at-disable: an arm that predates a\n // config edit must never claim once the master switch is off.\n if (this.#config?.prewalk.enabled === false) return undefined;\n let pending = claimFabricHandoff(this.prewalk, execution, sessionId, resultFormat);\n if (!pending && this.#config?.prewalk.detectShellWrites) {\n pending = await this.#claimShellWriteHandoff(execution, sessionId, resultFormat);\n }\n if (pending) {\n this.activity.resume(outerToolCallId);\n this.activity.beginCall(outerToolCallId, {\n callId: pending.audit.nestedToolCallId,\n ref: pending.audit.ref,\n args: pending.args,\n });\n }\n return pending;\n }\n\n // Filesystem fallback for writes audits cannot attribute (shell heredocs,\n // sed -i, formatter binaries). Gated on a successful OMP shell call in the program\n // so read-only scans never pay the stat walk, and external saves can only\n // mis-fire inside a bash-running window. The tracker refreshes its baseline\n // on every evaluation, claimed or not, so one change never fires twice.\n async #claimShellWriteHandoff(\n execution: FabricExecutionResult,\n sessionId: string,\n resultFormat: FabricResultFormat,\n ): Promise<PendingFabricHandoff | undefined> {\n if (!this.prewalk.isArmed(sessionId) || !this.#cwd) return undefined;\n if (!execution.audits.some((audit) => isOmpShellRef(audit.ref) && audit.success === true)) {\n return undefined;\n }\n const drift = await this.prewalkDrift.evaluate(sessionId, this.#cwd);\n if (!drift || drift.files.length === 0) return undefined;\n return claimFabricFsDriftHandoff(this.prewalk, execution, sessionId, drift, resultFormat);\n }\n\n async runHandoffAtBoundary(\n pending: PendingFabricHandoff,\n outerToolResult: AgentToolResultMessage,\n context: ExtensionContext,\n ): Promise<Record<string, unknown>> {\n if (!this.#agentsProvider) throw new Error(\"OMP Fabric has not initialized\");\n const runId = outerToolResult.toolCallId;\n const callId = pending.audit.nestedToolCallId;\n const result = await runFabricHandoffAtBoundary(\n this.prewalk,\n this.#agentsProvider,\n this.omp,\n pending,\n outerToolResult,\n context,\n (update) => this.activity.updateCall(runId, callId, update),\n );\n const succeeded = result.completed === true || result.continued === true;\n const error = typeof result.error === \"string\" ? result.error : undefined;\n this.activity.finishCall(runId, callId, {\n success: succeeded,\n result,\n ...(pending.audit.preview !== undefined ? { preview: pending.audit.preview } : {}),\n ...(error ? { error } : {}),\n });\n this.activity.finish(runId, succeeded, error);\n return result;\n }\n\n noteMainActivity(context: ExtensionContext): void {\n this.#actors?.noteMainActivity(context.isIdle());\n this.#participants?.scheduleRefresh();\n }\n\n dispatchHostEvent(\n event: FabricActorHostEvent,\n payload: unknown,\n context: ExtensionContext,\n ): number {\n if (\n !this.#actors ||\n !this.#config?.mesh.enabled ||\n this.#config.schema.mode === \"enforce\"\n ) return 0;\n const idle = context.isIdle();\n if (!this.#actors.observeHostEvent(event, idle)) return 0;\n const branch = context.sessionManager.getBranch();\n const { digest, transcript } = buildActorContext(\n branch as unknown[],\n this.#config.mesh.actorContextEntries,\n this.#config.mesh.eventContextChars,\n );\n const prepared = prepareFabricActorHostPayload(\n payload,\n this.#config.mesh.eventContextChars,\n );\n const preparedContext = prepareFabricActorHostPayload(\n { digest, transcript },\n this.#config.mesh.eventContextChars,\n ).payload;\n const safeContext = isPlainObject(preparedContext)\n ? preparedContext\n : { digest: {}, transcript: [String(preparedContext)] };\n return this.#actors.dispatchObservedHostEvent(\n event,\n {\n event,\n session: { id: context.sessionManager.getSessionId(), cwd: context.cwd },\n digest: safeContext.digest ?? {},\n transcript: safeContext.transcript ?? [],\n signal: {\n payload: prepared.payload,\n ...(prepared.media.length > 0 ? { media: prepared.media } : {}),\n idle,\n observedAt: Date.now(),\n },\n },\n prepared.images,\n );\n }\n\n #observeComponentTransitions(componentId?: string): void {\n if (!this.#suppressResidentGuidanceSync) {\n this.#residency?.updateModelGuidance(this.modelGuidance());\n }\n let components: FabricComponentInfo[];\n if (componentId) {\n try {\n components = this.#componentSupervisor\n ? [this.#componentSupervisor.status(componentId)]\n : [];\n } catch {\n this.#componentTransitionSignatures.delete(componentId);\n return;\n }\n } else {\n components = this.#componentSupervisor?.list() ?? [];\n }\n const visible = componentId ? undefined : new Set<string>();\n for (const component of components) {\n visible?.add(component.id);\n const signature = [\n component.state,\n component.revision,\n component.targetDigest ?? \"\",\n component.missing.join(\"\\u0000\"),\n component.optionalMissing.join(\"\\u0000\"),\n component.error ?? \"\",\n component.cleanupErrors?.join(\"\\u0000\") ?? \"\",\n JSON.stringify(component.guidance ?? []),\n ].join(\"\\u0001\");\n if (this.#componentTransitionSignatures.get(component.id) === signature) continue;\n this.#componentTransitionSignatures.set(component.id, signature);\n const publication = this.publishHostLifecycle(\"component.state\", component)\n .catch(() => undefined);\n this.#componentTransitionPublications.add(publication);\n void publication.finally(() => this.#componentTransitionPublications.delete(publication));\n }\n if (visible) {\n for (const id of this.#componentTransitionSignatures.keys()) {\n if (!visible.has(id)) this.#componentTransitionSignatures.delete(id);\n }\n }\n }\n\n async publishHostLifecycle(\n event: FabricLifecycleEventType,\n payload: unknown,\n ): Promise<void> {\n if (\n !this.#lifecycle ||\n !this.#identity ||\n this.#identity.kind !== \"main\" ||\n !this.#participants\n ) return;\n const self = this.#participants.self();\n const metadata = lifecycleMetadata(event, payload);\n await this.#lifecycle.publish({\n source: {\n id: self.id,\n name: self.name,\n kind: self.kind,\n rootId: self.rootId,\n runner: self.runner,\n ownerHostId: self.ownerHostId,\n ownerIdentityId: self.ownerIdentityId,\n },\n event,\n occurredAt: lifecycleObservedAt(payload),\n ...(metadata !== undefined ? { data: metadata } : {}),\n });\n }\n\n registerExternal(provider: FabricProvider, options: { overwrite?: boolean } = {}): void {\n if (\n provider.name === \"fabric\" ||\n provider.name === \"components\" ||\n FABRIC_COMPONENT_PROVIDER_NAMES.some((name) => name === provider.name)\n ) {\n throw new Error(`Reserved Fabric provider name: ${provider.name}`);\n }\n if (this.#externalProviders.has(provider.name) && !options.overwrite) {\n throw new Error(`Fabric provider already registered: ${provider.name}`);\n }\n this.#externalProviders.set(provider.name, provider);\n if (this.#registry) this.#registry.register(provider, options);\n }\n\n registerExternalComponent(\n component: FabricComponentDefinition,\n options: { overwrite?: boolean } = {},\n ): void {\n if (component.name.startsWith(FABRIC_PROVIDER_COMPONENT_PREFIX)) {\n throw new Error(`Reserved Fabric component name: ${component.name}`);\n }\n this.componentCatalog.register(component, options);\n }\n\n async settleComponents(): Promise<void> {\n await this.#componentLoader?.settle();\n }\n\n async shutdown(): Promise<void> {\n this.#suppressResidentGuidanceSync = true;\n await this.#deactivateRepairs();\n clearActiveCompiledSurface();\n await this.#participants?.quiesce().catch(() => undefined);\n await this.#componentLoader?.close();\n await Promise.allSettled([...this.#componentTransitionPublications]);\n await this.#sessionCapabilityLease?.release().catch(() => undefined);\n this.#sessionCapabilityLease = undefined;\n await this.#lifecycle?.close();\n await this.#control?.close();\n await this.#residency?.close();\n await this.#actors?.close();\n await this.#agents?.close();\n try {\n await this.#registry?.close();\n } finally {\n await this.#participants?.close();\n }\n this.#registry = undefined;\n this.#mcpProvider = undefined;\n this.#config = undefined;\n this.#execution = undefined;\n this.#agents = undefined;\n this.#actors = undefined;\n this.#globalActors = undefined;\n this.#mesh = undefined;\n this.#identity = undefined;\n this.#mainAgent = undefined;\n this.#participants = undefined;\n this.#control = undefined;\n this.#lifecycle = undefined;\n this.#residency = undefined;\n this.#agentsProvider = undefined;\n this.#compact = undefined;\n this.#schema = undefined;\n this.#componentSupervisor = undefined;\n this.#componentLoader = undefined;\n this.#componentTransitionSignatures.clear();\n this.#componentTransitionPublications.clear();\n this.#sessionCapabilityLease = undefined;\n this.#unsubscribeCapturedCatalog?.();\n this.#unsubscribeCapturedCatalog = undefined;\n this.componentCatalog.clear();\n this.#builtinComponentNames.clear();\n this.#cwd = undefined;\n this.activity.reset();\n this.#widgetDismissedAt = 0;\n this.#externalProviders.clear();\n this.prewalk.cancel();\n this.prewalkDrift.clear();\n }\n\n // Publish a best-effort mesh event to the durable `fabric.compact` topic so\n // other roots, agents, and actors can observe compaction transitions.\n // Activity-only sessions (mesh disabled) silently skip this.\n #publishCompactEvent(kind: string, data: CompactPendingIntent | CompactLastCommit): void {\n if (!this.#mesh || !this.#identity || !this.#config?.mesh.enabled) return;\n try {\n void this.#mesh.publish({\n topic: \"fabric.compact\",\n kind,\n from: this.#identity,\n data,\n });\n } catch {\n // Best-effort: a full event log or an oversized payload must not break\n // the host compaction path.\n }\n }\n\n #refreshRepairCatalog(): void {\n if (!this.#repairs || !this.#registry) return;\n // Capture suspension (session_start, /fabric reload) clears the catalog\n // only transiently: the same tools refill on re-arm, so recomputing here\n // would flip the digest to an empty-catalog value that promotion could\n // then persist, destroying the stable catalog's table. Freeze the surface\n // instead; the refill re-commits it (or legitimately starts a new one).\n if (this.capturedTools.suspended) return;\n this.#repairs.setCatalogSurface({\n providers: this.#registry.providers().map((provider) => provider.name),\n capturedTools: this.capturedTools.list().map((entry) => entry.name),\n });\n }\n\n async #deactivateRepairs(): Promise<void> {\n const repairs = this.#repairs;\n this.#repairs = undefined;\n clearActiveRepairCompiler(repairs);\n await repairs?.flush();\n }\n\n async #closeInternal(): Promise<void> {\n await this.#deactivateRepairs();\n if (!this.#registry) return;\n await this.#participants?.quiesce().catch(() => undefined);\n await this.#componentLoader?.close();\n await Promise.allSettled([...this.#componentTransitionPublications]);\n await this.#sessionCapabilityLease?.release().catch(() => undefined);\n this.#sessionCapabilityLease = undefined;\n await this.#lifecycle?.close();\n await this.#control?.close();\n await this.#residency?.close();\n await this.#actors?.close();\n await this.#agents?.close();\n const externalNames = new Set(this.#externalProviders.keys());\n try {\n await this.#registry.close(externalNames);\n } finally {\n await this.#participants?.close();\n }\n this.#registry = undefined;\n this.#mcpProvider = undefined;\n this.#execution = undefined;\n this.#agents = undefined;\n this.#actors = undefined;\n this.#mesh = undefined;\n this.#identity = undefined;\n this.#mainAgent = undefined;\n this.#participants = undefined;\n this.#control = undefined;\n this.#lifecycle = undefined;\n this.#residency = undefined;\n this.#agentsProvider = undefined;\n this.#compact = undefined;\n this.#schema = undefined;\n this.#componentSupervisor = undefined;\n this.#componentLoader = undefined;\n this.#componentTransitionSignatures.clear();\n this.#componentTransitionPublications.clear();\n this.#sessionCapabilityLease = undefined;\n this.#unsubscribeCapturedCatalog?.();\n this.#unsubscribeCapturedCatalog = undefined;\n }\n}\n\nconst scalarMetadata = (\n value: unknown,\n keys: readonly string[],\n): Record<string, string | number | boolean | null> | undefined => {\n if (typeof value !== \"object\" || value === null || Array.isArray(value)) return undefined;\n const source = value as Record<string, unknown>;\n const metadata: Record<string, string | number | boolean | null> = {};\n for (const key of keys) {\n const nested = source[key];\n if (\n typeof nested === \"string\" ||\n typeof nested === \"number\" ||\n typeof nested === \"boolean\" ||\n nested === null\n ) metadata[key] = nested;\n }\n return Object.keys(metadata).length > 0 ? metadata : undefined;\n};\n\nconst lifecycleMetadata = (\n event: FabricLifecycleEventType,\n payload: unknown,\n): Record<string, string | number | boolean | null> | undefined => {\n switch (event) {\n case \"omp.input\":\n return scalarMetadata(payload, [\"source\", \"streamingBehavior\"]);\n case \"omp.agent_end\":\n return scalarMetadata(payload, [\"isTerminal\"]);\n case \"omp.turn_end\":\n return scalarMetadata(payload, [\"turnIndex\", \"timestamp\"]);\n case \"omp.tool_error\":\n return scalarMetadata(payload, [\"toolCallId\", \"toolName\"]);\n case \"omp.session_compact\":\n return scalarMetadata(payload, [\"reason\", \"willRetry\"]);\n case \"component.state\":\n return scalarMetadata(payload, [\n \"id\",\n \"component\",\n \"parentId\",\n \"state\",\n \"guarantee\",\n \"revision\",\n \"targetDigest\",\n ]);\n default:\n return undefined;\n }\n};\n\nconst lifecycleObservedAt = (payload: unknown): number => {\n if (typeof payload !== \"object\" || payload === null || Array.isArray(payload)) return Date.now();\n const timestamp = (payload as Record<string, unknown>).timestamp;\n return typeof timestamp === \"number\" && Number.isFinite(timestamp) ? timestamp : Date.now();\n};\n\nconst isPlainObject = (value: unknown): value is Record<string, unknown> =>\n typeof value === \"object\" && value !== null && !Array.isArray(value);\n\nconst deepAssign = (\n target: Record<string, unknown>,\n source: Record<string, unknown>,\n): void => {\n for (const key of Object.keys(target)) {\n if (!(key in source)) delete target[key];\n }\n for (const [key, value] of Object.entries(source)) {\n const targetValue = target[key];\n if (isPlainObject(value) && isPlainObject(targetValue)) {\n deepAssign(targetValue, value);\n } else {\n target[key] = value;\n }\n }\n};\n", "import { randomUUID } from \"node:crypto\";\nimport fs from \"node:fs\";\nimport path from \"node:path\";\nimport type { FabricCapabilityRequirement } from \"../components/types.js\";\nimport { writeJsonAtomic } from \"../core/atomic-write.js\";\nimport type { FabricAgentTransport } from \"../config.js\";\nimport { isFabricThinking, type FabricThinking } from \"../thinking.js\";\nimport { resolveActorDeliveryPolicy } from \"./delivery-policy.js\";\nimport { FABRIC_ACTOR_HOST_EVENTS } from \"./types.js\";\nimport type {\n FabricActorDelivery,\n FabricActorHostEvent,\n FabricActorRequest,\n FabricActorResponseMode,\n GlobalActorDefinition,\n} from \"./types.js\";\n\nconst ACTOR_NAME_PATTERN = /^[a-zA-Z0-9][a-zA-Z0-9 _.-]{0,59}$/;\nconst TOPIC_PATTERN = /^[a-zA-Z0-9][a-zA-Z0-9._:/-]{0,127}$/;\nconst HOST_EVENTS: ReadonlySet<FabricActorHostEvent> = new Set(FABRIC_ACTOR_HOST_EVENTS);\nconst DELIVERIES = new Set<FabricActorDelivery>([\"mailbox\", \"steer\", \"followUp\", \"nextTurn\"]);\nconst RESPONSE_MODES = new Set<FabricActorResponseMode>([\"text\", \"directive\"]);\nconst normalizeRequirements = (value: unknown): FabricCapabilityRequirement[] | undefined => {\n if (value === undefined) return undefined;\n if (!Array.isArray(value) || value.length > 128) {\n throw new Error(\"Invalid global actor capability requirements\");\n }\n const normalized = new Map<string, boolean>();\n for (const item of value) {\n const ref = typeof item === \"string\"\n ? item.trim()\n : typeof item === \"object\" && item !== null && !Array.isArray(item) &&\n typeof (item as { ref?: unknown }).ref === \"string\"\n ? (item as { ref: string }).ref.trim()\n : \"\";\n if (ref.length > 256 || !ref.includes(\".\") || ref.startsWith(\".\") || ref.endsWith(\".\")) {\n throw new Error(\"Invalid global actor capability requirement\");\n }\n const optional = typeof item === \"object\" && item !== null &&\n (item as { optional?: unknown }).optional === true;\n normalized.set(ref, (normalized.get(ref) ?? true) && optional);\n }\n return [...normalized]\n .sort(([left], [right]) => left.localeCompare(right))\n .map(([ref, optional]) => ({ ref, ...(optional ? { optional: true } : {}) }));\n};\n\nconst TRANSPORTS = new Set<FabricAgentTransport>([\n \"auto\",\n \"process\",\n \"tmux\",\n \"screen\",\n \"localterm\",\n \"herdr\",\n]);\n\ninterface RegistryFile {\n format: 1;\n actors: GlobalActorDefinition[];\n}\n\nconst atomicWrite = (filePath: string, value: unknown): void => {\n writeJsonAtomic(filePath, value, { space: 2 });\n};\n\nconst clone = <T>(value: T): T => structuredClone(value);\n\n/**\n * Resolve a partial id (unique prefix) or an exact name to a definition.\n * Returns undefined when nothing matches, and throws on an ambiguous prefix.\n */\nconst resolveDefinition = (\n actors: Map<string, GlobalActorDefinition>,\n idOrName: string,\n): GlobalActorDefinition | undefined => {\n const exact = actors.get(idOrName);\n if (exact) return exact;\n const matches = [...actors.values()].filter(\n (actor) => actor.id.startsWith(idOrName) || actor.name === idOrName,\n );\n if (matches.length === 1 && matches[0]) return matches[0];\n if (matches.length > 1) throw new Error(`Ambiguous global actor: ${idOrName}`);\n return undefined;\n};\n\n/**\n * A project-independent library of actor templates. Templates carry only an\n * actor definition (name, instructions, subscriptions, and run settings) plus\n * identity/timestamps \u2014 never any history. They are not live actors: importing\n * a template into a project creates a fresh live actor with no inherited\n * session, mailbox, or run logs.\n *\n * The registry lives in the user's agent dir (machine-global), independent of\n * any project or mesh, so the same templates are available across every\n * project. Operations are pure file I/O and do not require the mesh to be\n * enabled; only importing (which creates a live actor via ActorManager) does.\n * The registry is read into memory once at construction; run `/fabric reload`\n * to pick up templates added by other OMP sessions. Writes are atomic (write\n * to a temp file then rename) so concurrent sessions cannot corrupt the\n * store, though truly simultaneous edits are last-write-wins.\n */\nexport class GlobalActorRegistry {\n readonly #actors = new Map<string, GlobalActorDefinition>();\n readonly #path: string;\n readonly #maxBytes: number;\n\n constructor(agentDir: string, maxInstructionsBytes: number) {\n this.#path = path.join(agentDir, \"fabric\", \"actors\", \"global-actors.json\");\n this.#maxBytes = maxInstructionsBytes;\n this.#load();\n }\n\n list(): GlobalActorDefinition[] {\n return [...this.#actors.values()].map(clone);\n }\n\n resolve(idOrName: string): GlobalActorDefinition | undefined {\n const found = resolveDefinition(this.#actors, idOrName);\n return found ? clone(found) : undefined;\n }\n\n /**\n * Save a definition to the global registry. If a template with the same name\n * already exists, throws unless `overwrite` is true (in which case the\n * existing template is updated in place, keeping its id). Returns the stored\n * definition.\n */\n create(def: FabricActorRequest, overwrite = false): GlobalActorDefinition {\n const validated = this.#validate(def);\n const existing = [...this.#actors.values()].find((actor) => actor.name === validated.name);\n if (existing) {\n if (!overwrite) {\n throw new Error(`A global actor named ${validated.name} already exists (${existing.id})`);\n }\n const updated: GlobalActorDefinition = {\n ...existing,\n ...validated,\n id: existing.id,\n createdAt: existing.createdAt,\n updatedAt: Date.now(),\n };\n this.#actors.set(existing.id, updated);\n this.#save();\n return clone(updated);\n }\n const created: GlobalActorDefinition = {\n ...validated,\n id: randomUUID().replaceAll(\"-\", \"\"),\n createdAt: Date.now(),\n updatedAt: Date.now(),\n };\n this.#actors.set(created.id, created);\n this.#save();\n return clone(created);\n }\n\n /**\n * Apply a partial patch to a stored template (e.g. new instructions). Only\n * the supplied fields are replaced; the rest are preserved. Re-validates any\n * changed field.\n */\n update(idOrName: string, patch: Partial<FabricActorRequest>): GlobalActorDefinition {\n const existing = resolveDefinition(this.#actors, idOrName);\n if (!existing) throw new Error(`Unknown global actor: ${idOrName}`);\n const merged: FabricActorRequest = {\n name: patch.name ?? existing.name,\n instructions: patch.instructions ?? existing.instructions,\n events: patch.events ?? existing.events,\n topics: patch.topics ?? existing.topics,\n delivery: patch.delivery ?? existing.delivery,\n responseMode: patch.responseMode ?? existing.responseMode,\n triggerTurn: patch.triggerTurn ?? existing.triggerTurn,\n coalesce: patch.coalesce ?? existing.coalesce,\n ...(patch.residency !== undefined\n ? { residency: patch.residency }\n : existing.residency\n ? { residency: existing.residency }\n : {}),\n runner: patch.runner ?? existing.runner,\n ...(patch.model !== undefined ? { model: patch.model } : existing.model ? { model: existing.model } : {}),\n ...(patch.thinking !== undefined ? { thinking: patch.thinking } : existing.thinking ? { thinking: existing.thinking } : {}),\n ...(patch.tools !== undefined ? { tools: patch.tools } : existing.tools ? { tools: existing.tools } : {}),\n ...(patch.transport !== undefined ? { transport: patch.transport } : existing.transport ? { transport: existing.transport } : {}),\n ...(patch.timeoutMs !== undefined ? { timeoutMs: patch.timeoutMs } : existing.timeoutMs ? { timeoutMs: existing.timeoutMs } : {}),\n ...(patch.extensions !== undefined\n ? { extensions: patch.extensions }\n : typeof existing.extensions === \"boolean\"\n ? { extensions: existing.extensions }\n : {}),\n ...(patch.validWhile !== undefined\n ? { validWhile: patch.validWhile }\n : existing.validWhile\n ? { validWhile: existing.validWhile }\n : {}),\n };\n const validated = this.#validate(merged);\n if (validated.name !== existing.name) {\n const clash = [...this.#actors.values()].find(\n (actor) => actor.id !== existing.id && actor.name === validated.name,\n );\n if (clash) {\n throw new Error(`A global actor named ${validated.name} already exists (${clash.id})`);\n }\n }\n const updated: GlobalActorDefinition = {\n ...validated,\n id: existing.id,\n createdAt: existing.createdAt,\n updatedAt: Date.now(),\n };\n this.#actors.set(existing.id, updated);\n this.#save();\n return clone(updated);\n }\n\n remove(idOrName: string): { removed: boolean } {\n const existing = resolveDefinition(this.#actors, idOrName);\n if (!existing) return { removed: false };\n this.#actors.delete(existing.id);\n this.#save();\n return { removed: true };\n }\n\n /**\n * Strip identity/timestamps from a stored template to produce the request\n * shape ActorManager.create expects. Optionally rename the imported actor so\n * a template can be stamped into a project under a different name (e.g. to\n * avoid a collision with a live actor).\n */\n toRequest(def: GlobalActorDefinition, as?: string): FabricActorRequest {\n const name = as?.trim() || def.name;\n const request: FabricActorRequest = {\n name,\n instructions: def.instructions,\n events: [...def.events],\n topics: [...def.topics],\n delivery: def.delivery,\n responseMode: def.responseMode,\n triggerTurn: def.triggerTurn,\n coalesce: def.coalesce,\n ...(def.residency ? { residency: def.residency } : {}),\n runner: def.runner,\n ...(def.model ? { model: def.model } : {}),\n ...(def.thinking ? { thinking: def.thinking } : {}),\n ...(def.tools ? { tools: [...def.tools] } : {}),\n ...(def.transport ? { transport: def.transport } : {}),\n ...(def.timeoutMs ? { timeoutMs: def.timeoutMs } : {}),\n ...(typeof def.extensions === \"boolean\" ? { extensions: def.extensions } : {}),\n ...(def.validWhile ? { validWhile: clone(def.validWhile) } : {}),\n };\n return request;\n }\n\n #validate(def: FabricActorRequest): Omit<GlobalActorDefinition, \"id\" | \"createdAt\" | \"updatedAt\"> {\n const name = def.name.trim();\n if (!ACTOR_NAME_PATTERN.test(name)) throw new Error(`Invalid global actor name: ${def.name}`);\n const instructions = def.instructions;\n if (!instructions.trim()) throw new Error(\"Global actor instructions must not be empty\");\n if (Buffer.byteLength(instructions, \"utf8\") > this.#maxBytes) {\n throw new Error(`Global actor instructions exceed ${this.#maxBytes} bytes`);\n }\n const events = [...new Set(def.events ?? [])];\n for (const event of events) {\n if (!HOST_EVENTS.has(event)) throw new Error(`Unsupported global actor event: ${event}`);\n }\n const topics = [...new Set(def.topics ?? [])];\n for (const topic of topics) {\n if (!TOPIC_PATTERN.test(topic)) throw new Error(`Invalid global actor topic: ${topic}`);\n }\n const deliveryPolicy = resolveActorDeliveryPolicy(def.delivery, def.triggerTurn);\n const responseMode = def.responseMode ?? \"text\";\n if (!RESPONSE_MODES.has(responseMode)) {\n throw new Error(`Invalid global actor response mode: ${def.responseMode}`);\n }\n const coalesce = def.coalesce ?? true;\n const residency = def.residency ?? \"session\";\n if (residency !== \"session\" && residency !== \"durable\") {\n throw new Error(`Invalid global actor residency: ${String(def.residency)}`);\n }\n const runner = def.runner ?? \"omp\";\n if (runner !== \"omp\" && runner !== \"claude\") {\n throw new Error(`Invalid global actor runner: ${String(def.runner)}`);\n }\n const model = typeof def.model === \"string\" && def.model.trim() ? def.model.trim() : undefined;\n const thinking =\n def.thinking !== undefined && isFabricThinking(def.thinking) ? def.thinking : undefined;\n const tools = Array.isArray(def.tools)\n ? [...new Set(def.tools.filter((tool): tool is string => typeof tool === \"string\"))]\n : undefined;\n const transport =\n def.transport !== undefined && TRANSPORTS.has(def.transport) ? def.transport : undefined;\n const timeoutMs = typeof def.timeoutMs === \"number\" ? def.timeoutMs : undefined;\n const extensions = typeof def.extensions === \"boolean\" ? def.extensions : undefined;\n const requires = normalizeRequirements(def.requires);\n const validWhile = def.validWhile?.version === 1 &&\n typeof def.validWhile.source === \"string\" &&\n def.validWhile.source.trim() &&\n def.validWhile.source.length <= 16_000\n ? clone(def.validWhile)\n : undefined;\n if (def.validWhile && !validWhile) throw new Error(\"Invalid global actor validWhile predicate\");\n return {\n name,\n instructions,\n events,\n topics,\n delivery: deliveryPolicy.delivery,\n responseMode,\n triggerTurn: deliveryPolicy.triggerTurn,\n coalesce,\n residency,\n runner,\n ...(model ? { model } : {}),\n ...(thinking ? { thinking } : {}),\n ...(tools ? { tools } : {}),\n ...(transport ? { transport } : {}),\n ...(timeoutMs ? { timeoutMs } : {}),\n ...(extensions !== undefined ? { extensions } : {}),\n ...(requires && requires.length > 0 ? { requires } : {}),\n ...(validWhile ? { validWhile } : {}),\n };\n }\n\n #load(): void {\n let parsed: unknown;\n try {\n parsed = JSON.parse(fs.readFileSync(this.#path, \"utf8\"));\n } catch (error) {\n if (error instanceof Error && \"code\" in error && error.code === \"ENOENT\") return;\n return;\n }\n if (typeof parsed !== \"object\" || parsed === null || Array.isArray(parsed)) return;\n const records = (parsed as { actors?: unknown }).actors;\n if (!Array.isArray(records)) return;\n for (const value of records) {\n if (typeof value !== \"object\" || value === null || Array.isArray(value)) continue;\n const record = value as Partial<GlobalActorDefinition>;\n if (\n typeof record.id !== \"string\" ||\n !/^[a-f0-9]{32}$/.test(record.id) ||\n typeof record.name !== \"string\" ||\n !ACTOR_NAME_PATTERN.test(record.name) ||\n typeof record.instructions !== \"string\" ||\n Buffer.byteLength(record.instructions, \"utf8\") > this.#maxBytes ||\n typeof record.createdAt !== \"number\"\n ) {\n continue;\n }\n const events = Array.isArray(record.events)\n ? record.events.filter((event): event is FabricActorHostEvent => HOST_EVENTS.has(event))\n : [];\n const topics = Array.isArray(record.topics)\n ? record.topics.filter(\n (topic): topic is string => typeof topic === \"string\" && TOPIC_PATTERN.test(topic),\n )\n : [];\n const delivery: FabricActorDelivery =\n record.delivery === \"steer\" || record.delivery === \"followUp\" || record.delivery === \"nextTurn\"\n ? record.delivery\n : \"mailbox\";\n const responseMode: FabricActorResponseMode =\n record.responseMode === \"directive\" ? \"directive\" : \"text\";\n const triggerTurn =\n (delivery === \"steer\" || delivery === \"followUp\") && record.triggerTurn === true;\n const coalesce = record.coalesce !== false;\n const residency = record.residency === \"durable\" ? \"durable\" : \"session\";\n const runner = record.runner === \"claude\" ? \"claude\" : \"omp\";\n const thinking: FabricThinking | undefined = isFabricThinking(record.thinking)\n ? record.thinking\n : undefined;\n const tools = Array.isArray(record.tools)\n ? record.tools.filter((tool): tool is string => typeof tool === \"string\")\n : undefined;\n const transport: FabricAgentTransport | undefined =\n record.transport !== undefined && TRANSPORTS.has(record.transport) ? record.transport : undefined;\n const timeoutMs = typeof record.timeoutMs === \"number\" ? record.timeoutMs : undefined;\n const extensions = typeof record.extensions === \"boolean\" ? record.extensions : undefined;\n let requires: FabricCapabilityRequirement[] | undefined;\n try {\n requires = normalizeRequirements(record.requires);\n } catch {\n continue;\n }\n const validWhile = record.validWhile?.version === 1 &&\n typeof record.validWhile.source === \"string\" &&\n record.validWhile.source.length <= 16_000\n ? clone(record.validWhile)\n : undefined;\n const def: GlobalActorDefinition = {\n id: record.id,\n name: record.name,\n instructions: record.instructions,\n events,\n topics,\n delivery,\n responseMode,\n triggerTurn,\n coalesce,\n residency,\n runner,\n createdAt: record.createdAt,\n updatedAt: typeof record.updatedAt === \"number\" ? record.updatedAt : record.createdAt,\n ...(typeof record.model === \"string\" && record.model ? { model: record.model } : {}),\n ...(thinking ? { thinking } : {}),\n ...(tools ? { tools } : {}),\n ...(transport ? { transport } : {}),\n ...(timeoutMs ? { timeoutMs } : {}),\n ...(extensions !== undefined ? { extensions } : {}),\n ...(requires && requires.length > 0 ? { requires } : {}),\n ...(validWhile ? { validWhile } : {}),\n };\n this.#actors.set(def.id, def);\n }\n }\n\n #save(): void {\n const file: RegistryFile = { format: 1, actors: [...this.#actors.values()] };\n atomicWrite(this.#path, file);\n }\n}\n", "interface ActorContentBlock {\n type?: string;\n text?: string;\n thinking?: string;\n name?: string;\n arguments?: unknown;\n redacted?: boolean;\n mimeType?: string;\n}\n\ninterface ActorMessage {\n role: string;\n content: unknown;\n toolName?: string;\n isError?: boolean;\n command?: string;\n output?: string;\n exitCode?: number;\n}\n\ninterface ActorDigest {\n filesTouched: string[];\n openErrors: number;\n lastError: string;\n lastUserRequest: string;\n}\n\nexport interface ActorContext {\n digest: ActorDigest;\n transcript: string[];\n}\n\nconst FILE_EXT =\n \"ts|tsx|js|jsx|mjs|cjs|json|md|markdown|css|scss|html|vue|svelte|py|rs|go|java|kt|swift|rb|php|sh|bash|yaml|yml|toml|sql|env|lock\";\nconst PATH_RE = new RegExp('([\"\\'`])([\\\\w@./-]+\\\\.(?:' + FILE_EXT + '))\\\\1', \"g\");\n\nconst clip = (value: string, max: number): string => {\n const text = value.replace(/\\s+/g, \" \").trim();\n return text.length > max ? text.slice(0, max - 1) + \"\\u2026\" : text;\n};\n\nconst firstLine = (value: string): string => {\n const i = value.indexOf(\"\\n\");\n return i === -1 ? value : value.slice(0, i);\n};\n\nconst textOf = (content: unknown): string => {\n if (typeof content === \"string\") return content;\n if (Array.isArray(content)) {\n return content\n .map((part) =>\n part && typeof part === \"object\" && (part as ActorContentBlock).type === \"text\"\n ? String((part as ActorContentBlock).text ?? \"\")\n : \"\",\n )\n .join(\"\");\n }\n return \"\";\n};\n\nconst isMessage = (value: unknown): value is ActorMessage =>\n typeof value === \"object\" && value !== null && \"role\" in value;\n\nconst extractMessages = (branch: unknown[]): ActorMessage[] => {\n const messages: ActorMessage[] = [];\n let foundWrapped = false;\n for (const entry of branch) {\n if (entry && typeof entry === \"object\" && (entry as { type?: unknown }).type === \"message\") {\n const message = (entry as { message?: unknown }).message;\n if (isMessage(message)) {\n messages.push(message);\n foundWrapped = true;\n }\n }\n }\n if (foundWrapped) return messages;\n for (const entry of branch) if (isMessage(entry)) messages.push(entry);\n return messages;\n};\n\nconst argHint = (args: unknown): string => {\n if (!args || typeof args !== \"object\") return \"\";\n const a = args as Record<string, unknown>;\n const v = a.file ?? a.path ?? a.pattern ?? a.command ?? a.cmd ?? a.code;\n return typeof v === \"string\" && v ? clip(v, 80) : \"\";\n};\n\nconst scanFiles = (messages: ActorMessage[], cap: number): string[] => {\n const seen = new Set<string>();\n for (const m of messages) {\n let hay = typeof m.content === \"string\" ? m.content : \"\";\n if (Array.isArray(m.content)) {\n for (const part of m.content) {\n if (!part || typeof part !== \"object\") continue;\n const block = part as ActorContentBlock;\n if (block.type === \"text\") hay += \" \" + (block.text ?? \"\");\n else if (block.type === \"toolCall\") hay += \" \" + JSON.stringify(block.arguments ?? {});\n }\n }\n hay += \" \" + (m.command ?? \"\") + \" \" + (m.output ?? \"\");\n PATH_RE.lastIndex = 0;\n let match: RegExpExecArray | null;\n while ((match = PATH_RE.exec(hay)) !== null) {\n if (match[2]) seen.add(match[2]);\n if (seen.size >= cap * 3) break;\n }\n }\n return [...seen].sort().slice(0, cap);\n};\n\nconst buildDigest = (messages: ActorMessage[]): ActorDigest => {\n let openErrors = 0;\n let lastError = \"\";\n let lastUserRequest = \"\";\n for (const m of messages) {\n if (m.role === \"user\") {\n const t = textOf(m.content).trim();\n if (t) lastUserRequest = clip(t, 300);\n } else if (m.role === \"toolResult\" && m.isError) {\n openErrors++;\n lastError = clip(firstLine(textOf(m.content)), 200);\n } else if (m.role === \"bashExecution\" && typeof m.exitCode === \"number\" && m.exitCode !== 0) {\n openErrors++;\n lastError = clip(firstLine(m.output ?? m.command ?? \"\"), 200);\n }\n }\n return { filesTouched: scanFiles(messages, 30), openErrors, lastError, lastUserRequest };\n};\n\nconst compactBlocks = (msg: ActorMessage): string[] => {\n const lines: string[] = [];\n if (msg.role === \"user\") {\n const t = textOf(msg.content).trim();\n if (t) lines.push(`user: ${clip(t, 200)}`);\n } else if (msg.role === \"assistant\") {\n if (Array.isArray(msg.content)) {\n for (const part of msg.content) {\n if (!part || typeof part !== \"object\") continue;\n const block = part as ActorContentBlock;\n if (block.type === \"text\") {\n const t = (block.text ?? \"\").trim();\n if (t) lines.push(`asst: ${clip(t, 200)}`);\n } else if (block.type === \"toolCall\") {\n lines.push(`call: ${block.name ?? \"?\"} ${argHint(block.arguments)}`);\n }\n }\n } else if (typeof msg.content === \"string\") {\n const t = msg.content.trim();\n if (t) lines.push(`asst: ${clip(t, 200)}`);\n }\n } else if (msg.role === \"toolResult\") {\n const t = textOf(msg.content).trim();\n lines.push(`result ${msg.toolName ?? \"\"}: ${clip(firstLine(t), 150)}${msg.isError ? \" [ERR]\" : \"\"}`);\n } else if (msg.role === \"bashExecution\") {\n lines.push(`bash: ${clip(msg.command ?? \"\", 120)} -> ${msg.exitCode ?? \"?\"}`);\n }\n return lines;\n};\n\nconst boundLines = (lines: string[], maxChars: number): string[] => {\n let total = lines.join(\"\\n\").length;\n const out = [...lines];\n while (total > maxChars && out.length > 1) {\n out.shift();\n total = out.join(\"\\n\").length;\n }\n return out;\n};\n\nexport const buildActorContext = (\n branch: unknown[],\n tailCount: number,\n maxChars: number,\n): ActorContext => {\n const messages = extractMessages(branch);\n const digest = buildDigest(messages);\n const lines: string[] = [];\n for (const m of messages.slice(-tailCount)) {\n for (const line of compactBlocks(m)) lines.push(line);\n }\n return { digest, transcript: boundLines(lines, maxChars) };\n};\n", "import { createHash } from \"node:crypto\";\nimport type { ImageContent } from \"@oh-my-pi/pi-ai\";\n\ninterface FabricActorHostMediaDescriptor {\n type: \"image\";\n mediaIndex: number;\n mimeType: string;\n}\n\nexport interface PreparedFabricActorHostPayload {\n payload: unknown;\n images: ImageContent[];\n media: FabricActorHostMediaDescriptor[];\n}\n\nconst normalizedKey = (key: string): string =>\n key.toLowerCase().replaceAll(/[^a-z0-9]/g, \"\");\n\nconst isSensitiveKey = (key: string): boolean => {\n const normalized = normalizedKey(key);\n return [\n \"password\",\n \"passwd\",\n \"secret\",\n \"token\",\n \"accesstoken\",\n \"refreshtoken\",\n \"authorization\",\n \"cookie\",\n \"credential\",\n \"credentials\",\n \"apikey\",\n \"privatekey\",\n \"clientsecret\",\n ].some((sensitive) => normalized === sensitive || normalized.endsWith(sensitive));\n};\n\nconst redactInlineSecrets = (value: string): string =>\n value\n .replace(/\\bBearer\\s+[A-Za-z0-9._~+\\/-]+=*/gi, \"Bearer [redacted]\")\n .replace(/\\bBasic\\s+[A-Za-z0-9+/=]{8,}/gi, \"Basic [redacted]\")\n .replace(/\\b(?:sk|pk|ghp|github_pat|xox[baprs])[-_][A-Za-z0-9_-]{12,}\\b/g, \"[redacted]\")\n .replace(\n /\\b(Authorization|Proxy-Authorization|Cookie|Set-Cookie|X-Api-Key)\\s*:\\s*[^\\r\\n;]+/gi,\n \"$1: [redacted]\",\n )\n .replace(/(https?:\\/\\/)[^\\s/:@]+:[^\\s/@]+@/gi, \"$1[redacted]@\");\n\nconst looksLikeBase64 = (value: string): boolean => {\n if (value.startsWith(\"data:\") && value.includes(\";base64,\")) return true;\n if (value.length < 1_024 || value.length % 4 !== 0) return false;\n return /^[A-Za-z0-9+/=_\\r\\n-]+$/.test(value);\n};\n\nconst isImageContent = (value: unknown): value is ImageContent =>\n typeof value === \"object\" &&\n value !== null &&\n !Array.isArray(value) &&\n (value as { type?: unknown }).type === \"image\" &&\n typeof (value as { data?: unknown }).data === \"string\" &&\n typeof (value as { mimeType?: unknown }).mimeType === \"string\";\n\nexport const prepareFabricActorHostPayload = (\n value: unknown,\n maxChars: number,\n): PreparedFabricActorHostPayload => {\n const images: ImageContent[] = [];\n const media: FabricActorHostMediaDescriptor[] = [];\n const imageIndexes = new Map<string, number>();\n const seen = new WeakSet<object>();\n let json: string;\n\n try {\n const serialized = JSON.stringify(value, (key, nested) => {\n if (key && isSensitiveKey(key)) return \"[redacted]\";\n if (isImageContent(nested)) {\n const sha256 = createHash(\"sha256\")\n .update(nested.mimeType)\n .update(\"\\0\")\n .update(nested.data)\n .digest(\"hex\");\n let mediaIndex = imageIndexes.get(sha256);\n if (mediaIndex === undefined) {\n mediaIndex = images.length;\n imageIndexes.set(sha256, mediaIndex);\n images.push({ type: \"image\", data: nested.data, mimeType: nested.mimeType });\n media.push({ type: \"image\", mediaIndex, mimeType: nested.mimeType });\n }\n return {\n type: \"image\",\n mediaIndex,\n mimeType: nested.mimeType,\n redacted: true,\n };\n }\n if (\n typeof nested === \"object\" &&\n nested !== null &&\n !Array.isArray(nested) &&\n (nested as { type?: unknown }).type === \"image\"\n ) {\n return {\n type: \"image\",\n ...(typeof (nested as { mimeType?: unknown }).mimeType === \"string\"\n ? { mimeType: (nested as { mimeType: string }).mimeType }\n : {}),\n redacted: true,\n };\n }\n if (typeof nested === \"string\") {\n if (looksLikeBase64(nested)) return \"[omitted base64]\";\n return redactInlineSecrets(nested);\n }\n if (typeof nested === \"bigint\") return String(nested);\n if (typeof nested === \"function\" || typeof nested === \"symbol\") return undefined;\n if (typeof nested === \"object\" && nested !== null) {\n if (seen.has(nested)) return \"[circular or repeated reference]\";\n seen.add(nested);\n }\n return nested;\n });\n json = serialized ?? \"null\";\n } catch {\n json = JSON.stringify(String(value));\n }\n\n if (json.length > maxChars) json = json.slice(json.length - maxChars);\n let payload: unknown;\n try {\n payload = JSON.parse(json) as unknown;\n } catch {\n payload = json;\n }\n return { payload, images, media };\n};\n", "import type {\n FabricComponentDefinition,\n FabricComponentDiscovery,\n} from \"./types.js\";\n\nexport interface FabricComponentCatalogEntry {\n definition: FabricComponentDefinition;\n revision: number;\n}\n\nexport interface FabricComponentCatalogEvent {\n name: string;\n current?: FabricComponentCatalogEntry;\n previous?: FabricComponentCatalogEntry;\n}\n\nconst NAME_PATTERN = /^[a-zA-Z0-9][a-zA-Z0-9._-]{0,127}$/;\n\nexport class FabricComponentCatalog {\n readonly #definitions = new Map<string, FabricComponentCatalogEntry>();\n readonly #listeners = new Set<(event: FabricComponentCatalogEvent) => void>();\n\n readonly discovery: FabricComponentDiscovery = {\n version: 1,\n register: (component, options) => this.register(component, options),\n };\n\n register(\n definition: FabricComponentDefinition,\n options: { overwrite?: boolean } = {},\n ): void {\n if (!NAME_PATTERN.test(definition.name)) {\n throw new Error(`Invalid Fabric component name: ${definition.name}`);\n }\n if (typeof definition.activate !== \"function\") {\n throw new Error(`Fabric component ${definition.name} must define activate()`);\n }\n const previous = this.#definitions.get(definition.name);\n if (previous && !options.overwrite) {\n throw new Error(`Fabric component already registered: ${definition.name}`);\n }\n const current = {\n definition,\n revision: (previous?.revision ?? 0) + 1,\n };\n this.#definitions.set(definition.name, current);\n this.#emit({ name: definition.name, current, ...(previous ? { previous } : {}) });\n }\n\n unregister(name: string): FabricComponentDefinition | undefined {\n const previous = this.#definitions.get(name);\n if (!previous) return undefined;\n this.#definitions.delete(name);\n this.#emit({ name, previous });\n return previous.definition;\n }\n\n get(name: string): FabricComponentCatalogEntry | undefined {\n return this.#definitions.get(name);\n }\n\n list(): Array<FabricComponentCatalogEntry & { name: string }> {\n return [...this.#definitions.entries()]\n .map(([name, entry]) => ({ name, ...entry }))\n .sort((left, right) => left.name.localeCompare(right.name));\n }\n\n clear(): void {\n for (const name of [...this.#definitions.keys()]) this.unregister(name);\n }\n\n subscribe(listener: (event: FabricComponentCatalogEvent) => void): () => void {\n this.#listeners.add(listener);\n return () => this.#listeners.delete(listener);\n }\n\n #emit(event: FabricComponentCatalogEvent): void {\n for (const listener of [...this.#listeners]) {\n try {\n listener(event);\n } catch {\n // Registration observers do not own the catalog mutation.\n }\n }\n }\n}\n", "import type {\n FabricComponentDisposer,\n FabricComponentEffect,\n FabricComponentEffectInfo,\n FabricComponentEffectRegistration,\n} from \"./types.js\";\n\ninterface FabricEffectFailure {\n label: string;\n error: string;\n}\n\nexport interface FabricEffectCleanupReport {\n status: \"disposed\" | \"quarantined\";\n failures: FabricEffectFailure[];\n}\n\nexport type FabricEffectGuard = () => boolean | Promise<boolean>;\n\nexport interface FabricEffectScopeOptions {\n guard?: FabricEffectGuard;\n}\n\nexport interface FabricEffectLifecycleHooks {\n beforeCleanup?(): void;\n}\n\nexport class FabricEffectDivertedError extends Error {\n readonly cleanupError: unknown;\n\n constructor(\n message = \"Fabric effect target changed at an iteration boundary\",\n cleanupError?: unknown,\n ) {\n super(message);\n this.name = \"FabricEffectDivertedError\";\n this.cleanupError = cleanupError;\n }\n}\n\ninterface EffectRecord {\n label: string;\n effect?: FabricComponentEffectInfo;\n disposers: FabricComponentDisposer[];\n setup: Promise<void>;\n dispose: () => Promise<void>;\n disposed: boolean;\n armed: boolean;\n cleanupStarted: boolean;\n beforeCleanup?: () => void;\n}\n\ninterface EffectIterator {\n next(): IteratorResult<unknown> | Promise<IteratorResult<unknown>>;\n return?(): IteratorResult<unknown> | Promise<IteratorResult<unknown>>;\n}\n\nconst errorMessage = (error: unknown): string =>\n error instanceof Error ? error.message : String(error);\n\nconst isPromiseLike = (value: unknown): value is PromiseLike<unknown> =>\n typeof value === \"object\" &&\n value !== null &&\n \"then\" in value &&\n typeof (value as { then?: unknown }).then === \"function\";\n\nconst isIterable = (value: unknown): value is Iterable<unknown> =>\n typeof value === \"object\" &&\n value !== null &&\n Symbol.iterator in value &&\n typeof (value as { [Symbol.iterator]?: unknown })[Symbol.iterator] === \"function\";\n\nconst isAsyncIterable = (value: unknown): value is AsyncIterable<unknown> =>\n typeof value === \"object\" &&\n value !== null &&\n Symbol.asyncIterator in value &&\n typeof (value as { [Symbol.asyncIterator]?: unknown })[Symbol.asyncIterator] === \"function\";\n\nconst collectDisposer = (\n value: unknown,\n disposers: FabricComponentDisposer[],\n): void => {\n if (value === undefined || value === null) return;\n if (typeof value !== \"function\") throw new TypeError(\"Fabric effect yielded an invalid disposer\");\n disposers.push(value as FabricComponentDisposer);\n};\n\nconst normalizeRegistration = (\n registration: FabricComponentEffectRegistration | undefined,\n fallbackLabel: string,\n): { label: string; effect?: FabricComponentEffectInfo } => {\n if (typeof registration === \"string\") return { label: registration };\n if (!registration) return { label: fallbackLabel };\n const resources = [...new Set((registration.resources ?? [])\n .filter((resource): resource is string => typeof resource === \"string\" && resource.length > 0)\n .map((resource) => resource.slice(0, 256)))].slice(0, 64);\n const label = registration.label?.trim().slice(0, 256) || fallbackLabel;\n return {\n label,\n effect: {\n label,\n kind: registration.kind ?? \"transactional\",\n resources: resources.length > 0 ? resources : [\"*\"],\n ordering: registration.ordering ?? \"unknown\",\n },\n };\n};\n\nconst beginCleanup = (record: EffectRecord): void => {\n if (record.cleanupStarted) return;\n record.cleanupStarted = true;\n record.beforeCleanup?.();\n};\n\nconst closeIterator = async (\n iterator: EffectIterator,\n disposers: FabricComponentDisposer[],\n): Promise<void> => {\n if (!iterator.return) return;\n let step = await iterator.return();\n while (!step.done) {\n collectDisposer(step.value, disposers);\n step = await iterator.next();\n }\n};\n\nconst checkTarget = async (guard: FabricEffectGuard | undefined): Promise<void> => {\n if (guard && !(await guard())) throw new FabricEffectDivertedError();\n};\n\nconst driveIterator = async (\n iterator: EffectIterator,\n record: EffectRecord,\n guard: FabricEffectGuard | undefined,\n): Promise<void> => {\n try {\n for (;;) {\n if (!record.armed) {\n beginCleanup(record);\n await closeIterator(iterator, record.disposers);\n return;\n }\n await checkTarget(guard);\n const step = await iterator.next();\n if (!step.done) collectDisposer(step.value, record.disposers);\n if (!record.armed) {\n beginCleanup(record);\n await closeIterator(iterator, record.disposers);\n return;\n }\n if (step.done) {\n await checkTarget(guard);\n return;\n }\n }\n } catch (error) {\n if (error instanceof FabricEffectDivertedError) {\n try {\n beginCleanup(record);\n await closeIterator(iterator, record.disposers);\n } catch (closeError) {\n throw new FabricEffectDivertedError(\n \"Fabric effect target changed and iterator close failed\",\n closeError,\n );\n }\n }\n throw error;\n }\n};\n\nconst collectEffect = async (\n effect: FabricComponentEffect,\n record: EffectRecord,\n guard: FabricEffectGuard | undefined,\n): Promise<void> => {\n const resolved = isPromiseLike(effect) ? await effect : effect;\n if (resolved === undefined || resolved === null || typeof resolved === \"function\") {\n collectDisposer(resolved, record.disposers);\n if (record.armed) await checkTarget(guard);\n return;\n }\n if (isAsyncIterable(resolved)) {\n await driveIterator(resolved[Symbol.asyncIterator](), record, guard);\n return;\n }\n if (isIterable(resolved)) {\n await driveIterator(resolved[Symbol.iterator](), record, guard);\n return;\n }\n throw new TypeError(\"Fabric effect returned an unsupported value\");\n};\n\nexport class FabricEffectScope {\n readonly #records: EffectRecord[] = [];\n readonly #setupCleanupFailures: FabricEffectFailure[] = [];\n readonly #guard: FabricEffectGuard | undefined;\n #state: \"open\" | \"disposing\" | \"disposed\" = \"open\";\n #cleanup: Promise<FabricEffectCleanupReport> | undefined;\n\n constructor(options: FabricEffectScopeOptions = {}) {\n this.#guard = options.guard;\n }\n\n get state(): \"open\" | \"disposing\" | \"disposed\" {\n return this.#state;\n }\n\n footprint(limit = Number.POSITIVE_INFINITY): FabricComponentEffectInfo[] {\n const effects: FabricComponentEffectInfo[] = [];\n for (const record of this.#records) {\n if (effects.length >= limit) break;\n if (!record.disposed && record.effect) {\n effects.push({ ...record.effect, resources: [...record.effect.resources] });\n }\n }\n return effects;\n }\n\n async effect(\n setup: () => FabricComponentEffect,\n registration: FabricComponentEffectRegistration = \"anonymous\",\n hooks: FabricEffectLifecycleHooks = {},\n ): Promise<FabricComponentDisposer> {\n if (this.#state !== \"open\") {\n throw new Error(\"Cannot create an effect on a disposing Fabric scope\");\n }\n\n const normalized = normalizeRegistration(registration, \"anonymous\");\n const record: EffectRecord = {\n label: normalized.label,\n ...(normalized.effect ? { effect: normalized.effect } : {}),\n disposers: [],\n setup: Promise.resolve(),\n dispose: async () => {},\n disposed: false,\n armed: true,\n cleanupStarted: false,\n ...(hooks.beforeCleanup ? { beforeCleanup: hooks.beforeCleanup } : {}),\n };\n const cleanupDisposers = async (): Promise<void> => {\n beginCleanup(record);\n const failures: unknown[] = [];\n for (const disposer of record.disposers.splice(0).reverse()) {\n try {\n await disposer();\n } catch (error) {\n failures.push(error);\n }\n }\n if (failures.length > 0) {\n throw new AggregateError(failures, `Fabric effect cleanup failed: ${record.label}`);\n }\n };\n\n let disposal: Promise<void> | undefined;\n record.dispose = async () => {\n if (record.disposed) return disposal;\n record.disposed = true;\n record.armed = false;\n disposal = (async () => {\n await record.setup.catch(() => undefined);\n await cleanupDisposers();\n })();\n return disposal;\n };\n\n this.#records.push(record);\n record.setup = (async () => {\n try {\n if (this.#guard) await checkTarget(this.#guard);\n if (!record.armed) return;\n await collectEffect(setup(), record, this.#guard);\n } catch (error) {\n try {\n await cleanupDisposers();\n } catch (cleanupError) {\n const failures = cleanupError instanceof AggregateError\n ? cleanupError.errors\n : [cleanupError];\n for (const failure of failures) {\n this.#setupCleanupFailures.push({ label: record.label, error: errorMessage(failure) });\n }\n throw new AggregateError(\n [error, cleanupError],\n `Fabric effect setup and rollback failed: ${record.label}`,\n );\n }\n throw error;\n }\n })();\n\n try {\n await record.setup;\n if (this.#state === \"open\") {\n const index = this.#records.indexOf(record);\n if (index >= 0 && index !== this.#records.length - 1) {\n this.#records.splice(index, 1);\n this.#records.push(record);\n }\n }\n } catch (error) {\n const index = this.#records.indexOf(record);\n if (index >= 0) this.#records.splice(index, 1);\n throw error;\n }\n return record.dispose;\n }\n\n defer(\n disposer: FabricComponentDisposer,\n registration: FabricComponentEffectRegistration = \"deferred\",\n ): FabricComponentDisposer {\n if (this.#state !== \"open\") {\n throw new Error(\"Cannot defer cleanup on a disposing Fabric scope\");\n }\n const normalized = normalizeRegistration(registration, \"deferred\");\n const record: EffectRecord = {\n label: normalized.label,\n ...(normalized.effect ? { effect: normalized.effect } : {}),\n disposers: [disposer],\n setup: Promise.resolve(),\n dispose: async () => {},\n disposed: false,\n armed: true,\n cleanupStarted: false,\n };\n let disposal: Promise<void> | undefined;\n record.dispose = async () => {\n if (record.disposed) return disposal;\n record.disposed = true;\n record.armed = false;\n disposal = (async () => {\n const failures: unknown[] = [];\n for (const cleanup of record.disposers.splice(0).reverse()) {\n try {\n await cleanup();\n } catch (error) {\n failures.push(error);\n }\n }\n if (failures.length > 0) {\n throw new AggregateError(failures, `Fabric effect cleanup failed: ${record.label}`);\n }\n })();\n return disposal;\n };\n this.#records.push(record);\n return record.dispose;\n }\n\n dispose(): Promise<FabricEffectCleanupReport> {\n if (this.#cleanup) return this.#cleanup;\n this.#state = \"disposing\";\n this.#cleanup = (async () => {\n const failures: FabricEffectFailure[] = this.#setupCleanupFailures.splice(0);\n for (const record of this.#records.splice(0).reverse()) {\n try {\n await record.dispose();\n } catch (error) {\n if (error instanceof AggregateError) {\n for (const nested of error.errors) {\n failures.push({ label: record.label, error: errorMessage(nested) });\n }\n } else {\n failures.push({ label: record.label, error: errorMessage(error) });\n }\n }\n }\n this.#state = \"disposed\";\n return {\n status: failures.length > 0 ? \"quarantined\" : \"disposed\",\n failures,\n };\n })();\n return this.#cleanup;\n }\n}\n", "import type { ExtensionContext } from \"@oh-my-pi/pi-coding-agent\";\nimport {\n ActionRegistry,\n type FabricCallAudit,\n type FabricCapabilityViewLease,\n type ResolvedFabricAction,\n} from \"../core/action-registry.js\";\nimport { formatFabricEffectConflict } from \"../core/effect-conflict.js\";\nimport { stableJsonHash } from \"../core/stable-hash.js\";\nimport type {\n FabricInvocationContext,\n FabricScopedProviderResult,\n} from \"../protocol.js\";\nimport {\n FabricEffectDivertedError,\n FabricEffectScope,\n} from \"./effect-scope.js\";\nimport {\n MAX_FABRIC_MODEL_GUIDANCE_PER_COMPONENT,\n MAX_FABRIC_MODEL_GUIDANCE_REGISTRATIONS,\n MAX_FABRIC_MODEL_GUIDANCE_SNAPSHOT_CHARS,\n MAX_FABRIC_MODEL_GUIDANCE_TOTAL_CHARS,\n compareFabricOwnedModelGuidance,\n fabricModelGuidanceInfo,\n normalizeFabricModelGuidance,\n type FabricOwnedModelGuidance,\n type NormalizedFabricModelGuidance,\n} from \"./model-guidance.js\";\nimport type {\n FabricCapabilityRequirement,\n FabricComponentChildOptions,\n FabricComponentContext,\n FabricComponentDefinition,\n FabricComponentDisposer,\n FabricComponentEffectConflict,\n FabricComponentEffectInfo,\n FabricComponentEffectOptions,\n FabricComponentEffectRegistration,\n FabricComponentEntry,\n FabricComponentGraph,\n FabricComponentHandle,\n FabricComponentInfo,\n FabricComponentProviderLease,\n FabricComponentState,\n FabricComponentStopOptions,\n} from \"./types.js\";\n\ninterface ManagedComponent {\n entry: FabricComponentEntry;\n definition: FabricComponentDefinition;\n parentId?: string;\n state: FabricComponentState;\n guarantee: \"managed\" | \"revertible\";\n requirements: FabricCapabilityRequirement[];\n provisions: string[];\n missing: string[];\n optionalMissing: string[];\n revision: number;\n epoch: number;\n retired: boolean;\n activationOrder: number;\n childSequence: number;\n consecutiveDiversions: number;\n removeWhenSettled: boolean;\n createdAt: number;\n updatedAt: number;\n error?: string;\n cleanupErrors?: string[];\n blockedKey?: string;\n blockedOnEffects: boolean;\n scope: FabricEffectScope | undefined;\n viewLease: FabricCapabilityViewLease | undefined;\n providerLeases: FabricComponentProviderLease[];\n actionEffects: FabricComponentEffectInfo[];\n modelGuidance: NormalizedFabricModelGuidance[];\n abortController: AbortController | undefined;\n transition: Promise<void> | undefined;\n tearingDown?: boolean;\n}\n\nexport interface FabricComponentSupervisorOptions {\n invocationContext?(): FabricInvocationContext;\n invoke?(\n ref: string,\n args: Record<string, unknown>,\n context: FabricInvocationContext,\n ): Promise<unknown>;\n acquire?(\n ref: string,\n args: Record<string, unknown>,\n context: FabricInvocationContext,\n ): Promise<FabricScopedProviderResult>;\n maxResultChars?: number;\n}\n\nconst COMPONENT_ID_PATTERN = /^[a-zA-Z0-9][a-zA-Z0-9._-]{0,127}$/;\nconst PROVIDER_NAME_PATTERN = /^[a-z][a-z0-9_-]*$/;\nconst MAX_COMPONENT_EFFECTS = 256;\nconst MAX_SUPERVISED_COMPONENTS = 1_024;\nconst MAX_CHILDREN_PER_COMPONENT = 256;\n\ninterface FabricComponentLifecycleFrame {\n supervisor: FabricComponentSupervisor;\n componentId: string;\n phase: \"loading\" | \"unloading\";\n}\n\ntype FabricComponentLifecycleStorage =\n import(\"node:async_hooks\").AsyncLocalStorage<FabricComponentLifecycleFrame>;\nlet componentLifecycleStorage: FabricComponentLifecycleStorage | undefined;\nlet componentLifecycleStorageTask: Promise<FabricComponentLifecycleStorage> | undefined;\nconst lifecycleStorage = (): Promise<FabricComponentLifecycleStorage> => {\n componentLifecycleStorageTask ??= import(\"node:async_hooks\").then(({ AsyncLocalStorage }) => {\n componentLifecycleStorage ??= new AsyncLocalStorage<FabricComponentLifecycleFrame>();\n return componentLifecycleStorage;\n });\n return componentLifecycleStorageTask;\n};\n\nconst errorMessage = (error: unknown): string =>\n error instanceof Error ? error.message : String(error);\n\nconst normalizeRequirements = (\n definition: FabricComponentDefinition,\n): FabricCapabilityRequirement[] => {\n const normalized = new Map<string, boolean>();\n for (const requirement of definition.requires ?? []) {\n const ref = (typeof requirement === \"string\" ? requirement : requirement.ref).trim();\n if (!ref || ref.length > 256 || !ref.includes(\".\")) {\n throw new Error(\n `Fabric component ${definition.name} requirement must use provider.action: ${ref || \"<empty>\"}`,\n );\n }\n const optional = typeof requirement === \"string\" ? false : requirement.optional === true;\n normalized.set(ref, (normalized.get(ref) ?? true) && optional);\n }\n return [...normalized]\n .sort(([left], [right]) => left.localeCompare(right))\n .map(([ref, optional]) => ({ ref, ...(optional ? { optional: true } : {}) }));\n};\n\nconst normalizeProvisions = (definition: FabricComponentDefinition): string[] => {\n const names = (definition.provides ?? []).map((provision) =>\n (typeof provision === \"string\" ? provision : provision.provider).trim(),\n );\n for (const name of names) {\n if (!PROVIDER_NAME_PATTERN.test(name)) {\n throw new Error(`Invalid provider declaration on ${definition.name}: ${name}`);\n }\n }\n return [...new Set(names)].sort();\n};\n\nconst defaultInvocationContext = (): FabricInvocationContext => ({\n cwd: process.cwd(),\n signal: undefined,\n parentToolCallId: \"fabric-component\",\n nestedToolCallId: \"fabric-component\",\n extensionContext: {} as ExtensionContext,\n update() {},\n});\n\nconst targetKey = (\n revision: number,\n digest: string | undefined,\n missing: readonly string[],\n provisionOccupancy: readonly boolean[],\n): string => stableJsonHash({ revision, digest, missing, provisionOccupancy });\n\nclass FabricComponentIndependenceError extends Error {\n constructor(message: string) {\n super(message);\n this.name = \"FabricComponentIndependenceError\";\n }\n}\n\nconst normalizeResources = (resources: readonly string[] | undefined): string[] => {\n const normalized = [...new Set((resources ?? [])\n .filter((resource): resource is string => typeof resource === \"string\" && resource.length > 0)\n .map((resource) => resource.slice(0, 256)))].slice(0, 64);\n return normalized.length > 0 ? normalized : [\"*\"];\n};\n\nconst trackedRegistration = (\n registration: FabricComponentEffectRegistration | undefined,\n fallbackLabel: string,\n): FabricComponentEffectOptions => {\n if (typeof registration === \"string\") return { label: registration };\n return { label: fallbackLabel, ...registration };\n};\n\nconst registrationEffect = (\n registration: FabricComponentEffectOptions,\n): FabricComponentEffectInfo => ({\n label: registration.label?.trim().slice(0, 256) || \"anonymous\",\n kind: registration.kind ?? \"transactional\",\n resources: normalizeResources(registration.resources),\n ordering: registration.ordering ?? \"unknown\",\n});\n\nconst actionEffect = (\n action: ResolvedFabricAction,\n): FabricComponentEffectInfo | undefined => {\n if (!action.effect || action.effect.kind === \"none\") return undefined;\n return {\n label: action.ref,\n kind: action.effect.kind,\n resources: normalizeResources(action.effect.resources),\n ordering: action.effect.ordering ?? \"unknown\",\n };\n};\n\ninterface FabricComponentEffectSummary {\n hasEffects: boolean;\n hasNoncommutative: boolean;\n hasUnknown: boolean;\n hasUnknownNoncommutative: boolean;\n resourceNoncommutative: Map<string, boolean>;\n}\n\ntype FabricComponentConflictBasis = Omit<FabricComponentEffectConflict, \"withComponent\">;\n\nconst summarizeEffects = (\n effects: readonly FabricComponentEffectInfo[],\n): FabricComponentEffectSummary => {\n const resourceNoncommutative = new Map<string, boolean>();\n let hasNoncommutative = false;\n let hasUnknown = false;\n let hasUnknownNoncommutative = false;\n let effectful = 0;\n for (const effect of effects) {\n if (effect.kind === \"none\") continue;\n effectful++;\n const noncommutative = effect.ordering !== \"commutative\";\n hasNoncommutative ||= noncommutative;\n for (const resource of effect.resources) {\n if (resource === \"*\") {\n hasUnknown = true;\n hasUnknownNoncommutative ||= noncommutative;\n } else {\n resourceNoncommutative.set(\n resource,\n (resourceNoncommutative.get(resource) ?? false) || noncommutative,\n );\n }\n }\n }\n return {\n hasEffects: effectful > 0,\n hasNoncommutative,\n hasUnknown,\n hasUnknownNoncommutative,\n resourceNoncommutative,\n };\n};\n\nconst effectConflictsBetween = (\n left: FabricComponentEffectSummary,\n right: FabricComponentEffectSummary,\n): FabricComponentConflictBasis[] => {\n if (!left.hasEffects || !right.hasEffects) return [];\n const conflicts: FabricComponentConflictBasis[] = [];\n if (\n (left.hasUnknown && (left.hasUnknownNoncommutative || right.hasNoncommutative)) ||\n (right.hasUnknown && (right.hasUnknownNoncommutative || left.hasNoncommutative))\n ) {\n conflicts.push({ resources: [\"*\"], reason: \"unknown_resource\" });\n }\n const overlap = [...left.resourceNoncommutative.keys()]\n .filter((resource) =>\n right.resourceNoncommutative.has(resource) &&\n ((left.resourceNoncommutative.get(resource) ?? false) ||\n (right.resourceNoncommutative.get(resource) ?? false)),\n )\n .sort();\n if (overlap.length > 0) {\n conflicts.push({ resources: overlap, reason: \"shared_resource\" });\n }\n return conflicts;\n};\n\nconst compareEffectInfo = (\n left: FabricComponentEffectInfo,\n right: FabricComponentEffectInfo,\n): number =>\n left.label.localeCompare(right.label) ||\n left.kind.localeCompare(right.kind) ||\n left.ordering.localeCompare(right.ordering) ||\n left.resources.join(\"\\0\").localeCompare(right.resources.join(\"\\0\"));\n\nexport class FabricComponentSupervisor {\n readonly #components = new Map<string, ManagedComponent>();\n readonly #listeners = new Set<(componentId?: string) => void>();\n readonly #unsubscribeRegistry: () => void;\n #requested = false;\n #reconciling: Promise<void> | undefined;\n #closed = false;\n #activationSequence = 0;\n\n constructor(\n readonly registry: ActionRegistry,\n readonly options: FabricComponentSupervisorOptions = {},\n ) {\n this.#unsubscribeRegistry = registry.subscribeProviderChanges(() => this.refresh());\n }\n\n subscribe(listener: (componentId?: string) => void): () => void {\n this.#listeners.add(listener);\n return () => this.#listeners.delete(listener);\n }\n\n assertLifecycleEntryAllowed(operation: string): void {\n this.#assertLifecycleCallAllowed(operation);\n }\n\n list(): FabricComponentInfo[] {\n const components = [...this.#components.values()]\n .sort((left, right) => left.entry.id.localeCompare(right.entry.id));\n const effects = new Map(components.map((component) => [\n component.entry.id,\n this.#effects(component),\n ]));\n const summaries = new Map(components.map((component) => [\n component.entry.id,\n summarizeEffects(effects.get(component.entry.id)!),\n ]));\n const conflicts = new Map(components.map((component) => [\n component.entry.id,\n [] as FabricComponentEffectConflict[],\n ]));\n for (let leftIndex = 0; leftIndex < components.length; leftIndex++) {\n const left = components[leftIndex]!;\n for (let rightIndex = leftIndex + 1; rightIndex < components.length; rightIndex++) {\n const right = components[rightIndex]!;\n if (left.guarantee !== \"revertible\" && right.guarantee !== \"revertible\") continue;\n const bases = effectConflictsBetween(\n summaries.get(left.entry.id)!,\n summaries.get(right.entry.id)!,\n );\n for (const basis of bases) {\n if (\n left.guarantee === \"revertible\" &&\n conflicts.get(left.entry.id)!.length < 64\n ) {\n conflicts.get(left.entry.id)!.push({ withComponent: right.entry.id, ...basis });\n }\n if (\n right.guarantee === \"revertible\" &&\n conflicts.get(right.entry.id)!.length < 64\n ) {\n conflicts.get(right.entry.id)!.push({ withComponent: left.entry.id, ...basis });\n }\n }\n }\n }\n return components.map((component) => this.#info(\n component,\n effects.get(component.entry.id),\n conflicts.get(component.entry.id),\n ));\n }\n\n status(id: string): FabricComponentInfo {\n return this.#info(this.#require(id));\n }\n\n guidance(): FabricOwnedModelGuidance[] {\n return [...this.#components.values()]\n .filter((component) => component.state === \"active\")\n .flatMap((component) => component.modelGuidance.map((guidance) => ({\n ...structuredClone(guidance),\n componentId: component.entry.id,\n component: component.definition.name,\n revision: component.revision,\n })))\n .sort(compareFabricOwnedModelGuidance);\n }\n\n graph(): FabricComponentGraph {\n const providers = new Map<string, string>();\n for (const component of this.#components.values()) {\n for (const provider of component.provisions) providers.set(provider, component.entry.id);\n }\n const dependencyEdges: FabricComponentGraph[\"edges\"] = [];\n const ownershipEdges: FabricComponentGraph[\"edges\"] = [];\n for (const component of this.#components.values()) {\n for (const requirement of component.requirements) {\n const provider = requirement.ref.slice(0, requirement.ref.indexOf(\".\"));\n const source = providers.get(provider);\n if (source) {\n dependencyEdges.push({\n from: component.entry.id,\n to: source,\n ref: requirement.ref,\n kind: \"dependency\",\n });\n }\n }\n if (component.parentId) {\n ownershipEdges.push({\n from: component.entry.id,\n to: component.parentId,\n ref: \"component:parent\",\n kind: \"ownership\",\n });\n }\n }\n const edges = [...dependencyEdges, ...ownershipEdges].sort((left, right) =>\n left.from.localeCompare(right.from) ||\n left.to.localeCompare(right.to) ||\n left.ref.localeCompare(right.ref),\n );\n return { components: this.list(), edges, cycles: this.#cycles(dependencyEdges) };\n }\n\n async start(\n entry: FabricComponentEntry,\n definition: FabricComponentDefinition,\n ): Promise<FabricComponentInfo> {\n this.#assertOpen();\n this.#assertLifecycleCallAllowed(\"start Fabric components\");\n const component = this.#insert(entry, definition);\n await this.#requestReconcile();\n if (component.state === \"failed\" || component.state === \"quarantined\") {\n throw new Error(component.error ?? `Fabric component ${entry.id} failed to start`);\n }\n return this.#info(component);\n }\n\n async replace(\n id: string,\n entry: FabricComponentEntry,\n definition: FabricComponentDefinition,\n ): Promise<FabricComponentInfo> {\n this.#assertOpen();\n this.#assertLifecycleCallAllowed(\"replace Fabric components\");\n const component = this.#require(id);\n if (entry.id !== id) throw new Error(\"Fabric component replacement cannot change its entry id\");\n this.#validateEntry(entry, definition);\n const nextProvisions = normalizeProvisions(definition);\n this.#assertProvisionsAvailable(id, nextProvisions);\n const previous = {\n entry: structuredClone(component.entry),\n definition: component.definition,\n requirements: component.requirements,\n provisions: component.provisions,\n guarantee: component.guarantee,\n revision: component.revision,\n parentId: component.parentId,\n };\n\n component.removeWhenSettled = false;\n this.#retire(component);\n await this.#unload(component, new Set());\n const unloadedState = component.state as FabricComponentState;\n if (unloadedState === \"quarantined\") {\n throw new Error(component.error ?? `Fabric component ${id} cleanup failed`);\n }\n this.#applyReplacement(component, entry, definition, previous.revision + 1, nextProvisions);\n await this.#requestReconcile();\n const candidateState = component.state as FabricComponentState;\n if (candidateState !== \"failed\" && candidateState !== \"quarantined\") {\n return this.#info(component);\n }\n\n const replacementError = component.error ?? `Fabric component ${id} replacement failed`;\n if (candidateState === \"quarantined\") throw new Error(replacementError);\n this.#retire(component);\n await this.#unload(component, new Set());\n component.entry = previous.entry;\n component.definition = previous.definition;\n component.requirements = previous.requirements;\n component.provisions = previous.provisions;\n component.guarantee = previous.guarantee;\n if (previous.parentId) component.parentId = previous.parentId;\n else delete component.parentId;\n component.revision = previous.revision + 2;\n component.epoch++;\n component.retired = false;\n component.state = \"waiting\";\n component.missing = [];\n component.optionalMissing = [];\n component.actionEffects = [];\n component.modelGuidance = [];\n component.consecutiveDiversions = 0;\n component.removeWhenSettled = false;\n delete component.error;\n delete component.cleanupErrors;\n component.blockedOnEffects = false;\n delete component.blockedKey;\n component.updatedAt = Date.now();\n await this.#requestReconcile();\n const rollbackState = component.state as FabricComponentState;\n if (rollbackState === \"failed\" || rollbackState === \"quarantined\") {\n throw new AggregateError(\n [new Error(replacementError), new Error(component.error ?? \"rollback failed\")],\n `Fabric component ${id} replacement and rollback failed`,\n );\n }\n throw new Error(`${replacementError}; previous revision restored`);\n }\n\n async stop(id: string, options: FabricComponentStopOptions = {}): Promise<void> {\n const component = this.#require(id);\n if (this.#selfLifecycleStop(id)) {\n component.removeWhenSettled = true;\n this.#retire(component);\n return;\n }\n this.#assertLifecycleCallAllowed(\"stop Fabric components\");\n this.#retire(component);\n await this.#unload(component, new Set());\n if (this.#components.get(id) !== component) return;\n if (component.state === \"quarantined\" && !options.force) {\n throw new Error(component.error ?? `Fabric component ${id} cleanup failed`);\n }\n component.state = \"disposed\";\n component.updatedAt = Date.now();\n this.#emit(id);\n this.#components.delete(id);\n this.#emit(id);\n await this.#requestReconcile();\n }\n\n refresh(): void {\n if (this.#closed) return;\n void this.#requestReconcile().catch(() => undefined);\n }\n\n async settle(): Promise<void> {\n this.#assertLifecycleCallAllowed(\"settle Fabric components\");\n await this.#waitForReconcile();\n }\n\n async close(): Promise<void> {\n if (this.#closed) return;\n this.#assertLifecycleCallAllowed(\"close Fabric components\");\n this.#closed = true;\n this.#unsubscribeRegistry();\n const components = [...this.#components.values()].sort((left, right) =>\n right.activationOrder - left.activationOrder ||\n right.createdAt - left.createdAt ||\n right.entry.id.localeCompare(left.entry.id),\n );\n for (const component of components) this.#retire(component);\n const visited = new Set<string>();\n for (const component of components) await this.#unload(component, visited);\n for (const component of this.#components.values()) {\n if (component.state !== \"quarantined\") component.state = \"disposed\";\n component.updatedAt = Date.now();\n this.#emit(component.entry.id);\n }\n this.#components.clear();\n this.#emit();\n this.#listeners.clear();\n }\n\n #insert(\n entry: FabricComponentEntry,\n definition: FabricComponentDefinition,\n parentId?: string,\n ): ManagedComponent {\n this.#validateEntry(entry, definition);\n if (this.#components.size >= MAX_SUPERVISED_COMPONENTS) {\n throw new Error(\n `Fabric component supervisor supports at most ${MAX_SUPERVISED_COMPONENTS} fibers`,\n );\n }\n if (this.#components.has(entry.id)) {\n throw new Error(`Fabric component already exists: ${entry.id}`);\n }\n const provisions = normalizeProvisions(definition);\n this.#assertProvisionsAvailable(entry.id, provisions);\n const now = Date.now();\n const component: ManagedComponent = {\n entry: structuredClone(entry),\n definition,\n ...(parentId ? { parentId } : {}),\n state: \"waiting\",\n guarantee: definition.guarantee ?? \"managed\",\n requirements: normalizeRequirements(definition),\n provisions,\n missing: [],\n optionalMissing: [],\n revision: 1,\n epoch: 0,\n retired: false,\n activationOrder: 0,\n childSequence: 0,\n consecutiveDiversions: 0,\n removeWhenSettled: false,\n createdAt: now,\n updatedAt: now,\n scope: undefined,\n viewLease: undefined,\n providerLeases: [],\n actionEffects: [],\n modelGuidance: [],\n abortController: undefined,\n transition: undefined,\n blockedOnEffects: false,\n };\n this.#components.set(entry.id, component);\n this.#emit(entry.id);\n return component;\n }\n\n #insertChild<TConfig>(\n parent: ManagedComponent,\n definition: FabricComponentDefinition<TConfig>,\n options: FabricComponentChildOptions<TConfig> = {},\n ): FabricComponentHandle {\n if (\n parent.retired ||\n parent.tearingDown ||\n parent.state !== \"loading\" ||\n parent.scope?.state !== \"open\"\n ) {\n throw new Error(`Fabric component ${parent.entry.id} can only use children while activating`);\n }\n const childCount = [...this.#components.values()].filter(\n (component) => component.parentId === parent.entry.id,\n ).length;\n if (childCount >= MAX_CHILDREN_PER_COMPONENT) {\n throw new Error(\n `Fabric component ${parent.entry.id} supports at most ${MAX_CHILDREN_PER_COMPONENT} children`,\n );\n }\n const sequence = ++parent.childSequence;\n const rawLocalId = options.id ?? `${definition.name}-${sequence}`;\n const localId = options.id\n ? rawLocalId\n : rawLocalId\n .replace(/[^a-zA-Z0-9._-]/g, \"-\")\n .replace(/^[^a-zA-Z0-9]+/, \"\") || `child-${sequence}`;\n if (!COMPONENT_ID_PATTERN.test(localId)) {\n throw new Error(`Invalid Fabric child component id: ${rawLocalId}`);\n }\n const joined = `${parent.entry.id}.${localId}`;\n const id = joined.length <= 128\n ? joined\n : `${parent.entry.id.slice(0, 94)}.${stableJsonHash(joined).slice(0, 32)}`;\n const entry: FabricComponentEntry = {\n id,\n component: definition.name,\n ...(Object.prototype.hasOwnProperty.call(options, \"config\")\n ? { config: options.config }\n : {}),\n };\n const child = this.#insert(entry, definition, parent.entry.id);\n this.#requested = true;\n parent.scope.defer(\n () => this.#retireOwnedChild(parent.entry.id, child.entry.id),\n `component:child:${child.entry.id}`,\n );\n return {\n id: child.entry.id,\n status: () => {\n if (this.#components.get(child.entry.id) !== child) {\n throw new Error(`Fabric child component is no longer installed: ${child.entry.id}`);\n }\n return this.#info(child);\n },\n stop: async (stopOptions) => {\n if (this.#components.get(child.entry.id) !== child) return;\n if (this.#selfLifecycleStop(child.entry.id)) {\n child.removeWhenSettled = true;\n this.#retire(child);\n return;\n }\n this.#assertLifecycleCallAllowed(\"stop a child component\");\n this.#retire(child);\n await this.#unload(child, new Set());\n if (this.#components.get(child.entry.id) !== child) return;\n if (child.state === \"quarantined\" && !stopOptions?.force) {\n throw new Error(child.error ?? `Fabric component ${child.entry.id} cleanup failed`);\n }\n child.state = \"disposed\";\n child.updatedAt = Date.now();\n this.#emit(child.entry.id);\n this.#components.delete(child.entry.id);\n this.#emit(child.entry.id);\n this.#requested = true;\n },\n };\n }\n\n #validateEntry(entry: FabricComponentEntry, definition: FabricComponentDefinition): void {\n if (!COMPONENT_ID_PATTERN.test(entry.id)) {\n throw new Error(`Invalid Fabric component id: ${entry.id}`);\n }\n if (entry.component !== definition.name) {\n throw new Error(\n `Fabric component entry ${entry.id} selects ${entry.component}, not ${definition.name}`,\n );\n }\n }\n\n #assertProvisionsAvailable(id: string, provisions: readonly string[]): void {\n for (const component of this.#components.values()) {\n if (component.entry.id === id) continue;\n const overlap = provisions.filter((provider) => component.provisions.includes(provider));\n if (overlap.length > 0) {\n throw new Error(\n `Fabric components ${id} and ${component.entry.id} declare the same providers: ${overlap.join(\", \")}`,\n );\n }\n }\n const owner = this.#components.get(id);\n const occupied = provisions.filter((provider) =>\n this.registry.has(provider) &&\n !owner?.providerLeases.some((lease) => lease.name === provider && lease.active),\n );\n if (occupied.length > 0) {\n throw new Error(\n `Fabric component ${id} providers are already registered outside the component: ${occupied.join(\", \")}`,\n );\n }\n }\n\n #applyReplacement(\n component: ManagedComponent,\n entry: FabricComponentEntry,\n definition: FabricComponentDefinition,\n revision: number,\n provisions = normalizeProvisions(definition),\n ): void {\n component.entry = structuredClone(entry);\n component.definition = definition;\n component.requirements = normalizeRequirements(definition);\n component.provisions = provisions;\n component.guarantee = definition.guarantee ?? \"managed\";\n component.revision = revision;\n component.epoch++;\n component.retired = false;\n component.state = \"waiting\";\n component.missing = [];\n component.optionalMissing = [];\n component.actionEffects = [];\n component.modelGuidance = [];\n component.childSequence = 0;\n component.consecutiveDiversions = 0;\n component.removeWhenSettled = false;\n delete component.error;\n delete component.cleanupErrors;\n component.blockedOnEffects = false;\n delete component.blockedKey;\n component.updatedAt = Date.now();\n }\n\n #retire(component: ManagedComponent): void {\n if (component.retired) return;\n component.retired = true;\n component.epoch++;\n component.updatedAt = Date.now();\n }\n\n #requestReconcile(): Promise<void> {\n this.#requested = true;\n this.#startReconcile();\n return this.#waitForReconcile();\n }\n\n #startReconcile(): void {\n if (this.#reconciling || this.#closed) return;\n const task = this.#drainReconcile();\n this.#reconciling = task;\n void task.finally(() => {\n if (this.#reconciling === task) this.#reconciling = undefined;\n if (this.#requested && !this.#closed) this.#startReconcile();\n }).catch(() => undefined);\n }\n\n async #waitForReconcile(): Promise<void> {\n for (;;) {\n this.#startReconcile();\n const task = this.#reconciling;\n if (!task) return;\n await task;\n if (!this.#requested && !this.#reconciling) return;\n }\n }\n\n async #drainReconcile(): Promise<void> {\n while (this.#requested && !this.#closed) {\n this.#requested = false;\n for (const component of this.#components.values()) {\n await this.#reconcile(component);\n }\n }\n }\n\n async #reconcile(component: ManagedComponent): Promise<void> {\n if (\n component.retired ||\n component.state === \"loading\" ||\n component.state === \"unloading\" ||\n component.state === \"disposed\" ||\n component.state === \"quarantined\"\n ) {\n return;\n }\n const baseContext = this.#invocationContext(component);\n const resolution = await this.registry.inspectCapabilities(\n component.requirements,\n baseContext,\n );\n component.missing = resolution.missing;\n component.optionalMissing = resolution.optionalMissing;\n const key = targetKey(\n component.revision,\n resolution.view?.digest,\n resolution.missing,\n component.provisions.map((provider) => this.registry.has(provider)),\n );\n const effectiveKey = component.blockedOnEffects\n ? stableJsonHash({ key, effects: this.#effectEnvironmentDigest(component) })\n : key;\n\n if (component.state === \"active\") {\n const provisionsActive = component.providerLeases.length === component.provisions.length &&\n component.providerLeases.every((lease) => lease.active);\n if (\n provisionsActive &&\n resolution.satisfied &&\n resolution.view?.digest === component.viewLease?.view?.digest\n ) return;\n await this.#unload(component, new Set());\n const unloadedState = component.state as FabricComponentState;\n if (component.retired || unloadedState === \"quarantined\") return;\n }\n if (!resolution.satisfied) {\n component.state = \"waiting\";\n component.blockedOnEffects = false;\n component.updatedAt = Date.now();\n component.blockedKey = effectiveKey;\n this.#emit(component.entry.id);\n return;\n }\n if (component.state === \"failed\" && component.blockedKey === effectiveKey) return;\n await this.#load(component, baseContext, key);\n }\n\n async #load(\n component: ManagedComponent,\n baseContext: FabricInvocationContext,\n key: string,\n ): Promise<void> {\n if (component.transition) await component.transition;\n if (component.retired || this.#closed) return;\n const epoch = component.epoch;\n const storage = await lifecycleStorage();\n if (component.retired || this.#closed) return;\n const task = storage.run(\n { supervisor: this, componentId: component.entry.id, phase: \"loading\" },\n () => this.#performLoad(component, baseContext, key, epoch),\n );\n component.transition = task;\n try {\n await task;\n } finally {\n if (component.transition === task) component.transition = undefined;\n this.#removeRetiredAfterTransition(component);\n }\n }\n\n async #performLoad(\n component: ManagedComponent,\n baseContext: FabricInvocationContext,\n key: string,\n epoch: number,\n ): Promise<void> {\n component.state = \"loading\";\n component.updatedAt = Date.now();\n component.missing = [];\n component.actionEffects = [];\n component.modelGuidance = [];\n component.consecutiveDiversions = 0;\n component.removeWhenSettled = false;\n delete component.error;\n delete component.cleanupErrors;\n this.#emit(component.entry.id);\n\n const controller = new AbortController();\n let scope: FabricEffectScope | undefined;\n let viewLease: FabricCapabilityViewLease | undefined;\n const providerLeases: FabricComponentProviderLease[] = [];\n const actionEffects: FabricComponentEffectInfo[] = [];\n const modelGuidance: NormalizedFabricModelGuidance[] = [];\n try {\n viewLease = await this.registry.acquireCapabilityView(\n component.requirements,\n { ...baseContext, signal: controller.signal },\n );\n if (!viewLease.satisfied || !viewLease.view) {\n const missing = [...viewLease.missing];\n const optionalMissing = [...viewLease.optionalMissing];\n await viewLease.release();\n viewLease = undefined;\n if (this.#transitionCurrent(component, epoch)) {\n component.state = \"waiting\";\n component.missing = missing;\n component.optionalMissing = optionalMissing;\n component.updatedAt = Date.now();\n this.#emit(component.entry.id);\n }\n return;\n }\n if (!this.#transitionCurrent(component, epoch)) throw new FabricEffectDivertedError();\n const committedView = viewLease.view;\n scope = new FabricEffectScope({\n guard: () => this.#targetMatches(component, epoch, committedView.digest, baseContext),\n });\n component.scope = scope;\n component.viewLease = viewLease;\n component.abortController = controller;\n component.providerLeases = providerLeases;\n component.actionEffects = actionEffects;\n component.modelGuidance = modelGuidance;\n const declared = new Set(component.provisions);\n const assertRegistrationOpen = (): void => {\n if (component.tearingDown || scope?.state !== \"open\") {\n throw new Error(\n `Fabric component ${component.entry.id} cannot register effects during teardown`,\n );\n }\n };\n const invocation: FabricInvocationContext = {\n ...baseContext,\n signal: controller.signal,\n capabilityView: committedView,\n effectPolicy: component.guarantee === \"revertible\" ? \"strict\" : \"advisory\",\n };\n const context: FabricComponentContext = {\n id: component.entry.id,\n signal: controller.signal,\n invocation,\n view: committedView,\n effect: async (setup, registration) => {\n assertRegistrationOpen();\n const tracked = trackedRegistration(registration, \"anonymous\");\n if (component.guarantee === \"revertible\") {\n this.#assertEffectCapacity(component, 1);\n if (tracked.kind === \"emission\") {\n throw new Error(\n `Revertible Fabric component ${component.entry.id} cannot register an emission effect`,\n );\n }\n this.#assertIndependent(component, [registrationEffect(tracked)]);\n }\n const dispose = await scope!.effect(setup, tracked);\n return async () => {\n await dispose();\n this.refresh();\n };\n },\n defer: (disposer, registration) => {\n assertRegistrationOpen();\n const tracked = trackedRegistration(registration, \"deferred\");\n const dispose = scope!.defer(disposer, tracked);\n if (component.guarantee === \"revertible\") this.#assertEffectCapacity(component);\n if (component.guarantee === \"revertible\" && tracked.kind === \"emission\") {\n throw new Error(\n `Revertible Fabric component ${component.entry.id} cannot defer an emission effect`,\n );\n }\n return async () => {\n await dispose();\n this.refresh();\n };\n },\n guide: (guidance) => {\n assertRegistrationOpen();\n const normalized = normalizeFabricModelGuidance(guidance);\n if (modelGuidance.some((entry) => entry.label === normalized.label)) {\n throw new Error(\n `Fabric component ${component.entry.id} registered guidance label ${normalized.label} more than once`,\n );\n }\n if (modelGuidance.length >= MAX_FABRIC_MODEL_GUIDANCE_PER_COMPONENT) {\n throw new Error(\n `Fabric component ${component.entry.id} supports at most ${MAX_FABRIC_MODEL_GUIDANCE_PER_COMPONENT} guidance registrations`,\n );\n }\n const totalChars = modelGuidance.reduce((sum, entry) => sum + entry.content.length, 0) +\n normalized.content.length;\n if (totalChars > MAX_FABRIC_MODEL_GUIDANCE_TOTAL_CHARS) {\n throw new Error(\n `Fabric component ${component.entry.id} guidance exceeds ${MAX_FABRIC_MODEL_GUIDANCE_TOTAL_CHARS} characters`,\n );\n }\n const projection = [...this.#components.values()]\n .flatMap((candidate) => candidate.modelGuidance);\n if (projection.length >= MAX_FABRIC_MODEL_GUIDANCE_REGISTRATIONS) {\n throw new Error(\n `Fabric component guidance supports at most ${MAX_FABRIC_MODEL_GUIDANCE_REGISTRATIONS} registrations`,\n );\n }\n const projectionChars = projection.reduce((sum, entry) => sum + entry.content.length, 0) +\n normalized.content.length;\n if (projectionChars > MAX_FABRIC_MODEL_GUIDANCE_SNAPSHOT_CHARS) {\n throw new Error(\n `Fabric component guidance snapshot exceeds ${MAX_FABRIC_MODEL_GUIDANCE_SNAPSHOT_CHARS} characters`,\n );\n }\n const registration = {\n label: `guidance:${normalized.label}`,\n kind: \"transactional\" as const,\n resources: [`fabric:guidance:${component.entry.id}:${normalized.label}`],\n ordering: \"commutative\" as const,\n };\n if (component.guarantee === \"revertible\") {\n this.#assertEffectCapacity(component, 1);\n this.#assertIndependent(component, [registrationEffect(registration)]);\n }\n let registered = true;\n const unregister = (): void => {\n if (!registered) return;\n registered = false;\n const index = modelGuidance.indexOf(normalized);\n if (index >= 0) modelGuidance.splice(index, 1);\n component.updatedAt = Date.now();\n if (component.state === \"active\") this.#emit(component.entry.id);\n };\n modelGuidance.push(normalized);\n let dispose: FabricComponentDisposer;\n try {\n dispose = scope!.defer(unregister, registration);\n } catch (error) {\n unregister();\n throw error;\n }\n component.updatedAt = Date.now();\n if (component.state === \"active\") this.#emit(component.entry.id);\n return async () => {\n await dispose();\n this.refresh();\n };\n },\n provide: (provider) => {\n assertRegistrationOpen();\n if (component.guarantee === \"revertible\" && !provider.close) {\n throw new Error(\n `Revertible Fabric component ${component.entry.id} provider ${provider.name} must implement close()`,\n );\n }\n if (!declared.has(provider.name)) {\n throw new Error(\n `Fabric component ${component.entry.id} mounted undeclared provider ${provider.name}`,\n );\n }\n if (providerLeases.some((lease) => lease.name === provider.name)) {\n throw new Error(\n `Fabric component ${component.entry.id} mounted provider ${provider.name} more than once`,\n );\n }\n const lease = this.registry.mount(provider, { staged: true });\n providerLeases.push(lease);\n return lease;\n },\n use: <TConfig>(\n definition: FabricComponentDefinition<TConfig>,\n options?: FabricComponentChildOptions<TConfig>,\n ) => this.#insertChild(component, definition, options),\n acquire: async <T = unknown>(ref: string, args?: Record<string, unknown>) => {\n if (!committedView.bindings[ref]) {\n throw new Error(\n `Fabric component ${component.entry.id} acquired undeclared or unavailable capability ${ref}`,\n );\n }\n const action = await this.registry.describe(ref, invocation);\n if (action.effect?.kind !== \"scoped\") {\n throw new Error(`Fabric action is not a scoped acquisition: ${ref}`);\n }\n const effect = actionEffect(action)!;\n if (component.guarantee === \"revertible\") {\n this.#assertEffectCapacity(component, 1);\n this.#assertIndependent(component, [effect]);\n }\n const acquired = this.options.acquire\n ? await this.options.acquire(ref, args ?? {}, invocation)\n : await this.registry.acquireScoped(ref, args ?? {}, invocation);\n try {\n scope!.defer(acquired.dispose, {\n label: `acquire:${ref}`,\n kind: effect.kind,\n resources: effect.resources,\n ordering: effect.ordering,\n });\n } catch (error) {\n await acquired.dispose();\n throw error;\n }\n return acquired.value as T;\n },\n call: async (ref, args) => {\n if (!committedView.bindings[ref]) {\n throw new Error(\n `Fabric component ${component.entry.id} called undeclared or unavailable capability ${ref}`,\n );\n }\n const callInvocation: FabricInvocationContext = {\n ...invocation,\n signal: component.tearingDown ? undefined : invocation.signal,\n };\n const action = await this.registry.describe(ref, callInvocation);\n if (action.effect?.kind === \"scoped\") {\n throw new Error(`Fabric scoped action ${ref} must be used through context.acquire()`);\n }\n if (\n component.guarantee === \"revertible\" &&\n action.effect?.kind !== \"none\" &&\n action.effect?.kind !== \"transactional\"\n ) {\n throw new Error(\n `Revertible Fabric component ${component.entry.id} cannot emit non-revertible action ${ref}`,\n );\n }\n const effect = actionEffect(action);\n if (effect && component.guarantee === \"revertible\") {\n this.#assertEffectCapacity(component, 1);\n this.#assertIndependent(component, [effect]);\n }\n const callArgs = args ?? {};\n const value = this.options.invoke\n ? await this.options.invoke(ref, callArgs, callInvocation)\n : await this.registry.invoke(ref, callArgs, {\n ...callInvocation,\n approve: async () => {},\n audits: [] as FabricCallAudit[],\n maxResultChars: this.options.maxResultChars ?? 2_000_000,\n });\n if (effect && actionEffects.length < MAX_COMPONENT_EFFECTS) actionEffects.push(effect);\n return value;\n },\n };\n\n await scope.effect(\n () => component.definition.activate(context, component.entry.config),\n \"component:activate\",\n { beforeCleanup: () => { component.tearingDown = true; } },\n );\n const unprovided = component.provisions.filter(\n (name) => !providerLeases.some((lease) => lease.name === name),\n );\n if (unprovided.length > 0) {\n throw new Error(\n `Fabric component ${component.entry.id} did not mount declared providers: ${unprovided.join(\", \")}`,\n );\n }\n if (!(await this.#targetMatches(component, epoch, committedView.digest, baseContext))) {\n throw new FabricEffectDivertedError(\n `Fabric component ${component.entry.id} capability target changed during activation`,\n );\n }\n if (component.guarantee === \"revertible\") {\n this.#assertIndependent(component, this.#effects(component));\n }\n this.registry.activateProviderBindings(\n providerLeases.map((lease) => lease.bindingId),\n );\n if (!this.#transitionCurrent(component, epoch)) {\n throw new FabricEffectDivertedError(\n `Fabric component ${component.entry.id} was retired during activation`,\n );\n }\n component.state = \"active\";\n component.blockedOnEffects = false;\n component.consecutiveDiversions = 0;\n component.activationOrder = ++this.#activationSequence;\n component.optionalMissing = viewLease.optionalMissing;\n component.blockedKey = key;\n component.updatedAt = Date.now();\n this.#emit(component.entry.id);\n } catch (error) {\n component.tearingDown = true;\n controller.abort(error);\n for (const lease of providerLeases) lease.retire();\n const report = scope\n ? await scope.dispose()\n : { status: \"disposed\" as const, failures: [] };\n const providerCleanup = await Promise.allSettled(\n providerLeases.map((lease) => lease.release()),\n );\n const viewCleanup = viewLease\n ? (await Promise.allSettled([viewLease.release()]))[0]\n : undefined;\n if (component.scope === scope) component.scope = undefined;\n if (component.viewLease === viewLease) component.viewLease = undefined;\n if (component.abortController === controller) component.abortController = undefined;\n if (component.providerLeases === providerLeases) component.providerLeases = [];\n if (component.actionEffects === actionEffects) component.actionEffects = [];\n if (component.modelGuidance === modelGuidance) component.modelGuidance = [];\n component.tearingDown = false;\n component.updatedAt = Date.now();\n const cleanupErrors = [\n ...report.failures.map((failure) => `${failure.label}: ${failure.error}`),\n ...(error instanceof FabricEffectDivertedError && error.cleanupError !== undefined\n ? [`iterator-close: ${errorMessage(error.cleanupError)}`]\n : []),\n ...providerCleanup.flatMap((result) =>\n result.status === \"rejected\" ? [`provider: ${errorMessage(result.reason)}`] : [],\n ),\n ...providerLeases.flatMap((lease) =>\n lease.active ? [`provider:${lease.name}: binding remained active after rollback`] : [],\n ),\n ...(viewCleanup?.status === \"rejected\"\n ? [`capability-view: ${errorMessage(viewCleanup.reason)}`]\n : []),\n ];\n let diverted = error instanceof FabricEffectDivertedError ||\n !this.#transitionCurrent(component, epoch);\n if (!diverted && viewLease?.view) {\n try {\n diverted = !(await this.#targetMatches(\n component,\n epoch,\n viewLease.view.digest,\n baseContext,\n ));\n } catch {\n // A target probe failure does not erase the activation error that triggered cleanup.\n }\n }\n let retryDelayMs = 0;\n if (cleanupErrors.length > 0) {\n component.state = \"quarantined\";\n component.consecutiveDiversions = 0;\n component.error = errorMessage(error);\n component.cleanupErrors = cleanupErrors;\n } else if (diverted) {\n component.state = \"waiting\";\n component.consecutiveDiversions++;\n retryDelayMs = Math.min(2 ** (component.consecutiveDiversions - 1), 100);\n delete component.error;\n delete component.cleanupErrors;\n component.blockedOnEffects = false;\n delete component.blockedKey;\n } else {\n component.state = \"failed\";\n component.consecutiveDiversions = 0;\n component.blockedOnEffects = error instanceof FabricComponentIndependenceError;\n component.error = errorMessage(error);\n component.blockedKey = component.blockedOnEffects\n ? stableJsonHash({ key, effects: this.#effectEnvironmentDigest(component) })\n : key;\n }\n this.#emit(component.entry.id);\n if (diverted && !component.retired && !this.#closed) {\n await new Promise<void>((resolve) => setTimeout(resolve, retryDelayMs));\n if (!component.retired && !this.#closed) this.#requested = true;\n }\n }\n }\n\n async #targetMatches(\n component: ManagedComponent,\n epoch: number,\n digest: string,\n baseContext: FabricInvocationContext,\n ): Promise<boolean> {\n if (!this.#transitionCurrent(component, epoch)) return false;\n const { capabilityView: _committedView, ...uncommittedContext } = baseContext;\n const resolution = await this.registry.inspectCapabilities(component.requirements, {\n ...uncommittedContext,\n signal: undefined,\n });\n return this.#transitionCurrent(component, epoch) &&\n resolution.satisfied &&\n resolution.view?.digest === digest;\n }\n\n #transitionCurrent(component: ManagedComponent, epoch: number): boolean {\n return !component.retired &&\n component.epoch === epoch &&\n this.#components.get(component.entry.id) === component &&\n !this.#closed;\n }\n\n async #unload(component: ManagedComponent, visited: Set<string>): Promise<void> {\n if (visited.has(component.entry.id)) return;\n visited.add(component.entry.id);\n component.abortController?.abort(\n new Error(`Fabric component ${component.entry.id} is unloading`),\n );\n if (component.transition) await component.transition;\n if (!component.scope && !component.viewLease && component.providerLeases.length === 0) {\n if (component.state !== \"disposed\" && component.state !== \"quarantined\") {\n component.state = \"waiting\";\n }\n return;\n }\n const storage = await lifecycleStorage();\n const task = storage.run(\n { supervisor: this, componentId: component.entry.id, phase: \"unloading\" },\n () => this.#performUnload(component, visited),\n );\n component.transition = task;\n try {\n await task;\n } finally {\n if (component.transition === task) component.transition = undefined;\n this.#removeRetiredAfterTransition(component);\n }\n }\n\n async #performUnload(component: ManagedComponent, visited: Set<string>): Promise<void> {\n component.state = \"unloading\";\n component.tearingDown = true;\n component.updatedAt = Date.now();\n component.abortController?.abort(\n new Error(`Fabric component ${component.entry.id} is unloading`),\n );\n for (const lease of component.providerLeases) lease.retire();\n this.#emit(component.entry.id);\n\n const childCleanupErrors: string[] = [];\n const children = [...this.#components.values()]\n .filter((candidate) => candidate.parentId === component.entry.id)\n .sort((left, right) =>\n right.activationOrder - left.activationOrder ||\n right.createdAt - left.createdAt ||\n right.entry.id.localeCompare(left.entry.id),\n );\n for (const child of children) {\n try {\n await this.#retireOwnedChild(component.entry.id, child.entry.id, visited);\n } catch (error) {\n childCleanupErrors.push(`child:${child.entry.id}: ${errorMessage(error)}`);\n }\n }\n\n const bindingIds = new Set(component.providerLeases.map((lease) => lease.bindingId));\n for (const dependent of this.#components.values()) {\n if (dependent === component || !dependent.viewLease?.view) continue;\n const depends = Object.values(dependent.viewLease.view.bindings).some((binding) =>\n bindingIds.has(binding.providerBindingId),\n );\n if (depends) await this.#unload(dependent, visited);\n }\n\n const leases = component.providerLeases;\n const scope = component.scope;\n const viewLease = component.viewLease;\n const report = await scope?.dispose();\n const providerCleanup = await Promise.allSettled(leases.map((lease) => lease.release()));\n const viewCleanup = viewLease\n ? (await Promise.allSettled([viewLease.release()]))[0]\n : undefined;\n component.scope = undefined;\n component.viewLease = undefined;\n component.abortController = undefined;\n component.providerLeases = [];\n component.actionEffects = [];\n component.modelGuidance = [];\n component.tearingDown = false;\n component.updatedAt = Date.now();\n const cleanupErrors = [\n ...childCleanupErrors,\n ...(report?.failures ?? []).map(\n (failure) => `${failure.label}: ${failure.error}`,\n ),\n ...providerCleanup.flatMap((result) =>\n result.status === \"rejected\" ? [`provider: ${errorMessage(result.reason)}`] : [],\n ),\n ...leases.flatMap((lease) =>\n lease.active ? [`provider:${lease.name}: binding remained active after unload`] : [],\n ),\n ...(viewCleanup?.status === \"rejected\"\n ? [`capability-view: ${errorMessage(viewCleanup.reason)}`]\n : []),\n ];\n if (cleanupErrors.length > 0) {\n component.state = \"quarantined\";\n component.error = `Fabric component ${component.entry.id} cleanup failed`;\n component.cleanupErrors = cleanupErrors;\n } else {\n component.state = \"waiting\";\n delete component.cleanupErrors;\n }\n this.#emit(component.entry.id);\n }\n\n async #retireOwnedChild(\n parentId: string,\n childId: string,\n visited = new Set<string>(),\n ): Promise<void> {\n const child = this.#components.get(childId);\n if (!child || child.parentId !== parentId) return;\n this.#retire(child);\n await this.#unload(child, visited);\n if (this.#components.get(childId) !== child) return;\n const cleanupError = child.state === \"quarantined\"\n ? new Error(child.error ?? `Fabric child component ${childId} cleanup failed`)\n : undefined;\n child.state = child.state === \"quarantined\" ? \"quarantined\" : \"disposed\";\n child.updatedAt = Date.now();\n this.#emit(childId);\n this.#components.delete(childId);\n this.#emit(childId);\n this.#requested = true;\n if (cleanupError) throw cleanupError;\n }\n\n #removeRetiredAfterTransition(component: ManagedComponent): void {\n if (\n !component.removeWhenSettled ||\n component.state === \"quarantined\" ||\n this.#components.get(component.entry.id) !== component\n ) return;\n component.removeWhenSettled = false;\n component.state = \"disposed\";\n component.updatedAt = Date.now();\n this.#emit(component.entry.id);\n this.#components.delete(component.entry.id);\n this.#emit(component.entry.id);\n this.#requested = true;\n }\n\n #effects(component: ManagedComponent): FabricComponentEffectInfo[] {\n const scopedLimit = Math.max(0, MAX_COMPONENT_EFFECTS - component.actionEffects.length);\n const effects = [\n ...(component.scope?.footprint(scopedLimit) ?? []),\n ...component.actionEffects.slice(0, MAX_COMPONENT_EFFECTS),\n ].slice(0, MAX_COMPONENT_EFFECTS);\n return effects\n .map((effect) => ({ ...effect, resources: [...effect.resources] }))\n .sort(compareEffectInfo);\n }\n\n #effectConflicts(\n component: ManagedComponent,\n effects = this.#effects(component),\n ): FabricComponentEffectConflict[] {\n const summary = summarizeEffects(effects);\n const conflicts: FabricComponentEffectConflict[] = [];\n for (const other of this.#components.values()) {\n if (other === component) continue;\n for (const conflict of effectConflictsBetween(\n summary,\n summarizeEffects(this.#effects(other)),\n )) {\n conflicts.push({ withComponent: other.entry.id, ...conflict });\n if (conflicts.length >= 64) break;\n }\n if (conflicts.length >= 64) break;\n }\n return conflicts.sort((left, right) =>\n left.withComponent.localeCompare(right.withComponent) ||\n left.reason.localeCompare(right.reason) ||\n left.resources.join(\"\\0\").localeCompare(right.resources.join(\"\\0\")),\n );\n }\n\n #effectEnvironmentDigest(component: ManagedComponent): string {\n const environment = [...this.#components.values()]\n .filter((other) => other !== component)\n .sort((left, right) => left.entry.id.localeCompare(right.entry.id))\n .flatMap((other) => {\n const effects = this.#effects(other);\n return effects.length > 0\n ? [{ id: other.entry.id, guarantee: other.guarantee, effects }]\n : [];\n });\n return stableJsonHash(environment);\n }\n\n #assertEffectCapacity(component: ManagedComponent, additional = 0): void {\n if (component.guarantee !== \"revertible\") return;\n const count = (component.scope?.footprint(MAX_COMPONENT_EFFECTS + 1).length ?? 0) +\n component.actionEffects.length + additional;\n if (count > MAX_COMPONENT_EFFECTS) {\n throw new Error(\n `Revertible Fabric component ${component.entry.id} exceeds ${MAX_COMPONENT_EFFECTS} tracked effects`,\n );\n }\n }\n\n #assertIndependent(\n component: ManagedComponent,\n effects: readonly FabricComponentEffectInfo[],\n ): void {\n const conflicts = this.#effectConflicts(component, [...effects]);\n if (conflicts.length === 0) return;\n throw new FabricComponentIndependenceError(\n `Revertible Fabric component ${component.entry.id} has non-independent effects: ` +\n conflicts.map((conflict) =>\n formatFabricEffectConflict(\n conflict.withComponent,\n conflict.resources,\n conflict.reason,\n )\n ).join(\"; \"),\n );\n }\n\n #invocationContext(component: ManagedComponent): FabricInvocationContext {\n const base = this.options.invocationContext?.() ?? defaultInvocationContext();\n return {\n ...base,\n parentToolCallId: `component:${component.entry.id}:${component.revision}`,\n nestedToolCallId: `component:${component.entry.id}:${component.revision}`,\n };\n }\n\n #info(\n component: ManagedComponent,\n projectedEffects?: FabricComponentEffectInfo[],\n projectedConflicts?: FabricComponentEffectConflict[],\n ): FabricComponentInfo {\n const effects = projectedEffects ?? this.#effects(component);\n const effectConflicts = component.guarantee === \"revertible\"\n ? projectedConflicts ?? this.#effectConflicts(component, effects)\n : [];\n return {\n id: component.entry.id,\n component: component.definition.name,\n ...(component.parentId ? { parentId: component.parentId } : {}),\n state: component.state,\n guarantee: component.guarantee,\n revision: component.revision,\n requirements: component.requirements.map((requirement) => requirement.ref),\n provisions: [...component.provisions],\n missing: [...component.missing],\n optionalMissing: [...component.optionalMissing],\n effects,\n ...(effectConflicts.length > 0 ? { effectConflicts } : {}),\n ...(component.state === \"active\" && component.modelGuidance.length > 0\n ? { guidance: component.modelGuidance.map(fabricModelGuidanceInfo) }\n : {}),\n ...(component.viewLease?.view?.digest\n ? { targetDigest: component.viewLease.view.digest }\n : {}),\n ...(component.error ? { error: component.error } : {}),\n ...(component.cleanupErrors\n ? { cleanupErrors: [...component.cleanupErrors] }\n : {}),\n createdAt: component.createdAt,\n updatedAt: component.updatedAt,\n };\n }\n\n #cycles(edges: FabricComponentGraph[\"edges\"]): string[][] {\n const adjacent = new Map<string, string[]>();\n for (const edge of edges) {\n const targets = adjacent.get(edge.from) ?? [];\n targets.push(edge.to);\n adjacent.set(edge.from, targets);\n }\n const cycles = new Map<string, string[]>();\n const visit = (node: string, path: string[], positions: Map<string, number>): void => {\n const position = positions.get(node);\n if (position !== undefined) {\n const cycle = path.slice(position);\n const rotations = cycle.map((_, index) => [\n ...cycle.slice(index),\n ...cycle.slice(0, index),\n ]);\n rotations.sort((left, right) => left.join(\"\\0\").localeCompare(right.join(\"\\0\")));\n const canonical = rotations[0]!;\n cycles.set(canonical.join(\"\\0\"), canonical);\n return;\n }\n if (path.length > this.#components.size) return;\n const nextPositions = new Map(positions).set(node, path.length);\n for (const target of adjacent.get(node) ?? []) {\n visit(target, [...path, node], nextPositions);\n }\n };\n for (const id of this.#components.keys()) visit(id, [], new Map());\n return [...cycles.values()].sort((left, right) =>\n left.join(\"\\0\").localeCompare(right.join(\"\\0\")),\n );\n }\n\n #selfLifecycleStop(id: string): boolean {\n const frame = componentLifecycleStorage?.getStore();\n return frame?.supervisor === this && frame.componentId === id;\n }\n\n #assertLifecycleCallAllowed(operation: string): void {\n const frame = componentLifecycleStorage?.getStore();\n if (!frame || frame.supervisor !== this) return;\n throw new Error(\n `Cannot ${operation} from ${frame.phase} transition ${frame.componentId}`,\n );\n }\n\n #require(id: string): ManagedComponent {\n const component = this.#components.get(id);\n if (!component) throw new Error(`Unknown Fabric component: ${id}`);\n return component;\n }\n\n #assertOpen(): void {\n if (this.#closed) throw new Error(\"Fabric component supervisor is closed\");\n }\n\n #emit(componentId?: string): void {\n for (const listener of [...this.#listeners]) {\n try {\n listener(componentId);\n } catch {\n // Lifecycle observers cannot affect component ownership.\n }\n }\n }\n}\n", "import { stableJsonHash } from \"../core/stable-hash.js\";\nimport { FabricComponentCatalog } from \"./catalog.js\";\nimport { FabricComponentSupervisor } from \"./supervisor.js\";\nimport type {\n FabricComponentDefinition,\n FabricComponentEntry,\n FabricComponentGraph,\n FabricComponentInfo,\n} from \"./types.js\";\n\ninterface LoadedComponent {\n entry: FabricComponentEntry;\n definition: FabricComponentDefinition;\n definitionRevision: number;\n entryHash: string;\n}\n\nconst ID_PATTERN = /^[a-zA-Z0-9][a-zA-Z0-9._-]{0,127}$/;\nconst message = (error: unknown): string => error instanceof Error ? error.message : String(error);\nconst cloneEntry = (entry: FabricComponentEntry): FabricComponentEntry => structuredClone(entry);\nconst entryHash = (entry: FabricComponentEntry): string => stableJsonHash(entry);\n\nexport class FabricComponentLoader {\n readonly #loaded = new Map<string, LoadedComponent>();\n readonly #errors = new Map<string, string>();\n readonly #firstSeen = new Map<string, number>();\n readonly #unsubscribeCatalog: () => void;\n #desired = new Map<string, FabricComponentEntry>();\n #pinned = new Map<string, FabricComponentEntry>();\n #tail: Promise<void> = Promise.resolve();\n #closed = false;\n\n constructor(\n readonly catalog: FabricComponentCatalog,\n readonly supervisor: FabricComponentSupervisor,\n ) {\n this.#unsubscribeCatalog = catalog.subscribe((event) => {\n const affected = [...this.#targetEntries().values()].filter(\n (entry) => entry.component === event.name && entry.disabled !== true,\n );\n if (affected.length === 0 || this.#closed) return;\n void this.#enqueue(() => this.#applyDesired()).catch((error) => {\n for (const entry of affected) this.#errors.set(entry.id, message(error));\n });\n });\n }\n\n entries(): FabricComponentEntry[] {\n return [...this.#desired.values()].map(cloneEntry);\n }\n\n pinnedEntries(): FabricComponentEntry[] {\n return [...this.#pinned.values()].map(cloneEntry);\n }\n\n definitions(): Array<{\n name: string;\n description?: string;\n revision: number;\n requirements: string[];\n provisions: string[];\n }> {\n return this.catalog.list().map(({ definition, revision }) => ({\n name: definition.name,\n ...(definition.description ? { description: definition.description } : {}),\n revision,\n requirements: (definition.requires ?? []).map((requirement) =>\n typeof requirement === \"string\" ? requirement : requirement.ref,\n ),\n provisions: (definition.provides ?? []).map((provision) =>\n typeof provision === \"string\" ? provision : provision.provider,\n ),\n }));\n }\n\n list(): FabricComponentInfo[] {\n const live = new Map(\n this.supervisor.list().map((info) => [\n info.id,\n this.#errors.has(info.id) ? { ...info, error: this.#errors.get(info.id)! } : info,\n ]),\n );\n for (const entry of this.#targetEntries().values()) {\n if (entry.disabled || live.has(entry.id) || this.catalog.get(entry.component)) continue;\n const now = this.#firstSeen.get(entry.id) ?? Date.now();\n this.#firstSeen.set(entry.id, now);\n live.set(entry.id, {\n id: entry.id,\n component: entry.component,\n state: \"waiting\",\n guarantee: \"managed\",\n requirements: [],\n provisions: [],\n missing: [`component:${entry.component}`],\n optionalMissing: [],\n effects: [],\n error: `Fabric component definition is unavailable: ${entry.component}`,\n revision: 0,\n createdAt: now,\n updatedAt: now,\n });\n }\n return [...live.values()].sort((left, right) => left.id.localeCompare(right.id));\n }\n\n status(id: string): FabricComponentInfo {\n const info = this.list().find((candidate) => candidate.id === id);\n if (!info) throw new Error(`Unknown Fabric component: ${id}`);\n return info;\n }\n\n graph(): FabricComponentGraph {\n const graph = this.supervisor.graph();\n const present = new Set(graph.components.map((component) => component.id));\n return {\n ...graph,\n components: [\n ...graph.components,\n ...this.list().filter((component) => !present.has(component.id)),\n ].sort((left, right) => left.id.localeCompare(right.id)),\n };\n }\n\n reload(id?: string): Promise<FabricComponentInfo[]> {\n this.supervisor.assertLifecycleEntryAllowed(\"reload the component loader\");\n return this.#enqueue(async () => {\n const targets = id\n ? [[id, this.#loaded.get(id)] as const]\n : [...this.#loaded.entries()];\n if (id && !targets[0]?.[1]) {\n const desired = this.#targetEntries().get(id);\n if (desired && !this.catalog.get(desired.component)) {\n throw new Error(`Fabric component definition is unavailable: ${desired.component}`);\n }\n throw new Error(`Unknown Fabric component: ${id}`);\n }\n for (const [componentId, loaded] of targets) {\n if (!loaded) continue;\n try {\n await this.supervisor.replace(componentId, loaded.entry, loaded.definition);\n this.#errors.delete(componentId);\n } catch (error) {\n this.#errors.set(componentId, message(error));\n throw error;\n }\n }\n return id ? [this.status(id)] : this.list();\n });\n }\n\n installPinned(entries: readonly FabricComponentEntry[]): Promise<FabricComponentInfo[]> {\n this.supervisor.assertLifecycleEntryAllowed(\"install pinned components\");\n if (entries.length > 256) throw new Error(\"Fabric supports at most 256 pinned components\");\n const next = this.#entryMap(entries);\n return this.#enqueue(async () => {\n for (const id of next.keys()) {\n if (this.#desired.has(id)) {\n throw new Error(`Pinned Fabric component id conflicts with configured entry: ${id}`);\n }\n }\n const previous = this.#pinned;\n this.#pinned = next;\n try {\n await this.#applyDesired();\n return this.list();\n } catch (error) {\n this.#pinned = previous;\n throw error;\n }\n });\n }\n\n reconcile(entries: readonly FabricComponentEntry[]): Promise<FabricComponentInfo[]> {\n this.supervisor.assertLifecycleEntryAllowed(\"reconcile the component loader\");\n if (entries.length > 256) throw new Error(\"Fabric configuration supports at most 256 components\");\n const next = this.#entryMap(entries);\n return this.#enqueue(async () => {\n for (const id of next.keys()) {\n if (this.#pinned.has(id)) {\n throw new Error(`Fabric component entry id is reserved by a pinned component: ${id}`);\n }\n }\n const previous = this.#desired;\n this.#desired = next;\n try {\n await this.#applyDesired();\n return this.list();\n } catch (error) {\n this.#desired = previous;\n throw error;\n }\n });\n }\n\n async settle(): Promise<void> {\n await this.#tail;\n await this.supervisor.settle();\n await this.#tail;\n }\n\n async close(): Promise<void> {\n if (this.#closed) return;\n this.supervisor.assertLifecycleEntryAllowed(\"close the component loader\");\n this.#closed = true;\n this.#unsubscribeCatalog();\n await this.#tail;\n await this.supervisor.close();\n this.#loaded.clear();\n this.#pinned.clear();\n }\n\n #entryMap(entries: readonly FabricComponentEntry[]): Map<string, FabricComponentEntry> {\n const next = new Map<string, FabricComponentEntry>();\n for (const rawEntry of entries) {\n const entry = cloneEntry(rawEntry);\n if (!ID_PATTERN.test(entry.id)) throw new Error(`Invalid Fabric component id: ${entry.id}`);\n if (!entry.component.trim()) {\n throw new Error(`Fabric component entry ${entry.id} has an empty component name`);\n }\n if (next.has(entry.id)) throw new Error(`Duplicate Fabric component entry id: ${entry.id}`);\n next.set(entry.id, entry);\n }\n return next;\n }\n\n #targetEntries(): Map<string, FabricComponentEntry> {\n return new Map([...this.#pinned, ...this.#desired]);\n }\n\n #enqueue<T>(operation: () => Promise<T>): Promise<T> {\n if (this.#closed) return Promise.reject(new Error(\"Fabric component loader is closed\"));\n const run = this.#tail.then(operation, operation);\n this.#tail = run.then(() => undefined, () => undefined);\n return run;\n }\n\n async #applyDesired(): Promise<void> {\n const targets = new Map<string, LoadedComponent>();\n for (const entry of this.#targetEntries().values()) {\n if (entry.disabled) continue;\n const catalogEntry = this.catalog.get(entry.component);\n if (!catalogEntry) continue;\n targets.set(entry.id, {\n entry: cloneEntry(entry),\n definition: catalogEntry.definition,\n definitionRevision: catalogEntry.revision,\n entryHash: entryHash(entry),\n });\n }\n\n const added: string[] = [];\n const changed: Array<{ id: string; previous: LoadedComponent }> = [];\n const removed: LoadedComponent[] = [];\n try {\n for (const [id, target] of targets) {\n const current = this.#loaded.get(id);\n if (!current) {\n try {\n await this.supervisor.start(target.entry, target.definition);\n this.#loaded.set(id, target);\n added.push(id);\n } catch (error) {\n try { await this.supervisor.stop(id); } catch { /* Preserve the original load error. */ }\n throw error;\n }\n continue;\n }\n if (\n current.entryHash === target.entryHash &&\n current.definitionRevision === target.definitionRevision\n ) {\n continue;\n }\n await this.supervisor.replace(id, target.entry, target.definition);\n changed.push({ id, previous: current });\n this.#loaded.set(id, target);\n }\n\n for (const [id, current] of [...this.#loaded]) {\n if (targets.has(id)) continue;\n await this.supervisor.stop(id);\n this.#loaded.delete(id);\n removed.push(current);\n }\n for (const id of targets.keys()) {\n this.#errors.delete(id);\n this.#firstSeen.delete(id);\n }\n } catch (error) {\n const rollbackErrors: unknown[] = [];\n for (const current of removed.reverse()) {\n try {\n await this.supervisor.start(current.entry, current.definition);\n this.#loaded.set(current.entry.id, current);\n } catch (rollbackError) {\n rollbackErrors.push(rollbackError);\n }\n }\n for (const { id, previous } of changed.reverse()) {\n try {\n await this.supervisor.replace(id, previous.entry, previous.definition);\n this.#loaded.set(id, previous);\n } catch (rollbackError) {\n rollbackErrors.push(rollbackError);\n }\n }\n for (const id of added.reverse()) {\n try {\n await this.supervisor.stop(id);\n this.#loaded.delete(id);\n } catch (rollbackError) {\n rollbackErrors.push(rollbackError);\n }\n }\n for (const id of targets.keys()) this.#errors.set(id, message(error));\n if (rollbackErrors.length > 0) {\n throw new AggregateError(\n [error, ...rollbackErrors],\n \"Fabric component transaction and rollback failed\",\n );\n }\n throw error;\n }\n }\n}\n", "import type { ExtensionContext } from \"@oh-my-pi/pi-coding-agent\";\nimport {\n compactionRequestBoundsError,\n encodeCompactionRequest,\n} from \"../compaction/instructions.js\";\n\n// A pending-intent controller for the host OMP session's context compaction.\n//\n// Compaction here is a deliberate, advisory-then-committed act: the model (or a\n// skill) requests a compaction by calling `request()`, which only records the\n// *intent*. The host commits it later at a safe boundary \u2014 `agent_end`,\n// never mid-turn and never while a turn is in flight \u2014 by calling\n// `maybeCommit(context)`, which forwards to `ExtensionContext.compact()`.\n//\n// This mirrors Schema's harness-enforced gate: there is exactly one write path\n// from thought (intent) to action (commit), and the host \u2014 not the model \u2014\n// decides when it is safe. The model cannot compact the running context\n// directly; it can only ask, and the ask is a single replaceable slot.\n\nexport interface CompactRequestIntent {\n reason?: string;\n instructions?: string;\n preserve?: string[];\n requestedBy?: string;\n}\n\nexport interface CompactPendingIntent {\n reason?: string;\n instructions?: string;\n preserve?: string[];\n requestedBy: string;\n requestedAt: number;\n}\n\ntype CompactCommitStatus = \"committed\" | \"cancelled\" | \"failed\";\n\n\nexport interface CompactLastCommit {\n at: number;\n requestedBy: string;\n status: CompactCommitStatus;\n summary?: string;\n tokensBefore?: number;\n estimatedTokensAfter?: number;\n error?: string;\n}\n\nexport interface CompactStatus {\n pending?: CompactPendingIntent;\n last?: CompactLastCommit;\n}\n\nexport interface CompactControllerHooks {\n // Fired when a new intent is recorded (request replaces any pending one).\n onRequest?: (intent: CompactPendingIntent) => void;\n // Fired when the host settles a recorded intent: \"committed\" after the OMP\n // compaction promise resolves, \"cancelled\" for an expected cancellation, and\n // \"failed\" for any other error.\n onCommit?: (info: CompactLastCommit) => void;\n}\n\nconst DEFAULT_REQUESTED_BY = \"model\";\n\nconst isString = (value: unknown): value is string =>\n typeof value === \"string\" && value.length > 0;\n\nconst checkedPreserve = (value: unknown): string[] | undefined => {\n if (value === undefined) return undefined;\n if (!Array.isArray(value) || !value.every((item) => typeof item === \"string\")) {\n throw new Error(\"compact preserve must be an array of strings\");\n }\n return [...value];\n};\n\nexport class CompactController {\n #pending: CompactPendingIntent | undefined;\n #last: CompactLastCommit | undefined;\n #inFlight: Promise<void> | undefined;\n readonly #hooks: CompactControllerHooks;\n\n constructor(hooks: CompactControllerHooks = {}) {\n this.#hooks = hooks;\n }\n\n // Record a pending compaction intent. A single slot: a new request replaces\n // any pending one, keeping the latest instructions.\n request(intent: CompactRequestIntent): CompactPendingIntent {\n const preserve = checkedPreserve(intent.preserve);\n const request = {\n ...(intent.instructions !== undefined ? { instructions: intent.instructions } : {}),\n ...(preserve !== undefined ? { preserve } : {}),\n };\n const boundsError = compactionRequestBoundsError(request);\n if (boundsError) throw new Error(boundsError.message);\n if (preserve !== undefined) encodeCompactionRequest(request);\n const pending: CompactPendingIntent = {\n requestedBy: isString(intent.requestedBy) ? intent.requestedBy! : DEFAULT_REQUESTED_BY,\n requestedAt: Date.now(),\n ...(isString(intent.reason) ? { reason: intent.reason } : {}),\n ...(isString(intent.instructions) ? { instructions: intent.instructions } : {}),\n ...(preserve !== undefined ? { preserve } : {}),\n };\n this.#pending = pending;\n this.#hooks.onRequest?.(pending);\n return pending;\n }\n\n // Clear a pending intent without committing. Safe to call when nothing is\n // pending.\n cancel(): void {\n this.#pending = undefined;\n }\n\n status(): CompactStatus {\n return {\n ...(this.#pending ? { pending: this.#pending } : {}),\n ...(this.#last ? { last: this.#last } : {}),\n };\n }\n\n async maybeCommit(context: ExtensionContext): Promise<void> {\n if (this.#inFlight) return this.#inFlight;\n const pending = this.#pending;\n if (!pending) return;\n\n const requestedBy = pending.requestedBy;\n const instructions = pending.preserve\n ? encodeCompactionRequest({\n ...(pending.instructions !== undefined ? { instructions: pending.instructions } : {}),\n preserve: pending.preserve,\n })\n : pending.instructions;\n const committing = pending;\n const clearCommittedIntent = (): void => {\n if (this.#pending === committing) this.#pending = undefined;\n };\n const completion = (async (): Promise<void> => {\n try {\n await context.compact(instructions);\n clearCommittedIntent();\n this.#last = { at: Date.now(), requestedBy, status: \"committed\" };\n this.#hooks.onCommit?.(this.#last);\n } catch (error) {\n const message = error instanceof Error ? error.message : \"Compaction failed\";\n clearCommittedIntent();\n const cancelled = message === \"Compaction cancelled\" || message === \"Already compacted\";\n this.#last = {\n at: Date.now(),\n requestedBy,\n status: cancelled ? \"cancelled\" : \"failed\",\n error: message,\n };\n this.#hooks.onCommit?.(this.#last);\n }\n })();\n this.#inFlight = completion;\n try {\n await completion;\n } finally {\n if (this.#inFlight === completion) this.#inFlight = undefined;\n }\n }\n}\n", "import { runAbortable } from \"../async-settlement.js\";\nimport type {\n AgentToolResult,\n ExtensionRunner,\n} from \"@oh-my-pi/pi-coding-agent\";\nimport {\n FABRIC_TOOL_RESULT_PROXY_KIND,\n readFabricToolResultProxyDetailsV1,\n type FabricToolResultProxyDetailsV1,\n} from \"../protocol.js\";\nimport type { ResolvedFabricAction } from \"./action-registry.js\";\n\ntype ToolContent = AgentToolResult<unknown>[\"content\"];\n\nexport interface FabricToolResultProxyRequest {\n action: ResolvedFabricAction;\n args: Record<string, unknown>;\n toolCallId: string;\n value: unknown;\n signal?: AbortSignal;\n}\n\nexport interface FabricNestedToolResultProxy {\n proxy(request: FabricToolResultProxyRequest): Promise<unknown>;\n}\n\nconst nativeLifecycleProviders = new Set([\"omp\", \"extensions\"]);\n\nconst textFromContent = (content: ToolContent): string =>\n content\n .filter((part): part is { type: \"text\"; text: string } => part.type === \"text\")\n .map((part) => part.text)\n .join(\"\\n\");\n\nconst textForValue = (value: unknown): string => {\n if (typeof value === \"string\") return value;\n try {\n return JSON.stringify(value) ?? String(value);\n } catch {\n return String(value);\n }\n};\n\nconst valueFromContent = (content: ToolContent): unknown => {\n if (content.every((part) => part.type === \"text\")) return textFromContent(content);\n return { content };\n};\n\nexport class FabricToolResultProxy implements FabricNestedToolResultProxy {\n constructor(readonly runner: () => ExtensionRunner | undefined) {}\n\n async proxy(request: FabricToolResultProxyRequest): Promise<unknown> {\n if (nativeLifecycleProviders.has(request.action.provider)) return request.value;\n const runner = this.runner();\n if (!runner) return request.value;\n\n const content: ToolContent = [{ type: \"text\", text: textForValue(request.value) }];\n const details: FabricToolResultProxyDetailsV1 = {\n kind: FABRIC_TOOL_RESULT_PROXY_KIND,\n ref: request.action.ref,\n result: request.value,\n };\n const patch = await runAbortable(request.signal, () => runner.emitToolResult({\n type: \"tool_result\",\n toolName: request.action.ref,\n toolCallId: request.toolCallId,\n input: request.args,\n content,\n details,\n isError: false,\n }));\n if (!patch) return request.value;\n\n const patchedContent = patch.content ?? content;\n if (patch.isError === true) {\n throw new Error(\n textFromContent(patchedContent).trim() ||\n `Fabric result middleware marked ${request.action.ref} as failed.`,\n );\n }\n\n const patchedDetails = readFabricToolResultProxyDetailsV1(patch.details);\n if (\n patchedDetails?.ref === request.action.ref &&\n !Object.is(patchedDetails.result, request.value)\n ) {\n return patchedDetails.result;\n }\n if (patchedContent !== content) return valueFromContent(patchedContent);\n return request.value;\n }\n}\n", "// Static detection lets Fabric start known orchestration programs with the\n// longer agent deadline. The runtime also extends the deadline when a\n// blocking agent ref is discovered dynamically through tools.call(), so\n// computed and aliased refs cannot fall back to the short executor timeout.\nconst BLOCKING_ORCHESTRATION_REFS = new Set([\n \"agents.run\",\n \"agents.wait\",\n \"agents.ask\",\n]);\n\nexport const isBlockingOrchestrationRef = (ref: string): boolean =>\n BLOCKING_ORCHESTRATION_REFS.has(ref);\n\n// Match blocking guest entry points as call sites (a trailing \"(\"), and\n// tolerate a single-level generic such as agent<{ items: string[] }>(...).\n// agents.handoff is excluded because it only schedules work at the completed\n// outer fabric_exec boundary.\nconst ORCHESTRATION_RE =\n /\\b(?:workflow\\.agent|agents\\.(?:run|wait|ask)|council\\.run|rlm\\.query)\\s*\\(|(?<!\\.)\\bagent\\s*(?:<[^<>]*>)?\\s*\\(/;\n\nexport const codeUsesOrchestration = (code: string): boolean =>\n ORCHESTRATION_RE.test(code);\n", "import type { Usage } from \"@oh-my-pi/pi-ai\";\nimport type { ExtensionContext } from \"@oh-my-pi/pi-coding-agent\";\nimport {\n FabricExecutionTraceRecorder,\n FabricTraceSafeError,\n executionOutcomeFromError,\n type FabricExecutionFailureStageV1,\n type FabricExecutionTraceOperationHandle,\n type FabricExecutionTraceV1,\n} from \"./audit/trace.js\";\nimport { FabricActivityStore } from \"./activity/store.js\";\nimport type { CapturedToolCatalog } from \"./capture/catalog.js\";\nimport { isOmpShellRef } from \"./core/omp-tools.js\";\nimport type {\n FabricActivityEventInput,\n FabricActivityItemInput,\n FabricPhaseInput,\n FabricRunDisplay,\n} from \"./activity/types.js\";\nimport {\n MAX_AGENT_TIMEOUT_MS,\n MIN_AGENT_TIMEOUT_MS,\n type FabricConfig,\n} from \"./config.js\";\nimport {\n ActionRegistry,\n type FabricCallAudit,\n type FabricRegistryActivityEvent,\n} from \"./core/action-registry.js\";\nimport {\n ApprovalController,\n FabricSessionApprovals,\n type FabricAutoApprovalAudit,\n} from \"./core/approval-controller.js\";\nimport { FabricAutoApprovalClassifier } from \"./core/auto-approval-classifier.js\";\nimport {\n codeUsesOrchestration,\n isBlockingOrchestrationRef,\n} from \"./runtime/orchestration.js\";\nimport type { FabricCommittedCapabilityView } from \"./protocol.js\";\nimport { fabricExecTitleHintCached } from \"./ui/fabric-title-hint.js\";\nimport type {\n QuickJsRuntime,\n FabricSandboxResult,\n FabricSandboxTerminationReason,\n} from \"./runtime/quickjs-runtime.js\";\nimport type { NodeProcessRuntime } from \"./runtime/node-process-runtime.js\";\nimport { repairFabricGuestCode } from \"./runtime/guest-code-repair.js\";\nimport type { FabricTypeError } from \"./runtime/type-checker.js\";\n\nlet runtimeDependencies:\n | Promise<{\n QuickJsRuntime: typeof import(\"./runtime/quickjs-runtime.js\").QuickJsRuntime;\n NodeProcessRuntime: typeof import(\"./runtime/node-process-runtime.js\").NodeProcessRuntime;\n BunProcessRuntime: typeof import(\"./runtime/node-process-runtime.js\").BunProcessRuntime;\n typeCheckFabricCode: typeof import(\"./runtime/type-checker.js\").typeCheckFabricCode;\n guestTypeDeclarations: typeof import(\"./runtime/guest-types.js\").guestTypeDeclarations;\n buildDynamicGuestDeclarations: typeof import(\"./runtime/dynamic-guest-types.js\").buildDynamicGuestDeclarations;\n buildCoreOverrideGuestDeclarations: typeof import(\"./runtime/core-override-guest-types.js\").buildCoreOverrideGuestDeclarations;\n }>\n | undefined;\n\nconst loadRuntimeDependencies = () =>\n runtimeDependencies ??= Promise.all([\n import(\"./runtime/quickjs-runtime.js\"),\n import(\"./runtime/node-process-runtime.js\"),\n import(\"./runtime/type-checker.js\"),\n import(\"./runtime/guest-types.js\"),\n import(\"./runtime/dynamic-guest-types.js\"),\n import(\"./runtime/core-override-guest-types.js\"),\n ]).then(([quickjs, nodeProcess, checker, guest, dynamicGuest, coreOverrides]) => ({\n QuickJsRuntime: quickjs.QuickJsRuntime,\n NodeProcessRuntime: nodeProcess.NodeProcessRuntime,\n BunProcessRuntime: nodeProcess.BunProcessRuntime,\n typeCheckFabricCode: checker.typeCheckFabricCode,\n guestTypeDeclarations: guest.guestTypeDeclarations,\n buildDynamicGuestDeclarations: dynamicGuest.buildDynamicGuestDeclarations,\n buildCoreOverrideGuestDeclarations: coreOverrides.buildCoreOverrideGuestDeclarations,\n }));\n\nconst executionOutcomeFromTermination = (\n reason: FabricSandboxTerminationReason,\n): \"succeeded\" | \"failed\" | \"aborted\" | \"timed_out\" => {\n switch (reason) {\n case \"completed\":\n return \"succeeded\";\n case \"aborted\":\n return \"aborted\";\n case \"timed_out\":\n return \"timed_out\";\n case \"runtime_error\":\n return \"failed\";\n }\n};\n\nconst aggregateUsage = (usages: Usage[]): Usage => ({\n input: usages.reduce((total, usage) => total + usage.input, 0),\n output: usages.reduce((total, usage) => total + usage.output, 0),\n cacheRead: usages.reduce((total, usage) => total + usage.cacheRead, 0),\n cacheWrite: usages.reduce((total, usage) => total + usage.cacheWrite, 0),\n ...(usages.some((usage) => (usage as Usage & { cacheWrite1h?: number }).cacheWrite1h !== undefined)\n ? { cacheWrite1h: usages.reduce((total, usage) => total + ((usage as Usage & { cacheWrite1h?: number }).cacheWrite1h ?? 0), 0) }\n : {}),\n ...(usages.some((usage) => (usage as Usage & { reasoning?: number }).reasoning !== undefined)\n ? { reasoning: usages.reduce((total, usage) => total + ((usage as Usage & { reasoning?: number }).reasoning ?? 0), 0) }\n : {}),\n totalTokens: usages.reduce((total, usage) => total + usage.totalTokens, 0),\n cost: {\n input: usages.reduce((total, usage) => total + usage.cost.input, 0),\n output: usages.reduce((total, usage) => total + usage.cost.output, 0),\n cacheRead: usages.reduce((total, usage) => total + usage.cost.cacheRead, 0),\n cacheWrite: usages.reduce((total, usage) => total + usage.cost.cacheWrite, 0),\n total: usages.reduce((total, usage) => total + usage.cost.total, 0),\n },\n});\n\nexport interface FabricExecutionResult {\n success: boolean;\n value: unknown;\n logs: string[];\n audits: FabricCallAudit[];\n phases: string[];\n trace: FabricExecutionTraceV1;\n elapsedMs: number;\n typeErrors?: FabricTypeError[];\n error?: string;\n handoffRequest?: Record<string, unknown>;\n usage?: Usage;\n}\n\ninterface FabricExecutionPartial {\n audits: FabricCallAudit[];\n phases: string[];\n progress?: string | undefined;\n}\n\nexport interface FabricExecutionAuthorizer {\n authorize(ref: string, parentToolCallId: string): Promise<void>;\n}\n\nexport interface FabricExecutionOptions {\n code: string;\n payloads?: Record<string, string>;\n /** Per-invocation whole-program deadline request from fabric_exec.timeoutMs.\n * Raises (never lowers) the configured executor.timeoutMs, subject to\n * executor.maxTimeoutMs. */\n requestedTimeoutMs?: number;\n signal: AbortSignal | undefined;\n parentToolCallId: string;\n context: ExtensionContext;\n tokenBudget?: number;\n maxAgentCalls?: number;\n display?: FabricRunDisplay;\n onPartial(snapshot: FabricExecutionPartial): void;\n}\n\nexport class FabricExecutionService {\n #runtime: QuickJsRuntime | NodeProcessRuntime | undefined;\n #runtimeKind: FabricConfig[\"executor\"][\"runtime\"] | undefined;\n #capabilityView: FabricCommittedCapabilityView | undefined;\n constructor(\n readonly registry: ActionRegistry,\n readonly config: FabricConfig,\n readonly activity?: FabricActivityStore,\n readonly authorizer?: FabricExecutionAuthorizer,\n readonly autoApprovalClassifier = new FabricAutoApprovalClassifier(),\n readonly sessionApprovals = new FabricSessionApprovals(),\n readonly capturedTools?: CapturedToolCatalog,\n ) {}\n\n setCapabilityView(view: FabricCommittedCapabilityView | undefined): void {\n this.#capabilityView = view;\n }\n\n async execute(options: FabricExecutionOptions): Promise<FabricExecutionResult> {\n const startedAt = performance.now();\n const traceRecorder = new FabricExecutionTraceRecorder();\n this.activity?.start(\n options.parentToolCallId,\n options.display,\n options.display?.name?.trim() ? undefined : fabricExecTitleHintCached(options.code),\n );\n const dependencies = await loadRuntimeDependencies();\n const effectiveFullCodeMode =\n this.config.fullCodeMode || this.config.schema.mode === \"enforce\";\n const unavailable = new Map(\n this.registry.unavailableProviders().map((entry) => [entry.name, entry.reason]),\n );\n // Snapshot live mcp/extension tool schemas so the type gate below rejects\n // argument-shape mistakes on those surfaces pre-execution, the way omp.*\n // calls already fail. Snapshotting is side-effect-free (cache-warm read);\n // unavailable or cold providers yield empty sources and the loose\n // declarations stand.\n const guestTypeSources = await this.registry.guestTypeSources({\n cwd: options.context.cwd,\n signal: options.signal,\n parentToolCallId: options.parentToolCallId,\n nestedToolCallId: `${options.parentToolCallId}_typedecls`,\n extensionContext: options.context,\n update() {},\n ...(this.#capabilityView ? { capabilityView: this.#capabilityView } : {}),\n });\n const coreOverrideDeclarations =\n effectiveFullCodeMode\n ? dependencies.buildCoreOverrideGuestDeclarations(\n this.capturedTools?.list().map((entry) => ({\n name: entry.name,\n inputSchema: entry.definition.parameters,\n })) ?? [],\n )\n : undefined;\n const code = repairFabricGuestCode(options.code);\n const checked = dependencies.typeCheckFabricCode(\n code,\n dependencies.guestTypeDeclarations(effectiveFullCodeMode, {\n excludeGlobals: [...unavailable.keys()],\n dynamic: dependencies.buildDynamicGuestDeclarations(guestTypeSources),\n ...(coreOverrideDeclarations ? { coreOverrides: coreOverrideDeclarations } : {}),\n }),\n );\n if (checked.errors.length > 0) {\n for (const error of checked.errors) {\n const missing = /^Cannot find name '([^']+)'/.exec(error.message);\n const reason = missing?.[1] ? unavailable.get(missing[1]) : undefined;\n if (missing && reason) {\n error.message = `${error.message} Fabric provider \"${missing[1]}\" is unavailable: ${reason}`;\n }\n }\n this.activity?.finish(options.parentToolCallId, false, \"Type checking failed\");\n return {\n success: false,\n value: undefined,\n logs: [],\n audits: [],\n phases: [],\n trace: traceRecorder.seal(\n \"failed\",\n [],\n `Type checking failed (${checked.errors.length} ${checked.errors.length === 1 ? \"error\" : \"errors\"})`,\n ),\n elapsedMs: performance.now() - startedAt,\n typeErrors: checked.errors,\n };\n }\n\n const classifierUsages: Usage[] = [];\n const recordAutoDecision = (\n audit: FabricAutoApprovalAudit,\n decision?: { usage: Usage },\n ): void => {\n const operation = traceRecorder.issueCall(\"fabric.approval.auto\", {\n action: audit.action,\n risk: audit.risk,\n });\n operation.succeed(audit);\n if (decision) classifierUsages.push(decision.usage);\n };\n const approval = new ApprovalController(\n this.config.approvals,\n options.context,\n this.sessionApprovals,\n this.autoApprovalClassifier,\n recordAutoDecision,\n );\n const audits: FabricCallAudit[] = [];\n const phases: string[] = [];\n const workflowSpans = new Map<\n string,\n { kind: \"parallel\" | \"pipeline\"; operation: FabricExecutionTraceOperationHandle }\n >();\n let agentCalls = 0;\n let handoffRequest: Record<string, unknown> | undefined;\n const maxAgentCalls = Math.max(\n 1,\n Math.min(\n options.maxAgentCalls ?? this.config.agents.maxPerExecution,\n this.config.agents.maxPerExecution,\n ),\n );\n const guardAgentCall = (ref: string): void => {\n if (\n ref !== \"agents.run\" &&\n ref !== \"agents.handoff\" &&\n ref !== \"agents.spawn\" &&\n ref !== \"agents.create\"\n ) return;\n agentCalls++;\n if (agentCalls > maxAgentCalls) {\n throw new FabricTraceSafeError(`Fabric agent budget exhausted (${maxAgentCalls} per execution)`);\n }\n };\n const fullCodeProvider = (value: string): \"omp\" | \"extensions\" | undefined => {\n const separator = value.indexOf(\".\");\n const provider = separator > 0 ? value.slice(0, separator) : value;\n return provider === \"omp\" || provider === \"extensions\" ? provider : undefined;\n };\n const guardFullCodeRef = (ref: string): void => {\n if (effectiveFullCodeMode) return;\n const provider = fullCodeProvider(ref);\n if (!provider) return;\n throw new FabricTraceSafeError(\n `Fabric full code mode is disabled; call ${provider === \"omp\" ? \"OMP core\" : \"registered extension\"} tools directly outside fabric_exec`,\n );\n };\n let currentProgress: string | undefined;\n let emitPending = false;\n let emitTimer: NodeJS.Timeout | undefined;\n const emitNow = (): void => {\n emitPending = false;\n options.onPartial({\n audits: audits.slice(),\n phases: phases.slice(),\n progress: currentProgress,\n });\n };\n const flushEmit = (): void => {\n if (emitTimer) clearTimeout(emitTimer);\n emitTimer = undefined;\n if (emitPending) emitNow();\n };\n // One execution-wide timer coalesces updates from every parallel nested\n // call. Keeping this global to the Fabric program prevents each call from\n // independently churning rows while preserving a trailing final snapshot.\n const emit = (): void => {\n emitPending = true;\n const debounceMs = this.config.ui.updateDebounceMs;\n if (debounceMs <= 0) {\n flushEmit();\n return;\n }\n // Throttle to one render per window without resetting the timer. A\n // trailing debounce starves continuously streaming tools because every\n // delta postpones the render until the tool finishes.\n if (emitTimer) return;\n emitTimer = setTimeout(() => {\n emitTimer = undefined;\n if (emitPending) emitNow();\n }, debounceMs);\n emitTimer.unref?.();\n };\n const update = (message: string): void => {\n currentProgress = message;\n emit();\n };\n const observeInvocation = (event: FabricRegistryActivityEvent): void => {\n if (this.activity) {\n if (event.type === \"call_start\") {\n this.activity.beginCall(options.parentToolCallId, event);\n } else if (event.type === \"call_update\") {\n this.activity.updateCall(options.parentToolCallId, event.callId, event.update);\n } else if (event.type === \"call_args\") {\n this.activity.updateCallArgs(options.parentToolCallId, event.callId, event.args);\n } else {\n this.activity.finishCall(options.parentToolCallId, event.callId, event);\n }\n }\n if (event.type === \"call_end\") emit();\n };\n const baseContext = {\n cwd: options.context.cwd,\n signal: options.signal,\n parentToolCallId: options.parentToolCallId,\n nestedToolCallId: `${options.parentToolCallId}_metadata`,\n extensionContext: options.context,\n update,\n ...(this.#capabilityView ? { capabilityView: this.#capabilityView } : {}),\n };\n // Start known orchestration programs with the longer deadline. Calls\n // reached through generic or computed refs are classified again at the\n // host bridge and can extend the active sandbox deadline before they run.\n // An explicit per-invocation request raises (never lowers) the starting\n // deadline, capped by the configured policy maximum.\n const orchestrationTimeoutMs = Math.max(\n this.config.executor.timeoutMs,\n this.config.agents.timeoutMs,\n );\n const requestedTimeoutMs =\n typeof options.requestedTimeoutMs === \"number\" &&\n Number.isFinite(options.requestedTimeoutMs)\n ? Math.max(1, Math.floor(options.requestedTimeoutMs))\n : 0;\n const effectiveTimeoutMs = Math.max(\n codeUsesOrchestration(code)\n ? orchestrationTimeoutMs\n : this.config.executor.timeoutMs,\n Math.min(requestedTimeoutMs, this.config.executor.maxTimeoutMs),\n );\n const minimumTimeoutMsForHostCall = (\n ref: string,\n args: Record<string, unknown>,\n ): number | undefined => {\n const targetRef =\n ref === \"fabric.$call\" && typeof args.ref === \"string\" ? args.ref : ref;\n const targetArgs =\n ref === \"fabric.$call\" &&\n typeof args.args === \"object\" &&\n args.args !== null &&\n !Array.isArray(args.args)\n ? (args.args as Record<string, unknown>)\n : args;\n if (isOmpShellRef(targetRef)) {\n const seconds = targetArgs.timeout;\n const milliseconds = targetArgs.timeoutMs;\n const requested =\n typeof seconds === \"number\" && Number.isFinite(seconds)\n ? seconds * 1_000\n : typeof milliseconds === \"number\" && Number.isFinite(milliseconds)\n ? milliseconds\n : 0;\n if (requested > 0) {\n return Math.max(\n this.config.executor.timeoutMs,\n Math.min(Math.floor(requested) + 5_000, MAX_AGENT_TIMEOUT_MS),\n );\n }\n }\n // Exact-ref configured floors raise the enclosing deadline for known\n // long-running host calls without any tool-side timeout argument.\n const refFloor = this.config.executor.hostCallTimeouts[targetRef];\n if (refFloor !== undefined) {\n return Math.max(\n this.config.executor.timeoutMs,\n Math.min(Math.floor(refFloor), this.config.executor.maxTimeoutMs),\n );\n }\n if (!isBlockingOrchestrationRef(targetRef)) return undefined;\n const requestedTimeoutMs =\n targetRef === \"agents.run\" &&\n typeof targetArgs.timeoutMs === \"number\" &&\n Number.isFinite(targetArgs.timeoutMs)\n ? Math.max(\n MIN_AGENT_TIMEOUT_MS,\n Math.min(Math.floor(targetArgs.timeoutMs), MAX_AGENT_TIMEOUT_MS),\n )\n : 0;\n return Math.max(orchestrationTimeoutMs, requestedTimeoutMs);\n };\n const traceAttempt = async <T>(\n ref: string,\n args: Record<string, unknown>,\n signal: AbortSignal,\n run: (setStage: (stage: FabricExecutionFailureStageV1) => void) => T | Promise<T>,\n ): Promise<T> => {\n const operation = traceRecorder.issueCall(ref, args);\n let stage: FabricExecutionFailureStageV1 = \"invoke\";\n try {\n const value = await run((nextStage) => {\n stage = nextStage;\n });\n operation.succeed(undefined);\n return value;\n } catch (error) {\n operation.fail(stage, error, executionOutcomeFromError(error, signal));\n throw error;\n }\n };\n const invokeAction = async (\n ref: string,\n args: Record<string, unknown>,\n callContext: typeof baseContext & { signal: AbortSignal },\n ): Promise<unknown> => {\n const traceOperation = traceRecorder.issueCall(ref, args);\n try {\n guardFullCodeRef(ref);\n guardAgentCall(ref);\n } catch (error) {\n traceOperation.fail(\n \"guard\",\n error,\n executionOutcomeFromError(error, callContext.signal),\n );\n throw error;\n }\n return this.registry.invoke(ref, args, {\n ...callContext,\n ...(ref === \"agents.handoff\"\n ? {\n deferHandoff(request: Record<string, unknown>) {\n if (handoffRequest) {\n throw new Error(\n \"Only one agents.handoff request is allowed per fabric_exec invocation\",\n );\n }\n handoffRequest = structuredClone(request);\n return {\n scheduled: true,\n status: \"deferred\",\n boundary: \"fabric_exec_end\",\n };\n },\n }\n : {}),\n ...(this.authorizer\n ? {\n authorize: (action) =>\n this.authorizer!.authorize(action.ref, options.parentToolCallId),\n }\n : {}),\n approve: async (action, preparedArgs) => {\n if (action.ref === \"schema.commit\") {\n await approval.approve({ ...action, risk: \"write\" }, preparedArgs);\n await approval.approve({ ...action, risk: \"execute\" }, preparedArgs);\n return;\n }\n await approval.approve(action, preparedArgs);\n },\n audits,\n maxResultChars: this.config.executor.maxNestedResultChars,\n traceOperation,\n observeInvocation,\n });\n };\n let sandboxResult: FabricSandboxResult;\n try {\n const runtimeKind = this.config.executor.runtime;\n if (!this.#runtime || this.#runtimeKind !== runtimeKind) {\n this.#runtime = runtimeKind === \"node-process\"\n ? new dependencies.NodeProcessRuntime()\n : runtimeKind === \"bun-process\"\n ? new dependencies.BunProcessRuntime()\n : new dependencies.QuickJsRuntime();\n this.#runtimeKind = runtimeKind;\n }\n sandboxResult = await this.#runtime.execute(\n code,\n async (ref, args, runtimeSignal) => {\n const callContext = { ...baseContext, signal: runtimeSignal };\n switch (ref) {\n case \"fabric.$providers\":\n return traceAttempt(\n \"fabric.discovery.providers\",\n args,\n runtimeSignal,\n () =>\n this.registry\n .providers()\n .filter((provider) =>\n !callContext.capabilityView ||\n Object.values(callContext.capabilityView.bindings)\n .some((binding) => binding.provider === provider.name),\n )\n .filter(\n (provider) => effectiveFullCodeMode || !fullCodeProvider(provider.name),\n ),\n );\n case \"fabric.$catalog\":\n return traceAttempt(\n \"fabric.discovery.catalog\",\n args,\n runtimeSignal,\n async (setStage) => {\n const provider = typeof args.provider === \"string\" ? args.provider : undefined;\n setStage(\"guard\");\n if (provider) guardFullCodeRef(`${provider}.*`);\n setStage(provider && !this.registry.has(provider) ? \"resolve\" : \"invoke\");\n return this.registry.catalog(callContext, {\n ...(provider ? { provider } : {}),\n ...(typeof args.limit === \"number\" ? { limit: args.limit } : {}),\n includeProvider: (name) => effectiveFullCodeMode || !fullCodeProvider(name),\n });\n },\n );\n case \"fabric.$models\": {\n const operation = traceRecorder.issueCall(\"fabric.discovery.models\", args);\n const registry = options.context.modelRegistry;\n try {\n const available =\n typeof registry?.getAvailable === \"function\" ? registry.getAvailable() : [];\n const models = available.map((model) => ({\n provider: String(model.provider),\n id: String(model.id),\n name: String(model.name ?? model.id),\n key: `${model.provider}/${model.id}`,\n }));\n operation.succeed(undefined);\n return models;\n } catch (error) {\n operation.fail(\n \"invoke\",\n error,\n executionOutcomeFromError(error, runtimeSignal),\n );\n return [];\n }\n }\n case \"fabric.$list\":\n return traceAttempt(\n \"fabric.discovery.list\",\n args,\n runtimeSignal,\n async (setStage) => {\n setStage(\"guard\");\n if (typeof args.provider === \"string\") {\n guardFullCodeRef(`${args.provider}.*`);\n }\n setStage(\n typeof args.provider === \"string\" && !this.registry.has(args.provider)\n ? \"resolve\"\n : \"invoke\",\n );\n const actions = await this.registry.list(\n {\n ...(typeof args.provider === \"string\" ? { provider: args.provider } : {}),\n ...(typeof args.namespace === \"string\" ? { namespace: args.namespace } : {}),\n ...(typeof args.query === \"string\" ? { query: args.query } : {}),\n ...(typeof args.limit === \"number\" ? { limit: args.limit } : {}),\n },\n callContext,\n );\n return actions.filter(\n (action) => effectiveFullCodeMode || !fullCodeProvider(action.provider),\n );\n },\n );\n case \"fabric.$search\":\n return traceAttempt(\n \"fabric.discovery.search\",\n args,\n runtimeSignal,\n async () => {\n const actions = await this.registry.search(\n String(args.query ?? \"\"),\n callContext,\n typeof args.limit === \"number\" ? args.limit : undefined,\n );\n return actions.filter(\n (action) => effectiveFullCodeMode || !fullCodeProvider(action.provider),\n );\n },\n );\n case \"fabric.$describe\":\n return traceAttempt(\n \"fabric.discovery.describe\",\n args,\n runtimeSignal,\n async (setStage) => {\n const targetRef = String(args.ref ?? \"\");\n setStage(\"guard\");\n guardFullCodeRef(targetRef);\n setStage(\"resolve\");\n return this.registry.describe(targetRef, callContext);\n },\n );\n case \"fabric.$call\": {\n const callArgs =\n typeof args.args === \"object\" && args.args !== null && !Array.isArray(args.args)\n ? (args.args as Record<string, unknown>)\n : {};\n const targetRef = String(args.ref ?? \"\");\n return invokeAction(targetRef, callArgs, callContext);\n }\n case \"fabric.$progress\":\n return traceAttempt(\n \"fabric.workflow.progress\",\n args,\n runtimeSignal,\n () => update(String(args.message ?? \"Working\")),\n );\n case \"fabric.$configure\":\n return traceAttempt(\n \"fabric.workflow.configure\",\n args,\n runtimeSignal,\n () => {\n const display: FabricRunDisplay = {\n ...(typeof args.name === \"string\" ? { name: args.name } : {}),\n ...(typeof args.description === \"string\" ? { description: args.description } : {}),\n };\n return this.activity?.configure(options.parentToolCallId, display) ?? display;\n },\n );\n case \"fabric.$phase\":\n return traceAttempt(\n \"fabric.workflow.phase\",\n args,\n runtimeSignal,\n (setStage) => {\n setStage(\"validate\");\n const name =\n typeof args.name === \"string\" ? args.name.trim() : \"\";\n if (!name) throw new Error(\"Workflow phase name must be a non-empty string\");\n phases.push(name);\n const phaseIndex = phases.length - 1;\n const phaseInput: FabricPhaseInput = {\n name,\n ...(typeof args.id === \"string\" ? { id: args.id } : {}),\n ...(typeof args.description === \"string\" ? { description: args.description } : {}),\n ...(typeof args.total === \"number\" ? { total: args.total } : {}),\n };\n setStage(\"invoke\");\n const activityPhase = this.activity?.phase(options.parentToolCallId, phaseInput);\n update(`Phase: ${name}`);\n return {\n name,\n index: phaseIndex,\n ...(activityPhase ? { id: activityPhase.id } : {}),\n };\n },\n );\n case \"fabric.$item\":\n return traceAttempt(\n \"fabric.workflow.item\",\n args,\n runtimeSignal,\n () => {\n const item = args as unknown as FabricActivityItemInput;\n return this.activity?.upsertItem(options.parentToolCallId, item) ?? item;\n },\n );\n case \"fabric.$event\":\n return traceAttempt(\n \"fabric.workflow.event\",\n args,\n runtimeSignal,\n () => {\n const event = args as unknown as FabricActivityEventInput;\n this.activity?.event(options.parentToolCallId, event);\n },\n );\n case \"fabric.$spanStart\": {\n const id = typeof args.id === \"string\" ? args.id : \"\";\n const kind = args.kind;\n if (!id || (kind !== \"parallel\" && kind !== \"pipeline\")) {\n throw new Error(\"Invalid internal workflow span start\");\n }\n if (workflowSpans.has(id)) throw new Error(\"Duplicate internal workflow span\");\n const operation = traceRecorder.issueCall(`fabric.workflow.${kind}`, args);\n workflowSpans.set(id, { kind, operation });\n return undefined;\n }\n case \"fabric.$spanEnd\": {\n const id = typeof args.id === \"string\" ? args.id : \"\";\n const span = workflowSpans.get(id);\n if (!span) throw new Error(\"Unknown internal workflow span\");\n workflowSpans.delete(id);\n if (args.outcome === \"succeeded\") span.operation.succeed(undefined);\n else {\n span.operation.fail(\n \"invoke\",\n undefined,\n executionOutcomeFromError(new Error(\"Workflow span failed\"), runtimeSignal),\n );\n }\n return undefined;\n }\n default:\n return invokeAction(ref, args, callContext);\n }\n },\n {\n timeoutMs: effectiveTimeoutMs,\n memoryLimitBytes: this.config.executor.memoryLimitBytes,\n maxLogChars: this.config.executor.maxOutputChars,\n minimumTimeoutMsForHostCall,\n ...(checked.javascript ? { transpiledCode: checked.javascript } : {}),\n ...(checked.sourceMap ? { transpiledSourceMap: checked.sourceMap } : {}),\n ...(options.payloads ? { payloads: options.payloads } : {}),\n ...(options.tokenBudget !== undefined ? { tokenBudget: options.tokenBudget } : {}),\n ...(options.signal ? { signal: options.signal } : {}),\n },\n );\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n this.activity?.finish(options.parentToolCallId, false, message);\n throw error;\n } finally {\n await this.registry.endInvocation(options.parentToolCallId);\n flushEmit();\n }\n\n const runOutcome = executionOutcomeFromTermination(sandboxResult.terminationReason);\n const succeeded = runOutcome === \"succeeded\";\n this.activity?.finish(options.parentToolCallId, succeeded, sandboxResult.error);\n return {\n success: succeeded,\n value: sandboxResult.value,\n logs: sandboxResult.logs,\n audits,\n phases,\n // Guest and provider error text may embed tool output or source\n // literals, so the durable trace records only safe causes.\n trace: traceRecorder.seal(runOutcome, phases),\n elapsedMs: performance.now() - startedAt,\n ...(sandboxResult.error ? { error: sandboxResult.error } : {}),\n ...(handoffRequest ? { handoffRequest } : {}),\n ...(classifierUsages.length > 0\n ? { usage: aggregateUsage(classifierUsages) }\n : {}),\n };\n }\n}\n", "import { repairActionName } from \"../core/action-repair.js\";\nimport { uniqueDeclaredKeyForSpelling } from \"../providers/arg-normalization.js\";\nimport type { CatalogRepair } from \"./types.js\";\n\nconst strictDeclaredPropertyNames = (\n schema: Record<string, unknown>,\n): string[] | undefined => {\n if (\n schema.type !== \"object\" ||\n schema.additionalProperties !== false ||\n schema.patternProperties !== undefined\n ) {\n return undefined;\n }\n const properties = schema.properties;\n if (!properties || typeof properties !== \"object\" || Array.isArray(properties)) return undefined;\n return Object.keys(properties);\n};\n\nconst applyKeyAliasRepairs = (\n ref: string,\n args: Record<string, unknown>,\n repairs: readonly CatalogRepair[],\n schema: Record<string, unknown>,\n): { args: Record<string, unknown>; changed: boolean } => {\n const declared = strictDeclaredPropertyNames(schema);\n if (!declared) return { args, changed: false };\n const declaredSet = new Set(declared);\n const applicable = repairs.filter(\n (repair) =>\n repair.kind === \"keyAlias\" &&\n repair.ref === ref &&\n repair.from in args &&\n repair.from !== repair.to &&\n !declaredSet.has(repair.from) &&\n declaredSet.has(repair.to) &&\n uniqueDeclaredKeyForSpelling(repair.from, declared) === repair.to,\n );\n const sourceCountByTarget = new Map<string, number>();\n for (const repair of applicable) {\n sourceCountByTarget.set(repair.to, (sourceCountByTarget.get(repair.to) ?? 0) + 1);\n }\n let out = args;\n let changed = false;\n for (const repair of applicable) {\n const canonicalPresent = repair.to in args;\n if (!canonicalPresent && sourceCountByTarget.get(repair.to) !== 1) continue;\n if (out === args) out = { ...args };\n if (!(repair.to in out)) out[repair.to] = out[repair.from];\n delete out[repair.from];\n changed = true;\n }\n return { args: out, changed };\n};\n\nexport const applyActionAliasRepairs = (\n provider: string,\n actionName: string,\n repairs: readonly CatalogRepair[],\n declared: readonly string[],\n): string | undefined => {\n if (declared.includes(actionName)) return undefined;\n const liveTarget = repairActionName(declared, actionName).repaired;\n if (!liveTarget) return undefined;\n for (const repair of repairs) {\n if (repair.kind !== \"actionAlias\") continue;\n if (repair.provider !== provider) continue;\n if (repair.from !== actionName) continue;\n if (repair.to !== liveTarget) continue;\n return repair.to;\n }\n return undefined;\n};\n\nexport const applyCatalogArgRepairs = (\n ref: string,\n args: Record<string, unknown>,\n repairs: readonly CatalogRepair[],\n schema: Record<string, unknown>,\n): { args: Record<string, unknown>; changed: boolean } =>\n applyKeyAliasRepairs(ref, args, repairs, schema);\n", "import { stableJsonHash } from \"../core/stable-hash.js\";\n\nexport const catalogDigestFromSurface = (surface: {\n providers: readonly string[];\n capturedTools: readonly string[];\n}): string =>\n stableJsonHash({\n v: 1,\n providers: [...surface.providers].sort(),\n captured: [...surface.capturedTools].sort(),\n });\n", "import { uniqueDeclaredKeyForSpelling } from \"../providers/arg-normalization.js\";\nimport { repairActionName } from \"../core/action-repair.js\";\nimport type { CatalogRepair } from \"./types.js\";\n\nexport const keyAliasCandidate = (\n ref: string,\n extraKeys: readonly string[],\n declared: readonly string[],\n): CatalogRepair | undefined => {\n if (extraKeys.length !== 1) return undefined;\n const from = extraKeys[0]!;\n const to = uniqueDeclaredKeyForSpelling(from, declared);\n if (!to) return undefined;\n return { kind: \"keyAlias\", ref, from, to };\n};\n\nexport const actionAliasCandidate = (\n provider: string,\n actionName: string,\n declared: readonly string[],\n): CatalogRepair | undefined => {\n const repair = repairActionName(declared, actionName);\n if (!repair.repaired || repair.repaired === actionName) return undefined;\n return {\n kind: \"actionAlias\",\n provider,\n from: actionName,\n to: repair.repaired,\n };\n};\n", "import fs from \"node:fs\";\nimport path from \"node:path\";\nimport { writeJsonAtomic, writeJsonAtomicAsync } from \"../core/atomic-write.js\";\nimport { withExclusiveFileLock, withExclusiveFileLockAsync } from \"../core/file-lock.js\";\nimport {\n emptyRepairTable,\n MAX_CATALOG_REPAIRS,\n REPAIR_TABLE_VERSION,\n repairIdentity,\n type CatalogRepair,\n type RepairTableFile,\n} from \"./types.js\";\n\nconst LOCK_TIMEOUT_MESSAGE = \"Timed out waiting for the Fabric repair table lock\";\n\nexport const repairsDirectory = (agentDir: string): string =>\n path.join(agentDir, \"fabric\", \"repairs\");\n\nconst currentPath = (directory: string): string => path.join(directory, \"current.json\");\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n typeof value === \"object\" && value !== null && !Array.isArray(value);\n\nconst errorCode = (error: unknown): string | undefined =>\n isRecord(error) && typeof error.code === \"string\" ? error.code : undefined;\n\nconst parseRepair = (value: unknown): CatalogRepair | undefined | \"skip\" => {\n if (!isRecord(value) || typeof value.kind !== \"string\") return undefined;\n if (value.kind === \"keyAlias\") {\n if (\n typeof value.ref !== \"string\" ||\n typeof value.from !== \"string\" ||\n typeof value.to !== \"string\" ||\n !value.ref.trim() ||\n !value.from.trim() ||\n !value.to.trim()\n ) {\n return undefined;\n }\n return { kind: \"keyAlias\", ref: value.ref.trim(), from: value.from.trim(), to: value.to.trim() };\n }\n if (value.kind === \"actionAlias\") {\n if (\n typeof value.provider !== \"string\" ||\n typeof value.from !== \"string\" ||\n typeof value.to !== \"string\" ||\n !value.provider.trim() ||\n !value.from.trim() ||\n !value.to.trim()\n ) {\n return undefined;\n }\n return {\n kind: \"actionAlias\",\n provider: value.provider.trim(),\n from: value.from.trim(),\n to: value.to.trim(),\n };\n }\n return \"skip\";\n};\n\nconst parseRepairTable = (value: unknown): RepairTableFile | undefined => {\n if (!isRecord(value) || value.version !== REPAIR_TABLE_VERSION) return undefined;\n if (typeof value.catalogDigest !== \"string\" || !value.catalogDigest.trim()) return undefined;\n if (!Array.isArray(value.repairs) || value.repairs.length > MAX_CATALOG_REPAIRS) return undefined;\n const repairs: CatalogRepair[] = [];\n const identities = new Set<string>();\n for (const entry of value.repairs) {\n const parsed = parseRepair(entry);\n if (parsed === \"skip\") continue;\n if (!parsed) return undefined;\n const identity = repairIdentity(parsed);\n if (identities.has(identity)) continue;\n identities.add(identity);\n repairs.push(parsed);\n }\n if (typeof value.createdAt !== \"string\" || typeof value.updatedAt !== \"string\") return undefined;\n return {\n version: REPAIR_TABLE_VERSION,\n catalogDigest: value.catalogDigest.trim(),\n repairs,\n createdAt: value.createdAt,\n updatedAt: value.updatedAt,\n };\n};\n\nconst errorText = (error: unknown): string =>\n (error instanceof Error ? error.message : String(error)).slice(0, 200);\n\nconst writeTable = (file: string, table: RepairTableFile): void => {\n writeJsonAtomic(file, table, { space: 2, newline: true, mode: 0o600, dirMode: 0o700 });\n};\n\nexport interface LoadedRepairTable {\n table: RepairTableFile;\n error?: string;\n}\n\nexport const loadRepairTable = (\n directory: string,\n catalogDigest: string,\n): LoadedRepairTable => {\n const file = currentPath(directory);\n let raw: string;\n try {\n raw = fs.readFileSync(file, \"utf8\");\n } catch (error) {\n // A missing table is a fresh start; anything else (unreadable, wrong\n // type) is damage that callers must surface, not silently rebuild.\n if (errorCode(error) === \"ENOENT\") return { table: emptyRepairTable(catalogDigest) };\n return {\n table: emptyRepairTable(catalogDigest),\n error: `repair table is unreadable: ${errorText(error)}`,\n };\n }\n let parsed: unknown;\n try {\n parsed = JSON.parse(raw);\n } catch {\n return { table: emptyRepairTable(catalogDigest), error: \"repair table is malformed JSON\" };\n }\n const table = parseRepairTable(parsed);\n if (!table) {\n return { table: emptyRepairTable(catalogDigest), error: \"repair table is invalid\" };\n }\n // A table persisted under a different digest is the accepted catalog\n // replacement contract: start fresh, without an error.\n if (table.catalogDigest !== catalogDigest) return { table: emptyRepairTable(catalogDigest) };\n return { table };\n};\n\nconst loadRepairTableAsync = async (\n directory: string,\n catalogDigest: string,\n): Promise<LoadedRepairTable> => {\n const file = currentPath(directory);\n let raw: string;\n try {\n raw = await fs.promises.readFile(file, \"utf8\");\n } catch (error) {\n if (errorCode(error) === \"ENOENT\") return { table: emptyRepairTable(catalogDigest) };\n return {\n table: emptyRepairTable(catalogDigest),\n error: `repair table is unreadable: ${errorText(error)}`,\n };\n }\n let parsed: unknown;\n try {\n parsed = JSON.parse(raw);\n } catch {\n return { table: emptyRepairTable(catalogDigest), error: \"repair table is malformed JSON\" };\n }\n const table = parseRepairTable(parsed);\n if (!table) {\n return { table: emptyRepairTable(catalogDigest), error: \"repair table is invalid\" };\n }\n return table.catalogDigest === catalogDigest\n ? { table }\n : { table: emptyRepairTable(catalogDigest) };\n};\n\nexport const saveRepairTable = (\n directory: string,\n table: RepairTableFile,\n): RepairTableFile =>\n withExclusiveFileLock(\n { directory, lockName: \"current.lock\", timeoutMessage: LOCK_TIMEOUT_MESSAGE },\n () => {\n const loaded = loadRepairTable(directory, table.catalogDigest);\n // A damaged table must never be silently rebuilt: merging from empty\n // would overwrite the user's data. Fail so promotion records the reason\n // in status().storeError and leaves the file untouched for recovery.\n if (loaded.error) throw new Error(loaded.error);\n const persisted = loaded.table;\n const repairs: CatalogRepair[] = [];\n const identities = new Set<string>();\n for (const repair of [...persisted.repairs, ...table.repairs]) {\n const identity = repairIdentity(repair);\n if (identities.has(identity)) continue;\n if (repairs.length >= MAX_CATALOG_REPAIRS) break;\n identities.add(identity);\n repairs.push(repair);\n }\n const now = new Date().toISOString();\n const merged: RepairTableFile = {\n version: REPAIR_TABLE_VERSION,\n catalogDigest: table.catalogDigest,\n repairs,\n createdAt: persisted.repairs.length > 0 ? persisted.createdAt : table.createdAt,\n updatedAt: now,\n };\n writeTable(currentPath(directory), merged);\n return merged;\n },\n );\n\nexport const saveRepairTableAsync = async (\n directory: string,\n table: RepairTableFile,\n): Promise<RepairTableFile> =>\n withExclusiveFileLockAsync(\n { directory, lockName: \"current.lock\", timeoutMessage: LOCK_TIMEOUT_MESSAGE },\n async () => {\n const loaded = await loadRepairTableAsync(directory, table.catalogDigest);\n if (loaded.error) throw new Error(loaded.error);\n const persisted = loaded.table;\n const repairs: CatalogRepair[] = [];\n const identities = new Set<string>();\n for (const repair of [...persisted.repairs, ...table.repairs]) {\n const identity = repairIdentity(repair);\n if (identities.has(identity)) continue;\n if (repairs.length >= MAX_CATALOG_REPAIRS) break;\n identities.add(identity);\n repairs.push(repair);\n }\n const now = new Date().toISOString();\n const merged: RepairTableFile = {\n version: REPAIR_TABLE_VERSION,\n catalogDigest: table.catalogDigest,\n repairs,\n createdAt: persisted.repairs.length > 0 ? persisted.createdAt : table.createdAt,\n updatedAt: now,\n };\n await writeJsonAtomicAsync(currentPath(directory), merged, {\n space: 2,\n newline: true,\n mode: 0o600,\n dirMode: 0o700,\n });\n return merged;\n },\n );\n", "export const REPAIR_TABLE_VERSION = 1 as const;\nexport const MAX_CATALOG_REPAIRS = 256;\n\nexport type RepairStage =\n | \"invocation_outer_schema\"\n | \"invocation_typecheck\"\n | \"invocation_args\"\n | \"invocation_unknown_action\"\n | \"didactic\"\n | \"effect\";\n\ninterface KeyAliasRepair {\n kind: \"keyAlias\";\n ref: string;\n from: string;\n to: string;\n}\n\ninterface ActionAliasRepair {\n kind: \"actionAlias\";\n provider: string;\n from: string;\n to: string;\n}\n\nexport type CatalogRepair = KeyAliasRepair | ActionAliasRepair;\n\nexport interface RepairTableFile {\n version: typeof REPAIR_TABLE_VERSION;\n catalogDigest: string;\n repairs: CatalogRepair[];\n createdAt: string;\n updatedAt: string;\n}\n\nexport interface RepairClassification {\n stage: RepairStage;\n fingerprint: string;\n /** When set, a unique mapping the compiler may insert on first hit. */\n candidate?: CatalogRepair;\n}\n\ninterface RepairFingerprintCount {\n fingerprint: string;\n stage: RepairStage;\n count: number;\n}\n\nexport interface RepairStatus {\n enabled: boolean;\n catalogDigest: string;\n repairCount: number;\n applyHits: number;\n invocationErrors: number;\n effectDropped: number;\n storeError?: string;\n fingerprints: RepairFingerprintCount[];\n repairs: CatalogRepair[];\n}\n\nexport const repairIdentity = (repair: CatalogRepair): string => {\n if (repair.kind === \"keyAlias\") {\n return `keyAlias:${repair.ref}:${repair.from}:${repair.to}`;\n }\n return `actionAlias:${repair.provider}:${repair.from}:${repair.to}`;\n};\n\nexport const emptyRepairTable = (\n catalogDigest: string,\n now = new Date().toISOString(),\n): RepairTableFile => ({\n version: REPAIR_TABLE_VERSION,\n catalogDigest,\n repairs: [],\n createdAt: now,\n updatedAt: now,\n});\n", "import { applyActionAliasRepairs, applyCatalogArgRepairs } from \"./apply.js\";\nimport { catalogDigestFromSurface } from \"./catalog-digest.js\";\nimport { actionAliasCandidate, keyAliasCandidate } from \"./promote.js\";\nimport { loadRepairTable, repairsDirectory, saveRepairTableAsync } from \"./store.js\";\nimport {\n emptyRepairTable,\n MAX_CATALOG_REPAIRS,\n repairIdentity,\n type CatalogRepair,\n type RepairClassification,\n type RepairStage,\n type RepairStatus,\n type RepairTableFile,\n} from \"./types.js\";\n\nexport interface RepairCompilerOptions {\n agentDir: string;\n enabled?: boolean;\n}\n\ninterface FingerprintState {\n stage: RepairStage;\n count: number;\n candidate?: CatalogRepair;\n}\n\nconst errorMessage = (error: unknown): string =>\n (error instanceof Error ? error.message : String(error)).slice(0, 240);\n\nexport class RepairCompiler {\n readonly directory: string;\n readonly enabled: boolean;\n #digest = \"\";\n #table: RepairTableFile;\n #counts = new Map<string, FingerprintState>();\n #applyHits = 0;\n #invocationErrors = 0;\n #effectDropped = 0;\n #storeError: string | undefined;\n #persistTail: Promise<void> = Promise.resolve();\n\n constructor(options: RepairCompilerOptions) {\n this.directory = repairsDirectory(options.agentDir);\n this.enabled = options.enabled !== false;\n this.#table = emptyRepairTable(\"\");\n }\n\n get catalogDigest(): string {\n return this.#digest;\n }\n\n get repairs(): readonly CatalogRepair[] {\n return this.#table.repairs;\n }\n\n setCatalogSurface(surface: {\n providers: readonly string[];\n capturedTools: readonly string[];\n }): void {\n const digest = catalogDigestFromSurface(surface);\n if (digest === this.#digest && this.#table.catalogDigest === digest) return;\n this.#digest = digest;\n if (!this.enabled) {\n this.#table = emptyRepairTable(digest);\n this.#storeError = undefined;\n } else {\n const loaded = loadRepairTable(this.directory, digest);\n this.#table = loaded.table;\n // Missing or different-digest tables start fresh; an unreadable or\n // malformed table is surfaced and blocks promotion from overwriting it.\n this.#storeError = loaded.error;\n }\n this.#counts.clear();\n }\n\n observe(\n classification: RepairClassification,\n options?: { countError?: boolean },\n ): CatalogRepair | undefined {\n if (classification.stage === \"effect\") {\n this.#effectDropped += 1;\n return undefined;\n }\n if (options?.countError !== false) this.#invocationErrors += 1;\n const existing = this.#counts.get(classification.fingerprint);\n const candidate = classification.candidate ?? existing?.candidate;\n const next: FingerprintState = {\n stage: classification.stage,\n count: (existing?.count ?? 0) + 1,\n ...(candidate ? { candidate } : {}),\n };\n this.#counts.set(classification.fingerprint, next);\n if (!this.enabled || !next.candidate) return undefined;\n return this.#promote(next.candidate);\n }\n\n recordInvocationError(): void {\n this.#invocationErrors += 1;\n }\n\n observeInvalidArgs(\n ref: string,\n args: Record<string, unknown>,\n declared: readonly string[],\n message: string,\n options?: { countError?: boolean; extraKeys?: readonly string[] },\n ): CatalogRepair | undefined {\n const extra = options?.extraKeys ??\n Object.keys(args).filter((key) => !declared.includes(key));\n const candidate = keyAliasCandidate(ref, extra, declared);\n return this.observe(\n {\n stage: \"invocation_args\",\n fingerprint: extra[0] ? `args:${ref}:${extra[0]}` : `args:${ref}:${message.slice(0, 80)}`,\n ...(candidate ? { candidate } : {}),\n },\n options,\n );\n }\n\n observeUnknownAction(\n provider: string,\n actionName: string,\n declared: readonly string[],\n options?: { countError?: boolean },\n ): CatalogRepair | undefined {\n const candidate = actionAliasCandidate(provider, actionName, declared);\n return this.observe(\n {\n stage: \"invocation_unknown_action\",\n fingerprint: `unknown:${provider}.${actionName}`,\n ...(candidate ? { candidate } : {}),\n },\n options,\n );\n }\n\n applyArgs(\n ref: string,\n args: Record<string, unknown>,\n schema: Record<string, unknown>,\n ): Record<string, unknown> {\n if (!this.enabled || this.#table.repairs.length === 0) return args;\n const result = applyCatalogArgRepairs(ref, args, this.#table.repairs, schema);\n if (result.changed) this.#applyHits += 1;\n return result.args;\n }\n\n applyActionName(\n provider: string,\n actionName: string,\n declared: readonly string[],\n ): string {\n if (!this.enabled || this.#table.repairs.length === 0) return actionName;\n const repaired = applyActionAliasRepairs(\n provider,\n actionName,\n this.#table.repairs,\n declared,\n );\n if (repaired && repaired !== actionName) {\n this.#applyHits += 1;\n return repaired;\n }\n return actionName;\n }\n\n status(): RepairStatus {\n const fingerprints = [...this.#counts.entries()]\n .map(([fingerprint, state]) => ({\n fingerprint,\n stage: state.stage,\n count: state.count,\n }))\n .sort((left, right) => right.count - left.count || left.fingerprint.localeCompare(right.fingerprint))\n .slice(0, 20);\n return {\n enabled: this.enabled,\n catalogDigest: this.#digest,\n repairCount: this.#table.repairs.length,\n applyHits: this.#applyHits,\n invocationErrors: this.#invocationErrors,\n effectDropped: this.#effectDropped,\n ...(this.#storeError ? { storeError: this.#storeError } : {}),\n fingerprints,\n repairs: [...this.#table.repairs],\n };\n }\n\n #promote(candidate: CatalogRepair): CatalogRepair | undefined {\n if (!this.#digest) return undefined;\n const identity = repairIdentity(candidate);\n if (this.#table.repairs.some((repair) => repairIdentity(repair) === identity)) {\n if (this.#storeError) this.#schedulePersist(this.#table);\n return undefined;\n }\n if (this.#table.repairs.length >= MAX_CATALOG_REPAIRS) return undefined;\n const now = new Date().toISOString();\n const next: RepairTableFile = {\n ...this.#table,\n catalogDigest: this.#digest || this.#table.catalogDigest,\n repairs: [...this.#table.repairs, candidate],\n updatedAt: now,\n createdAt: this.#table.createdAt || now,\n };\n this.#table = next;\n this.#schedulePersist(next);\n return candidate;\n }\n\n async flush(): Promise<void> {\n for (;;) {\n const pending = this.#persistTail;\n await pending;\n if (pending === this.#persistTail) return;\n }\n }\n\n #schedulePersist(table: RepairTableFile): void {\n this.#persistTail = this.#persistTail.then(async () => {\n try {\n const saved = await saveRepairTableAsync(this.directory, table);\n if (saved.catalogDigest !== this.#digest) return;\n const attempted = new Set(table.repairs.map(repairIdentity));\n const repairs = [...saved.repairs];\n const seen = new Set(repairs.map(repairIdentity));\n for (const repair of this.#table.repairs) {\n const identity = repairIdentity(repair);\n if (attempted.has(identity) || seen.has(identity) || repairs.length >= MAX_CATALOG_REPAIRS) {\n continue;\n }\n seen.add(identity);\n repairs.push(repair);\n }\n this.#table = { ...saved, repairs };\n this.#storeError = undefined;\n } catch (error) {\n if (table.catalogDigest === this.#digest) this.#storeError = errorMessage(error);\n }\n });\n }\n}\n", "import type { FabricRisk } from \"../protocol.js\";\n\n// Tier A: refs whose speculation is guaranteed correct under the epoch +\n// freshness rules in ./store.ts. Every entry is risk \"read\" with a declared\n// none effect, never prompts for approval, has no in-guest writer with\n// invisible effects, and costs nothing measurable when a speculation is\n// wasted. `compact.cancel` is deliberately absent: it is a control action\n// mislabeled \"read\" until it was reclassified \"write\" \u2014 keep it out forever.\nexport const TIER_A_SPECULATION_REFS: ReadonlySet<string> = new Set([\n \"omp.read\",\n \"omp.grep\",\n \"omp.find\",\n \"omp.ls\",\n \"memory.recall\",\n \"memory.expand\",\n \"memory.sessions\",\n \"state.get\",\n \"state.history\",\n \"state.complexity\",\n \"schema.status\",\n \"compact.status\",\n \"components.list\",\n \"components.status\",\n \"components.graph\",\n]);\n\nexport interface SpeculationActionView {\n ref: string;\n provider: string;\n risk: FabricRisk;\n effectKind: string | undefined;\n annotations?: {\n readOnlyHint?: boolean;\n idempotentHint?: boolean;\n destructiveHint?: boolean;\n openWorldHint?: boolean;\n };\n}\n\n/** Match `server.tool` / `server.*` allowlist patterns against an MCP ref tail. */\nexport const mcpAllowlistMatch = (\n refWithoutProvider: string,\n allowlist: readonly string[],\n): boolean => {\n for (const pattern of allowlist) {\n if (pattern.endsWith(\".*\")) {\n if (refWithoutProvider.startsWith(`${pattern.slice(0, -2)}.`)) return true;\n } else if (pattern === refWithoutProvider) {\n return true;\n }\n }\n return false;\n};\n\n/**\n * Static per-ref gate used both by the stream tap (cheap) and by\n * ActionRegistry.speculate (authoritative, post-descriptor-resolution).\n */\nexport const isSpeculationEligible = (\n action: SpeculationActionView,\n mcpAllowlist: readonly string[],\n): boolean => {\n if (TIER_A_SPECULATION_REFS.has(action.ref)) {\n return action.risk === \"read\" && action.effectKind === \"none\";\n }\n if (action.provider !== \"mcp\" || action.risk !== \"network\") return false;\n if (mcpAllowlist.length === 0) return false;\n if (!mcpAllowlistMatch(action.ref.slice(\"mcp.\".length), mcpAllowlist)) return false;\n // Annotations trump the allowlist only when present: an explicit destructive\n // hint refuses even an allowlisted tool, while absent annotations defer to\n // the operator's assertion that the tool is read-only.\n if (action.annotations?.destructiveHint === true) return false;\n if (action.annotations && action.annotations.readOnlyHint === false) return false;\n return true;\n};\n", "import fs from \"node:fs\";\nimport path from \"node:path\";\n\n// Freshness checks give served speculation results an at-serve-time guarantee\n// beyond the mutation epoch: the stored promise resolves from state the world\n// was in at launch, and the checker confirms that state still holds. Every\n// checker is conservative \u2014 any doubt returns false and the call re-executes.\nexport type FabricFreshnessChecker = () => boolean;\n\ninterface FileSignature {\n mtimeMs: number;\n size: number;\n}\n\nconst statSignature = (filePath: string): FileSignature | \"missing\" | \"error\" => {\n try {\n const stats = fs.statSync(filePath);\n return { mtimeMs: stats.mtimeMs, size: stats.size };\n } catch (error) {\n const code =\n error instanceof Error && \"code\" in error\n ? (error as { code?: string }).code\n : undefined;\n return code === \"ENOENT\" || code === \"ENOTDIR\" ? \"missing\" : \"error\";\n }\n};\n\nconst signatureEquals = (left: FileSignature | \"missing\", right: FileSignature | \"missing\"): boolean =>\n left === \"missing\" || right === \"missing\"\n ? left === right\n : left.mtimeMs === right.mtimeMs && left.size === right.size;\n\nconst readFreshness = (\n args: Record<string, unknown>,\n cwd: string,\n): FabricFreshnessChecker | undefined => {\n const target = args.path;\n if (typeof target !== \"string\" || target.length === 0) return undefined;\n const resolved = path.resolve(cwd, target);\n const snapshot = statSignature(resolved);\n if (snapshot === \"error\") return undefined;\n return () => {\n const current = statSignature(resolved);\n return current !== \"error\" && signatureEquals(snapshot, current);\n };\n};\n\n/**\n * Build a serve-time freshness checker for a speculated call, or undefined\n * when the ref relies on epoch invalidation alone (tree-walking reads,\n * session-local stores). The epoch already covers every effect executed inside\n * the program; checkers exist for state that can move independently of the\n * program (the working tree) on refs where checking is O(1).\n */\nexport const createFreshnessChecker = (\n ref: string,\n preparedArgs: Record<string, unknown>,\n cwd: string,\n): FabricFreshnessChecker | undefined => {\n if (ref === \"omp.read\") return readFreshness(preparedArgs, cwd);\n return undefined;\n};\n", "import { stableJsonHash } from \"../core/stable-hash.js\";\nimport type { FabricFreshnessChecker } from \"./freshness.js\";\nimport type {\n FabricSpeculationConfig,\n FabricSpeculationReplay,\n FabricSpeculationRuntime,\n FabricSpeculationServeResult,\n FabricSpeculationStats,\n} from \"./types.js\";\n\ninterface SpeculationEntry {\n parentToolCallId: string;\n ref: string;\n birthEpoch: number;\n createdAt: number;\n controller: AbortController;\n freshness: FabricFreshnessChecker | undefined;\n replay: FabricSpeculationReplay;\n promise: Promise<unknown>;\n failed: boolean;\n}\n\n/**\n * Turn-scoped store of pre-launched speculation promises.\n *\n * Correctness contract: a stored promise may only be served to a real call\n * when (1) the mutation epoch has not advanced since the speculation launched\n * \u2014 the epoch bumps after any real in-program invocation whose effect kind is\n * not \"none\" \u2014 (2) the entry's freshness checker, when present, still holds,\n * and (3) the entry was launched against the same provider binding the real\n * call resolved: the binding token is part of the cache key, so an entry that\n * a reset could not abort (its speculate() was still mid-describe when the\n * binding was replaced) can never match the replacement's serve key. Entries\n * are take-once (identical duplicate calls each need their own speculation)\n * and are aborted + counted wasted when their execution finishes without\n * serving them or when the turn resets.\n */\nexport class FabricSpeculationStore implements FabricSpeculationRuntime {\n #epoch = 0;\n readonly #entries = new Map<string, SpeculationEntry>();\n readonly #stats: FabricSpeculationStats = {\n launched: 0,\n served: 0,\n epochInvalidated: 0,\n freshnessInvalidated: 0,\n failed: 0,\n wasted: 0,\n skipped: 0,\n };\n readonly #maxConcurrent: number;\n readonly #maxEntries: number;\n readonly #entryTtlMs: number;\n\n constructor(config: Pick<FabricSpeculationConfig, \"maxConcurrent\" | \"maxEntries\" | \"entryTtlMs\">) {\n this.#maxConcurrent = config.maxConcurrent;\n this.#maxEntries = config.maxEntries;\n this.#entryTtlMs = config.entryTtlMs;\n }\n\n get epoch(): number {\n return this.#epoch;\n }\n\n stats(): FabricSpeculationStats & { pending: number } {\n return { ...this.#stats, pending: this.#entries.size };\n }\n\n bumpEpoch(): void {\n this.#epoch += 1;\n }\n\n static key(\n parentToolCallId: string,\n ref: string,\n preparedArgs: Record<string, unknown>,\n bindingToken: string,\n ): string {\n return `${parentToolCallId}\\n${ref}\\n${stableJsonHash(preparedArgs)}\\n${bindingToken}`;\n }\n\n /**\n * Register and start a speculative invocation. Returns false when at\n * capacity; the candidate is dropped silently (a miss costs nothing, the\n * real call executes normally later).\n */\n launch(\n parentToolCallId: string,\n ref: string,\n preparedArgs: Record<string, unknown>,\n execute: (signal: AbortSignal) => Promise<unknown>,\n freshness: FabricFreshnessChecker | undefined,\n replay: FabricSpeculationReplay,\n bindingToken: string,\n ): boolean {\n this.#sweepExpired(Date.now());\n if (this.#entries.size >= this.#maxEntries || this.#inFlightCount() >= this.#maxConcurrent) {\n this.#stats.skipped += 1;\n return false;\n }\n const key = FabricSpeculationStore.key(parentToolCallId, ref, preparedArgs, bindingToken);\n if (this.#entries.has(key)) {\n this.#stats.skipped += 1;\n return false;\n }\n const controller = new AbortController();\n const entry: SpeculationEntry = {\n parentToolCallId,\n ref,\n birthEpoch: this.#epoch,\n createdAt: Date.now(),\n controller,\n freshness,\n replay,\n promise: Promise.resolve()\n .then(() => execute(controller.signal))\n .catch(() => {\n entry.failed = true;\n return undefined;\n }),\n failed: false,\n };\n // Promise.resolve().then keeps a synchronous executor throw inside the\n // entry (failed flag) rather than at the launch site.\n this.#entries.set(key, entry);\n this.#stats.launched += 1;\n return true;\n }\n\n async tryServe(\n parentToolCallId: string,\n ref: string,\n preparedArgs: Record<string, unknown>,\n bindingToken: string,\n ): Promise<FabricSpeculationServeResult> {\n const key = FabricSpeculationStore.key(parentToolCallId, ref, preparedArgs, bindingToken);\n const entry = this.#entries.get(key);\n if (!entry || entry.parentToolCallId !== parentToolCallId) {\n return { hit: false, reason: \"absent\" };\n }\n this.#entries.delete(key);\n if (entry.birthEpoch !== this.#epoch) {\n this.#stats.epochInvalidated += 1;\n entry.controller.abort();\n return { hit: false, reason: \"epoch\" };\n }\n if (entry.freshness && !entry.freshness()) {\n this.#stats.freshnessInvalidated += 1;\n entry.controller.abort();\n return { hit: false, reason: \"freshness\" };\n }\n const value = await entry.promise;\n if (entry.failed) {\n this.#stats.failed += 1;\n return { hit: false, reason: \"failed\" };\n }\n this.#stats.served += 1;\n return { hit: true, value, replay: entry.replay };\n }\n\n /** Execution for this tool call finished: everything unserved is waste. */\n onInvocationEnd(parentToolCallId: string): void {\n for (const [key, entry] of this.#entries) {\n if (entry.parentToolCallId !== parentToolCallId) continue;\n entry.controller.abort();\n this.#entries.delete(key);\n this.#stats.wasted += 1;\n }\n }\n\n /** Turn backstop: speculation never outlives a turn. */\n reset(): void {\n for (const entry of this.#entries.values()) entry.controller.abort();\n this.#entries.clear();\n }\n\n #inFlightCount(): number {\n let count = 0;\n for (const entry of this.#entries.values()) {\n if (!entry.failed) count += 1;\n }\n return count;\n }\n\n #sweepExpired(now: number): void {\n for (const [key, entry] of this.#entries) {\n if (now - entry.createdAt <= this.#entryTtlMs) continue;\n entry.controller.abort();\n this.#entries.delete(key);\n this.#stats.wasted += 1;\n }\n }\n}\n", "// Incremental extractor for the `code` string field of a partially streamed\n// fabric_exec tool-call argument blob. Model providers stream tool arguments as\n// raw JSON string fragments; this class finds the \"code\" key and decodes the\n// string content escape-by-escape as fragments arrive, without ever running a\n// full JSON.parse on an unterminated document.\n\nconst CODE_KEY_PATTERN = /\"code\"\\s*:\\s*\"/;\n\nconst ESCAPES: Record<string, string> = {\n '\"': '\"',\n \"\\\\\": \"\\\\\",\n \"/\": \"/\",\n b: \"\\b\",\n f: \"\\f\",\n n: \"\\n\",\n r: \"\\r\",\n t: \"\\t\",\n};\n\nexport class PartialCodeFieldExtractor {\n #raw = \"\";\n #codeStart = -1;\n #cursor = 0;\n #decoded = \"\";\n #complete = false;\n #failed = false;\n readonly #maxBytes: number;\n\n constructor(maxBytes: number) {\n this.#maxBytes = maxBytes;\n }\n\n get complete(): boolean {\n return this.#complete;\n }\n\n /** Decoded `code` content so far, or undefined before the key appears. */\n get code(): string | undefined {\n return this.#codeStart === -1 ? undefined : this.#decoded;\n }\n\n push(delta: string): void {\n if (this.#complete || this.#failed) return;\n if (this.#raw.length + delta.length > this.#maxBytes) {\n // Cap hard: treat as failed so callers stop scanning this stream. A\n // truncated extractor could otherwise emit candidates from a program\n // prefix whose later bytes never arrived.\n this.#failed = true;\n return;\n }\n this.#raw += delta;\n if (this.#codeStart === -1) {\n const match = CODE_KEY_PATTERN.exec(this.#raw);\n if (!match) return;\n this.#codeStart = match.index + match[0].length;\n this.#cursor = this.#codeStart;\n }\n const raw = this.#raw;\n while (this.#cursor < raw.length) {\n const ch = raw[this.#cursor]!;\n if (ch === '\"') {\n this.#complete = true;\n this.#cursor = raw.length;\n return;\n }\n if (ch === \"\\\\\") {\n if (this.#cursor + 1 >= raw.length) return; // dangling escape; await more\n const esc = raw[this.#cursor + 1]!;\n if (esc === \"u\") {\n if (this.#cursor + 5 >= raw.length) return; // incomplete \\uXXXX\n const hex = raw.slice(this.#cursor + 2, this.#cursor + 6);\n if (!/^[0-9a-fA-F]{4}$/.test(hex)) {\n this.#failed = true;\n return;\n }\n this.#decoded += String.fromCharCode(parseInt(hex, 16));\n this.#cursor += 6;\n continue;\n }\n const mapped = ESCAPES[esc];\n if (mapped === undefined) {\n this.#failed = true;\n return;\n }\n this.#decoded += mapped;\n this.#cursor += 2;\n continue;\n }\n if (ch < \" \") {\n // Bare control characters cannot appear inside a raw JSON string.\n this.#failed = true;\n return;\n }\n this.#decoded += ch;\n this.#cursor += 1;\n }\n }\n}\n", "import type {\n ExtensionContext,\n MessageUpdateEvent,\n} from \"@oh-my-pi/pi-coding-agent\";\nimport { PartialCodeFieldExtractor } from \"./partial-json.js\";\nimport type { LiteralCallScanner } from \"./scanner.js\";\nimport type { FabricSpeculationCandidate } from \"./types.js\";\n\ninterface StreamState {\n toolCallId: string;\n isFabricExec: boolean;\n extractor: PartialCodeFieldExtractor;\n scanner?: LiteralCallScanner;\n}\n\nexport interface FabricSpeculationTapOptions {\n enabled(): boolean;\n maxBufferBytes(): number;\n /** Static cheap gate (Tier-A set / MCP allowlist) before the registry re-validates. */\n isEligible(ref: string): boolean;\n launch(\n toolCallId: string,\n candidate: FabricSpeculationCandidate,\n context: ExtensionContext,\n ): void;\n}\n\nconst toolCallBlock = (\n partial: unknown,\n contentIndex: number,\n): { name?: string; id?: string } => {\n const content = (partial as { content?: unknown } | undefined)?.content;\n if (!Array.isArray(content)) return {};\n const block = content[contentIndex];\n if (!block || typeof block !== \"object\") return {};\n const record = block as { type?: unknown; name?: unknown; id?: unknown };\n if (record.type !== \"toolCall\") return {};\n return {\n ...(typeof record.name === \"string\" && record.name ? { name: record.name } : {}),\n ...(typeof record.id === \"string\" && record.id ? { id: record.id } : {}),\n };\n};\n\n// Floor between full-AST reparses of one stream. The scanner's own \")\" gate\n// means most deltas never schedule a parse at all.\nconst PARSE_INTERVAL_MS = 50;\n\n/**\n * Watches assistant message streaming for fabric_exec tool calls, incrementally\n * decodes the `code` argument, and launches speculative executions for\n * literal-argument calls as soon as they complete in the stream. Never throws\n * into the event pipeline: every failure mode degrades to no speculation.\n */\nexport class FabricSpeculationStreamTap {\n readonly #options: FabricSpeculationTapOptions;\n readonly #streams = new Map<number, StreamState>();\n // The scanner depends on the TypeScript compiler; the factory arrives through\n // a lazy dynamic import so session startup never pays for it. Streams opened\n // before the factory lands are caught up in full (extractors buffer the\n // whole decoded prefix, so no candidate is lost, only delayed).\n #createScanner: (() => LiteralCallScanner) | undefined;\n #lastParseAt = 0;\n\n constructor(options: FabricSpeculationTapOptions) {\n this.#options = options;\n }\n\n setScannerFactory(factory: () => LiteralCallScanner): void {\n this.#createScanner = factory;\n for (const stream of this.#streams.values()) {\n if (stream.scanner) continue;\n stream.scanner = factory();\n const code = stream.extractor.code;\n if (!stream.isFabricExec || code === undefined) continue;\n try {\n for (const candidate of stream.scanner.push(code)) {\n if (this.#options.isEligible(candidate.ref)) {\n this.#pendingCatchUp.push({ stream, candidate });\n }\n }\n } catch {\n // Catch-up scanning degrades to skipped candidates only.\n }\n }\n }\n\n readonly #pendingCatchUp: { stream: StreamState; candidate: FabricSpeculationCandidate }[] = [];\n\n /** Drain candidates recovered while the scanner module loaded. */\n flushCatchUp(context: Parameters<FabricSpeculationTapOptions[\"launch\"]>[2]): void {\n const pending = this.#pendingCatchUp.splice(0);\n for (const { stream, candidate } of pending) {\n this.#options.launch(stream.toolCallId, candidate, context);\n }\n }\n\n /** New assistant message: content indices restart. */\n reset(): void {\n this.#streams.clear();\n }\n\n handleMessageUpdate(event: MessageUpdateEvent, context: ExtensionContext): void {\n try {\n if (!this.#options.enabled()) return;\n if (this.#pendingCatchUp.length > 0) this.flushCatchUp(context);\n const assistantEvent = event.assistantMessageEvent;\n if (assistantEvent.type === \"toolcall_start\") {\n const block = toolCallBlock(assistantEvent.partial, assistantEvent.contentIndex);\n this.#streams.set(assistantEvent.contentIndex, {\n toolCallId: block.id ?? `index-${assistantEvent.contentIndex}`,\n isFabricExec: block.name !== undefined ? block.name === \"fabric_exec\" : true,\n extractor: new PartialCodeFieldExtractor(this.#options.maxBufferBytes()),\n ...(this.#createScanner ? { scanner: this.#createScanner() } : {}),\n });\n return;\n }\n if (assistantEvent.type === \"toolcall_delta\") {\n const stream = this.#streams.get(assistantEvent.contentIndex);\n if (!stream) return;\n const block = toolCallBlock(assistantEvent.partial, assistantEvent.contentIndex);\n if (block.id) stream.toolCallId = block.id;\n if (block.name !== undefined) stream.isFabricExec = block.name === \"fabric_exec\";\n stream.extractor.push(assistantEvent.delta);\n const code = stream.extractor.code;\n if (!stream.isFabricExec || code === undefined) return;\n this.#scan(stream, code, context, false);\n return;\n }\n if (assistantEvent.type === \"toolcall_end\") {\n const stream = this.#streams.get(assistantEvent.contentIndex);\n if (!stream) return;\n this.#streams.delete(assistantEvent.contentIndex);\n const block = toolCallBlock(assistantEvent.toolCall, assistantEvent.contentIndex);\n if (block.id) stream.toolCallId = block.id;\n if (block.name !== undefined) stream.isFabricExec = block.name === \"fabric_exec\";\n const code = stream.extractor.code;\n if (stream.isFabricExec && code !== undefined) {\n this.#scan(stream, code, context, true);\n }\n }\n } catch {\n // Speculation is opportunistic; a tap failure must never surface.\n }\n }\n\n #scan(stream: StreamState, code: string, context: ExtensionContext, force: boolean): void {\n const now = Date.now();\n if (!force && now - this.#lastParseAt < PARSE_INTERVAL_MS) return;\n this.#lastParseAt = now;\n if (!stream.scanner) return;\n const candidates = stream.scanner.push(code);\n for (const candidate of candidates) {\n if (this.#options.isEligible(candidate.ref)) {\n this.#options.launch(stream.toolCallId, candidate, context);\n }\n }\n }\n}\n", "import type { FabricLifecycleEvent, FabricLifecycleSubscription } from \"./types.js\";\n\nexport interface PendingLifecycleDelivery {\n subscription: FabricLifecycleSubscription;\n event: FabricLifecycleEvent;\n}\n\nexport type LifecycleBatchDispatcher = (\n target: string,\n batch: PendingLifecycleDelivery[],\n) => Promise<void>;\n\nexport type LifecycleDeliveryErrorHandler = (\n target: string,\n batch: PendingLifecycleDelivery[],\n error: unknown,\n) => void;\n\nexport const DEFAULT_LIFECYCLE_COALESCE_MS = 2_000;\n\n/**\n * Coalesce lifecycle deliveries per target so a burst of run completions\n * wakes the orchestrator once instead of once per event (#85).\n *\n * Each wake turn costs the orchestrator a full agent run; without coalescing,\n * a fan-out of N completed runs serializes into N runs and later events land\n * many minutes after their occurredAt. followUp deliveries for the same\n * target inside the coalescing window are batched into one message; steer\n * deliveries pass through immediately because they interrupt the current\n * run and must not be delayed.\n */\nexport class LifecycleDeliveryScheduler {\n readonly #coalesceMs: number;\n readonly #buffers = new Map<string, PendingLifecycleDelivery[]>();\n readonly #timers = new Map<string, NodeJS.Timeout>();\n readonly #inFlight = new Map<string, Promise<void>>();\n #closed = false;\n\n constructor(\n coalesceMs: number,\n readonly deliver: LifecycleBatchDispatcher,\n readonly onError: LifecycleDeliveryErrorHandler = () => {},\n ) {\n this.#coalesceMs = Math.max(0, coalesceMs);\n }\n\n schedule(target: string, delivery: PendingLifecycleDelivery): void {\n if (this.#closed) return;\n if (delivery.subscription.delivery === \"steer\") {\n void this.#dispatch(target, [delivery]);\n return;\n }\n const buffer = this.#buffers.get(target);\n if (buffer) buffer.push(delivery);\n else this.#buffers.set(target, [delivery]);\n if (this.#timers.has(target)) return;\n const timer = setTimeout(() => void this.flush(target), this.#coalesceMs);\n timer.unref();\n this.#timers.set(target, timer);\n }\n\n async flush(target: string): Promise<void> {\n const timer = this.#timers.get(target);\n if (timer) {\n clearTimeout(timer);\n this.#timers.delete(target);\n }\n const batch = this.#buffers.get(target);\n if (!batch || batch.length === 0) return;\n this.#buffers.delete(target);\n await this.#dispatch(target, batch);\n }\n\n async flushAll(): Promise<void> {\n for (const timer of this.#timers.values()) clearTimeout(timer);\n this.#timers.clear();\n const targets = [...this.#buffers.keys()];\n await Promise.all(targets.map((target) => this.flush(target)));\n await Promise.all(this.#inFlight.values());\n }\n\n async dispose(): Promise<void> {\n this.#closed = true;\n for (const timer of this.#timers.values()) clearTimeout(timer);\n this.#timers.clear();\n this.#buffers.clear();\n await Promise.all(this.#inFlight.values());\n }\n\n async #dispatch(target: string, batch: PendingLifecycleDelivery[]): Promise<void> {\n const previous = this.#inFlight.get(target);\n const operation = (async () => {\n await previous?.catch(() => undefined);\n try {\n await this.deliver(target, batch);\n } catch (error) {\n this.onError(target, batch, error);\n }\n })();\n this.#inFlight.set(\n target,\n operation.finally(() => {\n if (this.#inFlight.get(target) === operation) this.#inFlight.delete(target);\n }),\n );\n await operation;\n }\n}\n", "import { FABRIC_ACTOR_HOST_EVENTS } from \"../actors/types.js\";\nimport {\n MAX_COMPACTION_INSTRUCTIONS_CHARS,\n MAX_PRESERVE_ITEM_CHARS,\n MAX_PRESERVE_ITEMS,\n} from \"../compaction/instructions.js\";\nimport { FABRIC_LIFECYCLE_EVENTS } from \"../lifecycle/types.js\";\nimport type { FabricActionDescriptor } from \"../protocol.js\";\n\nconst runProperties = {\n task: { type: \"string\", description: \"A self-contained task for the child agent\" },\n name: { type: \"string\" },\n runner: {\n type: \"string\",\n enum: [\"omp\", \"claude\", \"veda\"],\n description: \"Execution harness. Defaults to agents.runner.\",\n },\n transport: {\n type: \"string\",\n enum: [\"auto\", \"process\", \"tmux\", \"screen\", \"localterm\", \"herdr\"],\n },\n model: {\n type: \"string\",\n description:\n \"OMP provider/id, a configured models.aliases name, or a search term resolved to the closest authenticated model (recency from pi-model-sort breaks ties); Claude runtime value or Veda backend model/alias are forwarded verbatim.\",\n },\n persona: {\n type: \"string\",\n description: \"Veda persona name for this run, such as frontend, reviewer, worker, or a custom persona.\",\n },\n thinking: {\n type: \"string\",\n enum: [\"off\", \"minimal\", \"low\", \"medium\", \"high\", \"xhigh\", \"max\"],\n },\n tools: { type: \"array\", items: { type: \"string\" } },\n timeoutMs: {\n type: \"number\",\n description:\n \"Optional longer wall-clock limit in milliseconds. Omit to use agents.timeoutMs (60 minutes by default); values below the configured default are ignored.\",\n },\n extensions: { type: \"boolean\" },\n recursive: { type: \"boolean\" },\n cwd: {\n type: \"string\",\n description: \"Filesystem execution directory; relative paths resolve from the parent Fabric agent cwd.\",\n },\n worktree: { type: \"boolean\" },\n schema: { type: \"object\", description: \"Optional JSON Schema for validated structured output\" },\n};\n\nconst runSchema = {\n type: \"object\",\n properties: runProperties,\n required: [\"task\"],\n additionalProperties: false,\n};\n\nconst residencySchema = {\n type: \"string\",\n enum: [\"session\", \"durable\"],\n description: \"session stops with the current OMP host; durable transfers execution to Fabric's hidden resident host.\",\n};\n\nconst actorBindingScopeSchema = {\n type: \"string\",\n enum: [\"session\", \"project\"],\n description: \"session (default) changes only this OMP session; project pins the shared actor default and requires ownership.\",\n};\n\nconst actorInvocationProperties = {\n id: { type: \"string\" },\n message: { type: \"string\" },\n data: {},\n model: {\n ...runProperties.model,\n description: \"Optional model pinned only for this actor activation.\",\n },\n thinking: runProperties.thinking,\n};\n\nconst spawnSchema = {\n ...runSchema,\n properties: { ...runProperties, residency: residencySchema },\n};\n\nconst handoffCompactionSchema = {\n anyOf: [\n { type: \"boolean\" },\n {\n type: \"object\",\n properties: {\n instructions: {\n type: \"string\",\n maxLength: MAX_COMPACTION_INSTRUCTIONS_CHARS,\n description: \"Custom compaction instructions for the inherited trajectory\",\n },\n preserve: {\n type: \"array\",\n items: { type: \"string\", maxLength: MAX_PRESERVE_ITEM_CHARS },\n maxItems: MAX_PRESERVE_ITEMS,\n description: \"Explicit bounded facts the trajectory summary must preserve\",\n },\n },\n additionalProperties: false,\n },\n ],\n description:\n \"Compact the inherited trajectory with Fabric's deterministic compactor before the executor resumes it. `true` applies the default summary; an object customizes instructions and bounded preserve facts. Omitted keeps the full raw trajectory.\",\n};\n\nconst handoffSchema = {\n type: \"object\",\n properties: {\n task: {\n type: \"string\",\n description: \"Optional instructions for the executor in addition to the inherited trajectory\",\n },\n name: runProperties.name,\n transport: runProperties.transport,\n model: {\n ...runProperties.model,\n description: \"Explicit OMP provider/id target that will continue the inherited trajectory\",\n },\n thinking: runProperties.thinking,\n tools: runProperties.tools,\n timeoutMs: runProperties.timeoutMs,\n extensions: runProperties.extensions,\n recursive: runProperties.recursive,\n schema: runProperties.schema,\n compact: handoffCompactionSchema,\n },\n required: [\"model\"],\n additionalProperties: false,\n};\n\nconst idSchema = {\n type: \"object\",\n properties: { id: { type: \"string\" } },\n required: [\"id\"],\n additionalProperties: false,\n};\n\nconst lifecycleEventSchema = {\n type: \"string\",\n enum: [...FABRIC_LIFECYCLE_EVENTS],\n};\n\nexport const AGENTS_ACTION_DESCRIPTORS: FabricActionDescriptor[] = [\n {\n name: \"run\",\n description: \"Run a child agent through OMP or Claude Code and wait for its final result\",\n inputSchema: runSchema,\n risk: \"agent\",\n },\n {\n name: \"handoff\",\n description:\n \"Schedule an OMP trajectory handoff after the current outer fabric_exec result, then wait for implementation at that boundary\",\n inputSchema: handoffSchema,\n risk: \"agent\",\n },\n {\n name: \"spawn\",\n description:\n \"Start a child agent through OMP or Claude Code and return a handle immediately. Detached runs send Main a follow-up on terminal completion when agents.notifyOnComplete is enabled; use wait when this Fabric program needs the result and status only for progress inspection.\",\n inputSchema: spawnSchema,\n risk: \"agent\",\n },\n {\n name: \"wait\",\n description: \"Wait for a previously spawned child agent\",\n inputSchema: idSchema,\n risk: \"read\",\n },\n {\n name: \"status\",\n description: \"Get the latest status of any known project participant\",\n inputSchema: idSchema,\n risk: \"read\",\n },\n {\n name: \"list\",\n description: \"List agent participants locally, across the current lineage, or across the project\",\n inputSchema: {\n type: \"object\",\n properties: { scope: { type: \"string\", enum: [\"local\", \"lineage\", \"project\"] } },\n additionalProperties: false,\n },\n risk: \"read\",\n },\n {\n name: \"members\",\n description: \"List the unified project topology of roots, agents, and actors\",\n inputSchema: {\n type: \"object\",\n properties: {\n scope: { type: \"string\", enum: [\"local\", \"lineage\", \"project\"] },\n kinds: {\n type: \"array\",\n items: { type: \"string\", enum: [\"root\", \"agent\", \"actor\"] },\n },\n includeStale: { type: \"boolean\" },\n },\n additionalProperties: false,\n },\n risk: \"read\",\n },\n {\n name: \"self\",\n description: \"Return this caller's intrinsic participant identity in the unified topology\",\n inputSchema: { type: \"object\", properties: {}, additionalProperties: false },\n risk: \"read\",\n },\n {\n name: \"main\",\n description:\n \"Return the root user-facing Main OMP agent target. The stable alias main is also accepted by agents.steer and agents.followUp.\",\n inputSchema: { type: \"object\", properties: {}, additionalProperties: false },\n risk: \"read\",\n },\n {\n name: \"sessions\",\n description: \"List all live root OMP session agents in the project, including the current lineage root and peers, with symmetric participant identities.\",\n inputSchema: { type: \"object\", properties: {}, additionalProperties: false },\n risk: \"read\",\n },\n {\n name: \"peers\",\n description: \"List other live root OMP sessions sharing this project mesh. The dashboard-owning session remains Main; these targets are named peers.\",\n inputSchema: { type: \"object\", properties: {}, additionalProperties: false },\n risk: \"read\",\n },\n {\n name: \"subscribe\",\n description:\n \"Create a durable source-qualified participant lifecycle subscription. Events are delivered to Main by default or to another participant through steer/follow-up routing.\",\n inputSchema: {\n type: \"object\",\n properties: {\n from: { type: \"string\", description: \"Exact source participant id; main means this lineage root\" },\n events: { type: \"array\", minItems: 1, items: lifecycleEventSchema },\n to: { type: \"string\", description: \"Target participant id; defaults to main\" },\n delivery: { type: \"string\", enum: [\"steer\", \"followUp\"] },\n triggerTurn: { type: \"boolean\" },\n once: { type: \"boolean\" },\n },\n required: [\"from\", \"events\", \"delivery\", \"triggerTurn\"],\n additionalProperties: false,\n },\n risk: \"agent\",\n },\n {\n name: \"subscriptions\",\n description: \"List durable participant lifecycle subscriptions, optionally filtered by source or target\",\n inputSchema: {\n type: \"object\",\n properties: { from: { type: \"string\" }, to: { type: \"string\" } },\n additionalProperties: false,\n },\n risk: \"read\",\n },\n {\n name: \"unsubscribe\",\n description: \"Remove a participant lifecycle subscription\",\n inputSchema: idSchema,\n risk: \"agent\",\n },\n {\n name: \"models\",\n description:\n \"List models exposed by the selected runner. Claude models are enumerated from the installed Claude Code runtime, not hard-coded.\",\n inputSchema: {\n type: \"object\",\n properties: {\n runner: { type: \"string\", enum: [\"omp\", \"claude\", \"veda\"] },\n refresh: { type: \"boolean\" },\n },\n additionalProperties: false,\n },\n risk: \"execute\",\n },\n {\n name: \"switchModel\",\n description:\n \"Switch Main's live OMP session model in place. The model selector accepts an exact provider/id, a configured models.aliases name (alias chains try each target in order until one is authenticated), an exact model id, or a search term; inexact terms resolve to the closest match, preferring recently used models (via pi-model-sort usage, when present).\",\n inputSchema: {\n type: \"object\",\n properties: {\n model: {\n type: \"string\",\n description: \"provider/id, alias name, or search term\",\n },\n provider: { type: \"string\" },\n },\n required: [\"model\"],\n additionalProperties: false,\n },\n risk: \"agent\",\n },\n {\n name: \"stop\",\n description: \"Stop a local or remotely owned agent or actor that advertises the stop capability\",\n inputSchema: idSchema,\n risk: \"agent\",\n },\n {\n name: \"cleanup\",\n description: \"Remove a completed agent's run files and optional Git worktree\",\n inputSchema: {\n type: \"object\",\n properties: {\n id: { type: \"string\" },\n deleteBranch: { type: \"boolean\" },\n },\n required: [\"id\"],\n additionalProperties: false,\n },\n risk: \"write\",\n },\n {\n name: \"create\",\n description:\n 'Create a persistent actor with independently selected session or project storage. Use scope \"global\" to save a reusable project-independent template instead of a live actor.',\n inputSchema: {\n type: \"object\",\n properties: {\n name: { type: \"string\" },\n instructions: { type: \"string\" },\n events: {\n type: \"array\",\n items: {\n type: \"string\",\n enum: [...FABRIC_ACTOR_HOST_EVENTS],\n },\n },\n topics: { type: \"array\", items: { type: \"string\" } },\n delivery: {\n type: \"string\",\n enum: [\"mailbox\", \"steer\", \"followUp\", \"nextTurn\"],\n },\n responseMode: { type: \"string\", enum: [\"text\", \"directive\"] },\n triggerTurn: { type: \"boolean\" },\n coalesce: { type: \"boolean\" },\n residency: residencySchema,\n runner: runProperties.runner,\n model: runProperties.model,\n thinking: runProperties.thinking,\n tools: runProperties.tools,\n transport: runProperties.transport,\n timeoutMs: runProperties.timeoutMs,\n extensions: runProperties.extensions,\n requires: {\n type: \"array\",\n maxItems: 128,\n description: \"Exact Fabric provider.action refs committed before every actor run. Object entries may be optional.\",\n items: {\n oneOf: [\n { type: \"string\", minLength: 3, maxLength: 256 },\n {\n type: \"object\",\n properties: {\n ref: { type: \"string\", minLength: 3, maxLength: 256 },\n optional: { type: \"boolean\" },\n },\n required: [\"ref\"],\n additionalProperties: false,\n },\n ],\n },\n },\n validWhile: {\n type: \"object\",\n properties: { version: { const: 1 }, source: { type: \"string\" } },\n required: [\"version\", \"source\"],\n additionalProperties: false,\n },\n scope: {\n type: \"string\",\n enum: [\"session\", \"project\", \"global\"],\n description: \"session isolates the actor to the root OMP session; project shares it across sessions; global creates a non-live template.\",\n },\n },\n required: [\"name\", \"instructions\"],\n oneOf: [\n {\n properties: {\n delivery: { const: \"mailbox\" },\n triggerTurn: { const: false },\n },\n },\n {\n properties: {\n delivery: { const: \"nextTurn\" },\n triggerTurn: { const: false },\n },\n required: [\"delivery\"],\n },\n {\n properties: { delivery: { enum: [\"steer\", \"followUp\"] } },\n required: [\"delivery\", \"triggerTurn\"],\n },\n ],\n additionalProperties: false,\n },\n risk: \"agent\",\n },\n {\n name: \"ask\",\n description: \"Send a message to a persistent actor through its live owner and wait for its next response. Optional model/thinking values apply only to this activation.\",\n inputSchema: {\n type: \"object\",\n properties: actorInvocationProperties,\n required: [\"id\", \"message\"],\n additionalProperties: false,\n },\n risk: \"agent\",\n },\n {\n name: \"tell\",\n description: \"Queue a message through a persistent actor's live owner without waiting. Optional model/thinking values apply only to this activation.\",\n inputSchema: {\n type: \"object\",\n properties: actorInvocationProperties,\n required: [\"id\", \"message\"],\n additionalProperties: false,\n },\n risk: \"agent\",\n },\n {\n name: \"steer\",\n description:\n \"Steer Main, a running one-shot agent between turns, or a persistent actor through its mailbox. The stable id alias main targets the root user-facing OMP session. Non-local targets route over the project mesh.\",\n inputSchema: {\n type: \"object\",\n properties: { id: { type: \"string\" }, message: { type: \"string\" }, data: {} },\n required: [\"id\", \"message\"],\n additionalProperties: false,\n },\n risk: \"agent\",\n },\n {\n name: \"followUp\",\n description:\n \"Queue a follow-up for Main or a running one-shot agent, or enqueue a persistent actor mailbox message. The stable id alias main targets the root user-facing OMP session. Non-local targets route over the project mesh.\",\n inputSchema: {\n type: \"object\",\n properties: { id: { type: \"string\" }, message: { type: \"string\" }, data: {} },\n required: [\"id\", \"message\"],\n additionalProperties: false,\n },\n risk: \"agent\",\n },\n {\n name: \"setSteeringMode\",\n description:\n \"Set how queued steer messages are delivered to a running one-shot agent: all at once after the current turn, or one per turn (default). Local agent only.\",\n inputSchema: {\n type: \"object\",\n properties: {\n id: { type: \"string\" },\n mode: { type: \"string\", enum: [\"all\", \"one-at-a-time\"] },\n },\n required: [\"id\", \"mode\"],\n additionalProperties: false,\n },\n risk: \"agent\",\n },\n {\n name: \"setFollowUpMode\",\n description:\n \"Set how queued follow-up messages are delivered to a one-shot agent: all when it finishes, or one per completion (default). Local agent only.\",\n inputSchema: {\n type: \"object\",\n properties: {\n id: { type: \"string\" },\n mode: { type: \"string\", enum: [\"all\", \"one-at-a-time\"] },\n },\n required: [\"id\", \"mode\"],\n additionalProperties: false,\n },\n risk: \"agent\",\n },\n {\n name: \"compact\",\n description:\n \"Request an advisory compaction of a running OMP-runner child agent's context at its next safe boundary (between its own turns), preserving the child's accumulated context. Rejected for Claude-runner children. The child OMP core applies the compaction; Fabric only forwards the intent.\",\n inputSchema: {\n type: \"object\",\n properties: {\n id: { type: \"string\" },\n instructions: {\n type: \"string\",\n description: \"Optional custom compaction instructions forwarded to the child OMP\",\n },\n },\n required: [\"id\"],\n additionalProperties: false,\n },\n risk: \"agent\",\n },\n {\n name: \"actorStatus\",\n description: \"Read one persistent actor's status\",\n inputSchema: idSchema,\n risk: \"read\",\n },\n {\n name: \"actors\",\n description:\n 'List persistent actors. Default scope \"project\" lists live actors in this Fabric session; scope \"global\" lists project-independent templates in the global registry.',\n inputSchema: {\n type: \"object\",\n properties: { scope: { type: \"string\", enum: [\"project\", \"global\"] } },\n additionalProperties: false,\n },\n risk: \"read\",\n },\n {\n name: \"messages\",\n description: \"Read a persistent actor's bounded inbox and outbox history\",\n inputSchema: {\n type: \"object\",\n properties: { id: { type: \"string\" }, limit: { type: \"number\", minimum: 1 } },\n required: [\"id\"],\n additionalProperties: false,\n },\n risk: \"read\",\n },\n {\n name: \"setModel\",\n description:\n \"Change or clear a persistent actor model binding. Session scope is the default; project scope explicitly pins the shared definition default.\",\n inputSchema: {\n type: \"object\",\n properties: {\n id: { type: \"string\" },\n model: { type: \"string\" },\n scope: actorBindingScopeSchema,\n },\n required: [\"id\"],\n additionalProperties: false,\n },\n risk: \"agent\",\n },\n {\n name: \"setThinking\",\n description:\n \"Change or clear a persistent actor reasoning-effort binding. Session scope is the default; project scope explicitly pins the shared definition default.\",\n inputSchema: {\n type: \"object\",\n properties: {\n id: { type: \"string\" },\n thinking: runProperties.thinking,\n scope: actorBindingScopeSchema,\n },\n required: [\"id\"],\n additionalProperties: false,\n },\n risk: \"agent\",\n },\n {\n name: \"setTools\",\n description:\n \"Replace a persistent actor's tool allowlist. Takes effect on its next queued message; an empty list disables optional tools.\",\n inputSchema: {\n type: \"object\",\n properties: {\n id: { type: \"string\" },\n tools: runProperties.tools,\n scope: { type: \"string\", enum: [\"project\", \"global\"] },\n },\n required: [\"id\", \"tools\"],\n additionalProperties: false,\n },\n risk: \"agent\",\n },\n {\n name: \"setEvents\",\n description: \"Replace a persistent actor's session-bound OMP and synthetic tool_error event subscriptions\",\n inputSchema: {\n type: \"object\",\n properties: {\n id: { type: \"string\" },\n events: {\n type: \"array\",\n items: {\n type: \"string\",\n enum: [...FABRIC_ACTOR_HOST_EVENTS],\n },\n },\n },\n required: [\"id\", \"events\"],\n additionalProperties: false,\n },\n risk: \"agent\",\n },\n {\n name: \"setDeliveryPolicy\",\n description:\n \"Replace a project actor or global template delivery policy. steer/followUp require an explicit triggerTurn choice; mailbox/nextTurn require false.\",\n inputSchema: {\n type: \"object\",\n properties: {\n id: { type: \"string\" },\n delivery: {\n type: \"string\",\n enum: [\"mailbox\", \"steer\", \"followUp\", \"nextTurn\"],\n },\n triggerTurn: { type: \"boolean\" },\n scope: { type: \"string\", enum: [\"project\", \"global\"] },\n },\n required: [\"id\", \"delivery\", \"triggerTurn\"],\n additionalProperties: false,\n },\n risk: \"agent\",\n },\n {\n name: \"clearMessages\",\n description: \"Clear a persistent actor's recorded message history\",\n inputSchema: idSchema,\n risk: \"write\",\n },\n {\n name: \"remove\",\n description:\n 'Stop and remove a persistent actor. Default scope \"project\" removes a live project actor; scope \"global\" removes a project-independent template from the global registry.',\n inputSchema: {\n type: \"object\",\n properties: {\n id: { type: \"string\" },\n scope: { type: \"string\", enum: [\"project\", \"global\"] },\n },\n required: [\"id\"],\n additionalProperties: false,\n },\n risk: \"agent\",\n },\n {\n name: \"setInstructions\",\n description:\n 'Replace an actor\\'s default instruction (its persona / system-prompt body). Default scope \"project\" edits a live project actor; scope \"global\" edits a project-independent template. Takes effect on the actor\\'s next queued message.',\n inputSchema: {\n type: \"object\",\n properties: {\n id: { type: \"string\" },\n instructions: { type: \"string\" },\n scope: { type: \"string\", enum: [\"project\", \"global\"] },\n },\n required: [\"id\", \"instructions\"],\n additionalProperties: false,\n },\n risk: \"agent\",\n },\n {\n name: \"import\",\n description:\n \"Import a project-independent template from the global registry into the current project as a fresh live actor with no inherited history (no messages, session, or run logs). Identify the template by id or name; optionally rename the imported actor with \\\"as\\\" to avoid colliding with a live actor.\",\n inputSchema: {\n type: \"object\",\n properties: {\n id: { type: \"string\", description: \"Template id or name (one of id/name required)\" },\n name: { type: \"string\", description: \"Template name (one of id/name required)\" },\n as: { type: \"string\", description: \"Optional new name for the imported live actor\" },\n },\n additionalProperties: false,\n },\n risk: \"agent\",\n },\n {\n name: \"export\",\n description:\n \"Export a live project actor's definition to the global registry as a project-independent template, without any history (no messages, session, or run logs). Throws on a name collision unless overwrite is true.\",\n inputSchema: {\n type: \"object\",\n properties: {\n id: { type: \"string\" },\n overwrite: { type: \"boolean\" },\n },\n required: [\"id\"],\n additionalProperties: false,\n },\n risk: \"write\",\n },\n {\n name: \"log\",\n description:\n \"Read an actor or agent run's LLM/agent log: the actor's session transcript (session.jsonl) and/or a retained run's event stream (events.jsonl: tool calls, model responses, usage). Actors retain their last runs so logs survive after success.\",\n inputSchema: {\n type: \"object\",\n properties: {\n id: { type: \"string\", description: \"Actor ID/name or agent run ID\" },\n type: {\n type: \"string\",\n enum: [\"session\", \"run\", \"all\"],\n description:\n \"session = actor session transcript (default for actors); run = last retained run's events; all = both\",\n },\n lines: { type: \"number\", minimum: 1, description: \"Page line limit (default 200)\" },\n before: {\n type: \"number\",\n minimum: 0,\n description: \"Exclusive line cursor returned by a previous page to load older entries\",\n },\n runId: { type: \"string\", description: \"Specific retained run (default: actor's last run)\" },\n },\n required: [\"id\"],\n additionalProperties: false,\n },\n risk: \"read\",\n },\n];\n", "import { randomUUID } from \"node:crypto\";\nimport fs from \"node:fs\";\nimport path from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport { writeJsonAtomic } from \"../core/atomic-write.js\";\nimport type { FabricActorInfo, FabricActorRequest } from \"../actors/types.js\";\nimport type { FabricAgentLog, AgentHandleInfo, AgentRunRecord, AgentRunRequest, AgentRunResult } from \"../agents/types.js\";\nimport { resolveAgentCwd, validateAgentCwdRequest } from \"../agents/manager.js\";\nimport { isFabricWorktreePath } from \"../agents/worktree-paths.js\";\nimport { executeFile, processIsAlive, spawnDetached } from \"../agents/transports/process-utils.js\";\nimport { readJsonlPage } from \"../log-tail.js\";\nimport type { FabricOwnedModelGuidance } from \"../components/model-guidance.js\";\nimport type { FabricMainAgentTarget } from \"../main-agent.js\";\nimport { MeshStore, type MeshStateEntry } from \"../mesh/store.js\";\nimport type { FabricParticipantSource } from \"../topology/types.js\";\nimport {\n RESIDENT_HOST_FORMAT,\n residentDeliveryPrefix,\n residentHostId,\n type ResidentAgentMetadata,\n type ResidentCommand,\n type ResidentCommandResponse,\n type ResidentDeliveryRecord,\n type ResidentHostConfig,\n type ResidentHostOwner,\n type ResidentOmpModelState,\n} from \"./protocol.js\";\n\n// One-time cost per resident root: cold-starting the bundled OMP binary plus\n// extension loading can exceed 10s on slow runners (e.g. CI Windows), so give\n// startup a generous budget. Idle exit still reclaims the processes.\nconst STARTUP_TIMEOUT_MS = 30_000;\nconst COMMAND_TIMEOUT_MS = 30_000;\nconst STATUS_POLL_MS = 100;\nconst AGENT_ID_PATTERN = /^[a-f0-9]{32}$/;\n\nconst delay = (ms: number): Promise<void> =>\n new Promise((resolve) => setTimeout(resolve, ms));\n\nconst atomicWrite = (filePath: string, value: unknown): void => {\n writeJsonAtomic(filePath, value, { space: 2 });\n};\n\nconst readJson = <T>(filePath: string): T | undefined => {\n try {\n return JSON.parse(fs.readFileSync(filePath, \"utf8\")) as T;\n } catch {\n return undefined;\n }\n};\n\nconst terminal = (status: string): status is AgentRunResult[\"status\"] =>\n status === \"completed\" || status === \"failed\" || status === \"stopped\" || status === \"timed_out\";\n\nconst samePath = (left: string, right: string): boolean => {\n try {\n return path.relative(fs.realpathSync.native(left), fs.realpathSync.native(right)) === \"\";\n } catch {\n return false;\n }\n};\n\n/** Refuse cleanup unless the selected repository still owns this worktree. */\nconst registeredWorktree = async (gitRoot: string, worktreePath: string): Promise<string> => {\n let output: string;\n try {\n output = (await executeFile(\"git\", [\"worktree\", \"list\", \"--porcelain\"], {\n cwd: gitRoot,\n timeoutMs: 30_000,\n })).stdout;\n } catch (error) {\n const reason = error instanceof Error ? error.message : String(error);\n throw new Error(`Cannot validate durable worktree ${JSON.stringify(worktreePath)}: ${reason}`);\n }\n const registered = output\n .split(/\\r?\\n/)\n .filter((line) => line.startsWith(\"worktree \"))\n .map((line) => line.slice(\"worktree \".length));\n const match = registered.find((candidate) => samePath(candidate, worktreePath));\n if (!match) {\n throw new Error(\n `Refusing durable worktree cleanup: ${JSON.stringify(worktreePath)} is not registered by ${JSON.stringify(gitRoot)}`,\n );\n }\n return match;\n};\n\nexport interface ResidencyClientOptions {\n config: ResidentHostConfig;\n mesh: MeshStore;\n participants: FabricParticipantSource;\n mainAgent: FabricMainAgentTarget;\n ompModelState?: () => ResidentOmpModelState;\n hostPath?: string;\n}\n\nexport class ResidencyClient {\n readonly hostId: string;\n readonly #configPath: string;\n readonly #ownerPath: string;\n readonly #errorPath: string;\n readonly #requestsPath: string;\n readonly #responsesPath: string;\n readonly #agentsPath: string;\n readonly #deliveryPrefix: string;\n readonly #hostPath: string;\n #deliveryTimer: NodeJS.Timeout | undefined;\n #modelGuidanceJson: string | undefined;\n #drainingDeliveries = false;\n #closed = false;\n\n constructor(readonly options: ResidencyClientOptions) {\n this.hostId = residentHostId(options.config.rootId);\n this.#configPath = path.join(options.config.residencyRoot, \"config.json\");\n this.#ownerPath = path.join(options.config.residencyRoot, \"owner.json\");\n this.#errorPath = path.join(options.config.residencyRoot, \"error.json\");\n this.#requestsPath = path.join(options.config.residencyRoot, \"requests\");\n this.#responsesPath = path.join(options.config.residencyRoot, \"responses\");\n this.#agentsPath = path.join(options.config.residencyRoot, \"agents\");\n this.#deliveryPrefix = residentDeliveryPrefix(options.config.rootId);\n this.#hostPath = options.hostPath ?? fileURLToPath(new URL(\"./launcher.js\", import.meta.url));\n }\n\n start(): void {\n if (this.#deliveryTimer || this.#closed || !this.options.mainAgent.local) return;\n this.syncOmpModels();\n this.#deliveryTimer = setInterval(\n () => void this.#drainDeliveries().catch(() => undefined),\n Math.max(20, this.options.config.mesh.actorPollMs),\n );\n this.#deliveryTimer.unref();\n void this.#drainDeliveries().catch(() => undefined);\n }\n\n async close(): Promise<void> {\n this.#closed = true;\n if (this.#deliveryTimer) clearInterval(this.#deliveryTimer);\n this.#deliveryTimer = undefined;\n while (this.#drainingDeliveries) await delay(10);\n }\n\n syncOmpModels(): void {\n this.#refreshOmpModels();\n if (fs.existsSync(this.options.config.residencyRoot)) {\n atomicWrite(this.#configPath, this.options.config);\n }\n }\n\n updateModelGuidance(guidance: readonly FabricOwnedModelGuidance[]): void {\n const snapshot: FabricOwnedModelGuidance[] = structuredClone([...guidance]);\n const serialized = JSON.stringify(snapshot);\n if (serialized === this.#modelGuidanceJson) return;\n this.#modelGuidanceJson = serialized;\n this.options.config.modelGuidance = snapshot;\n this.#refreshOmpModels();\n if (fs.existsSync(this.options.config.residencyRoot)) {\n atomicWrite(this.#configPath, this.options.config);\n }\n }\n\n async ensureHost(): Promise<ResidentHostOwner> {\n if (this.#closed) throw new Error(\"Fabric residency client is closed\");\n this.#refreshOmpModels();\n atomicWrite(this.#configPath, this.options.config);\n const existing = this.#liveOwner();\n if (existing) return existing;\n fs.rmSync(this.#errorPath, { force: true });\n await spawnDetached(\n this.#hostPath,\n [\"--config\", this.#configPath],\n this.options.config.cwd,\n );\n const deadline = Date.now() + STARTUP_TIMEOUT_MS;\n while (Date.now() < deadline) {\n const owner = this.#liveOwner();\n if (owner) return owner;\n const failure = readJson<{ error?: unknown }>(this.#errorPath);\n if (typeof failure?.error === \"string\") {\n throw new Error(`Fabric resident host failed to start: ${failure.error}`);\n }\n await delay(STATUS_POLL_MS);\n }\n // Surface any launcher-recorded child output so a silent slow start (or a\n // quiet child crash) is diagnosable from the error alone.\n const readIfPresent = (name: string): string => {\n try { return fs.readFileSync(path.join(this.options.config.residencyRoot, name), \"utf8\").trim(); } catch { return \"\"; }\n };\n const childOutput = readIfPresent(\"child-stderr.log\");\n const launcherLog = readIfPresent(\"launcher.log\").split(\"\\n\").slice(-6).join(\"\\n\");\n const ownerState = readIfPresent(\"owner.json\").slice(0, 300);\n const diagnostics = [\n childOutput ? `Child output: ${childOutput.slice(-500)}` : \"\",\n launcherLog ? `Launcher log: ${launcherLog}` : \"\",\n ownerState ? `Owner state: ${ownerState}` : \"Owner state: absent\",\n ].filter(Boolean).join(\" | \");\n throw new Error(`Timed out starting Fabric resident host ${this.hostId}. ${diagnostics}`);\n }\n\n #refreshOmpModels(): void {\n const state = this.options.ompModelState?.();\n if (state) this.options.config.models = structuredClone(state);\n }\n\n async ensureActor(id: string): Promise<void> {\n await this.ensureHost();\n await this.#waitForParticipant(id, \"actor\");\n }\n\n async createActor(request: FabricActorRequest): Promise<FabricActorInfo> {\n await this.ensureHost();\n const response = await this.#command({\n format: RESIDENT_HOST_FORMAT,\n operation: \"createActor\",\n requestId: randomUUID(),\n rootId: this.options.config.rootId,\n request,\n createdAt: Date.now(),\n });\n if (!response.actor) throw new Error(\"Fabric resident host returned no actor\");\n await this.#waitForParticipant(response.actor.id, \"actor\");\n return response.actor;\n }\n\n async spawnAgent(request: AgentRunRequest, signal?: AbortSignal): Promise<AgentHandleInfo> {\n validateAgentCwdRequest(request);\n const resolvedRequest = request.cwd === undefined\n ? request\n : { ...request, cwd: resolveAgentCwd(this.options.config.cwd, request.cwd) };\n await this.ensureHost();\n const response = await this.#command(\n {\n format: RESIDENT_HOST_FORMAT,\n operation: \"spawn\",\n requestId: randomUUID(),\n rootId: this.options.config.rootId,\n request: { ...resolvedRequest, residency: \"durable\" },\n createdAt: Date.now(),\n },\n signal,\n );\n if (!response.handle) throw new Error(\"Fabric resident host returned no agent handle\");\n await this.#waitForParticipant(response.handle.id, \"agent\");\n return response.handle;\n }\n\n hasAgent(id: string): boolean {\n return AGENT_ID_PATTERN.test(id) && fs.existsSync(this.#metadataPath(id));\n }\n\n statusAgent(id: string): AgentRunRecord | AgentHandleInfo {\n const metadata = this.#metadata(id);\n if (!metadata) throw new Error(`Unknown durable Fabric agent: ${id}`);\n const record = readJson<AgentRunRecord>(path.join(metadata.runDirectory, \"status.json\"));\n if (!record || record.id !== metadata.id) return structuredClone(metadata.handle);\n return {\n ...record,\n cwd: metadata.handle.cwd,\n residency: \"durable\",\n logFile: path.join(metadata.runDirectory, \"events.jsonl\"),\n ...(metadata.handle.sessionId ? { sessionId: metadata.handle.sessionId } : {}),\n ...(metadata.handle.attachCommand ? { attachCommand: metadata.handle.attachCommand } : {}),\n };\n }\n\n listAgents(): Array<AgentRunRecord | AgentHandleInfo> {\n let entries: string[];\n try {\n entries = fs.readdirSync(this.#agentsPath);\n } catch {\n return [];\n }\n return entries\n .filter((entry) => entry.endsWith(\".json\"))\n .flatMap((entry) => {\n try {\n return [this.statusAgent(entry.slice(0, -5))];\n } catch {\n return [];\n }\n });\n }\n\n async waitAgent(id: string, signal?: AbortSignal): Promise<AgentRunResult> {\n if (this.#liveOwner()) {\n await this.#command({\n format: RESIDENT_HOST_FORMAT,\n operation: \"foreground\",\n requestId: randomUUID(),\n rootId: this.options.config.rootId,\n id,\n createdAt: Date.now(),\n }, signal).catch(() => undefined);\n }\n while (true) {\n if (signal?.aborted) throw new Error(`Waiting for durable Fabric agent ${id} was aborted`);\n const status = this.statusAgent(id);\n if (terminal(status.status) && \"startedAt\" in status) return status as AgentRunResult;\n await delay(STATUS_POLL_MS);\n }\n }\n\n readAgentLog(id: string, options: { lines?: number; before?: number } = {}): FabricAgentLog {\n const metadata = this.#metadata(id);\n if (!metadata) throw new Error(`Unknown durable Fabric agent: ${id}`);\n const logFile = path.join(metadata.runDirectory, \"events.jsonl\");\n const page = readJsonlPage(logFile, Math.max(1, Math.min(options.lines ?? 200, 5_000)), options.before);\n const status = readJson<AgentRunRecord>(path.join(metadata.runDirectory, \"status.json\"));\n return {\n id,\n runDirectory: metadata.runDirectory,\n logFile,\n ...(status ? { status: { ...status, cwd: metadata.handle.cwd, residency: \"durable\" } } : {}),\n events: page.lines,\n hasMore: page.hasMore,\n ...(page.before !== undefined ? { before: page.before } : {}),\n };\n }\n\n async removeActor(id: string): Promise<{ removed: boolean }> {\n await this.ensureHost();\n await this.#command({\n format: RESIDENT_HOST_FORMAT,\n operation: \"removeActor\",\n requestId: randomUUID(),\n rootId: this.options.config.rootId,\n id,\n createdAt: Date.now(),\n });\n return { removed: true };\n }\n\n async cleanupAgent(id: string, deleteBranch = false): Promise<{ cleaned: boolean }> {\n const metadata = this.#metadata(id);\n if (!metadata) throw new Error(`Unknown durable Fabric agent: ${id}`);\n if (!this.#liveOwner()) return this.#cleanupTerminalFiles(metadata, deleteBranch);\n let response: ResidentCommandResponse;\n try {\n response = await this.#command({\n format: RESIDENT_HOST_FORMAT,\n operation: \"cleanup\",\n requestId: randomUUID(),\n rootId: this.options.config.rootId,\n id,\n deleteBranch,\n createdAt: Date.now(),\n });\n } catch (error) {\n if (error instanceof Error && /Unknown Fabric agent/.test(error.message)) {\n return this.#cleanupTerminalFiles(metadata, deleteBranch);\n }\n throw error;\n }\n if (!response.ok) throw new Error(response.error ?? `Failed to clean durable Fabric agent ${id}`);\n return { cleaned: true };\n }\n\n async #cleanupTerminalFiles(\n metadata: ResidentAgentMetadata,\n deleteBranch: boolean,\n ): Promise<{ cleaned: boolean }> {\n const status = this.statusAgent(metadata.id);\n if (!(\"startedAt\" in status) || !terminal(status.status)) {\n throw new Error(`Cannot clean up running durable Fabric agent ${metadata.id}`);\n }\n if (metadata.handle.worktree) {\n const gitRoot = metadata.worktreeGitRoot ?? this.options.config.projectRoot;\n const worktree = await registeredWorktree(gitRoot, metadata.handle.worktree);\n await executeFile(\n \"git\",\n [\"worktree\", \"remove\", \"--force\", worktree],\n { cwd: gitRoot, timeoutMs: 60_000 },\n );\n if (deleteBranch && metadata.handle.branch) {\n await executeFile(\n \"git\",\n [\"branch\", \"-D\", metadata.handle.branch],\n { cwd: gitRoot, timeoutMs: 30_000 },\n );\n }\n } else if (deleteBranch) {\n throw new Error(`Durable Fabric agent ${metadata.id} has no worktree branch to delete`);\n }\n fs.rmSync(metadata.runDirectory, { recursive: true, force: true });\n fs.rmSync(this.#metadataPath(metadata.id), { force: true });\n return { cleaned: true };\n }\n\n async #command(command: ResidentCommand, signal?: AbortSignal): Promise<ResidentCommandResponse> {\n const responsePath = path.join(this.#responsesPath, `${command.requestId}.json`);\n atomicWrite(path.join(this.#requestsPath, `${command.requestId}.json`), command);\n const deadline = Date.now() + COMMAND_TIMEOUT_MS;\n while (Date.now() < deadline) {\n if (signal?.aborted) throw new Error(\"Fabric residency request was aborted\");\n const response = readJson<ResidentCommandResponse>(responsePath);\n if (response?.format === RESIDENT_HOST_FORMAT && response.requestId === command.requestId) {\n fs.rmSync(responsePath, { force: true });\n if (!response.ok) throw new Error(response.error ?? \"Fabric resident host rejected request\");\n return response;\n }\n const owner = this.#liveOwner();\n if (!owner) throw new Error(\"Fabric resident host exited while processing a request\");\n await delay(STATUS_POLL_MS);\n }\n throw new Error(`Timed out waiting for Fabric residency request ${command.requestId}`);\n }\n\n async #waitForParticipant(id: string, kind: \"actor\" | \"agent\"): Promise<void> {\n const deadline = Date.now() + STARTUP_TIMEOUT_MS;\n while (Date.now() < deadline) {\n const participant = this.options.participants.get(id);\n if (\n participant?.kind === kind &&\n participant.ownerHostId === this.hostId &&\n participant.residency === \"durable\" &&\n !participant.stale\n ) {\n return;\n }\n await delay(STATUS_POLL_MS);\n }\n throw new Error(`Timed out publishing durable Fabric ${kind} ${id} from ${this.hostId}`);\n }\n\n #metadataPath(id: string): string {\n return path.join(this.#agentsPath, `${id}.json`);\n }\n\n #metadata(id: string): ResidentAgentMetadata | undefined {\n if (!AGENT_ID_PATTERN.test(id)) return undefined;\n const metadata = readJson<ResidentAgentMetadata>(this.#metadataPath(id));\n if (\n metadata?.format !== RESIDENT_HOST_FORMAT ||\n metadata.rootId !== this.options.config.rootId ||\n metadata.id !== id ||\n metadata.handle.id !== id ||\n (metadata.worktreeGitRoot !== undefined && typeof metadata.worktreeGitRoot !== \"string\") ||\n path.resolve(metadata.runDirectory) !==\n path.resolve(this.options.config.residencyRoot, \"runs\", id)\n ) {\n return undefined;\n }\n if (metadata.handle.worktree && !isFabricWorktreePath(metadata.handle.worktree, id)) {\n return undefined;\n }\n if (\n metadata.handle.branch &&\n (!metadata.handle.branch.startsWith(\"omp-fabric/\") ||\n !metadata.handle.branch.endsWith(`-${id.slice(0, 8)}`))\n ) {\n return undefined;\n }\n return metadata;\n }\n\n #liveOwner(): ResidentHostOwner | undefined {\n const owner = readJson<ResidentHostOwner>(this.#ownerPath);\n if (\n owner?.format !== RESIDENT_HOST_FORMAT ||\n owner.hostId !== this.hostId ||\n !Number.isSafeInteger(owner.pid) ||\n !processIsAlive(owner.pid)\n ) {\n return undefined;\n }\n return owner;\n }\n\n async #drainDeliveries(): Promise<void> {\n if (this.#drainingDeliveries || this.#closed || !this.options.mainAgent.local) return;\n this.#drainingDeliveries = true;\n try {\n const entries = this.options.mesh.listAll(this.#deliveryPrefix);\n for (const entry of entries) await this.#deliver(entry);\n } finally {\n this.#drainingDeliveries = false;\n }\n }\n\n async #deliver(entry: MeshStateEntry): Promise<void> {\n if (typeof entry.value !== \"object\" || entry.value === null || Array.isArray(entry.value)) return;\n const value = entry.value as Partial<ResidentDeliveryRecord>;\n if (\n value.format !== RESIDENT_HOST_FORMAT ||\n value.rootId !== this.options.config.rootId ||\n typeof value.id !== \"string\" ||\n typeof value.message !== \"string\" ||\n (value.delivery !== \"steer\" && value.delivery !== \"followUp\") ||\n typeof value.triggerTurn !== \"boolean\" ||\n typeof value.from !== \"object\" ||\n value.from === null ||\n entry.updatedBy.id !== this.hostId\n ) {\n return;\n }\n this.options.mainAgent.deliverAgent({\n from: value.from,\n message: value.message,\n delivery: value.delivery,\n triggerTurn: value.triggerTurn,\n ...(value.data === undefined ? {} : { data: value.data }),\n });\n await this.options.mesh.delete({ key: entry.key, ifVersion: entry.version });\n }\n}\n", "import { ActorManager, ActorRegistryOwnershipError } from \"../actors/manager.js\";\nimport { GlobalActorRegistry } from \"../actors/global-registry.js\";\nimport { isFabricActorHostEvent } from \"../actors/types.js\";\nimport type {\n FabricActorDelivery,\n FabricActorHostEvent,\n FabricActorInfo,\n FabricActorMessage,\n FabricActorRequest,\n FabricActorRunBinding,\n} from \"../actors/types.js\";\nimport type {\n FabricAgentMessageResult,\n FabricMainAgentTarget,\n} from \"../main-agent.js\";\nimport type { MeshIdentity } from \"../mesh/store.js\";\nimport { LifecycleBroker } from \"../lifecycle/broker.js\";\nimport {\n DEFAULT_LIFECYCLE_COALESCE_MS,\n LifecycleDeliveryScheduler,\n type PendingLifecycleDelivery,\n} from \"../lifecycle/delivery-scheduler.js\";\nimport {\n isFabricLifecycleEventType,\n lifecycleSourceIdentity,\n type FabricLifecycleEvent,\n type FabricLifecycleSubscription,\n} from \"../lifecycle/types.js\";\nimport {\n FabricControlPlane,\n type FabricControlCommand,\n type FabricControlAcceptance,\n} from \"../topology/control-plane.js\";\nimport type {\n FabricParticipantInfo,\n FabricParticipantScope,\n FabricParticipantSource,\n} from \"../topology/types.js\";\nimport type {\n FabricActionDescriptor,\n FabricCapabilityRequirement,\n FabricInvocationContext,\n FabricProvider,\n FabricProviderListRequest,\n} from \"../protocol.js\";\nimport {\n effectiveAgentTimeoutMs,\n AgentManager,\n validateAgentCwdRequest,\n} from \"../agents/manager.js\";\nimport { checkedHandoffCompaction } from \"../agents/handoff.js\";\nimport type {\n AgentHandleInfo,\n AgentRunRecord,\n AgentRunRequest,\n AgentRunResult,\n AgentSessionSeed,\n} from \"../agents/types.js\";\nimport type { ThinkingTransferInput } from \"../agents/thinking-transfer.js\";\nimport {\n DEFAULT_FABRIC_CONFIG,\n type FabricAgentRunner,\n type FabricModelsConfig,\n} from \"../config.js\";\nimport {\n FUZZY_RESOLUTION_MARKERS,\n resolveAvailableOmpModel,\n resolveFabricModel,\n type FabricModelCandidate,\n} from \"../core/model-resolution.js\";\nimport { loadModelUsage } from \"../core/model-usage.js\";\nimport { AGENTS_ACTION_DESCRIPTORS } from \"./agents-actions.js\";\nimport { actionArgNormalizer } from \"./arg-normalization.js\";\nimport { isFabricThinking } from \"../thinking.js\";\nimport { ResidencyClient } from \"../residency/client.js\";\nimport { ResidentActorClient } from \"../residency/actor-client.js\";\nimport {\n AgentTranscriptReader,\n recentTranscriptTools,\n type FabricAgentToolPreview,\n type FabricAgentToolPreviewNode,\n type FabricTranscriptEntry,\n} from \"../ui/transcript.js\";\n\nconst REMOTE_ASK_ACK_GRACE_MS = 30_000;\nconst MAX_ACTIVITY_CWD_CHARS = 240;\n\nconst displaySafeCwd = (cwd: string): string => {\n const safe = cwd.replace(/[\\u0000-\\u001f\\u007f]/g, (character) =>\n `\\\\u${character.codePointAt(0)!.toString(16).padStart(4, \"0\")}`,\n );\n if (safe.length <= MAX_ACTIVITY_CWD_CHARS) return safe;\n return `\u2026${safe.slice(-(MAX_ACTIVITY_CWD_CHARS - 1))}`;\n};\n\nconst agentStartedMessage = (handle: AgentHandleInfo): string =>\n `Agent ${handle.name} started via ${handle.runner}/${handle.transport}${handle.attachCommand ? ` \u00B7 ${handle.attachCommand}` : \"\"} \u00B7 cwd ${displaySafeCwd(handle.cwd)}`;\n\n// Resolve source and executor reasoning channels for the trajectory handoff\n// boundary. The executor model must be registered to transfer at all; an\n// unresolvable source model simply yields no family comparison, so the\n// transfer falls back to the target-driven policy.\nconst resolveThinkingTransfer = (\n extensionContext: FabricInvocationContext[\"extensionContext\"],\n targetKey: string,\n sourceModel?: { provider: string; modelId: string },\n): ThinkingTransferInput | undefined => {\n const separator = targetKey.indexOf(\"/\");\n if (separator <= 0 || separator === targetKey.length - 1) return undefined;\n // Invocation contexts don't always thread the extension host (tests, nested\n // runners); without a registry no family comparison is possible.\n const registry = extensionContext?.modelRegistry;\n if (!registry) return undefined;\n const target = registry.find(targetKey.slice(0, separator), targetKey.slice(separator + 1));\n if (!target) return undefined;\n const source = sourceModel\n ? {\n provider: sourceModel.provider,\n modelId: sourceModel.modelId,\n api: registry.find(sourceModel.provider, sourceModel.modelId)?.api,\n }\n : undefined;\n return {\n ...(source ? { source } : {}),\n target: {\n provider: target.provider,\n modelId: target.id,\n api: target.api,\n reasoning: target.reasoning,\n ...((target.compat as { requiresThinkingAsText?: boolean } | undefined)\n ?.requiresThinkingAsText !== undefined\n ? {\n requiresThinkingAsText: (target.compat as { requiresThinkingAsText?: boolean })\n .requiresThinkingAsText,\n }\n : {}),\n },\n };\n};\n\nconst AGENT_PROGRESS_INTERVAL_MS = 1_000;\nconst AGENT_PREVIEW_TEXT_CODE_POINTS = 2_000;\nconst AGENT_PREVIEW_TOOL_LIMIT = 8;\nconst AGENT_PREVIEW_TREE_MAX_DEPTH = 4;\nconst AGENT_PREVIEW_TREE_MAX_NODES = 24;\n\nconst tailCodePoints = (value: string, limit: number): string => {\n if (value.length <= limit) return value;\n return Array.from(value.slice(-limit * 2)).slice(-limit).join(\"\");\n};\n\nconst stringArray = (value: unknown): string[] | undefined =>\n Array.isArray(value)\n ? value.filter((entry): entry is string => typeof entry === \"string\")\n : undefined;\n\nconst actorRunBinding = (args: Record<string, unknown>): FabricActorRunBinding => ({\n ...(typeof args.model === \"string\" && args.model.trim()\n ? { model: args.model.trim() }\n : {}),\n ...(isFabricThinking(args.thinking) ? { thinking: args.thinking } : {}),\n});\n\nconst longerTimeoutOverride = (\n value: unknown,\n manager: AgentManager,\n): number | undefined => {\n if (typeof value !== \"number\" || !Number.isFinite(value)) return undefined;\n const effective = effectiveAgentTimeoutMs(manager.config.timeoutMs, value);\n return effective > manager.config.timeoutMs ? effective : undefined;\n};\n\nconst runRequest = (\n args: Record<string, unknown>,\n context: FabricInvocationContext,\n manager: AgentManager,\n options: { allowCwd?: boolean } = {},\n): AgentRunRequest => {\n const transport =\n args.transport === \"auto\" ||\n args.transport === \"process\" ||\n args.transport === \"tmux\" ||\n args.transport === \"screen\" ||\n args.transport === \"localterm\" ||\n args.transport === \"herdr\"\n ? args.transport\n : undefined;\n const thinking = isFabricThinking(args.thinking) ? args.thinking : undefined;\n const tools = stringArray(args.tools);\n const timeoutMs = longerTimeoutOverride(args.timeoutMs, manager);\n const runner =\n args.runner === \"omp\" || args.runner === \"claude\" || args.runner === \"veda\"\n ? args.runner\n : manager.config.runner;\n const inheritedModel =\n runner === \"omp\" && !manager.config.model && context.extensionContext.model\n ? `${context.extensionContext.model.provider}/${context.extensionContext.model.id}`\n : undefined;\n return {\n task: String(args.task),\n runner,\n ...(typeof args.name === \"string\" ? { name: args.name } : {}),\n ...(transport ? { transport } : {}),\n ...(typeof args.model === \"string\"\n ? { model: args.model }\n : inheritedModel\n ? { model: inheritedModel }\n : {}),\n ...(typeof args.persona === \"string\" && args.persona.trim()\n ? { persona: args.persona.trim() }\n : {}),\n ...(thinking ? { thinking } : {}),\n ...(tools ? { tools } : {}),\n ...(timeoutMs !== undefined ? { timeoutMs } : {}),\n ...(typeof args.extensions === \"boolean\" ? { extensions: args.extensions } : {}),\n ...(typeof args.recursive === \"boolean\" ? { recursive: args.recursive } : {}),\n ...(options.allowCwd !== false && typeof args.cwd === \"string\" ? { cwd: args.cwd } : {}),\n ...(typeof args.worktree === \"boolean\" ? { worktree: args.worktree } : {}),\n ...(args.residency === \"session\" || args.residency === \"durable\"\n ? { residency: args.residency }\n : {}),\n ...(typeof args.schema === \"object\" && args.schema !== null && !Array.isArray(args.schema)\n ? { schema: args.schema as Record<string, unknown> }\n : {}),\n };\n};\n\nconst handoffTask = (args: Record<string, unknown>): string => {\n const task = typeof args.task === \"string\" ? args.task.trim() : \"\";\n const lines = [\n \"Continue and complete the current user task from the inherited conversation trajectory and current workspace.\",\n \"The caller has handed implementation to you and is blocked awaiting this run. Do the remaining work; do not merely advise the caller or restate the plan.\",\n \"Treat the inherited conversation, completed outer Fabric result, and current workspace as grounded context. Inspect again only where the workspace or a failed check makes it necessary.\",\n \"Keep the change scoped, run the relevant full test module or equivalent verification, and report the implementation plus checks honestly.\",\n ];\n if (task) lines.push(\"Additional continuation task:\", task);\n return lines.join(\"\\n\\n\");\n};\n\nconst compactHandoffResult = (\n result: AgentRunResult,\n): Record<string, unknown> => ({\n handedOff: true,\n completed: result.status === \"completed\",\n status: result.status,\n agent: {\n id: result.id,\n name: result.name,\n runner: result.runner,\n transport: result.transport,\n ...(result.model ? { model: result.model } : {}),\n ...(result.thinking ? { thinking: result.thinking } : {}),\n turns: result.turns,\n toolCalls: result.toolCalls,\n usage: result.usage,\n },\n implementation: result.value ?? result.text,\n ...(result.error ? { error: result.error } : {}),\n});\n\nconst actorRequest = (\n args: Record<string, unknown>,\n context: FabricInvocationContext,\n manager: AgentManager,\n inheritModel = true,\n): FabricActorRequest => {\n const events = Array.isArray(args.events)\n ? args.events.filter(\n (event): event is FabricActorHostEvent => isFabricActorHostEvent(event),\n )\n : undefined;\n const topics = stringArray(args.topics);\n const tools = stringArray(args.tools);\n const requires = Array.isArray(args.requires)\n ? args.requires.reduce<Array<string | FabricCapabilityRequirement>>(\n (result, requirement) => {\n if (typeof requirement === \"string\") result.push(requirement);\n else if (\n typeof requirement === \"object\" &&\n requirement !== null &&\n !Array.isArray(requirement) &&\n typeof (requirement as { ref?: unknown }).ref === \"string\"\n ) {\n result.push({\n ref: (requirement as { ref: string }).ref,\n ...((requirement as { optional?: unknown }).optional === true\n ? { optional: true }\n : {}),\n });\n }\n return result;\n },\n [],\n )\n : undefined;\n const timeoutMs = longerTimeoutOverride(args.timeoutMs, manager);\n const validWhile = typeof args.validWhile === \"object\" && args.validWhile !== null &&\n !Array.isArray(args.validWhile) &&\n (args.validWhile as { version?: unknown }).version === 1 &&\n typeof (args.validWhile as { source?: unknown }).source === \"string\"\n ? { version: 1 as const, source: (args.validWhile as { source: string }).source }\n : undefined;\n const runner =\n args.runner === \"omp\" || args.runner === \"claude\" || args.runner === \"veda\"\n ? args.runner\n : manager.config.runner;\n if (runner === \"veda\") {\n throw new Error(\n 'The Veda runner does not support persistent actors: Veda executes one headless prompt per invocation. Use an OMP or Claude actor, or agents.run({ runner: \"veda\" }).',\n );\n }\n const inheritedModel =\n inheritModel && runner === \"omp\" && !manager.config.model && context.extensionContext.model\n ? `${context.extensionContext.model.provider}/${context.extensionContext.model.id}`\n : undefined;\n return {\n ...(args.scope === \"session\" || args.scope === \"project\" ? { scope: args.scope } : {}),\n name: String(args.name),\n instructions: String(args.instructions),\n runner,\n ...(events ? { events } : {}),\n ...(topics ? { topics } : {}),\n ...(args.delivery === \"mailbox\" ||\n args.delivery === \"steer\" ||\n args.delivery === \"followUp\" ||\n args.delivery === \"nextTurn\"\n ? { delivery: args.delivery }\n : {}),\n ...(args.responseMode === \"text\" || args.responseMode === \"directive\"\n ? { responseMode: args.responseMode }\n : {}),\n ...(typeof args.triggerTurn === \"boolean\" ? { triggerTurn: args.triggerTurn } : {}),\n ...(typeof args.coalesce === \"boolean\" ? { coalesce: args.coalesce } : {}),\n ...(args.residency === \"session\" || args.residency === \"durable\"\n ? { residency: args.residency }\n : {}),\n ...(typeof args.model === \"string\"\n ? { model: args.model }\n : inheritedModel\n ? { model: inheritedModel }\n : {}),\n ...(isFabricThinking(args.thinking) ? { thinking: args.thinking } : {}),\n ...(tools ? { tools } : {}),\n ...(args.transport === \"auto\" ||\n args.transport === \"process\" ||\n args.transport === \"tmux\" ||\n args.transport === \"screen\" ||\n args.transport === \"localterm\" ||\n args.transport === \"herdr\"\n ? { transport: args.transport }\n : {}),\n ...(timeoutMs !== undefined ? { timeoutMs } : {}),\n ...(typeof args.extensions === \"boolean\" ? { extensions: args.extensions } : {}),\n ...(requires ? { requires } : {}),\n ...(validWhile ? { validWhile } : {}),\n };\n};\n\ntype AgentProgressStatus = ReturnType<AgentManager[\"status\"]>;\n\nexport interface AgentToolPreviewTreeOptions {\n tools: (record: AgentRunRecord) => FabricTranscriptEntry[];\n maxDepth?: number;\n maxNodes?: number;\n}\n\n// Map an agent run tree (AgentRunRecord.nestedAgents) onto bounded preview\n// nodes. Depth and total-node budgets keep recursive runs cheap to build and\n// cheap to diff against the previous revision every progress tick.\nexport const collectAgentToolPreviewNodes = (\n records: readonly AgentRunRecord[],\n options: AgentToolPreviewTreeOptions,\n depth = 0,\n budget = { remaining: options.maxNodes ?? AGENT_PREVIEW_TREE_MAX_NODES },\n): FabricAgentToolPreviewNode[] => {\n const maxDepth = options.maxDepth ?? AGENT_PREVIEW_TREE_MAX_DEPTH;\n const nodes: FabricAgentToolPreviewNode[] = [];\n for (const record of records) {\n if (budget.remaining <= 0) break;\n budget.remaining -= 1;\n const descendants = Array.isArray(record.nestedAgents) ? record.nestedAgents : [];\n const agents =\n depth + 1 < maxDepth && descendants.length > 0 && budget.remaining > 0\n ? collectAgentToolPreviewNodes(descendants, options, depth + 1, budget)\n : [];\n nodes.push({\n id: record.id,\n name: record.actorName ?? record.name,\n status: record.status,\n ...(record.runner === \"omp\" || record.runner === \"claude\" || record.runner === \"veda\"\n ? { runner: record.runner }\n : {}),\n owner: record.actorId ? \"actor\" : \"agent\",\n ...(record.currentTool ? { currentTool: record.currentTool } : {}),\n ...(record.text\n ? { text: tailCodePoints(record.text, AGENT_PREVIEW_TEXT_CODE_POINTS) }\n : {}),\n tools: options.tools(record),\n ...(agents.length > 0 ? { agents } : {}),\n ...(descendants.length > agents.length ? { agentsTruncated: true } : {}),\n });\n }\n return nodes;\n};\n\nconst attachAgentToolPreview = (\n status: AgentProgressStatus,\n transcripts: AgentTranscriptReader,\n context: FabricInvocationContext,\n enabled: () => boolean,\n previousRevision?: string,\n): string => {\n if (!context.attachPreview) return agentProgressRevision(status);\n const previewTools = (source: {\n id: string;\n status: string;\n logFile?: string | undefined;\n }): FabricTranscriptEntry[] => {\n if (!enabled() || !source.logFile) return [];\n try {\n return recentTranscriptTools(\n transcripts.read({ id: source.id, status: source.status, logFile: source.logFile }),\n AGENT_PREVIEW_TOOL_LIMIT,\n );\n } catch {\n // Descendant runs can clean up mid-read; keep the rest of the tree.\n return [];\n }\n };\n try {\n const nestedRecords =\n \"nestedAgents\" in status && Array.isArray(status.nestedAgents) ? status.nestedAgents : [];\n const descendants = collectAgentToolPreviewNodes(nestedRecords, { tools: previewTools });\n const preview: FabricAgentToolPreview = {\n kind: \"fabric-agent-tools\",\n id: status.id,\n name: status.actorName ?? status.name,\n status: status.status,\n runner: status.runner,\n owner: status.actorId ? \"actor\" : \"agent\",\n ...(\"text\" in status && status.text\n ? { text: tailCodePoints(status.text, AGENT_PREVIEW_TEXT_CODE_POINTS) }\n : {}),\n tools: previewTools(status),\n ...(descendants.length > 0 ? { agents: descendants } : {}),\n ...(nestedRecords.length > descendants.length ? { agentsTruncated: true } : {}),\n };\n // The preview is bounded before this point. Comparing its compact snapshot\n // keeps the one-second filesystem poll cheap while still noticing transcript\n // deltas that do not update the worker's coarse status record.\n const revision = JSON.stringify(preview);\n if (revision !== previousRevision) context.attachPreview(preview);\n return revision;\n } catch {\n // The worker may settle and clean up while its final preview is being read.\n return previousRevision ?? agentProgressRevision(status);\n }\n};\n\nconst waitForResultWithProgress = <T>(\n result: Promise<T>,\n onProgress: () => void,\n): Promise<T> =>\n new Promise((resolve, reject) => {\n let settled = false;\n const finish = (complete: () => void): void => {\n if (settled) return;\n settled = true;\n clearInterval(progressTimer);\n complete();\n };\n const progressTimer = setInterval(() => {\n if (settled) return;\n try {\n onProgress();\n } catch (error) {\n finish(() => reject(error));\n }\n }, AGENT_PROGRESS_INTERVAL_MS);\n progressTimer.unref?.();\n result.then(\n (value) => finish(() => resolve(value)),\n (error: unknown) => finish(() => reject(error)),\n );\n });\n\nconst actorWorker = (\n manager: AgentManager,\n actorId: string,\n includeTerminal: boolean,\n): ReturnType<AgentManager[\"list\"]>[number] | undefined => {\n const candidates = manager.list().filter((candidate) => candidate.actorId === actorId);\n const active = candidates.find((candidate) => candidate.status === \"running\");\n if (active || !includeTerminal) return active;\n // AgentManager.list() preserves run insertion order; the last actor run\n // is therefore the terminal snapshot for the ask that just settled.\n return candidates.at(-1);\n};\n\nconst agentProgressRevision = (status: AgentProgressStatus): string =>\n [\n status.status,\n \"updatedAt\" in status ? status.updatedAt : 0,\n \"currentTool\" in status ? status.currentTool : \"\",\n \"toolCalls\" in status ? status.toolCalls : 0,\n \"turns\" in status ? status.turns : 0,\n ].join(\":\");\n\nconst waitWithProgress = async (\n manager: AgentManager,\n transcripts: AgentTranscriptReader,\n id: string,\n context: FabricInvocationContext,\n agentToolPreviewEnabled: () => boolean,\n): Promise<AgentRunResult> => {\n const result = manager.wait(id);\n let lastPreviewRevision: string | undefined;\n try {\n const settled = await waitForResultWithProgress(result, () => {\n const status = manager.status(id);\n const revision = attachAgentToolPreview(\n status,\n transcripts,\n context,\n agentToolPreviewEnabled,\n lastPreviewRevision,\n );\n if (revision === lastPreviewRevision) return;\n lastPreviewRevision = revision;\n const currentTool =\n \"currentTool\" in status && status.currentTool ? ` \u00B7 ${status.currentTool}` : \"\";\n const displayName = status.actorName ?? status.name;\n context.update(`Agent ${displayName}: ${status.status}${currentTool}`);\n if (\"usage\" in status) {\n context.activity?.({\n type: \"metrics\",\n tokens: status.usage.input + status.usage.output,\n toolCalls: status.toolCalls,\n cost: status.usage.cost,\n });\n }\n });\n context.activity?.({\n type: \"metrics\",\n tokens: settled.usage.input + settled.usage.output,\n toolCalls: settled.toolCalls,\n cost: settled.usage.cost,\n });\n return settled;\n } finally {\n try {\n const status = manager.status(id);\n attachAgentToolPreview(status, transcripts, context, agentToolPreviewEnabled);\n const displayName = status.actorName ?? status.name;\n context.update(`Agent ${displayName}: ${status.status}`);\n } catch {\n // The run may have been cleaned up during cancellation.\n }\n }\n};\n\nconst waitWithActorProgress = async (\n manager: AgentManager,\n transcripts: AgentTranscriptReader,\n actorId: string,\n actorName: string,\n result: Promise<FabricActorMessage>,\n context: FabricInvocationContext,\n agentToolPreviewEnabled: () => boolean,\n): Promise<FabricActorMessage> => {\n let lastPreviewRevision: string | undefined;\n try {\n return await waitForResultWithProgress(result, () => {\n const worker = actorWorker(manager, actorId, false);\n const revision = worker\n ? attachAgentToolPreview(\n worker,\n transcripts,\n context,\n agentToolPreviewEnabled,\n lastPreviewRevision,\n )\n : \"queued\";\n if (revision === lastPreviewRevision) return;\n lastPreviewRevision = revision;\n const currentTool =\n worker && \"currentTool\" in worker && worker.currentTool ? ` \u00B7 ${worker.currentTool}` : \"\";\n context.update(\n worker\n ? `Actor ${actorName}: ${worker.status}${currentTool}`\n : `Actor ${actorName}: queued`,\n );\n });\n } finally {\n const worker = actorWorker(manager, actorId, true);\n if (worker) attachAgentToolPreview(worker, transcripts, context, agentToolPreviewEnabled);\n }\n};\n\n\n\n// Argument repair derives from the action schemas plus the shared synonym\n// lexicon; no agents-specific table remains.\nexport const normalizeAgentsArgs = actionArgNormalizer(() => AGENTS_ACTION_DESCRIPTORS);\n\nexport class AgentsProvider implements FabricProvider {\n readonly #transcripts = new AgentTranscriptReader();\n readonly name = \"agents\";\n readonly description =\n \"The user-facing Main target, one-shot OMP or Claude Code agents, and persistent mailbox actors over process, tmux, screen, LocalTerm, or Herdr\";\n\n constructor(\n readonly manager: AgentManager,\n readonly actorManager: ActorManager,\n readonly globalActors: GlobalActorRegistry,\n readonly mainAgent: FabricMainAgentTarget,\n readonly participants: FabricParticipantSource,\n readonly control: FabricControlPlane | undefined,\n readonly lifecycle: LifecycleBroker,\n readonly agentToolPreviewEnabled: () => boolean = () => true,\n readonly residency?: ResidencyClient,\n readonly ownsRuntime = true,\n readonly modelsConfig: () => FabricModelsConfig = () => DEFAULT_FABRIC_CONFIG.models,\n ) {\n this.#lifecycleScheduler = new LifecycleDeliveryScheduler(\n DEFAULT_LIFECYCLE_COALESCE_MS,\n (target, batch) => this.#routeLifecycleBatch(target, batch),\n (target, batch, error) => {\n console.warn(\n `[omp-fabric] lifecycle delivery to ${target} failed for ${batch.length} event(s): ` +\n (error instanceof Error ? error.message : String(error)),\n );\n },\n );\n }\n\n readonly #lifecycleScheduler: LifecycleDeliveryScheduler;\n\n #lifecycleMessage(event: FabricLifecycleEvent): string {\n const status = event.status ? ` with status ${event.status}` : \"\";\n const run = event.runId ? ` (run ${event.runId.slice(0, 8)})` : \"\";\n return `Fabric lifecycle ${event.event} from ${event.source.name} (${event.source.id})${run}${status}.`;\n }\n\n async #routeLifecycleBatch(\n target: string,\n batch: PendingLifecycleDelivery[],\n ): Promise<void> {\n const first = batch[0]!;\n const single = batch.length === 1;\n const message = single\n ? this.#lifecycleMessage(first.event)\n : `Fabric lifecycle events (${batch.length}):\\n` +\n batch.map((delivery) => `- ${this.#lifecycleMessage(delivery.event)}`).join(\"\\n\");\n const data = single ? first.event : batch.map((delivery) => delivery.event);\n const last = batch[batch.length - 1]!;\n await this.routeMessage(\n target,\n message,\n data,\n first.subscription.delivery,\n undefined,\n {\n from: single\n ? lifecycleSourceIdentity(first.event.source)\n : lifecycleSourceIdentity(last.event.source),\n triggerTurn: batch.some((delivery) => delivery.subscription.triggerTurn),\n },\n );\n }\n\n /** Resolve an OMP participant selector only within this session's visible registry. */\n #resolveOmpModel(\n model: string,\n context: FabricInvocationContext,\n ): string {\n let available: FabricModelCandidate[] = [];\n try {\n available = context.extensionContext.modelRegistry.getAvailable().map((candidate) => ({\n provider: String(candidate.provider),\n id: String(candidate.id),\n ...(typeof candidate.name === \"string\" ? { name: candidate.name } : {}),\n }));\n } catch {\n // The authoritative visible set is empty when registry discovery fails.\n }\n const resolved = resolveAvailableOmpModel(model, {\n aliases: this.modelsConfig().aliases,\n available,\n lastUsed: loadModelUsage(),\n });\n return `${resolved.provider}/${resolved.id}`;\n }\n\n #resolveOmpModelArgs(\n args: Record<string, unknown>,\n context: FabricInvocationContext,\n runnerOverride?: FabricAgentRunner,\n ): Record<string, unknown> {\n const runner = runnerOverride ??\n (args.runner === \"omp\" || args.runner === \"claude\" || args.runner === \"veda\"\n ? args.runner\n : this.manager.config.runner);\n if (runner !== \"omp\") return args;\n const model = typeof args.model === \"string\" ? args.model.trim() : \"\";\n if (!model) return args;\n const resolved = this.#resolveOmpModel(model, context);\n return resolved === model ? args : { ...args, model: resolved };\n }\n\n #resolveOmpRunBinding(\n binding: FabricActorRunBinding,\n runner: FabricAgentRunner,\n context: FabricInvocationContext,\n ): FabricActorRunBinding {\n if (runner !== \"omp\" || !binding.model) return binding;\n return { ...binding, model: this.#resolveOmpModel(binding.model, context) };\n }\n\n async list(\n request: FabricProviderListRequest,\n _context: FabricInvocationContext,\n ): Promise<FabricActionDescriptor[]> {\n const query = request.query?.toLowerCase();\n return query\n ? AGENTS_ACTION_DESCRIPTORS.filter((descriptor) =>\n `${descriptor.name} ${descriptor.description}`.toLowerCase().includes(query),\n )\n : AGENTS_ACTION_DESCRIPTORS;\n }\n\n async describe(\n actionName: string,\n _context: FabricInvocationContext,\n ): Promise<FabricActionDescriptor | undefined> {\n return AGENTS_ACTION_DESCRIPTORS.find((descriptor) => descriptor.name === actionName);\n }\n\n prepareArguments(\n actionName: string,\n args: Record<string, unknown>,\n ): Record<string, unknown> {\n return normalizeAgentsArgs(actionName, args);\n }\n\n async handoff(\n args: Record<string, unknown>,\n context: FabricInvocationContext,\n ): Promise<Record<string, unknown>> {\n const model = typeof args.model === \"string\" ? args.model.trim() : \"\";\n if (!model) throw new Error(\"agents.handoff requires an explicit OMP target model\");\n checkedHandoffCompaction(args.compact);\n if (!context.deferHandoff) {\n throw new Error(\n \"agents.handoff must be scheduled from inside fabric_exec and completed at its outer result boundary\",\n );\n }\n const handoffArgs = this.#resolveOmpModelArgs(\n { ...args, model },\n context,\n \"omp\",\n );\n delete handoffArgs.cwd;\n return context.deferHandoff(handoffArgs);\n }\n\n async executeHandoff(\n args: Record<string, unknown>,\n context: FabricInvocationContext,\n sessionSeed: AgentSessionSeed,\n ): Promise<Record<string, unknown>> {\n const model = typeof args.model === \"string\" ? args.model.trim() : \"\";\n if (!model) throw new Error(\"agents.handoff requires an explicit OMP target model\");\n const request = runRequest(\n this.#resolveOmpModelArgs(\n {\n ...args,\n task: handoffTask(args),\n name:\n typeof args.name === \"string\" && args.name.trim()\n ? args.name\n : \"Trajectory handoff\",\n runner: \"omp\",\n model,\n },\n context,\n ),\n context,\n this.manager,\n { allowCwd: false },\n );\n request.runner = \"omp\";\n request.sessionSeed = sessionSeed;\n const targetModel = request.model ?? model;\n const handoffCompaction = checkedHandoffCompaction(args.compact);\n if (handoffCompaction) request.handoffCompact = handoffCompaction;\n request.thinkingTransfer = resolveThinkingTransfer(\n context.extensionContext,\n targetModel,\n sessionSeed.sourceModel,\n );\n const handle = await this.manager.spawn(request, context.signal);\n context.activity?.({\n type: \"entity\",\n id: handle.id,\n kind: \"agent\",\n name: handle.name,\n });\n context.update(\n `Trajectory handed off to ${handle.name} (${targetModel}); caller is waiting for implementation`,\n );\n const completed = await waitWithProgress(\n this.manager,\n this.#transcripts,\n handle.id,\n context,\n this.agentToolPreviewEnabled,\n );\n context.update(\n completed.status === \"completed\"\n ? `Handoff ${handle.name} completed implementation`\n : `Handoff ${handle.name} ended with ${completed.status}`,\n );\n return compactHandoffResult(completed);\n }\n\n async invoke(\n actionName: string,\n args: Record<string, unknown>,\n context: FabricInvocationContext,\n ): Promise<unknown> {\n switch (actionName) {\n case \"run\": {\n const handle = await this.manager.spawn(\n runRequest(this.#resolveOmpModelArgs(args, context), context, this.manager),\n context.signal,\n );\n this.participants.scheduleRefresh();\n context.activity?.({\n type: \"entity\",\n id: handle.id,\n kind: \"agent\",\n name: handle.name,\n });\n context.update(agentStartedMessage(handle));\n return waitWithProgress(\n this.manager,\n this.#transcripts,\n handle.id,\n context,\n this.agentToolPreviewEnabled,\n );\n }\n case \"handoff\":\n return this.handoff(args, context);\n case \"spawn\": {\n const request = runRequest(this.#resolveOmpModelArgs(args, context), context, this.manager);\n validateAgentCwdRequest(request);\n const durableRequest = request.residency === \"durable\" && request.cwd !== undefined\n ? { ...request, cwd: this.manager.resolveCwd(request.cwd) }\n : request;\n const handle = durableRequest.residency === \"durable\"\n ? await this.#resident().spawnAgent(durableRequest, context.signal)\n : await this.manager.spawn(durableRequest, context.signal);\n if (request.residency !== \"durable\") this.manager.detachSignal(handle.id);\n this.participants.scheduleRefresh();\n context.activity?.({\n type: \"entity\",\n id: handle.id,\n kind: \"agent\",\n name: handle.name,\n });\n context.update(agentStartedMessage(handle));\n return handle;\n }\n case \"wait\": {\n const id = String(args.id);\n if (this.residency?.hasAgent(id)) {\n const status = this.residency.statusAgent(id);\n context.activity?.({ type: \"entity\", id, kind: \"agent\", name: status.name });\n context.update(`Waiting for durable agent ${status.name}`);\n return this.residency.waitAgent(id, context.signal);\n }\n const status = this.manager.status(id);\n context.activity?.({ type: \"entity\", id, kind: \"agent\", name: status.name });\n return waitWithProgress(\n this.manager,\n this.#transcripts,\n id,\n context,\n this.agentToolPreviewEnabled,\n );\n }\n case \"status\": {\n const id = String(args.id);\n if (this.mainAgent.matches(id)) {\n if (this.mainAgent.local) return this.mainAgent.info(context.extensionContext);\n const root = this.participants.get(this.mainAgent.id);\n if (!root) throw new Error(`Unknown Fabric Main participant: ${this.mainAgent.id}`);\n return root;\n }\n try {\n return this.manager.status(id);\n } catch (error) {\n if (!(error instanceof Error && /Unknown Fabric agent/.test(error.message))) throw error;\n }\n if (this.residency?.hasAgent(id)) return this.residency.statusAgent(id);\n const known = this.participants.get(id);\n if (known && !known.local) return known;\n try {\n return this.actorManager.status(id);\n } catch (error) {\n if (!(error instanceof Error && /Unknown Fabric actor/.test(error.message))) throw error;\n }\n const participant = this.participants.get(id);\n if (!participant) throw new Error(`Unknown Fabric participant: ${id}`);\n return participant;\n }\n case \"list\":\n return this.#listAgents(args.scope);\n case \"members\": {\n const kinds = Array.isArray(args.kinds)\n ? args.kinds.filter(\n (kind): kind is \"root\" | \"agent\" | \"actor\" =>\n kind === \"root\" || kind === \"agent\" || kind === \"actor\",\n )\n : undefined;\n return this.participants.list({\n scope: this.#participantScope(args.scope, \"project\"),\n ...(kinds ? { kinds } : {}),\n ...(args.includeStale === true ? { includeStale: true } : {}),\n });\n }\n case \"self\":\n return this.participants.self();\n case \"main\":\n return this.mainAgent.info(context.extensionContext);\n case \"sessions\":\n return this.participants.sessions?.() ??\n this.participants.list({ scope: \"project\", kinds: [\"root\"] });\n case \"peers\":\n return this.participants.peers();\n case \"subscribe\": {\n const events = Array.isArray(args.events)\n ? args.events.filter(isFabricLifecycleEventType)\n : [];\n if (typeof args.triggerTurn !== \"boolean\") {\n throw new Error(\"Lifecycle subscriptions require explicit triggerTurn: true or false\");\n }\n const delivery = args.delivery === \"steer\" || args.delivery === \"followUp\"\n ? args.delivery\n : undefined;\n if (!delivery) throw new Error(\"Invalid lifecycle subscription delivery\");\n const subscription = await this.lifecycle.subscribe({\n from: this.#participantAlias(String(args.from)),\n events,\n to: this.#participantAlias(typeof args.to === \"string\" ? args.to : \"main\"),\n delivery,\n triggerTurn: args.triggerTurn,\n ...(args.once === true ? { once: true } : {}),\n });\n context.update(\n `Subscribed ${subscription.to.slice(0, 8)} to ${subscription.events.join(\", \")} from ${subscription.from.slice(0, 8)}`,\n );\n return subscription;\n }\n case \"subscriptions\":\n return this.lifecycle.list({\n ...(typeof args.from === \"string\"\n ? { from: this.#participantAlias(args.from) }\n : {}),\n ...(typeof args.to === \"string\"\n ? { to: this.#participantAlias(args.to) }\n : {}),\n });\n case \"unsubscribe\":\n return this.lifecycle.unsubscribe(String(args.id));\n case \"models\": {\n const runner =\n args.runner === \"omp\" || args.runner === \"claude\" || args.runner === \"veda\"\n ? args.runner\n : this.manager.config.runner;\n if (runner === \"veda\") {\n // Veda forwards any -m value to the configured backend; model\n // discovery would require parsing `veda models <backend>`. Return an\n // empty advisory list so callers can still pass model strings\n // directly to agents.run({ runner: \"veda\", model }).\n return [];\n }\n if (runner === \"claude\") {\n const models = await this.manager.claudeModels(args.refresh === true);\n return models.map((model) => ({\n runner: \"claude\",\n provider: \"claude\",\n id: model.value,\n name: model.displayName,\n key: `claude/${model.value}`,\n ...model,\n }));\n }\n try {\n const available = context.extensionContext.modelRegistry.getAvailable();\n return available.map((model) => ({\n runner: \"omp\",\n provider: String(model.provider),\n id: String(model.id),\n name: String(model.name ?? model.id),\n key: `${model.provider}/${model.id}`,\n }));\n } catch {\n return [];\n }\n }\n case \"switchModel\": {\n const query = typeof args.model === \"string\" ? args.model.trim() : \"\";\n if (!query) {\n throw new Error(\n \"agents.switchModel requires a model selector: provider/id, models.aliases name, or search term\",\n );\n }\n const registry = context.extensionContext.modelRegistry;\n let available: FabricModelCandidate[] = [];\n try {\n available = registry.getAvailable().map((model) => ({\n provider: String(model.provider),\n id: String(model.id),\n ...(typeof model.name === \"string\" ? { name: model.name } : {}),\n }));\n } catch {\n available = [];\n }\n if (available.length === 0) {\n throw new Error(\n \"agents.switchModel found no authenticated models; configure a provider key or check agents.models()\",\n );\n }\n const currentModel = context.extensionContext.model ?? undefined;\n const resolution = resolveFabricModel(query, {\n aliases: this.modelsConfig().aliases,\n available,\n lastUsed: loadModelUsage(),\n ...(currentModel\n ? { current: { provider: currentModel.provider, id: currentModel.id } }\n : {}),\n ...(typeof args.provider === \"string\" && args.provider.trim()\n ? { provider: args.provider.trim() }\n : {}),\n });\n if (resolution.kind === \"already-active\") {\n return {\n switched: false,\n reason: \"already-active\",\n model: `${resolution.model.provider}/${resolution.model.id}`,\n ...(resolution.model.name ? { name: resolution.model.name } : {}),\n };\n }\n if (resolution.kind === \"ambiguous\") {\n throw new Error(\n `agents.switchModel: \"${query}\" matches multiple models: ${resolution.candidates\n .map((candidate) => `${candidate.provider}/${candidate.id}`)\n .join(\", \")}. Pass an exact provider/id.`,\n );\n }\n if (resolution.kind === \"not-found\") {\n throw new Error(\n resolution.tried !== undefined\n ? `agents.switchModel: alias \"${query}\" has no available target. Tried: ${resolution.tried.join(\", \")}`\n : `agents.switchModel: no available model matching \"${query}\"`,\n );\n }\n if (typeof this.mainAgent.switchModel !== \"function\") {\n throw new Error(\"agents.switchModel requires a local Main session\");\n }\n const previous = currentModel\n ? `${currentModel.provider}/${currentModel.id}`\n : undefined;\n const outcome = await this.mainAgent.switchModel(\n { provider: resolution.model.provider, id: resolution.model.id },\n context.extensionContext,\n );\n if (!outcome.ok) {\n throw new Error(`agents.switchModel: ${outcome.error ?? \"switch failed\"}`);\n }\n try {\n this.residency?.syncOmpModels();\n } catch {\n // The next durable command retries synchronization before execution.\n }\n context.activity?.({\n type: \"progress\",\n message: `Main model ${previous ? `${previous} \u2192 ` : \"\"}${resolution.model.provider}/${resolution.model.id}`,\n });\n return {\n switched: true,\n model: `${resolution.model.provider}/${resolution.model.id}`,\n ...(resolution.model.name ? { name: resolution.model.name } : {}),\n ...(previous ? { previous } : {}),\n ...(resolution.via !== undefined ? { via: resolution.via } : {}),\n ...(resolution.via !== undefined &&\n !(FUZZY_RESOLUTION_MARKERS as readonly string[]).includes(resolution.via)\n ? { alias: resolution.via }\n : {}),\n };\n }\n case \"stop\":\n return this.stopParticipant(String(args.id));\n case \"cleanup\": {\n const id = String(args.id);\n return this.residency?.hasAgent(id)\n ? this.residency.cleanupAgent(id, args.deleteBranch === true)\n : this.manager.cleanup(id, args.deleteBranch === true);\n }\n case \"create\": {\n const createArgs = this.#resolveOmpModelArgs(args, context);\n if (createArgs.scope === \"global\") {\n return this.globalActors.create(actorRequest(createArgs, context, this.manager, false));\n }\n const request = actorRequest(createArgs, context, this.manager);\n const actor = await this.#createActor(request);\n this.participants.scheduleRefresh();\n context.activity?.({ type: \"entity\", id: actor.id, kind: \"actor\", name: actor.name });\n return actor;\n }\n case \"ask\": {\n const id = String(args.id);\n const message = String(args.message);\n this.actorManager.validateDirectMessage(message, args.data);\n const { actor, participant } = this.#resolveActorTarget(id);\n const ownsActor = actor ? this.actorManager.owns(actor.id) : false;\n const requestedOverrides = actorRunBinding(args);\n const overrides = ownsActor\n ? this.#resolveOmpRunBinding(requestedOverrides, actor!.runner, context)\n : requestedOverrides;\n context.activity?.({\n type: \"entity\",\n id: actor?.id ?? participant!.id,\n kind: \"actor\",\n name: actor?.name ?? participant!.name,\n });\n if (actor && ownsActor) {\n return waitWithActorProgress(\n this.manager,\n this.#transcripts,\n actor.id,\n actor.name,\n this.actorManager.ask(actor.id, message, args.data, context.signal, { overrides }),\n context,\n this.agentToolPreviewEnabled,\n );\n }\n if (!participant) throw new Error(`Fabric actor ${actor!.id} has no live execution owner`);\n if (!participant.capabilities.includes(\"ask\")) {\n throw new Error(`Fabric actor owner ${participant.ownerHostId} does not support remote ask`);\n }\n const binding = actor ? this.actorManager.resolveBinding(actor.id, overrides) : overrides;\n const needsBinding = Boolean(binding.model || binding.thinking);\n if (needsBinding && !participant.capabilities.includes(\"actor-bindings\")) {\n throw new Error(`Fabric actor owner ${participant.ownerHostId} does not support session bindings`);\n }\n if (!this.control || participant.controlProtocol === \"legacy\") {\n throw new Error(`Fabric actor owner ${participant.ownerHostId} has no result control channel`);\n }\n return this.control.requestResult<FabricActorMessage>(\n participant.ownerHostId,\n participant.id,\n \"ask\",\n {\n message,\n ...(args.data === undefined ? {} : { data: args.data }),\n ...(needsBinding ? { binding } : {}),\n },\n participant.ownerIdentityId,\n {\n timeoutMs: (actor?.timeoutMs ?? this.manager.config.timeoutMs) +\n REMOTE_ASK_ACK_GRACE_MS,\n ...(context.signal ? { signal: context.signal } : {}),\n },\n );\n }\n case \"tell\":\n return this.routeMessage(\n String(args.id),\n String(args.message),\n args.data,\n \"followUp\",\n context,\n { binding: actorRunBinding(args) },\n );\n case \"steer\":\n return this.routeMessage(\n String(args.id),\n String(args.message),\n args.data,\n \"steer\",\n context,\n );\n case \"followUp\":\n return this.routeMessage(\n String(args.id),\n String(args.message),\n args.data,\n \"followUp\",\n context,\n );\n case \"setSteeringMode\":\n return this.manager.setSteeringMode(String(args.id), this.#steeringMode(args.mode));\n case \"setFollowUpMode\":\n return this.manager.setFollowUpMode(String(args.id), this.#steeringMode(args.mode));\n case \"compact\": {\n const id = String(args.id);\n const status = this.manager.status(id);\n context.activity?.({ type: \"entity\", id, kind: \"agent\", name: status.name });\n const instructions = typeof args.instructions === \"string\" ? args.instructions : undefined;\n const result = this.manager.compact(id, instructions);\n context.activity?.({\n type: \"progress\",\n message: `Compaction enqueued for agent ${id.slice(0, 8)} (advisory; commits at the child's next turn boundary)`,\n });\n return result;\n }\n case \"actorStatus\":\n return this.actorManager.status(String(args.id));\n case \"actors\":\n return args.scope === \"global\" ? this.globalActors.list() : this.actorManager.list();\n case \"messages\": {\n const actor = this.actorManager.status(String(args.id));\n return this.actorManager.messages(\n actor.id,\n typeof args.limit === \"number\" ? args.limit : 50,\n );\n }\n case \"setModel\": {\n const id = String(args.id);\n const model = typeof args.model === \"string\" ? args.model.trim() : \"\";\n const target = this.#resolveActorTarget(id);\n const ownsActor = target.actor ? this.actorManager.owns(target.actor.id) : false;\n const runner = target.actor?.runner ?? target.participant!.runner;\n const resolvedModel = model && ownsActor\n ? this.#resolveOmpModelArgs({ model }, context, runner).model as string\n : model || undefined;\n return this.actorManager.setModel(\n id,\n resolvedModel,\n args.scope === \"project\" ? \"project\" : \"session\",\n );\n }\n case \"setThinking\":\n return this.actorManager.setThinking(\n String(args.id),\n typeof args.thinking === \"string\" ? args.thinking : undefined,\n args.scope === \"project\" ? \"project\" : \"session\",\n );\n case \"setTools\": {\n const tools = stringArray(args.tools) ?? [];\n if (args.scope === \"global\") {\n return this.globalActors.update(String(args.id), { tools });\n }\n return this.actorManager.setTools(String(args.id), tools);\n }\n case \"setEvents\": {\n const events = Array.isArray(args.events)\n ? args.events.filter(\n (event): event is FabricActorHostEvent => isFabricActorHostEvent(event),\n )\n : [];\n return this.actorManager.setEvents(String(args.id), events);\n }\n case \"setDeliveryPolicy\": {\n const delivery = args.delivery as FabricActorDelivery;\n if (typeof args.triggerTurn !== \"boolean\") {\n throw new Error(\"setDeliveryPolicy requires explicit triggerTurn: true or false\");\n }\n const triggerTurn = args.triggerTurn;\n if (args.scope === \"global\") {\n return this.globalActors.update(String(args.id), { delivery, triggerTurn });\n }\n return this.actorManager.setDeliveryPolicy(String(args.id), delivery, triggerTurn);\n }\n case \"clearMessages\":\n return this.actorManager.clearMessages(String(args.id));\n case \"remove\": {\n if (args.scope === \"global\") return this.globalActors.remove(String(args.id));\n const { actor, participant } = this.#resolveActorTarget(String(args.id));\n if (actor && this.actorManager.owns(actor.id)) return this.actorManager.remove(actor.id);\n const residency = actor?.residency ?? participant?.residency;\n if (residency !== \"durable\") throw new Error(\"Only the owning host can remove this actor\");\n const id = actor?.id ?? participant!.id;\n return this.residency\n ? this.residency.removeActor(id)\n : this.#residentActorClient().removeActor(id);\n }\n case \"setInstructions\": {\n const id = String(args.id);\n const instructions = String(args.instructions);\n if (args.scope === \"global\") {\n return this.globalActors.update(id, { instructions });\n }\n return this.actorManager.setInstructions(id, instructions);\n }\n case \"import\": {\n const key =\n typeof args.id === \"string\" && args.id.trim()\n ? args.id.trim()\n : typeof args.name === \"string\" && args.name.trim()\n ? args.name.trim()\n : \"\";\n if (!key) throw new Error(\"Import requires a template id or name\");\n const def = this.globalActors.resolve(key);\n if (!def) throw new Error(`Unknown global actor: ${key}`);\n const as =\n typeof args.as === \"string\" && args.as.trim() ? args.as.trim() : undefined;\n const request = this.globalActors.toRequest(def, as);\n const resolvedRequest = request.model\n ? {\n ...request,\n model: this.#resolveOmpModelArgs(\n { model: request.model },\n context,\n request.runner ?? this.manager.config.runner,\n ).model as string,\n }\n : request;\n const actor = await this.#createActor(resolvedRequest);\n this.participants.scheduleRefresh();\n context.activity?.({ type: \"entity\", id: actor.id, kind: \"actor\", name: actor.name });\n return actor;\n }\n case \"export\": {\n const actor = this.actorManager.status(String(args.id));\n const overwrite = args.overwrite === true;\n const def = this.actorManager.definition(actor.id);\n return this.globalActors.create(def, overwrite);\n }\n case \"log\": {\n const id = String(args.id);\n const type = args.type === \"run\" || args.type === \"all\" ? args.type : \"session\";\n const lines = typeof args.lines === \"number\" ? args.lines : 200;\n const runId = typeof args.runId === \"string\" ? args.runId : undefined;\n const before = typeof args.before === \"number\" ? args.before : undefined;\n try {\n const actor = this.actorManager.status(id);\n return this.actorManager.readLog(actor.id, {\n type,\n lines,\n ...(runId ? { runId } : {}),\n ...(before !== undefined ? { before } : {}),\n });\n } catch (error) {\n if (!(error instanceof Error && /Unknown Fabric actor/.test(error.message))) throw error;\n /* not an actor \u2014 fall through to agent */\n }\n if (this.residency?.hasAgent(id)) {\n return this.residency.readAgentLog(id, {\n lines,\n ...(before !== undefined ? { before } : {}),\n });\n }\n return this.manager.readLog(id, { lines, ...(before !== undefined ? { before } : {}) });\n }\n default:\n throw new Error(`Unknown agents action: ${actionName}`);\n }\n }\n\n async routeMessage(\n id: string,\n message: string,\n data: unknown,\n kind: \"steer\" | \"followUp\",\n context?: FabricInvocationContext,\n options: {\n from?: MeshIdentity;\n triggerTurn?: boolean;\n binding?: FabricActorRunBinding;\n } = {},\n ): Promise<FabricAgentMessageResult> {\n if (this.mainAgent.matches(id)) {\n if (this.mainAgent.local) {\n context?.activity?.({\n type: \"entity\",\n id: this.mainAgent.id,\n kind: \"agent\",\n name: \"Main\",\n });\n return this.mainAgent.deliverAgent({\n from: options.from ?? this.actorManager.identity,\n message,\n delivery: kind,\n ...(typeof options.triggerTurn === \"boolean\"\n ? { triggerTurn: options.triggerTurn }\n : {}),\n ...(data === undefined ? {} : { data }),\n });\n }\n const participant = this.participants.get(this.mainAgent.id);\n if (!participant) throw new Error(`Unknown Fabric Main participant: ${this.mainAgent.id}`);\n if (!participant.capabilities.includes(kind)) {\n throw new Error(`Fabric participant ${participant.id} does not support ${kind}`);\n }\n if (!this.control || participant.controlProtocol === \"legacy\") {\n return this.actorManager.steerRemote(this.mainAgent.id, message, kind, data);\n }\n return this.control.request(\n participant.ownerHostId,\n participant.id,\n kind,\n {\n message,\n data,\n ...(typeof options.triggerTurn === \"boolean\"\n ? { triggerTurn: options.triggerTurn }\n : {}),\n },\n participant.ownerIdentityId,\n );\n }\n\n // Local one-shot agent: forward between its turns via the worker's\n // steer.jsonl channel, preserving the child's accumulated context.\n try {\n const status = this.manager.status(id);\n context?.activity?.({ type: \"entity\", id, kind: \"agent\", name: status.name });\n const result =\n kind === \"steer\"\n ? this.manager.steer(id, message, data)\n : this.manager.followUp(id, message, data);\n return { queued: true, messageId: result.messageId, routed: \"local\" };\n } catch (error) {\n if (!(error instanceof Error && /Unknown Fabric agent/.test(error.message))) throw error;\n }\n\n // Persistent actors consume both delivery modes through their serial mailbox.\n this.actorManager.validateDirectMessage(message, data);\n let target: { actor?: FabricActorInfo; participant?: FabricParticipantInfo };\n try {\n target = this.#resolveActorTarget(id);\n } catch (error) {\n if (error instanceof Error && /Unknown Fabric actor/.test(error.message)) {\n throw new Error(`Unknown Fabric participant: ${id}`);\n }\n throw error;\n }\n const { actor, participant } = target;\n const localActor = Boolean(actor && (!participant || participant.local));\n const binding = options.binding && context && localActor\n ? this.#resolveOmpRunBinding(options.binding, actor!.runner, context)\n : options.binding;\n if (actor && localActor) {\n context?.activity?.({ type: \"entity\", id: actor.id, kind: \"actor\", name: actor.name });\n const result = this.actorManager.tell(actor.id, message, data, {\n ...(binding ? { overrides: binding } : {}),\n });\n return { queued: true, messageId: result.messageId, routed: \"local\" };\n }\n if (!participant) throw new Error(`Fabric actor ${actor!.id} has no live execution owner`);\n if (!participant.capabilities.includes(kind)) {\n throw new Error(`Fabric participant ${participant.id} does not support ${kind}`);\n }\n const sessionBinding = actor?.binding;\n const resolvedBinding = actor\n ? this.actorManager.resolveBinding(actor.id, binding)\n : binding;\n const needsBinding = Boolean(\n resolvedBinding?.model ||\n resolvedBinding?.thinking ||\n sessionBinding?.model ||\n sessionBinding?.thinking,\n );\n if (needsBinding && !participant.capabilities.includes(\"actor-bindings\")) {\n throw new Error(`Fabric actor owner ${participant.ownerHostId} does not support session bindings`);\n }\n if (!this.control || participant.controlProtocol === \"legacy\") {\n if (needsBinding) {\n throw new Error(`Fabric actor owner ${participant.ownerHostId} has no binding control channel`);\n }\n return this.actorManager.steerRemote(participant.id, message, kind, data);\n }\n return this.control.request(\n participant.ownerHostId,\n participant.id,\n kind,\n {\n message,\n data,\n ...(typeof options.triggerTurn === \"boolean\"\n ? { triggerTurn: options.triggerTurn }\n : {}),\n ...(needsBinding && resolvedBinding ? { binding: resolvedBinding } : {}),\n },\n participant.ownerIdentityId,\n );\n }\n\n /** Flush pending coalesced lifecycle deliveries; used by tests and shutdown. */\n flushLifecycleDeliveries(): Promise<void> {\n return this.#lifecycleScheduler.flushAll();\n }\n\n async deliverLifecycle(\n subscription: FabricLifecycleSubscription,\n event: FabricLifecycleEvent,\n ): Promise<void> {\n // Buffered per target: bursts of run completions coalesce into a single\n // orchestrator wake turn instead of one full run per event (#85). steer\n // deliveries bypass the buffer inside the scheduler.\n this.#lifecycleScheduler.schedule(subscription.to, { subscription, event });\n }\n\n async acceptControl(\n command: FabricControlCommand,\n from: MeshIdentity,\n signal?: AbortSignal,\n ): Promise<FabricControlAcceptance> {\n if (command.operation === \"cancel\") {\n return { accepted: false, error: \"Cancel commands are handled by the control plane\" };\n }\n if (command.operation === \"stop\") {\n try {\n await this.manager.stop(command.targetId);\n this.participants.scheduleRefresh();\n return { accepted: true, messageId: command.commandId };\n } catch (error) {\n if (!(error instanceof Error && /Unknown Fabric agent/.test(error.message))) {\n return { accepted: false, error: error instanceof Error ? error.message : String(error) };\n }\n }\n try {\n const actor = this.actorManager.status(command.targetId);\n const ownership = this.participants.get(actor.id);\n if (ownership && !ownership.local) {\n return { accepted: false, error: `Participant ${actor.id} is owned by ${ownership.ownerHostId}` };\n }\n await this.actorManager.stop(actor.id);\n this.participants.scheduleRefresh();\n return { accepted: true, messageId: command.commandId };\n } catch (error) {\n if (!(error instanceof Error && /Unknown Fabric actor/.test(error.message))) {\n return { accepted: false, error: error instanceof Error ? error.message : String(error) };\n }\n }\n return { accepted: false, error: `Owner does not control Fabric participant ${command.targetId}` };\n }\n\n const message = command.message?.trim();\n if (!message) return { accepted: false, error: \"Fabric control message must not be empty\" };\n if (command.operation === \"ask\") {\n try {\n const actor = this.actorManager.status(command.targetId);\n const ownership = this.participants.get(actor.id);\n if (ownership && !ownership.local) {\n return {\n accepted: false,\n error: `Participant ${actor.id} is owned by ${ownership.ownerHostId}`,\n };\n }\n const result = await this.actorManager.ask(\n actor.id,\n message,\n command.data,\n signal,\n command.binding !== undefined ? { binding: command.binding } : {},\n );\n return { accepted: true, messageId: result.id, result };\n } catch (error) {\n return {\n accepted: false,\n error: error instanceof Error ? error.message : String(error),\n };\n }\n }\n if (this.mainAgent.local && this.mainAgent.matches(command.targetId)) {\n const result = this.mainAgent.deliverAgent({\n from,\n message,\n delivery: command.operation,\n ...(typeof command.triggerTurn === \"boolean\"\n ? { triggerTurn: command.triggerTurn }\n : {}),\n ...(command.data === undefined ? {} : { data: command.data }),\n });\n return { accepted: true, messageId: result.messageId };\n }\n try {\n this.manager.status(command.targetId);\n const result =\n command.operation === \"steer\"\n ? this.manager.steer(command.targetId, message, command.data)\n : this.manager.followUp(command.targetId, message, command.data);\n return { accepted: true, messageId: result.messageId };\n } catch (error) {\n if (!(error instanceof Error && /Unknown Fabric agent/.test(error.message))) {\n return { accepted: false, error: error instanceof Error ? error.message : String(error) };\n }\n }\n try {\n const actor = this.actorManager.status(command.targetId);\n const ownership = this.participants.get(actor.id);\n if (ownership && !ownership.local) {\n return { accepted: false, error: `Participant ${actor.id} is owned by ${ownership.ownerHostId}` };\n }\n const result = this.actorManager.tell(\n actor.id,\n message,\n command.data,\n command.binding !== undefined ? { binding: command.binding } : {},\n );\n return { accepted: true, messageId: result.messageId };\n } catch (error) {\n if (!(error instanceof Error && /Unknown Fabric actor/.test(error.message))) {\n return { accepted: false, error: error instanceof Error ? error.message : String(error) };\n }\n }\n return { accepted: false, error: `Owner does not control Fabric participant ${command.targetId}` };\n }\n\n #resolveActorTarget(id: string): {\n actor?: FabricActorInfo;\n participant?: FabricParticipantInfo;\n } {\n let actor: FabricActorInfo | undefined;\n try {\n actor = this.actorManager.status(id);\n } catch (error) {\n if (!(error instanceof Error && /Unknown Fabric actor/.test(error.message))) throw error;\n }\n const participant = this.participants.get(actor?.id ?? id);\n if (!actor && (!participant || participant.kind !== \"actor\")) {\n throw new Error(`Unknown Fabric actor: ${id}`);\n }\n return {\n ...(actor ? { actor } : {}),\n ...(participant?.kind === \"actor\" ? { participant } : {}),\n };\n }\n\n async #createActor(request: FabricActorRequest): Promise<FabricActorInfo> {\n if (request.residency !== \"durable\") return this.actorManager.create(request);\n if (!this.residency) return this.#residentActorClient().createActor(request);\n\n await this.residency.ensureHost();\n let actor: FabricActorInfo;\n try {\n actor = await this.actorManager.create(request);\n } catch (error) {\n if (!(error instanceof ActorRegistryOwnershipError)) throw error;\n return this.residency.createActor(request);\n }\n await this.#activateDurableActor(actor);\n return actor;\n }\n\n #residentActorClient(): ResidentActorClient {\n const client = ResidentActorClient.fromEnv();\n if (client) return client;\n throw new Error(\n \"Durable residency requires a trusted project with Fabric mesh persistence enabled\",\n );\n }\n\n #resident(): ResidencyClient {\n if (!this.residency) {\n throw new Error(\n \"Durable residency requires a trusted project with Fabric mesh persistence enabled\",\n );\n }\n return this.residency;\n }\n\n async #activateDurableActor(actor: FabricActorInfo): Promise<void> {\n const residency = this.#resident();\n await this.actorManager.cede(actor.id);\n await this.participants.refresh();\n try {\n await residency.ensureActor(actor.id);\n } catch (error) {\n try {\n await residency.removeActor(actor.id);\n } catch {\n this.actorManager.reclaim(actor.id);\n }\n await this.participants.refresh().catch(() => undefined);\n throw error;\n }\n }\n\n #listAgents(scopeValue: unknown): Array<AgentRunRecord | AgentHandleInfo | ReturnType<FabricParticipantSource[\"self\"]>> {\n const scope = this.#participantScope(scopeValue, \"local\");\n if (scope === \"local\") return this.manager.list();\n const local = new Map<string, AgentRunRecord | AgentHandleInfo>();\n const append = (record: AgentRunRecord | AgentHandleInfo): void => {\n local.set(record.id, record);\n if (\"nestedAgents\" in record) {\n for (const nested of record.nestedAgents ?? []) append(nested);\n }\n };\n for (const record of this.manager.list()) append(record);\n for (const record of this.residency?.listAgents() ?? []) append(record);\n const listed = this.participants\n .list({ scope, kinds: [\"agent\"] })\n .map((participant) => local.get(participant.id) ?? participant);\n const seen = new Set(listed.map((record) => record.id));\n for (const record of this.residency?.listAgents() ?? []) {\n if (!seen.has(record.id)) listed.push(record);\n }\n return listed;\n }\n\n #participantAlias(value: string): string {\n const id = value.trim();\n return id === \"main\" ? this.mainAgent.id : id;\n }\n\n #participantScope(\n value: unknown,\n fallback: FabricParticipantScope,\n ): FabricParticipantScope {\n return value === \"local\" || value === \"lineage\" || value === \"project\" ? value : fallback;\n }\n\n async stopParticipant(id: string): Promise<unknown> {\n try {\n const result = await this.manager.stop(id);\n this.participants.scheduleRefresh();\n return result;\n } catch (error) {\n if (!(error instanceof Error && /Unknown Fabric agent/.test(error.message))) throw error;\n }\n try {\n const actor = this.actorManager.status(id);\n const ownership = this.participants.get(actor.id);\n if (!ownership || ownership.local) {\n const result = await this.actorManager.stop(actor.id);\n this.participants.scheduleRefresh();\n return result;\n }\n } catch (error) {\n if (!(error instanceof Error && /Unknown Fabric actor/.test(error.message))) throw error;\n }\n const participant = this.participants.get(id);\n if (!participant) throw new Error(`Unknown Fabric participant: ${id}`);\n if (!participant.capabilities.includes(\"stop\")) {\n throw new Error(`Fabric participant ${id} cannot be stopped`);\n }\n if (!this.control) throw new Error(\"Fabric control plane is unavailable\");\n return this.control.request(\n participant.ownerHostId,\n participant.id,\n \"stop\",\n {},\n participant.ownerIdentityId,\n );\n }\n\n #steeringMode(mode: unknown): \"all\" | \"one-at-a-time\" {\n if (mode === \"all\" || mode === \"one-at-a-time\") return mode;\n throw new Error(\n `Invalid steering mode: ${String(mode)} (expected \"all\" or \"one-at-a-time\")`,\n );\n }\n\n async close(): Promise<void> {\n this.#transcripts.clear();\n if (!this.ownsRuntime) return;\n await this.lifecycle.close();\n try {\n await this.actorManager.close();\n } finally {\n await this.manager.close();\n }\n }\n}\n", "import path from \"node:path\";\nimport { readChildToolAllowlist } from \"../core/child-tool-allowlist.js\";\nimport { runAbortable, throwIfAborted } from \"../async-settlement.js\";\nimport type { AgentToolResult, SourceInfo, ToolDefinition } from \"@oh-my-pi/pi-coding-agent\";\nimport { CapturedToolCatalog, type CapturedToolEntry } from \"../capture/catalog.js\";\nimport { classifyOmpBashError, ompBashResultError } from \"../core/omp-bash-error.js\";\nimport { isOmpShellToolName } from \"../core/omp-tools.js\";\nimport type {\n FabricActionDescriptor,\n FabricInvocationContext,\n FabricProvider,\n FabricProviderListRequest,\n} from \"../protocol.js\";\n\nexport interface CapturedToolInvocationResult {\n content: AgentToolResult<unknown>[\"content\"];\n text: string;\n details?: unknown;\n isError: boolean;\n terminate?: boolean;\n source: SourceInfo;\n}\n\nconst textFromContent = (content: AgentToolResult<unknown>[\"content\"]): string =>\n content\n .filter((part): part is { type: \"text\"; text: string } => part.type === \"text\")\n .map((part) => part.text)\n .join(\"\\n\");\n\nconst PACKAGE_SEGMENT = /^(?:omp|pi)-/;\nconst SOURCE_DIRECTORIES: Record<string, true> = { src: true, dist: true, lib: true, build: true, esm: true, cjs: true };\n\nconst sourceLabel = (sourceInfo: SourceInfo): string => {\n if (sourceInfo.path.startsWith(\"<\")) return sourceInfo.source;\n const segments = sourceInfo.path.split(/[\\\\/]/).slice(0, -1);\n // Only the entry's own package directory names it, reached through any build\n // directories it sits under; an ancestor container such as\n // `omp-extensions/my-tool` must not outrank the package it holds.\n let index = segments.length - 1;\n while (index >= 0 && Object.hasOwn(SOURCE_DIRECTORIES, segments[index]!)) index -= 1;\n const owning = index >= 0 ? segments[index] : undefined;\n if (owning !== undefined && PACKAGE_SEGMENT.test(owning)) return owning;\n const filename = path.basename(sourceInfo.path).replace(/\\.[^.]+$/, \"\");\n if (filename && filename !== \"index\") return filename;\n return path.basename(path.dirname(sourceInfo.path)) || sourceInfo.source;\n};\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n typeof value === \"object\" && value !== null && !Array.isArray(value);\n\nconst schemaDocument = (schema: unknown): Record<string, unknown> => {\n if (isRecord(schema)) return schema;\n if (typeof schema === \"function\" && \"toJsonSchema\" in schema) {\n const toJsonSchema = schema.toJsonSchema;\n if (typeof toJsonSchema === \"function\") {\n const document = toJsonSchema.call(schema);\n if (isRecord(document)) return document;\n }\n }\n return {};\n};\nconst capturedToolNamespace = (entry: CapturedToolEntry): string =>\n `extension:${sourceLabel(entry.sourceInfo)}`;\n\nconst descriptorFrom = (entry: CapturedToolEntry): FabricActionDescriptor => ({\n name: entry.name,\n description: `${entry.definition.description} (captured from ${sourceLabel(entry.sourceInfo)})`,\n inputSchema: schemaDocument(entry.definition.parameters),\n risk: entry.risk,\n namespace: capturedToolNamespace(entry),\n});\n\nconst asInvocationResult = (\n entry: CapturedToolEntry,\n result: AgentToolResult<unknown>,\n isError: boolean,\n): CapturedToolInvocationResult => {\n const captured = result as AgentToolResult<unknown> & { terminate?: boolean };\n return {\n content: captured.content,\n text: textFromContent(captured.content),\n ...(captured.details !== undefined ? { details: captured.details } : {}),\n isError,\n ...(captured.terminate !== undefined ? { terminate: captured.terminate } : {}),\n source: entry.sourceInfo,\n };\n};\n\nclass CapturedToolScheduler {\n #sequentialTail: Promise<void> = Promise.resolve();\n readonly #parallel = new Set<Promise<unknown>>();\n\n run<T>(mode: \"sequential\" | \"parallel\" | undefined, operation: () => Promise<T>): Promise<T> {\n if (mode === \"sequential\") {\n const precedingParallel = [...this.#parallel];\n const result = this.#sequentialTail\n .then(() => Promise.allSettled(precedingParallel))\n .then(operation);\n this.#sequentialTail = result.then(\n () => undefined,\n () => undefined,\n );\n return result;\n }\n\n const result = this.#sequentialTail.then(operation);\n this.#parallel.add(result);\n void result.then(\n () => this.#parallel.delete(result),\n () => this.#parallel.delete(result),\n );\n return result;\n }\n}\n\nexport class CapturedToolsProvider implements FabricProvider {\n readonly name = \"extensions\";\n readonly description =\n \"Tools captured from other OMP extensions and invoked lazily through Fabric\";\n\n readonly #scheduler = new CapturedToolScheduler();\n readonly #allowedTools = readChildToolAllowlist();\n\n constructor(readonly catalog: CapturedToolCatalog) {}\n\n async list(\n request: FabricProviderListRequest,\n _context: FabricInvocationContext,\n ): Promise<FabricActionDescriptor[]> {\n const query = request.query?.trim().toLowerCase();\n const descriptors = this.catalog.list().filter((entry) => !this.#allowedTools || this.#allowedTools.has(entry.name)).map(descriptorFrom);\n if (!query) return descriptors;\n return descriptors.filter((descriptor) =>\n `${descriptor.name} ${descriptor.description} ${descriptor.namespace ?? \"\"}`\n .toLowerCase()\n .includes(query),\n );\n }\n\n async describe(\n actionName: string,\n _context: FabricInvocationContext,\n ): Promise<FabricActionDescriptor | undefined> {\n if (this.#allowedTools && !this.#allowedTools.has(actionName)) return undefined;\n const entry = this.catalog.get(actionName);\n return entry ? descriptorFrom(entry) : undefined;\n }\n\n prepareArguments(actionName: string, args: Record<string, unknown>): Record<string, unknown> {\n this.#assertAllowed(actionName);\n const entry = this.catalog.require(actionName);\n const prepare = (entry.definition as ToolDefinition<any, any> & {\n prepareArguments?: (args: Record<string, unknown>) => unknown;\n }).prepareArguments;\n if (!prepare) return args;\n const prepared = prepare(args);\n if (typeof prepared !== \"object\" || prepared === null || Array.isArray(prepared)) {\n throw new Error(`Captured tool ${actionName} prepared non-object arguments`);\n }\n return prepared as Record<string, unknown>;\n }\n\n async invoke(\n actionName: string,\n args: Record<string, unknown>,\n context: FabricInvocationContext,\n ): Promise<CapturedToolInvocationResult> {\n this.#assertAllowed(actionName);\n const entry = this.catalog.require(actionName);\n const mode = (entry.definition as ToolDefinition<any, any> & { executionMode?: unknown }).executionMode;\n const schedulingMode = mode === \"parallel\" || mode === \"sequential\" ? mode : undefined;\n return this.#scheduler.run(schedulingMode, () =>\n runAbortable(context.signal, () => this.#invokeCaptured(entry, args, context)),\n );\n }\n\n #assertAllowed(name: string): void {\n if (this.#allowedTools && !this.#allowedTools.has(name)) {\n throw new Error(`Extension tool ${name} is not permitted by this child's tool allowlist`);\n }\n }\n\n async #invokeCaptured(\n entry: CapturedToolEntry,\n args: Record<string, unknown>,\n context: FabricInvocationContext,\n ): Promise<CapturedToolInvocationResult> {\n const { runner, wrappedTool } = entry;\n const toolCallId = context.nestedToolCallId;\n await runAbortable(context.signal, () => runner.emit({\n type: \"tool_execution_start\",\n toolCallId,\n toolName: entry.name,\n args,\n }));\n\n let result: AgentToolResult<unknown>;\n let isError = false;\n let thrown: unknown;\n let executionStarted = false;\n let updateTail: Promise<void> = Promise.resolve();\n try {\n const preflight = await runAbortable(context.signal, () => runner.emitToolCall({\n type: \"tool_call\",\n toolName: entry.name,\n toolCallId,\n input: args,\n }));\n context.updateArguments?.(args);\n if (preflight?.block) {\n throw new Error(preflight.reason || `Captured tool ${entry.name} was blocked`);\n }\n executionStarted = true;\n const requestedCwd = args.cwd;\n const executionContext = isOmpShellToolName(entry.name) && typeof requestedCwd === \"string\"\n ? { ...runner.createContext(), cwd: requestedCwd }\n : undefined;\n result = await runAbortable(context.signal, () =>\n wrappedTool.execute(toolCallId, args, context.signal, (partialResult) => {\n const progress = textFromContent(partialResult.content).trim();\n if (progress) context.update(`${entry.name}: ${progress.slice(0, 500)}`);\n updateTail = updateTail\n .then(() =>\n runAbortable(context.signal, () => runner.emit({\n type: \"tool_execution_update\",\n toolCallId,\n toolName: entry.name,\n args,\n partialResult,\n })),\n )\n .catch(() => undefined);\n }, executionContext),\n );\n isError = result.isError === true;\n if (isError && isOmpShellToolName(entry.name)) {\n thrown = classifyOmpBashError(new Error(textFromContent(result.content)));\n }\n } catch (error) {\n thrown = isOmpShellToolName(entry.name) && executionStarted ? classifyOmpBashError(error) : error;\n isError = true;\n result = {\n content: [\n {\n type: \"text\",\n text: error instanceof Error ? error.message : String(error),\n },\n ],\n details: { capturedToolError: true },\n };\n }\n\n await updateTail;\n throwIfAborted(context.signal);\n const patch = await runAbortable(context.signal, () => runner.emitToolResult({\n type: \"tool_result\",\n toolName: entry.name,\n toolCallId,\n input: args,\n content: result.content,\n details: result.details,\n isError,\n }));\n if (patch) {\n result = {\n ...result,\n content: patch.content ?? result.content,\n ...(patch.details !== undefined ? { details: patch.details } : {}),\n ...(patch.isError !== undefined ? { isError: patch.isError } : {}),\n };\n isError = patch.isError ?? isError;\n }\n\n await runAbortable(context.signal, () => runner.emit({\n type: \"tool_execution_end\",\n toolCallId,\n toolName: entry.name,\n result,\n isError,\n }));\n\n if (isError) {\n if (isOmpShellToolName(entry.name)) {\n throw ompBashResultError(thrown, textFromContent(result.content));\n }\n const text = textFromContent(result.content).trim();\n throw new Error(\n text || (thrown instanceof Error ? thrown.message : `Captured tool ${entry.name} failed`),\n );\n }\n return asInvocationResult(entry, result, false);\n }\n}\n", "/** Worker-owned optional-tool allowlist; absence leaves the host unrestricted. */\nexport function readChildToolAllowlist(raw = process.env.OMP_FABRIC_TOOL_ALLOWLIST): ReadonlySet<string> | undefined {\n if (raw === undefined) return undefined;\n try {\n const names: unknown = JSON.parse(raw);\n if (Array.isArray(names) && names.every((name) => typeof name === \"string\")) {\n return new Set(names.filter((name) => name !== \"fabric_exec\"));\n }\n } catch {\n // Malformed inherited authority must fail closed, never widen the surface.\n }\n return new Set();\n}\n", "import { Type } from \"@oh-my-pi/pi-coding-agent/extensibility/legacy-typebox\";\nimport { validateJsonSchemaValue } from \"@oh-my-pi/pi-ai/utils/schema\";\nimport {\n compactionRequestBoundsError,\n encodeCompactionRequest,\n MAX_COMPACTION_INSTRUCTIONS_CHARS,\n MAX_PRESERVE_ITEM_CHARS,\n MAX_PRESERVE_ITEMS,\n} from \"../compaction/instructions.js\";\nimport { CompactController } from \"../core/compact-controller.js\";\nimport type {\n FabricActionDescriptor,\n FabricInvocationContext,\n FabricProvider,\n FabricProviderListRequest,\n} from \"../protocol.js\";\nimport { actionArgNormalizer } from \"./arg-normalization.js\";\n\n// Fabric provider exposing the host-session compaction controller to\n// `fabric_exec`. Compaction is advisory-then-committed: `request` only records\n// an intent the host commits at the next `agent_end` boundary; the model\n// cannot compact the running context directly. Always available (no config\n// guard) \u2014 it is a first-principles primitive, not an optional capability.\n\nconst requestSchema = Type.Object({\n reason: Type.Optional(Type.String({\n maxLength: 1024,\n description: \"Short human-readable reason for the compaction\",\n })),\n instructions: Type.Optional(Type.String({\n maxLength: MAX_COMPACTION_INSTRUCTIONS_CHARS,\n description: \"Custom compaction instructions forwarded to OMP core\",\n })),\n preserve: Type.Optional(Type.Array(\n Type.String({ maxLength: MAX_PRESERVE_ITEM_CHARS }),\n {\n maxItems: MAX_PRESERVE_ITEMS,\n description: \"Explicit bounded facts to preserve, encoded as a typed Fabric compaction request\",\n },\n )),\n requestedBy: Type.Optional(Type.String({\n maxLength: 256,\n description: \"Who requested the compaction (default: model)\",\n })),\n}, { additionalProperties: false });\n\ninterface CompactRequestArguments {\n reason?: string;\n instructions?: string;\n preserve?: string[];\n requestedBy?: string;\n}\n\nconst checkedRequestArguments = (args: Record<string, unknown>): CompactRequestArguments => {\n const validation = validateJsonSchemaValue(requestSchema.toJsonSchema(), args);\n if (!validation.success) {\n const message = validation.issues\n .slice(0, 5)\n .map((error) => error.message)\n .join(\"; \");\n throw new Error(`Invalid compact.request arguments: ${message}`);\n }\n const input = args as CompactRequestArguments;\n const boundsError = compactionRequestBoundsError({\n ...(input.instructions !== undefined ? { instructions: input.instructions } : {}),\n ...(input.preserve !== undefined ? { preserve: input.preserve } : {}),\n });\n if (boundsError) throw new Error(`Invalid compact.request arguments: ${boundsError.message}`);\n if (input.preserve !== undefined) {\n encodeCompactionRequest({\n ...(input.instructions !== undefined ? { instructions: input.instructions } : {}),\n preserve: input.preserve,\n });\n }\n return input;\n};\n\nconst emptySchema = {\n type: \"object\",\n properties: {},\n additionalProperties: false,\n};\n\n\n\nconst descriptors: FabricActionDescriptor[] = [\n {\n name: \"request\",\n description:\n \"Request an advisory compaction of the host session's context at the next safe boundary (agent_end). The host commits it only between turns, never mid-turn. A new request replaces any pending one.\",\n inputSchema: requestSchema.toJsonSchema() as unknown as Record<string, unknown>,\n risk: \"write\",\n },\n {\n name: \"status\",\n description:\n \"Read the pending compaction intent and the last compaction outcome\",\n inputSchema: emptySchema,\n risk: \"read\",\n },\n {\n name: \"cancel\",\n description: \"Clear a pending compaction intent before the host commits it\",\n inputSchema: emptySchema,\n // Cancel mutates the compaction controller; it is not a read. The \"read\"\n // label predates effect tracking and would have let speculative PTC\n // pre-fire a control action that may never execute in the real program.\n risk: \"write\",\n },\n];\n\n// Argument repair derives from the action schemas plus the shared synonym\n// lexicon; no compact-specific table remains.\nexport const normalizeCompactArgs = actionArgNormalizer(() => descriptors);\n\nexport class CompactProvider implements FabricProvider {\n readonly name = \"compact\";\n readonly description =\n \"Programmatic, advisory-then-committed context compaction for the host OMP session\";\n\n constructor(readonly controller: CompactController) {}\n\n async list(\n request: FabricProviderListRequest,\n _context: FabricInvocationContext,\n ): Promise<FabricActionDescriptor[]> {\n const query = request.query?.toLowerCase();\n return query\n ? descriptors.filter((descriptor) =>\n `${descriptor.name} ${descriptor.description}`.toLowerCase().includes(query),\n )\n : descriptors;\n }\n\n async describe(\n actionName: string,\n _context: FabricInvocationContext,\n ): Promise<FabricActionDescriptor | undefined> {\n return descriptors.find((descriptor) => descriptor.name === actionName);\n }\n\n prepareArguments(\n actionName: string,\n args: Record<string, unknown>,\n ): Record<string, unknown> {\n return normalizeCompactArgs(actionName, args);\n }\n\n async invoke(\n actionName: string,\n args: Record<string, unknown>,\n context: FabricInvocationContext,\n ): Promise<unknown> {\n switch (actionName) {\n case \"request\": {\n const input = checkedRequestArguments(args);\n const intent = this.controller.request({\n ...(input.reason !== undefined ? { reason: input.reason } : {}),\n ...(input.instructions !== undefined ? { instructions: input.instructions } : {}),\n ...(input.preserve !== undefined ? { preserve: input.preserve } : {}),\n ...(input.requestedBy !== undefined ? { requestedBy: input.requestedBy } : {}),\n });\n context.activity?.({\n type: \"entity\",\n id: \"host-compact\",\n kind: \"custom\",\n name: \"Context compaction\",\n });\n context.activity?.({\n type: \"progress\",\n message: intent.reason\n ? `Compaction requested: ${intent.reason}`\n : \"Compaction requested (advisory; commits at next agent_end)\",\n });\n return { requested: true, intent };\n }\n case \"status\":\n return this.controller.status();\n case \"cancel\":\n this.controller.cancel();\n context.activity?.({ type: \"progress\", message: \"Compaction request cancelled\" });\n return { cancelled: true };\n default:\n throw new Error(`Unknown compact action: ${actionName}`);\n }\n }\n}\n", "import { FabricComponentLoader } from \"../components/loader.js\";\nimport type {\n FabricActionDescriptor,\n FabricInvocationContext,\n FabricProvider,\n FabricProviderListRequest,\n} from \"../protocol.js\";\n\nconst descriptors: FabricActionDescriptor[] = [\n {\n name: \"list\",\n description: \"List registered component definitions and configured component instances.\",\n inputSchema: { type: \"object\", additionalProperties: false },\n risk: \"read\",\n effect: { kind: \"none\", resources: [\"fabric:components\"], ordering: \"commutative\" },\n },\n {\n name: \"status\",\n description: \"Inspect one component's lifecycle state, committed capability target, and cleanup diagnostics.\",\n inputSchema: {\n type: \"object\",\n properties: { id: { type: \"string\", minLength: 1 } },\n required: [\"id\"],\n additionalProperties: false,\n },\n risk: \"read\",\n effect: { kind: \"none\", resources: [\"fabric:components\"], ordering: \"commutative\" },\n },\n {\n name: \"graph\",\n description: \"Inspect component requirement/provision edges and detected dependency cycles.\",\n inputSchema: { type: \"object\", additionalProperties: false },\n risk: \"read\",\n effect: { kind: \"none\", resources: [\"fabric:components\"], ordering: \"commutative\" },\n },\n {\n name: \"reload\",\n description: \"Restart one component, or all loaded components, with rollback to the previous revision on activation failure.\",\n inputSchema: {\n type: \"object\",\n properties: { id: { type: \"string\", minLength: 1 } },\n additionalProperties: false,\n },\n risk: \"execute\",\n effect: { kind: \"transactional\", resources: [\"fabric:components\"], ordering: \"ordered\" },\n },\n];\n\nexport class ComponentsProvider implements FabricProvider {\n readonly name = \"components\";\n readonly description =\n \"Supervised component lifecycle, exact capability dependencies, effect cleanup, and reload diagnostics.\";\n\n constructor(readonly loader: FabricComponentLoader) {}\n\n async list(\n request: FabricProviderListRequest,\n _context: FabricInvocationContext,\n ): Promise<FabricActionDescriptor[]> {\n const query = request.query?.normalize(\"NFKC\").trim().toLowerCase();\n const filtered = query\n ? descriptors.filter((descriptor) =>\n `${descriptor.name} ${descriptor.description}`.toLowerCase().includes(query),\n )\n : descriptors;\n return filtered.slice(0, Math.max(1, Math.min(request.limit ?? 100, 100)));\n }\n\n async describe(\n actionName: string,\n _context: FabricInvocationContext,\n ): Promise<FabricActionDescriptor | undefined> {\n return descriptors.find((descriptor) => descriptor.name === actionName);\n }\n\n async invoke(\n actionName: string,\n args: Record<string, unknown>,\n _context: FabricInvocationContext,\n ): Promise<unknown> {\n switch (actionName) {\n case \"list\":\n return {\n definitions: this.loader.definitions(),\n components: this.loader.list(),\n };\n case \"status\": {\n const id = args.id;\n if (typeof id !== \"string\" || !id.trim()) throw new Error(\"components.status requires id\");\n return this.loader.status(id);\n }\n case \"graph\":\n return this.loader.graph();\n case \"reload\": {\n const id = args.id;\n if (id !== undefined && (typeof id !== \"string\" || !id.trim())) {\n throw new Error(\"components.reload id must be a non-empty string\");\n }\n return {\n components: await this.loader.reload(typeof id === \"string\" ? id : undefined),\n };\n }\n default:\n throw new Error(`Unknown components action: ${actionName}`);\n }\n }\n}\n", "import fs from \"node:fs/promises\";\nimport fsSync from \"node:fs\";\nimport os from \"node:os\";\nimport path from \"node:path\";\nimport type { ServerDefinition } from \"mcporter\";\nimport { stableJsonHash } from \"../core/stable-hash.js\";\n\nexport const MCP_DESCRIPTOR_CACHE_VERSION = 1;\n\nexport interface McpConfigLayerStat {\n path: string;\n mtimeMs: number;\n size: number;\n}\n\ninterface CachedMcpToolAnnotations {\n readOnlyHint?: boolean;\n idempotentHint?: boolean;\n destructiveHint?: boolean;\n openWorldHint?: boolean;\n}\n\ninterface CachedMcpTool {\n name: string;\n description?: string;\n inputSchema?: unknown;\n outputSchema?: unknown;\n annotations?: CachedMcpToolAnnotations;\n}\n\nexport interface CachedMcpServer {\n definitionHash: string;\n transport: string;\n description: string | null;\n fetchedAt: string;\n stale: boolean;\n tools: CachedMcpTool[];\n}\n\nexport interface McpDescriptorCacheFile {\n version: number;\n layers: McpConfigLayerStat[];\n updatedAt: string;\n servers: Record<string, CachedMcpServer>;\n}\n\n// mcporter merges config from an explicit path (MCP configPath option or the\n// MCPORTER_CONFIG env), else a home file plus <rootDir>/config/mcporter.json.\n// mcporter's own listConfigLayerPaths is not part of the package's public\n// exports map, so the layer discovery is mirrored here exactly; the\n// fingerprint below must watch the same files mcporter would read.\nconst homeDir = (): string => {\n const home = process.env.HOME;\n return home && home.trim().length > 0 ? home : os.homedir();\n};\n\nconst expandHome = (input: string): string => {\n if (!input.startsWith(\"~\")) return input;\n const home = homeDir();\n if (input === \"~\") return home;\n if (input.startsWith(\"~/\") || input.startsWith(\"~\\\\\")) {\n return path.join(home, input.slice(2));\n }\n return input;\n};\n\nconst legacyMcporterDir = (): string => path.join(homeDir(), \".mcporter\");\n\nconst mcporterConfigDir = (): string => {\n const raw = process.env.XDG_CONFIG_HOME;\n if (raw && raw.trim().length > 0) {\n const resolved = expandHome(raw.trim());\n if (path.isAbsolute(resolved)) return path.join(resolved, \"mcporter\");\n }\n return legacyMcporterDir();\n};\n\nconst mcporterConfigCandidates = (): string[] => {\n const base = mcporterConfigDir();\n const candidates = [path.join(base, \"mcporter.json\"), path.join(base, \"mcporter.jsonc\")];\n const legacy = legacyMcporterDir();\n if (base !== legacy) {\n candidates.push(path.join(legacy, \"mcporter.json\"), path.join(legacy, \"mcporter.jsonc\"));\n }\n return candidates;\n};\n\nconst pathExists = (filePath: string): boolean => {\n try {\n fsSync.accessSync(filePath);\n return true;\n } catch {\n return false;\n }\n};\n\nexport const mcpConfigLayerPaths = (rootDir: string, configPath?: string): string[] => {\n const explicitRaw = configPath ?? process.env.MCPORTER_CONFIG;\n if (explicitRaw && explicitRaw.trim().length > 0) {\n return [path.resolve(expandHome(explicitRaw.trim()))];\n }\n const paths: string[] = [];\n const home = mcporterConfigCandidates().find(pathExists);\n if (home) paths.push(home);\n const projectPath = path.resolve(rootDir, \"config\", \"mcporter.json\");\n if (pathExists(projectPath)) paths.push(projectPath);\n return paths;\n};\n\nexport const statConfigLayers = async (\n rootDir: string,\n configPath?: string,\n): Promise<McpConfigLayerStat[]> => {\n const stats = await Promise.all(\n mcpConfigLayerPaths(rootDir, configPath).map(async (layerPath) => {\n try {\n const stat = await fs.stat(layerPath);\n return { path: layerPath, mtimeMs: stat.mtimeMs, size: stat.size };\n } catch {\n // A layer that vanished between discovery and stat simply drops out of\n // the fingerprint, which itself invalidates any cache built with it.\n return undefined;\n }\n }),\n );\n return stats.filter((stat): stat is McpConfigLayerStat => stat !== undefined);\n};\n\n// mtimeMs tolerates a millisecond of serialization/format jitter; path order\n// is load order, so comparison is positional.\nexport const sameConfigLayers = (\n left: McpConfigLayerStat[],\n right: McpConfigLayerStat[],\n): boolean =>\n left.length === right.length &&\n left.every((layer, index) => {\n const other = right[index];\n return (\n other !== undefined &&\n layer.path === other.path &&\n layer.size === other.size &&\n Math.abs(layer.mtimeMs - other.mtimeMs) <= 1\n );\n });\n\n// Per-server validity key: any edit to a server's merged definition (command,\n// args, url, env, headers, \u2026) changes the hash even when its tool list did\n// not, while untouched servers keep their cached descriptors across config\n// edits elsewhere.\nexport const hashServerDefinition = (definition: ServerDefinition): string =>\n stableJsonHash(definition);\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n typeof value === \"object\" && value !== null && !Array.isArray(value);\n\n// Lenient per-server validation: garbage entries are dropped rather than\n// failing the whole snapshot.\nexport const parseCachedServer = (value: unknown): CachedMcpServer | undefined => {\n if (!isRecord(value)) return undefined;\n const tools = Array.isArray(value.tools)\n ? value.tools.filter(\n (tool): tool is CachedMcpTool => isRecord(tool) && typeof tool.name === \"string\",\n )\n : undefined;\n if (typeof value.definitionHash !== \"string\" || tools === undefined) return undefined;\n return {\n definitionHash: value.definitionHash,\n transport: typeof value.transport === \"string\" ? value.transport : \"unknown\",\n description: typeof value.description === \"string\" ? value.description : null,\n fetchedAt: typeof value.fetchedAt === \"string\" ? value.fetchedAt : \"\",\n stale: value.stale === true,\n tools,\n };\n};\n\nconst parseCacheFile = (value: unknown): McpDescriptorCacheFile | undefined => {\n if (!isRecord(value) || value.version !== MCP_DESCRIPTOR_CACHE_VERSION) return undefined;\n if (!Array.isArray(value.layers) || !isRecord(value.servers)) return undefined;\n const layers = value.layers.filter(\n (layer): layer is McpConfigLayerStat =>\n isRecord(layer) &&\n typeof layer.path === \"string\" &&\n typeof layer.mtimeMs === \"number\" &&\n typeof layer.size === \"number\",\n );\n return {\n version: MCP_DESCRIPTOR_CACHE_VERSION,\n layers,\n updatedAt: typeof value.updatedAt === \"string\" ? value.updatedAt : \"\",\n servers: value.servers as Record<string, CachedMcpServer>,\n };\n};\n\nlet tempCounter = 0;\n\nexport class McpDescriptorCacheStore {\n constructor(readonly filePath: string) {}\n\n async load(): Promise<McpDescriptorCacheFile | undefined> {\n try {\n const raw = await fs.readFile(this.filePath, \"utf8\");\n return parseCacheFile(JSON.parse(raw));\n } catch {\n return undefined;\n }\n }\n\n // Atomic-ish write: temp file then rename, so a concurrent reader either\n // sees the previous cache or the next one, never a torn document.\n async save(file: McpDescriptorCacheFile): Promise<void> {\n const directory = path.dirname(this.filePath);\n await fs.mkdir(directory, { recursive: true });\n const tempPath = path.join(\n directory,\n `.mcp-cache-${process.pid}-${Date.now()}-${tempCounter++}.tmp`,\n );\n await fs.writeFile(tempPath, JSON.stringify(file, null, 2));\n try {\n await fs.rename(tempPath, this.filePath);\n } catch (error) {\n await fs.rm(tempPath, { force: true }).catch(() => undefined);\n throw error;\n }\n }\n}\n", "import path from \"node:path\";\nimport type {\n Runtime,\n ServerDefinition,\n ServerToolInfo,\n} from \"mcporter\";\nimport type { FabricMcpConfig } from \"../config.js\";\nimport type {\n FabricActionDescriptor,\n FabricInvocationContext,\n FabricProvider,\n FabricProviderListRequest,\n FabricToolAnnotations,\n} from \"../protocol.js\";\nimport { sanitizeMcpRefPart } from \"../ref-names.js\";\nimport {\n hashServerDefinition,\n MCP_DESCRIPTOR_CACHE_VERSION,\n type McpConfigLayerStat,\n McpDescriptorCacheStore,\n parseCachedServer,\n sameConfigLayers,\n statConfigLayers,\n type CachedMcpServer,\n} from \"./mcp-descriptor-cache.js\";\n\nconst TOOL_METADATA_TTL_MS = 60_000;\nconst REVALIDATE_CONCURRENCY = 3;\nconst REVALIDATE_SERVER_TIMEOUT_MS = 20_000;\nconst MIN_REVALIDATE_SERVER_TIMEOUT_MS = 5_000;\nconst NOTIFY_DEBOUNCE_MS = 100;\nconst PERSIST_DEBOUNCE_MS = 150;\n\nconst emptyObjectSchema = {\n type: \"object\",\n properties: {},\n additionalProperties: false,\n};\n\nconst managementDescriptors: FabricActionDescriptor[] = [\n {\n name: \"$servers\",\n description: \"List MCP servers discovered by mcporter\",\n inputSchema: emptyObjectSchema,\n risk: \"read\",\n namespace: \"management\",\n },\n {\n name: \"$reload\",\n description: \"Close MCP connections and reload mcporter configuration\",\n inputSchema: emptyObjectSchema,\n risk: \"network\",\n namespace: \"management\",\n },\n {\n name: \"$register\",\n description: \"Register an ephemeral MCP server in the pooled mcporter runtime\",\n inputSchema: {\n type: \"object\",\n properties: {\n name: { type: \"string\" },\n description: { type: \"string\" },\n command: { type: \"string\" },\n args: { type: \"array\", items: { type: \"string\" } },\n cwd: { type: \"string\" },\n baseUrl: { type: \"string\" },\n headers: { type: \"object\", additionalProperties: { type: \"string\" } },\n env: { type: \"object\", additionalProperties: { type: \"string\" } },\n overwrite: { type: \"boolean\" },\n },\n required: [\"name\"],\n additionalProperties: false,\n },\n risk: \"execute\",\n namespace: \"management\",\n },\n {\n name: \"$call\",\n description: \"Call an MCP tool by explicit server and tool name\",\n inputSchema: {\n type: \"object\",\n properties: {\n server: { type: \"string\" },\n tool: { type: \"string\" },\n args: { type: \"object\", additionalProperties: true },\n },\n required: [\"server\", \"tool\"],\n additionalProperties: false,\n },\n risk: \"network\",\n namespace: \"management\",\n },\n];\n\nconst normalizeSchema = (schema: unknown): Record<string, unknown> =>\n typeof schema === \"object\" && schema !== null && !Array.isArray(schema)\n ? (schema as Record<string, unknown>)\n : emptyObjectSchema;\n\nconst normalizeMcpResult = (result: unknown): unknown => {\n if (typeof result !== \"object\" || result === null || Array.isArray(result)) return result;\n const record = result as Record<string, unknown>;\n if (!Array.isArray(record.content)) return result;\n const text = record.content\n .filter(\n (part): part is { type: \"text\"; text: string } =>\n typeof part === \"object\" &&\n part !== null &&\n (part as Record<string, unknown>).type === \"text\" &&\n typeof (part as Record<string, unknown>).text === \"string\",\n )\n .map((part) => part.text)\n .join(\"\\n\");\n if (record.isError === true) throw new Error(text || \"MCP tool returned an error\");\n return {\n text,\n content: record.content,\n structuredContent: record.structuredContent ?? null,\n };\n};\n\nexport interface McpProviderHooks {\n /** Full provider-fidelity descriptor slice after any tool-list change. */\n onSliceChanged?: (descriptors: FabricActionDescriptor[]) => void;\n}\n\nexport interface McpProviderOptions {\n cache?: McpDescriptorCacheStore;\n hooks?: McpProviderHooks;\n}\n\ninterface WorkingServer {\n definitionHash: string;\n transport: string;\n description: string | null;\n fetchedAt: string;\n stale: boolean;\n ephemeral: boolean;\n tools: ServerToolInfo[];\n}\n\ninterface PendingServer {\n definitionHash: string;\n transport: string;\n description: string | null;\n ephemeral: boolean;\n}\n\nconst withTimeout = <T>(\n operation: Promise<T>,\n timeoutMs: number,\n onTimeout?: () => void,\n): Promise<T> =>\n new Promise<T>((resolve, reject) => {\n const timer = setTimeout(() => {\n onTimeout?.();\n reject(new Error(`MCP server listing timed out after ${timeoutMs}ms`));\n }, timeoutMs);\n timer.unref?.();\n operation.then(\n (value) => {\n clearTimeout(timer);\n resolve(value);\n },\n (error) => {\n clearTimeout(timer);\n reject(error);\n },\n );\n });\n\nexport class McpProvider implements FabricProvider {\n readonly name = \"mcp\";\n readonly description = \"External MCP tools discovered and pooled by mcporter\";\n #runtime: Runtime | undefined;\n #runtimeCreation: { generation: number; promise: Promise<Runtime> } | undefined;\n readonly #toolMetadata = new Map<\n string,\n { expiresAt: number; promise: Promise<ServerToolInfo[]> }\n >();\n\n readonly #store: McpDescriptorCacheStore | undefined;\n readonly #hooks: McpProviderHooks;\n #generation = 0;\n #closed = false;\n #hydration: Promise<void> | undefined;\n #layerStats: McpConfigLayerStat[] = [];\n readonly #servers = new Map<string, WorkingServer>();\n readonly #pending = new Map<string, PendingServer>();\n readonly #revalidateQueue: string[] = [];\n readonly #revalidateQueued = new Set<string>();\n readonly #recontacted = new Set<string>();\n #revalidating: Promise<void> | undefined;\n #autoKicked = false;\n #dirtyPersist = false;\n #dirtyNotify = false;\n #persistTimer: NodeJS.Timeout | undefined;\n #notifyTimer: NodeJS.Timeout | undefined;\n\n constructor(\n readonly cwd: string,\n readonly config: FabricMcpConfig,\n options: McpProviderOptions = {},\n ) {\n this.#store = options.cache;\n this.#hooks = options.hooks ?? {};\n }\n\n get #cacheOn(): boolean {\n return this.config.cache.enabled;\n }\n\n async list(\n request: FabricProviderListRequest,\n context: FabricInvocationContext,\n ): Promise<FabricActionDescriptor[]> {\n if (!this.config.enabled) return [];\n if (!this.#cacheOn) return this.#listLegacy(request, context);\n await this.#hydrate();\n this.#kickRevalidation();\n const query = request.query?.toLowerCase();\n const filterQuery = (descriptors: FabricActionDescriptor[]): FabricActionDescriptor[] =>\n query\n ? descriptors.filter((descriptor) =>\n `${descriptor.name} ${descriptor.description}`.toLowerCase().includes(query),\n )\n : descriptors;\n if (request.namespace) {\n const server = await this.#resolveKnownServer(request.namespace);\n if (!server) return [];\n let entry = this.#servers.get(server);\n if (!entry) {\n // Explicit namespaced probe of an unlisted server: bounded live fetch\n // of exactly that server.\n entry = await this.#fetchServerTools(server).catch(() => undefined);\n if (!entry) return [];\n }\n return filterQuery(entry.tools.map((tool) => this.#toolDescriptor(server, tool)));\n }\n return [\n ...managementDescriptors,\n ...filterQuery(this.sliceDescriptors()),\n ];\n }\n\n async describe(\n actionName: string,\n context: FabricInvocationContext,\n ): Promise<FabricActionDescriptor | undefined> {\n const management = managementDescriptors.find((descriptor) => descriptor.name === actionName);\n if (management) return management;\n if (!this.config.enabled) return undefined;\n if (!this.#cacheOn) return this.#describeLegacy(actionName, context);\n const parsed = this.#parseToolName(actionName);\n if (!parsed) return undefined;\n await this.#hydrate();\n const server = await this.#resolveKnownServer(parsed.server);\n if (!server) return undefined;\n let entry = this.#servers.get(server);\n let tool = entry ? this.#resolveTool(entry.tools, parsed.tool) : undefined;\n if (!tool) {\n entry = await this.#fetchServerTools(server).catch(() => undefined);\n tool = entry ? this.#resolveTool(entry.tools, parsed.tool) : undefined;\n }\n if (entry?.stale) this.#scheduleRevalidate([server]);\n return tool ? this.#toolDescriptor(server, tool) : undefined;\n }\n\n async invoke(\n actionName: string,\n args: Record<string, unknown>,\n context: FabricInvocationContext,\n ): Promise<unknown> {\n if (!this.config.enabled) throw new Error(\"MCP support is disabled in Fabric configuration\");\n if (actionName === \"$servers\") {\n const runtime = await this.#getRuntime();\n return runtime.listServers().map((server) => {\n const definition = runtime.getDefinition(server);\n if (!this.#cacheOn) {\n return {\n name: server,\n description: definition.description ?? null,\n transport: definition.command.kind,\n };\n }\n const entry = this.#servers.get(server);\n return {\n name: server,\n description: definition.description ?? null,\n transport: definition.command.kind,\n tools: entry?.tools.length ?? 0,\n stale: entry === undefined || entry.stale,\n };\n });\n }\n if (actionName === \"$reload\") {\n await this.#resetRuntime();\n if (this.#cacheOn) {\n this.#servers.clear();\n this.#pending.clear();\n this.#recontacted.clear();\n this.#hydration = undefined;\n await this.#hydrate();\n this.#kickRevalidation(true);\n }\n return { servers: (await this.#getRuntime()).listServers() };\n }\n if (actionName === \"$register\") {\n if (!this.config.allowDynamicServers) {\n throw new Error(\"Dynamic MCP server registration is disabled in Fabric configuration\");\n }\n const definition = this.#serverDefinition(args);\n const runtime = await this.#getRuntime();\n runtime.registerDefinition(definition, { overwrite: args.overwrite === true });\n this.#toolMetadata.delete(definition.name);\n if (this.#cacheOn) {\n // Ephemeral overlay: discoverable immediately, never persisted.\n void this.#hydrate()\n .then(() => {\n this.#servers.delete(definition.name);\n this.#pending.set(definition.name, {\n definitionHash: hashServerDefinition(definition),\n transport: definition.command.kind,\n description: definition.description ?? null,\n ephemeral: true,\n });\n this.#scheduleRevalidate([definition.name]);\n })\n .catch(() => undefined);\n }\n return { registered: definition.name };\n }\n if (actionName === \"$call\") {\n const server = String(args.server);\n const tool = String(args.tool);\n const toolArgs =\n typeof args.args === \"object\" && args.args !== null && !Array.isArray(args.args)\n ? (args.args as Record<string, unknown>)\n : {};\n return this.#call(server, tool, toolArgs, context.signal);\n }\n const parsed = this.#parseToolName(actionName);\n if (!parsed) throw new Error(`Invalid MCP action: ${actionName}`);\n return this.#call(parsed.server, parsed.tool, args, context.signal);\n }\n\n async close(): Promise<void> {\n this.#closed = true;\n this.#revalidateQueue.length = 0;\n this.#revalidateQueued.clear();\n if (this.#notifyTimer) clearTimeout(this.#notifyTimer);\n if (this.#persistTimer) clearTimeout(this.#persistTimer);\n this.#notifyTimer = undefined;\n this.#persistTimer = undefined;\n if (this.#dirtyPersist) await this.#persistNow().catch(() => undefined);\n await this.#resetRuntime();\n }\n\n // Fire-and-forget session warm-up: hydrate from the descriptor cache, then\n // start the background revalidation policy. Never awaited by session start.\n warmup(): void {\n if (!this.config.enabled || !this.#cacheOn) return;\n void this.#hydrate()\n .then(() => this.#kickRevalidation())\n .catch(() => undefined);\n }\n\n // Provider-fidelity descriptors for everything currently known, cached or\n // ephemeral.\n sliceDescriptors(): FabricActionDescriptor[] {\n const descriptors: FabricActionDescriptor[] = [];\n for (const [server, entry] of this.#servers) {\n for (const tool of entry.tools) descriptors.push(this.#toolDescriptor(server, tool));\n }\n return descriptors;\n }\n\n // Test/ops hook: await hydration and any in-flight background revalidation,\n // then flush pending persistence and notifications.\n async settle(): Promise<void> {\n await this.#hydrate();\n while (this.#revalidating) await this.#revalidating;\n if (this.#notifyTimer) {\n clearTimeout(this.#notifyTimer);\n this.#notifyTimer = undefined;\n }\n if (this.#dirtyNotify) this.#notifyNow();\n if (this.#persistTimer) {\n clearTimeout(this.#persistTimer);\n this.#persistTimer = undefined;\n }\n if (this.#dirtyPersist) await this.#persistNow().catch(() => undefined);\n }\n\n async #call(\n serverName: string,\n toolName: string,\n args: Record<string, unknown>,\n signal?: AbortSignal,\n ): Promise<unknown> {\n if (!this.#cacheOn) return this.#callLegacy(serverName, toolName, args, signal);\n if (signal?.aborted) throw new Error(\"MCP call cancelled\");\n await this.#hydrate();\n const server = await this.#resolveKnownServer(serverName);\n if (!server) throw new Error(`Unknown MCP server: ${serverName}`);\n let entry = this.#servers.get(server);\n let tool = entry ? this.#resolveTool(entry.tools, toolName) : undefined;\n if (!tool) {\n entry = await this.#fetchServerTools(server).catch(() => undefined);\n tool = entry ? this.#resolveTool(entry.tools, toolName) : undefined;\n }\n if (signal?.aborted) throw new Error(\"MCP call cancelled\");\n if (!tool) throw new Error(`Unknown MCP tool: ${serverName}.${toolName}`);\n const runtime = await this.#getRuntime();\n const firstContact = !this.#recontacted.has(server);\n if (firstContact) this.#recontacted.add(server);\n const operation = runtime.callTool(server, tool.name, {\n args,\n timeoutMs: this.config.callTimeoutMs,\n disableOAuth: this.config.disableOAuth,\n });\n try {\n const result = await this.#withAbort(operation, signal, () => runtime.close(server));\n return normalizeMcpResult(result);\n } catch (error) {\n // A failed call is fresh evidence the cached metadata may be wrong.\n const existing = this.#servers.get(server);\n if (existing) {\n existing.stale = true;\n this.#schedulePersist();\n this.#scheduleNotify();\n }\n this.#scheduleRevalidate([server]);\n throw error;\n } finally {\n // Revalidate the moment the server is connected: the pooled connection\n // makes the relist essentially free, and public servers drifting under\n // us get picked up within the session that observed them.\n if (firstContact) this.#scheduleRevalidate([server]);\n }\n }\n\n async #withAbort<T>(\n operation: Promise<T>,\n signal: AbortSignal | undefined,\n abort: () => void | Promise<void>,\n ): Promise<T> {\n if (!signal) return operation;\n if (signal.aborted) throw new Error(\"MCP call cancelled\");\n return new Promise<T>((resolve, reject) => {\n const onAbort = (): void => {\n void Promise.resolve(abort()).catch(() => undefined);\n reject(new Error(\"MCP call cancelled\"));\n };\n signal.addEventListener(\"abort\", onAbort, { once: true });\n void operation.then(\n (value) => {\n signal.removeEventListener(\"abort\", onAbort);\n resolve(value);\n },\n (error) => {\n signal.removeEventListener(\"abort\", onAbort);\n reject(error);\n },\n );\n });\n }\n\n // Session-opening hydration: adopt the persisted descriptor cache. Never\n // spawns a server \u2014 config-only operations at worst.\n #hydrate(): Promise<void> {\n if (!this.#cacheOn) return Promise.resolve();\n this.#hydration ??= this.#hydrateInternal().catch(() => undefined);\n return this.#hydration;\n }\n\n async #hydrateInternal(): Promise<void> {\n const generation = this.#generation;\n const snapshot = this.#store ? await this.#store.load().catch(() => undefined) : undefined;\n this.#layerStats = await statConfigLayers(this.cwd, this.config.configPath);\n if (generation !== this.#generation) return;\n if (snapshot && sameConfigLayers(snapshot.layers, this.#layerStats)) {\n // Config untouched since the cache was written: adopt wholesale,\n // without even constructing the mcporter runtime.\n for (const [name, raw] of Object.entries(snapshot.servers)) {\n const parsed = parseCachedServer(raw);\n if (parsed) this.#servers.set(name, this.#toWorking(parsed, false));\n }\n this.#scheduleNotify();\n return;\n }\n try {\n // Config changed (or first run): resolve definitions \u2014 still without\n // connecting \u2014 and keep cached tools for servers whose definition is\n // byte-identical to the one that produced the cache entry.\n const runtime = await this.#getRuntime();\n for (const definition of runtime.getDefinitions()) {\n const hash = hashServerDefinition(definition);\n const recorded = snapshot?.servers[definition.name];\n const parsed = recorded ? parseCachedServer(recorded) : undefined;\n if (parsed && parsed.definitionHash === hash) {\n this.#servers.set(definition.name, this.#toWorking(parsed, false));\n } else {\n const existing = this.#pending.get(definition.name);\n this.#pending.set(definition.name, {\n definitionHash: hash,\n transport: definition.command.kind,\n description: definition.description ?? null,\n ephemeral: existing?.ephemeral ?? false,\n });\n }\n }\n // Servers dropped from the config are dropped from the cache.\n this.#dirtyPersist = true;\n this.#schedulePersist();\n } catch {\n // Config currently unreadable (parse error mid-edit): fall back to\n // last-known-good descriptors rather than blanking the provider.\n if (snapshot) {\n for (const [name, raw] of Object.entries(snapshot.servers)) {\n const parsed = parseCachedServer(raw);\n if (parsed && !this.#servers.has(name)) {\n this.#servers.set(name, this.#toWorking(parsed, false));\n }\n }\n console.warn(\n \"[omp-fabric] MCP config could not be parsed; serving last-known cached MCP tools.\",\n );\n }\n }\n this.#scheduleNotify();\n }\n\n #toWorking(cached: CachedMcpServer, ephemeral: boolean): WorkingServer {\n return {\n definitionHash: cached.definitionHash,\n transport: cached.transport,\n description: cached.description,\n fetchedAt: cached.fetchedAt,\n stale: cached.stale,\n ephemeral,\n tools: cached.tools.map((tool) => ({ ...tool })),\n };\n }\n\n #kickRevalidation(forceAll = false): void {\n if (this.#closed || !this.#cacheOn) return;\n if (!forceAll && this.#autoKicked) return;\n this.#autoKicked = true;\n const policy = this.config.cache.revalidate;\n if (policy === \"off\" && !forceAll) return;\n const targets =\n forceAll || policy === \"all\"\n ? [...this.#servers.keys(), ...this.#pending.keys()]\n : [...this.#pending.keys()];\n this.#scheduleRevalidate(targets);\n }\n\n #scheduleRevalidate(servers: Iterable<string>): void {\n if (this.#closed || !this.#cacheOn) return;\n for (const server of servers) {\n if (this.#revalidateQueued.has(server)) continue;\n this.#revalidateQueued.add(server);\n this.#revalidateQueue.push(server);\n }\n if (this.#revalidating || this.#revalidateQueue.length === 0) return;\n this.#revalidating = this.#drainRevalidation()\n .catch(() => undefined)\n .finally(() => {\n this.#revalidating = undefined;\n // Budget-exhausted drains leave a tail: drain again with a fresh\n // budget until the queue is empty.\n if (this.#revalidateQueue.length > 0 && !this.#closed) this.#scheduleRevalidate([]);\n });\n void this.#revalidating;\n }\n\n async #drainRevalidation(): Promise<void> {\n const generation = this.#generation;\n const deadline = Date.now() + Math.max(1_000, this.config.cache.revalidateBudgetMs);\n const perServerTimeout = Math.max(\n MIN_REVALIDATE_SERVER_TIMEOUT_MS,\n Math.min(REVALIDATE_SERVER_TIMEOUT_MS, this.config.cache.revalidateBudgetMs),\n );\n while (!this.#closed && generation === this.#generation) {\n if (Date.now() > deadline) break;\n const batch: string[] = [];\n while (batch.length < REVALIDATE_CONCURRENCY && this.#revalidateQueue.length > 0) {\n const next = this.#revalidateQueue.shift();\n if (next === undefined) break;\n this.#revalidateQueued.delete(next);\n batch.push(next);\n }\n if (batch.length === 0) break;\n const results = await Promise.allSettled(\n batch.map((server) => this.#fetchServerTools(server, perServerTimeout)),\n );\n results.forEach((result, index) => {\n if (result.status !== \"rejected\") return;\n const server = batch[index];\n if (server === undefined) return;\n // Keep serving last-known tools under failure, marked stale.\n const existing = this.#servers.get(server);\n if (existing) {\n existing.stale = true;\n this.#schedulePersist();\n this.#scheduleNotify();\n }\n });\n }\n }\n\n // Live tool listing for exactly one server; on success updates the working\n // copy and persistence. Used by the background revalidator and by explicit\n // single-server fetches.\n async #fetchServerTools(server: string, timeoutMs?: number): Promise<WorkingServer> {\n const generation = this.#generation;\n const runtime = await this.#getRuntime();\n const listing = runtime.listTools(server, {\n includeSchema: true,\n disableOAuth: this.config.disableOAuth,\n });\n const tools =\n timeoutMs === undefined\n ? await listing\n : await withTimeout(listing, timeoutMs, () => {\n void runtime.close(server).catch(() => undefined);\n });\n if (generation !== this.#generation || this.#closed) {\n throw new Error(`MCP server listing superseded: ${server}`);\n }\n let definition: ServerDefinition;\n try {\n definition = runtime.getDefinition(server);\n } catch {\n this.#pending.delete(server);\n this.#servers.delete(server);\n this.#schedulePersist();\n this.#scheduleNotify();\n throw new Error(`Unknown MCP server: ${server}`);\n }\n const pending = this.#pending.get(server);\n const entry: WorkingServer = {\n definitionHash: hashServerDefinition(definition),\n transport: definition.command.kind,\n description: definition.description ?? null,\n fetchedAt: new Date().toISOString(),\n stale: false,\n ephemeral: pending?.ephemeral ?? false,\n tools,\n };\n this.#servers.set(server, entry);\n this.#pending.delete(server);\n this.#schedulePersist();\n this.#scheduleNotify();\n return entry;\n }\n\n // Resolve a requested (possibly sanitized) name to the raw server name\n // across the working copy, pending set, and \u2014 as a config-only fallback \u2014\n // the runtime's definition list.\n async #resolveKnownServer(requested: string): Promise<string | undefined> {\n if (this.#servers.has(requested) || this.#pending.has(requested)) return requested;\n const known = [...this.#servers.keys(), ...this.#pending.keys()];\n const matches = known.filter((name) => sanitizeMcpRefPart(name) === requested);\n if (matches.length === 1) return matches[0];\n const runtime = await this.#getRuntime();\n const servers = runtime.listServers();\n if (servers.includes(requested)) return requested;\n const sanitized = servers.filter((name) => sanitizeMcpRefPart(name) === requested);\n return sanitized.length === 1 ? sanitized[0] : undefined;\n }\n\n #schedulePersist(): void {\n if (!this.#store || this.#closed) return;\n this.#dirtyPersist = true;\n if (this.#persistTimer) return;\n this.#persistTimer = setTimeout(() => {\n this.#persistTimer = undefined;\n void this.#persistNow().catch(() => undefined);\n }, PERSIST_DEBOUNCE_MS);\n this.#persistTimer.unref?.();\n }\n\n #persistNow(): Promise<void> {\n this.#dirtyPersist = false;\n if (!this.#store) return Promise.resolve();\n const servers: Record<string, CachedMcpServer> = {};\n for (const [name, entry] of this.#servers) {\n if (entry.ephemeral) continue;\n servers[name] = {\n definitionHash: entry.definitionHash,\n transport: entry.transport,\n description: entry.description,\n fetchedAt: entry.fetchedAt,\n stale: entry.stale,\n tools: entry.tools.map((tool) => {\n const annotations = (tool as { annotations?: FabricToolAnnotations }).annotations;\n return {\n name: tool.name,\n ...(tool.description !== undefined ? { description: tool.description } : {}),\n ...(tool.inputSchema !== undefined ? { inputSchema: tool.inputSchema } : {}),\n ...(tool.outputSchema !== undefined ? { outputSchema: tool.outputSchema } : {}),\n ...(annotations !== undefined ? { annotations: { ...annotations } } : {}),\n };\n }),\n };\n }\n return this.#store.save({\n version: MCP_DESCRIPTOR_CACHE_VERSION,\n layers: this.#layerStats,\n updatedAt: new Date().toISOString(),\n servers,\n });\n }\n\n #scheduleNotify(): void {\n if (this.#closed) return;\n this.#dirtyNotify = true;\n if (this.#notifyTimer) return;\n this.#notifyTimer = setTimeout(() => {\n this.#notifyTimer = undefined;\n this.#notifyNow();\n }, NOTIFY_DEBOUNCE_MS);\n this.#notifyTimer.unref?.();\n }\n\n #notifyNow(): void {\n if (!this.#dirtyNotify || this.#closed) return;\n this.#dirtyNotify = false;\n try {\n this.#hooks.onSliceChanged?.(this.sliceDescriptors());\n } catch {\n // Catalog notification must never break the provider.\n }\n }\n\n async #getRuntime(): Promise<Runtime> {\n if (this.#closed) throw new Error(\"MCP provider is closed\");\n if (this.#runtime) return this.#runtime;\n const generation = this.#generation;\n if (this.#runtimeCreation?.generation === generation) {\n return this.#runtimeCreation.promise;\n }\n const promise = import(\"mcporter\")\n .then(({ createRuntime }) => createRuntime({\n rootDir: this.cwd,\n ...(this.config.configPath ? { configPath: this.config.configPath } : {}),\n clientInfo: { name: \"omp-fabric\", version: \"0.1.0\" },\n }))\n .then(async (runtime) => {\n if (this.#closed || generation !== this.#generation) {\n await runtime.close().catch(() => undefined);\n throw new Error(\"MCP runtime creation was superseded\");\n }\n this.#runtime = runtime;\n return runtime;\n });\n const creation = { generation, promise };\n this.#runtimeCreation = creation;\n void promise.finally(() => {\n if (this.#runtimeCreation === creation) this.#runtimeCreation = undefined;\n }).catch(() => undefined);\n return promise;\n }\n\n async #resetRuntime(): Promise<void> {\n this.#generation += 1;\n const runtime = this.#runtime;\n const creation = this.#runtimeCreation?.promise;\n this.#runtime = undefined;\n this.#runtimeCreation = undefined;\n this.#toolMetadata.clear();\n await Promise.allSettled([\n runtime?.close() ?? Promise.resolve(),\n creation?.then(() => undefined, () => undefined) ?? Promise.resolve(),\n ]);\n }\n\n #serverDefinition(args: Record<string, unknown>): ServerDefinition {\n const name = String(args.name ?? \"\").trim();\n if (!/^[a-zA-Z0-9][a-zA-Z0-9._-]*$/.test(name)) {\n throw new Error(\"Dynamic MCP server names may contain letters, numbers, dots, underscores, and hyphens\");\n }\n const description = typeof args.description === \"string\" ? args.description : undefined;\n const env = this.#stringRecord(args.env);\n if (typeof args.command === \"string\" && args.command.trim()) {\n const commandArgs = Array.isArray(args.args)\n ? args.args.filter((value): value is string => typeof value === \"string\")\n : [];\n return {\n name,\n ...(description ? { description } : {}),\n command: {\n kind: \"stdio\",\n command: args.command,\n args: commandArgs,\n cwd: path.resolve(this.cwd, typeof args.cwd === \"string\" ? args.cwd : \".\"),\n },\n ...(env ? { env } : {}),\n };\n }\n if (typeof args.baseUrl === \"string\" && args.baseUrl.trim()) {\n const headers = this.#stringRecord(args.headers);\n return {\n name,\n ...(description ? { description } : {}),\n command: {\n kind: \"http\",\n url: new URL(args.baseUrl),\n ...(headers ? { headers } : {}),\n },\n ...(env ? { env } : {}),\n };\n }\n throw new Error(\"Dynamic MCP registration requires either command or baseUrl\");\n }\n\n #stringRecord(value: unknown): Record<string, string> | undefined {\n if (typeof value !== \"object\" || value === null || Array.isArray(value)) return undefined;\n const entries = Object.entries(value);\n if (entries.some((entry) => typeof entry[1] !== \"string\")) {\n throw new Error(\"MCP environment and header values must be strings\");\n }\n return Object.fromEntries(entries) as Record<string, string>;\n }\n\n #resolveServerName(runtime: Runtime, requested: string): string | undefined {\n const servers = runtime.listServers();\n if (servers.includes(requested)) return requested;\n const matches = servers.filter((server) => sanitizeMcpRefPart(server) === requested);\n return matches.length === 1 ? matches[0] : undefined;\n }\n\n #resolveTool(tools: ServerToolInfo[], requested: string): ServerToolInfo | undefined {\n return (\n tools.find((tool) => tool.name === requested) ??\n tools.find((tool) => sanitizeMcpRefPart(tool.name) === requested)\n );\n }\n\n #parseToolName(actionName: string): { server: string; tool: string } | undefined {\n const separator = actionName.indexOf(\".\");\n if (separator <= 0 || separator === actionName.length - 1) return undefined;\n return { server: actionName.slice(0, separator), tool: actionName.slice(separator + 1) };\n }\n\n #toolDescriptor(server: string, tool: ServerToolInfo): FabricActionDescriptor {\n // mcporter's ServerToolInfo does not declare annotations yet; read them\n // structurally so a runtime that surfaces them flows straight through.\n const annotations = (tool as { annotations?: FabricToolAnnotations }).annotations;\n return {\n name: `${server}.${tool.name}`,\n description: tool.description ?? `${tool.name} on MCP server ${server}`,\n inputSchema: normalizeSchema(tool.inputSchema),\n ...(tool.outputSchema ? { outputSchema: normalizeSchema(tool.outputSchema) } : {}),\n risk: \"network\",\n namespace: server,\n ...(annotations ? { annotations: { ...annotations } } : {}),\n };\n }\n\n // Live-everything path preserved for mcp.cache.enabled: false \u2014 the\n // pre-cache behavior with its 60s in-process metadata TTL.\n async #listLegacy(\n request: FabricProviderListRequest,\n _context: FabricInvocationContext,\n ): Promise<FabricActionDescriptor[]> {\n const runtime = await this.#getRuntime();\n const servers = request.namespace ? [request.namespace] : runtime.listServers();\n const settled = await Promise.allSettled(\n servers.map(async (server) => {\n const tools = await this.#listToolsLegacy(runtime, server);\n return tools.map((tool) => this.#toolDescriptor(server, tool));\n }),\n );\n const descriptors = settled.flatMap((entry) =>\n entry.status === \"fulfilled\" ? entry.value : [],\n );\n const query = request.query?.toLowerCase();\n const filtered = query\n ? descriptors.filter((descriptor) =>\n `${descriptor.name} ${descriptor.description}`.toLowerCase().includes(query),\n )\n : descriptors;\n return request.namespace ? filtered : [...managementDescriptors, ...filtered];\n }\n\n async #describeLegacy(\n actionName: string,\n _context: FabricInvocationContext,\n ): Promise<FabricActionDescriptor | undefined> {\n const parsed = this.#parseToolName(actionName);\n if (!parsed) return undefined;\n const runtime = await this.#getRuntime();\n const server = this.#resolveServerName(runtime, parsed.server);\n if (!server) return undefined;\n const tool = await this.#findToolLegacy(runtime, server, parsed.tool);\n return tool ? this.#toolDescriptor(server, tool) : undefined;\n }\n\n async #callLegacy(\n serverName: string,\n toolName: string,\n args: Record<string, unknown>,\n signal?: AbortSignal,\n ): Promise<unknown> {\n if (signal?.aborted) throw new Error(\"MCP call cancelled\");\n const runtime = await this.#getRuntime();\n const server = this.#resolveServerName(runtime, serverName);\n if (!server) throw new Error(`Unknown MCP server: ${serverName}`);\n const tool = await this.#findToolLegacy(runtime, server, toolName);\n if (signal?.aborted) throw new Error(\"MCP call cancelled\");\n if (!tool) throw new Error(`Unknown MCP tool: ${serverName}.${toolName}`);\n const operation = runtime.callTool(server, tool.name, {\n args,\n timeoutMs: this.config.callTimeoutMs,\n disableOAuth: this.config.disableOAuth,\n });\n try {\n const result = await this.#withAbort(operation, signal, () => runtime.close(server));\n return normalizeMcpResult(result);\n } catch (error) {\n this.#toolMetadata.delete(server);\n throw error;\n }\n }\n\n async #listToolsLegacy(\n runtime: Runtime,\n server: string,\n refresh = false,\n ): Promise<ServerToolInfo[]> {\n const cached = this.#toolMetadata.get(server);\n if (!refresh && cached && cached.expiresAt > Date.now()) return cached.promise;\n const promise = runtime.listTools(server, {\n includeSchema: true,\n disableOAuth: this.config.disableOAuth,\n });\n const entry = { expiresAt: Date.now() + TOOL_METADATA_TTL_MS, promise };\n this.#toolMetadata.set(server, entry);\n try {\n return await promise;\n } catch (error) {\n if (this.#toolMetadata.get(server) === entry) this.#toolMetadata.delete(server);\n throw error;\n }\n }\n\n async #findToolLegacy(\n runtime: Runtime,\n server: string,\n requested: string,\n ): Promise<ServerToolInfo | undefined> {\n const cached = this.#resolveTool(await this.#listToolsLegacy(runtime, server), requested);\n if (cached) return cached;\n return this.#resolveTool(await this.#listToolsLegacy(runtime, server, true), requested);\n }\n}\n", "import type {\n FabricActionDescriptor,\n FabricInvocationContext,\n FabricProvider,\n FabricProviderListRequest,\n} from \"../protocol.js\";\nimport { MeshStore, type MeshIdentity } from \"../mesh/store.js\";\nimport type { FabricParticipantSource } from \"../topology/types.js\";\nimport { FABRIC_PARTICIPANT_LIFECYCLE_TOPIC } from \"../lifecycle/types.js\";\nimport { actionArgNormalizer } from \"./arg-normalization.js\";\n\nconst emptySchema = { type: \"object\", properties: {}, additionalProperties: false };\nconst INTERNAL_STATE_PREFIXES = [\"topology/\", \"sessions/\", \"actors/\", \"residency/\"];\nconst PRIVATE_STATE_PREFIXES = [\"residency/\"];\nconst INTERNAL_CONTROL_PREFIX = \"fabric.control.\";\nconst INTERNAL_HOST_EVENT_TOPIC = \"fabric.actor.host-event\";\n\nconst assertPublicStateKey = (key: string): void => {\n if (INTERNAL_STATE_PREFIXES.some((prefix) => key.startsWith(prefix))) {\n throw new Error(`Fabric mesh key is reserved for host coordination: ${key}`);\n }\n};\n\nconst assertReadableStateKey = (key: string): void => {\n if (PRIVATE_STATE_PREFIXES.some((prefix) => key.startsWith(prefix))) {\n throw new Error(`Fabric mesh key is private host state: ${key}`);\n }\n};\n\nconst descriptors: FabricActionDescriptor[] = [\n {\n name: \"self\",\n description: \"Return this Fabric participant's mesh identity\",\n inputSchema: emptySchema,\n risk: \"read\",\n namespace: \"coordination\",\n },\n {\n name: \"publish\",\n description: \"Append a durable event to a mesh topic, optionally addressed to one actor\",\n inputSchema: {\n type: \"object\",\n properties: {\n topic: { type: \"string\" },\n kind: { type: \"string\" },\n to: { type: \"string\" },\n text: { type: \"string\" },\n data: {},\n },\n required: [\"topic\"],\n additionalProperties: false,\n },\n risk: \"agent\",\n namespace: \"coordination\",\n },\n {\n name: \"read\",\n description: \"Read durable mesh events after a sequence cursor\",\n inputSchema: {\n type: \"object\",\n properties: {\n after: { type: \"number\", minimum: 0 },\n topic: { type: \"string\" },\n to: { type: \"string\" },\n limit: { type: \"number\", minimum: 1 },\n },\n additionalProperties: false,\n },\n risk: \"read\",\n namespace: \"coordination\",\n },\n {\n name: \"members\",\n description: \"List roots, agents, and actors in the unified project participant directory\",\n inputSchema: {\n type: \"object\",\n properties: {\n scope: { type: \"string\", enum: [\"local\", \"lineage\", \"project\"] },\n kinds: {\n type: \"array\",\n items: { type: \"string\", enum: [\"root\", \"agent\", \"actor\"] },\n },\n includeStale: { type: \"boolean\" },\n limit: { type: \"number\", minimum: 1 },\n },\n additionalProperties: false,\n },\n risk: \"read\",\n namespace: \"coordination\",\n },\n {\n name: \"get\",\n description: \"Read a versioned value from shared mesh state\",\n inputSchema: {\n type: \"object\",\n properties: { key: { type: \"string\" } },\n required: [\"key\"],\n additionalProperties: false,\n },\n risk: \"read\",\n namespace: \"coordination\",\n },\n {\n name: \"list\",\n description: \"List shared mesh state by key prefix\",\n inputSchema: {\n type: \"object\",\n properties: {\n prefix: { type: \"string\" },\n limit: { type: \"number\", minimum: 1 },\n },\n additionalProperties: false,\n },\n risk: \"read\",\n namespace: \"coordination\",\n },\n {\n name: \"put\",\n description: \"Write shared mesh state, optionally with compare-and-swap version checking\",\n inputSchema: {\n type: \"object\",\n properties: {\n key: { type: \"string\" },\n value: {},\n ifVersion: { type: \"number\", minimum: 0 },\n },\n required: [\"key\", \"value\"],\n additionalProperties: false,\n },\n risk: \"agent\",\n namespace: \"coordination\",\n },\n {\n name: \"delete\",\n description: \"Delete shared mesh state, optionally with compare-and-swap version checking\",\n inputSchema: {\n type: \"object\",\n properties: {\n key: { type: \"string\" },\n ifVersion: { type: \"number\", minimum: 0 },\n },\n required: [\"key\"],\n additionalProperties: false,\n },\n risk: \"agent\",\n namespace: \"coordination\",\n },\n];\n\n\n\n// Argument repair derives from the action schemas plus the shared synonym\n// lexicon; no mesh-specific table remains.\nexport const normalizeMeshArgs = actionArgNormalizer(() => descriptors);\n\nexport class MeshProvider implements FabricProvider {\n readonly name = \"mesh\";\n readonly description =\n \"Durable topics and compare-and-swap shared state for emergent agent coordination\";\n\n constructor(\n readonly store: MeshStore,\n readonly identity: MeshIdentity,\n readonly participants: FabricParticipantSource,\n ) {}\n\n async list(\n request: FabricProviderListRequest,\n _context: FabricInvocationContext,\n ): Promise<FabricActionDescriptor[]> {\n const query = request.query?.toLowerCase();\n return query\n ? descriptors.filter((descriptor) =>\n `${descriptor.name} ${descriptor.description}`.toLowerCase().includes(query),\n )\n : descriptors;\n }\n\n async describe(\n actionName: string,\n _context: FabricInvocationContext,\n ): Promise<FabricActionDescriptor | undefined> {\n return descriptors.find((descriptor) => descriptor.name === actionName);\n }\n\n prepareArguments(\n actionName: string,\n args: Record<string, unknown>,\n ): Record<string, unknown> {\n return normalizeMeshArgs(actionName, args);\n }\n\n async invoke(\n actionName: string,\n args: Record<string, unknown>,\n _context: FabricInvocationContext,\n ): Promise<unknown> {\n switch (actionName) {\n case \"self\":\n return this.identity;\n case \"publish\": {\n const topic = String(args.topic);\n if (\n topic.startsWith(INTERNAL_CONTROL_PREFIX) ||\n topic === INTERNAL_HOST_EVENT_TOPIC ||\n topic === FABRIC_PARTICIPANT_LIFECYCLE_TOPIC\n ) {\n throw new Error(`Fabric mesh topic is reserved for host coordination: ${topic}`);\n }\n return this.store.publish({\n topic,\n from: this.identity,\n ...(typeof args.kind === \"string\" ? { kind: args.kind } : {}),\n ...(typeof args.to === \"string\" ? { to: args.to } : {}),\n ...(typeof args.text === \"string\" ? { text: args.text } : {}),\n ...(args.data !== undefined ? { data: args.data } : {}),\n });\n }\n case \"read\":\n return this.store.read({\n ...(typeof args.after === \"number\" ? { after: args.after } : {}),\n ...(typeof args.topic === \"string\" ? { topic: args.topic } : {}),\n ...(typeof args.to === \"string\" ? { to: args.to } : {}),\n ...(typeof args.limit === \"number\" ? { limit: args.limit } : {}),\n });\n case \"members\": {\n const kinds = Array.isArray(args.kinds)\n ? args.kinds.filter(\n (kind): kind is \"root\" | \"agent\" | \"actor\" =>\n kind === \"root\" || kind === \"agent\" || kind === \"actor\",\n )\n : undefined;\n const scope =\n args.scope === \"local\" || args.scope === \"lineage\" || args.scope === \"project\"\n ? args.scope\n : \"project\";\n const limit = Math.max(1, Math.floor(typeof args.limit === \"number\" ? args.limit : 100));\n return this.participants\n .list({\n scope,\n ...(kinds ? { kinds } : {}),\n ...(args.includeStale === true ? { includeStale: true } : {}),\n })\n .slice(0, limit);\n }\n case \"get\": {\n const key = String(args.key);\n assertReadableStateKey(key);\n return this.store.get(key) ?? null;\n }\n case \"list\": {\n const prefix = typeof args.prefix === \"string\" ? args.prefix : \"\";\n assertReadableStateKey(prefix);\n const limit = Math.max(\n 1,\n Math.min(\n Math.floor(typeof args.limit === \"number\" ? args.limit : 100),\n this.store.maxReadEvents,\n ),\n );\n return this.store\n .listAll(prefix)\n .filter(\n (entry) =>\n !PRIVATE_STATE_PREFIXES.some((privatePrefix) =>\n entry.key.startsWith(privatePrefix),\n ),\n )\n .slice(0, limit);\n }\n case \"put\": {\n const key = String(args.key);\n assertPublicStateKey(key);\n return this.store.put({\n key,\n value: args.value,\n identity: this.identity,\n ...(typeof args.ifVersion === \"number\" ? { ifVersion: args.ifVersion } : {}),\n });\n }\n case \"delete\": {\n const key = String(args.key);\n assertPublicStateKey(key);\n return this.store.delete({\n key,\n ...(typeof args.ifVersion === \"number\" ? { ifVersion: args.ifVersion } : {}),\n });\n }\n default:\n throw new Error(`Unknown mesh action: ${actionName}`);\n }\n }\n}\n", "import { mkdtempSync, readFileSync, writeFileSync } from \"node:fs\";\nimport os from \"node:os\";\nimport path from \"node:path\";\nimport { randomUUID } from \"node:crypto\";\nimport { BashTool } from \"@oh-my-pi/pi-coding-agent/tools/bash\";\nimport { EditTool } from \"@oh-my-pi/pi-coding-agent/edit\";\nimport { ReadTool } from \"@oh-my-pi/pi-coding-agent/tools/read\";\nimport { Settings, type ToolSession } from \"@oh-my-pi/pi-coding-agent\";\nimport {\n createFindToolDefinition,\n createGrepToolDefinition,\n createLsToolDefinition,\n type ToolDefinition,\n} from \"@oh-my-pi/pi-coding-agent/extensibility/legacy-pi-coding-agent-shim\";\nimport type { AgentToolResult } from \"@oh-my-pi/pi-agent-core\";\nimport type { ExtensionContext, ExtensionRunner } from \"@oh-my-pi/pi-coding-agent\";\nimport { tryExecuteGitWorktreeAdd } from \"../agents/bash-worktree-add.js\";\nimport { runAbortable, throwIfAborted } from \"../async-settlement.js\";\nimport { CapturedToolCatalog } from \"../capture/catalog.js\";\nimport {\n isOmpShellToolName,\n OMP_CORE_TOOL_NAMES,\n type OmpCoreToolName,\n} from \"../core/omp-tools.js\";\nimport { classifyOmpBashError, ompBashExitError, ompBashResultError, stripOmpBashTiming } from \"../core/omp-bash-error.js\";\nimport { expandSkillDirMarkersForRead } from \"../core/skill-dir.js\";\nimport type {\n FabricActionDescriptor,\n FabricInvocationContext,\n FabricMediaBlock,\n FabricProvider,\n FabricProviderListRequest,\n FabricRisk,\n} from \"../protocol.js\";\nimport { countContentLines } from \"../ui/preview-lines.js\";\nimport { CapturedToolsProvider } from \"./captured-tools-provider.js\";\nimport { BashCwdDefinitions, OMP_BASH_CWD_KEY, resolveShellCwdArgument, withShellCwdSchema } from \"./omp-bash-cwd.js\";\nimport { writeContentForPreview } from \"./write-diff-limits.js\";\nimport { createPreviewWriteToolDefinition } from \"./write-preview.js\";\n\nimport { readChildToolAllowlist } from \"../core/child-tool-allowlist.js\";\n\nconst MAX_RENDERER_ARGUMENT_CHARS = 200_000;\nconst MAX_REPLACE_ALL_FILE_CHARS = 2_000_000;\nconst createNativeSession = (cwd: string, artifactPaths?: Map<string, string>): ToolSession => {\n const artifactRoot = artifactPaths\n ? mkdtempSync(path.join(os.tmpdir(), \"omp-fabric-bash-\"))\n : undefined;\n return {\n cwd,\n hasUI: false,\n hasEditTool: false,\n getSessionFile: () => null,\n getSessionSpawns: () => null,\n settings: Settings.isolated({ readLineNumbers: false }),\n ...(artifactRoot && artifactPaths\n ? {\n allocateOutputArtifact: async (toolType: string) => {\n const id = randomUUID();\n const artifactPath = path.join(artifactRoot, `${toolType}-${id}.log`);\n writeFileSync(artifactPath, \"\", { mode: 0o600 });\n artifactPaths.set(id, artifactPath);\n return { id, path: artifactPath };\n },\n }\n : {}),\n };\n};\n\ntype NativeTool = {\n name: string;\n label: string;\n description: string;\n parameters: unknown;\n execute: (...args: unknown[]) => Promise<AgentToolResult>;\n};\n\nconst nativeDefinition = (tool: NativeTool): ToolDefinition<any, any> => {\n const execute: ToolDefinition<any, any>[\"execute\"] = (toolCallId, params, signal, onUpdate, context) =>\n tool.execute(toolCallId, params, signal, onUpdate, context);\n return {\n name: tool.name,\n label: tool.label,\n description: tool.description,\n parameters: tool.parameters as ToolDefinition<any, any>[\"parameters\"],\n execute,\n };\n};\n\nconst createNativeBashToolDefinition = (cwd: string, artifactPaths: Map<string, string>): ToolDefinition<any, any> =>\n nativeDefinition(new BashTool(createNativeSession(cwd, artifactPaths)) as unknown as NativeTool);\n\nconst createNativeReadToolDefinition = (cwd: string): ToolDefinition<any, any> =>\n nativeDefinition(new ReadTool(createNativeSession(cwd)) as unknown as NativeTool);\n\nconst createNativeReplaceEditToolDefinition = (cwd: string): ToolDefinition<any, any> =>\n nativeDefinition(new EditTool(createNativeSession(cwd), \"replace\") as unknown as NativeTool);\n\nconst normalizeEditArguments = (\n args: Record<string, unknown>,\n replaceAll: boolean,\n cwd: string,\n): Record<string, unknown> => {\n const filePath = args.path;\n if (typeof filePath !== \"string\") throw new Error(\"omp.edit requires a path\");\n if (typeof args.old_string === \"string\" && typeof args.new_string === \"string\") return args;\n const rawEdits = Array.isArray(args.edits)\n ? args.edits\n : [{ oldText: args.oldText, newText: args.newText, all: replaceAll }];\n if (rawEdits.length === 0) throw new Error(\"omp.edit requires at least one edit\");\n const edits = rawEdits.map((edit, index) => {\n if (typeof edit !== \"object\" || edit === null || Array.isArray(edit)) {\n throw new Error(`omp.edit edits[${index}] must be an object`);\n }\n const record = edit as Record<string, unknown>;\n const oldString = record.old_string ?? record.oldText ?? record.old;\n const newString = record.new_string ?? record.newText ?? record.new ?? record.replacement;\n if (typeof oldString !== \"string\" || typeof newString !== \"string\") {\n throw new Error(`omp.edit edits[${index}] requires old and new text strings`);\n }\n return {\n old_string: oldString,\n new_string: newString,\n ...(replaceAll || record.all === true || record.replace_all === true ? { replace_all: true } : {}),\n };\n });\n const resolvedPath = path.resolve(cwd, filePath.startsWith(\"@\") ? filePath.slice(1) : filePath);\n const current = readFileSync(resolvedPath, \"utf8\");\n if (current.length > MAX_REPLACE_ALL_FILE_CHARS) {\n throw new Error(`omp.edit refuses files over ${MAX_REPLACE_ALL_FILE_CHARS} characters`);\n }\n let next = current;\n for (const [index, edit] of edits.entries()) {\n const occurrences = next.split(edit.old_string).length - 1;\n if (occurrences === 0) throw new Error(`omp.edit edits[${index}] oldText was not found`);\n if (!edit.replace_all && occurrences !== 1) {\n throw new Error(`omp.edit edits[${index}] found ${occurrences} occurrences; add all:true or use a unique anchor`);\n }\n next = edit.replace_all ? next.replaceAll(edit.old_string, edit.new_string) : next.replace(edit.old_string, edit.new_string);\n }\n return { path: filePath, edits };\n};\n\n\nconst EDIT_COMPATIBILITY_SCHEMA = {\n type: \"object\",\n properties: {\n path: { type: \"string\" },\n oldText: { type: \"string\" },\n newText: { type: \"string\" },\n old_string: { type: \"string\" },\n new_string: { type: \"string\" },\n replacement: { type: \"string\" },\n old: { type: \"string\" },\n new: { type: \"string\" },\n all: { type: \"boolean\" },\n replace_all: { type: \"boolean\" },\n edits: { type: \"array\", items: { type: \"object\" } },\n },\n required: [\"path\"],\n anyOf: [\n { required: [\"oldText\", \"newText\"] },\n { required: [\"old_string\", \"new_string\"] },\n { required: [\"edits\"] },\n ],\n additionalProperties: false,\n};\n\nconst readTools = new Set<OmpCoreToolName>([\"read\", \"grep\", \"find\", \"ls\"]);\nconst writeTools = new Set<OmpCoreToolName>([\"edit\", \"write\"]);\n\n// The content array every OMP core tool returns: text and/or image blocks.\ntype ToolContent = AgentToolResult<unknown>[\"content\"];\n\nconst riskForTool = (name: OmpCoreToolName): FabricRisk => {\n if (readTools.has(name)) return \"read\";\n if (writeTools.has(name)) return \"write\";\n return \"execute\";\n};\n\nconst textContent = (content: ToolContent): string =>\n content\n .filter((part): part is { type: \"text\"; text: string } => part.type === \"text\")\n .map((part) => part.text)\n .join(\"\\n\");\n\nconst imageBlocks = (content: unknown): FabricMediaBlock[] => {\n if (!Array.isArray(content)) return [];\n const blocks: FabricMediaBlock[] = [];\n for (const part of content) {\n if (\n typeof part === \"object\" &&\n part !== null &&\n (part as { type?: unknown }).type === \"image\" &&\n typeof (part as { data?: unknown }).data === \"string\" &&\n typeof (part as { mimeType?: unknown }).mimeType === \"string\"\n ) {\n blocks.push({\n type: \"image\",\n data: (part as { data: string }).data,\n mimeType: (part as { mimeType: string }).mimeType,\n });\n }\n }\n return blocks;\n};\n\nconst resultHasTruncation = (details: unknown): boolean => {\n if (details === null || typeof details !== \"object\" || Array.isArray(details)) return false;\n const meta = Reflect.get(details, \"meta\");\n const candidates = [Reflect.get(details, \"truncation\"), meta && typeof meta === \"object\" ? Reflect.get(meta, \"truncation\") : undefined];\n return candidates.some((truncation) =>\n truncation !== null && typeof truncation === \"object\" && !Array.isArray(truncation)\n && typeof Reflect.get(truncation, \"truncatedBy\") === \"string\",\n );\n};\n\nconst resultExitCode = (details: unknown): number | undefined => {\n if (details === null || typeof details !== \"object\" || Array.isArray(details)) return undefined;\n const exitCode = Reflect.get(details, \"exitCode\");\n return Number.isSafeInteger(exitCode) && exitCode > 0 ? exitCode : undefined;\n};\nconst normalizeResult = (\n name: OmpCoreToolName,\n result: { content: ToolContent; details?: unknown; isError?: boolean },\n artifactPaths?: ReadonlyMap<string, string>,\n appendReadNewline = true,\n): unknown => {\n const text = isOmpShellToolName(name)\n ? stripOmpBashTiming(textContent(result.content))\n : textContent(result.content);\n if (result.isError && !resultHasTruncation(result.details)) throw new Error(text || `${name} failed`);\n if (name === \"read\") {\n return appendReadNewline && text.length > 0 && !text.endsWith(\"\\n\") ? `${text}\\n` : text;\n }\n if (name === \"grep\" || name === \"find\" || name === \"ls\") return text;\n let details = result.details;\n if (isOmpShellToolName(name) && details && typeof details === \"object\" && !Array.isArray(details)) {\n const detailRecord = details as Record<string, unknown>;\n const meta = detailRecord.meta;\n const metaRecord = meta && typeof meta === \"object\" && !Array.isArray(meta)\n ? meta as Record<string, unknown>\n : undefined;\n const truncation = detailRecord.truncation ?? metaRecord?.truncation;\n if (truncation && typeof truncation === \"object\" && !Array.isArray(truncation)) {\n const truncationRecord = truncation as Record<string, unknown>;\n const artifactId = truncationRecord.artifactId;\n const fullOutputPath = typeof artifactId === \"string\" ? artifactPaths?.get(artifactId) : undefined;\n details = {\n ...detailRecord,\n truncation: { ...truncationRecord, truncated: true },\n ...(fullOutputPath ? { fullOutputPath } : {}),\n };\n }\n }\n if (name === \"write\" && details && typeof details === \"object\" && !Array.isArray(details)) {\n const { codePreviewBeforeWrite: _before, ...publicDetails } = details as Record<string, unknown>;\n details = Object.keys(publicDetails).length > 0 ? publicDetails : undefined;\n }\n return { ok: true, output: text, details: details ?? null };\n};\n\n// Shape of an OMP core tool's execute() result. AgentToolResult<unknown> is\n// { content, details, terminate? }; OMP core tools throw on error rather than\n// returning isError, so isError is tracked separately in #invokeWithEvents.\ninterface OmpToolResult {\n content: ToolContent;\n details: unknown;\n isError?: boolean;\n terminate?: boolean;\n}\n\nexport class OmpToolsProvider implements FabricProvider {\n static async create(\n cwd: string,\n catalog?: CapturedToolCatalog,\n capturedTools?: CapturedToolsProvider,\n ): Promise<OmpToolsProvider> {\n return new OmpToolsProvider(cwd, catalog, capturedTools);\n }\n readonly name = \"omp\";\n readonly description = \"OMP's built-in coding tools\";\n readonly #allowedTools = readChildToolAllowlist();\n readonly #tools: Partial<Record<OmpCoreToolName, ToolDefinition<any, any>>>;\n readonly #catalog: CapturedToolCatalog | undefined;\n readonly #capturedTools: CapturedToolsProvider | undefined;\n readonly #cwd: string;\n readonly #artifactPaths = new Map<string, string>();\n readonly #bashDefinitions = new BashCwdDefinitions();\n\n constructor(\n cwd: string,\n catalog?: CapturedToolCatalog,\n capturedTools?: CapturedToolsProvider,\n ) {\n this.#cwd = cwd;\n this.#tools = {\n read: createNativeReadToolDefinition(cwd),\n bash: createNativeBashToolDefinition(cwd, this.#artifactPaths),\n edit: createNativeReplaceEditToolDefinition(cwd),\n write: createPreviewWriteToolDefinition(cwd),\n grep: createGrepToolDefinition(cwd),\n find: createFindToolDefinition(cwd),\n ls: createLsToolDefinition(cwd),\n };\n this.#catalog = catalog;\n this.#capturedTools = capturedTools;\n }\n\n async list(\n request: FabricProviderListRequest,\n _context: FabricInvocationContext,\n ): Promise<FabricActionDescriptor[]> {\n const query = request.query?.toLowerCase();\n const descriptors = await Promise.all(\n OMP_CORE_TOOL_NAMES.map((name) => this.describe(name, _context)),\n );\n return descriptors\n .filter((descriptor): descriptor is FabricActionDescriptor => descriptor !== undefined)\n .filter((descriptor) =>\n query ? `${descriptor.name} ${descriptor.description}`.toLowerCase().includes(query) : true,\n );\n }\n\n async describe(\n actionName: string,\n _context: FabricInvocationContext,\n ): Promise<FabricActionDescriptor | undefined> {\n const name = actionName as OmpCoreToolName;\n if (this.#allowedTools && !this.#allowedTools.has(name)) return undefined;\n const tool = this.#tools[name];\n if (!tool) return undefined;\n const override = await this.#capturedTools?.describe(name, _context);\n if (override) return { ...override, namespace: \"extension-override\" };\n return this.#descriptor(name, tool);\n }\n\n prepareArguments(actionName: string, args: Record<string, unknown>): Record<string, unknown> {\n this.#assertAllowed(actionName);\n if (this.#catalog?.get(actionName)) {\n return this.#capturedTools!.prepareArguments(actionName, args);\n }\n const tool = this.#tools[actionName as OmpCoreToolName];\n if (!tool) return args;\n const prepared = args;\n if (typeof prepared !== \"object\" || prepared === null || Array.isArray(prepared)) {\n throw new Error(`OMP tool ${actionName} prepared non-object arguments`);\n }\n const record = prepared as Record<string, unknown>;\n if (isOmpShellToolName(actionName)) {\n const shellArgs = Object.hasOwn(args, OMP_BASH_CWD_KEY)\n ? { ...record, [OMP_BASH_CWD_KEY]: args[OMP_BASH_CWD_KEY] }\n : record;\n return resolveShellCwdArgument(actionName, this.#cwd, shellArgs);\n }\n return actionName === \"edit\" ? normalizeEditArguments(record, args.all === true, this.#cwd) : record;\n }\n\n #assertAllowed(name: string): void {\n if (this.#allowedTools && !this.#allowedTools.has(name)) {\n throw new Error(`OMP tool ${name} is not permitted by this child's tool allowlist`);\n }\n }\n\n // Keep a cwd-bound definition for hosts without argument preparation, while newer hosts receive the\n // same directory through ExtensionContext.cwd. `cwd` also stays in the\n // arguments so lifecycle events, approval, and previews see it.\n #definitionFor(\n name: OmpCoreToolName,\n args: Record<string, unknown>,\n ): ToolDefinition<any, any> {\n const tool = this.#tools[name];\n if (!tool) throw new Error(`Unknown OMP tool: ${name}`);\n if (!isOmpShellToolName(name)) return tool;\n const cwd = args[OMP_BASH_CWD_KEY];\n if (typeof cwd !== \"string\") return tool;\n return this.#bashDefinitions.get(cwd);\n }\n\n #executionContextFor(\n name: OmpCoreToolName,\n args: Record<string, unknown>,\n context: ExtensionContext,\n ): ExtensionContext {\n const cwd = args[OMP_BASH_CWD_KEY];\n return isOmpShellToolName(name) && typeof cwd === \"string\"\n ? { ...context, cwd }\n : context;\n }\n\n async invoke(\n actionName: string,\n args: Record<string, unknown>,\n context: FabricInvocationContext,\n ): Promise<unknown> {\n const name = actionName as OmpCoreToolName;\n this.#assertAllowed(name);\n if (!this.#tools[name]) throw new Error(`Unknown OMP tool: ${actionName}`);\n if (name === \"bash\") {\n const intercepted = await tryExecuteGitWorktreeAdd(args, this.#cwd);\n if (intercepted) {\n this.#attachPreview(name, intercepted, args, context);\n return this.#normalizeResult(name, intercepted, args);\n }\n }\n // A captured extension override (e.g. an extension that registered a \"read\"\n // tool) already replays the full event lifecycle itself via\n // CapturedToolsProvider, so delegate to it unchanged.\n if (this.#catalog?.get(name)) {\n const result = await this.#capturedTools!.invoke(name, args, context);\n this.#attachReadMedia(name, result, context);\n this.#attachReadNote(name, result, context);\n return this.#normalizeResult(name, result, args, false);\n }\n const tool = this.#definitionFor(name, args);\n const runner = this.#catalog?.runner;\n // Without a runner (e.g. before the first tool refresh populated the\n // catalog) fall back to a direct execute \u2014 no extension hooks fire, but\n // the call still works. Once tools are refreshed the runner is available.\n if (!runner) {\n const result = await runAbortable(context.signal, () =>\n tool.execute(\n context.nestedToolCallId,\n args,\n context.signal,\n (partialResult) => this.#attachPartialPreview(name, partialResult, args, context),\n this.#executionContextFor(name, args, context.extensionContext),\n ),\n ).catch((error) => {\n throwIfAborted(context.signal);\n throw isOmpShellToolName(name) ? classifyOmpBashError(error) : error;\n });\n if (name === \"bash\" && result.isError && !resultHasTruncation(result.details)) {\n const exitCode = resultExitCode(result.details);\n if (exitCode !== undefined) throw ompBashExitError(exitCode, textContent(result.content));\n }\n this.#attachReadMedia(name, result, context);\n this.#attachReadNote(name, result, context);\n this.#attachPreview(name, result, args, context);\n return this.#normalizeResult(name, result, args);\n }\n return this.#invokeWithEvents(name, tool, args, context, runner);\n }\n\n // Replay the agent-core tool-execution lifecycle for a nested omp.* call, so\n // extensions that hook tool_call / tool_result / tool_execution_* see OMP\n // core tools invoked through fabric_exec in full-code mode \u2014 exactly as\n // they would for a top-level call in the normal (non-codemode) flow, and\n // exactly as CapturedToolsProvider already does for captured extension\n // tools. tool_result patches (content/details/isError) are applied, so\n // extensions like pi-vision-handoff can replace image blocks with text\n // descriptions before the result returns to the sandbox.\n async #invokeWithEvents(\n name: OmpCoreToolName,\n tool: ToolDefinition<any, any>,\n args: Record<string, unknown>,\n context: FabricInvocationContext,\n runner: ExtensionRunner,\n ): Promise<unknown> {\n const toolCallId = context.nestedToolCallId;\n await runAbortable(context.signal, () => runner.emit({\n type: \"tool_execution_start\",\n toolCallId,\n toolName: name,\n args,\n }));\n let result: OmpToolResult;\n let isError = false;\n let thrown: unknown;\n let executionStarted = false;\n let updateTail: Promise<void> = Promise.resolve();\n try {\n const preflight = await runAbortable(context.signal, () => runner.emitToolCall({\n type: \"tool_call\",\n toolName: name,\n toolCallId,\n input: args,\n }));\n context.updateArguments?.(args);\n if (preflight?.block) {\n throw new Error(preflight.reason || `OMP tool ${name} was blocked`);\n }\n executionStarted = true;\n result = (await runAbortable(context.signal, () => tool.execute(\n toolCallId,\n args,\n context.signal,\n (partialResult) => {\n this.#attachPartialPreview(name, partialResult, args, context);\n updateTail = updateTail\n .then(() =>\n runAbortable(context.signal, () => runner.emit({\n type: \"tool_execution_update\",\n toolCallId,\n toolName: name,\n args,\n partialResult,\n })),\n )\n .catch(() => undefined);\n },\n this.#executionContextFor(name, args, context.extensionContext),\n ))) as OmpToolResult;\n isError = result.isError === true;\n } catch (error) {\n thrown = isOmpShellToolName(name) && executionStarted ? classifyOmpBashError(error) : error;\n isError = true;\n result = {\n content: [\n { type: \"text\", text: error instanceof Error ? error.message : String(error) },\n ],\n details: undefined,\n };\n }\n\n await updateTail;\n throwIfAborted(context.signal);\n\n // Capture the read's image blocks BEFORE any tool_result patch \u2014\n // pi-vision-handoff swaps image\u2192description here, which would leave\n // nothing to re-attach for the kitty preview.\n this.#attachReadMedia(name, result, context);\n\n const patch = await runAbortable(context.signal, () => runner.emitToolResult({\n type: \"tool_result\",\n toolName: name,\n toolCallId,\n input: args,\n content: result.content,\n details: result.details,\n isError,\n }));\n if (patch) {\n result = {\n ...result,\n content: patch.content ?? result.content,\n ...(patch.details !== undefined ? { details: patch.details } : {}),\n ...(patch.isError !== undefined ? { isError: patch.isError } : {}),\n };\n isError = patch.isError ?? isError;\n }\n\n // Capture the read's clean text note AFTER the patch \u2014 the handoff strips\n // OMP's non-vision note and swaps the image for a description, so the first\n // surviving text block is the short read note (not the verbose description).\n this.#attachReadNote(name, result, context);\n\n await runAbortable(context.signal, () => runner.emit({\n type: \"tool_execution_end\",\n toolCallId,\n toolName: name,\n result,\n isError,\n }));\n\n if (isError) {\n if (isOmpShellToolName(name)) {\n if (thrown === undefined && !resultHasTruncation(result.details)) {\n const exitCode = resultExitCode(result.details);\n if (exitCode !== undefined) throw ompBashExitError(exitCode, textContent(result.content));\n }\n throw ompBashResultError(thrown, textContent(result.content));\n }\n const text = textContent(result.content).trim();\n throw new Error(text || (thrown instanceof Error ? thrown.message : `OMP tool ${name} failed`));\n }\n this.#attachPreview(name, result, args, context);\n return this.#normalizeResult(name, result, args, patch?.content === undefined);\n }\n\n // Schema-enforce and early-startup calls may have no ExtensionRunner, so the\n // top-level tool_result marker middleware cannot run. Expand again at the\n // provider boundary; replacement is idempotent when middleware already ran.\n #normalizeResult(\n name: OmpCoreToolName,\n result: { content: ToolContent; details?: unknown; isError?: boolean },\n args: Record<string, unknown>,\n appendReadNewline = true,\n ): unknown {\n const normalized = normalizeResult(name, result, this.#artifactPaths, appendReadNewline);\n if (name !== \"read\" || typeof normalized !== \"string\") return normalized;\n return expandSkillDirMarkersForRead(normalized, args, this.#cwd);\n }\n\n #attachPartialPreview(\n name: OmpCoreToolName,\n partialResult: { content: ToolContent; details?: unknown; isError?: boolean },\n args: Record<string, unknown>,\n context: FabricInvocationContext,\n ): void {\n const progress = textContent(partialResult.content).trim();\n const boundedProgress = Array.from(progress).slice(-4_000).join(\"\");\n const bashCommand =\n isOmpShellToolName(name) &&\n typeof args.command === \"string\" &&\n args.command.length <= MAX_RENDERER_ARGUMENT_CHARS\n ? args.command\n : undefined;\n context.attachPreview?.({\n result: boundedProgress,\n ...(bashCommand !== undefined ? { bashCommand } : {}),\n });\n context.update(`${name}: ${boundedProgress.slice(-500) || \"running\"}`);\n }\n\n #attachPreview(\n name: OmpCoreToolName,\n result: { content: ToolContent; details?: unknown; isError?: boolean },\n args: Record<string, unknown>,\n context: FabricInvocationContext,\n ): void {\n if (result.isError) return;\n const details = result.details;\n const detailRecord =\n typeof details === \"object\" && details !== null && !Array.isArray(details)\n ? (details as Record<string, unknown>)\n : undefined;\n const bashCommand =\n isOmpShellToolName(name) &&\n typeof args.command === \"string\" &&\n args.command.length <= MAX_RENDERER_ARGUMENT_CHARS\n ? args.command\n : undefined;\n const writeInput =\n name === \"write\" && typeof args.content === \"string\" ? args.content : undefined;\n const writeContent =\n writeInput !== undefined ? writeContentForPreview(writeInput) : undefined;\n const writeByteLength =\n writeInput !== undefined ? Buffer.byteLength(writeInput, \"utf8\") : undefined;\n const writeLineCount =\n writeInput !== undefined ? countContentLines(writeInput) : undefined;\n const hasWriteBefore =\n name === \"write\" &&\n detailRecord !== undefined &&\n Object.prototype.hasOwnProperty.call(detailRecord, \"codePreviewBeforeWrite\");\n context.attachPreview?.({\n result: normalizeResult(name, result),\n ...(bashCommand !== undefined ? { bashCommand } : {}),\n ...(writeContent !== undefined ? { writeContent } : {}),\n ...(writeByteLength !== undefined ? { writeByteLength } : {}),\n ...(writeLineCount !== undefined ? { writeLineCount } : {}),\n ...(details !== undefined ? { details } : {}),\n ...(hasWriteBefore\n ? {\n codePreviewBeforeWrite: detailRecord?.codePreviewBeforeWrite,\n writeBeforeCaptured: true,\n }\n : {}),\n });\n }\n\n // `omp.read` of an image file returns `{ type: \"image\" }` content blocks.\n // normalizeResult strips them \u2014 the sandbox holds text only and the model\n // return is a string \u2014 but the single-call render wants them re-attached so\n // OMP core's ToolExecutionComponent renders the kitty image preview, the same\n // path a native `read` takes. Hand them out-of-band via context.attachMedia,\n // which the ActionRegistry stashes on the call audit; this bypasses the\n // result char bound that would otherwise truncate the base64 payload.\n //\n // Must run BEFORE any tool_result patch: pi-vision-handoff SWAPS image blocks\n // for text descriptions here (so the description becomes the sandbox value),\n // which would leave no image to capture. Capturing the original blocks lets\n // the single-call render show the kitty image, and the handoff's `context`\n // hook supplies the description to the model \u2014 exactly how a native `read`\n // keeps its image for kitty and swaps it only on the LLM-bound clone.\n #attachReadMedia(\n name: OmpCoreToolName,\n result: { content?: unknown },\n context: FabricInvocationContext,\n ): void {\n if (name !== \"read\") return;\n const blocks = imageBlocks(result?.content);\n if (blocks.length > 0) context.attachMedia?.(blocks);\n }\n\n // The read tool's own text note (e.g. \"Read image file [image/png]\"), captured\n // AFTER any tool_result patch \u2014 pi-vision-handoff swaps image\u2192description and\n // strips OMP's \"[Current model does not support images\u2026]\" note there, so the\n // first surviving text block is the clean note. Used as the single-call body\n // and content text so the preview shows the kitty image + the clean note\n // instead of the handoff's verbose description; the model still receives the\n // description via the handoff's `context` hook swapping the image block.\n #attachReadNote(\n name: OmpCoreToolName,\n result: { content?: unknown },\n context: FabricInvocationContext,\n ): void {\n if (name !== \"read\") return;\n const content = result?.content;\n if (!Array.isArray(content)) return;\n for (const block of content) {\n if (\n typeof block === \"object\" &&\n block !== null &&\n (block as { type?: unknown }).type === \"text\" &&\n typeof (block as { text?: unknown }).text === \"string\"\n ) {\n context.attachMedia?.([], (block as { text: string }).text);\n return;\n }\n }\n }\n\n #descriptor(\n name: OmpCoreToolName,\n tool: ToolDefinition<any, any>,\n ): FabricActionDescriptor {\n const sourceSchema = tool.parameters;\n const document = name === \"edit\"\n ? EDIT_COMPATIBILITY_SCHEMA\n : typeof sourceSchema === \"function\" && \"toJsonSchema\" in sourceSchema\n && typeof sourceSchema.toJsonSchema === \"function\"\n ? sourceSchema.toJsonSchema()\n : sourceSchema;\n const augmented = isOmpShellToolName(name) ? withShellCwdSchema(document) : document;\n const inputSchema = typeof augmented === \"function\" && \"toJsonSchema\" in augmented\n && typeof augmented.toJsonSchema === \"function\"\n ? augmented.toJsonSchema()\n : augmented;\n return {\n name,\n description: tool.description,\n inputSchema: inputSchema as Record<string, unknown>,\n risk: riskForTool(name),\n namespace: \"builtin\",\n };\n }\n}\n", "import fs from \"node:fs\";\nimport path from \"node:path\";\nimport { addCloneFirstWorktree } from \"./clone-first-worktree.js\";\nimport { executeFile } from \"./transports/process-utils.js\";\n\nconst BARE_SAFE = /^[A-Za-z0-9_./:@%+=,-]+$/;\n\nexport interface ParsedGitWorktreeAdd {\n gitCwd?: string;\n branch?: { flag: \"-b\" | \"-B\"; name: string };\n detach: boolean;\n quiet: boolean;\n dest: string;\n startPoint?: string;\n}\n\nexport const parseGitWorktreeAdd = (command: string): ParsedGitWorktreeAdd | undefined => {\n const trimmed = command.trim();\n if (!trimmed || /[|&;()\\n]/.test(trimmed)) return undefined;\n const tokens = trimmed.split(/\\s+/);\n if (tokens[0] !== \"git\") return undefined;\n if (tokens.some((token) => !BARE_SAFE.test(token))) return undefined;\n let index = 1;\n let gitCwd: string | undefined;\n if (tokens[index] === \"-C\") {\n gitCwd = tokens[index + 1];\n if (!gitCwd) return undefined;\n index += 2;\n }\n if (tokens[index] !== \"worktree\" || tokens[index + 1] !== \"add\") return undefined;\n index += 2;\n let branch: ParsedGitWorktreeAdd[\"branch\"];\n let detach = false;\n let quiet = false;\n let flagsEnded = false;\n const positionals: string[] = [];\n while (index < tokens.length) {\n const token = tokens[index++];\n if (token === undefined) break;\n if (!flagsEnded && token === \"--\") {\n flagsEnded = true;\n continue;\n }\n if (!flagsEnded && (token === \"-b\" || token === \"-B\")) {\n if (branch) return undefined;\n const name = tokens[index++];\n if (!name) return undefined;\n branch = { flag: token, name };\n continue;\n }\n if (!flagsEnded && (token === \"--detach\" || token === \"-d\")) {\n detach = true;\n continue;\n }\n if (!flagsEnded && (token === \"-q\" || token === \"--quiet\")) {\n quiet = true;\n continue;\n }\n if (!flagsEnded && token.startsWith(\"-\")) return undefined;\n positionals.push(token);\n }\n if (detach && branch) return undefined;\n if (positionals.length < 1 || positionals.length > 2) return undefined;\n return {\n ...(gitCwd ? { gitCwd } : {}),\n ...(branch ? { branch } : {}),\n detach,\n quiet,\n dest: positionals[0]!,\n ...(positionals[1] ? { startPoint: positionals[1] } : {}),\n };\n};\n\nexport interface BashToolResult {\n content: Array<{ type: \"text\"; text: string }>;\n details: { exitCode: number; cloned: boolean };\n}\n\nexport const tryExecuteGitWorktreeAdd = async (\n args: Record<string, unknown>,\n sessionCwd: string,\n): Promise<BashToolResult | undefined> => {\n const command = args.command;\n if (typeof command !== \"string\") return undefined;\n const parsed = parseGitWorktreeAdd(command);\n if (!parsed) return undefined;\n const gitCwd = parsed.gitCwd\n ? path.resolve(sessionCwd, parsed.gitCwd)\n : typeof args.cwd === \"string\"\n ? args.cwd\n : sessionCwd;\n const dest = path.resolve(gitCwd, parsed.dest);\n let gitRoot: string;\n try {\n const root = await executeFile(\"git\", [\"rev-parse\", \"--show-toplevel\"], {\n cwd: gitCwd,\n timeoutMs: 10_000,\n });\n const output = root.stdout.trim();\n if (!output) return undefined;\n gitRoot = fs.realpathSync(output);\n } catch {\n return undefined;\n }\n const result = await addCloneFirstWorktree({\n gitRoot,\n dest,\n ...(parsed.branch ? { branch: parsed.branch } : {}),\n detach: parsed.detach,\n quiet: parsed.quiet,\n ...(parsed.startPoint ? { startPoint: parsed.startPoint } : {}),\n });\n return {\n content: [{ type: \"text\", text: result.message || `Preparing worktree (${dest})` }],\n details: { exitCode: 0, cloned: result.cloned },\n };\n};\n", "import { accessSync, constants, statSync } from \"node:fs\";\nimport path from \"node:path\";\nimport { createBashToolDefinition, type ToolDefinition } from \"@oh-my-pi/pi-coding-agent/extensibility/legacy-pi-coding-agent-shim\";\nimport { Type } from \"@oh-my-pi/pi-coding-agent/extensibility/legacy-typebox\";\nimport type { OmpShellToolName } from \"../core/omp-tools.js\";\n\n// Per-call execution directory for OMP's shell tools.\n//\n// OMP's shell backend already takes cwd as a first-class parameter\n// (BashOperations.exec(command, cwd, options)), and pi-agent-core's harness\n// shell goes further with a per-command ShellExecOptions.cwd. The shell tool\n// schemas omit it, so Fabric advertises and honors it instead of silently\n// executing in the session directory.\n//\n// The alternative \u2014 telling models to write `cd <dir> && <command>` \u2014 buries\n// the directory in the command string, where it defeats extensions that match\n// on command names (permission prompts, sandboxing) and hides the target from\n// Fabric's own approval classifier.\n\nexport const OMP_BASH_CWD_KEY = \"cwd\";\n\n/**\n * Resolve and validate a single shell call's execution directory.\n *\n * Relative paths resolve against the session cwd. Unlike the leaf-agent\n * resolver this deliberately does NOT canonicalize symlinks: agents commonly\n * target git worktrees whose paths are symlinks, and rewriting those to their\n * real targets changes what `pwd` reports inside the command and breaks\n * tooling that keys on the worktree path. `path.resolve` normalizes `..`\n * lexically, which is all the approval classifier needs to see a truthful\n * absolute target.\n *\n * Containment is intentionally not enforced. Models can already reach any\n * directory by changing directories inside a shell command, which Fabric\n * neither inspects nor contains. Directory containment belongs to OMP's\n * project-trust layer or a shell spawn hook.\n */\nconst resolveOmpShellCwd = (\n toolName: OmpShellToolName,\n sessionCwd: string,\n requested: unknown,\n): string => {\n if (typeof requested !== \"string\" || requested.trim().length === 0) {\n throw new Error(\n `Invalid omp.${toolName} cwd ${JSON.stringify(requested)}: path must be a non-empty string`,\n );\n }\n const resolved = path.isAbsolute(requested)\n ? path.resolve(requested)\n : path.resolve(sessionCwd, requested);\n try {\n if (!statSync(resolved).isDirectory()) throw new Error(\"path is not a directory\");\n accessSync(resolved, constants.R_OK | constants.X_OK);\n } catch (error) {\n const reason = error instanceof Error ? error.message : String(error);\n throw new Error(\n `Invalid omp.${toolName} cwd ${JSON.stringify(requested)} (${resolved}): ${reason}`,\n );\n }\n return resolved;\n};\n\n/** Compatibility wrapper retained for existing callers and tests. */\nexport const resolveOmpBashCwd = (sessionCwd: string, requested: unknown): string =>\n resolveOmpShellCwd(\"bash\", sessionCwd, requested);\n\n/**\n * Rewrite a shell call's cwd while leaving every other argument untouched.\n *\n * The extra key stays in the arguments so events, approval, and previews see\n * the resolved absolute target. The cwd-bound definition selected by the\n * provider is what ultimately passes it to the native shell backend.\n */\nexport const resolveShellCwdArgument = (\n toolName: OmpShellToolName,\n sessionCwd: string,\n args: Record<string, unknown>,\n): Record<string, unknown> =>\n Object.hasOwn(args, OMP_BASH_CWD_KEY)\n ? {\n ...args,\n [OMP_BASH_CWD_KEY]: resolveOmpShellCwd(\n toolName,\n sessionCwd,\n args[OMP_BASH_CWD_KEY],\n ),\n }\n : args;\n\n/** Compatibility wrapper retained for existing callers and tests. */\nexport const resolveBashCwdArgument = (\n sessionCwd: string,\n args: Record<string, unknown>,\n): Record<string, unknown> => resolveShellCwdArgument(\"bash\", sessionCwd, args);\n\nconst CWD_PROPERTY = Type.Optional(\n Type.String({\n description:\n \"Execution directory for this command; relative paths resolve from the session cwd.\",\n }),\n);\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n typeof value === \"object\" && value !== null && !Array.isArray(value);\n\nconst schemaDocument = (schema: unknown): Record<string, unknown> | undefined => {\n if (isRecord(schema)) return schema;\n if (typeof schema !== \"function\" || !(\"toJsonSchema\" in schema)) return undefined;\n const toJsonSchema = schema.toJsonSchema;\n if (typeof toJsonSchema !== \"function\") return undefined;\n const document = toJsonSchema.call(schema);\n return isRecord(document) ? document : undefined;\n};\n\nexport const withShellCwdSchema = (schema: unknown): unknown => {\n const document = schemaDocument(schema);\n if (!document || !isRecord(document.properties)) return schema;\n if (Object.hasOwn(document.properties, OMP_BASH_CWD_KEY)) return schema;\n const cwdSchema = schemaDocument(CWD_PROPERTY);\n if (!cwdSchema) return schema;\n return Type.Unsafe({\n ...document,\n properties: { ...document.properties, [OMP_BASH_CWD_KEY]: cwdSchema },\n });\n};\n\n/** Compatibility wrapper retained for existing callers and tests. */\nexport const withBashCwdSchema = (schema: unknown): unknown => withShellCwdSchema(schema);\n\nconst MAX_CACHED_DEFINITIONS = 16;\n\ntype ShellDefinitionFactory = (cwd: string) => ToolDefinition<any, any>;\n\n/** Definitions bound to execution directories, with a small LRU cache. */\nclass ShellCwdDefinitions {\n readonly #cache = new Map<string, ToolDefinition<any, any>>();\n\n constructor(private readonly createDefinition: ShellDefinitionFactory) {}\n\n get(cwd: string): ToolDefinition<any, any> {\n const cached = this.#cache.get(cwd);\n if (cached) {\n this.#cache.delete(cwd);\n this.#cache.set(cwd, cached);\n return cached;\n }\n const definition = this.createDefinition(cwd);\n this.#cache.set(cwd, definition);\n if (this.#cache.size > MAX_CACHED_DEFINITIONS) {\n const oldest = this.#cache.keys().next();\n if (!oldest.done) this.#cache.delete(oldest.value);\n }\n return definition;\n }\n}\n\nexport class BashCwdDefinitions extends ShellCwdDefinitions {\n constructor() {\n super(createBashToolDefinition);\n }\n}", "// Adapted from pi-code-previews with Fabric result isolation; see THIRD_PARTY_NOTICES.md.\nimport { homedir } from \"node:os\";\nimport { dirname, isAbsolute, resolve } from \"node:path\";\nimport { mkdir, readFile, stat, writeFile } from \"node:fs/promises\";\nimport type { ToolDefinition } from \"@oh-my-pi/pi-coding-agent\";\nimport { Type } from \"@oh-my-pi/pi-coding-agent/extensibility/legacy-typebox\";\nimport { MAX_WRITE_DIFF_BYTES, writeContentForPreview } from \"./write-diff-limits.js\";\n\nconst mutationQueues = new Map<string, Promise<void>>();\n\nconst withFileMutationQueue = async <T>(path: string, operation: () => Promise<T>): Promise<T> => {\n const previous = mutationQueues.get(path) ?? Promise.resolve();\n let release!: () => void;\n const current = new Promise<void>((resolve) => { release = resolve; });\n mutationQueues.set(path, current);\n await previous;\n try { return await operation(); } finally { release(); if (mutationQueues.get(path) === current) mutationQueues.delete(path); }\n};\n\ntype ExistingFilePreview =\n | { kind: \"content\"; content: string }\n | {\n kind: \"skipped\";\n reason: string;\n byteLength?: number;\n maxBytes: number;\n sizeExceeded?: boolean;\n };\n\nconst resolvePreviewPath = (filePath: string, cwd: string): string => {\n let expanded = filePath.startsWith(\"@\") ? filePath.slice(1) : filePath;\n expanded = expanded.replace(/[\\u00a0\\u2000-\\u200a\\u202f\\u205f\\u3000]/g, \" \");\n if (expanded === \"~\") expanded = homedir();\n else if (expanded.startsWith(\"~/\")) expanded = homedir() + expanded.slice(1);\n return isAbsolute(expanded) ? expanded : resolve(cwd, expanded);\n};\n\nconst skipped = (\n reason: string,\n byteLength: number | undefined,\n sizeExceeded = false,\n): ExistingFilePreview => ({\n kind: \"skipped\",\n reason,\n ...(byteLength !== undefined ? { byteLength } : {}),\n maxBytes: MAX_WRITE_DIFF_BYTES,\n ...(sizeExceeded ? { sizeExceeded: true } : {}),\n});\n\nconst isMissing = (error: unknown): boolean =>\n typeof error === \"object\" && error !== null && \"code\" in error && error.code === \"ENOENT\";\n\nconst readExistingFileForPreview = async (\n filePath: string,\n cwd: string,\n nextContent: string,\n): Promise<ExistingFilePreview | undefined> => {\n const absolutePath = resolvePreviewPath(filePath, cwd);\n const nextBytes = Buffer.byteLength(nextContent, \"utf8\");\n if (writeContentForPreview(nextContent) === undefined) {\n return skipped(\"new content too large\", nextBytes, true);\n }\n let fileStat: Awaited<ReturnType<typeof stat>>;\n try {\n fileStat = await stat(absolutePath);\n } catch (error) {\n return isMissing(error) ? undefined : skipped(\"previous content unavailable\", undefined);\n }\n if (!fileStat.isFile()) return skipped(\"previous path is not a regular file\", fileStat.size);\n if (fileStat.size > MAX_WRITE_DIFF_BYTES) {\n return skipped(\"previous file too large\", fileStat.size, true);\n }\n try {\n const content = await readFile(absolutePath, \"utf8\");\n const bytes = Buffer.byteLength(content, \"utf8\");\n return bytes > MAX_WRITE_DIFF_BYTES\n ? skipped(\"previous file too large\", bytes, true)\n : { kind: \"content\", content };\n } catch {\n return skipped(\"previous content unavailable\", fileStat.size);\n }\n};\n\nexport const createPreviewWriteToolDefinition = (\n cwd: string,\n): ToolDefinition => {\n const original = {\n name: \"write\", label: \"Write\", description: \"Write a file\",\n parameters: Type.Object({ path: Type.String(), content: Type.String() }),\n execute: async () => ({ content: [{ type: \"text\" as const, text: \"\" }] }),\n } as unknown as ToolDefinition;\n return {\n ...original,\n async execute(\n _toolCallId: string,\n params: { path: string; content: string },\n signal: AbortSignal | undefined,\n ) {\n const { path, content } = params;\n const absolutePath = resolvePreviewPath(path, cwd);\n return withFileMutationQueue(absolutePath, async () => {\n const throwIfAborted = (): void => {\n if (signal?.aborted) throw new Error(\"Operation aborted\");\n };\n throwIfAborted();\n const before = await readExistingFileForPreview(path, cwd, content);\n throwIfAborted();\n await mkdir(dirname(absolutePath), { recursive: true });\n throwIfAborted();\n await writeFile(absolutePath, content, \"utf8\");\n throwIfAborted();\n return {\n content: [\n {\n type: \"text\" as const,\n text: `Successfully wrote ${Buffer.byteLength(content, \"utf8\")} bytes to ${path}`,\n },\n ],\n details: { codePreviewBeforeWrite: before },\n };\n });\n },\n } as unknown as ToolDefinition;\n};\n", "import { spawn } from \"node:child_process\";\nimport { createHash, randomBytes, randomUUID } from \"node:crypto\";\nimport fs from \"node:fs\";\nimport path from \"node:path\";\nimport { FabricTraceSafeError } from \"../audit/trace.js\";\nimport { writeJsonAtomic } from \"../core/atomic-write.js\";\nimport type { FabricSchemaConfig, FabricSchemaTrustedCommand } from \"../config.js\";\nimport type { MeshIdentity, MeshStateEntry, MeshStore } from \"../mesh/store.js\";\nimport type { FabricInvocationContext } from \"../protocol.js\";\nimport type { StateStore } from \"../state/store.js\";\nimport {\n type SchemaCertificateRecord,\n type SchemaEvidence,\n type SchemaEvidenceResult,\n type SchemaFileOperation,\n type SchemaHypothesisRecord,\n type SchemaWorkspaceRecord,\n stateBinding,\n} from \"./types.js\";\nimport {\n resolveWorkspaceFile,\n sha256File,\n snapshotWorkspace,\n type WorkspaceSnapshot,\n} from \"./workspace.js\";\n\nconst SCHEMA_TOPIC = \"fabric.schema\";\nconst WORKSPACE_KEY = \"schema/workspace\";\nconst HYPOTHESIS_PREFIX = \"schema/hypothesis/\";\nconst CERTIFICATE_PREFIX = \"schema/certificate/\";\nconst OUTPUT_LIMIT = 64 * 1024;\n\ninterface BeforeImage {\n path: string;\n absolute: string;\n existed: boolean;\n content?: string;\n mode?: number;\n}\n\ninterface TransactionJournal {\n format: 1;\n id: string;\n status: \"prepared\" | \"applying\" | \"committed\" | \"rolled_back\" | \"quarantined\";\n before: BeforeImage[];\n createdAt: number;\n error?: string;\n}\n\nconst hashToken = (token: string): string =>\n createHash(\"sha256\").update(token).digest(\"hex\");\n\nconst sameBinding = (left: unknown, right: unknown): boolean =>\n JSON.stringify(left) === JSON.stringify(right);\n\nconst errorMessage = (error: unknown): string =>\n error instanceof Error ? error.message : String(error);\n\nconst atomicJsonWrite = (filePath: string, value: unknown): void => {\n writeJsonAtomic(filePath, value, { newline: true });\n};\n\nconst allowedEnforceRefs = new Set([\n \"omp.read\",\n \"omp.grep\",\n \"omp.find\",\n \"omp.ls\",\n \"memory.recall\",\n \"memory.expand\",\n \"memory.sessions\",\n \"state.get\",\n \"state.history\",\n \"state.complexity\",\n \"mesh.self\",\n \"mesh.read\",\n \"mesh.members\",\n \"mesh.get\",\n \"mesh.list\",\n \"compact.status\",\n \"components.list\",\n \"components.status\",\n \"components.graph\",\n \"schema.status\",\n \"schema.hypothesize\",\n \"schema.verify\",\n \"schema.commit\",\n \"schema.abort\",\n]);\n\nconst operationPath = (operation: SchemaFileOperation): string => operation.path;\n\nexport class SchemaController {\n readonly #activeHypotheses = new Map<string, string>();\n readonly #activeCertificates = new Map<string, string>();\n readonly #journalRoot: string;\n readonly #lockPath: string;\n\n constructor(\n readonly cwd: string,\n readonly config: FabricSchemaConfig,\n readonly mesh: MeshStore,\n readonly identity: MeshIdentity,\n readonly state?: StateStore,\n ) {\n this.cwd = fs.realpathSync(cwd);\n this.#journalRoot = path.join(mesh.root, \"schema-transactions\");\n this.#lockPath = path.join(this.#journalRoot, \".commit.lock\");\n this.#recoverJournals();\n }\n\n async authorize(ref: string, parentToolCallId: string): Promise<void> {\n if (this.config.mode === \"off\" || allowedEnforceRefs.has(ref)) return;\n const message = `Schema ${this.config.mode} policy would block ${ref}: protected workspace mutations and external effects must use schema.commit`;\n if (this.config.mode === \"audit\") {\n try {\n await this.#publish(\"would_block\", { ref, parentToolCallId, message });\n } catch {\n // Audit reporting is best-effort; audit mode must preserve current behavior.\n }\n return;\n }\n try {\n await this.#publish(\"blocked\", { ref, parentToolCallId, message });\n } catch {\n // The authorization decision remains fail-closed if reporting is unavailable.\n }\n throw new FabricTraceSafeError(message);\n }\n\n status(parentToolCallId?: string): Record<string, unknown> {\n const workspace = this.#workspaceEntry();\n const hypotheses = this.mesh\n .list(HYPOTHESIS_PREFIX, this.mesh.maxReadEvents)\n .map((entry) => entry.value as SchemaHypothesisRecord)\n .filter((record) => !parentToolCallId || record.parentToolCallId === parentToolCallId)\n .map((record) => ({\n id: record.id,\n label: record.label,\n status: record.status,\n generation: record.generation,\n updatedAt: record.updatedAt,\n }));\n return {\n mode: this.config.mode,\n certificateTtlMs: this.config.certificateTtlMs,\n maxFiles: this.config.maxFiles,\n maxBytes: this.config.maxBytes,\n trustedCommands: Object.keys(this.config.trustedCommands).sort(),\n generation: (workspace?.value as SchemaWorkspaceRecord | undefined)?.generation ?? 0,\n lastOutcome: (workspace?.value as SchemaWorkspaceRecord | undefined)?.lastOutcome ?? null,\n hypotheses,\n };\n }\n\n async hypothesize(\n input: {\n label: string;\n summary: string;\n evidence: SchemaEvidence[];\n complexityReduction?: boolean;\n },\n context: FabricInvocationContext,\n ): Promise<Record<string, unknown>> {\n if (!input.label.trim() || !input.summary.trim()) throw new Error(\"Schema hypothesis label and summary must not be empty\");\n if (!Array.isArray(input.evidence) || input.evidence.length === 0) {\n throw new Error(\"Schema hypothesis requires nonempty typed evidence\");\n }\n if (input.evidence.length > this.config.maxFiles) {\n throw new Error(`Schema hypothesis exceeds ${this.config.maxFiles} evidence items`);\n }\n this.#assertPayloadBound(input);\n const snapshot = snapshotWorkspace(this.cwd, [this.mesh.root]);\n const generation = this.#generation();\n const now = Date.now();\n const record: SchemaHypothesisRecord = {\n id: randomUUID(),\n label: input.label,\n summary: input.summary,\n evidence: input.evidence,\n complexityReduction: input.complexityReduction === true,\n parentToolCallId: context.parentToolCallId,\n state: stateBinding(this.state?.getHead() ?? null),\n fingerprint: snapshot.fingerprint,\n generation,\n status: \"active\",\n createdAt: now,\n updatedAt: now,\n };\n await this.#publish(\"hypothesized\", record);\n await this.mesh.put({\n key: `${HYPOTHESIS_PREFIX}${record.id}`,\n value: record,\n ifVersion: 0,\n identity: this.identity,\n });\n this.#activeHypotheses.set(record.id, context.parentToolCallId);\n context.update(`Schema hypothesis recorded: ${record.label}`);\n return {\n hypothesisId: record.id,\n status: record.status,\n state: record.state,\n fingerprint: record.fingerprint,\n generation,\n };\n }\n\n async verify(\n hypothesisId: string,\n context: FabricInvocationContext,\n ): Promise<Record<string, unknown>> {\n const entry = this.#requireHypothesis(hypothesisId);\n const record = entry.value as SchemaHypothesisRecord;\n this.#assertInvocation(record.parentToolCallId, context.parentToolCallId);\n if (record.status !== \"active\") throw new Error(`Schema hypothesis is not active: ${record.status}`);\n if (record.evidence.length === 0) return this.#failedVerification(record, [], \"missing evidence\");\n\n let before: WorkspaceSnapshot;\n try {\n before = snapshotWorkspace(this.cwd, [this.mesh.root]);\n } catch (error) {\n return this.#failedVerification(record, [], `workspace snapshot failed: ${errorMessage(error)}`);\n }\n const currentState = stateBinding(this.state?.getHead() ?? null);\n if (!sameBinding(record.state, currentState)) {\n return this.#failedVerification(record, [], \"state head changed since hypothesis\");\n }\n if (record.generation !== this.#generation()) {\n return this.#failedVerification(record, [], \"workspace generation changed since hypothesis\");\n }\n if (record.fingerprint !== before.fingerprint) {\n return this.#failedVerification(record, [], \"workspace fingerprint changed since hypothesis\");\n }\n\n const results = await this.#verifyEvidence(record.evidence, context);\n let after: WorkspaceSnapshot;\n try {\n after = snapshotWorkspace(this.cwd, [this.mesh.root]);\n } catch (error) {\n return this.#failedVerification(record, results, `post-evidence snapshot failed: ${errorMessage(error)}`);\n }\n const allConfirmed = results.length > 0 && results.every((result) => result.status === \"confirmed\");\n if (!allConfirmed || before.fingerprint !== after.fingerprint) {\n const reason = before.fingerprint !== after.fingerprint\n ? \"workspace fingerprint changed while evidence ran\"\n : \"one or more evidence items were not confirmed\";\n return this.#failedVerification(record, results, reason);\n }\n\n const certificate = randomBytes(32).toString(\"hex\");\n const issuedAt = Date.now();\n const certificateRecord: SchemaCertificateRecord = {\n tokenHash: hashToken(certificate),\n hypothesisId: record.id,\n parentToolCallId: context.parentToolCallId,\n state: record.state,\n fingerprint: record.fingerprint,\n generation: record.generation,\n issuedAt,\n expiresAt: issuedAt + this.config.certificateTtlMs,\n status: \"active\",\n };\n const certificateKey = `${CERTIFICATE_PREFIX}${certificateRecord.tokenHash}`;\n await this.mesh.put({\n key: certificateKey,\n value: certificateRecord,\n ifVersion: 0,\n identity: this.identity,\n });\n try {\n await this.mesh.put({\n key: entry.key,\n value: { ...record, status: \"verified\", updatedAt: Date.now() },\n ifVersion: entry.version,\n identity: this.identity,\n });\n } catch (error) {\n const certificateEntry = this.mesh.get(certificateKey);\n if (certificateEntry) {\n await this.mesh.put({\n key: certificateKey,\n value: { ...certificateRecord, status: \"aborted\" },\n ifVersion: certificateEntry.version,\n identity: this.identity,\n });\n }\n throw error;\n }\n this.#activeCertificates.set(certificateRecord.tokenHash, context.parentToolCallId);\n try {\n await this.#publish(\"verified\", {\n hypothesisId: record.id,\n tokenHash: certificateRecord.tokenHash,\n results: results.map((result) => ({\n kind: result.evidence.kind,\n status: result.status,\n detail: result.detail,\n })),\n state: record.state,\n fingerprint: record.fingerprint,\n generation: record.generation,\n issuedAt,\n expiresAt: certificateRecord.expiresAt,\n });\n } catch {\n // The certificate and verified hypothesis records are already durable.\n }\n context.update(`Schema evidence confirmed; certificate expires in ${this.config.certificateTtlMs}ms`);\n return {\n verified: true,\n hypothesisId: record.id,\n certificate,\n issuedAt,\n expiresAt: certificateRecord.expiresAt,\n results,\n };\n }\n\n async commit(\n input: {\n hypothesisId: string;\n certificate: string;\n operations: SchemaFileOperation[];\n postconditions: SchemaEvidence[];\n },\n context: FabricInvocationContext,\n ): Promise<Record<string, unknown>> {\n if (input.operations.length === 0) throw new Error(\"Schema commit requires at least one file operation\");\n if (input.postconditions.length === 0) throw new Error(\"Schema commit requires nonempty typed postconditions\");\n if (input.operations.length > this.config.maxFiles) {\n throw new Error(`Schema transaction exceeds ${this.config.maxFiles} operations`);\n }\n if (input.postconditions.length > this.config.maxFiles) {\n throw new Error(`Schema transaction exceeds ${this.config.maxFiles} postconditions`);\n }\n this.#assertPayloadBound(input);\n const release = this.#acquireCommitLock();\n const transactionId = randomUUID();\n const journalPath = path.join(this.#journalRoot, `${transactionId}.json`);\n let journal: TransactionJournal | undefined;\n let consumed = false;\n let committed = false;\n try {\n const tokenHash = hashToken(input.certificate);\n const certificateEntry = this.mesh.get(`${CERTIFICATE_PREFIX}${tokenHash}`);\n if (!certificateEntry) throw new Error(\"Unknown Schema certificate\");\n const certificate = certificateEntry.value as SchemaCertificateRecord;\n if (certificate.status !== \"active\") throw new Error(`Schema certificate is ${certificate.status}`);\n if (certificate.hypothesisId !== input.hypothesisId) throw new Error(\"Schema certificate is bound to a different hypothesis\");\n this.#assertInvocation(certificate.parentToolCallId, context.parentToolCallId);\n if (Date.now() > certificate.expiresAt) throw new Error(\"Schema certificate expired\");\n const hypothesisEntry = this.#requireHypothesis(input.hypothesisId);\n const hypothesis = hypothesisEntry.value as SchemaHypothesisRecord;\n if (hypothesis.status !== \"verified\") throw new Error(`Schema hypothesis is not verified: ${hypothesis.status}`);\n if (!sameBinding(certificate.state, stateBinding(this.state?.getHead() ?? null))) {\n throw new Error(\"Schema state head changed after verification\");\n }\n if (certificate.generation !== this.#generation()) throw new Error(\"Schema workspace generation is stale\");\n const baseline = snapshotWorkspace(this.cwd, [this.mesh.root]);\n if (baseline.fingerprint !== certificate.fingerprint) throw new Error(\"Schema workspace fingerprint is stale\");\n\n const declared = new Map<string, ReturnType<typeof resolveWorkspaceFile>>();\n let payloadBytes = 0;\n for (const operation of input.operations) {\n const resolved = resolveWorkspaceFile(this.cwd, operationPath(operation), {\n allowAbsent: true,\n });\n declared.set(resolved.relative, resolved);\n if (operation.kind === \"write\") payloadBytes += Buffer.byteLength(operation.content);\n if (operation.kind === \"edit\") payloadBytes += Buffer.byteLength(operation.newText);\n }\n if (declared.size > this.config.maxFiles) throw new Error(`Schema transaction exceeds ${this.config.maxFiles} files`);\n const before: BeforeImage[] = [];\n let beforeBytes = 0;\n for (const resolved of declared.values()) {\n if (!resolved.exists) {\n before.push({ path: resolved.relative, absolute: resolved.absolute, existed: false });\n continue;\n }\n const content = fs.readFileSync(resolved.absolute);\n beforeBytes += content.byteLength;\n before.push({\n path: resolved.relative,\n absolute: resolved.absolute,\n existed: true,\n content: content.toString(\"base64\"),\n mode: fs.statSync(resolved.absolute).mode & 0o777,\n });\n }\n if (payloadBytes + beforeBytes > this.config.maxBytes) {\n throw new Error(`Schema transaction exceeds ${this.config.maxBytes} bytes`);\n }\n journal = { format: 1, id: transactionId, status: \"prepared\", before, createdAt: Date.now() };\n atomicJsonWrite(journalPath, journal);\n\n await this.mesh.put({\n key: certificateEntry.key,\n value: { ...certificate, status: \"consumed\", consumedAt: Date.now() },\n ifVersion: certificateEntry.version,\n identity: this.identity,\n });\n consumed = true;\n journal.status = \"applying\";\n atomicJsonWrite(journalPath, journal);\n const afterConsume = snapshotWorkspace(this.cwd, [this.mesh.root]);\n if (afterConsume.fingerprint !== certificate.fingerprint) {\n throw new Error(\"Schema workspace drifted while consuming the certificate\");\n }\n\n for (const operation of input.operations) this.#applyOperation(operation);\n const applied = snapshotWorkspace(this.cwd, [this.mesh.root]);\n this.#assertNoOutsideDrift(baseline, applied, new Set(declared.keys()));\n const postconditionResults = await this.#verifyEvidence(input.postconditions, context);\n const afterPostconditions = snapshotWorkspace(this.cwd, [this.mesh.root]);\n if (applied.fingerprint !== afterPostconditions.fingerprint) {\n throw new Error(\"Schema workspace changed while postconditions ran\");\n }\n if (!postconditionResults.every((result) => result.status === \"confirmed\")) {\n throw new Error(\"Schema commit postconditions were not all confirmed\");\n }\n\n const workspaceEntry = this.#workspaceEntry();\n const nextGeneration = certificate.generation + 1;\n await this.mesh.put({\n key: WORKSPACE_KEY,\n value: {\n generation: nextGeneration,\n lastOutcome: \"committed\",\n lastTransactionId: transactionId,\n updatedAt: Date.now(),\n } satisfies SchemaWorkspaceRecord,\n ifVersion: workspaceEntry?.version ?? 0,\n identity: this.identity,\n });\n committed = true;\n journal.status = \"committed\";\n try {\n atomicJsonWrite(journalPath, journal);\n } catch {\n // Recovery cross-checks the authoritative committed workspace record.\n }\n\n let stateTransition: unknown = null;\n try {\n stateTransition = this.state\n ? await this.state.transition(\n {\n label: `schema:${hypothesis.label}`,\n ...(certificate.state ? { from: certificate.state.to } : {}),\n to: `schema-commit-${nextGeneration}`,\n summary: hypothesis.summary,\n },\n this.identity,\n this.cwd,\n )\n : null;\n } catch (error) {\n stateTransition = { error: errorMessage(error) };\n }\n try {\n await this.mesh.put({\n key: hypothesisEntry.key,\n value: { ...hypothesis, status: \"committed\", updatedAt: Date.now() },\n ifVersion: hypothesisEntry.version,\n identity: this.identity,\n });\n } catch {\n // The committed workspace generation and outcome remain authoritative.\n }\n try {\n await this.#publish(\"committed\", {\n transactionId,\n hypothesisId: hypothesis.id,\n generation: nextGeneration,\n paths: [...declared.keys()],\n postconditions: postconditionResults.map((result) => ({\n kind: result.evidence.kind,\n status: result.status,\n detail: result.detail,\n })),\n complexityReductionCertified: hypothesis.complexityReduction,\n stateTransition,\n });\n } catch {\n // schema/workspace is the authoritative durable committed outcome.\n }\n this.#activeHypotheses.delete(hypothesis.id);\n this.#activeCertificates.delete(tokenHash);\n context.update(`Schema transaction committed at generation ${nextGeneration}`);\n return {\n outcome: \"committed\",\n transactionId,\n generation: nextGeneration,\n paths: [...declared.keys()],\n postconditions: postconditionResults,\n complexityReductionCertified: hypothesis.complexityReduction,\n stateTransition,\n };\n } catch (error) {\n if (!consumed) throw error;\n if (committed) throw error;\n const rollbackError = journal ? this.#restoreBeforeImages(journal.before) : undefined;\n const outcome = rollbackError ? \"quarantined\" : \"rolled_back\";\n if (journal) {\n journal.status = outcome;\n journal.error = rollbackError\n ? `${errorMessage(error)}; rollback failed: ${rollbackError}`\n : errorMessage(error);\n try {\n atomicJsonWrite(journalPath, journal);\n } catch {\n // The mesh outcome record below remains the durable fallback.\n }\n }\n await this.#recordFailedOutcome(outcome, transactionId, errorMessage(error), rollbackError);\n context.update(`Schema transaction ${outcome}`);\n return {\n outcome,\n transactionId,\n error: errorMessage(error),\n ...(rollbackError ? { rollbackError } : {}),\n };\n } finally {\n release();\n }\n }\n\n async abort(\n input: { hypothesisId: string; certificate?: string },\n context: FabricInvocationContext,\n ): Promise<Record<string, unknown>> {\n const hypothesisEntry = this.#requireHypothesis(input.hypothesisId);\n const hypothesis = hypothesisEntry.value as SchemaHypothesisRecord;\n this.#assertInvocation(hypothesis.parentToolCallId, context.parentToolCallId);\n if (hypothesis.status === \"committed\") throw new Error(\"Committed Schema hypotheses cannot be aborted\");\n if (input.certificate) {\n const tokenHash = hashToken(input.certificate);\n const certificateEntry = this.mesh.get(`${CERTIFICATE_PREFIX}${tokenHash}`);\n if (!certificateEntry) throw new Error(\"Unknown Schema certificate\");\n const certificate = certificateEntry.value as SchemaCertificateRecord;\n this.#assertInvocation(certificate.parentToolCallId, context.parentToolCallId);\n if (certificate.status !== \"active\") throw new Error(`Schema certificate is ${certificate.status}`);\n await this.mesh.put({\n key: certificateEntry.key,\n value: { ...certificate, status: \"aborted\" },\n ifVersion: certificateEntry.version,\n identity: this.identity,\n });\n this.#activeCertificates.delete(tokenHash);\n }\n await this.mesh.put({\n key: hypothesisEntry.key,\n value: { ...hypothesis, status: \"aborted\", updatedAt: Date.now() },\n ifVersion: hypothesisEntry.version,\n identity: this.identity,\n });\n this.#activeHypotheses.delete(hypothesis.id);\n await this.#publish(\"aborted\", { hypothesisId: hypothesis.id, parentToolCallId: context.parentToolCallId });\n return { aborted: true, hypothesisId: hypothesis.id };\n }\n\n async endInvocation(parentToolCallId: string): Promise<void> {\n for (const [tokenHash, invocation] of [...this.#activeCertificates]) {\n if (invocation !== parentToolCallId) continue;\n const entry = this.mesh.get(`${CERTIFICATE_PREFIX}${tokenHash}`);\n if (entry) {\n const record = entry.value as SchemaCertificateRecord;\n if (record.status === \"active\") {\n try {\n await this.mesh.put({\n key: entry.key,\n value: { ...record, status: \"abandoned\" },\n ifVersion: entry.version,\n identity: this.identity,\n });\n } catch {\n // A concurrent consume wins; the certificate is no longer active.\n }\n }\n }\n this.#activeCertificates.delete(tokenHash);\n }\n for (const [hypothesisId, invocation] of [...this.#activeHypotheses]) {\n if (invocation !== parentToolCallId) continue;\n const entry = this.mesh.get(`${HYPOTHESIS_PREFIX}${hypothesisId}`);\n if (entry) {\n const record = entry.value as SchemaHypothesisRecord;\n if (record.status === \"active\" || record.status === \"verified\") {\n try {\n await this.mesh.put({\n key: entry.key,\n value: { ...record, status: \"abandoned\", updatedAt: Date.now() },\n ifVersion: entry.version,\n identity: this.identity,\n });\n } catch {\n // A concurrent terminal transition wins.\n }\n }\n }\n this.#activeHypotheses.delete(hypothesisId);\n }\n }\n\n async #failedVerification(\n record: SchemaHypothesisRecord,\n results: SchemaEvidenceResult[],\n reason: string,\n ): Promise<Record<string, unknown>> {\n try {\n await this.#publish(\"verification_failed\", {\n hypothesisId: record.id,\n reason,\n results: results.map((result) => ({ kind: result.evidence.kind, status: result.status, detail: result.detail })),\n });\n } catch {\n // Returning the fail-closed result must not depend on audit capacity.\n }\n return { verified: false, hypothesisId: record.id, reason, results };\n }\n\n async #verifyEvidence(\n evidence: SchemaEvidence[],\n context: FabricInvocationContext,\n ): Promise<SchemaEvidenceResult[]> {\n if (evidence.length === 0) return [];\n const results: SchemaEvidenceResult[] = [];\n for (const item of evidence) {\n if (context.signal?.aborted) {\n results.push({ evidence: item, status: \"error\", detail: \"cancelled\" });\n continue;\n }\n try {\n if (item.kind === \"trusted_command\") {\n const command = this.config.trustedCommands[item.name];\n if (!command) {\n results.push({ evidence: item, status: \"nonconfirmed\", detail: `trusted command is not configured: ${item.name}` });\n } else {\n results.push(await this.#runTrustedCommand(item, command, context.signal));\n }\n continue;\n }\n const resolved = resolveWorkspaceFile(this.cwd, item.path, {\n allowAbsent: item.kind === \"file_absent\",\n });\n if (item.kind === \"file_absent\") {\n results.push({\n evidence: item,\n status: resolved.exists ? \"nonconfirmed\" : \"confirmed\",\n detail: resolved.exists ? \"file exists\" : \"file is absent\",\n });\n } else if (item.kind === \"file_exists\") {\n results.push({\n evidence: item,\n status: \"confirmed\",\n detail: \"file exists\",\n observedSha256: sha256File(resolved.absolute),\n });\n } else if (item.kind === \"file_contains\") {\n const confirmed = fs.readFileSync(resolved.absolute, \"utf8\").includes(item.literal);\n results.push({\n evidence: item,\n status: confirmed ? \"confirmed\" : \"nonconfirmed\",\n detail: confirmed ? \"literal found\" : \"literal not found\",\n observedSha256: sha256File(resolved.absolute),\n });\n } else {\n const actual = sha256File(resolved.absolute);\n results.push({\n evidence: item,\n status: actual === item.sha256 ? \"confirmed\" : \"nonconfirmed\",\n detail: actual,\n observedSha256: actual,\n });\n }\n } catch (error) {\n results.push({ evidence: item, status: \"error\", detail: errorMessage(error) });\n }\n }\n return results;\n }\n\n #runTrustedCommand(\n evidence: Extract<SchemaEvidence, { kind: \"trusted_command\" }>,\n command: FabricSchemaTrustedCommand,\n signal?: AbortSignal,\n ): Promise<SchemaEvidenceResult> {\n return new Promise((resolve) => {\n let output = \"\";\n let settled = false;\n const finish = (status: SchemaEvidenceResult[\"status\"], detail: string, exitCode: number | null): void => {\n if (settled) return;\n settled = true;\n clearTimeout(timer);\n resolve({ evidence, status, detail, exitCode, output });\n };\n let child;\n try {\n child = spawn(command.command, command.shell ? [] : command.args, {\n cwd: this.cwd,\n shell: command.shell,\n stdio: [\"ignore\", \"pipe\", \"pipe\"],\n ...(signal ? { signal } : {}),\n });\n } catch (error) {\n resolve({ evidence, status: \"error\", detail: errorMessage(error), exitCode: null });\n return;\n }\n const append = (chunk: Buffer): void => {\n if (output.length < OUTPUT_LIMIT) output += chunk.toString().slice(0, OUTPUT_LIMIT - output.length);\n };\n child.stdout.on(\"data\", append);\n child.stderr.on(\"data\", append);\n child.on(\"error\", (error) => finish(\"error\", error.message, null));\n child.on(\"close\", (code) => {\n const exitCode = typeof code === \"number\" ? code : null;\n finish(exitCode === 0 ? \"confirmed\" : exitCode === null ? \"error\" : \"nonconfirmed\", exitCode === 0 ? \"exit 0\" : `exit ${exitCode ?? \"signal\"}`, exitCode);\n });\n const timer = setTimeout(() => {\n child.kill(\"SIGKILL\");\n finish(\"error\", `timeout after ${command.timeoutMs}ms`, null);\n }, command.timeoutMs);\n timer.unref?.();\n });\n }\n\n #applyOperation(operation: SchemaFileOperation): void {\n const resolved = resolveWorkspaceFile(this.cwd, operation.path, { allowAbsent: operation.kind === \"write\" });\n if (operation.kind === \"write\") {\n if (\"absent\" in operation.expected) {\n if (resolved.exists) throw new Error(`Schema precondition failed; expected absent: ${operation.path}`);\n } else {\n if (!resolved.exists || sha256File(resolved.absolute) !== operation.expected.sha256) {\n throw new Error(`Schema precondition SHA-256 mismatch: ${operation.path}`);\n }\n }\n fs.writeFileSync(resolved.absolute, operation.content, \"utf8\");\n return;\n }\n if (sha256File(resolved.absolute) !== operation.expectedSha256) {\n throw new Error(`Schema precondition SHA-256 mismatch: ${operation.path}`);\n }\n if (operation.kind === \"delete\") {\n fs.unlinkSync(resolved.absolute);\n return;\n }\n const content = fs.readFileSync(resolved.absolute, \"utf8\");\n const first = content.indexOf(operation.oldText);\n if (first < 0 || content.indexOf(operation.oldText, first + operation.oldText.length) >= 0) {\n throw new Error(`Schema edit requires oldText to occur exactly once: ${operation.path}`);\n }\n fs.writeFileSync(resolved.absolute, `${content.slice(0, first)}${operation.newText}${content.slice(first + operation.oldText.length)}`, \"utf8\");\n }\n\n #assertNoOutsideDrift(before: WorkspaceSnapshot, after: WorkspaceSnapshot, declared: Set<string>): void {\n if (before.git !== after.git || before.head !== after.head || before.indexDigest !== after.indexDigest) {\n throw new Error(\"Schema detected Git HEAD or index drift during commit\");\n }\n const paths = new Set([...Object.keys(before.entries), ...Object.keys(after.entries)]);\n for (const file of paths) {\n if (declared.has(file)) continue;\n if (before.entries[file] !== after.entries[file]) {\n throw new Error(`Schema detected undeclared workspace drift: ${file}`);\n }\n }\n }\n\n #restoreBeforeImages(images: BeforeImage[]): string | undefined {\n const errors: string[] = [];\n for (const image of [...images].reverse()) {\n try {\n const resolved = resolveWorkspaceFile(this.cwd, image.path, { allowAbsent: true });\n if (!image.existed) {\n if (resolved.exists) fs.unlinkSync(resolved.absolute);\n } else {\n fs.writeFileSync(resolved.absolute, Buffer.from(image.content ?? \"\", \"base64\"));\n if (image.mode !== undefined) fs.chmodSync(resolved.absolute, image.mode);\n }\n } catch (error) {\n errors.push(`${image.path}: ${errorMessage(error)}`);\n }\n }\n return errors.length > 0 ? errors.join(\"; \") : undefined;\n }\n\n async #recordFailedOutcome(\n outcome: \"rolled_back\" | \"quarantined\",\n transactionId: string,\n error: string,\n rollbackError?: string,\n ): Promise<void> {\n try {\n const entry = this.#workspaceEntry();\n await this.mesh.put({\n key: WORKSPACE_KEY,\n value: {\n generation: (entry?.value as SchemaWorkspaceRecord | undefined)?.generation ?? 0,\n lastOutcome: outcome,\n lastTransactionId: transactionId,\n updatedAt: Date.now(),\n } satisfies SchemaWorkspaceRecord,\n ifVersion: entry?.version ?? 0,\n identity: this.identity,\n });\n await this.#publish(outcome, { transactionId, error, ...(rollbackError ? { rollbackError } : {}) });\n } catch {\n // The journal is the durable fallback when mesh outcome recording fails.\n }\n }\n\n #generation(): number {\n return (this.#workspaceEntry()?.value as SchemaWorkspaceRecord | undefined)?.generation ?? 0;\n }\n\n #workspaceEntry(): MeshStateEntry | undefined {\n return this.mesh.get(WORKSPACE_KEY);\n }\n\n #requireHypothesis(id: string): MeshStateEntry {\n const entry = this.mesh.get(`${HYPOTHESIS_PREFIX}${id}`);\n if (!entry) throw new Error(`Unknown Schema hypothesis: ${id}`);\n return entry;\n }\n\n #assertInvocation(expected: string, actual: string): void {\n if (expected !== actual) throw new Error(\"Schema artifact belongs to a different fabric_exec invocation\");\n }\n\n #assertPayloadBound(value: unknown): void {\n const bytes = Buffer.byteLength(JSON.stringify(value));\n if (bytes > this.config.maxBytes) throw new Error(`Schema request exceeds ${this.config.maxBytes} bytes`);\n }\n\n #publish(kind: string, data: unknown): Promise<unknown> {\n return this.mesh.publish({ topic: SCHEMA_TOPIC, kind, from: this.identity, data });\n }\n\n #acquireCommitLock(): () => void {\n fs.mkdirSync(this.#journalRoot, { recursive: true, mode: 0o700 });\n try {\n const descriptor = fs.openSync(this.#lockPath, \"wx\", 0o600);\n fs.writeFileSync(descriptor, `${process.pid}\\n${Date.now()}\\n`);\n fs.closeSync(descriptor);\n } catch (error) {\n if (error instanceof Error && \"code\" in error && error.code === \"EEXIST\") {\n throw new Error(\"Another Schema transaction is in progress\");\n }\n throw error;\n }\n return () => fs.rmSync(this.#lockPath, { force: true });\n }\n\n #recoverJournals(): void {\n fs.mkdirSync(this.#journalRoot, { recursive: true, mode: 0o700 });\n try {\n const [pidText] = fs.readFileSync(this.#lockPath, \"utf8\").split(\"\\n\");\n const pid = Number(pidText);\n if (Number.isSafeInteger(pid) && pid > 0) {\n try {\n process.kill(pid, 0);\n return;\n } catch {\n // The owner is gone; recover its applying journal below.\n }\n }\n fs.rmSync(this.#lockPath, { force: true });\n } catch (error) {\n if (!(error instanceof Error && \"code\" in error && error.code === \"ENOENT\")) throw error;\n }\n for (const name of fs.readdirSync(this.#journalRoot)) {\n if (!name.endsWith(\".json\")) continue;\n const filePath = path.join(this.#journalRoot, name);\n try {\n const journal = JSON.parse(fs.readFileSync(filePath, \"utf8\")) as TransactionJournal;\n if (journal.format !== 1 || journal.status !== \"applying\" || !Array.isArray(journal.before)) continue;\n const workspace = this.#workspaceEntry()?.value as SchemaWorkspaceRecord | undefined;\n if (\n workspace?.lastOutcome === \"committed\" &&\n workspace.lastTransactionId === journal.id\n ) {\n journal.status = \"committed\";\n atomicJsonWrite(filePath, journal);\n continue;\n }\n const rollbackError = this.#restoreBeforeImages(journal.before);\n journal.status = rollbackError ? \"quarantined\" : \"rolled_back\";\n journal.error = rollbackError ? `crash recovery failed: ${rollbackError}` : \"recovered incomplete transaction\";\n atomicJsonWrite(filePath, journal);\n } catch {\n // An unreadable journal is retained for operator quarantine and inspection.\n }\n }\n }\n}\n", "import type { StateHead } from \"../state/store.js\";\n\nexport type SchemaEvidence =\n | { kind: \"file_exists\"; path: string }\n | { kind: \"file_absent\"; path: string }\n | { kind: \"file_contains\"; path: string; literal: string }\n | { kind: \"file_sha256\"; path: string; sha256: string }\n | { kind: \"trusted_command\"; name: string };\n\nexport type SchemaFileOperation =\n | { kind: \"write\"; path: string; content: string; expected: { absent: true } | { sha256: string } }\n | { kind: \"edit\"; path: string; oldText: string; newText: string; expectedSha256: string }\n | { kind: \"delete\"; path: string; expectedSha256: string };\n\nexport interface SchemaStateBinding {\n transitionId: string;\n version: number;\n to: string;\n}\n\nexport const stateBinding = (head: StateHead | null): SchemaStateBinding | null =>\n head\n ? { transitionId: head.transitionId, version: head.version, to: head.to }\n : null;\n\nexport interface SchemaHypothesisRecord {\n id: string;\n label: string;\n summary: string;\n evidence: SchemaEvidence[];\n complexityReduction: boolean;\n parentToolCallId: string;\n state: SchemaStateBinding | null;\n fingerprint: string;\n generation: number;\n status: \"active\" | \"verified\" | \"committed\" | \"aborted\" | \"abandoned\";\n createdAt: number;\n updatedAt: number;\n}\n\nexport interface SchemaCertificateRecord {\n tokenHash: string;\n hypothesisId: string;\n parentToolCallId: string;\n state: SchemaStateBinding | null;\n fingerprint: string;\n generation: number;\n issuedAt: number;\n expiresAt: number;\n status: \"active\" | \"consumed\" | \"aborted\" | \"abandoned\";\n consumedAt?: number;\n}\n\nexport interface SchemaEvidenceResult {\n evidence: SchemaEvidence;\n status: \"confirmed\" | \"nonconfirmed\" | \"error\";\n detail: string;\n exitCode?: number | null;\n output?: string;\n observedSha256?: string;\n}\n\nexport interface SchemaWorkspaceRecord {\n generation: number;\n lastOutcome?: \"committed\" | \"rolled_back\" | \"quarantined\";\n lastTransactionId?: string;\n updatedAt: number;\n}\n", "import { execFileSync } from \"node:child_process\";\nimport { createHash } from \"node:crypto\";\nimport fs from \"node:fs\";\nimport path from \"node:path\";\n\nconst SNAPSHOT_MAX_FILES = 20_000;\nconst SNAPSHOT_MAX_BYTES = 512 * 1024 * 1024;\nconst FALLBACK_SKIPPED_DIRECTORIES = new Set([\n \".git\",\n \"node_modules\",\n \"dist\",\n \"build\",\n \"coverage\",\n \".cache\",\n]);\n\nexport interface WorkspaceSnapshot {\n fingerprint: string;\n git: boolean;\n head: string | null;\n indexDigest: string | null;\n entries: Record<string, string>;\n files: number;\n bytes: number;\n}\n\nconst digest = (value: string | Buffer): string =>\n createHash(\"sha256\").update(value).digest(\"hex\");\n\nconst git = (cwd: string, args: string[]): Buffer =>\n execFileSync(\"git\", [\"-C\", cwd, ...args], {\n encoding: \"buffer\",\n maxBuffer: 128 * 1024 * 1024,\n stdio: [\"ignore\", \"pipe\", \"ignore\"],\n });\n\nconst nulPaths = (buffer: Buffer): string[] =>\n buffer\n .toString(\"utf8\")\n .split(\"\\0\")\n .filter((item) => item.length > 0);\n\nconst normalizeRelative = (value: string): string => value.split(path.sep).join(\"/\");\n\nconst isInside = (root: string, candidate: string): boolean => {\n const relative = path.relative(root, candidate);\n return relative === \"\" || (!path.isAbsolute(relative) && relative !== \"..\" && !relative.startsWith(`..${path.sep}`));\n};\n\nconst excluded = (absolute: string, exclusions: string[]): boolean =>\n exclusions.some((root) => isInside(root, absolute));\n\nconst entryDigest = (absolute: string): { marker: string; bytes: number } => {\n let stat: fs.Stats;\n try {\n stat = fs.lstatSync(absolute);\n } catch (error) {\n if (error instanceof Error && \"code\" in error && error.code === \"ENOENT\") {\n return { marker: \"absent\", bytes: 0 };\n }\n throw error;\n }\n if (stat.isSymbolicLink()) {\n return { marker: `symlink:${digest(fs.readlinkSync(absolute))}`, bytes: 0 };\n }\n if (!stat.isFile()) {\n throw new Error(`Schema workspace snapshot does not support non-file entry: ${absolute}`);\n }\n return { marker: `file:${stat.mode & 0o777}:${digest(fs.readFileSync(absolute))}`, bytes: stat.size };\n};\n\nconst buildSnapshot = (\n cwd: string,\n paths: string[],\n metadata: { git: boolean; head: string | null; indexDigest: string | null },\n exclusions: string[],\n): WorkspaceSnapshot => {\n const entries: Record<string, string> = {};\n let bytes = 0;\n const unique = [...new Set(paths)].sort((left, right) => left.localeCompare(right));\n for (const relativeInput of unique) {\n const absolute = path.resolve(cwd, relativeInput);\n if (!isInside(cwd, absolute) || excluded(absolute, exclusions)) continue;\n if (Object.keys(entries).length >= SNAPSHOT_MAX_FILES) {\n throw new Error(`Schema workspace snapshot exceeds ${SNAPSHOT_MAX_FILES} files`);\n }\n const relative = normalizeRelative(path.relative(cwd, absolute));\n const entry = entryDigest(absolute);\n bytes += entry.bytes;\n if (bytes > SNAPSHOT_MAX_BYTES) {\n throw new Error(`Schema workspace snapshot exceeds ${SNAPSHOT_MAX_BYTES} bytes`);\n }\n entries[relative] = entry.marker;\n }\n const fingerprint = `sha256:${digest(JSON.stringify({\n format: 1,\n git: metadata.git,\n head: metadata.head,\n indexDigest: metadata.indexDigest,\n entries,\n }))}`;\n return {\n fingerprint,\n ...metadata,\n entries,\n files: Object.keys(entries).length,\n bytes,\n };\n};\n\nconst fallbackPaths = (cwd: string, exclusions: string[]): string[] => {\n const paths: string[] = [];\n const visit = (directory: string): void => {\n const entries = fs.readdirSync(directory, { withFileTypes: true })\n .sort((left, right) => left.name.localeCompare(right.name));\n for (const entry of entries) {\n if (FALLBACK_SKIPPED_DIRECTORIES.has(entry.name)) continue;\n const absolute = path.join(directory, entry.name);\n if (excluded(absolute, exclusions)) continue;\n const relative = normalizeRelative(path.relative(cwd, absolute));\n if (entry.isDirectory()) visit(absolute);\n else paths.push(relative);\n if (paths.length > SNAPSHOT_MAX_FILES) {\n throw new Error(`Schema workspace snapshot exceeds ${SNAPSHOT_MAX_FILES} files`);\n }\n }\n };\n visit(cwd);\n return paths;\n};\n\nexport const snapshotWorkspace = (cwdInput: string, excludedRoots: string[] = []): WorkspaceSnapshot => {\n const cwd = fs.realpathSync(cwdInput);\n const exclusions = excludedRoots\n .map((root) => {\n const absolute = path.resolve(root);\n try {\n return fs.realpathSync(absolute);\n } catch {\n return absolute;\n }\n })\n .filter((root) => isInside(cwd, root));\n let worktreePrefix: string;\n try {\n worktreePrefix = git(cwd, [\"rev-parse\", \"--show-prefix\"])\n .toString(\"utf8\")\n .trim();\n } catch {\n return buildSnapshot(\n cwd,\n fallbackPaths(cwd, exclusions),\n { git: false, head: null, indexDigest: null },\n exclusions,\n );\n }\n if (worktreePrefix !== \"\") {\n throw new Error(\"Schema enforce mode requires cwd to be the Git worktree root\");\n }\n let head: string | null = null;\n try {\n head = git(cwd, [\"rev-parse\", \"--verify\", \"HEAD\"]).toString(\"utf8\").trim() || null;\n } catch {\n head = null;\n }\n const index = git(cwd, [\"ls-files\", \"--stage\", \"-z\"]);\n const tracked = nulPaths(git(cwd, [\"ls-files\", \"-z\"]));\n const untracked = nulPaths(git(cwd, [\"ls-files\", \"--others\", \"--exclude-standard\", \"-z\"]));\n return buildSnapshot(\n cwd,\n [...tracked, ...untracked],\n { git: true, head, indexDigest: `sha256:${digest(index)}` },\n exclusions,\n );\n};\n\nexport const resolveWorkspaceFile = (\n cwdInput: string,\n requestedPath: string,\n options: { allowAbsent: boolean },\n): { absolute: string; relative: string; exists: boolean } => {\n if (!requestedPath.trim() || path.isAbsolute(requestedPath)) {\n throw new Error(`Schema paths must be non-empty project-relative paths: ${requestedPath}`);\n }\n const cwd = fs.realpathSync(cwdInput);\n const absolute = path.resolve(cwd, requestedPath);\n if (!isInside(cwd, absolute) || absolute === cwd) {\n throw new Error(`Schema path escapes the project workspace: ${requestedPath}`);\n }\n const relativeParts = path.relative(cwd, absolute).split(path.sep);\n let cursor = cwd;\n for (let index = 0; index < relativeParts.length; index++) {\n cursor = path.join(cursor, relativeParts[index]!);\n let stat: fs.Stats;\n try {\n stat = fs.lstatSync(cursor);\n } catch (error) {\n if (error instanceof Error && \"code\" in error && error.code === \"ENOENT\") {\n if (index !== relativeParts.length - 1 || !options.allowAbsent) {\n throw new Error(`Schema path does not exist: ${requestedPath}`);\n }\n const parentReal = fs.realpathSync(path.dirname(cursor));\n if (!isInside(cwd, parentReal)) throw new Error(`Schema path parent escapes the workspace: ${requestedPath}`);\n return { absolute, relative: normalizeRelative(path.relative(cwd, absolute)), exists: false };\n }\n throw error;\n }\n if (stat.isSymbolicLink()) throw new Error(`Schema path may not traverse a symbolic link: ${requestedPath}`);\n if (index < relativeParts.length - 1 && !stat.isDirectory()) {\n throw new Error(`Schema path parent is not a directory: ${requestedPath}`);\n }\n if (index === relativeParts.length - 1 && !stat.isFile()) {\n throw new Error(`Schema transaction paths must name regular files: ${requestedPath}`);\n }\n }\n return { absolute, relative: normalizeRelative(path.relative(cwd, absolute)), exists: true };\n};\n\nexport const sha256File = (absolute: string): string =>\n `sha256:${digest(fs.readFileSync(absolute))}`;\n", "import type {\n FabricActionDescriptor,\n FabricInvocationContext,\n FabricProvider,\n FabricProviderListRequest,\n} from \"../protocol.js\";\nimport { SchemaController } from \"../schema/controller.js\";\nimport type { SchemaEvidence, SchemaFileOperation } from \"../schema/types.js\";\nimport { actionArgNormalizer } from \"./arg-normalization.js\";\n\nconst pathProperty = { type: \"string\", minLength: 1 };\nconst evidenceSchema = {\n oneOf: [\n {\n type: \"object\",\n properties: { kind: { const: \"file_exists\" }, path: pathProperty },\n required: [\"kind\", \"path\"],\n additionalProperties: false,\n },\n {\n type: \"object\",\n properties: { kind: { const: \"file_absent\" }, path: pathProperty },\n required: [\"kind\", \"path\"],\n additionalProperties: false,\n },\n {\n type: \"object\",\n properties: {\n kind: { const: \"file_contains\" },\n path: pathProperty,\n literal: { type: \"string\", minLength: 1 },\n },\n required: [\"kind\", \"path\", \"literal\"],\n additionalProperties: false,\n },\n {\n type: \"object\",\n properties: {\n kind: { const: \"file_sha256\" },\n path: pathProperty,\n sha256: { type: \"string\", pattern: \"^sha256:[a-f0-9]{64}$\" },\n },\n required: [\"kind\", \"path\", \"sha256\"],\n additionalProperties: false,\n },\n {\n type: \"object\",\n properties: {\n kind: { const: \"trusted_command\" },\n name: { type: \"string\", minLength: 1 },\n },\n required: [\"kind\", \"name\"],\n additionalProperties: false,\n },\n ],\n};\n\nconst expectedSchema = {\n oneOf: [\n {\n type: \"object\",\n properties: { absent: { const: true } },\n required: [\"absent\"],\n additionalProperties: false,\n },\n {\n type: \"object\",\n properties: { sha256: { type: \"string\", pattern: \"^sha256:[a-f0-9]{64}$\" } },\n required: [\"sha256\"],\n additionalProperties: false,\n },\n ],\n};\n\nconst operationSchema = {\n oneOf: [\n {\n type: \"object\",\n properties: {\n kind: { const: \"write\" },\n path: pathProperty,\n content: { type: \"string\" },\n expected: expectedSchema,\n },\n required: [\"kind\", \"path\", \"content\", \"expected\"],\n additionalProperties: false,\n },\n {\n type: \"object\",\n properties: {\n kind: { const: \"edit\" },\n path: pathProperty,\n oldText: { type: \"string\", minLength: 1 },\n newText: { type: \"string\" },\n expectedSha256: { type: \"string\", pattern: \"^sha256:[a-f0-9]{64}$\" },\n },\n required: [\"kind\", \"path\", \"oldText\", \"newText\", \"expectedSha256\"],\n additionalProperties: false,\n },\n {\n type: \"object\",\n properties: {\n kind: { const: \"delete\" },\n path: pathProperty,\n expectedSha256: { type: \"string\", pattern: \"^sha256:[a-f0-9]{64}$\" },\n },\n required: [\"kind\", \"path\", \"expectedSha256\"],\n additionalProperties: false,\n },\n ],\n};\n\nconst descriptors: FabricActionDescriptor[] = [\n {\n name: \"status\",\n description: \"Read the fixed session Schema mode, transaction bounds, generation, and invocation hypotheses\",\n inputSchema: { type: \"object\", properties: {}, additionalProperties: false },\n risk: \"read\",\n namespace: \"schema\",\n },\n {\n name: \"hypothesize\",\n description: \"Durably bind a falsifiable hypothesis and nonempty typed evidence to the current state and workspace\",\n inputSchema: {\n type: \"object\",\n properties: {\n label: { type: \"string\", minLength: 1 },\n summary: { type: \"string\", minLength: 1 },\n evidence: { type: \"array\", minItems: 1, items: evidenceSchema },\n complexityReduction: { type: \"boolean\" },\n },\n required: [\"label\", \"summary\", \"evidence\"],\n additionalProperties: false,\n },\n risk: \"write\",\n namespace: \"schema\",\n },\n {\n name: \"verify\",\n description: \"Fail-closed verification that may issue one fresh invocation-bound single-use certificate\",\n inputSchema: {\n type: \"object\",\n properties: { hypothesisId: { type: \"string\", minLength: 1 } },\n required: [\"hypothesisId\"],\n additionalProperties: false,\n },\n risk: \"execute\",\n namespace: \"schema\",\n },\n {\n name: \"commit\",\n description: \"Consume one same-invocation certificate and atomically attempt bounded declared-file operations with rollback and postconditions\",\n inputSchema: {\n type: \"object\",\n properties: {\n hypothesisId: { type: \"string\", minLength: 1 },\n certificate: { type: \"string\", minLength: 1 },\n operations: { type: \"array\", minItems: 1, items: operationSchema },\n postconditions: { type: \"array\", minItems: 1, items: evidenceSchema },\n },\n required: [\"hypothesisId\", \"certificate\", \"operations\", \"postconditions\"],\n additionalProperties: false,\n },\n risk: \"execute\",\n namespace: \"schema\",\n },\n {\n name: \"abort\",\n description: \"Abort an uncommitted same-invocation hypothesis and optionally its active certificate\",\n inputSchema: {\n type: \"object\",\n properties: {\n hypothesisId: { type: \"string\", minLength: 1 },\n certificate: { type: \"string\", minLength: 1 },\n },\n required: [\"hypothesisId\"],\n additionalProperties: false,\n },\n risk: \"write\",\n namespace: \"schema\",\n },\n];\n\n\n\n// Argument repair derives from the action schemas plus the shared synonym\n// lexicon; no schema-specific table remains.\nexport const normalizeSchemaArgs = actionArgNormalizer(() => descriptors);\n\nexport class SchemaProvider implements FabricProvider {\n readonly name = \"schema\";\n readonly description = \"Host-owned, opt-in Schema verification and bounded local-file transaction control plane\";\n\n constructor(readonly controller: SchemaController) {}\n\n async list(\n request: FabricProviderListRequest,\n _context: FabricInvocationContext,\n ): Promise<FabricActionDescriptor[]> {\n const query = request.query?.toLowerCase();\n return query\n ? descriptors.filter((descriptor) =>\n `${descriptor.name} ${descriptor.description}`.toLowerCase().includes(query),\n )\n : descriptors;\n }\n\n async describe(\n actionName: string,\n _context: FabricInvocationContext,\n ): Promise<FabricActionDescriptor | undefined> {\n return descriptors.find((descriptor) => descriptor.name === actionName);\n }\n\n prepareArguments(\n actionName: string,\n args: Record<string, unknown>,\n ): Record<string, unknown> {\n return normalizeSchemaArgs(actionName, args);\n }\n\n async invoke(\n actionName: string,\n args: Record<string, unknown>,\n context: FabricInvocationContext,\n ): Promise<unknown> {\n switch (actionName) {\n case \"status\":\n return this.controller.status(context.parentToolCallId);\n case \"hypothesize\":\n return this.controller.hypothesize(\n {\n label: String(args.label),\n summary: String(args.summary),\n evidence: args.evidence as SchemaEvidence[],\n ...(args.complexityReduction === true ? { complexityReduction: true } : {}),\n },\n context,\n );\n case \"verify\":\n return this.controller.verify(String(args.hypothesisId), context);\n case \"commit\":\n return this.controller.commit(\n {\n hypothesisId: String(args.hypothesisId),\n certificate: String(args.certificate),\n operations: args.operations as SchemaFileOperation[],\n postconditions: args.postconditions as SchemaEvidence[],\n },\n context,\n );\n case \"abort\":\n return this.controller.abort(\n {\n hypothesisId: String(args.hypothesisId),\n ...(typeof args.certificate === \"string\" ? { certificate: args.certificate } : {}),\n },\n context,\n );\n default:\n throw new Error(`Unknown schema action: ${actionName}`);\n }\n }\n\n async invocationEnded(parentToolCallId: string): Promise<void> {\n await this.controller.endInvocation(parentToolCallId);\n }\n}\n", "import { createHash } from \"node:crypto\";\nimport path from \"node:path\";\nimport {\n MeshStore,\n type MeshEvent,\n type MeshIdentity,\n type MeshStateEntry,\n} from \"../mesh/store.js\";\nimport { countFileComplexity } from \"./complexity.js\";\nimport { runCommand, type CommandResult } from \"./evidence-runner.js\";\nimport type {\n AdvanceHeadInput,\n StateCertificate,\n StateCertificationHead,\n StateCertificationTarget,\n StateComplexityDelta,\n StateComplexityFile,\n StateComplexityResult,\n StateComplexitySummary,\n StateGoal,\n StateHead,\n StateHeadValue,\n StateTransitionComplexity,\n StateTransitionInput,\n StateTransitionKind,\n StateTransitionPhase,\n StateTransitionRecord,\n VerificationFailure,\n VerificationReport,\n VerifyResult,\n} from \"./types.js\";\n\nexport type {\n AdvanceHeadInput,\n StateCertificate,\n StateComplexityResult,\n StateComplexitySummary,\n StateGoal,\n StateHead,\n StateTransitionInput,\n StateTransitionKind,\n StateTransitionRecord,\n VerificationReport,\n} from \"./types.js\";\n\n// The Fabric state layer is the Schema world-model heart: an append-only\n// Timeline of typed, validated transitions stored as mesh events, plus a\n// compare-and-swap head pointer that is recomputable from the log. Raw mesh\n// calls (mesh.read / mesh.get) can inspect everything here. The typed state\n// path validates calls that use it; it is not a gate on direct OMP tools.\n\nexport const STATE_TOPIC = \"fabric.state\";\nexport const CURRENT_KEY = \"state/current\";\nexport const GOAL_KEY = \"state/goal\";\nexport const COMPLEXITY_KEY_PREFIX = \"state/complexity/\";\n\ninterface ComplexityLedgerValue {\n file: string;\n language: string;\n count: number;\n lastDelta: number;\n ts: number;\n}\n\ninterface PreparedComplexity {\n record: StateTransitionComplexity;\n updates: Array<{\n key: string;\n value: ComplexityLedgerValue;\n expectedVersion: number;\n before: MeshStateEntry | undefined;\n }>;\n}\n\ninterface AppliedStateWrite {\n key: string;\n before: MeshStateEntry | undefined;\n written: MeshStateEntry;\n}\n\ninterface TransitionOutcome {\n event: MeshEvent;\n phase: \"certified\" | \"violated\";\n}\n\nconst CAS_RETRY_LIMIT = 8;\nconst REPORT_TEXT_MAX_BYTES = 8 * 1024;\nconst EVENT_TEXT_MAX_BYTES = 1024;\nconst EVENT_OUTPUT_MAX_BYTES = 4 * 1024;\nconst EVENT_RESULT_LIMIT = 8;\nconst EVENT_TARGET_LIMIT = 16;\nconst EVENT_ROLLBACK_LIMIT = 8;\nconst TRANSITION_PROTOCOL_VERSION = 1;\nconst DURABLE_HEAD_PROTOCOL_VERSION = 2;\nconst HEAD_COMMIT_PROOF_VERSION = 1;\n\nconst errorMessage = (error: unknown): string =>\n error instanceof Error ? error.message : String(error);\n\nconst isCasError = (error: unknown): boolean =>\n error instanceof Error && /compare-and-swap failed/.test(error.message);\n\nconst toStringArray = (value: unknown): string[] | undefined => {\n if (!Array.isArray(value)) return undefined;\n const items: string[] = [];\n for (const item of value) {\n if (typeof item === \"string\" && item.trim()) items.push(item);\n }\n return items.length > 0 ? items : undefined;\n};\n\nconst digest = (value: unknown): string =>\n `sha256:${createHash(\"sha256\").update(JSON.stringify(value)).digest(\"hex\")}`;\n\nconst truncateUtf8 = (\n value: string,\n maxBytes: number,\n): { value: string; omittedBytes: number } => {\n const bytes = Buffer.from(value, \"utf8\");\n if (bytes.length <= maxBytes) return { value, omittedBytes: 0 };\n let end = maxBytes;\n while (end > 0 && (bytes[end]! & 0xc0) === 0x80) end--;\n const bounded = bytes.subarray(0, end).toString(\"utf8\");\n return { value: bounded, omittedBytes: bytes.length - end };\n};\n\nconst boundedError = (error: unknown): string =>\n truncateUtf8(errorMessage(error), REPORT_TEXT_MAX_BYTES).value;\n\nconst casActualVersion = (error: unknown): number | undefined => {\n const match = errorMessage(error).match(/found (\\d+)$/);\n return match ? Number(match[1]) : undefined;\n};\n\nconst toComplexityRecord = (\n value: unknown,\n): StateTransitionComplexity | undefined => {\n if (!value || typeof value !== \"object\") return undefined;\n const raw = value as { files?: unknown; netDelta?: unknown };\n if (!Array.isArray(raw.files) || typeof raw.netDelta !== \"number\") {\n return undefined;\n }\n const files: StateComplexityDelta[] = [];\n for (const item of raw.files) {\n if (!item || typeof item !== \"object\") continue;\n const delta = item as Record<string, unknown>;\n if (typeof delta.file !== \"string\" || typeof delta.supported !== \"boolean\") {\n continue;\n }\n files.push({\n file: delta.file,\n supported: delta.supported,\n ...(typeof delta.language === \"string\" ? { language: delta.language } : {}),\n ...(typeof delta.previous === \"number\" ? { previous: delta.previous } : {}),\n ...(typeof delta.current === \"number\" ? { current: delta.current } : {}),\n ...(typeof delta.delta === \"number\" ? { delta: delta.delta } : {}),\n ...(typeof delta.baseline === \"boolean\" ? { baseline: delta.baseline } : {}),\n });\n }\n return { files, netDelta: raw.netDelta };\n};\n\nconst transitionReference = (event: MeshEvent): string | undefined => {\n const data = event.data as Record<string, unknown> | undefined;\n return data && typeof data.transitionId === \"string\" ? data.transitionId : undefined;\n};\n\nconst committedTransitionIds = (events: MeshEvent[]): Set<string> => {\n const committed = new Set<string>();\n const rejected = new Set<string>();\n for (const event of events) {\n const transitionId = transitionReference(event);\n if (!transitionId) continue;\n if (event.kind === \"transition.committed\") committed.add(transitionId);\n if (event.kind === \"transition.rejected\") rejected.add(transitionId);\n }\n for (const transitionId of rejected) committed.delete(transitionId);\n return committed;\n};\n\nconst toRecord = (\n event: MeshEvent,\n committedIds?: ReadonlySet<string>,\n): StateTransitionRecord | undefined => {\n if (event.kind !== \"transition\") return undefined;\n const data = event.data as Record<string, unknown> | undefined;\n if (!data || typeof data !== \"object\") return undefined;\n if (\n data.phase === \"proposed\" &&\n (committedIds === undefined || !committedIds.has(event.id))\n ) {\n return undefined;\n }\n if (data.phase === \"rejected\") return undefined;\n const label = typeof data.label === \"string\" ? data.label : \"\";\n const to = typeof data.to === \"string\" ? data.to : \"\";\n const summary = typeof data.summary === \"string\" ? data.summary : \"\";\n const kind =\n data.kind === \"representation\" ? \"representation\" : \"state\";\n const ts = typeof data.ts === \"number\" ? data.ts : event.createdAt;\n const from = typeof data.from === \"string\" ? data.from : undefined;\n const evidence = toStringArray(data.evidence);\n const tags = toStringArray(data.tags);\n const complexity = toComplexityRecord(data.complexity);\n const certificationStatus =\n data.certificationStatus === \"pending\" ? \"pending\" : undefined;\n if (!label || !to) return undefined;\n return {\n transitionId: event.id,\n sequence: event.sequence,\n label,\n ...(from !== undefined ? { from } : {}),\n to,\n summary,\n ...(evidence !== undefined ? { evidence } : {}),\n ...(tags !== undefined ? { tags } : {}),\n kind,\n ...(complexity !== undefined ? { complexity } : {}),\n ...(certificationStatus !== undefined ? { certificationStatus } : {}),\n ts,\n };\n};\n\nconst toHeadRecord = (head: StateHead): StateTransitionRecord | undefined => {\n if (\n typeof head.transitionSequence !== \"number\" ||\n !Number.isSafeInteger(head.transitionSequence) ||\n head.transitionSequence < 1\n ) {\n return undefined;\n }\n return {\n transitionId: head.transitionId,\n sequence: head.transitionSequence,\n label: head.label,\n ...(head.from !== undefined ? { from: head.from } : {}),\n to: head.to,\n summary: head.summary,\n ...(head.evidence !== undefined ? { evidence: head.evidence } : {}),\n ...(head.tags !== undefined ? { tags: head.tags } : {}),\n kind: head.kind,\n ...(head.complexity !== undefined ? { complexity: head.complexity } : {}),\n ...(head.certificationStatus !== undefined\n ? { certificationStatus: head.certificationStatus }\n : {}),\n ts: head.ts,\n };\n};\n\nconst toCertificationTarget = (value: unknown): StateCertificationTarget | undefined => {\n if (!value || typeof value !== \"object\") return undefined;\n const target = value as Record<string, unknown>;\n if (\n typeof target.transitionId !== \"string\" ||\n typeof target.label !== \"string\" ||\n typeof target.to !== \"string\"\n ) {\n return undefined;\n }\n return {\n transitionId: target.transitionId,\n label: target.label,\n to: target.to,\n };\n};\n\nconst toCertificationHead = (value: unknown): StateCertificationHead | null => {\n if (value === null) return null;\n if (!value || typeof value !== \"object\") return null;\n const head = value as Record<string, unknown>;\n if (\n typeof head.transitionId !== \"string\" ||\n typeof head.label !== \"string\" ||\n typeof head.to !== \"string\" ||\n typeof head.version !== \"number\"\n ) {\n return null;\n }\n return {\n transitionId: head.transitionId,\n label: head.label,\n ...(typeof head.labelDigest === \"string\" ? { labelDigest: head.labelDigest } : {}),\n ...(typeof head.labelOmittedBytes === \"number\"\n ? { labelOmittedBytes: head.labelOmittedBytes }\n : {}),\n to: head.to,\n ...(typeof head.toDigest === \"string\" ? { toDigest: head.toDigest } : {}),\n ...(typeof head.toOmittedBytes === \"number\"\n ? { toOmittedBytes: head.toOmittedBytes }\n : {}),\n version: head.version,\n };\n};\n\nconst verificationTargets = (event: MeshEvent): StateCertificationTarget[] => {\n if (event.kind !== \"state.certified\" && event.kind !== \"state.violated\") return [];\n const data = event.data as Record<string, unknown> | undefined;\n if (!data || !Array.isArray(data.targets)) return [];\n return data.targets\n .map(toCertificationTarget)\n .filter((target): target is StateCertificationTarget => target !== undefined);\n};\n\nconst latestTransitionOutcomes = (events: MeshEvent[]): Map<string, TransitionOutcome> => {\n const latest = new Map<string, TransitionOutcome>();\n for (const event of events) {\n if (event.kind !== \"state.certified\" && event.kind !== \"state.violated\") continue;\n for (const target of verificationTargets(event)) {\n latest.set(target.transitionId, {\n event,\n phase: event.kind === \"state.certified\" ? \"certified\" : \"violated\",\n });\n }\n }\n return latest;\n};\n\nconst toCertificate = (\n event: MeshEvent,\n currentHead: StateHead | null,\n latestOutcomes?: ReadonlyMap<string, TransitionOutcome>,\n): StateCertificate | undefined => {\n if (event.kind !== \"state.certified\") return undefined;\n const data = event.data as Record<string, unknown> | undefined;\n if (\n !data ||\n !Array.isArray(data.targets) ||\n typeof data.evidenceDigest !== \"string\" ||\n typeof data.resultDigest !== \"string\"\n ) {\n return undefined;\n }\n const targets = data.targets\n .map(toCertificationTarget)\n .filter((target): target is StateCertificationTarget => target !== undefined);\n if (targets.length === 0) return undefined;\n const head = toCertificationHead(data.head);\n const currentTarget =\n currentHead === null\n ? undefined\n : targets.find((target) => target.transitionId === currentHead.transitionId);\n const latestCurrentOutcome = currentTarget\n ? latestOutcomes?.get(currentTarget.transitionId)\n : undefined;\n const current =\n head !== null &&\n currentHead !== null &&\n currentTarget !== undefined &&\n head.transitionId === currentHead.transitionId &&\n (head.labelDigest\n ? head.labelDigest === digest(currentHead.label)\n : head.label === currentHead.label) &&\n (head.toDigest ? head.toDigest === digest(currentHead.to) : head.to === currentHead.to) &&\n head.version === currentHead.version &&\n (latestCurrentOutcome === undefined ||\n (latestCurrentOutcome.phase === \"certified\" &&\n latestCurrentOutcome.event.sequence === event.sequence));\n return {\n certificateId: event.id,\n sequence: event.sequence,\n certificationStatus: \"certified\",\n targets,\n head,\n evidenceDigest: data.evidenceDigest,\n resultDigest: data.resultDigest,\n ts: typeof data.ts === \"number\" ? data.ts : event.createdAt,\n current,\n };\n};\n\nconst durableCurrentCertificate = (\n head: StateHead,\n latestOutcomes?: ReadonlyMap<string, TransitionOutcome>,\n): StateCertificate | undefined => {\n const certificate = head.certificate;\n if (\n !certificate ||\n certificate.certificationStatus !== \"certified\" ||\n typeof certificate.certificateId !== \"string\" ||\n typeof certificate.sequence !== \"number\" ||\n !Array.isArray(certificate.targets) ||\n typeof certificate.evidenceDigest !== \"string\" ||\n typeof certificate.resultDigest !== \"string\" ||\n typeof certificate.ts !== \"number\"\n ) {\n return undefined;\n }\n const certificateHead = toCertificationHead(certificate.head);\n const targets = certificate.targets\n .map(toCertificationTarget)\n .filter((target): target is StateCertificationTarget => target !== undefined);\n const target = targets.find(\n (item) =>\n item.transitionId === head.transitionId &&\n item.label === head.label &&\n item.to === head.to,\n );\n const latestOutcome = latestOutcomes?.get(head.transitionId);\n if (\n !target ||\n certificateHead === null ||\n certificateHead.transitionId !== head.transitionId ||\n (certificateHead.labelDigest\n ? certificateHead.labelDigest !== digest(head.label)\n : certificateHead.label !== head.label) ||\n (certificateHead.toDigest\n ? certificateHead.toDigest !== digest(head.to)\n : certificateHead.to !== head.to) ||\n certificateHead.version !== head.version ||\n (latestOutcome !== undefined &&\n (latestOutcome.phase !== \"certified\" ||\n latestOutcome.event.sequence !== certificate.sequence))\n ) {\n return undefined;\n }\n return {\n ...certificate,\n targets,\n head: certificateHead,\n current: true,\n };\n};\n\nconst toVerifyResult = (\n claim: string,\n command: string,\n result: CommandResult,\n): VerifyResult => {\n const boundedClaim = truncateUtf8(claim, REPORT_TEXT_MAX_BYTES);\n const boundedCommand = truncateUtf8(command, REPORT_TEXT_MAX_BYTES);\n const boundedResultError = result.error\n ? truncateUtf8(result.error, REPORT_TEXT_MAX_BYTES)\n : undefined;\n return {\n claim: boundedClaim.value,\n claimDigest: digest(claim),\n ...(boundedClaim.omittedBytes > 0\n ? { claimOmittedBytes: boundedClaim.omittedBytes }\n : {}),\n command: boundedCommand.value,\n commandDigest: digest(command),\n ...(boundedCommand.omittedBytes > 0\n ? { commandOmittedBytes: boundedCommand.omittedBytes }\n : {}),\n status: result.status,\n exitCode: result.exitCode,\n output: result.output,\n outputBytes: result.outputBytes,\n outputOmittedBytes: result.outputOmittedBytes,\n outputDigest: result.outputDigest,\n ...(boundedResultError\n ? {\n error: boundedResultError.value,\n errorDigest: digest(result.error),\n ...(boundedResultError.omittedBytes > 0\n ? { errorOmittedBytes: boundedResultError.omittedBytes }\n : {}),\n }\n : {}),\n };\n};\n\nconst toEventResult = (result: VerifyResult): VerifyResult => {\n const claim = truncateUtf8(result.claim, EVENT_TEXT_MAX_BYTES);\n const command = truncateUtf8(result.command, EVENT_TEXT_MAX_BYTES);\n const output = truncateUtf8(result.output, EVENT_OUTPUT_MAX_BYTES);\n const error = result.error\n ? truncateUtf8(result.error, EVENT_TEXT_MAX_BYTES)\n : undefined;\n return {\n ...result,\n claim: claim.value,\n claimOmittedBytes: (result.claimOmittedBytes ?? 0) + claim.omittedBytes,\n command: command.value,\n commandOmittedBytes: (result.commandOmittedBytes ?? 0) + command.omittedBytes,\n output: output.value,\n outputOmittedBytes: result.outputOmittedBytes + output.omittedBytes,\n ...(error\n ? {\n error: error.value,\n errorOmittedBytes: (result.errorOmittedBytes ?? 0) + error.omittedBytes,\n }\n : {}),\n };\n};\n\nconst toEventFailure = (failure: VerificationFailure): VerificationFailure => {\n const message = truncateUtf8(failure.message, EVENT_TEXT_MAX_BYTES).value;\n const transitionId = failure.transitionId\n ? truncateUtf8(failure.transitionId, EVENT_TEXT_MAX_BYTES).value\n : undefined;\n const label = failure.label\n ? truncateUtf8(failure.label, EVENT_TEXT_MAX_BYTES).value\n : undefined;\n const command = failure.command\n ? truncateUtf8(failure.command, EVENT_TEXT_MAX_BYTES).value\n : undefined;\n const error = failure.error\n ? truncateUtf8(failure.error, EVENT_TEXT_MAX_BYTES).value\n : undefined;\n return {\n ...failure,\n message,\n ...(transitionId !== undefined ? { transitionId } : {}),\n ...(label !== undefined ? { label } : {}),\n ...(command !== undefined ? { command } : {}),\n ...(error !== undefined ? { error } : {}),\n };\n};\n\nexport class StateStore {\n constructor(readonly store: MeshStore) {}\n\n toHead(entry: MeshStateEntry): StateHead {\n const value = entry.value as StateHeadValue;\n return { ...value, version: entry.version };\n }\n\n get(): {\n head: StateHead | null;\n goal: StateGoal | null;\n complexity: StateComplexitySummary;\n certification: {\n current: StateCertificate | null;\n recent: StateCertificate[];\n };\n } {\n const storedHead = this.getHead();\n const goalEntry = this.store.get(GOAL_KEY);\n const goal = goalEntry ? (goalEntry.value as StateGoal) : null;\n const ledgers = this.complexityLedgers();\n const history = this.history({});\n const lastComplexity = history.transitions\n .filter((transition) => transition.complexity !== undefined)\n .at(-1)?.complexity;\n const headRecord = storedHead\n ? history.transitions.find(\n (transition) => transition.transitionId === storedHead.transitionId,\n )\n : undefined;\n const head = storedHead\n ? (() => {\n const { certificate: _storedCertificate, ...baseHead } = storedHead;\n return headRecord?.certificate\n ? {\n ...baseHead,\n certificationStatus: \"certified\" as const,\n certificate: headRecord.certificate,\n }\n : baseHead;\n })()\n : null;\n const complexity = {\n files: ledgers.length,\n decisionPoints: ledgers.reduce((total, ledger) => total + ledger.count, 0),\n lastNetDelta: lastComplexity?.netDelta ?? 0,\n };\n return {\n head,\n goal,\n complexity,\n certification: {\n current: history.certifications.find((certificate) => certificate.current) ?? null,\n recent: history.certifications.slice(0, 20),\n },\n };\n }\n\n getHead(): StateHead | null {\n const entry = this.store.get(CURRENT_KEY);\n if (!entry) return null;\n const head = this.toHead(entry);\n if (head.protocolVersion === DURABLE_HEAD_PROTOCOL_VERSION) {\n const proof = head.commitProof;\n const hasValidSequence =\n typeof head.transitionSequence === \"number\" &&\n Number.isSafeInteger(head.transitionSequence) &&\n head.transitionSequence > 0;\n if (\n !hasValidSequence ||\n proof?.version !== HEAD_COMMIT_PROOF_VERSION\n ) {\n return null;\n }\n if (proof.status === \"committed\") return head;\n if (proof.status !== \"pending\") return null;\n return committedTransitionIds(this.stateEvents()).has(head.transitionId)\n ? head\n : null;\n }\n const events = this.stateEvents();\n const committedIds = committedTransitionIds(events);\n if (head.protocolVersion === TRANSITION_PROTOCOL_VERSION) {\n return committedIds.has(head.transitionId) ? head : null;\n }\n const proposal = events.find(\n (event) => event.kind === \"transition\" && event.id === head.transitionId,\n );\n if (!proposal) return head;\n const data = proposal.data as Record<string, unknown> | undefined;\n return data?.phase === \"proposed\" && !committedIds.has(proposal.id) ? null : head;\n }\n\n async transition(\n input: StateTransitionInput,\n identity: MeshIdentity,\n cwd = process.cwd(),\n ): Promise<{ event: MeshEvent; head: StateHead }> {\n const physicalCurrent = this.store.get(CURRENT_KEY);\n const current = this.getHead();\n const expectedVersion =\n physicalCurrent?.version ?? this.lastDeletedVersion(CURRENT_KEY);\n if (physicalCurrent && !current) {\n throw new Error(\n \"State contention: current head belongs to an uncommitted or quarantined proposal\",\n );\n }\n const currentTo = current?.to;\n const force = input.force === true;\n if (!force && currentTo !== undefined && input.from !== undefined) {\n if (input.from !== currentTo) {\n throw new Error(\n `State from-mismatch: head is at \"${currentTo}\", but transition declares from \"${input.from}\"`,\n );\n }\n }\n const ts = Date.now();\n const preparedComplexity = input.complexity\n ? this.prepareComplexity(input.complexity.files, cwd, ts)\n : undefined;\n const isComplexityReduction =\n preparedComplexity !== undefined && preparedComplexity.record.netDelta < 0;\n if (\n isComplexityReduction &&\n !input.evidence?.some((command) => command.trim().length > 0)\n ) {\n throw new Error(\n `State complexity reduction rejected: net decision-point delta is ${preparedComplexity.record.netDelta}. Reducing branches is also achievable by deleting error handling; attach at least one replayable behavior-preservation evidence command to separate abstraction from vandalism. The reduction remains pending until a later state.verify() succeeds.`,\n );\n }\n const kind: StateTransitionKind = input.kind ?? \"state\";\n const data: Record<string, unknown> = {\n protocolVersion: TRANSITION_PROTOCOL_VERSION,\n phase: \"proposed\" satisfies StateTransitionPhase,\n label: input.label,\n to: input.to,\n summary: input.summary,\n kind,\n ts,\n ...(input.from !== undefined ? { from: input.from } : {}),\n ...(input.evidence ? { evidence: input.evidence } : {}),\n ...(input.tags ? { tags: input.tags } : {}),\n ...(preparedComplexity ? { complexity: preparedComplexity.record } : {}),\n ...(isComplexityReduction ? { certificationStatus: \"pending\" } : {}),\n };\n const event = await this.store.publish({\n topic: STATE_TOPIC,\n kind: \"transition\",\n from: identity,\n text: input.summary,\n data,\n });\n const applied: AppliedStateWrite[] = [];\n let headWrite: AppliedStateWrite | undefined;\n let commitMarkerPublished = false;\n try {\n for (const update of preparedComplexity?.updates ?? []) {\n const written = await this.store.put({\n key: update.key,\n value: update.value,\n ifVersion: update.expectedVersion,\n identity,\n });\n applied.push({ key: update.key, before: update.before, written });\n }\n const payload: StateHeadValue = {\n protocolVersion: DURABLE_HEAD_PROTOCOL_VERSION,\n commitProof: {\n version: HEAD_COMMIT_PROOF_VERSION,\n status: \"pending\",\n },\n transitionSequence: event.sequence,\n label: input.label,\n ...(input.from !== undefined ? { from: input.from } : {}),\n to: input.to,\n summary: input.summary,\n kind,\n ...(preparedComplexity ? { complexity: preparedComplexity.record } : {}),\n transitionId: event.id,\n ts,\n ...(input.evidence ? { evidence: input.evidence } : {}),\n ...(input.tags ? { tags: input.tags } : {}),\n ...(isComplexityReduction ? { certificationStatus: \"pending\" } : {}),\n };\n const advanced = await this.advanceHeadWithBefore({\n payload,\n from: input.from,\n force,\n expectedVersion,\n identity,\n });\n headWrite = {\n key: CURRENT_KEY,\n before: advanced.before,\n written: advanced.entry,\n };\n await this.store.publish({\n topic: STATE_TOPIC,\n kind: \"transition.committed\",\n from: identity,\n text: \"state transition committed\",\n data: {\n protocolVersion: TRANSITION_PROTOCOL_VERSION,\n phase: \"committed\" satisfies StateTransitionPhase,\n transitionId: event.id,\n ts: Date.now(),\n },\n });\n commitMarkerPublished = true;\n const committedHead = await this.markHeadCommitted(advanced.entry, identity);\n return { event, head: this.toHead(committedHead) };\n } catch (error) {\n if (commitMarkerPublished) {\n throw new Error(\n `State transition committed, but its durable head proof remains pending: ${boundedError(error)}`,\n { cause: error },\n );\n }\n const rollback = await this.rollbackWrites(\n [...(headWrite ? [headWrite] : []), ...applied.reverse()],\n identity,\n );\n let reportingError: string | undefined;\n try {\n const deletedChunks: Array<Array<{ key: string; version: number }>> = [];\n for (\n let index = 0;\n index < rollback.deleted.length;\n index += EVENT_ROLLBACK_LIMIT\n ) {\n deletedChunks.push(\n rollback.deleted.slice(index, index + EVENT_ROLLBACK_LIMIT).map((item) => ({\n key: truncateUtf8(item.key, REPORT_TEXT_MAX_BYTES).value,\n version: item.version,\n })),\n );\n }\n if (deletedChunks.length === 0) deletedChunks.push([]);\n for (let index = 0; index < deletedChunks.length; index++) {\n await this.store.publish({\n topic: STATE_TOPIC,\n kind: \"transition.rejected\",\n from: identity,\n text: rollback.errors.length > 0\n ? \"state transition quarantined\"\n : \"state transition rejected\",\n data: {\n protocolVersion: TRANSITION_PROTOCOL_VERSION,\n phase: \"rejected\" satisfies StateTransitionPhase,\n transitionId: event.id,\n error: truncateUtf8(errorMessage(error), EVENT_TEXT_MAX_BYTES).value,\n rollback: {\n restored: rollback.errors.length === 0,\n deleted: deletedChunks[index],\n errors: index === 0\n ? rollback.errors\n .slice(0, EVENT_ROLLBACK_LIMIT)\n .map((item) => truncateUtf8(item, EVENT_TEXT_MAX_BYTES).value)\n : [],\n omittedErrorCount: Math.max(\n 0,\n rollback.errors.length - EVENT_ROLLBACK_LIMIT,\n ),\n chunk: { index, count: deletedChunks.length },\n },\n quarantine: rollback.errors.length > 0,\n ts: Date.now(),\n },\n });\n }\n } catch (publishError) {\n reportingError = boundedError(publishError);\n }\n const detail = [\n `State transition rejected: ${boundedError(error)}`,\n ...(rollback.errors.length > 0\n ? [`rollback quarantine: ${rollback.errors.join(\"; \")}`]\n : []),\n ...(reportingError ? [`rejection reporting failed: ${reportingError}`] : []),\n ].join(\"; \");\n throw new Error(detail, { cause: error });\n }\n }\n\n private async markHeadCommitted(\n pending: MeshStateEntry,\n identity: MeshIdentity,\n ): Promise<MeshStateEntry> {\n const value = pending.value as StateHeadValue;\n try {\n return await this.store.put({\n key: CURRENT_KEY,\n value: {\n ...value,\n commitProof: {\n version: HEAD_COMMIT_PROOF_VERSION,\n status: \"committed\",\n },\n } satisfies StateHeadValue,\n ifVersion: pending.version,\n identity,\n });\n } catch (error) {\n if (!isCasError(error)) throw error;\n const current = this.store.get(CURRENT_KEY);\n if (\n current &&\n (current.value as StateHeadValue).transitionId === value.transitionId &&\n (current.value as StateHeadValue).commitProof?.version ===\n HEAD_COMMIT_PROOF_VERSION &&\n (current.value as StateHeadValue).commitProof?.status === \"committed\"\n ) {\n return current;\n }\n return pending;\n }\n }\n\n // Advance the compare-and-swap head pointer for a durable proposal. The\n // proposal remains invisible until its commit marker. On CAS contention we\n // re-read, re-validate `from` against the new head, and retry \u2014 a bounded\n // number of times. If `from` no longer chains from the current head, the\n // transition is rejected with the actual current label (Schema's surprise:\n // the plan's assumed state was voided by a concurrent writer).\n async advanceHead(input: AdvanceHeadInput): Promise<MeshStateEntry> {\n return (await this.advanceHeadWithBefore(input)).entry;\n }\n\n private async advanceHeadWithBefore(\n input: AdvanceHeadInput,\n ): Promise<{ entry: MeshStateEntry; before: MeshStateEntry | undefined }> {\n let version = input.expectedVersion;\n for (let attempt = 0; attempt < CAS_RETRY_LIMIT; attempt++) {\n const before = this.store.get(CURRENT_KEY);\n try {\n const entry = await this.store.put({\n key: CURRENT_KEY,\n value: input.payload,\n ifVersion: version,\n identity: input.identity,\n });\n return { entry, before };\n } catch (error) {\n if (!isCasError(error)) throw error;\n const current = this.store.get(CURRENT_KEY);\n const actualTo = current\n ? (current.value as StateHeadValue).to\n : undefined;\n if (!input.force) {\n if (current && input.from !== undefined && actualTo !== undefined) {\n if (input.from !== actualTo) {\n throw new Error(\n `State contention: head is at \"${actualTo}\", cannot transition from \"${input.from}\"`,\n );\n }\n } else if (current && input.from === undefined) {\n throw new Error(\n `State contention: head advanced to \"${actualTo ?? \"<unknown>\"}\" before transition`,\n );\n }\n }\n version = current?.version ?? casActualVersion(error) ?? 0;\n }\n }\n throw new Error(\n `State contention: compare-and-swap retries exhausted after ${CAS_RETRY_LIMIT} attempts`,\n );\n }\n\n private async rollbackWrites(\n writes: AppliedStateWrite[],\n identity: MeshIdentity,\n ): Promise<{ deleted: Array<{ key: string; version: number }>; errors: string[] }> {\n const deleted: Array<{ key: string; version: number }> = [];\n const errors: string[] = [];\n for (const write of writes) {\n try {\n if (write.before) {\n await this.store.put({\n key: write.key,\n value: write.before.value,\n ifVersion: write.written.version,\n identity,\n });\n } else {\n const result = await this.store.delete({\n key: write.key,\n ifVersion: write.written.version,\n });\n if (result.deleted && result.version !== undefined) {\n deleted.push({ key: write.key, version: result.version });\n }\n }\n } catch (error) {\n errors.push(`${write.key}: ${boundedError(error)}`);\n }\n }\n return { deleted, errors };\n }\n\n private stateEvents(): MeshEvent[] {\n return this.store.read({ topic: STATE_TOPIC, limit: this.store.maxReadEvents });\n }\n\n private lastDeletedVersion(key: string): number {\n const events = this.stateEvents();\n for (let index = events.length - 1; index >= 0; index--) {\n const event = events[index];\n if (event?.kind !== \"transition.rejected\") continue;\n const data = event.data as Record<string, unknown> | undefined;\n const rollback = data?.rollback as Record<string, unknown> | undefined;\n if (!rollback || !Array.isArray(rollback.deleted)) continue;\n for (const item of rollback.deleted) {\n if (!item || typeof item !== \"object\") continue;\n const deleted = item as Record<string, unknown>;\n if (deleted.key === key && typeof deleted.version === \"number\") {\n return deleted.version;\n }\n }\n }\n return 0;\n }\n\n history(input: {\n label?: string;\n limit?: number;\n includeArchived?: boolean;\n } = {}): {\n transitions: StateTransitionRecord[];\n labels: string[];\n certifications: StateCertificate[];\n } {\n const events = this.stateEvents();\n const committedIds = committedTransitionIds(events);\n const currentHead = this.getHead();\n const records: StateTransitionRecord[] = [];\n for (const event of events) {\n const record = toRecord(event, committedIds);\n if (record) records.push(record);\n }\n if (\n currentHead &&\n !records.some((record) => record.transitionId === currentHead.transitionId)\n ) {\n const currentRecord = toHeadRecord(currentHead);\n if (currentRecord) records.push(currentRecord);\n }\n records.sort((left, right) => left.sequence - right.sequence);\n let lastRepresentation = -1;\n for (let index = records.length - 1; index >= 0; index--) {\n if (records[index]?.kind === \"representation\") {\n lastRepresentation = index;\n break;\n }\n }\n const visibleRecords =\n input.includeArchived || lastRepresentation < 0\n ? records\n : records.slice(lastRepresentation);\n const visibleIds = new Set(visibleRecords.map((record) => record.transitionId));\n const latestOutcomes = latestTransitionOutcomes(events);\n const eventCertifications = events\n .map((event) => toCertificate(event, currentHead, latestOutcomes))\n .filter((certificate): certificate is StateCertificate => certificate !== undefined)\n .filter((certificate) =>\n certificate.targets.every((target) => visibleIds.has(target.transitionId)),\n )\n .reverse();\n const durableCertificate = currentHead\n ? durableCurrentCertificate(currentHead, latestOutcomes)\n : undefined;\n const certifications = durableCertificate\n ? [\n durableCertificate,\n ...eventCertifications.filter(\n (certificate) =>\n certificate.certificateId !== durableCertificate.certificateId,\n ),\n ]\n : eventCertifications;\n const certificatesBySequence = new Map(\n certifications.map((certificate) => [certificate.sequence, certificate]),\n );\n const latestCertificate = new Map<string, StateCertificate>();\n for (const record of visibleRecords) {\n const outcome = latestOutcomes.get(record.transitionId);\n if (outcome?.phase !== \"certified\") continue;\n const certificate = certificatesBySequence.get(outcome.event.sequence);\n if (certificate) latestCertificate.set(record.transitionId, certificate);\n }\n if (durableCertificate) {\n latestCertificate.set(currentHead!.transitionId, durableCertificate);\n }\n const archiveBoundaryId =\n input.includeArchived !== true && lastRepresentation > 0\n ? records[lastRepresentation]?.transitionId\n : undefined;\n const filtered = (input.label\n ? visibleRecords.filter(\n (record) =>\n record.label === input.label ||\n record.to === input.label ||\n (record.from === input.label &&\n record.transitionId !== archiveBoundaryId),\n )\n : visibleRecords\n ).map((record) => {\n const certificate = latestCertificate.get(record.transitionId);\n return certificate\n ? { ...record, certificationStatus: \"certified\" as const, certificate }\n : record;\n });\n const limited =\n input.limit !== undefined && input.limit > 0\n ? filtered.slice(0, input.limit)\n : filtered;\n const labelSet = new Set<string>();\n const limitedIds = new Set<string>();\n for (const record of limited) {\n limitedIds.add(record.transitionId);\n if (record.from && record.transitionId !== archiveBoundaryId) {\n labelSet.add(record.from);\n }\n labelSet.add(record.to);\n labelSet.add(record.label);\n }\n return {\n transitions: limited,\n labels: [...labelSet],\n certifications: certifications.filter((certificate) =>\n certificate.targets.some((target) => limitedIds.has(target.transitionId)),\n ),\n };\n }\n\n complexity(input: { files?: string[]; cwd: string }): StateComplexityResult {\n const requestedFiles = input.files ?? this.complexityLedgers().map((entry) => entry.file);\n const files: StateComplexityFile[] = [];\n let netDelta = 0;\n for (const file of this.normalizeComplexityFiles(requestedFiles, input.cwd)) {\n const measured = countFileComplexity(path.resolve(input.cwd, file));\n if (!measured) {\n files.push({ file, supported: false });\n continue;\n }\n const ledger = this.readComplexityLedger(file);\n const delta = ledger ? measured.count - ledger.count : 0;\n netDelta += delta;\n files.push({\n file,\n supported: true,\n language: measured.language,\n current: measured.count,\n ...(ledger\n ? {\n recorded: ledger.count,\n delta,\n recordedDelta: ledger.lastDelta,\n }\n : { delta: 0 }),\n });\n }\n return { files, netDelta };\n }\n\n private prepareComplexity(\n files: string[],\n cwd: string,\n ts: number,\n ): PreparedComplexity {\n const deltas: StateComplexityDelta[] = [];\n const updates: PreparedComplexity[\"updates\"] = [];\n let netDelta = 0;\n for (const file of this.normalizeComplexityFiles(files, cwd)) {\n const measured = countFileComplexity(path.resolve(cwd, file));\n if (!measured) {\n deltas.push({ file, supported: false });\n continue;\n }\n const entry = this.store.get(this.complexityKey(file));\n const previous = entry ? (entry.value as ComplexityLedgerValue).count : undefined;\n const delta = previous === undefined ? 0 : measured.count - previous;\n netDelta += delta;\n deltas.push({\n file,\n supported: true,\n language: measured.language,\n ...(previous !== undefined ? { previous } : {}),\n current: measured.count,\n delta,\n baseline: previous === undefined,\n });\n const key = this.complexityKey(file);\n updates.push({\n key,\n value: {\n file,\n language: measured.language,\n count: measured.count,\n lastDelta: delta,\n ts,\n },\n expectedVersion: entry?.version ?? this.lastDeletedVersion(key),\n before: entry,\n });\n }\n return { record: { files: deltas, netDelta }, updates };\n }\n\n private complexityLedgers(): ComplexityLedgerValue[] {\n return this.store\n .list(COMPLEXITY_KEY_PREFIX, this.store.maxReadEvents)\n .map((entry) => entry.value as ComplexityLedgerValue)\n .filter(\n (value) =>\n typeof value.file === \"string\" &&\n typeof value.language === \"string\" &&\n typeof value.count === \"number\" &&\n typeof value.lastDelta === \"number\",\n );\n }\n\n private readComplexityLedger(file: string): ComplexityLedgerValue | undefined {\n const entry = this.store.get(this.complexityKey(file));\n return entry ? (entry.value as ComplexityLedgerValue) : undefined;\n }\n\n private complexityKey(file: string): string {\n return `${COMPLEXITY_KEY_PREFIX}${file}`;\n }\n\n private normalizeComplexityFiles(files: string[], cwd: string): string[] {\n const normalized = new Set<string>();\n for (const file of files) {\n if (!file.trim()) continue;\n const relative = path.relative(cwd, path.resolve(cwd, file));\n if (\n relative === \"..\" ||\n relative.startsWith(`..${path.sep}`) ||\n path.isAbsolute(relative)\n ) {\n throw new Error(`State complexity file must be inside the project cwd: ${file}`);\n }\n normalized.add(relative.split(path.sep).join(\"/\"));\n }\n return [...normalized];\n }\n\n async goal(\n input: { check: string; description?: string },\n identity: MeshIdentity,\n ): Promise<MeshStateEntry> {\n const value: StateGoal = {\n check: input.check,\n ...(input.description !== undefined ? { description: input.description } : {}),\n };\n return this.store.put({\n key: GOAL_KEY,\n value,\n identity,\n });\n }\n\n async checkGoal(input: {\n cwd: string;\n timeoutMs?: number;\n signal?: AbortSignal | undefined;\n identity: MeshIdentity;\n }): Promise<{\n passed: boolean;\n output: string;\n exitCode: number | null;\n error?: string;\n }> {\n const entry = this.store.get(GOAL_KEY);\n if (!entry) throw new Error(\"No goal set\");\n const goal = entry.value as StateGoal;\n const result = await runCommand(goal.check, {\n cwd: input.cwd,\n timeoutMs: input.timeoutMs ?? 30_000,\n ...(input.signal ? { signal: input.signal } : {}),\n });\n const passed = result.status === \"confirmed\";\n if (passed) {\n const check = truncateUtf8(goal.check, EVENT_TEXT_MAX_BYTES);\n const output = truncateUtf8(result.output, EVENT_OUTPUT_MAX_BYTES);\n await this.store.publish({\n topic: STATE_TOPIC,\n kind: \"state.goal.met\",\n from: input.identity,\n text: \"goal met\",\n data: {\n check: check.value,\n checkDigest: digest(goal.check),\n checkOmittedBytes: check.omittedBytes,\n output: output.value,\n outputBytes: result.outputBytes,\n outputOmittedBytes: result.outputOmittedBytes + output.omittedBytes,\n outputDigest: result.outputDigest,\n exitCode: result.exitCode,\n },\n });\n }\n return {\n passed,\n output: result.output,\n exitCode: result.exitCode,\n ...(result.error !== undefined ? { error: result.error } : {}),\n };\n }\n\n private async persistCurrentCertificate(\n certificate: StateCertificate,\n verificationHead: StateHead,\n identity: MeshIdentity,\n ): Promise<StateCertificate> {\n const current = this.store.get(CURRENT_KEY);\n const currentValue = current?.value as StateHeadValue | undefined;\n if (\n !current ||\n current.version !== verificationHead.version ||\n currentValue?.transitionId !== verificationHead.transitionId ||\n currentValue.label !== verificationHead.label ||\n currentValue.to !== verificationHead.to\n ) {\n return { ...certificate, current: false };\n }\n const certificateHead = certificate.head;\n if (certificateHead === null) return { ...certificate, current: false };\n const nextVersion = current.version + 1;\n const durableCertificate: StateCertificate = {\n ...certificate,\n head: { ...certificateHead, version: nextVersion },\n current: true,\n };\n try {\n const written = await this.store.put({\n key: CURRENT_KEY,\n value: {\n ...currentValue,\n certificate: durableCertificate,\n } satisfies StateHeadValue,\n ifVersion: current.version,\n identity,\n });\n return written.version === nextVersion\n ? durableCertificate\n : { ...durableCertificate, current: false };\n } catch (error) {\n if (isCasError(error)) return { ...certificate, current: false };\n throw error;\n }\n }\n\n private async revokeCurrentCertificate(\n verificationHead: StateHead,\n identity: MeshIdentity,\n ): Promise<void> {\n const current = this.store.get(CURRENT_KEY);\n const currentValue = current?.value as StateHeadValue | undefined;\n if (\n !current ||\n current.version !== verificationHead.version ||\n currentValue?.transitionId !== verificationHead.transitionId ||\n currentValue.label !== verificationHead.label ||\n currentValue.to !== verificationHead.to ||\n currentValue.certificate === undefined\n ) {\n return;\n }\n const { certificate: _certificate, ...withoutCertificate } = currentValue;\n try {\n await this.store.put({\n key: CURRENT_KEY,\n value: withoutCertificate,\n ifVersion: current.version,\n identity,\n });\n } catch (error) {\n if (!isCasError(error)) throw error;\n }\n }\n\n async verify(input: {\n labels?: string[];\n includeArchived?: boolean;\n cwd: string;\n timeoutMs?: number;\n signal?: AbortSignal | undefined;\n identity: MeshIdentity;\n }): Promise<VerificationReport> {\n const verificationHead = this.getHead();\n const boundedHeadLabel = verificationHead\n ? truncateUtf8(verificationHead.label, EVENT_TEXT_MAX_BYTES)\n : undefined;\n const boundedHeadTo = verificationHead\n ? truncateUtf8(verificationHead.to, EVENT_TEXT_MAX_BYTES)\n : undefined;\n const headIdentity: StateCertificationHead | null =\n verificationHead && boundedHeadLabel && boundedHeadTo\n ? {\n transitionId: verificationHead.transitionId,\n label: boundedHeadLabel.value,\n labelDigest: digest(verificationHead.label),\n ...(boundedHeadLabel.omittedBytes > 0\n ? { labelOmittedBytes: boundedHeadLabel.omittedBytes }\n : {}),\n to: boundedHeadTo.value,\n toDigest: digest(verificationHead.to),\n ...(boundedHeadTo.omittedBytes > 0\n ? { toOmittedBytes: boundedHeadTo.omittedBytes }\n : {}),\n version: verificationHead.version,\n }\n : null;\n let targets: StateTransitionRecord[];\n if (input.labels !== undefined) {\n const matches = new Map<string, StateTransitionRecord>();\n for (const label of input.labels.filter((item) => item.trim().length > 0)) {\n const { transitions } = this.history({\n label,\n includeArchived: input.includeArchived === true,\n });\n for (const transition of transitions) {\n matches.set(transition.transitionId, transition);\n }\n }\n targets = [...matches.values()].sort(\n (left, right) => left.sequence - right.sequence,\n );\n } else if (verificationHead) {\n const { transitions } = this.history({\n includeArchived: input.includeArchived === true,\n });\n const match = transitions.find(\n (record) => record.transitionId === verificationHead.transitionId,\n );\n targets = match ? [match] : [];\n } else {\n targets = [];\n }\n\n const certificationTargets: StateCertificationTarget[] = targets.map((target) => ({\n transitionId: target.transitionId,\n label: target.label,\n to: target.to,\n }));\n const evidenceDigest = digest(\n targets.map((target) => ({\n transitionId: target.transitionId,\n label: target.label,\n to: target.to,\n evidence: target.evidence ?? [],\n })),\n );\n const results: VerifyResult[] = [];\n const failures: VerificationFailure[] = [];\n if (targets.length === 0) {\n failures.push({\n reason: \"missing-target\",\n message:\n input.labels === undefined\n ? \"No current state transition is available to verify\"\n : \"No active state transitions matched the requested labels\",\n });\n }\n\n for (const target of targets) {\n const evidence = target.evidence ?? [];\n if (evidence.length === 0) {\n failures.push({\n reason: \"missing-evidence\",\n message: `Transition \"${target.label}\" has no executable evidence`,\n transitionId: target.transitionId,\n label: target.label,\n });\n }\n for (const command of evidence) {\n const result: CommandResult = input.signal?.aborted\n ? {\n status: \"error\",\n exitCode: null,\n output: \"\",\n outputBytes: 0,\n outputOmittedBytes: 0,\n outputDigest: digest(\"\"),\n error: \"aborted before execution\",\n }\n : await runCommand(command, {\n cwd: input.cwd,\n timeoutMs: input.timeoutMs ?? 30_000,\n ...(input.signal ? { signal: input.signal } : {}),\n });\n results.push(toVerifyResult(target.summary, command, result));\n }\n }\n\n for (const result of results) {\n if (result.status === \"confirmed\") continue;\n failures.push({\n reason: result.status === \"violated\" ? \"nonzero-exit\" : \"execution-error\",\n message:\n result.status === \"violated\"\n ? `Evidence exited nonzero (${result.exitCode ?? \"unknown\"}): ${result.command}`\n : `Evidence could not be confirmed: ${result.command}${result.error ? ` (${result.error})` : \"\"}`,\n command: result.command,\n status: result.status,\n exitCode: result.exitCode,\n ...(result.error !== undefined ? { error: result.error } : {}),\n });\n }\n\n let certified =\n results.length > 0 &&\n failures.length === 0 &&\n results.every((result) => result.status === \"confirmed\");\n let resultDigest = digest({ results, failures });\n const boundedTargets = certificationTargets.map((target) => ({\n transitionId: truncateUtf8(target.transitionId, EVENT_TEXT_MAX_BYTES).value,\n label: truncateUtf8(target.label, EVENT_TEXT_MAX_BYTES).value,\n to: truncateUtf8(target.to, EVENT_TEXT_MAX_BYTES).value,\n }));\n const targetChunks: StateCertificationTarget[][] = [];\n for (let index = 0; index < boundedTargets.length; index += EVENT_TARGET_LIMIT) {\n targetChunks.push(boundedTargets.slice(index, index + EVENT_TARGET_LIMIT));\n }\n if (targetChunks.length === 0) targetChunks.push([]);\n const targetsCurrentHead =\n verificationHead !== null &&\n certificationTargets.some(\n (target) => target.transitionId === verificationHead.transitionId,\n );\n const publishViolation = async (): Promise<string | undefined> => {\n const nonConfirmed = results.filter((result) => result.status !== \"confirmed\");\n try {\n for (let index = 0; index < targetChunks.length; index++) {\n await this.store.publish({\n topic: STATE_TOPIC,\n kind: \"state.violated\",\n from: input.identity,\n text: \"state certification blocked\",\n data: {\n certified: false,\n head: headIdentity,\n evidenceDigest,\n resultDigest,\n targets: targetChunks[index],\n targetChunk: { index, count: targetChunks.length },\n results: index === 0\n ? nonConfirmed.slice(0, EVENT_RESULT_LIMIT).map(toEventResult)\n : [],\n omittedResultCount: Math.max(0, nonConfirmed.length - EVENT_RESULT_LIMIT),\n reasons: index === 0\n ? failures.slice(0, EVENT_RESULT_LIMIT).map(toEventFailure)\n : [],\n omittedReasonCount: Math.max(0, failures.length - EVENT_RESULT_LIMIT),\n ts: Date.now(),\n },\n });\n }\n return undefined;\n } catch (error) {\n return boundedError(error);\n }\n };\n const recordViolation = async (): Promise<string | undefined> => {\n let revocationError: string | undefined;\n if (targetsCurrentHead && verificationHead) {\n try {\n await this.revokeCurrentCertificate(verificationHead, input.identity);\n } catch (error) {\n revocationError = `current certificate revocation failed: ${boundedError(error)}`;\n }\n }\n const publishError = await publishViolation();\n return [revocationError, publishError]\n .filter((value): value is string => value !== undefined)\n .join(\"; \") || undefined;\n };\n\n if (!certified) {\n const reportingError = await recordViolation();\n return {\n results,\n certified: false,\n violated: true,\n certificationStatus: \"failed\",\n evidenceDigest,\n resultDigest,\n failures,\n ...(reportingError ? { reportingError } : {}),\n };\n }\n\n const ts = Date.now();\n try {\n let certificateEvent: MeshEvent | undefined;\n for (let index = 0; index < targetChunks.length; index++) {\n const event = await this.store.publish({\n topic: STATE_TOPIC,\n kind: \"state.certified\",\n from: input.identity,\n text: \"state certified\",\n data: {\n certificationStatus: \"certified\",\n targets: targetChunks[index],\n targetChunk: { index, count: targetChunks.length },\n head: headIdentity,\n evidenceDigest,\n resultDigest,\n ts,\n },\n });\n if (\n certificateEvent === undefined ||\n targetChunks[index]?.some(\n (target) => target.transitionId === headIdentity?.transitionId,\n )\n ) {\n certificateEvent = event;\n }\n }\n if (!certificateEvent) throw new Error(\"State certificate event was not recorded\");\n const certificate = toCertificate(certificateEvent, this.getHead());\n if (!certificate) throw new Error(\"State certificate event was malformed\");\n const durableCertificate = verificationHead && certificate.current\n ? await this.persistCurrentCertificate(\n certificate,\n verificationHead,\n input.identity,\n )\n : certificate;\n return {\n results,\n certified: true,\n violated: false,\n certificationStatus: \"certified\",\n evidenceDigest,\n resultDigest,\n failures,\n certificate: durableCertificate,\n };\n } catch (error) {\n certified = false;\n const certificationReportingError = boundedError(error);\n failures.push({\n reason: \"reporting-error\",\n message: `Certification could not be recorded: ${certificationReportingError}`,\n error: certificationReportingError,\n });\n resultDigest = digest({ results, failures });\n const violationReportingError = await recordViolation();\n const reportingError = violationReportingError\n ? `${certificationReportingError}; violation reporting failed: ${violationReportingError}`\n : certificationReportingError;\n return {\n results,\n certified,\n violated: true,\n certificationStatus: \"failed\",\n evidenceDigest,\n resultDigest,\n failures,\n reportingError,\n };\n }\n }\n}\n", "// Structural complexity for TS/JS/TSX/JSX is the number of lexical\n// statement-decision keyword tokens: `if` (including the `if` in `else if`),\n// `case`, `default`, `catch`, `for`, and `while`. Strings, template/JSX text,\n// regular-expression literals, and comments are skipped; code inside `${...}`\n// is tokenized. `case` and `default` count only in a switch body, `default`\n// must be followed by `:`, and `if`/`for`/`while` must be followed by `(`\n// (`catch` also supports optional catch binding). Ternaries, `&&`, `||`, `?.`,\n// and `??` never count. This is intentionally a token fold, not an AST or a\n// prose regex. Unsupported file extensions return undefined.\n\nimport fs from \"node:fs\";\nimport path from \"node:path\";\n\nexport interface LanguageComplexity {\n readonly language: string;\n readonly extensions: readonly string[];\n count(source: string): number;\n}\n\nexport interface FileComplexity {\n file: string;\n language: string;\n count: number;\n}\n\ninterface Token {\n value: string;\n kind: \"word\" | \"punctuation\";\n}\n\nconst isWordStart = (character: string | undefined): boolean =>\n character !== undefined &&\n ((character >= \"a\" && character <= \"z\") ||\n (character >= \"A\" && character <= \"Z\") ||\n character === \"_\" ||\n character === \"$\");\n\nconst isWordPart = (character: string | undefined): boolean =>\n isWordStart(character) ||\n (character !== undefined && character >= \"0\" && character <= \"9\");\n\nconst regularExpressionPrefixWords = new Set([\n \"await\",\n \"case\",\n \"delete\",\n \"do\",\n \"else\",\n \"in\",\n \"instanceof\",\n \"of\",\n \"return\",\n \"throw\",\n \"typeof\",\n \"void\",\n \"yield\",\n]);\n\nconst canStartRegularExpression = (previous: Token | undefined): boolean => {\n if (!previous) return true;\n if (previous.kind === \"punctuation\") {\n return \"([{=,:;!&|?+-*%^~<>\".includes(previous.value);\n }\n return regularExpressionPrefixWords.has(previous.value);\n};\n\nconst tokenize = (source: string): Token[] => {\n const tokens: Token[] = [];\n let scan: (start: number, stopAtClosingBrace: boolean) => number;\n\n const skipQuoted = (start: number): number => {\n const quote = source[start];\n let index = start + 1;\n while (index < source.length) {\n if (source[index] === \"\\\\\") {\n index += 2;\n } else if (source[index] === quote) {\n return index + 1;\n } else {\n index++;\n }\n }\n return index;\n };\n\n const scanJsx = (start: number): number => {\n let index = start + 1;\n let selfClosing = false;\n while (index < source.length) {\n if (source[index] === \"'\" || source[index] === '\"') {\n index = skipQuoted(index);\n } else if (source[index] === \"{\") {\n tokens.push({ value: \"{\", kind: \"punctuation\" });\n index = scan(index + 1, true);\n tokens.push({ value: \"}\", kind: \"punctuation\" });\n } else if (source[index] === \">\") {\n let previous = index - 1;\n while (previous > start && source[previous]?.trim().length === 0) previous--;\n selfClosing = source[previous] === \"/\";\n index++;\n break;\n } else {\n index++;\n }\n }\n if (selfClosing) return index;\n\n while (index < source.length) {\n if (source[index] === \"{\") {\n tokens.push({ value: \"{\", kind: \"punctuation\" });\n index = scan(index + 1, true);\n tokens.push({ value: \"}\", kind: \"punctuation\" });\n } else if (source[index] === \"<\" && source[index + 1] === \"/\") {\n index += 2;\n while (index < source.length && source[index] !== \">\") index++;\n return Math.min(source.length, index + 1);\n } else if (source[index] === \"<\") {\n index = scanJsx(index);\n } else {\n index++;\n }\n }\n return index;\n };\n\n const canStartJsx = (next: string | undefined): boolean => {\n if (next !== \">\" && !isWordStart(next)) return false;\n const previous = tokens[tokens.length - 1];\n if (!previous) return true;\n if (previous.kind === \"word\") return previous.value === \"return\";\n return [\"(\", \"[\", \"{\", \"=\", \",\", \":\", \"?\", \"=>\", \"&&\", \"||\"].includes(\n previous.value,\n );\n };\n\n scan = (start: number, stopAtClosingBrace: boolean): number => {\n let index = start;\n while (index < source.length) {\n const character = source[index];\n const next = source[index + 1];\n\n if (stopAtClosingBrace && character === \"}\") return index + 1;\n if (character === \"<\" && canStartJsx(next)) {\n index = scanJsx(index);\n continue;\n }\n if (character === \"{\") {\n tokens.push({ value: \"{\", kind: \"punctuation\" });\n index = scan(index + 1, true);\n tokens.push({ value: \"}\", kind: \"punctuation\" });\n continue;\n }\n if (character === \"/\" && next === \"/\") {\n index += 2;\n while (index < source.length && source[index] !== \"\\n\") index++;\n continue;\n }\n if (character === \"/\" && next === \"*\") {\n index += 2;\n while (\n index < source.length &&\n !(source[index] === \"*\" && source[index + 1] === \"/\")\n ) {\n index++;\n }\n index = Math.min(source.length, index + 2);\n continue;\n }\n if (character === \"'\" || character === '\"') {\n index = skipQuoted(index);\n continue;\n }\n if (character === \"`\") {\n index++;\n while (index < source.length) {\n if (source[index] === \"\\\\\") {\n index += 2;\n } else if (source[index] === \"`\") {\n index++;\n break;\n } else if (source[index] === \"$\" && source[index + 1] === \"{\") {\n tokens.push({ value: \"{\", kind: \"punctuation\" });\n index = scan(index + 2, true);\n tokens.push({ value: \"}\", kind: \"punctuation\" });\n } else {\n index++;\n }\n }\n continue;\n }\n if (\n character === \"/\" &&\n next !== \"=\" &&\n canStartRegularExpression(tokens[tokens.length - 1])\n ) {\n index++;\n let inCharacterClass = false;\n while (index < source.length) {\n if (source[index] === \"\\\\\") {\n index += 2;\n } else if (source[index] === \"[\") {\n inCharacterClass = true;\n index++;\n } else if (source[index] === \"]\") {\n inCharacterClass = false;\n index++;\n } else if (source[index] === \"/\" && !inCharacterClass) {\n index++;\n while (isWordPart(source[index])) index++;\n break;\n } else {\n index++;\n }\n }\n continue;\n }\n if (isWordStart(character)) {\n const wordStart = index;\n index++;\n while (isWordPart(source[index])) index++;\n tokens.push({ value: source.slice(wordStart, index), kind: \"word\" });\n continue;\n }\n if (character !== undefined && character.trim().length > 0) {\n const twoCharacters = `${character}${next ?? \"\"}`;\n if ([\"?.\", \"??\", \"&&\", \"||\", \"=>\"].includes(twoCharacters)) {\n tokens.push({ value: twoCharacters, kind: \"punctuation\" });\n index += 2;\n } else {\n tokens.push({ value: character, kind: \"punctuation\" });\n index++;\n }\n continue;\n }\n index++;\n }\n return index;\n };\n\n scan(0, false);\n return tokens;\n};\n\nconst followedBy = (tokens: Token[], index: number, value: string): boolean =>\n tokens[index + 1]?.value === value;\n\nconst countTypeScriptJavaScript = (source: string): number => {\n const tokens = tokenize(source);\n const switchBodies: boolean[] = [];\n let waitingForSwitchBody = false;\n let count = 0;\n\n for (let index = 0; index < tokens.length; index++) {\n const token = tokens[index]?.value;\n if (token === \"switch\") waitingForSwitchBody = true;\n if (token === \"{\") {\n switchBodies.push(waitingForSwitchBody);\n waitingForSwitchBody = false;\n continue;\n }\n if (token === \"}\") {\n switchBodies.pop();\n continue;\n }\n\n if (\n (token === \"if\" || token === \"for\" || token === \"while\") &&\n followedBy(tokens, index, \"(\")\n ) {\n count++;\n continue;\n }\n if (\n token === \"catch\" &&\n (followedBy(tokens, index, \"(\") || followedBy(tokens, index, \"{\"))\n ) {\n count++;\n continue;\n }\n if (switchBodies[switchBodies.length - 1] === true) {\n if (token === \"default\" && followedBy(tokens, index, \":\")) {\n count++;\n } else if (token === \"case\") {\n count++;\n }\n }\n }\n return count;\n};\n\nexport const typeScriptJavaScriptComplexity: LanguageComplexity = {\n language: \"typescript/javascript\",\n extensions: [\".ts\", \".js\", \".tsx\", \".jsx\"],\n count: countTypeScriptJavaScript,\n};\n\nconst languageComplexities: readonly LanguageComplexity[] = [\n typeScriptJavaScriptComplexity,\n];\n\nconst complexityForFile = (\n file: string,\n languages: readonly LanguageComplexity[] = languageComplexities,\n): LanguageComplexity | undefined => {\n const extension = path.extname(file).toLowerCase();\n return languages.find((language) => language.extensions.includes(extension));\n};\n\nexport const countFileComplexity = (\n file: string,\n): FileComplexity | undefined => {\n const language = complexityForFile(file);\n if (!language) return undefined;\n return {\n file,\n language: language.language,\n count: language.count(fs.readFileSync(file, \"utf8\")),\n };\n};\n", "import { spawn, type ChildProcess } from \"node:child_process\";\nimport { createHash } from \"node:crypto\";\nimport type { VerifyStatus } from \"./types.js\";\n\nexport interface RunCommandOptions {\n cwd: string;\n timeoutMs: number;\n signal?: AbortSignal | undefined;\n}\n\nexport interface CommandResult {\n status: VerifyStatus;\n exitCode: number | null;\n output: string;\n outputBytes: number;\n outputOmittedBytes: number;\n outputDigest: string;\n error?: string;\n}\n\nconst COMMAND_OUTPUT_MAX_BYTES = 32 * 1024;\n\nconst errorMessage = (error: unknown): string =>\n error instanceof Error ? error.message : String(error);\n\nconst truncateUtf8 = (\n value: string,\n maxBytes: number,\n): { value: string; omittedBytes: number } => {\n const bytes = Buffer.from(value, \"utf8\");\n if (bytes.length <= maxBytes) return { value, omittedBytes: 0 };\n let end = maxBytes;\n while (end > 0 && (bytes[end]! & 0xc0) === 0x80) end--;\n const bounded = bytes.subarray(0, end).toString(\"utf8\");\n return { value: bounded, omittedBytes: bytes.length - end };\n};\n\nconst terminateWindowsTree = (child: ChildProcess): Promise<void> =>\n new Promise((resolve) => {\n if (child.pid === undefined) {\n resolve();\n return;\n }\n let settled = false;\n let timeout: NodeJS.Timeout | undefined;\n const finish = (): void => {\n if (settled) return;\n settled = true;\n if (timeout) clearTimeout(timeout);\n resolve();\n };\n const treeKillCommand = [\"task\", \"kill\"].join(\"\");\n const killer = spawn(treeKillCommand, [\"/pid\", String(child.pid), \"/T\", \"/F\"], {\n windowsHide: true,\n stdio: \"ignore\",\n });\n killer.once(\"error\", () => {\n try {\n child.kill(\"SIGKILL\");\n } catch {\n // The process may already have exited.\n }\n finish();\n });\n killer.once(\"close\", finish);\n timeout = setTimeout(() => {\n try {\n killer.kill(\"SIGKILL\");\n child.kill(\"SIGKILL\");\n } catch {\n // Bounded best effort is all Windows can guarantee here.\n }\n finish();\n }, 1_000);\n timeout.unref?.();\n });\n\nconst terminateProcessTree = async (child: ChildProcess): Promise<void> => {\n if (process.platform === \"win32\") {\n await terminateWindowsTree(child);\n return;\n }\n if (child.pid === undefined) return;\n try {\n process.kill(-child.pid, \"SIGKILL\");\n } catch {\n try {\n child.kill(\"SIGKILL\");\n } catch {\n // The process group may already have exited.\n }\n }\n};\n\n// Shell evidence is trusted input. Output is streamed into a byte-bounded\n// prefix while a hash and byte count cover the complete stdout/stderr stream.\n// POSIX shells lead detached process groups so timeout/abort can kill the\n// group. Windows uses bounded taskkill tree cleanup and then a direct fallback.\nexport const runCommand = (\n command: string,\n options: RunCommandOptions,\n): Promise<CommandResult> =>\n new Promise((resolve) => {\n let settled = false;\n let outputBytes = 0;\n const outputChunks: Buffer[] = [];\n let retainedBytes = 0;\n const outputHash = createHash(\"sha256\");\n let timer: NodeJS.Timeout | undefined;\n let terminationReason: string | undefined;\n let termination: Promise<void> | undefined;\n let child: ChildProcess;\n\n const collect = (chunk: Buffer | string): void => {\n const bytes = Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk);\n outputBytes += bytes.length;\n outputHash.update(bytes);\n if (retainedBytes >= COMMAND_OUTPUT_MAX_BYTES) return;\n const retained = bytes.subarray(\n 0,\n Math.min(bytes.length, COMMAND_OUTPUT_MAX_BYTES - retainedBytes),\n );\n outputChunks.push(retained);\n retainedBytes += retained.length;\n };\n const finish = (\n status: VerifyStatus,\n exitCode: number | null,\n error?: string,\n ): void => {\n if (settled) return;\n settled = true;\n if (timer) clearTimeout(timer);\n if (options.signal) options.signal.removeEventListener(\"abort\", abort);\n const retained = Buffer.concat(outputChunks);\n const boundedOutput = truncateUtf8(retained.toString(\"utf8\"), retained.length);\n resolve({\n status,\n exitCode,\n output: boundedOutput.value,\n outputBytes,\n outputOmittedBytes: outputBytes - Buffer.byteLength(boundedOutput.value, \"utf8\"),\n outputDigest: `sha256:${outputHash.digest(\"hex\")}`,\n ...(error !== undefined ? { error } : {}),\n });\n };\n const terminate = (reason: string): void => {\n if (terminationReason !== undefined) return;\n terminationReason = reason;\n if (timer) clearTimeout(timer);\n termination = terminateProcessTree(child);\n if (process.platform === \"win32\") {\n void termination.then(() => {\n const fallback = setTimeout(() => {\n child.stdout?.removeListener(\"data\", collect);\n child.stderr?.removeListener(\"data\", collect);\n child.stdout?.destroy();\n child.stderr?.destroy();\n finish(\"error\", null, reason);\n }, 100);\n fallback.unref?.();\n });\n }\n };\n const abort = (): void => terminate(\"aborted\");\n\n try {\n child = spawn(command, {\n shell: true,\n cwd: options.cwd,\n detached: process.platform !== \"win32\",\n windowsHide: true,\n });\n } catch (error) {\n finish(\"error\", null, errorMessage(error));\n return;\n }\n child.stdout?.on(\"data\", collect);\n child.stderr?.on(\"data\", collect);\n child.once(\"error\", (error) => finish(\"error\", null, errorMessage(error)));\n child.once(\"close\", (code) => {\n void (async () => {\n if (termination) await termination;\n if (terminationReason !== undefined) {\n finish(\"error\", null, terminationReason);\n return;\n }\n const exitCode = typeof code === \"number\" ? code : null;\n if (exitCode === null) {\n finish(\"error\", null, \"process terminated by signal\");\n return;\n }\n finish(exitCode === 0 ? \"confirmed\" : \"violated\", exitCode);\n })();\n });\n if (options.timeoutMs > 0) {\n timer = setTimeout(\n () => terminate(`timeout after ${options.timeoutMs}ms`),\n options.timeoutMs,\n );\n timer.unref?.();\n }\n if (options.signal) {\n options.signal.addEventListener(\"abort\", abort, { once: true });\n if (options.signal.aborted) abort();\n }\n });\n", "import type {\n FabricActionDescriptor,\n FabricInvocationContext,\n FabricProvider,\n FabricProviderListRequest,\n} from \"../protocol.js\";\nimport type { MeshIdentity, MeshStore } from \"../mesh/store.js\";\nimport { StateStore, type StateTransitionKind } from \"../state/store.js\";\nimport { actionArgNormalizer } from \"./arg-normalization.js\";\n\nconst STATE_ENTITY_ID = \"fabric-state\";\n\nconst transitionSchema = {\n type: \"object\",\n properties: {\n label: {\n type: \"string\",\n description: \"Name of this transition (the move), e.g. \\\"applied auth patch\\\"\",\n },\n from: {\n type: \"string\",\n description:\n \"State label this transition moves from. Must equal the current head's to-label when a head exists; rejected on mismatch unless force is set.\",\n },\n to: {\n type: \"string\",\n description: \"Resulting state label (the new world-model version)\",\n },\n summary: { type: \"string\", description: \"Short human-readable claim this transition asserts\" },\n evidence: {\n type: \"array\",\n items: { type: \"string\" },\n description:\n \"Trusted shell commands attached as evidence. Attachment is not certification; state.verify must run at least one command and confirm every result.\",\n },\n tags: { type: \"array\", items: { type: \"string\" } },\n kind: {\n type: \"string\",\n enum: [\"state\", \"representation\"],\n description:\n \"Default \\\"state\\\". \\\"representation\\\" revises the state schema and archives all earlier labels.\",\n },\n complexity: {\n type: \"object\",\n properties: {\n files: {\n type: \"array\",\n items: { type: \"string\" },\n description: \"Project-relative TS/JS/TSX/JSX files whose decision points this transition changes.\",\n },\n },\n required: [\"files\"],\n additionalProperties: false,\n },\n force: {\n type: \"boolean\",\n description: \"Override the from-mismatch and contention guards.\",\n },\n },\n required: [\"label\", \"to\", \"summary\"],\n additionalProperties: false,\n};\n\nconst verifySchema = {\n type: \"object\",\n properties: {\n labels: {\n type: \"array\",\n items: { type: \"string\" },\n description:\n \"Verify transitions matching these labels (by transition.label, from, or to). Omit to verify the current head; an empty or unmatched selection fails closed.\",\n },\n includeArchived: {\n type: \"boolean\",\n description: \"Also replay evidence from labels before the last representation transition.\",\n },\n timeoutMs: { type: \"number\", minimum: 1, description: \"Per-command timeout (default 30s)\" },\n },\n additionalProperties: false,\n};\n\nconst historySchema = {\n type: \"object\",\n properties: {\n label: { type: \"string\", description: \"Filter transitions by label, from, or to\" },\n limit: { type: \"number\", minimum: 1 },\n includeArchived: {\n type: \"boolean\",\n description: \"Reveal labels before the last representation transition.\",\n },\n },\n additionalProperties: false,\n};\n\nconst complexitySchema = {\n type: \"object\",\n properties: {\n files: {\n type: \"array\",\n items: { type: \"string\" },\n description: \"Project-relative files to count. Omit to inspect all recorded files.\",\n },\n },\n additionalProperties: false,\n};\n\nconst goalSchema = {\n type: \"object\",\n properties: {\n check: {\n type: \"string\",\n description: \"Executable shell predicate; exit 0 means the goal is met.\",\n },\n description: { type: \"string\" },\n },\n required: [\"check\"],\n additionalProperties: false,\n};\n\nconst checkGoalSchema = {\n type: \"object\",\n properties: { timeoutMs: { type: \"number\", minimum: 1 } },\n additionalProperties: false,\n};\n\nconst emptySchema = { type: \"object\", properties: {}, additionalProperties: false };\n\nconst schemasByAction: Record<string, Record<string, unknown>> = {\n transition: transitionSchema,\n get: emptySchema,\n history: historySchema,\n complexity: complexitySchema,\n verify: verifySchema,\n goal: goalSchema,\n checkGoal: checkGoalSchema,\n};\n\n\n\nconst descriptors: FabricActionDescriptor[] = [\n {\n name: \"transition\",\n description:\n \"Append a labeled, validated state transition and compare-and-swap advance the head\",\n inputSchema: transitionSchema,\n risk: \"write\",\n namespace: \"state\",\n },\n {\n name: \"get\",\n description:\n \"Return the current state head, goal, compact complexity summary, recent labels, and current/recent certification state\",\n inputSchema: emptySchema,\n risk: \"read\",\n namespace: \"state\",\n },\n {\n name: \"history\",\n description: \"Fold the transition log from its representation archive boundary into an ordered label graph\",\n inputSchema: historySchema,\n risk: \"read\",\n namespace: \"state\",\n },\n {\n name: \"complexity\",\n description: \"Count current structural decision points and compare them with the complexity ledger\",\n inputSchema: complexitySchema,\n risk: \"read\",\n namespace: \"state\",\n },\n {\n name: \"verify\",\n description:\n \"Re-run evidence for the current head (or given labels); fail closed unless at least one command runs and every result is confirmed\",\n inputSchema: verifySchema,\n risk: \"execute\",\n namespace: \"state\",\n },\n {\n name: \"goal\",\n description: \"Set the executable goal predicate (Schema's is_goal)\",\n inputSchema: goalSchema,\n risk: \"write\",\n namespace: \"state\",\n },\n {\n name: \"checkGoal\",\n description: \"Run the goal predicate and report pass/fail; publishes state.goal.met when it passes\",\n inputSchema: checkGoalSchema,\n risk: \"execute\",\n namespace: \"state\",\n },\n];\n\n// Argument repair derives from the action schemas plus the shared synonym\n// lexicon; no state-specific table remains.\nexport const normalizeStateArgs = actionArgNormalizer(() => descriptors);\n\nexport class StateProvider implements FabricProvider {\n readonly name = \"state\";\n readonly description =\n \"Schema-style labeled transition layer: an append-only timeline of validated transitions with a compare-and-swap head and evidence-based certification over mesh storage\";\n\n readonly #store: StateStore;\n readonly #identity: MeshIdentity;\n\n constructor(store: MeshStore, identity: MeshIdentity) {\n this.#store = new StateStore(store);\n this.#identity = identity;\n }\n\n get state(): StateStore {\n return this.#store;\n }\n\n async list(\n request: FabricProviderListRequest,\n _context: FabricInvocationContext,\n ): Promise<FabricActionDescriptor[]> {\n const query = request.query?.toLowerCase();\n return query\n ? descriptors.filter((descriptor) =>\n `${descriptor.name} ${descriptor.description}`.toLowerCase().includes(query),\n )\n : descriptors;\n }\n\n async describe(\n actionName: string,\n _context: FabricInvocationContext,\n ): Promise<FabricActionDescriptor | undefined> {\n return descriptors.find((descriptor) => descriptor.name === actionName);\n }\n\n prepareArguments(\n actionName: string,\n args: Record<string, unknown>,\n ): Record<string, unknown> {\n return normalizeStateArgs(actionName, args);\n }\n\n async invoke(\n actionName: string,\n args: Record<string, unknown>,\n context: FabricInvocationContext,\n ): Promise<unknown> {\n switch (actionName) {\n case \"transition\": {\n const label = String(args.label);\n const to = String(args.to);\n const summary = String(args.summary);\n const from = typeof args.from === \"string\" ? args.from : undefined;\n const evidence = Array.isArray(args.evidence)\n ? args.evidence.filter((item): item is string => typeof item === \"string\")\n : undefined;\n const tags = Array.isArray(args.tags)\n ? args.tags.filter((item): item is string => typeof item === \"string\")\n : undefined;\n const kind: StateTransitionKind | undefined =\n args.kind === \"representation\" || args.kind === \"state\" ? args.kind : undefined;\n const complexityFiles =\n typeof args.complexity === \"object\" &&\n args.complexity !== null &&\n Array.isArray((args.complexity as { files?: unknown }).files)\n ? (args.complexity as { files: unknown[] }).files.filter(\n (item): item is string => typeof item === \"string\",\n )\n : undefined;\n const force = args.force === true;\n const { event, head } = await this.#store.transition(\n {\n label,\n ...(from !== undefined ? { from } : {}),\n to,\n summary,\n ...(evidence ? { evidence } : {}),\n ...(tags ? { tags } : {}),\n ...(kind ? { kind } : {}),\n ...(complexityFiles ? { complexity: { files: complexityFiles } } : {}),\n force,\n },\n this.#identity,\n context.cwd,\n );\n context.activity?.({\n type: \"entity\",\n id: STATE_ENTITY_ID,\n kind: \"mesh\",\n name: `${label} \u2192 ${to}`,\n });\n context.update(`State transitioned to \"${to}\" via \"${label}\"`);\n return { event, head };\n }\n case \"get\": {\n const { head, goal, complexity, certification } = this.#store.get();\n const { labels } = this.#store.history({ limit: 20 });\n return { head, goal, complexity, certification, recentLabels: labels };\n }\n case \"history\": {\n const label = typeof args.label === \"string\" ? args.label : undefined;\n const limit = typeof args.limit === \"number\" ? args.limit : undefined;\n const includeArchived = args.includeArchived === true;\n return this.#store.history({\n ...(label !== undefined ? { label } : {}),\n ...(limit !== undefined ? { limit } : {}),\n includeArchived,\n });\n }\n case \"complexity\": {\n const files = Array.isArray(args.files)\n ? args.files.filter((item): item is string => typeof item === \"string\")\n : undefined;\n return this.#store.complexity({\n ...(files ? { files } : {}),\n cwd: context.cwd,\n });\n }\n case \"verify\": {\n const labels = Array.isArray(args.labels)\n ? args.labels.filter((item): item is string => typeof item === \"string\")\n : undefined;\n const timeoutMs = typeof args.timeoutMs === \"number\" ? args.timeoutMs : undefined;\n const includeArchived = args.includeArchived === true;\n context.activity?.({\n type: \"entity\",\n id: STATE_ENTITY_ID,\n kind: \"mesh\",\n name: \"verify\",\n });\n const result = await this.#store.verify({\n ...(labels ? { labels } : {}),\n includeArchived,\n cwd: context.cwd,\n ...(timeoutMs !== undefined ? { timeoutMs } : {}),\n ...(context.signal ? { signal: context.signal } : {}),\n identity: this.#identity,\n });\n context.update(\n result.certified\n ? `State certified: ${result.results.length} evidence command(s) confirmed`\n : result.reportingError\n ? `State certification blocked; violation reporting failed: ${result.reportingError}`\n : \"State certification blocked; violation details were published\",\n );\n return result;\n }\n case \"goal\": {\n const check = String(args.check);\n const description = typeof args.description === \"string\" ? args.description : undefined;\n const entry = await this.#store.goal(\n { check, ...(description !== undefined ? { description } : {}) },\n this.#identity,\n );\n context.activity?.({\n type: \"entity\",\n id: STATE_ENTITY_ID,\n kind: \"mesh\",\n name: \"goal\",\n });\n return entry;\n }\n case \"checkGoal\": {\n const timeoutMs = typeof args.timeoutMs === \"number\" ? args.timeoutMs : undefined;\n const result = await this.#store.checkGoal({\n cwd: context.cwd,\n ...(timeoutMs !== undefined ? { timeoutMs } : {}),\n ...(context.signal ? { signal: context.signal } : {}),\n identity: this.#identity,\n });\n context.update(\n result.passed ? \"Goal met\" : \"Goal not met\",\n );\n return result;\n }\n default:\n throw new Error(`Unknown state action: ${actionName}`);\n }\n }\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["path", "fileURLToPath", "message", "digest", "message", "errorMessage", "normalizeRequirements", "digest", "message", "lease", "resolve", "path", "message", "message", "requestedTimeoutMs", "fs", "path", "path", "fs", "errorMessage", "digest", "message", "fs", "path", "randomUUID", "fs", "path", "resolve", "atomicWrite", "fs", "path", "randomUUID", "targetKey", "resolve", "message", "status", "participant", "path", "textFromContent", "path", "isRecord", "result", "descriptors", "message", "descriptors", "fs", "path", "path", "stat", "fs", "isRecord", "path", "resolve", "descriptors", "path", "emptySchema", "descriptors", "os", "path", "randomUUID", "fs", "path", "path", "fs", "path", "Type", "Type", "isRecord", "schemaDocument", "Type", "path", "resolve", "Type", "throwIfAborted", "path", "os", "randomUUID", "descriptors", "createHash", "randomUUID", "fs", "path", "createHash", "fs", "path", "stat", "createHash", "errorMessage", "fs", "path", "message", "randomUUID", "resolve", "descriptors", "createHash", "path", "fs", "path", "spawn", "createHash", "errorMessage", "resolve", "errorMessage", "digest", "createHash", "truncateUtf8", "target", "message", "path", "emptySchema", "descriptors", "emptySchema", "message", "path", "fileURLToPath", "digest"]
|
|
7
|
+
}
|