@openrig/cli 0.5.10 → 0.5.11
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/plugins/openrig-core/README.md +24 -5
- package/daemon/assets/plugins/openrig-core/skills/agent-operated-workflows/SKILL.md +4 -2
- package/daemon/assets/plugins/openrig-core/skills/applying-a-permission-policy/SKILL.md +11 -14
- package/daemon/assets/plugins/openrig-core/skills/claude-compaction-restore/SKILL.md +51 -59
- package/daemon/assets/plugins/openrig-core/skills/forming-an-openrig-mental-model/SKILL.md +11 -10
- package/daemon/assets/plugins/openrig-core/skills/openrig-operating-model/SKILL.md +39 -50
- package/daemon/assets/plugins/openrig-core/skills/openrig-operating-model/scripts/trunk-diff.sh +1 -1
- package/daemon/assets/plugins/openrig-core/skills/openrig-operating-model/templates/LEARNED.md +7 -5
- package/daemon/assets/plugins/openrig-core/skills/openrig-operating-model/templates/PLAYBOOK.md +3 -4
- package/daemon/assets/plugins/openrig-core/skills/openrig-operating-model/templates/SPEC.md +7 -7
- package/daemon/assets/plugins/openrig-core/skills/openrig-user/SKILL.md +55 -64
- package/daemon/assets/plugins/openrig-core/skills/orienting-to-an-inherited-seat/CHANGELOG.md +14 -58
- package/daemon/assets/plugins/openrig-core/skills/queue-handoff/SKILL.md +8 -9
- package/daemon/assets/plugins/openrig-core/skills/retiring-and-inheriting-a-seat/CHANGELOG.md +20 -46
- package/daemon/assets/plugins/openrig-core/skills/retiring-and-inheriting-a-seat/SKILL.md +62 -76
- package/daemon/assets/plugins/openrig-core/skills/seat-continuity-and-handover/SKILL.md +28 -22
- package/daemon/assets/plugins/openrig-core/skills/session-compaction-and-restore/SKILL.md +13 -15
- package/daemon/context-packs/onboarding-width/manifest.yaml +1 -3
- package/daemon/context-packs/onboarding-width/public-reference-material.md +19 -24
- package/daemon/context-packs/onboarding-width/public-what-you-can-do.md +55 -24
- package/daemon/context-packs/skills/agent-operated-software/manifest.yaml +1 -1
- package/daemon/context-packs/skills/agent-operated-workflows/SKILL.md +4 -2
- package/daemon/context-packs/skills/agent-operated-workflows/manifest.yaml +1 -1
- package/daemon/context-packs/skills/applying-a-permission-policy/SKILL.md +11 -14
- package/daemon/context-packs/skills/applying-a-permission-policy/manifest.yaml +1 -1
- package/daemon/context-packs/skills/claude-compaction-restore/SKILL.md +51 -59
- package/daemon/context-packs/skills/claude-compaction-restore/manifest.yaml +1 -1
- package/daemon/context-packs/skills/core/agent-starters/SKILL.md +21 -19
- 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 +11 -10
- 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/SKILL.md +84 -148
- package/daemon/context-packs/skills/core/cross-host-rig-commands/manifest.yaml +3 -3
- package/daemon/context-packs/skills/core/human-in-the-loop/manifest.yaml +1 -1
- package/daemon/context-packs/skills/core/messaging-the-human/manifest.yaml +1 -1
- package/daemon/context-packs/skills/core/openrig-architect/SKILL.md +40 -47
- 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/manifest.yaml +1 -1
- package/daemon/context-packs/skills/core/openrig-upgrade/SKILL.md +16 -0
- package/daemon/context-packs/skills/core/openrig-upgrade/manifest.yaml +1 -1
- 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/SKILL.md +12 -10
- 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/SKILL.md +15 -13
- 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 +11 -10
- 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/manifest.yaml +1 -1
- package/daemon/context-packs/skills/openrig-operating-model/SKILL.md +39 -50
- package/daemon/context-packs/skills/openrig-operating-model/manifest.yaml +1 -1
- package/daemon/context-packs/skills/openrig-operating-model/scripts/trunk-diff.sh +1 -1
- package/daemon/context-packs/skills/openrig-operating-model/templates/LEARNED.md +7 -5
- package/daemon/context-packs/skills/openrig-operating-model/templates/PLAYBOOK.md +3 -4
- package/daemon/context-packs/skills/openrig-operating-model/templates/SPEC.md +7 -7
- package/daemon/context-packs/skills/openrig-user/SKILL.md +55 -64
- package/daemon/context-packs/skills/openrig-user/manifest.yaml +1 -1
- package/daemon/context-packs/skills/orienting-to-an-inherited-seat/CHANGELOG.md +14 -58
- 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/SKILL.md +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/SKILL.md +2 -2
- package/daemon/context-packs/skills/pm/plan-review/manifest.yaml +1 -1
- package/daemon/context-packs/skills/pm/requirements-writer/SKILL.md +1 -1
- package/daemon/context-packs/skills/pm/requirements-writer/manifest.yaml +1 -1
- package/daemon/context-packs/skills/pm/ui-mockup/SKILL.md +3 -3
- package/daemon/context-packs/skills/pm/ui-mockup/manifest.yaml +1 -1
- package/daemon/context-packs/skills/pods/development-team/manifest.yaml +1 -1
- package/daemon/context-packs/skills/pods/orchestration-team/SKILL.md +41 -59
- package/daemon/context-packs/skills/pods/orchestration-team/manifest.yaml +1 -1
- package/daemon/context-packs/skills/pods/oversight-team/manifest.yaml +1 -1
- package/daemon/context-packs/skills/pods/review-team/manifest.yaml +1 -1
- package/daemon/context-packs/skills/process/agent-browser/LOCAL-INSIGHTS.md +24 -53
- 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/find-polluter.sh +29 -15
- package/daemon/context-packs/skills/process/systematic-debugging/manifest.yaml +1 -1
- package/daemon/context-packs/skills/process/test-driven-development/SKILL.md +47 -40
- package/daemon/context-packs/skills/process/test-driven-development/manifest.yaml +1 -1
- package/daemon/context-packs/skills/process/verification-before-completion/SKILL.md +3 -3
- package/daemon/context-packs/skills/process/verification-before-completion/manifest.yaml +1 -1
- package/daemon/context-packs/skills/queue-handoff/SKILL.md +8 -9
- 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/CHANGELOG.md +20 -46
- package/daemon/context-packs/skills/retiring-and-inheriting-a-seat/SKILL.md +62 -76
- package/daemon/context-packs/skills/retiring-and-inheriting-a-seat/manifest.yaml +1 -1
- package/daemon/context-packs/skills/seat-continuity-and-handover/SKILL.md +28 -22
- package/daemon/context-packs/skills/seat-continuity-and-handover/manifest.yaml +1 -1
- package/daemon/context-packs/skills/session-compaction-and-restore/SKILL.md +13 -15
- package/daemon/context-packs/skills/session-compaction-and-restore/manifest.yaml +1 -1
- package/daemon/context-packs/skills/software-for-agents/manifest.yaml +1 -1
- package/daemon/context-packs/world-example/manifest.yaml +1 -1
- package/daemon/context-packs/world-public/build-your-world.md +12 -7
- package/daemon/context-packs/world-public/manifest.yaml +1 -1
- package/daemon/dist/adapters/tmux.d.ts +7 -9
- package/daemon/dist/adapters/tmux.d.ts.map +1 -1
- package/daemon/dist/adapters/tmux.js +7 -35
- package/daemon/dist/adapters/tmux.js.map +1 -1
- package/daemon/dist/build-info.js +3 -3
- package/daemon/dist/daemon-shutdown.d.ts +27 -0
- package/daemon/dist/daemon-shutdown.d.ts.map +1 -0
- package/daemon/dist/daemon-shutdown.js +84 -0
- package/daemon/dist/daemon-shutdown.js.map +1 -0
- package/daemon/dist/domain/codex-thread-id.d.ts +1 -0
- package/daemon/dist/domain/codex-thread-id.d.ts.map +1 -1
- package/daemon/dist/domain/codex-thread-id.js +32 -23
- package/daemon/dist/domain/codex-thread-id.js.map +1 -1
- package/daemon/dist/domain/context-usage-store.d.ts +2 -0
- package/daemon/dist/domain/context-usage-store.d.ts.map +1 -1
- package/daemon/dist/domain/context-usage-store.js +7 -28
- package/daemon/dist/domain/context-usage-store.js.map +1 -1
- package/daemon/dist/domain/crash-cart-conductor.js +1 -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 +24 -3
- package/daemon/dist/domain/execution-view.js.map +1 -1
- package/daemon/dist/domain/gateway/channel-operations.d.ts +1 -1
- package/daemon/dist/domain/gateway/channel-operations.d.ts.map +1 -1
- package/daemon/dist/domain/gateway/connections-projection.d.ts +61 -0
- package/daemon/dist/domain/gateway/connections-projection.d.ts.map +1 -0
- package/daemon/dist/domain/gateway/connections-projection.js +149 -0
- package/daemon/dist/domain/gateway/connections-projection.js.map +1 -0
- package/daemon/dist/domain/gateway/human-registry.d.ts +3 -1
- package/daemon/dist/domain/gateway/human-registry.d.ts.map +1 -1
- package/daemon/dist/domain/gateway/human-registry.js +3 -1
- package/daemon/dist/domain/gateway/human-registry.js.map +1 -1
- package/daemon/dist/domain/gateway/slack/slack-subsystem.d.ts.map +1 -1
- package/daemon/dist/domain/gateway/slack/slack-subsystem.js +3 -2
- package/daemon/dist/domain/gateway/slack/slack-subsystem.js.map +1 -1
- package/daemon/dist/domain/health-diagnosis.js +1 -1
- package/daemon/dist/domain/health-diagnosis.js.map +1 -1
- package/daemon/dist/domain/lifecycle-obligations.d.ts +18 -0
- package/daemon/dist/domain/lifecycle-obligations.d.ts.map +1 -0
- package/daemon/dist/domain/lifecycle-obligations.js +35 -0
- package/daemon/dist/domain/lifecycle-obligations.js.map +1 -0
- package/daemon/dist/domain/model-divergence/current-generation-record.d.ts.map +1 -1
- package/daemon/dist/domain/model-divergence/current-generation-record.js +6 -1
- package/daemon/dist/domain/model-divergence/current-generation-record.js.map +1 -1
- package/daemon/dist/domain/policies/workflow-keepalive.d.ts +1 -0
- package/daemon/dist/domain/policies/workflow-keepalive.d.ts.map +1 -1
- package/daemon/dist/domain/policies/workflow-keepalive.js +7 -4
- package/daemon/dist/domain/policies/workflow-keepalive.js.map +1 -1
- package/daemon/dist/domain/project-lifecycle-compiler.d.ts +7 -0
- package/daemon/dist/domain/project-lifecycle-compiler.d.ts.map +1 -1
- package/daemon/dist/domain/project-lifecycle-compiler.js +119 -23
- package/daemon/dist/domain/project-lifecycle-compiler.js.map +1 -1
- package/daemon/dist/domain/queue-stuck-sweep.d.ts.map +1 -1
- package/daemon/dist/domain/queue-stuck-sweep.js +1 -0
- package/daemon/dist/domain/queue-stuck-sweep.js.map +1 -1
- package/daemon/dist/domain/seat-lifecycle-service.d.ts.map +1 -1
- package/daemon/dist/domain/seat-lifecycle-service.js +8 -1
- package/daemon/dist/domain/seat-lifecycle-service.js.map +1 -1
- package/daemon/dist/domain/startup-orchestrator.d.ts.map +1 -1
- package/daemon/dist/domain/startup-orchestrator.js +27 -11
- package/daemon/dist/domain/startup-orchestrator.js.map +1 -1
- package/daemon/dist/domain/startup-proof.d.ts.map +1 -1
- package/daemon/dist/domain/startup-proof.js +10 -9
- package/daemon/dist/domain/startup-proof.js.map +1 -1
- package/daemon/dist/domain/startup-resolver.d.ts +3 -1
- package/daemon/dist/domain/startup-resolver.d.ts.map +1 -1
- package/daemon/dist/domain/startup-resolver.js +18 -0
- package/daemon/dist/domain/startup-resolver.js.map +1 -1
- package/daemon/dist/domain/startup-validation.d.ts.map +1 -1
- package/daemon/dist/domain/startup-validation.js +12 -1
- package/daemon/dist/domain/startup-validation.js.map +1 -1
- package/daemon/dist/domain/types.d.ts +13 -1
- 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 +1 -1
- package/daemon/dist/domain/user-settings/settings-store.d.ts.map +1 -1
- package/daemon/dist/domain/user-settings/settings-store.js +14 -0
- package/daemon/dist/domain/user-settings/settings-store.js.map +1 -1
- package/daemon/dist/domain/workflow-boot-sweep.d.ts +1 -0
- package/daemon/dist/domain/workflow-boot-sweep.d.ts.map +1 -1
- package/daemon/dist/domain/workflow-boot-sweep.js +3 -0
- package/daemon/dist/domain/workflow-boot-sweep.js.map +1 -1
- package/daemon/dist/domain/workflow-exception-escalation.d.ts +4 -3
- package/daemon/dist/domain/workflow-exception-escalation.d.ts.map +1 -1
- package/daemon/dist/domain/workflow-exception-escalation.js +22 -21
- package/daemon/dist/domain/workflow-exception-escalation.js.map +1 -1
- package/daemon/dist/domain/workflow-exception-router.d.ts +4 -3
- package/daemon/dist/domain/workflow-exception-router.d.ts.map +1 -1
- package/daemon/dist/domain/workflow-exception-router.js +7 -6
- package/daemon/dist/domain/workflow-exception-router.js.map +1 -1
- package/daemon/dist/domain/workflow-human-destination.d.ts +18 -0
- package/daemon/dist/domain/workflow-human-destination.d.ts.map +1 -0
- package/daemon/dist/domain/workflow-human-destination.js +40 -0
- package/daemon/dist/domain/workflow-human-destination.js.map +1 -0
- package/daemon/dist/domain/workflow-projector.d.ts +4 -3
- package/daemon/dist/domain/workflow-projector.d.ts.map +1 -1
- package/daemon/dist/domain/workflow-projector.js +26 -17
- package/daemon/dist/domain/workflow-projector.js.map +1 -1
- package/daemon/dist/domain/workflow-role-context.d.ts +4 -6
- package/daemon/dist/domain/workflow-role-context.d.ts.map +1 -1
- package/daemon/dist/domain/workflow-role-context.js +7 -14
- package/daemon/dist/domain/workflow-role-context.js.map +1 -1
- package/daemon/dist/domain/workflow-runtime.d.ts +12 -3
- package/daemon/dist/domain/workflow-runtime.d.ts.map +1 -1
- package/daemon/dist/domain/workflow-runtime.js +66 -14
- package/daemon/dist/domain/workflow-runtime.js.map +1 -1
- package/daemon/dist/domain/workflow-validator.d.ts.map +1 -1
- package/daemon/dist/domain/workflow-validator.js +39 -24
- package/daemon/dist/domain/workflow-validator.js.map +1 -1
- package/daemon/dist/index.d.ts.map +1 -1
- package/daemon/dist/index.js +37 -96
- package/daemon/dist/index.js.map +1 -1
- package/daemon/dist/project-lifecycle-surface.d.ts +1 -1
- package/daemon/dist/project-lifecycle-surface.d.ts.map +1 -1
- package/daemon/dist/routes/gateway.d.ts.map +1 -1
- package/daemon/dist/routes/gateway.js +10 -0
- package/daemon/dist/routes/gateway.js.map +1 -1
- package/daemon/dist/routes/queue.d.ts.map +1 -1
- package/daemon/dist/routes/queue.js +4 -3
- package/daemon/dist/routes/queue.js.map +1 -1
- package/daemon/dist/routes/require-sender-identity.d.ts +3 -1
- package/daemon/dist/routes/require-sender-identity.d.ts.map +1 -1
- package/daemon/dist/routes/require-sender-identity.js +11 -5
- package/daemon/dist/routes/require-sender-identity.js.map +1 -1
- package/daemon/dist/routes/sessions.d.ts.map +1 -1
- package/daemon/dist/routes/sessions.js +95 -27
- package/daemon/dist/routes/sessions.js.map +1 -1
- package/daemon/dist/routes/workflow.d.ts.map +1 -1
- package/daemon/dist/routes/workflow.js +6 -1
- package/daemon/dist/routes/workflow.js.map +1 -1
- package/daemon/dist/server.d.ts.map +1 -1
- package/daemon/dist/server.js +2 -1
- package/daemon/dist/server.js.map +1 -1
- package/daemon/dist/startup.d.ts.map +1 -1
- package/daemon/dist/startup.js +6 -3
- package/daemon/dist/startup.js.map +1 -1
- package/daemon/docs/reference/agent-spec.md +6 -0
- package/daemon/docs/reference/getting-started.md +134 -28
- package/daemon/docs/reference/health-diagnosis.md +26 -0
- package/daemon/docs/reference/mission-install.md +5 -0
- package/daemon/docs/reference/project-release-profile.yaml +82 -0
- package/daemon/docs/reference/release-boundary.md +5 -0
- package/daemon/docs/reference/rig-spec.md +43 -4
- package/daemon/specs/agents/conveyor/planner/guidance/role.md +5 -3
- package/daemon/specs/agents/conveyor/planner/startup/context.md +13 -4
- package/daemon/specs/agents/design/product-designer/agent.yaml +4 -3
- package/daemon/specs/agents/design/product-designer/guidance/role.md +12 -10
- package/daemon/specs/agents/product-management/pm/guidance/role.md +19 -17
- package/daemon/specs/agents/shared/skills/core/agent-starters/SKILL.md +21 -19
- package/daemon/specs/agents/shared/skills/core/agent-startup-and-context-ingestion/SKILL.md +11 -10
- package/daemon/specs/agents/shared/skills/core/cross-host-rig-commands/SKILL.md +84 -148
- package/daemon/specs/agents/shared/skills/core/openrig-architect/SKILL.md +40 -47
- package/daemon/specs/agents/shared/skills/core/openrig-upgrade/SKILL.md +16 -0
- package/daemon/specs/agents/shared/skills/core/session-source-fork/SKILL.md +12 -10
- package/daemon/specs/agents/shared/skills/core/topology-mutation-and-seat-management/SKILL.md +15 -13
- package/daemon/specs/agents/shared/skills/pm/exec-summary/SKILL.md +1 -1
- package/daemon/specs/agents/shared/skills/pm/plan-review/SKILL.md +2 -2
- package/daemon/specs/agents/shared/skills/pm/requirements-writer/SKILL.md +1 -1
- package/daemon/specs/agents/shared/skills/pm/ui-mockup/SKILL.md +3 -3
- package/daemon/specs/agents/shared/skills/pods/orchestration-team/SKILL.md +41 -59
- package/daemon/specs/agents/shared/skills/process/agent-browser/LOCAL-INSIGHTS.md +24 -53
- package/daemon/specs/agents/shared/skills/process/systematic-debugging/find-polluter.sh +29 -15
- package/daemon/specs/agents/shared/skills/process/test-driven-development/SKILL.md +47 -40
- package/daemon/specs/agents/shared/skills/process/verification-before-completion/SKILL.md +3 -3
- package/daemon/specs/rigs/launch/first-project/CULTURE.md +39 -0
- package/daemon/specs/rigs/launch/first-project/rig.yaml +31 -0
- package/daemon/specs/rigs/launch/kernel/agents/advisor/lead/startup/context.md +1 -1
- package/daemon/specs/rigs/launch/kernel/agents/operator/agent/guidance/role.md +21 -7
- package/daemon/specs/rigs/launch/kernel/agents/operator/agent/startup/context.md +2 -2
- package/daemon/specs/rigs/launch/kernel/agents/queue/worker/guidance/role.md +19 -11
- package/daemon/specs/rigs/launch/kernel/agents/queue/worker/startup/context.md +3 -2
- package/daemon/specs/rigs/launch/kernel/culture/CULTURE.md +15 -8
- package/daemon/specs/rigs/launch/kernel/rig-claude-only.yaml +7 -0
- package/daemon/specs/rigs/launch/kernel/rig-codex-only.yaml +7 -0
- package/daemon/specs/rigs/launch/kernel/rig.yaml +9 -4
- package/daemon/specs/rigs/preview/product-team/topology/seats/dev1-qa/CRAFT.md +6 -4
- package/dist/build-info.js +3 -3
- package/dist/client.d.ts +6 -20
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +53 -32
- package/dist/client.js.map +1 -1
- package/dist/commands/config.d.ts.map +1 -1
- package/dist/commands/config.js +1 -0
- package/dist/commands/config.js.map +1 -1
- package/dist/commands/context.d.ts.map +1 -1
- package/dist/commands/context.js +15 -13
- package/dist/commands/context.js.map +1 -1
- package/dist/commands/daemon.d.ts.map +1 -1
- package/dist/commands/daemon.js +31 -27
- package/dist/commands/daemon.js.map +1 -1
- package/dist/commands/destroy.js +1 -1
- package/dist/commands/destroy.js.map +1 -1
- package/dist/commands/health.d.ts.map +1 -1
- package/dist/commands/health.js +59 -7
- package/dist/commands/health.js.map +1 -1
- package/dist/commands/launch.d.ts.map +1 -1
- package/dist/commands/launch.js +2 -2
- package/dist/commands/launch.js.map +1 -1
- package/dist/commands/queue.d.ts.map +1 -1
- package/dist/commands/queue.js +9 -5
- package/dist/commands/queue.js.map +1 -1
- package/dist/commands/send.d.ts.map +1 -1
- package/dist/commands/send.js +4 -8
- package/dist/commands/send.js.map +1 -1
- package/dist/commands/setup.d.ts.map +1 -1
- package/dist/commands/setup.js +10 -9
- package/dist/commands/setup.js.map +1 -1
- package/dist/commands/tui.d.ts +2 -0
- package/dist/commands/tui.d.ts.map +1 -1
- package/dist/commands/tui.js +26 -10
- package/dist/commands/tui.js.map +1 -1
- package/dist/commands/walk.d.ts.map +1 -1
- package/dist/commands/walk.js +24 -48
- package/dist/commands/walk.js.map +1 -1
- package/dist/commands/workflow-render.d.ts +19 -0
- package/dist/commands/workflow-render.d.ts.map +1 -1
- package/dist/commands/workflow-render.js +12 -1
- package/dist/commands/workflow-render.js.map +1 -1
- package/dist/commands/workflow.d.ts.map +1 -1
- package/dist/commands/workflow.js +4 -2
- package/dist/commands/workflow.js.map +1 -1
- package/dist/config-store.d.ts +2 -1
- package/dist/config-store.d.ts.map +1 -1
- package/dist/config-store.js +15 -0
- package/dist/config-store.js.map +1 -1
- package/dist/cross-host-executor.d.ts +1 -1
- package/dist/cross-host-executor.js +2 -2
- package/dist/cross-host-executor.js.map +1 -1
- package/dist/daemon-lifecycle.d.ts +8 -11
- package/dist/daemon-lifecycle.d.ts.map +1 -1
- package/dist/daemon-lifecycle.js +281 -146
- package/dist/daemon-lifecycle.js.map +1 -1
- package/dist/daemon-start-lock.d.ts +9 -0
- package/dist/daemon-start-lock.d.ts.map +1 -0
- package/dist/daemon-start-lock.js +47 -0
- package/dist/daemon-start-lock.js.map +1 -0
- package/dist/front-door.d.ts.map +1 -1
- package/dist/front-door.js +8 -1
- package/dist/front-door.js.map +1 -1
- package/dist/lib/file-transfer.js +1 -1
- package/dist/lib/file-transfer.js.map +1 -1
- package/dist/lib/walk-consumption.d.ts +6 -0
- package/dist/lib/walk-consumption.d.ts.map +1 -0
- package/dist/lib/walk-consumption.js +78 -0
- package/dist/lib/walk-consumption.js.map +1 -0
- package/dist/local-origin.d.ts +3 -0
- package/dist/local-origin.d.ts.map +1 -0
- package/dist/local-origin.js +37 -0
- package/dist/local-origin.js.map +1 -0
- package/dist/read-view.d.ts +17 -0
- package/dist/read-view.d.ts.map +1 -0
- package/dist/read-view.js +17 -0
- package/dist/read-view.js.map +1 -0
- package/dist/shared-tui.d.ts +12 -0
- package/dist/shared-tui.d.ts.map +1 -0
- package/dist/shared-tui.js +37 -0
- package/dist/shared-tui.js.map +1 -0
- package/node_modules/@openrig/daemon/dist/adapters/tmux.d.ts +7 -9
- package/node_modules/@openrig/daemon/dist/adapters/tmux.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/adapters/tmux.js +7 -35
- package/node_modules/@openrig/daemon/dist/adapters/tmux.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/build-info.js +3 -3
- package/node_modules/@openrig/daemon/dist/daemon-shutdown.d.ts +27 -0
- package/node_modules/@openrig/daemon/dist/daemon-shutdown.d.ts.map +1 -0
- package/node_modules/@openrig/daemon/dist/daemon-shutdown.js +84 -0
- package/node_modules/@openrig/daemon/dist/daemon-shutdown.js.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/codex-thread-id.d.ts +1 -0
- package/node_modules/@openrig/daemon/dist/domain/codex-thread-id.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/codex-thread-id.js +32 -23
- package/node_modules/@openrig/daemon/dist/domain/codex-thread-id.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/context-usage-store.d.ts +2 -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 +7 -28
- package/node_modules/@openrig/daemon/dist/domain/context-usage-store.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/crash-cart-conductor.js +1 -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 +24 -3
- 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 +1 -1
- package/node_modules/@openrig/daemon/dist/domain/gateway/channel-operations.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/gateway/connections-projection.d.ts +61 -0
- package/node_modules/@openrig/daemon/dist/domain/gateway/connections-projection.d.ts.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/gateway/connections-projection.js +149 -0
- package/node_modules/@openrig/daemon/dist/domain/gateway/connections-projection.js.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/gateway/human-registry.d.ts +3 -1
- 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 +3 -1
- package/node_modules/@openrig/daemon/dist/domain/gateway/human-registry.js.map +1 -1
- 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 +3 -2
- package/node_modules/@openrig/daemon/dist/domain/gateway/slack/slack-subsystem.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/health-diagnosis.js +1 -1
- package/node_modules/@openrig/daemon/dist/domain/health-diagnosis.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/lifecycle-obligations.d.ts +18 -0
- package/node_modules/@openrig/daemon/dist/domain/lifecycle-obligations.d.ts.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/lifecycle-obligations.js +35 -0
- package/node_modules/@openrig/daemon/dist/domain/lifecycle-obligations.js.map +1 -0
- 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 +6 -1
- package/node_modules/@openrig/daemon/dist/domain/model-divergence/current-generation-record.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/policies/workflow-keepalive.d.ts +1 -0
- 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 +7 -4
- package/node_modules/@openrig/daemon/dist/domain/policies/workflow-keepalive.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/project-lifecycle-compiler.d.ts +7 -0
- package/node_modules/@openrig/daemon/dist/domain/project-lifecycle-compiler.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/project-lifecycle-compiler.js +119 -23
- package/node_modules/@openrig/daemon/dist/domain/project-lifecycle-compiler.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/queue-stuck-sweep.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/queue-stuck-sweep.js +1 -0
- package/node_modules/@openrig/daemon/dist/domain/queue-stuck-sweep.js.map +1 -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 +8 -1
- package/node_modules/@openrig/daemon/dist/domain/seat-lifecycle-service.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/startup-orchestrator.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/startup-orchestrator.js +27 -11
- package/node_modules/@openrig/daemon/dist/domain/startup-orchestrator.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/startup-proof.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/startup-proof.js +10 -9
- package/node_modules/@openrig/daemon/dist/domain/startup-proof.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/startup-resolver.d.ts +3 -1
- package/node_modules/@openrig/daemon/dist/domain/startup-resolver.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/startup-resolver.js +18 -0
- package/node_modules/@openrig/daemon/dist/domain/startup-resolver.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/startup-validation.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/startup-validation.js +12 -1
- package/node_modules/@openrig/daemon/dist/domain/startup-validation.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/types.d.ts +13 -1
- 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 +1 -1
- 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 +14 -0
- package/node_modules/@openrig/daemon/dist/domain/user-settings/settings-store.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/workflow-boot-sweep.d.ts +1 -0
- 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 +3 -0
- package/node_modules/@openrig/daemon/dist/domain/workflow-boot-sweep.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/workflow-exception-escalation.d.ts +4 -3
- package/node_modules/@openrig/daemon/dist/domain/workflow-exception-escalation.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/workflow-exception-escalation.js +22 -21
- package/node_modules/@openrig/daemon/dist/domain/workflow-exception-escalation.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/workflow-exception-router.d.ts +4 -3
- package/node_modules/@openrig/daemon/dist/domain/workflow-exception-router.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/workflow-exception-router.js +7 -6
- package/node_modules/@openrig/daemon/dist/domain/workflow-exception-router.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/workflow-human-destination.d.ts +18 -0
- package/node_modules/@openrig/daemon/dist/domain/workflow-human-destination.d.ts.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/workflow-human-destination.js +40 -0
- package/node_modules/@openrig/daemon/dist/domain/workflow-human-destination.js.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/workflow-projector.d.ts +4 -3
- package/node_modules/@openrig/daemon/dist/domain/workflow-projector.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/workflow-projector.js +26 -17
- package/node_modules/@openrig/daemon/dist/domain/workflow-projector.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/workflow-role-context.d.ts +4 -6
- package/node_modules/@openrig/daemon/dist/domain/workflow-role-context.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/workflow-role-context.js +7 -14
- package/node_modules/@openrig/daemon/dist/domain/workflow-role-context.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/workflow-runtime.d.ts +12 -3
- package/node_modules/@openrig/daemon/dist/domain/workflow-runtime.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/workflow-runtime.js +66 -14
- package/node_modules/@openrig/daemon/dist/domain/workflow-runtime.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 +39 -24
- package/node_modules/@openrig/daemon/dist/domain/workflow-validator.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/index.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/index.js +37 -96
- package/node_modules/@openrig/daemon/dist/index.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/project-lifecycle-surface.d.ts +1 -1
- package/node_modules/@openrig/daemon/dist/project-lifecycle-surface.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/routes/gateway.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/routes/gateway.js +10 -0
- package/node_modules/@openrig/daemon/dist/routes/gateway.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 +4 -3
- package/node_modules/@openrig/daemon/dist/routes/queue.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/routes/require-sender-identity.d.ts +3 -1
- package/node_modules/@openrig/daemon/dist/routes/require-sender-identity.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/routes/require-sender-identity.js +11 -5
- package/node_modules/@openrig/daemon/dist/routes/require-sender-identity.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/routes/sessions.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/routes/sessions.js +95 -27
- package/node_modules/@openrig/daemon/dist/routes/sessions.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 +6 -1
- package/node_modules/@openrig/daemon/dist/routes/workflow.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/server.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/server.js +2 -1
- package/node_modules/@openrig/daemon/dist/server.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/startup.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/startup.js +6 -3
- package/node_modules/@openrig/daemon/dist/startup.js.map +1 -1
- package/node_modules/@openrig/daemon/package.json +5 -1
- package/package.json +1 -1
- package/tui/dist/commands/completion.d.ts +8 -0
- package/tui/dist/commands/completion.d.ts.map +1 -0
- package/tui/dist/commands/completion.js +37 -0
- package/tui/dist/commands/completion.js.map +1 -0
- package/tui/dist/commands/registry.d.ts +7 -1
- package/tui/dist/commands/registry.d.ts.map +1 -1
- package/tui/dist/commands/registry.js +47 -0
- package/tui/dist/commands/registry.js.map +1 -1
- package/tui/dist/connections/connections-model.d.ts +72 -0
- package/tui/dist/connections/connections-model.d.ts.map +1 -0
- package/tui/dist/connections/connections-model.js +64 -0
- package/tui/dist/connections/connections-model.js.map +1 -0
- package/tui/dist/daemon-client.d.ts +1 -0
- package/tui/dist/daemon-client.d.ts.map +1 -1
- package/tui/dist/daemon-client.js +1 -0
- package/tui/dist/daemon-client.js.map +1 -1
- package/tui/dist/detail.d.ts +3 -0
- package/tui/dist/detail.d.ts.map +1 -1
- package/tui/dist/detail.js +23 -0
- package/tui/dist/detail.js.map +1 -1
- package/tui/dist/execution/execution-model.d.ts +1 -1
- package/tui/dist/execution/execution-model.d.ts.map +1 -1
- package/tui/dist/execution/execution-model.js +46 -170
- package/tui/dist/execution/execution-model.js.map +1 -1
- package/tui/dist/execution/workflow-model.d.ts +6 -0
- package/tui/dist/execution/workflow-model.d.ts.map +1 -0
- package/tui/dist/execution/workflow-model.js +219 -0
- package/tui/dist/execution/workflow-model.js.map +1 -0
- package/tui/dist/grammar.d.ts.map +1 -1
- package/tui/dist/grammar.js +1 -2
- package/tui/dist/grammar.js.map +1 -1
- package/tui/dist/health/health-model.d.ts +1 -1
- package/tui/dist/health/health-model.d.ts.map +1 -1
- package/tui/dist/health/health-model.js +5 -4
- package/tui/dist/health/health-model.js.map +1 -1
- package/tui/dist/hydrate.d.ts.map +1 -1
- package/tui/dist/hydrate.js +45 -8
- package/tui/dist/hydrate.js.map +1 -1
- package/tui/dist/input.d.ts +2 -0
- package/tui/dist/input.d.ts.map +1 -1
- package/tui/dist/input.js +28 -6
- package/tui/dist/input.js.map +1 -1
- package/tui/dist/main.js +47 -10
- package/tui/dist/main.js.map +1 -1
- package/tui/dist/render.d.ts +4 -0
- package/tui/dist/render.d.ts.map +1 -1
- package/tui/dist/render.js +128 -74
- package/tui/dist/render.js.map +1 -1
- package/tui/dist/sections.d.ts.map +1 -1
- package/tui/dist/sections.js +1 -0
- package/tui/dist/sections.js.map +1 -1
- package/tui/dist/socket-server.d.ts +4 -0
- package/tui/dist/socket-server.d.ts.map +1 -1
- package/tui/dist/socket-server.js +4 -0
- package/tui/dist/socket-server.js.map +1 -1
- package/tui/dist/state.d.ts +3 -1
- package/tui/dist/state.d.ts.map +1 -1
- package/tui/dist/state.js +47 -9
- package/tui/dist/state.js.map +1 -1
- package/tui/dist/stylize.js +3 -3
- package/tui/dist/stylize.js.map +1 -1
- package/tui/dist/time.d.ts +9 -0
- package/tui/dist/time.d.ts.map +1 -0
- package/tui/dist/time.js +42 -0
- package/tui/dist/time.js.map +1 -0
- package/tui/dist/types.d.ts +36 -1
- package/tui/dist/types.d.ts.map +1 -1
package/tui/dist/render.js
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { DEFAULT_TIME_ZONE, displayTime } from "./time.js";
|
|
2
|
+
import { connectionsLines } from "./connections/connections-model.js";
|
|
1
3
|
// Hand-rolled ANSI renderer (Phase-0 substrate decision). Pure function:
|
|
2
4
|
// (state, snapshot) → {lines, hitMap, explorerRows}. BOTH panes emit hit
|
|
3
5
|
// targets — explorer rows AND content-pane surfaces (table rows, view tabs,
|
|
@@ -18,7 +20,7 @@ import { buildLedgerExplorer } from "./crash-cart/ledger-explorer.js";
|
|
|
18
20
|
import { runtimeMarkSegs } from "./topology/runtime-marks.js";
|
|
19
21
|
import { barCells, flashActive, reducedMotion, spinnerFrame } from "./motion.js";
|
|
20
22
|
import { explorerWidth, MOTION_FRAME_MS } from "./visual-layout.js";
|
|
21
|
-
import { detailPage, fieldLine, sectionRule, listItem, alignedRow, LABEL_W } from "./detail.js";
|
|
23
|
+
import { detailPage, fieldLine, sectionRule, listItem, alignedRow, LABEL_W, wrapDetailLines } from "./detail.js";
|
|
22
24
|
import { healthAgentLines, healthDetailLines, healthListLines, healthSummaryLine } from "./health/health-model.js";
|
|
23
25
|
function pad(text, width) {
|
|
24
26
|
const t = String(text ?? "");
|
|
@@ -216,7 +218,7 @@ function workRows(rows, width) {
|
|
|
216
218
|
];
|
|
217
219
|
});
|
|
218
220
|
}
|
|
219
|
-
function agentDetailLines(snap, found, contentWidth) {
|
|
221
|
+
function agentDetailLines(snap, found, contentWidth, timeZone = DEFAULT_TIME_ZONE) {
|
|
220
222
|
const { agent, rig, pod } = found;
|
|
221
223
|
const session = agent.session;
|
|
222
224
|
const specInLibrary = !!agent.spec && !!findSpec(snap, agent.spec);
|
|
@@ -271,7 +273,7 @@ function agentDetailLines(snap, found, contentWidth) {
|
|
|
271
273
|
...(activityReason ? [{ label: "reason", value: activityReason }] : []),
|
|
272
274
|
...(agent.activity?.decidedBy ? [{ label: "decided by", value: agent.activity.decidedBy }] : []),
|
|
273
275
|
...(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 }] : []),
|
|
276
|
+
...(agent.activity?.eventAt ? [{ label: "changed", value: displayTime(agent.activity.eventAt, timeZone) }] : []),
|
|
275
277
|
],
|
|
276
278
|
},
|
|
277
279
|
{
|
|
@@ -307,10 +309,16 @@ function agentDetailLines(snap, found, contentWidth) {
|
|
|
307
309
|
],
|
|
308
310
|
},
|
|
309
311
|
{
|
|
310
|
-
title: "SPEC",
|
|
312
|
+
title: "SPEC · effective seat binding",
|
|
311
313
|
fields: [specInLibrary
|
|
312
314
|
? { 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
315
|
: { label: "spec", value: agent.spec ? `${agent.spec} (not in library)` : "—" }],
|
|
316
|
+
lines: [
|
|
317
|
+
...wrapDetailValue("profile", agent.profile ?? "not served", contentWidth),
|
|
318
|
+
...wrapDetailValue("version", agent.specVersion ?? "not served", contentWidth),
|
|
319
|
+
...wrapDetailValue("source hash", agent.specHash ?? "not served", contentWidth),
|
|
320
|
+
...wrapDetailValue("basis", "Served seat binding; the authored library may have changed since launch.", contentWidth),
|
|
321
|
+
],
|
|
314
322
|
},
|
|
315
323
|
]),
|
|
316
324
|
];
|
|
@@ -335,12 +343,6 @@ function tabsLine(state, suffix) {
|
|
|
335
343
|
}
|
|
336
344
|
return [{ text, zones }];
|
|
337
345
|
}
|
|
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
346
|
function queueRows(snap) {
|
|
345
347
|
return [...snap.attention, ...snap.blocked, ...snap.inProgress, ...snap.pending, ...snap.recentlyFinished];
|
|
346
348
|
}
|
|
@@ -381,53 +383,54 @@ function recentScopeMatches(snap, scope) {
|
|
|
381
383
|
return false;
|
|
382
384
|
return scope.kind === "instance" || (served.kind === "rig" && served.rig === scope.rig);
|
|
383
385
|
}
|
|
384
|
-
function recentLines(snap, scope, width, expanded) {
|
|
386
|
+
function recentLines(snap, scope, width, expanded, timeZone) {
|
|
385
387
|
if (!recentScopeMatches(snap, scope) || snap.recentTransitions == null)
|
|
386
388
|
return [];
|
|
387
|
-
const timeW = 5;
|
|
388
389
|
const rows = expanded ? snap.recentTransitions : snap.recentTransitions.slice(-5);
|
|
389
390
|
const lines = [
|
|
390
391
|
...(expanded ? [] : [{ text: "" }]),
|
|
391
|
-
sectionRule(`RECENT · ${scope.kind === "instance" ? "instance" : `rig ${scope.rig}`}
|
|
392
|
+
sectionRule(`RECENT · ${scope.kind === "instance" ? "instance" : `rig ${scope.rig}`}`, width),
|
|
393
|
+
{ text: " Recorded queue changes · oldest to newest · Enter inspects" },
|
|
392
394
|
];
|
|
393
395
|
if (rows.length === 0)
|
|
394
396
|
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
397
|
for (const row of rows) {
|
|
418
|
-
|
|
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 } : {}) })));
|
|
398
|
+
lines.push(listItem(`${displayTime(row.ts, timeZone)} · #${row.transitionId}`, { type: "recent-open", transitionId: row.transitionId }), { text: ` ${row.actorSession || "actor unknown"} · ${row.change || "change unknown"}` }, { text: ` ${recentWorkText(snap, row)}` }, { text: ` ${row.targetKind}: ${row.target}${scope.kind === "instance" ? ` · rig ${row.rig ?? "unknown"}` : ""}` }, { text: "" });
|
|
429
399
|
}
|
|
430
|
-
return lines;
|
|
400
|
+
return wrapDetailLines(lines, width);
|
|
401
|
+
}
|
|
402
|
+
function recentDetailLines(state, snap, width) {
|
|
403
|
+
const row = state.recentOpen;
|
|
404
|
+
const target = recentTargetAction(snap, row);
|
|
405
|
+
return wrapDetailLines([
|
|
406
|
+
{ text: `Recent event #${row.transitionId} · Esc returns` },
|
|
407
|
+
fieldLine({ label: "when", value: displayTime(row.ts, state.timeZone) }),
|
|
408
|
+
fieldLine({ label: "actor", value: row.actorSession || "unknown" }),
|
|
409
|
+
fieldLine({ label: "change", value: row.change || "unknown" }),
|
|
410
|
+
fieldLine({ label: "work", value: recentWorkText(snap, row) }),
|
|
411
|
+
fieldLine({ label: "target", value: `${row.targetKind}: ${row.target}` }),
|
|
412
|
+
fieldLine({ label: "rig", value: row.rig ?? "not served" }),
|
|
413
|
+
fieldLine({ label: "queue item", value: row.qitemId }),
|
|
414
|
+
fieldLine({ label: "raw time", value: row.ts }),
|
|
415
|
+
{ text: " This is the recorded change, not an independent check of its outcome." },
|
|
416
|
+
...(target ? [listItem("Related work / owner", target)] : [{ text: " Related work is outside the current snapshot." }]),
|
|
417
|
+
listItem("Back · Esc", { type: "back" }),
|
|
418
|
+
], width);
|
|
419
|
+
}
|
|
420
|
+
function timeZoneLines(state, width) {
|
|
421
|
+
return wrapDetailLines([
|
|
422
|
+
{ text: "Local time · presentation setting" },
|
|
423
|
+
fieldLine({ label: "timezone", value: state.timeZone }),
|
|
424
|
+
...(state.timeZoneWarning ? [{ text: ` ${state.timeZoneWarning}` }] : []),
|
|
425
|
+
{ text: " Absolute times include date and zone. Daylight saving follows the named zone. Elapsed ages stay relative; source timestamps are unchanged." },
|
|
426
|
+
{ text: "" },
|
|
427
|
+
{ text: " Change the persistent setting from the shell, then reopen this TUI:" },
|
|
428
|
+
{ text: " rig config set ui.timezone Europe/London" },
|
|
429
|
+
{ text: " rig config reset ui.timezone" },
|
|
430
|
+
{ text: " rig config get ui.timezone --show-source" },
|
|
431
|
+
{ text: " Default: America/Los_Angeles. OPENRIG_UI_TIMEZONE overrides the file setting on this TUI's instance." },
|
|
432
|
+
listItem("Back · Esc", { type: "back" }),
|
|
433
|
+
], width);
|
|
431
434
|
}
|
|
432
435
|
function specTabsLine(state, name) {
|
|
433
436
|
const active = state.viewTab === "topology" || state.viewTab === "yaml" ? state.viewTab : "configuration";
|
|
@@ -511,7 +514,7 @@ function instanceContentLines(state, snap, host, contentWidth, motion) {
|
|
|
511
514
|
if (state.viewTab === "health")
|
|
512
515
|
return [...lines, { text: "" }, ...healthListLines(snap, scope, contentWidth)];
|
|
513
516
|
if (state.viewTab === "recent") {
|
|
514
|
-
const recent = recentLines(snap, scope, contentWidth, true);
|
|
517
|
+
const recent = recentLines(snap, scope, contentWidth, true, state.timeZone);
|
|
515
518
|
return recent.length > 0
|
|
516
519
|
? [...lines, ...recent]
|
|
517
520
|
: [...lines, { text: "" }, { text: motion.loading ? `${motion.frame} instance RECENT read pending` : "(instance RECENT window not served)" }];
|
|
@@ -623,15 +626,21 @@ function instanceContentLines(state, snap, host, contentWidth, motion) {
|
|
|
623
626
|
}
|
|
624
627
|
}
|
|
625
628
|
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));
|
|
629
|
+
lines.push(...recentLines(snap, scope, contentWidth, false, state.timeZone));
|
|
627
630
|
return lines;
|
|
628
631
|
}
|
|
629
632
|
function contentLines(state, snap, contentWidth, motion) {
|
|
630
633
|
const contentWidthForGraph = contentWidth;
|
|
631
634
|
void contentWidthForGraph;
|
|
632
635
|
const lines = [];
|
|
636
|
+
if (state.timeZoneHelp)
|
|
637
|
+
return timeZoneLines(state, contentWidth);
|
|
638
|
+
if (state.recentOpen)
|
|
639
|
+
return recentDetailLines(state, snap, contentWidth);
|
|
640
|
+
if (state.section === "connections")
|
|
641
|
+
return connectionsLines(snap, contentWidth, state.timeZone);
|
|
633
642
|
if (state.healthOpen)
|
|
634
|
-
return healthDetailLines(snap, state.healthOpen, contentWidth);
|
|
643
|
+
return healthDetailLines(snap, state.healthOpen, contentWidth, state.timeZone);
|
|
635
644
|
// PULSE is a FULL-WIDTH view handled by an early return in renderScreen
|
|
636
645
|
// (renderPulseScreen) — it never reaches the sidebar+content layout below.
|
|
637
646
|
if (state.section === "topology") {
|
|
@@ -658,7 +667,7 @@ function contentLines(state, snap, contentWidth, motion) {
|
|
|
658
667
|
const found = hostName ? findAgent(snap, leaf.name, { host: hostName, rig: rigName, pod: podName }) : findAgent(snap, leaf.name);
|
|
659
668
|
if (!found)
|
|
660
669
|
return [{ text: `agent "${leaf.name}" not in the current snapshot` }];
|
|
661
|
-
return agentDetailLines(snap, found, contentWidth);
|
|
670
|
+
return agentDetailLines(snap, found, contentWidth, state.timeZone);
|
|
662
671
|
}
|
|
663
672
|
const hostName = state.drill.find((d) => d.kind === "host")?.name;
|
|
664
673
|
const host = (hostName ? snap.hosts.find((candidate) => candidate.name === hostName) : snap.hosts[0]);
|
|
@@ -692,7 +701,7 @@ function contentLines(state, snap, contentWidth, motion) {
|
|
|
692
701
|
if (state.viewTab === "health")
|
|
693
702
|
return [...lines, { text: "" }, ...healthListLines(snap, healthScope, contentWidth)];
|
|
694
703
|
if (state.viewTab === "recent") {
|
|
695
|
-
const recent = recentLines(snap, { kind: "rig", rig: rig.name }, contentWidth, true);
|
|
704
|
+
const recent = recentLines(snap, { kind: "rig", rig: rig.name }, contentWidth, true, state.timeZone);
|
|
696
705
|
return recent.length > 0
|
|
697
706
|
? [...lines, ...recent]
|
|
698
707
|
: [...lines, { text: "" }, { text: motion.loading ? `${motion.frame} rig RECENT read pending` : "(rig RECENT window not served)" }];
|
|
@@ -745,6 +754,7 @@ function contentLines(state, snap, contentWidth, motion) {
|
|
|
745
754
|
lines.push({ text: ` style: ${state.graphStyle} · style hatchet|braille|braille-fallback rides the command bar` });
|
|
746
755
|
return lines;
|
|
747
756
|
}
|
|
757
|
+
lines.push(listItem("Configuration and human routes", { type: "jump", section: "connections" }));
|
|
748
758
|
lines.push(healthSummaryLine(snap, healthScope, contentWidth));
|
|
749
759
|
lines.push({ text: state.filter ? `/ filter agents: ${state.filter} · / replace · esc clear` : "/ filter agents…" });
|
|
750
760
|
if (state.viewTab === "overview") {
|
|
@@ -826,7 +836,7 @@ function contentLines(state, snap, contentWidth, motion) {
|
|
|
826
836
|
const attention = rows.filter((agent) => /attention|needs|blocked|unknown|failed/.test(agent.status)).length;
|
|
827
837
|
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
838
|
if (!podFilter)
|
|
829
|
-
lines.push(...recentLines(snap, { kind: "rig", rig: rig.name }, contentWidth, false));
|
|
839
|
+
lines.push(...recentLines(snap, { kind: "rig", rig: rig.name }, contentWidth, false, state.timeZone));
|
|
830
840
|
return lines;
|
|
831
841
|
}
|
|
832
842
|
if (state.section === "specs") {
|
|
@@ -835,8 +845,28 @@ function contentLines(state, snap, contentWidth, motion) {
|
|
|
835
845
|
const spec = findSpec(snap, leaf.name);
|
|
836
846
|
if (!spec)
|
|
837
847
|
return [{ text: `spec "${leaf.name}" not in the current snapshot` }];
|
|
838
|
-
if (spec.kind === "rig")
|
|
848
|
+
if (spec.kind === "rig")
|
|
839
849
|
lines.push(specTabsLine(state, spec.name));
|
|
850
|
+
lines.push({ text: `${spec.kind} spec ${spec.name}` });
|
|
851
|
+
lines.push(fieldLine({ label: "purpose", value: spec.description ?? "not declared in the available source" }));
|
|
852
|
+
lines.push(fieldLine({ label: "provenance", value: `${sourceProvenance(spec)} · ${spec.sourceState ?? "source state not served"}` }));
|
|
853
|
+
lines.push(fieldLine({ label: "source", value: spec.sourcePath ?? "path unavailable" }));
|
|
854
|
+
lines.push({ text: " Authored declaration. Resource availability is not the effective loadout of a running seat." });
|
|
855
|
+
lines.push(sectionRule("Observed consumers · open for effective runtime/configuration", contentWidth));
|
|
856
|
+
for (const consumer of spec.consumers ?? []) {
|
|
857
|
+
const resource = consumer.agent ? "agent" : "rig";
|
|
858
|
+
lines.push(listItem(`${consumer.agent ?? consumer.rig} · ${consumer.status ?? "unknown"}${consumer.runtime ? ` · ${consumer.runtime}` : ""}${consumer.model ? ` · ${consumer.model}` : ""}`, { type: "drill", resource, name: consumer.agent ?? consumer.rig, target: { host: consumer.host, rig: consumer.rig } }));
|
|
859
|
+
}
|
|
860
|
+
if (spec.consumers && !spec.consumers.length)
|
|
861
|
+
lines.push({ text: " No consumers observed in the available local inventory (remote seats are not enumerated)." });
|
|
862
|
+
if (spec.consumers === undefined)
|
|
863
|
+
lines.push({ text: " Consumer projection unavailable." });
|
|
864
|
+
for (const error of snap.readErrors.filter((error) => error.startsWith("nodes(") || error.startsWith("rig-spec(") || error.startsWith("rigs-summary:")))
|
|
865
|
+
lines.push({ text: ` Inventory incomplete: ${error}` });
|
|
866
|
+
lines.push(listItem("Back · Esc", { type: "back" }));
|
|
867
|
+
if (spec.sourceUnavailable)
|
|
868
|
+
return wrapDetailLines([...lines, { text: ` Source unavailable: ${spec.sourceUnavailable}` }], contentWidth);
|
|
869
|
+
if (spec.kind === "rig") {
|
|
840
870
|
if (spec.sourcePath)
|
|
841
871
|
lines.push(fieldLine({ label: "source", value: `${displayPath(spec.sourcePath, 56)} · ${sourceProvenance(spec)}` }));
|
|
842
872
|
if (state.viewTab === "topology") {
|
|
@@ -848,7 +878,7 @@ function contentLines(state, snap, contentWidth, motion) {
|
|
|
848
878
|
lines.push({ text: "" });
|
|
849
879
|
if (nodes.length === 0) {
|
|
850
880
|
lines.push({ text: " (topology projection is empty)" });
|
|
851
|
-
return lines;
|
|
881
|
+
return wrapDetailLines(lines, contentWidth);
|
|
852
882
|
}
|
|
853
883
|
lines.push({ text: ` ${alignedRow(NODE_COLS)}` });
|
|
854
884
|
lines.push({ text: ` ${"─".repeat(NODE_COLS.reduce((n, [, w]) => n + w + 1, -1))}` });
|
|
@@ -860,12 +890,12 @@ function contentLines(state, snap, contentWidth, motion) {
|
|
|
860
890
|
for (const edge of graphEdges)
|
|
861
891
|
lines.push({ text: ` ${alignedRow([[edge.source, 16], ["→", 2], [edge.target, 20]])} (${edge.kind})` });
|
|
862
892
|
}
|
|
863
|
-
return lines;
|
|
893
|
+
return wrapDetailLines(lines, contentWidth);
|
|
864
894
|
}
|
|
865
895
|
if (state.viewTab === "yaml") {
|
|
866
896
|
for (const rawLine of (spec.raw ?? "# raw YAML unavailable").split("\n"))
|
|
867
897
|
lines.push({ text: ` ${rawLine}` });
|
|
868
|
-
return lines;
|
|
898
|
+
return wrapDetailLines(lines, contentWidth);
|
|
869
899
|
}
|
|
870
900
|
const members = spec.pods?.reduce((count, pod) => count + pod.members.length, 0) ?? spec.legacyNodes?.length ?? 0;
|
|
871
901
|
const edges = (spec.edges?.length ?? 0) + (spec.pods?.reduce((count, pod) => count + pod.edges.length, 0) ?? 0);
|
|
@@ -940,12 +970,12 @@ function contentLines(state, snap, contentWidth, motion) {
|
|
|
940
970
|
fields: [{ label: "source", value: spec.sourcePath ? `${displayPath(spec.sourcePath, 56)} · ${sourceProvenance(spec)}` : "—" }],
|
|
941
971
|
},
|
|
942
972
|
{
|
|
943
|
-
title: "
|
|
973
|
+
title: "Declared rig references",
|
|
944
974
|
fields: [
|
|
945
975
|
...((spec.usedByRigs?.length ?? 0) === 0
|
|
946
|
-
? [{ label: "
|
|
976
|
+
? [{ label: "declared by", value: "—" }]
|
|
947
977
|
: (spec.usedByRigs ?? []).map((rig) => ({
|
|
948
|
-
label: "
|
|
978
|
+
label: "declared by",
|
|
949
979
|
value: `rig ${rig}`,
|
|
950
980
|
link: { type: "drill", resource: "spec", name: rig },
|
|
951
981
|
}))),
|
|
@@ -958,7 +988,7 @@ function contentLines(state, snap, contentWidth, motion) {
|
|
|
958
988
|
},
|
|
959
989
|
]));
|
|
960
990
|
}
|
|
961
|
-
return lines;
|
|
991
|
+
return wrapDetailLines(lines, contentWidth);
|
|
962
992
|
}
|
|
963
993
|
lines.push({ text: "SPEC LIBRARY" });
|
|
964
994
|
lines.push({ text: state.filter ? `/ filter specs: ${state.filter} · / replace · esc clear` : "/ filter specs…" });
|
|
@@ -1055,6 +1085,16 @@ function contentLines(state, snap, contentWidth, motion) {
|
|
|
1055
1085
|
return lines;
|
|
1056
1086
|
}
|
|
1057
1087
|
if (state.section === "scopes") {
|
|
1088
|
+
if (!state.scopesMission && snap.execution) {
|
|
1089
|
+
const selected = snap.execution;
|
|
1090
|
+
const instances = selected.lifecycle_instances;
|
|
1091
|
+
return wrapDetailLines([
|
|
1092
|
+
{ text: "SCOPES · choose a mission in the explorer" },
|
|
1093
|
+
listItem(`Default mission · ${selected.mission}`, { type: "scopes-mission-open", mission: selected.mission }),
|
|
1094
|
+
{ text: ` Workflows: ${instances ? instances.map((instance) => String(instance.status ?? "unknown")).join(", ") || "none bound" : "projection unavailable"}` },
|
|
1095
|
+
{ text: ` Execution snapshot: ${displayTime(selected.derived_at, state.timeZone)}. Other missions load when selected.` },
|
|
1096
|
+
], contentWidth);
|
|
1097
|
+
}
|
|
1058
1098
|
// SCOPES owns both levels. Both mission-graph and Explorer slice routes land
|
|
1059
1099
|
// on the same execution-backed canonical detail; store-direct content is
|
|
1060
1100
|
// composed into that page instead of surviving as a competing destination.
|
|
@@ -1068,16 +1108,16 @@ function contentLines(state, snap, contentWidth, motion) {
|
|
|
1068
1108
|
return executionContentLines(execution, snap.scopes, snap.readErrors, state.executionOpen, contentWidth, false, snap.sliceDetail, {
|
|
1069
1109
|
collapseReqs: state.scopesCollapseReqs,
|
|
1070
1110
|
narrative: state.scopesNarrative,
|
|
1071
|
-
});
|
|
1111
|
+
}, state.timeZone);
|
|
1072
1112
|
}
|
|
1073
1113
|
if (detail && execution) {
|
|
1074
1114
|
return executionContentLines(execution, snap.scopes, snap.readErrors, `slice:${detail.id ?? detail.dirName}`, contentWidth, false, snap.sliceDetail, {
|
|
1075
1115
|
collapseReqs: state.scopesCollapseReqs,
|
|
1076
1116
|
narrative: state.scopesNarrative,
|
|
1077
|
-
});
|
|
1117
|
+
}, state.timeZone);
|
|
1078
1118
|
}
|
|
1079
1119
|
if (!detail && missionName) {
|
|
1080
|
-
const lines = executionContentLines(execution, snap.scopes, snap.readErrors, state.executionOpen, contentWidth, !snap.hydratedAt || snap.executionMission !== missionName);
|
|
1120
|
+
const lines = executionContentLines(execution, snap.scopes, snap.readErrors, state.executionOpen, contentWidth, !snap.hydratedAt || snap.executionMission !== missionName, undefined, undefined, state.timeZone);
|
|
1081
1121
|
return execution ? lines : [{ text: ` ${missionName} EXECUTION` }, ...lines];
|
|
1082
1122
|
}
|
|
1083
1123
|
return scopesContentLines(detail, missionName, {
|
|
@@ -1201,7 +1241,14 @@ function renderPulseScreen(state, snap, options, inputLine) {
|
|
|
1201
1241
|
const contentTargets = [];
|
|
1202
1242
|
const flashRows = [];
|
|
1203
1243
|
let flashAck = false;
|
|
1204
|
-
lines.push(pad(`cmd ▸ ${inputLine}
|
|
1244
|
+
lines.push(pad(`cmd ▸ ${inputLine}▊${inputLine ? "" : " Tab complete · ? help · timezone"}`, cols));
|
|
1245
|
+
if (options.completion) {
|
|
1246
|
+
lines.push(pad(options.completion.message, cols));
|
|
1247
|
+
for (const candidate of options.completion.candidates.slice(0, 4))
|
|
1248
|
+
lines.push(pad(` ${candidate}`, cols));
|
|
1249
|
+
if (options.completion.candidates.length > 4)
|
|
1250
|
+
lines.push(pad(" … keep typing to narrow matches", cols));
|
|
1251
|
+
}
|
|
1205
1252
|
// REGISTRY I3 — the palette overlay: fuzzy rows over the ONE registry; unavailable
|
|
1206
1253
|
// entries render DIMMED-WITH-REASON, never hidden (PM pin); bounded height.
|
|
1207
1254
|
if (state.palette) {
|
|
@@ -1223,7 +1270,7 @@ function renderPulseScreen(state, snap, options, inputLine) {
|
|
|
1223
1270
|
const contentWidth = Math.max(cols - explW - 2, 0);
|
|
1224
1271
|
const model = buildPulseModel(snap, nowMs);
|
|
1225
1272
|
const chromeRows = 3; // bottom rule + hint bar + status line
|
|
1226
|
-
const bodyRows = Math.max(rows -
|
|
1273
|
+
const bodyRows = Math.max(rows - lines.length - chromeRows, 1);
|
|
1227
1274
|
const maxContentOffset = Math.max(renderPulseView(model).length - bodyRows, 0);
|
|
1228
1275
|
const contentStart = Math.min(state.contentOffset, maxContentOffset);
|
|
1229
1276
|
// Lane cells (column-major), CLIPPED to the content width: a cell whose column
|
|
@@ -1309,7 +1356,7 @@ function renderPulseScreen(state, snap, options, inputLine) {
|
|
|
1309
1356
|
// the footer's live "updated Ns ago" IS the ongoing refresh signal (reader
|
|
1310
1357
|
// clock), so a settled empty view stays calm. Reduced motion → static "·".
|
|
1311
1358
|
const loadTag = loading ? ` ${frame} loading` : "";
|
|
1312
|
-
lines.push(pad(`[${state.instanceId}] ${state.section}${drillPath ? " · " + drillPath : ""}${state.lastError ? " ✗ " + state.lastError : ""}${state.notice ? " ▸ " + state.notice : ""}${readWarn}${loadTag}`, cols));
|
|
1359
|
+
lines.push(pad(`[${state.instanceId}] ${state.section}${drillPath ? " · " + drillPath : ""}${state.lastError ? " ✗ " + state.lastError : ""}${state.notice ? " ▸ " + state.notice : ""}${readWarn}${loadTag}${state.timeZoneWarning ? " · ⚠ timezone; run timezone" : ""}`, cols));
|
|
1313
1360
|
while (lines.length < rows)
|
|
1314
1361
|
lines.push("");
|
|
1315
1362
|
const anyFlash = model.lanes.some((l) => l.rows.some((r) => r.flashed));
|
|
@@ -1368,7 +1415,7 @@ function crashCartShell(content, led, contentTitle, cols, rows, inputLine, opts)
|
|
|
1368
1415
|
const segRows = {};
|
|
1369
1416
|
lines.push(pad(`cmd ▸ ${inputLine}▊`, cols));
|
|
1370
1417
|
lines.push(paneRule(cols, explW, "top", "{ EXPLORER }", contentTitle));
|
|
1371
|
-
// The
|
|
1418
|
+
// The explorer's source note, then any discovered rigs (name + seat count).
|
|
1372
1419
|
const leftRows = [led.note, "", ...led.rows.map((r) => `${r.label} (${r.seatCount})`)];
|
|
1373
1420
|
const contentWidth = Math.max(cols - explW - 2, 0);
|
|
1374
1421
|
if (opts?.wrap)
|
|
@@ -1391,7 +1438,7 @@ function crashCartShell(content, led, contentTitle, cols, rows, inputLine, opts)
|
|
|
1391
1438
|
lines.push(paneRule(cols, explW, "bottom"));
|
|
1392
1439
|
lines.push(pad("", cols));
|
|
1393
1440
|
const scrollHint = contentMaxOffset > 0 ? ` · ↑↓ scroll (${scroll}/${contentMaxOffset})` : "";
|
|
1394
|
-
lines.push(pad(`[crash-cart]
|
|
1441
|
+
lines.push(pad(`[crash-cart] ${led.note}${scrollHint}`, cols));
|
|
1395
1442
|
while (lines.length < rows)
|
|
1396
1443
|
lines.push("");
|
|
1397
1444
|
return {
|
|
@@ -1433,7 +1480,7 @@ export function renderScreen(state, snap, options = {}, inputLine = "") {
|
|
|
1433
1480
|
return crashCartShell(content, led, "CRASH-CART", cols, rows, inputLine, options.confirm ? { wrap: true } : undefined);
|
|
1434
1481
|
}
|
|
1435
1482
|
if (options.daemonState === "unverified" && options.daemonEvidence) {
|
|
1436
|
-
const led =
|
|
1483
|
+
const led = { note: "daemon unverified", rows: [] }; // No ledger discovery occurred on this path.
|
|
1437
1484
|
return crashCartShell(renderUnverifiedView(options.daemonEvidence), led, "DAEMON?", cols, rows, inputLine);
|
|
1438
1485
|
}
|
|
1439
1486
|
// PULSE (founder Option-B): a content-pane view inside the NORMAL explorer│
|
|
@@ -1459,7 +1506,14 @@ export function renderScreen(state, snap, options = {}, inputLine = "") {
|
|
|
1459
1506
|
// shell accepts typing from the empty state, so the honest readiness
|
|
1460
1507
|
// affordance must show BEFORE the first key (no new focus state; stylize
|
|
1461
1508
|
// gives the cell SGR blink; zero effect on hit geometry).
|
|
1462
|
-
lines.push(pad(`cmd ▸ ${inputLine}
|
|
1509
|
+
lines.push(pad(`cmd ▸ ${inputLine}▊${inputLine ? "" : " Tab complete · ? help · timezone"}`, cols));
|
|
1510
|
+
if (options.completion) {
|
|
1511
|
+
lines.push(pad(options.completion.message, cols));
|
|
1512
|
+
for (const candidate of options.completion.candidates.slice(0, 4))
|
|
1513
|
+
lines.push(pad(` ${candidate}`, cols));
|
|
1514
|
+
if (options.completion.candidates.length > 4)
|
|
1515
|
+
lines.push(pad(" … keep typing to narrow matches", cols));
|
|
1516
|
+
}
|
|
1463
1517
|
// REGISTRY I3 — the palette overlay: fuzzy rows over the ONE registry; unavailable
|
|
1464
1518
|
// entries render DIMMED-WITH-REASON, never hidden (PM pin); bounded height.
|
|
1465
1519
|
if (state.palette) {
|
|
@@ -1497,7 +1551,7 @@ export function renderScreen(state, snap, options = {}, inputLine = "") {
|
|
|
1497
1551
|
const liveFlashes = (options.rowFlashes ?? []).filter((f) => flashActive(f.at, nowMs, 600, reduced));
|
|
1498
1552
|
const ackFlashes = (options.rowFlashes ?? []).filter((f) => flashActive(f.at, nowMs, 600, false));
|
|
1499
1553
|
const chromeRows = footer ? 4 : 3; // bottom rule + hint bar + status line (+ footer)
|
|
1500
|
-
const bodyRows = Math.max(rows -
|
|
1554
|
+
const bodyRows = Math.max(rows - lines.length - chromeRows, 1);
|
|
1501
1555
|
const explorerStart = Math.min(Math.max(state.selection - bodyRows + 1, 0), Math.max(explorer.length - bodyRows, 0));
|
|
1502
1556
|
const contentRows = content.length > bodyRows ? Math.max(bodyRows - 1, 0) : bodyRows;
|
|
1503
1557
|
const maxContentOffset = Math.max(content.length - contentRows, 0);
|
|
@@ -1581,12 +1635,12 @@ export function renderScreen(state, snap, options = {}, inputLine = "") {
|
|
|
1581
1635
|
segRows[y] = rowSegs;
|
|
1582
1636
|
}
|
|
1583
1637
|
if (footer)
|
|
1584
|
-
lines.push(pad(`≋ ${footer.tsEmitted
|
|
1638
|
+
lines.push(pad(`≋ ${displayTime(footer.tsEmitted, state.timeZone)} ${footer.sourceSession}: ${footer.body}`, cols));
|
|
1585
1639
|
const drillPath = state.drill.map((d) => d.name).join(" → ");
|
|
1586
1640
|
const readWarn = snap.readErrors.length > 0 ? ` ⚠ ${snap.readErrors.length} read(s) failed: ${snap.readErrors[0]}` : "";
|
|
1587
1641
|
lines.push(paneRule(cols, explW, "bottom"));
|
|
1588
1642
|
lines.push(pad(keybindHints(state), cols));
|
|
1589
|
-
lines.push(pad(`[${state.instanceId}] ${state.section}${drillPath ? " · " + drillPath : ""}${state.lastError ? " ✗ " + state.lastError : ""}${state.notice ? " ▸ " + state.notice : ""}${readWarn}`, cols));
|
|
1643
|
+
lines.push(pad(`[${state.instanceId}] ${state.section}${drillPath ? " · " + drillPath : ""}${state.lastError ? " ✗ " + state.lastError : ""}${state.notice ? " ▸ " + state.notice : ""}${readWarn}${state.timeZoneWarning ? " · ⚠ timezone; run timezone" : ""}`, cols));
|
|
1590
1644
|
while (lines.length < rows)
|
|
1591
1645
|
lines.push("");
|
|
1592
1646
|
return {
|