@openrig/cli 0.5.2 → 0.5.3
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/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 +132 -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 +23 -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 +28 -1
- 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 +10 -2
- package/daemon/dist/adapters/tmux.d.ts.map +1 -1
- package/daemon/dist/adapters/tmux.js +27 -7
- 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/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/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/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/rigspec-instantiator.d.ts +4 -0
- package/daemon/dist/domain/rigspec-instantiator.d.ts.map +1 -1
- package/daemon/dist/domain/rigspec-instantiator.js +39 -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/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/session-transport.d.ts +8 -0
- package/daemon/dist/domain/session-transport.d.ts.map +1 -1
- package/daemon/dist/domain/session-transport.js +116 -0
- 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 +3 -0
- package/daemon/dist/domain/types.d.ts.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/seat.d.ts.map +1 -1
- package/daemon/dist/routes/seat.js +11 -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 +12 -3
- package/daemon/dist/routes/transport.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/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 +353 -48
- package/dist/commands/context.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/rig.d.ts.map +1 -1
- package/dist/commands/rig.js +5 -0
- package/dist/commands/rig.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/walk.d.ts.map +1 -1
- package/dist/commands/walk.js +279 -26
- 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 +10 -2
- package/node_modules/@openrig/daemon/dist/adapters/tmux.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/adapters/tmux.js +27 -7
- 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/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/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/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/rigspec-instantiator.d.ts +4 -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 +39 -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/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/session-transport.d.ts +8 -0
- package/node_modules/@openrig/daemon/dist/domain/session-transport.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/session-transport.js +116 -0
- 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 +3 -0
- package/node_modules/@openrig/daemon/dist/domain/types.d.ts.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/seat.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/routes/seat.js +11 -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 +12 -3
- package/node_modules/@openrig/daemon/dist/routes/transport.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
package/node_modules/@openrig/daemon/dist/domain/model-divergence/model-divergence-monitor.js
CHANGED
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
// registered route); human-via-Slack = NAMED DEFERRAL ("deferred: M1 not landed") until the M1
|
|
20
20
|
// gateway contract lands — no shadow path. Every channel's delivery OUTCOME is recorded on the
|
|
21
21
|
// proclamation event; an unreachable channel is a named failure/deferral, never a silence.
|
|
22
|
-
import {
|
|
22
|
+
import { CANONICAL_MODEL_PINS } from "../spec-validation-advisory.js";
|
|
23
23
|
export const SLACK_DEFERRAL_LINE = "human-via-Slack: deferred: M1 not landed";
|
|
24
24
|
/** Polls a pinned generation may stay signal-less before it is loudly named as unchecked. */
|
|
25
25
|
export const PENDING_VISIBILITY_POLLS = 10;
|
|
@@ -68,38 +68,58 @@ export class ModelDivergenceMonitor {
|
|
|
68
68
|
/** One pass over the pinned population. Returns the proclamations fired this pass (for tests). */
|
|
69
69
|
async checkOnce() {
|
|
70
70
|
const fired = [];
|
|
71
|
+
// OPR.0.5.3.10 mini-req 1 — at most ONE process census for the whole pass.
|
|
72
|
+
const cycleList = this.deps.processCensus?.cycleLister();
|
|
73
|
+
const cycle = cycleList ? { listProcesses: cycleList } : undefined;
|
|
71
74
|
for (const seat of this.deps.listPinnedSeats()) {
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
continue;
|
|
75
|
-
const read = await this.deps.readEffectiveModel(seat);
|
|
76
|
-
if (!read.ok) {
|
|
77
|
-
// PENDING, never assumed — and never invisible: past the threshold this generation is
|
|
78
|
-
// named ONCE as never-checked (r1 measured real codex rollouts whose signal sat outside
|
|
79
|
-
// the bounded read; without this line such a seat would be skipped silently forever).
|
|
80
|
-
const polls = (this.pendingPolls.get(key) ?? 0) + 1;
|
|
81
|
-
this.pendingPolls.set(key, polls);
|
|
82
|
-
this.pendingReasons.set(key, read.reason);
|
|
83
|
-
if (polls >= PENDING_VISIBILITY_POLLS && !this.pendingWarned.has(key)) {
|
|
84
|
-
this.pendingWarned.add(key);
|
|
85
|
-
this.warn(`[model-divergence] ${seat.sessionName} (pin ${seat.pinnedModel}) has NO effective-model ` +
|
|
86
|
-
`read after ${polls} polls — this seat is pinned but UNCHECKED (${read.reason}). ` +
|
|
87
|
-
`A divergence here would currently be invisible.`);
|
|
88
|
-
}
|
|
89
|
-
continue;
|
|
75
|
+
try {
|
|
76
|
+
await this.checkSeat(seat, cycle, fired);
|
|
90
77
|
}
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
78
|
+
catch (err) {
|
|
79
|
+
// Defense-in-depth (row 3f66664a): a per-seat throw must NEVER truncate the pass. At the
|
|
80
|
+
// blocked sha a single comparison throw ended the whole detector silently. Report THIS seat
|
|
81
|
+
// as a detector error, loudly, and continue — every remaining pinned seat is still checked.
|
|
82
|
+
// The seat is not settled, so a transient throw self-heals next pass and a persistent one
|
|
83
|
+
// keeps surfacing instead of silently ending the detector.
|
|
84
|
+
this.warn(`[model-divergence] check for ${seat.sessionName} (pin ${seat.pinnedModel}) THREW and was ` +
|
|
85
|
+
`skipped this pass — the remaining pinned seats are still checked: ` +
|
|
86
|
+
`${err instanceof Error ? err.message : String(err)}`);
|
|
96
87
|
}
|
|
97
|
-
const proclamation = await this.proclaim(seat, read.model);
|
|
98
|
-
this.settled.add(key);
|
|
99
|
-
fired.push(proclamation);
|
|
100
88
|
}
|
|
101
89
|
return fired;
|
|
102
90
|
}
|
|
91
|
+
/** One seat's check. Extracted so checkOnce can isolate a per-seat throw (defense-in-depth): a
|
|
92
|
+
* throw here is caught per seat and never aborts the pass. Pushes any proclamation into `fired`. */
|
|
93
|
+
async checkSeat(seat, cycle, fired) {
|
|
94
|
+
const key = `${seat.nodeId}:${seat.generation ?? seat.sessionName}`;
|
|
95
|
+
if (this.settled.has(key))
|
|
96
|
+
return;
|
|
97
|
+
const read = await this.deps.readEffectiveModel(seat, cycle);
|
|
98
|
+
if (!read.ok) {
|
|
99
|
+
// PENDING, never assumed — and never invisible: past the threshold this generation is
|
|
100
|
+
// named ONCE as never-checked (r1 measured real codex rollouts whose signal sat outside
|
|
101
|
+
// the bounded read; without this line such a seat would be skipped silently forever).
|
|
102
|
+
const polls = (this.pendingPolls.get(key) ?? 0) + 1;
|
|
103
|
+
this.pendingPolls.set(key, polls);
|
|
104
|
+
this.pendingReasons.set(key, read.reason);
|
|
105
|
+
if (polls >= PENDING_VISIBILITY_POLLS && !this.pendingWarned.has(key)) {
|
|
106
|
+
this.pendingWarned.add(key);
|
|
107
|
+
this.warn(`[model-divergence] ${seat.sessionName} (pin ${seat.pinnedModel}) has NO effective-model ` +
|
|
108
|
+
`read after ${polls} polls — this seat is pinned but UNCHECKED (${read.reason}). ` +
|
|
109
|
+
`A divergence here would currently be invisible.`);
|
|
110
|
+
}
|
|
111
|
+
return;
|
|
112
|
+
}
|
|
113
|
+
this.pendingPolls.delete(key);
|
|
114
|
+
this.pendingReasons.delete(key);
|
|
115
|
+
if (modelsMatch(seat.pinnedModel, read.model)) {
|
|
116
|
+
this.settled.add(key);
|
|
117
|
+
return;
|
|
118
|
+
}
|
|
119
|
+
const proclamation = await this.proclaim(seat, read.model);
|
|
120
|
+
this.settled.add(key);
|
|
121
|
+
fired.push(proclamation);
|
|
122
|
+
}
|
|
103
123
|
async proclaim(seat, effectiveModel) {
|
|
104
124
|
const detectedAt = (this.deps.now?.() ?? new Date()).toISOString();
|
|
105
125
|
const base = {
|
|
@@ -155,36 +175,25 @@ export class ModelDivergenceMonitor {
|
|
|
155
175
|
}
|
|
156
176
|
}
|
|
157
177
|
}
|
|
158
|
-
/** Pin comparison:
|
|
159
|
-
*
|
|
160
|
-
* reversed it to whole-token alias matching
|
|
161
|
-
*
|
|
162
|
-
*
|
|
163
|
-
*
|
|
164
|
-
* (
|
|
165
|
-
*
|
|
166
|
-
*
|
|
167
|
-
*
|
|
178
|
+
/** Pin comparison: canonicalize the PIN through the one shipped alias map, then EXACT,
|
|
179
|
+
* case-insensitive, after trimming (f7dfca0c, founder-steered). History on record: exact was
|
|
180
|
+
* ruled at build; a seat reversed it to whole-token alias matching; r2 reversed THAT back
|
|
181
|
+
* because generic token containment lets one pin bless multiple distinct models ("codex"
|
|
182
|
+
* matched gpt-5.6-codex AND gpt-5.1-codex-mini). The landed remedy is the explicit
|
|
183
|
+
* provider-aware mapping r2's ruling allowed for: CANONICAL_MODEL_PINS
|
|
184
|
+
* (spec-validation-advisory.ts) is the SINGLE mapping home — spec validation nudges pins
|
|
185
|
+
* toward canonical ids with it, and this detector canonicalizes the pinned string through the
|
|
186
|
+
* same data before comparing. Never add a second map here, and never token containment: an
|
|
187
|
+
* unknown alias or a fallback model canonicalizes to itself and still diverges. Raw
|
|
188
|
+
* pinned/effective strings travel untouched in any proclamation. */
|
|
168
189
|
export function modelsMatch(pinned, effective) {
|
|
169
190
|
const pin = pinned.trim().toLowerCase();
|
|
170
191
|
const eff = effective.trim().toLowerCase();
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
// The bridge is DEAD CODE the moment the 5.3 advisory registers its capability — runtime-gated
|
|
174
|
-
// on the behavioral sentinel, not on anyone remembering a comment (r2 round-4 HIGH-2).
|
|
175
|
-
if (SPEC_VALIDATION_CAPABILITIES.has("model-pin-canonicalization"))
|
|
176
|
-
return false;
|
|
177
|
-
return CLAUDE_ALIAS_MIGRATION_BRIDGE[pin] === eff;
|
|
192
|
+
const canonicalPin = (CANONICAL_MODEL_PINS[pin] ?? pin).toLowerCase();
|
|
193
|
+
return canonicalPin === eff;
|
|
178
194
|
}
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
* - condition 1 (removal): gated at RUNTIME on rigspec-schema's SPEC_VALIDATION_CAPABILITIES —
|
|
184
|
-
* when the 5.3 advisory registers "model-pin-canonicalization" there (its registry contract),
|
|
185
|
-
* modelsMatch stops consulting this map in code, and the pin test goes RED until the constant
|
|
186
|
-
* is deleted. The registry's own doc-comment carries the 5.3 obligation. */
|
|
187
|
-
export const CLAUDE_ALIAS_MIGRATION_BRIDGE = {
|
|
188
|
-
fable: "claude-fable-5",
|
|
189
|
-
};
|
|
195
|
+
// (The self-expiring CLAUDE_ALIAS_MIGRATION_BRIDGE and its SPEC_VALIDATION_CAPABILITIES sentinel
|
|
196
|
+
// gate completed their arc and are DELETED per the bridge's own deletion contract: the 5.3
|
|
197
|
+
// advisory landed, the bridge emptied, and f7dfca0c replaced the no-tolerance state with
|
|
198
|
+
// canonicalization through the advisory's shipped map.)
|
|
190
199
|
//# sourceMappingURL=model-divergence-monitor.js.map
|
package/node_modules/@openrig/daemon/dist/domain/model-divergence/model-divergence-monitor.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"model-divergence-monitor.js","sourceRoot":"","sources":["../../../src/domain/model-divergence/model-divergence-monitor.ts"],"names":[],"mappings":"AAAA,4FAA4F;AAC5F,EAAE;AACF,kGAAkG;AAClG,oGAAoG;AACpG,gGAAgG;AAChG,6FAA6F;AAC7F,mGAAmG;AACnG,EAAE;AACF,iGAAiG;AACjG,+FAA+F;AAC/F,gGAAgG;AAChG,iGAAiG;AACjG,iGAAiG;AACjG,oGAAoG;AACpG,EAAE;AACF,gGAAgG;AAChG,gGAAgG;AAChG,oGAAoG;AACpG,+FAA+F;AAC/F,+FAA+F;AAC/F,2FAA2F;AAE3F,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"model-divergence-monitor.js","sourceRoot":"","sources":["../../../src/domain/model-divergence/model-divergence-monitor.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,12 +3,16 @@ import type { SnapshotCapture } from "./snapshot-capture.js";
|
|
|
3
3
|
import type { SnapshotRepository } from "./snapshot-repository.js";
|
|
4
4
|
import type { SessionRegistry } from "./session-registry.js";
|
|
5
5
|
import type { ResumeMetadataRefresher } from "./resume-metadata-refresher.js";
|
|
6
|
+
import type { ProcessCensus } from "./process-census.js";
|
|
6
7
|
export interface PeriodicSnapshotSchedulerDeps {
|
|
7
8
|
db: Database.Database;
|
|
8
9
|
snapshotCapture: SnapshotCapture;
|
|
9
10
|
snapshotRepo: SnapshotRepository;
|
|
10
11
|
sessionRegistry?: SessionRegistry;
|
|
11
12
|
resumeMetadataRefresher?: ResumeMetadataRefresher;
|
|
13
|
+
/** OPR.0.5.3.10 mini-req 2 — ONE process census per tick for ALL rigs and
|
|
14
|
+
* seats (absent → the refresher's own lister, the pre-slice behavior). */
|
|
15
|
+
processCensus?: ProcessCensus;
|
|
12
16
|
}
|
|
13
17
|
export declare class PeriodicSnapshotScheduler {
|
|
14
18
|
private timer;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"periodic-snapshot-scheduler.d.ts","sourceRoot":"","sources":["../../src/domain/periodic-snapshot-scheduler.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAC3C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AACnE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAC;
|
|
1
|
+
{"version":3,"file":"periodic-snapshot-scheduler.d.ts","sourceRoot":"","sources":["../../src/domain/periodic-snapshot-scheduler.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAC3C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AACnE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAC;AAC9E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEzD,MAAM,WAAW,6BAA6B;IAC5C,EAAE,EAAE,QAAQ,CAAC,QAAQ,CAAC;IACtB,eAAe,EAAE,eAAe,CAAC;IACjC,YAAY,EAAE,kBAAkB,CAAC;IAGjC,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC,uBAAuB,CAAC,EAAE,uBAAuB,CAAC;IAClD;+EAC2E;IAC3E,aAAa,CAAC,EAAE,aAAa,CAAC;CAC/B;AAED,qBAAa,yBAAyB;IACpC,OAAO,CAAC,KAAK,CAA+C;IAC5D,OAAO,CAAC,IAAI,CAAgC;IAC5C,OAAO,CAAC,aAAa,CAAc;IACnC,OAAO,CAAC,OAAO,CAAS;gBAEZ,IAAI,EAAE,6BAA6B;IAI/C,KAAK,CAAC,UAAU,EAAE,MAAM,EAAE,aAAa,GAAE,MAAW,GAAG,IAAI;IAU3D,IAAI,IAAI,IAAI;IAOZ,IAAI,QAAQ,IAAI,OAAO,CAEtB;IAEK,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAmC3B,OAAO,CAAC,yBAAyB;CAclC"}
|
|
@@ -35,6 +35,10 @@ export class PeriodicSnapshotScheduler {
|
|
|
35
35
|
this.running = true;
|
|
36
36
|
try {
|
|
37
37
|
const runningRigs = this.getRunningNonArchivedRigs();
|
|
38
|
+
// OPR.0.5.3.10 mini-req 2 — one CYCLE-SCOPED census for the whole tick:
|
|
39
|
+
// every rig's refresh shares it, lazily (a tick with no codex discovery
|
|
40
|
+
// spawns no `ps` at all).
|
|
41
|
+
const tickListProcesses = this.deps.processCensus?.cycleLister();
|
|
38
42
|
for (const rigId of runningRigs) {
|
|
39
43
|
try {
|
|
40
44
|
// OPR.0.4.3.20 FR-4 — refresh live tokens before serialize, in its OWN
|
|
@@ -44,7 +48,7 @@ export class PeriodicSnapshotScheduler {
|
|
|
44
48
|
try {
|
|
45
49
|
// fillNullOnly: a routine snapshot refresh fills null tokens but NEVER
|
|
46
50
|
// clears a present one (rev1-r2 fix — keep stale-present for FR-6).
|
|
47
|
-
await this.deps.resumeMetadataRefresher.refresh(this.deps.sessionRegistry.getLatestLiveSessions(rigId), { fillNullOnly: true });
|
|
51
|
+
await this.deps.resumeMetadataRefresher.refresh(this.deps.sessionRegistry.getLatestLiveSessions(rigId), { fillNullOnly: true, ...(tickListProcesses ? { listProcesses: tickListProcesses } : {}) });
|
|
48
52
|
}
|
|
49
53
|
catch { /* best-effort — the snapshot still writes below */ }
|
|
50
54
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"periodic-snapshot-scheduler.js","sourceRoot":"","sources":["../../src/domain/periodic-snapshot-scheduler.ts"],"names":[],"mappings":"AAAA,qEAAqE;AACrE,sEAAsE;AACtE,kDAAkD;
|
|
1
|
+
{"version":3,"file":"periodic-snapshot-scheduler.js","sourceRoot":"","sources":["../../src/domain/periodic-snapshot-scheduler.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"permission-drift-observer.d.ts","sourceRoot":"","sources":["../../src/domain/permission-drift-observer.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAE3C,OAAO,EAGL,KAAK,yBAAyB,EAC9B,KAAK,iBAAiB,EACvB,MAAM,uBAAuB,CAAC;AAE/B,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,yBAAyB,GAAG,IAAI,CAAC;CAC5D;AA2BD,yEAAyE;AACzE,qBAAa,yBAAyB;IAMlC,OAAO,CAAC,QAAQ,CAAC,IAAI;IACrB,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,GAAG;IAPtB,OAAO,CAAC,KAAK,CAAyB;IACtC,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,QAAQ,CAAK;gBAGF,IAAI,GAAE,MAAM,OAAO,CAAC,MAAM,EAAE,GAAG,IAAI,CAA6B,EAChE,KAAK,SAAS,EACd,GAAG,GAAE,MAAM,MAAiB;IAG/C,IAAI,IAAI,IAAI;IAYZ,IAAI,IAAI,MAAM,EAAE,GAAG,IAAI;CAIxB;AAED,KAAK,UAAU,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;AAoBxD,qFAAqF;AACrF,qBAAa,uBAAwB,YAAW,qBAAqB;IAMjE,OAAO,CAAC,QAAQ,CAAC,KAAK;IALxB,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAgC;IAC7D,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAoB;IACvC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAa;gBAGf,KAAK,EAAE;QACtB,EAAE,EAAE,QAAQ,CAAC,QAAQ,CAAC;QACtB,EAAE,CAAC,EAAE,iBAAiB,CAAC;QACvB,GAAG,CAAC,EAAE,MAAM,IAAI,CAAC;QACjB,eAAe,CAAC,EAAE,yBAAyB,CAAC;QAC5C,UAAU,CAAC,EAAE,UAAU,CAAC;KACzB;
|
|
1
|
+
{"version":3,"file":"permission-drift-observer.d.ts","sourceRoot":"","sources":["../../src/domain/permission-drift-observer.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAE3C,OAAO,EAGL,KAAK,yBAAyB,EAC9B,KAAK,iBAAiB,EACvB,MAAM,uBAAuB,CAAC;AAE/B,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,yBAAyB,GAAG,IAAI,CAAC;CAC5D;AA2BD,yEAAyE;AACzE,qBAAa,yBAAyB;IAMlC,OAAO,CAAC,QAAQ,CAAC,IAAI;IACrB,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,GAAG;IAPtB,OAAO,CAAC,KAAK,CAAyB;IACtC,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,QAAQ,CAAK;gBAGF,IAAI,GAAE,MAAM,OAAO,CAAC,MAAM,EAAE,GAAG,IAAI,CAA6B,EAChE,KAAK,SAAS,EACd,GAAG,GAAE,MAAM,MAAiB;IAG/C,IAAI,IAAI,IAAI;IAYZ,IAAI,IAAI,MAAM,EAAE,GAAG,IAAI;CAIxB;AAED,KAAK,UAAU,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;AAoBxD,qFAAqF;AACrF,qBAAa,uBAAwB,YAAW,qBAAqB;IAMjE,OAAO,CAAC,QAAQ,CAAC,KAAK;IALxB,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAgC;IAC7D,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAoB;IACvC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAa;gBAGf,KAAK,EAAE;QACtB,EAAE,EAAE,QAAQ,CAAC,QAAQ,CAAC;QACtB,EAAE,CAAC,EAAE,iBAAiB,CAAC;QACvB,GAAG,CAAC,EAAE,MAAM,IAAI,CAAC;QACjB,eAAe,CAAC,EAAE,yBAAyB,CAAC;QAC5C,UAAU,CAAC,EAAE,UAAU,CAAC;KACzB;IAcH,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,yBAAyB,GAAG,IAAI;CAc3D"}
|
|
@@ -87,8 +87,13 @@ export class PermissionDriftObserver {
|
|
|
87
87
|
constructor(input) {
|
|
88
88
|
this.input = input;
|
|
89
89
|
this.observations = new AppliedLaunchObservationStore(input.db);
|
|
90
|
+
// Hermeticity (hotfix qitem-20260822230440-da0d2ad6 FIX 2): construction no
|
|
91
|
+
// longer eagerly warms the mode cache — `read()` self-warms (see the cache),
|
|
92
|
+
// so the eager call added nothing but an execFile("claude","--help") from
|
|
93
|
+
// every constructed-but-unconsulted observer (the daemon test suite built
|
|
94
|
+
// ~72 such apps per run). The production daemon keeps its boot-time warm:
|
|
95
|
+
// startup.ts constructs the observer with an explicitly warmed cache.
|
|
90
96
|
const permissionModes = input.permissionModes ?? new ClaudePermissionModeCache();
|
|
91
|
-
permissionModes.warm();
|
|
92
97
|
this.fs = input.fs ?? productionFs(permissionModes, input.accessSync ?? ((path, mode) => fs.accessSync(path, mode)));
|
|
93
98
|
this.now = input.now;
|
|
94
99
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"permission-drift-observer.js","sourceRoot":"","sources":["../../src/domain/permission-drift-observer.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"permission-drift-observer.js","sourceRoot":"","sources":["../../src/domain/permission-drift-observer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { ProcessRow } from "./model-divergence/current-generation-record.js";
|
|
2
|
+
export interface ProcessCensusOpts {
|
|
3
|
+
/** The underlying enumeration (default: the shared `ps -Ao` lister). */
|
|
4
|
+
list?: () => Promise<ProcessRow[]>;
|
|
5
|
+
/** Reuse window for a successful census. Default 2000ms. */
|
|
6
|
+
freshnessMs?: number;
|
|
7
|
+
/** Injectable clock (tests). */
|
|
8
|
+
now?: () => number;
|
|
9
|
+
}
|
|
10
|
+
export declare class ProcessCensus {
|
|
11
|
+
private readonly listFn;
|
|
12
|
+
private readonly freshnessMs;
|
|
13
|
+
private readonly now;
|
|
14
|
+
private inFlight;
|
|
15
|
+
private lastRows;
|
|
16
|
+
private lastAt;
|
|
17
|
+
constructor(opts?: ProcessCensusOpts);
|
|
18
|
+
list(): Promise<ProcessRow[]>;
|
|
19
|
+
/** A CYCLE-SCOPED lister: at most one census underneath for the closure's
|
|
20
|
+
* lifetime, lazily fetched (a cycle with nothing to read spawns nothing).
|
|
21
|
+
* This is the "at most one per poll/tick" guarantee (mini-reqs 1-2) —
|
|
22
|
+
* stronger than the freshness window, which a slow cycle could outlive. */
|
|
23
|
+
cycleLister(): () => Promise<ProcessRow[]>;
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=process-census.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"process-census.d.ts","sourceRoot":"","sources":["../../src/domain/process-census.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iDAAiD,CAAC;AAElF,MAAM,WAAW,iBAAiB;IAChC,wEAAwE;IACxE,IAAI,CAAC,EAAE,MAAM,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC;IACnC,4DAA4D;IAC5D,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,gCAAgC;IAChC,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;CACpB;AAED,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA8B;IACrD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAe;IACnC,OAAO,CAAC,QAAQ,CAAsC;IACtD,OAAO,CAAC,QAAQ,CAA6B;IAC7C,OAAO,CAAC,MAAM,CAAa;gBAEf,IAAI,GAAE,iBAAsB;IAMlC,IAAI,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;IAqBnC;;;gFAG4E;IAC5E,WAAW,IAAI,MAAM,OAAO,CAAC,UAAU,EAAE,CAAC;CAI3C"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
export class ProcessCensus {
|
|
2
|
+
listFn;
|
|
3
|
+
freshnessMs;
|
|
4
|
+
now;
|
|
5
|
+
inFlight = null;
|
|
6
|
+
lastRows = null;
|
|
7
|
+
lastAt = -Infinity;
|
|
8
|
+
constructor(opts = {}) {
|
|
9
|
+
this.listFn = opts.list ?? defaultCensusList;
|
|
10
|
+
this.freshnessMs = opts.freshnessMs ?? 2_000;
|
|
11
|
+
this.now = opts.now ?? Date.now;
|
|
12
|
+
}
|
|
13
|
+
async list() {
|
|
14
|
+
if (this.lastRows && this.now() - this.lastAt <= this.freshnessMs) {
|
|
15
|
+
return this.lastRows;
|
|
16
|
+
}
|
|
17
|
+
if (this.inFlight)
|
|
18
|
+
return this.inFlight;
|
|
19
|
+
this.inFlight = this.listFn().then((rows) => {
|
|
20
|
+
this.lastRows = rows;
|
|
21
|
+
this.lastAt = this.now();
|
|
22
|
+
this.inFlight = null;
|
|
23
|
+
return rows;
|
|
24
|
+
}, (err) => {
|
|
25
|
+
// Honest failure: nothing cached, next call retries.
|
|
26
|
+
this.inFlight = null;
|
|
27
|
+
throw err;
|
|
28
|
+
});
|
|
29
|
+
return this.inFlight;
|
|
30
|
+
}
|
|
31
|
+
/** A CYCLE-SCOPED lister: at most one census underneath for the closure's
|
|
32
|
+
* lifetime, lazily fetched (a cycle with nothing to read spawns nothing).
|
|
33
|
+
* This is the "at most one per poll/tick" guarantee (mini-reqs 1-2) —
|
|
34
|
+
* stronger than the freshness window, which a slow cycle could outlive. */
|
|
35
|
+
cycleLister() {
|
|
36
|
+
let cycle = null;
|
|
37
|
+
return () => (cycle ??= this.list());
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
async function defaultCensusList() {
|
|
41
|
+
// r2-B2: the STRICT lister — a failed `ps` must REJECT here so the census's
|
|
42
|
+
// honest-failure path is reachable in production (the lenient variant's []
|
|
43
|
+
// would have been cached as an empty SUCCESS for the freshness window).
|
|
44
|
+
const { defaultListProcessesStrict } = await import("./resume-metadata-refresher.js");
|
|
45
|
+
return defaultListProcessesStrict();
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=process-census.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"process-census.js","sourceRoot":"","sources":["../../src/domain/process-census.ts"],"names":[],"mappings":"AA2BA,MAAM,OAAO,aAAa;IACP,MAAM,CAA8B;IACpC,WAAW,CAAS;IACpB,GAAG,CAAe;IAC3B,QAAQ,GAAiC,IAAI,CAAC;IAC9C,QAAQ,GAAwB,IAAI,CAAC;IACrC,MAAM,GAAG,CAAC,QAAQ,CAAC;IAE3B,YAAY,OAA0B,EAAE;QACtC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,IAAI,IAAI,iBAAiB,CAAC;QAC7C,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,IAAI,KAAK,CAAC;QAC7C,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC;IAClC,CAAC;IAED,KAAK,CAAC,IAAI;QACR,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YAClE,OAAO,IAAI,CAAC,QAAQ,CAAC;QACvB,CAAC;QACD,IAAI,IAAI,CAAC,QAAQ;YAAE,OAAO,IAAI,CAAC,QAAQ,CAAC;QACxC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,CAChC,CAAC,IAAI,EAAE,EAAE;YACP,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;YACrB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YACzB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;YACrB,OAAO,IAAI,CAAC;QACd,CAAC,EACD,CAAC,GAAG,EAAE,EAAE;YACN,qDAAqD;YACrD,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;YACrB,MAAM,GAAG,CAAC;QACZ,CAAC,CACF,CAAC;QACF,OAAO,IAAI,CAAC,QAAQ,CAAC;IACvB,CAAC;IAED;;;gFAG4E;IAC5E,WAAW;QACT,IAAI,KAAK,GAAiC,IAAI,CAAC;QAC/C,OAAO,GAAG,EAAE,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;IACvC,CAAC;CACF;AAED,KAAK,UAAU,iBAAiB;IAC9B,4EAA4E;IAC5E,2EAA2E;IAC3E,wEAAwE;IACxE,MAAM,EAAE,0BAA0B,EAAE,GAAG,MAAM,MAAM,CAAC,gCAAgC,CAAC,CAAC;IACtF,OAAO,0BAA0B,EAAE,CAAC;AACtC,CAAC"}
|
|
@@ -21,7 +21,7 @@ interface ResumeMetadataRefresherDeps {
|
|
|
21
21
|
ppid: number;
|
|
22
22
|
command: string;
|
|
23
23
|
}>>;
|
|
24
|
-
readCodexThreadIdByPid?: (pid: number) => Promise<string | undefined> | string | undefined;
|
|
24
|
+
readCodexThreadIdByPid?: (pid: number, identity?: string) => Promise<string | undefined> | string | undefined;
|
|
25
25
|
probeClaudeResume?: (sessionName: string, resumeToken: string, cwd?: string | null) => Promise<"resumable" | "not_resumable" | "inconclusive">;
|
|
26
26
|
resolveHomeDirByPid?: ResolveHomeDirByPid;
|
|
27
27
|
sleep?: (ms: number) => Promise<void>;
|
|
@@ -75,12 +75,29 @@ export declare class ResumeMetadataRefresher {
|
|
|
75
75
|
*/
|
|
76
76
|
refresh(sessions: ResumeRefreshSession[], opts?: {
|
|
77
77
|
fillNullOnly?: boolean;
|
|
78
|
+
/** OPR.0.5.3.10 mini-req 2 — a CYCLE-SCOPED process lister (one census for
|
|
79
|
+
* the whole tick, all rigs and seats). Absent → the instance lister. */
|
|
80
|
+
listProcesses?: () => Promise<Array<{
|
|
81
|
+
pid: number;
|
|
82
|
+
ppid: number;
|
|
83
|
+
command: string;
|
|
84
|
+
}>>;
|
|
78
85
|
}): Promise<void>;
|
|
79
86
|
/** Best-effort derive a Codex thread id from live pane state (getPanePid →
|
|
80
87
|
* codex descendant pids → pid-keyed logs sqlite). Async, returns undefined
|
|
81
88
|
* on timeout/absence. Public for reuse by adoption-boundary capture
|
|
82
89
|
* (OPR.0.4.3.20 FR-3) — no behavior change to the teardown-path scrape. */
|
|
83
|
-
captureCodexThreadId(sessionTarget: string
|
|
90
|
+
captureCodexThreadId(sessionTarget: string, opts?: {
|
|
91
|
+
/** OPR.0.5.3.10 mini-req 2 — snapshot refresh passes 1: the retry loop is
|
|
92
|
+
* for the adoption boundary racing a booting codex, never a recurring tick. */
|
|
93
|
+
attempts?: number;
|
|
94
|
+
/** Cycle-scoped census override (one `ps` per tick, all seats). */
|
|
95
|
+
listProcesses?: () => Promise<Array<{
|
|
96
|
+
pid: number;
|
|
97
|
+
ppid: number;
|
|
98
|
+
command: string;
|
|
99
|
+
}>>;
|
|
100
|
+
}): Promise<string | undefined>;
|
|
84
101
|
private defaultProbeClaudeResume;
|
|
85
102
|
private waitForProbeShellReady;
|
|
86
103
|
}
|
|
@@ -89,5 +106,17 @@ export declare function defaultListProcesses(): Promise<Array<{
|
|
|
89
106
|
ppid: number;
|
|
90
107
|
command: string;
|
|
91
108
|
}>>;
|
|
109
|
+
/** OPR.0.5.3.10 r2-B2 — the STRICT production lister: a failed `ps` spawn
|
|
110
|
+
* REJECTS instead of degrading to []. This is the census's default —
|
|
111
|
+
* through the lenient variant above, an enumeration failure became a CACHED
|
|
112
|
+
* empty SUCCESS for the whole freshness window (r2's discriminator: 0 rows
|
|
113
|
+
* cached while 520 were live). The lenient variant keeps its contract for
|
|
114
|
+
* the direct per-call consumers that want best-effort. */
|
|
115
|
+
export declare function defaultListProcessesStrict(): Promise<Array<{
|
|
116
|
+
pid: number;
|
|
117
|
+
ppid: number;
|
|
118
|
+
command: string;
|
|
119
|
+
startedAt: string;
|
|
120
|
+
}>>;
|
|
92
121
|
export {};
|
|
93
122
|
//# sourceMappingURL=resume-metadata-refresher.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resume-metadata-refresher.d.ts","sourceRoot":"","sources":["../../src/domain/resume-metadata-refresher.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,
|
|
1
|
+
{"version":3,"file":"resume-metadata-refresher.d.ts","sourceRoot":"","sources":["../../src/domain/resume-metadata-refresher.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,7 +2,7 @@ import os from "node:os";
|
|
|
2
2
|
import nodePath from "node:path";
|
|
3
3
|
import { execFile } from "node:child_process";
|
|
4
4
|
import { promisify } from "node:util";
|
|
5
|
-
import { defaultResolveHomeDirByPid, readCodexThreadIdFromCandidateHomes, } from "./codex-thread-id.js";
|
|
5
|
+
import { CodexThreadIdResolver, defaultResolveHomeDirByPid, readCodexThreadIdFromCandidateHomes, } from "./codex-thread-id.js";
|
|
6
6
|
import { assessNativeResumeProbe, buildNativeResumeCommand, isProbeShellReady, } from "./native-resume-probe.js";
|
|
7
7
|
import { runAsyncSite } from "./sync-site-wrap.js";
|
|
8
8
|
const execFileAsync = promisify(execFile);
|
|
@@ -21,7 +21,18 @@ export class ResumeMetadataRefresher {
|
|
|
21
21
|
this.tmuxAdapter = deps.tmuxAdapter;
|
|
22
22
|
this.listProcesses = deps.listProcesses ?? defaultListProcesses;
|
|
23
23
|
this.resolveHomeDirByPid = deps.resolveHomeDirByPid ?? defaultResolveHomeDirByPid;
|
|
24
|
-
|
|
24
|
+
// OPR.0.5.3.10 (addendum): the default thread-id read goes default-home-first
|
|
25
|
+
// with bounded PID-home caching — zero `ps eww` for the common case (298
|
|
26
|
+
// resolve_home spans, mean 8.24s, in one live slow-span sample). An injected
|
|
27
|
+
// readCodexThreadIdByPid (tests, adoption paths) is untouched.
|
|
28
|
+
const threadIdResolver = new CodexThreadIdResolver({
|
|
29
|
+
defaultHome: deps.homeDir ?? os.homedir(),
|
|
30
|
+
resolveHomeDirByPid: this.resolveHomeDirByPid,
|
|
31
|
+
});
|
|
32
|
+
// S10 follow-on: identity is REQUIRED on resolve(); an identity-less read routes EXPLICITLY
|
|
33
|
+
// through the named ungated escape hatch — never a silent fallback (r1 owed item 3).
|
|
34
|
+
this.readCodexThreadIdByPid = deps.readCodexThreadIdByPid
|
|
35
|
+
?? ((pid, identity) => identity === undefined ? threadIdResolver.resolveUngatedLegacy(pid) : threadIdResolver.resolve(pid, identity));
|
|
25
36
|
this.probeClaudeResume = deps.probeClaudeResume ?? ((sessionName, resumeToken, cwd) => this.defaultProbeClaudeResume(sessionName, resumeToken, cwd));
|
|
26
37
|
this.sleep = deps.sleep ?? ((ms) => new Promise((resolve) => setTimeout(resolve, ms)));
|
|
27
38
|
this.homeDir = deps.homeDir ?? os.homedir();
|
|
@@ -53,6 +64,10 @@ export class ResumeMetadataRefresher {
|
|
|
53
64
|
*/
|
|
54
65
|
async refresh(sessions, opts) {
|
|
55
66
|
const fillNullOnly = opts?.fillNullOnly === true;
|
|
67
|
+
// Snapshot-time discovery is SINGLE-ATTEMPT (mini-req 2): the 8-attempt
|
|
68
|
+
// 250ms-sleep loop exists for the adoption boundary racing a booting codex;
|
|
69
|
+
// on a recurring tick it multiplied `ps` spawns per seat, forever.
|
|
70
|
+
const captureOpts = { attempts: fillNullOnly ? 1 : undefined, listProcesses: opts?.listProcesses };
|
|
56
71
|
for (const session of sessions) {
|
|
57
72
|
if (session.runtime === "codex") {
|
|
58
73
|
if (session.resumeToken) {
|
|
@@ -62,7 +77,7 @@ export class ResumeMetadataRefresher {
|
|
|
62
77
|
// SAME pure-read helper FR-3 uses (getPanePid → pid-keyed logs; NO probe/spawn,
|
|
63
78
|
// NO `claude --resume`, NO launch) and refresh freshness ONLY on an EXACT match.
|
|
64
79
|
if (fillNullOnly) {
|
|
65
|
-
const derived = await this.captureCodexThreadId(session.sessionName);
|
|
80
|
+
const derived = await this.captureCodexThreadId(session.sessionName, captureOpts);
|
|
66
81
|
if (derived && derived === session.resumeToken) {
|
|
67
82
|
// Present + matching = genuine positive evidence; stamp freshness via the
|
|
68
83
|
// FR-6 marker (never updateResumeToken → no token/provenance clobber).
|
|
@@ -73,7 +88,7 @@ export class ResumeMetadataRefresher {
|
|
|
73
88
|
}
|
|
74
89
|
continue;
|
|
75
90
|
}
|
|
76
|
-
const threadId = await this.captureCodexThreadId(session.sessionName);
|
|
91
|
+
const threadId = await this.captureCodexThreadId(session.sessionName, captureOpts);
|
|
77
92
|
if (threadId) {
|
|
78
93
|
this.sessionRegistry.updateResumeToken(session.sessionId, "codex_id", threadId, "scrape");
|
|
79
94
|
}
|
|
@@ -130,20 +145,26 @@ export class ResumeMetadataRefresher {
|
|
|
130
145
|
* codex descendant pids → pid-keyed logs sqlite). Async, returns undefined
|
|
131
146
|
* on timeout/absence. Public for reuse by adoption-boundary capture
|
|
132
147
|
* (OPR.0.4.3.20 FR-3) — no behavior change to the teardown-path scrape. */
|
|
133
|
-
async captureCodexThreadId(sessionTarget) {
|
|
148
|
+
async captureCodexThreadId(sessionTarget, opts) {
|
|
134
149
|
if (!this.tmuxAdapter.getPanePid)
|
|
135
150
|
return undefined;
|
|
136
|
-
|
|
151
|
+
const attempts = Math.max(1, opts?.attempts ?? 8);
|
|
152
|
+
const listProcesses = opts?.listProcesses ?? this.listProcesses;
|
|
153
|
+
for (let attempt = 0; attempt < attempts; attempt++) {
|
|
137
154
|
const shellPid = await this.tmuxAdapter.getPanePid(sessionTarget);
|
|
138
155
|
if (shellPid) {
|
|
139
|
-
const
|
|
156
|
+
const rows = await listProcesses();
|
|
157
|
+
const codexPids = findCodexDescendantPids(rows, shellPid);
|
|
140
158
|
for (const codexPid of codexPids) {
|
|
141
|
-
|
|
159
|
+
// pid+start-time identity from the SAME census (r1's reuse guard).
|
|
160
|
+
const identity = rows.find((r) => r.pid === codexPid)?.startedAt;
|
|
161
|
+
const threadId = await this.readCodexThreadIdByPid(codexPid, identity);
|
|
142
162
|
if (threadId)
|
|
143
163
|
return threadId;
|
|
144
164
|
}
|
|
145
165
|
}
|
|
146
|
-
|
|
166
|
+
if (attempt < attempts - 1)
|
|
167
|
+
await this.sleep(250);
|
|
147
168
|
}
|
|
148
169
|
return undefined;
|
|
149
170
|
}
|
|
@@ -215,31 +236,45 @@ export class ResumeMetadataRefresher {
|
|
|
215
236
|
// property that the pre-B12 sync implementation violated.
|
|
216
237
|
export async function defaultListProcesses() {
|
|
217
238
|
try {
|
|
218
|
-
|
|
219
|
-
const { stdout } = await execFileAsync("ps", ["-Ao", "pid,ppid,command"], { encoding: "utf-8", maxBuffer: 8 * 1024 * 1024 });
|
|
220
|
-
return stdout;
|
|
221
|
-
});
|
|
222
|
-
return output
|
|
223
|
-
.split("\n")
|
|
224
|
-
.slice(1)
|
|
225
|
-
.map((line) => line.trim())
|
|
226
|
-
.filter(Boolean)
|
|
227
|
-
.map((line) => {
|
|
228
|
-
const match = line.match(/^(\d+)\s+(\d+)\s+(.*)$/);
|
|
229
|
-
if (!match)
|
|
230
|
-
return null;
|
|
231
|
-
return {
|
|
232
|
-
pid: Number(match[1]),
|
|
233
|
-
ppid: Number(match[2]),
|
|
234
|
-
command: match[3] ?? "",
|
|
235
|
-
};
|
|
236
|
-
})
|
|
237
|
-
.filter((row) => row !== null);
|
|
239
|
+
return await defaultListProcessesStrict();
|
|
238
240
|
}
|
|
239
241
|
catch {
|
|
240
242
|
return [];
|
|
241
243
|
}
|
|
242
244
|
}
|
|
245
|
+
/** OPR.0.5.3.10 r2-B2 — the STRICT production lister: a failed `ps` spawn
|
|
246
|
+
* REJECTS instead of degrading to []. This is the census's default —
|
|
247
|
+
* through the lenient variant above, an enumeration failure became a CACHED
|
|
248
|
+
* empty SUCCESS for the whole freshness window (r2's discriminator: 0 rows
|
|
249
|
+
* cached while 520 were live). The lenient variant keeps its contract for
|
|
250
|
+
* the direct per-call consumers that want best-effort. */
|
|
251
|
+
export async function defaultListProcessesStrict() {
|
|
252
|
+
const output = await runAsyncSite("resume_metadata.list_processes", async () => {
|
|
253
|
+
// lstart = the process START TIME — the identity half of pid+start-time
|
|
254
|
+
// (r1's pid-reuse remedy): a reused pid changes lstart, so a consumer
|
|
255
|
+
// holding last cycle's identity can invalidate without any extra spawn.
|
|
256
|
+
const { stdout } = await execFileAsync("ps", ["-Ao", "pid,ppid,lstart,command"], { encoding: "utf-8", maxBuffer: 8 * 1024 * 1024 });
|
|
257
|
+
return stdout;
|
|
258
|
+
});
|
|
259
|
+
return output
|
|
260
|
+
.split("\n")
|
|
261
|
+
.slice(1)
|
|
262
|
+
.map((line) => line.trim())
|
|
263
|
+
.filter(Boolean)
|
|
264
|
+
.map((line) => {
|
|
265
|
+
// lstart is a fixed 5-token block: "Sun Aug 23 18:52:01 2026".
|
|
266
|
+
const match = line.match(/^(\d+)\s+(\d+)\s+(\w{3}\s+\w{3}\s+\d+\s+\d{2}:\d{2}:\d{2}\s+\d{4})\s+(.*)$/);
|
|
267
|
+
if (!match)
|
|
268
|
+
return null;
|
|
269
|
+
return {
|
|
270
|
+
pid: Number(match[1]),
|
|
271
|
+
ppid: Number(match[2]),
|
|
272
|
+
startedAt: match[3] ?? "",
|
|
273
|
+
command: match[4] ?? "",
|
|
274
|
+
};
|
|
275
|
+
})
|
|
276
|
+
.filter((row) => row !== null);
|
|
277
|
+
}
|
|
243
278
|
function findCodexDescendantPids(processes, parentPid) {
|
|
244
279
|
const childrenByParent = new Map();
|
|
245
280
|
for (const proc of processes) {
|