@openrig/cli 0.2.0 → 0.3.1
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/.claude-plugin/plugin.json +15 -0
- package/daemon/assets/plugins/openrig-core/.codex-plugin/plugin.json +24 -0
- package/daemon/assets/plugins/openrig-core/LICENSE +200 -0
- package/daemon/assets/plugins/openrig-core/README.md +42 -0
- package/daemon/assets/plugins/openrig-core/hooks/claude.json +78 -0
- package/daemon/assets/plugins/openrig-core/hooks/codex.json +37 -0
- package/daemon/assets/{openrig-activity-hook-relay.cjs → plugins/openrig-core/hooks/scripts/activity-relay.cjs} +12 -0
- package/daemon/assets/plugins/openrig-core/hooks/scripts/compaction-restore-bridge.cjs +172 -0
- package/daemon/assets/plugins/openrig-core/skills/agent-startup-and-context-ingestion/SKILL.md +104 -0
- package/daemon/assets/plugins/openrig-core/skills/claude-compaction-restore/SKILL.md +131 -0
- package/daemon/assets/plugins/openrig-core/skills/claude-compaction-restore/scripts/precompact-hook.mjs +174 -0
- package/daemon/assets/plugins/openrig-core/skills/claude-compaction-restore/scripts/restore-from-jsonl.mjs +433 -0
- package/daemon/assets/plugins/openrig-core/skills/claude-compaction-restore/templates/compact-instruction.md +1 -0
- package/daemon/assets/plugins/openrig-core/skills/claude-compaction-restore/templates/post-compact-restore-instruction.md +1 -0
- package/daemon/assets/plugins/openrig-core/skills/forming-an-openrig-mental-model/SKILL.md +305 -0
- package/daemon/{specs/agents/shared/skills/rig-architect → assets/plugins/openrig-core/skills/openrig-architect}/SKILL.md +38 -19
- package/daemon/assets/plugins/openrig-core/skills/openrig-operator/SKILL.md +222 -0
- package/daemon/assets/plugins/openrig-core/skills/openrig-user/SKILL.md +597 -0
- package/daemon/assets/plugins/openrig-core/skills/queue-handoff/SKILL.md +122 -0
- package/daemon/assets/plugins/openrig-core/skills/seat-continuity-and-handover/SKILL.md +137 -0
- package/daemon/assets/vm-preview-fixtures/README.md +48 -0
- package/daemon/assets/vm-preview-fixtures/workflows/sample-basic-loop.yaml +79 -0
- package/daemon/dist/adapters/claude-code-adapter.d.ts +11 -3
- package/daemon/dist/adapters/claude-code-adapter.d.ts.map +1 -1
- package/daemon/dist/adapters/claude-code-adapter.js +58 -60
- package/daemon/dist/adapters/claude-code-adapter.js.map +1 -1
- package/daemon/dist/adapters/cmux-transport.d.ts.map +1 -1
- package/daemon/dist/adapters/cmux-transport.js +81 -2
- package/daemon/dist/adapters/cmux-transport.js.map +1 -1
- package/daemon/dist/adapters/cmux.d.ts +4 -0
- package/daemon/dist/adapters/cmux.d.ts.map +1 -1
- package/daemon/dist/adapters/cmux.js +87 -0
- package/daemon/dist/adapters/cmux.js.map +1 -1
- package/daemon/dist/adapters/codex-runtime-adapter.d.ts +14 -3
- package/daemon/dist/adapters/codex-runtime-adapter.d.ts.map +1 -1
- package/daemon/dist/adapters/codex-runtime-adapter.js +43 -57
- package/daemon/dist/adapters/codex-runtime-adapter.js.map +1 -1
- package/daemon/dist/builtins/workflow-specs/basic-loop.yaml +76 -0
- package/daemon/dist/builtins/workflow-specs/conveyor.yaml +80 -0
- package/daemon/dist/db/migrations/026_inbox_entries.d.ts +1 -1
- package/daemon/dist/db/migrations/026_inbox_entries.js +1 -1
- package/daemon/dist/db/migrations/029_classifier_leases.d.ts +1 -1
- package/daemon/dist/db/migrations/029_classifier_leases.js +1 -1
- package/daemon/dist/db/migrations/037_mission_control_actions.d.ts +51 -0
- package/daemon/dist/db/migrations/037_mission_control_actions.d.ts.map +1 -0
- package/daemon/dist/db/migrations/037_mission_control_actions.js +74 -0
- package/daemon/dist/db/migrations/037_mission_control_actions.js.map +1 -0
- package/daemon/dist/db/migrations/038_workspace_primitive.d.ts +16 -0
- package/daemon/dist/db/migrations/038_workspace_primitive.d.ts.map +1 -0
- package/daemon/dist/db/migrations/038_workspace_primitive.js +20 -0
- package/daemon/dist/db/migrations/038_workspace_primitive.js.map +1 -0
- package/daemon/dist/db/migrations/039_queue_target_repo.d.ts +16 -0
- package/daemon/dist/db/migrations/039_queue_target_repo.d.ts.map +1 -0
- package/daemon/dist/db/migrations/039_queue_target_repo.js +21 -0
- package/daemon/dist/db/migrations/039_queue_target_repo.js.map +1 -0
- package/daemon/dist/db/migrations/040_workflow_specs_diagnostic.d.ts +32 -0
- package/daemon/dist/db/migrations/040_workflow_specs_diagnostic.d.ts.map +1 -0
- package/daemon/dist/db/migrations/040_workflow_specs_diagnostic.js +37 -0
- package/daemon/dist/db/migrations/040_workflow_specs_diagnostic.js.map +1 -0
- package/daemon/dist/domain/active-lens-store.d.ts +23 -0
- package/daemon/dist/domain/active-lens-store.d.ts.map +1 -0
- package/daemon/dist/domain/active-lens-store.js +87 -0
- package/daemon/dist/domain/active-lens-store.js.map +1 -0
- package/daemon/dist/domain/agent-images/agent-image-library-service.d.ts +68 -0
- package/daemon/dist/domain/agent-images/agent-image-library-service.d.ts.map +1 -0
- package/daemon/dist/domain/agent-images/agent-image-library-service.js +339 -0
- package/daemon/dist/domain/agent-images/agent-image-library-service.js.map +1 -0
- package/daemon/dist/domain/agent-images/agent-image-types.d.ts +113 -0
- package/daemon/dist/domain/agent-images/agent-image-types.d.ts.map +1 -0
- package/daemon/dist/domain/agent-images/agent-image-types.js +24 -0
- package/daemon/dist/domain/agent-images/agent-image-types.js.map +1 -0
- package/daemon/dist/domain/agent-images/evidence-guard.d.ts +26 -0
- package/daemon/dist/domain/agent-images/evidence-guard.d.ts.map +1 -0
- package/daemon/dist/domain/agent-images/evidence-guard.js +185 -0
- package/daemon/dist/domain/agent-images/evidence-guard.js.map +1 -0
- package/daemon/dist/domain/agent-images/manifest-parser.d.ts +3 -0
- package/daemon/dist/domain/agent-images/manifest-parser.d.ts.map +1 -0
- package/daemon/dist/domain/agent-images/manifest-parser.js +114 -0
- package/daemon/dist/domain/agent-images/manifest-parser.js.map +1 -0
- package/daemon/dist/domain/agent-images/resume-token-discovery.d.ts +28 -0
- package/daemon/dist/domain/agent-images/resume-token-discovery.d.ts.map +1 -0
- package/daemon/dist/domain/agent-images/resume-token-discovery.js +83 -0
- package/daemon/dist/domain/agent-images/resume-token-discovery.js.map +1 -0
- package/daemon/dist/domain/agent-images/snapshot-capturer.d.ts +36 -0
- package/daemon/dist/domain/agent-images/snapshot-capturer.d.ts.map +1 -0
- package/daemon/dist/domain/agent-images/snapshot-capturer.js +58 -0
- package/daemon/dist/domain/agent-images/snapshot-capturer.js.map +1 -0
- package/daemon/dist/domain/agent-manifest.d.ts.map +1 -1
- package/daemon/dist/domain/agent-manifest.js +116 -37
- package/daemon/dist/domain/agent-manifest.js.map +1 -1
- package/daemon/dist/domain/agent-resolver.js +1 -1
- package/daemon/dist/domain/agent-resolver.js.map +1 -1
- package/daemon/dist/domain/agent-starter-resolver.d.ts +10 -16
- package/daemon/dist/domain/agent-starter-resolver.d.ts.map +1 -1
- package/daemon/dist/domain/agent-starter-resolver.js +11 -13
- package/daemon/dist/domain/agent-starter-resolver.js.map +1 -1
- package/daemon/dist/domain/classifier-lease-manager.d.ts +1 -1
- package/daemon/dist/domain/classifier-lease-manager.js +1 -1
- package/daemon/dist/domain/claude-compaction-enforcer.d.ts +81 -0
- package/daemon/dist/domain/claude-compaction-enforcer.d.ts.map +1 -0
- package/daemon/dist/domain/claude-compaction-enforcer.js +242 -0
- package/daemon/dist/domain/claude-compaction-enforcer.js.map +1 -0
- package/daemon/dist/domain/cmux-layout-service.d.ts +41 -0
- package/daemon/dist/domain/cmux-layout-service.d.ts.map +1 -0
- package/daemon/dist/domain/cmux-layout-service.js +184 -0
- package/daemon/dist/domain/cmux-layout-service.js.map +1 -0
- package/daemon/dist/domain/conflict-detector.d.ts.map +1 -1
- package/daemon/dist/domain/conflict-detector.js +6 -3
- package/daemon/dist/domain/conflict-detector.js.map +1 -1
- package/daemon/dist/domain/context-monitor.d.ts +20 -5
- package/daemon/dist/domain/context-monitor.d.ts.map +1 -1
- package/daemon/dist/domain/context-monitor.js +63 -13
- package/daemon/dist/domain/context-monitor.js.map +1 -1
- package/daemon/dist/domain/context-packs/bundle-assembler.d.ts +49 -0
- package/daemon/dist/domain/context-packs/bundle-assembler.d.ts.map +1 -0
- package/daemon/dist/domain/context-packs/bundle-assembler.js +81 -0
- package/daemon/dist/domain/context-packs/bundle-assembler.js.map +1 -0
- package/daemon/dist/domain/context-packs/context-pack-library-service.d.ts +41 -0
- package/daemon/dist/domain/context-packs/context-pack-library-service.d.ts.map +1 -0
- package/daemon/dist/domain/context-packs/context-pack-library-service.js +148 -0
- package/daemon/dist/domain/context-packs/context-pack-library-service.js.map +1 -0
- package/daemon/dist/domain/context-packs/context-pack-types.d.ts +64 -0
- package/daemon/dist/domain/context-packs/context-pack-types.d.ts.map +1 -0
- package/daemon/dist/domain/context-packs/context-pack-types.js +22 -0
- package/daemon/dist/domain/context-packs/context-pack-types.js.map +1 -0
- package/daemon/dist/domain/context-packs/manifest-parser.d.ts +3 -0
- package/daemon/dist/domain/context-packs/manifest-parser.d.ts.map +1 -0
- package/daemon/dist/domain/context-packs/manifest-parser.js +74 -0
- package/daemon/dist/domain/context-packs/manifest-parser.js.map +1 -0
- package/daemon/dist/domain/context-usage-store.d.ts +14 -1
- package/daemon/dist/domain/context-usage-store.d.ts.map +1 -1
- package/daemon/dist/domain/context-usage-store.js +156 -1
- package/daemon/dist/domain/context-usage-store.js.map +1 -1
- package/daemon/dist/domain/files/file-write-service.d.ts +61 -0
- package/daemon/dist/domain/files/file-write-service.d.ts.map +1 -0
- package/daemon/dist/domain/files/file-write-service.js +180 -0
- package/daemon/dist/domain/files/file-write-service.js.map +1 -0
- package/daemon/dist/domain/files/path-safety.d.ts +47 -0
- package/daemon/dist/domain/files/path-safety.d.ts.map +1 -0
- package/daemon/dist/domain/files/path-safety.js +176 -0
- package/daemon/dist/domain/files/path-safety.js.map +1 -0
- package/daemon/dist/domain/graph-projection.d.ts +14 -1
- package/daemon/dist/domain/graph-projection.d.ts.map +1 -1
- package/daemon/dist/domain/graph-projection.js +8 -0
- package/daemon/dist/domain/graph-projection.js.map +1 -1
- package/daemon/dist/domain/install-engine.d.ts.map +1 -1
- package/daemon/dist/domain/install-engine.js +22 -6
- package/daemon/dist/domain/install-engine.js.map +1 -1
- package/daemon/dist/domain/install-verifier.d.ts.map +1 -1
- package/daemon/dist/domain/install-verifier.js +10 -5
- package/daemon/dist/domain/install-verifier.js.map +1 -1
- package/daemon/dist/domain/kernel-boot-tracker.d.ts +74 -0
- package/daemon/dist/domain/kernel-boot-tracker.d.ts.map +1 -0
- package/daemon/dist/domain/kernel-boot-tracker.js +213 -0
- package/daemon/dist/domain/kernel-boot-tracker.js.map +1 -0
- package/daemon/dist/domain/kernel-boot.d.ts +50 -0
- package/daemon/dist/domain/kernel-boot.d.ts.map +1 -0
- package/daemon/dist/domain/kernel-boot.js +147 -0
- package/daemon/dist/domain/kernel-boot.js.map +1 -0
- package/daemon/dist/domain/managed-blocks.d.ts.map +1 -1
- package/daemon/dist/domain/managed-blocks.js +22 -3
- package/daemon/dist/domain/managed-blocks.js.map +1 -1
- package/daemon/dist/domain/mission-control/audit-browse.d.ts +26 -0
- package/daemon/dist/domain/mission-control/audit-browse.d.ts.map +1 -0
- package/daemon/dist/domain/mission-control/audit-browse.js +101 -0
- package/daemon/dist/domain/mission-control/audit-browse.js.map +1 -0
- package/daemon/dist/domain/mission-control/mission-control-action-log.d.ts +51 -0
- package/daemon/dist/domain/mission-control/mission-control-action-log.d.ts.map +1 -0
- package/daemon/dist/domain/mission-control/mission-control-action-log.js +124 -0
- package/daemon/dist/domain/mission-control/mission-control-action-log.js.map +1 -0
- package/daemon/dist/domain/mission-control/mission-control-fleet-cli-capability.d.ts +131 -0
- package/daemon/dist/domain/mission-control/mission-control-fleet-cli-capability.d.ts.map +1 -0
- package/daemon/dist/domain/mission-control/mission-control-fleet-cli-capability.js +232 -0
- package/daemon/dist/domain/mission-control/mission-control-fleet-cli-capability.js.map +1 -0
- package/daemon/dist/domain/mission-control/mission-control-read-layer.d.ts +90 -0
- package/daemon/dist/domain/mission-control/mission-control-read-layer.d.ts.map +1 -0
- package/daemon/dist/domain/mission-control/mission-control-read-layer.js +279 -0
- package/daemon/dist/domain/mission-control/mission-control-read-layer.js.map +1 -0
- package/daemon/dist/domain/mission-control/mission-control-write-contract.d.ts +69 -0
- package/daemon/dist/domain/mission-control/mission-control-write-contract.d.ts.map +1 -0
- package/daemon/dist/domain/mission-control/mission-control-write-contract.js +302 -0
- package/daemon/dist/domain/mission-control/mission-control-write-contract.js.map +1 -0
- package/daemon/dist/domain/mission-control/notification-adapter-ntfy.d.ts +18 -0
- package/daemon/dist/domain/mission-control/notification-adapter-ntfy.d.ts.map +1 -0
- package/daemon/dist/domain/mission-control/notification-adapter-ntfy.js +48 -0
- package/daemon/dist/domain/mission-control/notification-adapter-ntfy.js.map +1 -0
- package/daemon/dist/domain/mission-control/notification-adapter-types.d.ts +25 -0
- package/daemon/dist/domain/mission-control/notification-adapter-types.d.ts.map +1 -0
- package/daemon/dist/domain/mission-control/notification-adapter-types.js +7 -0
- package/daemon/dist/domain/mission-control/notification-adapter-types.js.map +1 -0
- package/daemon/dist/domain/mission-control/notification-adapter-webhook.d.ts +27 -0
- package/daemon/dist/domain/mission-control/notification-adapter-webhook.d.ts.map +1 -0
- package/daemon/dist/domain/mission-control/notification-adapter-webhook.js +47 -0
- package/daemon/dist/domain/mission-control/notification-adapter-webhook.js.map +1 -0
- package/daemon/dist/domain/mission-control/notification-dispatcher.d.ts +53 -0
- package/daemon/dist/domain/mission-control/notification-dispatcher.d.ts.map +1 -0
- package/daemon/dist/domain/mission-control/notification-dispatcher.js +181 -0
- package/daemon/dist/domain/mission-control/notification-dispatcher.js.map +1 -0
- package/daemon/dist/domain/node-inventory.d.ts.map +1 -1
- package/daemon/dist/domain/node-inventory.js +24 -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 +7 -5
- package/daemon/dist/domain/node-launcher.js.map +1 -1
- package/daemon/dist/domain/plugin-discovery-service.d.ts +150 -0
- package/daemon/dist/domain/plugin-discovery-service.d.ts.map +1 -0
- package/daemon/dist/domain/plugin-discovery-service.js +468 -0
- package/daemon/dist/domain/plugin-discovery-service.js.map +1 -0
- package/daemon/dist/domain/plugin-vendor-service.d.ts +54 -0
- package/daemon/dist/domain/plugin-vendor-service.d.ts.map +1 -0
- package/daemon/dist/domain/plugin-vendor-service.js +111 -0
- package/daemon/dist/domain/plugin-vendor-service.js.map +1 -0
- package/daemon/dist/domain/preview/preview-rate-limiter.d.ts +20 -0
- package/daemon/dist/domain/preview/preview-rate-limiter.d.ts.map +1 -0
- package/daemon/dist/domain/preview/preview-rate-limiter.js +46 -0
- package/daemon/dist/domain/preview/preview-rate-limiter.js.map +1 -0
- package/daemon/dist/domain/profile-resolver.d.ts +8 -3
- package/daemon/dist/domain/profile-resolver.d.ts.map +1 -1
- package/daemon/dist/domain/profile-resolver.js +69 -15
- package/daemon/dist/domain/profile-resolver.js.map +1 -1
- package/daemon/dist/domain/progress/progress-indexer.d.ts +73 -0
- package/daemon/dist/domain/progress/progress-indexer.d.ts.map +1 -0
- package/daemon/dist/domain/progress/progress-indexer.js +210 -0
- package/daemon/dist/domain/progress/progress-indexer.js.map +1 -0
- package/daemon/dist/domain/project-classifier.d.ts +1 -1
- package/daemon/dist/domain/projection-planner.d.ts +7 -1
- package/daemon/dist/domain/projection-planner.d.ts.map +1 -1
- package/daemon/dist/domain/projection-planner.js +44 -4
- package/daemon/dist/domain/projection-planner.js.map +1 -1
- package/daemon/dist/domain/queue-repository.d.ts +30 -5
- package/daemon/dist/domain/queue-repository.d.ts.map +1 -1
- package/daemon/dist/domain/queue-repository.js +94 -27
- package/daemon/dist/domain/queue-repository.js.map +1 -1
- package/daemon/dist/domain/rehydrate-eligibility.d.ts +16 -0
- package/daemon/dist/domain/rehydrate-eligibility.d.ts.map +1 -0
- package/daemon/dist/domain/rehydrate-eligibility.js +43 -0
- package/daemon/dist/domain/rehydrate-eligibility.js.map +1 -0
- package/daemon/dist/domain/restore-check-service.d.ts.map +1 -1
- package/daemon/dist/domain/restore-check-service.js +19 -6
- package/daemon/dist/domain/restore-check-service.js.map +1 -1
- package/daemon/dist/domain/restore-orchestrator.d.ts.map +1 -1
- package/daemon/dist/domain/restore-orchestrator.js +4 -2
- package/daemon/dist/domain/restore-orchestrator.js.map +1 -1
- package/daemon/dist/domain/rig-repository.d.ts +14 -0
- package/daemon/dist/domain/rig-repository.d.ts.map +1 -1
- package/daemon/dist/domain/rig-repository.js +41 -0
- package/daemon/dist/domain/rig-repository.js.map +1 -1
- package/daemon/dist/domain/rig-teardown.d.ts.map +1 -1
- package/daemon/dist/domain/rig-teardown.js +5 -0
- package/daemon/dist/domain/rig-teardown.js.map +1 -1
- package/daemon/dist/domain/rigspec-codec.d.ts.map +1 -1
- package/daemon/dist/domain/rigspec-codec.js +15 -0
- package/daemon/dist/domain/rigspec-codec.js.map +1 -1
- package/daemon/dist/domain/rigspec-instantiator.d.ts +29 -0
- package/daemon/dist/domain/rigspec-instantiator.d.ts.map +1 -1
- package/daemon/dist/domain/rigspec-instantiator.js +136 -4
- package/daemon/dist/domain/rigspec-instantiator.js.map +1 -1
- package/daemon/dist/domain/rigspec-schema.d.ts.map +1 -1
- package/daemon/dist/domain/rigspec-schema.js +157 -4
- package/daemon/dist/domain/rigspec-schema.js.map +1 -1
- package/daemon/dist/domain/runtime-adapter.d.ts +11 -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/session-transport.d.ts.map +1 -1
- package/daemon/dist/domain/session-transport.js +33 -0
- package/daemon/dist/domain/session-transport.js.map +1 -1
- package/daemon/dist/domain/skill-discovery.d.ts +51 -0
- package/daemon/dist/domain/skill-discovery.d.ts.map +1 -0
- package/daemon/dist/domain/skill-discovery.js +144 -0
- package/daemon/dist/domain/skill-discovery.js.map +1 -0
- package/daemon/dist/domain/skill-library-discovery.d.ts +68 -0
- package/daemon/dist/domain/skill-library-discovery.d.ts.map +1 -0
- package/daemon/dist/domain/skill-library-discovery.js +144 -0
- package/daemon/dist/domain/skill-library-discovery.js.map +1 -0
- package/daemon/dist/domain/slices/slice-detail-projector.d.ts +182 -0
- package/daemon/dist/domain/slices/slice-detail-projector.d.ts.map +1 -0
- package/daemon/dist/domain/slices/slice-detail-projector.js +508 -0
- package/daemon/dist/domain/slices/slice-detail-projector.js.map +1 -0
- package/daemon/dist/domain/slices/slice-indexer.d.ts +137 -0
- package/daemon/dist/domain/slices/slice-indexer.d.ts.map +1 -0
- package/daemon/dist/domain/slices/slice-indexer.js +585 -0
- package/daemon/dist/domain/slices/slice-indexer.js.map +1 -0
- package/daemon/dist/domain/spec-library-service.d.ts +23 -2
- package/daemon/dist/domain/spec-library-service.d.ts.map +1 -1
- package/daemon/dist/domain/spec-library-service.js +31 -1
- package/daemon/dist/domain/spec-library-service.js.map +1 -1
- package/daemon/dist/domain/spec-library-workflow-scanner.d.ts +124 -0
- package/daemon/dist/domain/spec-library-workflow-scanner.d.ts.map +1 -0
- package/daemon/dist/domain/spec-library-workflow-scanner.js +325 -0
- package/daemon/dist/domain/spec-library-workflow-scanner.js.map +1 -0
- package/daemon/dist/domain/spec-review-service.d.ts +1 -1
- package/daemon/dist/domain/spec-review-service.d.ts.map +1 -1
- package/daemon/dist/domain/spec-review-service.js +14 -1
- package/daemon/dist/domain/spec-review-service.js.map +1 -1
- package/daemon/dist/domain/startup-validation.d.ts.map +1 -1
- package/daemon/dist/domain/startup-validation.js +57 -11
- package/daemon/dist/domain/startup-validation.js.map +1 -1
- package/daemon/dist/domain/steering/health-summary.d.ts +39 -0
- package/daemon/dist/domain/steering/health-summary.d.ts.map +1 -0
- package/daemon/dist/domain/steering/health-summary.js +100 -0
- package/daemon/dist/domain/steering/health-summary.js.map +1 -0
- package/daemon/dist/domain/steering/steering-composer.d.ts +102 -0
- package/daemon/dist/domain/steering/steering-composer.d.ts.map +1 -0
- package/daemon/dist/domain/steering/steering-composer.js +263 -0
- package/daemon/dist/domain/steering/steering-composer.js.map +1 -0
- package/daemon/dist/domain/transcript-capture.d.ts.map +1 -1
- package/daemon/dist/domain/transcript-capture.js +7 -4
- package/daemon/dist/domain/transcript-capture.js.map +1 -1
- package/daemon/dist/domain/transcript-rotation.d.ts +29 -0
- package/daemon/dist/domain/transcript-rotation.d.ts.map +1 -0
- package/daemon/dist/domain/transcript-rotation.js +109 -0
- package/daemon/dist/domain/transcript-rotation.js.map +1 -0
- package/daemon/dist/domain/transcript-store.d.ts.map +1 -1
- package/daemon/dist/domain/transcript-store.js +7 -1
- package/daemon/dist/domain/transcript-store.js.map +1 -1
- package/daemon/dist/domain/types.d.ts +128 -9
- package/daemon/dist/domain/types.d.ts.map +1 -1
- package/daemon/dist/domain/types.js +8 -1
- package/daemon/dist/domain/types.js.map +1 -1
- package/daemon/dist/domain/user-settings/settings-store.d.ts +66 -0
- package/daemon/dist/domain/user-settings/settings-store.d.ts.map +1 -0
- package/daemon/dist/domain/user-settings/settings-store.js +546 -0
- package/daemon/dist/domain/user-settings/settings-store.js.map +1 -0
- package/daemon/dist/domain/view-event-bridge.d.ts.map +1 -1
- package/daemon/dist/domain/view-event-bridge.js +2 -3
- package/daemon/dist/domain/view-event-bridge.js.map +1 -1
- package/daemon/dist/domain/whoami-service.d.ts +29 -0
- package/daemon/dist/domain/whoami-service.d.ts.map +1 -1
- package/daemon/dist/domain/whoami-service.js +68 -0
- package/daemon/dist/domain/whoami-service.js.map +1 -1
- package/daemon/dist/domain/workflow/slice-workflow-binding.d.ts +21 -0
- package/daemon/dist/domain/workflow/slice-workflow-binding.d.ts.map +1 -0
- package/daemon/dist/domain/workflow/slice-workflow-binding.js +103 -0
- package/daemon/dist/domain/workflow/slice-workflow-binding.js.map +1 -0
- package/daemon/dist/domain/workflow/slice-workflow-projection.d.ts +81 -0
- package/daemon/dist/domain/workflow/slice-workflow-projection.d.ts.map +1 -0
- package/daemon/dist/domain/workflow/slice-workflow-projection.js +127 -0
- package/daemon/dist/domain/workflow/slice-workflow-projection.js.map +1 -0
- package/daemon/dist/domain/workflow/starter-spec-loader.d.ts +51 -0
- package/daemon/dist/domain/workflow/starter-spec-loader.d.ts.map +1 -0
- package/daemon/dist/domain/workflow/starter-spec-loader.js +140 -0
- package/daemon/dist/domain/workflow/starter-spec-loader.js.map +1 -0
- package/daemon/dist/domain/workflow-projector.js +11 -3
- package/daemon/dist/domain/workflow-projector.js.map +1 -1
- package/daemon/dist/domain/workflow-spec-cache.d.ts +34 -0
- package/daemon/dist/domain/workflow-spec-cache.d.ts.map +1 -1
- package/daemon/dist/domain/workflow-spec-cache.js +121 -15
- package/daemon/dist/domain/workflow-spec-cache.js.map +1 -1
- package/daemon/dist/domain/workspace/default-workspace-scaffold.d.ts +6 -0
- package/daemon/dist/domain/workspace/default-workspace-scaffold.d.ts.map +1 -0
- package/daemon/dist/domain/workspace/default-workspace-scaffold.js +252 -0
- package/daemon/dist/domain/workspace/default-workspace-scaffold.js.map +1 -0
- package/daemon/dist/domain/workspace/frontmatter-validator.d.ts +40 -0
- package/daemon/dist/domain/workspace/frontmatter-validator.d.ts.map +1 -0
- package/daemon/dist/domain/workspace/frontmatter-validator.js +185 -0
- package/daemon/dist/domain/workspace/frontmatter-validator.js.map +1 -0
- package/daemon/dist/domain/workspace/getting-started-narrative.d.ts +15 -0
- package/daemon/dist/domain/workspace/getting-started-narrative.d.ts.map +1 -0
- package/daemon/dist/domain/workspace/getting-started-narrative.js +237 -0
- package/daemon/dist/domain/workspace/getting-started-narrative.js.map +1 -0
- package/daemon/dist/domain/workspace/workspace-resolver.d.ts +25 -0
- package/daemon/dist/domain/workspace/workspace-resolver.d.ts.map +1 -0
- package/daemon/dist/domain/workspace/workspace-resolver.js +86 -0
- package/daemon/dist/domain/workspace/workspace-resolver.js.map +1 -0
- package/daemon/dist/index.d.ts +2 -1
- package/daemon/dist/index.d.ts.map +1 -1
- package/daemon/dist/index.js +56 -12
- package/daemon/dist/index.js.map +1 -1
- package/daemon/dist/lib/pane-envelope.d.ts +7 -0
- package/daemon/dist/lib/pane-envelope.d.ts.map +1 -0
- package/daemon/dist/lib/pane-envelope.js +38 -0
- package/daemon/dist/lib/pane-envelope.js.map +1 -0
- package/daemon/dist/middleware/auth-bearer-token.d.ts +91 -0
- package/daemon/dist/middleware/auth-bearer-token.d.ts.map +1 -0
- package/daemon/dist/middleware/auth-bearer-token.js +236 -0
- package/daemon/dist/middleware/auth-bearer-token.js.map +1 -0
- package/daemon/dist/openrig-compat.d.ts +1 -1
- package/daemon/dist/openrig-compat.d.ts.map +1 -1
- package/daemon/dist/openrig-compat.js +6 -4
- package/daemon/dist/openrig-compat.js.map +1 -1
- package/daemon/dist/routes/agent-images.d.ts +8 -0
- package/daemon/dist/routes/agent-images.d.ts.map +1 -0
- package/daemon/dist/routes/agent-images.js +253 -0
- package/daemon/dist/routes/agent-images.js.map +1 -0
- package/daemon/dist/routes/config.d.ts +3 -0
- package/daemon/dist/routes/config.d.ts.map +1 -0
- package/daemon/dist/routes/config.js +109 -0
- package/daemon/dist/routes/config.js.map +1 -0
- package/daemon/dist/routes/context-packs.d.ts +3 -0
- package/daemon/dist/routes/context-packs.d.ts.map +1 -0
- package/daemon/dist/routes/context-packs.js +129 -0
- package/daemon/dist/routes/context-packs.js.map +1 -0
- package/daemon/dist/routes/files.d.ts +17 -0
- package/daemon/dist/routes/files.d.ts.map +1 -0
- package/daemon/dist/routes/files.js +262 -0
- package/daemon/dist/routes/files.js.map +1 -0
- package/daemon/dist/routes/health-summary.d.ts +9 -0
- package/daemon/dist/routes/health-summary.d.ts.map +1 -0
- package/daemon/dist/routes/health-summary.js +33 -0
- package/daemon/dist/routes/health-summary.js.map +1 -0
- package/daemon/dist/routes/kernel-status.d.ts +3 -0
- package/daemon/dist/routes/kernel-status.d.ts.map +1 -0
- package/daemon/dist/routes/kernel-status.js +40 -0
- package/daemon/dist/routes/kernel-status.js.map +1 -0
- package/daemon/dist/routes/mission-control.d.ts +37 -0
- package/daemon/dist/routes/mission-control.d.ts.map +1 -0
- package/daemon/dist/routes/mission-control.js +306 -0
- package/daemon/dist/routes/mission-control.js.map +1 -0
- package/daemon/dist/routes/missions.d.ts +3 -0
- package/daemon/dist/routes/missions.d.ts.map +1 -0
- package/daemon/dist/routes/missions.js +195 -0
- package/daemon/dist/routes/missions.js.map +1 -0
- package/daemon/dist/routes/plugins.d.ts +3 -0
- package/daemon/dist/routes/plugins.d.ts.map +1 -0
- package/daemon/dist/routes/plugins.js +223 -0
- package/daemon/dist/routes/plugins.js.map +1 -0
- package/daemon/dist/routes/progress.d.ts +7 -0
- package/daemon/dist/routes/progress.d.ts.map +1 -0
- package/daemon/dist/routes/progress.js +33 -0
- package/daemon/dist/routes/progress.js.map +1 -0
- package/daemon/dist/routes/queue.d.ts.map +1 -1
- package/daemon/dist/routes/queue.js +52 -1
- package/daemon/dist/routes/queue.js.map +1 -1
- package/daemon/dist/routes/rig-cmux.d.ts +3 -0
- package/daemon/dist/routes/rig-cmux.d.ts.map +1 -0
- package/daemon/dist/routes/rig-cmux.js +121 -0
- package/daemon/dist/routes/rig-cmux.js.map +1 -0
- package/daemon/dist/routes/rigs.d.ts +3 -0
- package/daemon/dist/routes/rigs.d.ts.map +1 -1
- package/daemon/dist/routes/rigs.js +73 -7
- package/daemon/dist/routes/rigs.js.map +1 -1
- package/daemon/dist/routes/rigspec.js +6 -3
- package/daemon/dist/routes/rigspec.js.map +1 -1
- package/daemon/dist/routes/sessions.d.ts.map +1 -1
- package/daemon/dist/routes/sessions.js +119 -0
- package/daemon/dist/routes/sessions.js.map +1 -1
- package/daemon/dist/routes/skills.d.ts +3 -0
- package/daemon/dist/routes/skills.d.ts.map +1 -0
- package/daemon/dist/routes/skills.js +147 -0
- package/daemon/dist/routes/skills.js.map +1 -0
- package/daemon/dist/routes/slices.d.ts +9 -0
- package/daemon/dist/routes/slices.d.ts.map +1 -0
- package/daemon/dist/routes/slices.js +207 -0
- package/daemon/dist/routes/slices.js.map +1 -0
- package/daemon/dist/routes/spec-library.d.ts.map +1 -1
- package/daemon/dist/routes/spec-library.js +87 -5
- package/daemon/dist/routes/spec-library.js.map +1 -1
- package/daemon/dist/routes/steering.d.ts +7 -0
- package/daemon/dist/routes/steering.d.ts.map +1 -0
- package/daemon/dist/routes/steering.js +27 -0
- package/daemon/dist/routes/steering.js.map +1 -0
- package/daemon/dist/routes/up.d.ts.map +1 -1
- package/daemon/dist/routes/up.js +21 -3
- package/daemon/dist/routes/up.js.map +1 -1
- package/daemon/dist/routes/whoami.d.ts.map +1 -1
- package/daemon/dist/routes/whoami.js +6 -1
- package/daemon/dist/routes/whoami.js.map +1 -1
- package/daemon/dist/routes/workflow.d.ts.map +1 -1
- package/daemon/dist/routes/workflow.js +43 -0
- package/daemon/dist/routes/workflow.js.map +1 -1
- package/daemon/dist/routes/workspace.d.ts +3 -0
- package/daemon/dist/routes/workspace.d.ts.map +1 -0
- package/daemon/dist/routes/workspace.js +53 -0
- package/daemon/dist/routes/workspace.js.map +1 -0
- package/daemon/dist/server.d.ts +82 -0
- package/daemon/dist/server.d.ts.map +1 -1
- package/daemon/dist/server.js +82 -1
- package/daemon/dist/server.js.map +1 -1
- package/daemon/dist/startup.d.ts +9 -0
- package/daemon/dist/startup.d.ts.map +1 -1
- package/daemon/dist/startup.js +577 -5
- package/daemon/dist/startup.js.map +1 -1
- package/daemon/docs/reference/agent-spec.md +7 -7
- package/daemon/docs/reference/agent-startup-guide.md +2 -2
- package/daemon/docs/reference/project-workspace.md +102 -0
- package/daemon/specs/agents/apps/vault-specialist/agent.yaml +1 -2
- package/daemon/specs/agents/apps/vault-specialist/guidance/role.md +0 -1
- package/daemon/specs/agents/conveyor/builder/agent.yaml +34 -0
- package/daemon/specs/agents/conveyor/builder/guidance/role.md +31 -0
- package/daemon/specs/agents/conveyor/builder/startup/context.md +9 -0
- package/daemon/specs/agents/conveyor/lead/agent.yaml +34 -0
- package/daemon/specs/agents/conveyor/lead/guidance/role.md +34 -0
- package/daemon/specs/agents/conveyor/lead/startup/context.md +15 -0
- package/daemon/specs/agents/conveyor/planner/agent.yaml +34 -0
- package/daemon/specs/agents/conveyor/planner/guidance/role.md +29 -0
- package/daemon/specs/agents/conveyor/planner/startup/context.md +12 -0
- package/daemon/specs/agents/conveyor/reviewer/agent.yaml +34 -0
- package/daemon/specs/agents/conveyor/reviewer/guidance/role.md +29 -0
- package/daemon/specs/agents/conveyor/reviewer/startup/context.md +10 -0
- package/daemon/specs/agents/design/product-designer/agent.yaml +0 -1
- package/daemon/specs/agents/development/implementer/agent.yaml +1 -2
- package/daemon/specs/agents/development/implementer/guidance/role.md +0 -1
- package/daemon/specs/agents/development/qa/agent.yaml +0 -1
- package/daemon/specs/agents/development/qa/guidance/role.md +0 -2
- package/daemon/specs/agents/orchestration/orchestrator/agent.yaml +1 -2
- package/daemon/specs/agents/orchestration/orchestrator/guidance/role.md +2 -3
- package/daemon/specs/agents/research/analyst/agent.yaml +0 -1
- package/daemon/specs/agents/research/synthesizer/agent.yaml +0 -1
- package/daemon/specs/agents/review/independent-reviewer/agent.yaml +0 -1
- package/daemon/specs/agents/shared/agent.yaml +6 -8
- package/daemon/specs/agents/shared/skills/core/openrig-architect/SKILL.md +361 -0
- package/daemon/specs/agents/shared/skills/core/openrig-installer/SKILL.md +142 -0
- package/daemon/specs/agents/shared/skills/core/openrig-user/SKILL.md +30 -0
- package/daemon/specs/agents/shared/skills/core/openrig-user-settings/SKILL.md +153 -0
- package/daemon/specs/agents/shared/skills/core/rig-lifecycle/SKILL.md +116 -0
- package/daemon/specs/agents/shared/skills/pods/development-team/SKILL.md +0 -1
- package/daemon/specs/agents/shared/skills/pods/orchestration-team/SKILL.md +2 -2
- package/daemon/specs/agents/shared/skills/process/agent-browser/LOCAL-INSIGHTS.md +6 -6
- package/daemon/specs/agents/shared/skills/process/agent-browser/OPENRIG.md +40 -0
- package/daemon/specs/agents/shared/skills/process/agent-browser/SKILL.md +10 -0
- package/daemon/specs/agents/shared/skills/process/brainstorming/OPENRIG.md +48 -0
- package/daemon/specs/agents/shared/skills/process/brainstorming/SKILL.md +11 -0
- package/daemon/specs/agents/shared/skills/process/dogfood/SKILL.md +5 -0
- package/daemon/specs/agents/shared/skills/process/executing-plans/OPENRIG.md +56 -0
- package/daemon/specs/agents/shared/skills/process/executing-plans/SKILL.md +10 -0
- package/daemon/specs/agents/shared/skills/process/frontend-design/SKILL.md +5 -0
- package/daemon/specs/agents/shared/skills/process/systematic-debugging/SKILL.md +5 -0
- package/daemon/specs/agents/shared/skills/process/test-driven-development/SKILL.md +5 -0
- package/daemon/specs/agents/shared/skills/process/using-superpowers/OPENRIG.md +48 -0
- package/daemon/specs/agents/shared/skills/process/using-superpowers/SKILL.md +11 -0
- package/daemon/specs/agents/shared/skills/process/verification-before-completion/SKILL.md +5 -0
- package/daemon/specs/agents/shared/skills/process/writing-plans/OPENRIG.md +52 -0
- package/daemon/specs/agents/shared/skills/process/writing-plans/SKILL.md +12 -2
- package/daemon/specs/rigs/launch/conveyor/CULTURE.md +34 -0
- package/daemon/specs/rigs/launch/conveyor/README.md +33 -0
- package/daemon/specs/rigs/launch/conveyor/rig.yaml +72 -0
- package/daemon/specs/rigs/launch/kernel/agents/advisor/lead/agent.yaml +35 -0
- package/daemon/specs/rigs/launch/kernel/agents/advisor/lead/guidance/role.md +50 -0
- package/daemon/specs/rigs/launch/kernel/agents/advisor/lead/startup/context.md +37 -0
- package/daemon/specs/rigs/launch/kernel/agents/operator/agent/agent.yaml +35 -0
- package/daemon/specs/rigs/launch/kernel/agents/operator/agent/guidance/role.md +49 -0
- package/daemon/specs/rigs/launch/kernel/agents/operator/agent/startup/context.md +63 -0
- package/daemon/specs/rigs/launch/kernel/agents/queue/worker/agent.yaml +35 -0
- package/daemon/specs/rigs/launch/kernel/agents/queue/worker/guidance/role.md +33 -0
- package/daemon/specs/rigs/launch/kernel/agents/queue/worker/startup/context.md +30 -0
- package/daemon/specs/rigs/launch/kernel/culture/CULTURE.md +69 -0
- package/daemon/specs/rigs/launch/kernel/rig-claude-only.yaml +59 -0
- package/daemon/specs/rigs/launch/kernel/rig-codex-only.yaml +59 -0
- package/daemon/specs/rigs/launch/kernel/rig.yaml +69 -0
- package/daemon/specs/rigs/preview/product-team/CULTURE.md +2 -2
- package/daemon/specs/rigs/preview/product-team/rig.yaml +3 -4
- package/dist/commands/agent-image.d.ts +4 -0
- package/dist/commands/agent-image.d.ts.map +1 -0
- package/dist/commands/agent-image.js +352 -0
- package/dist/commands/agent-image.js.map +1 -0
- package/dist/commands/config-init-workspace.d.ts +35 -0
- package/dist/commands/config-init-workspace.d.ts.map +1 -0
- package/dist/commands/config-init-workspace.js +553 -0
- package/dist/commands/config-init-workspace.js.map +1 -0
- package/dist/commands/config.d.ts.map +1 -1
- package/dist/commands/config.js +86 -18
- package/dist/commands/config.js.map +1 -1
- package/dist/commands/context-pack.d.ts +4 -0
- package/dist/commands/context-pack.d.ts.map +1 -0
- package/dist/commands/context-pack.js +357 -0
- package/dist/commands/context-pack.js.map +1 -0
- package/dist/commands/daemon.d.ts.map +1 -1
- package/dist/commands/daemon.js +61 -1
- package/dist/commands/daemon.js.map +1 -1
- package/dist/commands/heartbeat.d.ts.map +1 -1
- package/dist/commands/heartbeat.js +0 -5
- package/dist/commands/heartbeat.js.map +1 -1
- package/dist/commands/import.d.ts.map +1 -1
- package/dist/commands/import.js +7 -2
- package/dist/commands/import.js.map +1 -1
- package/dist/commands/plugin.d.ts +4 -0
- package/dist/commands/plugin.d.ts.map +1 -0
- package/dist/commands/plugin.js +395 -0
- package/dist/commands/plugin.js.map +1 -0
- package/dist/commands/ps.d.ts.map +1 -1
- package/dist/commands/ps.js +173 -14
- package/dist/commands/ps.js.map +1 -1
- package/dist/commands/queue.d.ts.map +1 -1
- package/dist/commands/queue.js +9 -0
- package/dist/commands/queue.js.map +1 -1
- package/dist/commands/send.d.ts +15 -0
- package/dist/commands/send.d.ts.map +1 -1
- package/dist/commands/send.js +32 -1
- package/dist/commands/send.js.map +1 -1
- package/dist/commands/specs.d.ts +4 -2
- package/dist/commands/specs.d.ts.map +1 -1
- package/dist/commands/specs.js +12 -8
- package/dist/commands/specs.js.map +1 -1
- package/dist/commands/up.d.ts.map +1 -1
- package/dist/commands/up.js +30 -4
- package/dist/commands/up.js.map +1 -1
- package/dist/commands/whoami.d.ts.map +1 -1
- package/dist/commands/whoami.js +9 -4
- package/dist/commands/whoami.js.map +1 -1
- package/dist/commands/workflow.d.ts.map +1 -1
- package/dist/commands/workflow.js +37 -0
- package/dist/commands/workflow.js.map +1 -1
- package/dist/commands/workspace.d.ts +6 -0
- package/dist/commands/workspace.d.ts.map +1 -0
- package/dist/commands/workspace.js +83 -0
- package/dist/commands/workspace.js.map +1 -0
- package/dist/config-store.d.ts +90 -1
- package/dist/config-store.d.ts.map +1 -1
- package/dist/config-store.js +477 -42
- package/dist/config-store.js.map +1 -1
- package/dist/daemon-lifecycle.d.ts +42 -1
- package/dist/daemon-lifecycle.d.ts.map +1 -1
- package/dist/daemon-lifecycle.js +98 -7
- package/dist/daemon-lifecycle.js.map +1 -1
- package/dist/host-registry.d.ts +1 -1
- package/dist/host-registry.js +1 -1
- package/dist/index.d.ts +5 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +8 -0
- package/dist/index.js.map +1 -1
- package/dist/openrig-compat.d.ts +1 -1
- package/dist/openrig-compat.d.ts.map +1 -1
- package/dist/openrig-compat.js +6 -4
- package/dist/openrig-compat.js.map +1 -1
- package/dist/restore-packet/claude-transcript-parser.js +1 -1
- package/dist/restore-packet/claude-transcript-parser.js.map +1 -1
- package/dist/restore-packet/codex-jsonl-parser.js +1 -1
- package/dist/restore-packet/codex-jsonl-parser.js.map +1 -1
- package/package.json +2 -2
- package/ui/dist/assets/index-C_Q5FczU.css +1 -0
- package/ui/dist/assets/index-Rl3ZBrUg.js +547 -0
- package/ui/dist/graphics/operator-climber-monochrome.png +0 -0
- package/ui/dist/index.html +3 -2
- package/daemon/specs/agents/shared/skills/claude-compact-in-place/SKILL.md +0 -100
- package/daemon/specs/agents/shared/skills/mental-model-ha/SKILL.md +0 -956
- package/daemon/specs/agents/shared/skills/process/containerized-e2e/SKILL.md +0 -256
- package/daemon/specs/agents/shared/skills/process/containerized-e2e/scripts/Dockerfile +0 -39
- package/daemon/specs/agents/shared/skills/process/containerized-e2e/scripts/build-e2e-image.sh +0 -37
- package/daemon/specs/agents/shared/skills/process/containerized-e2e/templates/control-plane-test.yaml +0 -40
- package/daemon/specs/agents/shared/skills/process/containerized-e2e/templates/e2e-report-template.md +0 -94
- package/daemon/specs/agents/shared/skills/process/containerized-e2e/templates/expansion-collision-fragment.yaml +0 -13
- package/daemon/specs/agents/shared/skills/process/containerized-e2e/templates/expansion-pod-fragment.yaml +0 -14
- package/ui/dist/assets/index-B09doO8H.js +0 -139
- package/ui/dist/assets/index-Dec25siz.css +0 -1
- package/ui/dist/assets/index-GNYaWmBj.js +0 -225
package/daemon/dist/startup.js
CHANGED
|
@@ -71,6 +71,14 @@ import { WorkflowRuntime } from "./domain/workflow-runtime.js";
|
|
|
71
71
|
import { makeWorkflowKeepalivePolicy } from "./domain/policies/workflow-keepalive.js";
|
|
72
72
|
import { SpecReviewService } from "./domain/spec-review-service.js";
|
|
73
73
|
import { SpecLibraryService } from "./domain/spec-library-service.js";
|
|
74
|
+
// Phase 3a slice 3.3 — plugin discovery service.
|
|
75
|
+
import { PluginDiscoveryService } from "./domain/plugin-discovery-service.js";
|
|
76
|
+
// Slice 28 Checkpoint C-3 — skill-library discovery (SC-29 #11 cumulative).
|
|
77
|
+
import { SkillLibraryDiscoveryService } from "./domain/skill-library-discovery.js";
|
|
78
|
+
import { ContextPackLibraryService } from "./domain/context-packs/context-pack-library-service.js";
|
|
79
|
+
import { AgentImageLibraryService } from "./domain/agent-images/agent-image-library-service.js";
|
|
80
|
+
import { SnapshotCapturer } from "./domain/agent-images/snapshot-capturer.js";
|
|
81
|
+
import { SettingsStore as ContextPackSettingsStore } from "./domain/user-settings/settings-store.js";
|
|
74
82
|
import { WhoamiService } from "./domain/whoami-service.js";
|
|
75
83
|
import { NodeCmuxService } from "./domain/node-cmux-service.js";
|
|
76
84
|
import { createApp } from "./server.js";
|
|
@@ -111,12 +119,53 @@ import { workflowSpecsSchema } from "./db/migrations/033_workflow_specs.js";
|
|
|
111
119
|
import { workflowInstancesSchema } from "./db/migrations/034_workflow_instances.js";
|
|
112
120
|
import { workflowStepTrailsSchema } from "./db/migrations/035_workflow_step_trails.js";
|
|
113
121
|
import { watchdogPolicyEnumExtensionSchema } from "./db/migrations/036_watchdog_policy_enum_extension.js";
|
|
122
|
+
import { missionControlActionsSchema } from "./db/migrations/037_mission_control_actions.js";
|
|
123
|
+
import { workspacePrimitiveSchema } from "./db/migrations/038_workspace_primitive.js";
|
|
124
|
+
import { queueTargetRepoSchema } from "./db/migrations/039_queue_target_repo.js";
|
|
125
|
+
// Slice 11 (release-0.3.1 workflow-spec-folder-discovery) — adds
|
|
126
|
+
// status + error_message columns to workflow_specs so the scanner
|
|
127
|
+
// can record diagnostic rows. SC-29 #10 declared verbatim in commit body.
|
|
128
|
+
import { workflowSpecsDiagnosticSchema } from "./db/migrations/040_workflow_specs_diagnostic.js";
|
|
129
|
+
import { MissionControlActionLog } from "./domain/mission-control/mission-control-action-log.js";
|
|
130
|
+
import { MissionControlWriteContract } from "./domain/mission-control/mission-control-write-contract.js";
|
|
131
|
+
import { MissionControlReadLayer } from "./domain/mission-control/mission-control-read-layer.js";
|
|
132
|
+
import { MissionControlFleetCliCapability, makeLocalCliCapabilityProbe, } from "./domain/mission-control/mission-control-fleet-cli-capability.js";
|
|
133
|
+
import { MissionControlAuditBrowse } from "./domain/mission-control/audit-browse.js";
|
|
134
|
+
import { MissionControlNotificationDispatcher } from "./domain/mission-control/notification-dispatcher.js";
|
|
135
|
+
import { NtfyNotificationAdapter } from "./domain/mission-control/notification-adapter-ntfy.js";
|
|
136
|
+
import { WebhookNotificationAdapter } from "./domain/mission-control/notification-adapter-webhook.js";
|
|
114
137
|
import { OPENRIG_HOME } from "./openrig-compat.js";
|
|
115
138
|
import { getCompatibleOpenRigPath, getDefaultOpenRigPath, readOpenRigEnv, } from "./openrig-compat.js";
|
|
139
|
+
const KNOWN_PROVIDER_AUTH_ENV = new Set([
|
|
140
|
+
"ANTHROPIC_API_KEY",
|
|
141
|
+
"ANTHROPIC_AUTH_TOKEN",
|
|
142
|
+
"CLAUDE_CODE_OAUTH_TOKEN",
|
|
143
|
+
"OPENAI_API_KEY",
|
|
144
|
+
"OPENAI_BASE_URL",
|
|
145
|
+
"OPENAI_ORG_ID",
|
|
146
|
+
"OPENAI_PROJECT_ID",
|
|
147
|
+
]);
|
|
148
|
+
export function collectAllowlistedProviderAuthEnv(raw, env) {
|
|
149
|
+
const out = {};
|
|
150
|
+
for (const item of (raw ?? "").split(",")) {
|
|
151
|
+
const name = item.trim();
|
|
152
|
+
if (!name)
|
|
153
|
+
continue;
|
|
154
|
+
if (!/^[A-Z_][A-Z0-9_]*$/.test(name))
|
|
155
|
+
continue;
|
|
156
|
+
if (!KNOWN_PROVIDER_AUTH_ENV.has(name))
|
|
157
|
+
continue;
|
|
158
|
+
const value = env[name];
|
|
159
|
+
if (typeof value === "string" && value.length > 0) {
|
|
160
|
+
out[name] = value;
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
return out;
|
|
164
|
+
}
|
|
116
165
|
export async function createDaemon(opts) {
|
|
117
166
|
const dbPath = opts?.dbPath ?? ":memory:";
|
|
118
167
|
const db = createDb(dbPath);
|
|
119
|
-
migrate(db, [coreSchema, bindingsSessionsSchema, eventsSchema, snapshotsSchema, checkpointsSchema, resumeMetadataSchema, nodeSpecFieldsSchema, packagesSchema, installJournalSchema, journalSeqSchema, bootstrapSchema, discoverySchema, discoveryFkFix, agentspecRebootSchema, startupContextSchema, chatMessagesSchema, podNamespaceSchema, contextUsageSchema, externalCliAttachmentSchema, rigServicesSchema, seatHandoverObservabilitySchema, nodeCodexConfigProfileSchema, streamItemsSchema, queueItemsSchema, queueTransitionsSchema, inboxEntriesSchema, outboxEntriesSchema, projectClassificationsSchema, classifierLeasesSchema, viewsCustomSchema, watchdogJobsSchema, watchdogHistorySchema, workflowSpecsSchema, workflowInstancesSchema, workflowStepTrailsSchema, watchdogPolicyEnumExtensionSchema]);
|
|
168
|
+
migrate(db, [coreSchema, bindingsSessionsSchema, eventsSchema, snapshotsSchema, checkpointsSchema, resumeMetadataSchema, nodeSpecFieldsSchema, packagesSchema, installJournalSchema, journalSeqSchema, bootstrapSchema, discoverySchema, discoveryFkFix, agentspecRebootSchema, startupContextSchema, chatMessagesSchema, podNamespaceSchema, contextUsageSchema, externalCliAttachmentSchema, rigServicesSchema, seatHandoverObservabilitySchema, nodeCodexConfigProfileSchema, streamItemsSchema, queueItemsSchema, queueTransitionsSchema, inboxEntriesSchema, outboxEntriesSchema, projectClassificationsSchema, classifierLeasesSchema, viewsCustomSchema, watchdogJobsSchema, watchdogHistorySchema, workflowSpecsSchema, workflowInstancesSchema, workflowStepTrailsSchema, watchdogPolicyEnumExtensionSchema, missionControlActionsSchema, workspacePrimitiveSchema, queueTargetRepoSchema, workflowSpecsDiagnosticSchema]);
|
|
120
169
|
const rigRepo = new RigRepository(db);
|
|
121
170
|
const sessionRegistry = new SessionRegistry(db);
|
|
122
171
|
const eventBus = new EventBus(db);
|
|
@@ -124,7 +173,12 @@ export async function createDaemon(opts) {
|
|
|
124
173
|
// Reject `<member>@<unknown-rig>` shapes by checking the rig portion
|
|
125
174
|
// against the rig registry. Bare ids without `@` are also rejected
|
|
126
175
|
// (no canonical rig binding).
|
|
176
|
+
const isHumanSeatSessionRef = (sessionRef) => {
|
|
177
|
+
return /^human(?:-[A-Za-z0-9._-]+)?@(kernel|host)$/.test(sessionRef);
|
|
178
|
+
};
|
|
127
179
|
const topologyValidateRig = (sessionRef) => {
|
|
180
|
+
if (isHumanSeatSessionRef(sessionRef))
|
|
181
|
+
return true;
|
|
128
182
|
const m = /^[^@]+@(.+)$/.exec(sessionRef);
|
|
129
183
|
if (!m)
|
|
130
184
|
return false;
|
|
@@ -167,6 +221,8 @@ export async function createDaemon(opts) {
|
|
|
167
221
|
const activityHookUrl = readOpenRigEnv("OPENRIG_URL", "RIGGED_URL") || undefined;
|
|
168
222
|
const openRigPort = readOpenRigEnv("OPENRIG_PORT", "RIGGED_PORT") || undefined;
|
|
169
223
|
const openRigHost = readOpenRigEnv("OPENRIG_HOST", "RIGGED_HOST") || undefined;
|
|
224
|
+
const startupSettings = new ContextPackSettingsStore().resolveConfig();
|
|
225
|
+
const providerAuthEnv = collectAllowlistedProviderAuthEnv(startupSettings.recoveryProviderAuthEnvAllowlistRaw, process.env);
|
|
170
226
|
const transcriptStore = new TranscriptStore({
|
|
171
227
|
enabled: transcriptsEnabled,
|
|
172
228
|
transcriptsRoot: transcriptsPath,
|
|
@@ -185,6 +241,7 @@ export async function createDaemon(opts) {
|
|
|
185
241
|
OPENRIG_HOST: openRigHost,
|
|
186
242
|
OPENRIG_URL: activityHookUrl,
|
|
187
243
|
OPENRIG_ACTIVITY_HOOK_TOKEN: activityHookToken,
|
|
244
|
+
...providerAuthEnv,
|
|
188
245
|
},
|
|
189
246
|
});
|
|
190
247
|
const snapshotRepo = new SnapshotRepository(db);
|
|
@@ -297,25 +354,161 @@ export async function createDaemon(opts) {
|
|
|
297
354
|
const { ClaudeCodeAdapter } = await import("./adapters/claude-code-adapter.js");
|
|
298
355
|
const { CodexRuntimeAdapter } = await import("./adapters/codex-runtime-adapter.js");
|
|
299
356
|
const startupOrchestrator = new StartupOrchestrator({ db, sessionRegistry, eventBus, tmuxAdapter, readFile: (p) => fs.readFileSync(p, "utf-8") });
|
|
300
|
-
const
|
|
357
|
+
const runtimeSettings = new ContextPackSettingsStore().resolveConfig();
|
|
301
358
|
const claudeAdapter = new ClaudeCodeAdapter({ tmux: tmuxAdapter, fsOps: { readFile: (p) => fs.readFileSync(p, "utf-8"), writeFile: (p, c) => fs.writeFileSync(p, c, "utf-8"), exists: (p) => fs.existsSync(p), mkdirp: (p) => fs.mkdirSync(p, { recursive: true }), copyFile: (src, dest) => fs.copyFileSync(src, dest), listFiles: (dir) => { const r = []; function w(d, pre) { for (const e of fs.readdirSync(d, { withFileTypes: true })) {
|
|
302
359
|
if (e.isDirectory())
|
|
303
360
|
w(nodePath.join(d, e.name), nodePath.join(pre, e.name));
|
|
304
361
|
else
|
|
305
362
|
r.push(pre ? nodePath.join(pre, e.name) : e.name);
|
|
306
|
-
} } w(dir, ""); return r; }, readdir: (dir) => fs.readdirSync(dir), homedir: os.homedir() }, stateDir: OPENRIG_HOME, collectorAssetPath: nodePath.resolve(import.meta.dirname, "../assets/claude-statusline-context.cjs"),
|
|
363
|
+
} } w(dir, ""); return r; }, readdir: (dir) => fs.readdirSync(dir), homedir: os.homedir() }, stateDir: OPENRIG_HOME, collectorAssetPath: nodePath.resolve(import.meta.dirname, "../assets/claude-statusline-context.cjs"), autoDriveProviderPrompts: runtimeSettings.recoveryAutoDriveProviderPrompts });
|
|
307
364
|
const codexAdapter = new CodexRuntimeAdapter({ tmux: tmuxAdapter, fsOps: { readFile: (p) => fs.readFileSync(p, "utf-8"), writeFile: (p, c) => fs.writeFileSync(p, c, "utf-8"), exists: (p) => fs.existsSync(p), mkdirp: (p) => fs.mkdirSync(p, { recursive: true }), listFiles: (dir) => { const r = []; function w(d, pre) { for (const e of fs.readdirSync(d, { withFileTypes: true })) {
|
|
308
365
|
if (e.isDirectory())
|
|
309
366
|
w(nodePath.join(d, e.name), nodePath.join(pre, e.name));
|
|
310
367
|
else
|
|
311
368
|
r.push(pre ? nodePath.join(pre, e.name) : e.name);
|
|
312
|
-
} } w(dir, ""); return r; }
|
|
369
|
+
} } w(dir, ""); return r; }, homedir: os.homedir() } });
|
|
370
|
+
// plugin-primitive Phase 3a slice 3.5 — ensure Codex feature flag
|
|
371
|
+
// codex_hooks = true is set in ~/.codex/config.toml so plugin-shipped
|
|
372
|
+
// hooks fire on Codex runtime. Slice 27 also creates the default
|
|
373
|
+
// user-owned Claude compaction extra-instructions placeholder.
|
|
374
|
+
// Operator can disable Codex hooks via OPENRIG_RUNTIME_CODEX_HOOKS_ENABLED
|
|
375
|
+
// or rig config set runtime.codex.hooks_enabled false.
|
|
376
|
+
try {
|
|
377
|
+
const { SettingsStore, ensureDefaultClaudeCompactionFiles, } = await import("./domain/user-settings/settings-store.js");
|
|
378
|
+
ensureDefaultClaudeCompactionFiles(OPENRIG_HOME);
|
|
379
|
+
const settingsStore = new SettingsStore();
|
|
380
|
+
const enabled = settingsStore.resolveOne("runtime.codex.hooks_enabled").value;
|
|
381
|
+
codexAdapter.ensureCodexFeatureFlag(enabled);
|
|
382
|
+
}
|
|
383
|
+
catch (err) {
|
|
384
|
+
console.error(`[openrig] runtime setup warning: ${err.message}`);
|
|
385
|
+
}
|
|
386
|
+
// plugin-primitive Phase 3a slice 3.2 — vendor openrig-core plugin to
|
|
387
|
+
// ~/.openrig/plugins/openrig-core/ on first launch. Auto-fetch from
|
|
388
|
+
// github.com/mvschwarz/openrig-plugins is best-effort + 404-tolerant
|
|
389
|
+
// (repo currently empty per founder authorization 2026-05-10; vendored
|
|
390
|
+
// copy is the source of truth at v0).
|
|
391
|
+
try {
|
|
392
|
+
const { PluginVendorService } = await import("./domain/plugin-vendor-service.js");
|
|
393
|
+
const vendoredAssetsDir = nodePath.resolve(import.meta.dirname, "../assets/plugins");
|
|
394
|
+
const userPluginsDir = getDefaultOpenRigPath("plugins");
|
|
395
|
+
const realFs = {
|
|
396
|
+
readFile: (p) => fs.readFileSync(p, "utf-8"),
|
|
397
|
+
writeFile: (p, c) => fs.writeFileSync(p, c, "utf-8"),
|
|
398
|
+
exists: (p) => fs.existsSync(p),
|
|
399
|
+
mkdirp: (p) => fs.mkdirSync(p, { recursive: true }),
|
|
400
|
+
listFiles: (dir) => {
|
|
401
|
+
const r = [];
|
|
402
|
+
function w(d, pre) {
|
|
403
|
+
for (const e of fs.readdirSync(d, { withFileTypes: true })) {
|
|
404
|
+
if (e.isDirectory())
|
|
405
|
+
w(nodePath.join(d, e.name), nodePath.join(pre, e.name));
|
|
406
|
+
else
|
|
407
|
+
r.push(pre ? nodePath.join(pre, e.name) : e.name);
|
|
408
|
+
}
|
|
409
|
+
}
|
|
410
|
+
w(dir, "");
|
|
411
|
+
return r;
|
|
412
|
+
},
|
|
413
|
+
};
|
|
414
|
+
const httpClient = async (url, opts) => {
|
|
415
|
+
const ctrl = new AbortController();
|
|
416
|
+
const timer = setTimeout(() => ctrl.abort(), opts?.timeoutMs ?? 5000);
|
|
417
|
+
try {
|
|
418
|
+
const resp = await fetch(url, { signal: ctrl.signal });
|
|
419
|
+
return { ok: resp.ok, status: resp.status };
|
|
420
|
+
}
|
|
421
|
+
finally {
|
|
422
|
+
clearTimeout(timer);
|
|
423
|
+
}
|
|
424
|
+
};
|
|
425
|
+
const vendorService = new PluginVendorService({
|
|
426
|
+
vendoredAssetsDir,
|
|
427
|
+
userPluginsDir,
|
|
428
|
+
fs: realFs,
|
|
429
|
+
httpClient,
|
|
430
|
+
logger: (...args) => console.log("[openrig]", ...args),
|
|
431
|
+
});
|
|
432
|
+
await vendorService.ensureLatest("openrig-core");
|
|
433
|
+
}
|
|
434
|
+
catch (err) {
|
|
435
|
+
console.error(`[openrig] plugin vendor setup warning: ${err.message}`);
|
|
436
|
+
}
|
|
437
|
+
// PL-014 Item 6: hoist ContextPackLibraryService construction so the
|
|
438
|
+
// PodRigInstantiator can resolve `kind: context_pack` startup_files
|
|
439
|
+
// entries at materialize time. Same instance is returned to deps
|
|
440
|
+
// below so /api/context-packs/* shares it.
|
|
441
|
+
const contextPackLibrary = (() => {
|
|
442
|
+
const userPacksRoot = getDefaultOpenRigPath("context-packs");
|
|
443
|
+
try {
|
|
444
|
+
fs.mkdirSync(userPacksRoot, { recursive: true });
|
|
445
|
+
}
|
|
446
|
+
catch { /* best-effort */ }
|
|
447
|
+
const roots = [
|
|
448
|
+
{ path: userPacksRoot, sourceType: "user_file" },
|
|
449
|
+
];
|
|
450
|
+
try {
|
|
451
|
+
const settingsStore = new ContextPackSettingsStore();
|
|
452
|
+
const cfg = settingsStore.resolveConfig();
|
|
453
|
+
const workspacePacksRoot = nodePath.join(cfg.workspaceRoot, ".openrig", "context-packs");
|
|
454
|
+
if (workspacePacksRoot !== userPacksRoot && fs.existsSync(workspacePacksRoot)) {
|
|
455
|
+
roots.push({ path: workspacePacksRoot, sourceType: "workspace" });
|
|
456
|
+
}
|
|
457
|
+
}
|
|
458
|
+
catch { /* settings unavailable; fall through with user-file root only */ }
|
|
459
|
+
const builtinPacksRoot = nodePath.resolve(import.meta.dirname, "../context-packs");
|
|
460
|
+
if (fs.existsSync(builtinPacksRoot)) {
|
|
461
|
+
roots.unshift({ path: builtinPacksRoot, sourceType: "builtin" });
|
|
462
|
+
}
|
|
463
|
+
const lib = new ContextPackLibraryService({ roots });
|
|
464
|
+
lib.scan();
|
|
465
|
+
return lib;
|
|
466
|
+
})();
|
|
467
|
+
// PL-016 Item 2 + Item 4: hoist AgentImageLibraryService construction
|
|
468
|
+
// so the PodRigInstantiator can resolve `session_source: mode:
|
|
469
|
+
// agent_image` at materialize time. Same instance returned to deps
|
|
470
|
+
// below so /api/agent-images/* + the SnapshotCapturer share it.
|
|
471
|
+
const agentImageRootBuilder = () => {
|
|
472
|
+
const userImagesRoot = getDefaultOpenRigPath("agent-images");
|
|
473
|
+
try {
|
|
474
|
+
fs.mkdirSync(userImagesRoot, { recursive: true });
|
|
475
|
+
}
|
|
476
|
+
catch { /* best-effort */ }
|
|
477
|
+
const roots = [
|
|
478
|
+
{ path: userImagesRoot, sourceType: "user_file" },
|
|
479
|
+
];
|
|
480
|
+
try {
|
|
481
|
+
const settingsStore = new ContextPackSettingsStore();
|
|
482
|
+
const cfg = settingsStore.resolveConfig();
|
|
483
|
+
const workspaceImagesRoot = nodePath.join(cfg.workspaceRoot, ".openrig", "agent-images");
|
|
484
|
+
if (workspaceImagesRoot !== userImagesRoot && fs.existsSync(workspaceImagesRoot)) {
|
|
485
|
+
roots.push({ path: workspaceImagesRoot, sourceType: "workspace" });
|
|
486
|
+
}
|
|
487
|
+
}
|
|
488
|
+
catch { /* settings unavailable */ }
|
|
489
|
+
return { userImagesRoot, roots };
|
|
490
|
+
};
|
|
491
|
+
const agentImageLibrary = (() => {
|
|
492
|
+
const { roots } = agentImageRootBuilder();
|
|
493
|
+
const lib = new AgentImageLibraryService({ roots });
|
|
494
|
+
lib.scan();
|
|
495
|
+
return lib;
|
|
496
|
+
})();
|
|
497
|
+
const snapshotCapturer = new SnapshotCapturer({
|
|
498
|
+
db,
|
|
499
|
+
rigRepo,
|
|
500
|
+
sessionRegistry,
|
|
501
|
+
agentImageLibrary,
|
|
502
|
+
targetRoot: getDefaultOpenRigPath("agent-images"),
|
|
503
|
+
});
|
|
313
504
|
const podInstantiator = new PodRigInstantiator({
|
|
314
505
|
db, rigRepo, podRepo,
|
|
315
506
|
sessionRegistry, eventBus, nodeLauncher, startupOrchestrator,
|
|
316
507
|
fsOps: { readFile: (p) => fs.readFileSync(p, "utf-8"), exists: (p) => fs.existsSync(p) },
|
|
317
508
|
adapters: { "claude-code": claudeAdapter, "codex": codexAdapter, "terminal": new (await import("./adapters/terminal-adapter.js")).TerminalAdapter() },
|
|
318
509
|
tmuxAdapter,
|
|
510
|
+
contextPackLibrary,
|
|
511
|
+
agentImageLibrary,
|
|
319
512
|
});
|
|
320
513
|
const podBundleSourceResolver = new PodBundleSourceResolver();
|
|
321
514
|
const bootstrapOrchestrator = new BootstrapOrchestrator({
|
|
@@ -325,6 +518,55 @@ export async function createDaemon(opts) {
|
|
|
325
518
|
bundleSourceResolver, podInstantiator, podBundleSourceResolver,
|
|
326
519
|
serviceOrchestrator, rigRepo,
|
|
327
520
|
});
|
|
521
|
+
// V0.3.1 slice 05 kernel-rig-as-default — auto-boot the kernel rig
|
|
522
|
+
// on daemon-start. Forward-fix #3 architectural: the bootstrap is
|
|
523
|
+
// FIRED in the background, not awaited. createDaemon completes as
|
|
524
|
+
// soon as the tracker is created so server.ts can bind healthz
|
|
525
|
+
// independent of kernel-agent readiness. A broken kernel agent no
|
|
526
|
+
// longer keeps the daemon HTTP surface from starting.
|
|
527
|
+
//
|
|
528
|
+
// Tracker state is exposed via /api/kernel/status (route below) and
|
|
529
|
+
// the CLI's `rig daemon start --wait-for-kernel` flag polls it.
|
|
530
|
+
// After the configurable degraded-timer window (default 90s; env
|
|
531
|
+
// override OPENRIG_KERNEL_DEGRADED_MS for ops + test fixtures), the
|
|
532
|
+
// tracker emits a single `kernel.agent.degraded` event for
|
|
533
|
+
// observability. The kernel rig is still the only rig the daemon
|
|
534
|
+
// auto-boots; other rigs require explicit operator-initiated
|
|
535
|
+
// `rig up` / `rig restore` per amended IMPL-PRD §16.2.
|
|
536
|
+
let kernelBootTracker;
|
|
537
|
+
try {
|
|
538
|
+
const { bootKernelIfNeeded } = await import("./domain/kernel-boot.js");
|
|
539
|
+
const degradedRaw = readOpenRigEnv("OPENRIG_KERNEL_DEGRADED_MS");
|
|
540
|
+
const degradedTimeoutMs = degradedRaw && /^\d+$/.test(degradedRaw)
|
|
541
|
+
? parseInt(degradedRaw, 10)
|
|
542
|
+
: undefined;
|
|
543
|
+
kernelBootTracker = await bootKernelIfNeeded({
|
|
544
|
+
rigRepo,
|
|
545
|
+
sessionRegistry,
|
|
546
|
+
eventBus,
|
|
547
|
+
bootstrapOrchestrator,
|
|
548
|
+
specsDir: nodePath.resolve(nodePath.dirname(new URL(import.meta.url).pathname), "..", "specs"),
|
|
549
|
+
// V0.3.1 slice 05 — kernel members run against the operator's
|
|
550
|
+
// workspace, not the daemon installation tree. Without this
|
|
551
|
+
// cwdOverride, BootstrapOrchestrator refuses with
|
|
552
|
+
// "cwd is inside the OpenRig installation". Use the resolved
|
|
553
|
+
// workspace.root setting as the per-operator default.
|
|
554
|
+
cwdOverride: runtimeSettings.workspaceRoot,
|
|
555
|
+
degradedTimeoutMs,
|
|
556
|
+
});
|
|
557
|
+
try {
|
|
558
|
+
// eslint-disable-next-line no-console
|
|
559
|
+
console.log(`kernel-boot: tracker-state=${kernelBootTracker.getStatus().kernelState}`);
|
|
560
|
+
}
|
|
561
|
+
catch { /* logging must never throw */ }
|
|
562
|
+
}
|
|
563
|
+
catch (err) {
|
|
564
|
+
try {
|
|
565
|
+
// eslint-disable-next-line no-console
|
|
566
|
+
console.warn(`kernel-boot: skipped due to error: ${err instanceof Error ? err.message : String(err)}`);
|
|
567
|
+
}
|
|
568
|
+
catch { /* logging must never throw */ }
|
|
569
|
+
}
|
|
328
570
|
// Discovery services
|
|
329
571
|
const tmuxScanner = new TmuxDiscoveryScanner({ tmuxAdapter });
|
|
330
572
|
const sessionFingerprinter = new SessionFingerprinter({
|
|
@@ -470,6 +712,7 @@ export async function createDaemon(opts) {
|
|
|
470
712
|
contextUsageStore,
|
|
471
713
|
serviceOrchestrator,
|
|
472
714
|
composeAdapter,
|
|
715
|
+
kernelBootTracker,
|
|
473
716
|
specReviewService,
|
|
474
717
|
specLibraryService: (() => {
|
|
475
718
|
const userSpecsRoot = getDefaultOpenRigPath("specs");
|
|
@@ -494,6 +737,56 @@ export async function createDaemon(opts) {
|
|
|
494
737
|
lib.scan();
|
|
495
738
|
return lib;
|
|
496
739
|
})(),
|
|
740
|
+
// Phase 3a slice 3.3 — plugin discovery service.
|
|
741
|
+
// SC-29 EXCEPTION #8 verbatim: see packages/daemon/src/routes/plugins.ts
|
|
742
|
+
// header. Filesystem-scan over 3 source roots + agent.yaml-parse for
|
|
743
|
+
// used-by reverse query. No SQL; no mutation. Spec library directory
|
|
744
|
+
// for used-by uses the same default user spec root as SpecLibraryService
|
|
745
|
+
// above; one root at v0 (multi-root expansion deferred to a later slice
|
|
746
|
+
// when spec library hooks its full root list through to discovery).
|
|
747
|
+
// bug-fix slice plugin-discovery-respects-openrig-home: route the
|
|
748
|
+
// openrigPluginsDir through the OPENRIG_HOME-aware resolver so
|
|
749
|
+
// discovery + vendor (which already uses the helper at line 428)
|
|
750
|
+
// resolve to the same root. Operator-level test isolation + the
|
|
751
|
+
// slice 22 populated-VM-env story both depend on this symmetry.
|
|
752
|
+
// claudeCacheDir / codexCacheDir remain homedir-anchored because
|
|
753
|
+
// those cache locations belong to the runtime tools, not to the
|
|
754
|
+
// OpenRig state root.
|
|
755
|
+
pluginDiscoveryService: new PluginDiscoveryService({
|
|
756
|
+
openrigPluginsDir: getDefaultOpenRigPath("plugins"),
|
|
757
|
+
claudeCacheDir: nodePath.join(os.homedir(), ".claude", "plugins", "cache"),
|
|
758
|
+
codexCacheDir: nodePath.join(os.homedir(), ".codex", "plugins", "cache"),
|
|
759
|
+
specLibraryDir: getDefaultOpenRigPath("specs"),
|
|
760
|
+
}),
|
|
761
|
+
// Slice 28 Checkpoint C-3 — skillLibraryDiscoveryService is constructed
|
|
762
|
+
// AFTER filesAllowlist resolution below (deps.skillLibraryDiscoveryService
|
|
763
|
+
// assignment near filesAllowlist binding).
|
|
764
|
+
// PL-014 Item 6: same instance hoisted earlier so the
|
|
765
|
+
// PodRigInstantiator can resolve `kind: context_pack` startup_files
|
|
766
|
+
// entries — sharing the cache means /api/context-packs/* + the
|
|
767
|
+
// instantiator see consistent state.
|
|
768
|
+
contextPackLibrary,
|
|
769
|
+
// PL-016 — agent_image typed primitive. Shared library + capturer
|
|
770
|
+
// + spec-roots supplier across /api/agent-images/* and the
|
|
771
|
+
// PodRigInstantiator's session_source: mode: agent_image dispatch.
|
|
772
|
+
agentImageLibrary,
|
|
773
|
+
snapshotCapturer,
|
|
774
|
+
agentImageSpecRoots: () => {
|
|
775
|
+
// Spec-library roots scanned by the evidence guard. v0: user
|
|
776
|
+
// specs under ~/.openrig/specs + workspace-local specs root
|
|
777
|
+
// (from the SettingsStore-resolved workspace.specsRoot).
|
|
778
|
+
const userSpecsRoot = getDefaultOpenRigPath("specs");
|
|
779
|
+
const roots = [userSpecsRoot];
|
|
780
|
+
try {
|
|
781
|
+
const settingsStore = new ContextPackSettingsStore();
|
|
782
|
+
const cfg = settingsStore.resolveConfig();
|
|
783
|
+
if (cfg.workspaceSpecsRoot && cfg.workspaceSpecsRoot !== userSpecsRoot) {
|
|
784
|
+
roots.push(cfg.workspaceSpecsRoot);
|
|
785
|
+
}
|
|
786
|
+
}
|
|
787
|
+
catch { /* settings unavailable */ }
|
|
788
|
+
return roots;
|
|
789
|
+
},
|
|
497
790
|
};
|
|
498
791
|
// Copy bundled reference docs to ~/.openrig/reference/ so agents can find them at a stable path
|
|
499
792
|
try {
|
|
@@ -528,6 +821,278 @@ export async function createDaemon(opts) {
|
|
|
528
821
|
queueRepo: queueRepoForWorkflow,
|
|
529
822
|
});
|
|
530
823
|
deps.workflowRuntime = workflowRuntime;
|
|
824
|
+
// Seed built-in starter workflow_specs into the cache. Idempotent
|
|
825
|
+
// + workspace-surface-respecting — operator
|
|
826
|
+
// overrides at workspace paths are preserved (skip-if-cached).
|
|
827
|
+
// Errors are collected into the result for diagnostic logging but
|
|
828
|
+
// do NOT block startup; a malformed bundled spec should not bring
|
|
829
|
+
// the daemon down.
|
|
830
|
+
const { loadStarterWorkflowSpecs, defaultBuiltinSpecsDir } = await import("./domain/workflow/starter-spec-loader.js");
|
|
831
|
+
const builtinSpecsDir = defaultBuiltinSpecsDir();
|
|
832
|
+
const starterResult = loadStarterWorkflowSpecs({
|
|
833
|
+
cache: workflowRuntime.specCache,
|
|
834
|
+
builtinDir: builtinSpecsDir,
|
|
835
|
+
});
|
|
836
|
+
// Surface the resolved path to the routes layer so
|
|
837
|
+
// GET /api/workflow/specs can compute the per-row isBuiltIn flag.
|
|
838
|
+
deps.workflowBuiltinSpecsDir = builtinSpecsDir;
|
|
839
|
+
// Slice 11 (workflow-spec-folder-discovery) — expose the shared
|
|
840
|
+
// WorkflowSpecCache + the resolved workspace workflows folder so
|
|
841
|
+
// GET /api/specs/library can opportunistically discover operator-
|
|
842
|
+
// dropped YAML on each list request. Folder path is
|
|
843
|
+
// `<workspace.specs_root>/workflows`; SettingsStore resolves
|
|
844
|
+
// workspaceSpecsRoot from env > config > workspace-default.
|
|
845
|
+
deps.workflowSpecCache = workflowRuntime.specCache;
|
|
846
|
+
try {
|
|
847
|
+
const settingsStore = new ContextPackSettingsStore();
|
|
848
|
+
const cfg = settingsStore.resolveConfig();
|
|
849
|
+
if (cfg.workspaceSpecsRoot) {
|
|
850
|
+
deps.workflowsFolderDir = nodePath.join(cfg.workspaceSpecsRoot, "workflows");
|
|
851
|
+
}
|
|
852
|
+
}
|
|
853
|
+
catch { /* settings unavailable — folder scan stays disabled */ }
|
|
854
|
+
if (starterResult.errors.length > 0) {
|
|
855
|
+
console.warn(`[starter-spec-loader] ${starterResult.errors.length} spec(s) failed to load:`, starterResult.errors);
|
|
856
|
+
}
|
|
857
|
+
}
|
|
858
|
+
// PL-005 Phase A: Mission Control / Queue Observability services.
|
|
859
|
+
// Wired AFTER WorkflowRuntime so all PL-004 daemon-backed coordination
|
|
860
|
+
// surfaces are available. Mission Control reads from queue/view/stream
|
|
861
|
+
// surfaces and writes through the atomic 7-verb contract.
|
|
862
|
+
if (deps.queueRepo && deps.viewProjector) {
|
|
863
|
+
const mcActionLog = new MissionControlActionLog(db);
|
|
864
|
+
const mcWriteContract = new MissionControlWriteContract({
|
|
865
|
+
db,
|
|
866
|
+
eventBus,
|
|
867
|
+
queueRepo: deps.queueRepo,
|
|
868
|
+
actionLog: mcActionLog,
|
|
869
|
+
});
|
|
870
|
+
const mcFleetCliCapability = new MissionControlFleetCliCapability({
|
|
871
|
+
db,
|
|
872
|
+
eventBus,
|
|
873
|
+
rigRepo,
|
|
874
|
+
// R1 fix per guard PL-005 Phase A review: wire the production
|
|
875
|
+
// capability probe so /api/mission-control/cli-capabilities
|
|
876
|
+
// honestly reports drift when MISSION_CONTROL_DESIRED_FIELDS
|
|
877
|
+
// are missing from the local CLI's allow-list. Without this
|
|
878
|
+
// probe injection, the production path defaulted to a no-op
|
|
879
|
+
// that always reported staleCliCount=0 even when the audit-
|
|
880
|
+
// row-5 case (recoveryGuidance not in CLI allow-list) was
|
|
881
|
+
// present.
|
|
882
|
+
probeRig: makeLocalCliCapabilityProbe(),
|
|
883
|
+
});
|
|
884
|
+
// V0.3.1 slice 05 kernel-rig-as-default — cascade the resolved
|
|
885
|
+
// workspace.operator_seat_name setting into the mission-control
|
|
886
|
+
// read layer so my-queue routes to the operator's configured seat
|
|
887
|
+
// (default `operator-${USER}@kernel`) instead of the legacy
|
|
888
|
+
// hardcoded constant. The setting reads OPENRIG_WORKSPACE_OPERATOR_SEAT_NAME
|
|
889
|
+
// env var first, then ~/.openrig/config.json, then the derived
|
|
890
|
+
// default — same cascade as every other typed setting.
|
|
891
|
+
const mcReadLayer = new MissionControlReadLayer({
|
|
892
|
+
db,
|
|
893
|
+
queueRepo: deps.queueRepo,
|
|
894
|
+
viewProjector: deps.viewProjector,
|
|
895
|
+
streamStore: deps.streamStore,
|
|
896
|
+
fleetCliCapability: mcFleetCliCapability,
|
|
897
|
+
defaultOperatorSession: runtimeSettings.workspaceOperatorSeatName,
|
|
898
|
+
});
|
|
899
|
+
deps.missionControlActionLog = mcActionLog;
|
|
900
|
+
deps.missionControlWriteContract = mcWriteContract;
|
|
901
|
+
deps.missionControlFleetCliCapability = mcFleetCliCapability;
|
|
902
|
+
deps.missionControlReadLayer = mcReadLayer;
|
|
903
|
+
// PL-005 Phase B: audit-history browse layer (read-only) +
|
|
904
|
+
// notification dispatcher + bearer-token plumbing.
|
|
905
|
+
const mcAuditBrowse = new MissionControlAuditBrowse(db);
|
|
906
|
+
deps.missionControlAuditBrowse = mcAuditBrowse;
|
|
907
|
+
// Bearer token from createDaemon options is propagated to the
|
|
908
|
+
// routes constructor via deps so the auth middleware is mounted
|
|
909
|
+
// at route mount time (not per-request).
|
|
910
|
+
deps.missionControlBearerToken = opts?.bearerToken ?? null;
|
|
911
|
+
// Notification dispatcher: chosen mechanism via env config.
|
|
912
|
+
// OPENRIG_NOTIFICATIONS_MECHANISM=ntfy|webhook|none (default none).
|
|
913
|
+
// OPENRIG_NOTIFICATIONS_TARGET=<topic url | webhook url>.
|
|
914
|
+
// OPENRIG_NOTIFICATIONS_INCLUDE_VERB_COMPLETION=1 to opt into the
|
|
915
|
+
// verb-completion trigger (default off; only human-gate arrivals
|
|
916
|
+
// trigger by default per planner brief).
|
|
917
|
+
// No legacy alias for these env vars (new in Phase B).
|
|
918
|
+
const mechanism = process.env.OPENRIG_NOTIFICATIONS_MECHANISM ?? "none";
|
|
919
|
+
const target = process.env.OPENRIG_NOTIFICATIONS_TARGET ?? "";
|
|
920
|
+
const missionControlBaseUrl = process.env.OPENRIG_MISSION_CONTROL_BASE_URL ??
|
|
921
|
+
process.env.OPENRIG_URL ??
|
|
922
|
+
process.env.RIGGED_URL;
|
|
923
|
+
const includeVerbCompletion = process.env.OPENRIG_NOTIFICATIONS_INCLUDE_VERB_COMPLETION === "1";
|
|
924
|
+
if (mechanism !== "none" && target.length > 0) {
|
|
925
|
+
let adapter;
|
|
926
|
+
if (mechanism === "ntfy") {
|
|
927
|
+
adapter = new NtfyNotificationAdapter({ topicUrl: target });
|
|
928
|
+
}
|
|
929
|
+
else if (mechanism === "webhook") {
|
|
930
|
+
adapter = new WebhookNotificationAdapter({ endpointUrl: target });
|
|
931
|
+
}
|
|
932
|
+
else {
|
|
933
|
+
throw new Error(`OPENRIG_NOTIFICATIONS_MECHANISM='${mechanism}' is not recognized; supported: ntfy | webhook | none`);
|
|
934
|
+
}
|
|
935
|
+
const dispatcher = new MissionControlNotificationDispatcher({
|
|
936
|
+
db,
|
|
937
|
+
eventBus,
|
|
938
|
+
adapter,
|
|
939
|
+
includeVerbCompletion,
|
|
940
|
+
missionControlBaseUrl,
|
|
941
|
+
});
|
|
942
|
+
dispatcher.start();
|
|
943
|
+
deps.missionControlNotificationDispatcher = dispatcher;
|
|
944
|
+
}
|
|
945
|
+
}
|
|
946
|
+
// Slice Story View v0 — slice indexer + per-tab projector.
|
|
947
|
+
//
|
|
948
|
+
// User Settings v0 graduates `OPENRIG_SLICES_ROOT` env-var into the
|
|
949
|
+
// typed `workspace.slices_root` setting (resolution chain: env >
|
|
950
|
+
// config-file > default `<workspace.root>/missions`). Backward-compat:
|
|
951
|
+
// operators with OPENRIG_SLICES_ROOT set continue to work because the
|
|
952
|
+
// settings store reads env in the same resolution slot. Operators
|
|
953
|
+
// setting via `rig config set workspace.slices_root <path>` or via the
|
|
954
|
+
// System drawer Settings panel UI now flow through the indexer too —
|
|
955
|
+
// closes the PRD § Scenario B requirement that wasn't wired in v0.
|
|
956
|
+
//
|
|
957
|
+
// OPENRIG_SLICES_ROOT legacy short env var (still honored
|
|
958
|
+
// if set; preferred route is settings)
|
|
959
|
+
// OPENRIG_WORKSPACE_SLICES_ROOT typed-key env override
|
|
960
|
+
// workspace.slices_root typed setting in ~/.openrig/config.json
|
|
961
|
+
// workspace.root cascade fallback (default ~/.openrig/workspace)
|
|
962
|
+
// workspace.dogfood_evidence_root typed setting for proof packet assets
|
|
963
|
+
// OPENRIG_DOGFOOD_EVIDENCE_ROOT env override for compatibility
|
|
964
|
+
//
|
|
965
|
+
// When the resolved slicesRoot path doesn't exist on disk, the indexer
|
|
966
|
+
// is still constructed but isReady() returns false — the routes return
|
|
967
|
+
// a clear "slices_root_not_configured" 503 with a setup hint.
|
|
968
|
+
{
|
|
969
|
+
// Prefer the legacy short env var if explicitly set (existing
|
|
970
|
+
// dogfood / test daemons rely on it). Otherwise fall back to the
|
|
971
|
+
// settings-resolved path (env > file > default cascade inside
|
|
972
|
+
// SettingsStore). The SettingsStore is constructed locally here
|
|
973
|
+
// so the slices block doesn't depend on the User Settings v0 wiring
|
|
974
|
+
// block ordering further below.
|
|
975
|
+
const legacyEnvSlicesRoot = readOpenRigEnv("OPENRIG_SLICES_ROOT", "RIGGED_SLICES_ROOT") ?? "";
|
|
976
|
+
let resolvedSlicesRoot = "";
|
|
977
|
+
let resolvedWorkspaceRoot = "";
|
|
978
|
+
let resolvedDogfoodRoot = "";
|
|
979
|
+
if (!legacyEnvSlicesRoot) {
|
|
980
|
+
try {
|
|
981
|
+
const { SettingsStore: SettingsStoreCtor } = await import("./domain/user-settings/settings-store.js");
|
|
982
|
+
const resolvedConfig = new SettingsStoreCtor().resolveConfig();
|
|
983
|
+
resolvedSlicesRoot = resolvedConfig.workspaceSlicesRoot;
|
|
984
|
+
resolvedWorkspaceRoot = resolvedConfig.workspaceRoot;
|
|
985
|
+
resolvedDogfoodRoot = resolvedConfig.workspaceDogfoodEvidenceRoot;
|
|
986
|
+
}
|
|
987
|
+
catch {
|
|
988
|
+
// SettingsStore unavailable — keep slicesRoot empty; routes return 503.
|
|
989
|
+
}
|
|
990
|
+
}
|
|
991
|
+
else {
|
|
992
|
+
try {
|
|
993
|
+
const { SettingsStore: SettingsStoreCtor } = await import("./domain/user-settings/settings-store.js");
|
|
994
|
+
const resolvedConfig = new SettingsStoreCtor().resolveConfig();
|
|
995
|
+
resolvedDogfoodRoot = resolvedConfig.workspaceDogfoodEvidenceRoot;
|
|
996
|
+
}
|
|
997
|
+
catch {
|
|
998
|
+
// SettingsStore unavailable — proof packets remain disabled.
|
|
999
|
+
}
|
|
1000
|
+
}
|
|
1001
|
+
const slicesRoot = legacyEnvSlicesRoot || resolvedSlicesRoot;
|
|
1002
|
+
const additionalSliceRoots = resolvedWorkspaceRoot
|
|
1003
|
+
? [
|
|
1004
|
+
nodePath.join(resolvedWorkspaceRoot, "missions"),
|
|
1005
|
+
nodePath.join(resolvedWorkspaceRoot, "slices"),
|
|
1006
|
+
].filter((root) => root !== slicesRoot)
|
|
1007
|
+
: [];
|
|
1008
|
+
const { SliceIndexer } = await import("./domain/slices/slice-indexer.js");
|
|
1009
|
+
const { SliceDetailProjector } = await import("./domain/slices/slice-detail-projector.js");
|
|
1010
|
+
const sliceIndexer = new SliceIndexer({
|
|
1011
|
+
slicesRoot,
|
|
1012
|
+
additionalSliceRoots,
|
|
1013
|
+
dogfoodEvidenceRoot: resolvedDogfoodRoot || null,
|
|
1014
|
+
db,
|
|
1015
|
+
});
|
|
1016
|
+
// Slice Story View v1: pass workflowRuntime.specCache so the
|
|
1017
|
+
// projector can resolve a bound workflow_instance's spec for
|
|
1018
|
+
// spec-graph + phase + current-step projection. When the workflow
|
|
1019
|
+
// runtime is not constructed (queueRepo absent — same condition
|
|
1020
|
+
// already guards the workflowRuntime block above), the projector
|
|
1021
|
+
// silently degrades to v0 behavior (workflowBinding=null,
|
|
1022
|
+
// specGraph=null, phaseDefinitions=null, currentStep=null).
|
|
1023
|
+
const sliceDetailProjector = new SliceDetailProjector({
|
|
1024
|
+
db,
|
|
1025
|
+
indexer: sliceIndexer,
|
|
1026
|
+
workflowSpecCache: workflowRuntime?.specCache,
|
|
1027
|
+
});
|
|
1028
|
+
deps.sliceIndexer = sliceIndexer;
|
|
1029
|
+
deps.sliceDetailProjector = sliceDetailProjector;
|
|
1030
|
+
}
|
|
1031
|
+
// UI Enhancement Pack v0:
|
|
1032
|
+
// - file allowlist (item 3) from OPENRIG_FILES_ALLOWLIST
|
|
1033
|
+
// - atomic write service (item 4) wired only when allowlist non-empty
|
|
1034
|
+
// - progress scan-roots (item 1B) from OPENRIG_PROGRESS_SCAN_ROOTS
|
|
1035
|
+
//
|
|
1036
|
+
// Empty env → empty allowlist / no-roots indexer; routes return 503
|
|
1037
|
+
// with structured config hints so the UI can surface a setup message
|
|
1038
|
+
// instead of a generic error.
|
|
1039
|
+
{
|
|
1040
|
+
const { decodeAllowlist } = await import("./domain/files/path-safety.js");
|
|
1041
|
+
const { FileWriteService } = await import("./domain/files/file-write-service.js");
|
|
1042
|
+
const { ProgressIndexer, decodeProgressScanRoots } = await import("./domain/progress/progress-indexer.js");
|
|
1043
|
+
// User Settings v0 — UEP env-vars graduated to typed settings.
|
|
1044
|
+
// Resolution: env > settings file > empty. SettingsStore handles
|
|
1045
|
+
// the env > file > default precedence; we just decode the raw
|
|
1046
|
+
// string into structured roots.
|
|
1047
|
+
const { SettingsStore } = await import("./domain/user-settings/settings-store.js");
|
|
1048
|
+
const settingsStore = new SettingsStore();
|
|
1049
|
+
deps.settingsStore = settingsStore;
|
|
1050
|
+
const cfg = settingsStore.resolveConfig();
|
|
1051
|
+
// Preview Terminal v0 (PL-018) — per-session rate limiter for the
|
|
1052
|
+
// /preview route. 1-second window per (session, lines) cache key:
|
|
1053
|
+
// short enough that legitimate polling at the operator's refresh
|
|
1054
|
+
// interval (`ui.preview.refresh_interval_seconds`, default 3s) always
|
|
1055
|
+
// sees fresh content, but multiple pinned-pane requests for the same
|
|
1056
|
+
// seat within a single second collapse to one tmux capture.
|
|
1057
|
+
const { PreviewRateLimiter } = await import("./domain/preview/preview-rate-limiter.js");
|
|
1058
|
+
deps.previewRateLimiter = new PreviewRateLimiter(1000);
|
|
1059
|
+
const filesAllowlist = decodeAllowlist(cfg.filesAllowlistRaw);
|
|
1060
|
+
deps.filesAllowlist = filesAllowlist;
|
|
1061
|
+
deps.fileWriteService = filesAllowlist.length > 0
|
|
1062
|
+
? new FileWriteService({
|
|
1063
|
+
allowlist: filesAllowlist,
|
|
1064
|
+
auditFilePath: nodePath.join(OPENRIG_HOME, "file-edit-audit.jsonl"),
|
|
1065
|
+
})
|
|
1066
|
+
: null;
|
|
1067
|
+
// Slice 28 Checkpoint C-3 — SkillLibraryDiscoveryService. sharedSkillsDir
|
|
1068
|
+
// resolves to the daemon's bundled `specs/agents/shared/skills/`
|
|
1069
|
+
// directory via import.meta.url (independent of operator allowlist
|
|
1070
|
+
// configuration; closes HG-5 on the founder-walk VM where the operator
|
|
1071
|
+
// allowlist doesn't include the daemon source tree). filesAllowlist
|
|
1072
|
+
// is also passed so workspace `.openrig/skills/` skills surface via
|
|
1073
|
+
// the same daemon endpoint.
|
|
1074
|
+
deps.skillLibraryDiscoveryService = new SkillLibraryDiscoveryService({
|
|
1075
|
+
sharedSkillsDir: nodePath.resolve(nodePath.dirname(new URL(import.meta.url).pathname), "..", "specs", "agents", "shared", "skills"),
|
|
1076
|
+
filesAllowlist,
|
|
1077
|
+
});
|
|
1078
|
+
deps.progressIndexer = new ProgressIndexer({ roots: decodeProgressScanRoots(cfg.progressScanRootsRaw) });
|
|
1079
|
+
// Operator Surface Reconciliation v0 — steering composer (item 1).
|
|
1080
|
+
// Reads typed workspace settings by default while preserving the
|
|
1081
|
+
// OPENRIG_STEERING_* env override family for non-canonical layouts.
|
|
1082
|
+
const { SteeringComposer, steeringOptsFromSettings } = await import("./domain/steering/steering-composer.js");
|
|
1083
|
+
deps.steeringComposer = new SteeringComposer(steeringOptsFromSettings({
|
|
1084
|
+
workspaceRoot: cfg.workspaceRoot,
|
|
1085
|
+
workspaceSteeringPath: cfg.workspaceSteeringPath,
|
|
1086
|
+
}));
|
|
1087
|
+
// Workflows in Spec Library + Activation Lens v0 — active lens
|
|
1088
|
+
// persistence under OPENRIG_HOME/active-workflow-lens.json. Same
|
|
1089
|
+
// file-backed pattern as UI Enhancement Pack v0's audit JSONL —
|
|
1090
|
+
// honors OPENRIG_HOME so isolated test/dogfood daemons keep their
|
|
1091
|
+
// own lens state instead of bleeding into the operator's host.
|
|
1092
|
+
const { ActiveLensStore } = await import("./domain/active-lens-store.js");
|
|
1093
|
+
deps.activeLensStore = new ActiveLensStore({
|
|
1094
|
+
filePath: nodePath.join(OPENRIG_HOME, "active-workflow-lens.json"),
|
|
1095
|
+
});
|
|
531
1096
|
}
|
|
532
1097
|
const sessionTransport = deps.sessionTransport;
|
|
533
1098
|
if (sessionTransport) {
|
|
@@ -559,8 +1124,15 @@ export async function createDaemon(opts) {
|
|
|
559
1124
|
}
|
|
560
1125
|
// Context monitor — constructed before createApp so routes can access pollOnce for refresh.
|
|
561
1126
|
// Caller (index.ts) starts polling after listen.
|
|
1127
|
+
// Slice 27: wire ClaudeCompactionEnforcer when sessionTransport is
|
|
1128
|
+
// available (it always is in the assembled deps; the conditional keeps
|
|
1129
|
+
// the type narrow for downstream consumers).
|
|
562
1130
|
const { ContextMonitor } = await import("./domain/context-monitor.js");
|
|
563
|
-
const
|
|
1131
|
+
const { ClaudeCompactionEnforcer } = await import("./domain/claude-compaction-enforcer.js");
|
|
1132
|
+
const compactionEnforcer = deps.sessionTransport
|
|
1133
|
+
? new ClaudeCompactionEnforcer(new ContextPackSettingsStore(), deps.sessionTransport)
|
|
1134
|
+
: undefined;
|
|
1135
|
+
const contextMonitor = new ContextMonitor(db, contextUsageStore, claudeAdapter, compactionEnforcer);
|
|
564
1136
|
deps.contextMonitor = contextMonitor;
|
|
565
1137
|
const app = createApp(deps);
|
|
566
1138
|
return { app, db, deps, contextMonitor };
|