@openrig/cli 0.5.17 → 0.6.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/context-packs/onboarding-width/manifest.yaml +1 -1
- 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/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-software-factory/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/adapters/claude-code-adapter.d.ts +3 -0
- package/daemon/dist/adapters/claude-code-adapter.d.ts.map +1 -1
- package/daemon/dist/adapters/claude-code-adapter.js +36 -14
- package/daemon/dist/adapters/claude-code-adapter.js.map +1 -1
- package/daemon/dist/adapters/claude-resume.d.ts +3 -1
- package/daemon/dist/adapters/claude-resume.d.ts.map +1 -1
- package/daemon/dist/adapters/claude-resume.js +20 -6
- package/daemon/dist/adapters/claude-resume.js.map +1 -1
- package/daemon/dist/adapters/codex-resume.d.ts +4 -1
- package/daemon/dist/adapters/codex-resume.d.ts.map +1 -1
- package/daemon/dist/adapters/codex-resume.js +8 -2
- package/daemon/dist/adapters/codex-resume.js.map +1 -1
- package/daemon/dist/adapters/codex-runtime-adapter.d.ts +3 -0
- package/daemon/dist/adapters/codex-runtime-adapter.d.ts.map +1 -1
- package/daemon/dist/adapters/codex-runtime-adapter.js +16 -3
- package/daemon/dist/adapters/codex-runtime-adapter.js.map +1 -1
- package/daemon/dist/adapters/pi-runner.d.ts +1 -0
- package/daemon/dist/adapters/pi-runner.d.ts.map +1 -1
- package/daemon/dist/adapters/pi-runner.js +7 -1
- package/daemon/dist/adapters/pi-runner.js.map +1 -1
- package/daemon/dist/adapters/tmux.d.ts +21 -1
- package/daemon/dist/adapters/tmux.d.ts.map +1 -1
- package/daemon/dist/adapters/tmux.js +141 -3
- package/daemon/dist/adapters/tmux.js.map +1 -1
- package/daemon/dist/adapters/yolo-mode.d.ts +3 -2
- package/daemon/dist/adapters/yolo-mode.d.ts.map +1 -1
- package/daemon/dist/adapters/yolo-mode.js +10 -2
- package/daemon/dist/adapters/yolo-mode.js.map +1 -1
- package/daemon/dist/build-info.js +3 -3
- package/daemon/dist/db/all-migrations.d.ts +1 -1
- package/daemon/dist/db/all-migrations.d.ts.map +1 -1
- package/daemon/dist/db/all-migrations.js +10 -2
- package/daemon/dist/db/all-migrations.js.map +1 -1
- package/daemon/dist/db/migrations/086_classification_fields_and_attempts.d.ts +26 -0
- package/daemon/dist/db/migrations/086_classification_fields_and_attempts.d.ts.map +1 -0
- package/daemon/dist/db/migrations/086_classification_fields_and_attempts.js +66 -0
- package/daemon/dist/db/migrations/086_classification_fields_and_attempts.js.map +1 -0
- package/daemon/dist/db/migrations/087_seat_delivery_guard.d.ts +3 -0
- package/daemon/dist/db/migrations/087_seat_delivery_guard.d.ts.map +1 -0
- package/daemon/dist/db/migrations/087_seat_delivery_guard.js +31 -0
- package/daemon/dist/db/migrations/087_seat_delivery_guard.js.map +1 -0
- package/daemon/dist/db/migrations/088_node_permission_selections.d.ts +3 -0
- package/daemon/dist/db/migrations/088_node_permission_selections.d.ts.map +1 -0
- package/daemon/dist/db/migrations/088_node_permission_selections.js +16 -0
- package/daemon/dist/db/migrations/088_node_permission_selections.js.map +1 -0
- package/daemon/dist/db/migrations/089_classification_identity_provenance.d.ts +3 -0
- package/daemon/dist/db/migrations/089_classification_identity_provenance.d.ts.map +1 -0
- package/daemon/dist/db/migrations/089_classification_identity_provenance.js +6 -0
- package/daemon/dist/db/migrations/089_classification_identity_provenance.js.map +1 -0
- package/daemon/dist/domain/applied-launch-observation-store.d.ts +1 -1
- package/daemon/dist/domain/applied-launch-observation-store.d.ts.map +1 -1
- package/daemon/dist/domain/applied-launch-observation-store.js +6 -4
- package/daemon/dist/domain/applied-launch-observation-store.js.map +1 -1
- package/daemon/dist/domain/capture-observer.d.ts +130 -0
- package/daemon/dist/domain/capture-observer.d.ts.map +1 -0
- package/daemon/dist/domain/capture-observer.js +113 -0
- package/daemon/dist/domain/capture-observer.js.map +1 -0
- package/daemon/dist/domain/claim-service.d.ts.map +1 -1
- package/daemon/dist/domain/claim-service.js +24 -3
- package/daemon/dist/domain/claim-service.js.map +1 -1
- package/daemon/dist/domain/classification-attempts.d.ts +143 -0
- package/daemon/dist/domain/classification-attempts.d.ts.map +1 -0
- package/daemon/dist/domain/classification-attempts.js +316 -0
- package/daemon/dist/domain/classification-attempts.js.map +1 -0
- package/daemon/dist/domain/classification-sources.d.ts +44 -0
- package/daemon/dist/domain/classification-sources.d.ts.map +1 -0
- package/daemon/dist/domain/classification-sources.js +102 -0
- package/daemon/dist/domain/classification-sources.js.map +1 -0
- package/daemon/dist/domain/classifier-lease-manager.d.ts +15 -4
- package/daemon/dist/domain/classifier-lease-manager.d.ts.map +1 -1
- package/daemon/dist/domain/classifier-lease-manager.js +63 -21
- package/daemon/dist/domain/classifier-lease-manager.js.map +1 -1
- package/daemon/dist/domain/claude-compaction-enforcer.d.ts +3 -1
- package/daemon/dist/domain/claude-compaction-enforcer.d.ts.map +1 -1
- package/daemon/dist/domain/claude-compaction-enforcer.js +36 -7
- package/daemon/dist/domain/claude-compaction-enforcer.js.map +1 -1
- package/daemon/dist/domain/claude-managed-launch.d.ts +28 -0
- package/daemon/dist/domain/claude-managed-launch.d.ts.map +1 -0
- package/daemon/dist/domain/claude-managed-launch.js +111 -0
- package/daemon/dist/domain/claude-managed-launch.js.map +1 -0
- package/daemon/dist/domain/codex-daemon-support.d.ts +16 -0
- package/daemon/dist/domain/codex-daemon-support.d.ts.map +1 -0
- package/daemon/dist/domain/codex-daemon-support.js +52 -0
- package/daemon/dist/domain/codex-daemon-support.js.map +1 -0
- package/daemon/dist/domain/gateway/connections-projection.d.ts.map +1 -1
- package/daemon/dist/domain/gateway/connections-projection.js +6 -3
- package/daemon/dist/domain/gateway/connections-projection.js.map +1 -1
- package/daemon/dist/domain/gateway/slack/capabilities.d.ts +19 -0
- package/daemon/dist/domain/gateway/slack/capabilities.d.ts.map +1 -0
- package/daemon/dist/domain/gateway/slack/capabilities.js +24 -0
- package/daemon/dist/domain/gateway/slack/capabilities.js.map +1 -0
- package/daemon/dist/domain/gateway/slack/config.d.ts.map +1 -1
- package/daemon/dist/domain/gateway/slack/config.js +2 -1
- package/daemon/dist/domain/gateway/slack/config.js.map +1 -1
- package/daemon/dist/domain/gateway/slack/inbound.d.ts.map +1 -1
- package/daemon/dist/domain/gateway/slack/inbound.js +2 -1
- package/daemon/dist/domain/gateway/slack/inbound.js.map +1 -1
- package/daemon/dist/domain/gateway/slack/manifest.d.ts +54 -0
- package/daemon/dist/domain/gateway/slack/manifest.d.ts.map +1 -0
- package/daemon/dist/domain/gateway/slack/manifest.js +55 -0
- package/daemon/dist/domain/gateway/slack/manifest.js.map +1 -0
- package/daemon/dist/domain/model-divergence/model-divergence-monitor.d.ts +3 -2
- package/daemon/dist/domain/model-divergence/model-divergence-monitor.d.ts.map +1 -1
- package/daemon/dist/domain/model-divergence/model-divergence-monitor.js +9 -5
- package/daemon/dist/domain/model-divergence/model-divergence-monitor.js.map +1 -1
- package/daemon/dist/domain/native-permission-selection.d.ts +13 -0
- package/daemon/dist/domain/native-permission-selection.d.ts.map +1 -0
- package/daemon/dist/domain/native-permission-selection.js +30 -0
- package/daemon/dist/domain/native-permission-selection.js.map +1 -0
- package/daemon/dist/domain/native-permission-store.d.ts +17 -0
- package/daemon/dist/domain/native-permission-store.d.ts.map +1 -0
- package/daemon/dist/domain/native-permission-store.js +36 -0
- package/daemon/dist/domain/native-permission-store.js.map +1 -0
- package/daemon/dist/domain/native-resume-probe.d.ts +3 -1
- package/daemon/dist/domain/native-resume-probe.d.ts.map +1 -1
- package/daemon/dist/domain/native-resume-probe.js +5 -2
- package/daemon/dist/domain/native-resume-probe.js.map +1 -1
- package/daemon/dist/domain/node-inventory.d.ts +3 -0
- package/daemon/dist/domain/node-inventory.d.ts.map +1 -1
- package/daemon/dist/domain/node-inventory.js +2 -0
- package/daemon/dist/domain/node-inventory.js.map +1 -1
- package/daemon/dist/domain/node-launcher.d.ts.map +1 -1
- package/daemon/dist/domain/node-launcher.js +6 -0
- package/daemon/dist/domain/node-launcher.js.map +1 -1
- package/daemon/dist/domain/outbox-handler.d.ts +25 -2
- package/daemon/dist/domain/outbox-handler.d.ts.map +1 -1
- package/daemon/dist/domain/outbox-handler.js +70 -1
- package/daemon/dist/domain/outbox-handler.js.map +1 -1
- package/daemon/dist/domain/permission-drift-observer.d.ts +1 -0
- package/daemon/dist/domain/permission-drift-observer.d.ts.map +1 -1
- package/daemon/dist/domain/permission-drift-observer.js +1 -1
- package/daemon/dist/domain/permission-drift-observer.js.map +1 -1
- package/daemon/dist/domain/permission-drift.d.ts +10 -0
- package/daemon/dist/domain/permission-drift.d.ts.map +1 -1
- package/daemon/dist/domain/permission-drift.js +29 -18
- package/daemon/dist/domain/permission-drift.js.map +1 -1
- package/daemon/dist/domain/project-classifier.d.ts +43 -0
- package/daemon/dist/domain/project-classifier.d.ts.map +1 -1
- package/daemon/dist/domain/project-classifier.js +141 -25
- package/daemon/dist/domain/project-classifier.js.map +1 -1
- package/daemon/dist/domain/proof/judgments.d.ts +16 -0
- package/daemon/dist/domain/proof/judgments.d.ts.map +1 -1
- package/daemon/dist/domain/proof/judgments.js +17 -1
- package/daemon/dist/domain/proof/judgments.js.map +1 -1
- package/daemon/dist/domain/queue-repository.d.ts +8 -0
- package/daemon/dist/domain/queue-repository.d.ts.map +1 -1
- package/daemon/dist/domain/queue-repository.js +41 -14
- package/daemon/dist/domain/queue-repository.js.map +1 -1
- package/daemon/dist/domain/restore-orchestrator.d.ts.map +1 -1
- package/daemon/dist/domain/restore-orchestrator.js +28 -1
- package/daemon/dist/domain/restore-orchestrator.js.map +1 -1
- package/daemon/dist/domain/resume-metadata-refresher.d.ts.map +1 -1
- package/daemon/dist/domain/resume-metadata-refresher.js +3 -1
- package/daemon/dist/domain/resume-metadata-refresher.js.map +1 -1
- package/daemon/dist/domain/rig-lifecycle-service.d.ts.map +1 -1
- package/daemon/dist/domain/rig-lifecycle-service.js +7 -0
- package/daemon/dist/domain/rig-lifecycle-service.js.map +1 -1
- package/daemon/dist/domain/rig-teardown.d.ts.map +1 -1
- package/daemon/dist/domain/rig-teardown.js +4 -0
- package/daemon/dist/domain/rig-teardown.js.map +1 -1
- package/daemon/dist/domain/rigspec-instantiator.d.ts.map +1 -1
- package/daemon/dist/domain/rigspec-instantiator.js +36 -22
- package/daemon/dist/domain/rigspec-instantiator.js.map +1 -1
- package/daemon/dist/domain/runtime-adapter.d.ts +6 -0
- package/daemon/dist/domain/runtime-adapter.d.ts.map +1 -1
- package/daemon/dist/domain/runtime-adapter.js.map +1 -1
- package/daemon/dist/domain/seat-delivery-guard.d.ts +64 -0
- package/daemon/dist/domain/seat-delivery-guard.d.ts.map +1 -0
- package/daemon/dist/domain/seat-delivery-guard.js +224 -0
- package/daemon/dist/domain/seat-delivery-guard.js.map +1 -0
- package/daemon/dist/domain/seat-handover-service.d.ts.map +1 -1
- package/daemon/dist/domain/seat-handover-service.js +19 -1
- package/daemon/dist/domain/seat-handover-service.js.map +1 -1
- package/daemon/dist/domain/seat-lifecycle-service.d.ts +16 -2
- package/daemon/dist/domain/seat-lifecycle-service.d.ts.map +1 -1
- package/daemon/dist/domain/seat-lifecycle-service.js +70 -0
- package/daemon/dist/domain/seat-lifecycle-service.js.map +1 -1
- package/daemon/dist/domain/seat-status-service.d.ts +10 -0
- package/daemon/dist/domain/seat-status-service.d.ts.map +1 -1
- package/daemon/dist/domain/seat-status-service.js +13 -0
- package/daemon/dist/domain/seat-status-service.js.map +1 -1
- package/daemon/dist/domain/session-transport.d.ts +19 -1
- package/daemon/dist/domain/session-transport.d.ts.map +1 -1
- package/daemon/dist/domain/session-transport.js +221 -23
- package/daemon/dist/domain/session-transport.js.map +1 -1
- package/daemon/dist/domain/shadow-capture.d.ts +97 -0
- package/daemon/dist/domain/shadow-capture.d.ts.map +1 -0
- package/daemon/dist/domain/shadow-capture.js +147 -0
- package/daemon/dist/domain/shadow-capture.js.map +1 -0
- package/daemon/dist/domain/startup-orchestrator.d.ts.map +1 -1
- package/daemon/dist/domain/startup-orchestrator.js +11 -0
- package/daemon/dist/domain/startup-orchestrator.js.map +1 -1
- package/daemon/dist/domain/stream-classification-worker.d.ts +106 -0
- package/daemon/dist/domain/stream-classification-worker.d.ts.map +1 -0
- package/daemon/dist/domain/stream-classification-worker.js +265 -0
- package/daemon/dist/domain/stream-classification-worker.js.map +1 -0
- package/daemon/dist/domain/successor-session-launcher.d.ts +1 -0
- package/daemon/dist/domain/successor-session-launcher.d.ts.map +1 -1
- package/daemon/dist/domain/successor-session-launcher.js +4 -2
- package/daemon/dist/domain/successor-session-launcher.js.map +1 -1
- package/daemon/dist/domain/terminal/herdr-adapter.d.ts +7 -0
- package/daemon/dist/domain/terminal/herdr-adapter.d.ts.map +1 -1
- package/daemon/dist/domain/terminal/herdr-adapter.js +119 -12
- package/daemon/dist/domain/terminal/herdr-adapter.js.map +1 -1
- package/daemon/dist/domain/terminal/terminal-provider.d.ts +5 -0
- package/daemon/dist/domain/terminal/terminal-provider.d.ts.map +1 -1
- package/daemon/dist/domain/terminal/terminal-service.js +6 -6
- package/daemon/dist/domain/terminal/terminal-service.js.map +1 -1
- package/daemon/dist/domain/terminal/view-composer.d.ts +6 -4
- package/daemon/dist/domain/terminal/view-composer.d.ts.map +1 -1
- package/daemon/dist/domain/terminal/view-composer.js +5 -5
- package/daemon/dist/domain/terminal/view-composer.js.map +1 -1
- package/daemon/dist/domain/types.d.ts +10 -0
- package/daemon/dist/domain/types.d.ts.map +1 -1
- package/daemon/dist/domain/types.js.map +1 -1
- package/daemon/dist/domain/watchdog-policy-engine.d.ts +3 -1
- package/daemon/dist/domain/watchdog-policy-engine.d.ts.map +1 -1
- package/daemon/dist/domain/watchdog-policy-engine.js +5 -3
- package/daemon/dist/domain/watchdog-policy-engine.js.map +1 -1
- package/daemon/dist/gateway-slack-surface.d.ts +2 -0
- package/daemon/dist/gateway-slack-surface.d.ts.map +1 -1
- package/daemon/dist/gateway-slack-surface.js +2 -0
- package/daemon/dist/gateway-slack-surface.js.map +1 -1
- package/daemon/dist/routes/activity.d.ts.map +1 -1
- package/daemon/dist/routes/activity.js +28 -2
- package/daemon/dist/routes/activity.js.map +1 -1
- package/daemon/dist/routes/down.d.ts.map +1 -1
- package/daemon/dist/routes/down.js +3 -0
- package/daemon/dist/routes/down.js.map +1 -1
- package/daemon/dist/routes/gateway.d.ts.map +1 -1
- package/daemon/dist/routes/gateway.js +3 -0
- package/daemon/dist/routes/gateway.js.map +1 -1
- package/daemon/dist/routes/projects.d.ts.map +1 -1
- package/daemon/dist/routes/projects.js +205 -18
- package/daemon/dist/routes/projects.js.map +1 -1
- package/daemon/dist/routes/rigs.d.ts.map +1 -1
- package/daemon/dist/routes/rigs.js +13 -5
- package/daemon/dist/routes/rigs.js.map +1 -1
- package/daemon/dist/routes/seat.d.ts.map +1 -1
- package/daemon/dist/routes/seat.js +78 -1
- package/daemon/dist/routes/seat.js.map +1 -1
- package/daemon/dist/routes/sessions.d.ts.map +1 -1
- package/daemon/dist/routes/sessions.js +4 -1
- package/daemon/dist/routes/sessions.js.map +1 -1
- package/daemon/dist/routes/transport.d.ts.map +1 -1
- package/daemon/dist/routes/transport.js +9 -1
- package/daemon/dist/routes/transport.js.map +1 -1
- package/daemon/dist/server.d.ts +5 -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 +32 -8
- package/daemon/dist/startup.js.map +1 -1
- package/daemon/dist/stream-classifier-surface.d.ts +6 -0
- package/daemon/dist/stream-classifier-surface.d.ts.map +1 -0
- package/daemon/dist/stream-classifier-surface.js +6 -0
- package/daemon/dist/stream-classifier-surface.js.map +1 -0
- package/daemon/dist/terminal/TerminalSessionBroker.d.ts +1 -0
- package/daemon/dist/terminal/TerminalSessionBroker.d.ts.map +1 -1
- package/daemon/dist/terminal/TerminalSessionBroker.js +10 -6
- package/daemon/dist/terminal/TerminalSessionBroker.js.map +1 -1
- package/daemon/docs/reference/getting-started.md +63 -5
- package/daemon/docs/reference/rig-spec.md +6 -1
- package/daemon/docs/reference/slack-app-setup.md +90 -0
- package/daemon/docs/reference/stream-classifier-worker.md +244 -0
- package/daemon/policies/builtin/yolo.policy.md +5 -5
- package/daemon/specs/rigs/launch/kernel/rig.yaml +4 -0
- package/dist/build-info.js +3 -3
- package/dist/commands/doctor.d.ts.map +1 -1
- package/dist/commands/doctor.js +9 -6
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/policy.d.ts.map +1 -1
- package/dist/commands/policy.js +8 -1
- package/dist/commands/policy.js.map +1 -1
- package/dist/commands/preflight.d.ts.map +1 -1
- package/dist/commands/preflight.js +2 -0
- package/dist/commands/preflight.js.map +1 -1
- package/dist/commands/project-jev.d.ts +115 -0
- package/dist/commands/project-jev.d.ts.map +1 -0
- package/dist/commands/project-jev.js +239 -0
- package/dist/commands/project-jev.js.map +1 -0
- package/dist/commands/project-worker.d.ts +96 -0
- package/dist/commands/project-worker.d.ts.map +1 -0
- package/dist/commands/project-worker.js +125 -0
- package/dist/commands/project-worker.js.map +1 -0
- package/dist/commands/project.d.ts +5 -1
- package/dist/commands/project.d.ts.map +1 -1
- package/dist/commands/project.js +161 -0
- package/dist/commands/project.js.map +1 -1
- package/dist/commands/seat.d.ts.map +1 -1
- package/dist/commands/seat.js +79 -0
- package/dist/commands/seat.js.map +1 -1
- package/dist/commands/send.d.ts.map +1 -1
- package/dist/commands/send.js +18 -5
- package/dist/commands/send.js.map +1 -1
- package/dist/commands/slack.d.ts +4 -1
- package/dist/commands/slack.d.ts.map +1 -1
- package/dist/commands/slack.js +41 -2
- package/dist/commands/slack.js.map +1 -1
- package/dist/commands/terminal.d.ts.map +1 -1
- package/dist/commands/terminal.js +2 -0
- package/dist/commands/terminal.js.map +1 -1
- package/dist/commands/walk.d.ts.map +1 -1
- package/dist/commands/walk.js +6 -0
- package/dist/commands/walk.js.map +1 -1
- package/dist/node-support.d.ts +12 -0
- package/dist/node-support.d.ts.map +1 -0
- package/dist/node-support.js +37 -0
- package/dist/node-support.js.map +1 -0
- package/dist/system-preflight.d.ts +2 -0
- package/dist/system-preflight.d.ts.map +1 -1
- package/dist/system-preflight.js +9 -10
- package/dist/system-preflight.js.map +1 -1
- package/package.json +3 -3
- package/scripts/check-abi.mjs +119 -65
- package/tui/dist/commands/registry.d.ts.map +1 -1
- package/tui/dist/commands/registry.js +3 -0
- package/tui/dist/commands/registry.js.map +1 -1
- package/tui/dist/connections/connections-model.d.ts +11 -1
- package/tui/dist/connections/connections-model.d.ts.map +1 -1
- package/tui/dist/connections/connections-model.js +28 -1
- package/tui/dist/connections/connections-model.js.map +1 -1
- package/tui/dist/daemon-client.d.ts +2 -0
- package/tui/dist/daemon-client.d.ts.map +1 -1
- package/tui/dist/daemon-client.js +1 -0
- package/tui/dist/daemon-client.js.map +1 -1
- package/tui/dist/hydrate.d.ts.map +1 -1
- package/tui/dist/hydrate.js +5 -0
- package/tui/dist/hydrate.js.map +1 -1
- package/tui/dist/main.js +16 -2
- package/tui/dist/main.js.map +1 -1
- package/tui/dist/print-for-copy.d.ts +36 -0
- package/tui/dist/print-for-copy.d.ts.map +1 -0
- package/tui/dist/print-for-copy.js +92 -0
- package/tui/dist/print-for-copy.js.map +1 -0
- package/tui/dist/render.d.ts.map +1 -1
- package/tui/dist/render.js +4 -1
- package/tui/dist/render.js.map +1 -1
- package/tui/dist/state.d.ts.map +1 -1
- package/tui/dist/state.js +2 -0
- package/tui/dist/state.js.map +1 -1
- package/tui/dist/types.d.ts +8 -0
- package/tui/dist/types.d.ts.map +1 -1
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
import { createHash } from "node:crypto";
|
|
2
|
+
import fs from "node:fs";
|
|
3
|
+
import { parse } from "yaml";
|
|
4
|
+
import { StreamClassificationWorker, ClassifierLeaseError, ClassificationAttemptError, ProjectClassifierError, LABEL_FIELDS } from "../../daemon/dist/stream-classifier-surface.js";
|
|
5
|
+
const hash = (text) => `sha256:${createHash("sha256").update(text).digest("hex")}`;
|
|
6
|
+
function localText(file) {
|
|
7
|
+
if (fs.statSync(file).size > 1024 * 1024)
|
|
8
|
+
throw Error("worker input exceeds 1 MiB");
|
|
9
|
+
const text = fs.readFileSync(file, "utf8");
|
|
10
|
+
if (Buffer.byteLength(text) > 1024 * 1024)
|
|
11
|
+
throw Error("worker input exceeds 1 MiB");
|
|
12
|
+
return text;
|
|
13
|
+
}
|
|
14
|
+
function response(r) {
|
|
15
|
+
if (r.status < 400)
|
|
16
|
+
return r.data;
|
|
17
|
+
const body = r.data;
|
|
18
|
+
const code = body?.error ?? "http_error", message = body?.message ?? code;
|
|
19
|
+
if (code.startsWith("lease_") || ["no_active_lease", "occupant_changed", "occupant_unavailable"].includes(code))
|
|
20
|
+
throw new ClassifierLeaseError(code, message);
|
|
21
|
+
if (code.startsWith("attempt_") || code === "already_classified")
|
|
22
|
+
throw new ClassificationAttemptError(code, message);
|
|
23
|
+
if (code === "idempotency_violation")
|
|
24
|
+
throw new ProjectClassifierError(code, message);
|
|
25
|
+
throw Error(`${code}: ${message}`);
|
|
26
|
+
}
|
|
27
|
+
export async function prepareWorker(client, opts, read = localText) {
|
|
28
|
+
const limit = Number(opts.limit ?? 20);
|
|
29
|
+
if (!Number.isInteger(limit) || limit < 1 || limit > 100)
|
|
30
|
+
throw Error("limit must be an integer in 1..100");
|
|
31
|
+
const text = read(opts.taxonomy), taxonomy = parse(text);
|
|
32
|
+
if (!taxonomy || typeof taxonomy.version !== "string" || !taxonomy.version.trim())
|
|
33
|
+
throw Error("taxonomy version is required");
|
|
34
|
+
const snapshot = response(await client.get(`/api/projects/worker-sources?project=${encodeURIComponent(opts.project)}`));
|
|
35
|
+
const occupant = snapshot.occupant;
|
|
36
|
+
if (!occupant?.session || !occupant.generation || !occupant.nodeId)
|
|
37
|
+
throw Error("real classifier occupant unavailable");
|
|
38
|
+
const values = { classificationType: [], classificationUrgency: [], classificationMaturity: [], classificationConfidence: [], classificationDestination: [], area: [], scopeRef: [] };
|
|
39
|
+
for (const [input, output] of [["kind", "classificationType"], ["urgency", "classificationUrgency"], ["maturity", "classificationMaturity"], ["area", "area"]]) {
|
|
40
|
+
const field = taxonomy.fields?.[input];
|
|
41
|
+
if (typeof field?.question !== "string" || !field.values || Array.isArray(field.values) || typeof field.values !== "object")
|
|
42
|
+
throw Error(`taxonomy ${input} question/values unavailable`);
|
|
43
|
+
values[output] = Object.keys(field.values);
|
|
44
|
+
}
|
|
45
|
+
values.scopeRef = snapshot.sources.scopes.map(x => x.id);
|
|
46
|
+
values.classificationDestination = [...snapshot.sources.roster.map(x => x.session), "pool"];
|
|
47
|
+
const candidates = {
|
|
48
|
+
version: hash(JSON.stringify({ sourceVersion: snapshot.version, taxonomyHash: hash(text), values })), values,
|
|
49
|
+
duplicateCandidates: snapshot.sources.recent.map(x => ({ streamItemId: x.streamItemId, evidenceRef: x.evidenceRef })), relatedRefs: [],
|
|
50
|
+
};
|
|
51
|
+
const query = new URLSearchParams({ classifierVersion: opts.classifierVersion, taxonomyVersion: taxonomy.version, evidenceEpoch: opts.evidenceEpoch, limit: opts.limit ?? "20", expectedOccupant: occupant.generation });
|
|
52
|
+
const eligible = response(await client.get(`/api/projects/eligible?${query}`));
|
|
53
|
+
return { snapshot, candidates, taxonomy: { version: taxonomy.version, source: opts.taxonomy, hash: hash(text), questions: taxonomy.fields }, eligible };
|
|
54
|
+
}
|
|
55
|
+
/** The receiving entry for one occupant-owned bounded wake. No automatic registration. */
|
|
56
|
+
export async function runProjectWake(client, opts, read = localText, experiment) {
|
|
57
|
+
const prepared = await prepareWorker(client, opts, read);
|
|
58
|
+
const { snapshot, candidates, taxonomy } = prepared;
|
|
59
|
+
const { session, generation } = snapshot.occupant;
|
|
60
|
+
const suffix = (url) => `${url}${url.includes("?") ? "&" : "?"}expectedOccupant=${encodeURIComponent(generation)}`;
|
|
61
|
+
const get = async (url) => response(await client.get(suffix(url)));
|
|
62
|
+
const post = async (url, body) => response(await client.post(suffix(url), body));
|
|
63
|
+
const packet = opts.decisions ? JSON.parse(read(opts.decisions)) : null;
|
|
64
|
+
if (packet && (!Array.isArray(packet.decisions) || packet.decisions.length > 100 || new Set(packet.decisions.map(x => x.streamItemId)).size !== packet.decisions.length))
|
|
65
|
+
throw Error("decisions must contain at most 100 unique stream item IDs");
|
|
66
|
+
if (!experiment && (!packet || packet.candidateSetVersion !== candidates.version))
|
|
67
|
+
throw Error("fresh decisions bound to this candidateSetVersion are required; no attempts started");
|
|
68
|
+
if (experiment && packet)
|
|
69
|
+
throw Error("choose one source of decisions");
|
|
70
|
+
const worker = new StreamClassificationWorker({
|
|
71
|
+
session, classifierVersion: opts.classifierVersion, taxonomyVersion: taxonomy.version, evidenceEpoch: opts.evidenceEpoch,
|
|
72
|
+
candidates, pageSize: Number(opts.limit ?? 20),
|
|
73
|
+
...(experiment ? { signal: experiment.signal, shouldStop: experiment.shouldStop, requestTimeoutMs: experiment.timeoutMs } : {}),
|
|
74
|
+
leases: {
|
|
75
|
+
evaluateDeadness: () => null, // acquire uses the existing evaluated-acquire transaction path.
|
|
76
|
+
acquire: actor => post("/api/projects/lease/acquire", { classifierSession: actor, evaluateDeadnessFirst: true }),
|
|
77
|
+
requireActiveHolder: (_actor, id) => get(`/api/projects/lease?expectedLeaseId=${encodeURIComponent(id ?? "")}`),
|
|
78
|
+
heartbeat: (id, actor) => post("/api/projects/lease/heartbeat", { leaseId: id, classifierSession: actor }),
|
|
79
|
+
},
|
|
80
|
+
attempts: {
|
|
81
|
+
eligible: input => get(`/api/projects/eligible?${new URLSearchParams(Object.entries(input).filter(([, v]) => v !== undefined).map(([k, v]) => [k, String(v)]))}`),
|
|
82
|
+
begin: input => post("/api/projects/attempts/begin", input),
|
|
83
|
+
abstain: input => post(`/api/projects/attempts/${encodeURIComponent(input.attemptId)}/abstain`, input),
|
|
84
|
+
fail: input => post(`/api/projects/attempts/${encodeURIComponent(input.attemptId)}/fail`, input),
|
|
85
|
+
},
|
|
86
|
+
classifier: { classify: input => post("/api/projects/project", input) },
|
|
87
|
+
stream: { getById: id => get(`/api/stream/${encodeURIComponent(id)}`) },
|
|
88
|
+
classify: experiment ? experiment.decide(prepared) : async (request) => {
|
|
89
|
+
if (snapshot.unavailable.length)
|
|
90
|
+
return { kind: "abstain", reason: `candidate sources unavailable: ${snapshot.unavailable.join("; ")}` };
|
|
91
|
+
if (!packet || packet.candidateSetVersion !== candidates.version)
|
|
92
|
+
return { kind: "abstain", reason: "decisions unavailable for this candidate snapshot" };
|
|
93
|
+
const selected = packet.decisions.find(x => x.streamItemId === request.item.streamItemId && x.bodyHash === hash(request.item.body));
|
|
94
|
+
if (!selected)
|
|
95
|
+
return { kind: "abstain", reason: "decision unavailable for exact stream item bytes" };
|
|
96
|
+
if (selected.decision?.kind === "classify") {
|
|
97
|
+
const labels = selected.decision.labels;
|
|
98
|
+
if (!labels || LABEL_FIELDS.some(field => labels[field] != null && !candidates.values[field].includes(labels[field])))
|
|
99
|
+
return { kind: "abstain", reason: "selected label candidate unavailable" };
|
|
100
|
+
if (labels.duplicateOfStreamItemId != null && !candidates.duplicateCandidates.some(x => x.streamItemId === labels.duplicateOfStreamItemId && x.evidenceRef === labels.duplicateEvidenceRef))
|
|
101
|
+
return { kind: "abstain", reason: "positive duplicate evidence unavailable" };
|
|
102
|
+
}
|
|
103
|
+
return selected.decision;
|
|
104
|
+
},
|
|
105
|
+
});
|
|
106
|
+
const result = await worker.wake();
|
|
107
|
+
// Descriptor only. A message requests this entry; it never executes a wake by itself.
|
|
108
|
+
let wakeRequest = null;
|
|
109
|
+
// A copied argument vector, never an interpolated shell command. The occupant still owns judgment.
|
|
110
|
+
const nextCommand = ["rig", "project", "candidates", "--project", opts.project, "--taxonomy", opts.taxonomy,
|
|
111
|
+
"--classifier-version", opts.classifierVersion, "--evidence-epoch", opts.evidenceEpoch, "--limit", opts.limit ?? "20", "--json"];
|
|
112
|
+
try {
|
|
113
|
+
if (experiment)
|
|
114
|
+
return { occupant: snapshot.occupant, candidateSetVersion: candidates.version, evidenceEpoch: opts.evidenceEpoch,
|
|
115
|
+
result, nextCommand: null, wakeRequest: null, registered: false, sourceSnapshot: snapshot,
|
|
116
|
+
continuation: "Foreground experiment only; no automatic retry or wake registration. Inspect this result before another explicit run." };
|
|
117
|
+
const descriptor = worker.wakeRegistration(session, generation);
|
|
118
|
+
descriptor.specYaml = JSON.stringify({ target: { session }, message: `Run ${JSON.stringify(nextCommand)} as an argument vector, read the exact eligible stream items with rig stream show, then supply source-bound decisions to rig project wake with these same options plus --decisions. One bounded wake only; honor returned nextWakeAt. Never change evidence epoch without owner authorization.` });
|
|
119
|
+
wakeRequest = descriptor;
|
|
120
|
+
}
|
|
121
|
+
catch { /* no acquired lease */ }
|
|
122
|
+
return { occupant: snapshot.occupant, candidateSetVersion: candidates.version, evidenceEpoch: opts.evidenceEpoch,
|
|
123
|
+
result, nextCommand, wakeRequest, registered: false, sourceSnapshot: snapshot };
|
|
124
|
+
}
|
|
125
|
+
//# sourceMappingURL=project-worker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"project-worker.js","sourceRoot":"","sources":["../../src/commands/project-worker.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,12 +3,16 @@ import type { StatusDeps } from "./status.js";
|
|
|
3
3
|
/**
|
|
4
4
|
* `rig project` — coordination primitive L2 (classifier) commands (PL-004 Phase B).
|
|
5
5
|
*
|
|
6
|
-
*
|
|
6
|
+
* Coordination uses `/api/projects`; optional experiment configuration/provider
|
|
7
|
+
* processing is local to the invoking occupant.
|
|
7
8
|
*
|
|
8
9
|
* Per PRD § L2: classifier judgment stays with the agent; daemon enforces
|
|
9
10
|
* the lease + idempotency + reclaim contract.
|
|
10
11
|
*/
|
|
11
12
|
export interface ProjectDeps extends StatusDeps {
|
|
13
|
+
workerRead?: (file: string) => string;
|
|
14
|
+
experimentEnv?: NodeJS.ProcessEnv;
|
|
15
|
+
experimentFetch?: typeof fetch;
|
|
12
16
|
}
|
|
13
17
|
export declare function projectCommand(depsOverride?: ProjectDeps): Command;
|
|
14
18
|
//# sourceMappingURL=project.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"project.d.ts","sourceRoot":"","sources":["../../src/commands/project.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"project.d.ts","sourceRoot":"","sources":["../../src/commands/project.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAI9C;;;;;;;;GAQG;AAEH,MAAM,WAAW,WAAY,SAAQ,UAAU;IAC7C,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;IACtC,aAAa,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IAClC,eAAe,CAAC,EAAE,OAAO,KAAK,CAAC;CAChC;AAqBD,wBAAgB,cAAc,CAAC,YAAY,CAAC,EAAE,WAAW,GAAG,OAAO,CAiSlE"}
|
package/dist/commands/project.js
CHANGED
|
@@ -1,7 +1,10 @@
|
|
|
1
|
+
import { prepareWorker, runProjectWake } from "./project-worker.js";
|
|
1
2
|
import { Command } from "commander";
|
|
2
3
|
import { DaemonClient } from "../client.js";
|
|
3
4
|
import { getDaemonStatus, getDaemonUrl, daemonStatusGuard } from "../daemon-lifecycle.js";
|
|
4
5
|
import { realDeps } from "./daemon.js";
|
|
6
|
+
import { experimentStatus, setExperiment, readBounded, JevRun, streamDecision, classifyCapture } from "./project-jev.js";
|
|
7
|
+
import fs from "node:fs";
|
|
5
8
|
async function withClient(deps, fn) {
|
|
6
9
|
const status = await getDaemonStatus(deps.lifecycleDeps);
|
|
7
10
|
if (!daemonStatusGuard(status))
|
|
@@ -25,6 +28,130 @@ export function projectCommand(depsOverride) {
|
|
|
25
28
|
lifecycleDeps: realDeps(),
|
|
26
29
|
clientFactory: (url) => new DaemonClient(url),
|
|
27
30
|
};
|
|
31
|
+
const experimental = cmd.command("experimental").description("Optional Jev experiment; advisory, finite foreground runs, disabled by default");
|
|
32
|
+
for (const verb of ["enable", "disable", "status"]) {
|
|
33
|
+
experimental.command(verb).requiredOption("--config <file>", "Explicit local experiment JSON; contains no credential")
|
|
34
|
+
.option("--max-requests <n>", "Maximum requests per foreground run, 1..20")
|
|
35
|
+
.option("--timeout-ms <n>", "Per-request deadline, 1000..30000")
|
|
36
|
+
.option("--json", "JSON output")
|
|
37
|
+
.action(opts => {
|
|
38
|
+
try {
|
|
39
|
+
if (verb !== "status")
|
|
40
|
+
setExperiment(opts.config, verb === "enable", {
|
|
41
|
+
...(opts.maxRequests !== undefined ? { maxRequests: Number(opts.maxRequests) } : {}),
|
|
42
|
+
...(opts.timeoutMs !== undefined ? { timeoutMs: Number(opts.timeoutMs) } : {}),
|
|
43
|
+
});
|
|
44
|
+
printResult(true, experimentStatus(opts.config), 200);
|
|
45
|
+
}
|
|
46
|
+
catch (error) {
|
|
47
|
+
printResult(true, { error: "experiment_config", message: error instanceof Error ? error.message : "unavailable" }, 400);
|
|
48
|
+
}
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
experimental.command("capture").description("Classify a selected archived capture; never captures a live terminal or changes its verdict")
|
|
52
|
+
.requiredOption("--config <file>", "Explicit experiment configuration")
|
|
53
|
+
.requiredOption("--input <file>", "Existing shadow JSONL archive (max 8 MiB)")
|
|
54
|
+
.requiredOption("--output <file>", "New advisory JSONL result file; never overwrites input")
|
|
55
|
+
.option("--json", "JSON output")
|
|
56
|
+
.action(async (opts) => {
|
|
57
|
+
let run, fd;
|
|
58
|
+
try {
|
|
59
|
+
const deps = getDeps(), status = experimentStatus(opts.config, deps.workerRead);
|
|
60
|
+
if (!status.enabled) {
|
|
61
|
+
printResult(true, status, 200);
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
64
|
+
run = new JevRun(opts.config, deps.workerRead, deps.experimentEnv, deps.experimentFetch);
|
|
65
|
+
const rows = readBounded(opts.input, 8 * 1024 * 1024).split("\n").filter(Boolean);
|
|
66
|
+
fd = fs.openSync(opts.output, "wx", 0o600);
|
|
67
|
+
process.once("SIGINT", run.stop);
|
|
68
|
+
process.once("SIGTERM", run.stop);
|
|
69
|
+
let inspected = 0, unavailable = 0;
|
|
70
|
+
for (const line of rows.slice(0, run.config.maxRequests)) {
|
|
71
|
+
if (run.stopped())
|
|
72
|
+
break;
|
|
73
|
+
const result = await classifyCapture(run, JSON.parse(line));
|
|
74
|
+
fs.writeFileSync(fd, JSON.stringify(result) + "\n");
|
|
75
|
+
inspected++;
|
|
76
|
+
if (result.status === "unavailable" || result.result?.status === "unavailable")
|
|
77
|
+
unavailable++;
|
|
78
|
+
}
|
|
79
|
+
printResult(true, { ...run.status(), inspected, unavailable, remaining: rows.length - inspected, output: opts.output }, run.status().reason || unavailable ? 409 : 200);
|
|
80
|
+
}
|
|
81
|
+
catch {
|
|
82
|
+
printResult(true, { error: "capture_experiment_unavailable", message: "No automatic retry; any existing output retains completed results." }, 409);
|
|
83
|
+
}
|
|
84
|
+
finally {
|
|
85
|
+
if (fd !== undefined)
|
|
86
|
+
fs.closeSync(fd);
|
|
87
|
+
if (run) {
|
|
88
|
+
process.removeListener("SIGINT", run.stop);
|
|
89
|
+
process.removeListener("SIGTERM", run.stop);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
});
|
|
93
|
+
for (const verb of ["candidates", "wake"]) {
|
|
94
|
+
cmd.command(verb)
|
|
95
|
+
.description(verb === "wake" ? "Run one bounded occupant wake with source-bound decisions or explicit Jev experiment; no registration" : "Read current source-bound candidates and eligible item IDs for the occupant")
|
|
96
|
+
.requiredOption("--project <id>", "Selected configured project")
|
|
97
|
+
.requiredOption("--taxonomy <file>", "Occupant-owned taxonomy/question YAML")
|
|
98
|
+
.requiredOption("--classifier-version <version>", "Classifier version")
|
|
99
|
+
.requiredOption("--evidence-epoch <epoch>", "Owner-authorized evidence epoch; candidate changes do not retry terminal attempts")
|
|
100
|
+
.option("--decisions <file>", "JSON decisions bound to candidateSetVersion and each item's bodyHash")
|
|
101
|
+
.option("--experiment <file>", "Opt-in experimental Jev config; replaces --decisions for one bounded wake")
|
|
102
|
+
.option("--limit <count>", "Items per bounded wake (1..100)", "20")
|
|
103
|
+
.option("--json", "JSON output")
|
|
104
|
+
.action(async (opts) => {
|
|
105
|
+
let run;
|
|
106
|
+
try {
|
|
107
|
+
if (opts.experiment) {
|
|
108
|
+
if (verb !== "wake" || opts.decisions)
|
|
109
|
+
throw Error("--experiment is for wake only and cannot be combined with --decisions");
|
|
110
|
+
const deps = getDeps(), status = experimentStatus(opts.experiment, deps.workerRead);
|
|
111
|
+
if (!status.enabled) {
|
|
112
|
+
printResult(true, status, 200);
|
|
113
|
+
return;
|
|
114
|
+
}
|
|
115
|
+
run = new JevRun(opts.experiment, deps.workerRead, deps.experimentEnv, deps.experimentFetch);
|
|
116
|
+
opts.limit = String(Math.min(Number(opts.limit), run.config.maxRequests));
|
|
117
|
+
process.once("SIGINT", run.stop);
|
|
118
|
+
process.once("SIGTERM", run.stop);
|
|
119
|
+
}
|
|
120
|
+
await withClient(getDeps(), async (client) => {
|
|
121
|
+
try {
|
|
122
|
+
const result = verb === "wake" ? await runProjectWake(client, opts, getDeps().workerRead, run ? {
|
|
123
|
+
decide: prepared => streamDecision(run, prepared), signal: run.controller.signal,
|
|
124
|
+
shouldStop: run.stopped, timeoutMs: run.config.timeoutMs,
|
|
125
|
+
} : undefined) : await prepareWorker(client, opts, getDeps().workerRead);
|
|
126
|
+
console.log(JSON.stringify(run ? { ...result, experiment: run.status() } : result));
|
|
127
|
+
if ("result" in result && ["unavailable", "lease_lost"].includes(result.result.state))
|
|
128
|
+
process.exitCode = 1;
|
|
129
|
+
if (run?.status().reason)
|
|
130
|
+
process.exitCode = 1;
|
|
131
|
+
}
|
|
132
|
+
catch (error) {
|
|
133
|
+
printResult(true, { error: "worker_unavailable", message: error instanceof Error ? error.message : "unavailable", phase: "prepare", nextWakeAt: new Date(Date.now() + 60_000).toISOString() }, 409);
|
|
134
|
+
}
|
|
135
|
+
});
|
|
136
|
+
}
|
|
137
|
+
catch (error) {
|
|
138
|
+
printResult(true, { error: "experiment_unavailable", message: error instanceof Error ? error.message : "unavailable" }, 409);
|
|
139
|
+
}
|
|
140
|
+
finally {
|
|
141
|
+
if (run) {
|
|
142
|
+
process.removeListener("SIGINT", run.stop);
|
|
143
|
+
process.removeListener("SIGTERM", run.stop);
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
});
|
|
147
|
+
}
|
|
148
|
+
for (const verb of ["shadow-status", "shadow-drain", "shadow-stop"]) {
|
|
149
|
+
cmd.command(verb).description("Inspect, drain or stop an explicitly configured private shadow sink; never enables capture")
|
|
150
|
+
.action(async () => withClient(getDeps(), async (client) => {
|
|
151
|
+
const result = verb === "shadow-status" ? await client.get("/api/projects/shadow") : await client.post(`/api/projects/shadow/${verb === "shadow-stop" ? "stop" : "drain"}`);
|
|
152
|
+
printResult(true, result.data, result.status);
|
|
153
|
+
}));
|
|
154
|
+
}
|
|
28
155
|
// ---- Lease lifecycle ----
|
|
29
156
|
cmd
|
|
30
157
|
.command("lease-acquire")
|
|
@@ -93,19 +220,44 @@ export function projectCommand(depsOverride) {
|
|
|
93
220
|
.command("classify <streamItemId>")
|
|
94
221
|
.description("Project a stream item with classification fields (idempotent on stream_item_id; requires active lease)")
|
|
95
222
|
.requiredOption("--session <session>", "Classifier session name (must hold active lease)")
|
|
223
|
+
.requiredOption("--lease-id <id>", "Lease ID this result was computed under (from lease-acquire); a replaced or expired lease is refused")
|
|
224
|
+
.option("--attempt-id <id>", "Attempt ledger ID to mark written in the same transaction (omit for a manual classification)")
|
|
225
|
+
.option("--execution-id <id>", "Execution ID from the attempt's begin (required with --attempt-id; a superseded execution is refused)")
|
|
96
226
|
.option("--type <type>", "Classification type (e.g., idea, bug, feature-request)")
|
|
97
227
|
.option("--urgency <urgency>", "Classification urgency (e.g., normal, high, critical)")
|
|
98
228
|
.option("--maturity <maturity>", "Classification maturity (e.g., concept, drafted, ratified)")
|
|
99
229
|
.option("--confidence <confidence>", "Classification confidence (e.g., low, medium, high)")
|
|
100
230
|
.option("--destination <destination>", "Classification destination (downstream slice/seat)")
|
|
101
231
|
.option("--action <action>", "Action type (e.g., create, advance)")
|
|
232
|
+
.option("--area <area>", "Product area label")
|
|
233
|
+
.option("--scope-ref <id>", "Mission/slice scope id (requires --candidate-set-version)")
|
|
234
|
+
.option("--duplicate-of <streamItemId>", "Earlier stream item this one duplicates")
|
|
235
|
+
.option("--needs-human <value>", "true | false (omit when unknown; unknown is not false)")
|
|
236
|
+
.option("--classifier-version <v>", "Classifier version that produced the label")
|
|
237
|
+
.option("--taxonomy-version <v>", "Taxonomy version the label uses")
|
|
238
|
+
.option("--candidate-set-version <v>", "Version of the scope/roster candidate set the label was chosen from")
|
|
102
239
|
.option("--json", "JSON output for agents")
|
|
103
240
|
.action(async (streamItemId, opts) => {
|
|
241
|
+
if (opts.needsHuman !== undefined && opts.needsHuman !== "true" && opts.needsHuman !== "false") {
|
|
242
|
+
console.error("--needs-human must be true or false; omit it when unknown");
|
|
243
|
+
process.exitCode = 1;
|
|
244
|
+
return;
|
|
245
|
+
}
|
|
104
246
|
const deps = getDeps();
|
|
105
247
|
await withClient(deps, async (client) => {
|
|
106
248
|
const res = await client.post("/api/projects/project", {
|
|
107
249
|
streamItemId,
|
|
108
250
|
classifierSession: opts.session,
|
|
251
|
+
leaseId: opts.leaseId,
|
|
252
|
+
attemptId: opts.attemptId,
|
|
253
|
+
executionId: opts.executionId,
|
|
254
|
+
area: opts.area,
|
|
255
|
+
scopeRef: opts.scopeRef,
|
|
256
|
+
duplicateOfStreamItemId: opts.duplicateOf,
|
|
257
|
+
needsHuman: opts.needsHuman === undefined ? undefined : opts.needsHuman === "true",
|
|
258
|
+
classifierVersion: opts.classifierVersion,
|
|
259
|
+
taxonomyVersion: opts.taxonomyVersion,
|
|
260
|
+
candidateSetVersion: opts.candidateSetVersion,
|
|
109
261
|
classificationType: opts.type,
|
|
110
262
|
classificationUrgency: opts.urgency,
|
|
111
263
|
classificationMaturity: opts.maturity,
|
|
@@ -122,6 +274,9 @@ export function projectCommand(depsOverride) {
|
|
|
122
274
|
.description("List project classifications with filters")
|
|
123
275
|
.option("--session <session>", "Filter by classifier session")
|
|
124
276
|
.option("--destination <destination>", "Filter by classification destination")
|
|
277
|
+
.option("--area <area>", "Filter by area")
|
|
278
|
+
.option("--scope-ref <id>", "Filter by scope ref")
|
|
279
|
+
.option("--needs-human <value>", "Filter: true | false | unknown")
|
|
125
280
|
.option("--limit <n>", "Result limit", "100")
|
|
126
281
|
.option("--json", "JSON output for agents")
|
|
127
282
|
.action(async (opts) => {
|
|
@@ -131,6 +286,12 @@ export function projectCommand(depsOverride) {
|
|
|
131
286
|
params.set("classifierSession", opts.session);
|
|
132
287
|
if (opts.destination)
|
|
133
288
|
params.set("classificationDestination", opts.destination);
|
|
289
|
+
if (opts.area)
|
|
290
|
+
params.set("area", opts.area);
|
|
291
|
+
if (opts.scopeRef)
|
|
292
|
+
params.set("scopeRef", opts.scopeRef);
|
|
293
|
+
if (opts.needsHuman)
|
|
294
|
+
params.set("needsHuman", opts.needsHuman);
|
|
134
295
|
if (opts.limit)
|
|
135
296
|
params.set("limit", opts.limit);
|
|
136
297
|
await withClient(deps, async (client) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"project.js","sourceRoot":"","sources":["../../src/commands/project.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"project.js","sourceRoot":"","sources":["../../src/commands/project.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"seat.d.ts","sourceRoot":"","sources":["../../src/commands/seat.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAE9C,MAAM,MAAM,QAAQ,GAAG,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"seat.d.ts","sourceRoot":"","sources":["../../src/commands/seat.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAE9C,MAAM,MAAM,QAAQ,GAAG,UAAU,CAAC;AAyPlC,wBAAgB,WAAW,CAAC,YAAY,CAAC,EAAE,QAAQ,GAAG;IAAE,SAAS,CAAC,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,CAAA;CAAE,GAAG,OAAO,CAwZpG;AAED,UAAU,kBAAkB;IAC1B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED;0EAC0E;AAC1E,wBAAsB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,kBAAkB,EAAE,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CA8C3G;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,YAAY,CAAC,EAAE,QAAQ,GAAG,OAAO,CA6BhE"}
|
package/dist/commands/seat.js
CHANGED
|
@@ -18,7 +18,20 @@ function printHuman(status) {
|
|
|
18
18
|
console.log(`Rig: ${status.rig_name}`);
|
|
19
19
|
console.log(`Logical ID: ${status.logical_id}`);
|
|
20
20
|
console.log(`Current occupant: ${display(status.current_occupant)}`);
|
|
21
|
+
if (status.typingGuard) {
|
|
22
|
+
const g = status.typingGuard;
|
|
23
|
+
console.log(`Typing guard: ${g.effective ? "on" : "off"}${g.pending ? ` (activation pending; requested ${g.desired ? "on" : "off"})` : ""}; ${g.heldCount} retained`);
|
|
24
|
+
console.log("Automatic input pauses while on, including writing lifecycle. Disabling does not replay held messages.");
|
|
25
|
+
}
|
|
21
26
|
console.log(`Session: ${display(status.session_status, "unknown")}`);
|
|
27
|
+
if (status.permissions) {
|
|
28
|
+
const p = status.permissions;
|
|
29
|
+
console.log(`Permission mode for future launches: ${p.desired?.mode ?? p.selectionState}`);
|
|
30
|
+
console.log(`Last launch arguments: ${p.lastLaunchArguments?.value ?? "unknown"}${p.lastLaunchArguments?.approvalPolicy ? `; approval=${p.lastLaunchArguments.approvalPolicy}` : ""}`);
|
|
31
|
+
console.log("Native permission effect: unverified by this status read");
|
|
32
|
+
if (p.error)
|
|
33
|
+
console.log(`Permission selection unavailable: ${p.error}`);
|
|
34
|
+
}
|
|
22
35
|
console.log(`Startup: ${display(status.startup_status, "unknown")}`);
|
|
23
36
|
console.log(`Occupant lifecycle: ${status.occupant_lifecycle}`);
|
|
24
37
|
console.log(`Continuity outcome: ${display(status.continuity_outcome, "unknown")}`);
|
|
@@ -120,6 +133,57 @@ export function seatCommand(depsOverride) {
|
|
|
120
133
|
clientFactory: (url) => new DaemonClient(url),
|
|
121
134
|
};
|
|
122
135
|
const readStdin = depsOverride?.readStdin ?? defaultReadStdin;
|
|
136
|
+
const guardRequest = async (method, path, body, json) => {
|
|
137
|
+
const deps = getDeps();
|
|
138
|
+
const daemon = await getDaemonStatus(deps.lifecycleDeps);
|
|
139
|
+
if (!daemonStatusGuard(daemon))
|
|
140
|
+
return;
|
|
141
|
+
const client = deps.clientFactory(getDaemonUrl(daemon));
|
|
142
|
+
const result = method === "GET" ? await client.get(path) : await client.post(path, body ?? {});
|
|
143
|
+
console.log(JSON.stringify(result.data, null, json ? undefined : 2));
|
|
144
|
+
if (result.status >= 400)
|
|
145
|
+
process.exitCode = result.status >= 500 ? 2 : 1;
|
|
146
|
+
};
|
|
147
|
+
cmd.command("set-typing-guard").argument("<seat>").requiredOption("--enabled <boolean>", "true pauses all automatic terminal input; false permits new sends")
|
|
148
|
+
.requiredOption("--reason <text>").option("--json").description("Protect this seat's draft by retaining automatic delivery, even at an empty prompt")
|
|
149
|
+
.addHelpText("after", `
|
|
150
|
+
This persistent, per-seat preference defaults off. On pauses ALL automatic terminal
|
|
151
|
+
input, even at an empty prompt; it is not a typing detector or permission mode.
|
|
152
|
+
Messages and wakes are retained in the existing outbox. Writing lifecycle operations
|
|
153
|
+
refuse before effects; raw/force/submit-only options do not bypass protection.
|
|
154
|
+
Direct human terminal input remains available. Other seats keep their own settings.
|
|
155
|
+
|
|
156
|
+
Activation can be pending while an already-started operation finishes. Read
|
|
157
|
+
rig seat status <seat> and wait for effective=true before relying on protection.
|
|
158
|
+
Inspect retained bodies with rig seat held-messages <seat> (or --id <id>).
|
|
159
|
+
Turning the guard off permits NEW sends; it never flushes or retries held messages.
|
|
160
|
+
Retire a reviewed record with rig seat retire-held-message <seat> <id> --reason <text>.
|
|
161
|
+
Retirement preserves evidence and frees quota; it does not deliver or close work.
|
|
162
|
+
|
|
163
|
+
Active retention defaults: 100 records / 8 MiB per seat, 1 MiB per message.
|
|
164
|
+
New admissions refuse at capacity. Already-committed queue intent is preserved even
|
|
165
|
+
when a concurrent activation exceeds that cap; inspect and retire it explicitly.
|
|
166
|
+
Protection covers OpenRig's managed input paths, not external tmux tools or another
|
|
167
|
+
process writing directly to the terminal. Disable deliberately before lifecycle work.
|
|
168
|
+
`)
|
|
169
|
+
.action(async (seat, opts) => {
|
|
170
|
+
if (opts.enabled !== "true" && opts.enabled !== "false") {
|
|
171
|
+
console.error("--enabled must be true or false");
|
|
172
|
+
process.exitCode = 1;
|
|
173
|
+
return;
|
|
174
|
+
}
|
|
175
|
+
await guardRequest("POST", `/api/seat/set-typing-guard/${encodeURIComponent(seat)}`, { enabled: opts.enabled === "true", reason: opts.reason }, opts.json);
|
|
176
|
+
});
|
|
177
|
+
cmd.command("held-messages").argument("<seat>").option("--limit <n>", "Page size", "100").option("--offset <n>", "Page offset", "0").option("--id <id>", "Read one retained or retired record by ID").option("--json")
|
|
178
|
+
.description("Read retained messages outside the protected terminal; reading never delivers them")
|
|
179
|
+
.action(async (seat, opts) => {
|
|
180
|
+
await guardRequest("GET", `/api/seat/held-messages/${encodeURIComponent(seat)}?limit=${encodeURIComponent(opts.limit)}&offset=${encodeURIComponent(opts.offset)}${opts.id ? `&id=${encodeURIComponent(opts.id)}` : ""}`, undefined, opts.json);
|
|
181
|
+
});
|
|
182
|
+
cmd.command("retire-held-message").argument("<seat>").argument("<id>").requiredOption("--reason <text>").option("--json")
|
|
183
|
+
.description("Release one held message's active quota, preserving evidence; does not deliver or close work")
|
|
184
|
+
.action(async (seat, id, opts) => {
|
|
185
|
+
await guardRequest("POST", `/api/seat/retire-held-message/${encodeURIComponent(seat)}/${encodeURIComponent(id)}`, { reason: opts.reason }, opts.json);
|
|
186
|
+
});
|
|
123
187
|
cmd
|
|
124
188
|
.command("status")
|
|
125
189
|
.argument("<seat>", "Canonical session name or logical seat ref")
|
|
@@ -285,6 +349,21 @@ Examples:
|
|
|
285
349
|
}
|
|
286
350
|
printOk(res.data);
|
|
287
351
|
};
|
|
352
|
+
cmd
|
|
353
|
+
.command("set-permissions")
|
|
354
|
+
.argument("<seat>", "Canonical session name or logical seat ref")
|
|
355
|
+
.requiredOption("--mode <mode>", "floor, full_bypass, inherit, or a Claude mode supported by the bound managed launch context")
|
|
356
|
+
.requiredOption("--reason <text>", "Reason for the audited future-launch selection")
|
|
357
|
+
.option("--json", "JSON output for agents")
|
|
358
|
+
.description("Select native permissions for future managed launches; no relaunch or work-posture change")
|
|
359
|
+
.addHelpText("after", "\nUse inherit to clear this seat's explicit selection. Current native processes, history, rules and hooks remain unchanged. A later lifecycle action needs its own authorization.")
|
|
360
|
+
.action(async (seat, opts) => {
|
|
361
|
+
await runLifecycleVerb("set-permissions", seat, { mode: opts.mode, reason: opts.reason }, opts, data => {
|
|
362
|
+
const selection = data["to"];
|
|
363
|
+
console.log(`Permission mode: ${selection?.mode ?? "inherit"}${data["changed"] === false ? " (unchanged)" : " (audited)"}`);
|
|
364
|
+
console.log(String(data["effect"]));
|
|
365
|
+
});
|
|
366
|
+
});
|
|
288
367
|
cmd
|
|
289
368
|
.command("set-model")
|
|
290
369
|
.argument("<seat>", "Canonical session name or logical seat ref")
|