@openrig/cli 0.6.14 → 0.7.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +14 -12
- package/daemon/assets/claude-statusline-context.cjs +13 -3
- package/daemon/assets/guidance/openrig-seat-skills.md +1 -0
- 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 +11 -4
- package/daemon/assets/plugins/openrig-core/hooks/claude.json +11 -11
- package/daemon/assets/plugins/openrig-core/hooks/codex.json +6 -6
- package/daemon/assets/plugins/openrig-core/hooks/scripts/activity-relay.cjs +22 -9
- package/daemon/assets/plugins/openrig-core/hooks/scripts/codex-hook-trust.cjs +49 -0
- package/daemon/assets/plugins/openrig-core/hooks/scripts/refocus-health.cjs +2 -2
- package/daemon/assets/plugins/openrig-core/hooks/scripts/refocus.cjs +35 -11
- package/daemon/assets/plugins/openrig-core/skills/claude-compaction-restore/SKILL.md +9 -2
- package/daemon/assets/plugins/openrig-core/skills/claude-compaction-restore/scripts/precompact-hook.mjs +1 -1
- package/daemon/assets/plugins/openrig-core/skills/forming-an-openrig-mental-model/SKILL.md +16 -10
- package/daemon/assets/plugins/openrig-core/skills/messaging-the-human/SKILL.md +43 -4
- package/daemon/assets/plugins/openrig-core/skills/openrig-skills/SKILL.md +2 -2
- package/daemon/assets/plugins/openrig-core/skills/openrig-user/SKILL.md +192 -61
- package/daemon/assets/plugins/openrig-core/skills/queue-handoff/SKILL.md +10 -4
- package/daemon/assets/skills/rigs/SKILL.md +26 -6
- package/daemon/context-packs/help/manifest.yaml +1 -1
- package/daemon/context-packs/onboarding-width/manifest.yaml +1 -1
- package/daemon/context-packs/onboarding-width/public-what-you-can-do.md +209 -33
- package/daemon/context-packs/reference/getting-started.md +148 -23
- package/daemon/context-packs/reference/manifest.yaml +1 -1
- package/daemon/context-packs/reference/rig-spec.md +83 -3
- package/daemon/context-packs/reference/whats-new.md +173 -69
- package/daemon/context-packs/skills/agent-operated-software/manifest.yaml +1 -1
- package/daemon/context-packs/skills/agent-operated-workflows/manifest.yaml +1 -1
- package/daemon/context-packs/skills/applying-a-permission-policy/manifest.yaml +1 -1
- package/daemon/context-packs/skills/claude-compaction-restore/SKILL.md +9 -2
- package/daemon/context-packs/skills/claude-compaction-restore/manifest.yaml +1 -1
- package/daemon/context-packs/skills/claude-compaction-restore/scripts/precompact-hook.mjs +1 -1
- package/daemon/context-packs/skills/core/agent-starters/manifest.yaml +1 -1
- package/daemon/context-packs/skills/core/agent-startup-and-context-ingestion/manifest.yaml +1 -1
- package/daemon/context-packs/skills/core/cross-host-rig-commands/manifest.yaml +1 -1
- package/daemon/context-packs/skills/core/human-in-the-loop/manifest.yaml +1 -1
- package/daemon/context-packs/skills/core/messaging-the-human/SKILL.md +43 -4
- package/daemon/context-packs/skills/core/messaging-the-human/manifest.yaml +1 -1
- package/daemon/context-packs/skills/core/openrig-architect/manifest.yaml +1 -1
- package/daemon/context-packs/skills/core/openrig-cmux/manifest.yaml +1 -1
- package/daemon/context-packs/skills/core/openrig-herdr/SKILL.md +3 -0
- package/daemon/context-packs/skills/core/openrig-herdr/manifest.yaml +1 -1
- package/daemon/context-packs/skills/core/openrig-skills/SKILL.md +2 -2
- package/daemon/context-packs/skills/core/openrig-skills/manifest.yaml +1 -1
- package/daemon/context-packs/skills/core/openrig-software-factory/manifest.yaml +1 -1
- package/daemon/context-packs/skills/core/openrig-software-factory/references/worked-example.md +2 -2
- package/daemon/context-packs/skills/core/openrig-upgrade/SKILL.md +11 -5
- package/daemon/context-packs/skills/core/openrig-upgrade/manifest.yaml +1 -1
- package/daemon/context-packs/skills/core/rig-bundles-and-shareable-artifacts/manifest.yaml +1 -1
- package/daemon/context-packs/skills/core/rig-lifecycle/manifest.yaml +1 -1
- package/daemon/context-packs/skills/core/session-source-fork/manifest.yaml +1 -1
- package/daemon/context-packs/skills/core/specification-system/manifest.yaml +1 -1
- package/daemon/context-packs/skills/core/topology-mutation-and-seat-management/manifest.yaml +1 -1
- package/daemon/context-packs/skills/core/watchdog/manifest.yaml +1 -1
- package/daemon/context-packs/skills/delegating-work/manifest.yaml +1 -1
- package/daemon/context-packs/skills/forming-an-openrig-mental-model/SKILL.md +16 -10
- package/daemon/context-packs/skills/forming-an-openrig-mental-model/manifest.yaml +1 -1
- package/daemon/context-packs/skills/loading-addressable-markdown/manifest.yaml +1 -1
- package/daemon/context-packs/skills/mission-slice-sop/manifest.yaml +1 -1
- package/daemon/context-packs/skills/openrig-operating-model/manifest.yaml +1 -1
- package/daemon/context-packs/skills/openrig-user/SKILL.md +192 -61
- package/daemon/context-packs/skills/openrig-user/manifest.yaml +1 -1
- package/daemon/context-packs/skills/orienting-to-an-inherited-seat/manifest.yaml +1 -1
- package/daemon/context-packs/skills/pm/backlog-capture/manifest.yaml +1 -1
- package/daemon/context-packs/skills/pm/context-builder/manifest.yaml +1 -1
- package/daemon/context-packs/skills/pm/exec-summary/manifest.yaml +1 -1
- package/daemon/context-packs/skills/pm/office-hours/manifest.yaml +1 -1
- package/daemon/context-packs/skills/pm/plan-review/manifest.yaml +1 -1
- package/daemon/context-packs/skills/pm/requirements-writer/manifest.yaml +1 -1
- package/daemon/context-packs/skills/pm/ui-mockup/manifest.yaml +1 -1
- package/daemon/context-packs/skills/pods/development-team/SKILL.md +2 -0
- package/daemon/context-packs/skills/pods/development-team/manifest.yaml +3 -1
- package/daemon/context-packs/skills/pods/development-team/references/refactoring.md +11 -0
- package/daemon/context-packs/skills/pods/orchestration-team/manifest.yaml +1 -1
- package/daemon/context-packs/skills/pods/oversight-team/manifest.yaml +1 -1
- package/daemon/context-packs/skills/pods/review-team/SKILL.md +46 -96
- package/daemon/context-packs/skills/pods/review-team/manifest.yaml +1 -1
- package/daemon/context-packs/skills/process/agent-browser/manifest.yaml +1 -1
- package/daemon/context-packs/skills/process/context-engineering/manifest.yaml +1 -1
- package/daemon/context-packs/skills/process/dogfood/manifest.yaml +1 -1
- package/daemon/context-packs/skills/process/frontend-design/manifest.yaml +1 -1
- package/daemon/context-packs/skills/process/systematic-debugging/manifest.yaml +1 -1
- package/daemon/context-packs/skills/process/test-driven-development/manifest.yaml +1 -1
- package/daemon/context-packs/skills/process/verification-before-completion/SKILL.md +17 -80
- package/daemon/context-packs/skills/process/verification-before-completion/manifest.yaml +5 -3
- package/daemon/context-packs/skills/process/verification-before-completion/references/performance-claims.md +12 -0
- package/daemon/context-packs/skills/queue-handoff/SKILL.md +10 -4
- package/daemon/context-packs/skills/queue-handoff/manifest.yaml +1 -1
- package/daemon/context-packs/skills/refocusing/manifest.yaml +1 -1
- package/daemon/context-packs/skills/retiring-and-inheriting-a-seat/manifest.yaml +1 -1
- package/daemon/context-packs/skills/seat-continuity-and-handover/manifest.yaml +1 -1
- package/daemon/context-packs/skills/session-compaction-and-restore/manifest.yaml +1 -1
- package/daemon/context-packs/skills/software-for-agents/manifest.yaml +1 -1
- package/daemon/context-packs/world-example/manifest.yaml +1 -1
- package/daemon/context-packs/world-public/manifest.yaml +1 -1
- package/daemon/dist/adapters/claude-code-adapter.d.ts +6 -2
- package/daemon/dist/adapters/claude-code-adapter.d.ts.map +1 -1
- package/daemon/dist/adapters/claude-code-adapter.js +127 -32
- package/daemon/dist/adapters/claude-code-adapter.js.map +1 -1
- package/daemon/dist/adapters/claude-resume.d.ts +2 -1
- package/daemon/dist/adapters/claude-resume.d.ts.map +1 -1
- package/daemon/dist/adapters/claude-resume.js +10 -3
- package/daemon/dist/adapters/claude-resume.js.map +1 -1
- package/daemon/dist/adapters/codex-resume.d.ts.map +1 -1
- package/daemon/dist/adapters/codex-resume.js +2 -7
- package/daemon/dist/adapters/codex-resume.js.map +1 -1
- package/daemon/dist/adapters/codex-runtime-adapter.d.ts +75 -3
- package/daemon/dist/adapters/codex-runtime-adapter.d.ts.map +1 -1
- package/daemon/dist/adapters/codex-runtime-adapter.js +592 -91
- package/daemon/dist/adapters/codex-runtime-adapter.js.map +1 -1
- package/daemon/dist/adapters/community-harness-runtime-adapter.d.ts +21 -2
- package/daemon/dist/adapters/community-harness-runtime-adapter.d.ts.map +1 -1
- package/daemon/dist/adapters/community-harness-runtime-adapter.js +90 -8
- package/daemon/dist/adapters/community-harness-runtime-adapter.js.map +1 -1
- package/daemon/dist/adapters/compose-services-adapter.d.ts +16 -0
- package/daemon/dist/adapters/compose-services-adapter.d.ts.map +1 -1
- package/daemon/dist/adapters/compose-services-adapter.js +52 -9
- package/daemon/dist/adapters/compose-services-adapter.js.map +1 -1
- package/daemon/dist/adapters/kernel-authority.d.ts.map +1 -1
- package/daemon/dist/adapters/kernel-authority.js +9 -5
- package/daemon/dist/adapters/kernel-authority.js.map +1 -1
- package/daemon/dist/adapters/pi-runner.d.ts +13 -0
- package/daemon/dist/adapters/pi-runner.d.ts.map +1 -1
- package/daemon/dist/adapters/pi-runner.js +64 -16
- package/daemon/dist/adapters/pi-runner.js.map +1 -1
- package/daemon/dist/adapters/pi-runtime-adapter.d.ts.map +1 -1
- package/daemon/dist/adapters/pi-runtime-adapter.js +9 -6
- package/daemon/dist/adapters/pi-runtime-adapter.js.map +1 -1
- package/daemon/dist/adapters/runtime-probe-exec.d.ts +11 -0
- package/daemon/dist/adapters/runtime-probe-exec.d.ts.map +1 -0
- package/daemon/dist/adapters/runtime-probe-exec.js +25 -0
- package/daemon/dist/adapters/runtime-probe-exec.js.map +1 -0
- package/daemon/dist/adapters/stub-runner.d.ts.map +1 -1
- package/daemon/dist/adapters/stub-runner.js +2 -0
- package/daemon/dist/adapters/stub-runner.js.map +1 -1
- package/daemon/dist/adapters/stub-runtime-adapter.d.ts.map +1 -1
- package/daemon/dist/adapters/stub-runtime-adapter.js +9 -5
- package/daemon/dist/adapters/stub-runtime-adapter.js.map +1 -1
- package/daemon/dist/adapters/tmux.d.ts +36 -5
- package/daemon/dist/adapters/tmux.d.ts.map +1 -1
- package/daemon/dist/adapters/tmux.js +162 -33
- package/daemon/dist/adapters/tmux.js.map +1 -1
- package/daemon/dist/attention-surface.d.ts +14 -0
- package/daemon/dist/attention-surface.d.ts.map +1 -1
- package/daemon/dist/attention-surface.js.map +1 -1
- package/daemon/dist/build-info.js +3 -3
- package/daemon/dist/daemon-db-path.d.ts +6 -0
- package/daemon/dist/daemon-db-path.d.ts.map +1 -1
- package/daemon/dist/daemon-db-path.js +65 -1
- package/daemon/dist/daemon-db-path.js.map +1 -1
- package/daemon/dist/daemon-shutdown.d.ts.map +1 -1
- package/daemon/dist/daemon-shutdown.js +4 -2
- package/daemon/dist/daemon-shutdown.js.map +1 -1
- package/daemon/dist/db/all-migrations.d.ts.map +1 -1
- package/daemon/dist/db/all-migrations.js +28 -0
- package/daemon/dist/db/all-migrations.js.map +1 -1
- package/daemon/dist/db/migrations/116_queue_item_wake_input_box.d.ts +3 -0
- package/daemon/dist/db/migrations/116_queue_item_wake_input_box.d.ts.map +1 -0
- package/daemon/dist/db/migrations/116_queue_item_wake_input_box.js +8 -0
- package/daemon/dist/db/migrations/116_queue_item_wake_input_box.js.map +1 -0
- package/daemon/dist/db/migrations/118_human_quiet_windows.d.ts +3 -0
- package/daemon/dist/db/migrations/118_human_quiet_windows.d.ts.map +1 -0
- package/daemon/dist/db/migrations/118_human_quiet_windows.js +30 -0
- package/daemon/dist/db/migrations/118_human_quiet_windows.js.map +1 -0
- package/daemon/dist/db/migrations/119_seat_identity_pane_pid.d.ts +3 -0
- package/daemon/dist/db/migrations/119_seat_identity_pane_pid.d.ts.map +1 -0
- package/daemon/dist/db/migrations/119_seat_identity_pane_pid.js +7 -0
- package/daemon/dist/db/migrations/119_seat_identity_pane_pid.js.map +1 -0
- package/daemon/dist/db/migrations/121_rig_startup_layers.d.ts +13 -0
- package/daemon/dist/db/migrations/121_rig_startup_layers.d.ts.map +1 -0
- package/daemon/dist/db/migrations/121_rig_startup_layers.js +17 -0
- package/daemon/dist/db/migrations/121_rig_startup_layers.js.map +1 -0
- package/daemon/dist/db/migrations/122_human_operating_modes.d.ts +3 -0
- package/daemon/dist/db/migrations/122_human_operating_modes.d.ts.map +1 -0
- package/daemon/dist/db/migrations/122_human_operating_modes.js +55 -0
- package/daemon/dist/db/migrations/122_human_operating_modes.js.map +1 -0
- package/daemon/dist/db/migrations/123_queue_delegated_decision.d.ts +3 -0
- package/daemon/dist/db/migrations/123_queue_delegated_decision.d.ts.map +1 -0
- package/daemon/dist/db/migrations/123_queue_delegated_decision.js +10 -0
- package/daemon/dist/db/migrations/123_queue_delegated_decision.js.map +1 -0
- package/daemon/dist/db/migrations/124_context_usage_watchdog_units.d.ts +4 -0
- package/daemon/dist/db/migrations/124_context_usage_watchdog_units.d.ts.map +1 -0
- package/daemon/dist/db/migrations/124_context_usage_watchdog_units.js +9 -0
- package/daemon/dist/db/migrations/124_context_usage_watchdog_units.js.map +1 -0
- package/daemon/dist/db/migrations/125_node_advisor.d.ts +3 -0
- package/daemon/dist/db/migrations/125_node_advisor.d.ts.map +1 -0
- package/daemon/dist/db/migrations/125_node_advisor.js +8 -0
- package/daemon/dist/db/migrations/125_node_advisor.js.map +1 -0
- package/daemon/dist/db/migrations/127_operation_correlation.d.ts +3 -0
- package/daemon/dist/db/migrations/127_operation_correlation.d.ts.map +1 -0
- package/daemon/dist/db/migrations/127_operation_correlation.js +10 -0
- package/daemon/dist/db/migrations/127_operation_correlation.js.map +1 -0
- package/daemon/dist/db/migrations/128_terminal_policy.d.ts +3 -0
- package/daemon/dist/db/migrations/128_terminal_policy.d.ts.map +1 -0
- package/daemon/dist/db/migrations/128_terminal_policy.js +37 -0
- package/daemon/dist/db/migrations/128_terminal_policy.js.map +1 -0
- package/daemon/dist/db/migrations/129_stream_dispositions.d.ts +10 -0
- package/daemon/dist/db/migrations/129_stream_dispositions.d.ts.map +1 -0
- package/daemon/dist/db/migrations/129_stream_dispositions.js +35 -0
- package/daemon/dist/db/migrations/129_stream_dispositions.js.map +1 -0
- package/daemon/dist/db/migrations/130_stream_subscriptions.d.ts +11 -0
- package/daemon/dist/db/migrations/130_stream_subscriptions.d.ts.map +1 -0
- package/daemon/dist/db/migrations/130_stream_subscriptions.js +33 -0
- package/daemon/dist/db/migrations/130_stream_subscriptions.js.map +1 -0
- package/daemon/dist/db/migrations/131_stream_retention_floor.d.ts +8 -0
- package/daemon/dist/db/migrations/131_stream_retention_floor.d.ts.map +1 -0
- package/daemon/dist/db/migrations/131_stream_retention_floor.js +20 -0
- package/daemon/dist/db/migrations/131_stream_retention_floor.js.map +1 -0
- package/daemon/dist/db/migrations/135_seat_identity_process_evidence.d.ts +3 -0
- package/daemon/dist/db/migrations/135_seat_identity_process_evidence.d.ts.map +1 -0
- package/daemon/dist/db/migrations/135_seat_identity_process_evidence.js +16 -0
- package/daemon/dist/db/migrations/135_seat_identity_process_evidence.js.map +1 -0
- package/daemon/dist/domain/active-occupant.d.ts +8 -3
- package/daemon/dist/domain/active-occupant.d.ts.map +1 -1
- package/daemon/dist/domain/active-occupant.js +8 -4
- package/daemon/dist/domain/active-occupant.js.map +1 -1
- package/daemon/dist/domain/activity-taxonomy.d.ts +19 -1
- package/daemon/dist/domain/activity-taxonomy.d.ts.map +1 -1
- package/daemon/dist/domain/activity-taxonomy.js +21 -0
- package/daemon/dist/domain/activity-taxonomy.js.map +1 -1
- package/daemon/dist/domain/agent-activity-store.d.ts +24 -0
- package/daemon/dist/domain/agent-activity-store.d.ts.map +1 -1
- package/daemon/dist/domain/agent-activity-store.js +50 -5
- package/daemon/dist/domain/agent-activity-store.js.map +1 -1
- package/daemon/dist/domain/agent-images/evidence-guard.js +3 -3
- package/daemon/dist/domain/agent-images/evidence-guard.js.map +1 -1
- package/daemon/dist/domain/agent-images/resume-token-discovery.d.ts.map +1 -1
- package/daemon/dist/domain/agent-images/resume-token-discovery.js +2 -10
- package/daemon/dist/domain/agent-images/resume-token-discovery.js.map +1 -1
- package/daemon/dist/domain/agent-manifest.d.ts.map +1 -1
- package/daemon/dist/domain/agent-manifest.js +14 -2
- package/daemon/dist/domain/agent-manifest.js.map +1 -1
- package/daemon/dist/domain/ask-service.d.ts +1 -0
- package/daemon/dist/domain/ask-service.d.ts.map +1 -1
- package/daemon/dist/domain/ask-service.js +7 -1
- package/daemon/dist/domain/ask-service.js.map +1 -1
- package/daemon/dist/domain/bootstrap-orchestrator.d.ts +5 -0
- package/daemon/dist/domain/bootstrap-orchestrator.d.ts.map +1 -1
- package/daemon/dist/domain/bootstrap-orchestrator.js +25 -12
- package/daemon/dist/domain/bootstrap-orchestrator.js.map +1 -1
- package/daemon/dist/domain/builtin-startup-files.d.ts.map +1 -1
- package/daemon/dist/domain/builtin-startup-files.js +2 -0
- package/daemon/dist/domain/builtin-startup-files.js.map +1 -1
- package/daemon/dist/domain/bundle-behaviour.d.ts.map +1 -1
- package/daemon/dist/domain/bundle-behaviour.js +28 -1
- package/daemon/dist/domain/bundle-behaviour.js.map +1 -1
- package/daemon/dist/domain/claim-service.d.ts +20 -2
- package/daemon/dist/domain/claim-service.d.ts.map +1 -1
- package/daemon/dist/domain/claim-service.js +74 -19
- package/daemon/dist/domain/claim-service.js.map +1 -1
- package/daemon/dist/domain/classification-attempts.d.ts +4 -1
- package/daemon/dist/domain/classification-attempts.d.ts.map +1 -1
- package/daemon/dist/domain/classification-attempts.js +10 -1
- package/daemon/dist/domain/classification-attempts.js.map +1 -1
- package/daemon/dist/domain/classification-sources.d.ts +38 -0
- package/daemon/dist/domain/classification-sources.d.ts.map +1 -1
- package/daemon/dist/domain/classification-sources.js +26 -1
- package/daemon/dist/domain/classification-sources.js.map +1 -1
- package/daemon/dist/domain/claude-activity-hooks.d.ts +2 -2
- package/daemon/dist/domain/claude-activity-hooks.d.ts.map +1 -1
- package/daemon/dist/domain/claude-activity-hooks.js +8 -7
- package/daemon/dist/domain/claude-activity-hooks.js.map +1 -1
- package/daemon/dist/domain/claude-compaction-enforcer.d.ts +126 -11
- package/daemon/dist/domain/claude-compaction-enforcer.d.ts.map +1 -1
- package/daemon/dist/domain/claude-compaction-enforcer.js +527 -68
- package/daemon/dist/domain/claude-compaction-enforcer.js.map +1 -1
- package/daemon/dist/domain/claude-core-plugin-env.d.ts +14 -0
- package/daemon/dist/domain/claude-core-plugin-env.d.ts.map +1 -1
- package/daemon/dist/domain/claude-core-plugin-env.js +37 -11
- package/daemon/dist/domain/claude-core-plugin-env.js.map +1 -1
- package/daemon/dist/domain/claude-managed-launch.d.ts +1 -1
- package/daemon/dist/domain/claude-managed-launch.d.ts.map +1 -1
- package/daemon/dist/domain/claude-managed-launch.js +33 -15
- package/daemon/dist/domain/claude-managed-launch.js.map +1 -1
- package/daemon/dist/domain/codex-core-plugin-install.d.ts +41 -0
- package/daemon/dist/domain/codex-core-plugin-install.d.ts.map +1 -0
- package/daemon/dist/domain/codex-core-plugin-install.js +126 -0
- package/daemon/dist/domain/codex-core-plugin-install.js.map +1 -0
- package/daemon/dist/domain/codex-owned-plugin-trust.d.ts +26 -0
- package/daemon/dist/domain/codex-owned-plugin-trust.d.ts.map +1 -0
- package/daemon/dist/domain/codex-owned-plugin-trust.js +187 -0
- package/daemon/dist/domain/codex-owned-plugin-trust.js.map +1 -0
- package/daemon/dist/domain/codex-rebuild-permissions.d.ts +54 -0
- package/daemon/dist/domain/codex-rebuild-permissions.d.ts.map +1 -0
- package/daemon/dist/domain/codex-rebuild-permissions.js +134 -0
- package/daemon/dist/domain/codex-rebuild-permissions.js.map +1 -0
- package/daemon/dist/domain/codex-thread-id.d.ts +23 -1
- package/daemon/dist/domain/codex-thread-id.d.ts.map +1 -1
- package/daemon/dist/domain/codex-thread-id.js +58 -17
- package/daemon/dist/domain/codex-thread-id.js.map +1 -1
- package/daemon/dist/domain/community-harness-launch-result.d.ts +33 -0
- package/daemon/dist/domain/community-harness-launch-result.d.ts.map +1 -0
- package/daemon/dist/domain/community-harness-launch-result.js +93 -0
- package/daemon/dist/domain/community-harness-launch-result.js.map +1 -0
- package/daemon/dist/domain/community-harness-presets.d.ts +27 -2
- package/daemon/dist/domain/community-harness-presets.d.ts.map +1 -1
- package/daemon/dist/domain/community-harness-presets.js +49 -5
- package/daemon/dist/domain/community-harness-presets.js.map +1 -1
- package/daemon/dist/domain/composer-prompts.d.ts +5 -2
- package/daemon/dist/domain/composer-prompts.d.ts.map +1 -1
- package/daemon/dist/domain/composer-prompts.js +2 -2
- package/daemon/dist/domain/composer-prompts.js.map +1 -1
- package/daemon/dist/domain/context-monitor.d.ts +13 -5
- package/daemon/dist/domain/context-monitor.d.ts.map +1 -1
- package/daemon/dist/domain/context-monitor.js +49 -14
- package/daemon/dist/domain/context-monitor.js.map +1 -1
- package/daemon/dist/domain/context-usage-store.d.ts.map +1 -1
- package/daemon/dist/domain/context-usage-store.js +3 -0
- package/daemon/dist/domain/context-usage-store.js.map +1 -1
- package/daemon/dist/domain/continuity-policy-materializer.d.ts +1 -0
- package/daemon/dist/domain/continuity-policy-materializer.d.ts.map +1 -1
- package/daemon/dist/domain/continuity-policy-materializer.js +2 -0
- package/daemon/dist/domain/continuity-policy-materializer.js.map +1 -1
- package/daemon/dist/domain/current-work.d.ts +18 -0
- package/daemon/dist/domain/current-work.d.ts.map +1 -1
- package/daemon/dist/domain/current-work.js +17 -3
- package/daemon/dist/domain/current-work.js.map +1 -1
- package/daemon/dist/domain/draft-aware-delivery.d.ts +7 -7
- package/daemon/dist/domain/draft-aware-delivery.d.ts.map +1 -1
- package/daemon/dist/domain/draft-aware-delivery.js +61 -82
- package/daemon/dist/domain/draft-aware-delivery.js.map +1 -1
- package/daemon/dist/domain/execution-view.d.ts.map +1 -1
- package/daemon/dist/domain/execution-view.js +9 -7
- package/daemon/dist/domain/execution-view.js.map +1 -1
- package/daemon/dist/domain/existing-rig-restore.d.ts +110 -0
- package/daemon/dist/domain/existing-rig-restore.d.ts.map +1 -0
- package/daemon/dist/domain/existing-rig-restore.js +254 -0
- package/daemon/dist/domain/existing-rig-restore.js.map +1 -0
- package/daemon/dist/domain/footprint-choice.d.ts +41 -0
- package/daemon/dist/domain/footprint-choice.d.ts.map +1 -0
- package/daemon/dist/domain/footprint-choice.js +42 -0
- package/daemon/dist/domain/footprint-choice.js.map +1 -0
- package/daemon/dist/domain/fresh-occupant-relation.d.ts.map +1 -1
- package/daemon/dist/domain/fresh-occupant-relation.js +9 -2
- package/daemon/dist/domain/fresh-occupant-relation.js.map +1 -1
- package/daemon/dist/domain/gateway/channel-operations.d.ts +3 -4
- package/daemon/dist/domain/gateway/channel-operations.d.ts.map +1 -1
- package/daemon/dist/domain/gateway/channel-operations.js.map +1 -1
- package/daemon/dist/domain/gateway/connections-projection.d.ts +0 -5
- package/daemon/dist/domain/gateway/connections-projection.d.ts.map +1 -1
- package/daemon/dist/domain/gateway/connections-projection.js +3 -46
- package/daemon/dist/domain/gateway/connections-projection.js.map +1 -1
- package/daemon/dist/domain/gateway/delivery-rules-engine.d.ts +14 -1
- package/daemon/dist/domain/gateway/delivery-rules-engine.d.ts.map +1 -1
- package/daemon/dist/domain/gateway/delivery-rules-engine.js +13 -3
- package/daemon/dist/domain/gateway/delivery-rules-engine.js.map +1 -1
- package/daemon/dist/domain/gateway/dispatch-buffer.d.ts +4 -0
- package/daemon/dist/domain/gateway/dispatch-buffer.d.ts.map +1 -1
- package/daemon/dist/domain/gateway/dispatch-buffer.js +18 -0
- package/daemon/dist/domain/gateway/dispatch-buffer.js.map +1 -1
- package/daemon/dist/domain/gateway/human-mode-account.d.ts +61 -0
- package/daemon/dist/domain/gateway/human-mode-account.d.ts.map +1 -0
- package/daemon/dist/domain/gateway/human-mode-account.js +112 -0
- package/daemon/dist/domain/gateway/human-mode-account.js.map +1 -0
- package/daemon/dist/domain/gateway/human-operating-modes.d.ts +171 -0
- package/daemon/dist/domain/gateway/human-operating-modes.d.ts.map +1 -0
- package/daemon/dist/domain/gateway/human-operating-modes.js +422 -0
- package/daemon/dist/domain/gateway/human-operating-modes.js.map +1 -0
- package/daemon/dist/domain/gateway/human-quiet-windows.d.ts +121 -0
- package/daemon/dist/domain/gateway/human-quiet-windows.d.ts.map +1 -0
- package/daemon/dist/domain/gateway/human-quiet-windows.js +217 -0
- package/daemon/dist/domain/gateway/human-quiet-windows.js.map +1 -0
- package/daemon/dist/domain/gateway/human-registry.d.ts +55 -2
- package/daemon/dist/domain/gateway/human-registry.d.ts.map +1 -1
- package/daemon/dist/domain/gateway/human-registry.js +137 -8
- package/daemon/dist/domain/gateway/human-registry.js.map +1 -1
- package/daemon/dist/domain/gateway/operator-delivery-engine.d.ts.map +1 -1
- package/daemon/dist/domain/gateway/operator-delivery-engine.js +9 -0
- package/daemon/dist/domain/gateway/operator-delivery-engine.js.map +1 -1
- package/daemon/dist/domain/gateway/slack/inbound.d.ts +10 -2
- package/daemon/dist/domain/gateway/slack/inbound.d.ts.map +1 -1
- package/daemon/dist/domain/gateway/slack/inbound.js +76 -6
- package/daemon/dist/domain/gateway/slack/inbound.js.map +1 -1
- package/daemon/dist/domain/gateway/slack/message.d.ts +4 -0
- package/daemon/dist/domain/gateway/slack/message.d.ts.map +1 -1
- package/daemon/dist/domain/gateway/slack/message.js +13 -2
- package/daemon/dist/domain/gateway/slack/message.js.map +1 -1
- package/daemon/dist/domain/gateway/slack/outbound-driver.d.ts +9 -3
- package/daemon/dist/domain/gateway/slack/outbound-driver.d.ts.map +1 -1
- package/daemon/dist/domain/gateway/slack/outbound-driver.js +40 -6
- package/daemon/dist/domain/gateway/slack/outbound-driver.js.map +1 -1
- package/daemon/dist/domain/gateway/slack/queue-access.d.ts +7 -0
- package/daemon/dist/domain/gateway/slack/queue-access.d.ts.map +1 -1
- package/daemon/dist/domain/gateway/slack/queue-access.js +14 -2
- package/daemon/dist/domain/gateway/slack/queue-access.js.map +1 -1
- package/daemon/dist/domain/gateway/slack/slack-delivery.d.ts +17 -1
- package/daemon/dist/domain/gateway/slack/slack-delivery.d.ts.map +1 -1
- package/daemon/dist/domain/gateway/slack/slack-delivery.js +143 -56
- package/daemon/dist/domain/gateway/slack/slack-delivery.js.map +1 -1
- package/daemon/dist/domain/gateway/slack/slack-subsystem.d.ts +3 -2
- package/daemon/dist/domain/gateway/slack/slack-subsystem.d.ts.map +1 -1
- package/daemon/dist/domain/gateway/slack/slack-subsystem.js +266 -51
- package/daemon/dist/domain/gateway/slack/slack-subsystem.js.map +1 -1
- package/daemon/dist/domain/generated-file-hygiene.js +1 -1
- package/daemon/dist/domain/generated-file-hygiene.js.map +1 -1
- package/daemon/dist/domain/graph-projection.d.ts +3 -0
- package/daemon/dist/domain/graph-projection.d.ts.map +1 -1
- package/daemon/dist/domain/graph-projection.js +2 -0
- package/daemon/dist/domain/graph-projection.js.map +1 -1
- package/daemon/dist/domain/health-diagnosis.d.ts.map +1 -1
- package/daemon/dist/domain/health-diagnosis.js +14 -6
- package/daemon/dist/domain/health-diagnosis.js.map +1 -1
- package/daemon/dist/domain/health-passive-ceremony.d.ts +4 -0
- package/daemon/dist/domain/health-passive-ceremony.d.ts.map +1 -1
- package/daemon/dist/domain/health-passive-ceremony.js +34 -4
- package/daemon/dist/domain/health-passive-ceremony.js.map +1 -1
- package/daemon/dist/domain/hosts/hosts-registry-reader.d.ts +3 -1
- package/daemon/dist/domain/hosts/hosts-registry-reader.d.ts.map +1 -1
- package/daemon/dist/domain/hosts/hosts-registry-reader.js +9 -9
- package/daemon/dist/domain/hosts/hosts-registry-reader.js.map +1 -1
- package/daemon/dist/domain/hosts/learned-host-bindings.d.ts +28 -0
- package/daemon/dist/domain/hosts/learned-host-bindings.d.ts.map +1 -0
- package/daemon/dist/domain/hosts/learned-host-bindings.js +77 -0
- package/daemon/dist/domain/hosts/learned-host-bindings.js.map +1 -0
- package/daemon/dist/domain/hot-potato-enforcer.d.ts +7 -5
- package/daemon/dist/domain/hot-potato-enforcer.d.ts.map +1 -1
- package/daemon/dist/domain/hot-potato-enforcer.js +19 -10
- package/daemon/dist/domain/hot-potato-enforcer.js.map +1 -1
- package/daemon/dist/domain/human-questions.d.ts +10 -1
- package/daemon/dist/domain/human-questions.d.ts.map +1 -1
- package/daemon/dist/domain/human-questions.js +5 -0
- package/daemon/dist/domain/human-questions.js.map +1 -1
- package/daemon/dist/domain/kernel-boot-tracker.d.ts +17 -1
- package/daemon/dist/domain/kernel-boot-tracker.d.ts.map +1 -1
- package/daemon/dist/domain/kernel-boot-tracker.js +44 -3
- package/daemon/dist/domain/kernel-boot-tracker.js.map +1 -1
- package/daemon/dist/domain/kernel-boot.d.ts +26 -1
- package/daemon/dist/domain/kernel-boot.d.ts.map +1 -1
- package/daemon/dist/domain/kernel-boot.js +91 -6
- package/daemon/dist/domain/kernel-boot.js.map +1 -1
- package/daemon/dist/domain/managed-blocks.d.ts +32 -1
- package/daemon/dist/domain/managed-blocks.d.ts.map +1 -1
- package/daemon/dist/domain/managed-blocks.js +109 -11
- package/daemon/dist/domain/managed-blocks.js.map +1 -1
- package/daemon/dist/domain/mission-control/mission-control-action-log.d.ts +1 -1
- package/daemon/dist/domain/mission-control/mission-control-action-log.d.ts.map +1 -1
- package/daemon/dist/domain/mission-control/mission-control-action-log.js +3 -0
- package/daemon/dist/domain/mission-control/mission-control-action-log.js.map +1 -1
- package/daemon/dist/domain/mission-control/mission-control-write-contract.d.ts +21 -0
- package/daemon/dist/domain/mission-control/mission-control-write-contract.d.ts.map +1 -1
- package/daemon/dist/domain/mission-control/mission-control-write-contract.js +110 -0
- package/daemon/dist/domain/mission-control/mission-control-write-contract.js.map +1 -1
- package/daemon/dist/domain/model-divergence/current-generation-record.d.ts +2 -1
- package/daemon/dist/domain/model-divergence/current-generation-record.d.ts.map +1 -1
- package/daemon/dist/domain/model-divergence/current-generation-record.js +8 -3
- package/daemon/dist/domain/model-divergence/current-generation-record.js.map +1 -1
- package/daemon/dist/domain/model-divergence/current-model-reader.d.ts +2 -0
- package/daemon/dist/domain/model-divergence/current-model-reader.d.ts.map +1 -1
- package/daemon/dist/domain/model-divergence/current-model-reader.js +7 -0
- package/daemon/dist/domain/model-divergence/current-model-reader.js.map +1 -1
- package/daemon/dist/domain/model-divergence/model-divergence-monitor.d.ts +10 -1
- package/daemon/dist/domain/model-divergence/model-divergence-monitor.d.ts.map +1 -1
- package/daemon/dist/domain/model-divergence/model-divergence-monitor.js +24 -5
- package/daemon/dist/domain/model-divergence/model-divergence-monitor.js.map +1 -1
- package/daemon/dist/domain/native-process-lineage.d.ts +3 -0
- package/daemon/dist/domain/native-process-lineage.d.ts.map +1 -1
- package/daemon/dist/domain/native-process-lineage.js +103 -17
- package/daemon/dist/domain/native-process-lineage.js.map +1 -1
- package/daemon/dist/domain/native-resume-probe-evidence.d.ts +19 -0
- package/daemon/dist/domain/native-resume-probe-evidence.d.ts.map +1 -0
- package/daemon/dist/domain/native-resume-probe-evidence.js +37 -0
- package/daemon/dist/domain/native-resume-probe-evidence.js.map +1 -0
- package/daemon/dist/domain/native-resume-probe.d.ts +7 -0
- package/daemon/dist/domain/native-resume-probe.d.ts.map +1 -1
- package/daemon/dist/domain/native-resume-probe.js +12 -9
- package/daemon/dist/domain/native-resume-probe.js.map +1 -1
- package/daemon/dist/domain/node-inventory.d.ts +49 -1
- package/daemon/dist/domain/node-inventory.d.ts.map +1 -1
- package/daemon/dist/domain/node-inventory.js +145 -57
- package/daemon/dist/domain/node-inventory.js.map +1 -1
- package/daemon/dist/domain/node-launcher.d.ts +5 -3
- package/daemon/dist/domain/node-launcher.d.ts.map +1 -1
- package/daemon/dist/domain/node-launcher.js +36 -26
- package/daemon/dist/domain/node-launcher.js.map +1 -1
- package/daemon/dist/domain/occupant-invalidator.d.ts +16 -4
- package/daemon/dist/domain/occupant-invalidator.d.ts.map +1 -1
- package/daemon/dist/domain/occupant-invalidator.js +25 -5
- package/daemon/dist/domain/occupant-invalidator.js.map +1 -1
- package/daemon/dist/domain/operation-correlation.d.ts +78 -0
- package/daemon/dist/domain/operation-correlation.d.ts.map +1 -0
- package/daemon/dist/domain/operation-correlation.js +54 -0
- package/daemon/dist/domain/operation-correlation.js.map +1 -0
- package/daemon/dist/domain/outbox-handler.d.ts +3 -5
- package/daemon/dist/domain/outbox-handler.d.ts.map +1 -1
- package/daemon/dist/domain/outbox-handler.js +9 -19
- package/daemon/dist/domain/outbox-handler.js.map +1 -1
- package/daemon/dist/domain/park-wake-text.d.ts +11 -0
- package/daemon/dist/domain/park-wake-text.d.ts.map +1 -0
- package/daemon/dist/domain/park-wake-text.js +26 -0
- package/daemon/dist/domain/park-wake-text.js.map +1 -0
- package/daemon/dist/domain/permission-account.d.ts +28 -0
- package/daemon/dist/domain/permission-account.d.ts.map +1 -0
- package/daemon/dist/domain/permission-account.js +102 -0
- package/daemon/dist/domain/permission-account.js.map +1 -0
- package/daemon/dist/domain/permission-drift.d.ts.map +1 -1
- package/daemon/dist/domain/permission-drift.js +11 -7
- package/daemon/dist/domain/permission-drift.js.map +1 -1
- package/daemon/dist/domain/plugin-vendor-service.d.ts +4 -0
- package/daemon/dist/domain/plugin-vendor-service.d.ts.map +1 -1
- package/daemon/dist/domain/plugin-vendor-service.js +29 -6
- package/daemon/dist/domain/plugin-vendor-service.js.map +1 -1
- package/daemon/dist/domain/pod-bundle-assembler.d.ts +1 -0
- package/daemon/dist/domain/pod-bundle-assembler.d.ts.map +1 -1
- package/daemon/dist/domain/pod-bundle-assembler.js +25 -0
- package/daemon/dist/domain/pod-bundle-assembler.js.map +1 -1
- package/daemon/dist/domain/policies/artifact-pool-helpers.d.ts +7 -0
- package/daemon/dist/domain/policies/artifact-pool-helpers.d.ts.map +1 -1
- package/daemon/dist/domain/policies/artifact-pool-helpers.js +8 -4
- package/daemon/dist/domain/policies/artifact-pool-helpers.js.map +1 -1
- package/daemon/dist/domain/policies/context-usage-threshold.d.ts.map +1 -1
- package/daemon/dist/domain/policies/context-usage-threshold.js +109 -21
- package/daemon/dist/domain/policies/context-usage-threshold.js.map +1 -1
- package/daemon/dist/domain/policies/delivery-digest-flush.d.ts +1 -0
- package/daemon/dist/domain/policies/delivery-digest-flush.d.ts.map +1 -1
- package/daemon/dist/domain/policies/delivery-digest-flush.js +25 -4
- package/daemon/dist/domain/policies/delivery-digest-flush.js.map +1 -1
- package/daemon/dist/domain/policies/edge-artifact-required.d.ts +6 -1
- package/daemon/dist/domain/policies/edge-artifact-required.d.ts.map +1 -1
- package/daemon/dist/domain/policies/edge-artifact-required.js +18 -13
- package/daemon/dist/domain/policies/edge-artifact-required.js.map +1 -1
- package/daemon/dist/domain/policies/mode-scheduled-end.d.ts +39 -0
- package/daemon/dist/domain/policies/mode-scheduled-end.d.ts.map +1 -0
- package/daemon/dist/domain/policies/mode-scheduled-end.js +165 -0
- package/daemon/dist/domain/policies/mode-scheduled-end.js.map +1 -0
- package/daemon/dist/domain/policies/parked-owner-consumer.d.ts +11 -7
- package/daemon/dist/domain/policies/parked-owner-consumer.d.ts.map +1 -1
- package/daemon/dist/domain/policies/parked-owner-consumer.js +82 -113
- package/daemon/dist/domain/policies/parked-owner-consumer.js.map +1 -1
- package/daemon/dist/domain/policies/periodic-reminder.d.ts +10 -0
- package/daemon/dist/domain/policies/periodic-reminder.d.ts.map +1 -1
- package/daemon/dist/domain/policies/periodic-reminder.js +11 -6
- package/daemon/dist/domain/policies/periodic-reminder.js.map +1 -1
- package/daemon/dist/domain/policies/quiet-release.d.ts +109 -0
- package/daemon/dist/domain/policies/quiet-release.d.ts.map +1 -0
- package/daemon/dist/domain/policies/quiet-release.js +213 -0
- package/daemon/dist/domain/policies/quiet-release.js.map +1 -0
- package/daemon/dist/domain/policies/types.d.ts +25 -0
- package/daemon/dist/domain/policies/types.d.ts.map +1 -1
- package/daemon/dist/domain/policies/workflow-keepalive.d.ts +6 -1
- package/daemon/dist/domain/policies/workflow-keepalive.d.ts.map +1 -1
- package/daemon/dist/domain/policies/workflow-keepalive.js +11 -5
- package/daemon/dist/domain/policies/workflow-keepalive.js.map +1 -1
- package/daemon/dist/domain/profile-resolution-worker.d.ts +7 -0
- package/daemon/dist/domain/profile-resolution-worker.d.ts.map +1 -0
- package/daemon/dist/domain/profile-resolution-worker.js +83 -0
- package/daemon/dist/domain/profile-resolution-worker.js.map +1 -0
- package/daemon/dist/domain/profile-resolver.d.ts +6 -0
- package/daemon/dist/domain/profile-resolver.d.ts.map +1 -1
- package/daemon/dist/domain/profile-resolver.js +20 -3
- package/daemon/dist/domain/profile-resolver.js.map +1 -1
- package/daemon/dist/domain/project-classifier.d.ts +7 -0
- package/daemon/dist/domain/project-classifier.d.ts.map +1 -1
- package/daemon/dist/domain/project-classifier.js +26 -0
- package/daemon/dist/domain/project-classifier.js.map +1 -1
- package/daemon/dist/domain/proof/source-watch.js +2 -2
- package/daemon/dist/domain/proof/source-watch.js.map +1 -1
- package/daemon/dist/domain/provider/subscription-move-report.d.ts +86 -0
- package/daemon/dist/domain/provider/subscription-move-report.d.ts.map +1 -0
- package/daemon/dist/domain/provider/subscription-move-report.js +227 -0
- package/daemon/dist/domain/provider/subscription-move-report.js.map +1 -0
- package/daemon/dist/domain/ps-projection.d.ts +6 -35
- package/daemon/dist/domain/ps-projection.d.ts.map +1 -1
- package/daemon/dist/domain/ps-projection.js +14 -55
- package/daemon/dist/domain/ps-projection.js.map +1 -1
- package/daemon/dist/domain/queue-destination-check.d.ts +6 -0
- package/daemon/dist/domain/queue-destination-check.d.ts.map +1 -0
- package/daemon/dist/domain/queue-destination-check.js +35 -0
- package/daemon/dist/domain/queue-destination-check.js.map +1 -0
- package/daemon/dist/domain/queue-owner.d.ts +6 -3
- package/daemon/dist/domain/queue-owner.d.ts.map +1 -1
- package/daemon/dist/domain/queue-owner.js +12 -6
- package/daemon/dist/domain/queue-owner.js.map +1 -1
- package/daemon/dist/domain/queue-pickup.d.ts +5 -2
- package/daemon/dist/domain/queue-pickup.d.ts.map +1 -1
- package/daemon/dist/domain/queue-pickup.js +19 -2
- package/daemon/dist/domain/queue-pickup.js.map +1 -1
- package/daemon/dist/domain/queue-recovery.d.ts +1 -1
- package/daemon/dist/domain/queue-recovery.d.ts.map +1 -1
- package/daemon/dist/domain/queue-recovery.js +3 -2
- package/daemon/dist/domain/queue-recovery.js.map +1 -1
- package/daemon/dist/domain/queue-repository.d.ts +146 -72
- package/daemon/dist/domain/queue-repository.d.ts.map +1 -1
- package/daemon/dist/domain/queue-repository.js +505 -169
- package/daemon/dist/domain/queue-repository.js.map +1 -1
- package/daemon/dist/domain/queue-retention.d.ts +18 -0
- package/daemon/dist/domain/queue-retention.d.ts.map +1 -1
- package/daemon/dist/domain/queue-retention.js +74 -0
- package/daemon/dist/domain/queue-retention.js.map +1 -1
- package/daemon/dist/domain/queue-stuck-sweep.d.ts +15 -1
- package/daemon/dist/domain/queue-stuck-sweep.d.ts.map +1 -1
- package/daemon/dist/domain/queue-stuck-sweep.js +132 -16
- package/daemon/dist/domain/queue-stuck-sweep.js.map +1 -1
- package/daemon/dist/domain/queue-transition-log.d.ts +5 -0
- package/daemon/dist/domain/queue-transition-log.d.ts.map +1 -1
- package/daemon/dist/domain/queue-transition-log.js +25 -8
- package/daemon/dist/domain/queue-transition-log.js.map +1 -1
- package/daemon/dist/domain/queue-wait-backoff.d.ts +3 -0
- package/daemon/dist/domain/queue-wait-backoff.d.ts.map +1 -1
- package/daemon/dist/domain/queue-wait-backoff.js +9 -0
- package/daemon/dist/domain/queue-wait-backoff.js.map +1 -1
- package/daemon/dist/domain/queue-waiting.d.ts +2 -0
- package/daemon/dist/domain/queue-waiting.d.ts.map +1 -1
- package/daemon/dist/domain/queue-waiting.js.map +1 -1
- package/daemon/dist/domain/queue-wake-ladder.d.ts +2 -0
- package/daemon/dist/domain/queue-wake-ladder.d.ts.map +1 -1
- package/daemon/dist/domain/queue-wake-ladder.js +112 -17
- package/daemon/dist/domain/queue-wake-ladder.js.map +1 -1
- package/daemon/dist/domain/quiet-hold-custody.d.ts +24 -0
- package/daemon/dist/domain/quiet-hold-custody.d.ts.map +1 -0
- package/daemon/dist/domain/quiet-hold-custody.js +85 -0
- package/daemon/dist/domain/quiet-hold-custody.js.map +1 -0
- package/daemon/dist/domain/reconciler.d.ts +23 -0
- package/daemon/dist/domain/reconciler.d.ts.map +1 -1
- package/daemon/dist/domain/reconciler.js +44 -1
- package/daemon/dist/domain/reconciler.js.map +1 -1
- package/daemon/dist/domain/rehydrate-eligibility.d.ts +12 -1
- package/daemon/dist/domain/rehydrate-eligibility.d.ts.map +1 -1
- package/daemon/dist/domain/rehydrate-eligibility.js +47 -10
- package/daemon/dist/domain/rehydrate-eligibility.js.map +1 -1
- package/daemon/dist/domain/restore-guidance.d.ts +7 -0
- package/daemon/dist/domain/restore-guidance.d.ts.map +1 -1
- package/daemon/dist/domain/restore-guidance.js +20 -8
- package/daemon/dist/domain/restore-guidance.js.map +1 -1
- package/daemon/dist/domain/restore-orchestrator.d.ts +24 -1
- package/daemon/dist/domain/restore-orchestrator.d.ts.map +1 -1
- package/daemon/dist/domain/restore-orchestrator.js +295 -41
- package/daemon/dist/domain/restore-orchestrator.js.map +1 -1
- package/daemon/dist/domain/restore-plan-preview.d.ts +10 -3
- package/daemon/dist/domain/restore-plan-preview.d.ts.map +1 -1
- package/daemon/dist/domain/restore-plan-preview.js +56 -18
- package/daemon/dist/domain/restore-plan-preview.js.map +1 -1
- package/daemon/dist/domain/restore-policy.d.ts +4 -0
- package/daemon/dist/domain/restore-policy.d.ts.map +1 -1
- package/daemon/dist/domain/restore-policy.js +11 -0
- package/daemon/dist/domain/restore-policy.js.map +1 -1
- package/daemon/dist/domain/review/gather.d.ts.map +1 -1
- package/daemon/dist/domain/review/gather.js +8 -5
- package/daemon/dist/domain/review/gather.js.map +1 -1
- package/daemon/dist/domain/rig-edge-ops.d.ts +58 -0
- package/daemon/dist/domain/rig-edge-ops.d.ts.map +1 -0
- package/daemon/dist/domain/rig-edge-ops.js +113 -0
- package/daemon/dist/domain/rig-edge-ops.js.map +1 -0
- package/daemon/dist/domain/rig-mode/operating-posture.d.ts.map +1 -1
- package/daemon/dist/domain/rig-mode/operating-posture.js +3 -1
- package/daemon/dist/domain/rig-mode/operating-posture.js.map +1 -1
- package/daemon/dist/domain/rig-name-override.d.ts +14 -0
- package/daemon/dist/domain/rig-name-override.d.ts.map +1 -0
- package/daemon/dist/domain/rig-name-override.js +38 -0
- package/daemon/dist/domain/rig-name-override.js.map +1 -0
- package/daemon/dist/domain/rig-repository.d.ts +19 -1
- package/daemon/dist/domain/rig-repository.d.ts.map +1 -1
- package/daemon/dist/domain/rig-repository.js +41 -3
- package/daemon/dist/domain/rig-repository.js.map +1 -1
- package/daemon/dist/domain/rig-status-compose.d.ts +1 -1
- package/daemon/dist/domain/rig-status-compose.d.ts.map +1 -1
- package/daemon/dist/domain/rig-status-compose.js +3 -1
- package/daemon/dist/domain/rig-status-compose.js.map +1 -1
- package/daemon/dist/domain/rig-teardown.d.ts +19 -0
- package/daemon/dist/domain/rig-teardown.d.ts.map +1 -1
- package/daemon/dist/domain/rig-teardown.js +109 -12
- package/daemon/dist/domain/rig-teardown.js.map +1 -1
- package/daemon/dist/domain/rigspec-codec.d.ts.map +1 -1
- package/daemon/dist/domain/rigspec-codec.js +10 -0
- package/daemon/dist/domain/rigspec-codec.js.map +1 -1
- package/daemon/dist/domain/rigspec-exporter.d.ts +3 -0
- package/daemon/dist/domain/rigspec-exporter.d.ts.map +1 -1
- package/daemon/dist/domain/rigspec-exporter.js +22 -0
- package/daemon/dist/domain/rigspec-exporter.js.map +1 -1
- package/daemon/dist/domain/rigspec-instantiator.d.ts +39 -2
- package/daemon/dist/domain/rigspec-instantiator.d.ts.map +1 -1
- package/daemon/dist/domain/rigspec-instantiator.js +319 -73
- package/daemon/dist/domain/rigspec-instantiator.js.map +1 -1
- package/daemon/dist/domain/rigspec-preflight.d.ts.map +1 -1
- package/daemon/dist/domain/rigspec-preflight.js +15 -2
- package/daemon/dist/domain/rigspec-preflight.js.map +1 -1
- package/daemon/dist/domain/rigspec-schema.d.ts +8 -0
- package/daemon/dist/domain/rigspec-schema.d.ts.map +1 -1
- package/daemon/dist/domain/rigspec-schema.js +97 -3
- package/daemon/dist/domain/rigspec-schema.js.map +1 -1
- package/daemon/dist/domain/runtime-adapter.d.ts +47 -3
- package/daemon/dist/domain/runtime-adapter.d.ts.map +1 -1
- package/daemon/dist/domain/runtime-adapter.js +5 -1
- package/daemon/dist/domain/runtime-adapter.js.map +1 -1
- package/daemon/dist/domain/scope/scope-view-projection.d.ts +6 -0
- package/daemon/dist/domain/scope/scope-view-projection.d.ts.map +1 -1
- package/daemon/dist/domain/scope/scope-view-projection.js +26 -10
- package/daemon/dist/domain/scope/scope-view-projection.js.map +1 -1
- package/daemon/dist/domain/seat-activity-service.d.ts +22 -5
- package/daemon/dist/domain/seat-activity-service.d.ts.map +1 -1
- package/daemon/dist/domain/seat-activity-service.js +137 -62
- package/daemon/dist/domain/seat-activity-service.js.map +1 -1
- package/daemon/dist/domain/seat-attention-reconciler.d.ts +27 -1
- package/daemon/dist/domain/seat-attention-reconciler.d.ts.map +1 -1
- package/daemon/dist/domain/seat-attention-reconciler.js +63 -7
- package/daemon/dist/domain/seat-attention-reconciler.js.map +1 -1
- package/daemon/dist/domain/seat-delivery-guard.d.ts +20 -1
- package/daemon/dist/domain/seat-delivery-guard.d.ts.map +1 -1
- package/daemon/dist/domain/seat-delivery-guard.js +87 -16
- package/daemon/dist/domain/seat-delivery-guard.js.map +1 -1
- package/daemon/dist/domain/seat-handover-service.d.ts +10 -2
- package/daemon/dist/domain/seat-handover-service.d.ts.map +1 -1
- package/daemon/dist/domain/seat-handover-service.js +100 -4
- package/daemon/dist/domain/seat-handover-service.js.map +1 -1
- package/daemon/dist/domain/seat-identity-reconciler.js +1 -1
- package/daemon/dist/domain/seat-identity-reconciler.js.map +1 -1
- package/daemon/dist/domain/seat-identity-store.d.ts +11 -1
- package/daemon/dist/domain/seat-identity-store.d.ts.map +1 -1
- package/daemon/dist/domain/seat-identity-store.js +32 -4
- package/daemon/dist/domain/seat-identity-store.js.map +1 -1
- package/daemon/dist/domain/seat-launch-additions.d.ts +115 -0
- package/daemon/dist/domain/seat-launch-additions.d.ts.map +1 -0
- package/daemon/dist/domain/seat-launch-additions.js +439 -0
- package/daemon/dist/domain/seat-launch-additions.js.map +1 -0
- package/daemon/dist/domain/seat-launch-environment.d.ts +1 -1
- package/daemon/dist/domain/seat-launch-environment.d.ts.map +1 -1
- package/daemon/dist/domain/seat-launch-environment.js +18 -2
- package/daemon/dist/domain/seat-launch-environment.js.map +1 -1
- package/daemon/dist/domain/seat-lifecycle-service.d.ts +83 -4
- package/daemon/dist/domain/seat-lifecycle-service.d.ts.map +1 -1
- package/daemon/dist/domain/seat-lifecycle-service.js +202 -12
- package/daemon/dist/domain/seat-lifecycle-service.js.map +1 -1
- package/daemon/dist/domain/seat-restart-in-place.d.ts +33 -14
- package/daemon/dist/domain/seat-restart-in-place.d.ts.map +1 -1
- package/daemon/dist/domain/seat-restart-in-place.js +102 -30
- package/daemon/dist/domain/seat-restart-in-place.js.map +1 -1
- package/daemon/dist/domain/seat-skill-apply.d.ts +139 -0
- package/daemon/dist/domain/seat-skill-apply.d.ts.map +1 -0
- package/daemon/dist/domain/seat-skill-apply.js +221 -0
- package/daemon/dist/domain/seat-skill-apply.js.map +1 -0
- package/daemon/dist/domain/seat-skill-storage.d.ts +295 -0
- package/daemon/dist/domain/seat-skill-storage.d.ts.map +1 -0
- package/daemon/dist/domain/seat-skill-storage.js +850 -0
- package/daemon/dist/domain/seat-skill-storage.js.map +1 -0
- package/daemon/dist/domain/seat-status-service.d.ts +9 -0
- package/daemon/dist/domain/seat-status-service.d.ts.map +1 -1
- package/daemon/dist/domain/seat-status-service.js +15 -3
- package/daemon/dist/domain/seat-status-service.js.map +1 -1
- package/daemon/dist/domain/self-attach-service.d.ts +3 -2
- package/daemon/dist/domain/self-attach-service.d.ts.map +1 -1
- package/daemon/dist/domain/self-attach-service.js +18 -1
- package/daemon/dist/domain/self-attach-service.js.map +1 -1
- package/daemon/dist/domain/services-readiness.d.ts.map +1 -1
- package/daemon/dist/domain/services-readiness.js +14 -3
- package/daemon/dist/domain/services-readiness.js.map +1 -1
- package/daemon/dist/domain/session-registry.d.ts +49 -0
- package/daemon/dist/domain/session-registry.d.ts.map +1 -1
- package/daemon/dist/domain/session-registry.js +137 -0
- package/daemon/dist/domain/session-registry.js.map +1 -1
- package/daemon/dist/domain/session-transport.d.ts +76 -27
- package/daemon/dist/domain/session-transport.d.ts.map +1 -1
- package/daemon/dist/domain/session-transport.js +202 -82
- package/daemon/dist/domain/session-transport.js.map +1 -1
- package/daemon/dist/domain/skill-catalog.d.ts +16 -0
- package/daemon/dist/domain/skill-catalog.d.ts.map +1 -1
- package/daemon/dist/domain/skill-catalog.js +15 -6
- package/daemon/dist/domain/skill-catalog.js.map +1 -1
- package/daemon/dist/domain/skill-discovery.d.ts +24 -3
- package/daemon/dist/domain/skill-discovery.d.ts.map +1 -1
- package/daemon/dist/domain/skill-discovery.js +85 -12
- package/daemon/dist/domain/skill-discovery.js.map +1 -1
- package/daemon/dist/domain/snapshot-repository.d.ts +1 -0
- package/daemon/dist/domain/snapshot-repository.d.ts.map +1 -1
- package/daemon/dist/domain/snapshot-repository.js +23 -10
- package/daemon/dist/domain/snapshot-repository.js.map +1 -1
- package/daemon/dist/domain/startup-orchestrator.d.ts +47 -5
- package/daemon/dist/domain/startup-orchestrator.d.ts.map +1 -1
- package/daemon/dist/domain/startup-orchestrator.js +291 -29
- package/daemon/dist/domain/startup-orchestrator.js.map +1 -1
- package/daemon/dist/domain/startup-submission-evidence.d.ts +4 -11
- package/daemon/dist/domain/startup-submission-evidence.d.ts.map +1 -1
- package/daemon/dist/domain/startup-submission-evidence.js +11 -17
- package/daemon/dist/domain/startup-submission-evidence.js.map +1 -1
- package/daemon/dist/domain/stream-dispositions.d.ts +51 -0
- package/daemon/dist/domain/stream-dispositions.d.ts.map +1 -0
- package/daemon/dist/domain/stream-dispositions.js +112 -0
- package/daemon/dist/domain/stream-dispositions.js.map +1 -0
- package/daemon/dist/domain/stream-store.d.ts +22 -0
- package/daemon/dist/domain/stream-store.d.ts.map +1 -1
- package/daemon/dist/domain/stream-store.js +49 -6
- package/daemon/dist/domain/stream-store.js.map +1 -1
- package/daemon/dist/domain/stream-subscriptions.d.ts +94 -0
- package/daemon/dist/domain/stream-subscriptions.d.ts.map +1 -0
- package/daemon/dist/domain/stream-subscriptions.js +160 -0
- package/daemon/dist/domain/stream-subscriptions.js.map +1 -0
- package/daemon/dist/domain/successor-session-launcher.d.ts +8 -1
- package/daemon/dist/domain/successor-session-launcher.d.ts.map +1 -1
- package/daemon/dist/domain/successor-session-launcher.js +6 -1
- package/daemon/dist/domain/successor-session-launcher.js.map +1 -1
- package/daemon/dist/domain/terminal/herdr-adapter.d.ts +3 -1
- package/daemon/dist/domain/terminal/herdr-adapter.d.ts.map +1 -1
- package/daemon/dist/domain/terminal/herdr-adapter.js +125 -4
- package/daemon/dist/domain/terminal/herdr-adapter.js.map +1 -1
- package/daemon/dist/domain/terminal/herdr-sessions.d.ts +9 -0
- package/daemon/dist/domain/terminal/herdr-sessions.d.ts.map +1 -0
- package/daemon/dist/domain/terminal/herdr-sessions.js +23 -0
- package/daemon/dist/domain/terminal/herdr-sessions.js.map +1 -0
- package/daemon/dist/domain/terminal/terminal-provider.d.ts +4 -0
- package/daemon/dist/domain/terminal/terminal-provider.d.ts.map +1 -1
- package/daemon/dist/domain/terminal/terminal-service.d.ts +12 -3
- package/daemon/dist/domain/terminal/terminal-service.d.ts.map +1 -1
- package/daemon/dist/domain/terminal/terminal-service.js +42 -17
- package/daemon/dist/domain/terminal/terminal-service.js.map +1 -1
- package/daemon/dist/domain/terminal/view-composer.d.ts.map +1 -1
- package/daemon/dist/domain/terminal/view-composer.js +1 -0
- package/daemon/dist/domain/terminal/view-composer.js.map +1 -1
- package/daemon/dist/domain/terminal-policy.d.ts +80 -0
- package/daemon/dist/domain/terminal-policy.d.ts.map +1 -0
- package/daemon/dist/domain/terminal-policy.js +117 -0
- package/daemon/dist/domain/terminal-policy.js.map +1 -0
- package/daemon/dist/domain/terminal-seat.d.ts +9 -0
- package/daemon/dist/domain/terminal-seat.d.ts.map +1 -0
- package/daemon/dist/domain/terminal-seat.js +37 -0
- package/daemon/dist/domain/terminal-seat.js.map +1 -0
- package/daemon/dist/domain/topology-converge.d.ts +25 -2
- package/daemon/dist/domain/topology-converge.d.ts.map +1 -1
- package/daemon/dist/domain/topology-converge.js +14 -1
- package/daemon/dist/domain/topology-converge.js.map +1 -1
- package/daemon/dist/domain/types.d.ts +73 -6
- package/daemon/dist/domain/types.d.ts.map +1 -1
- package/daemon/dist/domain/types.js.map +1 -1
- package/daemon/dist/domain/urgent-line.d.ts +4 -0
- package/daemon/dist/domain/urgent-line.d.ts.map +1 -0
- package/daemon/dist/domain/urgent-line.js +7 -0
- package/daemon/dist/domain/urgent-line.js.map +1 -0
- package/daemon/dist/domain/usage-series.d.ts.map +1 -1
- package/daemon/dist/domain/usage-series.js +6 -2
- package/daemon/dist/domain/usage-series.js.map +1 -1
- package/daemon/dist/domain/user-settings/settings-browser.d.ts.map +1 -1
- package/daemon/dist/domain/user-settings/settings-browser.js +4 -2
- package/daemon/dist/domain/user-settings/settings-browser.js.map +1 -1
- package/daemon/dist/domain/user-settings/settings-store.d.ts +3 -1
- package/daemon/dist/domain/user-settings/settings-store.d.ts.map +1 -1
- package/daemon/dist/domain/user-settings/settings-store.js +106 -8
- package/daemon/dist/domain/user-settings/settings-store.js.map +1 -1
- package/daemon/dist/domain/view-projector.d.ts.map +1 -1
- package/daemon/dist/domain/view-projector.js +2 -1
- package/daemon/dist/domain/view-projector.js.map +1 -1
- package/daemon/dist/domain/watchdog-delivery.d.ts +3 -23
- package/daemon/dist/domain/watchdog-delivery.d.ts.map +1 -1
- package/daemon/dist/domain/watchdog-delivery.js +12 -89
- package/daemon/dist/domain/watchdog-delivery.js.map +1 -1
- package/daemon/dist/domain/watchdog-history-log.d.ts +5 -2
- package/daemon/dist/domain/watchdog-history-log.d.ts.map +1 -1
- package/daemon/dist/domain/watchdog-history-log.js.map +1 -1
- package/daemon/dist/domain/watchdog-job-update.d.ts +21 -0
- package/daemon/dist/domain/watchdog-job-update.d.ts.map +1 -0
- package/daemon/dist/domain/watchdog-job-update.js +143 -0
- package/daemon/dist/domain/watchdog-job-update.js.map +1 -0
- package/daemon/dist/domain/watchdog-jobs-repository.d.ts +65 -9
- package/daemon/dist/domain/watchdog-jobs-repository.d.ts.map +1 -1
- package/daemon/dist/domain/watchdog-jobs-repository.js +194 -21
- package/daemon/dist/domain/watchdog-jobs-repository.js.map +1 -1
- package/daemon/dist/domain/watchdog-policy-engine.d.ts +39 -24
- package/daemon/dist/domain/watchdog-policy-engine.d.ts.map +1 -1
- package/daemon/dist/domain/watchdog-policy-engine.js +89 -55
- package/daemon/dist/domain/watchdog-policy-engine.js.map +1 -1
- package/daemon/dist/domain/whoami-service.d.ts +2 -0
- package/daemon/dist/domain/whoami-service.d.ts.map +1 -1
- package/daemon/dist/domain/whoami-service.js +23 -6
- package/daemon/dist/domain/whoami-service.js.map +1 -1
- package/daemon/dist/domain/workflow-boot-sweep.d.ts +2 -1
- package/daemon/dist/domain/workflow-boot-sweep.d.ts.map +1 -1
- package/daemon/dist/domain/workflow-boot-sweep.js +11 -5
- package/daemon/dist/domain/workflow-boot-sweep.js.map +1 -1
- package/daemon/dist/domain/workflow-exception-escalation.d.ts.map +1 -1
- package/daemon/dist/domain/workflow-exception-escalation.js +9 -4
- package/daemon/dist/domain/workflow-exception-escalation.js.map +1 -1
- package/daemon/dist/domain/workflow-projector.d.ts +5 -2
- package/daemon/dist/domain/workflow-projector.d.ts.map +1 -1
- package/daemon/dist/domain/workflow-projector.js +21 -9
- package/daemon/dist/domain/workflow-projector.js.map +1 -1
- package/daemon/dist/domain/workflow-role-context.js +2 -2
- package/daemon/dist/domain/workflow-role-context.js.map +1 -1
- package/daemon/dist/domain/workflow-runtime.d.ts +8 -2
- package/daemon/dist/domain/workflow-runtime.d.ts.map +1 -1
- package/daemon/dist/domain/workflow-runtime.js +32 -7
- package/daemon/dist/domain/workflow-runtime.js.map +1 -1
- package/daemon/dist/domain/workspace/project-read.d.ts +2 -0
- package/daemon/dist/domain/workspace/project-read.d.ts.map +1 -1
- package/daemon/dist/domain/workspace/project-read.js +10 -1
- package/daemon/dist/domain/workspace/project-read.js.map +1 -1
- package/daemon/dist/index.d.ts.map +1 -1
- package/daemon/dist/index.js +2 -0
- package/daemon/dist/index.js.map +1 -1
- package/daemon/dist/router-line-surface.d.ts +2 -0
- package/daemon/dist/router-line-surface.d.ts.map +1 -0
- package/daemon/dist/router-line-surface.js +3 -0
- package/daemon/dist/router-line-surface.js.map +1 -0
- package/daemon/dist/routes/activity.d.ts +13 -1
- package/daemon/dist/routes/activity.d.ts.map +1 -1
- package/daemon/dist/routes/activity.js +70 -2
- package/daemon/dist/routes/activity.js.map +1 -1
- package/daemon/dist/routes/agent-images.d.ts.map +1 -1
- package/daemon/dist/routes/agent-images.js +12 -2
- package/daemon/dist/routes/agent-images.js.map +1 -1
- package/daemon/dist/routes/attention.d.ts.map +1 -1
- package/daemon/dist/routes/attention.js +30 -3
- package/daemon/dist/routes/attention.js.map +1 -1
- package/daemon/dist/routes/bootstrap-failure-response.js +2 -2
- package/daemon/dist/routes/bootstrap-failure-response.js.map +1 -1
- package/daemon/dist/routes/bundles.js +1 -1
- package/daemon/dist/routes/bundles.js.map +1 -1
- package/daemon/dist/routes/compaction.d.ts.map +1 -1
- package/daemon/dist/routes/compaction.js +38 -12
- package/daemon/dist/routes/compaction.js.map +1 -1
- package/daemon/dist/routes/discovery.js +3 -0
- package/daemon/dist/routes/discovery.js.map +1 -1
- package/daemon/dist/routes/down.js +9 -1
- package/daemon/dist/routes/down.js.map +1 -1
- package/daemon/dist/routes/gateway.d.ts +2 -0
- package/daemon/dist/routes/gateway.d.ts.map +1 -1
- package/daemon/dist/routes/gateway.js +181 -1
- package/daemon/dist/routes/gateway.js.map +1 -1
- package/daemon/dist/routes/hosts.d.ts.map +1 -1
- package/daemon/dist/routes/hosts.js +2 -0
- package/daemon/dist/routes/hosts.js.map +1 -1
- package/daemon/dist/routes/kernel-status.js +6 -1
- package/daemon/dist/routes/kernel-status.js.map +1 -1
- package/daemon/dist/routes/mission-control.d.ts.map +1 -1
- package/daemon/dist/routes/mission-control.js +5 -1
- package/daemon/dist/routes/mission-control.js.map +1 -1
- package/daemon/dist/routes/projects.d.ts.map +1 -1
- package/daemon/dist/routes/projects.js +59 -12
- package/daemon/dist/routes/projects.js.map +1 -1
- package/daemon/dist/routes/proof.js +2 -2
- package/daemon/dist/routes/proof.js.map +1 -1
- package/daemon/dist/routes/provider.d.ts.map +1 -1
- package/daemon/dist/routes/provider.js +87 -73
- package/daemon/dist/routes/provider.js.map +1 -1
- package/daemon/dist/routes/queue.d.ts.map +1 -1
- package/daemon/dist/routes/queue.js +125 -16
- package/daemon/dist/routes/queue.js.map +1 -1
- package/daemon/dist/routes/rigs.d.ts.map +1 -1
- package/daemon/dist/routes/rigs.js +104 -20
- package/daemon/dist/routes/rigs.js.map +1 -1
- package/daemon/dist/routes/rigspec.d.ts.map +1 -1
- package/daemon/dist/routes/rigspec.js +40 -15
- package/daemon/dist/routes/rigspec.js.map +1 -1
- package/daemon/dist/routes/scopes.d.ts.map +1 -1
- package/daemon/dist/routes/scopes.js +30 -7
- package/daemon/dist/routes/scopes.js.map +1 -1
- package/daemon/dist/routes/seat.d.ts.map +1 -1
- package/daemon/dist/routes/seat.js +21 -5
- package/daemon/dist/routes/seat.js.map +1 -1
- package/daemon/dist/routes/sessions.js +5 -0
- package/daemon/dist/routes/sessions.js.map +1 -1
- package/daemon/dist/routes/skills.d.ts.map +1 -1
- package/daemon/dist/routes/skills.js +55 -2
- package/daemon/dist/routes/skills.js.map +1 -1
- package/daemon/dist/routes/stream.d.ts.map +1 -1
- package/daemon/dist/routes/stream.js +62 -13
- package/daemon/dist/routes/stream.js.map +1 -1
- package/daemon/dist/routes/terminal.d.ts.map +1 -1
- package/daemon/dist/routes/terminal.js +20 -11
- package/daemon/dist/routes/terminal.js.map +1 -1
- package/daemon/dist/routes/transcripts.d.ts.map +1 -1
- package/daemon/dist/routes/transcripts.js +7 -3
- package/daemon/dist/routes/transcripts.js.map +1 -1
- package/daemon/dist/routes/transport.d.ts.map +1 -1
- package/daemon/dist/routes/transport.js +25 -3
- package/daemon/dist/routes/transport.js.map +1 -1
- package/daemon/dist/routes/up.js +41 -52
- package/daemon/dist/routes/up.js.map +1 -1
- package/daemon/dist/routes/watchdog.d.ts +1 -0
- package/daemon/dist/routes/watchdog.d.ts.map +1 -1
- package/daemon/dist/routes/watchdog.js +52 -3
- package/daemon/dist/routes/watchdog.js.map +1 -1
- package/daemon/dist/routes/workflow.d.ts.map +1 -1
- package/daemon/dist/routes/workflow.js +24 -13
- package/daemon/dist/routes/workflow.js.map +1 -1
- package/daemon/dist/server.d.ts +2 -0
- package/daemon/dist/server.d.ts.map +1 -1
- package/daemon/dist/server.js +4 -1
- package/daemon/dist/server.js.map +1 -1
- package/daemon/dist/skill-loadout-surface.d.ts +2 -0
- package/daemon/dist/skill-loadout-surface.d.ts.map +1 -1
- package/daemon/dist/skill-loadout-surface.js +2 -0
- package/daemon/dist/skill-loadout-surface.js.map +1 -1
- package/daemon/dist/startup.d.ts.map +1 -1
- package/daemon/dist/startup.js +156 -81
- package/daemon/dist/startup.js.map +1 -1
- package/daemon/dist/terminal/TerminalSessionBroker.d.ts.map +1 -1
- package/daemon/dist/terminal/TerminalSessionBroker.js +9 -2
- package/daemon/dist/terminal/TerminalSessionBroker.js.map +1 -1
- package/daemon/docs/reference/a2a-agents.md +343 -0
- package/daemon/docs/reference/acp-agents.md +77 -0
- package/daemon/docs/reference/agent-spec.md +7 -5
- package/daemon/docs/reference/agent-startup-guide.md +46 -0
- package/daemon/docs/reference/agent-state-taxonomy.md +43 -3
- package/daemon/docs/reference/checked-seat-stop.md +11 -0
- package/daemon/docs/reference/community-harness-examples/cursor/cursor.yaml +13 -0
- package/daemon/docs/reference/community-harness-examples/cursor/openrig-cursor-launch +61 -0
- package/daemon/docs/reference/community-harness-examples/hermes/config.yaml.example +18 -0
- package/daemon/docs/reference/community-harness-examples/hermes/hermes.yaml +12 -0
- package/daemon/docs/reference/community-harness-examples/hermes/openrig-hermes-launch +34 -0
- package/daemon/docs/reference/community-harness-examples/openclaw/openclaw.yaml +13 -0
- package/daemon/docs/reference/community-harness-examples/openclaw/openrig-openclaw-launch +38 -0
- package/daemon/docs/reference/community-harness-presets.md +179 -0
- package/daemon/docs/reference/getting-started.md +148 -23
- package/daemon/docs/reference/operation-correlation.md +9 -0
- package/daemon/docs/reference/project-workspace.md +6 -0
- package/daemon/docs/reference/quickstart.md +33 -20
- package/daemon/docs/reference/refocus-channel.md +11 -3
- package/daemon/docs/reference/rig-spec.md +83 -3
- package/daemon/docs/reference/seat-delivery.md +130 -20
- package/daemon/docs/reference/slack-app-setup.md +52 -3
- package/daemon/docs/reference/stream-classifier-worker.md +28 -0
- package/daemon/docs/reference/telemetry.md +3 -0
- package/daemon/docs/reference/terminal-sessions.md +90 -0
- package/daemon/docs/reference/topology-naming.md +1 -1
- package/daemon/docs/reference/whats-new.md +173 -69
- package/daemon/specs/agents/shared/runtime/claude-settings.fragment.json +0 -3
- package/daemon/specs/agents/shared/skills/core/messaging-the-human/SKILL.md +43 -4
- package/daemon/specs/agents/shared/skills/core/openrig-herdr/SKILL.md +3 -0
- package/daemon/specs/agents/shared/skills/core/openrig-skills/SKILL.md +2 -2
- package/daemon/specs/agents/shared/skills/core/openrig-software-factory/references/worked-example.md +2 -2
- package/daemon/specs/agents/shared/skills/core/openrig-upgrade/SKILL.md +11 -5
- package/daemon/specs/agents/shared/skills/pods/development-team/SKILL.md +2 -0
- package/daemon/specs/agents/shared/skills/pods/development-team/references/refactoring.md +11 -0
- package/daemon/specs/agents/shared/skills/pods/review-team/SKILL.md +46 -96
- package/daemon/specs/agents/shared/skills/process/verification-before-completion/SKILL.md +17 -80
- package/daemon/specs/agents/shared/skills/process/verification-before-completion/references/performance-claims.md +12 -0
- package/daemon/specs/rigs/launch/kernel/agents/operator/agent/guidance/role.md +129 -24
- package/daemon/specs/rigs/launch/kernel/agents/queue/worker/guidance/role.md +11 -0
- package/daemon/specs/rigs/launch/kernel/agents/queue/worker/startup/context.md +3 -1
- package/daemon/specs/rigs/launch/secrets-manager/secrets-manager.compose.yaml +1 -1
- package/dist/acp/connector.d.ts +72 -0
- package/dist/acp/connector.d.ts.map +1 -0
- package/dist/acp/connector.js +218 -0
- package/dist/acp/connector.js.map +1 -0
- package/dist/acp/json-rpc-stdio.d.ts +53 -0
- package/dist/acp/json-rpc-stdio.d.ts.map +1 -0
- package/dist/acp/json-rpc-stdio.js +141 -0
- package/dist/acp/json-rpc-stdio.js.map +1 -0
- package/dist/acp/run-processes.d.ts +10 -0
- package/dist/acp/run-processes.d.ts.map +1 -0
- package/dist/acp/run-processes.js +33 -0
- package/dist/acp/run-processes.js.map +1 -0
- package/dist/build-info.js +3 -3
- package/dist/cli-error.d.ts +4 -0
- package/dist/cli-error.d.ts.map +1 -1
- package/dist/cli-error.js +6 -0
- package/dist/cli-error.js.map +1 -1
- package/dist/client.d.ts +7 -2
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +14 -7
- package/dist/client.js.map +1 -1
- package/dist/commands/acp.d.ts +11 -0
- package/dist/commands/acp.d.ts.map +1 -0
- package/dist/commands/acp.js +198 -0
- package/dist/commands/acp.js.map +1 -0
- package/dist/commands/agent-image.d.ts.map +1 -1
- package/dist/commands/agent-image.js +15 -7
- package/dist/commands/agent-image.js.map +1 -1
- package/dist/commands/archive.d.ts.map +1 -1
- package/dist/commands/archive.js +17 -3
- package/dist/commands/archive.js.map +1 -1
- package/dist/commands/attach.d.ts.map +1 -1
- package/dist/commands/attach.js +7 -5
- package/dist/commands/attach.js.map +1 -1
- package/dist/commands/auth.d.ts +3 -0
- package/dist/commands/auth.d.ts.map +1 -1
- package/dist/commands/auth.js +39 -10
- package/dist/commands/auth.js.map +1 -1
- package/dist/commands/broadcast.js +2 -0
- package/dist/commands/broadcast.js.map +1 -1
- package/dist/commands/community-harness.d.ts.map +1 -1
- package/dist/commands/community-harness.js +2 -1
- package/dist/commands/community-harness.js.map +1 -1
- package/dist/commands/compact-plan.d.ts +2 -0
- package/dist/commands/compact-plan.d.ts.map +1 -1
- package/dist/commands/compact-plan.js +40 -4
- package/dist/commands/compact-plan.js.map +1 -1
- package/dist/commands/compact.d.ts.map +1 -1
- package/dist/commands/compact.js +11 -4
- package/dist/commands/compact.js.map +1 -1
- package/dist/commands/config.d.ts.map +1 -1
- package/dist/commands/config.js +17 -3
- package/dist/commands/config.js.map +1 -1
- package/dist/commands/context.d.ts.map +1 -1
- package/dist/commands/context.js +16 -9
- package/dist/commands/context.js.map +1 -1
- package/dist/commands/create.js +2 -2
- package/dist/commands/create.js.map +1 -1
- package/dist/commands/daemon.d.ts.map +1 -1
- package/dist/commands/daemon.js +2 -0
- package/dist/commands/daemon.js.map +1 -1
- package/dist/commands/down.d.ts +5 -1
- package/dist/commands/down.d.ts.map +1 -1
- package/dist/commands/down.js +87 -3
- package/dist/commands/down.js.map +1 -1
- package/dist/commands/edge.d.ts +4 -0
- package/dist/commands/edge.d.ts.map +1 -0
- package/dist/commands/edge.js +135 -0
- package/dist/commands/edge.js.map +1 -0
- package/dist/commands/expand.d.ts.map +1 -1
- package/dist/commands/expand.js +16 -2
- package/dist/commands/expand.js.map +1 -1
- package/dist/commands/export.d.ts +1 -0
- package/dist/commands/export.d.ts.map +1 -1
- package/dist/commands/export.js +60 -2
- package/dist/commands/export.js.map +1 -1
- package/dist/commands/fork.d.ts.map +1 -1
- package/dist/commands/fork.js +22 -3
- package/dist/commands/fork.js.map +1 -1
- package/dist/commands/gateway.d.ts +39 -0
- package/dist/commands/gateway.d.ts.map +1 -1
- package/dist/commands/gateway.js +311 -3
- package/dist/commands/gateway.js.map +1 -1
- package/dist/commands/grow.js +2 -2
- package/dist/commands/grow.js.map +1 -1
- package/dist/commands/health.js +3 -2
- package/dist/commands/health.js.map +1 -1
- package/dist/commands/host.d.ts +1 -1
- package/dist/commands/host.d.ts.map +1 -1
- package/dist/commands/host.js +2 -2
- package/dist/commands/host.js.map +1 -1
- package/dist/commands/launch.d.ts.map +1 -1
- package/dist/commands/launch.js +10 -3
- package/dist/commands/launch.js.map +1 -1
- package/dist/commands/mcp.d.ts.map +1 -1
- package/dist/commands/mcp.js +113 -1
- package/dist/commands/mcp.js.map +1 -1
- package/dist/commands/plugin.d.ts.map +1 -1
- package/dist/commands/plugin.js +2 -1
- package/dist/commands/plugin.js.map +1 -1
- package/dist/commands/project-worker.d.ts +25 -1
- package/dist/commands/project-worker.d.ts.map +1 -1
- package/dist/commands/project-worker.js +9 -7
- package/dist/commands/project-worker.js.map +1 -1
- package/dist/commands/project.d.ts +2 -0
- package/dist/commands/project.d.ts.map +1 -1
- package/dist/commands/project.js +64 -1
- package/dist/commands/project.js.map +1 -1
- package/dist/commands/provider.d.ts.map +1 -1
- package/dist/commands/provider.js +72 -44
- package/dist/commands/provider.js.map +1 -1
- package/dist/commands/ps.d.ts +16 -1
- package/dist/commands/ps.d.ts.map +1 -1
- package/dist/commands/ps.js +145 -52
- package/dist/commands/ps.js.map +1 -1
- package/dist/commands/queue.d.ts +7 -1
- package/dist/commands/queue.d.ts.map +1 -1
- package/dist/commands/queue.js +97 -13
- package/dist/commands/queue.js.map +1 -1
- package/dist/commands/reconcile-session.d.ts.map +1 -1
- package/dist/commands/reconcile-session.js +6 -0
- package/dist/commands/reconcile-session.js.map +1 -1
- package/dist/commands/release.d.ts.map +1 -1
- package/dist/commands/release.js +16 -2
- package/dist/commands/release.js.map +1 -1
- package/dist/commands/restore-check.d.ts.map +1 -1
- package/dist/commands/restore-check.js +2 -1
- package/dist/commands/restore-check.js.map +1 -1
- package/dist/commands/restore-packet.d.ts.map +1 -1
- package/dist/commands/restore-packet.js +2 -1
- package/dist/commands/restore-packet.js.map +1 -1
- package/dist/commands/restore.d.ts.map +1 -1
- package/dist/commands/restore.js +23 -6
- package/dist/commands/restore.js.map +1 -1
- package/dist/commands/scope.d.ts.map +1 -1
- package/dist/commands/scope.js +5 -2
- package/dist/commands/scope.js.map +1 -1
- package/dist/commands/seat.d.ts +2 -0
- package/dist/commands/seat.d.ts.map +1 -1
- package/dist/commands/seat.js +124 -10
- package/dist/commands/seat.js.map +1 -1
- package/dist/commands/send.d.ts.map +1 -1
- package/dist/commands/send.js +87 -56
- package/dist/commands/send.js.map +1 -1
- package/dist/commands/setup.d.ts +27 -0
- package/dist/commands/setup.d.ts.map +1 -1
- package/dist/commands/setup.js +189 -16
- package/dist/commands/setup.js.map +1 -1
- package/dist/commands/shrink.d.ts.map +1 -1
- package/dist/commands/shrink.js +16 -2
- package/dist/commands/shrink.js.map +1 -1
- package/dist/commands/skill.d.ts.map +1 -1
- package/dist/commands/skill.js +116 -3
- package/dist/commands/skill.js.map +1 -1
- package/dist/commands/slack.d.ts.map +1 -1
- package/dist/commands/slack.js +11 -24
- package/dist/commands/slack.js.map +1 -1
- package/dist/commands/snapshot.d.ts.map +1 -1
- package/dist/commands/snapshot.js +36 -10
- package/dist/commands/snapshot.js.map +1 -1
- package/dist/commands/specs.d.ts.map +1 -1
- package/dist/commands/specs.js +11 -5
- package/dist/commands/specs.js.map +1 -1
- package/dist/commands/start.d.ts.map +1 -1
- package/dist/commands/start.js +54 -35
- package/dist/commands/start.js.map +1 -1
- package/dist/commands/status.d.ts.map +1 -1
- package/dist/commands/status.js +8 -2
- package/dist/commands/status.js.map +1 -1
- package/dist/commands/stream-outcome.d.ts +157 -0
- package/dist/commands/stream-outcome.d.ts.map +1 -0
- package/dist/commands/stream-outcome.js +81 -0
- package/dist/commands/stream-outcome.js.map +1 -0
- package/dist/commands/stream.d.ts.map +1 -1
- package/dist/commands/stream.js +64 -2
- package/dist/commands/stream.js.map +1 -1
- package/dist/commands/terminal.d.ts +1 -0
- package/dist/commands/terminal.d.ts.map +1 -1
- package/dist/commands/terminal.js +35 -6
- package/dist/commands/terminal.js.map +1 -1
- package/dist/commands/topology-default-agent.d.ts +2 -2
- package/dist/commands/topology-default-agent.d.ts.map +1 -1
- package/dist/commands/topology-default-agent.js +5 -3
- package/dist/commands/topology-default-agent.js.map +1 -1
- package/dist/commands/transcript.d.ts.map +1 -1
- package/dist/commands/transcript.js +12 -7
- package/dist/commands/transcript.js.map +1 -1
- package/dist/commands/unarchive.d.ts.map +1 -1
- package/dist/commands/unarchive.js +16 -2
- package/dist/commands/unarchive.js.map +1 -1
- package/dist/commands/up.d.ts.map +1 -1
- package/dist/commands/up.js +106 -35
- package/dist/commands/up.js.map +1 -1
- package/dist/commands/walk.d.ts.map +1 -1
- package/dist/commands/walk.js +2 -1
- package/dist/commands/walk.js.map +1 -1
- package/dist/commands/watchdog.d.ts.map +1 -1
- package/dist/commands/watchdog.js +80 -5
- package/dist/commands/watchdog.js.map +1 -1
- package/dist/commands/whoami.d.ts.map +1 -1
- package/dist/commands/whoami.js +3 -0
- package/dist/commands/whoami.js.map +1 -1
- package/dist/commands/workflow-errors.js +1 -1
- package/dist/commands/workflow-errors.js.map +1 -1
- package/dist/commands/workflow-render.js +4 -4
- package/dist/commands/workflow-render.js.map +1 -1
- package/dist/commands/workflow.d.ts.map +1 -1
- package/dist/commands/workflow.js +34 -15
- package/dist/commands/workflow.js.map +1 -1
- package/dist/config-store.d.ts +18 -2
- package/dist/config-store.d.ts.map +1 -1
- package/dist/config-store.js +120 -11
- package/dist/config-store.js.map +1 -1
- package/dist/daemon-lifecycle.d.ts +13 -4
- package/dist/daemon-lifecycle.d.ts.map +1 -1
- package/dist/daemon-lifecycle.js +100 -30
- package/dist/daemon-lifecycle.js.map +1 -1
- package/dist/daemon-reachability.d.ts +13 -0
- package/dist/daemon-reachability.d.ts.map +1 -1
- package/dist/daemon-reachability.js +28 -0
- package/dist/daemon-reachability.js.map +1 -1
- package/dist/decisions/decisions.d.ts +203 -0
- package/dist/decisions/decisions.d.ts.map +1 -0
- package/dist/decisions/decisions.js +374 -0
- package/dist/decisions/decisions.js.map +1 -0
- package/dist/decisions/stream-consumer.d.ts +255 -0
- package/dist/decisions/stream-consumer.d.ts.map +1 -0
- package/dist/decisions/stream-consumer.js +282 -0
- package/dist/decisions/stream-consumer.js.map +1 -0
- package/dist/decisions/templates.d.ts +8 -0
- package/dist/decisions/templates.d.ts.map +1 -0
- package/dist/decisions/templates.js +34 -0
- package/dist/decisions/templates.js.map +1 -0
- package/dist/fetch-with-timeout.d.ts.map +1 -1
- package/dist/fetch-with-timeout.js +19 -16
- package/dist/fetch-with-timeout.js.map +1 -1
- package/dist/fresh-seat-command.d.ts +18 -0
- package/dist/fresh-seat-command.d.ts.map +1 -0
- package/dist/fresh-seat-command.js +36 -0
- package/dist/fresh-seat-command.js.map +1 -0
- package/dist/front-door.d.ts +4 -0
- package/dist/front-door.d.ts.map +1 -1
- package/dist/front-door.js +8 -4
- package/dist/front-door.js.map +1 -1
- package/dist/host-bindings.d.ts +6 -0
- package/dist/host-bindings.d.ts.map +1 -1
- package/dist/host-bindings.js +23 -13
- package/dist/host-bindings.js.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -1
- package/dist/lazy-program.d.ts.map +1 -1
- package/dist/lazy-program.js +2 -0
- package/dist/lazy-program.js.map +1 -1
- package/dist/lib/bundle-check.d.ts.map +1 -1
- package/dist/lib/bundle-check.js +13 -5
- package/dist/lib/bundle-check.js.map +1 -1
- package/dist/lib/run-on-host.d.ts +29 -0
- package/dist/lib/run-on-host.d.ts.map +1 -0
- package/dist/lib/run-on-host.js +69 -0
- package/dist/lib/run-on-host.js.map +1 -0
- package/dist/lib/seat-activity.d.ts +17 -0
- package/dist/lib/seat-activity.d.ts.map +1 -0
- package/dist/lib/seat-activity.js +29 -0
- package/dist/lib/seat-activity.js.map +1 -0
- package/dist/local-daemon-owner.d.ts +4 -0
- package/dist/local-daemon-owner.d.ts.map +1 -1
- package/dist/local-daemon-owner.js +1 -1
- package/dist/local-daemon-owner.js.map +1 -1
- package/dist/mcp-http.d.ts +42 -0
- package/dist/mcp-http.d.ts.map +1 -0
- package/dist/mcp-http.js +232 -0
- package/dist/mcp-http.js.map +1 -0
- package/dist/mcp-server.d.ts +30 -2
- package/dist/mcp-server.d.ts.map +1 -1
- package/dist/mcp-server.js +1126 -407
- package/dist/mcp-server.js.map +1 -1
- package/dist/rig-handle.d.ts +18 -1
- package/dist/rig-handle.d.ts.map +1 -1
- package/dist/rig-handle.js +19 -2
- package/dist/rig-handle.js.map +1 -1
- package/dist/seat-launch-additions-lines.d.ts +11 -0
- package/dist/seat-launch-additions-lines.d.ts.map +1 -0
- package/dist/seat-launch-additions-lines.js +14 -0
- package/dist/seat-launch-additions-lines.js.map +1 -0
- package/dist/terminal-window.d.ts +1 -1
- package/dist/terminal-window.d.ts.map +1 -1
- package/dist/terminal-window.js +50 -22
- package/dist/terminal-window.js.map +1 -1
- package/package.json +1 -1
- package/tui/dist/attention/attention-model.d.ts +3 -1
- package/tui/dist/attention/attention-model.d.ts.map +1 -1
- package/tui/dist/attention/attention-model.js +68 -1
- package/tui/dist/attention/attention-model.js.map +1 -1
- package/tui/dist/commands/registry.d.ts.map +1 -1
- package/tui/dist/commands/registry.js +2 -0
- package/tui/dist/commands/registry.js.map +1 -1
- package/tui/dist/config/config-model.d.ts.map +1 -1
- package/tui/dist/config/config-model.js +3 -1
- package/tui/dist/config/config-model.js.map +1 -1
- package/tui/dist/connections/connections-model.d.ts +0 -5
- package/tui/dist/connections/connections-model.d.ts.map +1 -1
- package/tui/dist/connections/connections-model.js +1 -1
- package/tui/dist/connections/connections-model.js.map +1 -1
- package/tui/dist/daemon-client.d.ts +20 -0
- package/tui/dist/daemon-client.d.ts.map +1 -1
- package/tui/dist/daemon-client.js +27 -0
- package/tui/dist/daemon-client.js.map +1 -1
- package/tui/dist/hydrate.d.ts.map +1 -1
- package/tui/dist/hydrate.js +22 -7
- package/tui/dist/hydrate.js.map +1 -1
- package/tui/dist/live.d.ts +10 -1
- package/tui/dist/live.d.ts.map +1 -1
- package/tui/dist/live.js +56 -7
- package/tui/dist/live.js.map +1 -1
- package/tui/dist/main.js +50 -3
- package/tui/dist/main.js.map +1 -1
- package/tui/dist/render.d.ts.map +1 -1
- package/tui/dist/render.js +121 -10
- package/tui/dist/render.js.map +1 -1
- package/tui/dist/topology/fixture.js +1 -1
- package/tui/dist/topology/fixture.js.map +1 -1
- package/tui/dist/topology/glyphs.js +1 -1
- package/tui/dist/topology/glyphs.js.map +1 -1
- package/tui/dist/topology/graph-types.d.ts +1 -0
- package/tui/dist/topology/graph-types.d.ts.map +1 -1
- package/tui/dist/types.d.ts +78 -0
- package/tui/dist/types.d.ts.map +1 -1
- package/tui/dist/version-skew.d.ts +24 -0
- package/tui/dist/version-skew.d.ts.map +1 -0
- package/tui/dist/version-skew.js +37 -0
- package/tui/dist/version-skew.js.map +1 -0
- package/ui/dist/assets/{index-CVgod3Pm.js → index-Blg-p32B.js} +92 -92
- package/ui/dist/index.html +1 -1
- package/daemon/dist/domain/provider/subscription-moves.d.ts +0 -77
- package/daemon/dist/domain/provider/subscription-moves.d.ts.map +0 -1
- package/daemon/dist/domain/provider/subscription-moves.js +0 -140
- package/daemon/dist/domain/provider/subscription-moves.js.map +0 -1
|
@@ -1,8 +1,12 @@
|
|
|
1
|
+
import { codexEnvelopeArgs } from "../domain/codex-rebuild-permissions.js";
|
|
1
2
|
import { operationalLaunchArg } from "./kernel-authority.js";
|
|
2
3
|
import nodePath from "node:path";
|
|
3
4
|
import fs from "node:fs";
|
|
4
5
|
import { createHash } from "node:crypto";
|
|
6
|
+
import { execFile } from "node:child_process";
|
|
7
|
+
import { createRequire } from "node:module";
|
|
5
8
|
import os from "node:os";
|
|
9
|
+
import { isDeepStrictEqual } from "node:util";
|
|
6
10
|
import { parse as parseToml } from "smol-toml";
|
|
7
11
|
import { codexPostureArg } from "./yolo-mode.js";
|
|
8
12
|
import { resolveConcreteHint } from "../domain/runtime-adapter.js";
|
|
@@ -12,13 +16,31 @@ import { assessNativeResumeProbe, buildCodexResumeCore, hasCodexUpdateHeader } f
|
|
|
12
16
|
import { unknownDaemonSupportMessage } from "../domain/codex-daemon-support.js";
|
|
13
17
|
import { CODEX_NETWORK_DEFAULT_OVERRIDE, codexNetworkDefaultArg } from "../domain/codex-network-default.js";
|
|
14
18
|
import { resolveCodexGitAddDirs } from "../domain/codex-git-add-dirs.js";
|
|
15
|
-
import { mergeManagedBlock } from "../domain/managed-blocks.js";
|
|
19
|
+
import { isPerSeatRoleGuidance, mergeManagedBlock, perSeatRoleSkipWarning } from "../domain/managed-blocks.js";
|
|
16
20
|
import { excludeNewGeneratedFiles } from "../domain/generated-file-hygiene.js";
|
|
17
21
|
import { codexQueueStateRoot, codexTeamWorkspaceArg } from "../domain/codex-team-workspace.js";
|
|
18
22
|
import { shellQuote } from "./shell-quote.js";
|
|
19
|
-
import {
|
|
23
|
+
import { execRuntimeProbe } from "./runtime-probe-exec.js";
|
|
20
24
|
import { resolveReadinessTimeoutMs } from "../domain/readiness-timeout.js";
|
|
25
|
+
import { CODEX_CORE_MARKETPLACE, CODEX_CORE_PLUGIN, CODEX_CORE_PLUGIN_KEY, CODEX_MARKETPLACE_MANIFEST_PATH, codexCoreMarketplaceManifest, codexCorePluginEnablement, codexReadableConfigLayers, recordedMarketplaceSource, userLayerEnablesCorePlugin, } from "../domain/codex-core-plugin-install.js";
|
|
26
|
+
const defaultCodexCli = (args, env) => new Promise((resolve) => {
|
|
27
|
+
execFile("codex", args, { env, timeout: 120_000, maxBuffer: 4 * 1024 * 1024 }, (error, stdout, stderr) => {
|
|
28
|
+
const status = error ? (typeof error.code === "number" ? error.code : null) : 0;
|
|
29
|
+
// A spawn failure (ENOENT, EACCES) has no exit code and empty output: keep its message as the reason.
|
|
30
|
+
const err = String(stderr ?? "");
|
|
31
|
+
resolve({ status, stdout: String(stdout ?? ""), stderr: err.trim() || !error ? err : error.message });
|
|
32
|
+
});
|
|
33
|
+
});
|
|
34
|
+
// Codex's hook trust recipe (the key and hash Codex records for a trusted hook), kept in one script.
|
|
35
|
+
const codexHookTrust = createRequire(import.meta.url)("../../assets/plugins/openrig-core/hooks/scripts/codex-hook-trust.cjs");
|
|
21
36
|
import { listNativeProcesses, observeCodexPaneProcess, observeCodexForkProcess, verifyPaneIdleShell } from "../domain/native-process-lineage.js";
|
|
37
|
+
import { recordSeatSkillWrite, seatPluginSkillsLossNote, seatProjectionComplete, seatSkillWriteRefusal } from "../domain/seat-skill-storage.js";
|
|
38
|
+
import { codexPluginContentHash, planOwnedCodexContentApproval, recordOwnedCodexApproval } from "../domain/codex-owned-plugin-trust.js";
|
|
39
|
+
// The managed resume check's poll window: a quick phase, then an extended one for a slow boot.
|
|
40
|
+
const RESUME_QUICK_ATTEMPTS = 6;
|
|
41
|
+
const RESUME_EXTENDED_ATTEMPTS = 24;
|
|
42
|
+
const RESUME_QUICK_SLEEP_MS = 200;
|
|
43
|
+
const RESUME_EXTENDED_SLEEP_MS = 500;
|
|
22
44
|
/**
|
|
23
45
|
* Codex runtime adapter. Projects resources to .agents/ targets (preserving
|
|
24
46
|
* existing Codex filesystem contract) and delivers startup files.
|
|
@@ -30,6 +52,8 @@ export class CodexRuntimeAdapter {
|
|
|
30
52
|
fs;
|
|
31
53
|
listProcesses;
|
|
32
54
|
readThreadIdByPid;
|
|
55
|
+
readResumeEvidence;
|
|
56
|
+
resumeProofWindowMs;
|
|
33
57
|
readinessSettings;
|
|
34
58
|
sleep;
|
|
35
59
|
resolveHomeDirByPid;
|
|
@@ -59,7 +83,21 @@ export class CodexRuntimeAdapter {
|
|
|
59
83
|
// (FR-A) to write config-layer [hooks] command entries that are cwd-independent and
|
|
60
84
|
// version-matched to the running daemon (NOT ${PLUGIN_ROOT}, NOT a per-cwd copy).
|
|
61
85
|
activityRelayPath;
|
|
86
|
+
// The vendored openrig-core plugin directory, resolved when the install step runs (vendoring happens at startup).
|
|
87
|
+
resolveCorePluginDir;
|
|
88
|
+
// Whether a node's resolved plugin selection includes openrig-core (the test that also gives it OPENRIG_SEAT_PROJECT_DIR).
|
|
89
|
+
resolveCorePluginSelected;
|
|
90
|
+
runCodexCli;
|
|
91
|
+
// One Codex config.toml per adapter: launches, the boot step and resume all write it (and Codex's install writes it too),
|
|
92
|
+
// so each of those runs its whole setup under this one lock, one after another.
|
|
93
|
+
configLock = Promise.resolve();
|
|
94
|
+
codexSystemConfigDir;
|
|
95
|
+
/** Build the Codex launch adapter with injectable filesystem, process, and CLI seams for isolated checks. */
|
|
62
96
|
constructor(deps) {
|
|
97
|
+
this.resolveCorePluginDir = deps.resolveCorePluginDir;
|
|
98
|
+
this.resolveCorePluginSelected = deps.resolveCorePluginSelected;
|
|
99
|
+
this.runCodexCli = deps.runCodexCli ?? defaultCodexCli;
|
|
100
|
+
this.codexSystemConfigDir = deps.codexSystemConfigDir ?? "/etc/codex";
|
|
63
101
|
this.tmux = deps.tmux;
|
|
64
102
|
this.resolveManagedConfigSettings = deps.resolveManagedConfigSettings;
|
|
65
103
|
this.resolveHooksEnabled = deps.resolveHooksEnabled;
|
|
@@ -80,6 +118,18 @@ export class CodexRuntimeAdapter {
|
|
|
80
118
|
});
|
|
81
119
|
this.readThreadIdByPid = deps.readThreadIdByPid ?? ((pid, identity) => identity === undefined
|
|
82
120
|
? this.readThreadIdFromLogs(pid) : threadIdResolver.resolveForkChild(pid, identity));
|
|
121
|
+
// A just-launched resume may log only inside its start second, so this reads like a fork child's ("by-process").
|
|
122
|
+
this.readResumeEvidence = deps.readResumeEvidence ?? (deps.readThreadIdByPid
|
|
123
|
+
? async (pid, identity) => {
|
|
124
|
+
const threadId = (await deps.readThreadIdByPid(pid, identity))?.trim();
|
|
125
|
+
return threadId ? { threadId } : { reason: "no_log_row" };
|
|
126
|
+
}
|
|
127
|
+
: async (pid, identity) => {
|
|
128
|
+
let reason;
|
|
129
|
+
const threadId = (await threadIdResolver.resolveForkChild(pid, identity, (d) => { reason = d.reason; }))?.trim();
|
|
130
|
+
return threadId ? { threadId } : { reason: reason ?? "no_log_row" };
|
|
131
|
+
});
|
|
132
|
+
this.resumeProofWindowMs = deps.resumeProofWindowMs ?? RESUME_QUICK_ATTEMPTS * RESUME_QUICK_SLEEP_MS + RESUME_EXTENDED_ATTEMPTS * RESUME_EXTENDED_SLEEP_MS;
|
|
83
133
|
this.readinessSettings = deps.readinessSettings;
|
|
84
134
|
this.sleep = deps.sleep ?? ((ms) => new Promise((resolve) => setTimeout(resolve, ms)));
|
|
85
135
|
this.verifyProfilePreflight = deps.verifyProfilePreflight
|
|
@@ -93,8 +143,17 @@ export class CodexRuntimeAdapter {
|
|
|
93
143
|
* not block the launch.
|
|
94
144
|
*/
|
|
95
145
|
async ensureManagedConfig() {
|
|
146
|
+
return this.withConfigLock(() => this.applyManagedConfig());
|
|
147
|
+
}
|
|
148
|
+
/** Run `task` after every earlier config setup on this adapter has finished, whatever its outcome. */
|
|
149
|
+
withConfigLock(task) {
|
|
150
|
+
const run = this.configLock.then(task, task);
|
|
151
|
+
this.configLock = run.catch(() => undefined);
|
|
152
|
+
return run;
|
|
153
|
+
}
|
|
154
|
+
async applyManagedConfig() {
|
|
96
155
|
if (!this.resolveManagedConfigSettings)
|
|
97
|
-
return;
|
|
156
|
+
return undefined;
|
|
98
157
|
try {
|
|
99
158
|
const { enabled, codexVersion } = await this.resolveManagedConfigSettings();
|
|
100
159
|
this.ensureCodexFeatureFlag(enabled, { codexVersion });
|
|
@@ -102,11 +161,209 @@ export class CodexRuntimeAdapter {
|
|
|
102
161
|
this.ensureCodexActivityHooks();
|
|
103
162
|
else
|
|
104
163
|
this.removeCodexActivityHooks();
|
|
164
|
+
return { hooksEnabled: enabled };
|
|
105
165
|
}
|
|
106
166
|
catch (err) {
|
|
107
167
|
console.error(`[openrig] runtime setup warning: ${err.message}`);
|
|
168
|
+
return undefined;
|
|
108
169
|
}
|
|
109
170
|
}
|
|
171
|
+
/**
|
|
172
|
+
* Boot step, run after the plugin is vendored: install openrig-core into Codex only when hooks are enabled and some
|
|
173
|
+
* Codex seat's resolved selection includes it. A daemon whose Codex seats didn't select it never installs it.
|
|
174
|
+
*/
|
|
175
|
+
async ensureCodexCorePluginAtBoot(anySeatSelected) {
|
|
176
|
+
if (!anySeatSelected || !this.resolveHooksEnabled)
|
|
177
|
+
return;
|
|
178
|
+
const resolveHooksEnabled = this.resolveHooksEnabled;
|
|
179
|
+
await this.withConfigLock(async () => {
|
|
180
|
+
try {
|
|
181
|
+
if (await resolveHooksEnabled())
|
|
182
|
+
await this.ensureCodexCorePlugin();
|
|
183
|
+
}
|
|
184
|
+
catch (err) {
|
|
185
|
+
console.error(`[openrig] runtime setup warning: ${err.message}`);
|
|
186
|
+
}
|
|
187
|
+
});
|
|
188
|
+
}
|
|
189
|
+
/**
|
|
190
|
+
* Install the vendored openrig-core plugin into Codex through Codex's own commands, so a seat that selected it gets its
|
|
191
|
+
* refocus and skills, trusting exact shipped hooks on first install and renewing proven owned content approvals. It runs only when the person's config
|
|
192
|
+
* doesn't disable the plugin (codexCorePluginEnablement), and only when the installed version differs from the vendored
|
|
193
|
+
* one. Codex owns its plugin cache; its immutable legacy trust baseline is never rewritten.
|
|
194
|
+
*/
|
|
195
|
+
async ensureCodexCorePlugin() {
|
|
196
|
+
const report = (outcome, reason) => {
|
|
197
|
+
if (outcome !== "current")
|
|
198
|
+
console.error(`[openrig] codex core plugin ${outcome}: ${reason}`);
|
|
199
|
+
return { outcome, reason };
|
|
200
|
+
};
|
|
201
|
+
const pluginDir = this.resolveCorePluginDir?.();
|
|
202
|
+
if (!pluginDir)
|
|
203
|
+
return { outcome: "skipped", reason: "the openrig-core plugin isn't vendored" };
|
|
204
|
+
let version;
|
|
205
|
+
try {
|
|
206
|
+
version = JSON.parse(this.fs.readFile(nodePath.join(pluginDir, ".codex-plugin", "plugin.json"))).version;
|
|
207
|
+
}
|
|
208
|
+
catch {
|
|
209
|
+
return report("skipped", "the vendored plugin has no readable Codex manifest");
|
|
210
|
+
}
|
|
211
|
+
if (typeof version !== "string" || !/^[0-9A-Za-z._-]+$/.test(version))
|
|
212
|
+
return report("skipped", "the vendored plugin's Codex manifest has no usable version");
|
|
213
|
+
const shipped = nodePath.resolve(import.meta.dirname, "../../assets/plugins/openrig-core");
|
|
214
|
+
const ownFiles = [];
|
|
215
|
+
const collect = (dir, relative = "hooks") => {
|
|
216
|
+
for (const entry of fs.readdirSync(dir, { withFileTypes: true })) {
|
|
217
|
+
const child = nodePath.join(relative, entry.name);
|
|
218
|
+
if (entry.isDirectory())
|
|
219
|
+
collect(nodePath.join(dir, entry.name), child);
|
|
220
|
+
else
|
|
221
|
+
ownFiles.push(child);
|
|
222
|
+
}
|
|
223
|
+
};
|
|
224
|
+
collect(nodePath.join(shipped, "hooks"));
|
|
225
|
+
ownFiles.push(".codex-plugin/plugin.json");
|
|
226
|
+
const matchesShipped = (dir) => ownFiles.every(relative => {
|
|
227
|
+
try {
|
|
228
|
+
return fs.readFileSync(nodePath.join(dir, relative)).equals(fs.readFileSync(nodePath.join(shipped, relative)));
|
|
229
|
+
}
|
|
230
|
+
catch {
|
|
231
|
+
return false;
|
|
232
|
+
}
|
|
233
|
+
});
|
|
234
|
+
if (!matchesShipped(pluginDir))
|
|
235
|
+
return report("skipped", "vendored hook files differ from this daemon's shipped plugin; existing choices are left alone");
|
|
236
|
+
// Installation retains the hook-file predicate; any approval requires the complete shipped tree.
|
|
237
|
+
const matchesShippedTree = (dir) => {
|
|
238
|
+
try {
|
|
239
|
+
return codexPluginContentHash(dir, true) === codexPluginContentHash(shipped, true);
|
|
240
|
+
}
|
|
241
|
+
catch {
|
|
242
|
+
return false;
|
|
243
|
+
}
|
|
244
|
+
};
|
|
245
|
+
const codexHome = nodePath.dirname(this.resolveCodexConfigPath());
|
|
246
|
+
const readLayers = () => codexReadableConfigLayers(codexHome, this.codexSystemConfigDir).map((layer) => {
|
|
247
|
+
if (!this.fs.exists(layer.path))
|
|
248
|
+
return { ...layer, state: "absent" };
|
|
249
|
+
try {
|
|
250
|
+
return { ...layer, state: "read", content: this.fs.readFile(layer.path) };
|
|
251
|
+
}
|
|
252
|
+
catch (error) {
|
|
253
|
+
return { ...layer, state: "unreadable", reason: error.message };
|
|
254
|
+
}
|
|
255
|
+
});
|
|
256
|
+
const layers = readLayers();
|
|
257
|
+
const enablement = codexCorePluginEnablement(layers);
|
|
258
|
+
if (enablement.decision !== "allow")
|
|
259
|
+
return report("skipped", enablement.reason);
|
|
260
|
+
const pluginsDir = nodePath.dirname(pluginDir);
|
|
261
|
+
const userLayer = layers.find((layer) => layer.name === "user config");
|
|
262
|
+
const userConfig = userLayer?.state === "read" ? userLayer.content : null;
|
|
263
|
+
const recorded = recordedMarketplaceSource(userConfig);
|
|
264
|
+
// Compared as real paths, so a marketplace recorded through a symlink to the plugins folder is the same source.
|
|
265
|
+
const canonical = (p) => { try {
|
|
266
|
+
return fs.realpathSync.native(nodePath.resolve(p));
|
|
267
|
+
}
|
|
268
|
+
catch {
|
|
269
|
+
return nodePath.resolve(p);
|
|
270
|
+
} };
|
|
271
|
+
if (recorded !== undefined && (recorded === null || canonical(recorded) !== canonical(pluginsDir))) {
|
|
272
|
+
return report("skipped", `a marketplace named ${CODEX_CORE_MARKETPLACE} is already configured with another source; it's left alone`);
|
|
273
|
+
}
|
|
274
|
+
// Current only when Codex would load it: the vendored version is in its store AND the user config still registers it
|
|
275
|
+
// (our marketplace, and an explicit enabled = true, which Codex's install writes). Codex loads only configured
|
|
276
|
+
// plugins, so a cache left behind after the entry or the marketplace was removed is installed again.
|
|
277
|
+
const cacheRoot = nodePath.join(codexHome, "plugins", "cache", CODEX_CORE_MARKETPLACE, CODEX_CORE_PLUGIN);
|
|
278
|
+
const cachedDir = nodePath.join(cacheRoot, version);
|
|
279
|
+
const cached = this.fs.exists(cachedDir);
|
|
280
|
+
// Codex's "continue without trusting" choice writes no state. An existing install/configuration may therefore be a
|
|
281
|
+
// decline even with no hooks.state entry. Absent grants still stay under native review. A proven owned grant may
|
|
282
|
+
// renew its content approval; an unrecorded skip of that exact owned upgrade cannot be distinguished from pending approval.
|
|
283
|
+
const firstInstall = !this.fs.exists(cacheRoot) && !layers.some(layer => layer.state === "read"
|
|
284
|
+
&& Object.hasOwn((parseToml(layer.content).plugins ?? {}), CODEX_CORE_PLUGIN_KEY));
|
|
285
|
+
const renewContentApproval = (freshGrant = false) => {
|
|
286
|
+
const configPath = this.resolveCodexConfigPath();
|
|
287
|
+
const currentLayers = readLayers();
|
|
288
|
+
if (codexCorePluginEnablement(currentLayers).decision !== "allow")
|
|
289
|
+
return;
|
|
290
|
+
const before = this.fs.readFile(configPath);
|
|
291
|
+
const currentSource = recordedMarketplaceSource(before);
|
|
292
|
+
if (currentSource == null || canonical(currentSource) !== canonical(pluginsDir) || !userLayerEnablesCorePlugin(before))
|
|
293
|
+
return;
|
|
294
|
+
let content = before;
|
|
295
|
+
const planned = planOwnedCodexContentApproval({ configPath, content, layers: currentLayers, shipped, installed: cachedDir, freshGrant });
|
|
296
|
+
if (!planned)
|
|
297
|
+
return;
|
|
298
|
+
for (const [key, hash] of Object.entries(planned.hashes))
|
|
299
|
+
content = upsertCodexHookTrust(content, key, hash, "trusted_content_hash");
|
|
300
|
+
// The line writer must not alter examples in strings or duplicate quoted keys.
|
|
301
|
+
try {
|
|
302
|
+
const expected = parseToml(before);
|
|
303
|
+
for (const [key, hash] of Object.entries(planned.hashes))
|
|
304
|
+
expected.hooks.state[key].trusted_content_hash = hash;
|
|
305
|
+
if (!isDeepStrictEqual(parseToml(content), expected))
|
|
306
|
+
return;
|
|
307
|
+
}
|
|
308
|
+
catch {
|
|
309
|
+
return;
|
|
310
|
+
} // Leave native review and owner bytes intact for unsupported TOML spellings.
|
|
311
|
+
if (this.fs.readFile(configPath) !== before)
|
|
312
|
+
return; // A concurrent native choice wins.
|
|
313
|
+
if (content !== before)
|
|
314
|
+
this.fs.writeFile(configPath, content);
|
|
315
|
+
recordOwnedCodexApproval(configPath, planned.approval);
|
|
316
|
+
};
|
|
317
|
+
if (cached && recorded !== undefined && userLayerEnablesCorePlugin(userConfig)) {
|
|
318
|
+
renewContentApproval();
|
|
319
|
+
return report("current", `${CODEX_CORE_PLUGIN_KEY} ${version} is installed and registered`);
|
|
320
|
+
}
|
|
321
|
+
const manifestPath = nodePath.join(pluginsDir, CODEX_MARKETPLACE_MANIFEST_PATH);
|
|
322
|
+
const manifest = codexCoreMarketplaceManifest();
|
|
323
|
+
if (!this.fs.exists(manifestPath) || this.fs.readFile(manifestPath) !== manifest) {
|
|
324
|
+
this.fs.mkdirp(nodePath.dirname(manifestPath));
|
|
325
|
+
this.fs.writeFile(manifestPath, manifest);
|
|
326
|
+
}
|
|
327
|
+
const env = { ...process.env, CODEX_HOME: codexHome, ...(this.launchPath ? { PATH: this.launchPath } : {}) };
|
|
328
|
+
if (recorded === undefined) {
|
|
329
|
+
const added = await this.runCodexCli(["plugin", "marketplace", "add", pluginsDir], env);
|
|
330
|
+
if (added.status !== 0)
|
|
331
|
+
return report("skipped", `codex plugin marketplace add failed: ${(added.stderr || added.stdout).trim() || `exit ${added.status}`}`);
|
|
332
|
+
}
|
|
333
|
+
const installed = await this.runCodexCli(["plugin", "add", CODEX_CORE_PLUGIN_KEY], env);
|
|
334
|
+
if (installed.status !== 0)
|
|
335
|
+
return report("skipped", `codex plugin add failed: ${(installed.stderr || installed.stdout).trim() || `exit ${installed.status}`}`);
|
|
336
|
+
// First install grants declarations; Codex0.164 also requires full-bundle content approval. Existing declaration
|
|
337
|
+
// choices are never rewritten. No cache files or native baseline files are rewritten here.
|
|
338
|
+
let freshGrants = 0;
|
|
339
|
+
const grantLayers = readLayers();
|
|
340
|
+
if (firstInstall && codexCorePluginEnablement(grantLayers).decision === "allow" && matchesShippedTree(cachedDir)) {
|
|
341
|
+
let content = this.fs.readFile(this.resolveCodexConfigPath());
|
|
342
|
+
const hookManifest = JSON.parse(fs.readFileSync(nodePath.join(shipped, "hooks/codex.json"), "utf8"));
|
|
343
|
+
for (const [event, groups] of Object.entries(hookManifest.hooks)) {
|
|
344
|
+
groups.forEach((group, groupIndex) => group.hooks.forEach((handler, handlerIndex) => {
|
|
345
|
+
const { key, hash } = codexHookTrust.computeCodexHookTrust(event, {
|
|
346
|
+
...handler, timeoutSec: handler.timeout, matcher: group.matcher,
|
|
347
|
+
keySource: `${CODEX_CORE_PLUGIN_KEY}:hooks/codex.json`, groupIndex, handlerIndex,
|
|
348
|
+
});
|
|
349
|
+
// Any existing choice in any readable layer/profile wins; never overwrite enabled=false or an old hash.
|
|
350
|
+
const hasChoice = (doc) => {
|
|
351
|
+
if (!doc || typeof doc !== "object")
|
|
352
|
+
return false;
|
|
353
|
+
const value = doc;
|
|
354
|
+
return Object.hasOwn(value.hooks?.state ?? {}, key) || Object.values(doc).some(hasChoice);
|
|
355
|
+
};
|
|
356
|
+
if (!hasChoice(parseToml(content)) && !grantLayers.some(layer => layer.state === "read" && hasChoice(parseToml(layer.content)))) {
|
|
357
|
+
content = upsertCodexHookTrust(content, key, hash);
|
|
358
|
+
freshGrants++;
|
|
359
|
+
}
|
|
360
|
+
}));
|
|
361
|
+
}
|
|
362
|
+
this.fs.writeFile(this.resolveCodexConfigPath(), content);
|
|
363
|
+
}
|
|
364
|
+
renewContentApproval(freshGrants === 6);
|
|
365
|
+
return report("installed", `${CODEX_CORE_PLUGIN_KEY} ${version} through Codex's own install (${enablement.reason})`);
|
|
366
|
+
}
|
|
110
367
|
/**
|
|
111
368
|
* Boot step for a daemon without Codex seats: when runtime.codex.hooks_enabled is false,
|
|
112
369
|
* strip OpenRig's managed hooks block, as every boot did before. Removal writes only when
|
|
@@ -247,7 +504,7 @@ export class CodexRuntimeAdapter {
|
|
|
247
504
|
}
|
|
248
505
|
async listInstalled(binding) {
|
|
249
506
|
const results = [];
|
|
250
|
-
const skillsDir = nodePath.join(binding.cwd, ".agents", "skills");
|
|
507
|
+
const skillsDir = binding.seatSkillsRoot ?? nodePath.join(binding.cwd, ".agents", "skills");
|
|
251
508
|
if (this.fs.exists(skillsDir) && this.fs.listFiles) {
|
|
252
509
|
for (const file of this.fs.listFiles(skillsDir)) {
|
|
253
510
|
results.push({ effectiveId: file, category: "skill", installedPath: nodePath.join(skillsDir, file) });
|
|
@@ -266,7 +523,7 @@ export class CodexRuntimeAdapter {
|
|
|
266
523
|
continue;
|
|
267
524
|
}
|
|
268
525
|
try {
|
|
269
|
-
const didProject = this.projectEntry(entry, binding.cwd, warnings);
|
|
526
|
+
const didProject = this.projectEntry(entry, binding.cwd, warnings, binding.seatSkillsRoot, binding.seatSkillsRefused);
|
|
270
527
|
if (didProject) {
|
|
271
528
|
projected.push(entry.effectiveId);
|
|
272
529
|
}
|
|
@@ -293,7 +550,7 @@ export class CodexRuntimeAdapter {
|
|
|
293
550
|
for (const file of files) {
|
|
294
551
|
try {
|
|
295
552
|
const content = this.fs.readFile(file.absolutePath);
|
|
296
|
-
const hint = file.deliveryHint === "auto" ? this.detectDeliveryHint(file.path, content) : file.deliveryHint;
|
|
553
|
+
const hint = file.deliveryHint === "auto" ? this.detectDeliveryHint(file.path, content, file.orientation) : file.deliveryHint;
|
|
297
554
|
switch (hint) {
|
|
298
555
|
case "guidance_merge": {
|
|
299
556
|
const targetPath = nodePath.join(binding.cwd, "AGENTS.md");
|
|
@@ -303,9 +560,18 @@ export class CodexRuntimeAdapter {
|
|
|
303
560
|
break;
|
|
304
561
|
}
|
|
305
562
|
case "skill_install": {
|
|
306
|
-
const targetDir = nodePath.join(binding.cwd, ".agents", "skills", nodePath.basename(nodePath.dirname(file.absolutePath)));
|
|
563
|
+
const targetDir = nodePath.join(binding.seatSkillsRoot ?? nodePath.join(binding.cwd, ".agents", "skills"), nodePath.basename(nodePath.dirname(file.absolutePath)));
|
|
564
|
+
const skillTarget = nodePath.join(targetDir, nodePath.basename(file.path));
|
|
565
|
+
// OPR.0.7.0.13: never write through a link out of the seat's storage.
|
|
566
|
+
const refusal = binding.seatSkillsRoot ? binding.seatSkillsRefused ?? seatSkillWriteRefusal(binding.seatSkillsRoot, skillTarget) : undefined;
|
|
567
|
+
if (refusal) {
|
|
568
|
+
warnings.push(`skill_install: ${refusal}`);
|
|
569
|
+
continue;
|
|
570
|
+
}
|
|
307
571
|
this.fs.mkdirp(targetDir);
|
|
308
|
-
this.fs.writeFile(
|
|
572
|
+
this.fs.writeFile(skillTarget, content);
|
|
573
|
+
if (binding.seatSkillsRoot)
|
|
574
|
+
recordSeatSkillWrite(binding.seatSkillsRoot, skillTarget, file.absolutePath, content);
|
|
309
575
|
break;
|
|
310
576
|
}
|
|
311
577
|
case "send_text": {
|
|
@@ -339,10 +605,11 @@ export class CodexRuntimeAdapter {
|
|
|
339
605
|
return { ok: false, error: "resumeToken and forkSource are mutually exclusive — pick one" };
|
|
340
606
|
}
|
|
341
607
|
const updatePrompt = { handled: false };
|
|
342
|
-
|
|
608
|
+
// Only a launch that starts a conversation may install the core plugin; a resume never does.
|
|
609
|
+
const prepared = await this.prepareLaunch(binding, opts.name, undefined, { installCorePlugin: !opts.resumeToken });
|
|
343
610
|
if (!prepared.ok)
|
|
344
611
|
return prepared;
|
|
345
|
-
const { modelArg, effortArg, appliedLaunch, postureArg, queueStateDirArg, daemonArg, networkArg } = prepared;
|
|
612
|
+
const { modelArg, effortArg, appliedLaunch, postureArg, queueStateDirArg, daemonArg, networkArg, suppressAutoAddDirs } = prepared;
|
|
346
613
|
// Fork branch: `codex fork <parent_thread_id>`. Captures the NEW thread id
|
|
347
614
|
// post-fork. Parent thread id is NOT persisted onto the new seat record
|
|
348
615
|
// (identity-honesty bedrock).
|
|
@@ -396,9 +663,9 @@ export class CodexRuntimeAdapter {
|
|
|
396
663
|
// -s danger-full-access (overrides even a named profile); otherwise the named profile, or
|
|
397
664
|
// OpenRig's explicit -s workspace-write floor flag.
|
|
398
665
|
// Issue #121: only the fresh launch adds git metadata dirs; resume and fork never did.
|
|
399
|
-
const gitDirArg = opts.resumeToken
|
|
666
|
+
const gitDirArg = opts.resumeToken || binding.codexRebuildPermissions
|
|
400
667
|
? ""
|
|
401
|
-
: (await this.resolveGitAddDirs(binding.cwd)).map((dir) => ` --add-dir ${shellQuote(dir)}`).join("");
|
|
668
|
+
: suppressAutoAddDirs ? "" : (await this.resolveGitAddDirs(binding.cwd)).map((dir) => ` --add-dir ${shellQuote(dir)}`).join("");
|
|
402
669
|
const cmd = opts.resumeToken
|
|
403
670
|
// 0.5.2-07 A2-3: the pod-aware RESUME path threads the SPEC model too (reverted before — the
|
|
404
671
|
// grounding map assumed codex parity with the claude adapter, but only fresh emitted -m).
|
|
@@ -415,7 +682,8 @@ export class CodexRuntimeAdapter {
|
|
|
415
682
|
const verification = await this.verifyResumeLaunch(binding.tmuxSession, updatePrompt, { resumeToken: opts.resumeToken });
|
|
416
683
|
if (!verification.ok)
|
|
417
684
|
return verification;
|
|
418
|
-
return { ok: true, resumeToken: opts.resumeToken, resumeType: "codex_id", appliedLaunch
|
|
685
|
+
return { ok: true, resumeToken: opts.resumeToken, resumeType: "codex_id", appliedLaunch,
|
|
686
|
+
...(verification.resumedProcess ? { resumedProcess: verification.resumedProcess } : {}) };
|
|
419
687
|
}
|
|
420
688
|
const threadId = await this.captureFreshThreadId(binding, updatePrompt);
|
|
421
689
|
if (updatePrompt.failure)
|
|
@@ -430,7 +698,8 @@ export class CodexRuntimeAdapter {
|
|
|
430
698
|
async buildResumeCommand(binding, opts) {
|
|
431
699
|
if (!binding.tmuxSession)
|
|
432
700
|
return { ok: false, error: "No tmux session bound — cannot build a Codex resume command" };
|
|
433
|
-
|
|
701
|
+
// Building a resume command (the in-place restart's) never installs the core plugin.
|
|
702
|
+
const prepared = await this.prepareLaunch(binding, opts.name, opts.running, { installCorePlugin: false });
|
|
434
703
|
if (!prepared.ok)
|
|
435
704
|
return prepared;
|
|
436
705
|
const core = this.resumeCore(prepared, opts.resumeToken, binding);
|
|
@@ -455,21 +724,39 @@ export class CodexRuntimeAdapter {
|
|
|
455
724
|
}
|
|
456
725
|
/** Launch flags shared by fresh, fork and resume, decided once per launch. With `running`, the probed and
|
|
457
726
|
* prepared parts come from the running Codex instead, and no Codex process is started to decide them. */
|
|
458
|
-
async prepareLaunch(binding, name, running) {
|
|
459
|
-
|
|
727
|
+
async prepareLaunch(binding, name, running, opts) {
|
|
728
|
+
// The config write and, for a seat that selected openrig-core, its install run as one step under the config lock, so
|
|
729
|
+
// concurrent launches never interleave them. An unselected seat's launch never installs.
|
|
730
|
+
await this.withConfigLock(async () => {
|
|
731
|
+
const managed = await this.applyManagedConfig();
|
|
732
|
+
if (opts.installCorePlugin && managed?.hooksEnabled && this.resolveCorePluginSelected?.(binding.nodeId)) {
|
|
733
|
+
try {
|
|
734
|
+
await this.ensureCodexCorePlugin();
|
|
735
|
+
}
|
|
736
|
+
catch (err) {
|
|
737
|
+
console.error(`[openrig] runtime setup warning: ${err.message}`);
|
|
738
|
+
}
|
|
739
|
+
}
|
|
740
|
+
});
|
|
460
741
|
const model = binding.model?.trim();
|
|
461
742
|
const modelArg = model ? ` -m ${shellQuote(model)}` : "";
|
|
462
743
|
const effort = binding.effort?.trim();
|
|
463
744
|
const effortArg = effort ? ` -c ${shellQuote(`model_reasoning_effort="${effort}"`)}` : "";
|
|
464
745
|
const profile = binding.codexConfigProfile?.trim();
|
|
465
746
|
const profileArg = profile ? ` -p ${shellQuote(profile)}` : "";
|
|
466
|
-
const posture =
|
|
467
|
-
|
|
747
|
+
const posture = binding.codexRebuildPermissions
|
|
748
|
+
? profileArg + codexEnvelopeArgs(binding.codexRebuildPermissions)
|
|
749
|
+
: codexPostureArg(profileArg, process.env, binding.launchPosture);
|
|
750
|
+
const appliedLaunch = binding.codexRebuildPermissions
|
|
751
|
+
? { runtime: "codex", axis: "sandbox", state: "observed", value: binding.codexRebuildPermissions.sandboxPolicy.type,
|
|
752
|
+
reason: "emitted_launch_arguments", ...(binding.codexRebuildPermissions.approvalPolicy === "never" ? { approvalPolicy: "never" } : {}) }
|
|
753
|
+
: observeCodexSandbox(posture);
|
|
468
754
|
const postureArg = posture + operationalLaunchArg(this.runtime, binding);
|
|
469
755
|
if (running) {
|
|
470
756
|
// The running Codex already loaded its profile; drift in -p is the caller's to compare.
|
|
471
757
|
return { ok: true, model, modelArg, effort, effortArg, profile, appliedLaunch, postureArg,
|
|
472
758
|
queueStateDirArg: running.addDirs.map((dir) => ` --add-dir ${shellQuote(dir)}`).join(""),
|
|
759
|
+
suppressAutoAddDirs: false,
|
|
473
760
|
daemonOptOut: running.daemonOptOut, daemonArg: running.daemonOptOut ? " --no-daemon" : "",
|
|
474
761
|
networkArg: running.networkOverride ? ` -c ${shellQuote(CODEX_NETWORK_DEFAULT_OVERRIDE)}` : "" };
|
|
475
762
|
}
|
|
@@ -486,10 +773,15 @@ export class CodexRuntimeAdapter {
|
|
|
486
773
|
};
|
|
487
774
|
}
|
|
488
775
|
}
|
|
489
|
-
|
|
776
|
+
// Codex rejects writable --add-dir roots under a read-only sandbox. Only
|
|
777
|
+
// suppress OpenRig's generated roots when later project layers cannot make it writable.
|
|
778
|
+
const suppressAutoAddDirs = Boolean(!binding.codexRebuildPermissions && profile
|
|
779
|
+
&& posture === profileArg && this.profileRemainsReadOnly(profile, binding.cwd));
|
|
780
|
+
const teamWorkspaceArg = !binding.codexRebuildPermissions && binding.teamPermissionDefault && !profile
|
|
490
781
|
&& appliedLaunch.state === "observed" && appliedLaunch.value === "workspace-write"
|
|
491
782
|
? codexTeamWorkspaceArg(this.prepareTeamWorkspace, name) : "";
|
|
492
|
-
const queueStateDirArg =
|
|
783
|
+
const queueStateDirArg = binding.codexRebuildPermissions || suppressAutoAddDirs
|
|
784
|
+
? "" : teamWorkspaceArg || this.buildQueueStateAddDirArg(name);
|
|
493
785
|
// #69: one daemon-support decision for this launch, for the Codex the seat pane runs
|
|
494
786
|
// (its cwd, the launch PATH), applied to fresh, fork and resume.
|
|
495
787
|
const daemonSupport = this.detectDaemonSupport ? await this.detectDaemonSupport(binding.cwd) : undefined;
|
|
@@ -499,10 +791,11 @@ export class CodexRuntimeAdapter {
|
|
|
499
791
|
const daemonOptOut = daemonSupport?.kind === "supported";
|
|
500
792
|
const daemonArg = daemonOptOut ? " --no-daemon" : "";
|
|
501
793
|
// #275: on the plain floor, network access unless Codex reports an opt-out or policy.
|
|
502
|
-
const networkArg =
|
|
794
|
+
const networkArg = binding.codexRebuildPermissions ? ""
|
|
795
|
+
: await codexNetworkDefaultArg(this.readNetworkDefault, appliedLaunch, binding.cwd, name);
|
|
503
796
|
// The launch facts keep the probed daemon choice, so a printed recovery command can repeat it; no probe, no fact.
|
|
504
797
|
const launchFacts = daemonSupport ? { ...appliedLaunch, daemonOptOut } : appliedLaunch;
|
|
505
|
-
return { ok: true, model, modelArg, effort, effortArg, profile, appliedLaunch: launchFacts, postureArg, queueStateDirArg, daemonOptOut, daemonArg, networkArg };
|
|
798
|
+
return { ok: true, model, modelArg, effort, effortArg, profile, appliedLaunch: launchFacts, postureArg, queueStateDirArg, suppressAutoAddDirs, daemonOptOut, daemonArg, networkArg };
|
|
506
799
|
}
|
|
507
800
|
resumeCore(prepared, resumeToken, binding) {
|
|
508
801
|
const { profile, queueStateDirArg, model, postureArg, networkArg, daemonOptOut, effort } = prepared;
|
|
@@ -519,6 +812,81 @@ export class CodexRuntimeAdapter {
|
|
|
519
812
|
const root = codexQueueStateRoot(sessionName, sharedDocsRoot);
|
|
520
813
|
return root ? ` --add-dir ${shellQuote(root)}` : "";
|
|
521
814
|
}
|
|
815
|
+
/**
|
|
816
|
+
* Return true only when visible config proves a read-only profile within Codex's default project root.
|
|
817
|
+
* Unknown markers or unreadable layers retain the generated roots for native launch handling.
|
|
818
|
+
*/
|
|
819
|
+
profileRemainsReadOnly(profile, cwd) {
|
|
820
|
+
const root = this.codexHome ?? nodePath.join(this.fs.homedir ?? os.homedir(), ".codex");
|
|
821
|
+
const path = nodePath.join(root, `${profile}.config.toml`);
|
|
822
|
+
const userPath = nodePath.join(root, "config.toml");
|
|
823
|
+
if (!this.fs.exists(path))
|
|
824
|
+
return false;
|
|
825
|
+
try {
|
|
826
|
+
const value = parseToml(this.fs.readFile(path));
|
|
827
|
+
if (value.sandbox_mode !== "read-only" || value.default_permissions !== undefined || !nodePath.isAbsolute(cwd))
|
|
828
|
+
return false;
|
|
829
|
+
// A custom marker set may change the project boundary; leave the prior
|
|
830
|
+
// generated roots in place unless this default-marker scan proves it.
|
|
831
|
+
if (value.project_root_markers !== undefined)
|
|
832
|
+
return false;
|
|
833
|
+
// Codex merges fixed system/user/legacy-managed layers before choosing
|
|
834
|
+
// project markers. Any visible override or unreadable layer keeps roots.
|
|
835
|
+
for (const fixedPath of [
|
|
836
|
+
nodePath.join(this.codexSystemConfigDir, "config.toml"),
|
|
837
|
+
userPath,
|
|
838
|
+
nodePath.join(this.codexSystemConfigDir, "managed_config.toml"),
|
|
839
|
+
]) {
|
|
840
|
+
if (!this.fs.exists(fixedPath))
|
|
841
|
+
continue;
|
|
842
|
+
const fixed = parseToml(this.fs.readFile(fixedPath));
|
|
843
|
+
if (fixed.default_permissions !== undefined || fixed.project_root_markers !== undefined)
|
|
844
|
+
return false;
|
|
845
|
+
}
|
|
846
|
+
// Codex's default root is the nearest .git file or a .git directory
|
|
847
|
+
// containing HEAD. When none exists, Codex uses cwd itself.
|
|
848
|
+
let projectRoot = nodePath.normalize(cwd);
|
|
849
|
+
for (let dir = projectRoot;;) {
|
|
850
|
+
const marker = nodePath.join(dir, ".git");
|
|
851
|
+
if (this.fs.exists(marker)) {
|
|
852
|
+
if (!this.fs.statMode)
|
|
853
|
+
return false;
|
|
854
|
+
const kind = this.fs.statMode(marker) & fs.constants.S_IFMT;
|
|
855
|
+
// statMode may expose permission bits alone; that cannot prove a file.
|
|
856
|
+
if (kind !== fs.constants.S_IFREG && kind !== fs.constants.S_IFDIR)
|
|
857
|
+
return false;
|
|
858
|
+
if (kind === fs.constants.S_IFREG || this.fs.exists(nodePath.join(marker, "HEAD"))) {
|
|
859
|
+
projectRoot = dir;
|
|
860
|
+
break;
|
|
861
|
+
}
|
|
862
|
+
}
|
|
863
|
+
const parent = nodePath.dirname(dir);
|
|
864
|
+
if (parent === dir)
|
|
865
|
+
break;
|
|
866
|
+
dir = parent;
|
|
867
|
+
}
|
|
868
|
+
// Trust can exclude a closer project file, leaving a writable ancestor active.
|
|
869
|
+
// Keep roots if any visible applicable ancestor could make the launch writable.
|
|
870
|
+
for (let dir = nodePath.normalize(cwd);;) {
|
|
871
|
+
const projectPath = nodePath.join(dir, ".codex", "config.toml");
|
|
872
|
+
// At the home ancestor this is the user config, which loaded before the profile.
|
|
873
|
+
if (projectPath !== userPath && this.fs.exists(projectPath)) {
|
|
874
|
+
const project = parseToml(this.fs.readFile(projectPath));
|
|
875
|
+
if (project.default_permissions !== undefined)
|
|
876
|
+
return false;
|
|
877
|
+
if (project.sandbox_mode !== undefined && project.sandbox_mode !== "read-only")
|
|
878
|
+
return false;
|
|
879
|
+
}
|
|
880
|
+
if (dir === projectRoot)
|
|
881
|
+
return true;
|
|
882
|
+
dir = nodePath.dirname(dir);
|
|
883
|
+
}
|
|
884
|
+
}
|
|
885
|
+
catch {
|
|
886
|
+
// Preflight owns profile errors; unreadable user or project state keeps prior roots.
|
|
887
|
+
return false;
|
|
888
|
+
}
|
|
889
|
+
}
|
|
522
890
|
async captureProbeScreen(target) {
|
|
523
891
|
// Current readiness belongs to the rendered screen. Scrollback may retain
|
|
524
892
|
// dismissed prompts, loading headers, or refusals from earlier attempts.
|
|
@@ -645,14 +1013,14 @@ export class CodexRuntimeAdapter {
|
|
|
645
1013
|
ensureManagedBootstrap(binding) {
|
|
646
1014
|
this.provisionWorkspaceTrust(binding.cwd ?? null);
|
|
647
1015
|
}
|
|
648
|
-
projectEntry(entry, cwd, warnings) {
|
|
1016
|
+
projectEntry(entry, cwd, warnings, seatSkillsRoot, seatSkillsRefused) {
|
|
649
1017
|
if (entry.category === "runtime_resource" && this.applyRuntimeResource(entry)) {
|
|
650
1018
|
return true;
|
|
651
1019
|
}
|
|
652
1020
|
if (entry.category === "guidance" && entry.mergeStrategy === "managed_block") {
|
|
653
1021
|
const targetPath = nodePath.join(cwd, "AGENTS.md");
|
|
654
1022
|
const content = this.fs.readFile(entry.absolutePath);
|
|
655
|
-
return this.mergeGuidance(targetPath, entry.effectiveId, content, warnings);
|
|
1023
|
+
return this.mergeGuidance(targetPath, entry.effectiveId, content, warnings, entry.absolutePath);
|
|
656
1024
|
}
|
|
657
1025
|
// HG-1.3 plugin runtime applicability filter (per DESIGN.md §5.1):
|
|
658
1026
|
// - explicit pluginType="claude" → skip Codex projection
|
|
@@ -661,9 +1029,23 @@ export class CodexRuntimeAdapter {
|
|
|
661
1029
|
if (entry.category === "plugin" && !this.pluginAppliesToCodex(entry)) {
|
|
662
1030
|
return false;
|
|
663
1031
|
}
|
|
664
|
-
const targetDir = this.resolveTargetDir(entry, cwd);
|
|
1032
|
+
const targetDir = this.resolveTargetDir(entry, cwd, seatSkillsRoot);
|
|
665
1033
|
if (!targetDir)
|
|
666
1034
|
return true;
|
|
1035
|
+
// OPR.0.7.0.13: never write through a link out of the seat's storage.
|
|
1036
|
+
// A refused seat storage refuses every skill meant for it, named; otherwise each destination is checked.
|
|
1037
|
+
const refusal = seatSkillsRoot && entry.category === "skill"
|
|
1038
|
+
? seatSkillsRefused ?? seatSkillWriteRefusal(seatSkillsRoot, nodePath.join(targetDir, "SKILL.md")) : undefined;
|
|
1039
|
+
if (refusal) {
|
|
1040
|
+
warnings.push(`${entry.effectiveId}: ${refusal}`);
|
|
1041
|
+
return false;
|
|
1042
|
+
}
|
|
1043
|
+
// OPR.0.7.0.13: destinations refused below (a link on the way); an entry with any is reported incomplete, not projected.
|
|
1044
|
+
const notProjected = [];
|
|
1045
|
+
// OPR.0.7.0.13: a skill written to the seat's own storage is recorded, so cleanup and restore know it as OpenRig's.
|
|
1046
|
+
const record = seatSkillsRoot && entry.category === "skill"
|
|
1047
|
+
? (dest, src, content) => recordSeatSkillWrite(seatSkillsRoot, dest, src, content)
|
|
1048
|
+
: () => { };
|
|
667
1049
|
this.fs.mkdirp(targetDir);
|
|
668
1050
|
let isDir = false;
|
|
669
1051
|
if (this.fs.listFiles) {
|
|
@@ -679,10 +1061,26 @@ export class CodexRuntimeAdapter {
|
|
|
679
1061
|
const createdFiles = [];
|
|
680
1062
|
try {
|
|
681
1063
|
if (isDir && this.fs.listFiles) {
|
|
1064
|
+
let skippedPluginSkills = 0;
|
|
682
1065
|
for (const file of this.fs.listFiles(entry.absolutePath)) {
|
|
1066
|
+
// OPR.0.7.0.13: a seat with its own storage gets a selected plugin's bundled skills there, through its loadout, so
|
|
1067
|
+
// the project's copy of the plugin leaves its skills out; its manifest, hooks and settings are copied as before.
|
|
1068
|
+
if (seatSkillsRoot && entry.category === "plugin" && file.split(/[\\/]/)[0] === "skills") {
|
|
1069
|
+
skippedPluginSkills++;
|
|
1070
|
+
continue;
|
|
1071
|
+
}
|
|
683
1072
|
const src = nodePath.join(entry.absolutePath, file);
|
|
684
1073
|
const dest = nodePath.join(targetDir, file);
|
|
1074
|
+
// OPR.0.7.0.13: each destination in a seat's storage is checked before it's recorded, written or re-moded, so a
|
|
1075
|
+
// helper folder or file found to be a link is not written through (the identical-content, mode-only branch included).
|
|
1076
|
+
const refusedDest = seatSkillsRoot && entry.category === "skill" ? seatSkillWriteRefusal(seatSkillsRoot, dest) : undefined;
|
|
1077
|
+
if (refusedDest) {
|
|
1078
|
+
warnings.push(`${entry.effectiveId}: ${refusedDest}`);
|
|
1079
|
+
notProjected.push(dest);
|
|
1080
|
+
continue;
|
|
1081
|
+
}
|
|
685
1082
|
const content = this.fs.readFile(src);
|
|
1083
|
+
record(dest, src, content);
|
|
686
1084
|
// Reconcile mode even when the content write is skipped: a byte-identical dest
|
|
687
1085
|
// projected earlier may still carry the wrong (default) mode.
|
|
688
1086
|
if (this.fs.exists(dest) && hashContent(content) === hashContent(this.fs.readFile(dest))) {
|
|
@@ -696,10 +1094,19 @@ export class CodexRuntimeAdapter {
|
|
|
696
1094
|
createdFiles.push(dest);
|
|
697
1095
|
this.preserveMode(src, dest);
|
|
698
1096
|
}
|
|
1097
|
+
const pluginLoss = seatSkillsRefused ? seatPluginSkillsLossNote(entry.effectiveId, skippedPluginSkills, seatSkillsRefused) : undefined;
|
|
1098
|
+
if (pluginLoss)
|
|
1099
|
+
warnings.push(pluginLoss);
|
|
699
1100
|
}
|
|
700
1101
|
else {
|
|
701
|
-
const content = this.fs.readFile(entry.absolutePath);
|
|
702
1102
|
const destFile = nodePath.join(targetDir, nodePath.basename(entry.absolutePath));
|
|
1103
|
+
const refusedFile = seatSkillsRoot && entry.category === "skill" ? seatSkillWriteRefusal(seatSkillsRoot, destFile) : undefined;
|
|
1104
|
+
if (refusedFile) {
|
|
1105
|
+
warnings.push(`${entry.effectiveId}: ${refusedFile}`);
|
|
1106
|
+
return false;
|
|
1107
|
+
}
|
|
1108
|
+
const content = this.fs.readFile(entry.absolutePath);
|
|
1109
|
+
record(destFile, entry.absolutePath, content);
|
|
703
1110
|
if (this.fs.exists(destFile) && hashContent(content) === hashContent(this.fs.readFile(destFile))) {
|
|
704
1111
|
this.preserveMode(entry.absolutePath, destFile);
|
|
705
1112
|
return true;
|
|
@@ -715,7 +1122,7 @@ export class CodexRuntimeAdapter {
|
|
|
715
1122
|
if (entry.category === "plugin")
|
|
716
1123
|
warnings.push(...excludeNewGeneratedFiles(cwd, createdFiles));
|
|
717
1124
|
}
|
|
718
|
-
return
|
|
1125
|
+
return seatProjectionComplete(entry.effectiveId, notProjected, warnings);
|
|
719
1126
|
}
|
|
720
1127
|
/**
|
|
721
1128
|
* Reapply the source file's permission bits to the projected dest. Plain
|
|
@@ -740,9 +1147,9 @@ export class CodexRuntimeAdapter {
|
|
|
740
1147
|
// auto: detect via .codex-plugin/plugin.json presence in the source tree
|
|
741
1148
|
return this.fs.exists(nodePath.join(entry.absolutePath, ".codex-plugin", "plugin.json"));
|
|
742
1149
|
}
|
|
743
|
-
resolveTargetDir(entry, cwd) {
|
|
1150
|
+
resolveTargetDir(entry, cwd, seatSkillsRoot) {
|
|
744
1151
|
switch (entry.category) {
|
|
745
|
-
case "skill": return nodePath.join(cwd, ".agents", "skills", entry.effectiveId);
|
|
1152
|
+
case "skill": return nodePath.join(seatSkillsRoot ?? nodePath.join(cwd, ".agents", "skills"), entry.effectiveId);
|
|
746
1153
|
case "guidance": return null; // handled via merge
|
|
747
1154
|
case "subagent": return nodePath.join(cwd, ".agents"); // .agents/{id}.yaml per preserved contract
|
|
748
1155
|
case "plugin": return nodePath.join(cwd, ".codex", "plugins", entry.effectiveId);
|
|
@@ -775,14 +1182,17 @@ export class CodexRuntimeAdapter {
|
|
|
775
1182
|
* propagate the skip signal so ProjectionResult and StartupDeliveryResult
|
|
776
1183
|
* report honest counts.
|
|
777
1184
|
*/
|
|
778
|
-
mergeGuidance(targetPath, blockId, content, warnings) {
|
|
1185
|
+
mergeGuidance(targetPath, blockId, content, warnings, sourcePath) {
|
|
779
1186
|
// Mirrors Claude Code adapter: the `rig-role` managed block collides across
|
|
780
1187
|
// pod-mates because the regenerator pairs (target-file × spec) without
|
|
781
1188
|
// seat correlation. Per-seat role content is delivered through `send_text`
|
|
782
1189
|
// startup instead. Refuse the merge loudly; silent skip would mask the
|
|
783
1190
|
// collision. See ADR-0006.
|
|
784
|
-
if (blockId
|
|
785
|
-
console.log(`[openrig] skip: effectiveId is
|
|
1191
|
+
if (isPerSeatRoleGuidance(blockId, sourcePath)) {
|
|
1192
|
+
console.log(`[openrig] skip: effectiveId is ${blockId}, a seat's own role; per-seat delivery via send_text path required (target=${targetPath})`);
|
|
1193
|
+
const warning = perSeatRoleSkipWarning(blockId, targetPath);
|
|
1194
|
+
if (warning)
|
|
1195
|
+
warnings.push(warning);
|
|
786
1196
|
return false;
|
|
787
1197
|
}
|
|
788
1198
|
mergeManagedBlock(this.fs, targetPath, blockId, content, {
|
|
@@ -791,8 +1201,8 @@ export class CodexRuntimeAdapter {
|
|
|
791
1201
|
});
|
|
792
1202
|
return true;
|
|
793
1203
|
}
|
|
794
|
-
detectDeliveryHint(path, content) {
|
|
795
|
-
return resolveConcreteHint(path, content);
|
|
1204
|
+
detectDeliveryHint(path, content, orientation) {
|
|
1205
|
+
return resolveConcreteHint(path, content, orientation);
|
|
796
1206
|
}
|
|
797
1207
|
provisionWorkspaceTrust(cwd) {
|
|
798
1208
|
if (!cwd)
|
|
@@ -904,11 +1314,88 @@ export class CodexRuntimeAdapter {
|
|
|
904
1314
|
}
|
|
905
1315
|
return undefined;
|
|
906
1316
|
}
|
|
1317
|
+
/**
|
|
1318
|
+
* #1524 (b): whether the pane's resumed Codex process is proven to hold `resumeToken`. Codex's own records for that
|
|
1319
|
+
* exact process (pid and start time) must name the token, read before `deadline`, with the same process observed
|
|
1320
|
+
* before and after the read, so a reused pid or a replaced pane proves nothing. A different conversation is a
|
|
1321
|
+
* mismatch; anything unread is unknown, never a mismatch or a match.
|
|
1322
|
+
*/
|
|
1323
|
+
/** #1524 (b): `work` under the resume check's deadline. It isn't started at or after the deadline, it races the
|
|
1324
|
+
* deadline, and a value that arrives at or after it is not used (null). It cancels nothing: work already started
|
|
1325
|
+
* runs to its end (an async step may go on to its next read, and synchronous work such as the default record
|
|
1326
|
+
* reader's SQLite queries can't be interrupted at all), so the check can return after the deadline. */
|
|
1327
|
+
async beforeResumeDeadline(work, deadline) {
|
|
1328
|
+
if (Date.now() >= deadline)
|
|
1329
|
+
return null;
|
|
1330
|
+
const value = await this.withinDeadline(Promise.resolve().then(work), deadline);
|
|
1331
|
+
return Date.now() >= deadline ? null : value;
|
|
1332
|
+
}
|
|
1333
|
+
async proveResumedProcess(tmuxSession, resumeToken, deadline) {
|
|
1334
|
+
if (!this.tmux.getPanePid)
|
|
1335
|
+
return { kind: "unknown", reason: "the pane's process can't be read" };
|
|
1336
|
+
if (Date.now() >= deadline)
|
|
1337
|
+
return { kind: "unknown", reason: "the resume window ended", windowEnded: true };
|
|
1338
|
+
const input = { target: tmuxSession, tmux: this.tmux,
|
|
1339
|
+
listProcesses: this.listProcesses, expectedToken: resumeToken, requireResume: true };
|
|
1340
|
+
const before = await this.beforeResumeDeadline(() => observeCodexPaneProcess(input), deadline);
|
|
1341
|
+
if (!before && Date.now() >= deadline)
|
|
1342
|
+
return { kind: "unknown", reason: "the resume window ended", windowEnded: true };
|
|
1343
|
+
if (!before)
|
|
1344
|
+
return { kind: "unknown", reason: "no single Codex process resuming this conversation was observed in the pane" };
|
|
1345
|
+
if (lstartToMinTs(before.process.startedAt) === undefined) {
|
|
1346
|
+
return { kind: "unknown", reason: "the resumed Codex process has no readable start time" };
|
|
1347
|
+
}
|
|
1348
|
+
let evidence;
|
|
1349
|
+
try {
|
|
1350
|
+
evidence = await this.beforeResumeDeadline(() => this.readResumeEvidence(before.process.pid, before.process.startedAt), deadline);
|
|
1351
|
+
}
|
|
1352
|
+
catch (err) {
|
|
1353
|
+
return { kind: "unknown", reason: `Codex's records couldn't be read (${err.message})` };
|
|
1354
|
+
}
|
|
1355
|
+
if (!evidence)
|
|
1356
|
+
return { kind: "unknown", reason: "reading Codex's records didn't finish inside the resume window", windowEnded: true };
|
|
1357
|
+
const after = await this.beforeResumeDeadline(() => observeCodexPaneProcess(input), deadline);
|
|
1358
|
+
if (!after && Date.now() >= deadline)
|
|
1359
|
+
return { kind: "unknown", reason: "the resume window ended", windowEnded: true };
|
|
1360
|
+
if (after?.fingerprint !== before.fingerprint) {
|
|
1361
|
+
return { kind: "unknown", reason: "the resumed Codex process changed during the check" };
|
|
1362
|
+
}
|
|
1363
|
+
if (!evidence.threadId)
|
|
1364
|
+
return { kind: "unknown", reason: evidence.reason ?? "no_log_row" };
|
|
1365
|
+
// A decision is only as current as its last observation: at or past the deadline it decides nothing.
|
|
1366
|
+
if (Date.now() >= deadline)
|
|
1367
|
+
return { kind: "unknown", reason: "the resume window ended", windowEnded: true };
|
|
1368
|
+
return evidence.threadId === resumeToken
|
|
1369
|
+
? { kind: "match", process: { pid: before.process.pid, startedAt: before.process.startedAt } }
|
|
1370
|
+
: { kind: "mismatch", threadId: evidence.threadId };
|
|
1371
|
+
}
|
|
907
1372
|
async verifyResumeLaunch(tmuxSession, updatePrompt, opts) {
|
|
908
|
-
const quickAttempts =
|
|
909
|
-
const extendedAttempts =
|
|
910
|
-
const quickSleepMs =
|
|
911
|
-
const extendedSleepMs =
|
|
1373
|
+
const quickAttempts = RESUME_QUICK_ATTEMPTS;
|
|
1374
|
+
const extendedAttempts = RESUME_EXTENDED_ATTEMPTS;
|
|
1375
|
+
const quickSleepMs = RESUME_QUICK_SLEEP_MS;
|
|
1376
|
+
const extendedSleepMs = RESUME_EXTENDED_SLEEP_MS;
|
|
1377
|
+
// #1524 (b): a managed resume of a known conversation is proven from Codex's own records, inside one wall-clock
|
|
1378
|
+
// deadline for the whole existing window. Why it is still unproven, for the attention text at the bound.
|
|
1379
|
+
// With a conversation to prove, the deadline prevents acceptance of late wrapped poll or proof values, or of a late
|
|
1380
|
+
// match or mismatch. Ordinary poll sleeps request at most the remaining time. Work already started is not cancelled,
|
|
1381
|
+
// and scheduling or synchronous work can delay return. The existing update-prompt helper has its own reads,
|
|
1382
|
+
// reporting and guarded one-key behaviour outside this deadline.
|
|
1383
|
+
const resumeToken = opts?.resumeToken;
|
|
1384
|
+
const deadline = Date.now() + this.resumeProofWindowMs;
|
|
1385
|
+
let unproven = null;
|
|
1386
|
+
// Ordinary poll sleeps request at most the remaining time; scheduling can delay their completion. False once no time
|
|
1387
|
+
// is left.
|
|
1388
|
+
const pause = async (ms) => {
|
|
1389
|
+
if (!resumeToken) {
|
|
1390
|
+
await this.sleep(ms);
|
|
1391
|
+
return true;
|
|
1392
|
+
}
|
|
1393
|
+
const left = deadline - Date.now();
|
|
1394
|
+
if (left <= 0)
|
|
1395
|
+
return false;
|
|
1396
|
+
await this.sleep(Math.min(ms, left));
|
|
1397
|
+
return Date.now() < deadline;
|
|
1398
|
+
};
|
|
912
1399
|
// OPR.0.3.3.21 (FR-2): process-alive is NOT proof of a restored
|
|
913
1400
|
// conversation. verifyResumeLaunch must NOT return ok:true unless the probe
|
|
914
1401
|
// proves `resumed`. Unresolved operator-action gates (update/trust/model)
|
|
@@ -939,8 +1426,21 @@ export class CodexRuntimeAdapter {
|
|
|
939
1426
|
if (attempt >= quickAttempts && (sawRealGate || lastUnresolved?.code !== "awaiting_runtime")) {
|
|
940
1427
|
break;
|
|
941
1428
|
}
|
|
942
|
-
|
|
943
|
-
|
|
1429
|
+
// #1524 (b): with a conversation to prove, no capture starts at or after the deadline, and one that ends after it
|
|
1430
|
+
// isn't used (a capture already started isn't cancelled: its second read may still run, its value discarded).
|
|
1431
|
+
let paneCommand;
|
|
1432
|
+
let paneContent;
|
|
1433
|
+
if (resumeToken) {
|
|
1434
|
+
const captured = await this.beforeResumeDeadline(async () => ({ command: await this.tmux.getPaneCommand(tmuxSession), content: await this.captureProbeScreen(tmuxSession) }), deadline);
|
|
1435
|
+
if (!captured)
|
|
1436
|
+
break;
|
|
1437
|
+
paneCommand = captured.command;
|
|
1438
|
+
paneContent = captured.content;
|
|
1439
|
+
}
|
|
1440
|
+
else {
|
|
1441
|
+
paneCommand = await this.tmux.getPaneCommand(tmuxSession);
|
|
1442
|
+
paneContent = await this.captureProbeScreen(tmuxSession);
|
|
1443
|
+
}
|
|
944
1444
|
lastPaneContent = paneContent;
|
|
945
1445
|
let probe = assessNativeResumeProbe({
|
|
946
1446
|
runtime: "codex",
|
|
@@ -976,12 +1476,35 @@ export class CodexRuntimeAdapter {
|
|
|
976
1476
|
evidence: paneContent.split("\n").slice(-12).join("\n"),
|
|
977
1477
|
};
|
|
978
1478
|
}
|
|
979
|
-
if (probe.status === "resumed") {
|
|
980
|
-
return {
|
|
981
|
-
|
|
982
|
-
|
|
983
|
-
|
|
984
|
-
|
|
1479
|
+
if (probe.status === "resumed" && !resumeToken) {
|
|
1480
|
+
return { ok: true, resumeToken: undefined, resumeType: undefined };
|
|
1481
|
+
}
|
|
1482
|
+
if (probe.status === "resumed" && resumeToken) {
|
|
1483
|
+
const proof = await this.proveResumedProcess(tmuxSession, resumeToken, deadline);
|
|
1484
|
+
if (proof.kind === "match")
|
|
1485
|
+
return { ok: true, resumeToken, resumeType: "codex_id", resumedProcess: proof.process };
|
|
1486
|
+
if (proof.kind === "mismatch") {
|
|
1487
|
+
return {
|
|
1488
|
+
ok: false,
|
|
1489
|
+
error: `Codex resume opened a different conversation: the resumed process's records name ${proof.threadId}, not the requested ${resumeToken}. The session was preserved; nothing was restarted.`,
|
|
1490
|
+
recovery: "attention_required",
|
|
1491
|
+
resumeMismatch: { opened: proof.threadId },
|
|
1492
|
+
verifierInput: verifierInput(),
|
|
1493
|
+
evidence: paneContent.split("\n").slice(-12).join("\n"),
|
|
1494
|
+
};
|
|
1495
|
+
}
|
|
1496
|
+
// Unknown is not a failure yet: keep polling inside the window, as a boot still in progress does. The
|
|
1497
|
+
// window ending says nothing new, so it doesn't replace the last reason a read gave.
|
|
1498
|
+
if (!("windowEnded" in proof) || !unproven)
|
|
1499
|
+
unproven = proof.reason;
|
|
1500
|
+
lastUnresolved = { status: "inconclusive", code: "awaiting_runtime", detail: `Codex resume not yet proven: ${proof.reason}.` };
|
|
1501
|
+
report = { probe, paneContent };
|
|
1502
|
+
if (Date.now() >= deadline)
|
|
1503
|
+
break;
|
|
1504
|
+
const sleepMs = attempt < quickAttempts ? quickSleepMs : extendedSleepMs;
|
|
1505
|
+
if (attempt < totalAttempts - 1 && !(await pause(sleepMs)))
|
|
1506
|
+
break;
|
|
1507
|
+
continue;
|
|
985
1508
|
}
|
|
986
1509
|
report = { probe, paneContent }; // resumed returned above, so this screen is unresolved
|
|
987
1510
|
if (probe.code === "update_gate") {
|
|
@@ -997,8 +1520,8 @@ export class CodexRuntimeAdapter {
|
|
|
997
1520
|
lastUnresolved = null;
|
|
998
1521
|
sawRealGate = false;
|
|
999
1522
|
const sleepMs = attempt < quickAttempts ? quickSleepMs : extendedSleepMs;
|
|
1000
|
-
if (attempt < totalAttempts - 1)
|
|
1001
|
-
|
|
1523
|
+
if (attempt < totalAttempts - 1 && !(await pause(sleepMs)))
|
|
1524
|
+
break;
|
|
1002
1525
|
continue;
|
|
1003
1526
|
}
|
|
1004
1527
|
lastUnresolved = probe;
|
|
@@ -1011,13 +1534,16 @@ export class CodexRuntimeAdapter {
|
|
|
1011
1534
|
}
|
|
1012
1535
|
}
|
|
1013
1536
|
const sleepMs = attempt < quickAttempts ? quickSleepMs : extendedSleepMs;
|
|
1014
|
-
if (attempt < totalAttempts - 1)
|
|
1015
|
-
|
|
1537
|
+
if (attempt < totalAttempts - 1 && !(await pause(sleepMs)))
|
|
1538
|
+
break;
|
|
1016
1539
|
}
|
|
1017
1540
|
// Report the newest screen observed; a resumed or booting one names no gate. The loop's own decisions above used
|
|
1018
1541
|
// lastUnresolved. The text follows the newest screen too, so an older gate's text never stands for a newer screen.
|
|
1019
1542
|
const shown = report && report.probe.status !== "resumed" && report.probe.code !== "awaiting_runtime" ? report : null;
|
|
1020
|
-
const
|
|
1543
|
+
const unprovenText = unproven && report?.probe.status === "resumed"
|
|
1544
|
+
? `Codex resume could not be proven within the resume window: ${unproven}. The session was preserved; nothing was restarted.`
|
|
1545
|
+
: null;
|
|
1546
|
+
const newestText = unprovenText ? unprovenText : shown ? shown.probe.detail
|
|
1021
1547
|
: report?.probe.status === "resumed" ? "Codex resume could not be confirmed: the last screen observed looked ready, but the resume check ended before proving a restored conversation."
|
|
1022
1548
|
: report ? report.probe.detail
|
|
1023
1549
|
: lastUnresolved?.detail;
|
|
@@ -1029,6 +1555,9 @@ export class CodexRuntimeAdapter {
|
|
|
1029
1555
|
// The gate on that screen, if any. A boot still in progress names no gate.
|
|
1030
1556
|
...(shown ? gateFields(shown.probe, shown.paneContent) : {}),
|
|
1031
1557
|
...(shown?.beforeInput ? { screenBeforeInput: true } : {}),
|
|
1558
|
+
// With a conversation to prove and no gate on the newest screen, the end is "not proven": whatever the last frame
|
|
1559
|
+
// was (a boot, a ready screen, or no capture at all before the deadline), the resumed Codex may be running.
|
|
1560
|
+
...(resumeToken && !shown ? { resumeUnproven: true } : {}),
|
|
1032
1561
|
verifierInput: verifierInput(),
|
|
1033
1562
|
evidence: (report?.paneContent ?? lastPaneContent).split("\n").slice(-12).join("\n"),
|
|
1034
1563
|
};
|
|
@@ -1120,19 +1649,6 @@ function upsertCodexProjectTrust(content, projectPath) {
|
|
|
1120
1649
|
// CONFIDENCE: the HASH is fully deterministic from the open source (JSON+sha256) — HIGH.
|
|
1121
1650
|
// The KEY's exact key_source canonical form + the positional indices are what the VM
|
|
1122
1651
|
// read-back must confirm — PROVISIONAL until then.
|
|
1123
|
-
/** Recursively sort object keys (mirrors codex-rs fingerprint.rs `canonical_json`). */
|
|
1124
|
-
function canonicalizeJsonValue(value) {
|
|
1125
|
-
if (Array.isArray(value))
|
|
1126
|
-
return value.map(canonicalizeJsonValue);
|
|
1127
|
-
if (value !== null && typeof value === "object") {
|
|
1128
|
-
const src = value;
|
|
1129
|
-
const out = {};
|
|
1130
|
-
for (const key of Object.keys(src).sort())
|
|
1131
|
-
out[key] = canonicalizeJsonValue(src[key]);
|
|
1132
|
-
return out;
|
|
1133
|
-
}
|
|
1134
|
-
return value;
|
|
1135
|
-
}
|
|
1136
1652
|
const CODEX_HOOK_EVENT_KEY_LABEL = {
|
|
1137
1653
|
SessionStart: "session_start",
|
|
1138
1654
|
UserPromptSubmit: "user_prompt_submit",
|
|
@@ -1149,32 +1665,20 @@ export function computeCodexHookTrust(event, input) {
|
|
|
1149
1665
|
const groupIndex = input.groupIndex ?? 0;
|
|
1150
1666
|
const handlerIndex = input.handlerIndex ?? 0;
|
|
1151
1667
|
const key = `${input.keySource}:${label}:${groupIndex}:${handlerIndex}`;
|
|
1152
|
-
//
|
|
1153
|
-
|
|
1154
|
-
|
|
1155
|
-
command: input.command,
|
|
1156
|
-
timeout: input.timeoutSec,
|
|
1157
|
-
async: false,
|
|
1158
|
-
};
|
|
1159
|
-
if (input.statusMessage != null)
|
|
1160
|
-
handler.statusMessage = input.statusMessage;
|
|
1161
|
-
const identity = { event_name: label, hooks: [handler] };
|
|
1162
|
-
if (input.matcher != null)
|
|
1163
|
-
identity.matcher = input.matcher;
|
|
1164
|
-
const serialized = JSON.stringify(canonicalizeJsonValue(identity));
|
|
1165
|
-
const hex = createHash("sha256").update(serialized, "utf8").digest("hex");
|
|
1166
|
-
return { key, hash: `sha256:${hex}` };
|
|
1668
|
+
// NormalizedHookIdentity exactly as `TomlValue::try_from` would build it (None fields dropped), hashed by the shared
|
|
1669
|
+
// recipe in codex-hook-trust.cjs.
|
|
1670
|
+
return { key, hash: codexHookTrust.codexHookHash(label, input) };
|
|
1167
1671
|
}
|
|
1168
1672
|
/**
|
|
1169
1673
|
* OPR.0.4.3.33 — idempotent, non-clobbering, section-scoped writer for a single
|
|
1170
1674
|
* `[hooks.state."<key>"] trusted_hash = "<hash>"` record. Mirrors upsertCodexProjectTrust:
|
|
1171
1675
|
* find/create the exact table header, splice ONLY its `trusted_hash` line, leave every other
|
|
1172
1676
|
* `[hooks.state]` / `[projects]` entry and the managed hook block byte-identical. Same key+hash
|
|
1173
|
-
* ⇒ no-op. Only
|
|
1677
|
+
* ⇒ no-op. Only called for our authored inline or verified owned plugin keys (never blanket trust).
|
|
1174
1678
|
*/
|
|
1175
|
-
export function upsertCodexHookTrust(content, key, hash) {
|
|
1679
|
+
export function upsertCodexHookTrust(content, key, hash, field = "trusted_hash") {
|
|
1176
1680
|
const header = `[hooks.state.${JSON.stringify(key)}]`;
|
|
1177
|
-
const trustLine =
|
|
1681
|
+
const trustLine = `${field} = ${JSON.stringify(hash)}`;
|
|
1178
1682
|
const lines = content.length > 0 ? content.split("\n") : [];
|
|
1179
1683
|
const headerIndex = lines.findIndex((line) => line.trim() === header);
|
|
1180
1684
|
if (headerIndex === -1) {
|
|
@@ -1189,14 +1693,14 @@ export function upsertCodexHookTrust(content, key, hash) {
|
|
|
1189
1693
|
break;
|
|
1190
1694
|
}
|
|
1191
1695
|
}
|
|
1192
|
-
const hashIndex = lines.findIndex((line, index) => index > headerIndex && index < nextSectionIndex && line.trim().startsWith(
|
|
1696
|
+
const hashIndex = lines.findIndex((line, index) => index > headerIndex && index < nextSectionIndex && line.trim().startsWith(field));
|
|
1193
1697
|
if (hashIndex >= 0) {
|
|
1194
1698
|
lines[hashIndex] = trustLine;
|
|
1195
1699
|
}
|
|
1196
1700
|
else {
|
|
1197
1701
|
lines.splice(headerIndex + 1, 0, trustLine);
|
|
1198
1702
|
}
|
|
1199
|
-
return `${lines.join("\n").replace(/\n*$/, "\n")}`;
|
|
1703
|
+
return field === "trusted_content_hash" ? lines.join("\n") : `${lines.join("\n").replace(/\n*$/, "\n")}`;
|
|
1200
1704
|
}
|
|
1201
1705
|
export function isCodex013xOrLater(version) {
|
|
1202
1706
|
const match = /^(\d+)\.(\d+)/.exec(version);
|
|
@@ -1574,15 +2078,12 @@ function escapeRegExp(value) {
|
|
|
1574
2078
|
}
|
|
1575
2079
|
// Module-private (P1 pin — NEVER exported). The REAL Codex profile-LOAD probe,
|
|
1576
2080
|
// extracted verbatim from launchHarness: dynamic imports keep it lazy for
|
|
1577
|
-
// production, execFn runs the real `codex -p <profile> mcp list`
|
|
1578
|
-
// (utf-8,
|
|
1579
|
-
// verifyProfilePreflight; tests substitute a controlled stub.
|
|
2081
|
+
// production, execFn runs the real `codex -p <profile> mcp list` through
|
|
2082
|
+
// execRuntimeProbe (utf-8, 10s bound, off the event loop). Injected as the
|
|
2083
|
+
// adapter's default verifyProfilePreflight; tests substitute a controlled stub.
|
|
1580
2084
|
async function defaultProfilePreflight(profile, selected) {
|
|
1581
2085
|
const { verifyCodexProfileLoads } = await import("../domain/codex-profile-preflight.js");
|
|
1582
|
-
const {
|
|
1583
|
-
const execFn = async (cmd) => runSyncSite("codex.runtime.profile_preflight", () => execSync(cmd, { encoding: "utf-8", stdio: ["pipe", "pipe", "pipe"], timeout: 10_000,
|
|
1584
|
-
...(selected ? { cwd: selected.cwd, env: { ...process.env, CODEX_HOME: selected.codexHome, ...(selected.launchPath ? { PATH: selected.launchPath } : {}) } } : {}),
|
|
1585
|
-
}));
|
|
2086
|
+
const execFn = (cmd) => execRuntimeProbe("codex.runtime.profile_preflight", cmd, selected ? { cwd: selected.cwd, env: { ...process.env, CODEX_HOME: selected.codexHome, ...(selected.launchPath ? { PATH: selected.launchPath } : {}) } } : {});
|
|
1586
2087
|
return verifyCodexProfileLoads(profile, execFn, undefined, selected?.codexHome);
|
|
1587
2088
|
}
|
|
1588
2089
|
// Exported for unit test (B12-T): the REAL async sampling path — the anti-vacuity test drives
|