@openrig/cli 0.5.2 → 0.5.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/daemon/assets/plugins/openrig-core/.claude-plugin/plugin.json +1 -1
- package/daemon/assets/plugins/openrig-core/.codex-plugin/plugin.json +1 -1
- package/daemon/assets/plugins/openrig-core/README.md +1 -1
- package/daemon/assets/plugins/openrig-core/hooks/claude.json +36 -0
- package/daemon/assets/plugins/openrig-core/hooks/codex.json +27 -0
- package/daemon/assets/plugins/openrig-core/hooks/scripts/refocus.cjs +152 -0
- package/daemon/assets/plugins/openrig-core/skills/claude-compaction-restore/SKILL.md +35 -3
- package/daemon/assets/plugins/openrig-core/skills/claude-compaction-restore/scripts/precompact-hook.mjs +8 -95
- package/daemon/assets/plugins/openrig-core/skills/claude-compaction-restore/scripts/restore-from-jsonl.mjs +63 -20
- package/daemon/assets/plugins/openrig-core/skills/forming-an-openrig-mental-model/SKILL.md +6 -2
- package/daemon/assets/plugins/openrig-core/skills/messaging-the-human/SKILL.md +28 -2
- package/daemon/assets/plugins/openrig-core/skills/mission-slice-sop/SKILL.md +42 -52
- package/daemon/assets/plugins/openrig-core/skills/openrig-skills/SKILL.md +26 -1
- package/daemon/assets/plugins/openrig-core/skills/openrig-user/SKILL.md +7 -2
- package/daemon/assets/plugins/openrig-core/skills/orienting-to-an-inherited-seat/CHANGELOG.md +64 -0
- package/daemon/assets/plugins/openrig-core/skills/orienting-to-an-inherited-seat/SKILL.md +235 -0
- package/daemon/assets/plugins/openrig-core/skills/queue-handoff/SKILL.md +31 -1
- package/daemon/assets/plugins/openrig-core/skills/retiring-and-inheriting-a-seat/CHANGELOG.md +48 -0
- package/daemon/assets/plugins/openrig-core/skills/retiring-and-inheriting-a-seat/SKILL.md +211 -0
- package/daemon/assets/plugins/openrig-core/skills/seat-continuity-and-handover/SKILL.md +8 -0
- package/daemon/assets/plugins/openrig-core/skills/software-for-agents/SKILL.md +31 -9
- package/daemon/context-packs/skills/core/agent-starters/SKILL.md +132 -0
- package/daemon/context-packs/skills/core/agent-starters/manifest.yaml +9 -0
- package/daemon/context-packs/skills/core/agent-startup-and-context-ingestion/SKILL.md +112 -0
- package/daemon/context-packs/skills/core/agent-startup-and-context-ingestion/manifest.yaml +9 -0
- package/daemon/context-packs/skills/core/attention-queue/SKILL.md +264 -0
- package/daemon/context-packs/skills/core/attention-queue/manifest.yaml +9 -0
- package/daemon/context-packs/skills/core/cross-host-rig-commands/SKILL.md +195 -0
- package/daemon/context-packs/skills/core/cross-host-rig-commands/manifest.yaml +9 -0
- package/daemon/context-packs/skills/core/human-in-the-loop/SKILL.md +104 -0
- package/daemon/context-packs/skills/core/human-in-the-loop/manifest.yaml +9 -0
- package/daemon/context-packs/skills/core/openrig-architect/SKILL.md +378 -0
- package/daemon/context-packs/skills/core/openrig-architect/manifest.yaml +9 -0
- package/daemon/context-packs/skills/core/openrig-cmux/SKILL.md +81 -0
- package/daemon/context-packs/skills/core/openrig-cmux/manifest.yaml +9 -0
- package/daemon/context-packs/skills/core/openrig-herdr/SKILL.md +153 -0
- package/daemon/context-packs/skills/core/openrig-herdr/manifest.yaml +9 -0
- package/daemon/context-packs/skills/core/openrig-upgrade/SKILL.md +460 -0
- package/daemon/context-packs/skills/core/openrig-upgrade/manifest.yaml +9 -0
- package/daemon/context-packs/skills/core/rig-bundles-and-shareable-artifacts/SKILL.md +101 -0
- package/daemon/context-packs/skills/core/rig-bundles-and-shareable-artifacts/manifest.yaml +9 -0
- package/daemon/context-packs/skills/core/rig-lifecycle/SKILL.md +127 -0
- package/daemon/context-packs/skills/core/rig-lifecycle/manifest.yaml +9 -0
- package/daemon/context-packs/skills/core/session-source-fork/SKILL.md +160 -0
- package/daemon/context-packs/skills/core/session-source-fork/manifest.yaml +9 -0
- package/daemon/context-packs/skills/core/specification-system/SKILL.md +103 -0
- package/daemon/context-packs/skills/core/specification-system/manifest.yaml +9 -0
- package/daemon/context-packs/skills/core/topology-mutation-and-seat-management/SKILL.md +118 -0
- package/daemon/context-packs/skills/core/topology-mutation-and-seat-management/manifest.yaml +9 -0
- package/daemon/context-packs/skills/core/watchdog/SKILL.md +126 -0
- package/daemon/context-packs/skills/core/watchdog/manifest.yaml +9 -0
- package/daemon/context-packs/skills/pm/backlog-capture/SKILL.md +43 -0
- package/daemon/context-packs/skills/pm/backlog-capture/manifest.yaml +9 -0
- package/daemon/context-packs/skills/pm/context-builder/SKILL.md +87 -0
- package/daemon/context-packs/skills/pm/context-builder/manifest.yaml +9 -0
- package/daemon/context-packs/skills/pm/exec-summary/SKILL.md +84 -0
- package/daemon/context-packs/skills/pm/exec-summary/manifest.yaml +9 -0
- package/daemon/context-packs/skills/pm/office-hours/SKILL.md +129 -0
- package/daemon/context-packs/skills/pm/office-hours/manifest.yaml +9 -0
- package/daemon/context-packs/skills/pm/plan-review/SKILL.md +98 -0
- package/daemon/context-packs/skills/pm/plan-review/manifest.yaml +9 -0
- package/daemon/context-packs/skills/pm/requirements-writer/SKILL.md +113 -0
- package/daemon/context-packs/skills/pm/requirements-writer/manifest.yaml +9 -0
- package/daemon/context-packs/skills/pm/ui-mockup/SKILL.md +76 -0
- package/daemon/context-packs/skills/pm/ui-mockup/manifest.yaml +9 -0
- package/daemon/context-packs/skills/pods/development-team/SKILL.md +156 -0
- package/daemon/context-packs/skills/pods/development-team/manifest.yaml +9 -0
- package/daemon/context-packs/skills/pods/orchestration-team/SKILL.md +307 -0
- package/daemon/context-packs/skills/pods/orchestration-team/manifest.yaml +9 -0
- package/daemon/context-packs/skills/pods/oversight-team/SKILL.md +106 -0
- package/daemon/context-packs/skills/pods/oversight-team/manifest.yaml +9 -0
- package/daemon/context-packs/skills/pods/review-team/SKILL.md +213 -0
- package/daemon/context-packs/skills/pods/review-team/manifest.yaml +9 -0
- package/daemon/context-packs/skills/process/agent-browser/LOCAL-INSIGHTS.md +189 -0
- package/daemon/context-packs/skills/process/agent-browser/OPENRIG.md +40 -0
- package/daemon/context-packs/skills/process/agent-browser/SKILL.md +427 -0
- package/daemon/context-packs/skills/process/agent-browser/manifest.yaml +13 -0
- package/daemon/context-packs/skills/process/brainstorming/OPENRIG.md +48 -0
- package/daemon/context-packs/skills/process/brainstorming/SKILL.md +107 -0
- package/daemon/context-packs/skills/process/brainstorming/manifest.yaml +11 -0
- package/daemon/context-packs/skills/process/context-engineering/SKILL.md +479 -0
- package/daemon/context-packs/skills/process/context-engineering/manifest.yaml +9 -0
- package/daemon/context-packs/skills/process/dogfood/SKILL.md +225 -0
- package/daemon/context-packs/skills/process/dogfood/manifest.yaml +13 -0
- package/daemon/context-packs/skills/process/dogfood/references/issue-taxonomy.md +109 -0
- package/daemon/context-packs/skills/process/dogfood/templates/dogfood-report-template.md +53 -0
- package/daemon/context-packs/skills/process/executing-plans/OPENRIG.md +56 -0
- package/daemon/context-packs/skills/process/executing-plans/SKILL.md +94 -0
- package/daemon/context-packs/skills/process/executing-plans/manifest.yaml +11 -0
- package/daemon/context-packs/skills/process/frontend-design/LICENSE.txt +177 -0
- package/daemon/context-packs/skills/process/frontend-design/SKILL.md +50 -0
- package/daemon/context-packs/skills/process/frontend-design/manifest.yaml +11 -0
- package/daemon/context-packs/skills/process/systematic-debugging/SKILL.md +301 -0
- package/daemon/context-packs/skills/process/systematic-debugging/condition-based-waiting-example.ts +158 -0
- package/daemon/context-packs/skills/process/systematic-debugging/condition-based-waiting.md +115 -0
- package/daemon/context-packs/skills/process/systematic-debugging/defense-in-depth.md +122 -0
- package/daemon/context-packs/skills/process/systematic-debugging/find-polluter.sh +63 -0
- package/daemon/context-packs/skills/process/systematic-debugging/manifest.yaml +19 -0
- package/daemon/context-packs/skills/process/systematic-debugging/root-cause-tracing.md +169 -0
- package/daemon/context-packs/skills/process/test-driven-development/SKILL.md +385 -0
- package/daemon/context-packs/skills/process/test-driven-development/manifest.yaml +11 -0
- package/daemon/context-packs/skills/process/test-driven-development/testing-anti-patterns.md +299 -0
- package/daemon/context-packs/skills/process/using-superpowers/OPENRIG.md +48 -0
- package/daemon/context-packs/skills/process/using-superpowers/SKILL.md +106 -0
- package/daemon/context-packs/skills/process/using-superpowers/manifest.yaml +11 -0
- package/daemon/context-packs/skills/process/verification-before-completion/SKILL.md +155 -0
- package/daemon/context-packs/skills/process/verification-before-completion/manifest.yaml +9 -0
- package/daemon/context-packs/skills/process/writing-plans/OPENRIG.md +52 -0
- package/daemon/context-packs/skills/process/writing-plans/SKILL.md +126 -0
- package/daemon/context-packs/skills/process/writing-plans/manifest.yaml +11 -0
- package/daemon/context-packs/world/install/01-world-from-primitives.md +97 -0
- package/daemon/context-packs/world/install/02-permission-self-sleep.md +141 -0
- package/daemon/context-packs/world/install/03-what-this-is-for.md +86 -0
- package/daemon/context-packs/world/install/04-ontology.md +790 -0
- package/daemon/context-packs/world/install/05-harness-power-use.md +355 -0
- package/daemon/context-packs/world/install/06-a-competent-turn.md +225 -0
- package/daemon/context-packs/world/install/manifest.yaml +125 -0
- package/daemon/context-packs/world/install/reference-material.md +125 -0
- package/daemon/context-packs/world/install/what-you-can-do.md +416 -0
- package/daemon/dist/adapters/claude-code-adapter.d.ts.map +1 -1
- package/daemon/dist/adapters/claude-code-adapter.js +7 -4
- package/daemon/dist/adapters/claude-code-adapter.js.map +1 -1
- package/daemon/dist/adapters/claude-resume.js +2 -2
- package/daemon/dist/adapters/claude-resume.js.map +1 -1
- package/daemon/dist/adapters/tmux.d.ts +41 -2
- package/daemon/dist/adapters/tmux.d.ts.map +1 -1
- package/daemon/dist/adapters/tmux.js +58 -18
- package/daemon/dist/adapters/tmux.js.map +1 -1
- package/daemon/dist/adapters/yolo-mode.d.ts +18 -0
- package/daemon/dist/adapters/yolo-mode.d.ts.map +1 -1
- package/daemon/dist/adapters/yolo-mode.js +21 -0
- package/daemon/dist/adapters/yolo-mode.js.map +1 -1
- package/daemon/dist/build-info.js +3 -3
- package/daemon/dist/daemon-db-path.d.ts.map +1 -1
- package/daemon/dist/daemon-db-path.js +50 -2
- package/daemon/dist/daemon-db-path.js.map +1 -1
- package/daemon/dist/domain/codex-thread-id.d.ts +95 -0
- package/daemon/dist/domain/codex-thread-id.d.ts.map +1 -1
- package/daemon/dist/domain/codex-thread-id.js +171 -2
- package/daemon/dist/domain/codex-thread-id.js.map +1 -1
- package/daemon/dist/domain/context-packs/context-pack-types.d.ts +48 -0
- package/daemon/dist/domain/context-packs/context-pack-types.d.ts.map +1 -1
- package/daemon/dist/domain/context-packs/context-pack-types.js +8 -0
- package/daemon/dist/domain/context-packs/context-pack-types.js.map +1 -1
- package/daemon/dist/domain/context-packs/manifest-parser.d.ts.map +1 -1
- package/daemon/dist/domain/context-packs/manifest-parser.js +234 -2
- package/daemon/dist/domain/context-packs/manifest-parser.js.map +1 -1
- package/daemon/dist/domain/context-packs/probe-eval-bridge.d.ts +34 -0
- package/daemon/dist/domain/context-packs/probe-eval-bridge.d.ts.map +1 -0
- package/daemon/dist/domain/context-packs/probe-eval-bridge.js +38 -0
- package/daemon/dist/domain/context-packs/probe-eval-bridge.js.map +1 -0
- package/daemon/dist/domain/context-packs/profile-composer.d.ts +49 -0
- package/daemon/dist/domain/context-packs/profile-composer.d.ts.map +1 -0
- package/daemon/dist/domain/context-packs/profile-composer.js +125 -0
- package/daemon/dist/domain/context-packs/profile-composer.js.map +1 -0
- package/daemon/dist/domain/context-packs/profile-source-resolver.d.ts +53 -0
- package/daemon/dist/domain/context-packs/profile-source-resolver.d.ts.map +1 -0
- package/daemon/dist/domain/context-packs/profile-source-resolver.js +129 -0
- package/daemon/dist/domain/context-packs/profile-source-resolver.js.map +1 -0
- package/daemon/dist/domain/context-packs/seat-recap-store.d.ts +48 -0
- package/daemon/dist/domain/context-packs/seat-recap-store.d.ts.map +1 -0
- package/daemon/dist/domain/context-packs/seat-recap-store.js +123 -0
- package/daemon/dist/domain/context-packs/seat-recap-store.js.map +1 -0
- package/daemon/dist/domain/markdown-address.d.ts +56 -0
- package/daemon/dist/domain/markdown-address.d.ts.map +1 -0
- package/daemon/dist/domain/markdown-address.js +188 -0
- package/daemon/dist/domain/markdown-address.js.map +1 -0
- package/daemon/dist/domain/model-divergence/current-generation-record.d.ts +8 -2
- package/daemon/dist/domain/model-divergence/current-generation-record.d.ts.map +1 -1
- package/daemon/dist/domain/model-divergence/current-generation-record.js +1 -1
- package/daemon/dist/domain/model-divergence/current-generation-record.js.map +1 -1
- package/daemon/dist/domain/model-divergence/model-divergence-monitor.d.ts +33 -21
- package/daemon/dist/domain/model-divergence/model-divergence-monitor.d.ts.map +1 -1
- package/daemon/dist/domain/model-divergence/model-divergence-monitor.js +64 -55
- package/daemon/dist/domain/model-divergence/model-divergence-monitor.js.map +1 -1
- package/daemon/dist/domain/periodic-snapshot-scheduler.d.ts +4 -0
- package/daemon/dist/domain/periodic-snapshot-scheduler.d.ts.map +1 -1
- package/daemon/dist/domain/periodic-snapshot-scheduler.js +5 -1
- package/daemon/dist/domain/periodic-snapshot-scheduler.js.map +1 -1
- package/daemon/dist/domain/permission-drift-observer.d.ts.map +1 -1
- package/daemon/dist/domain/permission-drift-observer.js +6 -1
- package/daemon/dist/domain/permission-drift-observer.js.map +1 -1
- package/daemon/dist/domain/plugin-discovery-service.d.ts +16 -0
- package/daemon/dist/domain/plugin-discovery-service.d.ts.map +1 -1
- package/daemon/dist/domain/plugin-discovery-service.js +175 -1
- package/daemon/dist/domain/plugin-discovery-service.js.map +1 -1
- package/daemon/dist/domain/plugin-vendor-service.d.ts +9 -5
- package/daemon/dist/domain/plugin-vendor-service.d.ts.map +1 -1
- package/daemon/dist/domain/plugin-vendor-service.js +101 -12
- package/daemon/dist/domain/plugin-vendor-service.js.map +1 -1
- package/daemon/dist/domain/process-census.d.ts +25 -0
- package/daemon/dist/domain/process-census.d.ts.map +1 -0
- package/daemon/dist/domain/process-census.js +47 -0
- package/daemon/dist/domain/process-census.js.map +1 -0
- package/daemon/dist/domain/queue-repository.d.ts +3 -1
- package/daemon/dist/domain/queue-repository.d.ts.map +1 -1
- package/daemon/dist/domain/queue-repository.js +50 -2
- package/daemon/dist/domain/queue-repository.js.map +1 -1
- package/daemon/dist/domain/reconciler.d.ts.map +1 -1
- package/daemon/dist/domain/reconciler.js +6 -1
- package/daemon/dist/domain/reconciler.js.map +1 -1
- package/daemon/dist/domain/resume-metadata-refresher.d.ts +31 -2
- package/daemon/dist/domain/resume-metadata-refresher.d.ts.map +1 -1
- package/daemon/dist/domain/resume-metadata-refresher.js +64 -29
- package/daemon/dist/domain/resume-metadata-refresher.js.map +1 -1
- package/daemon/dist/domain/review/compose.d.ts +5 -26
- package/daemon/dist/domain/review/compose.d.ts.map +1 -1
- package/daemon/dist/domain/review/compose.js +31 -57
- package/daemon/dist/domain/review/compose.js.map +1 -1
- package/daemon/dist/domain/rig-repository.d.ts +4 -0
- package/daemon/dist/domain/rig-repository.d.ts.map +1 -1
- package/daemon/dist/domain/rig-repository.js +9 -0
- package/daemon/dist/domain/rig-repository.js.map +1 -1
- package/daemon/dist/domain/rigspec-instantiator.d.ts +13 -0
- package/daemon/dist/domain/rigspec-instantiator.d.ts.map +1 -1
- package/daemon/dist/domain/rigspec-instantiator.js +71 -0
- 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 +19 -3
- package/daemon/dist/domain/rigspec-schema.js.map +1 -1
- package/daemon/dist/domain/running-name-guard.d.ts +52 -0
- package/daemon/dist/domain/running-name-guard.d.ts.map +1 -0
- package/daemon/dist/domain/running-name-guard.js +34 -0
- package/daemon/dist/domain/running-name-guard.js.map +1 -0
- package/daemon/dist/domain/scope/logical-checkbox.d.ts +26 -0
- package/daemon/dist/domain/scope/logical-checkbox.d.ts.map +1 -0
- package/daemon/dist/domain/scope/logical-checkbox.js +65 -0
- package/daemon/dist/domain/scope/logical-checkbox.js.map +1 -0
- package/daemon/dist/domain/scope/plan-lock-artifacts.d.ts +1 -1
- package/daemon/dist/domain/scope/plan-lock-artifacts.d.ts.map +1 -1
- package/daemon/dist/domain/scope/plan-lock-artifacts.js +2 -2
- package/daemon/dist/domain/scope/plan-lock-artifacts.js.map +1 -1
- package/daemon/dist/domain/scope/scaffold-placeholder.d.ts +22 -0
- package/daemon/dist/domain/scope/scaffold-placeholder.d.ts.map +1 -1
- package/daemon/dist/domain/scope/scaffold-placeholder.js +24 -0
- package/daemon/dist/domain/scope/scaffold-placeholder.js.map +1 -1
- package/daemon/dist/domain/seat-activity-service.d.ts +1 -0
- package/daemon/dist/domain/seat-activity-service.d.ts.map +1 -1
- package/daemon/dist/domain/seat-activity-service.js +39 -23
- package/daemon/dist/domain/seat-activity-service.js.map +1 -1
- package/daemon/dist/domain/seat-handover-service.d.ts +22 -0
- package/daemon/dist/domain/seat-handover-service.d.ts.map +1 -1
- package/daemon/dist/domain/seat-handover-service.js +32 -2
- package/daemon/dist/domain/seat-handover-service.js.map +1 -1
- package/daemon/dist/domain/seat-lifecycle-service.d.ts +97 -0
- package/daemon/dist/domain/seat-lifecycle-service.d.ts.map +1 -0
- package/daemon/dist/domain/seat-lifecycle-service.js +312 -0
- package/daemon/dist/domain/seat-lifecycle-service.js.map +1 -0
- package/daemon/dist/domain/session-transport.d.ts +16 -5
- package/daemon/dist/domain/session-transport.d.ts.map +1 -1
- package/daemon/dist/domain/session-transport.js +155 -16
- package/daemon/dist/domain/session-transport.js.map +1 -1
- package/daemon/dist/domain/shell-classifier.d.ts +23 -0
- package/daemon/dist/domain/shell-classifier.d.ts.map +1 -0
- package/daemon/dist/domain/shell-classifier.js +36 -0
- package/daemon/dist/domain/shell-classifier.js.map +1 -0
- package/daemon/dist/domain/slices/slice-detail-projector.d.ts.map +1 -1
- package/daemon/dist/domain/slices/slice-detail-projector.js +10 -1
- package/daemon/dist/domain/slices/slice-detail-projector.js.map +1 -1
- package/daemon/dist/domain/spec-validation-advisory.d.ts +17 -0
- package/daemon/dist/domain/spec-validation-advisory.d.ts.map +1 -0
- package/daemon/dist/domain/spec-validation-advisory.js +38 -0
- package/daemon/dist/domain/spec-validation-advisory.js.map +1 -0
- package/daemon/dist/domain/successor-session-launcher.d.ts +7 -0
- package/daemon/dist/domain/successor-session-launcher.d.ts.map +1 -1
- package/daemon/dist/domain/successor-session-launcher.js +38 -1
- package/daemon/dist/domain/successor-session-launcher.js.map +1 -1
- package/daemon/dist/domain/topology-defaults-installer.d.ts +47 -0
- package/daemon/dist/domain/topology-defaults-installer.d.ts.map +1 -0
- package/daemon/dist/domain/topology-defaults-installer.js +92 -0
- package/daemon/dist/domain/topology-defaults-installer.js.map +1 -0
- package/daemon/dist/domain/transcript-rotation.d.ts +4 -0
- package/daemon/dist/domain/transcript-rotation.d.ts.map +1 -1
- package/daemon/dist/domain/transcript-rotation.js +61 -3
- package/daemon/dist/domain/transcript-rotation.js.map +1 -1
- package/daemon/dist/domain/transcript-store.d.ts.map +1 -1
- package/daemon/dist/domain/transcript-store.js +9 -2
- package/daemon/dist/domain/transcript-store.js.map +1 -1
- package/daemon/dist/domain/types.d.ts +39 -0
- package/daemon/dist/domain/types.d.ts.map +1 -1
- package/daemon/dist/domain/types.js.map +1 -1
- package/daemon/dist/domain/user-settings/settings-store.d.ts +10 -1
- package/daemon/dist/domain/user-settings/settings-store.d.ts.map +1 -1
- package/daemon/dist/domain/user-settings/settings-store.js +39 -0
- package/daemon/dist/domain/user-settings/settings-store.js.map +1 -1
- package/daemon/dist/routes/context-packs.d.ts.map +1 -1
- package/daemon/dist/routes/context-packs.js +205 -0
- package/daemon/dist/routes/context-packs.js.map +1 -1
- package/daemon/dist/routes/queue.d.ts.map +1 -1
- package/daemon/dist/routes/queue.js +29 -24
- package/daemon/dist/routes/queue.js.map +1 -1
- package/daemon/dist/routes/rigspec.js +20 -6
- package/daemon/dist/routes/rigspec.js.map +1 -1
- package/daemon/dist/routes/seat.d.ts.map +1 -1
- package/daemon/dist/routes/seat.js +69 -0
- package/daemon/dist/routes/seat.js.map +1 -1
- package/daemon/dist/routes/sessions.js +55 -0
- package/daemon/dist/routes/sessions.js.map +1 -1
- package/daemon/dist/routes/transport.d.ts.map +1 -1
- package/daemon/dist/routes/transport.js +52 -39
- package/daemon/dist/routes/transport.js.map +1 -1
- package/daemon/dist/routes/up.js +21 -2
- package/daemon/dist/routes/up.js.map +1 -1
- package/daemon/dist/seat-recap-store-surface.d.ts +2 -0
- package/daemon/dist/seat-recap-store-surface.d.ts.map +1 -0
- package/daemon/dist/seat-recap-store-surface.js +6 -0
- package/daemon/dist/seat-recap-store-surface.js.map +1 -0
- package/daemon/dist/startup.d.ts.map +1 -1
- package/daemon/dist/startup.js +37 -6
- package/daemon/dist/startup.js.map +1 -1
- package/daemon/docs/reference/chain-file-convention.md +115 -0
- package/daemon/docs/reference/legacy-topology-migration.md +53 -0
- package/daemon/docs/reference/refocus-channel.md +80 -0
- package/daemon/docs/reference/sdlc-conventions.md +24 -0
- package/daemon/specs/agents/shared/skills/core/attention-queue/SKILL.md +1 -1
- package/daemon/specs/agents/shared/skills/core/human-in-the-loop/SKILL.md +1 -1
- package/daemon/specs/agents/shared/skills/core/session-source-fork/SKILL.md +1 -1
- package/daemon/specs/agents/shared/skills/core/watchdog/SKILL.md +4 -4
- package/daemon/specs/agents/shared/skills/pods/development-team/SKILL.md +8 -0
- package/daemon/specs/agents/shared/skills/pods/orchestration-team/SKILL.md +72 -31
- package/daemon/specs/agents/shared/skills/pods/oversight-team/SKILL.md +106 -0
- package/daemon/specs/agents/shared/skills/process/context-engineering/SKILL.md +479 -0
- package/daemon/specs/agents/shared/skills/process/test-driven-development/SKILL.md +9 -0
- package/daemon/specs/rigs/launch/demo/project-example/README.md +25 -0
- package/daemon/specs/rigs/launch/demo/project-example/missions/improve-onboarding/SPEC.md +19 -0
- package/daemon/specs/rigs/launch/demo/project-example/missions/improve-onboarding/slices/01-shorten-first-run/PROGRESS.md +6 -0
- package/daemon/specs/rigs/launch/demo/project-example/missions/improve-onboarding/slices/01-shorten-first-run/PROOF.md +7 -0
- package/daemon/specs/rigs/launch/demo/project-example/missions/improve-onboarding/slices/01-shorten-first-run/SPEC.md +31 -0
- package/daemon/specs/rigs/preview/product-team/topology/instance/CRAFT.md +24 -0
- package/daemon/specs/rigs/preview/product-team/topology/rig/CRAFT.md +21 -0
- package/daemon/specs/rigs/preview/product-team/topology/rig/ORCHESTRATION-CRAFT.md +50 -0
- package/daemon/specs/rigs/preview/product-team/topology/seats/dev1-qa/CRAFT.md +13 -0
- package/daemon/specs/rigs/preview/product-team/topology/seats/orch1-lead/CRAFT.md +17 -0
- package/daemon/specs/rigs/preview/product-team/topology/seats/rev1-r1/CRAFT.md +17 -0
- package/daemon/specs/rigs/preview/product-team/topology/seats/rev1-r2/CRAFT.md +15 -0
- package/dist/build-info.js +3 -3
- package/dist/cli-error.js +1 -1
- package/dist/cli-error.js.map +1 -1
- package/dist/commands/broadcast.js +6 -0
- package/dist/commands/broadcast.js.map +1 -1
- package/dist/commands/config.d.ts.map +1 -1
- package/dist/commands/config.js +8 -0
- package/dist/commands/config.js.map +1 -1
- package/dist/commands/context.d.ts.map +1 -1
- package/dist/commands/context.js +363 -48
- package/dist/commands/context.js.map +1 -1
- package/dist/commands/daemon.d.ts.map +1 -1
- package/dist/commands/daemon.js +23 -2
- package/dist/commands/daemon.js.map +1 -1
- package/dist/commands/import.d.ts.map +1 -1
- package/dist/commands/import.js +10 -0
- package/dist/commands/import.js.map +1 -1
- package/dist/commands/proof.d.ts.map +1 -1
- package/dist/commands/proof.js +70 -12
- package/dist/commands/proof.js.map +1 -1
- package/dist/commands/queue.d.ts.map +1 -1
- package/dist/commands/queue.js +36 -13
- package/dist/commands/queue.js.map +1 -1
- package/dist/commands/rig.d.ts.map +1 -1
- package/dist/commands/rig.js +5 -0
- package/dist/commands/rig.js.map +1 -1
- package/dist/commands/seat.d.ts.map +1 -1
- package/dist/commands/seat.js +88 -0
- package/dist/commands/seat.js.map +1 -1
- package/dist/commands/send.d.ts.map +1 -1
- package/dist/commands/send.js +224 -20
- package/dist/commands/send.js.map +1 -1
- package/dist/commands/transcript.d.ts.map +1 -1
- package/dist/commands/transcript.js +25 -1
- package/dist/commands/transcript.js.map +1 -1
- package/dist/commands/up.d.ts.map +1 -1
- package/dist/commands/up.js +8 -0
- package/dist/commands/up.js.map +1 -1
- package/dist/commands/walk.d.ts +1 -1
- package/dist/commands/walk.d.ts.map +1 -1
- package/dist/commands/walk.js +293 -30
- package/dist/commands/walk.js.map +1 -1
- package/dist/config-store.d.ts +15 -1
- package/dist/config-store.d.ts.map +1 -1
- package/dist/config-store.js +35 -1
- package/dist/config-store.js.map +1 -1
- package/dist/lib/scope/logical-checkbox.d.ts +26 -0
- package/dist/lib/scope/logical-checkbox.d.ts.map +1 -0
- package/dist/lib/scope/logical-checkbox.js +65 -0
- package/dist/lib/scope/logical-checkbox.js.map +1 -0
- package/dist/lib/scope/scaffold-placeholder.d.ts +22 -0
- package/dist/lib/scope/scaffold-placeholder.d.ts.map +1 -1
- package/dist/lib/scope/scaffold-placeholder.js +24 -0
- package/dist/lib/scope/scaffold-placeholder.js.map +1 -1
- package/dist/lib/topology-trace.d.ts +36 -0
- package/dist/lib/topology-trace.d.ts.map +1 -0
- package/dist/lib/topology-trace.js +91 -0
- package/dist/lib/topology-trace.js.map +1 -0
- package/node_modules/@openrig/daemon/dist/adapters/claude-code-adapter.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/adapters/claude-code-adapter.js +7 -4
- package/node_modules/@openrig/daemon/dist/adapters/claude-code-adapter.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/adapters/claude-resume.js +2 -2
- package/node_modules/@openrig/daemon/dist/adapters/claude-resume.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/adapters/tmux.d.ts +41 -2
- package/node_modules/@openrig/daemon/dist/adapters/tmux.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/adapters/tmux.js +58 -18
- package/node_modules/@openrig/daemon/dist/adapters/tmux.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/adapters/yolo-mode.d.ts +18 -0
- package/node_modules/@openrig/daemon/dist/adapters/yolo-mode.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/adapters/yolo-mode.js +21 -0
- package/node_modules/@openrig/daemon/dist/adapters/yolo-mode.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/build-info.js +3 -3
- package/node_modules/@openrig/daemon/dist/daemon-db-path.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/daemon-db-path.js +50 -2
- package/node_modules/@openrig/daemon/dist/daemon-db-path.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/codex-thread-id.d.ts +95 -0
- package/node_modules/@openrig/daemon/dist/domain/codex-thread-id.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/codex-thread-id.js +171 -2
- package/node_modules/@openrig/daemon/dist/domain/codex-thread-id.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/context-packs/context-pack-types.d.ts +48 -0
- package/node_modules/@openrig/daemon/dist/domain/context-packs/context-pack-types.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/context-packs/context-pack-types.js +8 -0
- package/node_modules/@openrig/daemon/dist/domain/context-packs/context-pack-types.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/context-packs/manifest-parser.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/context-packs/manifest-parser.js +234 -2
- package/node_modules/@openrig/daemon/dist/domain/context-packs/manifest-parser.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/context-packs/probe-eval-bridge.d.ts +34 -0
- package/node_modules/@openrig/daemon/dist/domain/context-packs/probe-eval-bridge.d.ts.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/context-packs/probe-eval-bridge.js +38 -0
- package/node_modules/@openrig/daemon/dist/domain/context-packs/probe-eval-bridge.js.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/context-packs/profile-composer.d.ts +49 -0
- package/node_modules/@openrig/daemon/dist/domain/context-packs/profile-composer.d.ts.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/context-packs/profile-composer.js +125 -0
- package/node_modules/@openrig/daemon/dist/domain/context-packs/profile-composer.js.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/context-packs/profile-source-resolver.d.ts +53 -0
- package/node_modules/@openrig/daemon/dist/domain/context-packs/profile-source-resolver.d.ts.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/context-packs/profile-source-resolver.js +129 -0
- package/node_modules/@openrig/daemon/dist/domain/context-packs/profile-source-resolver.js.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/context-packs/seat-recap-store.d.ts +48 -0
- package/node_modules/@openrig/daemon/dist/domain/context-packs/seat-recap-store.d.ts.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/context-packs/seat-recap-store.js +123 -0
- package/node_modules/@openrig/daemon/dist/domain/context-packs/seat-recap-store.js.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/markdown-address.d.ts +56 -0
- package/node_modules/@openrig/daemon/dist/domain/markdown-address.d.ts.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/markdown-address.js +188 -0
- package/node_modules/@openrig/daemon/dist/domain/markdown-address.js.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/model-divergence/current-generation-record.d.ts +8 -2
- package/node_modules/@openrig/daemon/dist/domain/model-divergence/current-generation-record.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/model-divergence/current-generation-record.js +1 -1
- package/node_modules/@openrig/daemon/dist/domain/model-divergence/current-generation-record.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/model-divergence/model-divergence-monitor.d.ts +33 -21
- package/node_modules/@openrig/daemon/dist/domain/model-divergence/model-divergence-monitor.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/model-divergence/model-divergence-monitor.js +64 -55
- package/node_modules/@openrig/daemon/dist/domain/model-divergence/model-divergence-monitor.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/periodic-snapshot-scheduler.d.ts +4 -0
- package/node_modules/@openrig/daemon/dist/domain/periodic-snapshot-scheduler.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/periodic-snapshot-scheduler.js +5 -1
- package/node_modules/@openrig/daemon/dist/domain/periodic-snapshot-scheduler.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/permission-drift-observer.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/permission-drift-observer.js +6 -1
- package/node_modules/@openrig/daemon/dist/domain/permission-drift-observer.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/plugin-discovery-service.d.ts +16 -0
- package/node_modules/@openrig/daemon/dist/domain/plugin-discovery-service.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/plugin-discovery-service.js +175 -1
- package/node_modules/@openrig/daemon/dist/domain/plugin-discovery-service.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/plugin-vendor-service.d.ts +9 -5
- package/node_modules/@openrig/daemon/dist/domain/plugin-vendor-service.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/plugin-vendor-service.js +101 -12
- package/node_modules/@openrig/daemon/dist/domain/plugin-vendor-service.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/process-census.d.ts +25 -0
- package/node_modules/@openrig/daemon/dist/domain/process-census.d.ts.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/process-census.js +47 -0
- package/node_modules/@openrig/daemon/dist/domain/process-census.js.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/queue-repository.d.ts +3 -1
- package/node_modules/@openrig/daemon/dist/domain/queue-repository.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/queue-repository.js +50 -2
- package/node_modules/@openrig/daemon/dist/domain/queue-repository.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/reconciler.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/reconciler.js +6 -1
- package/node_modules/@openrig/daemon/dist/domain/reconciler.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/resume-metadata-refresher.d.ts +31 -2
- package/node_modules/@openrig/daemon/dist/domain/resume-metadata-refresher.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/resume-metadata-refresher.js +64 -29
- package/node_modules/@openrig/daemon/dist/domain/resume-metadata-refresher.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/review/compose.d.ts +5 -26
- package/node_modules/@openrig/daemon/dist/domain/review/compose.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/review/compose.js +31 -57
- package/node_modules/@openrig/daemon/dist/domain/review/compose.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/rig-repository.d.ts +4 -0
- package/node_modules/@openrig/daemon/dist/domain/rig-repository.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/rig-repository.js +9 -0
- package/node_modules/@openrig/daemon/dist/domain/rig-repository.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/rigspec-instantiator.d.ts +13 -0
- package/node_modules/@openrig/daemon/dist/domain/rigspec-instantiator.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/rigspec-instantiator.js +71 -0
- package/node_modules/@openrig/daemon/dist/domain/rigspec-instantiator.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/rigspec-schema.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/rigspec-schema.js +19 -3
- package/node_modules/@openrig/daemon/dist/domain/rigspec-schema.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/running-name-guard.d.ts +52 -0
- package/node_modules/@openrig/daemon/dist/domain/running-name-guard.d.ts.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/running-name-guard.js +34 -0
- package/node_modules/@openrig/daemon/dist/domain/running-name-guard.js.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/scope/logical-checkbox.d.ts +26 -0
- package/node_modules/@openrig/daemon/dist/domain/scope/logical-checkbox.d.ts.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/scope/logical-checkbox.js +65 -0
- package/node_modules/@openrig/daemon/dist/domain/scope/logical-checkbox.js.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/scope/plan-lock-artifacts.d.ts +1 -1
- package/node_modules/@openrig/daemon/dist/domain/scope/plan-lock-artifacts.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/scope/plan-lock-artifacts.js +2 -2
- package/node_modules/@openrig/daemon/dist/domain/scope/plan-lock-artifacts.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/scope/scaffold-placeholder.d.ts +22 -0
- package/node_modules/@openrig/daemon/dist/domain/scope/scaffold-placeholder.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/scope/scaffold-placeholder.js +24 -0
- package/node_modules/@openrig/daemon/dist/domain/scope/scaffold-placeholder.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/seat-activity-service.d.ts +1 -0
- package/node_modules/@openrig/daemon/dist/domain/seat-activity-service.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/seat-activity-service.js +39 -23
- package/node_modules/@openrig/daemon/dist/domain/seat-activity-service.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/seat-handover-service.d.ts +22 -0
- package/node_modules/@openrig/daemon/dist/domain/seat-handover-service.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/seat-handover-service.js +32 -2
- package/node_modules/@openrig/daemon/dist/domain/seat-handover-service.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/seat-lifecycle-service.d.ts +97 -0
- package/node_modules/@openrig/daemon/dist/domain/seat-lifecycle-service.d.ts.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/seat-lifecycle-service.js +312 -0
- package/node_modules/@openrig/daemon/dist/domain/seat-lifecycle-service.js.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/session-transport.d.ts +16 -5
- package/node_modules/@openrig/daemon/dist/domain/session-transport.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/session-transport.js +155 -16
- package/node_modules/@openrig/daemon/dist/domain/session-transport.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/shell-classifier.d.ts +23 -0
- package/node_modules/@openrig/daemon/dist/domain/shell-classifier.d.ts.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/shell-classifier.js +36 -0
- package/node_modules/@openrig/daemon/dist/domain/shell-classifier.js.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/slices/slice-detail-projector.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/slices/slice-detail-projector.js +10 -1
- package/node_modules/@openrig/daemon/dist/domain/slices/slice-detail-projector.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/spec-validation-advisory.d.ts +17 -0
- package/node_modules/@openrig/daemon/dist/domain/spec-validation-advisory.d.ts.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/spec-validation-advisory.js +38 -0
- package/node_modules/@openrig/daemon/dist/domain/spec-validation-advisory.js.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/successor-session-launcher.d.ts +7 -0
- package/node_modules/@openrig/daemon/dist/domain/successor-session-launcher.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/successor-session-launcher.js +38 -1
- package/node_modules/@openrig/daemon/dist/domain/successor-session-launcher.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/topology-defaults-installer.d.ts +47 -0
- package/node_modules/@openrig/daemon/dist/domain/topology-defaults-installer.d.ts.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/topology-defaults-installer.js +92 -0
- package/node_modules/@openrig/daemon/dist/domain/topology-defaults-installer.js.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/transcript-rotation.d.ts +4 -0
- package/node_modules/@openrig/daemon/dist/domain/transcript-rotation.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/transcript-rotation.js +61 -3
- package/node_modules/@openrig/daemon/dist/domain/transcript-rotation.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/transcript-store.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/transcript-store.js +9 -2
- package/node_modules/@openrig/daemon/dist/domain/transcript-store.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/types.d.ts +39 -0
- package/node_modules/@openrig/daemon/dist/domain/types.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/types.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/user-settings/settings-store.d.ts +10 -1
- package/node_modules/@openrig/daemon/dist/domain/user-settings/settings-store.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/user-settings/settings-store.js +39 -0
- package/node_modules/@openrig/daemon/dist/domain/user-settings/settings-store.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/routes/context-packs.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/routes/context-packs.js +205 -0
- package/node_modules/@openrig/daemon/dist/routes/context-packs.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/routes/queue.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/routes/queue.js +29 -24
- package/node_modules/@openrig/daemon/dist/routes/queue.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/routes/rigspec.js +20 -6
- package/node_modules/@openrig/daemon/dist/routes/rigspec.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/routes/seat.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/routes/seat.js +69 -0
- package/node_modules/@openrig/daemon/dist/routes/seat.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/routes/sessions.js +55 -0
- package/node_modules/@openrig/daemon/dist/routes/sessions.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/routes/transport.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/routes/transport.js +52 -39
- package/node_modules/@openrig/daemon/dist/routes/transport.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/routes/up.js +21 -2
- package/node_modules/@openrig/daemon/dist/routes/up.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/seat-recap-store-surface.d.ts +2 -0
- package/node_modules/@openrig/daemon/dist/seat-recap-store-surface.d.ts.map +1 -0
- package/node_modules/@openrig/daemon/dist/seat-recap-store-surface.js +6 -0
- package/node_modules/@openrig/daemon/dist/seat-recap-store-surface.js.map +1 -0
- package/node_modules/@openrig/daemon/dist/startup.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/startup.js +37 -6
- package/node_modules/@openrig/daemon/dist/startup.js.map +1 -1
- package/node_modules/@openrig/daemon/package.json +6 -1
- package/package.json +1 -1
|
@@ -1,4 +1,45 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { lstatSync, readlinkSync, realpathSync } from "node:fs";
|
|
2
|
+
import { basename, dirname, isAbsolute, join, relative, resolve, sep } from "node:path";
|
|
3
|
+
/** Resolve existing path components, including a dangling final symlink, while
|
|
4
|
+
* preserving a not-yet-created tail. SQLite paths commonly do not exist yet at
|
|
5
|
+
* first boot, so realpathSync alone cannot answer the containment question. */
|
|
6
|
+
function resolveForContainment(path, seen = new Set()) {
|
|
7
|
+
const absolute = resolve(path);
|
|
8
|
+
if (seen.has(absolute))
|
|
9
|
+
throw new Error(`symlink cycle while resolving ${path}`);
|
|
10
|
+
seen.add(absolute);
|
|
11
|
+
try {
|
|
12
|
+
return realpathSync(absolute);
|
|
13
|
+
}
|
|
14
|
+
catch (realpathError) {
|
|
15
|
+
let stat;
|
|
16
|
+
try {
|
|
17
|
+
stat = lstatSync(absolute);
|
|
18
|
+
}
|
|
19
|
+
catch (lstatError) {
|
|
20
|
+
if (realpathError.code !== "ENOENT" ||
|
|
21
|
+
lstatError.code !== "ENOENT") {
|
|
22
|
+
throw realpathError;
|
|
23
|
+
}
|
|
24
|
+
const parent = dirname(absolute);
|
|
25
|
+
return parent === absolute
|
|
26
|
+
? absolute
|
|
27
|
+
: join(resolveForContainment(parent, seen), basename(absolute));
|
|
28
|
+
}
|
|
29
|
+
if (stat.isSymbolicLink()) {
|
|
30
|
+
const target = readlinkSync(absolute);
|
|
31
|
+
return resolveForContainment(resolve(dirname(absolute), target), seen);
|
|
32
|
+
}
|
|
33
|
+
// The path exists but realpath could not establish its identity (for
|
|
34
|
+
// example EACCES or ENOTDIR). Treating that as an absent tail would turn
|
|
35
|
+
// an unverified path into authority.
|
|
36
|
+
throw realpathError;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
function isWithin(root, candidate) {
|
|
40
|
+
const rel = relative(root, candidate);
|
|
41
|
+
return rel === "" || (!isAbsolute(rel) && rel !== ".." && !rel.startsWith(`..${sep}`));
|
|
42
|
+
}
|
|
2
43
|
/**
|
|
3
44
|
* D15 — resolve the daemon's SQLite path. An explicit OPENRIG_DB / RIGGED_DB wins
|
|
4
45
|
* (the operator takes responsibility for that path); otherwise the db is anchored
|
|
@@ -14,6 +55,13 @@ export function resolveDaemonDbPath(explicitDb, openrigHome) {
|
|
|
14
55
|
if (explicitDb && explicitDb.length > 0) {
|
|
15
56
|
return explicitDb;
|
|
16
57
|
}
|
|
17
|
-
|
|
58
|
+
const dbPath = join(openrigHome, "openrig.sqlite");
|
|
59
|
+
const resolvedHome = resolveForContainment(openrigHome);
|
|
60
|
+
const resolvedDb = resolveForContainment(dbPath);
|
|
61
|
+
if (!isWithin(resolvedHome, resolvedDb)) {
|
|
62
|
+
throw new Error(`Refusing implicit database outside resolved OPENRIG_HOME: ${dbPath} resolves to ${resolvedDb}, ` +
|
|
63
|
+
`outside ${resolvedHome}. Set OPENRIG_DB explicitly to authorize a deliberate split-path configuration.`);
|
|
64
|
+
}
|
|
65
|
+
return dbPath;
|
|
18
66
|
}
|
|
19
67
|
//# sourceMappingURL=daemon-db-path.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"daemon-db-path.js","sourceRoot":"","sources":["../src/daemon-db-path.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"daemon-db-path.js","sourceRoot":"","sources":["../src/daemon-db-path.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAChE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;AAExF;;+EAE+E;AAC/E,SAAS,qBAAqB,CAAC,IAAY,EAAE,OAAO,IAAI,GAAG,EAAU;IACnE,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/B,IAAI,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,iCAAiC,IAAI,EAAE,CAAC,CAAC;IACjF,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACnB,IAAI,CAAC;QACH,OAAO,YAAY,CAAC,QAAQ,CAAC,CAAC;IAChC,CAAC;IAAC,OAAO,aAAa,EAAE,CAAC;QACvB,IAAI,IAAkC,CAAC;QACvC,IAAI,CAAC;YACH,IAAI,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;QAC7B,CAAC;QAAC,OAAO,UAAU,EAAE,CAAC;YACpB,IAAK,aAAuC,CAAC,IAAI,KAAK,QAAQ;gBACzD,UAAoC,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;gBAC5D,MAAM,aAAa,CAAC;YACtB,CAAC;YACD,MAAM,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;YACjC,OAAO,MAAM,KAAK,QAAQ;gBACxB,CAAC,CAAC,QAAQ;gBACV,CAAC,CAAC,IAAI,CAAC,qBAAqB,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC;QACpE,CAAC;QACD,IAAI,IAAI,CAAC,cAAc,EAAE,EAAE,CAAC;YAC1B,MAAM,MAAM,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAC;YACtC,OAAO,qBAAqB,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,EAAE,IAAI,CAAC,CAAC;QACzE,CAAC;QACD,qEAAqE;QACrE,yEAAyE;QACzE,qCAAqC;QACrC,MAAM,aAAa,CAAC;IACtB,CAAC;AACH,CAAC;AAED,SAAS,QAAQ,CAAC,IAAY,EAAE,SAAiB;IAC/C,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IACtC,OAAO,GAAG,KAAK,EAAE,IAAI,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,GAAG,KAAK,IAAI,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK,GAAG,EAAE,CAAC,CAAC,CAAC;AACzF,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,mBAAmB,CAAC,UAAqC,EAAE,WAAmB;IAC5F,IAAI,UAAU,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxC,OAAO,UAAU,CAAC;IACpB,CAAC;IACD,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,EAAE,gBAAgB,CAAC,CAAC;IACnD,MAAM,YAAY,GAAG,qBAAqB,CAAC,WAAW,CAAC,CAAC;IACxD,MAAM,UAAU,GAAG,qBAAqB,CAAC,MAAM,CAAC,CAAC;IACjD,IAAI,CAAC,QAAQ,CAAC,YAAY,EAAE,UAAU,CAAC,EAAE,CAAC;QACxC,MAAM,IAAI,KAAK,CACb,6DAA6D,MAAM,gBAAgB,UAAU,IAAI;YACjG,WAAW,YAAY,iFAAiF,CACzG,CAAC;IACJ,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -4,4 +4,99 @@
|
|
|
4
4
|
export type ResolveHomeDirByPid = (pid: number) => Promise<string | undefined> | string | undefined;
|
|
5
5
|
export declare function defaultResolveHomeDirByPid(pid: number): Promise<string | undefined>;
|
|
6
6
|
export declare function readCodexThreadIdFromCandidateHomes(pid: number, candidateHomes: Array<string | undefined>, exists?: (path: string) => boolean): string | undefined;
|
|
7
|
+
/**
|
|
8
|
+
* OPR.0.5.3.10 (addendum) — thread-id resolution WITHOUT the per-call PID-home
|
|
9
|
+
* subprocess. The measured amplifier: 298 `codex_thread_id.resolve_home` spans
|
|
10
|
+
* in the last 500 slow spans (mean 8.24s, max 36.72s) — a `ps eww` per pid,
|
|
11
|
+
* per attempt, per tick, when nearly every codex seat's logs live under the
|
|
12
|
+
* DEFAULT home.
|
|
13
|
+
*
|
|
14
|
+
* Order of costs:
|
|
15
|
+
* 1. DEFAULT home first — a pure file/sqlite read, ZERO subprocess. Hit = done.
|
|
16
|
+
* 2. Bounded PID-keyed cache of previously RESOLVED non-default homes — a
|
|
17
|
+
* pid's HOME does not change for the life of the process. Hit = file read.
|
|
18
|
+
* 3. Only then the subprocess resolver — and its SUCCESS is cached (bounded,
|
|
19
|
+
* FIFO eviction). A FAILED resolution is never cached: the next call may
|
|
20
|
+
* retry (a dying `ps` under load must not poison the pid).
|
|
21
|
+
*/
|
|
22
|
+
export declare class CodexThreadIdResolver {
|
|
23
|
+
private readonly opts;
|
|
24
|
+
/** Bounded (pid,identity)→home cache of SUCCESSFUL resolutions — INCLUDING
|
|
25
|
+
* the default home (a stable default-home pid with no thread log must not
|
|
26
|
+
* re-run `ps eww` every poll). KEYED BY IDENTITY (r2 round-3): a reused
|
|
27
|
+
* pid carries a different startedAt, so it structurally MISSES the retired
|
|
28
|
+
* occupant's entry — no read-time mismatch check to get wrong, and a late
|
|
29
|
+
* stale-probe completion writes only its own key, never clobbering the
|
|
30
|
+
* newer occupant's.
|
|
31
|
+
*
|
|
32
|
+
* SETTLED entries never time-expire (e91d7a94 — the expiry-herd fix): a
|
|
33
|
+
* probe that STARTED strictly after the identity's lstart second closed
|
|
34
|
+
* observed the FINAL occupant of this (pid, lstart) key — same-pid
|
|
35
|
+
* same-second reuse is impossible once the second passes, and a live
|
|
36
|
+
* process's HOME cannot change — so the answer is valid for the key's
|
|
37
|
+
* lifetime and is removed only by identity mismatch (a new key) or FIFO
|
|
38
|
+
* size eviction. Probe START time is the predicate, NOT completion time
|
|
39
|
+
* (orch-lead 22:39Z): a probe started inside the second can observe the
|
|
40
|
+
* retired occupant and complete after it. UNSETTLED entries — probe
|
|
41
|
+
* started inside the ambiguous second, unparseable identity, or
|
|
42
|
+
* identity-less callers — expire after homeTtlMs (r2-B1/W-5.3-1): the
|
|
43
|
+
* TTL is their staleness bound and the finite recovery path for the
|
|
44
|
+
* same-second collision. */
|
|
45
|
+
private readonly homeByKey;
|
|
46
|
+
/** In-flight home resolution, keyed by pid+IDENTITY (r2 round-3): a known
|
|
47
|
+
* identity must never join a probe belonging to a different or
|
|
48
|
+
* identity-less occupant — under the measured 8-36s probes a pid can be
|
|
49
|
+
* reused MID-PROBE, and pid-only coalescing handed the new occupant the
|
|
50
|
+
* retired occupant's answer before the completed-cache check could run.
|
|
51
|
+
* Same (pid, identity) still coalesces onto ONE subprocess; a failure
|
|
52
|
+
* rejects all waiters of that key and caches nothing. */
|
|
53
|
+
private readonly inFlightByKey;
|
|
54
|
+
constructor(opts?: {
|
|
55
|
+
defaultHome?: string;
|
|
56
|
+
resolveHomeDirByPid?: ResolveHomeDirByPid;
|
|
57
|
+
readFromLogs?: (pid: number, homeDir: string) => string | undefined;
|
|
58
|
+
/** Bounded cache size; oldest-inserted evicts first. Default 256. */
|
|
59
|
+
maxCachedPids?: number;
|
|
60
|
+
/** Freshness bound for UNSETTLED cache entries — identity-less
|
|
61
|
+
* callers, unparseable identities, and probes that started inside
|
|
62
|
+
* the identity's ambiguous lstart second. Past it the pid re-probes;
|
|
63
|
+
* this is the finite recovery path for the same-second collision
|
|
64
|
+
* (W-5.3-1). Settled entries never consult it. Default 60s.
|
|
65
|
+
* (The former identityHomeTtlMs tier is gone — e91d7a94: ANY
|
|
66
|
+
* periodic expiry of settled entries synchronizes an unnecessary
|
|
67
|
+
* probe herd, measured live as resolve_home +20 in 1.5s.) */
|
|
68
|
+
homeTtlMs?: number;
|
|
69
|
+
/** Injectable clock (tests). */
|
|
70
|
+
now?: () => number;
|
|
71
|
+
});
|
|
72
|
+
/**
|
|
73
|
+
* Resolve a codex thread id for `pid`. IDENTITY IS REQUIRED (S10 follow-on, r1 owed item 3): the
|
|
74
|
+
* identity's start time gates every log read, so a retired occupant's rows never resolve for a
|
|
75
|
+
* reused pid. The ungated read — the pre-round-4 class S10 eliminated, safe today only by
|
|
76
|
+
* call-graph discipline — is reachable ONLY via resolveUngatedLegacy, so a NEW identity-less
|
|
77
|
+
* call site is a COMPILE error (the review-visible pin; see the codex-thread-id test).
|
|
78
|
+
*/
|
|
79
|
+
resolve(pid: number, identity: string): Promise<string | undefined>;
|
|
80
|
+
/**
|
|
81
|
+
* EXPLICIT ungated escape hatch — reads WITHOUT the identity start-time gate (a reused pid can
|
|
82
|
+
* match a retired occupant's rows). Use ONLY for genuinely identity-less callers (tests, adoption
|
|
83
|
+
* paths that carry no census identity). Every new identity-less read must NAME this method; do
|
|
84
|
+
* not re-open resolve() to an optional identity. By construction its cache entries can never be
|
|
85
|
+
* SETTLED: it delegates with identity=undefined, so minTs is undefined, the settled predicate is
|
|
86
|
+
* false, and every entry it writes stays bounded by homeTtlMs (60s) — see the settled-permanence
|
|
87
|
+
* rule (e91d7a94) on the cache above.
|
|
88
|
+
*/
|
|
89
|
+
resolveUngatedLegacy(pid: number): Promise<string | undefined>;
|
|
90
|
+
private resolveInternal;
|
|
91
|
+
private cacheHome;
|
|
92
|
+
}
|
|
93
|
+
/** Parse `ps lstart` ("Sun Aug 23 19:30:00 2026", local time) to epoch
|
|
94
|
+
* SECONDS. The reader gates STRICTLY (`ts > startTs`, r2 round-6): lstart
|
|
95
|
+
* carries no subsecond component, so ownership of a row INSIDE the start
|
|
96
|
+
* second is undecidable — retired A can log at ts == B.startTs in the same
|
|
97
|
+
* second B reuses the pid. The ambiguous second fails CLOSED (honest
|
|
98
|
+
* INDETERMINATE; a genuinely-current same-second row resolves one poll
|
|
99
|
+
* later), rows after it resolve. Unparseable → undefined (the caller falls
|
|
100
|
+
* back to the ungated read rather than inventing a gate). */
|
|
101
|
+
export declare function lstartToMinTs(identity: string | undefined): number | undefined;
|
|
7
102
|
//# sourceMappingURL=codex-thread-id.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"codex-thread-id.d.ts","sourceRoot":"","sources":["../../src/domain/codex-thread-id.ts"],"names":[],"mappings":"AAUA;;oGAEoG;AACpG,MAAM,MAAM,mBAAmB,GAAG,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,GAAG,MAAM,GAAG,SAAS,CAAC;AAEpG,wBAAsB,0BAA0B,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAczF;AAED,wBAAgB,mCAAmC,CACjD,GAAG,EAAE,MAAM,EACX,cAAc,EAAE,KAAK,CAAC,MAAM,GAAG,SAAS,CAAC,EACzC,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,GACjC,MAAM,GAAG,SAAS,CAMpB"}
|
|
1
|
+
{"version":3,"file":"codex-thread-id.d.ts","sourceRoot":"","sources":["../../src/domain/codex-thread-id.ts"],"names":[],"mappings":"AAUA;;oGAEoG;AACpG,MAAM,MAAM,mBAAmB,GAAG,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,GAAG,MAAM,GAAG,SAAS,CAAC;AAEpG,wBAAsB,0BAA0B,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAczF;AAED,wBAAgB,mCAAmC,CACjD,GAAG,EAAE,MAAM,EACX,cAAc,EAAE,KAAK,CAAC,MAAM,GAAG,SAAS,CAAC,EACzC,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,GACjC,MAAM,GAAG,SAAS,CAMpB;AAED;;;;;;;;;;;;;;GAcG;AACH,qBAAa,qBAAqB;IAiC9B,OAAO,CAAC,QAAQ,CAAC,IAAI;IAhCvB;;;;;;;;;;;;;;;;;;;;iCAoB6B;IAC7B,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAqE;IAC/F;;;;;;8DAM0D;IAC1D,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAkD;gBAG7D,IAAI,GAAE;QACrB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,mBAAmB,CAAC,EAAE,mBAAmB,CAAC;QAC1C,YAAY,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,CAAC;QACpE,qEAAqE;QACrE,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB;;;;;;;sEAO8D;QAC9D,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,gCAAgC;QAChC,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;KACf;IAGR;;;;;;OAMG;IACG,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;IAIzE;;;;;;;;OAQG;IACG,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;YAItD,eAAe;IAgE7B,OAAO,CAAC,SAAS;CAQlB;AAkED;;;;;;;8DAO8D;AAC9D,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAO9E"}
|
|
@@ -31,6 +31,150 @@ export function readCodexThreadIdFromCandidateHomes(pid, candidateHomes, exists)
|
|
|
31
31
|
}
|
|
32
32
|
return undefined;
|
|
33
33
|
}
|
|
34
|
+
/**
|
|
35
|
+
* OPR.0.5.3.10 (addendum) — thread-id resolution WITHOUT the per-call PID-home
|
|
36
|
+
* subprocess. The measured amplifier: 298 `codex_thread_id.resolve_home` spans
|
|
37
|
+
* in the last 500 slow spans (mean 8.24s, max 36.72s) — a `ps eww` per pid,
|
|
38
|
+
* per attempt, per tick, when nearly every codex seat's logs live under the
|
|
39
|
+
* DEFAULT home.
|
|
40
|
+
*
|
|
41
|
+
* Order of costs:
|
|
42
|
+
* 1. DEFAULT home first — a pure file/sqlite read, ZERO subprocess. Hit = done.
|
|
43
|
+
* 2. Bounded PID-keyed cache of previously RESOLVED non-default homes — a
|
|
44
|
+
* pid's HOME does not change for the life of the process. Hit = file read.
|
|
45
|
+
* 3. Only then the subprocess resolver — and its SUCCESS is cached (bounded,
|
|
46
|
+
* FIFO eviction). A FAILED resolution is never cached: the next call may
|
|
47
|
+
* retry (a dying `ps` under load must not poison the pid).
|
|
48
|
+
*/
|
|
49
|
+
export class CodexThreadIdResolver {
|
|
50
|
+
opts;
|
|
51
|
+
/** Bounded (pid,identity)→home cache of SUCCESSFUL resolutions — INCLUDING
|
|
52
|
+
* the default home (a stable default-home pid with no thread log must not
|
|
53
|
+
* re-run `ps eww` every poll). KEYED BY IDENTITY (r2 round-3): a reused
|
|
54
|
+
* pid carries a different startedAt, so it structurally MISSES the retired
|
|
55
|
+
* occupant's entry — no read-time mismatch check to get wrong, and a late
|
|
56
|
+
* stale-probe completion writes only its own key, never clobbering the
|
|
57
|
+
* newer occupant's.
|
|
58
|
+
*
|
|
59
|
+
* SETTLED entries never time-expire (e91d7a94 — the expiry-herd fix): a
|
|
60
|
+
* probe that STARTED strictly after the identity's lstart second closed
|
|
61
|
+
* observed the FINAL occupant of this (pid, lstart) key — same-pid
|
|
62
|
+
* same-second reuse is impossible once the second passes, and a live
|
|
63
|
+
* process's HOME cannot change — so the answer is valid for the key's
|
|
64
|
+
* lifetime and is removed only by identity mismatch (a new key) or FIFO
|
|
65
|
+
* size eviction. Probe START time is the predicate, NOT completion time
|
|
66
|
+
* (orch-lead 22:39Z): a probe started inside the second can observe the
|
|
67
|
+
* retired occupant and complete after it. UNSETTLED entries — probe
|
|
68
|
+
* started inside the ambiguous second, unparseable identity, or
|
|
69
|
+
* identity-less callers — expire after homeTtlMs (r2-B1/W-5.3-1): the
|
|
70
|
+
* TTL is their staleness bound and the finite recovery path for the
|
|
71
|
+
* same-second collision. */
|
|
72
|
+
homeByKey = new Map();
|
|
73
|
+
/** In-flight home resolution, keyed by pid+IDENTITY (r2 round-3): a known
|
|
74
|
+
* identity must never join a probe belonging to a different or
|
|
75
|
+
* identity-less occupant — under the measured 8-36s probes a pid can be
|
|
76
|
+
* reused MID-PROBE, and pid-only coalescing handed the new occupant the
|
|
77
|
+
* retired occupant's answer before the completed-cache check could run.
|
|
78
|
+
* Same (pid, identity) still coalesces onto ONE subprocess; a failure
|
|
79
|
+
* rejects all waiters of that key and caches nothing. */
|
|
80
|
+
inFlightByKey = new Map();
|
|
81
|
+
constructor(opts = {}) {
|
|
82
|
+
this.opts = opts;
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Resolve a codex thread id for `pid`. IDENTITY IS REQUIRED (S10 follow-on, r1 owed item 3): the
|
|
86
|
+
* identity's start time gates every log read, so a retired occupant's rows never resolve for a
|
|
87
|
+
* reused pid. The ungated read — the pre-round-4 class S10 eliminated, safe today only by
|
|
88
|
+
* call-graph discipline — is reachable ONLY via resolveUngatedLegacy, so a NEW identity-less
|
|
89
|
+
* call site is a COMPILE error (the review-visible pin; see the codex-thread-id test).
|
|
90
|
+
*/
|
|
91
|
+
async resolve(pid, identity) {
|
|
92
|
+
return this.resolveInternal(pid, identity);
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* EXPLICIT ungated escape hatch — reads WITHOUT the identity start-time gate (a reused pid can
|
|
96
|
+
* match a retired occupant's rows). Use ONLY for genuinely identity-less callers (tests, adoption
|
|
97
|
+
* paths that carry no census identity). Every new identity-less read must NAME this method; do
|
|
98
|
+
* not re-open resolve() to an optional identity. By construction its cache entries can never be
|
|
99
|
+
* SETTLED: it delegates with identity=undefined, so minTs is undefined, the settled predicate is
|
|
100
|
+
* false, and every entry it writes stays bounded by homeTtlMs (60s) — see the settled-permanence
|
|
101
|
+
* rule (e91d7a94) on the cache above.
|
|
102
|
+
*/
|
|
103
|
+
async resolveUngatedLegacy(pid) {
|
|
104
|
+
return this.resolveInternal(pid, undefined);
|
|
105
|
+
}
|
|
106
|
+
async resolveInternal(pid, identity) {
|
|
107
|
+
// r2 round-4: the identity's start time gates EVERY log read — a retired
|
|
108
|
+
// occupant's rows predate the current occupant's start and never match.
|
|
109
|
+
const minTs = lstartToMinTs(identity);
|
|
110
|
+
const readFromLogs = this.opts.readFromLogs
|
|
111
|
+
?? ((p, home) => readCodexThreadIdFromLogs(p, home, undefined, minTs));
|
|
112
|
+
const defaultHome = this.opts.defaultHome ?? safeUserHomeDir() ?? os.homedir();
|
|
113
|
+
const now = this.opts.now ?? Date.now;
|
|
114
|
+
const ttl = this.opts.homeTtlMs ?? 60_000;
|
|
115
|
+
// 1. Default home: no subprocess.
|
|
116
|
+
const fromDefault = readFromLogs(pid, defaultHome);
|
|
117
|
+
if (fromDefault)
|
|
118
|
+
return fromDefault;
|
|
119
|
+
// 2. FRESH cached home for this (pid, identity): no subprocess. A reused
|
|
120
|
+
// pid carries a new identity and structurally MISSES here (r1's
|
|
121
|
+
// remedy); identity-less callers get their own TTL-bounded slot. A
|
|
122
|
+
// cached DEFAULT means the subprocess already answered "default" once
|
|
123
|
+
// — step 1 covered it.
|
|
124
|
+
const key = `${pid}|${identity ?? ""}`;
|
|
125
|
+
const cached = this.homeByKey.get(key);
|
|
126
|
+
if (cached) {
|
|
127
|
+
if (cached.settled || now() - cached.at <= ttl) {
|
|
128
|
+
return cached.home === defaultHome ? undefined : readFromLogs(pid, cached.home);
|
|
129
|
+
}
|
|
130
|
+
this.homeByKey.delete(key);
|
|
131
|
+
}
|
|
132
|
+
// 3. Subprocess resolution, coalesced by the SAME (pid, identity) key:
|
|
133
|
+
// only callers holding the same identity share a probe (r2 round-3 —
|
|
134
|
+
// under the measured 8-36s probes a pid can be reused MID-PROBE, and
|
|
135
|
+
// pid-only coalescing handed the new occupant the retired occupant's
|
|
136
|
+
// answer). A completion writes only its own key, so a late stale
|
|
137
|
+
// probe never clobbers the newer occupant's entry.
|
|
138
|
+
const inFlight = this.inFlightByKey.get(key);
|
|
139
|
+
const homePromise = inFlight ?? (() => {
|
|
140
|
+
const resolver = this.opts.resolveHomeDirByPid ?? defaultResolveHomeDirByPid;
|
|
141
|
+
// Settledness is decided by the probe's START time (orch-lead 22:39Z):
|
|
142
|
+
// only a probe started strictly AFTER the identity's lstart second
|
|
143
|
+
// closed is guaranteed to observe the final occupant of this key. A
|
|
144
|
+
// deferred probe that started inside the second may describe the
|
|
145
|
+
// retired occupant even if it completes later, so its entry keeps the
|
|
146
|
+
// short TTL. Coalesced waiters inherit the ORIGINAL probe's verdict.
|
|
147
|
+
const settled = minTs !== undefined && now() >= (minTs + 1) * 1000;
|
|
148
|
+
const p = Promise.resolve(resolver(pid)).then((home) => {
|
|
149
|
+
this.inFlightByKey.delete(key);
|
|
150
|
+
if (home)
|
|
151
|
+
this.cacheHome(key, home, settled);
|
|
152
|
+
return home;
|
|
153
|
+
}, (err) => {
|
|
154
|
+
// Honest failure: nothing cached, next call retries.
|
|
155
|
+
this.inFlightByKey.delete(key);
|
|
156
|
+
throw err;
|
|
157
|
+
});
|
|
158
|
+
this.inFlightByKey.set(key, p);
|
|
159
|
+
return p;
|
|
160
|
+
})();
|
|
161
|
+
const home = await homePromise;
|
|
162
|
+
if (!home || home === defaultHome)
|
|
163
|
+
return undefined;
|
|
164
|
+
return readFromLogs(pid, home);
|
|
165
|
+
}
|
|
166
|
+
cacheHome(key, home, settled) {
|
|
167
|
+
const max = this.opts.maxCachedPids ?? 256;
|
|
168
|
+
if (!this.homeByKey.has(key) && this.homeByKey.size >= max) {
|
|
169
|
+
const oldest = this.homeByKey.keys().next().value;
|
|
170
|
+
if (oldest !== undefined)
|
|
171
|
+
this.homeByKey.delete(oldest);
|
|
172
|
+
}
|
|
173
|
+
this.homeByKey.set(key, { home, at: (this.opts.now ?? Date.now)(), settled });
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
const _resolveRequiresIdentityPin = true;
|
|
177
|
+
void _resolveRequiresIdentityPin;
|
|
34
178
|
function uniqueHomes(candidateHomes) {
|
|
35
179
|
const homes = candidateHomes.filter((home) => Boolean(home));
|
|
36
180
|
const userHome = safeUserHomeDir();
|
|
@@ -46,7 +190,12 @@ function safeUserHomeDir() {
|
|
|
46
190
|
return undefined;
|
|
47
191
|
}
|
|
48
192
|
}
|
|
49
|
-
function readCodexThreadIdFromLogs(pid, homeDir, exists) {
|
|
193
|
+
function readCodexThreadIdFromLogs(pid, homeDir, exists, minTs) {
|
|
194
|
+
// OPR.0.5.3.10 r2 round-4 — the logs key is pid:<pid>:<opaque-uuid>, so a
|
|
195
|
+
// pid-only read can return a RETIRED occupant's row to a reused pid. When
|
|
196
|
+
// the caller knows the current occupant's start time (minTs, epoch
|
|
197
|
+
// seconds), only rows written strictly AFTER its start second are provably that occupant's. Identity-less
|
|
198
|
+
// callers keep the legacy unbounded read.
|
|
50
199
|
for (const dbPath of resolveCodexLogDbPaths(homeDir, exists)) {
|
|
51
200
|
try {
|
|
52
201
|
const db = new Database(dbPath, { readonly: true });
|
|
@@ -55,8 +204,9 @@ function readCodexThreadIdFromLogs(pid, homeDir, exists) {
|
|
|
55
204
|
FROM logs
|
|
56
205
|
WHERE process_uuid LIKE ?
|
|
57
206
|
AND thread_id IS NOT NULL
|
|
207
|
+
AND ts > ?
|
|
58
208
|
ORDER BY ts DESC, ts_nanos DESC, id DESC
|
|
59
|
-
LIMIT 1`).get(`pid:${pid}
|
|
209
|
+
LIMIT 1`).get(`pid:${pid}:%`, minTs ?? 0);
|
|
60
210
|
if (row?.thread_id) {
|
|
61
211
|
return row.thread_id;
|
|
62
212
|
}
|
|
@@ -71,6 +221,25 @@ function readCodexThreadIdFromLogs(pid, homeDir, exists) {
|
|
|
71
221
|
}
|
|
72
222
|
return undefined;
|
|
73
223
|
}
|
|
224
|
+
/** Parse `ps lstart` ("Sun Aug 23 19:30:00 2026", local time) to epoch
|
|
225
|
+
* SECONDS. The reader gates STRICTLY (`ts > startTs`, r2 round-6): lstart
|
|
226
|
+
* carries no subsecond component, so ownership of a row INSIDE the start
|
|
227
|
+
* second is undecidable — retired A can log at ts == B.startTs in the same
|
|
228
|
+
* second B reuses the pid. The ambiguous second fails CLOSED (honest
|
|
229
|
+
* INDETERMINATE; a genuinely-current same-second row resolves one poll
|
|
230
|
+
* later), rows after it resolve. Unparseable → undefined (the caller falls
|
|
231
|
+
* back to the ungated read rather than inventing a gate). */
|
|
232
|
+
export function lstartToMinTs(identity) {
|
|
233
|
+
if (!identity)
|
|
234
|
+
return undefined;
|
|
235
|
+
const m = identity.match(/^\w{3}\s+(\w{3})\s+(\d+)\s+(\d{2}:\d{2}:\d{2})\s+(\d{4})$/);
|
|
236
|
+
if (!m)
|
|
237
|
+
return undefined;
|
|
238
|
+
const parsed = Date.parse(`${m[1]} ${m[2]}, ${m[4]} ${m[3]}`);
|
|
239
|
+
if (Number.isNaN(parsed))
|
|
240
|
+
return undefined;
|
|
241
|
+
return Math.floor(parsed / 1000);
|
|
242
|
+
}
|
|
74
243
|
function resolveCodexLogDbPaths(homeDir, exists) {
|
|
75
244
|
const codexDir = nodePath.join(homeDir, ".codex");
|
|
76
245
|
const discovered = [];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"codex-thread-id.js","sourceRoot":"","sources":["../../src/domain/codex-thread-id.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,QAAQ,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AACtC,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAEnD,MAAM,aAAa,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;AAO1C,MAAM,CAAC,KAAK,UAAU,0BAA0B,CAAC,GAAW;IAC1D,IAAI,CAAC;QACH,wEAAwE;QACxE,gFAAgF;QAChF,MAAM,MAAM,GAAG,CAAC,MAAM,YAAY,CAAC,8BAA8B,EAAE,KAAK,IAAI,EAAE;YAC5E,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,aAAa,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,UAAU,CAAC,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC;YAClH,OAAO,MAAM,CAAC;QAChB,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QACX,IAAI,CAAC,MAAM;YAAE,OAAO,SAAS,CAAC;QAC9B,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC;QACpD,OAAO,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED,MAAM,UAAU,mCAAmC,CACjD,GAAW,EACX,cAAyC,EACzC,MAAkC;IAElC,KAAK,MAAM,OAAO,IAAI,WAAW,CAAC,cAAc,CAAC,EAAE,CAAC;QAClD,MAAM,QAAQ,GAAG,yBAAyB,CAAC,GAAG,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;QACjE,IAAI,QAAQ;YAAE,OAAO,QAAQ,CAAC;IAChC,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,WAAW,CAAC,cAAyC;IAC5D,MAAM,KAAK,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC,IAAI,EAAkB,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;IAC7E,MAAM,QAAQ,GAAG,eAAe,EAAE,CAAC;IACnC,IAAI,QAAQ;QAAE,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACnC,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;AAC7B,CAAC;AAED,SAAS,eAAe;IACtB,IAAI,CAAC;QACH,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC;IAC/B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED,SAAS,yBAAyB,CAChC,GAAW,EACX,OAAe,EACf,MAAkC;
|
|
1
|
+
{"version":3,"file":"codex-thread-id.js","sourceRoot":"","sources":["../../src/domain/codex-thread-id.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,6 +7,52 @@ export interface ContextPackManifestFile {
|
|
|
7
7
|
/** One-line description rendered in the review pane and bundle frame. */
|
|
8
8
|
summary?: string;
|
|
9
9
|
}
|
|
10
|
+
export declare const ATOM_TAXONOMIES: readonly ["world", "lore", "skills", "mission"];
|
|
11
|
+
export declare const ATOM_REGIONS: readonly ["identity", "ontology", "terrain", "actors", "laws", "history", "state", "affordances"];
|
|
12
|
+
export declare const ATOM_SITUATIONS: readonly ["fresh", "handover", "post-compaction"];
|
|
13
|
+
export declare const ATOM_PURPOSES: readonly ["depth", "width"];
|
|
14
|
+
export declare const ATOM_RUNTIMES: readonly ["claude", "codex", "any"];
|
|
15
|
+
export declare const ATOM_PRIORITIES: readonly ["core", "recommended", "optional"];
|
|
16
|
+
/** An install ATOM (OPR.0.5.3.5 mini-req 1): an ADDRESS plus composition
|
|
17
|
+
* metadata, never a new file — fresh/handover/post-compaction all compose
|
|
18
|
+
* addresses into the same bytes, so there is no second copy to drift
|
|
19
|
+
* (mini-req 5 by construction). Token counts are DERIVED at compose time,
|
|
20
|
+
* never stored here (volatility x consequence rule). */
|
|
21
|
+
export interface ContextPackAtom {
|
|
22
|
+
/** Stable slug — the join key for order/requires/probes. */
|
|
23
|
+
id: string;
|
|
24
|
+
/** `file` or `file#H2-slug/H3-slug` (the Atom-1 grammar); the file must be
|
|
25
|
+
* one of the manifest's declared files, and a header path requires a
|
|
26
|
+
* markdown file. */
|
|
27
|
+
address: string;
|
|
28
|
+
taxonomy: (typeof ATOM_TAXONOMIES)[number];
|
|
29
|
+
/** World-anatomy tags — enables compose-by-region (the measured
|
|
30
|
+
* post-compaction need was width: affordances + terrain). */
|
|
31
|
+
regions?: Array<(typeof ATOM_REGIONS)[number]>;
|
|
32
|
+
/** The composition algebra's selector; never empty. */
|
|
33
|
+
situations: Array<(typeof ATOM_SITUATIONS)[number]>;
|
|
34
|
+
purpose: (typeof ATOM_PURPOSES)[number];
|
|
35
|
+
/** Mini-req 3: never assume identical compaction loss. Default "any". */
|
|
36
|
+
runtime: (typeof ATOM_RUNTIMES)[number];
|
|
37
|
+
/** Position within the base walk — absorption depends on sequence. */
|
|
38
|
+
order: number;
|
|
39
|
+
/** Dependency edges; a subset profile must close over them. Declared ids
|
|
40
|
+
* only, no self-reference, no cycles. */
|
|
41
|
+
requires?: string[];
|
|
42
|
+
/** What drops FIRST when a token budget binds (mini-req 9). */
|
|
43
|
+
priority: (typeof ATOM_PRIORITIES)[number];
|
|
44
|
+
/** Mini-req 2: acceptance is CHANGED BEHAVIOR — a natural prompt plus the
|
|
45
|
+
* expected observable behavior. Q3 bridge: the shape reconciles with the
|
|
46
|
+
* harness's EvalCase — optional compilable expectedPatterns (the
|
|
47
|
+
* deterministic door leg) and a 1-5 rubric (the judged leg); `expect`
|
|
48
|
+
* stays the required prose contract. Closed key set at ingest. */
|
|
49
|
+
probe?: {
|
|
50
|
+
prompt: string;
|
|
51
|
+
expect: string;
|
|
52
|
+
expectedPatterns?: string[];
|
|
53
|
+
rubric?: string;
|
|
54
|
+
};
|
|
55
|
+
}
|
|
10
56
|
export interface ContextPackManifest {
|
|
11
57
|
name: string;
|
|
12
58
|
version: string;
|
|
@@ -16,6 +62,8 @@ export interface ContextPackManifest {
|
|
|
16
62
|
* estimate is available); the library service computes a derived
|
|
17
63
|
* `derivedEstimatedTokens` from actual file sizes for display. */
|
|
18
64
|
estimatedTokens?: number;
|
|
65
|
+
/** OPR.0.5.3.5 mini-req 1 — install atoms with composition metadata. */
|
|
66
|
+
atoms?: ContextPackAtom[];
|
|
19
67
|
}
|
|
20
68
|
export type ContextPackSourceType = "builtin" | "user_file" | "workspace";
|
|
21
69
|
/** Library-shaped record emitted by ContextPackLibraryService. */
|
|
@@ -1 +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;
|
|
1
|
+
{"version":3,"file":"context-pack-types.d.ts","sourceRoot":"","sources":["../../../src/domain/context-packs/context-pack-types.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,6 +9,14 @@
|
|
|
9
9
|
// ~/.openrig/context-packs/<name>/ (host) + workspace-local
|
|
10
10
|
// .openrig/context-packs/<name>/. NO new SQLite tables; library cache
|
|
11
11
|
// is in-memory at the daemon scope.
|
|
12
|
+
// OPR.0.5.3.5 mini-req 1 — the founder taxonomy and world anatomy the atom
|
|
13
|
+
// schema speaks (SPEC.md design context; intake DESIGN-INTAKE-ATOM-SCHEMA).
|
|
14
|
+
export const ATOM_TAXONOMIES = ["world", "lore", "skills", "mission"];
|
|
15
|
+
export const ATOM_REGIONS = ["identity", "ontology", "terrain", "actors", "laws", "history", "state", "affordances"];
|
|
16
|
+
export const ATOM_SITUATIONS = ["fresh", "handover", "post-compaction"];
|
|
17
|
+
export const ATOM_PURPOSES = ["depth", "width"];
|
|
18
|
+
export const ATOM_RUNTIMES = ["claude", "codex", "any"];
|
|
19
|
+
export const ATOM_PRIORITIES = ["core", "recommended", "optional"];
|
|
12
20
|
export class ContextPackError extends Error {
|
|
13
21
|
code;
|
|
14
22
|
details;
|
|
@@ -1 +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;
|
|
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;AAYpC,2EAA2E;AAC3E,4EAA4E;AAC5E,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,CAAU,CAAC;AAC/E,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,UAAU,EAAE,UAAU,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,aAAa,CAAU,CAAC;AAC9H,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,OAAO,EAAE,UAAU,EAAE,iBAAiB,CAAU,CAAC;AACjF,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,OAAO,EAAE,OAAO,CAAU,CAAC;AACzD,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,QAAQ,EAAE,OAAO,EAAE,KAAK,CAAU,CAAC;AACjE,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,MAAM,EAAE,aAAa,EAAE,UAAU,CAAU,CAAC;AA6F5E,MAAM,OAAO,gBAAiB,SAAQ,KAAK;IAEvB;IAsBA;IAvBlB,YACkB,IAoBQ,EACxB,OAAe,EACC,OAAiC;QAEjD,KAAK,CAAC,OAAO,CAAC,CAAC;QAxBC,SAAI,GAAJ,IAAI,CAoBI;QAER,YAAO,GAAP,OAAO,CAA0B;QAGjD,IAAI,CAAC,IAAI,GAAG,kBAAkB,CAAC;IACjC,CAAC;CACF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"manifest-parser.d.ts","sourceRoot":"","sources":["../../../src/domain/context-packs/manifest-parser.ts"],"names":[],"mappings":"AAQA,OAAO,
|
|
1
|
+
{"version":3,"file":"manifest-parser.d.ts","sourceRoot":"","sources":["../../../src/domain/context-packs/manifest-parser.ts"],"names":[],"mappings":"AAQA,OAAO,EASL,KAAK,mBAAmB,EAEzB,MAAM,yBAAyB,CAAC;AAYjC,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,mBAAmB,CA6HtF"}
|