@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,41 @@
|
|
|
1
|
+
import { type ContextPackEntry, type ContextPackSourceType } from "./context-pack-types.js";
|
|
2
|
+
export interface ContextPackLibraryRoot {
|
|
3
|
+
/** Absolute path to a directory whose immediate children are pack dirs. */
|
|
4
|
+
path: string;
|
|
5
|
+
sourceType: ContextPackSourceType;
|
|
6
|
+
}
|
|
7
|
+
export interface ContextPackLibraryOpts {
|
|
8
|
+
roots: ContextPackLibraryRoot[];
|
|
9
|
+
}
|
|
10
|
+
/** Stable id format: context-pack:<name>:<version>. */
|
|
11
|
+
export declare function contextPackId(name: string, version: string): string;
|
|
12
|
+
export declare function parseContextPackId(id: string): {
|
|
13
|
+
name: string;
|
|
14
|
+
version: string;
|
|
15
|
+
} | null;
|
|
16
|
+
/** Daemon-derived per-file token estimate. Same heuristic the existing
|
|
17
|
+
* context-usage-store uses (≈4 chars/token); cheap, stable, no
|
|
18
|
+
* dependency on a tokenizer library. */
|
|
19
|
+
export declare function estimateTokensFromBytes(bytes: number): number;
|
|
20
|
+
export declare class ContextPackLibraryService {
|
|
21
|
+
private entries;
|
|
22
|
+
private readonly roots;
|
|
23
|
+
constructor(opts: ContextPackLibraryOpts);
|
|
24
|
+
/** Re-walk all roots, replace the in-memory index, return a count. */
|
|
25
|
+
scan(): {
|
|
26
|
+
count: number;
|
|
27
|
+
errors: Array<{
|
|
28
|
+
source: string;
|
|
29
|
+
error: string;
|
|
30
|
+
}>;
|
|
31
|
+
};
|
|
32
|
+
list(): ContextPackEntry[];
|
|
33
|
+
get(id: string): ContextPackEntry | null;
|
|
34
|
+
getByNameVersion(name: string, version: string): ContextPackEntry | null;
|
|
35
|
+
/** Resolve the absolute file path for a pack entry's file, with a
|
|
36
|
+
* containment check that prevents path-traversal escaping the pack
|
|
37
|
+
* directory. */
|
|
38
|
+
resolveFileWithinPack(packEntry: ContextPackEntry, relPath: string): string;
|
|
39
|
+
private readPackEntry;
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=context-pack-library-service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context-pack-library-service.d.ts","sourceRoot":"","sources":["../../../src/domain/context-packs/context-pack-library-service.ts"],"names":[],"mappings":"AAYA,OAAO,EAEL,KAAK,gBAAgB,EAErB,KAAK,qBAAqB,EAC3B,MAAM,yBAAyB,CAAC;AAEjC,MAAM,WAAW,sBAAsB;IACrC,2EAA2E;IAC3E,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,qBAAqB,CAAC;CACnC;AAED,MAAM,WAAW,sBAAsB;IACrC,KAAK,EAAE,sBAAsB,EAAE,CAAC;CACjC;AAED,uDAAuD;AACvD,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAEnE;AAED,wBAAgB,kBAAkB,CAAC,EAAE,EAAE,MAAM,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAMvF;AAED;;yCAEyC;AACzC,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAE7D;AAED,qBAAa,yBAAyB;IACpC,OAAO,CAAC,OAAO,CAAuC;IACtD,OAAO,CAAC,QAAQ,CAAC,KAAK,CAA2B;gBAErC,IAAI,EAAE,sBAAsB;IAIxC,sEAAsE;IACtE,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;IAqC3E,IAAI,IAAI,gBAAgB,EAAE;IAI1B,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,gBAAgB,GAAG,IAAI;IAIxC,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,gBAAgB,GAAG,IAAI;IAIxE;;qBAEiB;IACjB,qBAAqB,CAAC,SAAS,EAAE,gBAAgB,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM;IAmB3E,OAAO,CAAC,aAAa;CAoDtB"}
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
// Rig Context / Composable Context Injection v0 (PL-014) — library
|
|
2
|
+
// service.
|
|
3
|
+
//
|
|
4
|
+
// Walks the configured discovery roots, parses each pack's
|
|
5
|
+
// manifest.yaml, and emits ContextPackEntry records ready for the
|
|
6
|
+
// daemon HTTP routes + UI library + send mechanism. Workspace-surface
|
|
7
|
+
// reconciliation: the operator's filesystem edit always wins on next
|
|
8
|
+
// scan() (matches PL-004 Phase D's contract for workflow_specs).
|
|
9
|
+
import { existsSync, readFileSync, readdirSync, statSync } from "node:fs";
|
|
10
|
+
import { join, relative } from "node:path";
|
|
11
|
+
import { parseManifest } from "./manifest-parser.js";
|
|
12
|
+
import { ContextPackError, } from "./context-pack-types.js";
|
|
13
|
+
/** Stable id format: context-pack:<name>:<version>. */
|
|
14
|
+
export function contextPackId(name, version) {
|
|
15
|
+
return `context-pack:${name}:${version}`;
|
|
16
|
+
}
|
|
17
|
+
export function parseContextPackId(id) {
|
|
18
|
+
if (!id.startsWith("context-pack:"))
|
|
19
|
+
return null;
|
|
20
|
+
const rest = id.slice("context-pack:".length);
|
|
21
|
+
const last = rest.lastIndexOf(":");
|
|
22
|
+
if (last === -1)
|
|
23
|
+
return null;
|
|
24
|
+
return { name: rest.slice(0, last), version: rest.slice(last + 1) };
|
|
25
|
+
}
|
|
26
|
+
/** Daemon-derived per-file token estimate. Same heuristic the existing
|
|
27
|
+
* context-usage-store uses (≈4 chars/token); cheap, stable, no
|
|
28
|
+
* dependency on a tokenizer library. */
|
|
29
|
+
export function estimateTokensFromBytes(bytes) {
|
|
30
|
+
return Math.ceil(bytes / 4);
|
|
31
|
+
}
|
|
32
|
+
export class ContextPackLibraryService {
|
|
33
|
+
entries = new Map();
|
|
34
|
+
roots;
|
|
35
|
+
constructor(opts) {
|
|
36
|
+
this.roots = opts.roots;
|
|
37
|
+
}
|
|
38
|
+
/** Re-walk all roots, replace the in-memory index, return a count. */
|
|
39
|
+
scan() {
|
|
40
|
+
const next = new Map();
|
|
41
|
+
const errors = [];
|
|
42
|
+
for (const root of this.roots) {
|
|
43
|
+
let dirents;
|
|
44
|
+
try {
|
|
45
|
+
dirents = existsSync(root.path)
|
|
46
|
+
? readdirSync(root.path, { withFileTypes: true })
|
|
47
|
+
: [];
|
|
48
|
+
}
|
|
49
|
+
catch {
|
|
50
|
+
continue;
|
|
51
|
+
}
|
|
52
|
+
for (const dirent of dirents) {
|
|
53
|
+
if (!dirent.isDirectory())
|
|
54
|
+
continue;
|
|
55
|
+
const packDir = join(root.path, dirent.name);
|
|
56
|
+
const manifestPath = join(packDir, "manifest.yaml");
|
|
57
|
+
if (!existsSync(manifestPath))
|
|
58
|
+
continue;
|
|
59
|
+
try {
|
|
60
|
+
const entry = this.readPackEntry(packDir, manifestPath, root);
|
|
61
|
+
// Last-wins: workspace > user_file > builtin in the discovery
|
|
62
|
+
// order configured by startup.
|
|
63
|
+
next.set(entry.id, entry);
|
|
64
|
+
}
|
|
65
|
+
catch (err) {
|
|
66
|
+
errors.push({
|
|
67
|
+
source: packDir,
|
|
68
|
+
error: err instanceof ContextPackError
|
|
69
|
+
? `${err.code}: ${err.message}`
|
|
70
|
+
: err.message,
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
this.entries = next;
|
|
76
|
+
return { count: next.size, errors };
|
|
77
|
+
}
|
|
78
|
+
list() {
|
|
79
|
+
return Array.from(this.entries.values()).sort((a, b) => a.name.localeCompare(b.name) || a.version.localeCompare(b.version));
|
|
80
|
+
}
|
|
81
|
+
get(id) {
|
|
82
|
+
return this.entries.get(id) ?? null;
|
|
83
|
+
}
|
|
84
|
+
getByNameVersion(name, version) {
|
|
85
|
+
return this.entries.get(contextPackId(name, version)) ?? null;
|
|
86
|
+
}
|
|
87
|
+
/** Resolve the absolute file path for a pack entry's file, with a
|
|
88
|
+
* containment check that prevents path-traversal escaping the pack
|
|
89
|
+
* directory. */
|
|
90
|
+
resolveFileWithinPack(packEntry, relPath) {
|
|
91
|
+
if (relPath.includes("..") || relPath.startsWith("/")) {
|
|
92
|
+
throw new ContextPackError("file_outside_pack", `relative path '${relPath}' must be inside the pack directory (no '..', no leading '/')`, { packId: packEntry.id, relPath });
|
|
93
|
+
}
|
|
94
|
+
const abs = join(packEntry.sourcePath, relPath);
|
|
95
|
+
if (!abs.startsWith(packEntry.sourcePath + "/") && abs !== packEntry.sourcePath) {
|
|
96
|
+
throw new ContextPackError("file_outside_pack", `resolved path '${abs}' falls outside pack '${packEntry.sourcePath}'`, { packId: packEntry.id, relPath, resolved: abs });
|
|
97
|
+
}
|
|
98
|
+
return abs;
|
|
99
|
+
}
|
|
100
|
+
readPackEntry(packDir, manifestPath, root) {
|
|
101
|
+
const raw = readFileSync(manifestPath, "utf-8");
|
|
102
|
+
const manifest = parseManifest(raw, manifestPath);
|
|
103
|
+
let mostRecentMtime = 0;
|
|
104
|
+
try {
|
|
105
|
+
mostRecentMtime = statSync(manifestPath).mtimeMs;
|
|
106
|
+
}
|
|
107
|
+
catch { /* unreadable manifest stat → fall back to 0 */ }
|
|
108
|
+
const files = manifest.files.map((mf) => {
|
|
109
|
+
const abs = join(packDir, mf.path);
|
|
110
|
+
let bytes = null;
|
|
111
|
+
let mtime = 0;
|
|
112
|
+
try {
|
|
113
|
+
const st = statSync(abs);
|
|
114
|
+
bytes = st.size;
|
|
115
|
+
mtime = st.mtimeMs;
|
|
116
|
+
}
|
|
117
|
+
catch {
|
|
118
|
+
bytes = null;
|
|
119
|
+
}
|
|
120
|
+
if (mtime > mostRecentMtime)
|
|
121
|
+
mostRecentMtime = mtime;
|
|
122
|
+
return {
|
|
123
|
+
path: mf.path,
|
|
124
|
+
role: mf.role,
|
|
125
|
+
summary: mf.summary ?? null,
|
|
126
|
+
absolutePath: bytes === null ? null : abs,
|
|
127
|
+
bytes,
|
|
128
|
+
estimatedTokens: bytes === null ? null : estimateTokensFromBytes(bytes),
|
|
129
|
+
};
|
|
130
|
+
});
|
|
131
|
+
const derivedEstimatedTokens = files.reduce((acc, f) => acc + (f.estimatedTokens ?? 0), 0);
|
|
132
|
+
return {
|
|
133
|
+
id: contextPackId(manifest.name, manifest.version),
|
|
134
|
+
kind: "context-pack",
|
|
135
|
+
name: manifest.name,
|
|
136
|
+
version: manifest.version,
|
|
137
|
+
purpose: manifest.purpose ?? null,
|
|
138
|
+
sourceType: root.sourceType,
|
|
139
|
+
sourcePath: packDir,
|
|
140
|
+
relativePath: relative(root.path, packDir) || ".",
|
|
141
|
+
updatedAt: new Date(mostRecentMtime || Date.now()).toISOString(),
|
|
142
|
+
manifestEstimatedTokens: typeof manifest.estimatedTokens === "number" ? manifest.estimatedTokens : null,
|
|
143
|
+
derivedEstimatedTokens,
|
|
144
|
+
files,
|
|
145
|
+
};
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
//# sourceMappingURL=context-pack-library-service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context-pack-library-service.js","sourceRoot":"","sources":["../../../src/domain/context-packs/context-pack-library-service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
export interface ContextPackManifestFile {
|
|
2
|
+
/** Relative path within the pack directory. */
|
|
3
|
+
path: string;
|
|
4
|
+
/** Free-form operator-defined role (e.g., "prd", "proof-packet",
|
|
5
|
+
* "architecture-brief"); closed enum at v1+ if patterns emerge. */
|
|
6
|
+
role: string;
|
|
7
|
+
/** One-line description rendered in the review pane and bundle frame. */
|
|
8
|
+
summary?: string;
|
|
9
|
+
}
|
|
10
|
+
export interface ContextPackManifest {
|
|
11
|
+
name: string;
|
|
12
|
+
version: string;
|
|
13
|
+
purpose?: string;
|
|
14
|
+
files: ContextPackManifestFile[];
|
|
15
|
+
/** Operator-supplied estimate (used as a hint when no per-file
|
|
16
|
+
* estimate is available); the library service computes a derived
|
|
17
|
+
* `derivedEstimatedTokens` from actual file sizes for display. */
|
|
18
|
+
estimatedTokens?: number;
|
|
19
|
+
}
|
|
20
|
+
export type ContextPackSourceType = "builtin" | "user_file" | "workspace";
|
|
21
|
+
/** Library-shaped record emitted by ContextPackLibraryService. */
|
|
22
|
+
export interface ContextPackEntry {
|
|
23
|
+
/** Stable identifier for routes / UI navigation:
|
|
24
|
+
* `context-pack:<name>:<version>`. */
|
|
25
|
+
id: string;
|
|
26
|
+
kind: "context-pack";
|
|
27
|
+
name: string;
|
|
28
|
+
version: string;
|
|
29
|
+
purpose: string | null;
|
|
30
|
+
sourceType: ContextPackSourceType;
|
|
31
|
+
/** Absolute path to the pack directory. */
|
|
32
|
+
sourcePath: string;
|
|
33
|
+
/** Path relative to the discovery root that found this pack. */
|
|
34
|
+
relativePath: string;
|
|
35
|
+
/** ISO timestamp of the most recent mtime under the pack dir
|
|
36
|
+
* (manifest.yaml or any included file — whichever is newer). */
|
|
37
|
+
updatedAt: string;
|
|
38
|
+
/** Operator-supplied estimate from the manifest, or null. */
|
|
39
|
+
manifestEstimatedTokens: number | null;
|
|
40
|
+
/** Daemon-derived estimate from actual file sizes (chars / 4
|
|
41
|
+
* rounded — matches the existing context-usage convention). */
|
|
42
|
+
derivedEstimatedTokens: number;
|
|
43
|
+
/** Per-file metadata projected from the manifest + on-disk reads. */
|
|
44
|
+
files: ContextPackEntryFile[];
|
|
45
|
+
}
|
|
46
|
+
export interface ContextPackEntryFile {
|
|
47
|
+
path: string;
|
|
48
|
+
role: string;
|
|
49
|
+
summary: string | null;
|
|
50
|
+
/** Absolute path to the file on disk; null when manifest references
|
|
51
|
+
* a file that doesn't exist (the entry surfaces honestly with
|
|
52
|
+
* bytes=null instead of refusing to index). */
|
|
53
|
+
absolutePath: string | null;
|
|
54
|
+
/** File size in bytes; null when missing or unreadable. */
|
|
55
|
+
bytes: number | null;
|
|
56
|
+
/** Daemon-derived per-file token estimate (chars / 4 rounded). */
|
|
57
|
+
estimatedTokens: number | null;
|
|
58
|
+
}
|
|
59
|
+
export declare class ContextPackError extends Error {
|
|
60
|
+
readonly code: "manifest_missing" | "manifest_parse_error" | "manifest_invalid" | "pack_not_found" | "file_outside_pack" | "file_read_failed";
|
|
61
|
+
readonly details?: Record<string, unknown> | undefined;
|
|
62
|
+
constructor(code: "manifest_missing" | "manifest_parse_error" | "manifest_invalid" | "pack_not_found" | "file_outside_pack" | "file_read_failed", message: string, details?: Record<string, unknown> | undefined);
|
|
63
|
+
}
|
|
64
|
+
//# sourceMappingURL=context-pack-types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context-pack-types.d.ts","sourceRoot":"","sources":["../../../src/domain/context-packs/context-pack-types.ts"],"names":[],"mappings":"AAYA,MAAM,WAAW,uBAAuB;IACtC,+CAA+C;IAC/C,IAAI,EAAE,MAAM,CAAC;IACb;wEACoE;IACpE,IAAI,EAAE,MAAM,CAAC;IACb,yEAAyE;IACzE,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,uBAAuB,EAAE,CAAC;IACjC;;uEAEmE;IACnE,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,MAAM,qBAAqB,GAAG,SAAS,GAAG,WAAW,GAAG,WAAW,CAAC;AAE1E,kEAAkE;AAClE,MAAM,WAAW,gBAAgB;IAC/B;2CACuC;IACvC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,cAAc,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,UAAU,EAAE,qBAAqB,CAAC;IAClC,2CAA2C;IAC3C,UAAU,EAAE,MAAM,CAAC;IACnB,gEAAgE;IAChE,YAAY,EAAE,MAAM,CAAC;IACrB;qEACiE;IACjE,SAAS,EAAE,MAAM,CAAC;IAClB,6DAA6D;IAC7D,uBAAuB,EAAE,MAAM,GAAG,IAAI,CAAC;IACvC;oEACgE;IAChE,sBAAsB,EAAE,MAAM,CAAC;IAC/B,qEAAqE;IACrE,KAAK,EAAE,oBAAoB,EAAE,CAAC;CAC/B;AAED,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB;;oDAEgD;IAChD,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,2DAA2D;IAC3D,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,kEAAkE;IAClE,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;CAChC;AAED,qBAAa,gBAAiB,SAAQ,KAAK;aAEvB,IAAI,EAChB,kBAAkB,GAClB,sBAAsB,GACtB,kBAAkB,GAClB,gBAAgB,GAChB,mBAAmB,GACnB,kBAAkB;aAEN,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;gBARjC,IAAI,EAChB,kBAAkB,GAClB,sBAAsB,GACtB,kBAAkB,GAClB,gBAAgB,GAChB,mBAAmB,GACnB,kBAAkB,EACtB,OAAO,EAAE,MAAM,EACC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,YAAA;CAKpD"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
// Rig Context / Composable Context Injection v0 (PL-014) — typed primitive
|
|
2
|
+
// shared types.
|
|
3
|
+
//
|
|
4
|
+
// A context_pack is a directory containing `manifest.yaml` + included
|
|
5
|
+
// markdown / yaml / txt files. Operator-authored, library-discoverable,
|
|
6
|
+
// reviewable, sendable. Parallel to skills + workflow_specs in shape.
|
|
7
|
+
//
|
|
8
|
+
// MVP single-host context: storage filesystem-canonical at
|
|
9
|
+
// ~/.openrig/context-packs/<name>/ (host) + workspace-local
|
|
10
|
+
// .openrig/context-packs/<name>/. NO new SQLite tables; library cache
|
|
11
|
+
// is in-memory at the daemon scope.
|
|
12
|
+
export class ContextPackError extends Error {
|
|
13
|
+
code;
|
|
14
|
+
details;
|
|
15
|
+
constructor(code, message, details) {
|
|
16
|
+
super(message);
|
|
17
|
+
this.code = code;
|
|
18
|
+
this.details = details;
|
|
19
|
+
this.name = "ContextPackError";
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=context-pack-types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context-pack-types.js","sourceRoot":"","sources":["../../../src/domain/context-packs/context-pack-types.ts"],"names":[],"mappings":"AAAA,2EAA2E;AAC3E,gBAAgB;AAChB,EAAE;AACF,sEAAsE;AACtE,wEAAwE;AACxE,sEAAsE;AACtE,EAAE;AACF,2DAA2D;AAC3D,4DAA4D;AAC5D,sEAAsE;AACtE,oCAAoC;AAiEpC,MAAM,OAAO,gBAAiB,SAAQ,KAAK;IAEvB;IAQA;IATlB,YACkB,IAMM,EACtB,OAAe,EACC,OAAiC;QAEjD,KAAK,CAAC,OAAO,CAAC,CAAC;QAVC,SAAI,GAAJ,IAAI,CAME;QAEN,YAAO,GAAP,OAAO,CAA0B;QAGjD,IAAI,CAAC,IAAI,GAAG,kBAAkB,CAAC;IACjC,CAAC;CACF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manifest-parser.d.ts","sourceRoot":"","sources":["../../../src/domain/context-packs/manifest-parser.ts"],"names":[],"mappings":"AAQA,OAAO,EAAoB,KAAK,mBAAmB,EAAgC,MAAM,yBAAyB,CAAC;AAInH,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,mBAAmB,CA4GtF"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
// Rig Context / Composable Context Injection v0 (PL-014) — manifest
|
|
2
|
+
// parser.
|
|
3
|
+
//
|
|
4
|
+
// Parses ~/.openrig/context-packs/<name>/manifest.yaml into a typed
|
|
5
|
+
// shape with structured-error rejects on malformed input. Pure
|
|
6
|
+
// (no fs touches in the parser itself; caller hands in raw YAML).
|
|
7
|
+
import { parse as parseYaml } from "yaml";
|
|
8
|
+
import { ContextPackError } from "./context-pack-types.js";
|
|
9
|
+
const ALLOWED_FILE_SUFFIXES = [".md", ".markdown", ".yaml", ".yml", ".txt"];
|
|
10
|
+
export function parseManifest(rawYaml, sourcePath) {
|
|
11
|
+
let parsed;
|
|
12
|
+
try {
|
|
13
|
+
parsed = parseYaml(rawYaml);
|
|
14
|
+
}
|
|
15
|
+
catch (err) {
|
|
16
|
+
throw new ContextPackError("manifest_parse_error", `manifest at ${sourcePath} is not valid YAML: ${err.message}`, { sourcePath });
|
|
17
|
+
}
|
|
18
|
+
if (!parsed || typeof parsed !== "object" || Array.isArray(parsed)) {
|
|
19
|
+
throw new ContextPackError("manifest_invalid", `manifest at ${sourcePath} must be a YAML object at the root`, { sourcePath });
|
|
20
|
+
}
|
|
21
|
+
const obj = parsed;
|
|
22
|
+
const name = obj["name"];
|
|
23
|
+
if (typeof name !== "string" || name.length === 0) {
|
|
24
|
+
throw new ContextPackError("manifest_invalid", `manifest at ${sourcePath} is missing required field 'name' (string)`, { sourcePath });
|
|
25
|
+
}
|
|
26
|
+
// Version may be a number or string in YAML; normalize to string for
|
|
27
|
+
// round-tripping with library ids and `<name>:<version>` formatting.
|
|
28
|
+
const versionRaw = obj["version"];
|
|
29
|
+
if (versionRaw === undefined || versionRaw === null) {
|
|
30
|
+
throw new ContextPackError("manifest_invalid", `manifest at ${sourcePath} is missing required field 'version'`, { sourcePath });
|
|
31
|
+
}
|
|
32
|
+
const version = String(versionRaw);
|
|
33
|
+
const purpose = typeof obj["purpose"] === "string" ? obj["purpose"] : undefined;
|
|
34
|
+
const filesRaw = obj["files"];
|
|
35
|
+
if (!Array.isArray(filesRaw)) {
|
|
36
|
+
throw new ContextPackError("manifest_invalid", `manifest at ${sourcePath} must declare 'files: [...]' (got: ${typeof filesRaw})`, { sourcePath });
|
|
37
|
+
}
|
|
38
|
+
const files = [];
|
|
39
|
+
for (let i = 0; i < filesRaw.length; i++) {
|
|
40
|
+
const f = filesRaw[i];
|
|
41
|
+
if (!f || typeof f !== "object" || Array.isArray(f)) {
|
|
42
|
+
throw new ContextPackError("manifest_invalid", `manifest at ${sourcePath} has malformed entry at files[${i}] (must be an object with 'path' + 'role')`, { sourcePath, index: i });
|
|
43
|
+
}
|
|
44
|
+
const fr = f;
|
|
45
|
+
const path = fr["path"];
|
|
46
|
+
if (typeof path !== "string" || path.length === 0) {
|
|
47
|
+
throw new ContextPackError("manifest_invalid", `manifest at ${sourcePath} files[${i}] missing 'path' (string)`, { sourcePath, index: i });
|
|
48
|
+
}
|
|
49
|
+
if (path.includes("..") || path.startsWith("/")) {
|
|
50
|
+
throw new ContextPackError("manifest_invalid", `manifest at ${sourcePath} files[${i}].path '${path}' must be a relative path inside the pack (no '..' segments, no leading '/')`, { sourcePath, index: i, path });
|
|
51
|
+
}
|
|
52
|
+
const role = fr["role"];
|
|
53
|
+
if (typeof role !== "string" || role.length === 0) {
|
|
54
|
+
throw new ContextPackError("manifest_invalid", `manifest at ${sourcePath} files[${i}] missing 'role' (string)`, { sourcePath, index: i, path });
|
|
55
|
+
}
|
|
56
|
+
if (!ALLOWED_FILE_SUFFIXES.some((s) => path.endsWith(s))) {
|
|
57
|
+
throw new ContextPackError("manifest_invalid", `manifest at ${sourcePath} files[${i}].path '${path}' has an unsupported suffix; allowed: ${ALLOWED_FILE_SUFFIXES.join(", ")}`, { sourcePath, index: i, path });
|
|
58
|
+
}
|
|
59
|
+
const summary = typeof fr["summary"] === "string" ? fr["summary"] : undefined;
|
|
60
|
+
files.push(summary === undefined ? { path, role } : { path, role, summary });
|
|
61
|
+
}
|
|
62
|
+
const estimatedTokensRaw = obj["estimated_tokens"] ?? obj["estimatedTokens"];
|
|
63
|
+
const estimatedTokens = typeof estimatedTokensRaw === "number" && Number.isFinite(estimatedTokensRaw)
|
|
64
|
+
? Math.max(0, Math.floor(estimatedTokensRaw))
|
|
65
|
+
: undefined;
|
|
66
|
+
return {
|
|
67
|
+
name,
|
|
68
|
+
version,
|
|
69
|
+
...(purpose !== undefined ? { purpose } : {}),
|
|
70
|
+
files,
|
|
71
|
+
...(estimatedTokens !== undefined ? { estimatedTokens } : {}),
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
//# sourceMappingURL=manifest-parser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manifest-parser.js","sourceRoot":"","sources":["../../../src/domain/context-packs/manifest-parser.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,9 +1,10 @@
|
|
|
1
|
-
import
|
|
1
|
+
import Database from "better-sqlite3";
|
|
2
2
|
import type { ContextUsage, ContextUnknownReason } from "./types.js";
|
|
3
3
|
/** Freshness threshold: samples older than this are considered stale for compact displays. */
|
|
4
4
|
export declare const FRESHNESS_THRESHOLD_MS = 600000;
|
|
5
5
|
export interface ContextUsageStoreOpts {
|
|
6
6
|
stateDir: string;
|
|
7
|
+
codexHomeDir?: string | null;
|
|
7
8
|
}
|
|
8
9
|
interface SidecarRaw {
|
|
9
10
|
context_window?: {
|
|
@@ -22,6 +23,7 @@ interface SidecarRaw {
|
|
|
22
23
|
export declare class ContextUsageStore {
|
|
23
24
|
readonly db: Database.Database;
|
|
24
25
|
private stateDir;
|
|
26
|
+
private codexHomeDir;
|
|
25
27
|
constructor(db: Database.Database, opts: ContextUsageStoreOpts);
|
|
26
28
|
/** Get the sidecar file path for a session. */
|
|
27
29
|
getSidecarPath(sessionName: string): string;
|
|
@@ -35,8 +37,15 @@ export declare class ContextUsageStore {
|
|
|
35
37
|
};
|
|
36
38
|
/** Read sidecar and normalize into ContextUsage in one step. */
|
|
37
39
|
readAndNormalize(sessionName: string): ContextUsage;
|
|
40
|
+
/** Read the latest Codex token_count event for a thread and normalize it. */
|
|
41
|
+
readCodexAndNormalize(input: {
|
|
42
|
+
threadId: string | null | undefined;
|
|
43
|
+
sessionName: string;
|
|
44
|
+
}): ContextUsage;
|
|
38
45
|
/** Normalize raw sidecar data into a ContextUsage record. */
|
|
39
46
|
normalizeSample(raw: SidecarRaw | null): ContextUsage;
|
|
47
|
+
/** Normalize a Codex token_count JSONL event into ContextUsage. */
|
|
48
|
+
private normalizeCodexTokenCount;
|
|
40
49
|
/** Persist a context usage record for a node. Upserts. */
|
|
41
50
|
persist(nodeId: string, usage: ContextUsage): void;
|
|
42
51
|
/** Get context usage for a single node. Session-aware: mismatched session returns unknown. */
|
|
@@ -53,6 +62,10 @@ export declare class ContextUsageStore {
|
|
|
53
62
|
/** Convert a DB row to a ContextUsage, applying freshness. */
|
|
54
63
|
private rowToUsage;
|
|
55
64
|
private normalizeCurrentUsage;
|
|
65
|
+
private readCodexThread;
|
|
66
|
+
private resolveCodexStateDbPaths;
|
|
67
|
+
private readLatestCodexTokenCount;
|
|
68
|
+
private readTail;
|
|
56
69
|
}
|
|
57
70
|
export {};
|
|
58
71
|
//# sourceMappingURL=context-usage-store.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context-usage-store.d.ts","sourceRoot":"","sources":["../../src/domain/context-usage-store.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"context-usage-store.d.ts","sourceRoot":"","sources":["../../src/domain/context-usage-store.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AAItC,OAAO,KAAK,EAAE,YAAY,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAErE,8FAA8F;AAC9F,eAAO,MAAM,sBAAsB,SAAU,CAAC;AAE9C,MAAM,WAAW,qBAAqB;IACpC,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9B;AAED,UAAU,UAAU;IAClB,cAAc,CAAC,EAAE;QACf,mBAAmB,CAAC,EAAE,MAAM,CAAC;QAC7B,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,oBAAoB,CAAC,EAAE,MAAM,CAAC;QAC9B,kBAAkB,CAAC,EAAE,MAAM,CAAC;QAC5B,mBAAmB,CAAC,EAAE,MAAM,CAAC;QAC7B,aAAa,CAAC,EAAE,OAAO,CAAC;KACzB,CAAC;IACF,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AA0CD,qBAAa,iBAAiB;IAC5B,QAAQ,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,CAAC;IAC/B,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,YAAY,CAAgB;gBAExB,EAAE,EAAE,QAAQ,CAAC,QAAQ,EAAE,IAAI,EAAE,qBAAqB;IAM9D,+CAA+C;IAC/C,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM;IAM3C,wEAAwE;IACxE,WAAW,CAAC,WAAW,EAAE,MAAM,GAAG;QAAE,EAAE,EAAE,IAAI,CAAC;QAAC,IAAI,EAAE,UAAU,CAAA;KAAE,GAAG;QAAE,EAAE,EAAE,KAAK,CAAC;QAAC,MAAM,EAAE,iBAAiB,GAAG,aAAa,CAAA;KAAE;IAY3H,gEAAgE;IAChE,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG,YAAY;IAMnD,6EAA6E;IAC7E,qBAAqB,CAAC,KAAK,EAAE;QAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,GAAG,YAAY;IAkBxG,6DAA6D;IAC7D,eAAe,CAAC,GAAG,EAAE,UAAU,GAAG,IAAI,GAAG,YAAY;IA+BrD,mEAAmE;IACnE,OAAO,CAAC,wBAAwB;IA4ChC,0DAA0D;IAC1D,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,GAAG,IAAI;IAyClD,8FAA8F;IAC9F,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,kBAAkB,EAAE,MAAM,GAAG,IAAI,GAAG,YAAY;IAc3E,2EAA2E;IAC3E,WAAW,CAAC,OAAO,EAAE,KAAK,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC;IAoC7G,4DAA4D;IAC5D,YAAY,CAAC,MAAM,EAAE,oBAAoB,GAAG,YAAY;IAmBxD,4CAA4C;IAC5C,OAAO,CAAC,OAAO;IASf,8DAA8D;IAC9D,OAAO,CAAC,UAAU;IAoBlB,OAAO,CAAC,qBAAqB;IAU7B,OAAO,CAAC,eAAe;IAmBvB,OAAO,CAAC,wBAAwB;IA8BhC,OAAO,CAAC,yBAAyB;IAsBjC,OAAO,CAAC,QAAQ;CAajB"}
|
|
@@ -1,13 +1,17 @@
|
|
|
1
|
+
import Database from "better-sqlite3";
|
|
1
2
|
import { join } from "node:path";
|
|
2
|
-
import
|
|
3
|
+
import os from "node:os";
|
|
4
|
+
import { closeSync, existsSync, openSync, readFileSync, readSync, readdirSync, statSync } from "node:fs";
|
|
3
5
|
/** Freshness threshold: samples older than this are considered stale for compact displays. */
|
|
4
6
|
export const FRESHNESS_THRESHOLD_MS = 600_000; // 10 minutes per PM spec
|
|
5
7
|
export class ContextUsageStore {
|
|
6
8
|
db;
|
|
7
9
|
stateDir;
|
|
10
|
+
codexHomeDir;
|
|
8
11
|
constructor(db, opts) {
|
|
9
12
|
this.db = db;
|
|
10
13
|
this.stateDir = opts.stateDir;
|
|
14
|
+
this.codexHomeDir = opts.codexHomeDir ?? safeHomeDir();
|
|
11
15
|
}
|
|
12
16
|
/** Get the sidecar file path for a session. */
|
|
13
17
|
getSidecarPath(sessionName) {
|
|
@@ -36,6 +40,24 @@ export class ContextUsageStore {
|
|
|
36
40
|
return this.unknownUsage(result.reason);
|
|
37
41
|
return this.normalizeSample(result.data);
|
|
38
42
|
}
|
|
43
|
+
/** Read the latest Codex token_count event for a thread and normalize it. */
|
|
44
|
+
readCodexAndNormalize(input) {
|
|
45
|
+
const threadId = input.threadId?.trim();
|
|
46
|
+
if (!threadId)
|
|
47
|
+
return this.unknownUsage("no_data");
|
|
48
|
+
const thread = this.readCodexThread(threadId);
|
|
49
|
+
if (!thread?.rollout_path)
|
|
50
|
+
return this.unknownUsage("no_data");
|
|
51
|
+
const tokenEvent = this.readLatestCodexTokenCount(thread.rollout_path);
|
|
52
|
+
if (!tokenEvent)
|
|
53
|
+
return this.unknownUsage("no_data");
|
|
54
|
+
return this.normalizeCodexTokenCount({
|
|
55
|
+
event: tokenEvent,
|
|
56
|
+
sessionName: input.sessionName,
|
|
57
|
+
threadId,
|
|
58
|
+
transcriptPath: thread.rollout_path,
|
|
59
|
+
});
|
|
60
|
+
}
|
|
39
61
|
/** Normalize raw sidecar data into a ContextUsage record. */
|
|
40
62
|
normalizeSample(raw) {
|
|
41
63
|
if (!raw) {
|
|
@@ -64,6 +86,42 @@ export class ContextUsageStore {
|
|
|
64
86
|
fresh,
|
|
65
87
|
};
|
|
66
88
|
}
|
|
89
|
+
/** Normalize a Codex token_count JSONL event into ContextUsage. */
|
|
90
|
+
normalizeCodexTokenCount(input) {
|
|
91
|
+
const info = input.event.payload?.info;
|
|
92
|
+
const usage = info?.last_token_usage;
|
|
93
|
+
const contextWindowSize = info?.model_context_window;
|
|
94
|
+
if (!usage || typeof contextWindowSize !== "number" || contextWindowSize <= 0) {
|
|
95
|
+
return this.unknownUsage("parse_error");
|
|
96
|
+
}
|
|
97
|
+
const inputTokens = typeof usage.input_tokens === "number" ? usage.input_tokens : null;
|
|
98
|
+
const outputTokens = typeof usage.output_tokens === "number" ? usage.output_tokens : null;
|
|
99
|
+
const totalTokens = typeof usage.total_tokens === "number"
|
|
100
|
+
? usage.total_tokens
|
|
101
|
+
: (inputTokens ?? 0) + (outputTokens ?? 0);
|
|
102
|
+
const usedPercentage = clampPercentage(Math.round((totalTokens / contextWindowSize) * 100));
|
|
103
|
+
const remainingPercentage = clampPercentage(100 - usedPercentage);
|
|
104
|
+
const sampledAt = input.event.timestamp ?? null;
|
|
105
|
+
return {
|
|
106
|
+
availability: "known",
|
|
107
|
+
reason: null,
|
|
108
|
+
source: "codex_token_count_jsonl",
|
|
109
|
+
usedPercentage,
|
|
110
|
+
remainingPercentage,
|
|
111
|
+
contextWindowSize,
|
|
112
|
+
totalInputTokens: inputTokens,
|
|
113
|
+
totalOutputTokens: outputTokens,
|
|
114
|
+
currentUsage: this.normalizeCurrentUsage({
|
|
115
|
+
last_token_usage: usage,
|
|
116
|
+
model_context_window: contextWindowSize,
|
|
117
|
+
}),
|
|
118
|
+
transcriptPath: input.transcriptPath,
|
|
119
|
+
sessionId: input.threadId,
|
|
120
|
+
sessionName: input.sessionName,
|
|
121
|
+
sampledAt,
|
|
122
|
+
fresh: sampledAt ? this.isFresh(sampledAt) : false,
|
|
123
|
+
};
|
|
124
|
+
}
|
|
67
125
|
/** Persist a context usage record for a node. Upserts. */
|
|
68
126
|
persist(nodeId, usage) {
|
|
69
127
|
this.db.prepare(`
|
|
@@ -191,5 +249,102 @@ export class ContextUsageStore {
|
|
|
191
249
|
return String(value);
|
|
192
250
|
}
|
|
193
251
|
}
|
|
252
|
+
readCodexThread(threadId) {
|
|
253
|
+
for (const dbPath of this.resolveCodexStateDbPaths()) {
|
|
254
|
+
try {
|
|
255
|
+
const codexDb = new Database(dbPath, { readonly: true });
|
|
256
|
+
try {
|
|
257
|
+
const row = codexDb.prepare("SELECT id, rollout_path FROM threads WHERE id = ? LIMIT 1").get(threadId);
|
|
258
|
+
if (row?.rollout_path)
|
|
259
|
+
return row;
|
|
260
|
+
}
|
|
261
|
+
finally {
|
|
262
|
+
codexDb.close();
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
catch {
|
|
266
|
+
continue;
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
return null;
|
|
270
|
+
}
|
|
271
|
+
resolveCodexStateDbPaths() {
|
|
272
|
+
if (!this.codexHomeDir)
|
|
273
|
+
return [];
|
|
274
|
+
const codexDir = join(this.codexHomeDir, ".codex");
|
|
275
|
+
const discovered = [];
|
|
276
|
+
try {
|
|
277
|
+
for (const entry of readdirSync(codexDir)) {
|
|
278
|
+
const match = entry.match(/^state_(\d+)\.sqlite$/);
|
|
279
|
+
if (!match)
|
|
280
|
+
continue;
|
|
281
|
+
discovered.push({
|
|
282
|
+
version: Number(match[1]),
|
|
283
|
+
path: join(codexDir, entry),
|
|
284
|
+
});
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
catch {
|
|
288
|
+
// Best-effort only; fall back to the current common filename below.
|
|
289
|
+
}
|
|
290
|
+
if (discovered.length === 0) {
|
|
291
|
+
discovered.push({ version: 5, path: join(codexDir, "state_5.sqlite") });
|
|
292
|
+
}
|
|
293
|
+
return discovered
|
|
294
|
+
.sort((a, b) => b.version - a.version)
|
|
295
|
+
.map((entry) => entry.path)
|
|
296
|
+
.filter((path, index, paths) => paths.indexOf(path) === index)
|
|
297
|
+
.filter((path) => existsSync(path));
|
|
298
|
+
}
|
|
299
|
+
readLatestCodexTokenCount(rolloutPath) {
|
|
300
|
+
let content;
|
|
301
|
+
try {
|
|
302
|
+
content = this.readTail(rolloutPath, 4_000_000);
|
|
303
|
+
}
|
|
304
|
+
catch {
|
|
305
|
+
return null;
|
|
306
|
+
}
|
|
307
|
+
const lines = content.trimEnd().split("\n").reverse();
|
|
308
|
+
for (const line of lines) {
|
|
309
|
+
if (!line.includes("\"token_count\""))
|
|
310
|
+
continue;
|
|
311
|
+
try {
|
|
312
|
+
const parsed = JSON.parse(line);
|
|
313
|
+
if (parsed.payload?.type === "token_count")
|
|
314
|
+
return parsed;
|
|
315
|
+
}
|
|
316
|
+
catch {
|
|
317
|
+
continue;
|
|
318
|
+
}
|
|
319
|
+
}
|
|
320
|
+
return null;
|
|
321
|
+
}
|
|
322
|
+
readTail(filePath, maxBytes) {
|
|
323
|
+
const stat = statSync(filePath);
|
|
324
|
+
const start = Math.max(0, stat.size - maxBytes);
|
|
325
|
+
const length = stat.size - start;
|
|
326
|
+
const fd = openSync(filePath, "r");
|
|
327
|
+
try {
|
|
328
|
+
const buffer = Buffer.alloc(length);
|
|
329
|
+
readSync(fd, buffer, 0, length, start);
|
|
330
|
+
return buffer.toString("utf-8");
|
|
331
|
+
}
|
|
332
|
+
finally {
|
|
333
|
+
closeSync(fd);
|
|
334
|
+
}
|
|
335
|
+
}
|
|
336
|
+
}
|
|
337
|
+
function clampPercentage(value) {
|
|
338
|
+
if (!Number.isFinite(value))
|
|
339
|
+
return 0;
|
|
340
|
+
return Math.min(100, Math.max(0, value));
|
|
341
|
+
}
|
|
342
|
+
function safeHomeDir() {
|
|
343
|
+
try {
|
|
344
|
+
return os.homedir();
|
|
345
|
+
}
|
|
346
|
+
catch {
|
|
347
|
+
return null;
|
|
348
|
+
}
|
|
194
349
|
}
|
|
195
350
|
//# sourceMappingURL=context-usage-store.js.map
|