@openrig/cli 0.5.12 → 0.5.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/daemon/assets/plugins/openrig-core/skills/messaging-the-human/SKILL.md +40 -5
- package/daemon/context-packs/onboarding-width/manifest.yaml +1 -1
- package/daemon/context-packs/onboarding-width/public-what-you-can-do.md +89 -10
- package/daemon/context-packs/skills/agent-operated-software/manifest.yaml +1 -1
- package/daemon/context-packs/skills/agent-operated-workflows/manifest.yaml +1 -1
- 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/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 +40 -5
- package/daemon/context-packs/skills/core/messaging-the-human/manifest.yaml +1 -1
- 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/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/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/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/manifest.yaml +1 -1
- 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/manifest.yaml +1 -1
- 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/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/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/manifest.yaml +1 -1
- package/daemon/context-packs/world-example/manifest.yaml +1 -1
- package/daemon/context-packs/world-public/manifest.yaml +1 -1
- package/daemon/dist/attention-surface.d.ts +38 -0
- package/daemon/dist/attention-surface.d.ts.map +1 -0
- package/daemon/dist/attention-surface.js +3 -0
- package/daemon/dist/attention-surface.js.map +1 -0
- 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 +12 -2
- package/daemon/dist/db/all-migrations.js.map +1 -1
- package/daemon/dist/db/migrations/080_scoped_operating_posture.d.ts +4 -0
- package/daemon/dist/db/migrations/080_scoped_operating_posture.d.ts.map +1 -0
- package/daemon/dist/db/migrations/080_scoped_operating_posture.js +21 -0
- package/daemon/dist/db/migrations/080_scoped_operating_posture.js.map +1 -0
- package/daemon/dist/db/migrations/081_human_notification_intent.d.ts +3 -0
- package/daemon/dist/db/migrations/081_human_notification_intent.d.ts.map +1 -0
- package/daemon/dist/db/migrations/081_human_notification_intent.js +9 -0
- package/daemon/dist/db/migrations/081_human_notification_intent.js.map +1 -0
- package/daemon/dist/db/migrations/082_archive_identity_provenance.d.ts +5 -0
- package/daemon/dist/db/migrations/082_archive_identity_provenance.d.ts.map +1 -0
- package/daemon/dist/db/migrations/082_archive_identity_provenance.js +7 -0
- package/daemon/dist/db/migrations/082_archive_identity_provenance.js.map +1 -0
- package/daemon/dist/db/migrations/083_review_read_indexes.d.ts +4 -0
- package/daemon/dist/db/migrations/083_review_read_indexes.d.ts.map +1 -0
- package/daemon/dist/db/migrations/083_review_read_indexes.js +12 -0
- package/daemon/dist/db/migrations/083_review_read_indexes.js.map +1 -0
- package/daemon/dist/db/migrations/084_inventory_event_indexes.d.ts +5 -0
- package/daemon/dist/db/migrations/084_inventory_event_indexes.d.ts.map +1 -0
- package/daemon/dist/db/migrations/084_inventory_event_indexes.js +14 -0
- package/daemon/dist/db/migrations/084_inventory_event_indexes.js.map +1 -0
- package/daemon/dist/domain/execution-view.d.ts +1 -0
- package/daemon/dist/domain/execution-view.d.ts.map +1 -1
- package/daemon/dist/domain/execution-view.js +38 -19
- package/daemon/dist/domain/execution-view.js.map +1 -1
- package/daemon/dist/domain/files/file-read.d.ts +17 -0
- package/daemon/dist/domain/files/file-read.d.ts.map +1 -0
- package/daemon/dist/domain/files/file-read.js +24 -0
- package/daemon/dist/domain/files/file-read.js.map +1 -0
- package/daemon/dist/domain/gateway/connections-projection.d.ts +4 -4
- package/daemon/dist/domain/gateway/slack/message.d.ts +13 -12
- package/daemon/dist/domain/gateway/slack/message.d.ts.map +1 -1
- package/daemon/dist/domain/gateway/slack/message.js +40 -77
- package/daemon/dist/domain/gateway/slack/message.js.map +1 -1
- package/daemon/dist/domain/gateway/slack/outbound-driver.d.ts +2 -0
- package/daemon/dist/domain/gateway/slack/outbound-driver.d.ts.map +1 -1
- package/daemon/dist/domain/gateway/slack/outbound-driver.js +2 -0
- package/daemon/dist/domain/gateway/slack/outbound-driver.js.map +1 -1
- package/daemon/dist/domain/gateway/slack/queue-access.d.ts +2 -0
- package/daemon/dist/domain/gateway/slack/queue-access.d.ts.map +1 -1
- package/daemon/dist/domain/gateway/slack/queue-access.js +2 -0
- package/daemon/dist/domain/gateway/slack/queue-access.js.map +1 -1
- package/daemon/dist/domain/gateway/slack/slack-delivery.d.ts +4 -1
- package/daemon/dist/domain/gateway/slack/slack-delivery.d.ts.map +1 -1
- package/daemon/dist/domain/gateway/slack/slack-delivery.js +85 -3
- package/daemon/dist/domain/gateway/slack/slack-delivery.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 +8 -1
- package/daemon/dist/domain/gateway/slack/slack-subsystem.js.map +1 -1
- package/daemon/dist/domain/health-context.d.ts +3 -0
- package/daemon/dist/domain/health-context.d.ts.map +1 -1
- package/daemon/dist/domain/health-context.js +78 -6
- package/daemon/dist/domain/health-context.js.map +1 -1
- package/daemon/dist/domain/health-detectors.d.ts +2 -1
- package/daemon/dist/domain/health-detectors.d.ts.map +1 -1
- package/daemon/dist/domain/health-detectors.js +8 -2
- package/daemon/dist/domain/health-detectors.js.map +1 -1
- package/daemon/dist/domain/health-diagnosis.d.ts +51 -1
- package/daemon/dist/domain/health-diagnosis.d.ts.map +1 -1
- package/daemon/dist/domain/health-diagnosis.js +60 -9
- package/daemon/dist/domain/health-diagnosis.js.map +1 -1
- package/daemon/dist/domain/health-passive-ceremony.d.ts +7 -1
- package/daemon/dist/domain/health-passive-ceremony.d.ts.map +1 -1
- package/daemon/dist/domain/health-passive-ceremony.js +59 -26
- package/daemon/dist/domain/health-passive-ceremony.js.map +1 -1
- package/daemon/dist/domain/health-projection.d.ts +2 -0
- package/daemon/dist/domain/health-projection.d.ts.map +1 -1
- package/daemon/dist/domain/health-projection.js.map +1 -1
- package/daemon/dist/domain/policies/delivery-digest-flush.d.ts.map +1 -1
- package/daemon/dist/domain/policies/delivery-digest-flush.js +23 -3
- package/daemon/dist/domain/policies/delivery-digest-flush.js.map +1 -1
- package/daemon/dist/domain/proof/judgments.d.ts +10 -3
- package/daemon/dist/domain/proof/judgments.d.ts.map +1 -1
- package/daemon/dist/domain/proof/judgments.js +26 -8
- package/daemon/dist/domain/proof/judgments.js.map +1 -1
- package/daemon/dist/domain/queue-repository.d.ts +19 -6
- package/daemon/dist/domain/queue-repository.d.ts.map +1 -1
- package/daemon/dist/domain/queue-repository.js +61 -11
- package/daemon/dist/domain/queue-repository.js.map +1 -1
- package/daemon/dist/domain/queue-retention.d.ts.map +1 -1
- package/daemon/dist/domain/queue-retention.js +6 -2
- package/daemon/dist/domain/queue-retention.js.map +1 -1
- package/daemon/dist/domain/queue-transition-log.d.ts +1 -0
- package/daemon/dist/domain/queue-transition-log.d.ts.map +1 -1
- package/daemon/dist/domain/queue-transition-log.js +19 -7
- package/daemon/dist/domain/queue-transition-log.js.map +1 -1
- package/daemon/dist/domain/review/fleet-compose.d.ts +7 -6
- package/daemon/dist/domain/review/fleet-compose.d.ts.map +1 -1
- package/daemon/dist/domain/review/fleet-compose.js +25 -11
- package/daemon/dist/domain/review/fleet-compose.js.map +1 -1
- package/daemon/dist/domain/rig-mode/operating-posture.d.ts +49 -0
- package/daemon/dist/domain/rig-mode/operating-posture.d.ts.map +1 -0
- package/daemon/dist/domain/rig-mode/operating-posture.js +255 -0
- package/daemon/dist/domain/rig-mode/operating-posture.js.map +1 -0
- package/daemon/dist/domain/rig-mode/rig-mode-defaults.d.ts.map +1 -1
- package/daemon/dist/domain/rig-mode/rig-mode-defaults.js +20 -0
- package/daemon/dist/domain/rig-mode/rig-mode-defaults.js.map +1 -1
- package/daemon/dist/domain/rig-mode/rig-mode-store.d.ts +2 -2
- package/daemon/dist/domain/rig-mode/rig-mode-store.d.ts.map +1 -1
- package/daemon/dist/domain/rig-mode/rig-mode-store.js +19 -3
- package/daemon/dist/domain/rig-mode/rig-mode-store.js.map +1 -1
- package/daemon/dist/domain/rig-mode/rig-mode-types.d.ts +12 -7
- package/daemon/dist/domain/rig-mode/rig-mode-types.d.ts.map +1 -1
- package/daemon/dist/domain/rig-mode/rig-mode-types.js +14 -3
- package/daemon/dist/domain/rig-mode/rig-mode-types.js.map +1 -1
- package/daemon/dist/domain/scope/scope-view-projection.d.ts +2 -2
- package/daemon/dist/domain/scope/scope-view-projection.d.ts.map +1 -1
- package/daemon/dist/domain/scope/scope-view-projection.js +2 -2
- package/daemon/dist/domain/scope/scope-view-projection.js.map +1 -1
- package/daemon/dist/domain/slices/slice-detail-projector.d.ts +1 -0
- package/daemon/dist/domain/slices/slice-detail-projector.d.ts.map +1 -1
- package/daemon/dist/domain/slices/slice-detail-projector.js +3 -0
- package/daemon/dist/domain/slices/slice-detail-projector.js.map +1 -1
- package/daemon/dist/domain/slices/slice-indexer.d.ts +4 -0
- package/daemon/dist/domain/slices/slice-indexer.d.ts.map +1 -1
- package/daemon/dist/domain/slices/slice-indexer.js +10 -1
- package/daemon/dist/domain/slices/slice-indexer.js.map +1 -1
- package/daemon/dist/domain/terminal/herdr-adapter.d.ts +2 -0
- package/daemon/dist/domain/terminal/herdr-adapter.d.ts.map +1 -1
- package/daemon/dist/domain/terminal/herdr-adapter.js +1 -1
- package/daemon/dist/domain/terminal/herdr-adapter.js.map +1 -1
- package/daemon/dist/domain/terminal/terminal-service.d.ts +30 -2
- package/daemon/dist/domain/terminal/terminal-service.d.ts.map +1 -1
- package/daemon/dist/domain/terminal/terminal-service.js +53 -13
- package/daemon/dist/domain/terminal/terminal-service.js.map +1 -1
- package/daemon/dist/domain/view-projector.d.ts +2 -0
- package/daemon/dist/domain/view-projector.d.ts.map +1 -1
- package/daemon/dist/domain/view-projector.js +1 -1
- package/daemon/dist/domain/view-projector.js.map +1 -1
- package/daemon/dist/domain/workspace/project-catalog.d.ts +18 -0
- package/daemon/dist/domain/workspace/project-catalog.d.ts.map +1 -0
- package/daemon/dist/domain/workspace/project-catalog.js +66 -0
- package/daemon/dist/domain/workspace/project-catalog.js.map +1 -0
- package/daemon/dist/domain/workspace/project-read.d.ts +29 -0
- package/daemon/dist/domain/workspace/project-read.d.ts.map +1 -0
- package/daemon/dist/domain/workspace/project-read.js +125 -0
- package/daemon/dist/domain/workspace/project-read.js.map +1 -0
- package/daemon/dist/health-projection-surface.d.ts +1 -0
- package/daemon/dist/health-projection-surface.d.ts.map +1 -1
- package/daemon/dist/local-reading-surface.d.ts +3 -0
- package/daemon/dist/local-reading-surface.d.ts.map +1 -0
- package/daemon/dist/local-reading-surface.js +3 -0
- package/daemon/dist/local-reading-surface.js.map +1 -0
- package/daemon/dist/project-catalog-surface.d.ts +2 -0
- package/daemon/dist/project-catalog-surface.d.ts.map +1 -0
- package/daemon/dist/project-catalog-surface.js +2 -0
- package/daemon/dist/project-catalog-surface.js.map +1 -0
- package/daemon/dist/routes/attention.d.ts +3 -0
- package/daemon/dist/routes/attention.d.ts.map +1 -0
- package/daemon/dist/routes/attention.js +155 -0
- package/daemon/dist/routes/attention.js.map +1 -0
- package/daemon/dist/routes/files.d.ts +1 -1
- package/daemon/dist/routes/files.d.ts.map +1 -1
- package/daemon/dist/routes/files.js +4 -24
- package/daemon/dist/routes/files.js.map +1 -1
- package/daemon/dist/routes/queue.d.ts +4 -18
- package/daemon/dist/routes/queue.d.ts.map +1 -1
- package/daemon/dist/routes/queue.js +23 -33
- package/daemon/dist/routes/queue.js.map +1 -1
- package/daemon/dist/routes/review.js +1 -1
- package/daemon/dist/routes/rig-mode.d.ts.map +1 -1
- package/daemon/dist/routes/rig-mode.js +67 -14
- package/daemon/dist/routes/rig-mode.js.map +1 -1
- package/daemon/dist/routes/rigs.js +5 -1
- package/daemon/dist/routes/rigs.js.map +1 -1
- package/daemon/dist/routes/scopes.d.ts.map +1 -1
- package/daemon/dist/routes/scopes.js +74 -20
- package/daemon/dist/routes/scopes.js.map +1 -1
- package/daemon/dist/routes/slices.d.ts +2 -2
- package/daemon/dist/routes/slices.d.ts.map +1 -1
- package/daemon/dist/routes/slices.js +18 -1
- package/daemon/dist/routes/slices.js.map +1 -1
- package/daemon/dist/routes/spec-library.d.ts.map +1 -1
- package/daemon/dist/routes/spec-library.js +11 -2
- package/daemon/dist/routes/spec-library.js.map +1 -1
- package/daemon/dist/routes/terminal.d.ts.map +1 -1
- package/daemon/dist/routes/terminal.js +14 -4
- package/daemon/dist/routes/terminal.js.map +1 -1
- package/daemon/dist/routes/views.d.ts.map +1 -1
- package/daemon/dist/routes/views.js +11 -1
- package/daemon/dist/routes/views.js.map +1 -1
- package/daemon/dist/server.d.ts +1 -0
- package/daemon/dist/server.d.ts.map +1 -1
- package/daemon/dist/server.js +3 -0
- package/daemon/dist/server.js.map +1 -1
- package/daemon/dist/startup.d.ts.map +1 -1
- package/daemon/dist/startup.js +19 -5
- package/daemon/dist/startup.js.map +1 -1
- package/daemon/docs/reference/getting-started.md +13 -1
- package/daemon/docs/reference/health-diagnosis.md +83 -6
- package/daemon/docs/reference/project-workspace.md +23 -0
- package/daemon/docs/reference/scoped-operating-posture.md +95 -0
- package/daemon/specs/agents/shared/skills/core/messaging-the-human/SKILL.md +40 -5
- package/dist/build-info.js +3 -3
- package/dist/commands/context.d.ts.map +1 -1
- package/dist/commands/context.js +66 -124
- package/dist/commands/context.js.map +1 -1
- package/dist/commands/health.d.ts.map +1 -1
- package/dist/commands/health.js +17 -2
- package/dist/commands/health.js.map +1 -1
- package/dist/commands/queue.d.ts.map +1 -1
- package/dist/commands/queue.js +5 -1
- package/dist/commands/queue.js.map +1 -1
- package/dist/commands/rig-mode.d.ts +2 -2
- package/dist/commands/rig-mode.d.ts.map +1 -1
- package/dist/commands/rig-mode.js +36 -11
- package/dist/commands/rig-mode.js.map +1 -1
- package/dist/lib/context-git.d.ts +141 -0
- package/dist/lib/context-git.d.ts.map +1 -0
- package/dist/lib/context-git.js +256 -0
- package/dist/lib/context-git.js.map +1 -0
- package/dist/lib/context-install.d.ts +5 -0
- package/dist/lib/context-install.d.ts.map +1 -0
- package/dist/lib/context-install.js +125 -0
- package/dist/lib/context-install.js.map +1 -0
- package/dist/lib/work-install.d.ts.map +1 -1
- package/dist/lib/work-install.js +11 -36
- package/dist/lib/work-install.js.map +1 -1
- package/dist/local-reading.d.ts +31 -0
- package/dist/local-reading.d.ts.map +1 -0
- package/dist/local-reading.js +62 -0
- package/dist/local-reading.js.map +1 -0
- package/node_modules/@openrig/daemon/dist/attention-surface.d.ts +38 -0
- package/node_modules/@openrig/daemon/dist/attention-surface.d.ts.map +1 -0
- package/node_modules/@openrig/daemon/dist/attention-surface.js +3 -0
- package/node_modules/@openrig/daemon/dist/attention-surface.js.map +1 -0
- 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 +12 -2
- package/node_modules/@openrig/daemon/dist/db/all-migrations.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/db/migrations/080_scoped_operating_posture.d.ts +4 -0
- package/node_modules/@openrig/daemon/dist/db/migrations/080_scoped_operating_posture.d.ts.map +1 -0
- package/node_modules/@openrig/daemon/dist/db/migrations/080_scoped_operating_posture.js +21 -0
- package/node_modules/@openrig/daemon/dist/db/migrations/080_scoped_operating_posture.js.map +1 -0
- package/node_modules/@openrig/daemon/dist/db/migrations/081_human_notification_intent.d.ts +3 -0
- package/node_modules/@openrig/daemon/dist/db/migrations/081_human_notification_intent.d.ts.map +1 -0
- package/node_modules/@openrig/daemon/dist/db/migrations/081_human_notification_intent.js +9 -0
- package/node_modules/@openrig/daemon/dist/db/migrations/081_human_notification_intent.js.map +1 -0
- package/node_modules/@openrig/daemon/dist/db/migrations/082_archive_identity_provenance.d.ts +5 -0
- package/node_modules/@openrig/daemon/dist/db/migrations/082_archive_identity_provenance.d.ts.map +1 -0
- package/node_modules/@openrig/daemon/dist/db/migrations/082_archive_identity_provenance.js +7 -0
- package/node_modules/@openrig/daemon/dist/db/migrations/082_archive_identity_provenance.js.map +1 -0
- package/node_modules/@openrig/daemon/dist/db/migrations/083_review_read_indexes.d.ts +4 -0
- package/node_modules/@openrig/daemon/dist/db/migrations/083_review_read_indexes.d.ts.map +1 -0
- package/node_modules/@openrig/daemon/dist/db/migrations/083_review_read_indexes.js +12 -0
- package/node_modules/@openrig/daemon/dist/db/migrations/083_review_read_indexes.js.map +1 -0
- package/node_modules/@openrig/daemon/dist/db/migrations/084_inventory_event_indexes.d.ts +5 -0
- package/node_modules/@openrig/daemon/dist/db/migrations/084_inventory_event_indexes.d.ts.map +1 -0
- package/node_modules/@openrig/daemon/dist/db/migrations/084_inventory_event_indexes.js +14 -0
- package/node_modules/@openrig/daemon/dist/db/migrations/084_inventory_event_indexes.js.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/execution-view.d.ts +1 -0
- package/node_modules/@openrig/daemon/dist/domain/execution-view.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/execution-view.js +38 -19
- package/node_modules/@openrig/daemon/dist/domain/execution-view.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/files/file-read.d.ts +17 -0
- package/node_modules/@openrig/daemon/dist/domain/files/file-read.d.ts.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/files/file-read.js +24 -0
- package/node_modules/@openrig/daemon/dist/domain/files/file-read.js.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/gateway/connections-projection.d.ts +4 -4
- package/node_modules/@openrig/daemon/dist/domain/gateway/slack/message.d.ts +13 -12
- package/node_modules/@openrig/daemon/dist/domain/gateway/slack/message.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/gateway/slack/message.js +40 -77
- package/node_modules/@openrig/daemon/dist/domain/gateway/slack/message.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/gateway/slack/outbound-driver.d.ts +2 -0
- package/node_modules/@openrig/daemon/dist/domain/gateway/slack/outbound-driver.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/gateway/slack/outbound-driver.js +2 -0
- package/node_modules/@openrig/daemon/dist/domain/gateway/slack/outbound-driver.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/gateway/slack/queue-access.d.ts +2 -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 +2 -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-delivery.d.ts +4 -1
- package/node_modules/@openrig/daemon/dist/domain/gateway/slack/slack-delivery.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/gateway/slack/slack-delivery.js +85 -3
- package/node_modules/@openrig/daemon/dist/domain/gateway/slack/slack-delivery.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 +8 -1
- package/node_modules/@openrig/daemon/dist/domain/gateway/slack/slack-subsystem.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/health-context.d.ts +3 -0
- package/node_modules/@openrig/daemon/dist/domain/health-context.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/health-context.js +78 -6
- package/node_modules/@openrig/daemon/dist/domain/health-context.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/health-detectors.d.ts +2 -1
- package/node_modules/@openrig/daemon/dist/domain/health-detectors.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/health-detectors.js +8 -2
- package/node_modules/@openrig/daemon/dist/domain/health-detectors.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/health-diagnosis.d.ts +51 -1
- package/node_modules/@openrig/daemon/dist/domain/health-diagnosis.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/health-diagnosis.js +60 -9
- package/node_modules/@openrig/daemon/dist/domain/health-diagnosis.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/health-passive-ceremony.d.ts +7 -1
- package/node_modules/@openrig/daemon/dist/domain/health-passive-ceremony.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/health-passive-ceremony.js +59 -26
- package/node_modules/@openrig/daemon/dist/domain/health-passive-ceremony.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/health-projection.d.ts +2 -0
- package/node_modules/@openrig/daemon/dist/domain/health-projection.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/health-projection.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/policies/delivery-digest-flush.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/policies/delivery-digest-flush.js +23 -3
- package/node_modules/@openrig/daemon/dist/domain/policies/delivery-digest-flush.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/proof/judgments.d.ts +10 -3
- package/node_modules/@openrig/daemon/dist/domain/proof/judgments.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/proof/judgments.js +26 -8
- package/node_modules/@openrig/daemon/dist/domain/proof/judgments.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/queue-repository.d.ts +19 -6
- package/node_modules/@openrig/daemon/dist/domain/queue-repository.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/queue-repository.js +61 -11
- package/node_modules/@openrig/daemon/dist/domain/queue-repository.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/queue-retention.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/queue-retention.js +6 -2
- 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 +1 -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 +19 -7
- package/node_modules/@openrig/daemon/dist/domain/queue-transition-log.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/review/fleet-compose.d.ts +7 -6
- package/node_modules/@openrig/daemon/dist/domain/review/fleet-compose.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/review/fleet-compose.js +25 -11
- package/node_modules/@openrig/daemon/dist/domain/review/fleet-compose.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/rig-mode/operating-posture.d.ts +49 -0
- package/node_modules/@openrig/daemon/dist/domain/rig-mode/operating-posture.d.ts.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/rig-mode/operating-posture.js +255 -0
- package/node_modules/@openrig/daemon/dist/domain/rig-mode/operating-posture.js.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/rig-mode/rig-mode-defaults.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/rig-mode/rig-mode-defaults.js +20 -0
- package/node_modules/@openrig/daemon/dist/domain/rig-mode/rig-mode-defaults.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/rig-mode/rig-mode-store.d.ts +2 -2
- package/node_modules/@openrig/daemon/dist/domain/rig-mode/rig-mode-store.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/rig-mode/rig-mode-store.js +19 -3
- package/node_modules/@openrig/daemon/dist/domain/rig-mode/rig-mode-store.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/rig-mode/rig-mode-types.d.ts +12 -7
- package/node_modules/@openrig/daemon/dist/domain/rig-mode/rig-mode-types.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/rig-mode/rig-mode-types.js +14 -3
- package/node_modules/@openrig/daemon/dist/domain/rig-mode/rig-mode-types.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/scope/scope-view-projection.d.ts +2 -2
- package/node_modules/@openrig/daemon/dist/domain/scope/scope-view-projection.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/scope/scope-view-projection.js +2 -2
- package/node_modules/@openrig/daemon/dist/domain/scope/scope-view-projection.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/slices/slice-detail-projector.d.ts +1 -0
- package/node_modules/@openrig/daemon/dist/domain/slices/slice-detail-projector.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/slices/slice-detail-projector.js +3 -0
- package/node_modules/@openrig/daemon/dist/domain/slices/slice-detail-projector.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/slices/slice-indexer.d.ts +4 -0
- package/node_modules/@openrig/daemon/dist/domain/slices/slice-indexer.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/slices/slice-indexer.js +10 -1
- package/node_modules/@openrig/daemon/dist/domain/slices/slice-indexer.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/terminal/herdr-adapter.d.ts +2 -0
- package/node_modules/@openrig/daemon/dist/domain/terminal/herdr-adapter.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/terminal/herdr-adapter.js +1 -1
- package/node_modules/@openrig/daemon/dist/domain/terminal/herdr-adapter.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/terminal/terminal-service.d.ts +30 -2
- package/node_modules/@openrig/daemon/dist/domain/terminal/terminal-service.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/terminal/terminal-service.js +53 -13
- package/node_modules/@openrig/daemon/dist/domain/terminal/terminal-service.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/view-projector.d.ts +2 -0
- package/node_modules/@openrig/daemon/dist/domain/view-projector.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/view-projector.js +1 -1
- package/node_modules/@openrig/daemon/dist/domain/view-projector.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/workspace/project-catalog.d.ts +18 -0
- package/node_modules/@openrig/daemon/dist/domain/workspace/project-catalog.d.ts.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/workspace/project-catalog.js +66 -0
- package/node_modules/@openrig/daemon/dist/domain/workspace/project-catalog.js.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/workspace/project-read.d.ts +29 -0
- package/node_modules/@openrig/daemon/dist/domain/workspace/project-read.d.ts.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/workspace/project-read.js +125 -0
- package/node_modules/@openrig/daemon/dist/domain/workspace/project-read.js.map +1 -0
- package/node_modules/@openrig/daemon/dist/health-projection-surface.d.ts +1 -0
- package/node_modules/@openrig/daemon/dist/health-projection-surface.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/local-reading-surface.d.ts +3 -0
- package/node_modules/@openrig/daemon/dist/local-reading-surface.d.ts.map +1 -0
- package/node_modules/@openrig/daemon/dist/local-reading-surface.js +3 -0
- package/node_modules/@openrig/daemon/dist/local-reading-surface.js.map +1 -0
- package/node_modules/@openrig/daemon/dist/project-catalog-surface.d.ts +2 -0
- package/node_modules/@openrig/daemon/dist/project-catalog-surface.d.ts.map +1 -0
- package/node_modules/@openrig/daemon/dist/project-catalog-surface.js +2 -0
- package/node_modules/@openrig/daemon/dist/project-catalog-surface.js.map +1 -0
- package/node_modules/@openrig/daemon/dist/routes/attention.d.ts +3 -0
- package/node_modules/@openrig/daemon/dist/routes/attention.d.ts.map +1 -0
- package/node_modules/@openrig/daemon/dist/routes/attention.js +155 -0
- package/node_modules/@openrig/daemon/dist/routes/attention.js.map +1 -0
- package/node_modules/@openrig/daemon/dist/routes/files.d.ts +1 -1
- package/node_modules/@openrig/daemon/dist/routes/files.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/routes/files.js +4 -24
- package/node_modules/@openrig/daemon/dist/routes/files.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/routes/queue.d.ts +4 -18
- package/node_modules/@openrig/daemon/dist/routes/queue.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/routes/queue.js +23 -33
- package/node_modules/@openrig/daemon/dist/routes/queue.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/routes/review.js +1 -1
- package/node_modules/@openrig/daemon/dist/routes/rig-mode.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/routes/rig-mode.js +67 -14
- package/node_modules/@openrig/daemon/dist/routes/rig-mode.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/routes/rigs.js +5 -1
- package/node_modules/@openrig/daemon/dist/routes/rigs.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/routes/scopes.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/routes/scopes.js +74 -20
- package/node_modules/@openrig/daemon/dist/routes/scopes.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/routes/slices.d.ts +2 -2
- package/node_modules/@openrig/daemon/dist/routes/slices.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/routes/slices.js +18 -1
- package/node_modules/@openrig/daemon/dist/routes/slices.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/routes/spec-library.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/routes/spec-library.js +11 -2
- package/node_modules/@openrig/daemon/dist/routes/spec-library.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/routes/terminal.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/routes/terminal.js +14 -4
- package/node_modules/@openrig/daemon/dist/routes/terminal.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/routes/views.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/routes/views.js +11 -1
- package/node_modules/@openrig/daemon/dist/routes/views.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/server.d.ts +1 -0
- package/node_modules/@openrig/daemon/dist/server.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/server.js +3 -0
- 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 +19 -5
- package/node_modules/@openrig/daemon/dist/startup.js.map +1 -1
- package/node_modules/@openrig/daemon/package.json +13 -1
- package/package.json +1 -1
- package/tui/dist/attention/attention-model.d.ts +23 -0
- package/tui/dist/attention/attention-model.d.ts.map +1 -0
- package/tui/dist/attention/attention-model.js +85 -0
- package/tui/dist/attention/attention-model.js.map +1 -0
- package/tui/dist/attention/source-continuity.d.ts +9 -0
- package/tui/dist/attention/source-continuity.d.ts.map +1 -0
- package/tui/dist/attention/source-continuity.js +38 -0
- package/tui/dist/attention/source-continuity.js.map +1 -0
- package/tui/dist/commands/help.d.ts +4 -0
- package/tui/dist/commands/help.d.ts.map +1 -0
- package/tui/dist/commands/help.js +43 -0
- package/tui/dist/commands/help.js.map +1 -0
- package/tui/dist/commands/registry.d.ts.map +1 -1
- package/tui/dist/commands/registry.js +15 -1
- package/tui/dist/commands/registry.js.map +1 -1
- package/tui/dist/config/config-model.d.ts.map +1 -1
- package/tui/dist/config/config-model.js +33 -9
- package/tui/dist/config/config-model.js.map +1 -1
- package/tui/dist/connections/connections-model.js +1 -1
- package/tui/dist/connections/connections-model.js.map +1 -1
- package/tui/dist/daemon-client.d.ts +39 -7
- package/tui/dist/daemon-client.d.ts.map +1 -1
- package/tui/dist/daemon-client.js +74 -15
- 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 +1 -0
- package/tui/dist/demo-data.js.map +1 -1
- package/tui/dist/detail.d.ts.map +1 -1
- package/tui/dist/detail.js +20 -7
- package/tui/dist/detail.js.map +1 -1
- package/tui/dist/execution/execution-model.d.ts +1 -0
- package/tui/dist/execution/execution-model.d.ts.map +1 -1
- package/tui/dist/execution/execution-model.js +88 -119
- package/tui/dist/execution/execution-model.js.map +1 -1
- package/tui/dist/health/health-model.d.ts.map +1 -1
- package/tui/dist/health/health-model.js +26 -34
- package/tui/dist/health/health-model.js.map +1 -1
- package/tui/dist/hydrate.d.ts +1 -1
- package/tui/dist/hydrate.d.ts.map +1 -1
- package/tui/dist/hydrate.js +89 -23
- package/tui/dist/hydrate.js.map +1 -1
- package/tui/dist/input.d.ts.map +1 -1
- package/tui/dist/input.js +20 -3
- package/tui/dist/input.js.map +1 -1
- package/tui/dist/live.d.ts +3 -1
- package/tui/dist/live.d.ts.map +1 -1
- package/tui/dist/live.js +66 -7
- package/tui/dist/live.js.map +1 -1
- package/tui/dist/local-reading.d.ts +54 -0
- package/tui/dist/local-reading.d.ts.map +1 -0
- package/tui/dist/local-reading.js +122 -0
- package/tui/dist/local-reading.js.map +1 -0
- package/tui/dist/main.js +121 -34
- package/tui/dist/main.js.map +1 -1
- package/tui/dist/motion.d.ts +2 -0
- package/tui/dist/motion.d.ts.map +1 -1
- package/tui/dist/motion.js +4 -0
- package/tui/dist/motion.js.map +1 -1
- package/tui/dist/navigator.d.ts.map +1 -1
- package/tui/dist/navigator.js +14 -3
- package/tui/dist/navigator.js.map +1 -1
- package/tui/dist/page-read.d.ts +19 -0
- package/tui/dist/page-read.d.ts.map +1 -0
- package/tui/dist/page-read.js +84 -0
- package/tui/dist/page-read.js.map +1 -0
- package/tui/dist/pulse/pulse-model.d.ts.map +1 -1
- package/tui/dist/pulse/pulse-model.js +3 -4
- package/tui/dist/pulse/pulse-model.js.map +1 -1
- package/tui/dist/reading.d.ts +36 -0
- package/tui/dist/reading.d.ts.map +1 -0
- package/tui/dist/reading.js +89 -0
- package/tui/dist/reading.js.map +1 -0
- package/tui/dist/render.d.ts +5 -0
- package/tui/dist/render.d.ts.map +1 -1
- package/tui/dist/render.js +190 -174
- package/tui/dist/render.js.map +1 -1
- package/tui/dist/scopes/scopes-model.d.ts +3 -0
- package/tui/dist/scopes/scopes-model.d.ts.map +1 -1
- package/tui/dist/scopes/scopes-model.js +8 -2
- package/tui/dist/scopes/scopes-model.js.map +1 -1
- package/tui/dist/sections.d.ts +2 -0
- package/tui/dist/sections.d.ts.map +1 -1
- package/tui/dist/sections.js +9 -5
- package/tui/dist/sections.js.map +1 -1
- package/tui/dist/startup.d.ts +10 -1
- package/tui/dist/startup.d.ts.map +1 -1
- package/tui/dist/startup.js +99 -27
- package/tui/dist/startup.js.map +1 -1
- package/tui/dist/state.d.ts.map +1 -1
- package/tui/dist/state.js +121 -22
- package/tui/dist/state.js.map +1 -1
- package/tui/dist/stylize.js +28 -28
- package/tui/dist/stylize.js.map +1 -1
- package/tui/dist/terminals/terminal-model.d.ts +57 -0
- package/tui/dist/terminals/terminal-model.d.ts.map +1 -0
- package/tui/dist/terminals/terminal-model.js +113 -0
- package/tui/dist/terminals/terminal-model.js.map +1 -0
- package/tui/dist/types.d.ts +84 -1
- package/tui/dist/types.d.ts.map +1 -1
package/tui/dist/render.js
CHANGED
|
@@ -1,3 +1,7 @@
|
|
|
1
|
+
import { helpScreen } from "./commands/help.js";
|
|
2
|
+
import { commandFocusVisible } from "./motion.js";
|
|
3
|
+
import { attentionLines } from "./attention/attention-model.js";
|
|
4
|
+
import { fileLines, externalLines, fileTargetForPath, referenceLines, referenceAction } from "./reading.js";
|
|
1
5
|
import { DEFAULT_TIME_ZONE, displayTime } from "./time.js";
|
|
2
6
|
import { startupLines } from "./startup.js";
|
|
3
7
|
import { configLines } from "./config/config-model.js";
|
|
@@ -9,10 +13,8 @@ import { connectionsLines } from "./connections/connections-model.js";
|
|
|
9
13
|
// SAME semantic actions commands produce (PIN 1). Isolated seam: a substrate
|
|
10
14
|
// swap touches only this module (spike verdict revisit trigger).
|
|
11
15
|
import { computeExplorerRows, findAgent, findSpec, findAgentBySession, agentsRunningSpec, agentsRunningSpecTargets, specDetailArrowsScroll } from "./state.js";
|
|
12
|
-
import { filterPalette } from "./commands/palette.js";
|
|
13
16
|
import { scopesContentLines } from "./scopes/scopes-model.js";
|
|
14
17
|
import { executionContentLines, executionSliceStripLines } from "./execution/execution-model.js";
|
|
15
|
-
import { COMMAND_REGISTRY } from "./commands/registry.js";
|
|
16
18
|
import { navigatorDisplay } from "./navigator.js";
|
|
17
19
|
import { renderGraphStyle } from "./topology/render-graph.js";
|
|
18
20
|
import { buildPulseModel } from "./pulse/pulse-model.js";
|
|
@@ -22,6 +24,7 @@ import { buildLedgerExplorer } from "./crash-cart/ledger-explorer.js";
|
|
|
22
24
|
import { runtimeMarkSegs } from "./topology/runtime-marks.js";
|
|
23
25
|
import { barCells, flashActive, reducedMotion, spinnerFrame } from "./motion.js";
|
|
24
26
|
import { explorerWidth, MOTION_FRAME_MS } from "./visual-layout.js";
|
|
27
|
+
import { terminalLines } from "./terminals/terminal-model.js";
|
|
25
28
|
import { detailPage, fieldLine, sectionRule, listItem, alignedRow, LABEL_W, wrapDetailLines } from "./detail.js";
|
|
26
29
|
import { healthAgentLines, healthDetailLines, healthListLines, healthSummaryLine } from "./health/health-model.js";
|
|
27
30
|
function pad(text, width) {
|
|
@@ -434,11 +437,11 @@ function timeZoneLines(state, width) {
|
|
|
434
437
|
listItem("Back · Esc", { type: "back" }),
|
|
435
438
|
], width);
|
|
436
439
|
}
|
|
437
|
-
function specTabsLine(state
|
|
440
|
+
function specTabsLine(state) {
|
|
438
441
|
const active = state.viewTab === "topology" || state.viewTab === "yaml" ? state.viewTab : "configuration";
|
|
439
442
|
const labels = ["topology", "configuration", "yaml"];
|
|
440
443
|
const parts = labels.map((tab) => (tab === active ? `[ ${tab.toUpperCase()} ]` : ` ${tab.toUpperCase()} `));
|
|
441
|
-
const text =
|
|
444
|
+
const text = parts.join(" ");
|
|
442
445
|
return {
|
|
443
446
|
text,
|
|
444
447
|
zones: labels.map((tab, index) => {
|
|
@@ -469,6 +472,25 @@ function sourceProvenance(spec) {
|
|
|
469
472
|
return "user library";
|
|
470
473
|
return spec.sourceState === "library_item" ? "library" : "source unknown";
|
|
471
474
|
}
|
|
475
|
+
function specSourceLines(spec, snap) {
|
|
476
|
+
if (!spec.sourcePath)
|
|
477
|
+
return [{ text: "Source path unavailable; no current-file claim." }];
|
|
478
|
+
const target = fileTargetForPath(spec.resolvedSourcePath ?? spec.sourcePath, snap.fileRoots ?? []) ?? { root: "", path: spec.sourcePath };
|
|
479
|
+
const lines = [fieldLine({ label: "source", value: `${displayPath(spec.sourcePath, 56)} · ${sourceProvenance(spec)}` }), listItem("View current source", { type: "file-open", target })];
|
|
480
|
+
if (!target.root)
|
|
481
|
+
lines.push({ text: "Source is not mapped to a configured readable root." });
|
|
482
|
+
if (target.root) {
|
|
483
|
+
lines.push({ text: `Readable root: ${target.root}` }, ...referenceLines(spec.description ?? "", target));
|
|
484
|
+
const markdownLinks = new Set([...((spec.description ?? "").matchAll(/\[[^\]\n]+\]\(<?([^\s)>]+)/g))].map((match) => match[1]));
|
|
485
|
+
// Prose paths stay relative to the named source, not an inferred checkout.
|
|
486
|
+
for (const match of (spec.description ?? "").matchAll(/(?:[\w.-]+\/)+[\w.-]+\.(?:md|txt|ya?ml)(?:#[\w-]+)?/g)) {
|
|
487
|
+
if (markdownLinks.has(match[0]))
|
|
488
|
+
continue;
|
|
489
|
+
lines.push(listItem(`Reference: ${match[0]} · relative to source`, referenceAction(target, match[0])));
|
|
490
|
+
}
|
|
491
|
+
}
|
|
492
|
+
return lines;
|
|
493
|
+
}
|
|
472
494
|
function displayPath(path, max = 68) {
|
|
473
495
|
if (path.length <= max)
|
|
474
496
|
return path;
|
|
@@ -530,13 +552,13 @@ function instanceContentLines(state, snap, host, contentWidth, motion) {
|
|
|
530
552
|
fields: [
|
|
531
553
|
{ label: "identity", value: host.name },
|
|
532
554
|
{ label: "transport", value: host.id ?? "local" },
|
|
533
|
-
{ 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` },
|
|
555
|
+
{ label: "shape", value: host.rigs.some(r => r.inventoryUnavailable) ? `${host.rigs.length} rigs · seat inventory incomplete` : `${host.rigs.length} rigs · ${host.rigs.reduce((n, rig) => n + rig.pods.reduce((m, pod) => m + pod.agents.length, 0), 0)} seats` },
|
|
534
556
|
],
|
|
535
557
|
},
|
|
536
558
|
{
|
|
537
559
|
title: "rigs",
|
|
538
560
|
lines: host.rigs.length > 0
|
|
539
|
-
? 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 } }))
|
|
561
|
+
? host.rigs.map((rig) => listItem(alignedRow([[rig.name, 20], [rig.lifecycleState ?? "unknown", 20], [rig.inventoryUnavailable ? "inventory unavailable" : `${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 } }))
|
|
540
562
|
: [{ text: " (no local rigs served — proven empty)" }],
|
|
541
563
|
},
|
|
542
564
|
]),
|
|
@@ -591,7 +613,7 @@ function instanceContentLines(state, snap, host, contentWidth, motion) {
|
|
|
591
613
|
const rigAction = { type: "drill", resource: "rig", name: rig.name, target: { host: host.name } };
|
|
592
614
|
if (agents.length === 0) {
|
|
593
615
|
lines.push({
|
|
594
|
-
text: tableRow(columns, { rig: rig.name, pod: "—", seat: "(no seats)", status: rig.lifecycleState ?? "unknown" }),
|
|
616
|
+
text: tableRow(columns, { rig: rig.name, pod: "—", seat: rig.inventoryUnavailable ? "(read failed)" : "(no seats)", status: rig.lifecycleState ?? "unknown" }),
|
|
595
617
|
action: rigAction,
|
|
596
618
|
});
|
|
597
619
|
continue;
|
|
@@ -627,11 +649,17 @@ function instanceContentLines(state, snap, host, contentWidth, motion) {
|
|
|
627
649
|
});
|
|
628
650
|
}
|
|
629
651
|
}
|
|
630
|
-
lines.push({ text: "" }, { text: `${host.rigs.length} rigs · ${seatCount} seats · ${workingCount} working · ${attentionCount} need attention · ${openCount} open rows` });
|
|
652
|
+
lines.push({ text: "" }, { text: host.rigs.some(r => r.inventoryUnavailable) ? `${host.rigs.length} rigs · inventory incomplete · ${seatCount} seats read` : `${host.rigs.length} rigs · ${seatCount} seats · ${workingCount} working · ${attentionCount} need attention · ${openCount} open rows` });
|
|
631
653
|
lines.push(...recentLines(snap, scope, contentWidth, false, state.timeZone));
|
|
632
654
|
return lines;
|
|
633
655
|
}
|
|
634
656
|
function contentLines(state, snap, contentWidth, motion) {
|
|
657
|
+
if (state.file) {
|
|
658
|
+
const read = JSON.stringify(snap.fileRead?.target) === JSON.stringify(state.file) ? snap.fileRead?.result : null;
|
|
659
|
+
return [...(state.project ? wrapDetailLines([{ text: `Project ${state.project.id} · ${state.project.root}` }], contentWidth) : []), ...fileLines(read, state.file, contentWidth)];
|
|
660
|
+
}
|
|
661
|
+
if (state.externalUrl)
|
|
662
|
+
return externalLines(state.externalUrl, contentWidth);
|
|
635
663
|
const contentWidthForGraph = contentWidth;
|
|
636
664
|
void contentWidthForGraph;
|
|
637
665
|
const lines = [];
|
|
@@ -639,12 +667,16 @@ function contentLines(state, snap, contentWidth, motion) {
|
|
|
639
667
|
return timeZoneLines(state, contentWidth);
|
|
640
668
|
if (state.recentOpen)
|
|
641
669
|
return recentDetailLines(state, snap, contentWidth);
|
|
670
|
+
if (state.section === "terminals")
|
|
671
|
+
return terminalLines(state, snap, contentWidth);
|
|
642
672
|
if (state.section === "config")
|
|
643
673
|
return configLines(state, snap, contentWidth);
|
|
644
674
|
if (state.section === "connections")
|
|
645
675
|
return connectionsLines(snap, contentWidth, state.timeZone);
|
|
646
676
|
if (state.healthOpen)
|
|
647
677
|
return healthDetailLines(snap, state.healthOpen, contentWidth, state.timeZone);
|
|
678
|
+
if (state.section === "system")
|
|
679
|
+
return [{ text: "System · Instance health" }, { text: "" }, ...healthListLines(snap, { kind: "instance", local: true }, contentWidth)];
|
|
648
680
|
// PULSE is a FULL-WIDTH view handled by an early return in renderScreen
|
|
649
681
|
// (renderPulseScreen) — it never reaches the sidebar+content layout below.
|
|
650
682
|
if (state.section === "topology") {
|
|
@@ -677,9 +709,18 @@ function contentLines(state, snap, contentWidth, motion) {
|
|
|
677
709
|
const host = (hostName ? snap.hosts.find((candidate) => candidate.name === hostName) : snap.hosts[0]);
|
|
678
710
|
if (leaf?.kind === "host" && host)
|
|
679
711
|
return instanceContentLines(state, snap, host, contentWidth, motion);
|
|
680
|
-
|
|
712
|
+
if (!leaf && host?.rigs.length)
|
|
713
|
+
return wrapDetailLines([
|
|
714
|
+
{ text: `TOPOLOGY · ${host.name}` }, { text: "Choose a rig to read its seats and work." },
|
|
715
|
+
{ text: `${host.rigs.length} rig${host.rigs.length === 1 ? "" : "s"} · select one in Explorer` },
|
|
716
|
+
{ text: "Bright ▦ live agents · gray ▦ none · ? unknown" },
|
|
717
|
+
], contentWidth);
|
|
718
|
+
const rigName = state.drill.find((d) => d.kind === "rig")?.name;
|
|
681
719
|
const rig = host?.rigs.find((candidate) => candidate.name === rigName);
|
|
682
720
|
if (!rig || !host) {
|
|
721
|
+
const notLoaded = snap.readErrors.find((error) => error.startsWith("Live data not loaded"));
|
|
722
|
+
if (notLoaded)
|
|
723
|
+
return [{ text: notLoaded }];
|
|
683
724
|
// round-6 (guard): the ROOT topology branch consumes the OWNER's load
|
|
684
725
|
// truth like every other read surface — a real in-flight cold start
|
|
685
726
|
// renders the spinner; after settlement only a NAMED rigs-summary
|
|
@@ -694,6 +735,10 @@ function contentLines(state, snap, contentWidth, motion) {
|
|
|
694
735
|
}
|
|
695
736
|
return [{ text: "(no rigs served — proven empty, not fabricated)" }];
|
|
696
737
|
}
|
|
738
|
+
if (rig.inventoryNotLoaded)
|
|
739
|
+
return [{ text: `Reading ${rig.name}…` }];
|
|
740
|
+
if (rig.inventoryUnavailable)
|
|
741
|
+
return [{ text: `Inventory unavailable for ${rig.name} · refresh to Retry` }];
|
|
697
742
|
const podFilter = leaf?.kind === "pod" ? leaf.name : null;
|
|
698
743
|
const all = rig.pods.flatMap((p) => p.agents.map((a) => ({ pod: p.name, ...a })));
|
|
699
744
|
const rows = all
|
|
@@ -848,13 +893,13 @@ function contentLines(state, snap, contentWidth, motion) {
|
|
|
848
893
|
if (leaf?.kind === "spec") {
|
|
849
894
|
const spec = findSpec(snap, leaf.name);
|
|
850
895
|
if (!spec)
|
|
851
|
-
return [{ text: `spec "${leaf.name}" not in the current
|
|
896
|
+
return [{ text: snap.readErrors.find((error) => error.startsWith("specs-library")) ?? (!snap.specsLoaded ? "Specs catalog read pending" : `spec "${leaf.name}" not in the current catalog`) }];
|
|
852
897
|
if (spec.kind === "rig")
|
|
853
|
-
lines.push(specTabsLine(state
|
|
898
|
+
lines.push(specTabsLine(state));
|
|
854
899
|
lines.push({ text: `${spec.kind} spec ${spec.name}` });
|
|
855
900
|
lines.push(fieldLine({ label: "purpose", value: spec.description ?? "not declared in the available source" }));
|
|
856
901
|
lines.push(fieldLine({ label: "provenance", value: `${sourceProvenance(spec)} · ${spec.sourceState ?? "source state not served"}` }));
|
|
857
|
-
lines.push(
|
|
902
|
+
lines.push(...specSourceLines(spec, snap));
|
|
858
903
|
lines.push({ text: " Authored declaration. Resource availability is not the effective loadout of a running seat." });
|
|
859
904
|
lines.push(sectionRule("Observed consumers · open for effective runtime/configuration", contentWidth));
|
|
860
905
|
for (const consumer of spec.consumers ?? []) {
|
|
@@ -871,8 +916,6 @@ function contentLines(state, snap, contentWidth, motion) {
|
|
|
871
916
|
if (spec.sourceUnavailable)
|
|
872
917
|
return wrapDetailLines([...lines, { text: ` Source unavailable: ${spec.sourceUnavailable}` }], contentWidth);
|
|
873
918
|
if (spec.kind === "rig") {
|
|
874
|
-
if (spec.sourcePath)
|
|
875
|
-
lines.push(fieldLine({ label: "source", value: `${displayPath(spec.sourcePath, 56)} · ${sourceProvenance(spec)}` }));
|
|
876
919
|
if (state.viewTab === "topology") {
|
|
877
920
|
// ROUND-4 item 1: the established table treatment, not unformatted rows
|
|
878
921
|
const nodes = spec.graph?.nodes ?? [];
|
|
@@ -994,142 +1037,106 @@ function contentLines(state, snap, contentWidth, motion) {
|
|
|
994
1037
|
}
|
|
995
1038
|
return wrapDetailLines(lines, contentWidth);
|
|
996
1039
|
}
|
|
997
|
-
|
|
998
|
-
|
|
999
|
-
|
|
1000
|
-
|
|
1001
|
-
|
|
1002
|
-
|
|
1003
|
-
|
|
1004
|
-
if (
|
|
1005
|
-
|
|
1006
|
-
|
|
1007
|
-
|
|
1008
|
-
|
|
1009
|
-
|
|
1010
|
-
|
|
1011
|
-
|
|
1012
|
-
|
|
1013
|
-
for (const s of shown) {
|
|
1014
|
-
const namespace = s.namespace ?? "(root)";
|
|
1015
|
-
groups.set(namespace, [...(groups.get(namespace) ?? []), s]);
|
|
1016
|
-
}
|
|
1017
|
-
for (const [namespace, specs] of [...groups.entries()].sort(([a], [b]) => a.localeCompare(b))) {
|
|
1018
|
-
const open = namespace === "(root)" || expandedSet.has(`folder:${namespace}`) || !!state.filter;
|
|
1019
|
-
if (namespace !== "(root)")
|
|
1020
|
-
lines.push({
|
|
1021
|
-
text: ` ${open ? "▾" : "▸"} ${namespace}/ (${specs.length})`,
|
|
1022
|
-
action: { type: "toggle-expand", key: `folder:${namespace}` },
|
|
1023
|
-
});
|
|
1024
|
-
if (!open)
|
|
1025
|
-
continue;
|
|
1026
|
-
for (const s of specs)
|
|
1027
|
-
lines.push({
|
|
1028
|
-
text: `${namespace === "(root)" ? " " : " "}▪ ${s.name}`,
|
|
1029
|
-
action: { type: "drill", resource: "spec", name: s.name },
|
|
1030
|
-
});
|
|
1031
|
-
}
|
|
1032
|
-
}
|
|
1033
|
-
if (snap.specs.length === 0) {
|
|
1034
|
-
// round-5 (guard): spin only while the owner is loading; settled empty
|
|
1035
|
-
// is PROVEN empty and a settled failure is named — neither spins
|
|
1036
|
-
if (motion.loading) {
|
|
1037
|
-
if (!motion.reduced)
|
|
1038
|
-
motion.used = true;
|
|
1039
|
-
lines.push({ text: ` ${motion.frame} library read pending — honest-empty` });
|
|
1040
|
-
}
|
|
1041
|
-
else if (snap.readErrors.some((e) => e.startsWith("specs-library"))) {
|
|
1042
|
-
lines.push({ text: " ✕ library read failed — named in the status line" });
|
|
1043
|
-
}
|
|
1044
|
-
else {
|
|
1045
|
-
lines.push({ text: " (library empty — proven, no specs served)" });
|
|
1046
|
-
}
|
|
1047
|
-
}
|
|
1048
|
-
return lines;
|
|
1049
|
-
}
|
|
1050
|
-
if (state.section === "needs") {
|
|
1051
|
-
lines.push({ text: "NEEDS-YOU" });
|
|
1052
|
-
for (const item of snap.needs) {
|
|
1053
|
-
// open/navigate is the ONLY in-TUI action (B3): the click target joins
|
|
1054
|
-
// the item's session back to topology; unresolvable targets never
|
|
1055
|
-
// advertise a control that can only fail.
|
|
1056
|
-
lines.push(needsLine(item.source === "agent" ? " ☐ " : " ⚑ ", item, snap));
|
|
1057
|
-
}
|
|
1058
|
-
if (snap.needs.length === 0 && snap.humanQueueProbed)
|
|
1059
|
-
lines.push({ text: " (no fleet attention items right now)" });
|
|
1060
|
-
if (snap.hostsDown.length > 0) {
|
|
1061
|
-
// composed BESIDE the items (a separate shipped read), never into the item shape
|
|
1062
|
-
lines.push({ text: "" });
|
|
1063
|
-
lines.push({ text: " hosts/rigs down:" });
|
|
1064
|
-
// NB: glyphs here must be single-cell — U+26D4 ⛔ is emoji-width (2 cells)
|
|
1065
|
-
// and wraps a full-width padded line, shearing every row below it.
|
|
1066
|
-
for (const h of snap.hostsDown)
|
|
1067
|
-
lines.push({ text: ` ✖ ${alignedRow([[h.hostId, 28], [h.status, 26]])} ${h.error ?? ""}`.trimEnd() });
|
|
1040
|
+
if (state.filter)
|
|
1041
|
+
lines.push({ text: `/ filter specs: ${state.filter} · / replace · esc clear` });
|
|
1042
|
+
const selected = computeExplorerRows(state, snap)[state.selection]?.action;
|
|
1043
|
+
const spec = selected?.type === "drill" && selected.resource === "spec" ? findSpec(snap, selected.name) : null;
|
|
1044
|
+
if (spec) {
|
|
1045
|
+
lines.push({ text: `${spec.name} · ${spec.kind} · ${sourceProvenance(spec)}` });
|
|
1046
|
+
lines.push({ text: "" }, { text: spec.description?.trim() || "Purpose not declared in the available source." });
|
|
1047
|
+
if (spec.kind === "rig")
|
|
1048
|
+
lines.push(fieldLine({ label: "contents", value: `${spec.pods?.length ?? 0} pods · ${spec.pods?.reduce((n, p) => n + p.members.length, 0) ?? spec.legacyNodes?.length ?? 0} members · ${spec.agentRefs?.join(", ") || "no member references served"}` }));
|
|
1049
|
+
else if (spec.kind === "agent")
|
|
1050
|
+
lines.push(fieldLine({ label: "contents", value: `${spec.runtime ?? "runtime not declared"} · ${(spec.skills ?? []).length} skills · ${(spec.startupFiles ?? []).length} startup files` }));
|
|
1051
|
+
else
|
|
1052
|
+
lines.push(fieldLine({ label: "contents", value: `${spec.rolesCount ?? "unknown"} roles · ${spec.stepsCount ?? "unknown"} steps` }));
|
|
1053
|
+
lines.push({ text: "" }, listItem("Read details · Enter", { type: "drill", resource: "spec", name: spec.name }), ...specSourceLines(spec, snap));
|
|
1054
|
+
if (spec.sourceUnavailable)
|
|
1055
|
+
lines.push({ text: `Source unavailable: ${spec.sourceUnavailable}` });
|
|
1068
1056
|
}
|
|
1069
|
-
|
|
1070
|
-
|
|
1071
|
-
if (
|
|
1072
|
-
|
|
1073
|
-
|
|
1074
|
-
|
|
1075
|
-
|
|
1076
|
-
|
|
1077
|
-
|
|
1078
|
-
motion.
|
|
1079
|
-
|
|
1080
|
-
|
|
1081
|
-
|
|
1082
|
-
|
|
1083
|
-
|
|
1084
|
-
|
|
1057
|
+
else {
|
|
1058
|
+
lines.push({ text: "SPEC LIBRARY" }, { text: "Choose a spec at left to preview its purpose, contents and source." }, { text: "Enter reads details · / filters · source opens current disk content" }, { text: "" });
|
|
1059
|
+
if (snap.specsLoaded !== false && !snap.readErrors.some(e => e.startsWith("specs-library")))
|
|
1060
|
+
for (const kind of ["rig", "agent", "workflow"])
|
|
1061
|
+
lines.push({ text: `${kind}: ${snap.specs.filter((spec) => spec.kind === kind).length} available` });
|
|
1062
|
+
if (!snap.specs.length) {
|
|
1063
|
+
if (motion.loading) {
|
|
1064
|
+
if (!motion.reduced)
|
|
1065
|
+
motion.used = true;
|
|
1066
|
+
lines.push({ text: ` ${motion.frame} library read pending` });
|
|
1067
|
+
}
|
|
1068
|
+
else {
|
|
1069
|
+
const failure = snap.readErrors.find((error) => error.startsWith("specs-library"));
|
|
1070
|
+
const notLoaded = snap.readErrors.find((error) => error.startsWith("Live data not loaded"));
|
|
1071
|
+
lines.push({ text: failure ? ` ✕ library read failed: ${failure}` : notLoaded ?? (snap.specsLoaded === false ? "Specs catalog read unavailable" : " (library empty — proven, no specs served)") });
|
|
1072
|
+
}
|
|
1085
1073
|
}
|
|
1086
1074
|
}
|
|
1087
|
-
|
|
1088
|
-
lines.push({ text: " human-queue: no items (proven empty — surfacing adoption pending)" });
|
|
1089
|
-
return lines;
|
|
1075
|
+
return wrapDetailLines(lines, contentWidth);
|
|
1090
1076
|
}
|
|
1077
|
+
if (state.section === "needs")
|
|
1078
|
+
return attentionLines(state, snap, contentWidth);
|
|
1091
1079
|
if (state.section === "scopes") {
|
|
1092
|
-
|
|
1093
|
-
|
|
1094
|
-
const instances = selected.lifecycle_instances;
|
|
1080
|
+
const catalog = snap.projects;
|
|
1081
|
+
if (!state.project && catalog !== undefined)
|
|
1095
1082
|
return wrapDetailLines([
|
|
1096
|
-
{ text: "
|
|
1097
|
-
|
|
1098
|
-
|
|
1099
|
-
{
|
|
1083
|
+
{ text: "PROJECTS · select a project" },
|
|
1084
|
+
{ text: catalog ? `Catalog: ${catalog.catalogPath}` : "Project catalog unavailable or loading" },
|
|
1085
|
+
...(snap.readErrors ?? []).map(text => ({ text })),
|
|
1086
|
+
...(catalog?.projects ?? []).flatMap(p => [listItem(`${p.name} · ${p.id}`, { type: "project-select", id: p.id }), { text: p.root }, ...(p.error ? [{ text: `Unavailable: ${p.error}` }] : [])]),
|
|
1087
|
+
...(catalog?.projects.length === 0 ? [{ text: "No projects declared in this catalog." }] : []),
|
|
1100
1088
|
], contentWidth);
|
|
1101
|
-
}
|
|
1089
|
+
const identity = state.project ? wrapDetailLines([{ text: `PROJECT ${state.project.id}` }, { text: state.project.root }], contentWidth) : [];
|
|
1090
|
+
if (state.project && (snap.projectRead?.id !== state.project.id || snap.projectRead?.root !== state.project.root))
|
|
1091
|
+
return [...identity, { text: "Reading selected project…" }];
|
|
1092
|
+
const entry = catalog?.projects.find(p => p.id === state.project.id && p.root === state.project.root);
|
|
1093
|
+
const errors = (snap.readErrors ?? []).map(text => ({ text: `Unavailable: ${text}` }));
|
|
1094
|
+
const missionOverview = !!state.scopesMission && !state.scopesSelected && !state.executionOpen;
|
|
1095
|
+
const projectHeader = state.project ? missionOverview
|
|
1096
|
+
? [{ text: `PROJECT ${state.project.id}`, action: { type: "project-source" } }, ...wrapDetailLines(errors, contentWidth)]
|
|
1097
|
+
: [...identity, listItem("Read current source", { type: "project-source" }), ...wrapDetailLines(errors, contentWidth)] : [];
|
|
1098
|
+
if (state.project && (!entry || entry.error))
|
|
1099
|
+
return [...projectHeader, { text: "Choose a project again or go Back." }];
|
|
1100
|
+
if (state.project && !state.scopesMission)
|
|
1101
|
+
return [...projectHeader, { text: "Choose a mission" }, ...(snap.scopes ?? []).map(m => listItem(m.mission + (m.error ? " · source unavailable" : ""), { type: "scopes-mission-open", mission: m.mission })), ...(!snap.scopes?.length && !errors.length ? [{ text: "No missions found in this project." }] : [])];
|
|
1102
1102
|
// SCOPES owns both levels. Both mission-graph and Explorer slice routes land
|
|
1103
1103
|
// on the same execution-backed canonical detail; store-direct content is
|
|
1104
1104
|
// composed into that page instead of surviving as a competing destination.
|
|
1105
1105
|
const sel = state.scopesSelected;
|
|
1106
1106
|
const missionName = state.scopesMission;
|
|
1107
|
+
const mission = snap.scopes?.find(m => m.mission === missionName);
|
|
1108
|
+
if (mission?.error)
|
|
1109
|
+
return [...projectHeader, ...wrapDetailLines([{ text: `${missionName} · Source unavailable` }, { text: mission.error }, { text: "Correct the source and refresh; Back returns to other missions." }], contentWidth)];
|
|
1107
1110
|
const execution = snap.execution?.mission === missionName ? snap.execution : null;
|
|
1108
1111
|
const detail = sel
|
|
1109
1112
|
? (snap.scopes ?? []).find((m) => m.mission === sel.mission)?.slices.find((sl) => sl.dirName === sel.slice) ?? null
|
|
1110
1113
|
: null;
|
|
1114
|
+
if (detail?.error)
|
|
1115
|
+
return [...projectHeader, ...wrapDetailLines([{ text: `${missionName}/${detail.dirName} · Source unavailable` }, { text: detail.error }, { text: "Correct the source and refresh; Back returns to other slices." }], contentWidth)];
|
|
1116
|
+
if (!sel && !state.executionOpen)
|
|
1117
|
+
projectHeader.push(...(mission?.slices.filter(s => s.error) ?? []).map(s => listItem(`${s.dirName} · source unavailable`, { type: "scopes-open", mission: missionName, slice: s.dirName })));
|
|
1111
1118
|
if (state.executionOpen && execution) {
|
|
1112
|
-
return executionContentLines(execution, snap.scopes, snap.readErrors, state.executionOpen, contentWidth, false, snap.sliceDetail, {
|
|
1113
|
-
|
|
1114
|
-
|
|
1115
|
-
|
|
1119
|
+
return [...projectHeader, ...executionContentLines(execution, snap.scopes, snap.readErrors, state.executionOpen, contentWidth, false, snap.sliceDetail, {
|
|
1120
|
+
collapseReqs: state.scopesCollapseReqs,
|
|
1121
|
+
narrative: state.scopesNarrative,
|
|
1122
|
+
}, state.timeZone)];
|
|
1116
1123
|
}
|
|
1117
1124
|
if (detail && execution) {
|
|
1118
|
-
return executionContentLines(execution, snap.scopes, snap.readErrors, `slice:${detail.id ?? detail.dirName}`, contentWidth, false, snap.sliceDetail, {
|
|
1119
|
-
|
|
1120
|
-
|
|
1121
|
-
|
|
1125
|
+
return [...projectHeader, ...executionContentLines(execution, snap.scopes, snap.readErrors, `slice:${detail.id ?? detail.dirName}`, contentWidth, false, snap.sliceDetail, {
|
|
1126
|
+
collapseReqs: state.scopesCollapseReqs,
|
|
1127
|
+
narrative: state.scopesNarrative,
|
|
1128
|
+
}, state.timeZone)];
|
|
1122
1129
|
}
|
|
1123
1130
|
if (!detail && missionName) {
|
|
1124
1131
|
const lines = executionContentLines(execution, snap.scopes, snap.readErrors, state.executionOpen, contentWidth, !snap.hydratedAt || snap.executionMission !== missionName, undefined, undefined, state.timeZone);
|
|
1125
|
-
return execution ? lines : [{ text: ` ${missionName} EXECUTION` }, ...lines];
|
|
1132
|
+
return [...projectHeader, ...(execution ? lines : [{ text: ` ${missionName} EXECUTION` }, ...lines])];
|
|
1126
1133
|
}
|
|
1127
|
-
return scopesContentLines(detail, missionName, {
|
|
1128
|
-
|
|
1129
|
-
|
|
1130
|
-
|
|
1131
|
-
|
|
1132
|
-
|
|
1134
|
+
return [...projectHeader, ...scopesContentLines(detail, missionName, {
|
|
1135
|
+
collapseReqs: state.scopesCollapseReqs,
|
|
1136
|
+
narrative: state.scopesNarrative,
|
|
1137
|
+
width: contentWidth,
|
|
1138
|
+
executionStrip: detail ? executionSliceStripLines(null, detail.id ?? detail.dirName, detail.dirName, contentWidth, detail.status) : undefined,
|
|
1139
|
+
})];
|
|
1133
1140
|
}
|
|
1134
1141
|
return [{ text: `(${state.section})` }];
|
|
1135
1142
|
}
|
|
@@ -1216,6 +1223,15 @@ function pushExplorerTargets(hitMap, row, display, y, explorerWidth) {
|
|
|
1216
1223
|
}
|
|
1217
1224
|
hitMap.push({ y, x1: 1, x2: explorerWidth, action: row.action });
|
|
1218
1225
|
}
|
|
1226
|
+
function readStatus(load, zone) {
|
|
1227
|
+
const at = load.retainedAt ?? load.lastSuccessAt;
|
|
1228
|
+
const basis = at === undefined ? "" : ` · last ${displayTime(new Date(at).toISOString(), zone)}`;
|
|
1229
|
+
if (load.inFlight)
|
|
1230
|
+
return `${load.settled ? "Refreshing" : "Loading"}…${basis} · ? Help`;
|
|
1231
|
+
if (load.stale)
|
|
1232
|
+
return `${at === undefined ? "Read failed" : "Could not refresh"}${basis} · refresh to Retry`;
|
|
1233
|
+
return `Tab complete · ? help${basis}`;
|
|
1234
|
+
}
|
|
1219
1235
|
function renderPulseScreen(state, snap, options, inputLine) {
|
|
1220
1236
|
const { cols = 120, rows = 32, nowMs = 0 } = options;
|
|
1221
1237
|
const explW = explorerWidth(cols);
|
|
@@ -1249,7 +1265,9 @@ function renderPulseScreen(state, snap, options, inputLine) {
|
|
|
1249
1265
|
const contentTargets = [];
|
|
1250
1266
|
const flashRows = [];
|
|
1251
1267
|
let flashAck = false;
|
|
1252
|
-
lines.push(pad(`cmd ▸ ${inputLine}▊${
|
|
1268
|
+
lines.push(pad(`cmd ▸ ${inputLine}▊${inputLine ? "" : " " + readStatus(load, state.timeZone)}`, cols));
|
|
1269
|
+
if (load.stale && !inputLine)
|
|
1270
|
+
hitMap.push({ y: 1, x1: 9, x2: cols, action: { type: "noop" } });
|
|
1253
1271
|
if (options.completion) {
|
|
1254
1272
|
lines.push(pad(options.completion.message, cols));
|
|
1255
1273
|
for (const candidate of options.completion.candidates.slice(0, 4))
|
|
@@ -1257,21 +1275,6 @@ function renderPulseScreen(state, snap, options, inputLine) {
|
|
|
1257
1275
|
if (options.completion.candidates.length > 4)
|
|
1258
1276
|
lines.push(pad(" … keep typing to narrow matches", cols));
|
|
1259
1277
|
}
|
|
1260
|
-
// REGISTRY I3 — the palette overlay: fuzzy rows over the ONE registry; unavailable
|
|
1261
|
-
// entries render DIMMED-WITH-REASON, never hidden (PM pin); bounded height.
|
|
1262
|
-
if (state.palette) {
|
|
1263
|
-
const rows = filterPalette(state.palette.query, COMMAND_REGISTRY, options.commandContext ?? "standard");
|
|
1264
|
-
const sel = Math.min(state.palette.selection, Math.max(0, rows.length - 1));
|
|
1265
|
-
lines.push(pad(`? ${state.palette.query}▊ (${rows.length} commands · ↑↓ · ⏎ run · esc close)`, cols));
|
|
1266
|
-
for (let i = 0; i < Math.min(rows.length, 8); i += 1) {
|
|
1267
|
-
const r = rows[i];
|
|
1268
|
-
const mark = i === sel ? "▸" : " ";
|
|
1269
|
-
const label = `${r.entry.name}${r.entry.args ? " " + r.entry.args : ""}`;
|
|
1270
|
-
const alias = r.entry.aliases.length ? ` (${r.entry.aliases.join(",")})` : "";
|
|
1271
|
-
const tail = r.available ? r.entry.description : `${r.entry.description} — unavailable: ${r.reason}`;
|
|
1272
|
-
lines.push(pad(`${mark} ${label}${alias} ${tail}`, cols));
|
|
1273
|
-
}
|
|
1274
|
-
}
|
|
1275
1278
|
const explorerTitle = state.focusedPane === "explorer" ? "{ EXPLORER }" : "EXPLORER";
|
|
1276
1279
|
const contentTitle = state.focusedPane === "content" ? "{ PULSE }" : "PULSE";
|
|
1277
1280
|
lines.push(paneRule(cols, explW, "top", explorerTitle, contentTitle));
|
|
@@ -1463,18 +1466,34 @@ function crashCartShell(content, led, contentTitle, cols, rows, inputLine, opts)
|
|
|
1463
1466
|
};
|
|
1464
1467
|
}
|
|
1465
1468
|
export function renderScreen(state, snap, options = {}, inputLine = "") {
|
|
1469
|
+
if (state.palette)
|
|
1470
|
+
return helpScreen(state.palette, options.commandContext ?? "standard", options.cols ?? 120, options.rows ?? 32);
|
|
1471
|
+
const screen = renderBody(state, snap, options, inputLine);
|
|
1472
|
+
const commandReady = !options.startup?.open && !options.restore && !options.unavailable && (!options.daemonState || options.daemonState === "up");
|
|
1473
|
+
if (commandReady) {
|
|
1474
|
+
const reduced = reducedMotion();
|
|
1475
|
+
if (!commandFocusVisible(options.nowMs ?? 0, inputLine.length > 0, reduced)) {
|
|
1476
|
+
const line = screen.lines[0];
|
|
1477
|
+
screen.lines[0] = line.slice(0, 6) + " " + line.slice(7);
|
|
1478
|
+
}
|
|
1479
|
+
screen.commandMotionActive = !reduced && inputLine.length === 0;
|
|
1480
|
+
}
|
|
1481
|
+
return screen;
|
|
1482
|
+
}
|
|
1483
|
+
function renderBody(state, snap, options = {}, inputLine = "") {
|
|
1466
1484
|
const { cols = 120, rows = 32, nowMs = 0 } = options;
|
|
1467
|
-
const
|
|
1485
|
+
const fullReading = !options.startup?.open && (!!state.file || !!state.externalUrl || (cols <= 90 && state.section === "specs" && state.drill.length > 0));
|
|
1486
|
+
const explW = fullReading ? 0 : explorerWidth(cols);
|
|
1468
1487
|
if (options.startup?.open) {
|
|
1469
1488
|
const startup = options.startup;
|
|
1470
1489
|
const content = wrapContentLines(startupLines(startup).map((line) => ({ ...line,
|
|
1471
1490
|
text: line.text.replace(/\x1b\[[0-9;?]*[A-Za-z]/g, "").replace(/[\x00-\x1f\x7f]/g, " ")
|
|
1472
1491
|
.replace(/(https?:\/\/)[^\s/@]+:[^\s/@]+@/gi, "$1[redacted]@").replace(/Bearer\s+[^\s]+/gi, "Bearer [redacted]"),
|
|
1473
1492
|
})), Math.max(1, cols - explW - 2));
|
|
1474
|
-
const selected = content.findIndex((line) => line.action?.type === "startup" && line.action.key === `select:${startup.selected}`);
|
|
1475
|
-
const scroll = startup.expanded ? startup.scroll : Math.max(0, selected - Math.max(1, rows - 12));
|
|
1493
|
+
const selected = content.findIndex((line) => line.action?.type === "startup" && line.action.key === `select:${startup.local?.selected ?? startup.selected}`);
|
|
1494
|
+
const scroll = startup.local && !startup.local.result.entries ? startup.local.scroll : startup.expanded ? startup.scroll : Math.max(0, selected - Math.max(1, rows - 12));
|
|
1476
1495
|
const screen = crashCartShell(content, { note: "startup", rows: [] }, "START AND RETURN", cols, rows, "", { scroll });
|
|
1477
|
-
screen.lines[rows - 1] = pad("
|
|
1496
|
+
screen.lines[rows - 1] = pad("? Help · w Skip · L Local · ↑↓ scroll · Enter read · Esc Back · q Quit", cols);
|
|
1478
1497
|
return screen;
|
|
1479
1498
|
}
|
|
1480
1499
|
// 5.2 crash-cart (shell-placement rework, ruling 3c6c2be0): daemon-DOWN renders as a CONTENT-PANE
|
|
@@ -1529,7 +1548,7 @@ export function renderScreen(state, snap, options = {}, inputLine = "") {
|
|
|
1529
1548
|
// PULSE (founder Option-B): a content-pane view inside the NORMAL explorer│
|
|
1530
1549
|
// content chrome — renderPulseScreen builds its own split (sidebar + lanes)
|
|
1531
1550
|
// and rides the same segRows paint path, so it returns before the table layout.
|
|
1532
|
-
if (state.viewTab === "pulse")
|
|
1551
|
+
if (state.viewTab === "pulse" && options.load?.settled !== false)
|
|
1533
1552
|
return renderPulseScreen(state, snap, options, inputLine);
|
|
1534
1553
|
// S19 round-5 (guard): one spinner frame per render pass from caller time;
|
|
1535
1554
|
// `loading` comes from the refresh OWNER (omitted = settled — demo/fixture
|
|
@@ -1548,8 +1567,10 @@ export function renderScreen(state, snap, options = {}, inputLine = "") {
|
|
|
1548
1567
|
// current insertion point for EMPTY and non-empty buffers alike — the
|
|
1549
1568
|
// shell accepts typing from the empty state, so the honest readiness
|
|
1550
1569
|
// affordance must show BEFORE the first key (no new focus state; stylize
|
|
1551
|
-
//
|
|
1552
|
-
lines.push(pad(`cmd ▸ ${inputLine}▊${inputLine ? "" : "
|
|
1570
|
+
// paints the cell; the shared motion clock controls its visibility).
|
|
1571
|
+
lines.push(pad(`cmd ▸ ${inputLine}▊${inputLine ? "" : " " + readStatus(load, state.timeZone)}`, cols));
|
|
1572
|
+
if (load.stale && !inputLine)
|
|
1573
|
+
hitMap.push({ y: 1, x1: 9, x2: cols, action: { type: "noop" } });
|
|
1553
1574
|
if (options.completion) {
|
|
1554
1575
|
lines.push(pad(options.completion.message, cols));
|
|
1555
1576
|
for (const candidate of options.completion.candidates.slice(0, 4))
|
|
@@ -1557,31 +1578,26 @@ export function renderScreen(state, snap, options = {}, inputLine = "") {
|
|
|
1557
1578
|
if (options.completion.candidates.length > 4)
|
|
1558
1579
|
lines.push(pad(" … keep typing to narrow matches", cols));
|
|
1559
1580
|
}
|
|
1560
|
-
|
|
1561
|
-
// entries render DIMMED-WITH-REASON, never hidden (PM pin); bounded height.
|
|
1562
|
-
if (state.palette) {
|
|
1563
|
-
const rows = filterPalette(state.palette.query, COMMAND_REGISTRY, options.commandContext ?? "standard");
|
|
1564
|
-
const sel = Math.min(state.palette.selection, Math.max(0, rows.length - 1));
|
|
1565
|
-
lines.push(pad(`? ${state.palette.query}▊ (${rows.length} commands · ↑↓ · ⏎ run · esc close)`, cols));
|
|
1566
|
-
for (let i = 0; i < Math.min(rows.length, 8); i += 1) {
|
|
1567
|
-
const r = rows[i];
|
|
1568
|
-
const mark = i === sel ? "▸" : " ";
|
|
1569
|
-
const label = `${r.entry.name}${r.entry.args ? " " + r.entry.args : ""}`;
|
|
1570
|
-
const alias = r.entry.aliases.length ? ` (${r.entry.aliases.join(",")})` : "";
|
|
1571
|
-
const tail = r.available ? r.entry.description : `${r.entry.description} — unavailable: ${r.reason}`;
|
|
1572
|
-
lines.push(pad(`${mark} ${label}${alias} ${tail}`, cols));
|
|
1573
|
-
}
|
|
1574
|
-
}
|
|
1575
|
-
const sectionTitle = { topology: "TOPOLOGY", specs: "SPECS", needs: "NEEDS-YOU" }[state.section] ?? state.section.toUpperCase();
|
|
1581
|
+
const sectionTitle = { topology: "TOPOLOGY", specs: "SPECS", scopes: "PROJECTS", needs: "FEED", system: "SYSTEM · HEALTH", config: "SYSTEM · CONFIGURATION", connections: "SYSTEM · CONNECTIONS" }[state.section] ?? state.section.toUpperCase();
|
|
1576
1582
|
// active-pane emphasis (k9s-class chrome): the focused pane's title is bracketed
|
|
1577
1583
|
const explorerTitle = state.focusedPane === "explorer" ? "{ EXPLORER }" : "EXPLORER";
|
|
1578
1584
|
const contentTitle = state.focusedPane === "content" ? `{ ${sectionTitle} }` : sectionTitle;
|
|
1579
|
-
lines.push(paneRule(cols, explW, "top", explorerTitle, contentTitle));
|
|
1580
|
-
const explorer = computeExplorerRows(state, snap);
|
|
1585
|
+
lines.push(fullReading ? pad(`━ ${state.file ? "READ" : state.externalUrl ? "EXTERNAL URL" : "SPECS"} · Esc / ← Back `, cols) : paneRule(cols, explW, "top", explorerTitle, contentTitle));
|
|
1586
|
+
const explorer = fullReading ? [] : computeExplorerRows(state, snap);
|
|
1581
1587
|
// Slice-17: the file-tree re-skin is a DISPLAY transform only — rows, keys,
|
|
1582
1588
|
// actions, and the hit-map all keep resolving against the row model above.
|
|
1583
1589
|
const { labels: explorerDisplay, metas: explorerMetas } = navigatorDisplay(explorer, snap, explW - 1);
|
|
1584
|
-
const
|
|
1590
|
+
const contentWidth = Math.max(cols - explW - (fullReading ? 1 : 2), 0);
|
|
1591
|
+
const previous = !load.settled && !state.externalUrl ? options.previousPage : undefined;
|
|
1592
|
+
const content = previous
|
|
1593
|
+
? [...wrapDetailLines([{ text: `Previous: ${previous.state.section} · ${previous.state.file ? `${previous.state.file.root}/${previous.state.file.path}` : previous.state.drill.map(d => d.name).join(" / ") || [previous.state.project?.id, previous.state.scopesMission, previous.state.terminalView].filter(Boolean).join(" / ") || "overview"}` }], contentWidth),
|
|
1594
|
+
{ text: `Opening ${sectionTitle.toLowerCase()}… · Explorer remains available` },
|
|
1595
|
+
...contentLines(previous.state, previous.snapshot, contentWidth, { ...motion, loading: false }).map(line => ({ text: line.text }))]
|
|
1596
|
+
: !load.settled && !state.externalUrl
|
|
1597
|
+
? [{ text: `${sectionTitle} · choose a location in Explorer` }, { text: `${motion.frame} ${sectionTitle.toLowerCase()} read pending…` }]
|
|
1598
|
+
: contentLines(state, snap, contentWidth, motion);
|
|
1599
|
+
if (!load.settled && !reduced)
|
|
1600
|
+
motion.used = true;
|
|
1585
1601
|
const footer = state.footerOn ? snap.stream.at(-1) : undefined;
|
|
1586
1602
|
// round-5 (guard): the tmux-style ONE-SHOT activity flash targets the
|
|
1587
1603
|
// flashed agent's EXPLORER row — per-seat pane-output events from the
|
|
@@ -1653,7 +1669,7 @@ export function renderScreen(state, snap, options = {}, inputLine = "") {
|
|
|
1653
1669
|
else
|
|
1654
1670
|
contentMarker = "›";
|
|
1655
1671
|
}
|
|
1656
|
-
lines.push(pad(`${left}┃${contentMarker}${contentText}`, cols));
|
|
1672
|
+
lines.push(pad(fullReading ? `${contentMarker}${contentText}` : `${left}┃${contentMarker}${contentText}`, cols));
|
|
1657
1673
|
if (row) {
|
|
1658
1674
|
pushExplorerTargets(hitMap, row, explorerDisplay[explorerIndex] ?? row.label, y, explW);
|
|
1659
1675
|
explorerRows.push({ ...row, y });
|
|
@@ -1665,12 +1681,12 @@ export function renderScreen(state, snap, options = {}, inputLine = "") {
|
|
|
1665
1681
|
}
|
|
1666
1682
|
// zones first: hit lookup takes the first match, so a zone wins over the row-wide action
|
|
1667
1683
|
for (const z of zones) {
|
|
1668
|
-
const target = { y, x1: explW + 3 + z.start, x2: explW + 2 + z.end, action: z.action };
|
|
1684
|
+
const target = { y, x1: (fullReading ? 2 : explW + 3) + z.start, x2: (fullReading ? 1 : explW + 2) + z.end, action: z.action };
|
|
1669
1685
|
hitMap.push(target);
|
|
1670
1686
|
contentTargets.push(target);
|
|
1671
1687
|
}
|
|
1672
1688
|
if (item?.action) {
|
|
1673
|
-
const target = { y, x1: explW + 3, x2: cols, action: item.action };
|
|
1689
|
+
const target = { y, x1: fullReading ? 2 : explW + 3, x2: cols, action: item.action };
|
|
1674
1690
|
hitMap.push(target);
|
|
1675
1691
|
contentTargets.push(target);
|
|
1676
1692
|
}
|
|
@@ -1681,8 +1697,8 @@ export function renderScreen(state, snap, options = {}, inputLine = "") {
|
|
|
1681
1697
|
lines.push(pad(`≋ ${displayTime(footer.tsEmitted, state.timeZone)} ${footer.sourceSession}: ${footer.body}`, cols));
|
|
1682
1698
|
const drillPath = state.drill.map((d) => d.name).join(" → ");
|
|
1683
1699
|
const readWarn = snap.readErrors.length > 0 ? ` ⚠ ${snap.readErrors.length} read(s) failed: ${snap.readErrors[0]}` : "";
|
|
1684
|
-
lines.push(paneRule(cols, explW, "bottom"));
|
|
1685
|
-
lines.push(pad(keybindHints(state), cols));
|
|
1700
|
+
lines.push(fullReading ? "━".repeat(cols) : paneRule(cols, explW, "bottom"));
|
|
1701
|
+
lines.push(pad(fullReading ? "↑↓ scroll / links · → links · Enter open · Esc Back · refresh · v copy" : keybindHints(state), cols));
|
|
1686
1702
|
lines.push(pad(`[${state.instanceId}] ${state.section}${drillPath ? " · " + drillPath : ""}${state.lastError ? " ✗ " + state.lastError : ""}${state.notice ? " ▸ " + state.notice : ""}${readWarn}${state.timeZoneWarning ? " · ⚠ timezone; run timezone" : ""}`, cols));
|
|
1687
1703
|
while (lines.length < rows)
|
|
1688
1704
|
lines.push("");
|