@openrig/cli 0.5.12 → 0.5.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/daemon/assets/plugins/openrig-core/skills/messaging-the-human/SKILL.md +40 -5
- package/daemon/context-packs/onboarding-width/manifest.yaml +1 -1
- package/daemon/context-packs/onboarding-width/public-what-you-can-do.md +89 -10
- package/daemon/context-packs/skills/agent-operated-software/manifest.yaml +1 -1
- package/daemon/context-packs/skills/agent-operated-workflows/manifest.yaml +1 -1
- package/daemon/context-packs/skills/applying-a-permission-policy/manifest.yaml +1 -1
- package/daemon/context-packs/skills/claude-compaction-restore/manifest.yaml +1 -1
- package/daemon/context-packs/skills/core/agent-starters/manifest.yaml +1 -1
- package/daemon/context-packs/skills/core/agent-startup-and-context-ingestion/manifest.yaml +1 -1
- package/daemon/context-packs/skills/core/cross-host-rig-commands/manifest.yaml +1 -1
- package/daemon/context-packs/skills/core/human-in-the-loop/manifest.yaml +1 -1
- package/daemon/context-packs/skills/core/messaging-the-human/SKILL.md +40 -5
- package/daemon/context-packs/skills/core/messaging-the-human/manifest.yaml +1 -1
- package/daemon/context-packs/skills/core/openrig-architect/manifest.yaml +1 -1
- package/daemon/context-packs/skills/core/openrig-cmux/manifest.yaml +1 -1
- package/daemon/context-packs/skills/core/openrig-herdr/manifest.yaml +1 -1
- package/daemon/context-packs/skills/core/openrig-skills/manifest.yaml +1 -1
- package/daemon/context-packs/skills/core/openrig-upgrade/manifest.yaml +1 -1
- package/daemon/context-packs/skills/core/rig-bundles-and-shareable-artifacts/manifest.yaml +1 -1
- package/daemon/context-packs/skills/core/rig-lifecycle/manifest.yaml +1 -1
- package/daemon/context-packs/skills/core/session-source-fork/manifest.yaml +1 -1
- package/daemon/context-packs/skills/core/specification-system/manifest.yaml +1 -1
- package/daemon/context-packs/skills/core/topology-mutation-and-seat-management/manifest.yaml +1 -1
- package/daemon/context-packs/skills/core/watchdog/manifest.yaml +1 -1
- package/daemon/context-packs/skills/delegating-work/manifest.yaml +1 -1
- package/daemon/context-packs/skills/forming-an-openrig-mental-model/manifest.yaml +1 -1
- package/daemon/context-packs/skills/loading-addressable-markdown/manifest.yaml +1 -1
- package/daemon/context-packs/skills/mission-slice-sop/manifest.yaml +1 -1
- package/daemon/context-packs/skills/openrig-operating-model/manifest.yaml +1 -1
- package/daemon/context-packs/skills/openrig-user/manifest.yaml +1 -1
- package/daemon/context-packs/skills/orienting-to-an-inherited-seat/manifest.yaml +1 -1
- package/daemon/context-packs/skills/pm/backlog-capture/manifest.yaml +1 -1
- package/daemon/context-packs/skills/pm/context-builder/manifest.yaml +1 -1
- package/daemon/context-packs/skills/pm/exec-summary/manifest.yaml +1 -1
- package/daemon/context-packs/skills/pm/office-hours/manifest.yaml +1 -1
- package/daemon/context-packs/skills/pm/plan-review/manifest.yaml +1 -1
- package/daemon/context-packs/skills/pm/requirements-writer/manifest.yaml +1 -1
- package/daemon/context-packs/skills/pm/ui-mockup/manifest.yaml +1 -1
- package/daemon/context-packs/skills/pods/development-team/manifest.yaml +1 -1
- package/daemon/context-packs/skills/pods/orchestration-team/manifest.yaml +1 -1
- package/daemon/context-packs/skills/pods/oversight-team/manifest.yaml +1 -1
- package/daemon/context-packs/skills/pods/review-team/manifest.yaml +1 -1
- package/daemon/context-packs/skills/process/agent-browser/manifest.yaml +1 -1
- package/daemon/context-packs/skills/process/context-engineering/manifest.yaml +1 -1
- package/daemon/context-packs/skills/process/dogfood/manifest.yaml +1 -1
- package/daemon/context-packs/skills/process/frontend-design/manifest.yaml +1 -1
- package/daemon/context-packs/skills/process/systematic-debugging/manifest.yaml +1 -1
- package/daemon/context-packs/skills/process/test-driven-development/manifest.yaml +1 -1
- package/daemon/context-packs/skills/process/verification-before-completion/manifest.yaml +1 -1
- package/daemon/context-packs/skills/queue-handoff/manifest.yaml +1 -1
- package/daemon/context-packs/skills/refocusing/manifest.yaml +1 -1
- package/daemon/context-packs/skills/retiring-and-inheriting-a-seat/manifest.yaml +1 -1
- package/daemon/context-packs/skills/seat-continuity-and-handover/manifest.yaml +1 -1
- package/daemon/context-packs/skills/session-compaction-and-restore/manifest.yaml +1 -1
- package/daemon/context-packs/skills/software-for-agents/manifest.yaml +1 -1
- package/daemon/context-packs/world-example/manifest.yaml +1 -1
- package/daemon/context-packs/world-public/manifest.yaml +1 -1
- package/daemon/dist/attention-surface.d.ts +38 -0
- package/daemon/dist/attention-surface.d.ts.map +1 -0
- package/daemon/dist/attention-surface.js +3 -0
- package/daemon/dist/attention-surface.js.map +1 -0
- package/daemon/dist/build-info.js +3 -3
- package/daemon/dist/db/all-migrations.d.ts +1 -1
- package/daemon/dist/db/all-migrations.d.ts.map +1 -1
- package/daemon/dist/db/all-migrations.js +12 -2
- package/daemon/dist/db/all-migrations.js.map +1 -1
- package/daemon/dist/db/migrations/080_scoped_operating_posture.d.ts +4 -0
- package/daemon/dist/db/migrations/080_scoped_operating_posture.d.ts.map +1 -0
- package/daemon/dist/db/migrations/080_scoped_operating_posture.js +21 -0
- package/daemon/dist/db/migrations/080_scoped_operating_posture.js.map +1 -0
- package/daemon/dist/db/migrations/081_human_notification_intent.d.ts +3 -0
- package/daemon/dist/db/migrations/081_human_notification_intent.d.ts.map +1 -0
- package/daemon/dist/db/migrations/081_human_notification_intent.js +9 -0
- package/daemon/dist/db/migrations/081_human_notification_intent.js.map +1 -0
- package/daemon/dist/db/migrations/082_archive_identity_provenance.d.ts +5 -0
- package/daemon/dist/db/migrations/082_archive_identity_provenance.d.ts.map +1 -0
- package/daemon/dist/db/migrations/082_archive_identity_provenance.js +7 -0
- package/daemon/dist/db/migrations/082_archive_identity_provenance.js.map +1 -0
- package/daemon/dist/db/migrations/083_review_read_indexes.d.ts +4 -0
- package/daemon/dist/db/migrations/083_review_read_indexes.d.ts.map +1 -0
- package/daemon/dist/db/migrations/083_review_read_indexes.js +12 -0
- package/daemon/dist/db/migrations/083_review_read_indexes.js.map +1 -0
- package/daemon/dist/db/migrations/084_inventory_event_indexes.d.ts +5 -0
- package/daemon/dist/db/migrations/084_inventory_event_indexes.d.ts.map +1 -0
- package/daemon/dist/db/migrations/084_inventory_event_indexes.js +14 -0
- package/daemon/dist/db/migrations/084_inventory_event_indexes.js.map +1 -0
- package/daemon/dist/domain/execution-view.d.ts +1 -0
- package/daemon/dist/domain/execution-view.d.ts.map +1 -1
- package/daemon/dist/domain/execution-view.js +38 -19
- package/daemon/dist/domain/execution-view.js.map +1 -1
- package/daemon/dist/domain/files/file-read.d.ts +17 -0
- package/daemon/dist/domain/files/file-read.d.ts.map +1 -0
- package/daemon/dist/domain/files/file-read.js +24 -0
- package/daemon/dist/domain/files/file-read.js.map +1 -0
- package/daemon/dist/domain/gateway/connections-projection.d.ts +4 -4
- package/daemon/dist/domain/gateway/slack/message.d.ts +13 -12
- package/daemon/dist/domain/gateway/slack/message.d.ts.map +1 -1
- package/daemon/dist/domain/gateway/slack/message.js +40 -77
- package/daemon/dist/domain/gateway/slack/message.js.map +1 -1
- package/daemon/dist/domain/gateway/slack/outbound-driver.d.ts +2 -0
- package/daemon/dist/domain/gateway/slack/outbound-driver.d.ts.map +1 -1
- package/daemon/dist/domain/gateway/slack/outbound-driver.js +2 -0
- package/daemon/dist/domain/gateway/slack/outbound-driver.js.map +1 -1
- package/daemon/dist/domain/gateway/slack/queue-access.d.ts +2 -0
- package/daemon/dist/domain/gateway/slack/queue-access.d.ts.map +1 -1
- package/daemon/dist/domain/gateway/slack/queue-access.js +2 -0
- package/daemon/dist/domain/gateway/slack/queue-access.js.map +1 -1
- package/daemon/dist/domain/gateway/slack/slack-delivery.d.ts +4 -1
- package/daemon/dist/domain/gateway/slack/slack-delivery.d.ts.map +1 -1
- package/daemon/dist/domain/gateway/slack/slack-delivery.js +85 -3
- package/daemon/dist/domain/gateway/slack/slack-delivery.js.map +1 -1
- package/daemon/dist/domain/gateway/slack/slack-subsystem.d.ts.map +1 -1
- package/daemon/dist/domain/gateway/slack/slack-subsystem.js +8 -1
- package/daemon/dist/domain/gateway/slack/slack-subsystem.js.map +1 -1
- package/daemon/dist/domain/health-context.d.ts +3 -0
- package/daemon/dist/domain/health-context.d.ts.map +1 -1
- package/daemon/dist/domain/health-context.js +78 -6
- package/daemon/dist/domain/health-context.js.map +1 -1
- package/daemon/dist/domain/health-detectors.d.ts +2 -1
- package/daemon/dist/domain/health-detectors.d.ts.map +1 -1
- package/daemon/dist/domain/health-detectors.js +8 -2
- package/daemon/dist/domain/health-detectors.js.map +1 -1
- package/daemon/dist/domain/health-diagnosis.d.ts +51 -1
- package/daemon/dist/domain/health-diagnosis.d.ts.map +1 -1
- package/daemon/dist/domain/health-diagnosis.js +60 -9
- package/daemon/dist/domain/health-diagnosis.js.map +1 -1
- package/daemon/dist/domain/health-passive-ceremony.d.ts +7 -1
- package/daemon/dist/domain/health-passive-ceremony.d.ts.map +1 -1
- package/daemon/dist/domain/health-passive-ceremony.js +59 -26
- package/daemon/dist/domain/health-passive-ceremony.js.map +1 -1
- package/daemon/dist/domain/health-projection.d.ts +2 -0
- package/daemon/dist/domain/health-projection.d.ts.map +1 -1
- package/daemon/dist/domain/health-projection.js.map +1 -1
- package/daemon/dist/domain/policies/delivery-digest-flush.d.ts.map +1 -1
- package/daemon/dist/domain/policies/delivery-digest-flush.js +23 -3
- package/daemon/dist/domain/policies/delivery-digest-flush.js.map +1 -1
- package/daemon/dist/domain/proof/judgments.d.ts +10 -3
- package/daemon/dist/domain/proof/judgments.d.ts.map +1 -1
- package/daemon/dist/domain/proof/judgments.js +26 -8
- package/daemon/dist/domain/proof/judgments.js.map +1 -1
- package/daemon/dist/domain/queue-repository.d.ts +19 -6
- package/daemon/dist/domain/queue-repository.d.ts.map +1 -1
- package/daemon/dist/domain/queue-repository.js +61 -11
- package/daemon/dist/domain/queue-repository.js.map +1 -1
- package/daemon/dist/domain/queue-retention.d.ts.map +1 -1
- package/daemon/dist/domain/queue-retention.js +6 -2
- package/daemon/dist/domain/queue-retention.js.map +1 -1
- package/daemon/dist/domain/queue-transition-log.d.ts +1 -0
- package/daemon/dist/domain/queue-transition-log.d.ts.map +1 -1
- package/daemon/dist/domain/queue-transition-log.js +19 -7
- package/daemon/dist/domain/queue-transition-log.js.map +1 -1
- package/daemon/dist/domain/review/fleet-compose.d.ts +7 -6
- package/daemon/dist/domain/review/fleet-compose.d.ts.map +1 -1
- package/daemon/dist/domain/review/fleet-compose.js +25 -11
- package/daemon/dist/domain/review/fleet-compose.js.map +1 -1
- package/daemon/dist/domain/rig-mode/operating-posture.d.ts +49 -0
- package/daemon/dist/domain/rig-mode/operating-posture.d.ts.map +1 -0
- package/daemon/dist/domain/rig-mode/operating-posture.js +255 -0
- package/daemon/dist/domain/rig-mode/operating-posture.js.map +1 -0
- package/daemon/dist/domain/rig-mode/rig-mode-defaults.d.ts.map +1 -1
- package/daemon/dist/domain/rig-mode/rig-mode-defaults.js +20 -0
- package/daemon/dist/domain/rig-mode/rig-mode-defaults.js.map +1 -1
- package/daemon/dist/domain/rig-mode/rig-mode-store.d.ts +2 -2
- package/daemon/dist/domain/rig-mode/rig-mode-store.d.ts.map +1 -1
- package/daemon/dist/domain/rig-mode/rig-mode-store.js +19 -3
- package/daemon/dist/domain/rig-mode/rig-mode-store.js.map +1 -1
- package/daemon/dist/domain/rig-mode/rig-mode-types.d.ts +12 -7
- package/daemon/dist/domain/rig-mode/rig-mode-types.d.ts.map +1 -1
- package/daemon/dist/domain/rig-mode/rig-mode-types.js +14 -3
- package/daemon/dist/domain/rig-mode/rig-mode-types.js.map +1 -1
- package/daemon/dist/domain/scope/scope-view-projection.d.ts +2 -2
- package/daemon/dist/domain/scope/scope-view-projection.d.ts.map +1 -1
- package/daemon/dist/domain/scope/scope-view-projection.js +2 -2
- package/daemon/dist/domain/scope/scope-view-projection.js.map +1 -1
- package/daemon/dist/domain/slices/slice-detail-projector.d.ts +1 -0
- package/daemon/dist/domain/slices/slice-detail-projector.d.ts.map +1 -1
- package/daemon/dist/domain/slices/slice-detail-projector.js +3 -0
- package/daemon/dist/domain/slices/slice-detail-projector.js.map +1 -1
- package/daemon/dist/domain/slices/slice-indexer.d.ts +4 -0
- package/daemon/dist/domain/slices/slice-indexer.d.ts.map +1 -1
- package/daemon/dist/domain/slices/slice-indexer.js +10 -1
- package/daemon/dist/domain/slices/slice-indexer.js.map +1 -1
- package/daemon/dist/domain/terminal/herdr-adapter.d.ts +2 -0
- package/daemon/dist/domain/terminal/herdr-adapter.d.ts.map +1 -1
- package/daemon/dist/domain/terminal/herdr-adapter.js +1 -1
- package/daemon/dist/domain/terminal/herdr-adapter.js.map +1 -1
- package/daemon/dist/domain/terminal/terminal-service.d.ts +30 -2
- package/daemon/dist/domain/terminal/terminal-service.d.ts.map +1 -1
- package/daemon/dist/domain/terminal/terminal-service.js +53 -13
- package/daemon/dist/domain/terminal/terminal-service.js.map +1 -1
- package/daemon/dist/domain/view-projector.d.ts +2 -0
- package/daemon/dist/domain/view-projector.d.ts.map +1 -1
- package/daemon/dist/domain/view-projector.js +1 -1
- package/daemon/dist/domain/view-projector.js.map +1 -1
- package/daemon/dist/domain/workspace/project-catalog.d.ts +18 -0
- package/daemon/dist/domain/workspace/project-catalog.d.ts.map +1 -0
- package/daemon/dist/domain/workspace/project-catalog.js +66 -0
- package/daemon/dist/domain/workspace/project-catalog.js.map +1 -0
- package/daemon/dist/domain/workspace/project-read.d.ts +29 -0
- package/daemon/dist/domain/workspace/project-read.d.ts.map +1 -0
- package/daemon/dist/domain/workspace/project-read.js +125 -0
- package/daemon/dist/domain/workspace/project-read.js.map +1 -0
- package/daemon/dist/health-projection-surface.d.ts +1 -0
- package/daemon/dist/health-projection-surface.d.ts.map +1 -1
- package/daemon/dist/local-reading-surface.d.ts +3 -0
- package/daemon/dist/local-reading-surface.d.ts.map +1 -0
- package/daemon/dist/local-reading-surface.js +3 -0
- package/daemon/dist/local-reading-surface.js.map +1 -0
- package/daemon/dist/project-catalog-surface.d.ts +2 -0
- package/daemon/dist/project-catalog-surface.d.ts.map +1 -0
- package/daemon/dist/project-catalog-surface.js +2 -0
- package/daemon/dist/project-catalog-surface.js.map +1 -0
- package/daemon/dist/routes/attention.d.ts +3 -0
- package/daemon/dist/routes/attention.d.ts.map +1 -0
- package/daemon/dist/routes/attention.js +155 -0
- package/daemon/dist/routes/attention.js.map +1 -0
- package/daemon/dist/routes/files.d.ts +1 -1
- package/daemon/dist/routes/files.d.ts.map +1 -1
- package/daemon/dist/routes/files.js +4 -24
- package/daemon/dist/routes/files.js.map +1 -1
- package/daemon/dist/routes/queue.d.ts +4 -18
- package/daemon/dist/routes/queue.d.ts.map +1 -1
- package/daemon/dist/routes/queue.js +23 -33
- package/daemon/dist/routes/queue.js.map +1 -1
- package/daemon/dist/routes/review.js +1 -1
- package/daemon/dist/routes/rig-mode.d.ts.map +1 -1
- package/daemon/dist/routes/rig-mode.js +67 -14
- package/daemon/dist/routes/rig-mode.js.map +1 -1
- package/daemon/dist/routes/rigs.js +5 -1
- package/daemon/dist/routes/rigs.js.map +1 -1
- package/daemon/dist/routes/scopes.d.ts.map +1 -1
- package/daemon/dist/routes/scopes.js +74 -20
- package/daemon/dist/routes/scopes.js.map +1 -1
- package/daemon/dist/routes/slices.d.ts +2 -2
- package/daemon/dist/routes/slices.d.ts.map +1 -1
- package/daemon/dist/routes/slices.js +18 -1
- package/daemon/dist/routes/slices.js.map +1 -1
- package/daemon/dist/routes/spec-library.d.ts.map +1 -1
- package/daemon/dist/routes/spec-library.js +11 -2
- package/daemon/dist/routes/spec-library.js.map +1 -1
- package/daemon/dist/routes/terminal.d.ts.map +1 -1
- package/daemon/dist/routes/terminal.js +14 -4
- package/daemon/dist/routes/terminal.js.map +1 -1
- package/daemon/dist/routes/views.d.ts.map +1 -1
- package/daemon/dist/routes/views.js +11 -1
- package/daemon/dist/routes/views.js.map +1 -1
- package/daemon/dist/server.d.ts +1 -0
- package/daemon/dist/server.d.ts.map +1 -1
- package/daemon/dist/server.js +3 -0
- package/daemon/dist/server.js.map +1 -1
- package/daemon/dist/startup.d.ts.map +1 -1
- package/daemon/dist/startup.js +19 -5
- package/daemon/dist/startup.js.map +1 -1
- package/daemon/docs/reference/getting-started.md +13 -1
- package/daemon/docs/reference/health-diagnosis.md +83 -6
- package/daemon/docs/reference/project-workspace.md +23 -0
- package/daemon/docs/reference/scoped-operating-posture.md +95 -0
- package/daemon/specs/agents/shared/skills/core/messaging-the-human/SKILL.md +40 -5
- package/dist/build-info.js +3 -3
- package/dist/commands/context.d.ts.map +1 -1
- package/dist/commands/context.js +66 -124
- package/dist/commands/context.js.map +1 -1
- package/dist/commands/health.d.ts.map +1 -1
- package/dist/commands/health.js +17 -2
- package/dist/commands/health.js.map +1 -1
- package/dist/commands/queue.d.ts.map +1 -1
- package/dist/commands/queue.js +5 -1
- package/dist/commands/queue.js.map +1 -1
- package/dist/commands/rig-mode.d.ts +2 -2
- package/dist/commands/rig-mode.d.ts.map +1 -1
- package/dist/commands/rig-mode.js +36 -11
- package/dist/commands/rig-mode.js.map +1 -1
- package/dist/lib/context-git.d.ts +141 -0
- package/dist/lib/context-git.d.ts.map +1 -0
- package/dist/lib/context-git.js +256 -0
- package/dist/lib/context-git.js.map +1 -0
- package/dist/lib/context-install.d.ts +5 -0
- package/dist/lib/context-install.d.ts.map +1 -0
- package/dist/lib/context-install.js +125 -0
- package/dist/lib/context-install.js.map +1 -0
- package/dist/lib/work-install.d.ts.map +1 -1
- package/dist/lib/work-install.js +11 -36
- package/dist/lib/work-install.js.map +1 -1
- package/dist/local-reading.d.ts +31 -0
- package/dist/local-reading.d.ts.map +1 -0
- package/dist/local-reading.js +62 -0
- package/dist/local-reading.js.map +1 -0
- package/node_modules/@openrig/daemon/dist/attention-surface.d.ts +38 -0
- package/node_modules/@openrig/daemon/dist/attention-surface.d.ts.map +1 -0
- package/node_modules/@openrig/daemon/dist/attention-surface.js +3 -0
- package/node_modules/@openrig/daemon/dist/attention-surface.js.map +1 -0
- package/node_modules/@openrig/daemon/dist/build-info.js +3 -3
- package/node_modules/@openrig/daemon/dist/db/all-migrations.d.ts +1 -1
- package/node_modules/@openrig/daemon/dist/db/all-migrations.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/db/all-migrations.js +12 -2
- package/node_modules/@openrig/daemon/dist/db/all-migrations.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/db/migrations/080_scoped_operating_posture.d.ts +4 -0
- package/node_modules/@openrig/daemon/dist/db/migrations/080_scoped_operating_posture.d.ts.map +1 -0
- package/node_modules/@openrig/daemon/dist/db/migrations/080_scoped_operating_posture.js +21 -0
- package/node_modules/@openrig/daemon/dist/db/migrations/080_scoped_operating_posture.js.map +1 -0
- package/node_modules/@openrig/daemon/dist/db/migrations/081_human_notification_intent.d.ts +3 -0
- package/node_modules/@openrig/daemon/dist/db/migrations/081_human_notification_intent.d.ts.map +1 -0
- package/node_modules/@openrig/daemon/dist/db/migrations/081_human_notification_intent.js +9 -0
- package/node_modules/@openrig/daemon/dist/db/migrations/081_human_notification_intent.js.map +1 -0
- package/node_modules/@openrig/daemon/dist/db/migrations/082_archive_identity_provenance.d.ts +5 -0
- package/node_modules/@openrig/daemon/dist/db/migrations/082_archive_identity_provenance.d.ts.map +1 -0
- package/node_modules/@openrig/daemon/dist/db/migrations/082_archive_identity_provenance.js +7 -0
- package/node_modules/@openrig/daemon/dist/db/migrations/082_archive_identity_provenance.js.map +1 -0
- package/node_modules/@openrig/daemon/dist/db/migrations/083_review_read_indexes.d.ts +4 -0
- package/node_modules/@openrig/daemon/dist/db/migrations/083_review_read_indexes.d.ts.map +1 -0
- package/node_modules/@openrig/daemon/dist/db/migrations/083_review_read_indexes.js +12 -0
- package/node_modules/@openrig/daemon/dist/db/migrations/083_review_read_indexes.js.map +1 -0
- package/node_modules/@openrig/daemon/dist/db/migrations/084_inventory_event_indexes.d.ts +5 -0
- package/node_modules/@openrig/daemon/dist/db/migrations/084_inventory_event_indexes.d.ts.map +1 -0
- package/node_modules/@openrig/daemon/dist/db/migrations/084_inventory_event_indexes.js +14 -0
- package/node_modules/@openrig/daemon/dist/db/migrations/084_inventory_event_indexes.js.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/execution-view.d.ts +1 -0
- package/node_modules/@openrig/daemon/dist/domain/execution-view.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/execution-view.js +38 -19
- package/node_modules/@openrig/daemon/dist/domain/execution-view.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/files/file-read.d.ts +17 -0
- package/node_modules/@openrig/daemon/dist/domain/files/file-read.d.ts.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/files/file-read.js +24 -0
- package/node_modules/@openrig/daemon/dist/domain/files/file-read.js.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/gateway/connections-projection.d.ts +4 -4
- package/node_modules/@openrig/daemon/dist/domain/gateway/slack/message.d.ts +13 -12
- package/node_modules/@openrig/daemon/dist/domain/gateway/slack/message.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/gateway/slack/message.js +40 -77
- package/node_modules/@openrig/daemon/dist/domain/gateway/slack/message.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/gateway/slack/outbound-driver.d.ts +2 -0
- package/node_modules/@openrig/daemon/dist/domain/gateway/slack/outbound-driver.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/gateway/slack/outbound-driver.js +2 -0
- package/node_modules/@openrig/daemon/dist/domain/gateway/slack/outbound-driver.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/gateway/slack/queue-access.d.ts +2 -0
- package/node_modules/@openrig/daemon/dist/domain/gateway/slack/queue-access.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/gateway/slack/queue-access.js +2 -0
- package/node_modules/@openrig/daemon/dist/domain/gateway/slack/queue-access.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/gateway/slack/slack-delivery.d.ts +4 -1
- package/node_modules/@openrig/daemon/dist/domain/gateway/slack/slack-delivery.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/gateway/slack/slack-delivery.js +85 -3
- package/node_modules/@openrig/daemon/dist/domain/gateway/slack/slack-delivery.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/gateway/slack/slack-subsystem.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/gateway/slack/slack-subsystem.js +8 -1
- package/node_modules/@openrig/daemon/dist/domain/gateway/slack/slack-subsystem.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/health-context.d.ts +3 -0
- package/node_modules/@openrig/daemon/dist/domain/health-context.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/health-context.js +78 -6
- package/node_modules/@openrig/daemon/dist/domain/health-context.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/health-detectors.d.ts +2 -1
- package/node_modules/@openrig/daemon/dist/domain/health-detectors.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/health-detectors.js +8 -2
- package/node_modules/@openrig/daemon/dist/domain/health-detectors.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/health-diagnosis.d.ts +51 -1
- package/node_modules/@openrig/daemon/dist/domain/health-diagnosis.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/health-diagnosis.js +60 -9
- package/node_modules/@openrig/daemon/dist/domain/health-diagnosis.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/health-passive-ceremony.d.ts +7 -1
- package/node_modules/@openrig/daemon/dist/domain/health-passive-ceremony.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/health-passive-ceremony.js +59 -26
- package/node_modules/@openrig/daemon/dist/domain/health-passive-ceremony.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/health-projection.d.ts +2 -0
- package/node_modules/@openrig/daemon/dist/domain/health-projection.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/health-projection.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/policies/delivery-digest-flush.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/policies/delivery-digest-flush.js +23 -3
- package/node_modules/@openrig/daemon/dist/domain/policies/delivery-digest-flush.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/proof/judgments.d.ts +10 -3
- package/node_modules/@openrig/daemon/dist/domain/proof/judgments.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/proof/judgments.js +26 -8
- package/node_modules/@openrig/daemon/dist/domain/proof/judgments.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/queue-repository.d.ts +19 -6
- package/node_modules/@openrig/daemon/dist/domain/queue-repository.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/queue-repository.js +61 -11
- package/node_modules/@openrig/daemon/dist/domain/queue-repository.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/queue-retention.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/queue-retention.js +6 -2
- package/node_modules/@openrig/daemon/dist/domain/queue-retention.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/queue-transition-log.d.ts +1 -0
- package/node_modules/@openrig/daemon/dist/domain/queue-transition-log.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/queue-transition-log.js +19 -7
- package/node_modules/@openrig/daemon/dist/domain/queue-transition-log.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/review/fleet-compose.d.ts +7 -6
- package/node_modules/@openrig/daemon/dist/domain/review/fleet-compose.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/review/fleet-compose.js +25 -11
- package/node_modules/@openrig/daemon/dist/domain/review/fleet-compose.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/rig-mode/operating-posture.d.ts +49 -0
- package/node_modules/@openrig/daemon/dist/domain/rig-mode/operating-posture.d.ts.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/rig-mode/operating-posture.js +255 -0
- package/node_modules/@openrig/daemon/dist/domain/rig-mode/operating-posture.js.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/rig-mode/rig-mode-defaults.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/rig-mode/rig-mode-defaults.js +20 -0
- package/node_modules/@openrig/daemon/dist/domain/rig-mode/rig-mode-defaults.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/rig-mode/rig-mode-store.d.ts +2 -2
- package/node_modules/@openrig/daemon/dist/domain/rig-mode/rig-mode-store.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/rig-mode/rig-mode-store.js +19 -3
- package/node_modules/@openrig/daemon/dist/domain/rig-mode/rig-mode-store.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/rig-mode/rig-mode-types.d.ts +12 -7
- package/node_modules/@openrig/daemon/dist/domain/rig-mode/rig-mode-types.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/rig-mode/rig-mode-types.js +14 -3
- package/node_modules/@openrig/daemon/dist/domain/rig-mode/rig-mode-types.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/scope/scope-view-projection.d.ts +2 -2
- package/node_modules/@openrig/daemon/dist/domain/scope/scope-view-projection.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/scope/scope-view-projection.js +2 -2
- package/node_modules/@openrig/daemon/dist/domain/scope/scope-view-projection.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/slices/slice-detail-projector.d.ts +1 -0
- package/node_modules/@openrig/daemon/dist/domain/slices/slice-detail-projector.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/slices/slice-detail-projector.js +3 -0
- package/node_modules/@openrig/daemon/dist/domain/slices/slice-detail-projector.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/slices/slice-indexer.d.ts +4 -0
- package/node_modules/@openrig/daemon/dist/domain/slices/slice-indexer.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/slices/slice-indexer.js +10 -1
- package/node_modules/@openrig/daemon/dist/domain/slices/slice-indexer.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/terminal/herdr-adapter.d.ts +2 -0
- package/node_modules/@openrig/daemon/dist/domain/terminal/herdr-adapter.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/terminal/herdr-adapter.js +1 -1
- package/node_modules/@openrig/daemon/dist/domain/terminal/herdr-adapter.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/terminal/terminal-service.d.ts +30 -2
- package/node_modules/@openrig/daemon/dist/domain/terminal/terminal-service.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/terminal/terminal-service.js +53 -13
- package/node_modules/@openrig/daemon/dist/domain/terminal/terminal-service.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/view-projector.d.ts +2 -0
- package/node_modules/@openrig/daemon/dist/domain/view-projector.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/view-projector.js +1 -1
- package/node_modules/@openrig/daemon/dist/domain/view-projector.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/workspace/project-catalog.d.ts +18 -0
- package/node_modules/@openrig/daemon/dist/domain/workspace/project-catalog.d.ts.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/workspace/project-catalog.js +66 -0
- package/node_modules/@openrig/daemon/dist/domain/workspace/project-catalog.js.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/workspace/project-read.d.ts +29 -0
- package/node_modules/@openrig/daemon/dist/domain/workspace/project-read.d.ts.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/workspace/project-read.js +125 -0
- package/node_modules/@openrig/daemon/dist/domain/workspace/project-read.js.map +1 -0
- package/node_modules/@openrig/daemon/dist/health-projection-surface.d.ts +1 -0
- package/node_modules/@openrig/daemon/dist/health-projection-surface.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/local-reading-surface.d.ts +3 -0
- package/node_modules/@openrig/daemon/dist/local-reading-surface.d.ts.map +1 -0
- package/node_modules/@openrig/daemon/dist/local-reading-surface.js +3 -0
- package/node_modules/@openrig/daemon/dist/local-reading-surface.js.map +1 -0
- package/node_modules/@openrig/daemon/dist/project-catalog-surface.d.ts +2 -0
- package/node_modules/@openrig/daemon/dist/project-catalog-surface.d.ts.map +1 -0
- package/node_modules/@openrig/daemon/dist/project-catalog-surface.js +2 -0
- package/node_modules/@openrig/daemon/dist/project-catalog-surface.js.map +1 -0
- package/node_modules/@openrig/daemon/dist/routes/attention.d.ts +3 -0
- package/node_modules/@openrig/daemon/dist/routes/attention.d.ts.map +1 -0
- package/node_modules/@openrig/daemon/dist/routes/attention.js +155 -0
- package/node_modules/@openrig/daemon/dist/routes/attention.js.map +1 -0
- package/node_modules/@openrig/daemon/dist/routes/files.d.ts +1 -1
- package/node_modules/@openrig/daemon/dist/routes/files.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/routes/files.js +4 -24
- package/node_modules/@openrig/daemon/dist/routes/files.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/routes/queue.d.ts +4 -18
- package/node_modules/@openrig/daemon/dist/routes/queue.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/routes/queue.js +23 -33
- package/node_modules/@openrig/daemon/dist/routes/queue.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/routes/review.js +1 -1
- package/node_modules/@openrig/daemon/dist/routes/rig-mode.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/routes/rig-mode.js +67 -14
- package/node_modules/@openrig/daemon/dist/routes/rig-mode.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/routes/rigs.js +5 -1
- package/node_modules/@openrig/daemon/dist/routes/rigs.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/routes/scopes.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/routes/scopes.js +74 -20
- package/node_modules/@openrig/daemon/dist/routes/scopes.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/routes/slices.d.ts +2 -2
- package/node_modules/@openrig/daemon/dist/routes/slices.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/routes/slices.js +18 -1
- package/node_modules/@openrig/daemon/dist/routes/slices.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/routes/spec-library.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/routes/spec-library.js +11 -2
- package/node_modules/@openrig/daemon/dist/routes/spec-library.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/routes/terminal.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/routes/terminal.js +14 -4
- package/node_modules/@openrig/daemon/dist/routes/terminal.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/routes/views.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/routes/views.js +11 -1
- package/node_modules/@openrig/daemon/dist/routes/views.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/server.d.ts +1 -0
- package/node_modules/@openrig/daemon/dist/server.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/server.js +3 -0
- package/node_modules/@openrig/daemon/dist/server.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/startup.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/startup.js +19 -5
- package/node_modules/@openrig/daemon/dist/startup.js.map +1 -1
- package/node_modules/@openrig/daemon/package.json +13 -1
- package/package.json +1 -1
- package/tui/dist/attention/attention-model.d.ts +23 -0
- package/tui/dist/attention/attention-model.d.ts.map +1 -0
- package/tui/dist/attention/attention-model.js +85 -0
- package/tui/dist/attention/attention-model.js.map +1 -0
- package/tui/dist/attention/source-continuity.d.ts +9 -0
- package/tui/dist/attention/source-continuity.d.ts.map +1 -0
- package/tui/dist/attention/source-continuity.js +38 -0
- package/tui/dist/attention/source-continuity.js.map +1 -0
- package/tui/dist/commands/help.d.ts +4 -0
- package/tui/dist/commands/help.d.ts.map +1 -0
- package/tui/dist/commands/help.js +43 -0
- package/tui/dist/commands/help.js.map +1 -0
- package/tui/dist/commands/registry.d.ts.map +1 -1
- package/tui/dist/commands/registry.js +15 -1
- package/tui/dist/commands/registry.js.map +1 -1
- package/tui/dist/config/config-model.d.ts.map +1 -1
- package/tui/dist/config/config-model.js +33 -9
- package/tui/dist/config/config-model.js.map +1 -1
- package/tui/dist/connections/connections-model.js +1 -1
- package/tui/dist/connections/connections-model.js.map +1 -1
- package/tui/dist/daemon-client.d.ts +39 -7
- package/tui/dist/daemon-client.d.ts.map +1 -1
- package/tui/dist/daemon-client.js +74 -15
- package/tui/dist/daemon-client.js.map +1 -1
- package/tui/dist/demo-data.d.ts.map +1 -1
- package/tui/dist/demo-data.js +1 -0
- package/tui/dist/demo-data.js.map +1 -1
- package/tui/dist/detail.d.ts.map +1 -1
- package/tui/dist/detail.js +20 -7
- package/tui/dist/detail.js.map +1 -1
- package/tui/dist/execution/execution-model.d.ts +1 -0
- package/tui/dist/execution/execution-model.d.ts.map +1 -1
- package/tui/dist/execution/execution-model.js +88 -119
- package/tui/dist/execution/execution-model.js.map +1 -1
- package/tui/dist/health/health-model.d.ts.map +1 -1
- package/tui/dist/health/health-model.js +26 -34
- package/tui/dist/health/health-model.js.map +1 -1
- package/tui/dist/hydrate.d.ts +1 -1
- package/tui/dist/hydrate.d.ts.map +1 -1
- package/tui/dist/hydrate.js +89 -23
- package/tui/dist/hydrate.js.map +1 -1
- package/tui/dist/input.d.ts.map +1 -1
- package/tui/dist/input.js +20 -3
- package/tui/dist/input.js.map +1 -1
- package/tui/dist/live.d.ts +3 -1
- package/tui/dist/live.d.ts.map +1 -1
- package/tui/dist/live.js +66 -7
- package/tui/dist/live.js.map +1 -1
- package/tui/dist/local-reading.d.ts +54 -0
- package/tui/dist/local-reading.d.ts.map +1 -0
- package/tui/dist/local-reading.js +122 -0
- package/tui/dist/local-reading.js.map +1 -0
- package/tui/dist/main.js +121 -34
- package/tui/dist/main.js.map +1 -1
- package/tui/dist/motion.d.ts +2 -0
- package/tui/dist/motion.d.ts.map +1 -1
- package/tui/dist/motion.js +4 -0
- package/tui/dist/motion.js.map +1 -1
- package/tui/dist/navigator.d.ts.map +1 -1
- package/tui/dist/navigator.js +14 -3
- package/tui/dist/navigator.js.map +1 -1
- package/tui/dist/page-read.d.ts +19 -0
- package/tui/dist/page-read.d.ts.map +1 -0
- package/tui/dist/page-read.js +84 -0
- package/tui/dist/page-read.js.map +1 -0
- package/tui/dist/pulse/pulse-model.d.ts.map +1 -1
- package/tui/dist/pulse/pulse-model.js +3 -4
- package/tui/dist/pulse/pulse-model.js.map +1 -1
- package/tui/dist/reading.d.ts +36 -0
- package/tui/dist/reading.d.ts.map +1 -0
- package/tui/dist/reading.js +89 -0
- package/tui/dist/reading.js.map +1 -0
- package/tui/dist/render.d.ts +5 -0
- package/tui/dist/render.d.ts.map +1 -1
- package/tui/dist/render.js +190 -174
- package/tui/dist/render.js.map +1 -1
- package/tui/dist/scopes/scopes-model.d.ts +3 -0
- package/tui/dist/scopes/scopes-model.d.ts.map +1 -1
- package/tui/dist/scopes/scopes-model.js +8 -2
- package/tui/dist/scopes/scopes-model.js.map +1 -1
- package/tui/dist/sections.d.ts +2 -0
- package/tui/dist/sections.d.ts.map +1 -1
- package/tui/dist/sections.js +9 -5
- package/tui/dist/sections.js.map +1 -1
- package/tui/dist/startup.d.ts +10 -1
- package/tui/dist/startup.d.ts.map +1 -1
- package/tui/dist/startup.js +99 -27
- package/tui/dist/startup.js.map +1 -1
- package/tui/dist/state.d.ts.map +1 -1
- package/tui/dist/state.js +121 -22
- package/tui/dist/state.js.map +1 -1
- package/tui/dist/stylize.js +28 -28
- package/tui/dist/stylize.js.map +1 -1
- package/tui/dist/terminals/terminal-model.d.ts +57 -0
- package/tui/dist/terminals/terminal-model.d.ts.map +1 -0
- package/tui/dist/terminals/terminal-model.js +113 -0
- package/tui/dist/terminals/terminal-model.js.map +1 -0
- package/tui/dist/types.d.ts +84 -1
- package/tui/dist/types.d.ts.map +1 -1
|
@@ -8,6 +8,12 @@ not declare a pathology or perform corrective actions.
|
|
|
8
8
|
|
|
9
9
|
## Enable a bounded diagnosis loop
|
|
10
10
|
|
|
11
|
+
Process-only diagnosis also requires an explicit delegated operating posture at the
|
|
12
|
+
finding's resolved scope. Human-led is the visible product default for resolved
|
|
13
|
+
unset scopes; failed or ambiguous scope reads stay unknown. Findings remain
|
|
14
|
+
inspectable in either case. See [scoped operating posture](scoped-operating-posture.md)
|
|
15
|
+
for deliberate transitions, phase/source information and the shared health contract.
|
|
16
|
+
|
|
11
17
|
```sh
|
|
12
18
|
rig health policy --json > effective-policy.json
|
|
13
19
|
jq '.policy' effective-policy.json > health-policy.json
|
|
@@ -74,7 +80,7 @@ and 99. CLI/TUI finding explanations show the policy version used.
|
|
|
74
80
|
|
|
75
81
|
Ordinary queue activity can admit a diagnosis without a health checkpoint.
|
|
76
82
|
The source discovers declared handoff families touched in the observation window,
|
|
77
|
-
uses their explicit `mission:` / `slice:` tags, and collects exact transition IDs,
|
|
83
|
+
uses their explicit `project:` / `mission:` / `slice:` tags and workflow membership, and collects exact transition IDs,
|
|
78
84
|
normal project/mission/slice authority, progress and proof references, and workflow
|
|
79
85
|
closure evidence. It never interprets Markdown or counts proof files, approvals,
|
|
80
86
|
C1 pairing, commits, tests, or terminal rows as accepted product outcomes.
|
|
@@ -125,13 +131,15 @@ traffic in the same family starts a new episode. Repeated reads never advance
|
|
|
125
131
|
these boundaries. One occurrence and the existing owner cooldown apply to each
|
|
126
132
|
episode; a disposition stops repeated requests.
|
|
127
133
|
|
|
128
|
-
This bounded source covers explicitly
|
|
134
|
+
This bounded source covers explicitly linked project or mission work: at most 2,000 touched
|
|
129
135
|
qitems, 200 roots, 1,000 members / 10,000 transitions per family, 200 workflow
|
|
130
136
|
receipts, 200 declared slices, and 100 proof files per selected slice. Overflow
|
|
131
137
|
refuses visibly. Context files are bounded to 64 KiB. A lineage beginning before
|
|
132
138
|
the retained window remains indeterminate, with the missing interval named.
|
|
133
|
-
|
|
134
|
-
|
|
139
|
+
Project planning does not require a successor mission: an explicit project identity
|
|
140
|
+
resolves its current context, with mission and phase absent unless evidenced.
|
|
141
|
+
Unlinked or ambiguous work retains unknown scope and cannot infer delegated
|
|
142
|
+
interruption. Absence is not health. The packet includes missing context references so an agent
|
|
135
143
|
can name or repair its own knowledge gap without manufacturing source truth.
|
|
136
144
|
|
|
137
145
|
## Optional outcome-boundary checkpoint
|
|
@@ -215,7 +223,7 @@ indeterminate source truth and cannot admit a diagnosis. Availability is checked
|
|
|
215
223
|
again on every projection; presence does not certify the artifact's meaning.
|
|
216
224
|
This authority assessment is distinct from the
|
|
217
225
|
project/mission/slice documents supplied to the diagnosing agent. Embedded
|
|
218
|
-
|
|
226
|
+
authority is limited to canonical `SPEC.md` and project/mission/slice YAML files
|
|
219
227
|
at their corresponding work-tree nodes, at most 64 KiB each. Other paths and
|
|
220
228
|
symlink aliases are reported unavailable without embedding their contents.
|
|
221
229
|
Each entry retains its authority level. Project files must be at the configured
|
|
@@ -225,6 +233,46 @@ mission when declared). A sibling slice or another mission is unavailable even
|
|
|
225
233
|
when its filename is canonical. Without mission/slice scope, those authority
|
|
226
234
|
levels remain unavailable.
|
|
227
235
|
|
|
236
|
+
## Current selected context and correction
|
|
237
|
+
|
|
238
|
+
`diagnosis show` and `list` refresh top-level `authority` at `authorityReadAt`.
|
|
239
|
+
The original `packet.authority` and presentation receipts remain historical
|
|
240
|
+
snapshots. Current `guidance` also remains available when the retained packet
|
|
241
|
+
predates this guidance. Full reads include contents; summaries retain addresses,
|
|
242
|
+
hashes, availability, selection provenance and reasons for unavailable sources.
|
|
243
|
+
|
|
244
|
+
The reader reuses `project.yaml`'s `install.context` and the selected
|
|
245
|
+
`lifecycle.profiles[profile].workflow.context_refs`, plus the current mission's
|
|
246
|
+
`lifecycle.workflow.context_refs`. Project owners can select planning authority
|
|
247
|
+
and relevant causal corrections there, even before any mission exists:
|
|
248
|
+
|
|
249
|
+
```yaml
|
|
250
|
+
install:
|
|
251
|
+
context:
|
|
252
|
+
- PREFLIGHT.md#current-authority
|
|
253
|
+
- evidence/process-correction.md
|
|
254
|
+
```
|
|
255
|
+
|
|
256
|
+
These are authored selections, not inferred authority or executable adoption.
|
|
257
|
+
Paths resolve relative to the declaring manifest and must stay within the
|
|
258
|
+
resolved project. Local `file.md#h2/h3` addresses use the existing Markdown
|
|
259
|
+
reader. Missing/ambiguous sections, aliases, unsupported addresses, unknown scope
|
|
260
|
+
and missing selections' files remain unavailable. No links are followed
|
|
261
|
+
recursively and no successor mission is guessed. The reader accepts at most 32
|
|
262
|
+
selected addresses, each source file at most 64 KiB, with 128 KiB of selected
|
|
263
|
+
content in total; exceeded limits are visible as unavailable references. A hash
|
|
264
|
+
for a section covers exactly the returned section bytes. Bare library refs and
|
|
265
|
+
remote URLs are not fetched by this local reader.
|
|
266
|
+
|
|
267
|
+
Authority and current usefulness are separate questions. An incomplete global
|
|
268
|
+
outcome census cannot justify retaining a particular restriction whose premise
|
|
269
|
+
was disproved. Read current corrections before interpreting historical
|
|
270
|
+
dispositions, preserve unrelated valid boundaries such as publication authority,
|
|
271
|
+
and distinguish automatic wake/receipt bookkeeping from useful owner action.
|
|
272
|
+
Normal interactive planning is not itself pathology. State the relevance and
|
|
273
|
+
cost of the interruption in the assessment; do not turn the signal into a
|
|
274
|
+
recurring self-audit or require a universal outside reviewer.
|
|
275
|
+
|
|
228
276
|
Checkpoints are audited under `health/checkpoints/history/`; replaying identical
|
|
229
277
|
bytes writes nothing. Later censuses advance observation time. High-to-high
|
|
230
278
|
observations retain episode identity; a clearing checkpoint and later recurrence
|
|
@@ -245,7 +293,7 @@ not a closed evidence set.
|
|
|
245
293
|
{
|
|
246
294
|
"verdict": "insufficient evidence",
|
|
247
295
|
"causalStart": null,
|
|
248
|
-
"steering": "Inspect the
|
|
296
|
+
"steering": "Inspect the missing outcome evidence; apply separately established corrections within current authority.",
|
|
249
297
|
"uncertainty": "The cited artifact does not yet establish the denominator.",
|
|
250
298
|
"evidenceRefs": ["<inspected-evidence-path>"]
|
|
251
299
|
}
|
|
@@ -263,6 +311,35 @@ it does not close or alter the underlying product work. Changed dispositions
|
|
|
263
311
|
retain earlier testimony; exact replay is a no-op. A detector clearing is
|
|
264
312
|
recorded separately from an agent declaring the problem resolved.
|
|
265
313
|
|
|
314
|
+
An optional `correction` keeps the causal judgment, proposed or taken action,
|
|
315
|
+
and later behavioral effect distinct. It does not require a complete `progress`
|
|
316
|
+
census. For example, a retained-case assessment can record:
|
|
317
|
+
|
|
318
|
+
```json
|
|
319
|
+
{
|
|
320
|
+
"applicability": "The retired emergency restriction no longer applies; publication still needs its separate decision.",
|
|
321
|
+
"causalJudgment": "The retained trace attributes persistence of the restriction to a disproved premise.",
|
|
322
|
+
"action": {"state": "taken", "summary": "The authorized restriction was retired in the retained case.", "evidenceRefs": ["evidence/correction-action.md"]},
|
|
323
|
+
"effect": {"state": "unobserved", "summary": "No later natural opportunity has been observed.", "evidenceRefs": []}
|
|
324
|
+
}
|
|
325
|
+
```
|
|
326
|
+
|
|
327
|
+
Put this object beside `verdict`, `causalStart`, `steering`, `uncertainty` and
|
|
328
|
+
`evidenceRefs` in the existing disposition. Action states are `proposed` or
|
|
329
|
+
`taken`; effect states are `unobserved` or `observed`. Every referenced artifact
|
|
330
|
+
must be available locally; `taken` and `observed` each require evidence. These
|
|
331
|
+
checks establish availability, not causal truth. The receipt retains evidence
|
|
332
|
+
hashes and `assessment` identifies the actual queue actor, time and transition.
|
|
333
|
+
`behavioralEffect` is the latest owner's reported effect, defaulting to
|
|
334
|
+
`unobserved` for legacy dispositions. It is not an independent certification.
|
|
335
|
+
A later owner submission preserves previous testimony. Record an observed
|
|
336
|
+
effect only from a real later opportunity, with its next decision, useful work,
|
|
337
|
+
recurrence and interruption burden; a scripted replay proves mechanics only.
|
|
338
|
+
Closing a row, changing a prompt or clearing a numerical signal never supplies
|
|
339
|
+
that evidence automatically. No opportunity means unobserved, with the release
|
|
340
|
+
claim left to its decision owner. This guidance neither re-enables diagnosis nor
|
|
341
|
+
assigns corrective work.
|
|
342
|
+
|
|
266
343
|
## Human delivery
|
|
267
344
|
|
|
268
345
|
An assigned agent may explicitly request human escalation:
|
|
@@ -73,6 +73,29 @@ ownership receipt. A later seat start with no project-world input preserves it;
|
|
|
73
73
|
an explicit install whose `install.skills` is empty clears it. This keeps
|
|
74
74
|
"project not supplied" distinct from "project deliberately selects no skills."
|
|
75
75
|
|
|
76
|
+
## TUI project selection
|
|
77
|
+
|
|
78
|
+
Open **PROJECTS** (or enter `projects`) to choose an ID and root from the
|
|
79
|
+
configured workspace catalog. `project <id>` selects an exact catalog entry;
|
|
80
|
+
`mission <directory>` then opens that project's execution view. The historical
|
|
81
|
+
`scopes` machine section ID remains valid. Project selection and its canonical
|
|
82
|
+
root travel through mission, slice, source-file and Back navigation. Changing a
|
|
83
|
+
catalog root requires selecting it again. Missing or malformed sources remain
|
|
84
|
+
unavailable; another project's matching work ID is never a fallback.
|
|
85
|
+
|
|
86
|
+
`source` opens the current project, mission or slice's actual source through the
|
|
87
|
+
existing file-reader allowlist. Catalog membership does not grant file-read or
|
|
88
|
+
execution permission. These views only read; they do not select a lifecycle
|
|
89
|
+
operation or activate a mission. Execution and slice queue membership require
|
|
90
|
+
an exact `project:<id>` tag; lifecycle instances use their authored project
|
|
91
|
+
identity. Unscoped historical queue rows and global review artifacts without
|
|
92
|
+
project binding are excluded from project-specific claims.
|
|
93
|
+
|
|
94
|
+
The read API adds `GET /api/scopes/projects` and optional `project` and
|
|
95
|
+
`projectRoot` parameters to scopes, execution and slice-detail reads. Slice
|
|
96
|
+
detail also requires the selected mission directory. Existing reads without a
|
|
97
|
+
project parameter keep their legacy contract.
|
|
98
|
+
|
|
76
99
|
## UI Mapping
|
|
77
100
|
|
|
78
101
|
- `workspace.root` maps to the Project workspace.
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
# Scoped operating posture
|
|
2
|
+
|
|
3
|
+
Human-led work is quiet by default for process-only diagnosis. Delegated work can
|
|
4
|
+
receive oversight during planning as well as implementation. This preference does
|
|
5
|
+
not grant execution authority or change permissions, work phase, workflow reminders,
|
|
6
|
+
context/continuity health, or health policy.
|
|
7
|
+
|
|
8
|
+
## Inspect and choose
|
|
9
|
+
|
|
10
|
+
Use the existing `rig mode` surface. Give an exact rig or authored work scope:
|
|
11
|
+
|
|
12
|
+
```sh
|
|
13
|
+
rig mode effective --rig my-rig --json
|
|
14
|
+
rig mode effective --project my-project --mission release-1 --json
|
|
15
|
+
rig mode effective --qitem my-packet --json
|
|
16
|
+
rig mode set delegated --scope mission --qualifier my-project/release-1 --evidence "Operator delegated this outcome"
|
|
17
|
+
# The proposal above exits 2 without writing. Apply the deliberate choice:
|
|
18
|
+
rig mode set delegated --scope mission --qualifier my-project/release-1 --evidence "Operator delegated this outcome" --confirm
|
|
19
|
+
rig mode set human-led --scope mission --qualifier my-project/release-1 --evidence "Return to interactive planning" --confirm
|
|
20
|
+
rig mode unset mission my-project/release-1
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
Unsetting reveals the next applicable explicit choice, or the visible human-led
|
|
24
|
+
product default. A new, resolved rig with no binding reports `human-led`,
|
|
25
|
+
`source: product-default`, and `binding: null`. Missing scope identity, conflicting
|
|
26
|
+
linkage, unavailable storage or malformed authored context reports `unknown` with
|
|
27
|
+
a reason. Calling `effective` without a scope does not select a rig implicitly.
|
|
28
|
+
The existing operator bearer requirement still applies. `set` requires `--confirm`;
|
|
29
|
+
`unset` is an explicit deletion command and applies immediately.
|
|
30
|
+
|
|
31
|
+
## One scope and phase contract
|
|
32
|
+
|
|
33
|
+
`GET /api/rig-mode/effective` accepts `rig`, `project`, `mission`, `workstream`, and
|
|
34
|
+
`qitem`. Its additive `operatingPosture` object is also attached to health records
|
|
35
|
+
and diagnosis findings. CLI explanation and TUI health detail display the same data.
|
|
36
|
+
Consumers of posture, phase, and health should use this object rather than invent
|
|
37
|
+
another preference store or infer delegation from workflow existence or activity.
|
|
38
|
+
|
|
39
|
+
| Field | Meaning |
|
|
40
|
+
| --- | --- |
|
|
41
|
+
| `posture` | `human-led`, `delegated`, or `unknown` |
|
|
42
|
+
| `source` | `product-default`, `binding`, or `unknown` |
|
|
43
|
+
| `context` | Resolved rig/project/mission/workstream/qitem IDs, source addresses, canonical authored paths and phase; null if scope resolution failed |
|
|
44
|
+
| `context.phase` | `{value, source}` from an explicit workflow packet step, otherwise slice stage/status, otherwise mission release phase/status; null fields when unavailable |
|
|
45
|
+
| `binding` | Winning binding ID, scope, timestamp and evidence citation; null for default/unknown |
|
|
46
|
+
| `reason` | Explanation of the result or the missing/conflicting fact |
|
|
47
|
+
| `grantsAuthority` | Always `false` |
|
|
48
|
+
| `members` | For queue-backed findings, each member's qitem, posture, source and binding ID; differing or unknown member postures yield unknown aggregate posture |
|
|
49
|
+
|
|
50
|
+
The existing SQLite mode-binding table remains the only preference store. Matching
|
|
51
|
+
posture bindings resolve in this order: qitem, workstream, mission, project, rig,
|
|
52
|
+
global host. The qualifiers are respectively a qitem ID, `project/mission/slice-id`,
|
|
53
|
+
`project/mission`, project ID, canonical rig ID, and null. Rig names resolve to IDs.
|
|
54
|
+
The workstream is an existing authored slice, found by its directory or SPEC ID;
|
|
55
|
+
the returned identity uses its SPEC ID and project/mission qualification.
|
|
56
|
+
|
|
57
|
+
Project selection reads `workspace.yaml`'s declared `projects: [{id, root}]`
|
|
58
|
+
catalog, or the workspace's own `project.yaml` when no catalog exists. Multiple
|
|
59
|
+
projects require an explicit project selection. A sole project may be derived.
|
|
60
|
+
The project manifest validates identity and supplies `missions.root` (default
|
|
61
|
+
`missions`). Mission and slice identities come from those authored work nodes;
|
|
62
|
+
missing, duplicate or conflicting identities remain unknown. The selected work
|
|
63
|
+
must stay inside its canonical project root.
|
|
64
|
+
|
|
65
|
+
Qitem reads join explicit `project:`, `mission:`, `slice:`/`workstream:` tags,
|
|
66
|
+
destination rig, and the existing workflow packet binding. Workflow lifecycle
|
|
67
|
+
project/mission identity must agree with the tags and requested scope. The bound
|
|
68
|
+
packet's exact step is the phase source; phase names are not classified by guess.
|
|
69
|
+
An unlinked qitem does not silently inherit the default. Scope reads are observational.
|
|
70
|
+
|
|
71
|
+
Legacy ergonomic modes (`sleep`, `desk`, `mobile`, `away`, `focus`, `debug`) retain
|
|
72
|
+
their bindings and ten-field records. They do not imply either operating posture.
|
|
73
|
+
Only human-led/delegated bindings participate in posture precedence. The legacy
|
|
74
|
+
`effective` and `posture: known|unknown_posture` fields remain for compatibility;
|
|
75
|
+
`unknown_posture` there means no legacy mode binding and does not override the
|
|
76
|
+
new `operatingPosture.source: product-default` result. Setting another mode at the
|
|
77
|
+
same scope replaces that row; inspect effective posture after any mode change.
|
|
78
|
+
|
|
79
|
+
## Diagnosis effects
|
|
80
|
+
|
|
81
|
+
Process-category findings remain visible under human-led or unknown posture, but
|
|
82
|
+
new diagnosis presentations, re-presentations and human notifications require
|
|
83
|
+
explicit delegated posture. Retained occurrences are not canceled or rewritten
|
|
84
|
+
when posture changes. Their current finding is refreshed for inspection and
|
|
85
|
+
notification; unavailable current findings cannot reuse old delegated posture.
|
|
86
|
+
Notification admission is rechecked after readiness I/O.
|
|
87
|
+
|
|
88
|
+
Delegation is necessary for process interruptions and is insufficient by itself:
|
|
89
|
+
enabled diagnosis policy, detector selection, source freshness, custody, cooldown,
|
|
90
|
+
recurrence limits and human delivery readiness still apply. Other health categories
|
|
91
|
+
and ordinary queue/workflow reminders retain their existing behavior. The automatic
|
|
92
|
+
ceremony source reads declared catalog projects through the same resolver; unresolved
|
|
93
|
+
lineages remain visible with unknown scope instead of acquiring invented authority.
|
|
94
|
+
|
|
95
|
+
See [health diagnosis](health-diagnosis.md) for policy, evidence and disposition.
|
|
@@ -42,16 +42,44 @@ Check readiness: configured, enabled, active, ready, reason, and next action.
|
|
|
42
42
|
`indeterminate` is not ready. Follow the reported next inspection; do not enable
|
|
43
43
|
or reconfigure a connector merely to make the check pass.
|
|
44
44
|
|
|
45
|
-
|
|
46
|
-
|
|
45
|
+
Author for the person reading on a phone: a short subject in `--summary`, then
|
|
46
|
+
one complete brief in `--body-file`. State why it matters, your recommendation
|
|
47
|
+
and material tradeoff, the bounded action if approved, and the choice requested.
|
|
48
|
+
For an update, state the user-visible outcome and “No action needed.” Aim for
|
|
49
|
+
roughly 100–150 words; this is guidance, not a semantic validator. Keep technical
|
|
50
|
+
continuation, exact candidate/revision and evidence on the owning agent row and
|
|
51
|
+
in the durable artifact behind `--evidence-ref`. A local path is not a phone link
|
|
52
|
+
and Markdown evidence files are not automatically attached.
|
|
53
|
+
|
|
54
|
+
For example, a synthetic brief could say:
|
|
55
|
+
|
|
56
|
+
> The repaired status view is ready. I recommend updating this instance; live
|
|
57
|
+
> status will briefly pause. Sessions will be preserved. Approve this instance
|
|
58
|
+
> update, or hold? Supporting test detail follows in this thread.
|
|
59
|
+
|
|
60
|
+
This example grants no authority. Choose `--human-intent decision` for a request
|
|
61
|
+
or `--human-intent update` for a quiet FYI. Omission retains legacy decision
|
|
62
|
+
behavior; words such as “FYI” and tags do not change intent.
|
|
63
|
+
|
|
64
|
+
The sole outbound human-message primitive is:
|
|
47
65
|
|
|
48
66
|
```bash
|
|
49
67
|
rig queue create --destination <entityId>@external \
|
|
50
|
-
--summary "<
|
|
68
|
+
--human-intent decision --summary "<short subject>" --body-file <brief-file> \
|
|
51
69
|
--evidence-ref <durable-evidence> --verify --json
|
|
52
70
|
```
|
|
53
71
|
|
|
54
|
-
|
|
72
|
+
An optional `--human-detail-file <path>` supplies one coherent supplemental
|
|
73
|
+
reply in the same thread. Announce its purpose in the brief; the product also
|
|
74
|
+
marks that a detail reply follows. The primary must already contain the complete
|
|
75
|
+
scope, options and action. Do not split an agent dump blindly or move the essential
|
|
76
|
+
choice into overflow. Rendering checks every part and its accessibility fallback
|
|
77
|
+
before posting; an oversized request is refused with a field-specific correction,
|
|
78
|
+
never silently clipped. Shorten the brief or related detail as directed. Inspect
|
|
79
|
+
the failed row, then deliberately cancel/replace the authored request if its
|
|
80
|
+
content needs correction; a timeout alone is never a reason to replace it.
|
|
81
|
+
|
|
82
|
+
If an existing agent-owned row must wait for a **decision**, block it on the **new live qitem ID**
|
|
55
83
|
(`rig queue block <work-id> --on <human-qitem-id> ...`), not on the human address.
|
|
56
84
|
Completion of the human qitem resumes its dependants. Blocking on the human as
|
|
57
85
|
well would issue another notification for the same decision.
|
|
@@ -66,7 +94,14 @@ or blindly resend because verification timed out.
|
|
|
66
94
|
rig queue transitions <qitem-id>
|
|
67
95
|
```
|
|
68
96
|
|
|
69
|
-
|
|
97
|
+
For `update`, confirmed complete delivery may close the delivery obligation.
|
|
98
|
+
It creates no approval obligation and cannot be used as a decision blocker.
|
|
99
|
+
Delivered updates remain queryable for Feed; a failure or ambiguous send stays
|
|
100
|
+
separate. A root message alone does not prove supplemental delivery. Retries
|
|
101
|
+
reconcile stable part identities and send only missing parts. An FYI reply is
|
|
102
|
+
not a human decision.
|
|
103
|
+
|
|
104
|
+
For a decision, a correlated reply binds to that exact human and qitem and records the resolution
|
|
70
105
|
that resumes the owner. Check the recorded result before claiming the decision
|
|
71
106
|
arrived; a delivery receipt alone is not acceptance.
|
|
72
107
|
|
package/dist/build-info.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
// GENERATED by scripts/build-package.sh — the packaged build-identity stamp.
|
|
2
2
|
export const BUILD_INFO = {
|
|
3
|
-
semver: "0.5.
|
|
4
|
-
commit: "
|
|
3
|
+
semver: "0.5.14",
|
|
4
|
+
commit: "cc75efdd17fb967bde7cff6c5805791986af78d8",
|
|
5
5
|
dirty: false,
|
|
6
|
-
builtAt: "2026-09-
|
|
6
|
+
builtAt: "2026-09-14T22:11:49Z",
|
|
7
7
|
};
|
|
8
8
|
export function stampFields(info = BUILD_INFO) {
|
|
9
9
|
if (!info.commit) return {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/commands/context.ts"],"names":[],"mappings":"AAYA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA6BpC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/commands/context.ts"],"names":[],"mappings":"AAYA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA6BpC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAyL9C,wBAAgB,cAAc,CAAC,YAAY,CAAC,EAAE,UAAU,GAAG,OAAO,CAysBjE"}
|
package/dist/commands/context.js
CHANGED
|
@@ -10,11 +10,12 @@
|
|
|
10
10
|
// $OPENRIG_HOME/context/<name>/ — host-symlink-free contract,
|
|
11
11
|
// matches `rig specs add` shape (regular files only; no symlinks).
|
|
12
12
|
import { Command } from "commander";
|
|
13
|
-
import { cpSync, existsSync, lstatSync, mkdirSync, mkdtempSync,
|
|
13
|
+
import { cpSync, existsSync, lstatSync, mkdirSync, mkdtempSync, readFileSync, renameSync, rmSync, writeFileSync, } from "node:fs";
|
|
14
14
|
import { dirname } from "node:path";
|
|
15
|
-
import { basename,
|
|
15
|
+
import { basename, join, resolve } from "node:path";
|
|
16
16
|
import { parse as parseYaml } from "yaml";
|
|
17
|
-
import {
|
|
17
|
+
import { assertSafeInstallRef, assertTreeHasNoSymlinks, assertDestinationNamespaceContained, validateContextPackManifestForInstall } from "../lib/context-install.js";
|
|
18
|
+
import { addGitContext, inspectGitContext, updateGitContext } from "../lib/context-git.js";
|
|
18
19
|
import { ConfigStore } from "../config-store.js";
|
|
19
20
|
import { DaemonClient } from "../client.js";
|
|
20
21
|
import { enumArg } from "../cli-error.js";
|
|
@@ -41,129 +42,15 @@ function printWorkInstallSelectors(result, topologySkills) {
|
|
|
41
42
|
console.log(`skills topology=${selectedIds(topologySkills, "(none)")}`);
|
|
42
43
|
console.log(`skills project=${selectedIds(result.skills, "(none)")}`);
|
|
43
44
|
}
|
|
44
|
-
// Slice-03 Atom 2 — mirror the daemon's per-segment ref contract at the
|
|
45
|
-
// local install boundary. This must run before creating the context store.
|
|
46
45
|
const SAFE_REF_SEGMENT = /^[A-Za-z0-9][A-Za-z0-9._-]{0,63}$/;
|
|
47
|
-
// Slice-03 lineage repair (R2 HIGH-2): the install boundary mirrors the daemon
|
|
48
|
-
// bounded, delimiter-free version token (ref-safety.SAFE_VERSION) so an unsafe
|
|
49
|
-
// version is rejected BEFORE any local write — matching the per-segment ref
|
|
50
|
-
// mirror above.
|
|
51
|
-
const SAFE_INSTALL_VERSION = /^[A-Za-z0-9][A-Za-z0-9._+-]{0,31}$/;
|
|
52
|
-
function assertSafeInstallRef(ref) {
|
|
53
|
-
const safe = ref.length > 0 &&
|
|
54
|
-
ref.split("/").every((segment) => segment.length > 0 && segment !== "." && segment !== ".." && SAFE_REF_SEGMENT.test(segment));
|
|
55
|
-
if (!safe) {
|
|
56
|
-
throw new Error(`unsafe install ref '${ref}' — a ref must be one or more '/'-separated segments, each matching ` +
|
|
57
|
-
`[A-Za-z0-9][A-Za-z0-9._-]{0,63} (no '.'/'..', no absolute path, no empty segment, no ` +
|
|
58
|
-
`whitespace or injection), so packs stay inside the context store root.`);
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
46
|
function assertSafeTopologySegment(kind, value) {
|
|
62
47
|
if (value === "." || value === ".." || !SAFE_REF_SEGMENT.test(value)) {
|
|
63
48
|
throw new Error(`unsafe ${kind} segment '${value}' — topology addresses require one bounded path segment`);
|
|
64
49
|
}
|
|
65
50
|
}
|
|
66
|
-
function
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
const current = stack.pop();
|
|
70
|
-
for (const entry of readdirSync(current, { withFileTypes: true })) {
|
|
71
|
-
const absPath = join(current, entry.name);
|
|
72
|
-
if (entry.isSymbolicLink()) {
|
|
73
|
-
throw new Error(`Context pack directories must not contain symlinks: ${absPath}`);
|
|
74
|
-
}
|
|
75
|
-
if (entry.isDirectory())
|
|
76
|
-
stack.push(absPath);
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
// Slice-03 lineage repair (R2 HIGH-1): a lexically-safe path-like install ref
|
|
81
|
-
// can still escape the store if one of its parent namespace segments is a
|
|
82
|
-
// symlink (or a non-directory). Walk every ANCESTOR segment under the store root
|
|
83
|
-
// and reject before the copy — the FS-canonical containment the lexical ref
|
|
84
|
-
// check alone cannot give, mirroring the daemon compose namespace walk
|
|
85
|
-
// (context-pack-library-service.ts). A not-yet-created segment (ENOENT) is safe:
|
|
86
|
-
// cpSync will materialize it as a real directory.
|
|
87
|
-
function assertDestinationNamespaceContained(targetRoot, installName) {
|
|
88
|
-
const segments = installName.split("/");
|
|
89
|
-
let cursor = targetRoot;
|
|
90
|
-
for (const segment of segments.slice(0, -1)) {
|
|
91
|
-
cursor = join(cursor, segment);
|
|
92
|
-
let stat;
|
|
93
|
-
try {
|
|
94
|
-
stat = lstatSync(cursor);
|
|
95
|
-
}
|
|
96
|
-
catch (err) {
|
|
97
|
-
if (err.code === "ENOENT")
|
|
98
|
-
break;
|
|
99
|
-
throw err;
|
|
100
|
-
}
|
|
101
|
-
if (stat.isSymbolicLink() || !stat.isDirectory()) {
|
|
102
|
-
throw new Error(`unsafe install ref '${installName}' — its namespace segment '${cursor}' is a symlink or non-directory, ` +
|
|
103
|
-
`so the copy would escape the context store root. Remove it or install under a different --name.`);
|
|
104
|
-
}
|
|
105
|
-
}
|
|
106
|
-
}
|
|
107
|
-
// Kept in lockstep with the daemon parser's ALLOWED_FILE_SUFFIXES (manifest-parser.ts).
|
|
108
|
-
// OPR.0.5.3.7 R2 added .sh/.ts (skill helper assets, served as text); the install
|
|
109
|
-
// validator must accept what the daemon will serve.
|
|
110
|
-
const ALLOWED_CONTEXT_PACK_SUFFIXES = new Set([".md", ".markdown", ".yaml", ".yml", ".txt", ".sh", ".ts"]);
|
|
111
|
-
function validateContextPackManifestForInstall(manifestPath) {
|
|
112
|
-
let parsed;
|
|
113
|
-
try {
|
|
114
|
-
parsed = parseYaml(readFileSync(manifestPath, "utf-8"));
|
|
115
|
-
}
|
|
116
|
-
catch (err) {
|
|
117
|
-
throw new Error(`manifest at ${manifestPath} is not valid YAML: ${err.message}`);
|
|
118
|
-
}
|
|
119
|
-
if (!parsed || typeof parsed !== "object" || Array.isArray(parsed)) {
|
|
120
|
-
throw new Error(`manifest at ${manifestPath} must be a YAML object at the root`);
|
|
121
|
-
}
|
|
122
|
-
const obj = parsed;
|
|
123
|
-
if (typeof obj["name"] !== "string" || obj["name"].length === 0) {
|
|
124
|
-
throw new Error(`manifest at ${manifestPath} is missing required field 'name' (string)`);
|
|
125
|
-
}
|
|
126
|
-
if (obj["version"] === undefined || obj["version"] === null) {
|
|
127
|
-
throw new Error(`manifest at ${manifestPath} is missing required field 'version'`);
|
|
128
|
-
}
|
|
129
|
-
const versionStr = String(obj["version"]);
|
|
130
|
-
if (!SAFE_INSTALL_VERSION.test(versionStr)) {
|
|
131
|
-
throw new Error(`manifest at ${manifestPath} has an invalid version '${versionStr}' — a version must be a single bounded ` +
|
|
132
|
-
`token [A-Za-z0-9][A-Za-z0-9._+-]{0,31} (no ':' or separator, no whitespace, ≤32 chars).`);
|
|
133
|
-
}
|
|
134
|
-
// OPR.0.5.6.10 — teach the classification refusal at ADD time, not first
|
|
135
|
-
// daemon scan (desk ruling T2). Enum + teaching text imported from the
|
|
136
|
-
// daemon's one definition site; never a second value list here.
|
|
137
|
-
const taxonomy = obj["taxonomy"];
|
|
138
|
-
if (taxonomy === undefined || taxonomy === null) {
|
|
139
|
-
throw new Error(`manifest at ${manifestPath} is missing required field 'taxonomy' — every context pack declares what kind of context it is. ${TAXONOMY_TEACHING}`);
|
|
140
|
-
}
|
|
141
|
-
if (typeof taxonomy !== "string" || !ATOM_TAXONOMIES.includes(taxonomy)) {
|
|
142
|
-
throw new Error(`manifest at ${manifestPath} has invalid taxonomy ${JSON.stringify(taxonomy)}. ${TAXONOMY_TEACHING}`);
|
|
143
|
-
}
|
|
144
|
-
const files = obj["files"];
|
|
145
|
-
if (!Array.isArray(files)) {
|
|
146
|
-
throw new Error(`manifest at ${manifestPath} must declare 'files: [...]'`);
|
|
147
|
-
}
|
|
148
|
-
for (let i = 0; i < files.length; i++) {
|
|
149
|
-
const entry = files[i];
|
|
150
|
-
if (!entry || typeof entry !== "object" || Array.isArray(entry)) {
|
|
151
|
-
throw new Error(`manifest at ${manifestPath} has malformed entry at files[${i}]`);
|
|
152
|
-
}
|
|
153
|
-
const file = entry;
|
|
154
|
-
const relPath = file["path"];
|
|
155
|
-
if (typeof relPath !== "string" || relPath.length === 0) {
|
|
156
|
-
throw new Error(`manifest at ${manifestPath} files[${i}] missing 'path' (string)`);
|
|
157
|
-
}
|
|
158
|
-
if (relPath.includes("..") || isAbsolute(relPath) || relPath.startsWith("\\")) {
|
|
159
|
-
throw new Error(`manifest at ${manifestPath} files[${i}].path '${relPath}' must be a relative path inside the pack (no '..' segments, no leading '/')`);
|
|
160
|
-
}
|
|
161
|
-
if (!ALLOWED_CONTEXT_PACK_SUFFIXES.has(extname(relPath))) {
|
|
162
|
-
throw new Error(`manifest at ${manifestPath} files[${i}].path '${relPath}' has an unsupported suffix; allowed: ${Array.from(ALLOWED_CONTEXT_PACK_SUFFIXES).join(", ")}`);
|
|
163
|
-
}
|
|
164
|
-
if (typeof file["role"] !== "string" || file["role"].length === 0) {
|
|
165
|
-
throw new Error(`manifest at ${manifestPath} files[${i}] missing 'role' (string)`);
|
|
166
|
-
}
|
|
51
|
+
function assertLocalGitClient(client) {
|
|
52
|
+
if (!["127.0.0.1", "localhost", "[::1]"].includes(new URL(client.baseUrl).hostname)) {
|
|
53
|
+
throw new Error("Run Git source selection/inspection/update on the daemon host through its loopback URL; these commands use local Git and filesystem paths.");
|
|
167
54
|
}
|
|
168
55
|
}
|
|
169
56
|
function isHttpUrl(source) {
|
|
@@ -842,9 +729,12 @@ Examples:
|
|
|
842
729
|
}
|
|
843
730
|
});
|
|
844
731
|
cmd.command("add")
|
|
845
|
-
.argument("<source>", "
|
|
846
|
-
.description("Install a
|
|
732
|
+
.argument("<source>", "Pack directory/manifest URL, or Git repository path/URL with --git")
|
|
733
|
+
.description("Install a pack; --git discovers a pack in a Git repository and retains its update relationship")
|
|
847
734
|
.option("--name <name>", "Override the install name (defaults to the manifest name / source basename)")
|
|
735
|
+
.option("--git", "Clone a Git repository path/URL with existing Git credentials; select a pack snapshot")
|
|
736
|
+
.option("--checkout", "With --git, select an existing checkout instead of cloning; updates may merge in it")
|
|
737
|
+
.option("--pack <path>", "With --git, select a repository-relative pack; default discovers manifest.yaml or .openrig/context-packs")
|
|
848
738
|
.option("--json", "JSON output")
|
|
849
739
|
.action(async (source, opts) => {
|
|
850
740
|
try {
|
|
@@ -852,7 +742,15 @@ Examples:
|
|
|
852
742
|
// never a hardcoded ~/.openrig literal; the daemon resolves the same key.
|
|
853
743
|
const targetRoot = new ConfigStore().resolve().context.root;
|
|
854
744
|
let targetDir;
|
|
855
|
-
|
|
745
|
+
let gitSelection;
|
|
746
|
+
if ((opts.pack || opts.checkout) && !opts.git)
|
|
747
|
+
throw new Error("--pack and --checkout require --git.");
|
|
748
|
+
if (opts.git) {
|
|
749
|
+
const gitClient = await getClient();
|
|
750
|
+
assertLocalGitClient(gitClient);
|
|
751
|
+
({ installedAt: targetDir, selected: gitSelection } = addGitContext(source, opts, targetRoot));
|
|
752
|
+
}
|
|
753
|
+
else if (isHttpUrl(source)) {
|
|
856
754
|
// R4 — URL install: fetch → validate → atomic stage+rename (no partial pack).
|
|
857
755
|
({ targetDir } = await installPackFromUrl(source, opts.name, targetRoot));
|
|
858
756
|
}
|
|
@@ -914,11 +812,16 @@ Examples:
|
|
|
914
812
|
if (syncError) {
|
|
915
813
|
throw new Error(`Installed at ${targetDir}, but daemon rejected the pack during sync: ${syncError.error}`);
|
|
916
814
|
}
|
|
815
|
+
if (gitSelection && !syncRes.data.entries.some((entry) => resolve(entry.sourcePath) === resolve(targetDir))) {
|
|
816
|
+
throw new Error(`Git selection retained at ${targetDir}, but this daemon does not serve it. Check context.root and workspace ref precedence before using it.`);
|
|
817
|
+
}
|
|
917
818
|
if (opts.json) {
|
|
918
|
-
console.log(JSON.stringify({ installedAt: targetDir, count: syncRes.data.count }, null, 2));
|
|
819
|
+
console.log(JSON.stringify({ installedAt: targetDir, count: syncRes.data.count, ...(gitSelection ? { gitSource: gitSelection } : {}) }, null, 2));
|
|
919
820
|
}
|
|
920
821
|
else {
|
|
921
822
|
console.log(`Installed at ${targetDir}. Library now has ${syncRes.data.count} context pack(s).`);
|
|
823
|
+
if (gitSelection)
|
|
824
|
+
console.log(`Git ${gitSelection.revision} from ${gitSelection.checkout}; inspect/update with rig context source.`);
|
|
922
825
|
}
|
|
923
826
|
}
|
|
924
827
|
catch (err) {
|
|
@@ -926,6 +829,45 @@ Examples:
|
|
|
926
829
|
process.exitCode = 1;
|
|
927
830
|
}
|
|
928
831
|
});
|
|
832
|
+
const source = cmd.command("source")
|
|
833
|
+
.description("Inspect Git checkout vs served context, or explicitly fetch/merge and select an update")
|
|
834
|
+
.addHelpText("after", "\nStart: rig context add <repository-path-or-URL> --git [--pack path]\nEdit/commit in the reported checkout with ordinary Git. Updates never push or reset.\nConflicts retain the old selection; resolve/commit or abort in the checkout before retrying.\nSelection does not prove agent consumption; use context get and check the actual consumer.\n");
|
|
835
|
+
for (const operation of ["inspect", "update"]) {
|
|
836
|
+
source.command(operation)
|
|
837
|
+
.argument("<ref>", "Selected Git-backed context pack ref")
|
|
838
|
+
.description(operation === "inspect"
|
|
839
|
+
? "Read local revision, edits, conflicts and selection; no fetch or consumption claim"
|
|
840
|
+
: "Explicitly fetch/merge the upstream, then select the clean pack; refuse local selection edits")
|
|
841
|
+
.option("--json", "JSON output")
|
|
842
|
+
.action(async (ref, opts) => {
|
|
843
|
+
try {
|
|
844
|
+
const client = await getClient();
|
|
845
|
+
assertLocalGitClient(client);
|
|
846
|
+
const entry = await resolvePack(client, ref);
|
|
847
|
+
const localRoot = new ConfigStore().resolve().context.root;
|
|
848
|
+
if (resolve(entry.sourcePath) !== resolve(localRoot, entry.relativePath))
|
|
849
|
+
throw new Error("This pack is not in the locally configured context library. Run Git source commands on its owning instance.");
|
|
850
|
+
if (entry.sourceType === "builtin")
|
|
851
|
+
throw new Error("Builtin context is not a writable Git selection.");
|
|
852
|
+
const result = operation === "inspect" ? inspectGitContext(entry.sourcePath) : updateGitContext(entry.sourcePath);
|
|
853
|
+
if (operation === "update") {
|
|
854
|
+
const sync = await client.post("/api/context-packs/library/sync");
|
|
855
|
+
if (sync.status !== 200)
|
|
856
|
+
throw new Error(`Selection updated, but library sync failed (HTTP ${sync.status}); run rig context sync.`);
|
|
857
|
+
if (!sync.data.entries.some((candidate) => resolve(candidate.sourcePath) === resolve(entry.sourcePath)))
|
|
858
|
+
throw new Error(`Selection retained, but the daemon cannot serve it: ${sync.data.errors?.map((error) => error.error).join("; ") || "check context root and ref precedence"}`);
|
|
859
|
+
}
|
|
860
|
+
// Structured output keeps checkout/selected bytes/consumption distinct
|
|
861
|
+
// in both terminal and machine use, without a second status renderer.
|
|
862
|
+
console.log(JSON.stringify(result, null, 2));
|
|
863
|
+
}
|
|
864
|
+
catch (err) {
|
|
865
|
+
const message = err.message;
|
|
866
|
+
console.error(opts.json ? JSON.stringify({ error: message }) : message);
|
|
867
|
+
process.exitCode = 1;
|
|
868
|
+
}
|
|
869
|
+
});
|
|
870
|
+
}
|
|
929
871
|
cmd.command("rm")
|
|
930
872
|
.argument("<ref>", "Path-like ref of the context pack to remove (e.g. packs/compaction-restore)")
|
|
931
873
|
.description("Remove a context pack from the library by its path-like ref")
|