@openrig/cli 0.1.12 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/daemon/assets/openrig-activity-hook-relay.cjs +104 -0
- package/daemon/dist/adapters/claude-code-adapter.d.ts +24 -6
- package/daemon/dist/adapters/claude-code-adapter.d.ts.map +1 -1
- package/daemon/dist/adapters/claude-code-adapter.js +221 -65
- package/daemon/dist/adapters/claude-code-adapter.js.map +1 -1
- package/daemon/dist/adapters/claude-resume.d.ts +5 -0
- package/daemon/dist/adapters/claude-resume.d.ts.map +1 -1
- package/daemon/dist/adapters/claude-resume.js +13 -0
- package/daemon/dist/adapters/claude-resume.js.map +1 -1
- package/daemon/dist/adapters/codex-resume.d.ts +8 -1
- package/daemon/dist/adapters/codex-resume.d.ts.map +1 -1
- package/daemon/dist/adapters/codex-resume.js +74 -5
- package/daemon/dist/adapters/codex-resume.js.map +1 -1
- package/daemon/dist/adapters/codex-runtime-adapter.d.ts +9 -5
- package/daemon/dist/adapters/codex-runtime-adapter.d.ts.map +1 -1
- package/daemon/dist/adapters/codex-runtime-adapter.js +255 -28
- package/daemon/dist/adapters/codex-runtime-adapter.js.map +1 -1
- package/daemon/dist/adapters/terminal-adapter.d.ts +2 -1
- package/daemon/dist/adapters/terminal-adapter.d.ts.map +1 -1
- package/daemon/dist/adapters/terminal-adapter.js +7 -1
- package/daemon/dist/adapters/terminal-adapter.js.map +1 -1
- package/daemon/dist/adapters/tmux.d.ts.map +1 -1
- package/daemon/dist/adapters/tmux.js +53 -5
- package/daemon/dist/adapters/tmux.js.map +1 -1
- package/daemon/dist/builtins/workflow-specs/basic-loop.yaml +76 -0
- package/daemon/dist/builtins/workflow-specs/conveyor.yaml +80 -0
- package/daemon/dist/db/migrations/021_seat_handover_observability.d.ts +3 -0
- package/daemon/dist/db/migrations/021_seat_handover_observability.d.ts.map +1 -0
- package/daemon/dist/db/migrations/021_seat_handover_observability.js +11 -0
- package/daemon/dist/db/migrations/021_seat_handover_observability.js.map +1 -0
- package/daemon/dist/db/migrations/022_node_codex_config_profile.d.ts +3 -0
- package/daemon/dist/db/migrations/022_node_codex_config_profile.d.ts.map +1 -0
- package/daemon/dist/db/migrations/022_node_codex_config_profile.js +7 -0
- package/daemon/dist/db/migrations/022_node_codex_config_profile.js.map +1 -0
- package/daemon/dist/db/migrations/023_stream_items.d.ts +16 -0
- package/daemon/dist/db/migrations/023_stream_items.d.ts.map +1 -0
- package/daemon/dist/db/migrations/023_stream_items.js +37 -0
- package/daemon/dist/db/migrations/023_stream_items.js.map +1 -0
- package/daemon/dist/db/migrations/024_queue_items.d.ts +19 -0
- package/daemon/dist/db/migrations/024_queue_items.d.ts.map +1 -0
- package/daemon/dist/db/migrations/024_queue_items.js +52 -0
- package/daemon/dist/db/migrations/024_queue_items.js.map +1 -0
- package/daemon/dist/db/migrations/025_queue_transitions.d.ts +13 -0
- package/daemon/dist/db/migrations/025_queue_transitions.d.ts.map +1 -0
- package/daemon/dist/db/migrations/025_queue_transitions.js +28 -0
- package/daemon/dist/db/migrations/025_queue_transitions.js.map +1 -0
- package/daemon/dist/db/migrations/026_inbox_entries.d.ts +14 -0
- package/daemon/dist/db/migrations/026_inbox_entries.d.ts.map +1 -0
- package/daemon/dist/db/migrations/026_inbox_entries.js +35 -0
- package/daemon/dist/db/migrations/026_inbox_entries.js.map +1 -0
- package/daemon/dist/db/migrations/027_outbox_entries.d.ts +12 -0
- package/daemon/dist/db/migrations/027_outbox_entries.d.ts.map +1 -0
- package/daemon/dist/db/migrations/027_outbox_entries.js +30 -0
- package/daemon/dist/db/migrations/027_outbox_entries.js.map +1 -0
- package/daemon/dist/db/migrations/028_project_classifications.d.ts +26 -0
- package/daemon/dist/db/migrations/028_project_classifications.d.ts.map +1 -0
- package/daemon/dist/db/migrations/028_project_classifications.js +44 -0
- package/daemon/dist/db/migrations/028_project_classifications.js.map +1 -0
- package/daemon/dist/db/migrations/029_classifier_leases.d.ts +22 -0
- package/daemon/dist/db/migrations/029_classifier_leases.d.ts.map +1 -0
- package/daemon/dist/db/migrations/029_classifier_leases.js +41 -0
- package/daemon/dist/db/migrations/029_classifier_leases.js.map +1 -0
- package/daemon/dist/db/migrations/030_views_custom.d.ts +15 -0
- package/daemon/dist/db/migrations/030_views_custom.d.ts.map +1 -0
- package/daemon/dist/db/migrations/030_views_custom.js +27 -0
- package/daemon/dist/db/migrations/030_views_custom.js.map +1 -0
- package/daemon/dist/db/migrations/031_watchdog_jobs.d.ts +34 -0
- package/daemon/dist/db/migrations/031_watchdog_jobs.d.ts.map +1 -0
- package/daemon/dist/db/migrations/031_watchdog_jobs.js +59 -0
- package/daemon/dist/db/migrations/031_watchdog_jobs.js.map +1 -0
- package/daemon/dist/db/migrations/032_watchdog_history.d.ts +28 -0
- package/daemon/dist/db/migrations/032_watchdog_history.d.ts.map +1 -0
- package/daemon/dist/db/migrations/032_watchdog_history.js +46 -0
- package/daemon/dist/db/migrations/032_watchdog_history.js.map +1 -0
- package/daemon/dist/db/migrations/033_workflow_specs.d.ts +30 -0
- package/daemon/dist/db/migrations/033_workflow_specs.d.ts.map +1 -0
- package/daemon/dist/db/migrations/033_workflow_specs.js +50 -0
- package/daemon/dist/db/migrations/033_workflow_specs.js.map +1 -0
- package/daemon/dist/db/migrations/034_workflow_instances.d.ts +42 -0
- package/daemon/dist/db/migrations/034_workflow_instances.d.ts.map +1 -0
- package/daemon/dist/db/migrations/034_workflow_instances.js +63 -0
- package/daemon/dist/db/migrations/034_workflow_instances.js.map +1 -0
- package/daemon/dist/db/migrations/035_workflow_step_trails.d.ts +29 -0
- package/daemon/dist/db/migrations/035_workflow_step_trails.d.ts.map +1 -0
- package/daemon/dist/db/migrations/035_workflow_step_trails.js +48 -0
- package/daemon/dist/db/migrations/035_workflow_step_trails.js.map +1 -0
- package/daemon/dist/db/migrations/036_watchdog_policy_enum_extension.d.ts +35 -0
- package/daemon/dist/db/migrations/036_watchdog_policy_enum_extension.d.ts.map +1 -0
- package/daemon/dist/db/migrations/036_watchdog_policy_enum_extension.js +43 -0
- package/daemon/dist/db/migrations/036_watchdog_policy_enum_extension.js.map +1 -0
- package/daemon/dist/db/migrations/037_mission_control_actions.d.ts +51 -0
- package/daemon/dist/db/migrations/037_mission_control_actions.d.ts.map +1 -0
- package/daemon/dist/db/migrations/037_mission_control_actions.js +74 -0
- package/daemon/dist/db/migrations/037_mission_control_actions.js.map +1 -0
- package/daemon/dist/db/migrations/038_workspace_primitive.d.ts +16 -0
- package/daemon/dist/db/migrations/038_workspace_primitive.d.ts.map +1 -0
- package/daemon/dist/db/migrations/038_workspace_primitive.js +20 -0
- package/daemon/dist/db/migrations/038_workspace_primitive.js.map +1 -0
- package/daemon/dist/db/migrations/039_queue_target_repo.d.ts +16 -0
- package/daemon/dist/db/migrations/039_queue_target_repo.d.ts.map +1 -0
- package/daemon/dist/db/migrations/039_queue_target_repo.js +21 -0
- package/daemon/dist/db/migrations/039_queue_target_repo.js.map +1 -0
- package/daemon/dist/domain/active-lens-store.d.ts +23 -0
- package/daemon/dist/domain/active-lens-store.d.ts.map +1 -0
- package/daemon/dist/domain/active-lens-store.js +87 -0
- package/daemon/dist/domain/active-lens-store.js.map +1 -0
- package/daemon/dist/domain/agent-activity-store.d.ts +42 -0
- package/daemon/dist/domain/agent-activity-store.d.ts.map +1 -0
- package/daemon/dist/domain/agent-activity-store.js +177 -0
- package/daemon/dist/domain/agent-activity-store.js.map +1 -0
- package/daemon/dist/domain/agent-images/agent-image-library-service.d.ts +68 -0
- package/daemon/dist/domain/agent-images/agent-image-library-service.d.ts.map +1 -0
- package/daemon/dist/domain/agent-images/agent-image-library-service.js +339 -0
- package/daemon/dist/domain/agent-images/agent-image-library-service.js.map +1 -0
- package/daemon/dist/domain/agent-images/agent-image-types.d.ts +113 -0
- package/daemon/dist/domain/agent-images/agent-image-types.d.ts.map +1 -0
- package/daemon/dist/domain/agent-images/agent-image-types.js +24 -0
- package/daemon/dist/domain/agent-images/agent-image-types.js.map +1 -0
- package/daemon/dist/domain/agent-images/evidence-guard.d.ts +26 -0
- package/daemon/dist/domain/agent-images/evidence-guard.d.ts.map +1 -0
- package/daemon/dist/domain/agent-images/evidence-guard.js +185 -0
- package/daemon/dist/domain/agent-images/evidence-guard.js.map +1 -0
- package/daemon/dist/domain/agent-images/manifest-parser.d.ts +3 -0
- package/daemon/dist/domain/agent-images/manifest-parser.d.ts.map +1 -0
- package/daemon/dist/domain/agent-images/manifest-parser.js +114 -0
- package/daemon/dist/domain/agent-images/manifest-parser.js.map +1 -0
- package/daemon/dist/domain/agent-images/resume-token-discovery.d.ts +28 -0
- package/daemon/dist/domain/agent-images/resume-token-discovery.d.ts.map +1 -0
- package/daemon/dist/domain/agent-images/resume-token-discovery.js +83 -0
- package/daemon/dist/domain/agent-images/resume-token-discovery.js.map +1 -0
- package/daemon/dist/domain/agent-images/snapshot-capturer.d.ts +36 -0
- package/daemon/dist/domain/agent-images/snapshot-capturer.d.ts.map +1 -0
- package/daemon/dist/domain/agent-images/snapshot-capturer.js +58 -0
- package/daemon/dist/domain/agent-images/snapshot-capturer.js.map +1 -0
- package/daemon/dist/domain/agent-manifest.d.ts.map +1 -1
- package/daemon/dist/domain/agent-manifest.js +3 -0
- package/daemon/dist/domain/agent-manifest.js.map +1 -1
- package/daemon/dist/domain/agent-starter-resolver.d.ts +94 -0
- package/daemon/dist/domain/agent-starter-resolver.d.ts.map +1 -0
- package/daemon/dist/domain/agent-starter-resolver.js +198 -0
- package/daemon/dist/domain/agent-starter-resolver.js.map +1 -0
- package/daemon/dist/domain/classifier-lease-manager.d.ts +130 -0
- package/daemon/dist/domain/classifier-lease-manager.d.ts.map +1 -0
- package/daemon/dist/domain/classifier-lease-manager.js +285 -0
- package/daemon/dist/domain/classifier-lease-manager.js.map +1 -0
- package/daemon/dist/domain/conflict-detector.d.ts.map +1 -1
- package/daemon/dist/domain/conflict-detector.js +6 -3
- package/daemon/dist/domain/conflict-detector.js.map +1 -1
- package/daemon/dist/domain/context-monitor.d.ts +5 -4
- package/daemon/dist/domain/context-monitor.d.ts.map +1 -1
- package/daemon/dist/domain/context-monitor.js +26 -11
- package/daemon/dist/domain/context-monitor.js.map +1 -1
- package/daemon/dist/domain/context-packs/bundle-assembler.d.ts +49 -0
- package/daemon/dist/domain/context-packs/bundle-assembler.d.ts.map +1 -0
- package/daemon/dist/domain/context-packs/bundle-assembler.js +81 -0
- package/daemon/dist/domain/context-packs/bundle-assembler.js.map +1 -0
- package/daemon/dist/domain/context-packs/context-pack-library-service.d.ts +41 -0
- package/daemon/dist/domain/context-packs/context-pack-library-service.d.ts.map +1 -0
- package/daemon/dist/domain/context-packs/context-pack-library-service.js +148 -0
- package/daemon/dist/domain/context-packs/context-pack-library-service.js.map +1 -0
- package/daemon/dist/domain/context-packs/context-pack-types.d.ts +64 -0
- package/daemon/dist/domain/context-packs/context-pack-types.d.ts.map +1 -0
- package/daemon/dist/domain/context-packs/context-pack-types.js +22 -0
- package/daemon/dist/domain/context-packs/context-pack-types.js.map +1 -0
- package/daemon/dist/domain/context-packs/manifest-parser.d.ts +3 -0
- package/daemon/dist/domain/context-packs/manifest-parser.d.ts.map +1 -0
- package/daemon/dist/domain/context-packs/manifest-parser.js +74 -0
- package/daemon/dist/domain/context-packs/manifest-parser.js.map +1 -0
- package/daemon/dist/domain/context-usage-store.d.ts +15 -2
- package/daemon/dist/domain/context-usage-store.d.ts.map +1 -1
- package/daemon/dist/domain/context-usage-store.js +157 -2
- package/daemon/dist/domain/context-usage-store.js.map +1 -1
- package/daemon/dist/domain/files/file-write-service.d.ts +61 -0
- package/daemon/dist/domain/files/file-write-service.d.ts.map +1 -0
- package/daemon/dist/domain/files/file-write-service.js +180 -0
- package/daemon/dist/domain/files/file-write-service.js.map +1 -0
- package/daemon/dist/domain/files/path-safety.d.ts +47 -0
- package/daemon/dist/domain/files/path-safety.d.ts.map +1 -0
- package/daemon/dist/domain/files/path-safety.js +176 -0
- package/daemon/dist/domain/files/path-safety.js.map +1 -0
- package/daemon/dist/domain/graph-projection.d.ts +14 -1
- package/daemon/dist/domain/graph-projection.d.ts.map +1 -1
- package/daemon/dist/domain/graph-projection.js +8 -0
- package/daemon/dist/domain/graph-projection.js.map +1 -1
- package/daemon/dist/domain/hot-potato-enforcer.d.ts +45 -0
- package/daemon/dist/domain/hot-potato-enforcer.d.ts.map +1 -0
- package/daemon/dist/domain/hot-potato-enforcer.js +94 -0
- package/daemon/dist/domain/hot-potato-enforcer.js.map +1 -0
- package/daemon/dist/domain/inbox-handler.d.ts +68 -0
- package/daemon/dist/domain/inbox-handler.d.ts.map +1 -0
- package/daemon/dist/domain/inbox-handler.js +177 -0
- package/daemon/dist/domain/inbox-handler.js.map +1 -0
- package/daemon/dist/domain/install-engine.d.ts.map +1 -1
- package/daemon/dist/domain/install-engine.js +22 -6
- package/daemon/dist/domain/install-engine.js.map +1 -1
- package/daemon/dist/domain/install-verifier.d.ts.map +1 -1
- package/daemon/dist/domain/install-verifier.js +10 -5
- package/daemon/dist/domain/install-verifier.js.map +1 -1
- package/daemon/dist/domain/managed-blocks.d.ts.map +1 -1
- package/daemon/dist/domain/managed-blocks.js +22 -3
- package/daemon/dist/domain/managed-blocks.js.map +1 -1
- package/daemon/dist/domain/mission-control/audit-browse.d.ts +26 -0
- package/daemon/dist/domain/mission-control/audit-browse.d.ts.map +1 -0
- package/daemon/dist/domain/mission-control/audit-browse.js +101 -0
- package/daemon/dist/domain/mission-control/audit-browse.js.map +1 -0
- package/daemon/dist/domain/mission-control/mission-control-action-log.d.ts +51 -0
- package/daemon/dist/domain/mission-control/mission-control-action-log.d.ts.map +1 -0
- package/daemon/dist/domain/mission-control/mission-control-action-log.js +124 -0
- package/daemon/dist/domain/mission-control/mission-control-action-log.js.map +1 -0
- package/daemon/dist/domain/mission-control/mission-control-fleet-cli-capability.d.ts +131 -0
- package/daemon/dist/domain/mission-control/mission-control-fleet-cli-capability.d.ts.map +1 -0
- package/daemon/dist/domain/mission-control/mission-control-fleet-cli-capability.js +232 -0
- package/daemon/dist/domain/mission-control/mission-control-fleet-cli-capability.js.map +1 -0
- package/daemon/dist/domain/mission-control/mission-control-read-layer.d.ts +85 -0
- package/daemon/dist/domain/mission-control/mission-control-read-layer.d.ts.map +1 -0
- package/daemon/dist/domain/mission-control/mission-control-read-layer.js +265 -0
- package/daemon/dist/domain/mission-control/mission-control-read-layer.js.map +1 -0
- package/daemon/dist/domain/mission-control/mission-control-write-contract.d.ts +69 -0
- package/daemon/dist/domain/mission-control/mission-control-write-contract.d.ts.map +1 -0
- package/daemon/dist/domain/mission-control/mission-control-write-contract.js +300 -0
- package/daemon/dist/domain/mission-control/mission-control-write-contract.js.map +1 -0
- package/daemon/dist/domain/mission-control/notification-adapter-ntfy.d.ts +18 -0
- package/daemon/dist/domain/mission-control/notification-adapter-ntfy.d.ts.map +1 -0
- package/daemon/dist/domain/mission-control/notification-adapter-ntfy.js +48 -0
- package/daemon/dist/domain/mission-control/notification-adapter-ntfy.js.map +1 -0
- package/daemon/dist/domain/mission-control/notification-adapter-types.d.ts +25 -0
- package/daemon/dist/domain/mission-control/notification-adapter-types.d.ts.map +1 -0
- package/daemon/dist/domain/mission-control/notification-adapter-types.js +7 -0
- package/daemon/dist/domain/mission-control/notification-adapter-types.js.map +1 -0
- package/daemon/dist/domain/mission-control/notification-adapter-webhook.d.ts +27 -0
- package/daemon/dist/domain/mission-control/notification-adapter-webhook.d.ts.map +1 -0
- package/daemon/dist/domain/mission-control/notification-adapter-webhook.js +47 -0
- package/daemon/dist/domain/mission-control/notification-adapter-webhook.js.map +1 -0
- package/daemon/dist/domain/mission-control/notification-dispatcher.d.ts +53 -0
- package/daemon/dist/domain/mission-control/notification-dispatcher.d.ts.map +1 -0
- package/daemon/dist/domain/mission-control/notification-dispatcher.js +181 -0
- package/daemon/dist/domain/mission-control/notification-dispatcher.js.map +1 -0
- package/daemon/dist/domain/native-resume-probe.d.ts +1 -1
- package/daemon/dist/domain/native-resume-probe.d.ts.map +1 -1
- package/daemon/dist/domain/native-resume-probe.js +67 -0
- package/daemon/dist/domain/native-resume-probe.js.map +1 -1
- package/daemon/dist/domain/node-inventory.d.ts +29 -1
- package/daemon/dist/domain/node-inventory.d.ts.map +1 -1
- package/daemon/dist/domain/node-inventory.js +184 -38
- package/daemon/dist/domain/node-inventory.js.map +1 -1
- package/daemon/dist/domain/node-launcher.d.ts +2 -0
- package/daemon/dist/domain/node-launcher.d.ts.map +1 -1
- package/daemon/dist/domain/node-launcher.js +21 -7
- package/daemon/dist/domain/node-launcher.js.map +1 -1
- package/daemon/dist/domain/outbox-handler.d.ts +48 -0
- package/daemon/dist/domain/outbox-handler.d.ts.map +1 -0
- package/daemon/dist/domain/outbox-handler.js +106 -0
- package/daemon/dist/domain/outbox-handler.js.map +1 -0
- package/daemon/dist/domain/policies/artifact-pool-helpers.d.ts +64 -0
- package/daemon/dist/domain/policies/artifact-pool-helpers.d.ts.map +1 -0
- package/daemon/dist/domain/policies/artifact-pool-helpers.js +226 -0
- package/daemon/dist/domain/policies/artifact-pool-helpers.js.map +1 -0
- package/daemon/dist/domain/policies/artifact-pool-ready.d.ts +3 -0
- package/daemon/dist/domain/policies/artifact-pool-ready.d.ts.map +1 -0
- package/daemon/dist/domain/policies/artifact-pool-ready.js +41 -0
- package/daemon/dist/domain/policies/artifact-pool-ready.js.map +1 -0
- package/daemon/dist/domain/policies/edge-artifact-required.d.ts +3 -0
- package/daemon/dist/domain/policies/edge-artifact-required.d.ts.map +1 -0
- package/daemon/dist/domain/policies/edge-artifact-required.js +90 -0
- package/daemon/dist/domain/policies/edge-artifact-required.js.map +1 -0
- package/daemon/dist/domain/policies/periodic-reminder.d.ts +3 -0
- package/daemon/dist/domain/policies/periodic-reminder.d.ts.map +1 -0
- package/daemon/dist/domain/policies/periodic-reminder.js +30 -0
- package/daemon/dist/domain/policies/periodic-reminder.js.map +1 -0
- package/daemon/dist/domain/policies/types.d.ts +51 -0
- package/daemon/dist/domain/policies/types.d.ts.map +1 -0
- package/daemon/dist/domain/policies/types.js +9 -0
- package/daemon/dist/domain/policies/types.js.map +1 -0
- package/daemon/dist/domain/policies/workflow-keepalive.d.ts +7 -0
- package/daemon/dist/domain/policies/workflow-keepalive.d.ts.map +1 -0
- package/daemon/dist/domain/policies/workflow-keepalive.js +123 -0
- package/daemon/dist/domain/policies/workflow-keepalive.js.map +1 -0
- package/daemon/dist/domain/preview/preview-rate-limiter.d.ts +20 -0
- package/daemon/dist/domain/preview/preview-rate-limiter.d.ts.map +1 -0
- package/daemon/dist/domain/preview/preview-rate-limiter.js +46 -0
- package/daemon/dist/domain/preview/preview-rate-limiter.js.map +1 -0
- package/daemon/dist/domain/profile-resolver.d.ts +5 -0
- package/daemon/dist/domain/profile-resolver.d.ts.map +1 -1
- package/daemon/dist/domain/profile-resolver.js +62 -8
- package/daemon/dist/domain/profile-resolver.js.map +1 -1
- package/daemon/dist/domain/progress/progress-indexer.d.ts +73 -0
- package/daemon/dist/domain/progress/progress-indexer.d.ts.map +1 -0
- package/daemon/dist/domain/progress/progress-indexer.js +210 -0
- package/daemon/dist/domain/progress/progress-indexer.js.map +1 -0
- package/daemon/dist/domain/project-classifier.d.ts +75 -0
- package/daemon/dist/domain/project-classifier.d.ts.map +1 -0
- package/daemon/dist/domain/project-classifier.js +132 -0
- package/daemon/dist/domain/project-classifier.js.map +1 -0
- package/daemon/dist/domain/projection-planner.d.ts +1 -0
- package/daemon/dist/domain/projection-planner.d.ts.map +1 -1
- package/daemon/dist/domain/projection-planner.js +3 -0
- package/daemon/dist/domain/projection-planner.js.map +1 -1
- package/daemon/dist/domain/ps-projection.d.ts +31 -0
- package/daemon/dist/domain/ps-projection.d.ts.map +1 -1
- package/daemon/dist/domain/ps-projection.js +38 -0
- package/daemon/dist/domain/ps-projection.js.map +1 -1
- package/daemon/dist/domain/queue-repository.d.ts +340 -0
- package/daemon/dist/domain/queue-repository.d.ts.map +1 -0
- package/daemon/dist/domain/queue-repository.js +744 -0
- package/daemon/dist/domain/queue-repository.js.map +1 -0
- package/daemon/dist/domain/queue-transition-log.d.ts +38 -0
- package/daemon/dist/domain/queue-transition-log.d.ts.map +1 -0
- package/daemon/dist/domain/queue-transition-log.js +52 -0
- package/daemon/dist/domain/queue-transition-log.js.map +1 -0
- package/daemon/dist/domain/rehydrate-eligibility.d.ts +16 -0
- package/daemon/dist/domain/rehydrate-eligibility.d.ts.map +1 -0
- package/daemon/dist/domain/rehydrate-eligibility.js +43 -0
- package/daemon/dist/domain/rehydrate-eligibility.js.map +1 -0
- package/daemon/dist/domain/restore-check-service.d.ts +203 -0
- package/daemon/dist/domain/restore-check-service.d.ts.map +1 -0
- package/daemon/dist/domain/restore-check-service.js +1060 -0
- package/daemon/dist/domain/restore-check-service.js.map +1 -0
- package/daemon/dist/domain/restore-orchestrator.d.ts +49 -3
- package/daemon/dist/domain/restore-orchestrator.d.ts.map +1 -1
- package/daemon/dist/domain/restore-orchestrator.js +464 -64
- package/daemon/dist/domain/restore-orchestrator.js.map +1 -1
- package/daemon/dist/domain/rig-expansion-service.d.ts.map +1 -1
- package/daemon/dist/domain/rig-expansion-service.js +13 -0
- package/daemon/dist/domain/rig-expansion-service.js.map +1 -1
- package/daemon/dist/domain/rig-repository.d.ts +31 -1
- package/daemon/dist/domain/rig-repository.d.ts.map +1 -1
- package/daemon/dist/domain/rig-repository.js +104 -5
- package/daemon/dist/domain/rig-repository.js.map +1 -1
- package/daemon/dist/domain/rig-teardown.d.ts.map +1 -1
- package/daemon/dist/domain/rig-teardown.js +5 -0
- package/daemon/dist/domain/rig-teardown.js.map +1 -1
- package/daemon/dist/domain/rigspec-codec.d.ts.map +1 -1
- package/daemon/dist/domain/rigspec-codec.js +28 -0
- package/daemon/dist/domain/rigspec-codec.js.map +1 -1
- package/daemon/dist/domain/rigspec-exporter.d.ts.map +1 -1
- package/daemon/dist/domain/rigspec-exporter.js +2 -0
- package/daemon/dist/domain/rigspec-exporter.js.map +1 -1
- package/daemon/dist/domain/rigspec-instantiator.d.ts +29 -0
- package/daemon/dist/domain/rigspec-instantiator.d.ts.map +1 -1
- package/daemon/dist/domain/rigspec-instantiator.js +194 -2
- package/daemon/dist/domain/rigspec-instantiator.js.map +1 -1
- package/daemon/dist/domain/rigspec-schema.d.ts.map +1 -1
- package/daemon/dist/domain/rigspec-schema.js +349 -0
- package/daemon/dist/domain/rigspec-schema.js.map +1 -1
- package/daemon/dist/domain/runtime-adapter.d.ts +38 -2
- package/daemon/dist/domain/runtime-adapter.d.ts.map +1 -1
- package/daemon/dist/domain/runtime-adapter.js +5 -0
- package/daemon/dist/domain/runtime-adapter.js.map +1 -1
- package/daemon/dist/domain/seat-handover-planner.d.ts +84 -0
- package/daemon/dist/domain/seat-handover-planner.d.ts.map +1 -0
- package/daemon/dist/domain/seat-handover-planner.js +188 -0
- package/daemon/dist/domain/seat-handover-planner.js.map +1 -0
- package/daemon/dist/domain/seat-handover-service.d.ts +104 -0
- package/daemon/dist/domain/seat-handover-service.d.ts.map +1 -0
- package/daemon/dist/domain/seat-handover-service.js +343 -0
- package/daemon/dist/domain/seat-handover-service.js.map +1 -0
- package/daemon/dist/domain/seat-status-service.d.ts +50 -0
- package/daemon/dist/domain/seat-status-service.d.ts.map +1 -0
- package/daemon/dist/domain/seat-status-service.js +66 -0
- package/daemon/dist/domain/seat-status-service.js.map +1 -0
- package/daemon/dist/domain/session-source-rebuild-resolver.d.ts +53 -0
- package/daemon/dist/domain/session-source-rebuild-resolver.d.ts.map +1 -0
- package/daemon/dist/domain/session-source-rebuild-resolver.js +59 -0
- package/daemon/dist/domain/session-source-rebuild-resolver.js.map +1 -0
- package/daemon/dist/domain/session-transport.d.ts +30 -0
- package/daemon/dist/domain/session-transport.d.ts.map +1 -1
- package/daemon/dist/domain/session-transport.js +322 -12
- package/daemon/dist/domain/session-transport.js.map +1 -1
- package/daemon/dist/domain/skill-discovery.d.ts +51 -0
- package/daemon/dist/domain/skill-discovery.d.ts.map +1 -0
- package/daemon/dist/domain/skill-discovery.js +144 -0
- package/daemon/dist/domain/skill-discovery.js.map +1 -0
- package/daemon/dist/domain/slices/slice-detail-projector.d.ts +182 -0
- package/daemon/dist/domain/slices/slice-detail-projector.d.ts.map +1 -0
- package/daemon/dist/domain/slices/slice-detail-projector.js +508 -0
- package/daemon/dist/domain/slices/slice-detail-projector.js.map +1 -0
- package/daemon/dist/domain/slices/slice-indexer.d.ts +118 -0
- package/daemon/dist/domain/slices/slice-indexer.d.ts.map +1 -0
- package/daemon/dist/domain/slices/slice-indexer.js +503 -0
- package/daemon/dist/domain/slices/slice-indexer.js.map +1 -0
- package/daemon/dist/domain/snapshot-repository.d.ts +18 -0
- package/daemon/dist/domain/snapshot-repository.d.ts.map +1 -1
- package/daemon/dist/domain/snapshot-repository.js +77 -0
- package/daemon/dist/domain/snapshot-repository.js.map +1 -1
- package/daemon/dist/domain/spec-library-service.d.ts +17 -2
- package/daemon/dist/domain/spec-library-service.d.ts.map +1 -1
- package/daemon/dist/domain/spec-library-service.js +31 -1
- package/daemon/dist/domain/spec-library-service.js.map +1 -1
- package/daemon/dist/domain/spec-library-workflow-scanner.d.ts +81 -0
- package/daemon/dist/domain/spec-library-workflow-scanner.d.ts.map +1 -0
- package/daemon/dist/domain/spec-library-workflow-scanner.js +171 -0
- package/daemon/dist/domain/spec-library-workflow-scanner.js.map +1 -0
- package/daemon/dist/domain/startup-orchestrator.d.ts +22 -3
- package/daemon/dist/domain/startup-orchestrator.d.ts.map +1 -1
- package/daemon/dist/domain/startup-orchestrator.js +31 -5
- package/daemon/dist/domain/startup-orchestrator.js.map +1 -1
- package/daemon/dist/domain/startup-validation.d.ts.map +1 -1
- package/daemon/dist/domain/startup-validation.js +57 -11
- package/daemon/dist/domain/startup-validation.js.map +1 -1
- package/daemon/dist/domain/steering/health-summary.d.ts +39 -0
- package/daemon/dist/domain/steering/health-summary.d.ts.map +1 -0
- package/daemon/dist/domain/steering/health-summary.js +100 -0
- package/daemon/dist/domain/steering/health-summary.js.map +1 -0
- package/daemon/dist/domain/steering/steering-composer.d.ts +102 -0
- package/daemon/dist/domain/steering/steering-composer.d.ts.map +1 -0
- package/daemon/dist/domain/steering/steering-composer.js +263 -0
- package/daemon/dist/domain/steering/steering-composer.js.map +1 -0
- package/daemon/dist/domain/stream-store.d.ts +56 -0
- package/daemon/dist/domain/stream-store.d.ts.map +1 -0
- package/daemon/dist/domain/stream-store.js +108 -0
- package/daemon/dist/domain/stream-store.js.map +1 -0
- package/daemon/dist/domain/transcript-capture.d.ts.map +1 -1
- package/daemon/dist/domain/transcript-capture.js +7 -4
- package/daemon/dist/domain/transcript-capture.js.map +1 -1
- package/daemon/dist/domain/transcript-redaction.d.ts +13 -0
- package/daemon/dist/domain/transcript-redaction.d.ts.map +1 -0
- package/daemon/dist/domain/transcript-redaction.js +34 -0
- package/daemon/dist/domain/transcript-redaction.js.map +1 -0
- package/daemon/dist/domain/transcript-rotation.d.ts +29 -0
- package/daemon/dist/domain/transcript-rotation.d.ts.map +1 -0
- package/daemon/dist/domain/transcript-rotation.js +109 -0
- package/daemon/dist/domain/transcript-rotation.js.map +1 -0
- package/daemon/dist/domain/transcript-store.d.ts +15 -0
- package/daemon/dist/domain/transcript-store.d.ts.map +1 -1
- package/daemon/dist/domain/transcript-store.js +64 -2
- package/daemon/dist/domain/transcript-store.js.map +1 -1
- package/daemon/dist/domain/types.d.ts +416 -4
- package/daemon/dist/domain/types.d.ts.map +1 -1
- package/daemon/dist/domain/types.js +8 -1
- package/daemon/dist/domain/types.js.map +1 -1
- package/daemon/dist/domain/user-settings/settings-store.d.ts +42 -0
- package/daemon/dist/domain/user-settings/settings-store.d.ts.map +1 -0
- package/daemon/dist/domain/user-settings/settings-store.js +364 -0
- package/daemon/dist/domain/user-settings/settings-store.js.map +1 -0
- package/daemon/dist/domain/view-event-bridge.d.ts +12 -0
- package/daemon/dist/domain/view-event-bridge.d.ts.map +1 -0
- package/daemon/dist/domain/view-event-bridge.js +91 -0
- package/daemon/dist/domain/view-event-bridge.js.map +1 -0
- package/daemon/dist/domain/view-projector.d.ts +83 -0
- package/daemon/dist/domain/view-projector.d.ts.map +1 -0
- package/daemon/dist/domain/view-projector.js +296 -0
- package/daemon/dist/domain/view-projector.js.map +1 -0
- package/daemon/dist/domain/watchdog-history-log.d.ts +49 -0
- package/daemon/dist/domain/watchdog-history-log.d.ts.map +1 -0
- package/daemon/dist/domain/watchdog-history-log.js +67 -0
- package/daemon/dist/domain/watchdog-history-log.js.map +1 -0
- package/daemon/dist/domain/watchdog-jobs-repository.d.ts +81 -0
- package/daemon/dist/domain/watchdog-jobs-repository.d.ts.map +1 -0
- package/daemon/dist/domain/watchdog-jobs-repository.js +164 -0
- package/daemon/dist/domain/watchdog-jobs-repository.js.map +1 -0
- package/daemon/dist/domain/watchdog-policy-engine.d.ts +92 -0
- package/daemon/dist/domain/watchdog-policy-engine.d.ts.map +1 -0
- package/daemon/dist/domain/watchdog-policy-engine.js +442 -0
- package/daemon/dist/domain/watchdog-policy-engine.js.map +1 -0
- package/daemon/dist/domain/watchdog-scheduler.d.ts +76 -0
- package/daemon/dist/domain/watchdog-scheduler.d.ts.map +1 -0
- package/daemon/dist/domain/watchdog-scheduler.js +112 -0
- package/daemon/dist/domain/watchdog-scheduler.js.map +1 -0
- package/daemon/dist/domain/whoami-service.d.ts +29 -0
- package/daemon/dist/domain/whoami-service.d.ts.map +1 -1
- package/daemon/dist/domain/whoami-service.js +68 -0
- package/daemon/dist/domain/whoami-service.js.map +1 -1
- package/daemon/dist/domain/workflow/slice-workflow-binding.d.ts +21 -0
- package/daemon/dist/domain/workflow/slice-workflow-binding.d.ts.map +1 -0
- package/daemon/dist/domain/workflow/slice-workflow-binding.js +103 -0
- package/daemon/dist/domain/workflow/slice-workflow-binding.js.map +1 -0
- package/daemon/dist/domain/workflow/slice-workflow-projection.d.ts +81 -0
- package/daemon/dist/domain/workflow/slice-workflow-projection.d.ts.map +1 -0
- package/daemon/dist/domain/workflow/slice-workflow-projection.js +127 -0
- package/daemon/dist/domain/workflow/slice-workflow-projection.js.map +1 -0
- package/daemon/dist/domain/workflow/starter-spec-loader.d.ts +51 -0
- package/daemon/dist/domain/workflow/starter-spec-loader.d.ts.map +1 -0
- package/daemon/dist/domain/workflow/starter-spec-loader.js +140 -0
- package/daemon/dist/domain/workflow/starter-spec-loader.js.map +1 -0
- package/daemon/dist/domain/workflow-instance-store.d.ts +46 -0
- package/daemon/dist/domain/workflow-instance-store.d.ts.map +1 -0
- package/daemon/dist/domain/workflow-instance-store.js +116 -0
- package/daemon/dist/domain/workflow-instance-store.js.map +1 -0
- package/daemon/dist/domain/workflow-projector.d.ts +64 -0
- package/daemon/dist/domain/workflow-projector.d.ts.map +1 -0
- package/daemon/dist/domain/workflow-projector.js +432 -0
- package/daemon/dist/domain/workflow-projector.js.map +1 -0
- package/daemon/dist/domain/workflow-runtime.d.ts +63 -0
- package/daemon/dist/domain/workflow-runtime.d.ts.map +1 -0
- package/daemon/dist/domain/workflow-runtime.js +150 -0
- package/daemon/dist/domain/workflow-runtime.js.map +1 -0
- package/daemon/dist/domain/workflow-spec-cache.d.ts +42 -0
- package/daemon/dist/domain/workflow-spec-cache.d.ts.map +1 -0
- package/daemon/dist/domain/workflow-spec-cache.js +218 -0
- package/daemon/dist/domain/workflow-spec-cache.js.map +1 -0
- package/daemon/dist/domain/workflow-step-trail-log.d.ts +27 -0
- package/daemon/dist/domain/workflow-step-trail-log.d.ts.map +1 -0
- package/daemon/dist/domain/workflow-step-trail-log.js +73 -0
- package/daemon/dist/domain/workflow-step-trail-log.js.map +1 -0
- package/daemon/dist/domain/workflow-types.d.ts +108 -0
- package/daemon/dist/domain/workflow-types.d.ts.map +1 -0
- package/daemon/dist/domain/workflow-types.js +11 -0
- package/daemon/dist/domain/workflow-types.js.map +1 -0
- package/daemon/dist/domain/workflow-validator.d.ts +31 -0
- package/daemon/dist/domain/workflow-validator.d.ts.map +1 -0
- package/daemon/dist/domain/workflow-validator.js +115 -0
- package/daemon/dist/domain/workflow-validator.js.map +1 -0
- package/daemon/dist/domain/workspace/default-workspace-scaffold.d.ts +6 -0
- package/daemon/dist/domain/workspace/default-workspace-scaffold.d.ts.map +1 -0
- package/daemon/dist/domain/workspace/default-workspace-scaffold.js +207 -0
- package/daemon/dist/domain/workspace/default-workspace-scaffold.js.map +1 -0
- package/daemon/dist/domain/workspace/frontmatter-validator.d.ts +40 -0
- package/daemon/dist/domain/workspace/frontmatter-validator.d.ts.map +1 -0
- package/daemon/dist/domain/workspace/frontmatter-validator.js +185 -0
- package/daemon/dist/domain/workspace/frontmatter-validator.js.map +1 -0
- package/daemon/dist/domain/workspace/workspace-resolver.d.ts +25 -0
- package/daemon/dist/domain/workspace/workspace-resolver.d.ts.map +1 -0
- package/daemon/dist/domain/workspace/workspace-resolver.js +86 -0
- package/daemon/dist/domain/workspace/workspace-resolver.js.map +1 -0
- package/daemon/dist/index.d.ts.map +1 -1
- package/daemon/dist/index.js +30 -2
- package/daemon/dist/index.js.map +1 -1
- package/daemon/dist/middleware/auth-bearer-token.d.ts +49 -0
- package/daemon/dist/middleware/auth-bearer-token.d.ts.map +1 -0
- package/daemon/dist/middleware/auth-bearer-token.js +135 -0
- package/daemon/dist/middleware/auth-bearer-token.js.map +1 -0
- package/daemon/dist/openrig-compat.d.ts +1 -1
- package/daemon/dist/openrig-compat.d.ts.map +1 -1
- package/daemon/dist/openrig-compat.js +6 -4
- package/daemon/dist/openrig-compat.js.map +1 -1
- package/daemon/dist/routes/activity.d.ts +3 -0
- package/daemon/dist/routes/activity.d.ts.map +1 -0
- package/daemon/dist/routes/activity.js +47 -0
- package/daemon/dist/routes/activity.js.map +1 -0
- package/daemon/dist/routes/agent-images.d.ts +8 -0
- package/daemon/dist/routes/agent-images.d.ts.map +1 -0
- package/daemon/dist/routes/agent-images.js +253 -0
- package/daemon/dist/routes/agent-images.js.map +1 -0
- package/daemon/dist/routes/config.d.ts +3 -0
- package/daemon/dist/routes/config.d.ts.map +1 -0
- package/daemon/dist/routes/config.js +109 -0
- package/daemon/dist/routes/config.js.map +1 -0
- package/daemon/dist/routes/context-packs.d.ts +3 -0
- package/daemon/dist/routes/context-packs.d.ts.map +1 -0
- package/daemon/dist/routes/context-packs.js +129 -0
- package/daemon/dist/routes/context-packs.js.map +1 -0
- package/daemon/dist/routes/files.d.ts +17 -0
- package/daemon/dist/routes/files.d.ts.map +1 -0
- package/daemon/dist/routes/files.js +262 -0
- package/daemon/dist/routes/files.js.map +1 -0
- package/daemon/dist/routes/health-summary.d.ts +9 -0
- package/daemon/dist/routes/health-summary.d.ts.map +1 -0
- package/daemon/dist/routes/health-summary.js +33 -0
- package/daemon/dist/routes/health-summary.js.map +1 -0
- package/daemon/dist/routes/mission-control.d.ts +37 -0
- package/daemon/dist/routes/mission-control.d.ts.map +1 -0
- package/daemon/dist/routes/mission-control.js +283 -0
- package/daemon/dist/routes/mission-control.js.map +1 -0
- package/daemon/dist/routes/progress.d.ts +7 -0
- package/daemon/dist/routes/progress.d.ts.map +1 -0
- package/daemon/dist/routes/progress.js +33 -0
- package/daemon/dist/routes/progress.js.map +1 -0
- package/daemon/dist/routes/projects.d.ts +12 -0
- package/daemon/dist/routes/projects.d.ts.map +1 -0
- package/daemon/dist/routes/projects.js +178 -0
- package/daemon/dist/routes/projects.js.map +1 -0
- package/daemon/dist/routes/queue.d.ts +10 -0
- package/daemon/dist/routes/queue.d.ts.map +1 -0
- package/daemon/dist/routes/queue.js +425 -0
- package/daemon/dist/routes/queue.js.map +1 -0
- package/daemon/dist/routes/restore-check.d.ts +3 -0
- package/daemon/dist/routes/restore-check.d.ts.map +1 -0
- package/daemon/dist/routes/restore-check.js +200 -0
- package/daemon/dist/routes/restore-check.js.map +1 -0
- package/daemon/dist/routes/rigs.d.ts +3 -0
- package/daemon/dist/routes/rigs.d.ts.map +1 -1
- package/daemon/dist/routes/rigs.js +131 -9
- package/daemon/dist/routes/rigs.js.map +1 -1
- package/daemon/dist/routes/rigspec.js +6 -3
- package/daemon/dist/routes/rigspec.js.map +1 -1
- package/daemon/dist/routes/seat.d.ts +3 -0
- package/daemon/dist/routes/seat.d.ts.map +1 -0
- package/daemon/dist/routes/seat.js +69 -0
- package/daemon/dist/routes/seat.js.map +1 -0
- package/daemon/dist/routes/sessions.d.ts.map +1 -1
- package/daemon/dist/routes/sessions.js +144 -4
- package/daemon/dist/routes/sessions.js.map +1 -1
- package/daemon/dist/routes/slices.d.ts +9 -0
- package/daemon/dist/routes/slices.d.ts.map +1 -0
- package/daemon/dist/routes/slices.js +192 -0
- package/daemon/dist/routes/slices.js.map +1 -0
- package/daemon/dist/routes/snapshots.js +66 -29
- package/daemon/dist/routes/snapshots.js.map +1 -1
- package/daemon/dist/routes/spec-library.d.ts.map +1 -1
- package/daemon/dist/routes/spec-library.js +72 -5
- package/daemon/dist/routes/spec-library.js.map +1 -1
- package/daemon/dist/routes/steering.d.ts +7 -0
- package/daemon/dist/routes/steering.d.ts.map +1 -0
- package/daemon/dist/routes/steering.js +27 -0
- package/daemon/dist/routes/steering.js.map +1 -0
- package/daemon/dist/routes/stream.d.ts +9 -0
- package/daemon/dist/routes/stream.d.ts.map +1 -0
- package/daemon/dist/routes/stream.js +119 -0
- package/daemon/dist/routes/stream.js.map +1 -0
- package/daemon/dist/routes/transcripts.d.ts.map +1 -1
- package/daemon/dist/routes/transcripts.js +38 -0
- package/daemon/dist/routes/transcripts.js.map +1 -1
- package/daemon/dist/routes/transport.d.ts.map +1 -1
- package/daemon/dist/routes/transport.js +21 -0
- package/daemon/dist/routes/transport.js.map +1 -1
- package/daemon/dist/routes/up.d.ts.map +1 -1
- package/daemon/dist/routes/up.js +43 -4
- package/daemon/dist/routes/up.js.map +1 -1
- package/daemon/dist/routes/views.d.ts +13 -0
- package/daemon/dist/routes/views.d.ts.map +1 -0
- package/daemon/dist/routes/views.js +120 -0
- package/daemon/dist/routes/views.js.map +1 -0
- package/daemon/dist/routes/watchdog.d.ts +18 -0
- package/daemon/dist/routes/watchdog.d.ts.map +1 -0
- package/daemon/dist/routes/watchdog.js +148 -0
- package/daemon/dist/routes/watchdog.js.map +1 -0
- package/daemon/dist/routes/whoami.d.ts.map +1 -1
- package/daemon/dist/routes/whoami.js +6 -1
- package/daemon/dist/routes/whoami.js.map +1 -1
- package/daemon/dist/routes/workflow.d.ts +20 -0
- package/daemon/dist/routes/workflow.d.ts.map +1 -0
- package/daemon/dist/routes/workflow.js +227 -0
- package/daemon/dist/routes/workflow.js.map +1 -0
- package/daemon/dist/routes/workspace.d.ts +3 -0
- package/daemon/dist/routes/workspace.d.ts.map +1 -0
- package/daemon/dist/routes/workspace.js +53 -0
- package/daemon/dist/routes/workspace.js.map +1 -0
- package/daemon/dist/server.d.ts +81 -0
- package/daemon/dist/server.d.ts.map +1 -1
- package/daemon/dist/server.js +85 -1
- package/daemon/dist/server.js.map +1 -1
- package/daemon/dist/startup.d.ts +9 -0
- package/daemon/dist/startup.d.ts.map +1 -1
- package/daemon/dist/startup.js +585 -8
- package/daemon/dist/startup.js.map +1 -1
- package/daemon/docs/reference/agent-spec.md +19 -12
- package/daemon/docs/reference/agent-startup-guide.md +11 -11
- package/daemon/docs/reference/project-workspace.md +102 -0
- package/daemon/specs/agents/apps/vault-specialist/agent.yaml +2 -2
- package/daemon/specs/agents/apps/vault-specialist/guidance/role.md +0 -1
- package/daemon/specs/agents/conveyor/builder/agent.yaml +35 -0
- package/daemon/specs/agents/conveyor/builder/guidance/role.md +31 -0
- package/daemon/specs/agents/conveyor/builder/startup/context.md +9 -0
- package/daemon/specs/agents/conveyor/lead/agent.yaml +35 -0
- package/daemon/specs/agents/conveyor/lead/guidance/role.md +34 -0
- package/daemon/specs/agents/conveyor/lead/startup/context.md +15 -0
- package/daemon/specs/agents/conveyor/planner/agent.yaml +35 -0
- package/daemon/specs/agents/conveyor/planner/guidance/role.md +29 -0
- package/daemon/specs/agents/conveyor/planner/startup/context.md +12 -0
- package/daemon/specs/agents/conveyor/reviewer/agent.yaml +35 -0
- package/daemon/specs/agents/conveyor/reviewer/guidance/role.md +29 -0
- package/daemon/specs/agents/conveyor/reviewer/startup/context.md +10 -0
- package/daemon/specs/agents/design/product-designer/agent.yaml +1 -1
- package/daemon/specs/agents/development/implementer/agent.yaml +2 -2
- package/daemon/specs/agents/development/implementer/guidance/role.md +0 -1
- package/daemon/specs/agents/development/qa/agent.yaml +1 -1
- package/daemon/specs/agents/orchestration/orchestrator/agent.yaml +2 -2
- package/daemon/specs/agents/orchestration/orchestrator/guidance/role.md +2 -3
- package/daemon/specs/agents/product-management/pm/agent.yaml +4 -0
- package/daemon/specs/agents/research/analyst/agent.yaml +1 -1
- package/daemon/specs/agents/research/synthesizer/agent.yaml +1 -1
- package/daemon/specs/agents/review/independent-reviewer/agent.yaml +1 -1
- package/daemon/specs/agents/shared/agent.yaml +17 -2
- package/daemon/specs/agents/shared/runtime/claude-mcp.fragment.json +12 -0
- package/daemon/specs/agents/shared/runtime/claude-settings.fragment.json +16 -0
- package/daemon/specs/agents/shared/runtime/codex-config.fragment.toml +5 -0
- package/daemon/specs/agents/shared/skills/claude-compact-in-place/SKILL.md +100 -0
- package/daemon/specs/agents/shared/skills/core/openrig-operator/SKILL.md +110 -0
- package/daemon/specs/agents/shared/skills/core/openrig-user/SKILL.md +69 -1
- package/daemon/specs/agents/shared/skills/core/openrig-user-settings/SKILL.md +153 -0
- package/daemon/specs/agents/shared/skills/pods/orchestration-team/SKILL.md +3 -0
- package/daemon/specs/agents/shared/skills/rig-architect/SKILL.md +11 -1
- package/daemon/specs/rigs/launch/conveyor/CULTURE.md +34 -0
- package/daemon/specs/rigs/launch/conveyor/README.md +33 -0
- package/daemon/specs/rigs/launch/conveyor/rig.yaml +72 -0
- package/daemon/specs/rigs/preview/product-team/CULTURE.md +2 -2
- package/daemon/specs/rigs/preview/product-team/rig.yaml +3 -4
- package/dist/bin-wrapper.js +0 -0
- package/dist/commands/agent-image.d.ts +4 -0
- package/dist/commands/agent-image.d.ts.map +1 -0
- package/dist/commands/agent-image.js +352 -0
- package/dist/commands/agent-image.js.map +1 -0
- package/dist/commands/capture.d.ts +7 -1
- package/dist/commands/capture.d.ts.map +1 -1
- package/dist/commands/capture.js +59 -1
- package/dist/commands/capture.js.map +1 -1
- package/dist/commands/compact-plan.d.ts +9 -0
- package/dist/commands/compact-plan.d.ts.map +1 -0
- package/dist/commands/compact-plan.js +354 -0
- package/dist/commands/compact-plan.js.map +1 -0
- package/dist/commands/config-init-workspace.d.ts +35 -0
- package/dist/commands/config-init-workspace.d.ts.map +1 -0
- package/dist/commands/config-init-workspace.js +300 -0
- package/dist/commands/config-init-workspace.js.map +1 -0
- package/dist/commands/config.d.ts.map +1 -1
- package/dist/commands/config.js +78 -18
- package/dist/commands/config.js.map +1 -1
- package/dist/commands/context-pack.d.ts +4 -0
- package/dist/commands/context-pack.d.ts.map +1 -0
- package/dist/commands/context-pack.js +357 -0
- package/dist/commands/context-pack.js.map +1 -0
- package/dist/commands/context.d.ts +9 -0
- package/dist/commands/context.d.ts.map +1 -0
- package/dist/commands/context.js +220 -0
- package/dist/commands/context.js.map +1 -0
- package/dist/commands/daemon.d.ts.map +1 -1
- package/dist/commands/daemon.js +8 -0
- package/dist/commands/daemon.js.map +1 -1
- package/dist/commands/expand.d.ts.map +1 -1
- package/dist/commands/expand.js +15 -4
- package/dist/commands/expand.js.map +1 -1
- package/dist/commands/heartbeat.d.ts +99 -0
- package/dist/commands/heartbeat.d.ts.map +1 -0
- package/dist/commands/heartbeat.js +393 -0
- package/dist/commands/heartbeat.js.map +1 -0
- package/dist/commands/import.d.ts.map +1 -1
- package/dist/commands/import.js +7 -2
- package/dist/commands/import.js.map +1 -1
- package/dist/commands/project.d.ts +14 -0
- package/dist/commands/project.d.ts.map +1 -0
- package/dist/commands/project.js +157 -0
- package/dist/commands/project.js.map +1 -0
- package/dist/commands/ps.d.ts +20 -3
- package/dist/commands/ps.d.ts.map +1 -1
- package/dist/commands/ps.js +614 -33
- package/dist/commands/ps.js.map +1 -1
- package/dist/commands/queue.d.ts +16 -0
- package/dist/commands/queue.d.ts.map +1 -0
- package/dist/commands/queue.js +410 -0
- package/dist/commands/queue.js.map +1 -0
- package/dist/commands/restore-check.d.ts +9 -0
- package/dist/commands/restore-check.d.ts.map +1 -0
- package/dist/commands/restore-check.js +234 -0
- package/dist/commands/restore-check.js.map +1 -0
- package/dist/commands/restore-packet.d.ts +9 -0
- package/dist/commands/restore-packet.d.ts.map +1 -0
- package/dist/commands/restore-packet.js +383 -0
- package/dist/commands/restore-packet.js.map +1 -0
- package/dist/commands/restore.d.ts.map +1 -1
- package/dist/commands/restore.js +44 -1
- package/dist/commands/restore.js.map +1 -1
- package/dist/commands/seat.d.ts +5 -0
- package/dist/commands/seat.d.ts.map +1 -0
- package/dist/commands/seat.js +170 -0
- package/dist/commands/seat.js.map +1 -0
- package/dist/commands/send.d.ts +19 -1
- package/dist/commands/send.d.ts.map +1 -1
- package/dist/commands/send.js +116 -5
- package/dist/commands/send.js.map +1 -1
- package/dist/commands/setup.js +3 -3
- package/dist/commands/setup.js.map +1 -1
- package/dist/commands/specs.d.ts +4 -2
- package/dist/commands/specs.d.ts.map +1 -1
- package/dist/commands/specs.js +111 -24
- package/dist/commands/specs.js.map +1 -1
- package/dist/commands/stream.d.ts +12 -0
- package/dist/commands/stream.d.ts.map +1 -0
- package/dist/commands/stream.js +111 -0
- package/dist/commands/stream.js.map +1 -0
- package/dist/commands/up.d.ts.map +1 -1
- package/dist/commands/up.js +79 -5
- package/dist/commands/up.js.map +1 -1
- package/dist/commands/view.d.ts +12 -0
- package/dist/commands/view.d.ts.map +1 -0
- package/dist/commands/view.js +82 -0
- package/dist/commands/view.js.map +1 -0
- package/dist/commands/watchdog.d.ts +15 -0
- package/dist/commands/watchdog.d.ts.map +1 -0
- package/dist/commands/watchdog.js +120 -0
- package/dist/commands/watchdog.js.map +1 -0
- package/dist/commands/whoami.d.ts +8 -1
- package/dist/commands/whoami.d.ts.map +1 -1
- package/dist/commands/whoami.js +69 -5
- package/dist/commands/whoami.js.map +1 -1
- package/dist/commands/workflow.d.ts +17 -0
- package/dist/commands/workflow.d.ts.map +1 -0
- package/dist/commands/workflow.js +175 -0
- package/dist/commands/workflow.js.map +1 -0
- package/dist/commands/workspace.d.ts +6 -0
- package/dist/commands/workspace.d.ts.map +1 -0
- package/dist/commands/workspace.js +83 -0
- package/dist/commands/workspace.js.map +1 -0
- package/dist/config-store.d.ts +73 -1
- package/dist/config-store.d.ts.map +1 -1
- package/dist/config-store.js +314 -42
- package/dist/config-store.js.map +1 -1
- package/dist/cross-host-cli-helpers.d.ts +12 -0
- package/dist/cross-host-cli-helpers.d.ts.map +1 -0
- package/dist/cross-host-cli-helpers.js +48 -0
- package/dist/cross-host-cli-helpers.js.map +1 -0
- package/dist/cross-host-executor.d.ts +84 -0
- package/dist/cross-host-executor.d.ts.map +1 -0
- package/dist/cross-host-executor.js +138 -0
- package/dist/cross-host-executor.js.map +1 -0
- package/dist/daemon-lifecycle.d.ts +22 -0
- package/dist/daemon-lifecycle.d.ts.map +1 -1
- package/dist/daemon-lifecycle.js +41 -0
- package/dist/daemon-lifecycle.js.map +1 -1
- package/dist/host-registry.d.ts +50 -0
- package/dist/host-registry.d.ts.map +1 -0
- package/dist/host-registry.js +116 -0
- package/dist/host-registry.js.map +1 -0
- package/dist/index.d.ts +24 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +30 -0
- package/dist/index.js.map +1 -1
- package/dist/mcp-server.d.ts.map +1 -1
- package/dist/mcp-server.js +22 -2
- package/dist/mcp-server.js.map +1 -1
- package/dist/openrig-compat.d.ts +1 -1
- package/dist/openrig-compat.d.ts.map +1 -1
- package/dist/openrig-compat.js +6 -4
- package/dist/openrig-compat.js.map +1 -1
- package/dist/restore-packet/claude-transcript-parser.d.ts +12 -0
- package/dist/restore-packet/claude-transcript-parser.d.ts.map +1 -0
- package/dist/restore-packet/claude-transcript-parser.js +221 -0
- package/dist/restore-packet/claude-transcript-parser.js.map +1 -0
- package/dist/restore-packet/codex-jsonl-parser.d.ts +11 -0
- package/dist/restore-packet/codex-jsonl-parser.d.ts.map +1 -0
- package/dist/restore-packet/codex-jsonl-parser.js +159 -0
- package/dist/restore-packet/codex-jsonl-parser.js.map +1 -0
- package/dist/restore-packet/omitted-records.d.ts +60 -0
- package/dist/restore-packet/omitted-records.d.ts.map +1 -0
- package/dist/restore-packet/omitted-records.js +116 -0
- package/dist/restore-packet/omitted-records.js.map +1 -0
- package/dist/restore-packet/packet-writer.d.ts +59 -0
- package/dist/restore-packet/packet-writer.d.ts.map +1 -0
- package/dist/restore-packet/packet-writer.js +224 -0
- package/dist/restore-packet/packet-writer.js.map +1 -0
- package/dist/restore-packet/redaction.d.ts +30 -0
- package/dist/restore-packet/redaction.d.ts.map +1 -0
- package/dist/restore-packet/redaction.js +71 -0
- package/dist/restore-packet/redaction.js.map +1 -0
- package/dist/restore-packet/runtime-detect.d.ts +19 -0
- package/dist/restore-packet/runtime-detect.d.ts.map +1 -0
- package/dist/restore-packet/runtime-detect.js +81 -0
- package/dist/restore-packet/runtime-detect.js.map +1 -0
- package/dist/restore-packet/schema-validator.d.ts +13 -0
- package/dist/restore-packet/schema-validator.d.ts.map +1 -0
- package/dist/restore-packet/schema-validator.js +245 -0
- package/dist/restore-packet/schema-validator.js.map +1 -0
- package/dist/restore-packet/types.d.ts +76 -0
- package/dist/restore-packet/types.d.ts.map +1 -0
- package/dist/restore-packet/types.js +15 -0
- package/dist/restore-packet/types.js.map +1 -0
- package/dist/schemas/restore-summary.schema.json +98 -0
- package/package.json +10 -3
- package/scripts/check-abi.mjs +123 -0
- package/ui/dist/assets/index-BDHU1JUK.js +412 -0
- package/ui/dist/assets/index-DXTyJSqu.css +1 -0
- package/ui/dist/graphics/operator-climber-monochrome.png +0 -0
- package/ui/dist/index.html +3 -2
- package/daemon/specs/agents/shared/skills/mental-model-ha/SKILL.md +0 -953
- package/ui/dist/assets/index-B09doO8H.js +0 -139
- package/ui/dist/assets/index-Ccd-jwRN.js +0 -225
- package/ui/dist/assets/index-DlMH-REm.css +0 -1
package/dist/commands/ps.js
CHANGED
|
@@ -2,40 +2,447 @@ import { Command } from "commander";
|
|
|
2
2
|
import { DaemonClient } from "../client.js";
|
|
3
3
|
import { getDaemonStatus, getDaemonUrl } from "../daemon-lifecycle.js";
|
|
4
4
|
import { realDeps } from "./daemon.js";
|
|
5
|
+
import { loadHostRegistry, resolveHost } from "../host-registry.js";
|
|
6
|
+
import { runCrossHostCommand } from "../cross-host-executor.js";
|
|
7
|
+
import { emitCrossHostError, emitCrossHostFailure } from "../cross-host-cli-helpers.js";
|
|
8
|
+
// L3-followup: human-output budgets bound default terminal output for hosts
|
|
9
|
+
// with realistic agent counts. `--full` opts out. JSON output remains
|
|
10
|
+
// unbounded by default for back-compat (Decision C hybrid).
|
|
11
|
+
const HUMAN_RIG_BUDGET = 50;
|
|
12
|
+
const HUMAN_NODE_BUDGET = 100;
|
|
13
|
+
// L3-followup: --filter accepts only this allow-list. Unknown keys produce a
|
|
14
|
+
// clear error with the supported list (Guard Review Checklist: filter-parser
|
|
15
|
+
// security).
|
|
16
|
+
//
|
|
17
|
+
// PL-019 item 1: extends the allow-list with the nested key `agentActivity.state`.
|
|
18
|
+
// This is the only nested filter key v0 supports; the parser checks for the
|
|
19
|
+
// dotted form explicitly. Bare `agentActivity` is intentionally NOT a filter
|
|
20
|
+
// key — it's an object, not a scalar; project it via --fields if you need it.
|
|
21
|
+
const ALLOWED_FILTER_KEYS = new Set([
|
|
22
|
+
"status",
|
|
23
|
+
"lifecycleState",
|
|
24
|
+
"name-prefix",
|
|
25
|
+
"name",
|
|
26
|
+
"agentActivity.state",
|
|
27
|
+
// PL-012: context-usage filters. percent is numeric (>=, >, <=, <, =);
|
|
28
|
+
// state is enum (critical / warning / low / unknown — lockstep with
|
|
29
|
+
// computeContextHealthSummary tier vocabulary).
|
|
30
|
+
"contextUsage.percent",
|
|
31
|
+
"contextUsage.state",
|
|
32
|
+
]);
|
|
33
|
+
// PL-019 item 1: when filter key is `agentActivity.state`, the value is
|
|
34
|
+
// validated against the AgentActivityState enum. Invalid values produce a
|
|
35
|
+
// three-part error (what failed / what's allowed / what to do).
|
|
36
|
+
const ALLOWED_AGENT_ACTIVITY_STATES = new Set(["running", "needs_input", "idle", "unknown"]);
|
|
37
|
+
// PL-012: ALLOWED_CONTEXT_USAGE_STATES — must stay lockstep with the
|
|
38
|
+
// daemon's computeContextHealthSummary urgency vocab.
|
|
39
|
+
const ALLOWED_CONTEXT_USAGE_STATES = new Set(["critical", "warning", "low", "unknown"]);
|
|
40
|
+
const NUMERIC_FILTER_KEYS = new Set(["contextUsage.percent"]);
|
|
41
|
+
const NUMERIC_OPERATORS = [">=", "<=", ">", "<", "="];
|
|
42
|
+
// C9a: --fields accepts a per-level allow-list. Unknown keys produce a clear
|
|
43
|
+
// error with the supported list, mirroring the --filter rejection pattern.
|
|
44
|
+
// Per-level because rig and node entries have different schemas (PsEntry
|
|
45
|
+
// rig-level vs NodeEntry node-level).
|
|
46
|
+
//
|
|
47
|
+
// Source of truth: PsEntry / NodeEntry interfaces above. `name` exists at
|
|
48
|
+
// rig-level only; `rigName` is the alias and exists at both levels (per the
|
|
49
|
+
// closed `rig ps trust and scale-safety` slice at openrig 0a9fb43).
|
|
50
|
+
const ALLOWED_RIG_FIELDS = new Set([
|
|
51
|
+
"rigId",
|
|
52
|
+
"name",
|
|
53
|
+
"rigName",
|
|
54
|
+
"nodeCount",
|
|
55
|
+
"runningCount",
|
|
56
|
+
"status",
|
|
57
|
+
"lifecycleState",
|
|
58
|
+
"uptime",
|
|
59
|
+
"latestSnapshot",
|
|
60
|
+
]);
|
|
61
|
+
const ALLOWED_NODE_FIELDS = new Set([
|
|
62
|
+
"rigId",
|
|
63
|
+
"rigName",
|
|
64
|
+
"logicalId",
|
|
65
|
+
"podId",
|
|
66
|
+
"podNamespace",
|
|
67
|
+
"canonicalSessionName",
|
|
68
|
+
"nodeKind",
|
|
69
|
+
"runtime",
|
|
70
|
+
"sessionStatus",
|
|
71
|
+
"startupStatus",
|
|
72
|
+
"restoreOutcome",
|
|
73
|
+
"lifecycleState",
|
|
74
|
+
"tmuxAttachCommand",
|
|
75
|
+
"resumeCommand",
|
|
76
|
+
"latestError",
|
|
77
|
+
"agentActivity",
|
|
78
|
+
"contextUsage",
|
|
79
|
+
]);
|
|
80
|
+
function parseFilter(filter) {
|
|
81
|
+
// PL-012: pre-detect numeric comparators (>=, <=, >, <, =) so callers
|
|
82
|
+
// can write `contextUsage.percent>=80`. Order matters: check >= and
|
|
83
|
+
// <= before > and < so the longer prefix wins.
|
|
84
|
+
let op = "=";
|
|
85
|
+
let opIdx = -1;
|
|
86
|
+
for (const candidate of NUMERIC_OPERATORS) {
|
|
87
|
+
const i = filter.indexOf(candidate);
|
|
88
|
+
if (i !== -1) {
|
|
89
|
+
// Prefer the leftmost match; on tie, prefer the longest comparator.
|
|
90
|
+
if (opIdx === -1 || i < opIdx || (i === opIdx && candidate.length > op.length)) {
|
|
91
|
+
opIdx = i;
|
|
92
|
+
op = candidate;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
if (opIdx === -1) {
|
|
97
|
+
return { error: `--filter must be key<op>value (op = ${NUMERIC_OPERATORS.join(", ")}); got: '${filter}'` };
|
|
98
|
+
}
|
|
99
|
+
const key = filter.slice(0, opIdx);
|
|
100
|
+
const value = filter.slice(opIdx + op.length);
|
|
101
|
+
if (!ALLOWED_FILTER_KEYS.has(key)) {
|
|
102
|
+
return {
|
|
103
|
+
error: `Unknown --filter key '${key}'. Supported: ${[...ALLOWED_FILTER_KEYS].sort().join(", ")}`,
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
if (!value) {
|
|
107
|
+
return { error: `--filter value is empty for key '${key}'` };
|
|
108
|
+
}
|
|
109
|
+
// PL-012: numeric-keyed filters validate the value parses as a finite
|
|
110
|
+
// number. Three-part error per the existing convention.
|
|
111
|
+
if (NUMERIC_FILTER_KEYS.has(key)) {
|
|
112
|
+
const numericValue = Number(value);
|
|
113
|
+
if (!Number.isFinite(numericValue)) {
|
|
114
|
+
return {
|
|
115
|
+
error: `--filter ${key}${op}'${value}' is not a numeric value. ` +
|
|
116
|
+
`Allowed: a finite number (e.g., ${key}>=80). ` +
|
|
117
|
+
`Use 'rig ps --nodes --fields contextUsage --json' to see what daemon is reporting.`,
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
return { key, value, op, numericValue };
|
|
121
|
+
}
|
|
122
|
+
// PL-012: contextUsage.state enum guard — same shape as agentActivity.state.
|
|
123
|
+
if (key === "contextUsage.state" && !ALLOWED_CONTEXT_USAGE_STATES.has(value)) {
|
|
124
|
+
return {
|
|
125
|
+
error: `--filter contextUsage.state='${value}' is not a valid context state. ` +
|
|
126
|
+
`Allowed: ${[...ALLOWED_CONTEXT_USAGE_STATES].sort().join(", ")}. ` +
|
|
127
|
+
`Use 'rig ps --nodes --fields contextUsage --json' to see what daemon is reporting.`,
|
|
128
|
+
};
|
|
129
|
+
}
|
|
130
|
+
// PL-019 item 1: agentActivity.state is enum-valued; reject invalid values
|
|
131
|
+
// up-front so operators don't get a silent empty result on a typo. Three-part
|
|
132
|
+
// shape per `feedback_smart_agents_no_bureaucracy.md`: what failed / what's
|
|
133
|
+
// allowed / what to do.
|
|
134
|
+
if (key === "agentActivity.state" && !ALLOWED_AGENT_ACTIVITY_STATES.has(value)) {
|
|
135
|
+
return {
|
|
136
|
+
error: `--filter agentActivity.state='${value}' is not a valid activity state. ` +
|
|
137
|
+
`Allowed: ${[...ALLOWED_AGENT_ACTIVITY_STATES].sort().join(", ")}. ` +
|
|
138
|
+
`Use 'rig ps --nodes --fields agentActivity --json' to see what daemon is reporting.`,
|
|
139
|
+
};
|
|
140
|
+
}
|
|
141
|
+
// Non-numeric keys must use op = "=".
|
|
142
|
+
if (op !== "=") {
|
|
143
|
+
return {
|
|
144
|
+
error: `--filter ${key}${op}... uses a numeric comparator on a non-numeric key. ` +
|
|
145
|
+
`Allowed numeric keys: ${[...NUMERIC_FILTER_KEYS].sort().join(", ")}. ` +
|
|
146
|
+
`Use ${key}=<value> for equality.`,
|
|
147
|
+
};
|
|
148
|
+
}
|
|
149
|
+
return { key, value, op };
|
|
150
|
+
}
|
|
151
|
+
// PL-012: derive a context-usage tier from a numeric percent. Lockstep
|
|
152
|
+
// with daemon-side computeContextHealthSummary thresholds.
|
|
153
|
+
function deriveContextUsageState(percent) {
|
|
154
|
+
if (typeof percent !== "number")
|
|
155
|
+
return "unknown";
|
|
156
|
+
if (percent >= 80)
|
|
157
|
+
return "critical";
|
|
158
|
+
if (percent >= 60)
|
|
159
|
+
return "warning";
|
|
160
|
+
return "low";
|
|
161
|
+
}
|
|
162
|
+
// C9a: validate --fields against a per-level allow-list. Mirrors parseFilter's
|
|
163
|
+
// shape: rejects with a sorted-supported-list error message including the
|
|
164
|
+
// unknown key(s) quoted. The level-aware "Hint" fires when an operator types
|
|
165
|
+
// `--fields name` against a node query (the most likely confusion case
|
|
166
|
+
// preserved by the rigName/name aliasing at rig-level only).
|
|
167
|
+
function parseFields(input, allowed, level) {
|
|
168
|
+
const fields = input.split(",").map((f) => f.trim()).filter((f) => f.length > 0);
|
|
169
|
+
if (fields.length === 0) {
|
|
170
|
+
return { error: `--fields cannot be empty` };
|
|
171
|
+
}
|
|
172
|
+
const unknown = fields.filter((f) => !allowed.has(f));
|
|
173
|
+
if (unknown.length > 0) {
|
|
174
|
+
const sorted = [...allowed].sort().join(", ");
|
|
175
|
+
const hint = level === "nodes" && unknown.includes("name")
|
|
176
|
+
? ` Hint: 'name' is a rig-level field; use 'rigName' for node entries.`
|
|
177
|
+
: "";
|
|
178
|
+
const keyWord = unknown.length > 1 ? "keys" : "key";
|
|
179
|
+
return {
|
|
180
|
+
error: `Unknown --fields ${keyWord} ${unknown.map((u) => `'${u}'`).join(", ")}. Supported: ${sorted}.${hint}`,
|
|
181
|
+
};
|
|
182
|
+
}
|
|
183
|
+
return fields;
|
|
184
|
+
}
|
|
185
|
+
function applyRigFilter(entries, filter) {
|
|
186
|
+
return entries.filter((e) => {
|
|
187
|
+
if (filter.key === "status")
|
|
188
|
+
return e.status === filter.value;
|
|
189
|
+
if (filter.key === "lifecycleState")
|
|
190
|
+
return e.lifecycleState === filter.value;
|
|
191
|
+
if (filter.key === "name-prefix")
|
|
192
|
+
return (e.rigName ?? e.name).startsWith(filter.value);
|
|
193
|
+
if (filter.key === "name")
|
|
194
|
+
return (e.rigName ?? e.name) === filter.value;
|
|
195
|
+
// PL-019 item 1: agentActivity.state is node-level only; at the rig
|
|
196
|
+
// level it has no meaning, so the filter passes everything through and
|
|
197
|
+
// the user gets all rigs (the operator can `--nodes` to scope it).
|
|
198
|
+
if (filter.key === "agentActivity.state")
|
|
199
|
+
return true;
|
|
200
|
+
// PL-012: contextUsage.* filters are node-level only.
|
|
201
|
+
if (filter.key === "contextUsage.percent" || filter.key === "contextUsage.state")
|
|
202
|
+
return true;
|
|
203
|
+
return true;
|
|
204
|
+
});
|
|
205
|
+
}
|
|
206
|
+
function applyNodeFilter(entries, filter) {
|
|
207
|
+
return entries.filter((n) => {
|
|
208
|
+
// status maps to sessionStatus for nodes; lifecycleState applies directly.
|
|
209
|
+
if (filter.key === "status")
|
|
210
|
+
return n.sessionStatus === filter.value;
|
|
211
|
+
if (filter.key === "lifecycleState")
|
|
212
|
+
return n.lifecycleState === filter.value;
|
|
213
|
+
if (filter.key === "name-prefix")
|
|
214
|
+
return n.rigName.startsWith(filter.value);
|
|
215
|
+
if (filter.key === "name")
|
|
216
|
+
return n.rigName === filter.value;
|
|
217
|
+
// PL-019 item 1: nested-key traversal for agentActivity.state. Nodes
|
|
218
|
+
// without an agentActivity attachment never match a non-unknown filter
|
|
219
|
+
// value (the daemon reports `unknown` when it has no signal — explicit).
|
|
220
|
+
if (filter.key === "agentActivity.state")
|
|
221
|
+
return n.agentActivity?.state === filter.value;
|
|
222
|
+
// PL-012: contextUsage.percent — numeric comparison. Nodes with no
|
|
223
|
+
// sample fail every comparator (operator can filter on
|
|
224
|
+
// contextUsage.state=unknown to find them).
|
|
225
|
+
if (filter.key === "contextUsage.percent") {
|
|
226
|
+
const pct = n.contextUsage?.usedPercentage;
|
|
227
|
+
if (typeof pct !== "number" || filter.numericValue === undefined)
|
|
228
|
+
return false;
|
|
229
|
+
switch (filter.op) {
|
|
230
|
+
case ">=": return pct >= filter.numericValue;
|
|
231
|
+
case ">": return pct > filter.numericValue;
|
|
232
|
+
case "<=": return pct <= filter.numericValue;
|
|
233
|
+
case "<": return pct < filter.numericValue;
|
|
234
|
+
case "=": return pct === filter.numericValue;
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
if (filter.key === "contextUsage.state") {
|
|
238
|
+
const derived = n.contextUsage?.state ?? deriveContextUsageState(n.contextUsage?.usedPercentage ?? null);
|
|
239
|
+
return derived === filter.value;
|
|
240
|
+
}
|
|
241
|
+
return true;
|
|
242
|
+
});
|
|
243
|
+
}
|
|
244
|
+
function selectFields(entries, fields) {
|
|
245
|
+
return entries.map((e) => {
|
|
246
|
+
const out = {};
|
|
247
|
+
for (const f of fields)
|
|
248
|
+
out[f] = e[f];
|
|
249
|
+
return out;
|
|
250
|
+
});
|
|
251
|
+
}
|
|
252
|
+
function summarizeRigs(entries) {
|
|
253
|
+
const byLifecycle = {};
|
|
254
|
+
const byStatus = {};
|
|
255
|
+
let totalRunning = 0;
|
|
256
|
+
for (const e of entries) {
|
|
257
|
+
const ls = e.lifecycleState ?? "unknown";
|
|
258
|
+
byLifecycle[ls] = (byLifecycle[ls] ?? 0) + 1;
|
|
259
|
+
byStatus[e.status] = (byStatus[e.status] ?? 0) + 1;
|
|
260
|
+
if (e.status === "running")
|
|
261
|
+
totalRunning++;
|
|
262
|
+
}
|
|
263
|
+
return { totalRigs: entries.length, totalRunning, byLifecycle, byStatus };
|
|
264
|
+
}
|
|
265
|
+
function summarizeNodes(entries) {
|
|
266
|
+
const byLifecycle = {};
|
|
267
|
+
const bySessionStatus = {};
|
|
268
|
+
for (const n of entries) {
|
|
269
|
+
const ls = n.lifecycleState ?? "unknown";
|
|
270
|
+
byLifecycle[ls] = (byLifecycle[ls] ?? 0) + 1;
|
|
271
|
+
const ss = n.sessionStatus ?? "unknown";
|
|
272
|
+
bySessionStatus[ss] = (bySessionStatus[ss] ?? 0) + 1;
|
|
273
|
+
}
|
|
274
|
+
return { totalNodes: entries.length, byLifecycle, bySessionStatus };
|
|
275
|
+
}
|
|
276
|
+
// Compact rig-level lifecycle codes for the rig table header (3-char fixed width).
|
|
277
|
+
function abbrevRigLifecycle(state) {
|
|
278
|
+
if (!state)
|
|
279
|
+
return "—";
|
|
280
|
+
if (state === "running")
|
|
281
|
+
return "run";
|
|
282
|
+
if (state === "recoverable")
|
|
283
|
+
return "rec";
|
|
284
|
+
if (state === "stopped")
|
|
285
|
+
return "stp";
|
|
286
|
+
if (state === "degraded")
|
|
287
|
+
return "deg";
|
|
288
|
+
if (state === "attention_required")
|
|
289
|
+
return "att";
|
|
290
|
+
return "—";
|
|
291
|
+
}
|
|
292
|
+
// Compact per-node lifecycle codes for the nodes table.
|
|
293
|
+
function abbrevNodeLifecycle(state) {
|
|
294
|
+
if (!state)
|
|
295
|
+
return "—";
|
|
296
|
+
if (state === "running")
|
|
297
|
+
return "run";
|
|
298
|
+
if (state === "recoverable")
|
|
299
|
+
return "rec";
|
|
300
|
+
if (state === "detached")
|
|
301
|
+
return "det";
|
|
302
|
+
if (state === "attention_required")
|
|
303
|
+
return "att";
|
|
304
|
+
return "—";
|
|
305
|
+
}
|
|
5
306
|
/**
|
|
6
307
|
* `rig ps` — list running rigs and optionally their nodes.
|
|
7
|
-
*
|
|
8
|
-
*
|
|
308
|
+
*
|
|
309
|
+
* L3-followup adds CLI-side shaping flags (`--limit`, `--fields`, `--summary`,
|
|
310
|
+
* `--filter`, `--full`) for context-window-safe output on large hosts. Default
|
|
311
|
+
* `rig ps` (human) truncates to ~50 rigs with an explicit footer naming totals
|
|
312
|
+
* and the `--full` opt-out. Default `rig ps --json` keeps the bare-array shape
|
|
313
|
+
* for back-compat; the truncation/envelope shape only applies when at least
|
|
314
|
+
* one of `--limit`/`--summary`/`--fields`/`--filter` is specified.
|
|
9
315
|
*/
|
|
10
316
|
export function psCommand(depsOverride) {
|
|
11
317
|
const cmd = new Command("ps")
|
|
12
318
|
.description("List rigs and their status")
|
|
13
319
|
.addHelpText("after", `
|
|
14
320
|
Examples:
|
|
15
|
-
rig ps
|
|
16
|
-
rig ps --
|
|
17
|
-
rig ps --
|
|
18
|
-
rig ps --
|
|
321
|
+
rig ps Show all rigs (human; truncated to ${HUMAN_RIG_BUDGET} with footer)
|
|
322
|
+
rig ps --full Disable human truncation
|
|
323
|
+
rig ps --json JSON output (bare array; back-compat)
|
|
324
|
+
rig ps --json --limit 20 Bounded JSON envelope
|
|
325
|
+
rig ps --json --summary Aggregate-only JSON (no per-rig entries)
|
|
326
|
+
rig ps --json --fields rigName,status,lifecycleState
|
|
327
|
+
Project JSON to named fields
|
|
328
|
+
rig ps --filter lifecycleState=attention_required
|
|
329
|
+
Show only rigs needing attention
|
|
330
|
+
rig ps --filter status=running Show only running rigs
|
|
331
|
+
rig ps --filter name-prefix=demo Filter by rig-name prefix
|
|
332
|
+
rig ps --nodes Per-node detail (human; truncated to ${HUMAN_NODE_BUDGET})
|
|
333
|
+
rig ps --nodes --json --limit 50 Bounded per-node JSON envelope
|
|
334
|
+
rig ps --nodes --active Show only nodes whose agentActivity.state == running (PL-019)
|
|
335
|
+
rig ps --nodes --filter agentActivity.state=running
|
|
336
|
+
Same as --active (the explicit form)
|
|
337
|
+
rig ps --host vm-claude-test --nodes --json Run on a remote host via single-hop ssh
|
|
338
|
+
|
|
339
|
+
JSON output entries include both \`name\` and \`rigName\` (alias) for forward
|
|
340
|
+
compatibility; agent code should prefer \`rigName\` (matches per-node JSON).
|
|
341
|
+
|
|
342
|
+
--filter accepts: status, lifecycleState, name-prefix, name, agentActivity.state.
|
|
343
|
+
Other keys are rejected. agentActivity.state is node-level (use with --nodes);
|
|
344
|
+
allowed values: running, needs_input, idle, unknown.
|
|
345
|
+
|
|
346
|
+
--fields accepts (rig-level): rigId, name, rigName, nodeCount, runningCount,
|
|
347
|
+
status, lifecycleState, uptime, latestSnapshot.
|
|
348
|
+
--fields accepts (node-level, with --nodes): rigId, rigName, logicalId, podId,
|
|
349
|
+
podNamespace, canonicalSessionName, nodeKind, runtime, sessionStatus,
|
|
350
|
+
startupStatus, restoreOutcome, lifecycleState, tmuxAttachCommand,
|
|
351
|
+
resumeCommand, latestError, agentActivity. Other keys are rejected.
|
|
352
|
+
\`name\` is rig-level only; for node entries use \`rigName\`. Nested-field
|
|
353
|
+
projection (e.g. \`agentActivity.state\`) is not supported in this slice; pass
|
|
354
|
+
\`agentActivity\` to project the whole object and read the nested value
|
|
355
|
+
downstream.
|
|
356
|
+
|
|
357
|
+
--host runs the same command on a remote host declared in ~/.openrig/hosts.yaml
|
|
358
|
+
via single-hop ssh (CLI-side shell-out; daemon untouched). The remote rig's
|
|
359
|
+
output is what counts and is surfaced verbatim on success; failure is
|
|
360
|
+
distinguished into ssh-unreachable / permission-gate / remote-daemon-unreachable
|
|
361
|
+
/ remote-command-failed.
|
|
19
362
|
|
|
20
363
|
Exit codes:
|
|
21
364
|
0 Success
|
|
22
|
-
1 Daemon not running
|
|
365
|
+
1 Daemon not running, or invalid --filter / --limit / --fields
|
|
23
366
|
2 Failed to fetch data from daemon`);
|
|
24
367
|
const getDepsF = () => depsOverride ?? { lifecycleDeps: realDeps(), clientFactory: (url) => new DaemonClient(url) };
|
|
25
368
|
cmd
|
|
26
369
|
.option("--json", "JSON output for agents")
|
|
27
370
|
.option("--nodes", "Show per-node detail for all rigs")
|
|
371
|
+
.option("--full", "Disable default human-output truncation")
|
|
372
|
+
.option("--limit <n>", "Limit number of entries (rigs or nodes)")
|
|
373
|
+
.option("--fields <list>", "Comma-separated field list to project (JSON only)")
|
|
374
|
+
.option("--summary", "Emit aggregate-only output (counts by status/lifecycle)")
|
|
375
|
+
.option("--filter <key=value>", "Filter entries; supported keys: status, lifecycleState, name-prefix, name, agentActivity.state")
|
|
376
|
+
.option("--active", "Shortcut for --filter agentActivity.state=running (PL-019)")
|
|
377
|
+
.option("--host <id>", "Run on a remote host declared in ~/.openrig/hosts.yaml (CLI-side ssh shell-out)")
|
|
28
378
|
.action(async (opts) => {
|
|
29
379
|
const deps = getDepsF();
|
|
380
|
+
// --- Cross-host short-circuit (CLI-side ssh shell-out; daemon untouched) ---
|
|
381
|
+
if (opts.host) {
|
|
382
|
+
await runCrossHostPs(opts.host, opts, deps);
|
|
383
|
+
return;
|
|
384
|
+
}
|
|
30
385
|
const status = await getDaemonStatus(deps.lifecycleDeps);
|
|
31
386
|
if (status.state !== "running" || status.healthy === false) {
|
|
32
387
|
console.error("Daemon not running. Start it with: rig daemon start");
|
|
33
388
|
process.exitCode = 1;
|
|
34
389
|
return;
|
|
35
390
|
}
|
|
391
|
+
// Parse filter once up front so unknown keys/malformed filters surface
|
|
392
|
+
// as exit-1 errors before any HTTP call.
|
|
393
|
+
//
|
|
394
|
+
// PL-019 item 1: --active is sugar for --filter agentActivity.state=running.
|
|
395
|
+
// Combining --active with --filter is rejected (composition is
|
|
396
|
+
// ambiguous — pick one explicit form). Parity is verified end-to-end
|
|
397
|
+
// by the focused test: `--active` and the explicit filter must yield
|
|
398
|
+
// identical output on the same fixture.
|
|
399
|
+
let effectiveFilter = opts.filter;
|
|
400
|
+
if (opts.active) {
|
|
401
|
+
if (effectiveFilter) {
|
|
402
|
+
console.error(`--active and --filter cannot be combined. ` +
|
|
403
|
+
`--active is sugar for --filter agentActivity.state=running. ` +
|
|
404
|
+
`Pick one form, or compose by upgrading to --filter directly.`);
|
|
405
|
+
process.exitCode = 1;
|
|
406
|
+
return;
|
|
407
|
+
}
|
|
408
|
+
effectiveFilter = "agentActivity.state=running";
|
|
409
|
+
}
|
|
410
|
+
let parsedFilter = null;
|
|
411
|
+
if (effectiveFilter) {
|
|
412
|
+
const result = parseFilter(effectiveFilter);
|
|
413
|
+
if ("error" in result) {
|
|
414
|
+
console.error(result.error);
|
|
415
|
+
process.exitCode = 1;
|
|
416
|
+
return;
|
|
417
|
+
}
|
|
418
|
+
parsedFilter = result;
|
|
419
|
+
}
|
|
420
|
+
const limit = opts.limit !== undefined ? Number(opts.limit) : null;
|
|
421
|
+
if (limit !== null && (!Number.isInteger(limit) || limit < 0)) {
|
|
422
|
+
console.error(`--limit must be a non-negative integer; got '${opts.limit}'`);
|
|
423
|
+
process.exitCode = 1;
|
|
424
|
+
return;
|
|
425
|
+
}
|
|
426
|
+
// C9a: validate --fields against the per-level allow-list before any HTTP
|
|
427
|
+
// call, mirroring the --filter validation above. Level is determined by
|
|
428
|
+
// --nodes; both branches downstream use the same `fields` variable, so
|
|
429
|
+
// one up-front validation covers both paths.
|
|
430
|
+
let fields = null;
|
|
431
|
+
if (opts.fields !== undefined) {
|
|
432
|
+
const fieldsLevel = opts.nodes ? "nodes" : "rig";
|
|
433
|
+
const fieldsAllowed = fieldsLevel === "nodes" ? ALLOWED_NODE_FIELDS : ALLOWED_RIG_FIELDS;
|
|
434
|
+
const fieldsResult = parseFields(opts.fields, fieldsAllowed, fieldsLevel);
|
|
435
|
+
if ("error" in fieldsResult) {
|
|
436
|
+
console.error(fieldsResult.error);
|
|
437
|
+
process.exitCode = 1;
|
|
438
|
+
return;
|
|
439
|
+
}
|
|
440
|
+
fields = fieldsResult;
|
|
441
|
+
}
|
|
442
|
+
const useEnvelope = parsedFilter !== null || limit !== null || fields !== null || opts.summary === true;
|
|
36
443
|
const client = deps.clientFactory(getDaemonUrl(status));
|
|
37
444
|
if (opts.nodes) {
|
|
38
|
-
await handleNodes(client, opts
|
|
445
|
+
await handleNodes(client, opts, parsedFilter, limit, fields, useEnvelope);
|
|
39
446
|
return;
|
|
40
447
|
}
|
|
41
448
|
const res = await client.get("/api/ps");
|
|
@@ -44,26 +451,75 @@ Exit codes:
|
|
|
44
451
|
process.exitCode = 2;
|
|
45
452
|
return;
|
|
46
453
|
}
|
|
47
|
-
const
|
|
454
|
+
const all = res.data;
|
|
455
|
+
// Apply CLI-side filter (Amendment A: prefer CLI shaping).
|
|
456
|
+
const filtered = parsedFilter ? applyRigFilter(all, parsedFilter) : all;
|
|
457
|
+
// Summary mode short-circuits per-entry output.
|
|
458
|
+
if (opts.summary) {
|
|
459
|
+
const summary = summarizeRigs(filtered);
|
|
460
|
+
if (opts.json) {
|
|
461
|
+
console.log(JSON.stringify(summary));
|
|
462
|
+
}
|
|
463
|
+
else {
|
|
464
|
+
console.log(`totalRigs: ${summary.totalRigs}`);
|
|
465
|
+
console.log(`totalRunning: ${summary.totalRunning}`);
|
|
466
|
+
console.log(`byStatus: ${JSON.stringify(summary.byStatus)}`);
|
|
467
|
+
console.log(`byLifecycle: ${JSON.stringify(summary.byLifecycle)}`);
|
|
468
|
+
}
|
|
469
|
+
return;
|
|
470
|
+
}
|
|
471
|
+
// Apply --limit on top of filter (CLI side; daemon stays bare-array).
|
|
472
|
+
const limited = limit !== null ? filtered.slice(0, limit) : filtered;
|
|
473
|
+
const truncated = limit !== null && filtered.length > limit;
|
|
474
|
+
// Field projection runs last so requested fields apply to the limited set.
|
|
475
|
+
const projected = fields ? selectFields(limited, fields) : limited;
|
|
48
476
|
if (opts.json) {
|
|
49
|
-
|
|
477
|
+
if (useEnvelope) {
|
|
478
|
+
// Envelope only on flag use; default JSON stays a bare array for compat.
|
|
479
|
+
const envelope = {
|
|
480
|
+
entries: projected,
|
|
481
|
+
totalRigs: filtered.length,
|
|
482
|
+
truncated,
|
|
483
|
+
};
|
|
484
|
+
if (truncated)
|
|
485
|
+
envelope.hint = "rig ps --full --json";
|
|
486
|
+
console.log(JSON.stringify(envelope));
|
|
487
|
+
}
|
|
488
|
+
else {
|
|
489
|
+
console.log(JSON.stringify(projected));
|
|
490
|
+
}
|
|
50
491
|
return;
|
|
51
492
|
}
|
|
52
|
-
if (
|
|
53
|
-
|
|
493
|
+
if (limited.length === 0) {
|
|
494
|
+
if (parsedFilter) {
|
|
495
|
+
console.log(`No rigs match --filter ${parsedFilter.key}=${parsedFilter.value}`);
|
|
496
|
+
}
|
|
497
|
+
else {
|
|
498
|
+
console.log("No rigs");
|
|
499
|
+
}
|
|
54
500
|
return;
|
|
55
501
|
}
|
|
56
|
-
//
|
|
57
|
-
const
|
|
502
|
+
// Human output: apply default truncation budget unless --full.
|
|
503
|
+
const humanList = (opts.full || limit !== null) ? limited : limited.slice(0, HUMAN_RIG_BUDGET);
|
|
504
|
+
const humanTruncated = !opts.full && limit === null && filtered.length > HUMAN_RIG_BUDGET;
|
|
505
|
+
const header = padRigRow("RIG", "NODES", "RUNNING", "STATUS", "LIFECYCLE", "UPTIME", "SNAPSHOT");
|
|
58
506
|
console.log(header);
|
|
59
|
-
for (const e of
|
|
60
|
-
console.log(padRigRow(e.name, String(e.nodeCount), String(e.runningCount), e.status, e.uptime ?? "—", e.latestSnapshot ?? "—"));
|
|
507
|
+
for (const e of humanList) {
|
|
508
|
+
console.log(padRigRow(e.rigName ?? e.name, String(e.nodeCount), String(e.runningCount), e.status, abbrevRigLifecycle(e.lifecycleState), e.uptime ?? "—", e.latestSnapshot ?? "—"));
|
|
509
|
+
}
|
|
510
|
+
if (humanTruncated) {
|
|
511
|
+
const remaining = filtered.length - HUMAN_RIG_BUDGET;
|
|
512
|
+
console.log(`... and ${remaining} more rig${remaining === 1 ? "" : "s"} (truncated at ${HUMAN_RIG_BUDGET}).`);
|
|
513
|
+
console.log("Run 'rig ps --full' to see all, or 'rig ps --filter lifecycleState=attention_required' to narrow.");
|
|
514
|
+
}
|
|
515
|
+
else if (truncated) {
|
|
516
|
+
const remaining = filtered.length - (limit ?? 0);
|
|
517
|
+
console.log(`... and ${remaining} more rig${remaining === 1 ? "" : "s"} (--limit ${limit}).`);
|
|
61
518
|
}
|
|
62
519
|
});
|
|
63
520
|
return cmd;
|
|
64
521
|
}
|
|
65
|
-
async function handleNodes(client,
|
|
66
|
-
// Fetch rig list first
|
|
522
|
+
async function handleNodes(client, opts, parsedFilter, limit, fields, useEnvelope) {
|
|
67
523
|
const rigRes = await client.get("/api/ps");
|
|
68
524
|
if (rigRes.status >= 400) {
|
|
69
525
|
console.error(`Failed to fetch rig list from daemon (HTTP ${rigRes.status}). Check daemon status with: rig status`);
|
|
@@ -74,56 +530,181 @@ async function handleNodes(client, json) {
|
|
|
74
530
|
for (const rig of rigRes.data) {
|
|
75
531
|
const nodesRes = await client.get(`/api/rigs/${encodeURIComponent(rig.rigId)}/nodes`);
|
|
76
532
|
if (nodesRes.status >= 400) {
|
|
77
|
-
console.error(`Warning: failed to fetch nodes for rig "${rig.name}" (HTTP ${nodesRes.status}). List rigs with: rig ps`);
|
|
533
|
+
console.error(`Warning: failed to fetch nodes for rig "${rig.rigName ?? rig.name}" (HTTP ${nodesRes.status}). List rigs with: rig ps`);
|
|
78
534
|
continue;
|
|
79
535
|
}
|
|
80
536
|
allNodes.push(...nodesRes.data);
|
|
81
537
|
}
|
|
82
|
-
|
|
83
|
-
|
|
538
|
+
const filtered = parsedFilter ? applyNodeFilter(allNodes, parsedFilter) : allNodes;
|
|
539
|
+
if (opts.summary) {
|
|
540
|
+
const summary = summarizeNodes(filtered);
|
|
541
|
+
if (opts.json) {
|
|
542
|
+
console.log(JSON.stringify(summary));
|
|
543
|
+
}
|
|
544
|
+
else {
|
|
545
|
+
console.log(`totalNodes: ${summary.totalNodes}`);
|
|
546
|
+
console.log(`bySessionStatus: ${JSON.stringify(summary.bySessionStatus)}`);
|
|
547
|
+
console.log(`byLifecycle: ${JSON.stringify(summary.byLifecycle)}`);
|
|
548
|
+
}
|
|
84
549
|
return;
|
|
85
550
|
}
|
|
86
|
-
|
|
87
|
-
|
|
551
|
+
const limited = limit !== null ? filtered.slice(0, limit) : filtered;
|
|
552
|
+
const limitTruncated = limit !== null && filtered.length > limit;
|
|
553
|
+
const projected = fields ? selectFields(limited, fields) : limited;
|
|
554
|
+
if (opts.json) {
|
|
555
|
+
if (useEnvelope) {
|
|
556
|
+
const envelope = {
|
|
557
|
+
entries: projected,
|
|
558
|
+
totalNodes: filtered.length,
|
|
559
|
+
truncated: limitTruncated,
|
|
560
|
+
};
|
|
561
|
+
if (limitTruncated)
|
|
562
|
+
envelope.hint = "rig ps --nodes --full --json";
|
|
563
|
+
console.log(JSON.stringify(envelope));
|
|
564
|
+
}
|
|
565
|
+
else {
|
|
566
|
+
console.log(JSON.stringify(projected));
|
|
567
|
+
}
|
|
88
568
|
return;
|
|
89
569
|
}
|
|
90
|
-
|
|
570
|
+
if (limited.length === 0) {
|
|
571
|
+
if (parsedFilter) {
|
|
572
|
+
console.log(`No nodes match --filter ${parsedFilter.key}=${parsedFilter.value}`);
|
|
573
|
+
}
|
|
574
|
+
else {
|
|
575
|
+
console.log("No nodes");
|
|
576
|
+
}
|
|
577
|
+
return;
|
|
578
|
+
}
|
|
579
|
+
const humanList = (opts.full || limit !== null) ? limited : limited.slice(0, HUMAN_NODE_BUDGET);
|
|
580
|
+
const humanTruncated = !opts.full && limit === null && filtered.length > HUMAN_NODE_BUDGET;
|
|
581
|
+
const header = padNodeRow("RIG", "POD", "MEMBER", "SESSION", "RUNTIME", "STATUS", "STARTUP", "LIFECYCLE", "ACTIVITY", "CTX", "RESTORE", "ERROR");
|
|
91
582
|
console.log(header);
|
|
92
|
-
for (const n of
|
|
583
|
+
for (const n of humanList) {
|
|
93
584
|
const parts = n.logicalId.split(".");
|
|
94
585
|
const pod = n.podNamespace ?? (parts.length > 1 ? parts[0] : "—");
|
|
95
586
|
const member = parts.length > 1 ? parts.slice(1).join(".") : n.logicalId;
|
|
96
587
|
const rig = `${n.rigName}#${n.rigId}`;
|
|
97
|
-
console.log(padNodeRow(rig, pod, member, n.canonicalSessionName ?? "—", n.runtime ?? "—", n.sessionStatus ?? "—", n.startupStatus ?? "—", n.restoreOutcome, n.latestError ? truncate(n.latestError, 30) : "—"));
|
|
588
|
+
console.log(padNodeRow(rig, pod, member, n.canonicalSessionName ?? "—", n.runtime ?? "—", n.sessionStatus ?? "—", n.startupStatus ?? "—", abbrevNodeLifecycle(n.lifecycleState), formatActivity(n.agentActivity), formatContextUsage(n.contextUsage), n.restoreOutcome, n.latestError ? truncate(n.latestError, 30) : "—"));
|
|
589
|
+
}
|
|
590
|
+
if (humanTruncated) {
|
|
591
|
+
const remaining = filtered.length - HUMAN_NODE_BUDGET;
|
|
592
|
+
console.log(`... and ${remaining} more node${remaining === 1 ? "" : "s"} (truncated at ${HUMAN_NODE_BUDGET}).`);
|
|
593
|
+
console.log("Run 'rig ps --nodes --full' to see all, or '--filter lifecycleState=attention_required' to narrow.");
|
|
594
|
+
}
|
|
595
|
+
else if (limitTruncated) {
|
|
596
|
+
const remaining = filtered.length - (limit ?? 0);
|
|
597
|
+
console.log(`... and ${remaining} more node${remaining === 1 ? "" : "s"} (--limit ${limit}).`);
|
|
98
598
|
}
|
|
99
599
|
}
|
|
600
|
+
function formatActivity(activity) {
|
|
601
|
+
if (!activity)
|
|
602
|
+
return "unknown";
|
|
603
|
+
if (activity.state === "running")
|
|
604
|
+
return "running";
|
|
605
|
+
if (activity.state === "needs_input")
|
|
606
|
+
return "needs_input";
|
|
607
|
+
if (activity.state === "idle")
|
|
608
|
+
return "idle";
|
|
609
|
+
return "unknown";
|
|
610
|
+
}
|
|
100
611
|
function truncate(s, max) {
|
|
101
612
|
return s.length > max ? s.slice(0, max - 1) + "…" : s;
|
|
102
613
|
}
|
|
103
614
|
function fitCell(value, width) {
|
|
104
615
|
return truncate(value, width).padEnd(width);
|
|
105
616
|
}
|
|
106
|
-
function padRigRow(rig, nodes, running, status, uptime, snapshot) {
|
|
617
|
+
function padRigRow(rig, nodes, running, status, lifecycle, uptime, snapshot) {
|
|
107
618
|
return [
|
|
108
619
|
fitCell(rig, 24),
|
|
109
620
|
fitCell(nodes, 7),
|
|
110
621
|
fitCell(running, 9),
|
|
111
622
|
fitCell(status, 10),
|
|
623
|
+
fitCell(lifecycle, 11),
|
|
112
624
|
fitCell(uptime, 11),
|
|
113
625
|
snapshot,
|
|
114
626
|
].join("");
|
|
115
627
|
}
|
|
116
|
-
function padNodeRow(rig, pod, member, session, runtime, status, startup, restore, error) {
|
|
628
|
+
function padNodeRow(rig, pod, member, session, runtime, status, startup, lifecycle, activity, ctx, restore, error) {
|
|
117
629
|
return [
|
|
118
|
-
fitCell(rig,
|
|
119
|
-
fitCell(pod,
|
|
120
|
-
fitCell(member,
|
|
121
|
-
fitCell(session,
|
|
122
|
-
fitCell(runtime,
|
|
630
|
+
fitCell(rig, 30),
|
|
631
|
+
fitCell(pod, 10),
|
|
632
|
+
fitCell(member, 14),
|
|
633
|
+
fitCell(session, 34),
|
|
634
|
+
fitCell(runtime, 12),
|
|
123
635
|
fitCell(status, 10),
|
|
124
636
|
fitCell(startup, 10),
|
|
637
|
+
fitCell(lifecycle, 11),
|
|
638
|
+
fitCell(activity, 12),
|
|
639
|
+
fitCell(ctx, 6),
|
|
125
640
|
fitCell(restore, 10),
|
|
126
641
|
error,
|
|
127
642
|
].join("");
|
|
128
643
|
}
|
|
644
|
+
// PL-012: render context-usage as a 5-char cell — "<percent>%" when
|
|
645
|
+
// known + fresh, "<percent>%*" when known but stale, "??" when unknown.
|
|
646
|
+
// 4-char width keeps the table compact without truncating two-digit
|
|
647
|
+
// percentages (e.g., "98%*" or "5%").
|
|
648
|
+
function formatContextUsage(ctx) {
|
|
649
|
+
if (!ctx || ctx.availability !== "known" || typeof ctx.usedPercentage !== "number") {
|
|
650
|
+
return "??";
|
|
651
|
+
}
|
|
652
|
+
const stale = ctx.fresh === false ? "*" : "";
|
|
653
|
+
return `${ctx.usedPercentage}%${stale}`;
|
|
654
|
+
}
|
|
655
|
+
async function runCrossHostPs(hostId, opts, deps) {
|
|
656
|
+
const loader = deps.hostRegistryLoader ?? loadHostRegistry;
|
|
657
|
+
const runner = deps.crossHostRun ?? runCrossHostCommand;
|
|
658
|
+
const registry = loader();
|
|
659
|
+
if (!registry.ok) {
|
|
660
|
+
emitCrossHostError(hostId, "registry-load-failed", registry.error, opts.json);
|
|
661
|
+
return;
|
|
662
|
+
}
|
|
663
|
+
const resolved = resolveHost(registry.registry, hostId);
|
|
664
|
+
if (!resolved.ok) {
|
|
665
|
+
emitCrossHostError(hostId, "unknown-host", resolved.error, opts.json);
|
|
666
|
+
return;
|
|
667
|
+
}
|
|
668
|
+
const host = resolved.host;
|
|
669
|
+
// Reconstruct argv. `rig ps` has no positional args; all flags propagate.
|
|
670
|
+
const argv = ["rig", "ps"];
|
|
671
|
+
if (opts.nodes)
|
|
672
|
+
argv.push("--nodes");
|
|
673
|
+
if (opts.full)
|
|
674
|
+
argv.push("--full");
|
|
675
|
+
if (opts.limit !== undefined)
|
|
676
|
+
argv.push("--limit", opts.limit);
|
|
677
|
+
if (opts.fields !== undefined)
|
|
678
|
+
argv.push("--fields", opts.fields);
|
|
679
|
+
if (opts.summary)
|
|
680
|
+
argv.push("--summary");
|
|
681
|
+
if (opts.filter !== undefined)
|
|
682
|
+
argv.push("--filter", opts.filter);
|
|
683
|
+
if (opts.json)
|
|
684
|
+
argv.push("--json");
|
|
685
|
+
const result = await runner(host, argv);
|
|
686
|
+
if (opts.json) {
|
|
687
|
+
if (result.ok) {
|
|
688
|
+
// Verbatim remote stdout passthrough — the remote `rig ps --json` already
|
|
689
|
+
// produced the correct JSON shape (bare array OR envelope per its own
|
|
690
|
+
// shaping flags); we do NOT double-wrap.
|
|
691
|
+
if (result.stdout)
|
|
692
|
+
process.stdout.write(result.stdout);
|
|
693
|
+
if (result.stderr)
|
|
694
|
+
process.stderr.write(result.stderr);
|
|
695
|
+
return;
|
|
696
|
+
}
|
|
697
|
+
emitCrossHostFailure(host.id, host.target, result, true);
|
|
698
|
+
return;
|
|
699
|
+
}
|
|
700
|
+
console.log(`[via host=${host.id} (${host.target})]`);
|
|
701
|
+
if (result.ok) {
|
|
702
|
+
if (result.stdout)
|
|
703
|
+
process.stdout.write(result.stdout);
|
|
704
|
+
if (result.stderr)
|
|
705
|
+
process.stderr.write(result.stderr);
|
|
706
|
+
return;
|
|
707
|
+
}
|
|
708
|
+
emitCrossHostFailure(host.id, host.target, result, false);
|
|
709
|
+
}
|
|
129
710
|
//# sourceMappingURL=ps.js.map
|