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/ui/dashboard.ts", "../../src/ui/topology.ts", "../../src/ui/dashboard-model.ts", "../../src/ui/dashboard-presentation.ts", "../../src/ui/dashboard-detail.ts", "../../src/ui/state-file-preview.ts", "../../src/ui/dashboard-fabric-graph.ts", "../../src/ui/fabric-host-event-selector.ts", "../../src/ui/fabric-actor-delivery-selector.ts", "../../src/ui/fabric-actor-tool-selector.ts", "../../src/ui/fabric-thinking-selector.ts"],
|
|
4
|
+
"sourcesContent": ["import type { Theme } from \"@oh-my-pi/pi-coding-agent\";\nimport { ompSymbolTheme } from \"./symbol-theme.js\";\nimport { Ellipsis } from \"@oh-my-pi/pi-tui\";\nimport type { CodePreviewSettings } from \"./code-preview.js\";\nimport type { Component, Focusable, TUI } from \"@oh-my-pi/pi-tui\";\nimport {\n Editor,\n getKeybindings,\n Key,\n matchesKey,\n truncateToWidth,\n type EditorTheme,\n visibleWidth,\n} from \"@oh-my-pi/pi-tui\";\nimport type { FabricActivityRun } from \"../activity/types.js\";\nimport type { MeshEvent } from \"../mesh/store.js\";\nimport type { FabricAgentMessageDelivery } from \"../main-agent.js\";\nimport type {\n FabricActorBindingScope,\n FabricActorDelivery,\n FabricActorHostEvent,\n} from \"../actors/types.js\";\nimport { isFabricThinking, type FabricThinking } from \"../thinking.js\";\nimport {\n entitiesForOverview,\n filters,\n groupEntities,\n matchesFilter,\n phasePanels,\n tokensFor,\n type Entity,\n type EntityGroup,\n type OverviewView,\n type Pane,\n type PhasePanel,\n type StatusFilter,\n} from \"./dashboard-model.js\";\nimport { colorStatus, entityTail, statusGlyph } from \"./dashboard-presentation.js\";\nimport {\n DashboardDetailRenderer,\n type FabricTranscriptTarget,\n} from \"./dashboard-detail.js\";\nimport {\n directionalGraphTarget,\n renderFabricTopologyPanel,\n type FabricGraphPoint,\n} from \"./dashboard-fabric-graph.js\";\nimport { FabricHostEventSelector } from \"./fabric-host-event-selector.js\";\nimport { FabricActorDeliverySelector } from \"./fabric-actor-delivery-selector.js\";\nimport { FabricActorToolSelector } from \"./fabric-actor-tool-selector.js\";\nimport { FabricModelSelector } from \"./fabric-model-selector.js\";\nimport { FabricThinkingSelector } from \"./fabric-thinking-selector.js\";\nimport {\n formatClock,\n formatDuration,\n formatTokens,\n padToWidth,\n safeText,\n wrapPlainText,\n} from \"./format.js\";\nimport { INHERIT_VALUE, type ModelSource } from \"./model-picker.js\";\nimport {\n buildProjectMeshTopology,\n type FabricProjectMeshModel,\n type FabricProjectMeshRoute,\n} from \"./topology.js\";\nimport type { FabricAgentTranscript } from \"./transcript.js\";\nimport type { FabricDashboardSnapshot, FabricUiActor, FabricUiAgent } from \"./types.js\";\nimport { isActiveStatus } from \"./types.js\";\n\nconst editorTheme = (theme: Theme): EditorTheme => ({\n symbols: ompSymbolTheme,\n borderColor: (value: string) => theme.fg(\"borderMuted\", value),\n selectList: {\n symbols: ompSymbolTheme,\n selectedPrefix: (text: string) => theme.fg(\"accent\", text),\n selectedText: (text: string) => theme.fg(\"accent\", text),\n description: (text: string) => theme.fg(\"muted\", text),\n scrollInfo: (text: string) => theme.fg(\"muted\", text),\n noMatch: (text: string) => theme.fg(\"muted\", text),\n },\n});\n\nconst DASHBOARD_OVERLAY_HEIGHT_PERCENT = 90;\nconst DASHBOARD_OVERLAY_VERTICAL_MARGIN = 1;\n\nconst dashboardOverlayRows = (terminalRows: number): number =>\n Math.max(\n 1,\n Math.min(\n Math.floor((terminalRows * DASHBOARD_OVERLAY_HEIGHT_PERCENT) / 100),\n terminalRows - DASHBOARD_OVERLAY_VERTICAL_MARGIN * 2,\n ),\n );\n\nexport interface FabricDashboardMessageTarget {\n id: string;\n name: string;\n kind: \"main\" | \"peer\" | \"agent\" | \"actor\" | \"meshParticipant\";\n}\n\ninterface FabricDashboardKeybindings {\n matches(data: string, keybinding: \"app.tools.expand\"): boolean;\n getKeys(keybinding: \"app.tools.expand\"): string[];\n}\n\nexport class FabricDashboard implements Component, Focusable {\n focused = false;\n private pane: Pane = \"phases\";\n private overviewView: OverviewView = \"activity\";\n private graphPositions = new Map<string, FabricGraphPoint>();\n private graphCamera: FabricGraphPoint = { x: 0, y: 0 };\n private graphCameraTarget: FabricGraphPoint = { x: 0, y: 0 };\n private graphVelocity: FabricGraphPoint = { x: 0, y: 0 };\n private graphCameraInitialized = false;\n private graphAnimation: ReturnType<typeof setInterval> | undefined;\n private graphAnimationAt = 0;\n private graphEffectsAnimation: ReturnType<typeof setInterval> | undefined;\n private graphReducedMotion = false;\n private graphShowHistory = false;\n private graphReplayIndex: number | undefined;\n private graphReplayPlaying = false;\n private graphReplaySpeed = 1;\n private graphReplayAdvancedAt = 0;\n private graphReplayLength = 0;\n private graphReplayLabel: string | undefined;\n private phaseIndex = 0;\n private entityIndex = 0;\n private runIndex = 0;\n private selectedRunId: string | undefined;\n private runSelectionTouched = false;\n private selectedEntityId: string | undefined;\n private filter: StatusFilter = \"all\";\n private phaseSelectionTouched = false;\n private selectedPhaseId: string | undefined;\n private detailId: string | undefined;\n private detailScroll = 0;\n private detailMaxScroll = 0;\n private transcriptPageAnchor: \"start\" | \"end\" | undefined;\n private transcriptToolsExpanded = false;\n private detailSelectionRestore:\n | { runSelectionTouched: boolean; phaseSelectionTouched: boolean }\n | undefined;\n private detailView: \"summary\" | \"transcript\" = \"summary\";\n private transcriptFollowing = true;\n private readonly detailRenderer: DashboardDetailRenderer;\n private readonly highlightInvalidate = (): void => this.tui.requestRender();\n private mode:\n | \"overview\"\n | \"detail\"\n | \"modelPicker\"\n | \"thinkingPicker\"\n | \"deliveryPicker\"\n | \"eventsPicker\"\n | \"toolsPicker\"\n | \"instructionsEditor\"\n | \"agentMessageEditor\"\n | \"help\" = \"overview\";\n private picker:\n | FabricModelSelector\n | FabricThinkingSelector\n | FabricActorDeliverySelector\n | FabricHostEventSelector\n | FabricActorToolSelector\n | undefined;\n private editor: Editor | undefined;\n private editorActorName: string | undefined;\n private agentMessageTarget:\n | (FabricDashboardMessageTarget & { delivery: FabricAgentMessageDelivery })\n | undefined;\n private pendingStop: { id: string; expiresAt: number } | undefined;\n private readonly modelSource: ModelSource | undefined;\n private readonly claudeModelSource: ModelSource | undefined;\n private readonly onAgentSteer: ((agentId: string, message: string) => void) | undefined;\n private readonly onAgentFollowUp: ((agentId: string, message: string) => void) | undefined;\n private readonly onAgentStop: ((agentId: string) => void) | undefined;\n private readonly onConversation: ((id: string) => void) | undefined;\n private readonly onTargetMessage:\n | ((\n target: FabricDashboardMessageTarget,\n message: string,\n delivery: FabricAgentMessageDelivery,\n ) => void)\n | undefined;\n private readonly agentTranscript:\n | ((agent: FabricUiAgent, followLatest: boolean) => FabricAgentTranscript)\n | undefined;\n private readonly actorTranscript:\n | ((actor: FabricUiActor, followLatest: boolean) => FabricAgentTranscript)\n | undefined;\n private readonly loadOlderTranscript: ((target: FabricTranscriptTarget) => boolean) | undefined;\n private readonly loadNewerTranscript: ((target: FabricTranscriptTarget) => boolean) | undefined;\n private readonly loadLatestTranscript: ((target: FabricTranscriptTarget) => boolean) | undefined;\n private readonly onActorModel:\n | ((\n actorId: string,\n model: string | undefined,\n scope: FabricActorBindingScope,\n ) => void)\n | undefined;\n private readonly onActorThinking:\n | ((\n actorId: string,\n thinking: FabricThinking | undefined,\n scope: FabricActorBindingScope,\n ) => void)\n | undefined;\n private readonly onActorEvents:\n | ((actorId: string, events: FabricActorHostEvent[]) => void)\n | undefined;\n private readonly onActorDeliveryPolicy:\n | ((actorId: string, delivery: FabricActorDelivery, triggerTurn: boolean) => void)\n | undefined;\n private readonly onGlobalDeliveryPolicy:\n | ((actorId: string, delivery: FabricActorDelivery, triggerTurn: boolean) => void)\n | undefined;\n private readonly onActorTools: ((actorId: string, tools: string[]) => void) | undefined;\n private readonly actorDefaultTools: string[];\n private readonly onClearMessages: ((actorId: string) => void) | undefined;\n private readonly onActorInstructions:\n | ((actorId: string, instructions: string) => void)\n | undefined;\n private readonly onGlobalInstructions:\n | ((globalActorId: string, instructions: string) => void)\n | undefined;\n private readonly onImportActor: ((globalActorId: string) => void) | undefined;\n private readonly onExportActor: ((actorId: string) => void) | undefined;\n private readonly onRemoveGlobalActor: ((globalActorId: string) => void) | undefined;\n private readonly codePreviewSettings: CodePreviewSettings | undefined;\n private readonly keybindings: FabricDashboardKeybindings | undefined;\n private pickerActorName: string | undefined;\n\n constructor(\n readonly tui: TUI,\n readonly theme: Theme,\n readonly snapshot: () => FabricDashboardSnapshot,\n readonly done: () => void,\n options: {\n modelSource?: ModelSource;\n codePreviewSettings?: CodePreviewSettings;\n keybindings?: FabricDashboardKeybindings;\n claudeModelSource?: ModelSource;\n onAgentSteer?: (agentId: string, message: string) => void;\n onAgentFollowUp?: (agentId: string, message: string) => void;\n onAgentStop?: (agentId: string) => void;\n onConversation?: (id: string) => void;\n onTargetMessage?: (\n target: FabricDashboardMessageTarget,\n message: string,\n delivery: FabricAgentMessageDelivery,\n ) => void;\n agentTranscript?: (\n agent: FabricUiAgent,\n followLatest: boolean,\n ) => FabricAgentTranscript;\n actorTranscript?: (\n actor: FabricUiActor,\n followLatest: boolean,\n ) => FabricAgentTranscript;\n loadOlderTranscript?: (target: FabricTranscriptTarget) => boolean;\n loadNewerTranscript?: (target: FabricTranscriptTarget) => boolean;\n loadLatestTranscript?: (target: FabricTranscriptTarget) => boolean;\n onActorModel?: (\n actorId: string,\n model: string | undefined,\n scope: FabricActorBindingScope,\n ) => void;\n onActorThinking?: (\n actorId: string,\n thinking: FabricThinking | undefined,\n scope: FabricActorBindingScope,\n ) => void;\n onActorEvents?: (actorId: string, events: FabricActorHostEvent[]) => void;\n onActorDeliveryPolicy?: (\n actorId: string,\n delivery: FabricActorDelivery,\n triggerTurn: boolean,\n ) => void;\n onGlobalDeliveryPolicy?: (\n actorId: string,\n delivery: FabricActorDelivery,\n triggerTurn: boolean,\n ) => void;\n onActorTools?: (actorId: string, tools: string[]) => void;\n actorDefaultTools?: string[];\n onClearMessages?: (actorId: string) => void;\n onActorInstructions?: (actorId: string, instructions: string) => void;\n onGlobalInstructions?: (globalActorId: string, instructions: string) => void;\n onImportActor?: (globalActorId: string) => void;\n onExportActor?: (actorId: string) => void;\n onRemoveGlobalActor?: (globalActorId: string) => void;\n } = {},\n ) {\n this.focused = true;\n this.modelSource = options.modelSource;\n this.codePreviewSettings = options.codePreviewSettings;\n this.keybindings = options.keybindings;\n this.claudeModelSource = options.claudeModelSource;\n this.onAgentSteer = options.onAgentSteer;\n this.onAgentFollowUp = options.onAgentFollowUp;\n this.onAgentStop = options.onAgentStop;\n this.onConversation = options.onConversation;\n this.onTargetMessage = options.onTargetMessage;\n this.agentTranscript = options.agentTranscript;\n this.actorTranscript = options.actorTranscript;\n this.loadOlderTranscript = options.loadOlderTranscript;\n this.loadNewerTranscript = options.loadNewerTranscript;\n this.loadLatestTranscript = options.loadLatestTranscript;\n this.onActorModel = options.onActorModel;\n this.onActorThinking = options.onActorThinking;\n this.onActorEvents = options.onActorEvents;\n this.onActorDeliveryPolicy = options.onActorDeliveryPolicy;\n this.onGlobalDeliveryPolicy = options.onGlobalDeliveryPolicy;\n this.onActorTools = options.onActorTools;\n this.actorDefaultTools = options.actorDefaultTools ?? [];\n this.onClearMessages = options.onClearMessages;\n this.onActorInstructions = options.onActorInstructions;\n this.onGlobalInstructions = options.onGlobalInstructions;\n this.onImportActor = options.onImportActor;\n this.onExportActor = options.onExportActor;\n this.onRemoveGlobalActor = options.onRemoveGlobalActor;\n this.detailRenderer = new DashboardDetailRenderer(tui, theme, snapshot, {\n agentTranscript: this.agentTranscript,\n actorTranscript: this.actorTranscript,\n codePreviewSettings: this.codePreviewSettings,\n actorDefaultTools: this.actorDefaultTools,\n });\n }\n\n handleInput(data: string): void {\n if (this.mode === \"help\") {\n if (\n data === \"?\" ||\n matchesKey(data, Key.escape) ||\n matchesKey(data, Key.ctrl(\"c\"))\n ) {\n this.mode = this.detailId ? \"detail\" : \"overview\";\n }\n this.tui.requestRender();\n return;\n }\n if (this.mode === \"agentMessageEditor\" && this.editor) {\n if (getKeybindings().matches(data, \"tui.select.cancel\")) {\n this.closeAgentMessageEditor();\n } else {\n this.editor.handleInput(data);\n }\n this.tui.requestRender();\n return;\n }\n if (this.mode === \"instructionsEditor\" && this.editor) {\n if (getKeybindings().matches(data, \"tui.select.cancel\")) {\n this.closeInstructionsEditor();\n } else {\n this.editor.handleInput(data);\n }\n this.tui.requestRender();\n return;\n }\n if (\n (this.mode === \"modelPicker\" ||\n this.mode === \"thinkingPicker\" ||\n this.mode === \"deliveryPicker\" ||\n this.mode === \"eventsPicker\" ||\n this.mode === \"toolsPicker\") &&\n this.picker\n ) {\n this.picker.handleInput(data);\n this.tui.requestRender();\n return;\n }\n\n const snapshot = this.snapshot();\n const run = this.selectRun(snapshot);\n const panels = phasePanels(snapshot, run);\n this.syncPhase(run, panels);\n const panel = panels[this.phaseIndex];\n const projectMesh = this.projectMesh(snapshot);\n const allEntities = entitiesForOverview(\n snapshot,\n run,\n panel,\n this.overviewView,\n projectMesh,\n );\n const entities = allEntities.filter(\n (entity) => entity.kind === \"main\" || matchesFilter(entity.status, this.filter),\n );\n this.syncEntitySelection(entities, this.overviewView !== \"activity\");\n\n if (data === \"C\" && this.onConversation) {\n const entity = this.detailId\n ? allEntities.find((candidate) => candidate.id === this.detailId)\n : entities[this.entityIndex];\n const target = entity ? this.messageTarget(entity) : undefined;\n if (target) this.onConversation(target.id);\n return;\n }\n\n if (data === \"?\") {\n this.mode = \"help\";\n this.tui.requestRender();\n return;\n }\n\n if (this.detailId) {\n if (\n matchesKey(data, Key.escape) ||\n matchesKey(data, Key.ctrl(\"c\")) ||\n matchesKey(data, Key.left) ||\n data === \"h\"\n ) {\n this.closeDetail();\n } else if (data === \"t\") {\n const detail = allEntities.find((entity) => entity.id === this.detailId);\n if (detail && this.hasTranscript(detail)) {\n this.detailView = this.detailView === \"summary\" ? \"transcript\" : \"summary\";\n this.detailScroll = 0;\n this.transcriptPageAnchor = undefined;\n this.transcriptFollowing = true;\n }\n } else if (\n this.detailView === \"transcript\" &&\n this.matchesTranscriptToolToggle(data)\n ) {\n this.transcriptToolsExpanded = !this.transcriptToolsExpanded;\n } else if (matchesKey(data, Key.up) || data === \"k\") {\n if (this.detailScroll > 0) {\n if (this.detailView === \"transcript\") this.transcriptFollowing = false;\n this.detailScroll--;\n } else if (this.detailView === \"transcript\") {\n const detail = allEntities.find((entity) => entity.id === this.detailId);\n const target = detail ? this.transcriptTarget(detail) : undefined;\n if (target && this.loadOlderTranscript?.(target)) {\n this.transcriptPageAnchor = \"end\";\n this.transcriptFollowing = false;\n }\n }\n } else if (matchesKey(data, Key.down) || data === \"j\") {\n if (this.detailScroll < this.detailMaxScroll) {\n if (this.detailView === \"transcript\") this.transcriptFollowing = false;\n this.detailScroll++;\n } else if (this.detailView === \"transcript\") {\n const detail = allEntities.find((entity) => entity.id === this.detailId);\n const target = detail ? this.transcriptTarget(detail) : undefined;\n if (target && this.loadNewerTranscript?.(target)) {\n this.transcriptPageAnchor = \"start\";\n this.transcriptFollowing = false;\n }\n }\n } else if (data === \"G\" && this.detailView === \"transcript\") {\n const detail = allEntities.find((entity) => entity.id === this.detailId);\n const target = detail ? this.transcriptTarget(detail) : undefined;\n if (target) this.loadLatestTranscript?.(target);\n this.transcriptPageAnchor = undefined;\n this.transcriptFollowing = true;\n this.detailScroll = this.detailMaxScroll;\n } else if (matchesKey(data, Key.home) || data === \"g\") {\n if (this.detailView === \"transcript\") {\n this.transcriptPageAnchor = undefined;\n this.transcriptFollowing = false;\n }\n this.detailScroll = 0;\n } else if (data === \"s\" || data === \"u\") {\n const detail = allEntities.find((entity) => entity.id === this.detailId);\n const delivery = data === \"s\" ? \"steer\" : \"followUp\";\n if (detail && this.canMessage(detail, delivery)) {\n this.openAgentMessageEditor(detail, delivery);\n }\n } else if (data === \"m\" || data === \"M\") {\n const detail = allEntities.find((entity) => entity.id === this.detailId);\n if (\n detail &&\n detail.kind === \"actor\" &&\n detail.status !== \"stopped\" &&\n (data === \"m\" || detail.value.local !== false)\n ) {\n this.openModelPicker(detail, data === \"M\" ? \"project\" : \"session\");\n }\n } else if (data === \"e\" || data === \"E\") {\n const detail = allEntities.find((entity) => entity.id === this.detailId);\n if (\n detail &&\n detail.kind === \"actor\" &&\n detail.status !== \"stopped\" &&\n (data === \"e\" || detail.value.local !== false)\n ) {\n this.openThinkingPicker(detail, data === \"E\" ? \"project\" : \"session\");\n }\n } else if (data === \"y\") {\n const detail = allEntities.find((entity) => entity.id === this.detailId);\n if (\n detail &&\n (detail.kind === \"globalActor\" ||\n (detail.kind === \"actor\" && detail.value.local !== false))\n ) {\n this.openDeliveryPicker(detail);\n }\n } else if (data === \"v\") {\n const detail = allEntities.find((entity) => entity.id === this.detailId);\n if (\n detail &&\n detail.kind === \"actor\" &&\n detail.status !== \"stopped\" &&\n detail.value.local !== false\n ) {\n this.openEventsPicker(detail);\n }\n } else if (data === \"o\") {\n const detail = allEntities.find((entity) => entity.id === this.detailId);\n if (\n detail &&\n detail.kind === \"actor\" &&\n detail.status !== \"stopped\" &&\n detail.value.local !== false\n ) {\n this.openToolsPicker(detail);\n }\n } else if (data === \"c\") {\n const detail = allEntities.find((entity) => entity.id === this.detailId);\n if (\n detail &&\n detail.kind === \"actor\" &&\n detail.status !== \"stopped\" &&\n detail.value.local !== false &&\n this.onClearMessages\n ) {\n this.onClearMessages(detail.value.id);\n }\n } else if (data === \"i\") {\n const detail = allEntities.find((entity) => entity.id === this.detailId);\n if (\n detail &&\n (detail.kind === \"globalActor\" ||\n (detail.kind === \"actor\" && detail.value.local !== false))\n ) {\n this.openInstructionsEditor(detail);\n }\n } else if (data === \"x\") {\n const detail = allEntities.find((entity) => entity.id === this.detailId);\n if (detail && this.canStop(detail)) {\n this.requestParticipantStop(detail);\n } else if (\n detail &&\n detail.kind === \"actor\" &&\n detail.status !== \"stopped\" &&\n this.onExportActor\n ) {\n this.onExportActor(detail.value.id);\n }\n } else if (data === \"p\") {\n const detail = allEntities.find((entity) => entity.id === this.detailId);\n if (detail && detail.kind === \"globalActor\" && this.onImportActor) {\n this.onImportActor(detail.value.id);\n }\n } else if (data === \"d\") {\n const detail = allEntities.find((entity) => entity.id === this.detailId);\n if (detail && detail.kind === \"globalActor\" && this.onRemoveGlobalActor) {\n this.onRemoveGlobalActor(detail.value.id);\n }\n }\n this.tui.requestRender();\n return;\n }\n\n if (data === \"1\" || data === \"2\") {\n const nextOverview: OverviewView = data === \"1\" ? \"activity\" : \"topology\";\n if (nextOverview !== this.overviewView) {\n if (nextOverview === \"activity\") {\n this.stopGraphAnimation();\n this.stopGraphEffectsAnimation();\n }\n this.overviewView = nextOverview;\n this.pane = nextOverview === \"activity\" ? \"phases\" : \"entities\";\n this.entityIndex = 0;\n this.selectedEntityId = undefined;\n this.pendingStop = undefined;\n }\n this.tui.requestRender();\n return;\n }\n\n if (matchesKey(data, Key.escape) || matchesKey(data, Key.ctrl(\"c\"))) {\n if (this.overviewView === \"activity\" && this.pane === \"entities\") {\n this.pane = \"phases\";\n } else {\n this.done();\n return;\n }\n } else if (this.overviewView === \"topology\" && data === \"r\") {\n this.toggleGraphReplay(snapshot, projectMesh);\n this.startGraphEffectsAnimation();\n this.tui.requestRender();\n return;\n } else if (\n this.overviewView === \"topology\" &&\n this.graphReplayIndex !== undefined &&\n data === \" \"\n ) {\n this.graphReplayPlaying = !this.graphReplayPlaying;\n this.graphReplayAdvancedAt = Date.now();\n this.startGraphEffectsAnimation();\n this.tui.requestRender();\n return;\n } else if (\n this.overviewView === \"topology\" &&\n this.graphReplayIndex !== undefined &&\n (matchesKey(data, Key.left) || matchesKey(data, Key.right))\n ) {\n this.stepGraphReplay(matchesKey(data, Key.left) ? -1 : 1);\n this.tui.requestRender();\n return;\n } else if (this.overviewView === \"topology\" && (data === \"+\" || data === \"=\" || data === \"-\")) {\n const speeds = [0.5, 1, 2, 4];\n const current = speeds.indexOf(this.graphReplaySpeed);\n const direction = data === \"-\" ? -1 : 1;\n this.graphReplaySpeed = speeds[Math.max(0, Math.min(speeds.length - 1, current + direction))] ?? 1;\n this.graphReplayAdvancedAt = Date.now();\n this.tui.requestRender();\n return;\n } else if (this.overviewView === \"topology\" && data === \"H\") {\n this.graphShowHistory = !this.graphShowHistory;\n this.tui.requestRender();\n return;\n } else if (this.overviewView === \"topology\" && data === \"M\") {\n const selected = this.pane === \"entities\" ? entities[this.entityIndex] : undefined;\n if (\n selected?.kind === \"actor\" &&\n selected.status !== \"stopped\" &&\n selected.value.local !== false &&\n this.modelSourceForActor(selected.value) &&\n this.onActorModel\n ) {\n this.detailId = selected.id;\n this.openModelPicker(selected, \"project\");\n } else {\n this.graphReducedMotion = !this.graphReducedMotion;\n }\n this.tui.requestRender();\n return;\n } else if (\n this.overviewView === \"topology\" &&\n (matchesKey(data, Key.left) || matchesKey(data, Key.right) ||\n matchesKey(data, Key.up) || matchesKey(data, Key.down) || data === \"h\" || data === \"l\")\n ) {\n const direction =\n matchesKey(data, Key.left) || data === \"h\"\n ? \"left\"\n : matchesKey(data, Key.right) || data === \"l\"\n ? \"right\"\n : matchesKey(data, Key.up)\n ? \"up\"\n : \"down\";\n const target = directionalGraphTarget(this.graphPositions, this.selectedEntityId, direction);\n const targetIndex = target ? entities.findIndex((entity) => entity.id === target) : -1;\n if (targetIndex >= 0) {\n this.entityIndex = targetIndex;\n this.selectedEntityId = target;\n this.pendingStop = undefined;\n }\n this.tui.requestRender();\n return;\n } else if (matchesKey(data, Key.tab) && this.overviewView === \"topology\") {\n this.entityIndex = entities.length > 0 ? (this.entityIndex + 1) % entities.length : 0;\n this.selectedEntityId = entities[this.entityIndex]?.id;\n this.pendingStop = undefined;\n this.tui.requestRender();\n return;\n } else if (matchesKey(data, Key.tab) && this.overviewView === \"activity\") {\n this.pane = this.pane === \"phases\" ? \"entities\" : \"phases\";\n } else if (\n this.overviewView === \"activity\" &&\n (matchesKey(data, Key.left) || data === \"h\")\n ) {\n this.pane = \"phases\";\n } else if (\n this.overviewView === \"activity\" &&\n (matchesKey(data, Key.right) || data === \"l\")\n ) {\n this.pane = \"entities\";\n } else if (matchesKey(data, Key.up) || data === \"k\") {\n if (this.overviewView === \"activity\" && this.pane === \"phases\") {\n this.phaseIndex = Math.max(0, this.phaseIndex - 1);\n this.phaseSelectionTouched = true;\n this.entityIndex = 0;\n this.selectedEntityId = undefined;\n } else {\n this.entityIndex = Math.max(0, this.entityIndex - 1);\n }\n } else if (matchesKey(data, Key.down) || data === \"j\") {\n if (this.overviewView === \"activity\" && this.pane === \"phases\") {\n this.phaseIndex = Math.min(Math.max(0, panels.length - 1), this.phaseIndex + 1);\n this.phaseSelectionTouched = true;\n this.entityIndex = 0;\n this.selectedEntityId = undefined;\n } else {\n this.entityIndex = Math.min(Math.max(0, entities.length - 1), this.entityIndex + 1);\n }\n } else if (\n [\"m\", \"M\", \"e\", \"E\", \"y\", \"v\", \"o\", \"i\", \"c\", \"s\", \"u\", \"x\", \"p\", \"d\"].includes(data) &&\n this.pane === \"entities\"\n ) {\n const selected = entities[this.entityIndex];\n if (selected) {\n if (\n (data === \"s\" || data === \"u\") &&\n this.canMessage(selected, data === \"s\" ? \"steer\" : \"followUp\")\n ) {\n this.detailId = selected.id;\n this.openAgentMessageEditor(selected, data === \"s\" ? \"steer\" : \"followUp\");\n } else if (data === \"x\" && this.canStop(selected)) {\n this.requestParticipantStop(selected);\n } else if (\n data === \"x\" &&\n selected.kind === \"actor\" &&\n selected.status !== \"stopped\" &&\n this.onExportActor\n ) {\n this.onExportActor(selected.value.id);\n } else if (\n (data === \"m\" || data === \"M\") &&\n selected.kind === \"actor\" &&\n selected.status !== \"stopped\" &&\n (data === \"m\" || selected.value.local !== false)\n ) {\n this.detailId = selected.id;\n this.openModelPicker(selected, data === \"M\" ? \"project\" : \"session\");\n } else if (\n (data === \"e\" || data === \"E\") &&\n selected.kind === \"actor\" &&\n selected.status !== \"stopped\" &&\n (data === \"e\" || selected.value.local !== false)\n ) {\n this.detailId = selected.id;\n this.openThinkingPicker(selected, data === \"E\" ? \"project\" : \"session\");\n } else if (\n data === \"y\" &&\n (selected.kind === \"globalActor\" ||\n (selected.kind === \"actor\" &&\n selected.status !== \"stopped\" &&\n selected.value.local !== false))\n ) {\n this.detailId = selected.id;\n this.openDeliveryPicker(selected);\n } else if (\n data === \"v\" &&\n selected.kind === \"actor\" &&\n selected.status !== \"stopped\" &&\n selected.value.local !== false\n ) {\n this.detailId = selected.id;\n this.openEventsPicker(selected);\n } else if (\n data === \"o\" &&\n selected.kind === \"actor\" &&\n selected.status !== \"stopped\" &&\n selected.value.local !== false\n ) {\n this.detailId = selected.id;\n this.openToolsPicker(selected);\n } else if (\n data === \"c\" &&\n selected.kind === \"actor\" &&\n selected.status !== \"stopped\" &&\n selected.value.local !== false &&\n this.onClearMessages\n ) {\n this.onClearMessages(selected.value.id);\n } else if (\n data === \"i\" &&\n (selected.kind === \"globalActor\" ||\n (selected.kind === \"actor\" && selected.value.local !== false))\n ) {\n this.detailId = selected.id;\n this.openInstructionsEditor(selected);\n } else if (data === \"p\" && selected.kind === \"globalActor\" && this.onImportActor) {\n this.onImportActor(selected.value.id);\n } else if (data === \"d\" && selected.kind === \"globalActor\" && this.onRemoveGlobalActor) {\n this.onRemoveGlobalActor(selected.value.id);\n }\n }\n } else if (data === \" \" && this.pane === \"entities\") {\n const selected = entities[this.entityIndex];\n if (selected && this.hasTranscript(selected)) {\n this.detailId = selected.id;\n this.detailView = \"transcript\";\n this.detailScroll = 0;\n this.transcriptPageAnchor = undefined;\n this.transcriptFollowing = true;\n }\n } else if (matchesKey(data, Key.enter)) {\n if (this.overviewView === \"activity\" && this.pane === \"phases\") {\n this.pane = \"entities\";\n } else {\n const selected = entities[this.entityIndex];\n if (selected) {\n this.detailId = selected.id;\n this.detailView = \"summary\";\n this.detailScroll = 0;\n this.transcriptFollowing = true;\n }\n }\n } else if (data === \"f\") {\n const next = (filters.indexOf(this.filter) + 1) % filters.length;\n this.filter = filters[next] ?? \"all\";\n this.entityIndex = 0;\n this.selectedEntityId = undefined;\n this.tui.requestRender();\n return;\n } else if (data === \"[\") {\n this.runIndex = Math.min(Math.max(0, snapshot.runs.length - 1), this.runIndex + 1);\n this.selectedRunId = snapshot.runs[this.runIndex]?.id;\n this.runSelectionTouched = true;\n this.resetSelection();\n this.tui.requestRender();\n return;\n } else if (data === \"]\") {\n this.runIndex = Math.max(0, this.runIndex - 1);\n this.selectedRunId = snapshot.runs[this.runIndex]?.id;\n this.runSelectionTouched = true;\n this.resetSelection();\n this.tui.requestRender();\n return;\n } else if (data === \"G\") {\n if (this.overviewView === \"activity\" && this.pane === \"phases\") {\n this.phaseIndex = Math.max(0, panels.length - 1);\n this.phaseSelectionTouched = true;\n this.entityIndex = 0;\n this.selectedEntityId = undefined;\n } else {\n this.entityIndex = Math.max(0, entities.length - 1);\n }\n } else if (data === \"g\") {\n if (this.overviewView === \"activity\" && this.pane === \"phases\") {\n this.phaseIndex = 0;\n this.phaseSelectionTouched = true;\n this.entityIndex = 0;\n this.selectedEntityId = undefined;\n } else {\n this.entityIndex = 0;\n }\n }\n if (this.phaseSelectionTouched) this.selectedPhaseId = panels[this.phaseIndex]?.id;\n if (this.detailId) {\n this.pinDetailSelection(run, panel, this.overviewView === \"activity\");\n }\n if (this.pane === \"entities\") {\n this.selectedEntityId = entities[this.entityIndex]?.id;\n }\n this.tui.requestRender();\n }\n\n render(width: number): readonly string[] {\n if (width <= 0) return [];\n if (this.mode === \"help\") return this.renderHelp(width);\n if (this.mode === \"agentMessageEditor\") return this.renderAgentMessageEditor(width);\n if (this.mode === \"instructionsEditor\") {\n return this.renderInstructionsEditor(width);\n }\n if (\n (this.mode === \"modelPicker\" ||\n this.mode === \"thinkingPicker\" ||\n this.mode === \"deliveryPicker\" ||\n this.mode === \"eventsPicker\" ||\n this.mode === \"toolsPicker\") &&\n this.picker\n ) {\n return this.renderPicker(width);\n }\n const snapshot = this.snapshot();\n const run = this.selectRun(snapshot);\n const panels = phasePanels(snapshot, run);\n this.syncPhase(run, panels);\n const panel = panels[this.phaseIndex];\n const projectMesh = this.projectMesh(snapshot);\n const allEntities = entitiesForOverview(\n snapshot,\n run,\n panel,\n this.overviewView,\n projectMesh,\n );\n const entities = allEntities.filter(\n (entity) => entity.kind === \"main\" || matchesFilter(entity.status, this.filter),\n );\n this.syncEntitySelection(entities, this.overviewView !== \"activity\");\n if (this.detailId) {\n const detail = allEntities.find((entity) => entity.id === this.detailId);\n if (detail) return this.renderDetail(width, snapshot, detail);\n this.closeDetail();\n }\n return this.renderOverview(\n width,\n snapshot,\n run,\n panels,\n entities,\n allEntities,\n projectMesh,\n );\n }\n\n invalidate(): void {\n this.detailRenderer.invalidate();\n }\n\n dispose(): void {\n this.picker = undefined;\n this.editor = undefined;\n this.editorActorName = undefined;\n this.agentMessageTarget = undefined;\n this.pendingStop = undefined;\n this.stopGraphAnimation();\n this.stopGraphEffectsAnimation();\n this.detailRenderer.invalidate();\n this.mode = \"overview\";\n }\n\n private transcriptTarget(entity: Entity): FabricTranscriptTarget | undefined {\n if (entity.kind === \"agent\" || entity.kind === \"actor\") return entity.value;\n return undefined;\n }\n\n private hasTranscript(entity: Entity): boolean {\n return (\n (entity.kind === \"agent\" && this.agentTranscript !== undefined) ||\n (entity.kind === \"actor\" && this.actorTranscript !== undefined)\n );\n }\n\n private matchesTranscriptToolToggle(data: string): boolean {\n if (this.keybindings) return this.keybindings.matches(data, \"app.tools.expand\");\n const keybindings = getKeybindings();\n const keys = keybindings.getKeys(\"app.tools.expand\");\n return keys.length > 0\n ? keybindings.matches(data, \"app.tools.expand\")\n : matchesKey(data, Key.ctrl(\"o\"));\n }\n\n private transcriptToolToggleHint(): string {\n const keys = (this.keybindings ?? getKeybindings()).getKeys(\"app.tools.expand\");\n const key = keys.length > 0 ? keys.join(\"/\") : this.keybindings ? \"unbound\" : \"ctrl+o\";\n return `${key} ${this.transcriptToolsExpanded ? \"collapse\" : \"expand\"} tools`;\n }\n\n private messageTarget(entity: Entity): FabricDashboardMessageTarget | undefined {\n if (entity.kind === \"main\") {\n return { id: entity.value.id, name: \"Main\", kind: \"main\" };\n }\n if (entity.kind === \"peer\") {\n return { id: entity.value.id, name: entity.value.name, kind: \"peer\" };\n }\n if (entity.kind === \"agent\") {\n return { id: entity.value.id, name: entity.value.name, kind: \"agent\" };\n }\n if (entity.kind === \"actor\") {\n return { id: entity.value.id, name: entity.value.name, kind: \"actor\" };\n }\n if (entity.kind === \"meshParticipant\") {\n return { id: entity.value.id, name: entity.value.name, kind: \"meshParticipant\" };\n }\n return undefined;\n }\n\n private canMessage(entity: Entity, delivery: FabricAgentMessageDelivery): boolean {\n const target = this.messageTarget(entity);\n if (!target) return false;\n if (target.kind === \"agent\") {\n if (!isActiveStatus(entity.status)) return false;\n if (\n entity.kind === \"agent\" &&\n entity.value.capabilities &&\n !entity.value.capabilities.includes(delivery)\n ) {\n return false;\n }\n return Boolean(\n this.onTargetMessage ||\n (delivery === \"steer\" ? this.onAgentSteer : this.onAgentFollowUp),\n );\n }\n if (!this.onTargetMessage) return false;\n if (target.kind === \"actor\") return entity.status !== \"stopped\" && delivery === \"steer\";\n if (target.kind === \"meshParticipant\" && entity.kind === \"meshParticipant\") {\n const participant = entity.value.participant;\n return participant\n ? !participant.stale && participant.capabilities.includes(delivery)\n : true;\n }\n return true;\n }\n\n private openAgentMessageEditor(\n entity: Entity,\n delivery: FabricAgentMessageDelivery,\n ): void {\n const target = this.messageTarget(entity);\n if (!target || !this.canMessage(entity, delivery)) return;\n const editor = new Editor(editorTheme(this.theme));\n editor.focused = true;\n editor.onSubmit = (text) => {\n const message = text.trim();\n if (!message) return;\n if (this.onTargetMessage) {\n this.onTargetMessage(target, message, delivery);\n } else if (target.kind === \"agent\") {\n if (delivery === \"steer\") this.onAgentSteer?.(target.id, message);\n else this.onAgentFollowUp?.(target.id, message);\n }\n this.closeAgentMessageEditor();\n };\n this.editor = editor;\n this.agentMessageTarget = { ...target, delivery };\n this.mode = \"agentMessageEditor\";\n }\n\n private closeAgentMessageEditor(): void {\n this.editor = undefined;\n this.agentMessageTarget = undefined;\n this.mode = this.detailId ? \"detail\" : \"overview\";\n }\n\n private canStop(entity: Entity): entity is Extract<\n Entity,\n { kind: \"agent\" } | { kind: \"meshParticipant\" }\n > {\n if (!this.onAgentStop) return false;\n if (entity.kind === \"agent\") {\n return (\n isActiveStatus(entity.status) &&\n (!entity.value.capabilities || entity.value.capabilities.includes(\"stop\"))\n );\n }\n if (entity.kind === \"meshParticipant\") {\n const participant = entity.value.participant;\n return Boolean(\n participant &&\n !participant.stale &&\n participant.capabilities.includes(\"stop\"),\n );\n }\n return false;\n }\n\n private requestParticipantStop(\n entity: Extract<Entity, { kind: \"agent\" } | { kind: \"meshParticipant\" }>,\n ): void {\n if (!this.onAgentStop || !this.canStop(entity)) return;\n const now = Date.now();\n if (this.pendingStop?.id === entity.value.id && this.pendingStop.expiresAt > now) {\n this.pendingStop = undefined;\n this.onAgentStop(entity.value.id);\n return;\n }\n this.pendingStop = { id: entity.value.id, expiresAt: now + 2_000 };\n }\n\n private renderAgentMessageEditor(width: number): string[] {\n if (!this.editor || !this.agentMessageTarget) return [];\n if (width < 24) return this.renderNarrowFallback(width, `${this.agentMessageTarget.delivery} \u00B7 ${this.agentMessageTarget.name}`, \"esc cancel\");\n const target = this.agentMessageTarget;\n const label =\n target.kind === \"actor\"\n ? \"queue actor message\"\n : target.delivery === \"steer\"\n ? target.kind === \"main\"\n ? \"message or steer Main\"\n : \"steer now\"\n : \"queue follow-up\";\n const innerWidth = width - 2;\n const lines = [this.topBorder(width, `${label} \u00B7 ${target.name}`)];\n for (const line of this.editor.render(innerWidth)) lines.push(this.row(width, line));\n lines.push(this.middleBorder(width));\n lines.push(\n this.row(\n width,\n this.theme.fg(\"dim\", \" enter send \u00B7 shift+enter newline \u00B7 esc cancel\"),\n ),\n );\n lines.push(this.bottomBorder(width));\n return lines.map((line) => truncateToWidth(line, width, \"\"));\n }\n\n private renderHelp(width: number): string[] {\n if (width < 24) return this.renderNarrowFallback(width, \"dashboard help\", \"? or esc close\");\n const lines = [this.topBorder(width, \"Fabric dashboard help\")];\n const mainActions = [\n this.onTargetMessage ? \"s message/steer\" : undefined,\n this.onTargetMessage ? \"u queue follow-up\" : undefined,\n \"enter details\",\n ].filter((value): value is string => Boolean(value));\n const agentActions = [\n this.agentTranscript ? \"space transcript peek\" : undefined,\n this.onTargetMessage || this.onAgentSteer ? \"s steer now\" : undefined,\n this.onTargetMessage || this.onAgentFollowUp ? \"u queue follow-up\" : undefined,\n this.onAgentStop ? \"x twice stop\" : undefined,\n \"enter details\",\n ].filter((value): value is string => Boolean(value));\n const actorActions = [\n this.actorTranscript ? \"space transcript peek\" : undefined,\n this.onTargetMessage ? \"s queue message\" : undefined,\n (this.modelSource || this.claudeModelSource) && this.onActorModel ? \"m session model \u00B7 M pin model\" : undefined,\n this.onActorThinking ? \"e session thinking \u00B7 E pin thinking\" : undefined,\n this.onActorDeliveryPolicy ? \"y delivery policy\" : undefined,\n this.onActorEvents ? \"v events\" : undefined,\n this.onActorTools ? \"o tools\" : undefined,\n this.onActorInstructions ? \"i instructions\" : undefined,\n this.onClearMessages ? \"c clear mailbox\" : undefined,\n this.onExportActor ? \"x export\" : undefined,\n ].filter((value): value is string => Boolean(value));\n const templateActions = [\n this.onGlobalDeliveryPolicy ? \"y delivery policy\" : undefined,\n this.onGlobalInstructions ? \"i instructions\" : undefined,\n this.onImportActor ? \"p import\" : undefined,\n this.onRemoveGlobalActor ? \"d delete\" : undefined,\n ].filter((value): value is string => Boolean(value));\n const help = [\n [\"Navigate\", \"Topology: arrows/h/l move spatially \u00B7 j/k ordered selection \u00B7 tab next \u00B7 enter inspect \u00B7 esc back\"],\n [\"Views\", \"1 Activity \u00B7 2 unified Topology\"],\n ...(this.onConversation ? [[\"Chat\", \"Shift+C opens the selected participant conversation \u00B7 Esc returns to Main\"]] : []),\n [\"Topology\", \"Main branches into Participants (sessions, agents, actors) and Mesh (namespaced topics and hierarchical state); traffic travels on decaying edges\"],\n [\"Motion\", \"r replay/live \u00B7 space pause/play \u00B7 \u2190/\u2192 step \u00B7 +/- speed \u00B7 H history \u00B7 M reduced motion\"],\n [\"Runs\", \"[ older \u00B7 ] newer \u00B7 f cycle status filter\"],\n ...(mainActions.length > 1 ? [[\"Main\", mainActions.join(\" \u00B7 \")]] : []),\n ...(agentActions.length > 1 ? [[\"Agents\", agentActions.join(\" \u00B7 \")]] : []),\n ...(actorActions.length > 0 ? [[\"Actors\", actorActions.join(\" \u00B7 \")]] : []),\n ...(templateActions.length > 0 ? [[\"Templates\", templateActions.join(\" \u00B7 \")]] : []),\n [\n \"Details\",\n `\u2191\u2193/jk lazy scroll \u00B7 g page top \u00B7 G live tail \u00B7 ${this.transcriptToolToggleHint()} \u00B7 t transcript/summary \u00B7 ? close help`,\n ],\n ];\n for (const [label, value] of help) {\n const prefix = `${this.theme.fg(\"accent\", `${label}:`)} `;\n const wrapped = wrapPlainText(value ?? \"\", Math.max(1, width - 2 - visibleWidth(prefix)), 3);\n if (wrapped[0]) lines.push(this.row(width, prefix + wrapped[0]));\n for (const continuation of wrapped.slice(1)) {\n lines.push(this.row(width, \" \".repeat(visibleWidth(prefix)) + continuation));\n }\n }\n lines.push(this.middleBorder(width));\n lines.push(this.row(width, this.theme.fg(\"dim\", \" ? or esc close\")));\n lines.push(this.bottomBorder(width));\n return lines.map((line) => truncateToWidth(line, width, \"\"));\n }\n\n private modelSourceForActor(actor: FabricUiActor): ModelSource | undefined {\n return actor.runner === \"claude\" ? this.claudeModelSource : this.modelSource;\n }\n\n private openModelPicker(\n entity: Entity,\n scope: FabricActorBindingScope = \"session\",\n ): void {\n if (entity.kind !== \"actor\" || !this.onActorModel) return;\n const actor = entity.value;\n if (scope === \"project\" && actor.local === false) return;\n const source = this.modelSourceForActor(actor);\n if (!source) return;\n const projectModel = actor.projectDefaults?.model ?? (actor.binding ? undefined : actor.model);\n const currentValue = scope === \"session\" ? actor.binding?.model : projectModel;\n const runtimeDefault = actor.runner === \"claude\"\n ? \"Fabric Claude model (or Claude Code runtime default)\"\n : \"Fabric OMP model (or host default)\";\n this.pickerActorName = actor.name;\n this.picker = new FabricModelSelector({\n theme: this.theme,\n source,\n currentValue: currentValue ?? INHERIT_VALUE,\n headerText: scope === \"session\"\n ? actor.runner === \"claude\"\n ? `Model for Claude actor \"${actor.name}\" \u00B7 session binding. Inherit uses the project default.`\n : `Model for actor \"${actor.name}\" \u00B7 session binding. Inherit uses the project default.`\n : `Project model default for actor \"${actor.name}\". This pin is shared by every session.`,\n inheritName: scope === \"session\"\n ? `Use project default (${projectModel ?? runtimeDefault})`\n : `Clear project pin; use ${runtimeDefault}`,\n onSelect: (value) => {\n const model = value === INHERIT_VALUE ? undefined : value;\n this.onActorModel!(actor.id, model, scope);\n this.closeModelPicker();\n },\n onCancel: () => this.closeModelPicker(),\n });\n this.picker.focused = true;\n this.mode = \"modelPicker\";\n }\n\n private openThinkingPicker(\n entity: Entity,\n scope: FabricActorBindingScope = \"session\",\n ): void {\n if (entity.kind !== \"actor\" || !this.onActorThinking) return;\n const actor = entity.value;\n if (scope === \"project\" && actor.local === false) return;\n const projectThinking =\n actor.projectDefaults?.thinking ?? (actor.binding ? undefined : actor.thinking);\n const currentValue = scope === \"session\" ? actor.binding?.thinking : projectThinking;\n this.pickerActorName = actor.name;\n this.picker = new FabricThinkingSelector({\n theme: this.theme,\n currentValue: currentValue ?? INHERIT_VALUE,\n headerText: scope === \"session\"\n ? `Thinking level for actor \"${actor.name}\" \u00B7 session binding. Inherit uses the project default.`\n : `Project thinking default for actor \"${actor.name}\". This pin is shared by every session.`,\n inheritName: scope === \"session\"\n ? `Use project default (${projectThinking ?? \"Fabric default\"})`\n : \"Clear project pin; use the Fabric default thinking level\",\n onSelect: (value) => {\n const thinking = value === INHERIT_VALUE ? undefined : value;\n this.onActorThinking!(\n actor.id,\n isFabricThinking(thinking) ? thinking : undefined,\n scope,\n );\n this.closeModelPicker();\n },\n onCancel: () => this.closeModelPicker(),\n });\n this.picker.focused = true;\n this.mode = \"thinkingPicker\";\n }\n\n private openDeliveryPicker(entity: Entity): void {\n if (entity.kind !== \"actor\" && entity.kind !== \"globalActor\") return;\n const target = entity.value;\n const callback =\n entity.kind === \"actor\" ? this.onActorDeliveryPolicy : this.onGlobalDeliveryPolicy;\n if (\n !callback ||\n (entity.kind === \"actor\" &&\n (entity.status === \"stopped\" || entity.value.local === false))\n ) return;\n this.pickerActorName = target.name;\n this.picker = new FabricActorDeliverySelector({\n theme: this.theme,\n currentValue: { delivery: target.delivery, triggerTurn: target.triggerTurn },\n headerText: `Delivery policy for ${entity.kind === \"actor\" ? \"actor\" : \"template\"} \"${target.name}\". Active delivery requires an explicit resume choice.`,\n onSelect: (policy) => {\n callback(target.id, policy.delivery, policy.triggerTurn);\n this.closeModelPicker();\n },\n onCancel: () => this.closeModelPicker(),\n });\n this.picker.focused = true;\n this.mode = \"deliveryPicker\";\n }\n\n private openEventsPicker(entity: Entity): void {\n if (entity.kind !== \"actor\" || entity.value.local === false || !this.onActorEvents) return;\n const actor = entity.value;\n this.pickerActorName = actor.name;\n this.picker = new FabricHostEventSelector({\n theme: this.theme,\n currentValue: actor.events,\n headerText: `Host events for actor \"${actor.name}\". Toggle with space, Enter to apply, Esc to cancel.`,\n onSelect: (events) => {\n this.onActorEvents!(actor.id, events);\n this.closeModelPicker();\n },\n onCancel: () => this.closeModelPicker(),\n });\n this.picker.focused = true;\n this.mode = \"eventsPicker\";\n }\n\n private openToolsPicker(entity: Entity): void {\n if (entity.kind !== \"actor\" || entity.value.local === false || !this.onActorTools) return;\n const actor = entity.value;\n this.pickerActorName = actor.name;\n this.picker = new FabricActorToolSelector({\n theme: this.theme,\n currentValue: actor.tools ?? this.actorDefaultTools,\n headerText: `Tools for actor \"${actor.name}\". Toggle with space, Enter to apply, Esc to cancel. OMP actors always retain fabric_exec.`,\n onSelect: (tools) => {\n this.onActorTools!(actor.id, tools);\n this.closeModelPicker();\n },\n onCancel: () => this.closeModelPicker(),\n });\n this.picker.focused = true;\n this.mode = \"toolsPicker\";\n }\n\n private closeModelPicker(): void {\n this.picker = undefined;\n this.pickerActorName = undefined;\n this.mode = \"detail\";\n }\n\n /**\n * Open the embedded multi-line editor for an actor's default instruction.\n * Matches OMP's editor dialog convention (Enter submit, Shift+Enter newline,\n * Esc/Ctrl+C cancel) so a steering user edits the persona with the same\n * muscle memory as the chat input. Works for both live project actors and\n * global templates; the submit routes to the scope-appropriate callback.\n */\n private openInstructionsEditor(entity: Entity): void {\n let kind: \"actor\" | \"globalActor\";\n let id: string;\n let name: string;\n let instructions: string;\n if (entity.kind === \"actor\") {\n if (\n entity.status === \"stopped\" ||\n entity.value.local === false ||\n !this.onActorInstructions\n ) return;\n kind = \"actor\";\n id = entity.value.id;\n name = entity.value.name;\n instructions = entity.value.instructions;\n } else if (entity.kind === \"globalActor\") {\n if (!this.onGlobalInstructions) return;\n kind = \"globalActor\";\n id = entity.value.id;\n name = entity.value.name;\n instructions = entity.value.instructions;\n } else {\n return;\n }\n const editor = new Editor(editorTheme(this.theme));\n editor.focused = true;\n editor.setText(instructions);\n editor.onSubmit = (text) => {\n if (kind === \"actor\") this.onActorInstructions?.(id, text);\n else this.onGlobalInstructions?.(id, text);\n this.closeInstructionsEditor();\n };\n this.editor = editor;\n this.editorActorName = name;\n this.mode = \"instructionsEditor\";\n }\n\n private closeInstructionsEditor(): void {\n this.editor = undefined;\n this.editorActorName = undefined;\n this.mode = \"detail\";\n }\n\n private renderPicker(width: number): string[] {\n if (!this.picker) return [];\n if (width < 24) return this.renderNarrowFallback(width, `actor \u00B7 ${this.pickerActorName ?? \"\"}`, \"esc cancel\");\n const kind =\n this.mode === \"thinkingPicker\"\n ? \"thinking\"\n : this.mode === \"deliveryPicker\"\n ? \"delivery\"\n : this.mode === \"eventsPicker\"\n ? \"events\"\n : this.mode === \"toolsPicker\"\n ? \"tools\"\n : \"model\";\n const lines = [\n this.topBorder(width, `actor \u00B7 ${this.pickerActorName ?? \"\"} \u00B7 ${kind}`),\n ];\n const inner = this.picker.render(width - 2);\n for (const line of inner) lines.push(this.row(width, line));\n lines.push(this.middleBorder(width));\n const filterHint =\n this.mode === \"thinkingPicker\" ||\n this.mode === \"deliveryPicker\" ||\n this.mode === \"eventsPicker\" ||\n this.mode === \"toolsPicker\"\n ? \"\"\n : \" \u00B7 type to filter\";\n lines.push(\n this.row(\n width,\n this.theme.fg(\"dim\", ` Enter to select \u00B7 Esc to cancel${filterHint}`),\n ),\n );\n lines.push(this.bottomBorder(width));\n return lines.map((line) => truncateToWidth(line, width, \"\"));\n }\n\n private renderInstructionsEditor(width: number): string[] {\n if (!this.editor) return [];\n if (width < 24) return this.renderNarrowFallback(width, `instructions \u00B7 ${this.editorActorName ?? \"\"}`, \"esc cancel\");\n const innerWidth = width - 2;\n const lines = [this.topBorder(width, `instructions \u00B7 ${this.editorActorName ?? \"\"}`)];\n for (const line of this.editor.render(innerWidth)) {\n lines.push(this.row(width, line));\n }\n lines.push(this.middleBorder(width));\n lines.push(\n this.row(\n width,\n this.theme.fg(\"dim\", \" enter submit \u00B7 shift+enter newline \u00B7 esc cancel\"),\n ),\n );\n lines.push(this.bottomBorder(width));\n return lines.map((line) => truncateToWidth(line, width, \"\"));\n }\n\n private projectMesh(snapshot: FabricDashboardSnapshot): FabricProjectMeshModel | undefined {\n if (this.overviewView !== \"topology\") return undefined;\n return buildProjectMeshTopology({\n main: snapshot.main,\n actors: snapshot.actors,\n agents: snapshot.agents,\n state: snapshot.state,\n events: snapshot.events,\n ...(snapshot.participants ? { participants: snapshot.participants } : {}),\n now: snapshot.now,\n });\n }\n\n private replayFrames(\n snapshot: FabricDashboardSnapshot,\n topology: FabricProjectMeshModel,\n ): Array<{ event: MeshEvent; route: FabricProjectMeshRoute }> {\n return snapshot.events.flatMap((event) => {\n const route = topology.routes.find(\n (candidate) =>\n candidate.topic === event.topic &&\n candidate.kind === event.kind &&\n (candidate.fromId === event.from.id || candidate.fromName === event.from.name),\n );\n return route ? [{ event, route }] : [];\n });\n }\n\n private startGraphEffectsAnimation(): void {\n if (this.graphEffectsAnimation) return;\n this.graphReplayAdvancedAt = Date.now();\n this.graphEffectsAnimation = setInterval(() => {\n const now = Date.now();\n if (\n this.graphReplayPlaying &&\n this.graphReplayIndex !== undefined &&\n this.graphReplayLength > 0 &&\n now - this.graphReplayAdvancedAt >= 850 / this.graphReplaySpeed\n ) {\n if (this.graphReplayIndex < this.graphReplayLength - 1) {\n this.graphReplayIndex++;\n this.graphReplayAdvancedAt = now;\n } else {\n this.graphReplayPlaying = false;\n }\n }\n this.tui.requestRender();\n }, 80);\n this.graphEffectsAnimation.unref?.();\n }\n\n private stopGraphEffectsAnimation(): void {\n if (this.graphEffectsAnimation) clearInterval(this.graphEffectsAnimation);\n this.graphEffectsAnimation = undefined;\n this.graphReplayPlaying = false;\n }\n\n private toggleGraphReplay(snapshot: FabricDashboardSnapshot, topology?: FabricProjectMeshModel): void {\n const model = topology ?? this.projectMesh(snapshot);\n const frames = model ? this.replayFrames(snapshot, model) : [];\n this.graphReplayLength = frames.length;\n if (frames.length === 0) return;\n if (this.graphReplayIndex === undefined) {\n this.graphReplayIndex = 0;\n this.graphReplayPlaying = true;\n } else {\n this.graphReplayIndex = undefined;\n this.graphReplayPlaying = false;\n }\n this.graphReplayAdvancedAt = Date.now();\n }\n\n private stepGraphReplay(delta: number): void {\n if (this.graphReplayIndex === undefined || this.graphReplayLength === 0) return;\n this.graphReplayIndex = Math.max(\n 0,\n Math.min(this.graphReplayLength - 1, this.graphReplayIndex + delta),\n );\n this.graphReplayPlaying = false;\n this.graphReplayAdvancedAt = Date.now();\n }\n\n private setGraphCameraTarget(point: FabricGraphPoint): void {\n if (!this.graphCameraInitialized) {\n this.graphCamera = { ...point };\n this.graphCameraTarget = { ...point };\n this.graphCameraInitialized = true;\n return;\n }\n if (this.graphCameraTarget.x === point.x && this.graphCameraTarget.y === point.y) return;\n this.graphCameraTarget = { ...point };\n this.graphAnimationAt = Date.now();\n if (this.graphAnimation) return;\n this.graphAnimation = setInterval(() => this.stepGraphCamera(), 16);\n this.graphAnimation.unref?.();\n }\n\n private stopGraphAnimation(): void {\n if (this.graphAnimation) clearInterval(this.graphAnimation);\n this.graphAnimation = undefined;\n this.graphAnimationAt = 0;\n this.graphVelocity = { x: 0, y: 0 };\n this.graphCameraTarget = { ...this.graphCamera };\n }\n\n private stepGraphCamera(): void {\n const now = Date.now();\n const elapsed = this.graphAnimationAt > 0 ? (now - this.graphAnimationAt) / 1_000 : 0.016;\n const dt = Math.max(0.008, Math.min(0.032, elapsed));\n this.graphAnimationAt = now;\n const stiffness = 115;\n const damping = 19;\n const stepAxis = (position: number, target: number, velocity: number): [number, number] => {\n const acceleration = stiffness * (target - position) - damping * velocity;\n const nextVelocity = velocity + acceleration * dt;\n return [position + nextVelocity * dt, nextVelocity];\n };\n [this.graphCamera.x, this.graphVelocity.x] = stepAxis(\n this.graphCamera.x,\n this.graphCameraTarget.x,\n this.graphVelocity.x,\n );\n [this.graphCamera.y, this.graphVelocity.y] = stepAxis(\n this.graphCamera.y,\n this.graphCameraTarget.y,\n this.graphVelocity.y,\n );\n const distance = Math.hypot(\n this.graphCameraTarget.x - this.graphCamera.x,\n this.graphCameraTarget.y - this.graphCamera.y,\n );\n const speed = Math.hypot(this.graphVelocity.x, this.graphVelocity.y);\n if (distance < 0.025 && speed < 0.025) {\n this.graphCamera = { ...this.graphCameraTarget };\n this.graphVelocity = { x: 0, y: 0 };\n if (this.graphAnimation) clearInterval(this.graphAnimation);\n this.graphAnimation = undefined;\n }\n this.tui.requestRender();\n }\n\n private renderOverview(\n width: number,\n snapshot: FabricDashboardSnapshot,\n run: FabricActivityRun | undefined,\n panels: PhasePanel[],\n entities: Entity[],\n allEntities: Entity[],\n meshModel?: FabricProjectMeshModel,\n ): string[] {\n if (width < 24) {\n return [truncateToWidth(\"too narrow \u00B7 need 24 cols\", width)];\n }\n const innerWidth = width - 2;\n const terminalRows = Math.max(\n 1,\n this.tui.terminal?.rows ?? process.stdout.rows ?? 28,\n );\n const overlayRows = dashboardOverlayRows(terminalRows);\n const lines: string[] = [];\n const title =\n this.overviewView === \"activity\"\n ? `Fabric \u00B7 ${run?.name ?? \"session\"} \u00B7 Activity`\n : \"Fabric \u00B7 Topology\";\n lines.push(this.topBorder(width, title));\n\n const runAgents = run\n ? snapshot.agents.filter((agent) => agent.runId === run.id)\n : snapshot.agents;\n const activeAgents = runAgents.filter((agent) => isActiveStatus(agent.status)).length;\n const hasDetachedWork = activeAgents > 0;\n const runTokens = tokensFor(snapshot, run);\n const largeRun = runAgents.length > 25 || runTokens > 1_500_000;\n const elapsed = run\n ? formatDuration(((hasDetachedWork ? snapshot.now : run.finishedAt) ?? snapshot.now) - run.startedAt)\n : undefined;\n const activeActors = snapshot.actors.filter((actor) => isActiveStatus(actor.status)).length;\n const summary = (\n meshModel\n ? [\n run?.name ? `focus ${run.name}` : undefined,\n run?.currentPhaseId\n ? `current ${run.phases.find((phase) => phase.id === run.currentPhaseId)?.name ?? run.currentPhaseId}`\n : undefined,\n `Participants ${snapshot.agents.filter((agent) => isActiveStatus(agent.status)).length}/${snapshot.agents.length} agents \u00B7 ${activeActors}/${snapshot.actors.length} actors \u00B7 ${meshModel.participants.length} remote`,\n `Mesh ${meshModel.topics.length} topics \u00B7 ${snapshot.state.length} state`,\n this.graphReplayIndex !== undefined\n ? `${this.graphReplayPlaying ? \"\u25B6\" : \"\u2161\"} replay ${this.graphReplayIndex + 1}/${Math.max(1, this.graphReplayLength)} \u00B7 ${this.graphReplaySpeed}\u00D7`\n : undefined,\n snapshot.runs.length > 1 ? `run ${this.runIndex + 1}/${snapshot.runs.length}` : undefined,\n ]\n : [\n this.overviewView === \"topology\" ? run?.name : undefined,\n run?.status,\n largeRun ? \"\u26A0 large run\" : undefined,\n `${activeAgents}/${runAgents.length} run agents active`,\n `${snapshot.actors.length} actors`,\n runTokens > 0 ? `${formatTokens(runTokens)} tok` : undefined,\n elapsed,\n snapshot.runs.length > 1\n ? `run ${this.runIndex + 1}/${snapshot.runs.length}`\n : undefined,\n ]\n )\n .filter((value): value is string => Boolean(value))\n .join(\" \u00B7 \");\n const summaryText = safeText(summary);\n let headerLine = summaryText;\n if (\n run?.description &&\n this.overviewView === \"activity\"\n ) {\n const gap = \" \";\n const availableDescription = innerWidth - visibleWidth(summaryText) - gap.length;\n headerLine =\n availableDescription >= 12\n ? `${padToWidth(\n this.theme.fg(\"muted\", safeText(run.description)),\n availableDescription,\n )}${gap}${this.theme.fg(\"dim\", summaryText)}`\n : this.theme.fg(\"dim\", summaryText);\n } else if (summaryText) {\n headerLine = this.theme.fg(\"dim\", summaryText);\n }\n const minimumRows = 8;\n if (overlayRows < minimumRows) {\n return [\n title,\n this.theme.fg(\"dim\", summaryText || \"No Fabric activity yet\"),\n this.theme.fg(\"dim\", \"1 activity \u00B7 2 topology \u00B7 arrows move \u00B7 esc close\"),\n ]\n .slice(0, overlayRows)\n .map((line) => truncateToWidth(line, width, \"\"));\n }\n lines.push(this.row(width, headerLine || this.theme.fg(\"muted\", \"No Fabric activity yet\")));\n lines.push(this.middleBorder(width));\n\n const desiredRunEvents = run?.events.slice(-2) ?? [];\n const desiredMeshEventCount = Math.max(0, 2 - desiredRunEvents.length);\n const desiredMeshEvents =\n desiredMeshEventCount > 0 ? snapshot.events.slice(-desiredMeshEventCount) : [];\n const optionalEventRoom = Math.max(0, overlayRows - minimumRows);\n const eventRows = optionalEventRoom >= 2 ? Math.min(2, optionalEventRoom - 1) : 0;\n const runEventRows = Math.min(desiredRunEvents.length, eventRows);\n const meshEventRows = Math.max(0, eventRows - runEventRows);\n const runEvents = runEventRows > 0 ? desiredRunEvents.slice(-runEventRows) : [];\n const meshEvents =\n meshEventRows > 0 ? desiredMeshEvents.slice(-meshEventRows) : [];\n const eventChromeRows = eventRows > 0 ? eventRows + 1 : 0;\n const maxBody = Math.max(\n 1,\n Math.min(this.overviewView === \"topology\" ? 30 : 22, overlayRows - 7 - eventChromeRows),\n );\n if (this.overviewView === \"topology\") {\n const topology = meshModel ?? buildProjectMeshTopology({\n main: snapshot.main,\n actors: snapshot.actors,\n agents: snapshot.agents,\n state: snapshot.state,\n events: snapshot.events,\n ...(snapshot.participants ? { participants: snapshot.participants } : {}),\n now: snapshot.now,\n });\n this.startGraphEffectsAnimation();\n const replayFrames = this.replayFrames(snapshot, topology);\n this.graphReplayLength = replayFrames.length;\n if (this.graphReplayIndex !== undefined && replayFrames.length === 0) {\n this.graphReplayIndex = undefined;\n this.graphReplayPlaying = false;\n } else if (this.graphReplayIndex !== undefined) {\n this.graphReplayIndex = Math.min(this.graphReplayIndex, replayFrames.length - 1);\n }\n const replayFrame = this.graphReplayIndex === undefined\n ? undefined\n : replayFrames[this.graphReplayIndex];\n this.graphReplayLabel = replayFrame?.event.kind;\n const renderGraph = () => renderFabricTopologyPanel({\n theme: this.theme,\n filter: this.filter,\n selectedEntityId: this.selectedEntityId,\n snapshot,\n run,\n mesh: topology,\n allEntities,\n entities,\n width: innerWidth,\n height: maxBody,\n camera: this.graphCamera,\n invalidate: this.highlightInvalidate,\n animation: {\n now: Date.now(),\n reducedMotion: this.graphReducedMotion,\n showHistory: this.graphShowHistory,\n ...(replayFrame\n ? { replayRouteId: replayFrame.route.id, replayLabel: replayFrame.event.kind }\n : {}),\n },\n });\n const cameraWasInitialized = this.graphCameraInitialized;\n let rendered = renderGraph();\n this.graphPositions = rendered.positions;\n if (rendered.selectedPosition) this.setGraphCameraTarget(rendered.selectedPosition);\n if (!cameraWasInitialized && this.graphCameraInitialized) rendered = renderGraph();\n for (const line of rendered.lines) lines.push(this.row(width, line));\n } else if (innerWidth >= 88) {\n const leftWidth = Math.min(38, Math.max(28, Math.floor((innerWidth - 1) * 0.34)));\n const rightWidth = innerWidth - leftWidth - 1;\n const leftLines = this.renderPhasePanel(panels, leftWidth, maxBody);\n const rightLines = this.renderEntityPanel(entities, rightWidth, maxBody, snapshot.now);\n for (let index = 0; index < maxBody; index++) {\n const left = leftLines[index] ?? \"\";\n const right = rightLines[index] ?? \"\";\n lines.push(\n this.row(\n width,\n `${padToWidth(left, leftWidth)}${this.theme.fg(\"borderMuted\", \"\u2502\")}${padToWidth(\n right,\n rightWidth,\n )}`,\n ),\n );\n }\n } else {\n const panelRows = Math.max(2, maxBody - 1);\n const phaseHeight = Math.max(1, Math.min(panels.length + 1, Math.floor(panelRows * 0.45)));\n const entityHeight = Math.max(1, panelRows - phaseHeight);\n for (const line of this.renderPhasePanel(panels, innerWidth, phaseHeight)) {\n lines.push(this.row(width, line));\n }\n lines.push(this.row(width, this.theme.fg(\"borderMuted\", \"\u2500\".repeat(innerWidth))));\n for (const line of this.renderEntityPanel(entities, innerWidth, entityHeight, snapshot.now)) {\n lines.push(this.row(width, line));\n }\n }\n\n if (eventRows > 0) {\n lines.push(this.middleBorder(width));\n let renderedEventRows = 0;\n for (const event of runEvents) {\n lines.push(\n this.row(\n width,\n colorStatus(\n this.theme,\n event.level === \"success\" ? \"completed\" : event.level,\n `[${formatClock(event.createdAt)}] ${safeText(event.message)}`,\n ),\n ),\n );\n renderedEventRows++;\n }\n for (const event of meshEvents) {\n const target = event.to ? ` \u2192 ${event.to}` : \"\";\n const text = event.text ? ` \u00B7 ${safeText(event.text)}` : \"\";\n lines.push(\n this.row(\n width,\n this.theme.fg(\n \"dim\",\n `[${formatClock(event.createdAt)}] ${event.topic} \u00B7 ${event.from.name}${target}${text}`,\n ),\n ),\n );\n renderedEventRows++;\n }\n while (renderedEventRows < eventRows) {\n lines.push(this.row(width, \"\"));\n renderedEventRows++;\n }\n }\n\n lines.push(this.middleBorder(width));\n const navigationHint =\n this.overviewView === \"topology\"\n ? this.graphReplayIndex !== undefined\n ? `replay ${this.graphReplayIndex + 1}/${Math.max(1, this.graphReplayLength)}${this.graphReplayLabel ? ` \u00B7 ${safeText(this.graphReplayLabel)}` : \"\"} \u00B7 r live \u00B7 space ${this.graphReplayPlaying ? \"pause\" : \"play\"} \u00B7 \u2190/\u2192 step \u00B7 +/- speed:${this.graphReplaySpeed}\u00D7 \u00B7 H history \u00B7 M motion:${this.graphReducedMotion ? \"reduced\" : \"full\"} \u00B7 ? help`\n : `arrows/h/l move \u00B7 j/k order \u00B7 r replay \u00B7 H history \u00B7 M motion:${this.graphReducedMotion ? \"reduced\" : \"full\"} \u00B7 f filter:${this.filter} \u00B7 1 activity \u00B7 ? help`\n : `\u2191\u2193/jk select \u00B7 \u2190\u2192/tab pane \u00B7 enter inspect \u00B7 f filter:${this.filter} \u00B7 2 topology \u00B7 [ older \u00B7 ] newer \u00B7 ? help`;\n lines.push(this.row(width, this.theme.fg(\"dim\", navigationHint)));\n const selectedEntity = entities[this.entityIndex];\n const actionHint =\n this.pane === \"entities\" && selectedEntity\n ? this.theme.fg(\"muted\", ` ${this.overviewActionHint(selectedEntity)}`)\n : \"\";\n lines.push(this.row(width, actionHint));\n lines.push(this.bottomBorder(width));\n return lines.map((line) => truncateToWidth(line, width, \"\"));\n }\n\n private overviewActionHint(entity: Entity): string {\n if (entity.kind === \"main\") {\n const actions = [\n this.canMessage(entity, \"steer\") ? \"s message/steer\" : undefined,\n this.canMessage(entity, \"followUp\") ? \"u queue follow-up\" : undefined,\n \"enter details\",\n ].filter((value): value is string => Boolean(value));\n return `Main actions: ${actions.join(\" \u00B7 \")}`;\n }\n if (entity.kind === \"peer\") {\n const actions = [\n this.canMessage(entity, \"steer\") ? \"s steer\" : undefined,\n this.canMessage(entity, \"followUp\") ? \"u follow-up\" : undefined,\n \"enter details\",\n ].filter((value): value is string => Boolean(value));\n return `peer actions: ${actions.join(\" \u00B7 \")}`;\n }\n if (entity.kind === \"actor\" && entity.status !== \"stopped\") {\n const owned = entity.value.local !== false;\n const actions = [\n this.actorTranscript\n ? `space ${isActiveStatus(entity.status) ? \"live \" : \"\"}transcript peek`\n : undefined,\n this.canMessage(entity, \"steer\") ? \"s queue message\" : undefined,\n this.modelSourceForActor(entity.value) && this.onActorModel\n ? `m session model${owned ? \" \u00B7 M pin model\" : \"\"}`\n : undefined,\n this.onActorThinking\n ? `e session thinking${owned ? \" \u00B7 E pin thinking\" : \"\"}`\n : undefined,\n owned && this.onActorDeliveryPolicy ? \"y delivery policy\" : undefined,\n owned && this.onActorEvents ? \"v events\" : undefined,\n owned && this.onActorTools ? \"o tools\" : undefined,\n owned && this.onActorInstructions ? \"i instructions\" : undefined,\n owned && this.onClearMessages ? \"c clear mailbox\" : undefined,\n this.onExportActor ? \"x export\" : undefined,\n \"enter details\",\n ].filter((value): value is string => Boolean(value));\n return `actor actions: ${actions.join(\" \u00B7 \")}`;\n }\n if (entity.kind === \"globalActor\") {\n const actions = [\n this.onGlobalDeliveryPolicy ? \"y delivery policy\" : undefined,\n this.onGlobalInstructions ? \"i instructions\" : undefined,\n this.onImportActor ? \"p import\" : undefined,\n this.onRemoveGlobalActor ? \"d delete\" : undefined,\n \"enter details\",\n ].filter((value): value is string => Boolean(value));\n return `template actions: ${actions.join(\" \u00B7 \")}`;\n }\n if (entity.kind === \"agent\") {\n const armed =\n this.pendingStop?.id === entity.value.id && this.pendingStop.expiresAt > Date.now();\n const actions = [\n this.agentTranscript\n ? `space ${isActiveStatus(entity.status) ? \"live \" : \"\"}transcript peek`\n : undefined,\n this.canMessage(entity, \"steer\") ? \"s steer\" : undefined,\n this.canMessage(entity, \"followUp\") ? \"u follow-up\" : undefined,\n this.canStop(entity)\n ? armed\n ? \"x again to stop\"\n : \"x stop\"\n : undefined,\n \"enter details\",\n ].filter((value): value is string => Boolean(value));\n return `agent actions: ${actions.join(\" \u00B7 \")}`;\n }\n if (entity.kind === \"meshParticipant\") {\n const actions = [\n this.canMessage(entity, \"steer\") ? \"s steer\" : undefined,\n this.canMessage(entity, \"followUp\") ? \"u follow-up\" : undefined,\n this.canStop(entity) ? \"x twice to stop\" : undefined,\n \"enter details\",\n ].filter((value): value is string => Boolean(value));\n return `participant actions: ${actions.join(\" \u00B7 \")}`;\n }\n return \"enter details\";\n }\n\n private renderPhasePanel(panels: PhasePanel[], width: number, height: number): string[] {\n const lines = [\n truncateToWidth(\n `${this.pane === \"phases\" ? this.theme.fg(\"accent\", \"\u25B8 \") : \" \"}${this.theme.fg(\n \"accent\",\n \"Activity\",\n )}`,\n width,\n ),\n ];\n const available = Math.max(0, height - 1);\n const start = Math.max(\n 0,\n Math.min(this.phaseIndex - Math.floor(available / 2), Math.max(0, panels.length - available)),\n );\n for (let index = start; index < Math.min(panels.length, start + available); index++) {\n const panel = panels[index];\n if (!panel) continue;\n const selected = index === this.phaseIndex;\n const prefix = selected ? \"\u203A \" : \" \";\n const count = panel.total > 0 ? `${panel.completed}/${panel.total}` : \"\";\n const raw = `${prefix}${colorStatus(this.theme, panel.status, statusGlyph(panel.status))} ${this.theme.fg(\"muted\", safeText(\n panel.name,\n ))}`;\n const countWidth = visibleWidth(count);\n const contentWidth = Math.max(0, width - countWidth - (count ? 1 : 0));\n let line = `${padToWidth(raw, contentWidth)}${count ? ` ${this.theme.fg(\"dim\", count)}` : \"\"}`;\n if (selected && this.pane === \"phases\") {\n line = this.theme.bg(\"selectedBg\", padToWidth(line, width));\n }\n lines.push(truncateToWidth(line, width, \"\"));\n }\n while (lines.length < height) lines.push(\"\");\n return lines.slice(0, height);\n }\n\n private renderEntityPanel(\n entities: Entity[],\n width: number,\n height: number,\n now: number,\n ): string[] {\n const lines: string[] = [];\n const available = Math.max(0, height);\n const groupedRows: Array<\n | { type: \"group\"; group: EntityGroup }\n | { type: \"spacer\" }\n | { type: \"entity\"; entity: Entity; entityIndex: number }\n > = [];\n const groups = groupEntities(entities);\n for (let groupIndex = 0; groupIndex < groups.length; groupIndex++) {\n const group = groups[groupIndex]!;\n if (groupIndex > 0) groupedRows.push({ type: \"spacer\" });\n groupedRows.push({ type: \"group\", group });\n for (const entry of group.entries) {\n groupedRows.push({ type: \"entity\", entity: entry.entity, entityIndex: entry.index });\n }\n }\n const selectedRow = Math.max(\n 0,\n groupedRows.findIndex(\n (row) => row.type === \"entity\" && row.entityIndex === this.entityIndex,\n ),\n );\n const start = Math.max(\n 0,\n Math.min(\n selectedRow - Math.floor(available / 2),\n Math.max(0, groupedRows.length - available),\n ),\n );\n for (let index = start; index < Math.min(groupedRows.length, start + available); index++) {\n const row = groupedRows[index];\n if (!row) continue;\n if (row.type === \"spacer\") {\n lines.push(\"\");\n continue;\n }\n if (row.type === \"group\") {\n lines.push(\n truncateToWidth(\n this.theme.fg(\n \"muted\",\n ` ${this.theme.bold(row.group.label)} (${row.group.entries.length})`,\n ),\n width,\n \"\",\n ),\n );\n continue;\n }\n const entity = row.entity;\n const selected = row.entityIndex === this.entityIndex;\n const prefix = selected ? \"\u203A \" : \" \";\n const lead = `${prefix}${colorStatus(this.theme, entity.status, statusGlyph(entity.status))} ${this.theme.fg(\"muted\", safeText(\n entity.label,\n ))}`;\n const tail = safeText(entityTail(entity, now));\n let line = tail ? `${lead} ${this.theme.fg(\"dim\", tail)}` : lead;\n if (selected && this.pane === \"entities\") {\n line = this.theme.bg(\"selectedBg\", padToWidth(line, width));\n }\n lines.push(truncateToWidth(line, width, \"\"));\n }\n if (entities.length === 0 && available > 0) {\n const label = this.filter === \"all\" ? \"activity\" : `${this.filter} activity`;\n lines.push(this.theme.fg(\"dim\", ` (no ${label}; press f to change filter)`));\n }\n while (lines.length < height) lines.push(\"\");\n return lines.slice(0, height);\n }\n\n private renderDetail(\n width: number,\n snapshot: FabricDashboardSnapshot,\n entity: Entity,\n ): string[] {\n const result = this.detailRenderer.render(\n width,\n snapshot,\n entity,\n {\n view: this.detailView,\n scroll: this.detailScroll,\n pageAnchor: this.transcriptPageAnchor,\n transcriptFollowing: this.transcriptFollowing,\n transcriptToolsExpanded: this.transcriptToolsExpanded,\n },\n this.detailActionHint(entity),\n (entity.kind === \"agent\" || entity.kind === \"actor\") && this.detailView === \"transcript\"\n ? this.transcriptToolToggleHint()\n : \"\",\n );\n this.detailScroll = result.scroll;\n this.detailMaxScroll = result.maxScroll;\n this.transcriptPageAnchor = result.pageAnchor;\n return result.lines;\n }\n\n private detailActionHint(entity: Entity): string {\n if (entity.kind === \"main\") {\n const actions = [\n this.canMessage(entity, \"steer\") ? \"s message/steer now\" : undefined,\n this.canMessage(entity, \"followUp\") ? \"u queue follow-up\" : undefined,\n ].filter((value): value is string => Boolean(value));\n return actions.length > 0\n ? `Main OMP agent actions: ${actions.join(\" \u00B7 \")}`\n : \"Main OMP agent controls are unavailable in this session.\";\n }\n if (entity.kind === \"peer\") {\n const actions = [\n this.canMessage(entity, \"steer\") ? \"s steer over mesh\" : undefined,\n this.canMessage(entity, \"followUp\") ? \"u queue follow-up over mesh\" : undefined,\n ].filter((value): value is string => Boolean(value));\n return actions.length > 0\n ? `Peer session actions: ${actions.join(\" \u00B7 \")}`\n : \"Peer session is read-only.\";\n }\n if (entity.kind === \"agent\") {\n const armed =\n this.pendingStop?.id === entity.value.id && this.pendingStop.expiresAt > Date.now();\n const actions = [\n this.canMessage(entity, \"steer\") ? \"s steer now\" : undefined,\n this.canMessage(entity, \"followUp\") ? \"u queue follow-up\" : undefined,\n this.canStop(entity)\n ? armed\n ? \"x again to confirm stop\"\n : \"x stop\"\n : undefined,\n ].filter((value): value is string => Boolean(value));\n const controls =\n actions.length > 0\n ? `One-shot agent actions: ${actions.join(\" \u00B7 \")}. `\n : \"One-shot agent. \";\n return `${controls}Model and thinking are fixed at spawn; use a persistent actor for editable runtime settings.`;\n }\n if (entity.kind === \"actor\" && entity.status !== \"stopped\") {\n const owned = entity.value.local !== false;\n const actions = [\n this.canMessage(entity, \"steer\") ? \"s queue message\" : undefined,\n this.modelSourceForActor(entity.value) && this.onActorModel\n ? `m session model${owned ? \" \u00B7 M pin model\" : \"\"}`\n : undefined,\n this.onActorThinking\n ? `e session thinking${owned ? \" \u00B7 E pin thinking\" : \"\"}`\n : undefined,\n owned && this.onActorDeliveryPolicy ? \"y delivery policy\" : undefined,\n owned && this.onActorEvents ? \"v events\" : undefined,\n owned && this.onActorTools ? \"o tools\" : undefined,\n owned && this.onClearMessages ? \"c clear mailbox\" : undefined,\n owned && this.onActorInstructions ? \"i instructions\" : undefined,\n this.onExportActor ? \"x export\u2192global\" : undefined,\n ].filter((value): value is string => Boolean(value));\n return actions.length > 0\n ? `Actor actions: ${actions.join(\" \u00B7 \")}`\n : \"Actor settings are read-only in this session.\";\n }\n if (entity.kind === \"meshParticipant\") {\n const actions = [\n this.canMessage(entity, \"steer\") ? \"s steer over mesh\" : undefined,\n this.canMessage(entity, \"followUp\") ? \"u queue follow-up over mesh\" : undefined,\n this.canStop(entity) ? \"x twice to stop\" : undefined,\n ].filter((value): value is string => Boolean(value));\n return actions.length > 0\n ? `Remote participant actions: ${actions.join(\" \u00B7 \")}`\n : \"Remote participant is read-only.\";\n }\n if (entity.kind === \"globalActor\") {\n const actions = [\n this.onGlobalDeliveryPolicy ? \"y delivery policy\" : undefined,\n this.onGlobalInstructions ? \"i instructions\" : undefined,\n this.onImportActor ? \"p import\" : undefined,\n this.onRemoveGlobalActor ? \"d delete\" : undefined,\n ].filter((value): value is string => Boolean(value));\n return actions.length > 0\n ? `Template actions: ${actions.join(\" \u00B7 \")}`\n : \"Global template is read-only in this session.\";\n }\n return \"Read-only detail.\";\n }\n\n private syncEntitySelection(entities: Entity[], preferAttention = false): void {\n if (entities.length === 0) {\n this.entityIndex = 0;\n this.selectedEntityId = undefined;\n return;\n }\n const retainedIndex = this.selectedEntityId\n ? entities.findIndex((entity) => entity.id === this.selectedEntityId)\n : -1;\n const failedIndex = preferAttention\n ? entities.findIndex(\n (entity) =>\n entity.kind !== \"main\" &&\n [\"failed\", \"timed_out\", \"error\"].includes(entity.status),\n )\n : -1;\n const blockedIndex = preferAttention\n ? entities.findIndex(\n (entity) => entity.kind !== \"main\" && entity.status === \"blocked\",\n )\n : -1;\n const activeIndex = preferAttention\n ? entities.findIndex(\n (entity) => entity.kind !== \"main\" && isActiveStatus(entity.status),\n )\n : -1;\n const attentionIndex =\n failedIndex >= 0 ? failedIndex : blockedIndex >= 0 ? blockedIndex : activeIndex;\n const firstWorkIndex = entities.findIndex((entity) => entity.kind !== \"main\");\n this.entityIndex =\n retainedIndex >= 0\n ? retainedIndex\n : attentionIndex >= 0\n ? attentionIndex\n : firstWorkIndex >= 0\n ? firstWorkIndex\n : Math.max(0, Math.min(this.entityIndex, entities.length - 1));\n this.selectedEntityId = entities[this.entityIndex]?.id;\n }\n\n private selectRun(snapshot: FabricDashboardSnapshot): FabricActivityRun | undefined {\n if (snapshot.runs.length === 0) {\n this.runIndex = 0;\n this.selectedRunId = undefined;\n return undefined;\n }\n if (!this.runSelectionTouched) {\n this.runIndex = 0;\n this.selectedRunId = snapshot.runs[0]?.id;\n return snapshot.runs[0];\n }\n const retainedIndex = this.selectedRunId\n ? snapshot.runs.findIndex((run) => run.id === this.selectedRunId)\n : -1;\n this.runIndex =\n retainedIndex >= 0\n ? retainedIndex\n : Math.max(0, Math.min(this.runIndex, snapshot.runs.length - 1));\n this.selectedRunId = snapshot.runs[this.runIndex]?.id;\n return snapshot.runs[this.runIndex];\n }\n\n private syncPhase(run: FabricActivityRun | undefined, panels: PhasePanel[]): void {\n if (panels.length === 0) {\n this.phaseIndex = 0;\n this.selectedPhaseId = undefined;\n return;\n }\n if (!this.phaseSelectionTouched) {\n const current = run?.currentPhaseId\n ? panels.findIndex((panel) => panel.id === run.currentPhaseId)\n : -1;\n const activeRunActivity = panels.findIndex(\n (panel) => panel.kind === \"unphased\" && isActiveStatus(panel.status),\n );\n if (current >= 0 && isActiveStatus(panels[current]!.status)) {\n this.phaseIndex = current;\n } else if (activeRunActivity >= 0) {\n this.phaseIndex = activeRunActivity;\n } else if (current >= 0) {\n this.phaseIndex = current;\n } else {\n this.phaseIndex = 0;\n }\n } else {\n const retainedIndex = this.selectedPhaseId\n ? panels.findIndex((panel) => panel.id === this.selectedPhaseId)\n : -1;\n this.phaseIndex =\n retainedIndex >= 0\n ? retainedIndex\n : Math.max(0, Math.min(this.phaseIndex, panels.length - 1));\n }\n this.phaseIndex = Math.max(0, Math.min(this.phaseIndex, panels.length - 1));\n this.selectedPhaseId = panels[this.phaseIndex]?.id;\n }\n\n private resetSelection(): void {\n this.phaseIndex = 0;\n this.entityIndex = 0;\n this.selectedEntityId = undefined;\n this.phaseSelectionTouched = false;\n this.selectedPhaseId = undefined;\n this.detailId = undefined;\n this.detailScroll = 0;\n this.detailMaxScroll = 0;\n this.transcriptPageAnchor = undefined;\n this.detailSelectionRestore = undefined;\n this.detailView = \"summary\";\n this.transcriptFollowing = true;\n this.pane = this.overviewView === \"activity\" ? \"phases\" : \"entities\";\n }\n\n private pinDetailSelection(\n run: FabricActivityRun | undefined,\n panel: PhasePanel | undefined,\n pinPhase: boolean,\n ): void {\n this.detailSelectionRestore ??= {\n runSelectionTouched: this.runSelectionTouched,\n phaseSelectionTouched: this.phaseSelectionTouched,\n };\n this.runSelectionTouched = true;\n this.selectedRunId = run?.id;\n if (pinPhase) {\n this.phaseSelectionTouched = true;\n this.selectedPhaseId = panel?.id;\n }\n }\n\n private closeDetail(): void {\n const restore = this.detailSelectionRestore;\n if (restore) {\n this.runSelectionTouched = restore.runSelectionTouched;\n this.phaseSelectionTouched = restore.phaseSelectionTouched;\n }\n this.detailSelectionRestore = undefined;\n this.detailId = undefined;\n this.detailScroll = 0;\n this.detailMaxScroll = 0;\n this.transcriptPageAnchor = undefined;\n this.detailView = \"summary\";\n this.transcriptFollowing = true;\n }\n\n private renderNarrowFallback(width: number, label: string, hint: string): string[] {\n return [safeText(label), hint]\n .map((line) => truncateToWidth(line, width, \"\"))\n .filter((line) => visibleWidth(line) > 0);\n }\n\n private topBorder(width: number, title: string): string {\n const border = (value: string) => this.theme.fg(\"borderMuted\", value);\n const safeTitle = truncateToWidth(safeText(title), Math.max(0, width - 6));\n const styledTitle = ` ${this.theme.fg(\"accent\", safeTitle)} `;\n const remaining = Math.max(0, width - 2 - visibleWidth(styledTitle));\n const left = Math.floor(remaining / 2);\n const right = remaining - left;\n return `${border(`\u256D${\"\u2500\".repeat(left)}`)}${styledTitle}${border(`${\"\u2500\".repeat(right)}\u256E`)}`;\n }\n\n private middleBorder(width: number): string {\n return this.theme.fg(\"borderMuted\", `\u251C${\"\u2500\".repeat(Math.max(0, width - 2))}\u2524`);\n }\n\n private bottomBorder(width: number): string {\n return this.theme.fg(\"borderMuted\", `\u2570${\"\u2500\".repeat(Math.max(0, width - 2))}\u256F`);\n }\n\n private row(width: number, content: string): string {\n const innerWidth = Math.max(0, width - 2);\n return `${this.theme.fg(\"borderMuted\", \"\u2502\")}${padToWidth(content, innerWidth)}${this.theme.fg(\n \"borderMuted\",\n \"\u2502\",\n )}`;\n }\n}\n", "import { createHash } from \"node:crypto\";\nimport type { FabricActivityRun } from \"../activity/types.js\";\nimport type { MeshEvent } from \"../mesh/store.js\";\nimport type { FabricParticipantInfo } from \"../topology/types.js\";\nimport type {\n FabricUiActor,\n FabricUiAgent,\n FabricUiMain,\n FabricUiStateEntry,\n} from \"./types.js\";\nimport { isActiveStatus, orderAgentsByCreation } from \"./types.js\";\n\nconst UNPHASED = Symbol(\"fabric-run-topology-unphased\");\nconst UNPHASED_ROW_ID = \"__fabric_run_topology_unphased\";\nconst failureStatuses = new Set([\"failed\", \"timed_out\", \"error\"]);\n\ninterface FabricRunTopologyPhaseRow {\n kind: \"phase\";\n id: string;\n name: string;\n status: string;\n agentCount: number;\n}\n\ninterface FabricRunTopologyAgentRow {\n kind: \"agent\";\n entityId: string;\n agent: FabricUiAgent;\n ancestorLast: boolean[];\n ancestorEntityIds: string[];\n isLast: boolean;\n}\n\ntype FabricRunTopologyRow = FabricRunTopologyPhaseRow | FabricRunTopologyAgentRow;\n\ninterface FabricRunTopologyOmissionRow {\n kind: \"omission\";\n direction: \"before\" | \"after\" | \"both\";\n rows: number;\n agents: number;\n phases: number;\n active: number;\n blocked: number;\n failed: number;\n context?: string[];\n}\n\ntype FabricRunTopologyDisplayRow = FabricRunTopologyRow | FabricRunTopologyOmissionRow;\n\ninterface FlowGroup {\n id: string;\n name: string;\n status: string;\n agents: FabricUiAgent[];\n}\n\nconst statusForAgents = (agents: FabricUiAgent[], fallback: string): string => {\n if (agents.some((agent) => failureStatuses.has(agent.status))) return \"failed\";\n if (agents.some((agent) => agent.status === \"blocked\")) return \"blocked\";\n if (agents.some((agent) => isActiveStatus(agent.status))) return \"running\";\n if (\n agents.length > 0 &&\n agents.every((agent) => [\"completed\", \"done\", \"stopped\", \"cancelled\"].includes(agent.status))\n ) {\n return agents.some((agent) => agent.status === \"stopped\" || agent.status === \"cancelled\")\n ? \"stopped\"\n : \"completed\";\n }\n return fallback;\n};\n\ntype FlowPhaseKey = string | typeof UNPHASED;\n\nconst phaseKey = (agent: FabricUiAgent): FlowPhaseKey => agent.phaseId ?? UNPHASED;\n\nconst flowGroups = (\n run: FabricActivityRun,\n agents: FabricUiAgent[],\n includeEmptyPhases: boolean,\n): FlowGroup[] => {\n const grouped = new Map<FlowPhaseKey, FabricUiAgent[]>();\n for (const agent of agents) {\n const key = phaseKey(agent);\n const entries = grouped.get(key) ?? [];\n entries.push(agent);\n grouped.set(key, entries);\n }\n\n const groups: FlowGroup[] = [];\n const unphased = grouped.get(UNPHASED) ?? [];\n if (unphased.length > 0) {\n groups.push({\n id: UNPHASED_ROW_ID,\n name: \"Run activity\",\n status: statusForAgents(unphased, run.status),\n agents: unphased,\n });\n }\n\n const knownPhaseIds = new Set<string>();\n for (const phase of run.phases) {\n knownPhaseIds.add(phase.id);\n const phaseAgents = grouped.get(phase.id) ?? [];\n if (!includeEmptyPhases && phaseAgents.length === 0) continue;\n groups.push({\n id: phase.id,\n name: phase.name,\n status: statusForAgents(phaseAgents, phase.status),\n agents: phaseAgents,\n });\n }\n\n const unknownGroups = new Map<string, FabricUiAgent[]>();\n for (const agent of agents) {\n if (!agent.phaseId || knownPhaseIds.has(agent.phaseId)) continue;\n const entries = unknownGroups.get(agent.phaseId) ?? [];\n entries.push(agent);\n unknownGroups.set(agent.phaseId, entries);\n }\n for (const [id, phaseAgents] of unknownGroups) {\n groups.push({\n id,\n name: id,\n status: statusForAgents(phaseAgents, \"running\"),\n agents: phaseAgents,\n });\n }\n\n if (groups.length === 0 && agents.length > 0) {\n groups.push({\n id: UNPHASED_ROW_ID,\n name: \"Run activity\",\n status: statusForAgents(agents, run.status),\n agents,\n });\n }\n return groups;\n};\n\nconst flattenGroup = (group: FlowGroup): FabricRunTopologyAgentRow[] => {\n const ordered = orderAgentsByCreation(group.agents);\n const byId = new Map(ordered.map((agent) => [agent.id, agent] as const));\n const children = new Map<string, FabricUiAgent[]>();\n const roots: FabricUiAgent[] = [];\n\n for (const agent of ordered) {\n const parent = agent.parentId ? byId.get(agent.parentId) : undefined;\n if (!parent || parent.id === agent.id) {\n roots.push(agent);\n continue;\n }\n const entries = children.get(parent.id) ?? [];\n entries.push(agent);\n children.set(parent.id, entries);\n }\n\n const rows: FabricRunTopologyAgentRow[] = [];\n const visited = new Set<string>();\n const visit = (\n agent: FabricUiAgent,\n ancestorLast: boolean[],\n ancestorEntityIds: string[],\n isLast: boolean,\n ): void => {\n if (visited.has(agent.id)) return;\n visited.add(agent.id);\n rows.push({\n kind: \"agent\",\n entityId: `agent:${agent.id}`,\n agent,\n ancestorLast,\n ancestorEntityIds,\n isLast,\n });\n const pendingChildren = (children.get(agent.id) ?? []).filter(\n (child) => !visited.has(child.id),\n );\n for (let index = 0; index < pendingChildren.length; index++) {\n const child = pendingChildren[index];\n if (!child) continue;\n visit(\n child,\n [...ancestorLast, isLast],\n [...ancestorEntityIds, `agent:${agent.id}`],\n index === pendingChildren.length - 1,\n );\n }\n };\n\n for (let index = 0; index < roots.length; index++) {\n const root = roots[index];\n if (root) visit(root, [], [], index === roots.length - 1);\n }\n\n for (const agent of ordered) {\n if (!visited.has(agent.id)) visit(agent, [], [], true);\n }\n return rows;\n};\n\nexport const buildRunTopologyRows = (\n run: FabricActivityRun,\n agents: FabricUiAgent[],\n options: { includeEmptyPhases?: boolean } = {},\n): FabricRunTopologyRow[] => {\n const rows: FabricRunTopologyRow[] = [];\n for (const group of flowGroups(run, agents, options.includeEmptyPhases ?? true)) {\n rows.push({\n kind: \"phase\",\n id: group.id,\n name: group.name,\n status: group.status,\n agentCount: group.agents.length,\n });\n rows.push(...flattenGroup(group));\n }\n return rows;\n};\n\nconst omission = (\n direction: FabricRunTopologyOmissionRow[\"direction\"],\n rows: FabricRunTopologyRow[],\n context?: string[],\n): FabricRunTopologyOmissionRow => {\n const agents = rows.filter(\n (row): row is FabricRunTopologyAgentRow => row.kind === \"agent\",\n );\n return {\n kind: \"omission\",\n direction,\n rows: rows.length,\n agents: agents.length,\n phases: rows.length - agents.length,\n active: agents.filter(\n ({ agent }) => isActiveStatus(agent.status) && agent.status !== \"blocked\",\n ).length,\n blocked: agents.filter(({ agent }) => agent.status === \"blocked\").length,\n failed: agents.filter(({ agent }) => failureStatuses.has(agent.status)).length,\n ...(context && context.length > 0 ? { context } : {}),\n };\n};\n\nconst structuralContext = (\n rows: FabricRunTopologyRow[],\n selectedIndex: number,\n visibleStart: number,\n visibleEnd: number,\n): string[] | undefined => {\n const selected = rows[selectedIndex];\n if (selected?.kind !== \"agent\") return undefined;\n const visibleEntityIds = new Set(\n rows\n .slice(visibleStart, visibleEnd)\n .flatMap((row) => (row.kind === \"agent\" ? [row.entityId] : [])),\n );\n const agentNames = new Map(\n rows.flatMap((row) =>\n row.kind === \"agent\" ? [[row.entityId, row.agent.name] as const] : [],\n ),\n );\n const ancestors = selected.ancestorEntityIds\n .filter((id) => !visibleEntityIds.has(id))\n .flatMap((id) => {\n const name = agentNames.get(id);\n return name ? [name] : [];\n });\n let phase: FabricRunTopologyPhaseRow | undefined;\n let phaseIndex = -1;\n for (let index = selectedIndex; index >= 0; index--) {\n const row = rows[index];\n if (row?.kind !== \"phase\") continue;\n phase = row;\n phaseIndex = index;\n break;\n }\n const context = [\n phase && (phaseIndex < visibleStart || phaseIndex >= visibleEnd) ? phase.name : undefined,\n ...ancestors.slice(-3),\n ].filter((value): value is string => Boolean(value));\n return context.length > 0 ? context : undefined;\n};\n\nexport const windowRunTopologyRows = (\n rows: FabricRunTopologyRow[],\n selectedEntityId: string | undefined,\n maxRows: number,\n): FabricRunTopologyDisplayRow[] => {\n const limit = Math.max(0, Math.floor(maxRows));\n if (limit === 0 || rows.length === 0) return [];\n if (rows.length <= limit) return rows;\n\n const selectedIndex = Math.max(\n 0,\n rows.findIndex(\n (row) => row.kind === \"agent\" && row.entityId === selectedEntityId,\n ),\n );\n const selectedRow = rows[selectedIndex] ?? rows[0]!;\n if (limit === 1) return [selectedRow];\n if (limit === 2 && selectedIndex > 0 && selectedIndex < rows.length - 1) {\n const omitted = [...rows.slice(0, selectedIndex), ...rows.slice(selectedIndex + 1)];\n return [\n omission(\n \"both\",\n omitted,\n structuralContext(rows, selectedIndex, selectedIndex, selectedIndex + 1),\n ),\n selectedRow,\n ];\n }\n\n let contentSlots = Math.max(1, limit - 2);\n let start = Math.max(\n 0,\n Math.min(selectedIndex - Math.floor(contentSlots / 2), rows.length - contentSlots),\n );\n let end = Math.min(rows.length, start + contentSlots);\n\n for (let iteration = 0; iteration < 4; iteration++) {\n const summaryRows = Number(start > 0) + Number(end < rows.length);\n contentSlots = Math.max(1, limit - summaryRows);\n const nextStart = Math.max(\n 0,\n Math.min(selectedIndex - Math.floor(contentSlots / 2), rows.length - contentSlots),\n );\n const nextEnd = Math.min(rows.length, nextStart + contentSlots);\n if (nextStart === start && nextEnd === end) break;\n start = nextStart;\n end = nextEnd;\n }\n\n const visible: FabricRunTopologyDisplayRow[] = [];\n if (start > 0) {\n visible.push(\n omission(\n \"before\",\n rows.slice(0, start),\n structuralContext(rows, selectedIndex, start, end),\n ),\n );\n }\n visible.push(...rows.slice(start, end));\n if (end < rows.length) visible.push(omission(\"after\", rows.slice(end)));\n return visible;\n};\n\nexport interface FabricProjectMeshTopic {\n id: string;\n name: string;\n status: string;\n system: boolean;\n subscribers: Array<{ id: string; name: string; status: string }>;\n recentEvents: number;\n lastEventAt?: number;\n}\n\nexport interface FabricProjectMeshParticipant {\n id: string;\n entityId: string;\n name: string;\n status: string;\n routes: number;\n lastSeenAt: number;\n agent?: FabricUiAgent;\n participant?: FabricParticipantInfo;\n}\n\nexport interface FabricProjectMeshRoute {\n id: string;\n fromId: string;\n fromName: string;\n fromKind: string;\n targetId: string;\n targetName: string;\n targetKind: \"main\" | \"actor\" | \"agent\" | \"topic\";\n topic: string;\n kind: string;\n status: string;\n count: number;\n lastAt: number;\n text?: string;\n}\n\ninterface FabricProjectMeshRootRow {\n kind: \"meshRoot\";\n entityId: string;\n main: FabricUiMain;\n actors: number;\n agents: number;\n topics: number;\n state: number;\n routes: number;\n}\n\ninterface FabricProjectMeshSectionRow {\n kind: \"meshSection\";\n label: string;\n count: number;\n}\n\ninterface FabricProjectMeshActorRow {\n kind: \"meshActor\";\n entityId: string;\n actor: FabricUiActor;\n}\n\ninterface FabricProjectMeshAgentRow {\n kind: \"meshAgent\";\n entityId: string;\n participant: FabricProjectMeshParticipant;\n ancestorLast: boolean[];\n isLast: boolean;\n}\n\ninterface FabricProjectMeshTopicRow {\n kind: \"meshTopic\";\n entityId: string;\n topic: FabricProjectMeshTopic;\n}\n\ninterface FabricProjectMeshLinkRow {\n kind: \"meshLink\";\n relation: \"subscribes\";\n sourceId: string;\n sourceName: string;\n targetId: string;\n targetName: string;\n status: string;\n isLast: boolean;\n}\n\ninterface FabricProjectMeshStateRow {\n kind: \"meshState\";\n entityId: string;\n state: FabricUiStateEntry;\n}\n\ninterface FabricProjectMeshRouteRow {\n kind: \"meshRoute\";\n entityId: string;\n route: FabricProjectMeshRoute;\n}\n\ninterface FabricProjectMeshOmissionRow {\n kind: \"meshOmission\";\n direction: \"before\" | \"after\" | \"both\";\n rows: number;\n nodes: number;\n main: number;\n actors: number;\n agents: number;\n topics: number;\n state: number;\n routes: number;\n active: number;\n blocked: number;\n failed: number;\n}\n\nexport type FabricProjectMeshRow =\n | FabricProjectMeshRootRow\n | FabricProjectMeshSectionRow\n | FabricProjectMeshActorRow\n | FabricProjectMeshAgentRow\n | FabricProjectMeshTopicRow\n | FabricProjectMeshLinkRow\n | FabricProjectMeshStateRow\n | FabricProjectMeshRouteRow;\n\nexport type FabricProjectMeshDisplayRow = FabricProjectMeshRow | FabricProjectMeshOmissionRow;\n\nexport interface FabricProjectMeshModel {\n participants: FabricProjectMeshParticipant[];\n topics: FabricProjectMeshTopic[];\n routes: FabricProjectMeshRoute[];\n rows: FabricProjectMeshRow[];\n entityOrder: string[];\n}\n\nconst SYSTEM_TOPICS = new Set([\n \"fabric.actor.input\",\n \"fabric.actor.output\",\n \"fabric.actor.lifecycle\",\n \"fabric.compact\",\n \"fabric.participant.lifecycle\",\n \"fabric.steer\",\n \"fabric.control.command\",\n \"fabric.control.ack\",\n]);\n\nconst IGNORED_ROUTE_TOPICS = new Set([\n \"fabric.actor.lifecycle\",\n \"fabric.compact\",\n \"fabric.control.ack\",\n]);\n\nconst eventData = (event: MeshEvent): Record<string, unknown> | undefined =>\n typeof event.data === \"object\" && event.data !== null && !Array.isArray(event.data)\n ? (event.data as Record<string, unknown>)\n : undefined;\n\nconst failureEventKinds = new Set([\n \"error\",\n \"failed\",\n \"failure\",\n \"blocked\",\n \"reject\",\n \"rejected\",\n]);\n\nconst routeStatus = (kind: string): string =>\n kind\n .toLowerCase()\n .split(/[.:/_-]+/)\n .some((part) => failureEventKinds.has(part))\n ? \"failed\"\n : \"completed\";\n\nconst projectMeshRoutes = (\n main: FabricUiMain,\n actors: FabricUiActor[],\n agents: FabricUiAgent[],\n events: MeshEvent[],\n): FabricProjectMeshRoute[] => {\n const actorByKey = new Map<string, FabricUiActor>();\n for (const actor of actors) {\n actorByKey.set(actor.id, actor);\n actorByKey.set(actor.name, actor);\n }\n const agentByKey = new Map<string, FabricUiAgent>();\n for (const agent of agents) {\n agentByKey.set(agent.id, agent);\n agentByKey.set(agent.name, agent);\n }\n const mainByKey = new Map<string, string>([\n [main.id, main.name],\n [main.name, main.name],\n [\"main\", main.name],\n ]);\n for (const event of events) {\n if (event.from.kind !== \"main\") continue;\n mainByKey.set(event.from.id, event.from.name);\n mainByKey.set(event.from.name, event.from.name);\n }\n const routes = new Map<string, FabricProjectMeshRoute>();\n for (const event of events) {\n if (IGNORED_ROUTE_TOPICS.has(event.topic)) continue;\n const data = eventData(event);\n let targetId: string;\n let targetName: string;\n let targetKind: FabricProjectMeshRoute[\"targetKind\"];\n const actorInputId =\n event.topic === \"fabric.actor.input\" && typeof data?.actorId === \"string\"\n ? data.actorId\n : undefined;\n const controlTarget =\n event.topic === \"fabric.control.command\" && typeof data?.targetId === \"string\"\n ? data.targetId\n : undefined;\n const addressed = controlTarget ?? event.to ?? actorInputId;\n const targetMain = addressed ? mainByKey.get(addressed) : undefined;\n const targetActor = addressed ? actorByKey.get(addressed) : undefined;\n const targetAgent = addressed ? agentByKey.get(addressed) : undefined;\n if (targetMain) {\n targetId = addressed!;\n targetName = targetMain;\n targetKind = \"main\";\n } else if (targetActor) {\n targetId = targetActor.id;\n targetName = targetActor.name;\n targetKind = \"actor\";\n } else if (targetAgent) {\n targetId = targetAgent.id;\n targetName = targetAgent.name;\n targetKind = \"agent\";\n } else if (addressed) {\n targetId = addressed;\n targetName = addressed;\n targetKind = \"agent\";\n } else if (event.topic === \"fabric.actor.output\") {\n targetId = main.id;\n targetName = main.name;\n targetKind = \"main\";\n } else {\n targetId = event.topic;\n targetName = event.topic;\n targetKind = \"topic\";\n }\n const key = JSON.stringify([\n event.from.id,\n event.from.kind,\n targetKind,\n targetId,\n event.topic,\n event.kind,\n ]);\n const existing = routes.get(key);\n if (existing) {\n existing.count++;\n if (event.createdAt >= existing.lastAt) {\n existing.lastAt = event.createdAt;\n if (event.text) existing.text = event.text;\n else delete existing.text;\n }\n if (routeStatus(event.kind) === \"failed\") existing.status = \"failed\";\n continue;\n }\n routes.set(key, {\n id: `route:${createHash(\"sha256\").update(key).digest(\"hex\").slice(0, 20)}`,\n fromId: event.from.id,\n fromName: event.from.name,\n fromKind: event.from.kind,\n targetId,\n targetName,\n targetKind,\n topic: event.topic,\n kind: event.kind,\n status: routeStatus(event.kind),\n count: 1,\n lastAt: event.createdAt,\n ...(event.text ? { text: event.text } : {}),\n });\n }\n return [...routes.values()].sort((left, right) => right.lastAt - left.lastAt);\n};\n\nconst projectMeshParticipants = (\n agents: FabricUiAgent[],\n routes: FabricProjectMeshRoute[],\n directoryParticipants: FabricParticipantInfo[],\n): FabricProjectMeshParticipant[] => {\n const agentByKey = new Map<string, FabricUiAgent>();\n for (const agent of agents) {\n agentByKey.set(agent.id, agent);\n agentByKey.set(agent.name, agent);\n }\n const observed = new Map<\n string,\n { id: string; name: string; lastSeenAt: number; participant?: FabricParticipantInfo }\n >();\n const touch = (\n id: string,\n name: string,\n lastSeenAt: number,\n participant?: FabricParticipantInfo,\n ): void => {\n const existing = observed.get(id);\n if (!existing) {\n observed.set(id, {\n id,\n name,\n lastSeenAt,\n ...(participant ? { participant } : {}),\n });\n return;\n }\n if (lastSeenAt >= existing.lastSeenAt) {\n existing.name = name;\n existing.lastSeenAt = lastSeenAt;\n }\n if (participant) existing.participant = participant;\n };\n for (const participant of directoryParticipants) {\n const name =\n participant.kind === \"root\" && participant.sessionId\n ? `Peer ${participant.sessionId.slice(0, 8)}`\n : participant.name;\n touch(participant.id, name, participant.updatedAt, participant);\n }\n for (const route of routes) {\n if (route.fromKind === \"agent\") touch(route.fromId, route.fromName, route.lastAt);\n if (route.targetKind === \"agent\") touch(route.targetId, route.targetName, route.lastAt);\n }\n return [...observed.values()]\n .map((identity) => {\n const agent = agentByKey.get(identity.id) ?? agentByKey.get(identity.name);\n const routesForParticipant = routes.reduce(\n (count, route) =>\n count +\n ((route.fromKind === \"agent\" && route.fromId === identity.id) ||\n (route.targetKind === \"agent\" && route.targetId === identity.id)\n ? route.count\n : 0),\n 0,\n );\n return {\n id: identity.id,\n entityId: agent ? `agent:${agent.id}` : `participant:${identity.id}`,\n name: agent?.name ?? identity.name,\n status: agent?.status ?? \"idle\",\n routes: routesForParticipant,\n lastSeenAt: identity.lastSeenAt,\n ...(agent ? { agent } : {}),\n ...(identity.participant ? { participant: identity.participant } : {}),\n };\n })\n .sort(\n (left, right) =>\n Number(isActiveStatus(right.status)) - Number(isActiveStatus(left.status)) ||\n left.name.localeCompare(right.name),\n );\n};\n\nconst projectParticipantTree = (\n participants: FabricProjectMeshParticipant[],\n): Array<{ participant: FabricProjectMeshParticipant; ancestorLast: boolean[]; isLast: boolean }> => {\n const byId = new Map(participants.map((participant) => [participant.id, participant] as const));\n const children = new Map<string, FabricProjectMeshParticipant[]>();\n const roots: FabricProjectMeshParticipant[] = [];\n for (const participant of participants) {\n const parentId = participant.participant?.parentId ?? participant.agent?.parentId;\n if (!parentId || !byId.has(parentId) || parentId === participant.id) {\n roots.push(participant);\n continue;\n }\n const entries = children.get(parentId) ?? [];\n entries.push(participant);\n children.set(parentId, entries);\n }\n const rows: Array<{\n participant: FabricProjectMeshParticipant;\n ancestorLast: boolean[];\n isLast: boolean;\n }> = [];\n const visited = new Set<string>();\n const visit = (\n participant: FabricProjectMeshParticipant,\n ancestorLast: boolean[],\n isLast: boolean,\n ): void => {\n if (visited.has(participant.id)) return;\n visited.add(participant.id);\n rows.push({ participant, ancestorLast, isLast });\n const descendants = (children.get(participant.id) ?? []).filter(\n (candidate) => !visited.has(candidate.id),\n );\n for (let index = 0; index < descendants.length; index++) {\n const descendant = descendants[index];\n if (descendant) {\n visit(descendant, [...ancestorLast, isLast], index === descendants.length - 1);\n }\n }\n };\n for (let index = 0; index < roots.length; index++) {\n const root = roots[index];\n if (root) visit(root, [], index === roots.length - 1);\n }\n for (const participant of participants) {\n if (!visited.has(participant.id)) visit(participant, [], true);\n }\n return rows;\n};\n\nconst projectMeshTopics = (\n actors: FabricUiActor[],\n events: MeshEvent[],\n now: number,\n): FabricProjectMeshTopic[] => {\n const names = new Set<string>();\n for (const actor of actors) {\n for (const topic of actor.topics) names.add(topic);\n }\n for (const event of events) {\n if (!SYSTEM_TOPICS.has(event.topic)) names.add(event.topic);\n }\n return [...names]\n .sort((left, right) => left.localeCompare(right))\n .map((name) => {\n const topicEvents = events.filter((event) => event.topic === name);\n const lastEventAt = topicEvents.reduce(\n (latest, event) => Math.max(latest, event.createdAt),\n 0,\n );\n const subscribers = actors\n .filter((actor) => actor.topics.includes(name))\n .map((actor) => ({ id: actor.id, name: actor.name, status: actor.status }));\n return {\n id: `topic:${name}`,\n name,\n status: lastEventAt > 0 && now - lastEventAt <= 10_000 ? \"running\" : \"idle\",\n system: SYSTEM_TOPICS.has(name),\n subscribers,\n recentEvents: topicEvents.length,\n ...(lastEventAt > 0 ? { lastEventAt } : {}),\n };\n });\n};\n\nexport const buildProjectMeshTopology = (input: {\n main: FabricUiMain;\n actors: FabricUiActor[];\n agents: FabricUiAgent[];\n state: FabricUiStateEntry[];\n events: MeshEvent[];\n participants?: FabricParticipantInfo[];\n now: number;\n}): FabricProjectMeshModel => {\n const topics = projectMeshTopics(input.actors, input.events, input.now);\n const routes = projectMeshRoutes(input.main, input.actors, input.agents, input.events);\n const localActorIds = new Set(input.actors.map((actor) => actor.id));\n const directoryParticipants = (input.participants ?? []).filter(\n (participant) =>\n participant.id !== input.main.id &&\n !(participant.kind === \"actor\" && localActorIds.has(participant.id)),\n );\n const participants = projectMeshParticipants(input.agents, routes, directoryParticipants);\n const rows: FabricProjectMeshRow[] = [\n {\n kind: \"meshRoot\",\n entityId: `main:${input.main.id}`,\n main: input.main,\n actors: input.actors.length,\n agents: participants.length,\n topics: topics.length,\n state: input.state.length,\n routes: routes.length,\n },\n ];\n if (input.actors.length > 0) {\n rows.push({ kind: \"meshSection\", label: \"Persistent actors\", count: input.actors.length });\n for (const actor of input.actors) {\n rows.push({ kind: \"meshActor\", entityId: `actor:${actor.id}`, actor });\n }\n }\n if (participants.length > 0) {\n rows.push({\n kind: \"meshSection\",\n label: \"Project participants\",\n count: participants.length,\n });\n for (const entry of projectParticipantTree(participants)) {\n rows.push({\n kind: \"meshAgent\",\n entityId: entry.participant.entityId,\n participant: entry.participant,\n ancestorLast: entry.ancestorLast,\n isLast: entry.isLast,\n });\n }\n }\n if (topics.length > 0) {\n rows.push({ kind: \"meshSection\", label: \"Topics\", count: topics.length });\n for (const topic of topics) {\n rows.push({ kind: \"meshTopic\", entityId: topic.id, topic });\n for (let index = 0; index < topic.subscribers.length; index++) {\n const subscriber = topic.subscribers[index];\n if (!subscriber) continue;\n rows.push({\n kind: \"meshLink\",\n relation: \"subscribes\",\n sourceId: subscriber.id,\n sourceName: subscriber.name,\n targetId: topic.id,\n targetName: topic.name,\n status: subscriber.status,\n isLast: index === topic.subscribers.length - 1,\n });\n }\n }\n }\n if (input.state.length > 0) {\n rows.push({ kind: \"meshSection\", label: \"Shared state\", count: input.state.length });\n for (const state of input.state) {\n rows.push({ kind: \"meshState\", entityId: `state:${state.key}`, state });\n }\n }\n if (routes.length > 0) {\n rows.push({ kind: \"meshSection\", label: \"Recent routes\", count: routes.length });\n for (const route of routes) {\n rows.push({ kind: \"meshRoute\", entityId: route.id, route });\n }\n }\n const entityOrder = rows.flatMap((row) =>\n \"entityId\" in row ? [row.entityId] : [],\n );\n return { participants, topics, routes, rows, entityOrder };\n};\n\nconst projectMeshOmission = (\n direction: FabricProjectMeshOmissionRow[\"direction\"],\n rows: FabricProjectMeshRow[],\n): FabricProjectMeshOmissionRow => {\n const rootRows = rows.filter((row) => row.kind === \"meshRoot\");\n const actorRows = rows.filter((row) => row.kind === \"meshActor\");\n const agentRows = rows.filter((row) => row.kind === \"meshAgent\");\n const topicRows = rows.filter((row) => row.kind === \"meshTopic\");\n const stateRows = rows.filter((row) => row.kind === \"meshState\");\n const routeRows = rows.filter((row) => row.kind === \"meshRoute\");\n const statuses = [\n ...rootRows.map((row) => row.main.status),\n ...actorRows.map((row) => (row.actor.lastError ? \"failed\" : row.actor.status)),\n ...agentRows.map((row) => row.participant.status),\n ...topicRows.map((row) => row.topic.status),\n ...stateRows.map((row) => row.state.status),\n ...routeRows.map((row) => row.route.status),\n ];\n return {\n kind: \"meshOmission\",\n direction,\n rows: rows.length,\n nodes:\n rootRows.length +\n actorRows.length +\n agentRows.length +\n topicRows.length +\n stateRows.length +\n routeRows.length,\n main: rootRows.length,\n actors: actorRows.length,\n agents: agentRows.length,\n topics: topicRows.length,\n state: stateRows.length,\n routes: routeRows.length,\n active: statuses.filter((status) => isActiveStatus(status) && status !== \"blocked\").length,\n blocked: statuses.filter((status) => status === \"blocked\").length,\n failed: statuses.filter((status) => failureStatuses.has(status)).length,\n };\n};\n\nconst projectMeshEntityId = (row: FabricProjectMeshRow): string | undefined =>\n \"entityId\" in row ? row.entityId : undefined;\n\nexport const windowProjectMeshTopology = (\n rows: FabricProjectMeshRow[],\n selectedEntityId: string | undefined,\n maxRows: number,\n): FabricProjectMeshDisplayRow[] => {\n const limit = Math.max(0, Math.floor(maxRows));\n if (limit === 0 || rows.length === 0) return [];\n if (rows.length <= limit) return rows;\n const selectable = rows\n .map((row, index) => ({ row, index }))\n .filter((entry) => \"entityId\" in entry.row);\n const selectedIndex =\n selectable.find((entry) => projectMeshEntityId(entry.row) === selectedEntityId)?.index ??\n selectable[0]?.index ??\n 0;\n const selectedRow = rows[selectedIndex] ?? rows[0]!;\n if (limit === 1) return [selectedRow];\n if (limit === 2 && selectedIndex > 0 && selectedIndex < rows.length - 1) {\n return [\n projectMeshOmission(\n \"both\",\n [...rows.slice(0, selectedIndex), ...rows.slice(selectedIndex + 1)],\n ),\n selectedRow,\n ];\n }\n let contentSlots = Math.max(1, limit - 2);\n let start = Math.max(\n 0,\n Math.min(selectedIndex - Math.floor(contentSlots / 2), rows.length - contentSlots),\n );\n let end = Math.min(rows.length, start + contentSlots);\n for (let iteration = 0; iteration < 4; iteration++) {\n const summaryRows = Number(start > 0) + Number(end < rows.length);\n contentSlots = Math.max(1, limit - summaryRows);\n const nextStart = Math.max(\n 0,\n Math.min(selectedIndex - Math.floor(contentSlots / 2), rows.length - contentSlots),\n );\n const nextEnd = Math.min(rows.length, nextStart + contentSlots);\n if (nextStart === start && nextEnd === end) break;\n start = nextStart;\n end = nextEnd;\n }\n const visible: FabricProjectMeshDisplayRow[] = [];\n if (start > 0) visible.push(projectMeshOmission(\"before\", rows.slice(0, start)));\n visible.push(...rows.slice(start, end));\n if (end < rows.length) visible.push(projectMeshOmission(\"after\", rows.slice(end)));\n return visible;\n};\n", "import type {\n FabricActivityCall,\n FabricActivityItem,\n FabricActivityKind,\n FabricActivityPhase,\n FabricActivityRun,\n} from \"../activity/types.js\";\nimport type { GlobalActorDefinition } from \"../actors/types.js\";\nimport type { FabricComponentInfo } from \"../components/types.js\";\nimport type {\n FabricDashboardSnapshot,\n FabricUiActor,\n FabricUiAgent,\n FabricUiMain,\n FabricUiPeer,\n FabricUiStateEntry,\n} from \"./types.js\";\nimport { isActiveStatus, orderAgentsByCreation } from \"./types.js\";\nimport {\n buildProjectMeshTopology,\n type FabricProjectMeshModel,\n type FabricProjectMeshParticipant,\n type FabricProjectMeshRoute,\n type FabricProjectMeshTopic,\n} from \"./topology.js\";\n\nexport type Entity =\n | { id: string; kind: \"main\"; label: string; status: string; value: FabricUiMain }\n | { id: string; kind: \"peer\"; label: string; status: string; value: FabricUiPeer }\n | { id: string; kind: \"agent\"; label: string; status: string; value: FabricUiAgent }\n | { id: string; kind: \"actor\"; label: string; status: string; value: FabricUiActor }\n | {\n id: string;\n kind: \"globalActor\";\n label: string;\n status: string;\n value: GlobalActorDefinition;\n }\n | { id: string; kind: \"call\"; label: string; status: string; value: FabricActivityCall }\n | { id: string; kind: \"item\"; label: string; status: string; value: FabricActivityItem }\n | { id: string; kind: \"state\"; label: string; status: string; value: FabricUiStateEntry }\n | { id: string; kind: \"component\"; label: string; status: string; value: FabricComponentInfo }\n | {\n id: string;\n kind: \"meshParticipant\";\n label: string;\n status: string;\n value: FabricProjectMeshParticipant;\n }\n | {\n id: string;\n kind: \"meshTopic\";\n label: string;\n status: string;\n value: FabricProjectMeshTopic;\n }\n | {\n id: string;\n kind: \"meshRoute\";\n label: string;\n status: string;\n value: FabricProjectMeshRoute;\n };\n\ntype PanelKind = \"phase\" | \"unphased\" | \"session\";\n\nexport interface PhasePanel {\n id: string;\n name: string;\n status: string;\n completed: number;\n total: number;\n phase?: FabricActivityPhase;\n kind: PanelKind;\n agents?: number;\n tokens?: number;\n elapsedMs?: number;\n}\n\nexport type Pane = \"phases\" | \"entities\";\nexport type OverviewView = \"activity\" | \"topology\";\n\ntype EntityGroupKind =\n | FabricActivityKind\n | \"globalActor\"\n | \"peer\"\n | \"state\"\n | \"component\"\n | \"meshParticipant\"\n | \"meshTopic\"\n | \"meshRoute\";\n\nexport interface EntityGroup {\n kind: EntityGroupKind;\n label: string;\n entries: Array<{ entity: Entity; index: number }>;\n}\n\nconst entityGroupOrder: readonly EntityGroupKind[] = [\n \"agent\",\n \"peer\",\n \"actor\",\n \"globalActor\",\n \"tool\",\n \"extension\",\n \"mcp\",\n \"mesh\",\n \"task\",\n \"custom\",\n \"state\",\n \"component\",\n \"meshParticipant\",\n \"meshTopic\",\n \"meshRoute\",\n];\n\nconst entityGroupLabels: Record<EntityGroupKind, string> = {\n agent: \"Agents\",\n peer: \"Peers\",\n actor: \"Actors\",\n globalActor: \"Global templates\",\n tool: \"Tools\",\n extension: \"Extensions\",\n mcp: \"MCP\",\n mesh: \"Mesh\",\n task: \"Tasks\",\n custom: \"Custom items\",\n state: \"Shared state\",\n component: \"Components\",\n meshParticipant: \"Project participants\",\n meshTopic: \"Topics\",\n meshRoute: \"Recent routes\",\n};\n\nconst entityGroupKind = (entity: Entity): EntityGroupKind => {\n if (entity.kind === \"main\" || entity.kind === \"agent\") return \"agent\";\n if (entity.kind === \"peer\") return \"peer\";\n if (entity.kind === \"actor\") return \"actor\";\n if (entity.kind === \"globalActor\") return \"globalActor\";\n if (entity.kind === \"state\") return \"state\";\n if (entity.kind === \"component\") return \"component\";\n if (entity.kind === \"meshParticipant\") return \"meshParticipant\";\n if (entity.kind === \"meshTopic\") return \"meshTopic\";\n if (entity.kind === \"meshRoute\") return \"meshRoute\";\n if (entity.kind === \"call\") return entity.value.entityKind ?? entity.value.kind;\n return entity.value.kind;\n};\n\nconst entityGroupRanks = new Map(\n entityGroupOrder.map((kind, index) => [kind, index] as const),\n);\n\nconst orderEntitiesByGroup = (entities: Entity[]): Entity[] =>\n entities\n .map((entity, index) => ({ entity, index }))\n .sort(\n (left, right) =>\n (entityGroupRanks.get(entityGroupKind(left.entity)) ?? Number.MAX_SAFE_INTEGER) -\n (entityGroupRanks.get(entityGroupKind(right.entity)) ?? Number.MAX_SAFE_INTEGER) ||\n left.index - right.index,\n )\n .map(({ entity }) => entity);\n\nexport const groupEntities = (entities: Entity[]): EntityGroup[] => {\n const indexed = entities.map((entity, index) => ({ entity, index }));\n return entityGroupOrder.flatMap((kind) => {\n const entries = indexed.filter(({ entity }) => entityGroupKind(entity) === kind);\n return entries.length > 0 ? [{ kind, label: entityGroupLabels[kind], entries }] : [];\n });\n};\n\nexport type StatusFilter = \"all\" | \"active\" | \"completed\" | \"failed\";\n\nexport const filters: StatusFilter[] = [\"all\", \"active\", \"completed\", \"failed\"];\n\nconst linkedEntityId = (entityId: string | undefined, id: string): boolean =>\n Boolean(entityId && (id.startsWith(entityId) || entityId.startsWith(id)));\n\nconst linkedAgent = (call: FabricActivityCall, agent: FabricUiAgent): boolean =>\n linkedEntityId(call.entityId, agent.id);\n\nconst agentLaunchRefs = new Set([\"agents.run\", \"agents.spawn\"]);\n\nconst mainEntity = (snapshot: FabricDashboardSnapshot): Entity => ({\n id: `main:${snapshot.main.id}`,\n kind: \"main\",\n label: \"Main\",\n status: snapshot.main.status,\n value: snapshot.main,\n});\n\nconst UNPHASED_PANEL_ID = \"__fabric_unphased\";\nconst SESSION_PANEL_ID = \"__fabric_session\";\n\nconst callsForPanel = (\n run: FabricActivityRun | undefined,\n panel: PhasePanel,\n): FabricActivityCall[] => {\n if (!run || panel.kind === \"session\") return [];\n return run.calls.filter((call) =>\n panel.kind === \"unphased\" ? !call.phaseId : call.phaseId === panel.id,\n );\n};\n\nconst itemsForPanel = (\n run: FabricActivityRun | undefined,\n panel: PhasePanel,\n): FabricActivityItem[] => {\n if (!run || panel.kind === \"session\") return [];\n return run.items.filter((item) =>\n panel.kind === \"unphased\" ? !item.phaseId : item.phaseId === panel.id,\n );\n};\n\nconst entitiesFor = (\n snapshot: FabricDashboardSnapshot,\n run: FabricActivityRun | undefined,\n panel: PhasePanel | undefined,\n): Entity[] => {\n if (!panel || panel.kind === \"session\") {\n const unlinkedAgents: Entity[] = orderAgentsByCreation(snapshot.agents)\n .filter((agent) => agent.runId !== run?.id && isActiveStatus(agent.status))\n .map((agent) => ({\n id: `agent:${agent.id}`,\n kind: \"agent\",\n label: agent.name,\n status: agent.status,\n value: agent,\n }));\n const peers: Entity[] = snapshot.peers.map((peer) => ({\n id: `peer:${peer.id}`,\n kind: \"peer\",\n label: peer.name,\n status: peer.status,\n value: peer,\n }));\n const actors: Entity[] = snapshot.actors.map((actor) => ({\n id: `actor:${actor.id}`,\n kind: \"actor\",\n label: actor.name,\n status: actor.lastError ? \"failed\" : actor.status,\n value: actor,\n }));\n const globalActors: Entity[] = snapshot.globalActors.map((definition) => ({\n id: `globalActor:${definition.id}`,\n kind: \"globalActor\",\n label: definition.name,\n status: \"global\",\n value: definition,\n }));\n const components: Entity[] = snapshot.componentGraph.components.map((component) => ({\n id: `component:${component.id}`,\n kind: \"component\",\n label: component.id,\n status: component.state,\n value: component,\n }));\n const state: Entity[] = snapshot.state.map((entry) => ({\n id: `state:${entry.key}`,\n kind: \"state\",\n label: entry.label,\n status: entry.status,\n value: entry,\n }));\n return orderEntitiesByGroup([\n mainEntity(snapshot),\n ...unlinkedAgents,\n ...peers,\n ...actors,\n ...globalActors,\n ...components,\n ...state,\n ]);\n }\n\n const calls = callsForPanel(run, panel);\n const panelAgents = orderAgentsByCreation(snapshot.agents).filter((agent) => {\n const ownedByPanel =\n agent.runId === run?.id &&\n (panel.kind === \"unphased\" ? !agent.phaseId : agent.phaseId === panel.id);\n return ownedByPanel || (!agent.runId && calls.some((call) => linkedAgent(call, agent)));\n });\n const linkedAgents: Entity[] = panelAgents.map((agent) => ({\n id: `agent:${agent.id}`,\n kind: \"agent\",\n label: agent.name,\n status: agent.status,\n value: agent,\n }));\n const visibleCalls: Entity[] = calls\n .filter((call) => {\n const representedAgentLaunch =\n call.kind === \"agent\" &&\n agentLaunchRefs.has(call.ref) &&\n panelAgents.some((agent) => linkedAgent(call, agent));\n const representedActorCreation =\n call.kind === \"actor\" &&\n call.ref === \"agents.create\" &&\n snapshot.actors.some((actor) => linkedEntityId(call.entityId, actor.id));\n return !representedAgentLaunch && !representedActorCreation;\n })\n .map((call) => ({\n id: `call:${call.id}`,\n kind: \"call\",\n label: call.label,\n status: call.status,\n value: call,\n }));\n const items: Entity[] = itemsForPanel(run, panel).map((item) => ({\n id: `item:${item.id}`,\n kind: \"item\",\n label: item.label,\n status: item.status,\n value: item,\n }));\n return orderEntitiesByGroup([\n mainEntity(snapshot),\n ...linkedAgents,\n ...visibleCalls,\n ...items,\n ]);\n};\n\nconst projectMeshEntitiesFor = (\n snapshot: FabricDashboardSnapshot,\n topology?: FabricProjectMeshModel,\n): Entity[] => {\n const model = topology ?? buildProjectMeshTopology({\n main: snapshot.main,\n actors: snapshot.actors,\n agents: snapshot.agents,\n state: snapshot.state,\n events: snapshot.events,\n ...(snapshot.participants ? { participants: snapshot.participants } : {}),\n now: snapshot.now,\n });\n const entities = model.rows.flatMap((row): Entity[] => {\n if (row.kind === \"meshRoot\") return [mainEntity(snapshot)];\n if (row.kind === \"meshActor\") {\n return [{\n id: row.entityId,\n kind: \"actor\",\n label: row.actor.name,\n status: row.actor.lastError ? \"failed\" : row.actor.status,\n value: row.actor,\n }];\n }\n if (row.kind === \"meshAgent\") {\n if (row.participant.agent) {\n return [{\n id: row.entityId,\n kind: \"agent\",\n label: row.participant.agent.name,\n status: row.participant.agent.status,\n value: row.participant.agent,\n }];\n }\n return [{\n id: row.entityId,\n kind: \"meshParticipant\",\n label: row.participant.name,\n status: row.participant.status,\n value: row.participant,\n }];\n }\n if (row.kind === \"meshTopic\") {\n return [{\n id: row.entityId,\n kind: \"meshTopic\",\n label: row.topic.name,\n status: row.topic.status,\n value: row.topic,\n }];\n }\n if (row.kind === \"meshState\") {\n return [{\n id: row.entityId,\n kind: \"state\",\n label: row.state.label,\n status: row.state.status,\n value: row.state,\n }];\n }\n if (row.kind === \"meshRoute\") {\n return [{\n id: row.entityId,\n kind: \"meshRoute\",\n label: `${row.route.fromName} \u2192 ${row.route.targetName}`,\n status: row.route.status,\n value: row.route,\n }];\n }\n return [];\n });\n return [\n ...entities,\n ...snapshot.componentGraph.components.map((component): Entity => ({\n id: `component:${component.id}`,\n kind: \"component\",\n label: component.id,\n status: component.state,\n value: component,\n })),\n ];\n};\n\nconst unifiedTopologyEntitiesFor = (\n snapshot: FabricDashboardSnapshot,\n run: FabricActivityRun | undefined,\n topology?: FabricProjectMeshModel,\n): Entity[] => {\n const orderedAgents = orderAgentsByCreation(snapshot.agents).sort(\n (left, right) =>\n Number(right.runId === run?.id) - Number(left.runId === run?.id) ||\n Number(isActiveStatus(right.status)) - Number(isActiveStatus(left.status)),\n );\n const canonical: Entity[] = [\n mainEntity(snapshot),\n ...orderedAgents.map((agent): Entity => ({\n id: `agent:${agent.id}`,\n kind: \"agent\",\n label: agent.name,\n status: agent.status,\n value: agent,\n })),\n ...snapshot.actors.map((actor): Entity => ({\n id: `actor:${actor.id}`,\n kind: \"actor\",\n label: actor.name,\n status: actor.lastError ? \"failed\" : actor.status,\n value: actor,\n })),\n ...snapshot.peers.map((peer): Entity => ({\n id: `peer:${peer.id}`,\n kind: \"peer\",\n label: peer.name,\n status: peer.status,\n value: peer,\n })),\n ];\n const seen = new Set(canonical.map((entity) => entity.id));\n const seenParticipantIds = new Set([\n snapshot.main.id,\n ...snapshot.agents.map((agent) => agent.id),\n ...snapshot.actors.map((actor) => actor.id),\n ...snapshot.peers.map((peer) => peer.id),\n ]);\n for (const entity of projectMeshEntitiesFor(snapshot, topology)) {\n if (seen.has(entity.id)) continue;\n if (entity.kind === \"meshParticipant\" && seenParticipantIds.has(entity.value.id)) continue;\n seen.add(entity.id);\n canonical.push(entity);\n }\n return canonical;\n};\n\nexport const entitiesForOverview = (\n snapshot: FabricDashboardSnapshot,\n run: FabricActivityRun | undefined,\n panel: PhasePanel | undefined,\n view: OverviewView,\n projectMesh?: FabricProjectMeshModel,\n): Entity[] => {\n if (view === \"topology\") return unifiedTopologyEntitiesFor(snapshot, run, projectMesh);\n return entitiesFor(snapshot, run, panel);\n};\nconst panelStatus = (entities: Entity[], fallback: string): string => {\n if (entities.some((entity) => [\"failed\", \"timed_out\", \"error\"].includes(entity.status))) {\n return \"failed\";\n }\n if (entities.some((entity) => entity.status === \"blocked\")) return \"blocked\";\n if (entities.some((entity) => isActiveStatus(entity.status))) return \"running\";\n if (\n entities.length > 0 &&\n entities.every((entity) =>\n [\"completed\", \"done\", \"stopped\", \"cancelled\", \"global\", \"idle\", \"state\"].includes(\n entity.status,\n ),\n )\n ) {\n return \"completed\";\n }\n return fallback;\n};\n\nconst withPanelProgress = (\n snapshot: FabricDashboardSnapshot,\n run: FabricActivityRun | undefined,\n panel: PhasePanel,\n projectedEntities?: Entity[],\n): PhasePanel => {\n const entities = projectedEntities ?? entitiesFor(snapshot, run, panel);\n const progressEntities =\n panel.kind === \"session\" ? entities : entities.filter((entity) => entity.kind !== \"main\");\n const status =\n panel.kind === \"session\"\n ? progressEntities.some((entity) =>\n [\"failed\", \"timed_out\", \"error\"].includes(entity.status),\n )\n ? \"failed\"\n : progressEntities.some((entity) => isActiveStatus(entity.status))\n ? \"running\"\n : \"idle\"\n : panelStatus(progressEntities, panel.status);\n const agents = progressEntities.filter((entity) => entity.kind === \"agent\");\n const tokens = agents.reduce(\n (sum, entity) =>\n sum +\n (entity.kind === \"agent\" && entity.value.usage\n ? entity.value.usage.input + entity.value.usage.output\n : 0),\n 0,\n );\n const starts = progressEntities\n .flatMap((entity) => {\n if (entity.kind === \"agent\" || entity.kind === \"call\") return [entity.value.startedAt ?? 0];\n if (entity.kind === \"item\") return [entity.value.createdAt];\n return [];\n })\n .filter((value) => value > 0);\n const startedAt = starts.length > 0 ? Math.min(...starts) : undefined;\n const hasActive = progressEntities.some((entity) => isActiveStatus(entity.status));\n const finishes = progressEntities\n .flatMap((entity) => {\n if (entity.kind === \"agent\" || entity.kind === \"call\") return [entity.value.finishedAt ?? 0];\n if (entity.kind === \"item\") return [entity.value.finishedAt ?? 0];\n return [];\n })\n .filter((value) => value > 0);\n const finishedAt = hasActive\n ? snapshot.now\n : finishes.length > 0\n ? Math.max(...finishes)\n : undefined;\n return {\n ...panel,\n status,\n completed: progressEntities.filter(\n (entity) => entity.status === \"completed\" || entity.status === \"done\",\n ).length,\n total: Math.max(panel.total, progressEntities.length),\n ...(agents.length > 0 ? { agents: agents.length } : {}),\n ...(tokens > 0 ? { tokens } : {}),\n ...(startedAt && finishedAt ? { elapsedMs: Math.max(0, finishedAt - startedAt) } : {}),\n };\n};\n\nconst activityEntitiesByPanel = (\n snapshot: FabricDashboardSnapshot,\n run: FabricActivityRun,\n): Map<string, Entity[]> => {\n const calls = new Map<string, FabricActivityCall[]>();\n const items = new Map<string, FabricActivityItem[]>();\n const agents = new Map<string, Map<string, FabricUiAgent>>();\n const keyFor = (phaseId: string | undefined): string => phaseId ?? UNPHASED_PANEL_ID;\n for (const call of run.calls) {\n const key = keyFor(call.phaseId);\n const bucket = calls.get(key) ?? [];\n bucket.push(call);\n calls.set(key, bucket);\n }\n for (const item of run.items) {\n const key = keyFor(item.phaseId);\n const bucket = items.get(key) ?? [];\n bucket.push(item);\n items.set(key, bucket);\n }\n const detachedAgents: FabricUiAgent[] = [];\n for (const agent of snapshot.agents) {\n if (agent.runId === run.id) {\n const key = keyFor(agent.phaseId);\n const bucket = agents.get(key) ?? new Map<string, FabricUiAgent>();\n bucket.set(agent.id, agent);\n agents.set(key, bucket);\n } else if (!agent.runId) {\n detachedAgents.push(agent);\n }\n }\n if (detachedAgents.length > 0) {\n for (const [key, panelCalls] of calls) {\n for (const call of panelCalls) {\n for (const agent of detachedAgents) {\n if (!linkedAgent(call, agent)) continue;\n const bucket = agents.get(key) ?? new Map<string, FabricUiAgent>();\n bucket.set(agent.id, agent);\n agents.set(key, bucket);\n }\n }\n }\n }\n const keys = new Set<string>([\n UNPHASED_PANEL_ID,\n ...run.phases.map((phase) => phase.id),\n ]);\n const projected = new Map<string, Entity[]>();\n for (const key of keys) {\n const panelAgents = [...(agents.get(key)?.values() ?? [])];\n const agentEntities: Entity[] = panelAgents.map((agent) => ({\n id: `agent:${agent.id}`,\n kind: \"agent\",\n label: agent.name,\n status: agent.status,\n value: agent,\n }));\n const callEntities: Entity[] = (calls.get(key) ?? [])\n .filter((call) => {\n const representedAgentLaunch =\n call.kind === \"agent\" &&\n agentLaunchRefs.has(call.ref) &&\n panelAgents.some((agent) => linkedAgent(call, agent));\n const representedActorCreation =\n call.kind === \"actor\" &&\n call.ref === \"agents.create\" &&\n snapshot.actors.some((actor) => linkedEntityId(call.entityId, actor.id));\n return !representedAgentLaunch && !representedActorCreation;\n })\n .map((call) => ({\n id: `call:${call.id}`,\n kind: \"call\" as const,\n label: call.label,\n status: call.status,\n value: call,\n }));\n const itemEntities: Entity[] = (items.get(key) ?? []).map((item) => ({\n id: `item:${item.id}`,\n kind: \"item\",\n label: item.label,\n status: item.status,\n value: item,\n }));\n projected.set(key, [...agentEntities, ...callEntities, ...itemEntities]);\n }\n return projected;\n};\n\nexport const phasePanels = (\n snapshot: FabricDashboardSnapshot,\n run: FabricActivityRun | undefined,\n): PhasePanel[] => {\n const panels: PhasePanel[] = [];\n const activityEntities = run\n ? activityEntitiesByPanel(snapshot, run)\n : new Map<string, Entity[]>();\n\n if (run) {\n const runActivity: PhasePanel = {\n id: UNPHASED_PANEL_ID,\n name: \"Run activity\",\n status: run.status,\n completed: 0,\n total: 0,\n kind: \"unphased\",\n };\n if ((activityEntities.get(UNPHASED_PANEL_ID)?.length ?? 0) > 0) panels.push(runActivity);\n }\n\n panels.push(\n ...(run?.phases.map((phase) => ({\n id: phase.id,\n name: phase.name,\n status: phase.status,\n completed: 0,\n total: phase.total ?? 0,\n phase,\n kind: \"phase\" as const,\n })) ?? []),\n );\n\n const session: PhasePanel = {\n id: SESSION_PANEL_ID,\n name: \"Project participants & shared state\",\n status: \"idle\",\n completed: 0,\n total: 0,\n kind: \"session\",\n };\n const sessionEntities = entitiesFor(snapshot, run, session);\n if (sessionEntities.length > 0 || panels.length === 0) panels.push(session);\n\n return panels.map((panel) =>\n withPanelProgress(\n snapshot,\n run,\n panel,\n panel.kind === \"session\" ? sessionEntities : activityEntities.get(panel.id) ?? [],\n ),\n );\n};\n\nexport const matchesFilter = (status: string, filter: StatusFilter): boolean => {\n if (filter === \"all\") return true;\n if (filter === \"active\") return isActiveStatus(status);\n if (filter === \"completed\") return status === \"completed\" || status === \"done\";\n return status === \"failed\" || status === \"timed_out\" || status === \"blocked\" || status === \"error\";\n};\n\nexport const tokensFor = (\n snapshot: FabricDashboardSnapshot,\n run: FabricActivityRun | undefined,\n): number =>\n snapshot.agents\n .filter((agent) => !run || agent.runId === run.id)\n .reduce(\n (sum, agent) => sum + (agent.usage ? agent.usage.input + agent.usage.output : 0),\n 0,\n );\n", "import type { Theme } from \"@oh-my-pi/pi-coding-agent\";\nimport { formatDuration, formatTokens, safeText } from \"./format.js\";\nimport { spinnerFrame } from \"./spinner.js\";\nimport type { Entity } from \"./dashboard-model.js\";\n\nexport const statusGlyph = (status: string): string => {\n if (status === \"completed\" || status === \"done\") return \"\u2713\";\n if (status === \"failed\" || status === \"timed_out\" || status === \"error\") return \"\u2717\";\n if (status === \"blocked\") return \"!\";\n if (status === \"stopped\" || status === \"cancelled\") return \"\u25A0\";\n if (status === \"queued\" || status === \"pending\" || status === \"ready\") return \"\u25CB\";\n if (status === \"idle\" || status === \"state\") return \"\u00B7\";\n if (status === \"global\") return \"\u25C7\";\n return spinnerFrame();\n};\n\nexport const colorStatus = (theme: Theme, status: string, value: string): string => {\n if (status === \"completed\" || status === \"done\") return theme.fg(\"success\", value);\n if (status === \"failed\" || status === \"timed_out\" || status === \"error\") {\n return theme.fg(\"error\", value);\n }\n if (status === \"blocked\" || status === \"warning\") return theme.fg(\"warning\", value);\n if (status === \"running\" || status === \"in_progress\") return theme.fg(\"accent\", value);\n if (status === \"global\") return theme.fg(\"muted\", value);\n return theme.fg(\"dim\", value);\n};\n\nexport const entityTail = (entity: Entity, now: number): string => {\n if (entity.kind === \"main\") {\n const main = entity.value;\n return [\n \"host OMP\",\n main.model,\n main.thinking,\n main.pendingMessages ? \"messages queued\" : undefined,\n main.local ? undefined : \"remote\",\n ]\n .filter((value): value is string => Boolean(value))\n .join(\" \u00B7 \");\n }\n if (entity.kind === \"agent\") {\n const agent = entity.value;\n const narrative = safeText(agent.error ?? agent.text).slice(0, 140);\n const summary =\n agent.status === \"blocked\" && narrative\n ? `needs input: ${narrative}`\n : (agent.status === \"failed\" || agent.status === \"timed_out\") && narrative\n ? `error: ${narrative}`\n : agent.status === \"completed\" && narrative\n ? `result: ${narrative}`\n : agent.currentTool ?? (agent.status === \"running\" ? \"thinking\" : undefined);\n const parts = [\n summary,\n agent.runner,\n agent.model,\n agent.usage ? `${formatTokens(agent.usage.input + agent.usage.output)} tok` : undefined,\n agent.toolCalls !== undefined ? `${agent.toolCalls} tools` : undefined,\n agent.startedAt ? formatDuration((agent.finishedAt ?? now) - agent.startedAt) : undefined,\n ];\n return parts.filter((value): value is string => Boolean(value)).join(\" \u00B7 \");\n }\n if (entity.kind === \"actor\") {\n const actor = entity.value;\n return [\n actor.runner,\n actor.model ?? actor.worker?.model,\n actor.worker?.currentTool,\n actor.worker?.usage\n ? `${formatTokens(actor.worker.usage.input + actor.worker.usage.output)} tok`\n : undefined,\n `${actor.messages} msg`,\n actor.queued > 0 ? `q:${actor.queued}` : undefined,\n ]\n .filter((value): value is string => Boolean(value))\n .join(\" \u00B7 \");\n }\n if (entity.kind === \"globalActor\") {\n const def = entity.value;\n return [\n \"global template\",\n def.runner,\n def.model ?? \"inherit\",\n def.responseMode === \"directive\" ? \"directive\" : undefined,\n def.delivery !== \"mailbox\" ? def.delivery : undefined,\n ]\n .filter((value): value is string => Boolean(value))\n .join(\" \u00B7 \");\n }\n if (entity.kind === \"call\") {\n const call = entity.value;\n return [\n call.ref,\n call.progress,\n call.metrics?.tokens !== undefined ? `${formatTokens(call.metrics.tokens)} tok` : undefined,\n call.metrics?.toolCalls !== undefined ? `${call.metrics.toolCalls} tools` : undefined,\n formatDuration((call.finishedAt ?? now) - call.startedAt),\n ]\n .filter((value): value is string => Boolean(value))\n .join(\" \u00B7 \");\n }\n if (entity.kind === \"item\") {\n const item = entity.value;\n return [\n item.current ?? item.detail,\n item.total !== undefined ? `${item.completed ?? 0}/${item.total}` : undefined,\n ]\n .filter((value): value is string => Boolean(value))\n .join(\" \u00B7 \");\n }\n if (entity.kind === \"peer\") {\n const peer = entity.value;\n return [peer.sessionId, peer.model, `${formatDuration(Math.max(0, now - peer.updatedAt))} ago`]\n .filter((value): value is string => Boolean(value))\n .join(\" \u00B7 \");\n }\n if (entity.kind === \"meshParticipant\") {\n const participant = entity.value;\n return [\n participant.participant ? `project ${participant.participant.kind}` : \"observed mesh agent\",\n `${participant.routes} route${participant.routes === 1 ? \"\" : \"s\"}`,\n `${formatDuration(Math.max(0, now - participant.lastSeenAt))} ago`,\n ].join(\" \u00B7 \");\n }\n if (entity.kind === \"meshTopic\") {\n const topic = entity.value;\n return [\n `${topic.subscribers.length} subscriber${topic.subscribers.length === 1 ? \"\" : \"s\"}`,\n topic.recentEvents > 0 ? `${topic.recentEvents} recent event${topic.recentEvents === 1 ? \"\" : \"s\"}` : undefined,\n topic.lastEventAt ? `${formatDuration(Math.max(0, now - topic.lastEventAt))} ago` : undefined,\n ]\n .filter((value): value is string => Boolean(value))\n .join(\" \u00B7 \");\n }\n if (entity.kind === \"meshRoute\") {\n const route = entity.value;\n return [\n route.kind,\n route.topic,\n route.count > 1 ? `\u00D7${route.count}` : undefined,\n `${formatDuration(Math.max(0, now - route.lastAt))} ago`,\n ]\n .filter((value): value is string => Boolean(value))\n .join(\" \u00B7 \");\n }\n if (entity.kind === \"component\") {\n return [\n entity.value.guarantee,\n entity.value.parentId ? `child of ${entity.value.parentId}` : undefined,\n (entity.value.effects?.length ?? 0) > 0\n ? `${entity.value.effects!.length} effects`\n : undefined,\n entity.value.requirements.length > 0\n ? `${entity.value.requirements.length} requirements`\n : undefined,\n entity.value.provisions.length > 0\n ? `${entity.value.provisions.length} provisions`\n : undefined,\n ].filter((value): value is string => Boolean(value)).join(\" \u00B7 \");\n }\n return [entity.value.owner, entity.value.detail, `v${entity.value.version}`]\n .filter((value): value is string => Boolean(value))\n .join(\" \u00B7 \");\n};\n", "import type { Theme } from \"@oh-my-pi/pi-coding-agent\";\nimport { Ellipsis, Markdown, truncateToWidth, wrapTextWithAnsi, visibleWidth } from \"@oh-my-pi/pi-tui\";\nimport type { MarkdownTheme, SymbolTheme, TUI } from \"@oh-my-pi/pi-tui\";\nimport type { ThemeColor } from \"@oh-my-pi/pi-coding-agent/modes/theme/theme\";\nimport type { FabricActivityCall } from \"../activity/types.js\";\nimport { formatFabricEffectConflict } from \"../core/effect-conflict.js\";\nimport type { CodePreviewSettings } from \"./code-preview.js\";\nimport { coreToolTitle, renderCoreToolBody } from \"./core-tool-render.js\";\nimport type { Entity } from \"./dashboard-model.js\";\nimport { ompSymbolTheme } from \"./symbol-theme.js\";\nimport { nestedEditDiff, renderBoundedLines } from \"./fabric-render.js\";\nimport { colorStatus, statusGlyph } from \"./dashboard-presentation.js\";\nimport {\n formatActorDataPreview,\n formatClock,\n formatDuration,\n formatTokens,\n padToWidth,\n safeText,\n wrapPlainText,\n} from \"./format.js\";\nimport { highlightCode } from \"./highlight.js\";\nimport { formatJsonAsYaml } from \"./structured.js\";\nimport { loadStateFilePreview, renderStateFilePreview } from \"./state-file-preview.js\";\nimport type { FabricAgentTranscript, FabricTranscriptEntry } from \"./transcript.js\";\nimport type { FabricDashboardSnapshot, FabricUiActor, FabricUiAgent } from \"./types.js\";\nimport { isActiveStatus } from \"./types.js\";\n\nconst isSymbolTheme = (value: unknown): value is SymbolTheme =>\n value !== null && typeof value === \"object\";\n\nconst transcriptMarkdownTheme = (theme: Theme, invalidate: () => void): MarkdownTheme => {\n const rawSymbols = Reflect.get(theme, \"symbols\");\n const symbols = isSymbolTheme(rawSymbols) ? rawSymbols : ompSymbolTheme;\n const format = (color: ThemeColor, text: string): string => theme.fg(color, text);\n const style = (name: \"bold\" | \"italic\" | \"underline\" | \"strikethrough\", text: string): string => {\n const fn = Reflect.get(theme, name);\n return typeof fn === \"function\" ? fn.call(theme, text) : text;\n };\n return {\n symbols,\n heading: (text) => format(\"mdHeading\", text),\n link: (text) => format(\"mdLink\", text),\n linkUrl: (text) => format(\"mdLinkUrl\", text),\n code: (text) => format(\"mdCode\", text),\n codeBlock: (text) => format(\"mdCodeBlock\", text),\n codeBlockBorder: (text) => format(\"mdCodeBlockBorder\", text),\n quote: (text) => format(\"mdQuote\", text),\n quoteBorder: (text) => format(\"mdQuoteBorder\", text),\n hr: (text) => format(\"mdHr\", text),\n listBullet: (text) => format(\"mdListBullet\", text),\n bold: (text) => style(\"bold\", text),\n italic: (text) => style(\"italic\", text),\n underline: (text) => style(\"underline\", text),\n strikethrough: (text) => style(\"strikethrough\", text),\n highlightCode: (code, lang) => highlightCode(code, lang ?? \"\", invalidate) ?? code.split(\"\\n\").map((line) => format(\"mdCodeBlock\", line)),\n };\n};\n\nconst TRANSCRIPT_EXPANDED_TOOL_LINES = 40;\nconst TRANSCRIPT_STRUCTURED_LINES = 40;\n\nconst safeMarkdownText = (value: string): string =>\n value\n .replace(/\\x1b\\[[0-?]*[ -/]*[@-~]/g, \"\")\n .replace(/\\r\\n?/g, \"\\n\")\n .replace(/[\\u0000-\\u0008\\u000b-\\u000c\\u000e-\\u001f\\u007f-\\u009f]/g, \" \");\n\nexport type FabricTranscriptTarget = FabricUiAgent | FabricUiActor;\n\nexport interface DashboardDetailRenderState {\n view: \"summary\" | \"transcript\";\n scroll: number;\n pageAnchor: \"start\" | \"end\" | undefined;\n transcriptFollowing: boolean;\n transcriptToolsExpanded: boolean;\n}\n\nexport interface DashboardDetailRenderResult {\n lines: string[];\n scroll: number;\n maxScroll: number;\n pageAnchor: \"start\" | \"end\" | undefined;\n}\n\ninterface DashboardDetailRendererOptions {\n agentTranscript:\n | ((agent: FabricUiAgent, followLatest: boolean) => FabricAgentTranscript)\n | undefined;\n actorTranscript:\n | ((actor: FabricUiActor, followLatest: boolean) => FabricAgentTranscript)\n | undefined;\n codePreviewSettings: CodePreviewSettings | undefined;\n actorDefaultTools: string[];\n}\n\nexport class DashboardDetailRenderer {\n private detailView: \"summary\" | \"transcript\" = \"summary\";\n private detailScroll = 0;\n private detailMaxScroll = 0;\n private transcriptPageAnchor: \"start\" | \"end\" | undefined;\n private transcriptFollowing = true;\n private transcriptToolsExpanded = false;\n private actionHint = \"\";\n private toolToggleHint = \"\";\n private readonly transcriptMarkdown = new Map<string, { text: string; component: Markdown }>();\n private readonly highlightInvalidate = (): void => this.tui.requestRender();\n private readonly agentTranscript:\n | ((agent: FabricUiAgent, followLatest: boolean) => FabricAgentTranscript)\n | undefined;\n private readonly actorTranscript:\n | ((actor: FabricUiActor, followLatest: boolean) => FabricAgentTranscript)\n | undefined;\n private readonly codePreviewSettings: CodePreviewSettings | undefined;\n private readonly actorDefaultTools: string[];\n\n constructor(\n readonly tui: TUI,\n readonly theme: Theme,\n readonly snapshot: () => FabricDashboardSnapshot,\n options: DashboardDetailRendererOptions,\n ) {\n this.agentTranscript = options.agentTranscript;\n this.actorTranscript = options.actorTranscript;\n this.codePreviewSettings = options.codePreviewSettings;\n this.actorDefaultTools = options.actorDefaultTools;\n }\n\n render(\n width: number,\n snapshot: FabricDashboardSnapshot,\n entity: Entity,\n state: DashboardDetailRenderState,\n actionHint: string,\n toolToggleHint: string,\n ): DashboardDetailRenderResult {\n this.detailView = state.view;\n this.detailScroll = state.scroll;\n this.transcriptPageAnchor = state.pageAnchor;\n this.transcriptFollowing = state.transcriptFollowing;\n this.transcriptToolsExpanded = state.transcriptToolsExpanded;\n this.actionHint = actionHint;\n this.toolToggleHint = toolToggleHint;\n const lines = this.renderDetail(width, snapshot, entity);\n return {\n lines,\n scroll: this.detailScroll,\n maxScroll: this.detailMaxScroll,\n pageAnchor: this.transcriptPageAnchor,\n };\n }\n\n invalidate(): void {\n this.transcriptMarkdown.clear();\n }\n\n private detailActionHint(_entity: Entity): string {\n return this.actionHint;\n }\n\n private transcriptToolToggleHint(): string {\n return this.toolToggleHint;\n }\n\n private transcriptTarget(entity: Entity): FabricTranscriptTarget | undefined {\n if (entity.kind === \"agent\" || entity.kind === \"actor\") return entity.value;\n return undefined;\n }\n\n private hasTranscript(entity: Entity): boolean {\n return (\n (entity.kind === \"agent\" && this.agentTranscript !== undefined) ||\n (entity.kind === \"actor\" && this.actorTranscript !== undefined)\n );\n }\n\n private transcriptFor(entity: Entity): FabricAgentTranscript | undefined {\n if (entity.kind === \"agent\") {\n return this.agentTranscript?.(entity.value, this.transcriptFollowing);\n }\n if (entity.kind === \"actor\") {\n return this.actorTranscript?.(entity.value, this.transcriptFollowing);\n }\n return undefined;\n }\n\n private renderDetail(\n width: number,\n snapshot: FabricDashboardSnapshot,\n entity: Entity,\n ): string[] {\n if (width < 24) return this.renderNarrowDetail(width, snapshot, entity);\n const innerWidth = width - 2;\n const transcriptView =\n (entity.kind === \"agent\" || entity.kind === \"actor\") && this.detailView === \"transcript\";\n const actionLines = wrapPlainText(this.detailActionHint(entity), Math.max(1, innerWidth - 2), 3);\n const viewLabel = transcriptView\n ? ` \u00B7 transcript \u00B7 ${isActiveStatus(entity.status) ? \"live\" : entity.status}`\n : \"\";\n const kindLabel =\n entity.kind === \"main\"\n ? \"main agent\"\n : entity.kind === \"peer\"\n ? \"peer session\"\n : entity.kind === \"meshParticipant\"\n ? \"project participant\"\n : entity.kind === \"meshTopic\"\n ? \"topic\"\n : entity.kind === \"meshRoute\"\n ? \"route\"\n : entity.kind;\n const lines = [this.topBorder(width, `${kindLabel} \u00B7 ${entity.label}${viewLabel}`)];\n const content = transcriptView\n ? this.transcriptLines(entity, innerWidth)\n : this.detailLines(entity, innerWidth, snapshot.now, snapshot.main.cwd ?? process.cwd());\n const terminalRows = this.tui.terminal?.rows ?? process.stdout.rows ?? 28;\n const maxBody = Math.max(1, Math.min(24, terminalRows - 8 - actionLines.length));\n const maxScroll = Math.max(0, content.length - maxBody);\n this.detailMaxScroll = maxScroll;\n if (transcriptView && this.transcriptFollowing) {\n this.detailScroll = maxScroll;\n } else if (transcriptView && this.transcriptPageAnchor) {\n this.detailScroll = this.transcriptPageAnchor === \"end\" ? maxScroll : 0;\n this.transcriptPageAnchor = undefined;\n } else {\n this.detailScroll = Math.max(0, Math.min(this.detailScroll, maxScroll));\n }\n const visible = content.slice(this.detailScroll, this.detailScroll + maxBody);\n for (const line of visible) lines.push(this.row(width, line));\n while (lines.length < maxBody + 1) lines.push(this.row(width, \"\"));\n lines.push(this.middleBorder(width));\n const range =\n content.length > maxBody\n ? ` \u00B7 ${this.detailScroll + 1}-${Math.min(content.length, this.detailScroll + maxBody)}/${content.length}`\n : \"\";\n const navigation = transcriptView\n ? `\u2191\u2193/jk lazy scroll \u00B7 ${this.transcriptToolToggleHint()} \u00B7 g page top \u00B7 G follow:${this.transcriptFollowing ? \"on\" : \"off\"}/live tail \u00B7 t summary \u00B7 esc back${range}`\n : `\u2191\u2193/jk scroll \u00B7 ${this.hasTranscript(entity) ? \"t transcript \u00B7 \" : \"\"}esc back${range}`;\n lines.push(this.row(width, this.theme.fg(\"dim\", navigation)));\n for (const actionLine of actionLines) {\n lines.push(this.row(width, this.theme.fg(\"muted\", ` ${actionLine}`)));\n }\n lines.push(this.bottomBorder(width));\n return lines.map((line) => truncateToWidth(line, width, \"\"));\n }\n\n private transcriptLines(entity: Entity, width: number): string[] {\n const transcript = this.transcriptFor(entity);\n const transcriptCwd =\n entity.kind === \"agent\"\n ? entity.value.cwd\n : entity.kind === \"actor\"\n ? entity.value.worker?.cwd\n : undefined;\n if (!transcript || transcript.entries.length === 0) {\n return [\n this.theme.fg(\n \"dim\",\n isActiveStatus(entity.status)\n ? \"Waiting for streamed agent activity\u2026\"\n : \"No retained transcript is available for this agent or actor.\",\n ),\n ];\n }\n const lines: string[] = [];\n if (transcript.hasMore ?? transcript.truncated) {\n lines.push(this.theme.fg(\"dim\", \"\u2191 older activity available \u00B7 scroll past the top to load\"));\n }\n let firstTool = true;\n for (const entry of transcript.entries) {\n if (entry.kind === \"tool\") {\n if (this.transcriptToolsExpanded && !firstTool) lines.push(\"\");\n firstTool = false;\n lines.push(...this.transcriptToolLines(entry, width, transcriptCwd));\n continue;\n }\n const glyph =\n entry.kind === \"assistant\"\n ? this.theme.fg(\"accent\", \"\u25C6\")\n : entry.kind === \"user\"\n ? this.theme.fg(\"muted\", \"\u203A\")\n : entry.kind === \"error\"\n ? this.theme.fg(\"error\", \"\u2717\")\n : colorStatus(\n this.theme,\n entry.status ?? \"completed\",\n statusGlyph(entry.status ?? \"completed\"),\n );\n lines.push(\n truncateToWidth(\n `${glyph} ${this.theme.fg(\n entry.kind === \"assistant\" ? \"accent\" : \"muted\",\n safeText(entry.label),\n )}`,\n width,\n \"\",\n ),\n );\n if (!entry.text) continue;\n if (entry.kind === \"assistant\" || entry.kind === \"user\") {\n lines.push(\n ...this.markdownTranscriptLines(\n this.transcriptTarget(entity)?.id ?? entity.id,\n entry.id,\n entry.text,\n width,\n ),\n );\n continue;\n }\n for (const paragraph of entry.text.split(\"\\n\")) {\n const wrapped = wrapPlainText(paragraph, Math.max(1, width - 2), 10_000);\n for (const line of wrapped) lines.push(truncateToWidth(` ${line}`, width, \"\"));\n }\n }\n if (transcript.hasNewer) {\n lines.push(this.theme.fg(\"dim\", \"\u2193 newer activity available \u00B7 scroll past the bottom to load\"));\n }\n return lines;\n }\n\n private transcriptToolLines(\n entry: FabricTranscriptEntry,\n width: number,\n transcriptCwd?: string,\n ): string[] {\n const depth = Math.max(0, entry.depth ?? 0);\n const padding = \" \".repeat(depth);\n const bodyPadding = `${padding} `;\n const glyph = colorStatus(\n this.theme,\n entry.status ?? \"completed\",\n statusGlyph(entry.status ?? \"completed\"),\n );\n const status =\n entry.status === \"running\" ? \" \u00B7 running\" : entry.status === \"failed\" ? \" \u00B7 failed\" : \"\";\n const audit = this.transcriptToolAudit(entry);\n const context = this.codePreviewSettings\n ? {\n cwd: transcriptCwd ?? this.snapshot().main.cwd ?? process.cwd(),\n settings: this.codePreviewSettings,\n invalidate: this.highlightInvalidate,\n }\n : undefined;\n const title = context ? coreToolTitle(audit, this.theme, context) : null;\n const headline = title ?? this.theme.fg(\"toolTitle\", this.theme.bold(entry.toolName ?? entry.label));\n const collapsedSummary =\n !this.transcriptToolsExpanded && entry.text\n ? ` \u00B7 ${safeText(entry.text).replace(/\\s+/g, \" \").trim()}`\n : \"\";\n const lines = [\n truncateToWidth(\n `${padding}${glyph} ${headline}${this.theme.fg(\"dim\", `${status}${collapsedSummary}`)}`,\n width,\n \"\",\n ),\n ];\n if (!this.transcriptToolsExpanded) return lines;\n\n const rendered = context\n ? renderCoreToolBody(audit, this.theme, {\n ...context,\n expanded: true,\n maxLines: TRANSCRIPT_EXPANDED_TOOL_LINES,\n })\n : null;\n if (rendered) {\n for (const row of renderBoundedLines(\n rendered.lines,\n this.theme,\n this.codePreviewSettings?.diffIntensity ?? \"off\",\n ).render(Math.max(1, width - visibleWidth(bodyPadding)))) {\n lines.push(truncateToWidth(`${bodyPadding}${row}`, width, \"\"));\n }\n if (rendered.hidden > 0) {\n lines.push(this.theme.fg(\"dim\", `${bodyPadding}\u2026 ${rendered.hidden} more lines`));\n }\n return lines;\n }\n if (entry.args && Object.keys(entry.args).length > 0) {\n lines.push(...this.transcriptStructuredLines(\"input\", entry.args, width, bodyPadding));\n } else if (entry.text) {\n for (const row of wrapPlainText(\n entry.text,\n Math.max(1, width - visibleWidth(bodyPadding)),\n 10_000,\n )) {\n lines.push(truncateToWidth(`${bodyPadding}${row}`, width, \"\"));\n }\n }\n if (entry.result !== undefined) {\n lines.push(...this.transcriptStructuredLines(\"result\", entry.result, width, bodyPadding));\n }\n return lines;\n }\n\n private transcriptToolAudit(entry: FabricTranscriptEntry): {\n ref: string;\n provider: string;\n tool: string;\n args?: Record<string, unknown>;\n result?: unknown;\n success?: boolean;\n } {\n const rawName = entry.toolName ?? entry.label;\n const normalizedName = rawName.toLowerCase();\n const tool =\n normalizedName === \"glob\"\n ? \"find\"\n : [\"read\", \"write\", \"edit\", \"bash\", \"grep\", \"find\", \"ls\"].includes(normalizedName)\n ? normalizedName\n : rawName;\n const rawArgs = entry.args ?? {};\n const args: Record<string, unknown> = { ...rawArgs };\n if (typeof rawArgs.file_path === \"string\" && typeof args.path !== \"string\") {\n args.path = rawArgs.file_path;\n }\n if (tool === \"edit\" && !Array.isArray(args.edits)) {\n const oldText = typeof rawArgs.old_string === \"string\" ? rawArgs.old_string : undefined;\n const newText = typeof rawArgs.new_string === \"string\" ? rawArgs.new_string : undefined;\n if (oldText !== undefined && newText !== undefined) args.edits = [{ oldText, newText }];\n }\n return {\n ref: typeof tool === \"string\" ? `omp.${tool}` : `tool.${rawName}`,\n provider: \"omp\",\n tool,\n ...(Object.keys(args).length > 0 ? { args } : {}),\n ...(entry.result !== undefined ? { result: entry.result } : {}),\n ...(entry.status !== \"running\" ? { success: entry.status !== \"failed\" } : {}),\n };\n }\n\n private transcriptStructuredLines(\n label: string,\n value: unknown,\n width: number,\n padding: string,\n ): string[] {\n const yaml = formatJsonAsYaml(value) ?? safeText(value);\n if (!yaml) return [];\n const yamlLines = yaml.split(\"\\n\");\n const shownYamlLines = yamlLines.slice(0, TRANSCRIPT_STRUCTURED_LINES);\n const highlighted =\n highlightCode(shownYamlLines.join(\"\\n\"), \"yaml\", this.highlightInvalidate) ??\n shownYamlLines.map((line) => this.theme.fg(\"mdCodeBlock\", line || \" \"));\n const lines = [truncateToWidth(`${padding}${this.theme.fg(\"dim\", `${label}:`)}`, width, \"\")];\n const nestedPadding = `${padding} `;\n for (const row of highlighted) {\n for (const wrapped of wrapTextWithAnsi(row, Math.max(1, width - visibleWidth(nestedPadding)))) {\n lines.push(truncateToWidth(`${nestedPadding}${wrapped}`, width, \"\"));\n if (lines.length > TRANSCRIPT_STRUCTURED_LINES) break;\n }\n if (lines.length > TRANSCRIPT_STRUCTURED_LINES) break;\n }\n const hiddenLines = Math.max(0, yamlLines.length - shownYamlLines.length);\n if (hiddenLines > 0) {\n lines.push(this.theme.fg(\"dim\", `${nestedPadding}\u2026 ${hiddenLines} more lines`));\n }\n return lines;\n }\n\n private markdownTranscriptLines(\n agentId: string,\n entryId: string,\n text: string,\n width: number,\n ): string[] {\n return this.markdownLines(`transcript:${agentId}:${entryId}`, text, width);\n }\n\n private markdownLines(key: string, text: string, width: number, indent = 2): string[] {\n const markdown = safeMarkdownText(text);\n if (!markdown.trim()) return [];\n let cached = this.transcriptMarkdown.get(key);\n if (!cached || cached.text !== markdown) {\n cached = {\n text: markdown,\n component: new Markdown(\n markdown,\n 0,\n 0,\n transcriptMarkdownTheme(this.theme, () => {\n this.transcriptMarkdown.delete(key);\n this.tui.requestRender();\n }),\n ),\n };\n this.transcriptMarkdown.delete(key);\n this.transcriptMarkdown.set(key, cached);\n while (this.transcriptMarkdown.size > 128) {\n const oldest = this.transcriptMarkdown.keys().next().value as string | undefined;\n if (!oldest) break;\n this.transcriptMarkdown.delete(oldest);\n }\n }\n const padding = \" \".repeat(Math.max(0, indent));\n return cached.component\n .render(Math.max(1, width - visibleWidth(padding)))\n .map((line) => truncateToWidth(`${padding}${line}`, width, \"\"));\n }\n\n private detailLines(entity: Entity, width: number, now: number, cwd: string): string[] {\n const lines: string[] = [];\n const field = (label: string, value: unknown): void => {\n const text = safeText(value);\n if (!text) return;\n const prefix = `${this.theme.fg(\"dim\", `${label}:`)} `;\n const wrapped = wrapPlainText(text, Math.max(1, width - visibleWidth(prefix)), 12);\n if (wrapped[0]) lines.push(truncateToWidth(prefix + wrapped[0], width));\n for (const continuation of wrapped.slice(1)) {\n lines.push(truncateToWidth(\" \".repeat(visibleWidth(prefix)) + continuation, width));\n }\n };\n const markdownField = (label: string, value: string | undefined, key: string): void => {\n if (!value?.trim()) return;\n lines.push(this.theme.fg(\"dim\", `${label}:`));\n lines.push(...this.markdownLines(`detail:${entity.id}:${key}`, value, width));\n };\n const structuredField = (label: string, value: unknown): void => {\n if (value === undefined) return;\n const yaml = formatJsonAsYaml(value);\n if (yaml === undefined) {\n field(label, value);\n return;\n }\n lines.push(this.theme.fg(\"dim\", `${label}:`));\n const highlighted =\n highlightCode(yaml, \"yaml\", this.highlightInvalidate) ??\n yaml.split(\"\\n\").map((line) => this.theme.fg(\"mdCodeBlock\", line || \" \"));\n for (const highlightedLine of highlighted) {\n for (const wrapped of wrapTextWithAnsi(highlightedLine, Math.max(1, width - 2))) {\n lines.push(truncateToWidth(` ${wrapped}`, width, \"\"));\n }\n }\n };\n const stringOutputField = (label: string, value: unknown): void => {\n if (typeof value !== \"string\") return;\n markdownField(label, value, label.toLowerCase());\n };\n const objectOutputField = (label: string, value: Record<string, unknown>): void => {\n if (typeof value.output === \"string\" || typeof value.text === \"string\" || typeof value.content === \"string\") {\n stringOutputField(label, value.output ?? value.text ?? value.content);\n return;\n }\n structuredField(label, value);\n };\n const outputField = (label: string, value: unknown): void => {\n if (value === undefined) return;\n if (typeof value === \"string\") {\n stringOutputField(label, value);\n return;\n }\n if (value !== null && typeof value === \"object\" && !Array.isArray(value)) {\n objectOutputField(label, value as Record<string, unknown>);\n return;\n }\n structuredField(label, value);\n };\n const coreCallPreview = (call: FabricActivityCall): boolean => {\n const settings = this.codePreviewSettings;\n const tool = call.ref.startsWith(\"omp.\") ? call.ref.slice(4) : \"\";\n if (!settings || ![\"bash\", \"read\", \"write\", \"edit\", \"grep\", \"find\", \"ls\"].includes(tool)) {\n return false;\n }\n const success = call.status === \"completed\"\n ? true\n : call.status === \"failed\"\n ? false\n : undefined;\n const audit = {\n ref: call.ref,\n provider: \"omp\",\n tool,\n ...(call.args !== undefined ? { args: call.args } : {}),\n ...(call.result !== undefined ? { result: call.result } : {}),\n ...(call.preview !== undefined ? { preview: call.preview } : {}),\n ...(success !== undefined ? { success } : {}),\n startedAt: call.startedAt,\n ...(call.finishedAt !== undefined ? { endedAt: call.finishedAt } : {}),\n };\n const context = {\n cwd: this.snapshot().main.cwd ?? process.cwd(),\n settings,\n invalidate: this.highlightInvalidate,\n };\n const title = coreToolTitle(audit, this.theme, context);\n const rendered = renderCoreToolBody(audit, this.theme, {\n ...context,\n expanded: true,\n maxLines: 200,\n });\n if (!rendered) return false;\n lines.push(this.theme.fg(\"dim\", \"Preview:\"));\n const body = renderBoundedLines(\n [...(title ? [title] : []), ...rendered.lines],\n this.theme,\n settings.diffIntensity,\n ).render(Math.max(1, width - 2));\n for (const row of body) lines.push(truncateToWidth(` ${row}`, width, \"\"));\n if (rendered.hidden > 0) {\n lines.push(this.theme.fg(\"muted\", ` \u2026 ${rendered.hidden} more lines`));\n }\n return true;\n };\n const argumentField = (call: FabricActivityCall): void => {\n const args = call.args;\n if (!args || Object.keys(args).length === 0) return;\n const stringValue = (key: string): string | undefined =>\n typeof args[key] === \"string\" ? args[key] : undefined;\n if (call.ref === \"omp.bash\") {\n const command = stringValue(\"command\");\n if (command) {\n markdownField(\"Command\", `\\`\\`\\`bash\\n${command}\\n\\`\\`\\``, \"command\");\n }\n }\n const edits = Array.isArray(args.edits) ? args.edits : [];\n if (call.ref === \"omp.edit\" && edits.length > 0) {\n lines.push(this.theme.fg(\"dim\", \"Edits:\"));\n const diff = nestedEditDiff(\n {\n ref: call.ref,\n tool: call.ref.split(\".\")[1] ?? call.ref,\n args,\n },\n this.theme,\n this.highlightInvalidate,\n );\n if (diff) {\n for (const line of diff) lines.push(truncateToWidth(` ${line}`, width, \"\"));\n } else {\n structuredField(\"Edits\", edits);\n }\n }\n const content = stringValue(\"content\");\n if (call.ref === \"omp.write\" && content !== undefined) {\n const path = stringValue(\"path\") ?? \"\";\n const extension = path.includes(\".\") ? path.split(\".\").at(-1) : \"\";\n markdownField(\"Content\", \"```\" + (extension || \"text\") + \"\\n\" + content + \"\\n```\", \"content\");\n }\n const renderedKeys = new Set([\"command\", \"edits\", \"content\"]);\n const remaining = Object.fromEntries(\n Object.entries(args).filter(([key]) => !renderedKeys.has(key)),\n );\n if (Object.keys(remaining).length > 0) structuredField(\"Input\", remaining);\n };\n field(\"Status\", entity.status);\n\n if (entity.kind === \"main\") {\n const main = entity.value;\n field(\"ID\", main.id);\n field(\"Scope\", \"user-facing OMP session\");\n field(\"Runner\", main.runner);\n field(\"Model\", main.model);\n field(\"Thinking\", main.thinking);\n field(\"Transport\", main.transport);\n field(\"Session\", main.sessionId);\n field(\"Working directory\", main.cwd);\n field(\"Pending messages\", main.pendingMessages ? \"yes\" : \"no\");\n field(\"Local owner\", main.local ? \"yes\" : \"no\");\n field(\n \"Elapsed\",\n main.startedAt ? formatDuration(Math.max(0, now - main.startedAt)) : undefined,\n );\n } else if (entity.kind === \"peer\") {\n const peer = entity.value;\n field(\"ID\", peer.id);\n field(\"Scope\", \"concurrent root OMP session\");\n field(\"Runner\", peer.runner);\n field(\"Model\", peer.model);\n field(\"Thinking\", peer.thinking);\n field(\"Transport\", peer.transport);\n field(\"Session\", peer.sessionId);\n field(\"Working directory\", peer.cwd);\n field(\"Pending messages\", peer.pendingMessages ? \"yes\" : \"no\");\n field(\"Last heartbeat\", new Date(peer.updatedAt).toLocaleString());\n field(\"Elapsed\", formatDuration(Math.max(0, now - peer.startedAt)));\n } else if (entity.kind === \"agent\") {\n const agent = entity.value;\n field(\"ID\", agent.id);\n field(\"Runner\", agent.runner);\n field(\"Residency\", agent.residency ?? \"session\");\n field(\"Model\", agent.model);\n field(\"Thinking\", agent.thinking);\n field(\"Transport\", agent.transport);\n field(\"Activity\", agent.currentTool);\n field(\"Elapsed\", agent.startedAt ? formatDuration((agent.finishedAt ?? now) - agent.startedAt) : undefined);\n field(\"Usage\", agent.usage ? `${formatTokens(agent.usage.input + agent.usage.output)} tokens \u00B7 ${agent.toolCalls ?? 0} tools \u00B7 ${agent.turns ?? 0} turns \u00B7 $${agent.usage.cost.toFixed(4)}` : undefined);\n markdownField(\"Task\", agent.task, \"task\");\n field(\"Branch\", agent.branch);\n field(\"Worktree\", agent.worktree);\n field(\"Attach\", agent.attachCommand);\n field(\"Error\", agent.error);\n markdownField(\"Result\", agent.text, \"result\");\n structuredField(\"Value\", agent.value);\n } else if (entity.kind === \"actor\") {\n const actor = entity.value;\n field(\"ID\", actor.id);\n field(\"Runner\", actor.runner);\n field(\"Residency\", actor.residency ?? \"session\");\n field(\"Execution owner\", actor.ownerHostId);\n field(\"Runtime\", actor.local === false ? \"remote shared owner\" : \"local owner\");\n field(\"Session model\", actor.binding?.model ?? \"inherit project\");\n field(\"Project model\", actor.projectDefaults?.model ?? \"inherit Fabric\");\n field(\"Effective model\", actor.model ?? \"Fabric default\");\n field(\"Active worker model\", actor.worker?.model);\n field(\"Session thinking\", actor.binding?.thinking ?? \"inherit project\");\n field(\"Project thinking\", actor.projectDefaults?.thinking ?? \"inherit Fabric\");\n field(\"Effective reasoning\", actor.thinking ?? \"Fabric default\");\n field(\"Active worker thinking\", actor.worker?.thinking);\n field(\"Delivery\", `${actor.delivery} \u00B7 ${actor.responseMode}`);\n field(\"Trigger turn\", actor.triggerTurn ? \"yes\" : \"no\");\n field(\"Activity\", actor.worker?.currentTool);\n field(\"Transport\", actor.worker?.transport);\n field(\n \"Usage\",\n actor.worker?.usage\n ? `${formatTokens(actor.worker.usage.input + actor.worker.usage.output)} tokens \u00B7 ${actor.worker.toolCalls ?? 0} tools`\n : undefined,\n );\n field(\"Host events\", actor.events.join(\", \"));\n field(\"Tools\", actor.tools?.join(\", \") ?? `inherited (${this.actorDefaultTools.join(\", \")})`);\n field(\"Topics\", actor.topics.join(\", \"));\n field(\"Queue\", actor.queued);\n field(\"Last error\", actor.lastError);\n field(\"Instructions\", actor.instructions);\n if (actor.recentMessages.length > 0) {\n lines.push(\"\");\n lines.push(this.theme.fg(\"accent\", \"Recent mailbox\"));\n for (const message of actor.recentMessages) {\n const text =\n message.text ??\n message.error ??\n message.action ??\n formatActorDataPreview(message.data) ??\n \"data\";\n field(\n `${message.direction === \"in\" ? \"\u2192\" : \"\u2190\"} ${formatClock(message.createdAt)} ${message.source}`,\n text,\n );\n }\n }\n } else if (entity.kind === \"call\") {\n const call = entity.value;\n field(\"Reference\", call.ref);\n field(\"ID\", call.id);\n field(\"Kind\", call.entityKind ?? call.kind);\n field(\"Progress\", call.progress);\n field(\"Elapsed\", formatDuration((call.finishedAt ?? now) - call.startedAt));\n field(\"Tokens\", call.metrics?.tokens);\n field(\"Tool calls\", call.metrics?.toolCalls);\n field(\"Cost\", call.metrics?.cost);\n field(\"Entity\", call.entityId);\n const renderedCorePreview = coreCallPreview(call);\n if (!renderedCorePreview) argumentField(call);\n field(\"Error\", call.error);\n if (!renderedCorePreview) outputField(\"Output\", call.result);\n } else if (entity.kind === \"item\") {\n const item = entity.value;\n field(\"ID\", item.id);\n field(\"Kind\", item.kind);\n field(\"Progress\", item.total !== undefined ? `${item.completed ?? 0}/${item.total}` : undefined);\n field(\"Current\", item.current);\n field(\"Detail\", item.detail);\n structuredField(\"Data\", item.data);\n } else if (entity.kind === \"globalActor\") {\n const def = entity.value;\n field(\"Scope\", \"global template\");\n field(\"ID\", def.id);\n field(\"Runner\", def.runner);\n field(\"Residency\", def.residency ?? \"session\");\n field(\"Delivery\", `${def.delivery} \u00B7 ${def.responseMode}`);\n field(\"Model\", def.model ?? \"inherit\");\n field(\"Thinking\", def.thinking ?? \"inherit\");\n field(\"Host events\", def.events.join(\", \"));\n field(\"Topics\", def.topics.join(\", \"));\n field(\"Trigger turn\", def.triggerTurn ? \"yes\" : \"no\");\n field(\"Coalesce\", def.coalesce ? \"yes\" : \"no\");\n field(\"Created\", new Date(def.createdAt).toLocaleString());\n field(\"Updated\", new Date(def.updatedAt).toLocaleString());\n field(\"Instructions\", def.instructions);\n } else if (entity.kind === \"meshParticipant\") {\n const participant = entity.value;\n const canonical = participant.participant;\n field(\"Scope\", canonical ? `project ${canonical.kind}` : \"observed mesh agent\");\n field(\"Identity\", participant.id);\n field(\"Root\", canonical?.rootId);\n field(\"Parent\", canonical?.parentId);\n field(\"Owner host\", canonical?.ownerHostId);\n field(\"Owner identity\", canonical?.ownerIdentityId);\n field(\"Residency\", canonical?.residency ?? \"session\");\n field(\"Runner\", canonical?.runner);\n field(\"Transport\", canonical?.transport);\n field(\"Capabilities\", canonical?.capabilities.join(\", \"));\n field(\"Local\", canonical ? (canonical.local ? \"yes\" : \"no\") : undefined);\n field(\"Observed routes\", participant.routes);\n field(\"Last activity\", new Date(participant.lastSeenAt).toLocaleString());\n field(\"Current work\", canonical?.currentTool);\n } else if (entity.kind === \"meshTopic\") {\n const topic = entity.value;\n field(\"Scope\", \"project mesh topic\");\n field(\"ID\", topic.id);\n field(\"System topic\", topic.system ? \"yes\" : \"no\");\n field(\"Subscribers\", topic.subscribers.map((subscriber) => subscriber.name).join(\", \"));\n field(\"Recent events\", topic.recentEvents);\n field(\n \"Last activity\",\n topic.lastEventAt ? new Date(topic.lastEventAt).toLocaleString() : undefined,\n );\n } else if (entity.kind === \"meshRoute\") {\n const route = entity.value;\n field(\"Scope\", \"recent project mesh route\");\n field(\"From\", `${route.fromName} (${route.fromKind}:${route.fromId})`);\n field(\"To\", `${route.targetName} (${route.targetKind}:${route.targetId})`);\n field(\"Topic\", route.topic);\n field(\"Event kind\", route.kind);\n field(\"Deliveries\", route.count);\n field(\"Last activity\", new Date(route.lastAt).toLocaleString());\n markdownField(\"Payload text\", route.text, \"route-text\");\n } else if (entity.kind === \"component\") {\n const component = entity.value;\n field(\"Definition\", component.component);\n field(\"Parent\", component.parentId);\n field(\"Guarantee\", component.guarantee);\n const componentEffects = component.effects ?? [];\n const visibleEffects = componentEffects.slice(0, 8).map((effect) =>\n `${effect.label}: ${effect.kind}/${effect.ordering} [${effect.resources.join(\", \")}]`,\n );\n if (componentEffects.length > visibleEffects.length) {\n visibleEffects.push(`+${componentEffects.length - visibleEffects.length} more`);\n }\n field(\"Effects\", visibleEffects.join(\"; \"));\n field(\"Effect conflicts\", component.effectConflicts?.map((conflict) =>\n formatFabricEffectConflict(\n conflict.withComponent,\n conflict.resources,\n conflict.reason,\n )\n ).join(\"; \"));\n field(\"Requirements\", component.requirements.join(\", \"));\n field(\"Provisions\", component.provisions.join(\", \"));\n field(\"Missing\", component.missing.join(\", \"));\n field(\"Optional missing\", component.optionalMissing.join(\", \"));\n field(\"Target digest\", component.targetDigest);\n field(\"Error\", component.error);\n field(\"Updated\", new Date(component.updatedAt).toLocaleString());\n } else {\n const entry = entity.value;\n field(\"Key\", entry.key);\n field(\"Owner\", entry.owner);\n field(\"Version\", entry.version);\n field(\"Updated\", new Date(entry.updatedAt).toLocaleString());\n field(\"Detail\", entry.detail);\n const filePreview = loadStateFilePreview(entry, cwd);\n if (filePreview) {\n field(\"File\", filePreview.path);\n lines.push(this.theme.fg(\"dim\", \"Preview:\"));\n lines.push(...renderStateFilePreview(\n filePreview,\n this.theme,\n width,\n 120,\n this.highlightInvalidate,\n ));\n }\n structuredField(\"Value\", entry.value);\n }\n return lines.length > 0 ? lines : [this.theme.fg(\"dim\", \"No details\")];\n }\n\n private renderNarrowDetail(\n width: number,\n snapshot: FabricDashboardSnapshot,\n entity: Entity,\n ): string[] {\n const transcriptView =\n (entity.kind === \"agent\" || entity.kind === \"actor\") && this.detailView === \"transcript\";\n const content = transcriptView\n ? this.transcriptLines(entity, width)\n : this.detailLines(entity, width, snapshot.now, snapshot.main.cwd ?? process.cwd());\n const terminalRows = this.tui.terminal?.rows ?? process.stdout.rows ?? 28;\n const maxBody = Math.max(1, terminalRows - 2);\n this.detailMaxScroll = Math.max(0, content.length - maxBody);\n if (transcriptView && this.transcriptFollowing) {\n this.detailScroll = this.detailMaxScroll;\n } else if (transcriptView && this.transcriptPageAnchor) {\n this.detailScroll = this.transcriptPageAnchor === \"end\" ? this.detailMaxScroll : 0;\n this.transcriptPageAnchor = undefined;\n } else {\n this.detailScroll = Math.max(0, Math.min(this.detailScroll, this.detailMaxScroll));\n }\n const title = `${entity.label}${transcriptView ? \" \u00B7 transcript\" : \"\"}`;\n const hint = transcriptView\n ? `${this.transcriptToolToggleHint()} \u00B7 g page top \u00B7 G follow:${this.transcriptFollowing ? \"on\" : \"off\"}/tail \u00B7 t summary \u00B7 esc`\n : `${this.hasTranscript(entity) ? \"t transcript \u00B7 \" : \"\"}esc`;\n return [title, ...content.slice(this.detailScroll, this.detailScroll + maxBody), hint]\n .map((line) => truncateToWidth(line, width, \"\"))\n .filter((line) => visibleWidth(line) > 0);\n }\n\n private topBorder(width: number, title: string): string {\n const border = (value: string) => this.theme.fg(\"borderMuted\", value);\n const safeTitle = truncateToWidth(safeText(title), Math.max(0, width - 6));\n const styledTitle = ` ${this.theme.fg(\"accent\", safeTitle)} `;\n const remaining = Math.max(0, width - 2 - visibleWidth(styledTitle));\n const left = Math.floor(remaining / 2);\n const right = remaining - left;\n return `${border(`\u256D${\"\u2500\".repeat(left)}`)}${styledTitle}${border(`${\"\u2500\".repeat(right)}\u256E`)}`;\n }\n\n private middleBorder(width: number): string {\n return this.theme.fg(\"borderMuted\", `\u251C${\"\u2500\".repeat(Math.max(0, width - 2))}\u2524`);\n }\n\n private bottomBorder(width: number): string {\n return this.theme.fg(\"borderMuted\", `\u2570${\"\u2500\".repeat(Math.max(0, width - 2))}\u256F`);\n }\n\n private row(width: number, content: string): string {\n const innerWidth = Math.max(0, width - 2);\n return `${this.theme.fg(\"borderMuted\", \"\u2502\")}${padToWidth(content, innerWidth)}${this.theme.fg(\n \"borderMuted\",\n \"\u2502\",\n )}`;\n }\n}\n", "import fs from \"node:fs\";\nimport path from \"node:path\";\nimport type { Theme } from \"@oh-my-pi/pi-coding-agent\";\nimport { truncateToWidth, visibleWidth } from \"@oh-my-pi/pi-tui\";\nimport { highlightCode, highlightFileLines, languageFromPath } from \"./highlight.js\";\nimport { safeText } from \"./format.js\";\nimport type { FabricUiStateEntry } from \"./types.js\";\n\nconst MAX_FILE_BYTES = 64 * 1024;\nconst MAX_FILE_LINES = 240;\nconst CACHE_LIMIT = 64;\n\nexport interface FabricStateFilePreview {\n path: string;\n absolutePath: string;\n language: string;\n content: string;\n lines: string[];\n truncated: boolean;\n}\n\nconst cache = new Map<string, FabricStateFilePreview>();\n\nconst candidatePath = (entry: FabricUiStateEntry): string | undefined => {\n const value = entry.value;\n if (value && typeof value === \"object\" && !Array.isArray(value)) {\n const record = value as Record<string, unknown>;\n const candidate = record.file ?? record.path;\n if (typeof candidate === \"string\" && candidate.trim()) return candidate.trim();\n }\n return entry.key.startsWith(\"state/complexity/\")\n ? entry.key.slice(\"state/complexity/\".length)\n : undefined;\n};\n\nconst inside = (root: string, candidate: string): boolean => {\n const relative = path.relative(root, candidate);\n return relative === \"\" || (!relative.startsWith(`..${path.sep}`) && relative !== \"..\");\n};\n\nexport const loadStateFilePreview = (\n entry: FabricUiStateEntry,\n cwd: string,\n): FabricStateFilePreview | undefined => {\n const candidate = candidatePath(entry);\n if (!candidate || path.isAbsolute(candidate) || !cwd) return undefined;\n try {\n const root = fs.realpathSync(cwd);\n const absolute = fs.realpathSync(path.resolve(root, candidate));\n if (!inside(root, absolute)) return undefined;\n const stat = fs.statSync(absolute);\n if (!stat.isFile()) return undefined;\n const cacheKey = `${absolute}\\0${stat.mtimeMs}\\0${stat.size}`;\n const cached = cache.get(cacheKey);\n if (cached) {\n cache.delete(cacheKey);\n cache.set(cacheKey, cached);\n return cached;\n }\n const bytes = Math.min(stat.size, MAX_FILE_BYTES);\n const descriptor = fs.openSync(absolute, \"r\");\n const buffer = Buffer.alloc(bytes);\n try {\n if (bytes > 0) fs.readSync(descriptor, buffer, 0, bytes, 0);\n } finally {\n fs.closeSync(descriptor);\n }\n if (buffer.includes(0)) return undefined;\n const decoded = buffer.toString(\"utf8\").replace(/\\r\\n?/g, \"\\n\");\n const allLines = decoded.split(\"\\n\");\n const boundedLines = allLines.slice(0, MAX_FILE_LINES);\n const preview: FabricStateFilePreview = {\n path: (path.relative(root, absolute) || path.basename(absolute)).split(path.sep).join(\"/\"),\n absolutePath: absolute,\n language: languageFromPath(absolute) ?? \"text\",\n content: boundedLines.join(\"\\n\"),\n lines: boundedLines,\n truncated: stat.size > bytes || allLines.length > boundedLines.length,\n };\n cache.set(cacheKey, preview);\n while (cache.size > CACHE_LIMIT) cache.delete(cache.keys().next().value!);\n return preview;\n } catch {\n return undefined;\n }\n};\n\nexport const renderStateFilePreview = (\n preview: FabricStateFilePreview,\n theme: Theme,\n width: number,\n maxLines: number,\n invalidate?: () => void,\n): string[] => {\n if (width <= 0 || maxLines <= 0) return [];\n const shown = preview.lines.slice(0, maxLines);\n // Prefer the file's tokenization coverage so long comments/strings opened\n // near the top highlight state-correctly even in short excerpts.\n const fileLines = highlightFileLines(\n preview.absolutePath,\n preview.language,\n 0,\n shown.length,\n invalidate,\n );\n const fileVerified =\n fileLines !== null &&\n fileLines.every((line, index) => line.raw === (shown[index] ?? \"\").replace(/\\t/g, \" \"));\n const highlighted = fileVerified\n ? fileLines!.map((line) => line.ansi || \" \")\n : highlightCode(shown.join(\"\\n\"), preview.language, invalidate) ??\n shown.map((line) => theme.fg(\"mdCodeBlock\", safeText(line) || \" \"));\n const digits = String(Math.max(1, shown.length)).length;\n const output = highlighted.map((line, index) => {\n const gutter = theme.fg(\"dim\", `${String(index + 1).padStart(digits)} \u2502 `);\n return truncateToWidth(gutter + line, width, \"\");\n });\n if ((preview.truncated || preview.lines.length > shown.length) && output.length < maxLines) {\n const omitted = Math.max(0, preview.lines.length - shown.length);\n const label = omitted > 0 ? `\u2026 ${omitted}+ lines omitted` : \"\u2026 file truncated\";\n output.push(truncateToWidth(theme.fg(\"dim\", label), width, \"\"));\n }\n return output.filter((line) => visibleWidth(line) <= width);\n};\n", "import type { Theme } from \"@oh-my-pi/pi-coding-agent\";\nimport { Ellipsis } from \"@oh-my-pi/pi-tui\";\nimport { truncateToWidth, visibleWidth } from \"@oh-my-pi/pi-tui\";\nimport type { FabricActivityRun } from \"../activity/types.js\";\nimport type { Entity, StatusFilter } from \"./dashboard-model.js\";\nimport { colorStatus, entityTail, statusGlyph } from \"./dashboard-presentation.js\";\nimport { padToWidth, safeText } from \"./format.js\";\nimport type { FabricProjectMeshModel, FabricProjectMeshRoute } from \"./topology.js\";\nimport type { FabricDashboardSnapshot } from \"./types.js\";\nimport { isActiveStatus } from \"./types.js\";\nimport { loadStateFilePreview, renderStateFilePreview } from \"./state-file-preview.js\";\n\nexport interface FabricGraphPoint {\n x: number;\n y: number;\n}\n\ntype GraphNodeKind =\n | \"main\"\n | \"peer\"\n | \"agent\"\n | \"actor\"\n | \"participant\"\n | \"component\"\n | \"group\"\n | \"topic\"\n | \"state\"\n | \"route\";\n\ninterface GraphNode {\n id: string;\n label: string;\n status: string;\n kind: GraphNodeKind;\n parentId?: string;\n activityAt?: number;\n startedAt?: number;\n queued?: number;\n stale?: boolean;\n order?: number;\n x: number;\n y: number;\n}\n\ninterface GraphEdge {\n from: string;\n to: string;\n kind: \"structure\" | \"route\" | \"subscription\";\n route?: FabricProjectMeshRoute;\n}\n\ninterface FabricGraphLayout {\n nodes: GraphNode[];\n edges: GraphEdge[];\n positions: Map<string, FabricGraphPoint>;\n}\n\ninterface Cell {\n char: string;\n style: \"plain\" | \"edge\" | \"dim\" | \"muted\" | \"accent\" | \"success\" | \"warning\" | \"error\";\n}\n\nexport interface FabricGraphAnimation {\n now: number;\n reducedMotion: boolean;\n showHistory: boolean;\n replayRouteId?: string;\n replayLabel?: string;\n}\n\nconst kindRank: Record<GraphNodeKind, number> = {\n agent: 0,\n actor: 1,\n participant: 2,\n component: 3,\n peer: 4,\n group: 5,\n topic: 6,\n state: 7,\n route: 8,\n main: 9,\n};\n\nconst activeRank = (status: string): number =>\n isActiveStatus(status) && status !== \"blocked\" ? 0 : status === \"blocked\" ? 1 : 2;\n\nconst nodeKind = (entity: Entity): GraphNodeKind => {\n if (entity.kind === \"component\") return \"component\";\n if (entity.kind === \"meshParticipant\") return \"participant\";\n if (entity.kind === \"meshTopic\") return \"topic\";\n if (entity.kind === \"meshRoute\") return \"route\";\n if (entity.kind === \"globalActor\" || entity.kind === \"call\" || entity.kind === \"item\") {\n return \"state\";\n }\n return entity.kind;\n};\n\nconst rawIdentity = (entity: Entity): Array<string | undefined> => {\n if (entity.kind === \"main\" || entity.kind === \"peer\" || entity.kind === \"agent\" || entity.kind === \"actor\") {\n return [entity.value.id, entity.value.name];\n }\n if (entity.kind === \"meshParticipant\") {\n return [entity.value.id, entity.value.name, entity.value.participant?.sessionId];\n }\n if (entity.kind === \"meshTopic\") return [entity.value.id, entity.value.name];\n if (entity.kind === \"state\") return [entity.value.key, entity.value.label];\n if (entity.kind === \"meshRoute\") return [entity.value.id];\n if (entity.kind === \"component\") {\n return [entity.value.id, entity.id];\n }\n return [entity.id, entity.label];\n};\n\nconst graphLabel = (value: string, maxWidth: number): string => {\n let output = \"\";\n let width = 0;\n for (const char of value) {\n const charWidth = visibleWidth(char);\n if (width + charWidth > maxWidth) {\n while (width + 1 > maxWidth && output.length > 0) {\n const parts = [...output];\n const removed = parts.pop();\n output = parts.join(\"\");\n width -= removed ? visibleWidth(removed) : 0;\n }\n return output + \"\u2026\";\n }\n output += char;\n width += charWidth;\n }\n return output;\n};\n\nconst graphGlyph = (node: GraphNode, animation: FabricGraphAnimation): string => {\n if (node.stale) return animation.reducedMotion ? \"\u00B7\" : [\"\u25A7\", \"\u25AB\", \"\u00B7\", \" \"][Math.floor(animation.now / 240) % 4]!;\n const frame = Math.floor(animation.now / 160);\n const active = isActiveStatus(node.status);\n if (node.kind === \"main\") return active && !animation.reducedMotion ? [\"\u25C7\", \"\u25C8\", \"\u25C6\", \"\u25C8\"][frame % 4]! : \"\u25C6\";\n if (node.kind === \"actor\") {\n if ((node.queued ?? 0) > 0 && !animation.reducedMotion) return [\"\u25C7\", \"\u25C8\", \"\u25C6\", \"\u25C8\"][frame % 4]!;\n return \"\u25C7\";\n }\n if (node.kind === \"peer\") return \"\u25C8\";\n if (node.kind === \"group\") return \"\u25B1\";\n if (node.kind === \"topic\") {\n const hot = node.activityAt !== undefined && animation.now - node.activityAt <= 10_000;\n return hot && !animation.reducedMotion ? [\"\u25CE\", \"\u25C9\", \"\u29BF\", \"\u25C9\"][frame % 4]! : \"\u25CE\";\n }\n if (node.kind === \"state\") {\n if (/certified|committed|complete/.test(node.status) && !animation.reducedMotion) {\n return [\"\u25EB\", \"\u25A3\", \"\u2726\", \"\u25A3\"][Math.floor(animation.now / 280) % 4]!;\n }\n return \"\u25EB\";\n }\n if (node.kind === \"participant\") return \"\u25A7\";\n if (node.kind === \"component\") return \"\u2B21\";\n if (node.kind === \"agent\" && !animation.reducedMotion) {\n const spawnAge = node.startedAt === undefined ? Number.POSITIVE_INFINITY : animation.now - node.startedAt;\n if (spawnAge >= 0 && spawnAge <= 1_600) {\n return [\"\u00B7\", \"\u25AA\", \"\u25AB\", \"\u25A3\", \"\u25A0\"][Math.min(4, Math.floor(spawnAge / 320))]!;\n }\n if (active) return [\"\u25A0\", \"\u25A3\", \"\u25AA\", \"\u25A3\"][frame % 4]!;\n }\n return \"\u25A0\";\n};\n\nconst PARTICIPANTS_GROUP_ID = \"group:participants\";\nconst MESH_GROUP_ID = \"group:mesh\";\nconst TOPICS_GROUP_ID = \"group:mesh:topics\";\nconst STATE_GROUP_ID = \"group:mesh:state\";\nconst COMPONENTS_GROUP_ID = \"group:components\";\n\nexport interface FabricTopologyGroupSegment {\n id: string;\n label: string;\n}\n\nexport const topologyParticipantGroup = (\n kind: \"root\" | \"peer\" | \"agent\" | \"actor\",\n): FabricTopologyGroupSegment & { order: number } => {\n if (kind === \"actor\") return { id: \"actors\", label: \"Actors\", order: 2 };\n if (kind === \"agent\") return { id: \"agents\", label: \"Agents\", order: 1 };\n return { id: \"sessions\", label: \"Sessions\", order: 0 };\n};\n\nconst titleSegment = (value: string): string =>\n value.length === 0 ? value : value[0]!.toUpperCase() + value.slice(1);\n\nconst namespaceParts = (value: string): string[] =>\n value.split(/[.:/]+/).map((part) => part.trim()).filter(Boolean);\n\nexport const topologyTopicGroupPath = (name: string): FabricTopologyGroupSegment[] => {\n const parts = namespaceParts(name);\n if (parts[0] === \"fabric\") {\n return [\n { id: \"fabric\", label: \"Fabric\" },\n ...(parts.length > 2 && parts[1]\n ? [{ id: `fabric:${parts[1]}`, label: titleSegment(parts[1]) }]\n : []),\n ];\n }\n return [\n { id: \"project\", label: \"Project topics\" },\n ...(parts.length > 1 && parts[0]\n ? [{ id: `project:${parts[0]}`, label: parts[0] }]\n : []),\n ];\n};\n\nexport const topologyStateGroupPath = (key: string): FabricTopologyGroupSegment[] => {\n const parts = key.split(\"/\").map((part) => part.trim()).filter(Boolean);\n if (parts[0] === \"state\") {\n const path: FabricTopologyGroupSegment[] = [{ id: \"world\", label: \"World state\" }];\n if (parts[1] === \"complexity\") {\n let prefix = \"world:complexity\";\n path.push({ id: prefix, label: \"Complexity\" });\n for (const directory of parts.slice(2, -1)) {\n prefix += `:${directory}`;\n path.push({ id: prefix, label: directory });\n }\n } else {\n let prefix = \"world\";\n for (const directory of parts.slice(1, -1)) {\n prefix += `:${directory}`;\n path.push({ id: prefix, label: titleSegment(directory) });\n }\n }\n return path;\n }\n if (parts[0] === \"schema\") {\n const path: FabricTopologyGroupSegment[] = [{ id: \"schema\", label: \"Schema\" }];\n const family = parts[1];\n if (family === \"hypothesis\") path.push({ id: \"schema:hypotheses\", label: \"Hypotheses\" });\n else if (family === \"certificate\") path.push({ id: \"schema:certificates\", label: \"Certificates\" });\n else {\n let prefix = \"schema\";\n for (const directory of parts.slice(1, -1)) {\n prefix += `:${directory}`;\n path.push({ id: prefix, label: titleSegment(directory) });\n }\n }\n return path;\n }\n const path: FabricTopologyGroupSegment[] = [{ id: \"project\", label: \"Project state\" }];\n let prefix = \"project\";\n for (const directory of parts.slice(0, -1)) {\n prefix += `:${directory}`;\n path.push({ id: prefix, label: directory });\n }\n return path;\n};\n\nconst parentReference = (entity: Entity): string | undefined => {\n if (entity.kind === \"agent\") return entity.value.parentId ?? entity.value.actorId;\n if (entity.kind === \"meshParticipant\") return entity.value.participant?.parentId;\n if (entity.kind === \"meshRoute\") return entity.value.fromId;\n return undefined;\n};\n\nconst buildLayout = (\n snapshot: FabricDashboardSnapshot,\n entities: Entity[],\n selectedRun: FabricActivityRun | undefined,\n mesh: FabricProjectMeshModel,\n): FabricGraphLayout => {\n const aliases = new Map<string, string>();\n const entityById = new Map(entities.map((entity) => [entity.id, entity] as const));\n for (const entity of entities) {\n for (const identity of rawIdentity(entity)) {\n if (identity) aliases.set(identity, entity.id);\n }\n }\n const mainId = entities.find((entity) => entity.kind === \"main\")?.id ?? `main:${snapshot.main.id}`;\n aliases.set(snapshot.main.id, mainId);\n aliases.set(snapshot.main.name, mainId);\n aliases.set(\"main\", mainId);\n\n const groups = new Map<string, GraphNode>();\n const ensureGroup = (\n id: string,\n label: string,\n parentId: string,\n order: number,\n ): string => {\n if (!groups.has(id)) {\n groups.set(id, {\n id,\n label,\n status: \"idle\",\n kind: \"group\",\n parentId,\n order,\n x: 0,\n y: 0,\n });\n }\n return id;\n };\n const ensurePath = (\n rootId: string,\n path: FabricTopologyGroupSegment[],\n ): string => {\n let parentId = rootId;\n for (let index = 0; index < path.length; index++) {\n const segment = path[index]!;\n const id = `${rootId}:${segment.id}`;\n parentId = ensureGroup(id, segment.label, parentId, index);\n }\n return parentId;\n };\n const participantCategory = (entity: Entity): FabricTopologyGroupSegment & { order: number } => {\n if (entity.kind === \"actor\") return topologyParticipantGroup(\"actor\");\n if (entity.kind === \"agent\") return topologyParticipantGroup(\"agent\");\n if (entity.kind === \"peer\") return topologyParticipantGroup(\"peer\");\n return topologyParticipantGroup(\n entity.kind === \"meshParticipant\" ? entity.value.participant?.kind ?? \"root\" : \"root\",\n );\n };\n const nodes: GraphNode[] = entities\n .filter((entity) => entity.kind !== \"meshRoute\")\n .map((entity) => {\n const parentRef = parentReference(entity);\n const explicitParentId = parentRef ? aliases.get(parentRef) : undefined;\n let parentId = explicitParentId;\n if (entity.kind !== \"main\") {\n if (entity.kind === \"component\") {\n parentId = ensureGroup(COMPONENTS_GROUP_ID, \"Components\", mainId, 2);\n } else if (\n [\"agent\", \"actor\", \"peer\", \"meshParticipant\"].includes(entity.kind) &&\n (!parentId || parentId === mainId)\n ) {\n ensureGroup(PARTICIPANTS_GROUP_ID, \"Participants\", mainId, 0);\n const category = participantCategory(entity);\n parentId = ensureGroup(\n `${PARTICIPANTS_GROUP_ID}:${category.id}`,\n category.label,\n PARTICIPANTS_GROUP_ID,\n category.order,\n );\n } else if (entity.kind === \"meshTopic\") {\n ensureGroup(MESH_GROUP_ID, \"Mesh\", mainId, 1);\n ensureGroup(TOPICS_GROUP_ID, \"Topics\", MESH_GROUP_ID, 0);\n parentId = ensurePath(TOPICS_GROUP_ID, topologyTopicGroupPath(entity.value.name));\n } else if (entity.kind === \"state\") {\n ensureGroup(MESH_GROUP_ID, \"Mesh\", mainId, 1);\n ensureGroup(STATE_GROUP_ID, \"State\", MESH_GROUP_ID, 1);\n parentId = ensurePath(STATE_GROUP_ID, topologyStateGroupPath(entity.value.key));\n } else if (!parentId) {\n parentId = mainId;\n }\n }\n const activityAt = entity.kind === \"meshTopic\" ? entity.value.lastEventAt : undefined;\n const startedAt = entity.kind === \"agent\" ? entity.value.startedAt : undefined;\n const queued = entity.kind === \"actor\" ? entity.value.queued : undefined;\n const stale = entity.kind === \"meshParticipant\"\n ? entity.value.participant?.stale\n : entity.kind === \"agent\"\n ? entity.value.stale\n : undefined;\n return {\n id: entity.id,\n label: entity.kind === \"main\"\n ? \"Main\"\n : entity.kind === \"state\" && entity.value.label === entity.value.key\n ? entity.value.key.split(\"/\").at(-1) ?? entity.value.label\n : entity.label,\n status: entity.status,\n kind: nodeKind(entity),\n ...(parentId ? { parentId } : {}),\n ...(activityAt !== undefined ? { activityAt } : {}),\n ...(startedAt !== undefined ? { startedAt } : {}),\n ...(queued !== undefined ? { queued } : {}),\n ...(stale !== undefined ? { stale } : {}),\n x: 0,\n y: 0,\n };\n });\n nodes.push(...groups.values());\n\n const nodeById = new Map(nodes.map((node) => [node.id, node] as const));\n const children = new Map<string, GraphNode[]>();\n for (const node of nodes) {\n if (!node.parentId || node.parentId === node.id || !nodeById.has(node.parentId)) continue;\n const bucket = children.get(node.parentId) ?? [];\n bucket.push(node);\n children.set(node.parentId, bucket);\n }\n const inSelectedRun = (node: GraphNode): boolean => {\n const entity = entityById.get(node.id);\n return Boolean(selectedRun && entity?.kind === \"agent\" && entity.value.runId === selectedRun.id);\n };\n for (const bucket of children.values()) {\n bucket.sort(\n (left, right) =>\n activeRank(left.status) - activeRank(right.status) ||\n Number(inSelectedRun(right)) - Number(inSelectedRun(left)) ||\n (left.order ?? 0) - (right.order ?? 0) ||\n kindRank[left.kind] - kindRank[right.kind] ||\n left.label.localeCompare(right.label),\n );\n }\n\n let nextLeafY = 0;\n const visited = new Set<string>();\n const place = (node: GraphNode, depth: number): number => {\n if (visited.has(node.id)) return node.y;\n visited.add(node.id);\n node.x = depth * 20;\n const descendants = (children.get(node.id) ?? []).filter((child) => !visited.has(child.id));\n if (descendants.length === 0) {\n node.y = nextLeafY;\n nextLeafY += 2;\n return node.y;\n }\n const childRows = descendants.map((child) => place(child, depth + 1));\n node.y = (childRows[0]! + childRows[childRows.length - 1]!) / 2;\n return node.y;\n };\n const main = nodeById.get(mainId);\n if (main) place(main, 0);\n for (const node of nodes) {\n if (!visited.has(node.id)) place(node, 1);\n }\n const mainY = main?.y ?? 0;\n for (const node of nodes) node.y = Math.round(node.y - mainY);\n\n const edges: GraphEdge[] = [];\n for (const node of nodes) {\n if (node.parentId && nodeById.has(node.parentId) && node.parentId !== node.id) {\n edges.push({ from: node.parentId, to: node.id, kind: node.kind === \"route\" ? \"route\" : \"structure\" });\n }\n }\n for (const topic of mesh.topics) {\n const target = aliases.get(topic.id) ?? aliases.get(topic.name);\n if (!target) continue;\n for (const subscriber of topic.subscribers) {\n const source = aliases.get(subscriber.id) ?? aliases.get(subscriber.name);\n if (source && source !== target) edges.push({ from: source, to: target, kind: \"subscription\" });\n }\n }\n for (const entity of entities) {\n if (entity.kind !== \"state\" || !entity.value.owner) continue;\n const owner = aliases.get(entity.value.owner);\n const target = aliases.get(entity.value.key) ?? aliases.get(entity.value.label);\n if (owner && target && owner !== target) {\n edges.push({ from: owner, to: target, kind: \"subscription\" });\n }\n }\n for (const dependency of snapshot.componentGraph.edges) {\n const source = aliases.get(dependency.from);\n const target = aliases.get(dependency.to);\n if (source && target && source !== target) {\n edges.push({ from: source, to: target, kind: \"subscription\" });\n }\n }\n for (const route of mesh.routes) {\n const source = aliases.get(route.fromId) ?? aliases.get(route.fromName);\n const target = aliases.get(route.targetId) ?? aliases.get(route.targetName) ?? aliases.get(route.topic);\n if (source && target && source !== target) {\n edges.push({ from: source, to: target, kind: \"route\", route });\n }\n }\n const positions = new Map(nodes.map((node) => [node.id, { x: node.x, y: node.y }] as const));\n for (const edge of edges) {\n if (!edge.route) continue;\n const from = nodeById.get(edge.from);\n const to = nodeById.get(edge.to);\n if (!from || !to) continue;\n positions.set(edge.route.id, {\n x: Math.round((from.x + to.x) / 2),\n y: Math.round((from.y + to.y) / 2),\n });\n }\n return { nodes, edges, positions };\n};\n\nconst lineChar = (mask: number): string => {\n const chars: Record<number, string> = {\n 1: \"\u2502\", 2: \"\u2500\", 3: \"\u2514\", 4: \"\u2502\", 5: \"\u2502\", 6: \"\u250C\", 7: \"\u251C\",\n 8: \"\u2500\", 9: \"\u2518\", 10: \"\u2500\", 11: \"\u2534\", 12: \"\u2510\", 13: \"\u2524\", 14: \"\u252C\", 15: \"\u253C\",\n };\n return chars[mask] ?? \"\u00B7\";\n};\n\nconst styleForStatus = (status: string): Cell[\"style\"] => {\n if ([\"failed\", \"timed_out\", \"error\", \"quarantined\"].includes(status)) return \"error\";\n if ([\"blocked\", \"waiting\"].includes(status)) return \"warning\";\n if (isActiveStatus(status)) return \"success\";\n return \"dim\";\n};\n\nexport const topologyTreeRouteNodeIds = (\n nodes: ReadonlyMap<string, { parentId?: string }>,\n fromId: string,\n toId: string,\n): string[] => {\n if (fromId === toId) return [fromId];\n const ancestry = (start: string): string[] => {\n const path: string[] = [];\n const seen = new Set<string>();\n let current: string | undefined = start;\n while (current && !seen.has(current)) {\n path.push(current);\n seen.add(current);\n current = nodes.get(current)?.parentId;\n }\n return path;\n };\n const fromAncestors = ancestry(fromId);\n const fromSet = new Set(fromAncestors);\n const toAncestors = ancestry(toId);\n const common = toAncestors.find((id) => fromSet.has(id));\n if (!common) return [fromId, toId];\n return [\n ...fromAncestors.slice(0, fromAncestors.indexOf(common) + 1),\n ...toAncestors.slice(0, toAncestors.indexOf(common)).reverse(),\n ];\n};\n\nconst routeGlyph = (route: FabricProjectMeshRoute): string => {\n if (route.status === \"failed\") return \"!\";\n const kind = route.kind.toLowerCase();\n if (kind.includes(\"certif\")) return \"\u2726\";\n if (kind.includes(\"commit\")) return \"\u25C6\";\n if (kind.includes(\"control\") || kind.includes(\"steer\")) return \"\u21AF\";\n if (kind.includes(\"message\") || kind.includes(\"directive\")) return \"\u2709\";\n return \"\u2022\";\n};\n\nconst routeStyle = (route: FabricProjectMeshRoute): Cell[\"style\"] =>\n route.status === \"failed\"\n ? \"error\"\n : route.kind.toLowerCase().includes(\"certif\")\n ? \"warning\"\n : \"accent\";\n\nconst renderCanvas = (\n theme: Theme,\n layout: FabricGraphLayout,\n selectedEntityId: string | undefined,\n width: number,\n height: number,\n camera: FabricGraphPoint,\n animation: FabricGraphAnimation,\n): string[] => {\n const originX = Math.round(camera.x - width / 2);\n const originY = Math.round(camera.y - height / 2);\n const cells: Cell[][] = Array.from({ length: height }, () =>\n Array.from({ length: width }, () => ({ char: \" \", style: \"plain\" as const })),\n );\n const masks: number[][] = Array.from({ length: height }, () => Array<number>(width).fill(0));\n const nodeById = new Map(layout.nodes.map((node) => [node.id, node] as const));\n const selectedRoute = layout.edges.find((edge) => edge.route?.id === selectedEntityId)?.route;\n const related = new Set<string>(selectedEntityId ? [selectedEntityId] : []);\n for (const edge of layout.edges) {\n if (edge.from === selectedEntityId || edge.to === selectedEntityId || edge.route?.id === selectedEntityId) {\n related.add(edge.from);\n related.add(edge.to);\n if (edge.route) related.add(edge.route.id);\n }\n }\n const setCell = (x: number, y: number, char: string, style: Cell[\"style\"]): void => {\n const sx = x - originX;\n const sy = y - originY;\n if (sx < 0 || sx >= width || sy < 0 || sy >= height) return;\n cells[sy]![sx] = { char, style };\n };\n const addMask = (x: number, y: number, mask: number): void => {\n const sx = x - originX;\n const sy = y - originY;\n if (sx < 0 || sx >= width || sy < 0 || sy >= height) return;\n masks[sy]![sx] = (masks[sy]![sx] ?? 0) | mask;\n };\n const horizontal = (x1: number, x2: number, y: number): void => {\n if (y < originY || y >= originY + height) return;\n const worldStart = Math.min(x1, x2);\n const worldEnd = Math.max(x1, x2);\n const start = Math.max(worldStart, originX);\n const end = Math.min(worldEnd, originX + width - 1);\n for (let x = start; x <= end; x++) {\n addMask(x, y, (x > worldStart ? 8 : 0) | (x < worldEnd ? 2 : 0));\n }\n };\n const vertical = (x: number, y1: number, y2: number): void => {\n if (x < originX || x >= originX + width) return;\n const worldStart = Math.min(y1, y2);\n const worldEnd = Math.max(y1, y2);\n const start = Math.max(worldStart, originY);\n const end = Math.min(worldEnd, originY + height - 1);\n for (let y = start; y <= end; y++) {\n addMask(x, y, (y > worldStart ? 1 : 0) | (y < worldEnd ? 4 : 0));\n }\n };\n const edgePathPoints = (from: GraphNode, to: GraphNode): FabricGraphPoint[] => {\n const fromEnd = from.x + Math.min(16, visibleWidth(safeText(from.label)) + 3);\n const toStart = to.x - 2;\n const bend = Math.max(fromEnd + 1, Math.floor((fromEnd + toStart) / 2));\n const points: FabricGraphPoint[] = [];\n const appendLine = (x1: number, y1: number, x2: number, y2: number): void => {\n const dx = Math.sign(x2 - x1);\n const dy = Math.sign(y2 - y1);\n const steps = Math.max(Math.abs(x2 - x1), Math.abs(y2 - y1));\n for (let step = points.length === 0 ? 0 : 1; step <= steps; step++) {\n points.push({ x: x1 + dx * step, y: y1 + dy * step });\n }\n };\n appendLine(fromEnd, from.y, bend, from.y);\n appendLine(bend, from.y, bend, to.y);\n appendLine(bend, to.y, toStart, to.y);\n return points;\n };\n const treePathPoints = (from: GraphNode, to: GraphNode): FabricGraphPoint[] => {\n const ids = topologyTreeRouteNodeIds(nodeById, from.id, to.id);\n const points: FabricGraphPoint[] = [];\n for (let index = 0; index < ids.length - 1; index++) {\n const left = nodeById.get(ids[index]!);\n const right = nodeById.get(ids[index + 1]!);\n if (!left || !right) continue;\n const segment = right.parentId === left.id\n ? edgePathPoints(left, right)\n : left.parentId === right.id\n ? edgePathPoints(right, left).reverse()\n : edgePathPoints(left, right);\n const previous = points.at(-1);\n const first = segment[0];\n if (previous && first && previous.x === first.x && previous.y === first.y) segment.shift();\n points.push(...segment);\n }\n return points;\n };\n\n for (const edge of layout.edges) {\n if (edge.kind !== \"structure\") continue;\n const from = nodeById.get(edge.from);\n const to = nodeById.get(edge.to);\n if (!from || !to) continue;\n const fromEnd = from.x + Math.min(16, visibleWidth(safeText(from.label)) + 3);\n const toStart = to.x - 2;\n const bend = Math.max(fromEnd + 1, Math.floor((fromEnd + toStart) / 2));\n horizontal(fromEnd, bend, from.y);\n vertical(bend, from.y, to.y);\n horizontal(bend, toStart, to.y);\n }\n for (let y = 0; y < height; y++) {\n for (let x = 0; x < width; x++) {\n const mask = masks[y]?.[x] ?? 0;\n if (mask) cells[y]![x] = { char: lineChar(mask), style: \"edge\" };\n }\n }\n\n const traffic = new Map<string, { from: GraphNode; to: GraphNode; routes: FabricProjectMeshRoute[] }>();\n for (const edge of layout.edges) {\n if (edge.kind === \"structure\") continue;\n const from = nodeById.get(edge.from);\n const to = nodeById.get(edge.to);\n if (!from || !to) continue;\n if (!edge.route) {\n if (edge.from !== selectedEntityId && edge.to !== selectedEntityId) continue;\n const points = treePathPoints(from, to);\n for (let index = 0; index < points.length; index += 2) {\n const point = points[index]!;\n setCell(point.x, point.y, \"\u00B7\", \"accent\");\n }\n continue;\n }\n const key = `${edge.from}\\u0000${edge.to}`;\n const group = traffic.get(key) ?? { from, to, routes: [] };\n group.routes.push(edge.route);\n traffic.set(key, group);\n }\n\n for (const group of traffic.values()) {\n const points = treePathPoints(group.from, group.to);\n if (points.length === 0) continue;\n const selected = group.routes.find((route) => route.id === selectedEntityId);\n const replay = group.routes.find((route) => route.id === animation.replayRouteId);\n const newest = group.routes.reduce((latest, route) => route.lastAt > latest.lastAt ? route : latest);\n const route = replay ?? selected ?? newest;\n const age = Math.max(0, animation.now - route.lastAt);\n const connected = group.from.id === selectedEntityId || group.to.id === selectedEntityId;\n const visible = Boolean(replay || selected || connected || animation.showHistory || age <= 60_000);\n if (!visible) continue;\n const fresh = Boolean(replay || age <= 10_000);\n const style: Cell[\"style\"] = selected || replay\n ? routeStyle(route)\n : fresh\n ? \"accent\"\n : \"dim\";\n const stride = fresh ? 1 : 2;\n for (let index = 0; index < points.length; index += stride) {\n const point = points[index]!;\n const trail = fresh && !animation.reducedMotion && index % 3 === 0 ? \"\u2501\" : fresh ? \"\u00B7\" : \"\u254C\";\n setCell(point.x, point.y, trail, style);\n }\n const packetActive = !animation.reducedMotion && Boolean(replay || age <= 2_000);\n if (packetActive) {\n const duration = 1_200;\n const phase = replay\n ? (animation.now % duration) / duration\n : Math.min(0.999, age / 2_000);\n const packetIndex = Math.min(points.length - 1, Math.floor(phase * points.length));\n const point = points[packetIndex]!;\n setCell(point.x, point.y, routeGlyph(route), routeStyle(route));\n if (route.kind.toLowerCase().includes(\"certif\")) {\n const ripple = points[Math.max(0, points.length - 1 - packetIndex)]!;\n setCell(ripple.x, ripple.y, \"\u2726\", \"warning\");\n } else if (route.status === \"failed\") {\n const impact = points.at(-1)!;\n setCell(impact.x, impact.y, Math.floor(animation.now / 120) % 2 === 0 ? \"\u2573\" : \"!\", \"error\");\n }\n const label = graphLabel(animation.replayLabel ?? route.kind, 18);\n let offset = 2;\n for (const char of label) {\n setCell(point.x + offset, point.y, char, routeStyle(route));\n offset += visibleWidth(char);\n }\n } else {\n const count = group.routes.reduce((total, candidate) => total + candidate.count, 0);\n if (count > 1) {\n const point = points[Math.floor(points.length / 2)]!;\n const label = `\u00D7${count}`;\n for (let index = 0; index < label.length; index++) {\n setCell(point.x + index, point.y, label[index]!, style);\n }\n }\n }\n }\n\n for (const node of layout.nodes) {\n const selected = node.id === selectedEntityId;\n const spotlighted = !selectedRoute || related.has(node.id);\n const glyph = selected ? \"\u25A3\" : graphGlyph(node, animation);\n const label = graphLabel(safeText(node.label), 14);\n const nodeStyle = selected\n ? \"accent\"\n : !spotlighted\n ? \"dim\"\n : styleForStatus(node.status);\n setCell(node.x, node.y, glyph, nodeStyle);\n setCell(node.x + 1, node.y, \" \", \"plain\");\n let offset = 0;\n for (const char of label) {\n setCell(node.x + 2 + offset, node.y, char, selected ? \"accent\" : spotlighted ? \"muted\" : \"dim\");\n offset += visibleWidth(char);\n }\n }\n\n const apply = (style: Cell[\"style\"], value: string): string => {\n if (style === \"edge\") return theme.fg(\"borderMuted\", value);\n if (style === \"dim\") return theme.fg(\"dim\", value);\n if (style === \"muted\") return theme.fg(\"muted\", value);\n if (style === \"accent\") return theme.fg(\"accent\", theme.bold(value));\n if (style === \"success\") return theme.fg(\"success\", value);\n if (style === \"warning\") return theme.fg(\"warning\", value);\n if (style === \"error\") return theme.fg(\"error\", value);\n return value;\n };\n return cells.map((row) => {\n let rendered = \"\";\n let style = row[0]?.style ?? \"plain\";\n let run = \"\";\n for (const cell of row) {\n if (cell.style !== style) {\n rendered += apply(style, run);\n style = cell.style;\n run = \"\";\n }\n run += cell.char;\n }\n rendered += apply(style, run);\n return truncateToWidth(rendered, width, \"\");\n });\n};\nconst wrapInspector = (theme: Theme, label: string, value: string, width: number): string[] => {\n const clean = safeText(value);\n const first = truncateToWidth(clean, Math.max(1, width - label.length - 1), Ellipsis.Unicode);\n return [theme.fg(\"muted\", `${label} ${first}`)];\n};\n\nconst inspectorLines = (\n theme: Theme,\n entity: Entity | undefined,\n snapshot: FabricDashboardSnapshot,\n run: FabricActivityRun | undefined,\n width: number,\n height: number,\n invalidate?: () => void,\n): string[] => {\n const inner = Math.max(1, width - 2);\n const border = (value: string): string => theme.fg(\"borderMuted\", value);\n const content: string[] = [];\n if (entity) {\n content.push(theme.fg(\"accent\", theme.bold(truncateToWidth(safeText(entity.label), inner - 2, Ellipsis.Unicode))));\n content.push(colorStatus(theme, entity.status, `${statusGlyph(entity.status)} ${entity.kind} \u00B7 ${entity.status}`));\n content.push(\"\");\n content.push(theme.fg(\"dim\", truncateToWidth(safeText(entityTail(entity, snapshot.now)), inner - 2, Ellipsis.Unicode)));\n if (entity.kind === \"agent\") {\n const agentRun = snapshot.runs.find((candidate) => candidate.id === entity.value.runId) ?? run;\n const phase = agentRun?.phases.find((candidate) => candidate.id === entity.value.phaseId);\n if (agentRun) content.push(theme.fg(\"muted\", `run ${safeText(agentRun.name)}`));\n if (phase) content.push(theme.fg(\"muted\", `phase ${safeText(phase.name)}`));\n if (entity.value.currentTool) content.push(theme.fg(\"muted\", `tool ${safeText(entity.value.currentTool)}`));\n if (entity.value.model) content.push(theme.fg(\"muted\", `model ${safeText(entity.value.model)}`));\n if (entity.value.task) content.push(...wrapInspector(theme, \"task\", entity.value.task, inner - 2));\n } else if (entity.kind === \"actor\") {\n content.push(theme.fg(\"muted\", `runner ${entity.value.runner}`));\n content.push(theme.fg(\"muted\", `queue ${entity.value.queued}`));\n if (entity.value.topics.length > 0) content.push(theme.fg(\"muted\", `${entity.value.topics.length} subscriptions`));\n } else if (entity.kind === \"component\") {\n content.push(theme.fg(\"muted\", `definition ${safeText(entity.value.component)}`));\n content.push(theme.fg(\"muted\", `guarantee ${entity.value.guarantee}`));\n if (entity.value.parentId) {\n content.push(theme.fg(\"muted\", `parent ${safeText(entity.value.parentId)}`));\n }\n if (entity.value.effects?.length) {\n content.push(theme.fg(\"muted\", `effects ${entity.value.effects.length}`));\n }\n if (entity.value.effectConflicts?.length) {\n content.push(theme.fg(\"warning\", `conflicts ${entity.value.effectConflicts.length}`));\n }\n if (entity.value.requirements.length > 0) {\n content.push(theme.fg(\"muted\", `requires ${entity.value.requirements.join(\", \")}`));\n }\n if (entity.value.provisions.length > 0) {\n content.push(theme.fg(\"muted\", `provides ${entity.value.provisions.join(\", \")}`));\n }\n const cycles = snapshot.componentGraph.cycles.filter((cycle) =>\n cycle.includes(entity.value.id),\n );\n if (cycles.length > 0) {\n content.push(theme.fg(\"warning\", `cycles ${cycles.map((cycle) => cycle.join(\" \u2192 \")).join(\"; \")}`));\n }\n if (entity.value.error) content.push(theme.fg(\"error\", safeText(entity.value.error)));\n } else if (entity.kind === \"meshTopic\") {\n content.push(theme.fg(\"muted\", `${entity.value.subscribers.length} subscribers`));\n content.push(theme.fg(\"muted\", `${entity.value.recentEvents} recent events`));\n } else if (entity.kind === \"meshRoute\") {\n content.push(theme.fg(\"muted\", `${safeText(entity.value.fromName)} \u2192 ${safeText(entity.value.targetName)}`));\n content.push(theme.fg(\"muted\", `kind ${safeText(entity.value.kind)}`));\n content.push(theme.fg(\"muted\", `topic ${safeText(entity.value.topic)}`));\n content.push(theme.fg(\"muted\", `count ${entity.value.count}`));\n } else if (entity.kind === \"state\") {\n content.push(theme.fg(\"muted\", `version ${entity.value.version}`));\n if (entity.value.owner) content.push(theme.fg(\"muted\", `owner ${safeText(entity.value.owner)}`));\n const filePreview = loadStateFilePreview(entity.value, snapshot.main.cwd ?? process.cwd());\n if (filePreview) {\n content.push(\"\");\n content.push(theme.fg(\"muted\", `file ${safeText(filePreview.path)}`));\n content.push(...renderStateFilePreview(\n filePreview,\n theme,\n Math.max(1, inner - 2),\n Math.max(0, height - content.length - 3),\n invalidate,\n ));\n }\n }\n } else {\n content.push(theme.fg(\"dim\", \"No node selected\"));\n }\n const title = \" selected \";\n const rows = [border(`\u256D${title}${\"\u2500\".repeat(Math.max(0, inner - visibleWidth(title)))}\u256E`)];\n for (let index = 0; index < height - 2; index++) {\n rows.push(`${border(\"\u2502\")}${padToWidth(` ${content[index] ?? \"\"}`, inner)}${border(\"\u2502\")}`);\n }\n rows.push(border(`\u2570${\"\u2500\".repeat(inner)}\u256F`));\n return rows.slice(0, height);\n};\n\nconst graphContextEntities = (allEntities: Entity[], entities: Entity[]): Entity[] => {\n const byRawId = new Map<string, Entity>();\n for (const entity of allEntities) {\n for (const identity of rawIdentity(entity)) {\n if (identity) byRawId.set(identity, entity);\n }\n }\n const visible = new Map(entities.map((entity) => [entity.id, entity] as const));\n for (const entity of entities) {\n let parentRef = parentReference(entity);\n const visited = new Set<string>();\n while (parentRef && !visited.has(parentRef)) {\n visited.add(parentRef);\n const parent = byRawId.get(parentRef);\n if (!parent) break;\n visible.set(parent.id, parent);\n parentRef = parentReference(parent);\n }\n }\n return allEntities.filter((entity) => visible.has(entity.id));\n};\n\nexport interface FabricTopologyRenderResult {\n lines: string[];\n positions: Map<string, FabricGraphPoint>;\n selectedPosition?: FabricGraphPoint;\n}\n\nexport const renderFabricTopologyPanel = ({\n theme,\n filter,\n selectedEntityId,\n snapshot,\n run,\n mesh,\n allEntities,\n entities,\n width,\n height,\n camera,\n animation,\n invalidate,\n}: {\n theme: Theme;\n filter: StatusFilter;\n selectedEntityId: string | undefined;\n snapshot: FabricDashboardSnapshot;\n run: FabricActivityRun | undefined;\n mesh: FabricProjectMeshModel;\n allEntities: Entity[];\n entities: Entity[];\n width: number;\n height: number;\n camera: FabricGraphPoint;\n animation: FabricGraphAnimation;\n invalidate?: () => void;\n}): FabricTopologyRenderResult => {\n const graphEntities = graphContextEntities(allEntities, entities);\n const layout = buildLayout(snapshot, graphEntities, run, mesh);\n const selectableIds = new Set(entities.map((entity) => entity.id));\n const selected = entities.find((entity) => entity.id === selectedEntityId) ?? entities[0];\n const inspectorWidth = width >= 92 ? Math.min(36, Math.max(30, Math.floor(width * 0.3))) : 0;\n const graphWidth = Math.max(1, width - inspectorWidth);\n const graph = renderCanvas(theme, layout, selected?.id, graphWidth, height, camera, animation);\n const inspector = inspectorWidth > 0\n ? inspectorLines(theme, selected, snapshot, run, inspectorWidth, height, invalidate)\n : [];\n const lines = inspectorWidth > 0\n ? graph.map((line, index) =>\n `${padToWidth(line, graphWidth)}${inspector[index] ?? \"\"}`,\n )\n : graph;\n const active = entities.filter((entity) => isActiveStatus(entity.status)).length;\n const originX = Math.round(camera.x - graphWidth / 2);\n const originY = Math.round(camera.y - height / 2);\n const hiddenLeft = layout.nodes.filter((node) => node.x < originX).length;\n const hiddenRight = layout.nodes.filter((node) => node.x + 2 > originX + graphWidth).length;\n const hiddenUp = layout.nodes.filter((node) => node.y < originY).length;\n const hiddenDown = layout.nodes.filter((node) => node.y >= originY + height).length;\n const offCanvas = new Set(\n layout.nodes\n .filter(\n (node) =>\n node.x < originX || node.x + 2 > originX + graphWidth ||\n node.y < originY || node.y >= originY + height,\n )\n .map((node) => node.id),\n ).size;\n const directions = [\n hiddenLeft > 0 ? \"\u2190\" : \"\",\n hiddenRight > 0 ? \"\u2192\" : \"\",\n hiddenUp > 0 ? \"\u2191\" : \"\",\n hiddenDown > 0 ? \"\u2193\" : \"\",\n ].join(\"\");\n if (lines.length > 0 && height > 1) {\n const legend = [\n offCanvas > 0 ? `${directions} ${offCanvas} off-canvas` : undefined,\n `${active} active`,\n \"\u25C6 Main\",\n \"\u25A0 agent\",\n \"\u25C7 actor\",\n \"\u25CE topic\",\n \"\u25B1 group\",\n animation.replayRouteId ? \"\u25B6 replay\" : animation.showHistory ? \"history\" : \"live decay\",\n \"\u2B21 component\",\n animation.reducedMotion ? \"reduced motion\" : undefined,\n filter !== \"all\" ? `${entities.length}/${allEntities.length} ${filter}` : undefined,\n ].filter((value): value is string => Boolean(value)).join(\" \u00B7 \");\n const graphLegend = padToWidth(theme.fg(\"dim\", truncateToWidth(legend, graphWidth, \"\")), graphWidth);\n lines[0] = truncateToWidth(\n graphLegend + (inspectorWidth > 0 ? inspector[0] ?? \"\" : \"\"),\n width,\n \"\",\n );\n }\n const selectedPosition = selected ? layout.positions.get(selected.id) : undefined;\n return {\n lines,\n positions: new Map(\n [...layout.positions].filter(([id]) => selectableIds.has(id)),\n ),\n ...(selectedPosition ? { selectedPosition } : {}),\n };\n};\n\nexport const directionalGraphTarget = (\n positions: ReadonlyMap<string, FabricGraphPoint>,\n currentId: string | undefined,\n direction: \"left\" | \"right\" | \"up\" | \"down\",\n): string | undefined => {\n const current = currentId ? positions.get(currentId) : undefined;\n if (!current) return positions.keys().next().value;\n let best: { id: string; score: number } | undefined;\n for (const [id, point] of positions) {\n if (id === currentId) continue;\n const dx = point.x - current.x;\n const dy = point.y - current.y;\n const primary = direction === \"left\" ? -dx : direction === \"right\" ? dx : direction === \"up\" ? -dy : dy;\n if (primary <= 0) continue;\n const secondary = direction === \"left\" || direction === \"right\" ? Math.abs(dy) : Math.abs(dx);\n const score = primary + secondary * 2.4;\n if (!best || score < best.score) best = { id, score };\n }\n return best?.id;\n};\n", "import type { Theme } from \"@oh-my-pi/pi-coding-agent\";\nimport { Container, type Focusable, getKeybindings, Spacer, Text } from \"@oh-my-pi/pi-tui\";\nimport { FABRIC_ACTOR_HOST_EVENTS } from \"../actors/types.js\";\nimport type { FabricActorHostEvent } from \"../actors/types.js\";\n\nconst COMMON_HOST_EVENTS: readonly FabricActorHostEvent[] = [\n \"input\",\n \"turn_end\",\n \"agent_end\",\n \"tool_error\",\n \"session_compact\",\n];\nconst commonHostEvents = new Set<FabricActorHostEvent>(COMMON_HOST_EVENTS);\nconst MAX_VISIBLE_HOST_EVENTS = 12;\nconst HOST_EVENT_ORDER: readonly FabricActorHostEvent[] = [\n ...COMMON_HOST_EVENTS,\n ...FABRIC_ACTOR_HOST_EVENTS.filter((event) => !commonHostEvents.has(event)),\n];\n\nconst EVENT_LABELS: Partial<Record<FabricActorHostEvent, string>> = {\n input: \"raw user or extension input\",\n turn_end: \"each completed LLM turn\",\n agent_end: \"a low-level agent run ended\",\n tool_error: \"synthetic notification for a failed tool\",\n session_compact: \"context was compacted\",\n resources_discover: \"skills, prompts, and themes are discovered\",\n session_start: \"a session starts, reloads, or is restored\",\n session_switch: \"the active session changed\",\n session_before_switch: \"before a new or resumed session replaces this one\",\n session_before_branch: \"before a session branch\",\n session_branch: \"after a session branch\",\n session_before_compact: \"before context compaction\",\n \"session.compacting\": \"context compaction is being prepared\",\n session_shutdown: \"before this session runtime shuts down\",\n session_before_tree: \"before session-tree navigation\",\n session_tree: \"after session-tree navigation\",\n goal_updated: \"the active goal changed\",\n before_agent_start: \"expanded prompt and system context before the agent loop\",\n agent_start: \"a low-level agent run started\",\n session_stop: \"the main session is settling\",\n turn_start: \"an LLM turn started\",\n message_start: \"a user, assistant, or tool message started\",\n message_update: \"an assistant streaming update\",\n message_end: \"a user, assistant, or tool message completed\",\n context: \"assembled messages before an LLM request\",\n before_provider_request: \"provider payload assembled before sending\",\n after_provider_response: \"provider response received\",\n tool_execution_start: \"tool execution started\",\n tool_call: \"validated tool call before execution\",\n tool_execution_update: \"streaming tool progress\",\n tool_result: \"final tool result before message persistence\",\n tool_execution_end: \"tool execution completed\",\n user_bash: \"a user ! or !! shell command was submitted\",\n};\n\nexport interface FabricHostEventSelectorOptions {\n theme: Theme;\n /** Currently enabled host events for the actor. */\n currentValue: FabricActorHostEvent[];\n onSelect: (events: FabricActorHostEvent[]) => void;\n onCancel: () => void;\n headerText?: string;\n}\n\n/**\n * A compact multi-select picker for an actor's host-event subscriptions. The\n * supported host events are shown with a [x]/[ ] checkbox; space toggles the\n * row under the cursor, Enter applies the selection, and Esc cancels.\n */\nexport class FabricHostEventSelector extends Container implements Focusable {\n private readonly theme: Theme;\n private readonly onSelectCallback: (events: FabricActorHostEvent[]) => void;\n private readonly onCancelCallback: () => void;\n private readonly listContainer = new Container();\n private enabled: Set<FabricActorHostEvent>;\n private selectedIndex = 0;\n focused = false;\n\n constructor(options: FabricHostEventSelectorOptions) {\n super();\n this.theme = options.theme;\n this.onSelectCallback = options.onSelect;\n this.onCancelCallback = options.onCancel;\n this.enabled = new Set(options.currentValue);\n this.addChild(\n new Text(\n this.theme.fg(\n \"muted\",\n options.headerText ?? \"Toggle the host events this actor subscribes to.\",\n ),\n 0,\n 0,\n ),\n );\n this.addChild(new Spacer(1));\n this.addChild(this.listContainer);\n this.addChild(new Spacer(1));\n this.updateList();\n }\n\n handleInput(keyData: string): void {\n const kb = getKeybindings();\n if (kb.matches(keyData, \"tui.select.up\")) {\n this.selectedIndex =\n this.selectedIndex === 0 ? HOST_EVENT_ORDER.length - 1 : this.selectedIndex - 1;\n this.updateList();\n } else if (kb.matches(keyData, \"tui.select.down\")) {\n this.selectedIndex =\n this.selectedIndex === HOST_EVENT_ORDER.length - 1 ? 0 : this.selectedIndex + 1;\n this.updateList();\n } else if (keyData === \" \") {\n const event = HOST_EVENT_ORDER[this.selectedIndex];\n if (event) {\n if (this.enabled.has(event)) this.enabled.delete(event);\n else this.enabled.add(event);\n this.updateList();\n }\n } else if (kb.matches(keyData, \"tui.select.confirm\")) {\n this.onSelectCallback(HOST_EVENT_ORDER.filter((event) => this.enabled.has(event)));\n } else if (kb.matches(keyData, \"tui.select.cancel\")) {\n this.onCancelCallback();\n }\n }\n\n private updateList(): void {\n this.listContainer.clear();\n const total = HOST_EVENT_ORDER.length;\n const startIndex = Math.max(\n 0,\n Math.min(\n this.selectedIndex - Math.floor(MAX_VISIBLE_HOST_EVENTS / 2),\n total - MAX_VISIBLE_HOST_EVENTS,\n ),\n );\n const endIndex = Math.min(startIndex + MAX_VISIBLE_HOST_EVENTS, total);\n if (startIndex > 0) {\n this.listContainer.addChild(\n new Text(this.theme.fg(\"dim\", ` \u2191 ${startIndex} earlier events`), 0, 0),\n );\n }\n for (let index = startIndex; index < endIndex; index++) {\n const event = HOST_EVENT_ORDER[index]!;\n const selected = index === this.selectedIndex;\n const checked = this.enabled.has(event);\n const box = checked ? this.theme.fg(\"success\", \"[x]\") : this.theme.fg(\"dim\", \"[ ]\");\n const label = `${box} ${event} \u00B7 ${this.theme.fg(\"muted\", EVENT_LABELS[event] ?? event)}`;\n const line = selected\n ? `${this.theme.fg(\"accent\", \"\u2192 \")}${this.theme.fg(\"accent\", label)}`\n : ` ${label}`;\n this.listContainer.addChild(new Text(line, 0, 0));\n }\n if (endIndex < total) {\n this.listContainer.addChild(\n new Text(this.theme.fg(\"dim\", ` \u2193 ${total - endIndex} later events`), 0, 0),\n );\n }\n this.listContainer.addChild(new Spacer(1));\n this.listContainer.addChild(\n new Text(this.theme.fg(\"muted\", \" space toggle \u00B7 enter apply \u00B7 esc cancel\"), 0, 0),\n );\n }\n}\n", "import type { Theme } from \"@oh-my-pi/pi-coding-agent\";\nimport { Ellipsis } from \"@oh-my-pi/pi-tui\";\nimport {\n Container,\n type Focusable,\n SelectList,\n type SelectItem,\n type SelectListLayoutOptions,\n type SelectListTheme,\n Spacer,\n Text,\n} from \"@oh-my-pi/pi-tui\";\nimport type { FabricActorDeliveryPolicy } from \"../actors/delivery-policy.js\";\n\nconst LAYOUT: SelectListLayoutOptions = {\n minPrimaryColumnWidth: 18,\n maxPrimaryColumnWidth: 34,\n};\n\nconst POLICIES: Array<FabricActorDeliveryPolicy & { value: string; label: string; description: string }> = [\n { value: \"mailbox\", label: \"Mailbox only\", description: \"keep output in actor history\", delivery: \"mailbox\", triggerTurn: false },\n { value: \"steer-passive\", label: \"Steer \u00B7 passive\", description: \"deliver now without starting idle Main\", delivery: \"steer\", triggerTurn: false },\n { value: \"steer-active\", label: \"Steer \u00B7 resume Main\", description: \"deliver now and start Main when idle\", delivery: \"steer\", triggerTurn: true },\n { value: \"followUp-passive\", label: \"Follow-up \u00B7 passive\", description: \"deliver after the run without starting idle Main\", delivery: \"followUp\", triggerTurn: false },\n { value: \"followUp-active\", label: \"Follow-up \u00B7 resume Main\", description: \"deliver after the run and start Main when idle\", delivery: \"followUp\", triggerTurn: true },\n { value: \"next-turn\", label: \"Next user turn\", description: \"defer until the next user prompt\", delivery: \"nextTurn\", triggerTurn: false },\n];\n\nconst selectListTheme = (theme: Theme): SelectListTheme => ({\n symbols: (theme as Theme & { symbols: import(\"@oh-my-pi/pi-tui\").SymbolTheme }).symbols,\n selectedPrefix: (text) => theme.fg(\"accent\", text),\n selectedText: (text) => theme.fg(\"accent\", text),\n description: (text) => theme.fg(\"muted\", text),\n scrollInfo: (text) => theme.fg(\"muted\", text),\n noMatch: (text) => theme.fg(\"muted\", text),\n});\n\nexport interface FabricActorDeliverySelectorOptions {\n theme: Theme;\n currentValue: FabricActorDeliveryPolicy;\n onSelect: (policy: FabricActorDeliveryPolicy) => void;\n onCancel: () => void;\n headerText?: string;\n}\n\nexport class FabricActorDeliverySelector extends Container implements Focusable {\n private readonly selectList: SelectList;\n focused = false;\n\n constructor(options: FabricActorDeliverySelectorOptions) {\n super();\n const current = POLICIES.find(\n (policy) =>\n policy.delivery === options.currentValue.delivery &&\n policy.triggerTurn === options.currentValue.triggerTurn,\n )?.value;\n const items: SelectItem[] = POLICIES.map((policy) => ({\n value: policy.value,\n label: `${policy.label}${policy.value === current ? \" \u2713\" : \"\"}`,\n description: policy.description,\n }));\n this.addChild(\n new Text(\n options.theme.fg(\n \"muted\",\n options.headerText ?? \"Choose how actor output enters Main and whether it starts a turn.\",\n ),\n 0,\n 0,\n ),\n );\n this.addChild(new Spacer(1));\n this.selectList = new SelectList(items, items.length, selectListTheme(options.theme), LAYOUT);\n const startIndex = items.findIndex((item) => item.value === current);\n if (startIndex >= 0) this.selectList.setSelectedIndex(startIndex);\n this.selectList.onSelect = (item) => {\n const policy = POLICIES.find((candidate) => candidate.value === item.value);\n if (policy) options.onSelect({ delivery: policy.delivery, triggerTurn: policy.triggerTurn });\n };\n this.selectList.onCancel = options.onCancel;\n this.addChild(this.selectList);\n this.addChild(new Spacer(1));\n }\n\n handleInput(data: string): void {\n this.selectList.handleInput(data);\n }\n}\n", "import type { Theme } from \"@oh-my-pi/pi-coding-agent\";\nimport { Container, type Focusable, getKeybindings, Spacer, Text } from \"@oh-my-pi/pi-tui\";\n\nconst ACTOR_TOOL_ORDER = [\"read\", \"grep\", \"find\", \"ls\", \"bash\", \"edit\", \"write\"] as const;\n\nconst TOOL_LABELS: Record<(typeof ACTOR_TOOL_ORDER)[number], string> = {\n read: \"read files\",\n grep: \"search file contents\",\n find: \"find files by name\",\n ls: \"list directories\",\n bash: \"execute shell commands\",\n edit: \"edit existing files\",\n write: \"write files\",\n};\n\nexport interface FabricActorToolSelectorOptions {\n theme: Theme;\n currentValue: string[];\n onSelect: (tools: string[]) => void;\n onCancel: () => void;\n headerText?: string;\n}\n\nexport class FabricActorToolSelector extends Container implements Focusable {\n private readonly theme: Theme;\n private readonly onSelectCallback: (tools: string[]) => void;\n private readonly onCancelCallback: () => void;\n private readonly listContainer = new Container();\n private enabled: Set<string>;\n private selectedIndex = 0;\n focused = false;\n\n constructor(options: FabricActorToolSelectorOptions) {\n super();\n this.theme = options.theme;\n this.onSelectCallback = options.onSelect;\n this.onCancelCallback = options.onCancel;\n this.enabled = new Set(options.currentValue);\n this.addChild(\n new Text(\n this.theme.fg(\"muted\", options.headerText ?? \"Select the optional tools available to this actor.\"),\n 0,\n 0,\n ),\n );\n this.addChild(new Spacer(1));\n this.addChild(this.listContainer);\n this.addChild(new Spacer(1));\n this.updateList();\n }\n\n handleInput(keyData: string): void {\n const kb = getKeybindings();\n if (kb.matches(keyData, \"tui.select.up\")) {\n this.selectedIndex =\n this.selectedIndex === 0 ? ACTOR_TOOL_ORDER.length - 1 : this.selectedIndex - 1;\n this.updateList();\n } else if (kb.matches(keyData, \"tui.select.down\")) {\n this.selectedIndex =\n this.selectedIndex === ACTOR_TOOL_ORDER.length - 1 ? 0 : this.selectedIndex + 1;\n this.updateList();\n } else if (keyData === \" \") {\n const tool = ACTOR_TOOL_ORDER[this.selectedIndex];\n if (tool) {\n if (this.enabled.has(tool)) this.enabled.delete(tool);\n else this.enabled.add(tool);\n this.updateList();\n }\n } else if (kb.matches(keyData, \"tui.select.confirm\")) {\n const selected = ACTOR_TOOL_ORDER.filter((tool) => this.enabled.has(tool));\n const custom = [...this.enabled].filter(\n (tool) => !ACTOR_TOOL_ORDER.includes(tool as (typeof ACTOR_TOOL_ORDER)[number]),\n );\n this.onSelectCallback([...selected, ...custom]);\n } else if (kb.matches(keyData, \"tui.select.cancel\")) {\n this.onCancelCallback();\n }\n }\n\n private updateList(): void {\n this.listContainer.clear();\n for (let index = 0; index < ACTOR_TOOL_ORDER.length; index++) {\n const tool = ACTOR_TOOL_ORDER[index]!;\n const selected = index === this.selectedIndex;\n const checked = this.enabled.has(tool);\n const box = checked ? this.theme.fg(\"success\", \"[x]\") : this.theme.fg(\"dim\", \"[ ]\");\n const label = `${box} ${tool} \u00B7 ${this.theme.fg(\"muted\", TOOL_LABELS[tool])}`;\n const line = selected\n ? `${this.theme.fg(\"accent\", \"\u2192 \")}${this.theme.fg(\"accent\", label)}`\n : ` ${label}`;\n this.listContainer.addChild(new Text(line, 0, 0));\n }\n this.listContainer.addChild(new Spacer(1));\n this.listContainer.addChild(\n new Text(this.theme.fg(\"muted\", \" space toggle \u00B7 enter apply \u00B7 esc cancel\"), 0, 0),\n );\n }\n}\n", "import type { Theme } from \"@oh-my-pi/pi-coding-agent\";\nimport { Ellipsis } from \"@oh-my-pi/pi-tui\";\nimport {\n Container,\n type Focusable,\n SelectList,\n type SelectItem,\n type SelectListLayoutOptions,\n type SelectListTheme,\n Spacer,\n Text,\n} from \"@oh-my-pi/pi-tui\";\nimport { INHERIT_VALUE } from \"./model-picker.js\";\nimport { THINKING_LEVELS, thinkingLabel } from \"../thinking.js\";\n\nconst LAYOUT: SelectListLayoutOptions = {\n minPrimaryColumnWidth: 8,\n maxPrimaryColumnWidth: 24,\n};\n\nconst selectListTheme = (theme: Theme): SelectListTheme => ({\n symbols: (theme as Theme & { symbols: import(\"@oh-my-pi/pi-tui\").SymbolTheme }).symbols,\n selectedPrefix: (text) => theme.fg(\"accent\", text),\n selectedText: (text) => theme.fg(\"accent\", text),\n description: (text) => theme.fg(\"muted\", text),\n scrollInfo: (text) => theme.fg(\"muted\", text),\n noMatch: (text) => theme.fg(\"muted\", text),\n});\n\nexport interface FabricThinkingSelectorOptions {\n theme: Theme;\n /** The actor's current thinking level, or INHERIT_VALUE for \"use the Fabric default\". */\n currentValue: string;\n onSelect: (value: string) => void;\n onCancel: () => void;\n headerText?: string;\n inheritName?: string;\n}\n\n/**\n * A compact picker for an actor's thinking (reasoning effort) level. Pins an\n * \"Inherit\" row on top (use the Fabric default) followed by the seven OMP\n * thinking levels in order. The current value is marked with a trailing check.\n * Mirrors the look of FabricModelSelector but uses pi-tui's SelectList since\n * the level set is small and fixed (no fuzzy search needed).\n */\nexport class FabricThinkingSelector extends Container implements Focusable {\n private readonly selectList: SelectList;\n private readonly onSelectCallback: (value: string) => void;\n focused = false;\n\n constructor(options: FabricThinkingSelectorOptions) {\n super();\n this.onSelectCallback = options.onSelect;\n const headerText =\n options.headerText ?? \"Thinking level for this actor. Pick Inherit to use the Fabric default.\";\n const inheritName = options.inheritName ?? \"Use the Fabric default thinking level\";\n const items: SelectItem[] = [\n {\n value: INHERIT_VALUE,\n label: `Inherit${options.currentValue === INHERIT_VALUE ? \" \u2713\" : \"\"}`,\n description: inheritName,\n },\n ...THINKING_LEVELS.map((level) => ({\n value: level,\n label: `${thinkingLabel(level)}${options.currentValue === level ? \" \u2713\" : \"\"}`,\n })),\n ];\n const startIndex = items.findIndex((item) => item.value === options.currentValue);\n\n this.addChild(new Text(options.theme.fg(\"muted\", headerText), 0, 0));\n this.addChild(new Spacer(1));\n this.selectList = new SelectList(items, items.length, selectListTheme(options.theme), LAYOUT);\n if (startIndex >= 0) this.selectList.setSelectedIndex(startIndex);\n this.selectList.onSelect = (item) => this.onSelectCallback(item.value);\n this.selectList.onCancel = options.onCancel;\n this.addChild(this.selectList);\n this.addChild(new Spacer(1));\n }\n\n handleInput(data: string): void {\n this.selectList.handleInput(data);\n }\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["getKeybindings", "truncateToWidth", "visibleWidth", "truncateToWidth", "visibleWidth", "truncateToWidth", "visibleWidth", "path", "Ellipsis", "truncateToWidth", "visibleWidth", "visibleWidth", "path", "prefix", "route", "truncateToWidth", "Ellipsis", "Container", "Spacer", "Text", "Container", "getKeybindings", "Spacer", "Text", "Container", "SelectList", "Spacer", "Text", "LAYOUT", "selectListTheme", "Container", "Text", "Spacer", "SelectList", "getKeybindings", "truncateToWidth", "visibleWidth"]
|
|
7
|
+
}
|