@openrig/cli 0.5.8 → 0.5.10
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/daemon/assets/claude-statusline-context.cjs +1 -0
- package/daemon/assets/plugins/openrig-core/README.md +1 -1
- package/daemon/assets/plugins/openrig-core/skills/agent-operated-software/SKILL.md +92 -0
- package/daemon/assets/plugins/openrig-core/skills/agent-operated-workflows/SKILL.md +79 -0
- package/daemon/assets/plugins/openrig-core/skills/forming-an-openrig-mental-model/SKILL.md +2 -2
- package/daemon/assets/plugins/openrig-core/skills/messaging-the-human/SKILL.md +48 -61
- package/daemon/assets/plugins/openrig-core/skills/mission-slice-sop/SKILL.md +19 -5
- package/daemon/assets/plugins/openrig-core/skills/openrig-skills/SKILL.md +4 -2
- package/daemon/assets/plugins/openrig-core/skills/openrig-user/SKILL.md +37 -16
- package/daemon/assets/plugins/openrig-core/skills/software-for-agents/SKILL.md +11 -179
- package/daemon/context-packs/onboarding-width/manifest.yaml +1 -1
- package/daemon/context-packs/onboarding-width/public-what-you-can-do.md +88 -28
- package/daemon/context-packs/skills/agent-operated-software/SKILL.md +92 -0
- package/daemon/context-packs/skills/agent-operated-software/manifest.yaml +10 -0
- package/daemon/context-packs/skills/agent-operated-workflows/SKILL.md +79 -0
- package/daemon/context-packs/skills/agent-operated-workflows/manifest.yaml +10 -0
- package/daemon/context-packs/skills/applying-a-permission-policy/manifest.yaml +1 -1
- package/daemon/context-packs/skills/claude-compaction-restore/manifest.yaml +1 -1
- package/daemon/context-packs/skills/core/agent-starters/manifest.yaml +1 -1
- package/daemon/context-packs/skills/core/agent-startup-and-context-ingestion/SKILL.md +21 -6
- package/daemon/context-packs/skills/core/agent-startup-and-context-ingestion/manifest.yaml +1 -1
- package/daemon/context-packs/skills/core/cross-host-rig-commands/manifest.yaml +1 -1
- package/daemon/context-packs/skills/core/human-in-the-loop/manifest.yaml +1 -1
- package/daemon/context-packs/skills/core/messaging-the-human/SKILL.md +48 -61
- package/daemon/context-packs/skills/core/messaging-the-human/manifest.yaml +3 -3
- package/daemon/context-packs/skills/core/openrig-architect/manifest.yaml +1 -1
- package/daemon/context-packs/skills/core/openrig-cmux/manifest.yaml +1 -1
- package/daemon/context-packs/skills/core/openrig-herdr/manifest.yaml +1 -1
- package/daemon/context-packs/skills/core/openrig-skills/SKILL.md +4 -2
- package/daemon/context-packs/skills/core/openrig-skills/manifest.yaml +1 -1
- package/daemon/context-packs/skills/core/openrig-upgrade/SKILL.md +81 -0
- package/daemon/context-packs/skills/core/openrig-upgrade/manifest.yaml +3 -1
- package/daemon/context-packs/skills/core/openrig-upgrade/scripts/migrate-telemetry-state-0.5.9.mjs +1419 -0
- package/daemon/context-packs/skills/core/rig-bundles-and-shareable-artifacts/manifest.yaml +1 -1
- package/daemon/context-packs/skills/core/rig-lifecycle/manifest.yaml +1 -1
- package/daemon/context-packs/skills/core/session-source-fork/manifest.yaml +1 -1
- package/daemon/context-packs/skills/core/specification-system/manifest.yaml +1 -1
- package/daemon/context-packs/skills/core/topology-mutation-and-seat-management/manifest.yaml +1 -1
- package/daemon/context-packs/skills/core/watchdog/manifest.yaml +1 -1
- package/daemon/context-packs/skills/delegating-work/manifest.yaml +1 -1
- package/daemon/context-packs/skills/forming-an-openrig-mental-model/SKILL.md +2 -2
- package/daemon/context-packs/skills/forming-an-openrig-mental-model/manifest.yaml +1 -1
- package/daemon/context-packs/skills/loading-addressable-markdown/manifest.yaml +1 -1
- package/daemon/context-packs/skills/mission-slice-sop/SKILL.md +19 -5
- package/daemon/context-packs/skills/mission-slice-sop/manifest.yaml +1 -1
- package/daemon/context-packs/skills/openrig-operating-model/manifest.yaml +1 -1
- package/daemon/context-packs/skills/openrig-user/SKILL.md +37 -16
- package/daemon/context-packs/skills/openrig-user/manifest.yaml +1 -1
- package/daemon/context-packs/skills/orienting-to-an-inherited-seat/manifest.yaml +1 -1
- package/daemon/context-packs/skills/pm/backlog-capture/manifest.yaml +1 -1
- package/daemon/context-packs/skills/pm/context-builder/manifest.yaml +1 -1
- package/daemon/context-packs/skills/pm/exec-summary/manifest.yaml +1 -1
- package/daemon/context-packs/skills/pm/office-hours/manifest.yaml +1 -1
- package/daemon/context-packs/skills/pm/plan-review/manifest.yaml +1 -1
- package/daemon/context-packs/skills/pm/requirements-writer/manifest.yaml +1 -1
- package/daemon/context-packs/skills/pm/ui-mockup/manifest.yaml +1 -1
- package/daemon/context-packs/skills/pods/development-team/SKILL.md +40 -139
- package/daemon/context-packs/skills/pods/development-team/manifest.yaml +3 -3
- package/daemon/context-packs/skills/pods/orchestration-team/SKILL.md +40 -60
- package/daemon/context-packs/skills/pods/orchestration-team/manifest.yaml +3 -3
- package/daemon/context-packs/skills/pods/oversight-team/manifest.yaml +1 -1
- package/daemon/context-packs/skills/pods/review-team/SKILL.md +34 -31
- package/daemon/context-packs/skills/pods/review-team/manifest.yaml +3 -3
- package/daemon/context-packs/skills/process/agent-browser/manifest.yaml +1 -1
- package/daemon/context-packs/skills/process/context-engineering/manifest.yaml +1 -1
- package/daemon/context-packs/skills/process/dogfood/manifest.yaml +1 -1
- package/daemon/context-packs/skills/process/frontend-design/manifest.yaml +1 -1
- package/daemon/context-packs/skills/process/systematic-debugging/manifest.yaml +1 -1
- package/daemon/context-packs/skills/process/test-driven-development/SKILL.md +6 -8
- package/daemon/context-packs/skills/process/test-driven-development/manifest.yaml +1 -1
- package/daemon/context-packs/skills/process/verification-before-completion/manifest.yaml +1 -1
- package/daemon/context-packs/skills/queue-handoff/manifest.yaml +1 -1
- package/daemon/context-packs/skills/refocusing/manifest.yaml +1 -1
- package/daemon/context-packs/skills/retiring-and-inheriting-a-seat/manifest.yaml +1 -1
- package/daemon/context-packs/skills/seat-continuity-and-handover/manifest.yaml +1 -1
- package/daemon/context-packs/skills/session-compaction-and-restore/manifest.yaml +1 -1
- package/daemon/context-packs/skills/software-for-agents/SKILL.md +11 -179
- package/daemon/context-packs/skills/software-for-agents/manifest.yaml +3 -3
- package/daemon/context-packs/world-example/manifest.yaml +1 -1
- package/daemon/context-packs/world-example/your-world.md +1 -1
- package/daemon/context-packs/world-public/build-your-world.md +19 -0
- package/daemon/context-packs/world-public/claims.yaml +5 -1
- package/daemon/context-packs/world-public/manifest.yaml +40 -1
- package/daemon/context-packs/world-public/verify-world.sh +25 -9
- package/daemon/dist/adapters/claude-code-adapter.d.ts.map +1 -1
- package/daemon/dist/adapters/claude-code-adapter.js +4 -2
- package/daemon/dist/adapters/claude-code-adapter.js.map +1 -1
- package/daemon/dist/build-info.js +3 -3
- package/daemon/dist/db/all-migrations.d.ts +1 -1
- package/daemon/dist/db/all-migrations.d.ts.map +1 -1
- package/daemon/dist/db/all-migrations.js +3 -1
- package/daemon/dist/db/all-migrations.js.map +1 -1
- package/daemon/dist/db/migrations/046_seat_identity_verdicts.d.ts +8 -5
- package/daemon/dist/db/migrations/046_seat_identity_verdicts.d.ts.map +1 -1
- package/daemon/dist/db/migrations/046_seat_identity_verdicts.js +8 -5
- package/daemon/dist/db/migrations/046_seat_identity_verdicts.js.map +1 -1
- package/daemon/dist/db/migrations/079_workflow_lifecycle_parallel.d.ts +8 -0
- package/daemon/dist/db/migrations/079_workflow_lifecycle_parallel.d.ts.map +1 -0
- package/daemon/dist/db/migrations/079_workflow_lifecycle_parallel.js +50 -0
- package/daemon/dist/db/migrations/079_workflow_lifecycle_parallel.js.map +1 -0
- package/daemon/dist/domain/active-occupant.d.ts +6 -1
- package/daemon/dist/domain/active-occupant.d.ts.map +1 -1
- package/daemon/dist/domain/active-occupant.js +47 -0
- package/daemon/dist/domain/active-occupant.js.map +1 -1
- package/daemon/dist/domain/bootstrap-orchestrator.d.ts.map +1 -1
- package/daemon/dist/domain/bootstrap-orchestrator.js +8 -1
- package/daemon/dist/domain/bootstrap-orchestrator.js.map +1 -1
- package/daemon/dist/domain/bundle-context-packs-router.d.ts +3 -3
- package/daemon/dist/domain/bundle-context-packs-router.d.ts.map +1 -1
- package/daemon/dist/domain/bundle-skills-router.d.ts +3 -0
- package/daemon/dist/domain/bundle-skills-router.d.ts.map +1 -1
- package/daemon/dist/domain/bundle-skills-router.js +5 -1
- package/daemon/dist/domain/bundle-skills-router.js.map +1 -1
- package/daemon/dist/domain/claim-service.d.ts +2 -0
- package/daemon/dist/domain/claim-service.d.ts.map +1 -1
- package/daemon/dist/domain/claim-service.js +33 -12
- package/daemon/dist/domain/claim-service.js.map +1 -1
- package/daemon/dist/domain/context-packs/context-pack-library-service.d.ts.map +1 -1
- package/daemon/dist/domain/context-packs/context-pack-library-service.js +9 -1
- package/daemon/dist/domain/context-packs/context-pack-library-service.js.map +1 -1
- package/daemon/dist/domain/context-packs/context-pack-types.d.ts +25 -0
- package/daemon/dist/domain/context-packs/context-pack-types.d.ts.map +1 -1
- package/daemon/dist/domain/context-packs/context-pack-types.js +3 -1
- package/daemon/dist/domain/context-packs/context-pack-types.js.map +1 -1
- package/daemon/dist/domain/context-packs/manifest-parser.d.ts.map +1 -1
- package/daemon/dist/domain/context-packs/manifest-parser.js +143 -3
- package/daemon/dist/domain/context-packs/manifest-parser.js.map +1 -1
- package/daemon/dist/domain/context-packs/profile-composer.d.ts +22 -1
- package/daemon/dist/domain/context-packs/profile-composer.d.ts.map +1 -1
- package/daemon/dist/domain/context-packs/profile-composer.js +105 -40
- package/daemon/dist/domain/context-packs/profile-composer.js.map +1 -1
- package/daemon/dist/domain/context-usage-store.d.ts +4 -0
- package/daemon/dist/domain/context-usage-store.d.ts.map +1 -1
- package/daemon/dist/domain/context-usage-store.js +8 -4
- package/daemon/dist/domain/context-usage-store.js.map +1 -1
- package/daemon/dist/domain/crash-cart-conductor.d.ts +13 -0
- package/daemon/dist/domain/crash-cart-conductor.d.ts.map +1 -1
- package/daemon/dist/domain/crash-cart-conductor.js +3 -1
- package/daemon/dist/domain/crash-cart-conductor.js.map +1 -1
- package/daemon/dist/domain/execution-view.d.ts.map +1 -1
- package/daemon/dist/domain/execution-view.js +145 -16
- package/daemon/dist/domain/execution-view.js.map +1 -1
- package/daemon/dist/domain/gateway/channel-operations.d.ts +39 -0
- package/daemon/dist/domain/gateway/channel-operations.d.ts.map +1 -0
- package/daemon/dist/domain/gateway/channel-operations.js +35 -0
- package/daemon/dist/domain/gateway/channel-operations.js.map +1 -0
- package/daemon/dist/domain/gateway/gateway-subsystem.d.ts +3 -0
- package/daemon/dist/domain/gateway/gateway-subsystem.d.ts.map +1 -1
- package/daemon/dist/domain/gateway/gateway-subsystem.js +3 -0
- package/daemon/dist/domain/gateway/gateway-subsystem.js.map +1 -1
- package/daemon/dist/domain/gateway/human-readiness.d.ts +37 -0
- package/daemon/dist/domain/gateway/human-readiness.d.ts.map +1 -0
- package/daemon/dist/domain/gateway/human-readiness.js +44 -0
- package/daemon/dist/domain/gateway/human-readiness.js.map +1 -0
- package/daemon/dist/domain/gateway/human-registry.d.ts +2 -7
- package/daemon/dist/domain/gateway/human-registry.d.ts.map +1 -1
- package/daemon/dist/domain/gateway/human-registry.js +2 -7
- package/daemon/dist/domain/gateway/human-registry.js.map +1 -1
- package/daemon/dist/domain/gateway/slack/inbound.d.ts +16 -1
- package/daemon/dist/domain/gateway/slack/inbound.d.ts.map +1 -1
- package/daemon/dist/domain/gateway/slack/inbound.js +35 -12
- package/daemon/dist/domain/gateway/slack/inbound.js.map +1 -1
- package/daemon/dist/domain/gateway/slack/queue-access.d.ts +1 -0
- package/daemon/dist/domain/gateway/slack/queue-access.d.ts.map +1 -1
- package/daemon/dist/domain/gateway/slack/queue-access.js +1 -0
- package/daemon/dist/domain/gateway/slack/queue-access.js.map +1 -1
- package/daemon/dist/domain/gateway/slack/slack-subsystem.d.ts +18 -0
- package/daemon/dist/domain/gateway/slack/slack-subsystem.d.ts.map +1 -1
- package/daemon/dist/domain/gateway/slack/slack-subsystem.js +62 -8
- package/daemon/dist/domain/gateway/slack/slack-subsystem.js.map +1 -1
- package/daemon/dist/domain/gateway/slack/socket-inbound.d.ts +13 -0
- package/daemon/dist/domain/gateway/slack/socket-inbound.d.ts.map +1 -1
- package/daemon/dist/domain/gateway/slack/socket-inbound.js +59 -1
- package/daemon/dist/domain/gateway/slack/socket-inbound.js.map +1 -1
- package/daemon/dist/domain/gateway/slack/state-store.d.ts +21 -0
- package/daemon/dist/domain/gateway/slack/state-store.d.ts.map +1 -1
- package/daemon/dist/domain/gateway/slack/state-store.js +28 -1
- package/daemon/dist/domain/gateway/slack/state-store.js.map +1 -1
- package/daemon/dist/domain/gateway/slack/thread-routing.d.ts +2 -0
- package/daemon/dist/domain/gateway/slack/thread-routing.d.ts.map +1 -1
- package/daemon/dist/domain/gateway/slack/thread-routing.js +6 -1
- package/daemon/dist/domain/gateway/slack/thread-routing.js.map +1 -1
- package/daemon/dist/domain/gateway/slack/thread-seat-map.d.ts +4 -0
- package/daemon/dist/domain/gateway/slack/thread-seat-map.d.ts.map +1 -1
- package/daemon/dist/domain/gateway/slack/thread-seat-map.js +11 -0
- package/daemon/dist/domain/gateway/slack/thread-seat-map.js.map +1 -1
- package/daemon/dist/domain/health-checkpoints.d.ts +57 -0
- package/daemon/dist/domain/health-checkpoints.d.ts.map +1 -0
- package/daemon/dist/domain/health-checkpoints.js +198 -0
- package/daemon/dist/domain/health-checkpoints.js.map +1 -0
- package/daemon/dist/domain/health-context.d.ts +14 -0
- package/daemon/dist/domain/health-context.d.ts.map +1 -0
- package/daemon/dist/domain/health-context.js +93 -0
- package/daemon/dist/domain/health-context.js.map +1 -0
- package/daemon/dist/domain/health-detectors.d.ts +106 -0
- package/daemon/dist/domain/health-detectors.d.ts.map +1 -0
- package/daemon/dist/domain/health-detectors.js +392 -0
- package/daemon/dist/domain/health-detectors.js.map +1 -0
- package/daemon/dist/domain/health-diagnosis.d.ts +143 -0
- package/daemon/dist/domain/health-diagnosis.d.ts.map +1 -0
- package/daemon/dist/domain/health-diagnosis.js +249 -0
- package/daemon/dist/domain/health-diagnosis.js.map +1 -0
- package/daemon/dist/domain/health-passive-ceremony.d.ts +19 -0
- package/daemon/dist/domain/health-passive-ceremony.d.ts.map +1 -0
- package/daemon/dist/domain/health-passive-ceremony.js +234 -0
- package/daemon/dist/domain/health-passive-ceremony.js.map +1 -0
- package/daemon/dist/domain/health-policy.d.ts +45 -0
- package/daemon/dist/domain/health-policy.d.ts.map +1 -0
- package/daemon/dist/domain/health-policy.js +89 -0
- package/daemon/dist/domain/health-policy.js.map +1 -0
- package/daemon/dist/domain/health-projection.d.ts +237 -0
- package/daemon/dist/domain/health-projection.d.ts.map +1 -0
- package/daemon/dist/domain/health-projection.js +312 -0
- package/daemon/dist/domain/health-projection.js.map +1 -0
- package/daemon/dist/domain/instance-initialization.d.ts +25 -0
- package/daemon/dist/domain/instance-initialization.d.ts.map +1 -0
- package/daemon/dist/domain/instance-initialization.js +81 -0
- package/daemon/dist/domain/instance-initialization.js.map +1 -0
- package/daemon/dist/domain/lifecycle-manifest.d.ts +19 -0
- package/daemon/dist/domain/lifecycle-manifest.d.ts.map +1 -0
- package/daemon/dist/domain/lifecycle-manifest.js +73 -0
- package/daemon/dist/domain/lifecycle-manifest.js.map +1 -0
- package/daemon/dist/domain/mission-control/mission-control-read-layer.d.ts.map +1 -1
- package/daemon/dist/domain/mission-control/mission-control-read-layer.js +14 -11
- package/daemon/dist/domain/mission-control/mission-control-read-layer.js.map +1 -1
- package/daemon/dist/domain/model-divergence/current-generation-record.d.ts +36 -36
- package/daemon/dist/domain/model-divergence/current-generation-record.d.ts.map +1 -1
- package/daemon/dist/domain/model-divergence/current-generation-record.js +104 -135
- package/daemon/dist/domain/model-divergence/current-generation-record.js.map +1 -1
- package/daemon/dist/domain/native-process-lineage.d.ts +10 -0
- package/daemon/dist/domain/native-process-lineage.d.ts.map +1 -0
- package/daemon/dist/domain/native-process-lineage.js +86 -0
- package/daemon/dist/domain/native-process-lineage.js.map +1 -0
- package/daemon/dist/domain/native-resume-probe.js +12 -1
- package/daemon/dist/domain/native-resume-probe.js.map +1 -1
- package/daemon/dist/domain/node-inventory.d.ts +2 -0
- package/daemon/dist/domain/node-inventory.d.ts.map +1 -1
- package/daemon/dist/domain/node-inventory.js +4 -1
- package/daemon/dist/domain/node-inventory.js.map +1 -1
- package/daemon/dist/domain/node-launcher.d.ts +3 -0
- package/daemon/dist/domain/node-launcher.d.ts.map +1 -1
- package/daemon/dist/domain/node-launcher.js +21 -8
- package/daemon/dist/domain/node-launcher.js.map +1 -1
- package/daemon/dist/domain/pane-binding-observation.d.ts +22 -0
- package/daemon/dist/domain/pane-binding-observation.d.ts.map +1 -0
- package/daemon/dist/domain/pane-binding-observation.js +54 -0
- package/daemon/dist/domain/pane-binding-observation.js.map +1 -0
- package/daemon/dist/domain/policies/parked-owner-consumer.js +1 -1
- package/daemon/dist/domain/policies/parked-owner-consumer.js.map +1 -1
- package/daemon/dist/domain/policies/workflow-keepalive.d.ts.map +1 -1
- package/daemon/dist/domain/policies/workflow-keepalive.js +16 -2
- package/daemon/dist/domain/policies/workflow-keepalive.js.map +1 -1
- package/daemon/dist/domain/profile-resolver.d.ts +12 -0
- package/daemon/dist/domain/profile-resolver.d.ts.map +1 -1
- package/daemon/dist/domain/profile-resolver.js +60 -0
- package/daemon/dist/domain/profile-resolver.js.map +1 -1
- package/daemon/dist/domain/project-lifecycle-compiler.d.ts +35 -0
- package/daemon/dist/domain/project-lifecycle-compiler.d.ts.map +1 -0
- package/daemon/dist/domain/project-lifecycle-compiler.js +219 -0
- package/daemon/dist/domain/project-lifecycle-compiler.js.map +1 -0
- package/daemon/dist/domain/provider/claude-usage-reader.d.ts +1 -1
- package/daemon/dist/domain/provider/claude-usage-reader.d.ts.map +1 -1
- package/daemon/dist/domain/provider/claude-usage-reader.js +28 -18
- package/daemon/dist/domain/provider/claude-usage-reader.js.map +1 -1
- package/daemon/dist/domain/queue-repository.d.ts +19 -1
- package/daemon/dist/domain/queue-repository.d.ts.map +1 -1
- package/daemon/dist/domain/queue-repository.js +66 -5
- package/daemon/dist/domain/queue-repository.js.map +1 -1
- package/daemon/dist/domain/queue-retention.d.ts +3 -4
- package/daemon/dist/domain/queue-retention.d.ts.map +1 -1
- package/daemon/dist/domain/queue-retention.js +5 -8
- package/daemon/dist/domain/queue-retention.js.map +1 -1
- package/daemon/dist/domain/queue-transition-log.d.ts +33 -0
- package/daemon/dist/domain/queue-transition-log.d.ts.map +1 -1
- package/daemon/dist/domain/queue-transition-log.js +152 -0
- package/daemon/dist/domain/queue-transition-log.js.map +1 -1
- package/daemon/dist/domain/queue-wait-backoff.d.ts +21 -0
- package/daemon/dist/domain/queue-wait-backoff.d.ts.map +1 -0
- package/daemon/dist/domain/queue-wait-backoff.js +96 -0
- package/daemon/dist/domain/queue-wait-backoff.js.map +1 -0
- package/daemon/dist/domain/queue-wake-repository.d.ts +1 -0
- package/daemon/dist/domain/queue-wake-repository.d.ts.map +1 -1
- package/daemon/dist/domain/queue-wake-repository.js +8 -3
- package/daemon/dist/domain/queue-wake-repository.js.map +1 -1
- package/daemon/dist/domain/restore-attempt-receipt.d.ts +34 -0
- package/daemon/dist/domain/restore-attempt-receipt.d.ts.map +1 -0
- package/daemon/dist/domain/restore-attempt-receipt.js +59 -0
- package/daemon/dist/domain/restore-attempt-receipt.js.map +1 -0
- package/daemon/dist/domain/restore-orchestrator.d.ts +57 -24
- package/daemon/dist/domain/restore-orchestrator.d.ts.map +1 -1
- package/daemon/dist/domain/restore-orchestrator.js +152 -26
- package/daemon/dist/domain/restore-orchestrator.js.map +1 -1
- package/daemon/dist/domain/restore-topology.d.ts +14 -0
- package/daemon/dist/domain/restore-topology.d.ts.map +1 -0
- package/daemon/dist/domain/restore-topology.js +27 -0
- package/daemon/dist/domain/restore-topology.js.map +1 -0
- package/daemon/dist/domain/rig-lifecycle-service.d.ts.map +1 -1
- package/daemon/dist/domain/rig-lifecycle-service.js +9 -0
- package/daemon/dist/domain/rig-lifecycle-service.js.map +1 -1
- package/daemon/dist/domain/rigspec-instantiator.d.ts +19 -0
- package/daemon/dist/domain/rigspec-instantiator.d.ts.map +1 -1
- package/daemon/dist/domain/rigspec-instantiator.js +65 -1
- package/daemon/dist/domain/rigspec-instantiator.js.map +1 -1
- package/daemon/dist/domain/rigspec-preflight.d.ts +8 -0
- package/daemon/dist/domain/rigspec-preflight.d.ts.map +1 -1
- package/daemon/dist/domain/rigspec-preflight.js +4 -0
- package/daemon/dist/domain/rigspec-preflight.js.map +1 -1
- package/daemon/dist/domain/seat-attention-reconciler.d.ts +23 -1
- package/daemon/dist/domain/seat-attention-reconciler.d.ts.map +1 -1
- package/daemon/dist/domain/seat-attention-reconciler.js +97 -46
- package/daemon/dist/domain/seat-attention-reconciler.js.map +1 -1
- package/daemon/dist/domain/seat-identity-reconciler.d.ts.map +1 -1
- package/daemon/dist/domain/seat-identity-reconciler.js +15 -6
- package/daemon/dist/domain/seat-identity-reconciler.js.map +1 -1
- package/daemon/dist/domain/seat-lifecycle-service.d.ts +47 -1
- package/daemon/dist/domain/seat-lifecycle-service.d.ts.map +1 -1
- package/daemon/dist/domain/seat-lifecycle-service.js +525 -29
- package/daemon/dist/domain/seat-lifecycle-service.js.map +1 -1
- package/daemon/dist/domain/session-registry.d.ts +8 -1
- package/daemon/dist/domain/session-registry.d.ts.map +1 -1
- package/daemon/dist/domain/session-registry.js +19 -0
- package/daemon/dist/domain/session-registry.js.map +1 -1
- package/daemon/dist/domain/skill-catalog.d.ts +81 -0
- package/daemon/dist/domain/skill-catalog.d.ts.map +1 -0
- package/daemon/dist/domain/skill-catalog.js +827 -0
- package/daemon/dist/domain/skill-catalog.js.map +1 -0
- package/daemon/dist/domain/skill-discovery.d.ts +3 -0
- package/daemon/dist/domain/skill-discovery.d.ts.map +1 -1
- package/daemon/dist/domain/skill-discovery.js +1 -1
- package/daemon/dist/domain/skill-discovery.js.map +1 -1
- package/daemon/dist/domain/snapshot-capture.d.ts +4 -1
- package/daemon/dist/domain/snapshot-capture.d.ts.map +1 -1
- package/daemon/dist/domain/snapshot-capture.js +38 -2
- package/daemon/dist/domain/snapshot-capture.js.map +1 -1
- package/daemon/dist/domain/snapshot-repository.d.ts +15 -1
- package/daemon/dist/domain/snapshot-repository.d.ts.map +1 -1
- package/daemon/dist/domain/snapshot-repository.js +103 -1
- package/daemon/dist/domain/snapshot-repository.js.map +1 -1
- package/daemon/dist/domain/startup-orchestrator.d.ts +2 -0
- package/daemon/dist/domain/startup-orchestrator.d.ts.map +1 -1
- package/daemon/dist/domain/startup-orchestrator.js +12 -0
- package/daemon/dist/domain/startup-orchestrator.js.map +1 -1
- package/daemon/dist/domain/system-world.d.ts +45 -0
- package/daemon/dist/domain/system-world.d.ts.map +1 -0
- package/daemon/dist/domain/system-world.js +123 -0
- package/daemon/dist/domain/system-world.js.map +1 -0
- package/daemon/dist/domain/telemetry-state-paths.d.ts +7 -0
- package/daemon/dist/domain/telemetry-state-paths.d.ts.map +1 -0
- package/daemon/dist/domain/telemetry-state-paths.js +20 -0
- package/daemon/dist/domain/telemetry-state-paths.js.map +1 -0
- package/daemon/dist/domain/types.d.ts +106 -4
- package/daemon/dist/domain/types.d.ts.map +1 -1
- package/daemon/dist/domain/types.js.map +1 -1
- package/daemon/dist/domain/user-settings/settings-store.d.ts +16 -3
- package/daemon/dist/domain/user-settings/settings-store.d.ts.map +1 -1
- package/daemon/dist/domain/user-settings/settings-store.js +137 -41
- package/daemon/dist/domain/user-settings/settings-store.js.map +1 -1
- package/daemon/dist/domain/watchdog-jobs-repository.d.ts +2 -0
- package/daemon/dist/domain/watchdog-jobs-repository.d.ts.map +1 -1
- package/daemon/dist/domain/watchdog-jobs-repository.js +5 -0
- package/daemon/dist/domain/watchdog-jobs-repository.js.map +1 -1
- package/daemon/dist/domain/watchdog-policy-engine.d.ts +7 -23
- package/daemon/dist/domain/watchdog-policy-engine.d.ts.map +1 -1
- package/daemon/dist/domain/watchdog-policy-engine.js +44 -226
- package/daemon/dist/domain/watchdog-policy-engine.js.map +1 -1
- package/daemon/dist/domain/workflow-boot-sweep.d.ts.map +1 -1
- package/daemon/dist/domain/workflow-boot-sweep.js +20 -6
- package/daemon/dist/domain/workflow-boot-sweep.js.map +1 -1
- package/daemon/dist/domain/workflow-instance-store.d.ts +33 -1
- package/daemon/dist/domain/workflow-instance-store.d.ts.map +1 -1
- package/daemon/dist/domain/workflow-instance-store.js +127 -2
- package/daemon/dist/domain/workflow-instance-store.js.map +1 -1
- package/daemon/dist/domain/workflow-keepalive-arming.d.ts +7 -5
- package/daemon/dist/domain/workflow-keepalive-arming.d.ts.map +1 -1
- package/daemon/dist/domain/workflow-keepalive-arming.js +27 -16
- package/daemon/dist/domain/workflow-keepalive-arming.js.map +1 -1
- package/daemon/dist/domain/workflow-projector.d.ts +30 -2
- package/daemon/dist/domain/workflow-projector.d.ts.map +1 -1
- package/daemon/dist/domain/workflow-projector.js +375 -14
- package/daemon/dist/domain/workflow-projector.js.map +1 -1
- package/daemon/dist/domain/workflow-runtime.d.ts +62 -2
- package/daemon/dist/domain/workflow-runtime.d.ts.map +1 -1
- package/daemon/dist/domain/workflow-runtime.js +391 -28
- package/daemon/dist/domain/workflow-runtime.js.map +1 -1
- package/daemon/dist/domain/workflow-spec-cache.d.ts +10 -2
- package/daemon/dist/domain/workflow-spec-cache.d.ts.map +1 -1
- package/daemon/dist/domain/workflow-spec-cache.js +101 -0
- package/daemon/dist/domain/workflow-spec-cache.js.map +1 -1
- package/daemon/dist/domain/workflow-types.d.ts +46 -1
- package/daemon/dist/domain/workflow-types.d.ts.map +1 -1
- package/daemon/dist/domain/workflow-types.js.map +1 -1
- package/daemon/dist/domain/workflow-validator.d.ts.map +1 -1
- package/daemon/dist/domain/workflow-validator.js +38 -3
- package/daemon/dist/domain/workflow-validator.js.map +1 -1
- package/daemon/dist/domain/workspace/default-workspace-scaffold.d.ts +38 -9
- package/daemon/dist/domain/workspace/default-workspace-scaffold.d.ts.map +1 -1
- package/daemon/dist/domain/workspace/default-workspace-scaffold.js +93 -347
- package/daemon/dist/domain/workspace/default-workspace-scaffold.js.map +1 -1
- package/daemon/dist/gateway-human-registry-surface.d.ts +1 -0
- package/daemon/dist/gateway-human-registry-surface.d.ts.map +1 -1
- package/daemon/dist/gateway-human-registry-surface.js +1 -0
- package/daemon/dist/gateway-human-registry-surface.js.map +1 -1
- package/daemon/dist/gateway-slack-surface.d.ts +1 -0
- package/daemon/dist/gateway-slack-surface.d.ts.map +1 -1
- package/daemon/dist/gateway-slack-surface.js +1 -0
- package/daemon/dist/gateway-slack-surface.js.map +1 -1
- package/daemon/dist/health-detectors-surface.d.ts +2 -0
- package/daemon/dist/health-detectors-surface.d.ts.map +1 -0
- package/daemon/dist/health-detectors-surface.js +2 -0
- package/daemon/dist/health-detectors-surface.js.map +1 -0
- package/daemon/dist/health-projection-surface.d.ts +2 -0
- package/daemon/dist/health-projection-surface.d.ts.map +1 -0
- package/daemon/dist/health-projection-surface.js +2 -0
- package/daemon/dist/health-projection-surface.js.map +1 -0
- package/daemon/dist/index.d.ts.map +1 -1
- package/daemon/dist/index.js +15 -0
- package/daemon/dist/index.js.map +1 -1
- package/daemon/dist/instance-initialization-surface.d.ts +3 -0
- package/daemon/dist/instance-initialization-surface.d.ts.map +1 -0
- package/daemon/dist/instance-initialization-surface.js +3 -0
- package/daemon/dist/instance-initialization-surface.js.map +1 -0
- package/daemon/dist/lib/pane-envelope.d.ts.map +1 -1
- package/daemon/dist/lib/pane-envelope.js +4 -1
- package/daemon/dist/lib/pane-envelope.js.map +1 -1
- package/daemon/dist/project-lifecycle-surface.d.ts +3 -0
- package/daemon/dist/project-lifecycle-surface.d.ts.map +1 -0
- package/daemon/dist/project-lifecycle-surface.js +3 -0
- package/daemon/dist/project-lifecycle-surface.js.map +1 -0
- package/daemon/dist/routes/bundles.js +10 -9
- package/daemon/dist/routes/bundles.js.map +1 -1
- package/daemon/dist/routes/config.d.ts.map +1 -1
- package/daemon/dist/routes/config.js +27 -49
- package/daemon/dist/routes/config.js.map +1 -1
- package/daemon/dist/routes/context-packs.d.ts.map +1 -1
- package/daemon/dist/routes/context-packs.js +114 -16
- package/daemon/dist/routes/context-packs.js.map +1 -1
- package/daemon/dist/routes/crash-cart.js +3 -0
- package/daemon/dist/routes/crash-cart.js.map +1 -1
- package/daemon/dist/routes/gateway.d.ts +5 -1
- package/daemon/dist/routes/gateway.d.ts.map +1 -1
- package/daemon/dist/routes/gateway.js +70 -22
- package/daemon/dist/routes/gateway.js.map +1 -1
- package/daemon/dist/routes/health-diagnosis.d.ts +3 -0
- package/daemon/dist/routes/health-diagnosis.d.ts.map +1 -0
- package/daemon/dist/routes/health-diagnosis.js +47 -0
- package/daemon/dist/routes/health-diagnosis.js.map +1 -0
- package/daemon/dist/routes/health.d.ts +3 -0
- package/daemon/dist/routes/health.d.ts.map +1 -0
- package/daemon/dist/routes/health.js +50 -0
- package/daemon/dist/routes/health.js.map +1 -0
- package/daemon/dist/routes/hosts.d.ts +2 -0
- package/daemon/dist/routes/hosts.d.ts.map +1 -1
- package/daemon/dist/routes/hosts.js +12 -5
- package/daemon/dist/routes/hosts.js.map +1 -1
- package/daemon/dist/routes/queue.d.ts.map +1 -1
- package/daemon/dist/routes/queue.js +20 -0
- package/daemon/dist/routes/queue.js.map +1 -1
- package/daemon/dist/routes/rigs.js +12 -1
- package/daemon/dist/routes/rigs.js.map +1 -1
- package/daemon/dist/routes/rigspec.js +9 -2
- package/daemon/dist/routes/rigspec.js.map +1 -1
- package/daemon/dist/routes/seat.js +21 -1
- package/daemon/dist/routes/seat.js.map +1 -1
- package/daemon/dist/routes/sessions.js +16 -6
- package/daemon/dist/routes/sessions.js.map +1 -1
- package/daemon/dist/routes/snapshots.d.ts.map +1 -1
- package/daemon/dist/routes/snapshots.js +41 -3
- package/daemon/dist/routes/snapshots.js.map +1 -1
- package/daemon/dist/routes/up.js +12 -1
- package/daemon/dist/routes/up.js.map +1 -1
- package/daemon/dist/routes/watchdog.d.ts.map +1 -1
- package/daemon/dist/routes/watchdog.js +7 -6
- package/daemon/dist/routes/watchdog.js.map +1 -1
- package/daemon/dist/routes/workflow.d.ts.map +1 -1
- package/daemon/dist/routes/workflow.js +104 -39
- package/daemon/dist/routes/workflow.js.map +1 -1
- package/daemon/dist/server.d.ts +10 -0
- package/daemon/dist/server.d.ts.map +1 -1
- package/daemon/dist/server.js +9 -0
- package/daemon/dist/server.js.map +1 -1
- package/daemon/dist/skill-loadout-surface.d.ts +3 -0
- package/daemon/dist/skill-loadout-surface.d.ts.map +1 -0
- package/daemon/dist/skill-loadout-surface.js +2 -0
- package/daemon/dist/skill-loadout-surface.js.map +1 -0
- package/daemon/dist/startup.d.ts.map +1 -1
- package/daemon/dist/startup.js +101 -66
- package/daemon/dist/startup.js.map +1 -1
- package/daemon/dist/system-world-surface.d.ts +2 -0
- package/daemon/dist/system-world-surface.d.ts.map +1 -0
- package/daemon/dist/system-world-surface.js +2 -0
- package/daemon/dist/system-world-surface.js.map +1 -0
- package/daemon/docs/reference/getting-started.md +2 -1
- package/daemon/docs/reference/health-diagnosis.md +305 -0
- package/daemon/docs/reference/instance-layout.md +106 -0
- package/daemon/docs/reference/mission-install.md +12 -2
- package/daemon/docs/reference/product-journey-sdlc.md +53 -15
- package/daemon/docs/reference/project-workspace.md +66 -40
- package/daemon/docs/reference/sdlc-conventions.md +6 -4
- package/daemon/specs/agents/development/implementer/agent.yaml +1 -9
- package/daemon/specs/agents/development/implementer/guidance/role.md +21 -43
- package/daemon/specs/agents/development/qa/agent.yaml +2 -11
- package/daemon/specs/agents/development/qa/guidance/role.md +21 -73
- package/daemon/specs/agents/orchestration/orchestrator/agent.yaml +1 -9
- package/daemon/specs/agents/orchestration/orchestrator/guidance/role.md +25 -72
- package/daemon/specs/agents/review/independent-reviewer/agent.yaml +1 -9
- package/daemon/specs/agents/review/independent-reviewer/guidance/role.md +20 -35
- package/daemon/specs/agents/shared/skills/core/agent-startup-and-context-ingestion/SKILL.md +21 -6
- package/daemon/specs/agents/shared/skills/core/messaging-the-human/SKILL.md +48 -61
- package/daemon/specs/agents/shared/skills/core/openrig-skills/SKILL.md +4 -2
- package/daemon/specs/agents/shared/skills/core/openrig-upgrade/SKILL.md +81 -0
- package/daemon/specs/agents/shared/skills/core/openrig-upgrade/scripts/migrate-telemetry-state-0.5.9.mjs +1419 -0
- package/daemon/specs/agents/shared/skills/pods/development-team/SKILL.md +40 -139
- package/daemon/specs/agents/shared/skills/pods/orchestration-team/SKILL.md +40 -60
- package/daemon/specs/agents/shared/skills/pods/review-team/SKILL.md +34 -31
- package/daemon/specs/agents/shared/skills/process/test-driven-development/SKILL.md +6 -8
- package/daemon/specs/rigs/launch/demo/CULTURE.md +21 -30
- package/daemon/specs/rigs/launch/implementation-pair/rig.yaml +3 -3
- package/daemon/specs/rigs/preview/product-team/CULTURE.md +26 -71
- package/dist/build-info.js +3 -3
- package/dist/commands/config-init-workspace.d.ts +4 -23
- package/dist/commands/config-init-workspace.d.ts.map +1 -1
- package/dist/commands/config-init-workspace.js +14 -576
- package/dist/commands/config-init-workspace.js.map +1 -1
- package/dist/commands/config.d.ts.map +1 -1
- package/dist/commands/config.js +7 -4
- package/dist/commands/config.js.map +1 -1
- package/dist/commands/context.d.ts.map +1 -1
- package/dist/commands/context.js +114 -8
- package/dist/commands/context.js.map +1 -1
- package/dist/commands/daemon.d.ts.map +1 -1
- package/dist/commands/daemon.js +16 -0
- package/dist/commands/daemon.js.map +1 -1
- package/dist/commands/gateway.d.ts +17 -0
- package/dist/commands/gateway.d.ts.map +1 -1
- package/dist/commands/gateway.js +99 -13
- package/dist/commands/gateway.js.map +1 -1
- package/dist/commands/health.d.ts +12 -0
- package/dist/commands/health.d.ts.map +1 -0
- package/dist/commands/health.js +351 -0
- package/dist/commands/health.js.map +1 -0
- package/dist/commands/host.d.ts.map +1 -1
- package/dist/commands/host.js +2 -0
- package/dist/commands/host.js.map +1 -1
- package/dist/commands/launch.d.ts.map +1 -1
- package/dist/commands/launch.js +51 -4
- package/dist/commands/launch.js.map +1 -1
- package/dist/commands/queue.d.ts +18 -0
- package/dist/commands/queue.d.ts.map +1 -1
- package/dist/commands/queue.js +62 -0
- package/dist/commands/queue.js.map +1 -1
- package/dist/commands/restore.d.ts.map +1 -1
- package/dist/commands/restore.js +43 -3
- package/dist/commands/restore.js.map +1 -1
- package/dist/commands/scope.d.ts.map +1 -1
- package/dist/commands/scope.js +169 -79
- package/dist/commands/scope.js.map +1 -1
- package/dist/commands/seat.d.ts.map +1 -1
- package/dist/commands/seat.js +30 -0
- package/dist/commands/seat.js.map +1 -1
- package/dist/commands/send.d.ts.map +1 -1
- package/dist/commands/send.js +4 -1
- package/dist/commands/send.js.map +1 -1
- package/dist/commands/skill.d.ts.map +1 -1
- package/dist/commands/skill.js +61 -0
- package/dist/commands/skill.js.map +1 -1
- package/dist/commands/slack.d.ts.map +1 -1
- package/dist/commands/slack.js +39 -11
- package/dist/commands/slack.js.map +1 -1
- package/dist/commands/snapshot.d.ts.map +1 -1
- package/dist/commands/snapshot.js +4 -2
- package/dist/commands/snapshot.js.map +1 -1
- package/dist/commands/start.d.ts.map +1 -1
- package/dist/commands/start.js +3 -0
- package/dist/commands/start.js.map +1 -1
- package/dist/commands/up.d.ts.map +1 -1
- package/dist/commands/up.js +3 -0
- package/dist/commands/up.js.map +1 -1
- package/dist/commands/walk.d.ts.map +1 -1
- package/dist/commands/walk.js +3 -0
- package/dist/commands/walk.js.map +1 -1
- package/dist/commands/workflow-render.d.ts +31 -0
- package/dist/commands/workflow-render.d.ts.map +1 -1
- package/dist/commands/workflow-render.js +84 -6
- package/dist/commands/workflow-render.js.map +1 -1
- package/dist/commands/workflow.d.ts.map +1 -1
- package/dist/commands/workflow.js +98 -8
- package/dist/commands/workflow.js.map +1 -1
- package/dist/config-store.d.ts +17 -4
- package/dist/config-store.d.ts.map +1 -1
- package/dist/config-store.js +139 -44
- package/dist/config-store.js.map +1 -1
- package/dist/daemon-lifecycle.d.ts +13 -16
- package/dist/daemon-lifecycle.d.ts.map +1 -1
- package/dist/daemon-lifecycle.js +28 -33
- package/dist/daemon-lifecycle.js.map +1 -1
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -1
- package/dist/index.js.map +1 -1
- package/dist/lib/scope/mission-composition.d.ts +16 -0
- package/dist/lib/scope/mission-composition.d.ts.map +1 -0
- package/dist/lib/scope/mission-composition.js +110 -0
- package/dist/lib/scope/mission-composition.js.map +1 -0
- package/dist/lib/scope/scope-fs.d.ts +5 -0
- package/dist/lib/scope/scope-fs.d.ts.map +1 -1
- package/dist/lib/scope/scope-fs.js +36 -6
- package/dist/lib/scope/scope-fs.js.map +1 -1
- package/dist/lib/work-install.d.ts +17 -0
- package/dist/lib/work-install.d.ts.map +1 -1
- package/dist/lib/work-install.js +49 -6
- package/dist/lib/work-install.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/adapters/claude-code-adapter.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/adapters/claude-code-adapter.js +4 -2
- package/node_modules/@openrig/daemon/dist/adapters/claude-code-adapter.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/build-info.js +3 -3
- package/node_modules/@openrig/daemon/dist/db/all-migrations.d.ts +1 -1
- package/node_modules/@openrig/daemon/dist/db/all-migrations.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/db/all-migrations.js +3 -1
- package/node_modules/@openrig/daemon/dist/db/all-migrations.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/db/migrations/046_seat_identity_verdicts.d.ts +8 -5
- package/node_modules/@openrig/daemon/dist/db/migrations/046_seat_identity_verdicts.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/db/migrations/046_seat_identity_verdicts.js +8 -5
- package/node_modules/@openrig/daemon/dist/db/migrations/046_seat_identity_verdicts.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/db/migrations/079_workflow_lifecycle_parallel.d.ts +8 -0
- package/node_modules/@openrig/daemon/dist/db/migrations/079_workflow_lifecycle_parallel.d.ts.map +1 -0
- package/node_modules/@openrig/daemon/dist/db/migrations/079_workflow_lifecycle_parallel.js +50 -0
- package/node_modules/@openrig/daemon/dist/db/migrations/079_workflow_lifecycle_parallel.js.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/active-occupant.d.ts +6 -1
- package/node_modules/@openrig/daemon/dist/domain/active-occupant.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/active-occupant.js +47 -0
- package/node_modules/@openrig/daemon/dist/domain/active-occupant.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/bootstrap-orchestrator.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/bootstrap-orchestrator.js +8 -1
- package/node_modules/@openrig/daemon/dist/domain/bootstrap-orchestrator.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/bundle-context-packs-router.d.ts +3 -3
- package/node_modules/@openrig/daemon/dist/domain/bundle-context-packs-router.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/bundle-skills-router.d.ts +3 -0
- package/node_modules/@openrig/daemon/dist/domain/bundle-skills-router.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/bundle-skills-router.js +5 -1
- package/node_modules/@openrig/daemon/dist/domain/bundle-skills-router.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/claim-service.d.ts +2 -0
- package/node_modules/@openrig/daemon/dist/domain/claim-service.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/claim-service.js +33 -12
- package/node_modules/@openrig/daemon/dist/domain/claim-service.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/context-packs/context-pack-library-service.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/context-packs/context-pack-library-service.js +9 -1
- package/node_modules/@openrig/daemon/dist/domain/context-packs/context-pack-library-service.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/context-packs/context-pack-types.d.ts +25 -0
- package/node_modules/@openrig/daemon/dist/domain/context-packs/context-pack-types.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/context-packs/context-pack-types.js +3 -1
- package/node_modules/@openrig/daemon/dist/domain/context-packs/context-pack-types.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/context-packs/manifest-parser.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/context-packs/manifest-parser.js +143 -3
- package/node_modules/@openrig/daemon/dist/domain/context-packs/manifest-parser.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/context-packs/profile-composer.d.ts +22 -1
- package/node_modules/@openrig/daemon/dist/domain/context-packs/profile-composer.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/context-packs/profile-composer.js +105 -40
- package/node_modules/@openrig/daemon/dist/domain/context-packs/profile-composer.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/context-usage-store.d.ts +4 -0
- package/node_modules/@openrig/daemon/dist/domain/context-usage-store.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/context-usage-store.js +8 -4
- package/node_modules/@openrig/daemon/dist/domain/context-usage-store.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/crash-cart-conductor.d.ts +13 -0
- package/node_modules/@openrig/daemon/dist/domain/crash-cart-conductor.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/crash-cart-conductor.js +3 -1
- package/node_modules/@openrig/daemon/dist/domain/crash-cart-conductor.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/execution-view.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/execution-view.js +145 -16
- package/node_modules/@openrig/daemon/dist/domain/execution-view.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/gateway/channel-operations.d.ts +39 -0
- package/node_modules/@openrig/daemon/dist/domain/gateway/channel-operations.d.ts.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/gateway/channel-operations.js +35 -0
- package/node_modules/@openrig/daemon/dist/domain/gateway/channel-operations.js.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/gateway/gateway-subsystem.d.ts +3 -0
- package/node_modules/@openrig/daemon/dist/domain/gateway/gateway-subsystem.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/gateway/gateway-subsystem.js +3 -0
- package/node_modules/@openrig/daemon/dist/domain/gateway/gateway-subsystem.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/gateway/human-readiness.d.ts +37 -0
- package/node_modules/@openrig/daemon/dist/domain/gateway/human-readiness.d.ts.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/gateway/human-readiness.js +44 -0
- package/node_modules/@openrig/daemon/dist/domain/gateway/human-readiness.js.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/gateway/human-registry.d.ts +2 -7
- package/node_modules/@openrig/daemon/dist/domain/gateway/human-registry.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/gateway/human-registry.js +2 -7
- package/node_modules/@openrig/daemon/dist/domain/gateway/human-registry.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/gateway/slack/inbound.d.ts +16 -1
- package/node_modules/@openrig/daemon/dist/domain/gateway/slack/inbound.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/gateway/slack/inbound.js +35 -12
- package/node_modules/@openrig/daemon/dist/domain/gateway/slack/inbound.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/gateway/slack/queue-access.d.ts +1 -0
- package/node_modules/@openrig/daemon/dist/domain/gateway/slack/queue-access.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/gateway/slack/queue-access.js +1 -0
- package/node_modules/@openrig/daemon/dist/domain/gateway/slack/queue-access.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/gateway/slack/slack-subsystem.d.ts +18 -0
- package/node_modules/@openrig/daemon/dist/domain/gateway/slack/slack-subsystem.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/gateway/slack/slack-subsystem.js +62 -8
- package/node_modules/@openrig/daemon/dist/domain/gateway/slack/slack-subsystem.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/gateway/slack/socket-inbound.d.ts +13 -0
- package/node_modules/@openrig/daemon/dist/domain/gateway/slack/socket-inbound.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/gateway/slack/socket-inbound.js +59 -1
- package/node_modules/@openrig/daemon/dist/domain/gateway/slack/socket-inbound.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/gateway/slack/state-store.d.ts +21 -0
- package/node_modules/@openrig/daemon/dist/domain/gateway/slack/state-store.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/gateway/slack/state-store.js +28 -1
- package/node_modules/@openrig/daemon/dist/domain/gateway/slack/state-store.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/gateway/slack/thread-routing.d.ts +2 -0
- package/node_modules/@openrig/daemon/dist/domain/gateway/slack/thread-routing.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/gateway/slack/thread-routing.js +6 -1
- package/node_modules/@openrig/daemon/dist/domain/gateway/slack/thread-routing.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/gateway/slack/thread-seat-map.d.ts +4 -0
- package/node_modules/@openrig/daemon/dist/domain/gateway/slack/thread-seat-map.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/gateway/slack/thread-seat-map.js +11 -0
- package/node_modules/@openrig/daemon/dist/domain/gateway/slack/thread-seat-map.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/health-checkpoints.d.ts +57 -0
- package/node_modules/@openrig/daemon/dist/domain/health-checkpoints.d.ts.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/health-checkpoints.js +198 -0
- package/node_modules/@openrig/daemon/dist/domain/health-checkpoints.js.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/health-context.d.ts +14 -0
- package/node_modules/@openrig/daemon/dist/domain/health-context.d.ts.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/health-context.js +93 -0
- package/node_modules/@openrig/daemon/dist/domain/health-context.js.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/health-detectors.d.ts +106 -0
- package/node_modules/@openrig/daemon/dist/domain/health-detectors.d.ts.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/health-detectors.js +392 -0
- package/node_modules/@openrig/daemon/dist/domain/health-detectors.js.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/health-diagnosis.d.ts +143 -0
- package/node_modules/@openrig/daemon/dist/domain/health-diagnosis.d.ts.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/health-diagnosis.js +249 -0
- package/node_modules/@openrig/daemon/dist/domain/health-diagnosis.js.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/health-passive-ceremony.d.ts +19 -0
- package/node_modules/@openrig/daemon/dist/domain/health-passive-ceremony.d.ts.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/health-passive-ceremony.js +234 -0
- package/node_modules/@openrig/daemon/dist/domain/health-passive-ceremony.js.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/health-policy.d.ts +45 -0
- package/node_modules/@openrig/daemon/dist/domain/health-policy.d.ts.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/health-policy.js +89 -0
- package/node_modules/@openrig/daemon/dist/domain/health-policy.js.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/health-projection.d.ts +237 -0
- package/node_modules/@openrig/daemon/dist/domain/health-projection.d.ts.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/health-projection.js +312 -0
- package/node_modules/@openrig/daemon/dist/domain/health-projection.js.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/instance-initialization.d.ts +25 -0
- package/node_modules/@openrig/daemon/dist/domain/instance-initialization.d.ts.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/instance-initialization.js +81 -0
- package/node_modules/@openrig/daemon/dist/domain/instance-initialization.js.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/lifecycle-manifest.d.ts +19 -0
- package/node_modules/@openrig/daemon/dist/domain/lifecycle-manifest.d.ts.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/lifecycle-manifest.js +73 -0
- package/node_modules/@openrig/daemon/dist/domain/lifecycle-manifest.js.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/mission-control/mission-control-read-layer.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/mission-control/mission-control-read-layer.js +14 -11
- package/node_modules/@openrig/daemon/dist/domain/mission-control/mission-control-read-layer.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/model-divergence/current-generation-record.d.ts +36 -36
- package/node_modules/@openrig/daemon/dist/domain/model-divergence/current-generation-record.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/model-divergence/current-generation-record.js +104 -135
- package/node_modules/@openrig/daemon/dist/domain/model-divergence/current-generation-record.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/native-process-lineage.d.ts +10 -0
- package/node_modules/@openrig/daemon/dist/domain/native-process-lineage.d.ts.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/native-process-lineage.js +86 -0
- package/node_modules/@openrig/daemon/dist/domain/native-process-lineage.js.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/native-resume-probe.js +12 -1
- package/node_modules/@openrig/daemon/dist/domain/native-resume-probe.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/node-inventory.d.ts +2 -0
- package/node_modules/@openrig/daemon/dist/domain/node-inventory.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/node-inventory.js +4 -1
- package/node_modules/@openrig/daemon/dist/domain/node-inventory.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/node-launcher.d.ts +3 -0
- package/node_modules/@openrig/daemon/dist/domain/node-launcher.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/node-launcher.js +21 -8
- package/node_modules/@openrig/daemon/dist/domain/node-launcher.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/pane-binding-observation.d.ts +22 -0
- package/node_modules/@openrig/daemon/dist/domain/pane-binding-observation.d.ts.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/pane-binding-observation.js +54 -0
- package/node_modules/@openrig/daemon/dist/domain/pane-binding-observation.js.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/policies/parked-owner-consumer.js +1 -1
- package/node_modules/@openrig/daemon/dist/domain/policies/parked-owner-consumer.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/policies/workflow-keepalive.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/policies/workflow-keepalive.js +16 -2
- package/node_modules/@openrig/daemon/dist/domain/policies/workflow-keepalive.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/profile-resolver.d.ts +12 -0
- package/node_modules/@openrig/daemon/dist/domain/profile-resolver.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/profile-resolver.js +60 -0
- package/node_modules/@openrig/daemon/dist/domain/profile-resolver.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/project-lifecycle-compiler.d.ts +35 -0
- package/node_modules/@openrig/daemon/dist/domain/project-lifecycle-compiler.d.ts.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/project-lifecycle-compiler.js +219 -0
- package/node_modules/@openrig/daemon/dist/domain/project-lifecycle-compiler.js.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/provider/claude-usage-reader.d.ts +1 -1
- package/node_modules/@openrig/daemon/dist/domain/provider/claude-usage-reader.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/provider/claude-usage-reader.js +28 -18
- package/node_modules/@openrig/daemon/dist/domain/provider/claude-usage-reader.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/queue-repository.d.ts +19 -1
- package/node_modules/@openrig/daemon/dist/domain/queue-repository.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/queue-repository.js +66 -5
- package/node_modules/@openrig/daemon/dist/domain/queue-repository.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/queue-retention.d.ts +3 -4
- package/node_modules/@openrig/daemon/dist/domain/queue-retention.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/queue-retention.js +5 -8
- package/node_modules/@openrig/daemon/dist/domain/queue-retention.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/queue-transition-log.d.ts +33 -0
- package/node_modules/@openrig/daemon/dist/domain/queue-transition-log.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/queue-transition-log.js +152 -0
- package/node_modules/@openrig/daemon/dist/domain/queue-transition-log.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/queue-wait-backoff.d.ts +21 -0
- package/node_modules/@openrig/daemon/dist/domain/queue-wait-backoff.d.ts.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/queue-wait-backoff.js +96 -0
- package/node_modules/@openrig/daemon/dist/domain/queue-wait-backoff.js.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/queue-wake-repository.d.ts +1 -0
- package/node_modules/@openrig/daemon/dist/domain/queue-wake-repository.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/queue-wake-repository.js +8 -3
- package/node_modules/@openrig/daemon/dist/domain/queue-wake-repository.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/restore-attempt-receipt.d.ts +34 -0
- package/node_modules/@openrig/daemon/dist/domain/restore-attempt-receipt.d.ts.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/restore-attempt-receipt.js +59 -0
- package/node_modules/@openrig/daemon/dist/domain/restore-attempt-receipt.js.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/restore-orchestrator.d.ts +57 -24
- package/node_modules/@openrig/daemon/dist/domain/restore-orchestrator.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/restore-orchestrator.js +152 -26
- package/node_modules/@openrig/daemon/dist/domain/restore-orchestrator.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/restore-topology.d.ts +14 -0
- package/node_modules/@openrig/daemon/dist/domain/restore-topology.d.ts.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/restore-topology.js +27 -0
- package/node_modules/@openrig/daemon/dist/domain/restore-topology.js.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/rig-lifecycle-service.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/rig-lifecycle-service.js +9 -0
- package/node_modules/@openrig/daemon/dist/domain/rig-lifecycle-service.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/rigspec-instantiator.d.ts +19 -0
- package/node_modules/@openrig/daemon/dist/domain/rigspec-instantiator.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/rigspec-instantiator.js +65 -1
- package/node_modules/@openrig/daemon/dist/domain/rigspec-instantiator.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/rigspec-preflight.d.ts +8 -0
- package/node_modules/@openrig/daemon/dist/domain/rigspec-preflight.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/rigspec-preflight.js +4 -0
- package/node_modules/@openrig/daemon/dist/domain/rigspec-preflight.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/seat-attention-reconciler.d.ts +23 -1
- package/node_modules/@openrig/daemon/dist/domain/seat-attention-reconciler.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/seat-attention-reconciler.js +97 -46
- package/node_modules/@openrig/daemon/dist/domain/seat-attention-reconciler.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/seat-identity-reconciler.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/seat-identity-reconciler.js +15 -6
- package/node_modules/@openrig/daemon/dist/domain/seat-identity-reconciler.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/seat-lifecycle-service.d.ts +47 -1
- package/node_modules/@openrig/daemon/dist/domain/seat-lifecycle-service.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/seat-lifecycle-service.js +525 -29
- package/node_modules/@openrig/daemon/dist/domain/seat-lifecycle-service.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/session-registry.d.ts +8 -1
- package/node_modules/@openrig/daemon/dist/domain/session-registry.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/session-registry.js +19 -0
- package/node_modules/@openrig/daemon/dist/domain/session-registry.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/skill-catalog.d.ts +81 -0
- package/node_modules/@openrig/daemon/dist/domain/skill-catalog.d.ts.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/skill-catalog.js +827 -0
- package/node_modules/@openrig/daemon/dist/domain/skill-catalog.js.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/skill-discovery.d.ts +3 -0
- package/node_modules/@openrig/daemon/dist/domain/skill-discovery.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/skill-discovery.js +1 -1
- package/node_modules/@openrig/daemon/dist/domain/skill-discovery.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/snapshot-capture.d.ts +4 -1
- package/node_modules/@openrig/daemon/dist/domain/snapshot-capture.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/snapshot-capture.js +38 -2
- package/node_modules/@openrig/daemon/dist/domain/snapshot-capture.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/snapshot-repository.d.ts +15 -1
- package/node_modules/@openrig/daemon/dist/domain/snapshot-repository.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/snapshot-repository.js +103 -1
- package/node_modules/@openrig/daemon/dist/domain/snapshot-repository.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/startup-orchestrator.d.ts +2 -0
- package/node_modules/@openrig/daemon/dist/domain/startup-orchestrator.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/startup-orchestrator.js +12 -0
- package/node_modules/@openrig/daemon/dist/domain/startup-orchestrator.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/system-world.d.ts +45 -0
- package/node_modules/@openrig/daemon/dist/domain/system-world.d.ts.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/system-world.js +123 -0
- package/node_modules/@openrig/daemon/dist/domain/system-world.js.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/telemetry-state-paths.d.ts +7 -0
- package/node_modules/@openrig/daemon/dist/domain/telemetry-state-paths.d.ts.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/telemetry-state-paths.js +20 -0
- package/node_modules/@openrig/daemon/dist/domain/telemetry-state-paths.js.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/types.d.ts +106 -4
- package/node_modules/@openrig/daemon/dist/domain/types.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/types.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/user-settings/settings-store.d.ts +16 -3
- package/node_modules/@openrig/daemon/dist/domain/user-settings/settings-store.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/user-settings/settings-store.js +137 -41
- package/node_modules/@openrig/daemon/dist/domain/user-settings/settings-store.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/watchdog-jobs-repository.d.ts +2 -0
- package/node_modules/@openrig/daemon/dist/domain/watchdog-jobs-repository.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/watchdog-jobs-repository.js +5 -0
- package/node_modules/@openrig/daemon/dist/domain/watchdog-jobs-repository.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/watchdog-policy-engine.d.ts +7 -23
- package/node_modules/@openrig/daemon/dist/domain/watchdog-policy-engine.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/watchdog-policy-engine.js +44 -226
- package/node_modules/@openrig/daemon/dist/domain/watchdog-policy-engine.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/workflow-boot-sweep.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/workflow-boot-sweep.js +20 -6
- package/node_modules/@openrig/daemon/dist/domain/workflow-boot-sweep.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/workflow-instance-store.d.ts +33 -1
- package/node_modules/@openrig/daemon/dist/domain/workflow-instance-store.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/workflow-instance-store.js +127 -2
- package/node_modules/@openrig/daemon/dist/domain/workflow-instance-store.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/workflow-keepalive-arming.d.ts +7 -5
- package/node_modules/@openrig/daemon/dist/domain/workflow-keepalive-arming.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/workflow-keepalive-arming.js +27 -16
- package/node_modules/@openrig/daemon/dist/domain/workflow-keepalive-arming.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/workflow-projector.d.ts +30 -2
- package/node_modules/@openrig/daemon/dist/domain/workflow-projector.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/workflow-projector.js +375 -14
- package/node_modules/@openrig/daemon/dist/domain/workflow-projector.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/workflow-runtime.d.ts +62 -2
- package/node_modules/@openrig/daemon/dist/domain/workflow-runtime.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/workflow-runtime.js +391 -28
- package/node_modules/@openrig/daemon/dist/domain/workflow-runtime.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/workflow-spec-cache.d.ts +10 -2
- package/node_modules/@openrig/daemon/dist/domain/workflow-spec-cache.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/workflow-spec-cache.js +101 -0
- package/node_modules/@openrig/daemon/dist/domain/workflow-spec-cache.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/workflow-types.d.ts +46 -1
- package/node_modules/@openrig/daemon/dist/domain/workflow-types.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/workflow-types.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/workflow-validator.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/workflow-validator.js +38 -3
- package/node_modules/@openrig/daemon/dist/domain/workflow-validator.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/workspace/default-workspace-scaffold.d.ts +38 -9
- package/node_modules/@openrig/daemon/dist/domain/workspace/default-workspace-scaffold.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/workspace/default-workspace-scaffold.js +93 -347
- package/node_modules/@openrig/daemon/dist/domain/workspace/default-workspace-scaffold.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/gateway-human-registry-surface.d.ts +1 -0
- package/node_modules/@openrig/daemon/dist/gateway-human-registry-surface.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/gateway-human-registry-surface.js +1 -0
- package/node_modules/@openrig/daemon/dist/gateway-human-registry-surface.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/gateway-slack-surface.d.ts +1 -0
- package/node_modules/@openrig/daemon/dist/gateway-slack-surface.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/gateway-slack-surface.js +1 -0
- package/node_modules/@openrig/daemon/dist/gateway-slack-surface.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/health-detectors-surface.d.ts +2 -0
- package/node_modules/@openrig/daemon/dist/health-detectors-surface.d.ts.map +1 -0
- package/node_modules/@openrig/daemon/dist/health-detectors-surface.js +2 -0
- package/node_modules/@openrig/daemon/dist/health-detectors-surface.js.map +1 -0
- package/node_modules/@openrig/daemon/dist/health-projection-surface.d.ts +2 -0
- package/node_modules/@openrig/daemon/dist/health-projection-surface.d.ts.map +1 -0
- package/node_modules/@openrig/daemon/dist/health-projection-surface.js +2 -0
- package/node_modules/@openrig/daemon/dist/health-projection-surface.js.map +1 -0
- package/node_modules/@openrig/daemon/dist/index.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/index.js +15 -0
- package/node_modules/@openrig/daemon/dist/index.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/instance-initialization-surface.d.ts +3 -0
- package/node_modules/@openrig/daemon/dist/instance-initialization-surface.d.ts.map +1 -0
- package/node_modules/@openrig/daemon/dist/instance-initialization-surface.js +3 -0
- package/node_modules/@openrig/daemon/dist/instance-initialization-surface.js.map +1 -0
- package/node_modules/@openrig/daemon/dist/lib/pane-envelope.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/lib/pane-envelope.js +4 -1
- package/node_modules/@openrig/daemon/dist/lib/pane-envelope.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/project-lifecycle-surface.d.ts +3 -0
- package/node_modules/@openrig/daemon/dist/project-lifecycle-surface.d.ts.map +1 -0
- package/node_modules/@openrig/daemon/dist/project-lifecycle-surface.js +3 -0
- package/node_modules/@openrig/daemon/dist/project-lifecycle-surface.js.map +1 -0
- package/node_modules/@openrig/daemon/dist/routes/bundles.js +10 -9
- package/node_modules/@openrig/daemon/dist/routes/bundles.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/routes/config.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/routes/config.js +27 -49
- package/node_modules/@openrig/daemon/dist/routes/config.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/routes/context-packs.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/routes/context-packs.js +114 -16
- package/node_modules/@openrig/daemon/dist/routes/context-packs.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/routes/crash-cart.js +3 -0
- package/node_modules/@openrig/daemon/dist/routes/crash-cart.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/routes/gateway.d.ts +5 -1
- package/node_modules/@openrig/daemon/dist/routes/gateway.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/routes/gateway.js +70 -22
- package/node_modules/@openrig/daemon/dist/routes/gateway.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/routes/health-diagnosis.d.ts +3 -0
- package/node_modules/@openrig/daemon/dist/routes/health-diagnosis.d.ts.map +1 -0
- package/node_modules/@openrig/daemon/dist/routes/health-diagnosis.js +47 -0
- package/node_modules/@openrig/daemon/dist/routes/health-diagnosis.js.map +1 -0
- package/node_modules/@openrig/daemon/dist/routes/health.d.ts +3 -0
- package/node_modules/@openrig/daemon/dist/routes/health.d.ts.map +1 -0
- package/node_modules/@openrig/daemon/dist/routes/health.js +50 -0
- package/node_modules/@openrig/daemon/dist/routes/health.js.map +1 -0
- package/node_modules/@openrig/daemon/dist/routes/hosts.d.ts +2 -0
- package/node_modules/@openrig/daemon/dist/routes/hosts.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/routes/hosts.js +12 -5
- package/node_modules/@openrig/daemon/dist/routes/hosts.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/routes/queue.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/routes/queue.js +20 -0
- package/node_modules/@openrig/daemon/dist/routes/queue.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/routes/rigs.js +12 -1
- package/node_modules/@openrig/daemon/dist/routes/rigs.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/routes/rigspec.js +9 -2
- package/node_modules/@openrig/daemon/dist/routes/rigspec.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/routes/seat.js +21 -1
- package/node_modules/@openrig/daemon/dist/routes/seat.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/routes/sessions.js +16 -6
- package/node_modules/@openrig/daemon/dist/routes/sessions.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/routes/snapshots.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/routes/snapshots.js +41 -3
- package/node_modules/@openrig/daemon/dist/routes/snapshots.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/routes/up.js +12 -1
- package/node_modules/@openrig/daemon/dist/routes/up.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/routes/watchdog.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/routes/watchdog.js +7 -6
- package/node_modules/@openrig/daemon/dist/routes/watchdog.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/routes/workflow.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/routes/workflow.js +104 -39
- package/node_modules/@openrig/daemon/dist/routes/workflow.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/server.d.ts +10 -0
- package/node_modules/@openrig/daemon/dist/server.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/server.js +9 -0
- package/node_modules/@openrig/daemon/dist/server.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/skill-loadout-surface.d.ts +3 -0
- package/node_modules/@openrig/daemon/dist/skill-loadout-surface.d.ts.map +1 -0
- package/node_modules/@openrig/daemon/dist/skill-loadout-surface.js +2 -0
- package/node_modules/@openrig/daemon/dist/skill-loadout-surface.js.map +1 -0
- package/node_modules/@openrig/daemon/dist/startup.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/startup.js +101 -66
- package/node_modules/@openrig/daemon/dist/startup.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/system-world-surface.d.ts +2 -0
- package/node_modules/@openrig/daemon/dist/system-world-surface.d.ts.map +1 -0
- package/node_modules/@openrig/daemon/dist/system-world-surface.js +2 -0
- package/node_modules/@openrig/daemon/dist/system-world-surface.js.map +1 -0
- package/node_modules/@openrig/daemon/package.json +25 -1
- package/package.json +1 -1
- package/tui/dist/commands/registry.d.ts.map +1 -1
- package/tui/dist/commands/registry.js +10 -1
- package/tui/dist/commands/registry.js.map +1 -1
- package/tui/dist/daemon-client.d.ts +13 -0
- package/tui/dist/daemon-client.d.ts.map +1 -1
- package/tui/dist/daemon-client.js +19 -0
- package/tui/dist/daemon-client.js.map +1 -1
- package/tui/dist/demo-data.d.ts.map +1 -1
- package/tui/dist/demo-data.js +65 -9
- package/tui/dist/demo-data.js.map +1 -1
- package/tui/dist/detail.d.ts +9 -0
- package/tui/dist/detail.d.ts.map +1 -1
- package/tui/dist/detail.js.map +1 -1
- package/tui/dist/execution/execution-model.d.ts +8 -2
- package/tui/dist/execution/execution-model.d.ts.map +1 -1
- package/tui/dist/execution/execution-model.js +482 -119
- package/tui/dist/execution/execution-model.js.map +1 -1
- package/tui/dist/health/health-model.d.ts +25 -0
- package/tui/dist/health/health-model.d.ts.map +1 -0
- package/tui/dist/health/health-model.js +322 -0
- package/tui/dist/health/health-model.js.map +1 -0
- package/tui/dist/hydrate.d.ts +3 -2
- package/tui/dist/hydrate.d.ts.map +1 -1
- package/tui/dist/hydrate.js +77 -8
- package/tui/dist/hydrate.js.map +1 -1
- package/tui/dist/input.d.ts +6 -1
- package/tui/dist/input.d.ts.map +1 -1
- package/tui/dist/input.js +22 -10
- package/tui/dist/input.js.map +1 -1
- package/tui/dist/main.js +39 -8
- package/tui/dist/main.js.map +1 -1
- package/tui/dist/navigator.d.ts.map +1 -1
- package/tui/dist/navigator.js +10 -6
- package/tui/dist/navigator.js.map +1 -1
- package/tui/dist/render.d.ts.map +1 -1
- package/tui/dist/render.js +617 -155
- package/tui/dist/render.js.map +1 -1
- package/tui/dist/scopes/scopes-model.d.ts +14 -8
- package/tui/dist/scopes/scopes-model.d.ts.map +1 -1
- package/tui/dist/scopes/scopes-model.js +218 -46
- package/tui/dist/scopes/scopes-model.js.map +1 -1
- package/tui/dist/socket-server.d.ts +13 -0
- package/tui/dist/socket-server.d.ts.map +1 -1
- package/tui/dist/socket-server.js +24 -0
- package/tui/dist/socket-server.js.map +1 -1
- package/tui/dist/state.d.ts.map +1 -1
- package/tui/dist/state.js +31 -11
- package/tui/dist/state.js.map +1 -1
- package/tui/dist/stylize.d.ts.map +1 -1
- package/tui/dist/stylize.js +22 -28
- package/tui/dist/stylize.js.map +1 -1
- package/tui/dist/theme.d.ts +1 -1
- package/tui/dist/theme.d.ts.map +1 -1
- package/tui/dist/theme.js +5 -4
- package/tui/dist/theme.js.map +1 -1
- package/tui/dist/types.d.ts +186 -1
- package/tui/dist/types.d.ts.map +1 -1
- package/tui/dist/visual-layout.d.ts +6 -0
- package/tui/dist/visual-layout.d.ts.map +1 -0
- package/tui/dist/visual-layout.js +8 -0
- package/tui/dist/visual-layout.js.map +1 -0
- package/ui/dist/assets/{index-B_wqzP0D.js → index-wyX378xb.js} +15 -15
- package/ui/dist/index.html +1 -1
package/tui/dist/render.js
CHANGED
|
@@ -17,8 +17,9 @@ import { renderCrashCartView, renderUnverifiedView, renderRestoreLifecycleView,
|
|
|
17
17
|
import { buildLedgerExplorer } from "./crash-cart/ledger-explorer.js";
|
|
18
18
|
import { runtimeMarkSegs } from "./topology/runtime-marks.js";
|
|
19
19
|
import { barCells, flashActive, reducedMotion, spinnerFrame } from "./motion.js";
|
|
20
|
+
import { explorerWidth, MOTION_FRAME_MS } from "./visual-layout.js";
|
|
20
21
|
import { detailPage, fieldLine, sectionRule, listItem, alignedRow, LABEL_W } from "./detail.js";
|
|
21
|
-
|
|
22
|
+
import { healthAgentLines, healthDetailLines, healthListLines, healthSummaryLine } from "./health/health-model.js";
|
|
22
23
|
function pad(text, width) {
|
|
23
24
|
const t = String(text ?? "");
|
|
24
25
|
if (t.length <= width)
|
|
@@ -32,45 +33,298 @@ function padLeft(text, width) {
|
|
|
32
33
|
return " ".repeat(width - t.length) + t;
|
|
33
34
|
return t.slice(0, Math.max(width - 1, 0)) + "…";
|
|
34
35
|
}
|
|
35
|
-
const FULL_AGENT_COLS = [
|
|
36
|
-
["rig", "RIG", 18, "left"],
|
|
37
|
-
["pod", "POD", 8, "left"],
|
|
38
|
-
["agent", "AGENT", 16, "left"],
|
|
39
|
-
["runtime", "RUNTIME", 13, "left"],
|
|
40
|
-
["context", "CTX%", 4, "right"],
|
|
41
|
-
["tokens", "TOKENS", 7, "right"],
|
|
42
|
-
["status", "STATUS", 17, "left"],
|
|
43
|
-
["actions", "ACTIONS", 14, "left"],
|
|
44
|
-
];
|
|
45
36
|
function columnsWidth(columns) {
|
|
46
37
|
return columns.reduce((total, [, , width]) => total + width + 1, -1);
|
|
47
38
|
}
|
|
48
39
|
function agentColumns(contentWidth) {
|
|
49
|
-
if (
|
|
50
|
-
return
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
[
|
|
58
|
-
|
|
40
|
+
if (contentWidth >= 110)
|
|
41
|
+
return [
|
|
42
|
+
["pod", "POD", 8, "left"], ["seat", "SEAT", 15, "left"], ["runtime", "RT", 4, "left"],
|
|
43
|
+
["model", "MODEL", 12, "left"], ["context", "CTX", 8, "right"], ["status", "STATE", 11, "left"],
|
|
44
|
+
["queue", "Q", 3, "right"], ["work", "WORK", 15, "left"], ["now", "NOW", 27, "left"],
|
|
45
|
+
["actions", "ACTIONS", 14, "left"],
|
|
46
|
+
];
|
|
47
|
+
if (contentWidth >= 88)
|
|
48
|
+
return [
|
|
49
|
+
["pod", "POD", 6, "left"], ["seat", "SEAT", 12, "left"], ["runtime", "RT", 3, "left"],
|
|
50
|
+
["model", "MODEL", 8, "left"], ["context", "CTX", 6, "right"], ["status", "STATE", 9, "left"],
|
|
51
|
+
["queue", "Q", 2, "right"], ["work", "WORK", 8, "left"], ["now", "NOW", 11, "left"],
|
|
52
|
+
["actions", "ACTIONS", 14, "left"],
|
|
53
|
+
];
|
|
54
|
+
// At 84x28 the L2 content pane is 58 cells. The three explicitly deferred
|
|
55
|
+
// columns (MODEL/NOW/ACTIONS) move to drill; identity, state and work remain.
|
|
56
|
+
const fixed = 6 + 12 + 3 + 5 + 9 + 2 + 6; // widths + separators, excluding WORK
|
|
57
|
+
return [
|
|
58
|
+
["pod", "POD", 6, "left"], ["seat", "SEAT", 12, "left"], ["runtime", "RT", 3, "left"],
|
|
59
|
+
["context", "CTX", 5, "right"], ["status", "STATE", 9, "left"], ["queue", "Q", 2, "right"],
|
|
60
|
+
["work", "WORK", Math.max(4, contentWidth - fixed), "left"],
|
|
61
|
+
];
|
|
62
|
+
}
|
|
63
|
+
function instanceAgentColumns(contentWidth) {
|
|
64
|
+
if (contentWidth >= 110)
|
|
65
|
+
return [
|
|
66
|
+
["rig", "RIG", 13, "left"], ["pod", "POD", 8, "left"], ["seat", "SEAT", 14, "left"],
|
|
67
|
+
["runtime", "RT", 3, "left"], ["context", "CTX", 7, "right"], ["status", "STATE", 10, "left"],
|
|
68
|
+
["queue", "Q", 2, "right"], ["work", "WORK", 12, "left"], ["now", "NOW", Math.max(18, contentWidth - 78), "left"],
|
|
69
|
+
];
|
|
70
|
+
if (contentWidth >= 78)
|
|
71
|
+
return [
|
|
72
|
+
["rig", "RIG", 10, "left"], ["pod", "POD", 6, "left"], ["seat", "SEAT", 12, "left"],
|
|
73
|
+
["runtime", "RT", 3, "left"], ["context", "CTX", 5, "right"], ["status", "STATE", 9, "left"],
|
|
74
|
+
["queue", "Q", 2, "right"], ["work", "WORK", Math.max(8, contentWidth - 54), "left"],
|
|
75
|
+
];
|
|
76
|
+
const fixed = 8 + 5 + 11 + 2 + 5 + 8 + 2 + 7;
|
|
77
|
+
return [
|
|
78
|
+
["rig", "RIG", 8, "left"], ["pod", "POD", 5, "left"], ["seat", "SEAT", 11, "left"],
|
|
79
|
+
["runtime", "RT", 2, "left"], ["context", "CTX", 5, "right"], ["status", "STATE", 8, "left"],
|
|
80
|
+
["queue", "Q", 2, "right"], ["work", "WORK", Math.max(4, contentWidth - fixed), "left"],
|
|
59
81
|
];
|
|
60
|
-
const rigWidth = Math.max(6, Math.min(18, contentWidth - columnsWidth(compactRest) - 1));
|
|
61
|
-
return [["rig", "RIG", rigWidth, "left"], ...compactRest];
|
|
62
82
|
}
|
|
63
83
|
function tableRow(columns, cells) {
|
|
64
84
|
return columns.map(([key, , width, align]) => align === "right" ? padLeft(cells[key], width) : pad(cells[key], width)).join(" ");
|
|
65
85
|
}
|
|
86
|
+
function runtimeShort(runtime) {
|
|
87
|
+
if (/claude/i.test(runtime))
|
|
88
|
+
return "cl";
|
|
89
|
+
if (/codex/i.test(runtime))
|
|
90
|
+
return "cx";
|
|
91
|
+
if (/terminal/i.test(runtime))
|
|
92
|
+
return ">_";
|
|
93
|
+
if (/human/i.test(runtime))
|
|
94
|
+
return "hu";
|
|
95
|
+
return runtime.slice(0, 2) || "—";
|
|
96
|
+
}
|
|
97
|
+
/** Tables optimize for glance width; details retain the canonical model id. */
|
|
98
|
+
function tableModel(model) {
|
|
99
|
+
return model?.replace(/^claude-/i, "") || "—";
|
|
100
|
+
}
|
|
101
|
+
function contextCompact(value, narrow) {
|
|
102
|
+
if (value == null)
|
|
103
|
+
return "—";
|
|
104
|
+
if (narrow)
|
|
105
|
+
return `${value}%`;
|
|
106
|
+
const filled = Math.max(0, Math.min(3, Math.round(value / 33.4)));
|
|
107
|
+
return `${value}%${"▪".repeat(filled)}${"▫".repeat(3 - filled)}`;
|
|
108
|
+
}
|
|
109
|
+
function seatName(pod, name) {
|
|
110
|
+
for (const prefix of [`${pod}.`, `${pod}-`])
|
|
111
|
+
if (name.startsWith(prefix))
|
|
112
|
+
return name.slice(prefix.length);
|
|
113
|
+
return name;
|
|
114
|
+
}
|
|
115
|
+
function operationalState(status, motion) {
|
|
116
|
+
const key = status.toLowerCase().replaceAll("_", "-");
|
|
117
|
+
if (key === "active" || key === "working" || key === "running") {
|
|
118
|
+
if (!motion.reduced)
|
|
119
|
+
motion.used = true;
|
|
120
|
+
return { mark: motion.reduced ? "●" : motion.frame, word: "working" };
|
|
121
|
+
}
|
|
122
|
+
if (key === "attention-required" || key === "needs-attention" || key === "needs-input")
|
|
123
|
+
return { mark: "◐", word: "needs you" };
|
|
124
|
+
if (key === "blocked")
|
|
125
|
+
return { mark: "⚑", word: "blocked" };
|
|
126
|
+
if (key === "failed" || key === "down")
|
|
127
|
+
return { mark: "✕", word: "failed" };
|
|
128
|
+
if (key === "idle")
|
|
129
|
+
return { mark: "·", word: "idle" };
|
|
130
|
+
if (key === "detached" || key === "stopped")
|
|
131
|
+
return { mark: "○", word: "detached" };
|
|
132
|
+
return { mark: "?", word: "unknown" };
|
|
133
|
+
}
|
|
134
|
+
function queueFacts(snap, session) {
|
|
135
|
+
if (!session)
|
|
136
|
+
return { count: 0, work: "—", now: "—" };
|
|
137
|
+
const sources = [
|
|
138
|
+
["needs you", snap.attention], ["blocked", snap.blocked], ["working", snap.inProgress], ["queued", snap.pending],
|
|
139
|
+
];
|
|
140
|
+
const rows = [];
|
|
141
|
+
const seen = new Set();
|
|
142
|
+
for (const [role, items] of sources)
|
|
143
|
+
for (const row of items) {
|
|
144
|
+
if (row.destinationSession !== session || seen.has(row.qitemId))
|
|
145
|
+
continue;
|
|
146
|
+
seen.add(row.qitemId);
|
|
147
|
+
rows.push({ role, row });
|
|
148
|
+
}
|
|
149
|
+
const primary = rows[0];
|
|
150
|
+
if (!primary)
|
|
151
|
+
return { count: 0, work: "—", now: "—" };
|
|
152
|
+
const slice = primary.row.tags?.find((tag) => tag.startsWith("slice:"))?.slice("slice:".length);
|
|
153
|
+
const work = slice?.match(/^OPR(?:\.\d+){3}\.(\d+)$/)?.[1]
|
|
154
|
+
? `S${slice.slice(slice.lastIndexOf(".") + 1)}`
|
|
155
|
+
: slice ?? "—";
|
|
156
|
+
const summary = primary.row.summary?.trim() || primary.row.body.split("\n").find((line) => line.trim())?.trim() || primary.row.qitemId;
|
|
157
|
+
const now = primary.role === "working" ? summary : `${primary.role} · ${summary}`;
|
|
158
|
+
return { count: rows.length, work, now };
|
|
159
|
+
}
|
|
160
|
+
function number(value) {
|
|
161
|
+
return value == null ? "—" : value.toLocaleString("en-US");
|
|
162
|
+
}
|
|
163
|
+
function wrapDetailValue(label, value, width) {
|
|
164
|
+
const prefix = ` ${`${label}:`.padEnd(LABEL_W)} `;
|
|
165
|
+
const continuation = " ".repeat(prefix.length);
|
|
166
|
+
const room = Math.max(8, width - prefix.length);
|
|
167
|
+
const words = value.trim().split(/\s+/).filter(Boolean);
|
|
168
|
+
const chunks = [];
|
|
169
|
+
let line = "";
|
|
170
|
+
for (const raw of words) {
|
|
171
|
+
let word = raw;
|
|
172
|
+
while (word.length > room) {
|
|
173
|
+
if (line) {
|
|
174
|
+
chunks.push(line);
|
|
175
|
+
line = "";
|
|
176
|
+
}
|
|
177
|
+
chunks.push(word.slice(0, room));
|
|
178
|
+
word = word.slice(room);
|
|
179
|
+
}
|
|
180
|
+
if (!word)
|
|
181
|
+
continue;
|
|
182
|
+
if (!line)
|
|
183
|
+
line = word;
|
|
184
|
+
else if (line.length + word.length + 1 <= room)
|
|
185
|
+
line += ` ${word}`;
|
|
186
|
+
else {
|
|
187
|
+
chunks.push(line);
|
|
188
|
+
line = word;
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
if (line)
|
|
192
|
+
chunks.push(line);
|
|
193
|
+
return (chunks.length ? chunks : [""]).map((chunk, index) => ({ text: `${index === 0 ? prefix : continuation}${chunk}` }));
|
|
194
|
+
}
|
|
195
|
+
function rowsForAgent(snap, session, sources) {
|
|
196
|
+
const rows = [];
|
|
197
|
+
const seen = new Set();
|
|
198
|
+
for (const source of sources)
|
|
199
|
+
for (const row of source) {
|
|
200
|
+
if (row.destinationSession !== session || seen.has(row.qitemId))
|
|
201
|
+
continue;
|
|
202
|
+
seen.add(row.qitemId);
|
|
203
|
+
rows.push(row);
|
|
204
|
+
}
|
|
205
|
+
return rows;
|
|
206
|
+
}
|
|
207
|
+
function workRows(rows, width) {
|
|
208
|
+
if (rows.length === 0)
|
|
209
|
+
return [fieldLine({ label: "rows", value: "none in the served bounded lists" })];
|
|
210
|
+
return rows.flatMap((row) => {
|
|
211
|
+
const summary = row.summary?.trim() || row.body.split("\n").find((line) => line.trim())?.trim() || "no summary served";
|
|
212
|
+
return [
|
|
213
|
+
...wrapDetailValue("qitem", `${row.qitemId} · ${row.state}`, width),
|
|
214
|
+
...wrapDetailValue("work", summary, width),
|
|
215
|
+
...(row.blockedOn ? wrapDetailValue("blocker", `blocked on ${row.blockedOn}`, width) : []),
|
|
216
|
+
];
|
|
217
|
+
});
|
|
218
|
+
}
|
|
219
|
+
function agentDetailLines(snap, found, contentWidth) {
|
|
220
|
+
const { agent, rig, pod } = found;
|
|
221
|
+
const session = agent.session;
|
|
222
|
+
const specInLibrary = !!agent.spec && !!findSpec(snap, agent.spec);
|
|
223
|
+
const currentRows = session ? rowsForAgent(snap, session, [snap.attention, snap.blocked, snap.inProgress]) : [];
|
|
224
|
+
const pendingRows = session ? rowsForAgent(snap, session, [snap.pending]) : [];
|
|
225
|
+
const recentRows = session ? rowsForAgent(snap, session, [snap.recentlyFinished]) : [];
|
|
226
|
+
const needs = session ? snap.needs.filter((item) => item.target === session) : [];
|
|
227
|
+
const visibleAssigned = currentRows.length + pendingRows.length;
|
|
228
|
+
const assigned = agent.assignedWorkCount ?? visibleAssigned;
|
|
229
|
+
const pending = agent.pendingWorkCount ?? pendingRows.length;
|
|
230
|
+
const inProgress = agent.inProgressWorkCount ?? currentRows.filter((row) => row.state === "in-progress").length;
|
|
231
|
+
const blocked = agent.blockedWorkCount ?? currentRows.filter((row) => row.state === "blocked").length;
|
|
232
|
+
const context = agent.context;
|
|
233
|
+
const meterWidth = Math.max(10, Math.min(36, contentWidth - 24));
|
|
234
|
+
const rtName = agent.runtime ?? "unknown";
|
|
235
|
+
const rtSegs = [
|
|
236
|
+
{ text: " " },
|
|
237
|
+
{ text: "runtime:", token: "dim" },
|
|
238
|
+
{ text: " ".repeat(LABEL_W - "runtime:".length + 1) },
|
|
239
|
+
{ text: rtName },
|
|
240
|
+
{ text: " " },
|
|
241
|
+
...runtimeMarkSegs(agent.runtime),
|
|
242
|
+
];
|
|
243
|
+
const runtimeLine = { text: rtSegs.map((segment) => segment.text).join(""), segs: rtSegs };
|
|
244
|
+
const activityReason = agent.activity?.needsInput?.reason ?? agent.activity?.signalReason ?? null;
|
|
245
|
+
const needsRows = needs.length > 0
|
|
246
|
+
? needs.flatMap((item) => [
|
|
247
|
+
...wrapDetailValue("qitem", item.qitemId ?? "no actionable qitem id served", contentWidth),
|
|
248
|
+
...wrapDetailValue("reason", item.detail, contentWidth),
|
|
249
|
+
...(item.unblocks ? wrapDetailValue("action", `unblocks ${item.unblocks}`, contentWidth) : []),
|
|
250
|
+
...(item.evidenceRef ? wrapDetailValue("evidence", item.evidenceRef, contentWidth) : []),
|
|
251
|
+
])
|
|
252
|
+
: agent.activity?.needsInput && agent.activity.needsInput.count > 0
|
|
253
|
+
? wrapDetailValue("reason", agent.activity.needsInput.reason ?? "input required; no reason served", contentWidth)
|
|
254
|
+
: [fieldLine({ label: "state", value: "none on the served projections" })];
|
|
255
|
+
return [
|
|
256
|
+
...detailPage({ text: `agent ${agent.name} · ${agent.status}` }, [
|
|
257
|
+
{
|
|
258
|
+
title: `CONTEXT · ${context == null ? "unknown" : `${context}%`}`,
|
|
259
|
+
lines: [
|
|
260
|
+
fieldLine({ label: "meter", value: context == null ? "— (not yet known)" : `${context}% used ${barCells(context / 100, meterWidth)}` }),
|
|
261
|
+
fieldLine({ label: "tokens", value: `${number(agent.totalInputTokens)} input · ${number(agent.totalOutputTokens)} output · ${number(agent.contextWindowSize)} window` }),
|
|
262
|
+
runtimeLine,
|
|
263
|
+
...(agent.attach ? [fieldLine({ label: "attach", value: agent.attach })] : []),
|
|
264
|
+
fieldLine({ label: "terminal", value: `term ▸ pod ${pod.name}`, link: { type: "act", act: "open-terminal", view: `pod:${rig.name}/${pod.name}` } }),
|
|
265
|
+
],
|
|
266
|
+
},
|
|
267
|
+
{
|
|
268
|
+
title: "CURRENT ACTIVITY",
|
|
269
|
+
fields: [
|
|
270
|
+
{ label: "activity", value: agent.activity?.activity ?? agent.status },
|
|
271
|
+
...(activityReason ? [{ label: "reason", value: activityReason }] : []),
|
|
272
|
+
...(agent.activity?.decidedBy ? [{ label: "decided by", value: agent.activity.decidedBy }] : []),
|
|
273
|
+
...(agent.activity?.signalSource || agent.activity?.signalReason ? [{ label: "signal", value: `${agent.activity.signalSource ?? "unknown"} · ${agent.activity.signalReason ?? "no reason"}` }] : []),
|
|
274
|
+
...(agent.activity?.eventAt ? [{ label: "changed", value: agent.activity.eventAt }] : []),
|
|
275
|
+
],
|
|
276
|
+
},
|
|
277
|
+
{
|
|
278
|
+
title: "HEALTH",
|
|
279
|
+
lines: healthAgentLines(snap, {
|
|
280
|
+
kind: "seat",
|
|
281
|
+
rigId: rig.id ?? rig.name,
|
|
282
|
+
seatId: agent.nodeId ?? null,
|
|
283
|
+
seatName: agent.name,
|
|
284
|
+
local: found.host === snap.hosts[0],
|
|
285
|
+
}, contentWidth),
|
|
286
|
+
},
|
|
287
|
+
{ title: `CURRENT WORK · ${currentRows.length}`, lines: workRows(currentRows, contentWidth) },
|
|
288
|
+
{
|
|
289
|
+
title: "QUEUE",
|
|
290
|
+
lines: [
|
|
291
|
+
...wrapDetailValue("depth", `${assigned} assigned · ${pending} pending · ${inProgress} in progress · ${blocked} blocked`, contentWidth),
|
|
292
|
+
...(agent.assignedWorkCount == null ? wrapDetailValue("basis", `${visibleAssigned} rows visible in bounded list reads; complete count not served`, contentWidth) : []),
|
|
293
|
+
],
|
|
294
|
+
},
|
|
295
|
+
{ title: `UP NEXT · ${pending}`, lines: workRows(pendingRows, contentWidth) },
|
|
296
|
+
{ title: `NEEDS YOU · ${needs.length || agent.activity?.needsInput?.count || 0}`, lines: needsRows },
|
|
297
|
+
...(recentRows.length ? [{ title: "RECENTLY FINISHED · bounded window", lines: workRows(recentRows, contentWidth) }] : []),
|
|
298
|
+
{
|
|
299
|
+
title: "SEAT",
|
|
300
|
+
fields: [
|
|
301
|
+
{ label: "host", value: found.host.name },
|
|
302
|
+
{ label: "rig", value: rig.name },
|
|
303
|
+
{ label: "pod", value: pod.name },
|
|
304
|
+
],
|
|
305
|
+
lines: [
|
|
306
|
+
fieldLine({ label: "cwd", value: agent.cwd ?? "— (not served)" }),
|
|
307
|
+
],
|
|
308
|
+
},
|
|
309
|
+
{
|
|
310
|
+
title: "SPEC",
|
|
311
|
+
fields: [specInLibrary
|
|
312
|
+
? { label: "spec", value: agent.spec, link: { type: "cross", kind: "spec-of", name: agent.name, target: { host: found.host.name, rig: rig.name, pod: pod.name } } }
|
|
313
|
+
: { label: "spec", value: agent.spec ? `${agent.spec} (not in library)` : "—" }],
|
|
314
|
+
},
|
|
315
|
+
]),
|
|
316
|
+
];
|
|
317
|
+
}
|
|
66
318
|
function tabsLine(state, suffix) {
|
|
67
|
-
//
|
|
319
|
+
// Each topology tab is its own click zone (the first zone starts at
|
|
68
320
|
// content col 0, preserving the focus-marker floor); `tab graph` = the
|
|
69
321
|
// topology graph view (frame-01 hatchet mainline)
|
|
70
322
|
const labels = [
|
|
71
323
|
["table", state.viewTab === "table" ? "[ TABLE ]" : " TABLE "],
|
|
324
|
+
["recent", state.viewTab === "recent" ? "[ RECENT ]" : " RECENT "],
|
|
72
325
|
["overview", state.viewTab === "overview" ? "[ OVERVIEW ]" : " OVERVIEW "],
|
|
73
326
|
["graph", state.viewTab === "graph" ? "[ GRAPH ]" : " GRAPH "],
|
|
327
|
+
["health", state.viewTab === "health" ? "[ HEALTH ]" : " HEALTH "],
|
|
74
328
|
];
|
|
75
329
|
const text = `${labels.map(([, label]) => label).join("")} ${suffix}`;
|
|
76
330
|
const zones = [];
|
|
@@ -81,6 +335,100 @@ function tabsLine(state, suffix) {
|
|
|
81
335
|
}
|
|
82
336
|
return [{ text, zones }];
|
|
83
337
|
}
|
|
338
|
+
function localClock(iso) {
|
|
339
|
+
const date = new Date(iso);
|
|
340
|
+
if (Number.isNaN(date.getTime()))
|
|
341
|
+
return "??:??";
|
|
342
|
+
return `${String(date.getHours()).padStart(2, "0")}:${String(date.getMinutes()).padStart(2, "0")}`;
|
|
343
|
+
}
|
|
344
|
+
function queueRows(snap) {
|
|
345
|
+
return [...snap.attention, ...snap.blocked, ...snap.inProgress, ...snap.pending, ...snap.recentlyFinished];
|
|
346
|
+
}
|
|
347
|
+
function recentWorkText(snap, row) {
|
|
348
|
+
const qitem = queueRows(snap).find((candidate) => candidate.qitemId === row.qitemId);
|
|
349
|
+
const work = qitem?.summary?.trim() || qitem?.body.split("\n").find((line) => line.trim())?.trim();
|
|
350
|
+
return row.summary?.trim() || work || "no work served";
|
|
351
|
+
}
|
|
352
|
+
function agentDrillForSession(snap, session) {
|
|
353
|
+
const found = findAgentBySession(snap, session);
|
|
354
|
+
return found
|
|
355
|
+
? { type: "drill", resource: "agent", name: found.agent.name, target: { host: found.host.name, rig: found.rig.name, pod: found.pod.name } }
|
|
356
|
+
: undefined;
|
|
357
|
+
}
|
|
358
|
+
function recentTargetAction(snap, row) {
|
|
359
|
+
if (row.targetKind === "mission") {
|
|
360
|
+
if (snap.scopes?.some((mission) => mission.mission === row.target))
|
|
361
|
+
return { type: "scopes-mission-open", mission: row.target };
|
|
362
|
+
}
|
|
363
|
+
if (row.targetKind === "slice") {
|
|
364
|
+
for (const mission of snap.scopes ?? []) {
|
|
365
|
+
const slice = mission.slices.find((candidate) => candidate.id === row.target || candidate.dirName === row.target);
|
|
366
|
+
if (slice)
|
|
367
|
+
return { type: "scopes-open", mission: mission.mission, slice: slice.dirName };
|
|
368
|
+
}
|
|
369
|
+
}
|
|
370
|
+
const qitem = queueRows(snap).find((candidate) => candidate.qitemId === row.qitemId || candidate.qitemId === row.target);
|
|
371
|
+
return (qitem ? agentDrillForSession(snap, qitem.destinationSession) : undefined)
|
|
372
|
+
?? agentDrillForSession(snap, row.actorSession)
|
|
373
|
+
?? (row.rig && snap.hosts.some((host) => host.rigs.some((rig) => rig.name === row.rig))
|
|
374
|
+
? { type: "drill", resource: "rig", name: row.rig }
|
|
375
|
+
: undefined);
|
|
376
|
+
}
|
|
377
|
+
function recentScopeMatches(snap, scope) {
|
|
378
|
+
const served = snap.recentTransitionsScope
|
|
379
|
+
?? (snap.recentTransitionsRig ? { kind: "rig", rig: snap.recentTransitionsRig } : null);
|
|
380
|
+
if (!served || served.kind !== scope.kind)
|
|
381
|
+
return false;
|
|
382
|
+
return scope.kind === "instance" || (served.kind === "rig" && served.rig === scope.rig);
|
|
383
|
+
}
|
|
384
|
+
function recentLines(snap, scope, width, expanded) {
|
|
385
|
+
if (!recentScopeMatches(snap, scope) || snap.recentTransitions == null)
|
|
386
|
+
return [];
|
|
387
|
+
const timeW = 5;
|
|
388
|
+
const rows = expanded ? snap.recentTransitions : snap.recentTransitions.slice(-5);
|
|
389
|
+
const lines = [
|
|
390
|
+
...(expanded ? [] : [{ text: "" }]),
|
|
391
|
+
sectionRule(`RECENT · ${scope.kind === "instance" ? "instance" : `rig ${scope.rig}`} · material queue transitions · newest last`, width),
|
|
392
|
+
];
|
|
393
|
+
if (rows.length === 0)
|
|
394
|
+
return [...lines, { text: " No recorded transitions in the current window." }];
|
|
395
|
+
if (width < 78) {
|
|
396
|
+
const rigW = scope.kind === "instance" ? 9 : 0;
|
|
397
|
+
const changeW = Math.max(16, width - timeW - rigW - 2);
|
|
398
|
+
lines.push({ text: alignedRow([["TIME", timeW], ...(rigW ? [["RIG", rigW]] : []), ["CHANGE", changeW]]) });
|
|
399
|
+
for (const row of rows) {
|
|
400
|
+
const action = recentTargetAction(snap, row);
|
|
401
|
+
lines.push({
|
|
402
|
+
text: alignedRow([[localClock(row.ts), timeW], ...(rigW ? [[pad(row.rig ?? "?", rigW), rigW]] : []), [pad(row.change, changeW), changeW]]).slice(0, width),
|
|
403
|
+
...(action ? { action } : {}),
|
|
404
|
+
});
|
|
405
|
+
lines.push({ text: ` ${pad(row.actorSession, Math.max(8, width - 8))}`.slice(0, width), ...(action ? { action } : {}) });
|
|
406
|
+
lines.push({ text: ` → ${row.target}`.slice(0, width), ...(action ? { action } : {}) });
|
|
407
|
+
lines.push(...wrapDetailValue("work", recentWorkText(snap, row), width)
|
|
408
|
+
.map((line) => ({ ...line, ...(action ? { action } : {}) })));
|
|
409
|
+
}
|
|
410
|
+
return lines;
|
|
411
|
+
}
|
|
412
|
+
const rigW = scope.kind === "instance" ? Math.min(16, Math.max(9, Math.floor(width * 0.13))) : 0;
|
|
413
|
+
const actorW = Math.min(26, Math.max(16, Math.floor(width * 0.21)));
|
|
414
|
+
const changeW = Math.min(36, Math.max(20, Math.floor(width * 0.28)));
|
|
415
|
+
const targetW = Math.max(10, width - timeW - rigW - actorW - changeW - (scope.kind === "instance" ? 4 : 3));
|
|
416
|
+
lines.push({ text: alignedRow([["TIME", timeW], ...(scope.kind === "instance" ? [["RIG", rigW]] : []), ["ACTOR", actorW], ["CHANGE", changeW], ["TARGET", targetW]]) });
|
|
417
|
+
for (const row of rows) {
|
|
418
|
+
const action = recentTargetAction(snap, row);
|
|
419
|
+
const text = alignedRow([
|
|
420
|
+
[localClock(row.ts), timeW],
|
|
421
|
+
...(scope.kind === "instance" ? [[pad(row.rig ?? "?", rigW), rigW]] : []),
|
|
422
|
+
[pad(row.actorSession, actorW), actorW],
|
|
423
|
+
[pad(row.change, changeW), changeW],
|
|
424
|
+
[pad(row.target, targetW), targetW],
|
|
425
|
+
]).slice(0, width);
|
|
426
|
+
lines.push({ text, ...(action ? { action } : {}) });
|
|
427
|
+
lines.push(...wrapDetailValue("work", recentWorkText(snap, row), width)
|
|
428
|
+
.map((line) => ({ ...line, ...(action ? { action } : {}) })));
|
|
429
|
+
}
|
|
430
|
+
return lines;
|
|
431
|
+
}
|
|
84
432
|
function specTabsLine(state, name) {
|
|
85
433
|
const active = state.viewTab === "topology" || state.viewTab === "yaml" ? state.viewTab : "configuration";
|
|
86
434
|
const labels = ["topology", "configuration", "yaml"];
|
|
@@ -157,10 +505,133 @@ function fieldWrapped(label, values) {
|
|
|
157
505
|
const first = wrapped[0].text.slice(valueCol);
|
|
158
506
|
return [fieldLine({ label, value: first }), ...wrapped.slice(1)];
|
|
159
507
|
}
|
|
508
|
+
function instanceContentLines(state, snap, host, contentWidth, motion) {
|
|
509
|
+
const lines = tabsLine(state, `instance ${host.name}`);
|
|
510
|
+
const scope = { kind: "instance", local: host === snap.hosts[0] };
|
|
511
|
+
if (state.viewTab === "health")
|
|
512
|
+
return [...lines, { text: "" }, ...healthListLines(snap, scope, contentWidth)];
|
|
513
|
+
if (state.viewTab === "recent") {
|
|
514
|
+
const recent = recentLines(snap, scope, contentWidth, true);
|
|
515
|
+
return recent.length > 0
|
|
516
|
+
? [...lines, ...recent]
|
|
517
|
+
: [...lines, { text: "" }, { text: motion.loading ? `${motion.frame} instance RECENT read pending` : "(instance RECENT window not served)" }];
|
|
518
|
+
}
|
|
519
|
+
if (state.viewTab === "overview") {
|
|
520
|
+
return [
|
|
521
|
+
...lines,
|
|
522
|
+
...detailPage({ text: `instance ${host.name}` }, [
|
|
523
|
+
{
|
|
524
|
+
title: "instance",
|
|
525
|
+
fields: [
|
|
526
|
+
{ label: "identity", value: host.name },
|
|
527
|
+
{ label: "transport", value: host.id ?? "local" },
|
|
528
|
+
{ label: "shape", value: `${host.rigs.length} rigs · ${host.rigs.reduce((n, rig) => n + rig.pods.reduce((m, pod) => m + pod.agents.length, 0), 0)} seats` },
|
|
529
|
+
],
|
|
530
|
+
},
|
|
531
|
+
{
|
|
532
|
+
title: "rigs",
|
|
533
|
+
lines: host.rigs.length > 0
|
|
534
|
+
? host.rigs.map((rig) => listItem(alignedRow([[rig.name, 20], [rig.lifecycleState ?? "unknown", 20], [`${rig.pods.length} pods · ${rig.pods.reduce((n, pod) => n + pod.agents.length, 0)} seats`, 24]]), { type: "drill", resource: "rig", name: rig.name, target: { host: host.name } }))
|
|
535
|
+
: [{ text: " (no local rigs served — proven empty)" }],
|
|
536
|
+
},
|
|
537
|
+
]),
|
|
538
|
+
];
|
|
539
|
+
}
|
|
540
|
+
if (state.viewTab === "graph") {
|
|
541
|
+
for (const rig of host.rigs) {
|
|
542
|
+
lines.push({ text: "" }, sectionRule(`rig ${rig.name} · ${rig.lifecycleState ?? "unknown"}`, contentWidth));
|
|
543
|
+
if (!rig.graph) {
|
|
544
|
+
if (motion.loading) {
|
|
545
|
+
if (!motion.reduced)
|
|
546
|
+
motion.used = true;
|
|
547
|
+
lines.push({ text: ` ${motion.frame} topology graph read pending` });
|
|
548
|
+
}
|
|
549
|
+
else if (snap.readErrors.some((error) => error.startsWith(`graph(${rig.name})`))) {
|
|
550
|
+
lines.push({ text: " ✕ topology graph read failed — named in the status line" });
|
|
551
|
+
}
|
|
552
|
+
else {
|
|
553
|
+
lines.push({ text: " (no topology graph served)" });
|
|
554
|
+
}
|
|
555
|
+
continue;
|
|
556
|
+
}
|
|
557
|
+
const canvas = renderGraphStyle(state.graphStyle, rig.graph, { host: host.name, rig: rig.name, selected: null }, contentWidth);
|
|
558
|
+
const plain = canvas.plainLines();
|
|
559
|
+
const segs = canvas.segLines();
|
|
560
|
+
for (let row = 0; row < plain.length; row++)
|
|
561
|
+
lines.push({
|
|
562
|
+
text: plain[row],
|
|
563
|
+
segs: segs[row],
|
|
564
|
+
zones: canvas.zones.filter((zone) => zone.y === row).map((zone) => ({ start: zone.start, end: zone.end, action: zone.action })),
|
|
565
|
+
});
|
|
566
|
+
}
|
|
567
|
+
if (host.rigs.length === 0)
|
|
568
|
+
lines.push({ text: "" }, { text: " (no local rigs served — proven empty)" });
|
|
569
|
+
lines.push({ text: "" }, { text: ` style: ${state.graphStyle} · style hatchet|braille|braille-fallback rides the command bar` });
|
|
570
|
+
return lines;
|
|
571
|
+
}
|
|
572
|
+
lines.push(healthSummaryLine(snap, scope, contentWidth));
|
|
573
|
+
lines.push({ text: state.filter ? `/ filter instance rows: ${state.filter} · / replace · esc clear` : "/ filter instance rows…" });
|
|
574
|
+
const columns = instanceAgentColumns(contentWidth);
|
|
575
|
+
lines.push({ text: tableRow(columns, { rig: "RIG", pod: "POD", seat: "SEAT", runtime: "RT", context: "CTX", status: "STATE", queue: "Q", work: "WORK", now: "NOW" }) });
|
|
576
|
+
lines.push({ text: "━".repeat(columnsWidth(columns)) });
|
|
577
|
+
let seatCount = 0;
|
|
578
|
+
let workingCount = 0;
|
|
579
|
+
let attentionCount = 0;
|
|
580
|
+
let openCount = 0;
|
|
581
|
+
for (const rig of host.rigs) {
|
|
582
|
+
const agents = rig.pods.flatMap((pod) => pod.agents.map((agent) => ({ pod: pod.name, agent })))
|
|
583
|
+
.filter(({ pod, agent }) => !state.filter || rig.name.includes(state.filter) || pod.includes(state.filter) || agent.name.includes(state.filter));
|
|
584
|
+
if (state.filter && agents.length === 0 && !rig.name.includes(state.filter))
|
|
585
|
+
continue;
|
|
586
|
+
const rigAction = { type: "drill", resource: "rig", name: rig.name, target: { host: host.name } };
|
|
587
|
+
if (agents.length === 0) {
|
|
588
|
+
lines.push({
|
|
589
|
+
text: tableRow(columns, { rig: rig.name, pod: "—", seat: "(no seats)", status: rig.lifecycleState ?? "unknown" }),
|
|
590
|
+
action: rigAction,
|
|
591
|
+
});
|
|
592
|
+
continue;
|
|
593
|
+
}
|
|
594
|
+
let previousPod = null;
|
|
595
|
+
for (const { pod, agent } of agents) {
|
|
596
|
+
const firstInPod = pod !== previousPod;
|
|
597
|
+
if (firstInPod && previousPod != null)
|
|
598
|
+
lines.push({ text: "┈".repeat(columnsWidth(columns)) });
|
|
599
|
+
previousPod = pod;
|
|
600
|
+
const stateCell = operationalState(agent.status, motion);
|
|
601
|
+
const queue = queueFacts(snap, agent.session);
|
|
602
|
+
seatCount += 1;
|
|
603
|
+
if (["active", "working", "running"].includes(agent.status))
|
|
604
|
+
workingCount += 1;
|
|
605
|
+
if (/attention|needs|blocked|unknown|failed/.test(agent.status))
|
|
606
|
+
attentionCount += 1;
|
|
607
|
+
openCount += queue.count;
|
|
608
|
+
lines.push({
|
|
609
|
+
text: tableRow(columns, {
|
|
610
|
+
rig: rig.name,
|
|
611
|
+
pod: firstInPod ? pod : "",
|
|
612
|
+
seat: `${stateCell.mark} ${seatName(pod, agent.name)}`,
|
|
613
|
+
runtime: runtimeShort(agent.runtime),
|
|
614
|
+
context: contextCompact(agent.context, contentWidth < 110),
|
|
615
|
+
status: stateCell.word,
|
|
616
|
+
queue: queue.count || "·",
|
|
617
|
+
work: queue.work,
|
|
618
|
+
now: queue.now,
|
|
619
|
+
}),
|
|
620
|
+
action: { type: "drill", resource: "agent", name: agent.name, target: { host: host.name, rig: rig.name, pod } },
|
|
621
|
+
zones: [{ start: 0, end: columns[0][2], action: rigAction }],
|
|
622
|
+
});
|
|
623
|
+
}
|
|
624
|
+
}
|
|
625
|
+
lines.push({ text: "" }, { text: `${host.rigs.length} rigs · ${seatCount} seats · ${workingCount} working · ${attentionCount} need attention · ${openCount} open rows` });
|
|
626
|
+
lines.push(...recentLines(snap, scope, contentWidth, false));
|
|
627
|
+
return lines;
|
|
628
|
+
}
|
|
160
629
|
function contentLines(state, snap, contentWidth, motion) {
|
|
161
630
|
const contentWidthForGraph = contentWidth;
|
|
162
631
|
void contentWidthForGraph;
|
|
163
632
|
const lines = [];
|
|
633
|
+
if (state.healthOpen)
|
|
634
|
+
return healthDetailLines(snap, state.healthOpen, contentWidth);
|
|
164
635
|
// PULSE is a FULL-WIDTH view handled by an early return in renderScreen
|
|
165
636
|
// (renderPulseScreen) — it never reaches the sidebar+content layout below.
|
|
166
637
|
if (state.section === "topology") {
|
|
@@ -187,80 +658,13 @@ function contentLines(state, snap, contentWidth, motion) {
|
|
|
187
658
|
const found = hostName ? findAgent(snap, leaf.name, { host: hostName, rig: rigName, pod: podName }) : findAgent(snap, leaf.name);
|
|
188
659
|
if (!found)
|
|
189
660
|
return [{ text: `agent "${leaf.name}" not in the current snapshot` }];
|
|
190
|
-
|
|
191
|
-
const specInLibrary = !!agent.spec && !!findSpec(snap, agent.spec);
|
|
192
|
-
// a4c9548a — S19 FOLLOW-ON FOUNDER RULING (binding, bounds the S19 marks
|
|
193
|
-
// ruling): where there is ROOM, WRITE THE NAME — an icon NEVER replaces text
|
|
194
|
-
// as the value. The detail page has room, so the runtime NAME is the VALUE
|
|
195
|
-
// (honest placeholder when unserved); the mark's OWN token segments still ride
|
|
196
|
-
// the seg channel (ROUND-4: colors/background survive stylization) but only
|
|
197
|
-
// ACCOMPANY the name decoratively, never substitute. Topology cards remain
|
|
198
|
-
// mark-only by space (layout.ts/hatchet.ts) — the ruling is bounded, not reversed.
|
|
199
|
-
// LEG-7 LOW 2 (dead-arm cleanup, wave qitem 79159e6f): the daemon coerces a null runtime to the
|
|
200
|
-
// string "unknown" BEFORE the wire (the icon-fix QA at 5a70e200 proved the old "— (not served)"
|
|
201
|
-
// arm unreachable), so the defensive fallback matches that coercion — honest, never a misleading
|
|
202
|
-
// placeholder. (The cwd field below keeps its own "— (not served)" — a legitimately-servable value.)
|
|
203
|
-
const rtName = agent.runtime ?? "unknown";
|
|
204
|
-
const rtSegs = [
|
|
205
|
-
{ text: " " },
|
|
206
|
-
{ text: "runtime:", token: "dim" },
|
|
207
|
-
{ text: " ".repeat(LABEL_W - "runtime:".length + 1) },
|
|
208
|
-
{ text: rtName },
|
|
209
|
-
{ text: " " },
|
|
210
|
-
...runtimeMarkSegs(agent.runtime),
|
|
211
|
-
];
|
|
212
|
-
const runtimeLine = { text: rtSegs.map((g) => g.text).join(""), segs: rtSegs };
|
|
213
|
-
return detailPage({ text: `agent ${agent.name}` }, [
|
|
214
|
-
{
|
|
215
|
-
title: "seat",
|
|
216
|
-
fields: [
|
|
217
|
-
{ label: "state", value: agent.status },
|
|
218
|
-
{ label: "host", value: found.host.name },
|
|
219
|
-
{ label: "rig", value: rig.name },
|
|
220
|
-
{ label: "pod", value: pod.name },
|
|
221
|
-
],
|
|
222
|
-
lines: [
|
|
223
|
-
runtimeLine,
|
|
224
|
-
fieldLine({
|
|
225
|
-
label: "context",
|
|
226
|
-
// ROUND-3 mr7: a quiet determinate bar rides REAL fractions only
|
|
227
|
-
value: agent.context == null
|
|
228
|
-
? "— (not yet known)"
|
|
229
|
-
: `${agent.context}% used · ${agent.tokens ?? "—"} tokens ${barCells(agent.context / 100, 10)}`,
|
|
230
|
-
}),
|
|
231
|
-
// S19 MR4 (§D9, founder: "very important"): the FULL absolute
|
|
232
|
-
// working directory, verbatim; honest — when not served
|
|
233
|
-
fieldLine({ label: "cwd", value: agent.cwd ?? "— (not served)" }),
|
|
234
|
-
],
|
|
235
|
-
},
|
|
236
|
-
{
|
|
237
|
-
title: "spec",
|
|
238
|
-
fields: [
|
|
239
|
-
specInLibrary
|
|
240
|
-
? {
|
|
241
|
-
label: "spec",
|
|
242
|
-
value: agent.spec,
|
|
243
|
-
link: { type: "cross", kind: "spec-of", name: agent.name, target: { host: found.host.name, rig: rig.name, pod: pod.name } },
|
|
244
|
-
}
|
|
245
|
-
: { label: "spec", value: agent.spec ? `${agent.spec} (not in library)` : "—" },
|
|
246
|
-
],
|
|
247
|
-
},
|
|
248
|
-
{
|
|
249
|
-
title: "actions",
|
|
250
|
-
fields: [
|
|
251
|
-
...(agent.attach ? [{ label: "attach", value: agent.attach }] : []),
|
|
252
|
-
{
|
|
253
|
-
label: "terminal",
|
|
254
|
-
value: `term ▸ pod ${pod.name}`,
|
|
255
|
-
link: { type: "act", act: "open-terminal", view: `pod:${rig.name}/${pod.name}` },
|
|
256
|
-
},
|
|
257
|
-
],
|
|
258
|
-
},
|
|
259
|
-
]);
|
|
661
|
+
return agentDetailLines(snap, found, contentWidth);
|
|
260
662
|
}
|
|
261
|
-
const rigName = state.drill.find((d) => d.kind === "rig")?.name ?? snap.hosts[0]?.rigs[0]?.name;
|
|
262
663
|
const hostName = state.drill.find((d) => d.kind === "host")?.name;
|
|
263
664
|
const host = (hostName ? snap.hosts.find((candidate) => candidate.name === hostName) : snap.hosts[0]);
|
|
665
|
+
if (leaf?.kind === "host" && host)
|
|
666
|
+
return instanceContentLines(state, snap, host, contentWidth, motion);
|
|
667
|
+
const rigName = state.drill.find((d) => d.kind === "rig")?.name ?? snap.hosts[0]?.rigs[0]?.name;
|
|
264
668
|
const rig = host?.rigs.find((candidate) => candidate.name === rigName);
|
|
265
669
|
if (!rig || !host) {
|
|
266
670
|
// round-6 (guard): the ROOT topology branch consumes the OWNER's load
|
|
@@ -284,6 +688,15 @@ function contentLines(state, snap, contentWidth, motion) {
|
|
|
284
688
|
.filter((a) => !state.filter || a.name.includes(state.filter) || a.pod.includes(state.filter));
|
|
285
689
|
const suffix = `rig ${rig.name}${podFilter ? ` · pod ${podFilter}` : ""}${state.filter ? ` · filter "${state.filter}"` : ""}`;
|
|
286
690
|
lines.push(...tabsLine(state, suffix));
|
|
691
|
+
const healthScope = { kind: "rig", rigId: rig.id ?? rig.name, rigName: rig.name, local: host === snap.hosts[0] };
|
|
692
|
+
if (state.viewTab === "health")
|
|
693
|
+
return [...lines, { text: "" }, ...healthListLines(snap, healthScope, contentWidth)];
|
|
694
|
+
if (state.viewTab === "recent") {
|
|
695
|
+
const recent = recentLines(snap, { kind: "rig", rig: rig.name }, contentWidth, true);
|
|
696
|
+
return recent.length > 0
|
|
697
|
+
? [...lines, ...recent]
|
|
698
|
+
: [...lines, { text: "" }, { text: motion.loading ? `${motion.frame} rig RECENT read pending` : "(rig RECENT window not served)" }];
|
|
699
|
+
}
|
|
287
700
|
if (state.viewTab === "graph") {
|
|
288
701
|
// slice-17 topology view (frame-01): the rig's SERVED /graph projection
|
|
289
702
|
// rendered by the style registry; honest-empty until the read answers.
|
|
@@ -332,7 +745,8 @@ function contentLines(state, snap, contentWidth, motion) {
|
|
|
332
745
|
lines.push({ text: ` style: ${state.graphStyle} · style hatchet|braille|braille-fallback rides the command bar` });
|
|
333
746
|
return lines;
|
|
334
747
|
}
|
|
335
|
-
lines.push(
|
|
748
|
+
lines.push(healthSummaryLine(snap, healthScope, contentWidth));
|
|
749
|
+
lines.push({ text: state.filter ? `/ filter agents: ${state.filter} · / replace · esc clear` : "/ filter agents…" });
|
|
336
750
|
if (state.viewTab === "overview") {
|
|
337
751
|
lines.push(...detailPage({ text: `rig ${rig.name}` }, [
|
|
338
752
|
{
|
|
@@ -351,16 +765,24 @@ function contentLines(state, snap, contentWidth, motion) {
|
|
|
351
765
|
return lines;
|
|
352
766
|
}
|
|
353
767
|
const agentCols = agentColumns(contentWidth);
|
|
768
|
+
const narrowFactory = !agentCols.some(([key]) => key === "model");
|
|
769
|
+
if (narrowFactory)
|
|
770
|
+
lines.push({ text: "MODEL/NOW/ACTIONS on drill (enter)" });
|
|
354
771
|
lines.push({
|
|
355
772
|
text: tableRow(agentCols, {
|
|
356
|
-
|
|
357
|
-
|
|
773
|
+
pod: "POD", seat: "SEAT", runtime: "RT", model: "MODEL", context: "CTX",
|
|
774
|
+
status: "STATE", queue: "Q", work: "WORK", now: "NOW", actions: "ACTIONS",
|
|
358
775
|
}),
|
|
359
776
|
});
|
|
360
|
-
lines.push({ text: "
|
|
777
|
+
lines.push({ text: "━".repeat(columnsWidth(agentCols)) });
|
|
361
778
|
const actionsIndex = agentCols.findIndex(([key]) => key === "actions");
|
|
362
|
-
const actionsColStart = agentCols.slice(0, actionsIndex).reduce((n, [, , width]) => n + width + 1, 0);
|
|
779
|
+
const actionsColStart = actionsIndex < 0 ? -1 : agentCols.slice(0, actionsIndex).reduce((n, [, , width]) => n + width + 1, 0);
|
|
780
|
+
let previousPod = null;
|
|
363
781
|
for (const a of rows) {
|
|
782
|
+
const firstInPod = a.pod !== previousPod;
|
|
783
|
+
if (firstInPod && previousPod != null && !narrowFactory)
|
|
784
|
+
lines.push({ text: "┈".repeat(columnsWidth(agentCols)) });
|
|
785
|
+
previousPod = a.pod;
|
|
364
786
|
// ACTIONS = drive-structure ONLY (BR-9), each mapped to an EXISTING
|
|
365
787
|
// write contract: `run ▸` = the rig-restore write (rendered only where
|
|
366
788
|
// it applies — the seat is not running); `term ▸` = the terminal-open
|
|
@@ -368,25 +790,31 @@ function contentLines(state, snap, contentWidth, motion) {
|
|
|
368
790
|
const canRun = a.canRun ?? !a.live;
|
|
369
791
|
const actionsCell = canRun ? "run ▸ · term ▸" : "term ▸";
|
|
370
792
|
const zones = [];
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
793
|
+
if (actionsColStart >= 0) {
|
|
794
|
+
const termOffset = actionsColStart + actionsCell.indexOf("term ▸");
|
|
795
|
+
zones.push({ start: termOffset, end: termOffset + "term ▸".length, action: { type: "act", act: "open-terminal", view: `pod:${rig.name}/${a.pod}` } });
|
|
796
|
+
}
|
|
797
|
+
if (canRun && actionsColStart >= 0)
|
|
374
798
|
zones.push({
|
|
375
799
|
start: actionsColStart,
|
|
376
800
|
end: actionsColStart + "run ▸".length,
|
|
377
801
|
action: { type: "act", act: "run", rigId: rig.id ?? rig.name, agent: a.name },
|
|
378
802
|
});
|
|
803
|
+
const stateCell = operationalState(a.status, motion);
|
|
804
|
+
const queue = queueFacts(snap, a.session);
|
|
379
805
|
lines.push({
|
|
380
806
|
// the WHOLE row is the hit surface (not a testid'd control): clicking
|
|
381
807
|
// any visible cell opens the agent; the ACTIONS zones override.
|
|
382
808
|
text: tableRow(agentCols, {
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
context: a.context
|
|
388
|
-
|
|
389
|
-
|
|
809
|
+
pod: firstInPod ? a.pod : "",
|
|
810
|
+
seat: `${stateCell.mark} ${seatName(a.pod, a.name)}`,
|
|
811
|
+
runtime: runtimeShort(a.runtime),
|
|
812
|
+
model: tableModel(a.model),
|
|
813
|
+
context: contextCompact(a.context, narrowFactory),
|
|
814
|
+
status: stateCell.word,
|
|
815
|
+
queue: queue.count || "·",
|
|
816
|
+
work: queue.work,
|
|
817
|
+
now: queue.now,
|
|
390
818
|
actions: actionsCell,
|
|
391
819
|
}),
|
|
392
820
|
action: { type: "drill", resource: "agent", name: a.name, target: { host: host.name, rig: rig.name, pod: a.pod } },
|
|
@@ -394,7 +822,11 @@ function contentLines(state, snap, contentWidth, motion) {
|
|
|
394
822
|
});
|
|
395
823
|
}
|
|
396
824
|
lines.push({ text: "" });
|
|
397
|
-
|
|
825
|
+
const working = rows.filter((agent) => ["active", "working", "running"].includes(agent.status)).length;
|
|
826
|
+
const attention = rows.filter((agent) => /attention|needs|blocked|unknown|failed/.test(agent.status)).length;
|
|
827
|
+
lines.push({ text: `${rows.length} seats · ${working} working · ${attention} need attention · ${rows.reduce((n, agent) => n + queueFacts(snap, agent.session).count, 0)} open rows` });
|
|
828
|
+
if (!podFilter)
|
|
829
|
+
lines.push(...recentLines(snap, { kind: "rig", rig: rig.name }, contentWidth, false));
|
|
398
830
|
return lines;
|
|
399
831
|
}
|
|
400
832
|
if (state.section === "specs") {
|
|
@@ -529,7 +961,7 @@ function contentLines(state, snap, contentWidth, motion) {
|
|
|
529
961
|
return lines;
|
|
530
962
|
}
|
|
531
963
|
lines.push({ text: "SPEC LIBRARY" });
|
|
532
|
-
lines.push({ text: state.filter ? `/ filter specs: ${state.filter}` : "/ filter specs…" });
|
|
964
|
+
lines.push({ text: state.filter ? `/ filter specs: ${state.filter} · / replace · esc clear` : "/ filter specs…" });
|
|
533
965
|
// mirrors the explorer exactly (same grouping, same expansion state, same
|
|
534
966
|
// filter-overrides-collapse rule) — glance consistency across panes
|
|
535
967
|
const expandedSet = new Set(state.expanded);
|
|
@@ -623,8 +1055,9 @@ function contentLines(state, snap, contentWidth, motion) {
|
|
|
623
1055
|
return lines;
|
|
624
1056
|
}
|
|
625
1057
|
if (state.section === "scopes") {
|
|
626
|
-
// SCOPES owns both levels
|
|
627
|
-
//
|
|
1058
|
+
// SCOPES owns both levels. Both mission-graph and Explorer slice routes land
|
|
1059
|
+
// on the same execution-backed canonical detail; store-direct content is
|
|
1060
|
+
// composed into that page instead of surviving as a competing destination.
|
|
628
1061
|
const sel = state.scopesSelected;
|
|
629
1062
|
const missionName = state.scopesMission;
|
|
630
1063
|
const execution = snap.execution?.mission === missionName ? snap.execution : null;
|
|
@@ -632,7 +1065,16 @@ function contentLines(state, snap, contentWidth, motion) {
|
|
|
632
1065
|
? (snap.scopes ?? []).find((m) => m.mission === sel.mission)?.slices.find((sl) => sl.dirName === sel.slice) ?? null
|
|
633
1066
|
: null;
|
|
634
1067
|
if (state.executionOpen && execution) {
|
|
635
|
-
return executionContentLines(execution, snap.scopes, snap.readErrors, state.executionOpen, contentWidth, false
|
|
1068
|
+
return executionContentLines(execution, snap.scopes, snap.readErrors, state.executionOpen, contentWidth, false, snap.sliceDetail, {
|
|
1069
|
+
collapseReqs: state.scopesCollapseReqs,
|
|
1070
|
+
narrative: state.scopesNarrative,
|
|
1071
|
+
});
|
|
1072
|
+
}
|
|
1073
|
+
if (detail && execution) {
|
|
1074
|
+
return executionContentLines(execution, snap.scopes, snap.readErrors, `slice:${detail.id ?? detail.dirName}`, contentWidth, false, snap.sliceDetail, {
|
|
1075
|
+
collapseReqs: state.scopesCollapseReqs,
|
|
1076
|
+
narrative: state.scopesNarrative,
|
|
1077
|
+
});
|
|
636
1078
|
}
|
|
637
1079
|
if (!detail && missionName) {
|
|
638
1080
|
const lines = executionContentLines(execution, snap.scopes, snap.readErrors, state.executionOpen, contentWidth, !snap.hydratedAt || snap.executionMission !== missionName);
|
|
@@ -642,7 +1084,7 @@ function contentLines(state, snap, contentWidth, motion) {
|
|
|
642
1084
|
collapseReqs: state.scopesCollapseReqs,
|
|
643
1085
|
narrative: state.scopesNarrative,
|
|
644
1086
|
width: contentWidth,
|
|
645
|
-
executionStrip: detail ? executionSliceStripLines(
|
|
1087
|
+
executionStrip: detail ? executionSliceStripLines(null, detail.id ?? detail.dirName, detail.dirName, contentWidth, detail.status) : undefined,
|
|
646
1088
|
});
|
|
647
1089
|
}
|
|
648
1090
|
return [{ text: `(${state.section})` }];
|
|
@@ -670,14 +1112,17 @@ function spliceMarkerIntoSegs(segs, pos) {
|
|
|
670
1112
|
}
|
|
671
1113
|
return out;
|
|
672
1114
|
}
|
|
673
|
-
function paneRule(cols, joint, leftTitle, rightTitle) {
|
|
674
|
-
|
|
675
|
-
const
|
|
676
|
-
const
|
|
677
|
-
const
|
|
678
|
-
|
|
1115
|
+
function paneRule(cols, explW, joint, leftTitle, rightTitle) {
|
|
1116
|
+
void joint;
|
|
1117
|
+
const left = leftTitle ? `━ ${leftTitle} ` : "";
|
|
1118
|
+
const right = rightTitle ? `━ ${rightTitle} ` : "";
|
|
1119
|
+
const leftPart = (left + "━".repeat(explW)).slice(0, explW);
|
|
1120
|
+
const rightPart = (right + "━".repeat(cols)).slice(0, Math.max(cols - explW - 1, 0));
|
|
1121
|
+
return `${leftPart}╋${rightPart}`;
|
|
679
1122
|
}
|
|
680
1123
|
function keybindHints(state) {
|
|
1124
|
+
if (state.copyMode)
|
|
1125
|
+
return "drag to select/copy · v resume mouse · q quit";
|
|
681
1126
|
// Affordance surfaces on REAL scrollability (contentMaxOffset), never gated
|
|
682
1127
|
// behind already-being-content-focused — that gate was the catch-22 (the
|
|
683
1128
|
// hint hid exactly where it was needed). When ↑↓ themselves scroll (a
|
|
@@ -686,7 +1131,8 @@ function keybindHints(state) {
|
|
|
686
1131
|
const arrowsScroll = specDetailArrowsScroll(state);
|
|
687
1132
|
const nav = arrowsScroll ? "↑↓ scroll" : "↑↓ move";
|
|
688
1133
|
const pageScroll = state.contentMaxOffset > 0 && !arrowsScroll ? "⇞⇟ scroll · " : "";
|
|
689
|
-
|
|
1134
|
+
const filter = state.filter ? "/ replace · esc clear" : "/ filter";
|
|
1135
|
+
return `${nav} · ←→ pane · ⏎ open · ${pageScroll}: command · ${filter} · v select/copy · f footer · q quit`;
|
|
690
1136
|
}
|
|
691
1137
|
/** The PULSE view renders FULL-WIDTH with NO explorer sidebar (increment 2). A
|
|
692
1138
|
* minimal self-contained screen: cmd bar + a full-width titled rule + the pulse
|
|
@@ -712,8 +1158,19 @@ function truncateSegs(segs, width) {
|
|
|
712
1158
|
}
|
|
713
1159
|
return out;
|
|
714
1160
|
}
|
|
1161
|
+
/** The disclosure cell is a distinct control from the row body. Hit lookup is
|
|
1162
|
+
* first-match, so register this one-cell target before the row-wide target. */
|
|
1163
|
+
function pushExplorerTargets(hitMap, row, display, y, explorerWidth) {
|
|
1164
|
+
if (row.disclosureAction) {
|
|
1165
|
+
const at = display.search(/[⌄›]/);
|
|
1166
|
+
if (at >= 0)
|
|
1167
|
+
hitMap.push({ y, x1: at + 2, x2: at + 2, action: row.disclosureAction });
|
|
1168
|
+
}
|
|
1169
|
+
hitMap.push({ y, x1: 1, x2: explorerWidth, action: row.action });
|
|
1170
|
+
}
|
|
715
1171
|
function renderPulseScreen(state, snap, options, inputLine) {
|
|
716
1172
|
const { cols = 120, rows = 32, nowMs = 0 } = options;
|
|
1173
|
+
const explW = explorerWidth(cols);
|
|
717
1174
|
// FOUNDER OPTION-B (supersedes the earlier full-width ruling): PULSE renders as
|
|
718
1175
|
// a content-pane view INSIDE the normal chrome — the EXPLORER sidebar STAYS (it
|
|
719
1176
|
// is the founder's action path: from a needs-you row, mouse to the sidebar and
|
|
@@ -733,7 +1190,7 @@ function renderPulseScreen(state, snap, options, inputLine) {
|
|
|
733
1190
|
const reduced = reducedMotion();
|
|
734
1191
|
const load = options.load ?? { inFlight: false, settled: true };
|
|
735
1192
|
const loading = load.inFlight || !load.settled;
|
|
736
|
-
const frame = spinnerFrame(Math.floor(nowMs /
|
|
1193
|
+
const frame = spinnerFrame(Math.floor(nowMs / MOTION_FRAME_MS), options.colorMode ?? "truecolor", reduced);
|
|
737
1194
|
const liveFlashes = (options.rowFlashes ?? []).filter((f) => flashActive(f.at, nowMs, 600, reduced));
|
|
738
1195
|
const ackFlashes = (options.rowFlashes ?? []).filter((f) => flashActive(f.at, nowMs, 600, false));
|
|
739
1196
|
const lines = [];
|
|
@@ -760,10 +1217,10 @@ function renderPulseScreen(state, snap, options, inputLine) {
|
|
|
760
1217
|
lines.push(pad(`${mark} ${label}${alias} ${tail}`, cols));
|
|
761
1218
|
}
|
|
762
1219
|
}
|
|
763
|
-
const explorerTitle = state.focusedPane === "explorer" ? "
|
|
764
|
-
const contentTitle = state.focusedPane === "content" ? "
|
|
765
|
-
lines.push(paneRule(cols, "
|
|
766
|
-
const contentWidth = Math.max(cols -
|
|
1220
|
+
const explorerTitle = state.focusedPane === "explorer" ? "{ EXPLORER }" : "EXPLORER";
|
|
1221
|
+
const contentTitle = state.focusedPane === "content" ? "{ PULSE }" : "PULSE";
|
|
1222
|
+
lines.push(paneRule(cols, explW, "top", explorerTitle, contentTitle));
|
|
1223
|
+
const contentWidth = Math.max(cols - explW - 2, 0);
|
|
767
1224
|
const model = buildPulseModel(snap, nowMs);
|
|
768
1225
|
const chromeRows = 3; // bottom rule + hint bar + status line
|
|
769
1226
|
const bodyRows = Math.max(rows - 2 - chromeRows, 1);
|
|
@@ -802,7 +1259,7 @@ function renderPulseScreen(state, snap, options, inputLine) {
|
|
|
802
1259
|
const visiblePulse = pulseLines.slice(contentStart, contentStart + bodyRows);
|
|
803
1260
|
// EXPLORER sidebar = the normal navigator (same helpers as every other view).
|
|
804
1261
|
const explorer = computeExplorerRows(state, snap);
|
|
805
|
-
const { labels: explorerDisplay, metas: explorerMetas } = navigatorDisplay(explorer, snap,
|
|
1262
|
+
const { labels: explorerDisplay, metas: explorerMetas } = navigatorDisplay(explorer, snap, explW - 1);
|
|
806
1263
|
const explorerStart = Math.min(Math.max(state.selection - bodyRows + 1, 0), Math.max(explorer.length - bodyRows, 0));
|
|
807
1264
|
for (let i = 0; i < bodyRows; i++) {
|
|
808
1265
|
const y = lines.length + 1;
|
|
@@ -812,16 +1269,16 @@ function renderPulseScreen(state, snap, options, inputLine) {
|
|
|
812
1269
|
const flashed = row?.key != null && ackFlashes.some((f) => f.key === row.key);
|
|
813
1270
|
if (flashed)
|
|
814
1271
|
flashAck = true;
|
|
815
|
-
const marker = explorerIndex === state.selection && row ? (flashed ? "
|
|
816
|
-
const left = pad(row ? `${marker}${explorerDisplay[explorerIndex] ?? row.label}` : "",
|
|
1272
|
+
const marker = explorerIndex === state.selection && row ? (flashed ? "◆" : "▶") : flashed ? "≈" : " ";
|
|
1273
|
+
const left = pad(row ? `${marker}${explorerDisplay[explorerIndex] ?? row.label}` : "", explW);
|
|
817
1274
|
// CONTENT half = the pulse view, truncated to the content width. Selection is
|
|
818
1275
|
// the per-cell bg on the segs (mock affordance), so the content marker slot
|
|
819
1276
|
// stays blank — no "›" chevron (the native affordance the mock overrides).
|
|
820
1277
|
const citem = visiblePulse[i];
|
|
821
1278
|
const contentText = (citem?.text ?? "").slice(0, contentWidth);
|
|
822
|
-
lines.push(pad(`${left}
|
|
1279
|
+
lines.push(pad(`${left}┃ ${contentText}`, cols));
|
|
823
1280
|
if (row) {
|
|
824
|
-
hitMap
|
|
1281
|
+
pushExplorerTargets(hitMap, row, explorerDisplay[explorerIndex] ?? row.label, y, explW);
|
|
825
1282
|
explorerRows.push({ ...row, y });
|
|
826
1283
|
const em = explorerMetas[explorerIndex];
|
|
827
1284
|
if (em && em.length)
|
|
@@ -833,16 +1290,16 @@ function renderPulseScreen(state, snap, options, inputLine) {
|
|
|
833
1290
|
segRows[y] = truncateSegs(citem.segs, contentWidth);
|
|
834
1291
|
}
|
|
835
1292
|
// Lane cells → content targets, x mapped into the content column (origin =
|
|
836
|
-
//
|
|
1293
|
+
// explorer boundary + 3, matching normal content geometry), clamped to `cols`.
|
|
837
1294
|
for (const t of visibleTargets) {
|
|
838
|
-
const x1 =
|
|
1295
|
+
const x1 = explW + 2 + t.x1;
|
|
839
1296
|
if (x1 > cols)
|
|
840
1297
|
continue;
|
|
841
|
-
const target = { y: t.lineIndex - contentStart + 3, x1, x2: Math.min(
|
|
1298
|
+
const target = { y: t.lineIndex - contentStart + 3, x1, x2: Math.min(explW + 2 + t.x2, cols), action: t.action };
|
|
842
1299
|
contentTargets.push(target);
|
|
843
1300
|
hitMap.push(target);
|
|
844
1301
|
}
|
|
845
|
-
lines.push(paneRule(cols, "
|
|
1302
|
+
lines.push(paneRule(cols, explW, "bottom"));
|
|
846
1303
|
lines.push(pad(keybindHints(state), cols));
|
|
847
1304
|
const drillPath = state.drill.map((d) => d.name).join(" → ");
|
|
848
1305
|
const readWarn = snap.readErrors.length > 0 ? ` ⚠ ${snap.readErrors.length} read(s) failed: ${snap.readErrors[0]}` : "";
|
|
@@ -858,6 +1315,7 @@ function renderPulseScreen(state, snap, options, inputLine) {
|
|
|
858
1315
|
const anyFlash = model.lanes.some((l) => l.rows.some((r) => r.flashed));
|
|
859
1316
|
return {
|
|
860
1317
|
lines: lines.slice(0, rows),
|
|
1318
|
+
explorerWidth: explW,
|
|
861
1319
|
hitMap,
|
|
862
1320
|
contentTargets,
|
|
863
1321
|
contentMaxOffset: maxContentOffset,
|
|
@@ -905,13 +1363,14 @@ function wrapContentLines(content, width) {
|
|
|
905
1363
|
return out;
|
|
906
1364
|
}
|
|
907
1365
|
function crashCartShell(content, led, contentTitle, cols, rows, inputLine, opts) {
|
|
1366
|
+
const explW = explorerWidth(cols);
|
|
908
1367
|
const lines = [];
|
|
909
1368
|
const segRows = {};
|
|
910
1369
|
lines.push(pad(`cmd ▸ ${inputLine}▊`, cols));
|
|
911
|
-
lines.push(paneRule(cols, "
|
|
1370
|
+
lines.push(paneRule(cols, explW, "top", "{ EXPLORER }", contentTitle));
|
|
912
1371
|
// The ledger-fed explorer column: the honest marker, then one row per rig (name + seat count).
|
|
913
1372
|
const leftRows = [led.note, "", ...led.rows.map((r) => `${r.label} (${r.seatCount})`)];
|
|
914
|
-
const contentWidth = Math.max(cols -
|
|
1373
|
+
const contentWidth = Math.max(cols - explW - 2, 0);
|
|
915
1374
|
if (opts?.wrap)
|
|
916
1375
|
content = wrapContentLines(content, contentWidth);
|
|
917
1376
|
const bodyRows = Math.max(rows - 2 - 3, 1); // minus cmd bar + top rule + (bottom rule, hints, status)
|
|
@@ -922,14 +1381,14 @@ function crashCartShell(content, led, contentTitle, cols, rows, inputLine, opts)
|
|
|
922
1381
|
const scroll = Math.max(0, Math.min(contentMaxOffset, opts?.scroll ?? 0));
|
|
923
1382
|
for (let i = 0; i < bodyRows; i++) {
|
|
924
1383
|
const y = lines.length + 1;
|
|
925
|
-
const left = pad(leftRows[i] ?? "",
|
|
1384
|
+
const left = pad(leftRows[i] ?? "", explW);
|
|
926
1385
|
const citem = content[scroll + i];
|
|
927
1386
|
const contentText = (citem?.text ?? "").slice(0, contentWidth);
|
|
928
|
-
lines.push(pad(`${left}
|
|
1387
|
+
lines.push(pad(`${left}┃ ${contentText}`, cols));
|
|
929
1388
|
if (citem?.segs)
|
|
930
1389
|
segRows[y] = truncateSegs(citem.segs, contentWidth);
|
|
931
1390
|
}
|
|
932
|
-
lines.push(paneRule(cols, "
|
|
1391
|
+
lines.push(paneRule(cols, explW, "bottom"));
|
|
933
1392
|
lines.push(pad("", cols));
|
|
934
1393
|
const scrollHint = contentMaxOffset > 0 ? ` · ↑↓ scroll (${scroll}/${contentMaxOffset})` : "";
|
|
935
1394
|
lines.push(pad(`[crash-cart] daemon down · explorer ${led.note}${scrollHint}`, cols));
|
|
@@ -937,6 +1396,7 @@ function crashCartShell(content, led, contentTitle, cols, rows, inputLine, opts)
|
|
|
937
1396
|
lines.push("");
|
|
938
1397
|
return {
|
|
939
1398
|
lines: lines.slice(0, rows),
|
|
1399
|
+
explorerWidth: explW,
|
|
940
1400
|
hitMap: [],
|
|
941
1401
|
contentTargets: [],
|
|
942
1402
|
contentMaxOffset,
|
|
@@ -946,6 +1406,7 @@ function crashCartShell(content, led, contentTitle, cols, rows, inputLine, opts)
|
|
|
946
1406
|
}
|
|
947
1407
|
export function renderScreen(state, snap, options = {}, inputLine = "") {
|
|
948
1408
|
const { cols = 120, rows = 32, nowMs = 0 } = options;
|
|
1409
|
+
const explW = explorerWidth(cols);
|
|
949
1410
|
// 5.2 crash-cart (shell-placement rework, ruling 3c6c2be0): daemon-DOWN renders as a CONTENT-PANE
|
|
950
1411
|
// view inside the standard shell — the explorer sidebar is ALWAYS present, ledger-fed + honestly
|
|
951
1412
|
// marked (from the SAME one-JSON discovery, never a second read). Content moves into the right pane
|
|
@@ -986,7 +1447,7 @@ export function renderScreen(state, snap, options = {}, inputLine = "") {
|
|
|
986
1447
|
const reduced = reducedMotion();
|
|
987
1448
|
const load = options.load ?? { inFlight: false, settled: true };
|
|
988
1449
|
const motion = {
|
|
989
|
-
frame: spinnerFrame(Math.floor(nowMs /
|
|
1450
|
+
frame: spinnerFrame(Math.floor(nowMs / MOTION_FRAME_MS), options.colorMode ?? "truecolor", reduced),
|
|
990
1451
|
reduced,
|
|
991
1452
|
used: false,
|
|
992
1453
|
loading: load.inFlight || !load.settled,
|
|
@@ -1016,14 +1477,14 @@ export function renderScreen(state, snap, options = {}, inputLine = "") {
|
|
|
1016
1477
|
}
|
|
1017
1478
|
const sectionTitle = { topology: "TOPOLOGY", specs: "SPECS", needs: "NEEDS-YOU" }[state.section] ?? state.section.toUpperCase();
|
|
1018
1479
|
// active-pane emphasis (k9s-class chrome): the focused pane's title is bracketed
|
|
1019
|
-
const explorerTitle = state.focusedPane === "explorer" ? "
|
|
1020
|
-
const contentTitle = state.focusedPane === "content" ? `
|
|
1021
|
-
lines.push(paneRule(cols, "
|
|
1480
|
+
const explorerTitle = state.focusedPane === "explorer" ? "{ EXPLORER }" : "EXPLORER";
|
|
1481
|
+
const contentTitle = state.focusedPane === "content" ? `{ ${sectionTitle} }` : sectionTitle;
|
|
1482
|
+
lines.push(paneRule(cols, explW, "top", explorerTitle, contentTitle));
|
|
1022
1483
|
const explorer = computeExplorerRows(state, snap);
|
|
1023
1484
|
// Slice-17: the file-tree re-skin is a DISPLAY transform only — rows, keys,
|
|
1024
1485
|
// actions, and the hit-map all keep resolving against the row model above.
|
|
1025
|
-
const { labels: explorerDisplay, metas: explorerMetas } = navigatorDisplay(explorer, snap,
|
|
1026
|
-
const content = contentLines(state, snap, Math.max(cols -
|
|
1486
|
+
const { labels: explorerDisplay, metas: explorerMetas } = navigatorDisplay(explorer, snap, explW - 1);
|
|
1487
|
+
const content = contentLines(state, snap, Math.max(cols - explW - 2, 0), motion);
|
|
1027
1488
|
const footer = state.footerOn ? snap.stream.at(-1) : undefined;
|
|
1028
1489
|
// round-5 (guard): the tmux-style ONE-SHOT activity flash targets the
|
|
1029
1490
|
// flashed agent's EXPLORER row — per-seat pane-output events from the
|
|
@@ -1073,8 +1534,8 @@ export function renderScreen(state, snap, options = {}, inputLine = "") {
|
|
|
1073
1534
|
const flashed = row?.key != null && ackFlashes.some((f) => f.key === row.key);
|
|
1074
1535
|
if (flashed)
|
|
1075
1536
|
flashAck = true;
|
|
1076
|
-
const marker = explorerIndex === state.selection && row ? (flashed ? "
|
|
1077
|
-
const left = pad(row ? `${marker}${explorerDisplay[explorerIndex] ?? row.label}` : "",
|
|
1537
|
+
const marker = explorerIndex === state.selection && row ? (flashed ? "◆" : "▶") : flashed ? "≈" : " ";
|
|
1538
|
+
const left = pad(row ? `${marker}${explorerDisplay[explorerIndex] ?? row.label}` : "", explW);
|
|
1078
1539
|
const item = visibleContent[i];
|
|
1079
1540
|
const targetIndex = contentTargets.length;
|
|
1080
1541
|
const zones = item?.zones ?? [];
|
|
@@ -1095,9 +1556,9 @@ export function renderScreen(state, snap, options = {}, inputLine = "") {
|
|
|
1095
1556
|
else
|
|
1096
1557
|
contentMarker = "›";
|
|
1097
1558
|
}
|
|
1098
|
-
lines.push(pad(`${left}
|
|
1559
|
+
lines.push(pad(`${left}┃${contentMarker}${contentText}`, cols));
|
|
1099
1560
|
if (row) {
|
|
1100
|
-
hitMap
|
|
1561
|
+
pushExplorerTargets(hitMap, row, explorerDisplay[explorerIndex] ?? row.label, y, explW);
|
|
1101
1562
|
explorerRows.push({ ...row, y });
|
|
1102
1563
|
const em = explorerMetas[explorerIndex];
|
|
1103
1564
|
if (em && em.length)
|
|
@@ -1107,12 +1568,12 @@ export function renderScreen(state, snap, options = {}, inputLine = "") {
|
|
|
1107
1568
|
}
|
|
1108
1569
|
// zones first: hit lookup takes the first match, so a zone wins over the row-wide action
|
|
1109
1570
|
for (const z of zones) {
|
|
1110
|
-
const target = { y, x1:
|
|
1571
|
+
const target = { y, x1: explW + 3 + z.start, x2: explW + 2 + z.end, action: z.action };
|
|
1111
1572
|
hitMap.push(target);
|
|
1112
1573
|
contentTargets.push(target);
|
|
1113
1574
|
}
|
|
1114
1575
|
if (item?.action) {
|
|
1115
|
-
const target = { y, x1:
|
|
1576
|
+
const target = { y, x1: explW + 3, x2: cols, action: item.action };
|
|
1116
1577
|
hitMap.push(target);
|
|
1117
1578
|
contentTargets.push(target);
|
|
1118
1579
|
}
|
|
@@ -1123,13 +1584,14 @@ export function renderScreen(state, snap, options = {}, inputLine = "") {
|
|
|
1123
1584
|
lines.push(pad(`≋ ${footer.tsEmitted.slice(11, 16)} ${footer.sourceSession}: ${footer.body}`, cols));
|
|
1124
1585
|
const drillPath = state.drill.map((d) => d.name).join(" → ");
|
|
1125
1586
|
const readWarn = snap.readErrors.length > 0 ? ` ⚠ ${snap.readErrors.length} read(s) failed: ${snap.readErrors[0]}` : "";
|
|
1126
|
-
lines.push(paneRule(cols, "
|
|
1587
|
+
lines.push(paneRule(cols, explW, "bottom"));
|
|
1127
1588
|
lines.push(pad(keybindHints(state), cols));
|
|
1128
1589
|
lines.push(pad(`[${state.instanceId}] ${state.section}${drillPath ? " · " + drillPath : ""}${state.lastError ? " ✗ " + state.lastError : ""}${state.notice ? " ▸ " + state.notice : ""}${readWarn}`, cols));
|
|
1129
1590
|
while (lines.length < rows)
|
|
1130
1591
|
lines.push("");
|
|
1131
1592
|
return {
|
|
1132
1593
|
lines: lines.slice(0, rows),
|
|
1594
|
+
explorerWidth: explW,
|
|
1133
1595
|
hitMap,
|
|
1134
1596
|
contentTargets,
|
|
1135
1597
|
contentMaxOffset: maxContentOffset,
|