@openrig/cli 0.2.0 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/daemon/dist/adapters/claude-code-adapter.d.ts +10 -0
- package/daemon/dist/adapters/claude-code-adapter.d.ts.map +1 -1
- package/daemon/dist/adapters/claude-code-adapter.js +41 -3
- package/daemon/dist/adapters/claude-code-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/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-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/conflict-detector.d.ts.map +1 -1
- package/daemon/dist/domain/conflict-detector.js +6 -3
- package/daemon/dist/domain/conflict-detector.js.map +1 -1
- package/daemon/dist/domain/context-monitor.d.ts +5 -4
- package/daemon/dist/domain/context-monitor.d.ts.map +1 -1
- package/daemon/dist/domain/context-monitor.js +26 -11
- package/daemon/dist/domain/context-monitor.js.map +1 -1
- package/daemon/dist/domain/context-packs/bundle-assembler.d.ts +49 -0
- package/daemon/dist/domain/context-packs/bundle-assembler.d.ts.map +1 -0
- package/daemon/dist/domain/context-packs/bundle-assembler.js +81 -0
- package/daemon/dist/domain/context-packs/bundle-assembler.js.map +1 -0
- package/daemon/dist/domain/context-packs/context-pack-library-service.d.ts +41 -0
- package/daemon/dist/domain/context-packs/context-pack-library-service.d.ts.map +1 -0
- package/daemon/dist/domain/context-packs/context-pack-library-service.js +148 -0
- package/daemon/dist/domain/context-packs/context-pack-library-service.js.map +1 -0
- package/daemon/dist/domain/context-packs/context-pack-types.d.ts +64 -0
- package/daemon/dist/domain/context-packs/context-pack-types.d.ts.map +1 -0
- package/daemon/dist/domain/context-packs/context-pack-types.js +22 -0
- package/daemon/dist/domain/context-packs/context-pack-types.js.map +1 -0
- package/daemon/dist/domain/context-packs/manifest-parser.d.ts +3 -0
- package/daemon/dist/domain/context-packs/manifest-parser.d.ts.map +1 -0
- package/daemon/dist/domain/context-packs/manifest-parser.js +74 -0
- package/daemon/dist/domain/context-packs/manifest-parser.js.map +1 -0
- package/daemon/dist/domain/context-usage-store.d.ts +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/managed-blocks.d.ts.map +1 -1
- package/daemon/dist/domain/managed-blocks.js +22 -3
- package/daemon/dist/domain/managed-blocks.js.map +1 -1
- package/daemon/dist/domain/mission-control/audit-browse.d.ts +26 -0
- package/daemon/dist/domain/mission-control/audit-browse.d.ts.map +1 -0
- package/daemon/dist/domain/mission-control/audit-browse.js +101 -0
- package/daemon/dist/domain/mission-control/audit-browse.js.map +1 -0
- package/daemon/dist/domain/mission-control/mission-control-action-log.d.ts +51 -0
- package/daemon/dist/domain/mission-control/mission-control-action-log.d.ts.map +1 -0
- package/daemon/dist/domain/mission-control/mission-control-action-log.js +124 -0
- package/daemon/dist/domain/mission-control/mission-control-action-log.js.map +1 -0
- package/daemon/dist/domain/mission-control/mission-control-fleet-cli-capability.d.ts +131 -0
- package/daemon/dist/domain/mission-control/mission-control-fleet-cli-capability.d.ts.map +1 -0
- package/daemon/dist/domain/mission-control/mission-control-fleet-cli-capability.js +232 -0
- package/daemon/dist/domain/mission-control/mission-control-fleet-cli-capability.js.map +1 -0
- package/daemon/dist/domain/mission-control/mission-control-read-layer.d.ts +85 -0
- package/daemon/dist/domain/mission-control/mission-control-read-layer.d.ts.map +1 -0
- package/daemon/dist/domain/mission-control/mission-control-read-layer.js +265 -0
- package/daemon/dist/domain/mission-control/mission-control-read-layer.js.map +1 -0
- package/daemon/dist/domain/mission-control/mission-control-write-contract.d.ts +69 -0
- package/daemon/dist/domain/mission-control/mission-control-write-contract.d.ts.map +1 -0
- package/daemon/dist/domain/mission-control/mission-control-write-contract.js +300 -0
- package/daemon/dist/domain/mission-control/mission-control-write-contract.js.map +1 -0
- package/daemon/dist/domain/mission-control/notification-adapter-ntfy.d.ts +18 -0
- package/daemon/dist/domain/mission-control/notification-adapter-ntfy.d.ts.map +1 -0
- package/daemon/dist/domain/mission-control/notification-adapter-ntfy.js +48 -0
- package/daemon/dist/domain/mission-control/notification-adapter-ntfy.js.map +1 -0
- package/daemon/dist/domain/mission-control/notification-adapter-types.d.ts +25 -0
- package/daemon/dist/domain/mission-control/notification-adapter-types.d.ts.map +1 -0
- package/daemon/dist/domain/mission-control/notification-adapter-types.js +7 -0
- package/daemon/dist/domain/mission-control/notification-adapter-types.js.map +1 -0
- package/daemon/dist/domain/mission-control/notification-adapter-webhook.d.ts +27 -0
- package/daemon/dist/domain/mission-control/notification-adapter-webhook.d.ts.map +1 -0
- package/daemon/dist/domain/mission-control/notification-adapter-webhook.js +47 -0
- package/daemon/dist/domain/mission-control/notification-adapter-webhook.js.map +1 -0
- package/daemon/dist/domain/mission-control/notification-dispatcher.d.ts +53 -0
- package/daemon/dist/domain/mission-control/notification-dispatcher.d.ts.map +1 -0
- package/daemon/dist/domain/mission-control/notification-dispatcher.js +181 -0
- package/daemon/dist/domain/mission-control/notification-dispatcher.js.map +1 -0
- package/daemon/dist/domain/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/preview/preview-rate-limiter.d.ts +20 -0
- package/daemon/dist/domain/preview/preview-rate-limiter.d.ts.map +1 -0
- package/daemon/dist/domain/preview/preview-rate-limiter.js +46 -0
- package/daemon/dist/domain/preview/preview-rate-limiter.js.map +1 -0
- package/daemon/dist/domain/profile-resolver.d.ts +5 -0
- package/daemon/dist/domain/profile-resolver.d.ts.map +1 -1
- package/daemon/dist/domain/profile-resolver.js +62 -8
- package/daemon/dist/domain/profile-resolver.js.map +1 -1
- package/daemon/dist/domain/progress/progress-indexer.d.ts +73 -0
- package/daemon/dist/domain/progress/progress-indexer.d.ts.map +1 -0
- package/daemon/dist/domain/progress/progress-indexer.js +210 -0
- package/daemon/dist/domain/progress/progress-indexer.js.map +1 -0
- package/daemon/dist/domain/project-classifier.d.ts +1 -1
- package/daemon/dist/domain/queue-repository.d.ts +22 -4
- package/daemon/dist/domain/queue-repository.d.ts.map +1 -1
- package/daemon/dist/domain/queue-repository.js +80 -22
- 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/skill-discovery.d.ts +51 -0
- package/daemon/dist/domain/skill-discovery.d.ts.map +1 -0
- package/daemon/dist/domain/skill-discovery.js +144 -0
- package/daemon/dist/domain/skill-discovery.js.map +1 -0
- package/daemon/dist/domain/slices/slice-detail-projector.d.ts +182 -0
- package/daemon/dist/domain/slices/slice-detail-projector.d.ts.map +1 -0
- package/daemon/dist/domain/slices/slice-detail-projector.js +508 -0
- package/daemon/dist/domain/slices/slice-detail-projector.js.map +1 -0
- package/daemon/dist/domain/slices/slice-indexer.d.ts +118 -0
- package/daemon/dist/domain/slices/slice-indexer.d.ts.map +1 -0
- package/daemon/dist/domain/slices/slice-indexer.js +503 -0
- package/daemon/dist/domain/slices/slice-indexer.js.map +1 -0
- package/daemon/dist/domain/spec-library-service.d.ts +17 -2
- package/daemon/dist/domain/spec-library-service.d.ts.map +1 -1
- package/daemon/dist/domain/spec-library-service.js +31 -1
- package/daemon/dist/domain/spec-library-service.js.map +1 -1
- package/daemon/dist/domain/spec-library-workflow-scanner.d.ts +81 -0
- package/daemon/dist/domain/spec-library-workflow-scanner.d.ts.map +1 -0
- package/daemon/dist/domain/spec-library-workflow-scanner.js +171 -0
- package/daemon/dist/domain/spec-library-workflow-scanner.js.map +1 -0
- package/daemon/dist/domain/startup-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 +101 -2
- package/daemon/dist/domain/types.d.ts.map +1 -1
- package/daemon/dist/domain/types.js +8 -1
- package/daemon/dist/domain/types.js.map +1 -1
- package/daemon/dist/domain/user-settings/settings-store.d.ts +42 -0
- package/daemon/dist/domain/user-settings/settings-store.d.ts.map +1 -0
- package/daemon/dist/domain/user-settings/settings-store.js +364 -0
- package/daemon/dist/domain/user-settings/settings-store.js.map +1 -0
- package/daemon/dist/domain/view-event-bridge.d.ts.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 +7 -0
- package/daemon/dist/domain/workflow-spec-cache.d.ts.map +1 -1
- package/daemon/dist/domain/workflow-spec-cache.js +62 -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 +207 -0
- package/daemon/dist/domain/workspace/default-workspace-scaffold.js.map +1 -0
- package/daemon/dist/domain/workspace/frontmatter-validator.d.ts +40 -0
- package/daemon/dist/domain/workspace/frontmatter-validator.d.ts.map +1 -0
- package/daemon/dist/domain/workspace/frontmatter-validator.js +185 -0
- package/daemon/dist/domain/workspace/frontmatter-validator.js.map +1 -0
- package/daemon/dist/domain/workspace/workspace-resolver.d.ts +25 -0
- package/daemon/dist/domain/workspace/workspace-resolver.d.ts.map +1 -0
- package/daemon/dist/domain/workspace/workspace-resolver.js +86 -0
- package/daemon/dist/domain/workspace/workspace-resolver.js.map +1 -0
- package/daemon/dist/index.d.ts.map +1 -1
- package/daemon/dist/index.js +10 -1
- package/daemon/dist/index.js.map +1 -1
- package/daemon/dist/middleware/auth-bearer-token.d.ts +49 -0
- package/daemon/dist/middleware/auth-bearer-token.d.ts.map +1 -0
- package/daemon/dist/middleware/auth-bearer-token.js +135 -0
- package/daemon/dist/middleware/auth-bearer-token.js.map +1 -0
- package/daemon/dist/openrig-compat.d.ts +1 -1
- package/daemon/dist/openrig-compat.d.ts.map +1 -1
- package/daemon/dist/openrig-compat.js +6 -4
- package/daemon/dist/openrig-compat.js.map +1 -1
- package/daemon/dist/routes/agent-images.d.ts +8 -0
- package/daemon/dist/routes/agent-images.d.ts.map +1 -0
- package/daemon/dist/routes/agent-images.js +253 -0
- package/daemon/dist/routes/agent-images.js.map +1 -0
- package/daemon/dist/routes/config.d.ts +3 -0
- package/daemon/dist/routes/config.d.ts.map +1 -0
- package/daemon/dist/routes/config.js +109 -0
- package/daemon/dist/routes/config.js.map +1 -0
- package/daemon/dist/routes/context-packs.d.ts +3 -0
- package/daemon/dist/routes/context-packs.d.ts.map +1 -0
- package/daemon/dist/routes/context-packs.js +129 -0
- package/daemon/dist/routes/context-packs.js.map +1 -0
- package/daemon/dist/routes/files.d.ts +17 -0
- package/daemon/dist/routes/files.d.ts.map +1 -0
- package/daemon/dist/routes/files.js +262 -0
- package/daemon/dist/routes/files.js.map +1 -0
- package/daemon/dist/routes/health-summary.d.ts +9 -0
- package/daemon/dist/routes/health-summary.d.ts.map +1 -0
- package/daemon/dist/routes/health-summary.js +33 -0
- package/daemon/dist/routes/health-summary.js.map +1 -0
- package/daemon/dist/routes/mission-control.d.ts +37 -0
- package/daemon/dist/routes/mission-control.d.ts.map +1 -0
- package/daemon/dist/routes/mission-control.js +283 -0
- package/daemon/dist/routes/mission-control.js.map +1 -0
- package/daemon/dist/routes/progress.d.ts +7 -0
- package/daemon/dist/routes/progress.d.ts.map +1 -0
- package/daemon/dist/routes/progress.js +33 -0
- package/daemon/dist/routes/progress.js.map +1 -0
- package/daemon/dist/routes/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/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/slices.d.ts +9 -0
- package/daemon/dist/routes/slices.d.ts.map +1 -0
- package/daemon/dist/routes/slices.js +192 -0
- package/daemon/dist/routes/slices.js.map +1 -0
- package/daemon/dist/routes/spec-library.d.ts.map +1 -1
- package/daemon/dist/routes/spec-library.js +72 -5
- package/daemon/dist/routes/spec-library.js.map +1 -1
- package/daemon/dist/routes/steering.d.ts +7 -0
- package/daemon/dist/routes/steering.d.ts.map +1 -0
- package/daemon/dist/routes/steering.js +27 -0
- package/daemon/dist/routes/steering.js.map +1 -0
- package/daemon/dist/routes/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 +51 -0
- package/daemon/dist/server.d.ts.map +1 -1
- package/daemon/dist/server.js +52 -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 +385 -2
- 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 -1
- package/daemon/specs/agents/apps/vault-specialist/guidance/role.md +0 -1
- package/daemon/specs/agents/conveyor/builder/agent.yaml +35 -0
- package/daemon/specs/agents/conveyor/builder/guidance/role.md +31 -0
- package/daemon/specs/agents/conveyor/builder/startup/context.md +9 -0
- package/daemon/specs/agents/conveyor/lead/agent.yaml +35 -0
- package/daemon/specs/agents/conveyor/lead/guidance/role.md +34 -0
- package/daemon/specs/agents/conveyor/lead/startup/context.md +15 -0
- package/daemon/specs/agents/conveyor/planner/agent.yaml +35 -0
- package/daemon/specs/agents/conveyor/planner/guidance/role.md +29 -0
- package/daemon/specs/agents/conveyor/planner/startup/context.md +12 -0
- package/daemon/specs/agents/conveyor/reviewer/agent.yaml +35 -0
- package/daemon/specs/agents/conveyor/reviewer/guidance/role.md +29 -0
- package/daemon/specs/agents/conveyor/reviewer/startup/context.md +10 -0
- package/daemon/specs/agents/development/implementer/agent.yaml +1 -1
- package/daemon/specs/agents/development/implementer/guidance/role.md +0 -1
- package/daemon/specs/agents/orchestration/orchestrator/agent.yaml +1 -1
- package/daemon/specs/agents/orchestration/orchestrator/guidance/role.md +2 -3
- package/daemon/specs/agents/shared/agent.yaml +0 -2
- package/daemon/specs/agents/shared/skills/core/openrig-user/SKILL.md +25 -0
- package/daemon/specs/agents/shared/skills/core/openrig-user-settings/SKILL.md +153 -0
- package/daemon/specs/agents/shared/skills/rig-architect/SKILL.md +1 -1
- package/daemon/specs/rigs/launch/conveyor/CULTURE.md +34 -0
- package/daemon/specs/rigs/launch/conveyor/README.md +33 -0
- package/daemon/specs/rigs/launch/conveyor/rig.yaml +72 -0
- package/daemon/specs/rigs/preview/product-team/CULTURE.md +2 -2
- package/daemon/specs/rigs/preview/product-team/rig.yaml +3 -4
- package/dist/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 +300 -0
- package/dist/commands/config-init-workspace.js.map +1 -0
- package/dist/commands/config.d.ts.map +1 -1
- package/dist/commands/config.js +78 -18
- package/dist/commands/config.js.map +1 -1
- package/dist/commands/context-pack.d.ts +4 -0
- package/dist/commands/context-pack.d.ts.map +1 -0
- package/dist/commands/context-pack.js +357 -0
- package/dist/commands/context-pack.js.map +1 -0
- package/dist/commands/daemon.d.ts.map +1 -1
- package/dist/commands/daemon.js +8 -0
- package/dist/commands/daemon.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/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 +7 -0
- package/dist/commands/send.d.ts.map +1 -1
- package/dist/commands/send.js +24 -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 +17 -3
- 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 +73 -1
- package/dist/config-store.d.ts.map +1 -1
- package/dist/config-store.js +314 -42
- package/dist/config-store.js.map +1 -1
- package/dist/daemon-lifecycle.d.ts +22 -0
- package/dist/daemon-lifecycle.d.ts.map +1 -1
- package/dist/daemon-lifecycle.js +41 -0
- package/dist/daemon-lifecycle.js.map +1 -1
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -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-BDHU1JUK.js +412 -0
- package/ui/dist/assets/index-DXTyJSqu.css +1 -0
- package/ui/dist/graphics/operator-climber-monochrome.png +0 -0
- package/ui/dist/index.html +3 -2
- package/daemon/specs/agents/shared/skills/mental-model-ha/SKILL.md +0 -956
- 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
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"039_queue_target_repo.d.ts","sourceRoot":"","sources":["../../../src/db/migrations/039_queue_target_repo.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAE/C;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,qBAAqB,EAAE,SAMnC,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PL-007 Workspace Primitive v0 — queue_items.target_repo column.
|
|
3
|
+
*
|
|
4
|
+
* Adds `target_repo TEXT` to the queue_items table. Carries the
|
|
5
|
+
* per-item typed repo scope when an operator passes
|
|
6
|
+
* `rigx queue create --target-repo <name>` etc. Validated at the
|
|
7
|
+
* route layer against the source rig's RigSpec.workspace.repos[].
|
|
8
|
+
* NULL when the qitem is unambiguous against the rig's default_repo
|
|
9
|
+
* or when no workspace is declared. Mission Control views surface
|
|
10
|
+
* the field for cross-rig handoff clarity.
|
|
11
|
+
*
|
|
12
|
+
* Companion to migration 038 which adds rigs.workspace_json.
|
|
13
|
+
*/
|
|
14
|
+
export const queueTargetRepoSchema = {
|
|
15
|
+
name: "039_queue_target_repo.sql",
|
|
16
|
+
sql: `
|
|
17
|
+
ALTER TABLE queue_items ADD COLUMN target_repo TEXT;
|
|
18
|
+
CREATE INDEX IF NOT EXISTS idx_queue_items_target_repo ON queue_items(target_repo);
|
|
19
|
+
`,
|
|
20
|
+
};
|
|
21
|
+
//# sourceMappingURL=039_queue_target_repo.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"039_queue_target_repo.js","sourceRoot":"","sources":["../../../src/db/migrations/039_queue_target_repo.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAc;IAC9C,IAAI,EAAE,2BAA2B;IACjC,GAAG,EAAE;;;GAGJ;CACF,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
export interface ActiveLens {
|
|
2
|
+
specName: string;
|
|
3
|
+
specVersion: string;
|
|
4
|
+
/** ISO timestamp of the most recent activation; useful for
|
|
5
|
+
* diagnostics + UI staleness display. */
|
|
6
|
+
activatedAt: string;
|
|
7
|
+
}
|
|
8
|
+
export interface ActiveLensStoreOpts {
|
|
9
|
+
/** Absolute file path. Should fall under the daemon's OPENRIG_HOME so
|
|
10
|
+
* the lens stays isolated per host. */
|
|
11
|
+
filePath: string;
|
|
12
|
+
/** Test seam — defaults to () => new Date(). */
|
|
13
|
+
now?: () => Date;
|
|
14
|
+
}
|
|
15
|
+
export declare class ActiveLensStore {
|
|
16
|
+
private readonly filePath;
|
|
17
|
+
private readonly now;
|
|
18
|
+
constructor(opts: ActiveLensStoreOpts);
|
|
19
|
+
get(): ActiveLens | null;
|
|
20
|
+
set(specName: string, specVersion: string): ActiveLens;
|
|
21
|
+
clear(): void;
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=active-lens-store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"active-lens-store.d.ts","sourceRoot":"","sources":["../../src/domain/active-lens-store.ts"],"names":[],"mappings":"AAuBA,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB;8CAC0C;IAC1C,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,mBAAmB;IAClC;4CACwC;IACxC,QAAQ,EAAE,MAAM,CAAC;IACjB,gDAAgD;IAChD,GAAG,CAAC,EAAE,MAAM,IAAI,CAAC;CAClB;AAED,qBAAa,eAAe;IAC1B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAa;gBAErB,IAAI,EAAE,mBAAmB;IAKrC,GAAG,IAAI,UAAU,GAAG,IAAI;IAqBxB,GAAG,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,UAAU;IAuBtD,KAAK,IAAI,IAAI;CAOd"}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
// Workflows in Spec Library + Activation Lens v0 — active lens persistence.
|
|
2
|
+
//
|
|
3
|
+
// PRD § Item 4: lens selection persists daemon-side across daemon
|
|
4
|
+
// restarts + browser refresh. The PRD bounce conditions explicitly
|
|
5
|
+
// reject ephemeral state.
|
|
6
|
+
//
|
|
7
|
+
// Implementation: a small JSON file under OPENRIG_HOME/active-workflow
|
|
8
|
+
// -lens.json. Same env-var-aware persistence pattern as UI Enhancement
|
|
9
|
+
// Pack v0's file-edit-audit JSONL — no new SQLite table, no new
|
|
10
|
+
// migration. The file is rewritten atomically on every set so concurrent
|
|
11
|
+
// daemons (rare at single-host MVP) don't tear the read.
|
|
12
|
+
//
|
|
13
|
+
// Single-active-lens invariant: setting a lens replaces any prior
|
|
14
|
+
// lens; clearing removes the file entirely. The store does NOT
|
|
15
|
+
// validate that the named workflow_spec actually exists in the
|
|
16
|
+
// workflow_specs cache — that's an upstream concern at the route
|
|
17
|
+
// layer, since the spec might be uncached temporarily during a
|
|
18
|
+
// workspace-surface reconciliation cycle and re-appear before the
|
|
19
|
+
// next read.
|
|
20
|
+
import * as fs from "node:fs";
|
|
21
|
+
import * as path from "node:path";
|
|
22
|
+
export class ActiveLensStore {
|
|
23
|
+
filePath;
|
|
24
|
+
now;
|
|
25
|
+
constructor(opts) {
|
|
26
|
+
this.filePath = opts.filePath;
|
|
27
|
+
this.now = opts.now ?? (() => new Date());
|
|
28
|
+
}
|
|
29
|
+
get() {
|
|
30
|
+
let raw;
|
|
31
|
+
try {
|
|
32
|
+
raw = fs.readFileSync(this.filePath, "utf-8");
|
|
33
|
+
}
|
|
34
|
+
catch {
|
|
35
|
+
return null;
|
|
36
|
+
}
|
|
37
|
+
try {
|
|
38
|
+
const parsed = JSON.parse(raw);
|
|
39
|
+
if (typeof parsed.specName !== "string" || typeof parsed.specVersion !== "string")
|
|
40
|
+
return null;
|
|
41
|
+
return {
|
|
42
|
+
specName: parsed.specName,
|
|
43
|
+
specVersion: parsed.specVersion,
|
|
44
|
+
activatedAt: typeof parsed.activatedAt === "string" ? parsed.activatedAt : this.now().toISOString(),
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
catch {
|
|
48
|
+
// Malformed file → treat as no lens. Operator can `rm` to recover.
|
|
49
|
+
return null;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
set(specName, specVersion) {
|
|
53
|
+
const lens = {
|
|
54
|
+
specName,
|
|
55
|
+
specVersion,
|
|
56
|
+
activatedAt: this.now().toISOString(),
|
|
57
|
+
};
|
|
58
|
+
const dir = path.dirname(this.filePath);
|
|
59
|
+
fs.mkdirSync(dir, { recursive: true });
|
|
60
|
+
// Atomic-ish: write to temp + rename. v0 doesn't fsync (the lens
|
|
61
|
+
// is operator UX state, not an audit-record-keeping invariant —
|
|
62
|
+
// losing it across a hard crash is acceptable; the operator
|
|
63
|
+
// re-clicks Activate).
|
|
64
|
+
const tmp = `${this.filePath}.tmp-${process.pid}-${Math.random().toString(36).slice(2, 8)}`;
|
|
65
|
+
try {
|
|
66
|
+
fs.writeFileSync(tmp, JSON.stringify(lens));
|
|
67
|
+
fs.renameSync(tmp, this.filePath);
|
|
68
|
+
}
|
|
69
|
+
catch (err) {
|
|
70
|
+
try {
|
|
71
|
+
fs.unlinkSync(tmp);
|
|
72
|
+
}
|
|
73
|
+
catch { /* best-effort */ }
|
|
74
|
+
throw err;
|
|
75
|
+
}
|
|
76
|
+
return lens;
|
|
77
|
+
}
|
|
78
|
+
clear() {
|
|
79
|
+
try {
|
|
80
|
+
fs.unlinkSync(this.filePath);
|
|
81
|
+
}
|
|
82
|
+
catch {
|
|
83
|
+
// Already absent — no-op.
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
//# sourceMappingURL=active-lens-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"active-lens-store.js","sourceRoot":"","sources":["../../src/domain/active-lens-store.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { type AgentImageEntry, type AgentImageManifest, type AgentImageSourceType } from "./agent-image-types.js";
|
|
2
|
+
export interface AgentImageLibraryRoot {
|
|
3
|
+
/** Absolute path to a directory whose immediate children are image dirs. */
|
|
4
|
+
path: string;
|
|
5
|
+
sourceType: AgentImageSourceType;
|
|
6
|
+
}
|
|
7
|
+
export interface AgentImageLibraryOpts {
|
|
8
|
+
roots: AgentImageLibraryRoot[];
|
|
9
|
+
}
|
|
10
|
+
/** Stable id format: agent-image:<name>:<version> (parallel to context-pack:). */
|
|
11
|
+
export declare function agentImageId(name: string, version: string): string;
|
|
12
|
+
export declare function parseAgentImageId(id: string): {
|
|
13
|
+
name: string;
|
|
14
|
+
version: string;
|
|
15
|
+
} | null;
|
|
16
|
+
export declare function estimateTokensFromBytes(bytes: number): number;
|
|
17
|
+
export declare class AgentImageLibraryService {
|
|
18
|
+
private entries;
|
|
19
|
+
private readonly roots;
|
|
20
|
+
constructor(opts: AgentImageLibraryOpts);
|
|
21
|
+
getRoots(): readonly AgentImageLibraryRoot[];
|
|
22
|
+
scan(): {
|
|
23
|
+
count: number;
|
|
24
|
+
errors: Array<{
|
|
25
|
+
source: string;
|
|
26
|
+
error: string;
|
|
27
|
+
}>;
|
|
28
|
+
};
|
|
29
|
+
list(): AgentImageEntry[];
|
|
30
|
+
get(id: string): AgentImageEntry | null;
|
|
31
|
+
getByNameVersion(name: string, version: string): AgentImageEntry | null;
|
|
32
|
+
/**
|
|
33
|
+
* Atomically update stats.json — bump lastUsedAt always; increment
|
|
34
|
+
* forkCount only when `incrementForkCount: true` (default true to
|
|
35
|
+
* preserve back-compat with the first-shipped signature). Used by
|
|
36
|
+
* the instantiator in two phases:
|
|
37
|
+
* 1. Pre-launch (incrementForkCount: false): records the operator's
|
|
38
|
+
* INTENT to consume the image. lastUsedAt updates so the library
|
|
39
|
+
* view shows recent activity even when the launch ultimately
|
|
40
|
+
* fails — operators see "this image was tried" without conflating
|
|
41
|
+
* attempts with successful forks.
|
|
42
|
+
* 2. Post-launch on success (incrementForkCount: true): increments
|
|
43
|
+
* forkCount only when startupResult.ok===true. Prior
|
|
44
|
+
* behavior incremented on intent regardless of outcome, which
|
|
45
|
+
* polluted forkCount with failed-launch noise.
|
|
46
|
+
*
|
|
47
|
+
* Best-effort: a stat-write failure surfaces as an AgentImageError but
|
|
48
|
+
* does NOT abort the consumer (the image consumption path itself does
|
|
49
|
+
* not depend on stats; the operator just loses fork-count visibility
|
|
50
|
+
* on this consumption).
|
|
51
|
+
*
|
|
52
|
+
* Back-compat: legacy `recordConsumption(id, () => new Date())` form
|
|
53
|
+
* still works — a positional function argument is treated as the
|
|
54
|
+
* `now` clock with `incrementForkCount: true`.
|
|
55
|
+
*/
|
|
56
|
+
recordConsumption(id: string, optsOrNow?: {
|
|
57
|
+
incrementForkCount?: boolean;
|
|
58
|
+
now?: () => Date;
|
|
59
|
+
} | (() => Date)): void;
|
|
60
|
+
/** Pin an image — creates a `.pinned` sentinel file inside the image directory. */
|
|
61
|
+
pin(id: string): void;
|
|
62
|
+
/** Unpin — removes the `.pinned` sentinel. */
|
|
63
|
+
unpin(id: string): void;
|
|
64
|
+
private readImageEntry;
|
|
65
|
+
/** Write a fresh manifest + empty stats.json + cwd-deltas (if any) to a new image directory. */
|
|
66
|
+
install(targetRootPath: string, manifest: AgentImageManifest, fileContents: Map<string, string>): string;
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=agent-image-library-service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-image-library-service.d.ts","sourceRoot":"","sources":["../../../src/domain/agent-images/agent-image-library-service.ts"],"names":[],"mappings":"AAkBA,OAAO,EAEL,KAAK,eAAe,EAEpB,KAAK,kBAAkB,EACvB,KAAK,oBAAoB,EAE1B,MAAM,wBAAwB,CAAC;AAEhC,MAAM,WAAW,qBAAqB;IACpC,4EAA4E;IAC5E,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,oBAAoB,CAAC;CAClC;AAED,MAAM,WAAW,qBAAqB;IACpC,KAAK,EAAE,qBAAqB,EAAE,CAAC;CAChC;AAED,kFAAkF;AAClF,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAElE;AAED,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,MAAM,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAMtF;AAED,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAE7D;AAYD,qBAAa,wBAAwB;IACnC,OAAO,CAAC,OAAO,CAAsC;IACrD,OAAO,CAAC,QAAQ,CAAC,KAAK,CAA0B;gBAEpC,IAAI,EAAE,qBAAqB;IAIvC,QAAQ,IAAI,SAAS,qBAAqB,EAAE;IAI5C,IAAI,IAAI;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,KAAK,CAAC;YAAE,MAAM,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,MAAM,CAAA;SAAE,CAAC,CAAA;KAAE;IAkC3E,IAAI,IAAI,eAAe,EAAE;IAMzB,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,eAAe,GAAG,IAAI;IAIvC,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,eAAe,GAAG,IAAI;IAIvE;;;;;;;;;;;;;;;;;;;;;;;OAuBG;IACH,iBAAiB,CACf,EAAE,EAAE,MAAM,EACV,SAAS,CAAC,EAAE;QAAE,kBAAkB,CAAC,EAAE,OAAO,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,IAAI,CAAA;KAAE,GAAG,CAAC,MAAM,IAAI,CAAC,GAC5E,IAAI;IAuCP,mFAAmF;IACnF,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAQrB,8CAA8C;IAC9C,KAAK,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAYvB,OAAO,CAAC,cAAc;IA4FtB,gGAAgG;IAChG,OAAO,CACL,cAAc,EAAE,MAAM,EACtB,QAAQ,EAAE,kBAAkB,EAC5B,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAChC,MAAM;CAgEV"}
|
|
@@ -0,0 +1,339 @@
|
|
|
1
|
+
// Fork Primitive + Starter Agent Images v0 (PL-016) — library service.
|
|
2
|
+
//
|
|
3
|
+
// Walks discovery roots, parses each image's manifest.yaml + stats.json,
|
|
4
|
+
// and emits AgentImageEntry records for daemon HTTP routes + UI library
|
|
5
|
+
// + CLI verb family. Mirrors ContextPackLibraryService (PL-014) in
|
|
6
|
+
// shape; differences:
|
|
7
|
+
// - sourceResumeToken passes through to consumers (the instantiator
|
|
8
|
+
// consumes it; the operator-facing surfaces redact it)
|
|
9
|
+
// - stats.json is a separate file (mutable; updated atomically on
|
|
10
|
+
// fork-count increment)
|
|
11
|
+
// - .pinned sentinel file pins an image from prune
|
|
12
|
+
//
|
|
13
|
+
// Storage filesystem-canonical at ~/.openrig/agent-images/<name>/ +
|
|
14
|
+
// workspace-local .openrig/agent-images/<name>/. NO new SQLite tables.
|
|
15
|
+
import { existsSync, readFileSync, readdirSync, statSync, writeFileSync, mkdirSync, unlinkSync } from "node:fs";
|
|
16
|
+
import { join, relative } from "node:path";
|
|
17
|
+
import { parseAgentImageManifest } from "./manifest-parser.js";
|
|
18
|
+
import { AgentImageError, } from "./agent-image-types.js";
|
|
19
|
+
/** Stable id format: agent-image:<name>:<version> (parallel to context-pack:). */
|
|
20
|
+
export function agentImageId(name, version) {
|
|
21
|
+
return `agent-image:${name}:${version}`;
|
|
22
|
+
}
|
|
23
|
+
export function parseAgentImageId(id) {
|
|
24
|
+
if (!id.startsWith("agent-image:"))
|
|
25
|
+
return null;
|
|
26
|
+
const rest = id.slice("agent-image:".length);
|
|
27
|
+
const last = rest.lastIndexOf(":");
|
|
28
|
+
if (last === -1)
|
|
29
|
+
return null;
|
|
30
|
+
return { name: rest.slice(0, last), version: rest.slice(last + 1) };
|
|
31
|
+
}
|
|
32
|
+
export function estimateTokensFromBytes(bytes) {
|
|
33
|
+
return Math.ceil(bytes / 4);
|
|
34
|
+
}
|
|
35
|
+
const PINNED_SENTINEL = ".pinned";
|
|
36
|
+
const STATS_FILENAME = "stats.json";
|
|
37
|
+
const DEFAULT_STATS = {
|
|
38
|
+
forkCount: 0,
|
|
39
|
+
lastUsedAt: null,
|
|
40
|
+
estimatedSizeBytes: 0,
|
|
41
|
+
lineage: [],
|
|
42
|
+
};
|
|
43
|
+
export class AgentImageLibraryService {
|
|
44
|
+
entries = new Map();
|
|
45
|
+
roots;
|
|
46
|
+
constructor(opts) {
|
|
47
|
+
this.roots = opts.roots;
|
|
48
|
+
}
|
|
49
|
+
getRoots() {
|
|
50
|
+
return this.roots;
|
|
51
|
+
}
|
|
52
|
+
scan() {
|
|
53
|
+
const next = new Map();
|
|
54
|
+
const errors = [];
|
|
55
|
+
for (const root of this.roots) {
|
|
56
|
+
let dirents;
|
|
57
|
+
try {
|
|
58
|
+
dirents = existsSync(root.path)
|
|
59
|
+
? readdirSync(root.path, { withFileTypes: true })
|
|
60
|
+
: [];
|
|
61
|
+
}
|
|
62
|
+
catch {
|
|
63
|
+
continue;
|
|
64
|
+
}
|
|
65
|
+
for (const dirent of dirents) {
|
|
66
|
+
if (!dirent.isDirectory())
|
|
67
|
+
continue;
|
|
68
|
+
const imageDir = join(root.path, dirent.name);
|
|
69
|
+
const manifestPath = join(imageDir, "manifest.yaml");
|
|
70
|
+
if (!existsSync(manifestPath))
|
|
71
|
+
continue;
|
|
72
|
+
try {
|
|
73
|
+
const entry = this.readImageEntry(imageDir, manifestPath, root);
|
|
74
|
+
// Last-wins on collision (workspace > user_file > builtin in
|
|
75
|
+
// discovery order configured at startup).
|
|
76
|
+
next.set(entry.id, entry);
|
|
77
|
+
}
|
|
78
|
+
catch (err) {
|
|
79
|
+
errors.push({
|
|
80
|
+
source: imageDir,
|
|
81
|
+
error: err instanceof AgentImageError ? `${err.code}: ${err.message}` : err.message,
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
this.entries = next;
|
|
87
|
+
return { count: next.size, errors };
|
|
88
|
+
}
|
|
89
|
+
list() {
|
|
90
|
+
return Array.from(this.entries.values()).sort((a, b) => a.name.localeCompare(b.name) || a.version.localeCompare(b.version));
|
|
91
|
+
}
|
|
92
|
+
get(id) {
|
|
93
|
+
return this.entries.get(id) ?? null;
|
|
94
|
+
}
|
|
95
|
+
getByNameVersion(name, version) {
|
|
96
|
+
return this.entries.get(agentImageId(name, version)) ?? null;
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Atomically update stats.json — bump lastUsedAt always; increment
|
|
100
|
+
* forkCount only when `incrementForkCount: true` (default true to
|
|
101
|
+
* preserve back-compat with the first-shipped signature). Used by
|
|
102
|
+
* the instantiator in two phases:
|
|
103
|
+
* 1. Pre-launch (incrementForkCount: false): records the operator's
|
|
104
|
+
* INTENT to consume the image. lastUsedAt updates so the library
|
|
105
|
+
* view shows recent activity even when the launch ultimately
|
|
106
|
+
* fails — operators see "this image was tried" without conflating
|
|
107
|
+
* attempts with successful forks.
|
|
108
|
+
* 2. Post-launch on success (incrementForkCount: true): increments
|
|
109
|
+
* forkCount only when startupResult.ok===true. Prior
|
|
110
|
+
* behavior incremented on intent regardless of outcome, which
|
|
111
|
+
* polluted forkCount with failed-launch noise.
|
|
112
|
+
*
|
|
113
|
+
* Best-effort: a stat-write failure surfaces as an AgentImageError but
|
|
114
|
+
* does NOT abort the consumer (the image consumption path itself does
|
|
115
|
+
* not depend on stats; the operator just loses fork-count visibility
|
|
116
|
+
* on this consumption).
|
|
117
|
+
*
|
|
118
|
+
* Back-compat: legacy `recordConsumption(id, () => new Date())` form
|
|
119
|
+
* still works — a positional function argument is treated as the
|
|
120
|
+
* `now` clock with `incrementForkCount: true`.
|
|
121
|
+
*/
|
|
122
|
+
recordConsumption(id, optsOrNow) {
|
|
123
|
+
const entry = this.entries.get(id);
|
|
124
|
+
if (!entry) {
|
|
125
|
+
throw new AgentImageError("image_not_found", `agent image '${id}' not found in library`);
|
|
126
|
+
}
|
|
127
|
+
const opts = typeof optsOrNow === "function"
|
|
128
|
+
? { incrementForkCount: true, now: optsOrNow }
|
|
129
|
+
: { incrementForkCount: optsOrNow?.incrementForkCount ?? true, now: optsOrNow?.now ?? (() => new Date()) };
|
|
130
|
+
const statsPath = join(entry.sourcePath, STATS_FILENAME);
|
|
131
|
+
let current = { ...entry.stats };
|
|
132
|
+
try {
|
|
133
|
+
if (existsSync(statsPath)) {
|
|
134
|
+
const raw = readFileSync(statsPath, "utf-8");
|
|
135
|
+
const parsed = JSON.parse(raw);
|
|
136
|
+
current = { ...current, ...parsed };
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
catch {
|
|
140
|
+
// Malformed stats.json — fall through with the in-memory copy.
|
|
141
|
+
}
|
|
142
|
+
const next = {
|
|
143
|
+
forkCount: (current.forkCount ?? 0) + (opts.incrementForkCount ? 1 : 0),
|
|
144
|
+
lastUsedAt: opts.now().toISOString(),
|
|
145
|
+
estimatedSizeBytes: current.estimatedSizeBytes ?? entry.stats.estimatedSizeBytes,
|
|
146
|
+
lineage: current.lineage ?? entry.stats.lineage,
|
|
147
|
+
};
|
|
148
|
+
try {
|
|
149
|
+
writeFileSync(statsPath, JSON.stringify(next, null, 2) + "\n", "utf-8");
|
|
150
|
+
}
|
|
151
|
+
catch (err) {
|
|
152
|
+
throw new AgentImageError("stats_write_failed", `failed to update stats.json for ${id}: ${err.message}`, { id, statsPath });
|
|
153
|
+
}
|
|
154
|
+
// Mirror the new stats into the in-memory entry so subsequent reads
|
|
155
|
+
// see the bumped fork-count without re-walking the filesystem.
|
|
156
|
+
entry.stats = next;
|
|
157
|
+
}
|
|
158
|
+
/** Pin an image — creates a `.pinned` sentinel file inside the image directory. */
|
|
159
|
+
pin(id) {
|
|
160
|
+
const entry = this.entries.get(id);
|
|
161
|
+
if (!entry)
|
|
162
|
+
throw new AgentImageError("image_not_found", `agent image '${id}' not found`);
|
|
163
|
+
const sentinelPath = join(entry.sourcePath, PINNED_SENTINEL);
|
|
164
|
+
writeFileSync(sentinelPath, new Date().toISOString() + "\n", "utf-8");
|
|
165
|
+
entry.pinned = true;
|
|
166
|
+
}
|
|
167
|
+
/** Unpin — removes the `.pinned` sentinel. */
|
|
168
|
+
unpin(id) {
|
|
169
|
+
const entry = this.entries.get(id);
|
|
170
|
+
if (!entry)
|
|
171
|
+
throw new AgentImageError("image_not_found", `agent image '${id}' not found`);
|
|
172
|
+
const sentinelPath = join(entry.sourcePath, PINNED_SENTINEL);
|
|
173
|
+
try {
|
|
174
|
+
unlinkSync(sentinelPath);
|
|
175
|
+
}
|
|
176
|
+
catch {
|
|
177
|
+
// Already absent — no-op.
|
|
178
|
+
}
|
|
179
|
+
entry.pinned = false;
|
|
180
|
+
}
|
|
181
|
+
readImageEntry(imageDir, manifestPath, root) {
|
|
182
|
+
const raw = readFileSync(manifestPath, "utf-8");
|
|
183
|
+
const manifest = parseAgentImageManifest(raw, manifestPath);
|
|
184
|
+
let mostRecentMtime = 0;
|
|
185
|
+
let totalBytes = 0;
|
|
186
|
+
try {
|
|
187
|
+
const st = statSync(manifestPath);
|
|
188
|
+
mostRecentMtime = st.mtimeMs;
|
|
189
|
+
totalBytes += st.size;
|
|
190
|
+
}
|
|
191
|
+
catch { /* unreadable — fall through */ }
|
|
192
|
+
const files = manifest.files.map((mf) => {
|
|
193
|
+
const abs = join(imageDir, mf.path);
|
|
194
|
+
let bytes = null;
|
|
195
|
+
let mtime = 0;
|
|
196
|
+
try {
|
|
197
|
+
const st = statSync(abs);
|
|
198
|
+
bytes = st.size;
|
|
199
|
+
mtime = st.mtimeMs;
|
|
200
|
+
totalBytes += bytes;
|
|
201
|
+
}
|
|
202
|
+
catch {
|
|
203
|
+
bytes = null;
|
|
204
|
+
}
|
|
205
|
+
if (mtime > mostRecentMtime)
|
|
206
|
+
mostRecentMtime = mtime;
|
|
207
|
+
return {
|
|
208
|
+
path: mf.path,
|
|
209
|
+
role: mf.role,
|
|
210
|
+
summary: mf.summary ?? null,
|
|
211
|
+
absolutePath: bytes === null ? null : abs,
|
|
212
|
+
bytes,
|
|
213
|
+
estimatedTokens: bytes === null ? null : estimateTokensFromBytes(bytes),
|
|
214
|
+
};
|
|
215
|
+
});
|
|
216
|
+
const derivedEstimatedTokens = files.reduce((acc, f) => acc + (f.estimatedTokens ?? 0), 0);
|
|
217
|
+
// Read stats.json if present; default to empty stats.
|
|
218
|
+
const statsPath = join(imageDir, STATS_FILENAME);
|
|
219
|
+
let stats = { ...DEFAULT_STATS };
|
|
220
|
+
if (existsSync(statsPath)) {
|
|
221
|
+
try {
|
|
222
|
+
const statRaw = readFileSync(statsPath, "utf-8");
|
|
223
|
+
const parsed = JSON.parse(statRaw);
|
|
224
|
+
stats = {
|
|
225
|
+
forkCount: typeof parsed.forkCount === "number" ? parsed.forkCount : 0,
|
|
226
|
+
lastUsedAt: typeof parsed.lastUsedAt === "string" ? parsed.lastUsedAt : null,
|
|
227
|
+
estimatedSizeBytes: typeof parsed.estimatedSizeBytes === "number" ? parsed.estimatedSizeBytes : totalBytes,
|
|
228
|
+
lineage: Array.isArray(parsed.lineage) ? parsed.lineage.filter((l) => typeof l === "string") : [],
|
|
229
|
+
};
|
|
230
|
+
const statStat = statSync(statsPath).mtimeMs;
|
|
231
|
+
if (statStat > mostRecentMtime)
|
|
232
|
+
mostRecentMtime = statStat;
|
|
233
|
+
}
|
|
234
|
+
catch {
|
|
235
|
+
// Malformed stats — surface zero values; the daemon refresh
|
|
236
|
+
// overwrites on next consumption.
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
if (stats.estimatedSizeBytes === 0)
|
|
240
|
+
stats.estimatedSizeBytes = totalBytes;
|
|
241
|
+
if (stats.lineage.length === 0 && manifest.lineage)
|
|
242
|
+
stats.lineage = [...manifest.lineage];
|
|
243
|
+
const pinned = existsSync(join(imageDir, PINNED_SENTINEL));
|
|
244
|
+
return {
|
|
245
|
+
id: agentImageId(manifest.name, manifest.version),
|
|
246
|
+
kind: "agent-image",
|
|
247
|
+
name: manifest.name,
|
|
248
|
+
version: manifest.version,
|
|
249
|
+
runtime: manifest.runtime,
|
|
250
|
+
sourceSeat: manifest.sourceSeat,
|
|
251
|
+
sourceSessionId: manifest.sourceSessionId,
|
|
252
|
+
sourceResumeToken: manifest.sourceResumeToken,
|
|
253
|
+
// Surface sourceCwd verbatim from the manifest.
|
|
254
|
+
// null when the manifest predates source_cwd support (back-compat).
|
|
255
|
+
sourceCwd: manifest.sourceCwd ?? null,
|
|
256
|
+
notes: manifest.notes ?? null,
|
|
257
|
+
createdAt: manifest.createdAt,
|
|
258
|
+
sourceType: root.sourceType,
|
|
259
|
+
sourcePath: imageDir,
|
|
260
|
+
relativePath: relative(root.path, imageDir) || ".",
|
|
261
|
+
updatedAt: new Date(mostRecentMtime || Date.now()).toISOString(),
|
|
262
|
+
manifestEstimatedTokens: typeof manifest.estimatedTokens === "number" ? manifest.estimatedTokens : null,
|
|
263
|
+
derivedEstimatedTokens,
|
|
264
|
+
files,
|
|
265
|
+
stats,
|
|
266
|
+
lineage: stats.lineage,
|
|
267
|
+
pinned,
|
|
268
|
+
};
|
|
269
|
+
}
|
|
270
|
+
/** Write a fresh manifest + empty stats.json + cwd-deltas (if any) to a new image directory. */
|
|
271
|
+
install(targetRootPath, manifest, fileContents) {
|
|
272
|
+
const targetDir = join(targetRootPath, manifest.name);
|
|
273
|
+
if (existsSync(targetDir)) {
|
|
274
|
+
throw new AgentImageError("image_referenced", `agent image directory already exists at ${targetDir}; choose a different name or remove the existing dir`, { name: manifest.name, targetDir });
|
|
275
|
+
}
|
|
276
|
+
mkdirSync(targetDir, { recursive: true });
|
|
277
|
+
// Emit manifest as YAML — write camelCase keys mapped to snake_case
|
|
278
|
+
// for forward-compat with operator hand-edits.
|
|
279
|
+
const yamlLines = [
|
|
280
|
+
`name: ${manifest.name}`,
|
|
281
|
+
`version: ${manifest.version}`,
|
|
282
|
+
`runtime: ${manifest.runtime}`,
|
|
283
|
+
`source_seat: ${quoteIfNeeded(manifest.sourceSeat)}`,
|
|
284
|
+
`source_session_id: ${quoteIfNeeded(manifest.sourceSessionId)}`,
|
|
285
|
+
`source_resume_token: ${quoteIfNeeded(manifest.sourceResumeToken)}`,
|
|
286
|
+
`created_at: ${quoteIfNeeded(manifest.createdAt)}`,
|
|
287
|
+
];
|
|
288
|
+
// Persist sourceCwd to manifest YAML so the
|
|
289
|
+
// Use-as-starter snippet can emit `cwd: <source_cwd>` from the
|
|
290
|
+
// library entry. Omitted when capture-time cwd was unknown.
|
|
291
|
+
if (manifest.sourceCwd) {
|
|
292
|
+
yamlLines.push(`source_cwd: ${quoteIfNeeded(manifest.sourceCwd)}`);
|
|
293
|
+
}
|
|
294
|
+
if (manifest.notes) {
|
|
295
|
+
yamlLines.push(`notes: |`);
|
|
296
|
+
for (const line of manifest.notes.split("\n"))
|
|
297
|
+
yamlLines.push(` ${line}`);
|
|
298
|
+
}
|
|
299
|
+
if (typeof manifest.estimatedTokens === "number")
|
|
300
|
+
yamlLines.push(`estimated_tokens: ${manifest.estimatedTokens}`);
|
|
301
|
+
if (manifest.lineage && manifest.lineage.length > 0) {
|
|
302
|
+
yamlLines.push("lineage:");
|
|
303
|
+
for (const l of manifest.lineage)
|
|
304
|
+
yamlLines.push(` - ${quoteIfNeeded(l)}`);
|
|
305
|
+
}
|
|
306
|
+
yamlLines.push("files:");
|
|
307
|
+
for (const f of manifest.files) {
|
|
308
|
+
yamlLines.push(` - path: ${quoteIfNeeded(f.path)}`);
|
|
309
|
+
yamlLines.push(` role: ${quoteIfNeeded(f.role)}`);
|
|
310
|
+
if (f.summary)
|
|
311
|
+
yamlLines.push(` summary: ${quoteIfNeeded(f.summary)}`);
|
|
312
|
+
}
|
|
313
|
+
writeFileSync(join(targetDir, "manifest.yaml"), yamlLines.join("\n") + "\n", "utf-8");
|
|
314
|
+
// Empty stats — fork count starts at 0; lineage from manifest.
|
|
315
|
+
const stats = {
|
|
316
|
+
forkCount: 0,
|
|
317
|
+
lastUsedAt: null,
|
|
318
|
+
estimatedSizeBytes: 0,
|
|
319
|
+
lineage: manifest.lineage ? [...manifest.lineage] : [],
|
|
320
|
+
};
|
|
321
|
+
writeFileSync(join(targetDir, STATS_FILENAME), JSON.stringify(stats, null, 2) + "\n", "utf-8");
|
|
322
|
+
for (const [relPath, content] of fileContents) {
|
|
323
|
+
if (relPath.includes("..") || relPath.startsWith("/")) {
|
|
324
|
+
throw new AgentImageError("manifest_invalid", `install file path '${relPath}' must be relative inside the image (no '..', no leading '/')`);
|
|
325
|
+
}
|
|
326
|
+
const abs = join(targetDir, relPath);
|
|
327
|
+
mkdirSync(join(abs, ".."), { recursive: true });
|
|
328
|
+
writeFileSync(abs, content, "utf-8");
|
|
329
|
+
}
|
|
330
|
+
return targetDir;
|
|
331
|
+
}
|
|
332
|
+
}
|
|
333
|
+
function quoteIfNeeded(s) {
|
|
334
|
+
if (s === "" || /[:#\n@\\\s]/.test(s) || /^[!&*<>%`?,|\[\]{}'"]/.test(s)) {
|
|
335
|
+
return JSON.stringify(s);
|
|
336
|
+
}
|
|
337
|
+
return s;
|
|
338
|
+
}
|
|
339
|
+
//# sourceMappingURL=agent-image-library-service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-image-library-service.js","sourceRoot":"","sources":["../../../src/domain/agent-images/agent-image-library-service.ts"],"names":[],"mappings":"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"}
|