@bjoernrochel/sevro 1.0.0 → 1.1.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/CONTRIBUTING.md +34 -4
- package/README.md +7 -6
- package/dist/examples/basic/graded.json +13 -0
- package/dist/examples/basic/host.js +9 -0
- package/dist/examples/basic/host.js.map +1 -0
- package/dist/examples/basic/prompt-only.json +7 -0
- package/dist/examples/recipes/candidate.js +23 -0
- package/dist/examples/recipes/candidate.js.map +1 -0
- package/dist/examples/recipes/cases/coding-change.json +21 -0
- package/dist/examples/recipes/cases/host-tools.json +21 -0
- package/dist/examples/recipes/cases/mise.json +21 -0
- package/dist/examples/recipes/cases/node.json +21 -0
- package/dist/examples/recipes/cases/python-uv.json +21 -0
- package/dist/examples/recipes/cases/semantic.json +17 -0
- package/dist/examples/recipes/coding-change/check.js +16 -0
- package/dist/examples/recipes/coding-change/check.js.map +1 -0
- package/dist/examples/recipes/executable.js +20 -0
- package/dist/examples/recipes/executable.js.map +1 -0
- package/dist/examples/recipes/extension-artifacts.js +56 -0
- package/dist/examples/recipes/extension-artifacts.js.map +1 -0
- package/dist/examples/recipes/extension-methods.js +167 -0
- package/dist/examples/recipes/extension-methods.js.map +1 -0
- package/dist/examples/recipes/extension.js +28 -0
- package/dist/examples/recipes/extension.js.map +1 -0
- package/dist/examples/recipes/modules.js +9 -0
- package/dist/examples/recipes/modules.js.map +1 -0
- package/dist/examples/recipes/repository-skill/.agents/skills/startup-guide/SKILL.md +7 -0
- package/dist/examples/recipes/repository-skill/.claude/skills/startup-guide/SKILL.md +7 -0
- package/dist/examples/recipes/repository-skill/README.md +3 -0
- package/dist/examples/recipes/run-inputs.js +144 -0
- package/dist/examples/recipes/run-inputs.js.map +1 -0
- package/dist/examples/recipes/run-options.js +103 -0
- package/dist/examples/recipes/run-options.js.map +1 -0
- package/dist/examples/recipes/run.js +62 -0
- package/dist/examples/recipes/run.js.map +1 -0
- package/dist/examples/recipes/runtime/empty.json +1 -0
- package/dist/examples/recipes/runtime/goals.json +1 -0
- package/dist/examples/recipes/runtime/mise.json +6 -0
- package/dist/examples/recipes/runtime/path.json +1 -0
- package/dist/examples/recipes/runtime/plugins.json +4 -0
- package/dist/examples/recipes/runtime/python-uv.json +10 -0
- package/dist/examples/recipes/semantic-judge.js +27 -0
- package/dist/examples/recipes/semantic-judge.js.map +1 -0
- package/dist/examples/templates/coding/adapter.js +14 -0
- package/dist/examples/templates/coding/adapter.js.map +1 -0
- package/dist/examples/templates/coding/case.json +15 -0
- package/dist/examples/templates/repository-skill/.agents/skills/startup-guide/SKILL.md +6 -0
- package/dist/examples/templates/repository-skill/extension-data.js +61 -0
- package/dist/examples/templates/repository-skill/extension-data.js.map +1 -0
- package/dist/examples/templates/repository-skill/extension.js +29 -0
- package/dist/examples/templates/repository-skill/extension.js.map +1 -0
- package/dist/examples/templates/response/adapter.js +13 -0
- package/dist/examples/templates/response/adapter.js.map +1 -0
- package/dist/examples/templates/response/case.json +13 -0
- package/dist/src/advisory.js +86 -0
- package/dist/src/advisory.js.map +1 -0
- package/dist/src/candidate-artifacts.js +139 -0
- package/dist/src/candidate-artifacts.js.map +1 -0
- package/dist/src/candidate-codex-state.js +110 -0
- package/dist/src/candidate-codex-state.js.map +1 -0
- package/dist/src/case-validation.js +92 -0
- package/dist/src/case-validation.js.map +1 -0
- package/dist/src/cli/cancellation.js +21 -0
- package/dist/src/cli/cancellation.js.map +1 -0
- package/dist/src/cli/command.js +60 -0
- package/dist/src/cli/command.js.map +1 -0
- package/dist/src/cli/completion.js +14 -0
- package/dist/src/cli/completion.js.map +1 -0
- package/dist/src/cli/demo.js +45 -0
- package/dist/src/cli/demo.js.map +1 -0
- package/dist/src/cli/evaluation.js +40 -0
- package/dist/src/cli/evaluation.js.map +1 -0
- package/dist/src/cli/extension.js +54 -0
- package/dist/src/cli/extension.js.map +1 -0
- package/dist/src/cli/help.js +190 -0
- package/dist/src/cli/help.js.map +1 -0
- package/dist/src/cli/hosts.js +33 -0
- package/dist/src/cli/hosts.js.map +1 -0
- package/dist/src/cli/init-settings.js +29 -0
- package/dist/src/cli/init-settings.js.map +1 -0
- package/dist/src/cli/init.js +82 -0
- package/dist/src/cli/init.js.map +1 -0
- package/dist/src/cli/invocation.js +431 -0
- package/dist/src/cli/invocation.js.map +1 -0
- package/dist/src/cli/loading.js +110 -0
- package/dist/src/cli/loading.js.map +1 -0
- package/dist/src/cli/preparation.js +88 -0
- package/dist/src/cli/preparation.js.map +1 -0
- package/dist/src/cli/presentation.js +61 -0
- package/dist/src/cli/presentation.js.map +1 -0
- package/dist/src/cli/progress.js +5 -0
- package/dist/src/cli/progress.js.map +1 -0
- package/dist/src/cli/run-manifest.js +108 -0
- package/dist/src/cli/run-manifest.js.map +1 -0
- package/dist/src/cli/run-options.js +367 -0
- package/dist/src/cli/run-options.js.map +1 -0
- package/dist/src/cli/run-overrides.js +51 -0
- package/dist/src/cli/run-overrides.js.map +1 -0
- package/dist/src/cli/settings.js +127 -0
- package/dist/src/cli/settings.js.map +1 -0
- package/dist/src/cli/summary.js +28 -0
- package/dist/src/cli/summary.js.map +1 -0
- package/dist/src/cli.js +20 -0
- package/dist/src/cli.js.map +1 -0
- package/dist/src/contract-types.js +2 -0
- package/dist/src/contract-types.js.map +1 -0
- package/dist/src/engine.js +4 -0
- package/dist/src/engine.js.map +1 -0
- package/dist/src/evaluation/advisory.js +85 -0
- package/dist/src/evaluation/advisory.js.map +1 -0
- package/dist/src/evaluation/check-plan.js +292 -0
- package/dist/src/evaluation/check-plan.js.map +1 -0
- package/dist/src/evaluation/collection.js +61 -0
- package/dist/src/evaluation/collection.js.map +1 -0
- package/dist/src/evaluation/context.js +2 -0
- package/dist/src/evaluation/context.js.map +1 -0
- package/dist/src/evaluation/grading-host.js +28 -0
- package/dist/src/evaluation/grading-host.js.map +1 -0
- package/dist/src/evaluation/grading.js +154 -0
- package/dist/src/evaluation/grading.js.map +1 -0
- package/dist/src/evaluation/invocation-plan.js +312 -0
- package/dist/src/evaluation/invocation-plan.js.map +1 -0
- package/dist/src/evaluation/plan.js +376 -0
- package/dist/src/evaluation/plan.js.map +1 -0
- package/dist/src/evaluation/progress.js +14 -0
- package/dist/src/evaluation/progress.js.map +1 -0
- package/dist/src/evaluation/resources.js +159 -0
- package/dist/src/evaluation/resources.js.map +1 -0
- package/dist/src/evaluation/run.js +148 -0
- package/dist/src/evaluation/run.js.map +1 -0
- package/dist/src/evaluation/scheduler.js +27 -0
- package/dist/src/evaluation/scheduler.js.map +1 -0
- package/dist/src/evaluation/semantic.js +183 -0
- package/dist/src/evaluation/semantic.js.map +1 -0
- package/dist/src/evaluation/trial.js +593 -0
- package/dist/src/evaluation/trial.js.map +1 -0
- package/dist/src/evaluation/types.js +20 -0
- package/dist/src/evaluation/types.js.map +1 -0
- package/dist/src/evidence/host-results.js +67 -0
- package/dist/src/evidence/host-results.js.map +1 -0
- package/dist/src/evidence/retained-artifacts.js +17 -0
- package/dist/src/evidence/retained-artifacts.js.map +1 -0
- package/dist/src/evidence/trial-writer.js +131 -0
- package/dist/src/evidence/trial-writer.js.map +1 -0
- package/dist/src/evidence/usage.js +14 -0
- package/dist/src/evidence/usage.js.map +1 -0
- package/dist/src/executable.js +20 -0
- package/dist/src/executable.js.map +1 -0
- package/dist/src/extension-client.js +212 -0
- package/dist/src/extension-client.js.map +1 -0
- package/dist/src/extension-session.js +236 -0
- package/dist/src/extension-session.js.map +1 -0
- package/dist/src/fixtures/advisory.js +206 -0
- package/dist/src/fixtures/advisory.js.map +1 -0
- package/dist/src/fixtures/bin.js +41 -0
- package/dist/src/fixtures/bin.js.map +1 -0
- package/dist/src/fixtures/cleanup.js +43 -0
- package/dist/src/fixtures/cleanup.js.map +1 -0
- package/dist/src/fixtures/create.js +94 -0
- package/dist/src/fixtures/create.js.map +1 -0
- package/dist/src/fixtures/generated.js +181 -0
- package/dist/src/fixtures/generated.js.map +1 -0
- package/dist/src/fixtures/git-hooks.js +16 -0
- package/dist/src/fixtures/git-hooks.js.map +1 -0
- package/dist/src/fixtures/preparation.js +201 -0
- package/dist/src/fixtures/preparation.js.map +1 -0
- package/dist/src/fixtures/repository.js +255 -0
- package/dist/src/fixtures/repository.js.map +1 -0
- package/dist/src/fixtures/setup.js +175 -0
- package/dist/src/fixtures/setup.js.map +1 -0
- package/dist/src/fixtures/tools.js +57 -0
- package/dist/src/fixtures/tools.js.map +1 -0
- package/dist/src/fixtures/workspace-state.js +155 -0
- package/dist/src/fixtures/workspace-state.js.map +1 -0
- package/dist/src/generated/cli-result.cjs +2 -0
- package/dist/src/generated/extension.cjs +2 -0
- package/dist/src/generated/report.cjs +2 -0
- package/dist/src/generated/run-evidence.cjs +2 -0
- package/dist/src/generated/runtime.cjs +2 -0
- package/dist/src/git.js +72 -0
- package/dist/src/git.js.map +1 -0
- package/dist/src/graders/artifact.js +68 -0
- package/dist/src/graders/artifact.js.map +1 -0
- package/dist/src/graders/git-head.js +112 -0
- package/dist/src/graders/git-head.js.map +1 -0
- package/dist/src/graders/output.js +345 -0
- package/dist/src/graders/output.js.map +1 -0
- package/dist/src/graders/semantic.js +132 -0
- package/dist/src/graders/semantic.js.map +1 -0
- package/dist/src/graders/shell.js +321 -0
- package/dist/src/graders/shell.js.map +1 -0
- package/dist/src/host-diagnostic-redaction.js +52 -0
- package/dist/src/host-diagnostic-redaction.js.map +1 -0
- package/dist/src/host-diagnostics.js +248 -0
- package/dist/src/host-diagnostics.js.map +1 -0
- package/dist/src/hosts/claude-continuation.js +89 -0
- package/dist/src/hosts/claude-continuation.js.map +1 -0
- package/dist/src/hosts/claude-credential.js +121 -0
- package/dist/src/hosts/claude-credential.js.map +1 -0
- package/dist/src/hosts/claude-events.js +136 -0
- package/dist/src/hosts/claude-events.js.map +1 -0
- package/dist/src/hosts/claude-keychain.js +100 -0
- package/dist/src/hosts/claude-keychain.js.map +1 -0
- package/dist/src/hosts/claude-login-recovery.js +67 -0
- package/dist/src/hosts/claude-login-recovery.js.map +1 -0
- package/dist/src/hosts/claude-login-refresh.js +146 -0
- package/dist/src/hosts/claude-login-refresh.js.map +1 -0
- package/dist/src/hosts/claude-login-store.js +124 -0
- package/dist/src/hosts/claude-login-store.js.map +1 -0
- package/dist/src/hosts/claude-login.js +74 -0
- package/dist/src/hosts/claude-login.js.map +1 -0
- package/dist/src/hosts/claude-native-goal.js +138 -0
- package/dist/src/hosts/claude-native-goal.js.map +1 -0
- package/dist/src/hosts/claude-process.js +10 -0
- package/dist/src/hosts/claude-process.js.map +1 -0
- package/dist/src/hosts/claude-refresh-lock.js +76 -0
- package/dist/src/hosts/claude-refresh-lock.js.map +1 -0
- package/dist/src/hosts/claude-repository-invocation.js +229 -0
- package/dist/src/hosts/claude-repository-invocation.js.map +1 -0
- package/dist/src/hosts/claude-settings.js +158 -0
- package/dist/src/hosts/claude-settings.js.map +1 -0
- package/dist/src/hosts/claude-skill-activations.js +131 -0
- package/dist/src/hosts/claude-skill-activations.js.map +1 -0
- package/dist/src/hosts/claude-state.js +237 -0
- package/dist/src/hosts/claude-state.js.map +1 -0
- package/dist/src/hosts/claude-tool-calls.js +150 -0
- package/dist/src/hosts/claude-tool-calls.js.map +1 -0
- package/dist/src/hosts/claude.js +373 -0
- package/dist/src/hosts/claude.js.map +1 -0
- package/dist/src/hosts/codex-app-server.js +764 -0
- package/dist/src/hosts/codex-app-server.js.map +1 -0
- package/dist/src/hosts/codex-configuration.js +91 -0
- package/dist/src/hosts/codex-configuration.js.map +1 -0
- package/dist/src/hosts/codex-events.js +104 -0
- package/dist/src/hosts/codex-events.js.map +1 -0
- package/dist/src/hosts/codex-exec-controls.js +434 -0
- package/dist/src/hosts/codex-exec-controls.js.map +1 -0
- package/dist/src/hosts/codex-invocation.js +54 -0
- package/dist/src/hosts/codex-invocation.js.map +1 -0
- package/dist/src/hosts/codex-marketplace.js +185 -0
- package/dist/src/hosts/codex-marketplace.js.map +1 -0
- package/dist/src/hosts/codex-native-calls.js +516 -0
- package/dist/src/hosts/codex-native-calls.js.map +1 -0
- package/dist/src/hosts/codex-process.js +10 -0
- package/dist/src/hosts/codex-process.js.map +1 -0
- package/dist/src/hosts/codex-profile.js +206 -0
- package/dist/src/hosts/codex-profile.js.map +1 -0
- package/dist/src/hosts/codex-session-files.js +89 -0
- package/dist/src/hosts/codex-session-files.js.map +1 -0
- package/dist/src/hosts/codex-state.js +310 -0
- package/dist/src/hosts/codex-state.js.map +1 -0
- package/dist/src/hosts/codex.js +527 -0
- package/dist/src/hosts/codex.js.map +1 -0
- package/dist/src/hosts/isolation-common.js +43 -0
- package/dist/src/hosts/isolation-common.js.map +1 -0
- package/dist/src/hosts/isolation-roots.js +64 -0
- package/dist/src/hosts/isolation-roots.js.map +1 -0
- package/dist/src/hosts/isolation.js +12 -0
- package/dist/src/hosts/isolation.js.map +1 -0
- package/dist/src/hosts/linux-sandbox.js +127 -0
- package/dist/src/hosts/linux-sandbox.js.map +1 -0
- package/dist/src/hosts/mac-sandbox.js +137 -0
- package/dist/src/hosts/mac-sandbox.js.map +1 -0
- package/dist/src/hosts/native-controls.js +151 -0
- package/dist/src/hosts/native-controls.js.map +1 -0
- package/dist/src/hosts/native-request.js +33 -0
- package/dist/src/hosts/native-request.js.map +1 -0
- package/dist/src/hosts/process-lifecycle.js +167 -0
- package/dist/src/hosts/process-lifecycle.js.map +1 -0
- package/dist/src/hosts/protected-worktrees.js +81 -0
- package/dist/src/hosts/protected-worktrees.js.map +1 -0
- package/dist/src/hosts/skill-hook-catalog.js +100 -0
- package/dist/src/hosts/skill-hook-catalog.js.map +1 -0
- package/dist/src/hosts/skill-hook-handler.js +228 -0
- package/dist/src/hosts/skill-hook-handler.js.map +1 -0
- package/dist/src/hosts/skill-hooks.js +423 -0
- package/dist/src/hosts/skill-hooks.js.map +1 -0
- package/dist/src/hosts/workspace-fingerprint.js +72 -0
- package/dist/src/hosts/workspace-fingerprint.js.map +1 -0
- package/dist/src/identity.js +167 -0
- package/dist/src/identity.js.map +1 -0
- package/dist/src/instrumentation.js +83 -0
- package/dist/src/instrumentation.js.map +1 -0
- package/dist/src/native-transcript-state.js +85 -0
- package/dist/src/native-transcript-state.js.map +1 -0
- package/dist/src/native-transcript-view.js +65 -0
- package/dist/src/native-transcript-view.js.map +1 -0
- package/dist/src/native-transcripts.js +208 -0
- package/dist/src/native-transcripts.js.map +1 -0
- package/dist/src/paths.js +13 -0
- package/dist/src/paths.js.map +1 -0
- package/dist/src/process-lifecycle.js +101 -0
- package/dist/src/process-lifecycle.js.map +1 -0
- package/dist/src/provenance.js +263 -0
- package/dist/src/provenance.js.map +1 -0
- package/dist/src/prune.js +228 -0
- package/dist/src/prune.js.map +1 -0
- package/dist/src/report.js +276 -0
- package/dist/src/report.js.map +1 -0
- package/dist/src/resolved-case.js +29 -0
- package/dist/src/resolved-case.js.map +1 -0
- package/dist/src/results-lock.js +40 -0
- package/dist/src/results-lock.js.map +1 -0
- package/dist/src/results.js +127 -0
- package/dist/src/results.js.map +1 -0
- package/dist/src/run-owner.js +283 -0
- package/dist/src/run-owner.js.map +1 -0
- package/dist/src/runner-paths.js +11 -0
- package/dist/src/runner-paths.js.map +1 -0
- package/dist/src/runtime/config.js +323 -0
- package/dist/src/runtime/config.js.map +1 -0
- package/dist/src/runtime/discovery-apple.js +65 -0
- package/dist/src/runtime/discovery-apple.js.map +1 -0
- package/dist/src/runtime/discovery-providers.js +37 -0
- package/dist/src/runtime/discovery-providers.js.map +1 -0
- package/dist/src/runtime/discovery.js +40 -0
- package/dist/src/runtime/discovery.js.map +1 -0
- package/dist/src/runtime/hook-processes.js +81 -0
- package/dist/src/runtime/hook-processes.js.map +1 -0
- package/dist/src/runtime/hooks.js +304 -0
- package/dist/src/runtime/hooks.js.map +1 -0
- package/dist/src/runtime/paths.js +244 -0
- package/dist/src/runtime/paths.js.map +1 -0
- package/dist/src/runtime/query.js +76 -0
- package/dist/src/runtime/query.js.map +1 -0
- package/dist/src/runtime/seeds.js +98 -0
- package/dist/src/runtime/seeds.js.map +1 -0
- package/dist/src/runtime/shared-cache.js +81 -0
- package/dist/src/runtime/shared-cache.js.map +1 -0
- package/dist/src/runtime/state.js +106 -0
- package/dist/src/runtime/state.js.map +1 -0
- package/dist/src/runtime-process.js +148 -0
- package/dist/src/runtime-process.js.map +1 -0
- package/dist/src/schema-types.js +2 -0
- package/dist/src/schema-types.js.map +1 -0
- package/dist/src/schema.js +16 -0
- package/dist/src/schema.js.map +1 -0
- package/dist/src/shell.js +5 -0
- package/dist/src/shell.js.map +1 -0
- package/dist/src/sqlite-lock.js +18 -0
- package/dist/src/sqlite-lock.js.map +1 -0
- package/dist/src/storage.js +21 -0
- package/dist/src/storage.js.map +1 -0
- package/dist/src/transcript-retention.js +109 -0
- package/dist/src/transcript-retention.js.map +1 -0
- package/dist/src/value-guards.js +26 -0
- package/dist/src/value-guards.js.map +1 -0
- package/docs/architecture.md +5 -2
- package/docs/creating-cases.md +2 -3
- package/docs/development-cli.md +12 -7
- package/docs/documentation-quality.md +4 -3
- package/docs/evaluation-workflow.md +8 -8
- package/docs/getting-started.md +7 -6
- package/docs/guide-evaluation.md +1 -1
- package/docs/identity-v1.md +4 -1
- package/docs/installing.md +31 -13
- package/docs/licensing.md +2 -2
- package/docs/native-hosts.md +1 -1
- package/docs/recipes.md +41 -40
- package/docs/releases.md +20 -4
- package/docs/run-settings-v1.md +3 -3
- package/docs/specs/repository-guide.md +1 -1
- package/docs/troubleshooting.md +1 -1
- package/docs/typescript-quality.md +18 -1
- package/examples/recipes/executable.ts +19 -0
- package/examples/recipes/extension-artifacts.ts +1 -1
- package/examples/recipes/extension.ts +2 -1
- package/examples/recipes/modules.ts +9 -0
- package/examples/recipes/run-inputs.ts +14 -19
- package/examples/recipes/run-options.ts +9 -8
- package/examples/recipes/run.ts +21 -7
- package/examples/templates/repository-skill/extension-data.ts +1 -1
- package/examples/templates/repository-skill/extension.ts +2 -1
- package/package.json +14 -6
- package/src/cli/demo.ts +3 -2
- package/src/cli/help.ts +4 -3
- package/src/cli/init-settings.ts +5 -4
- package/src/cli/init.ts +9 -8
- package/src/cli/invocation.ts +2 -1
- package/src/cli/preparation.ts +2 -2
- package/src/cli.ts +1 -1
- package/src/executable.ts +19 -0
- package/src/extension-client.ts +6 -12
- package/src/fixtures/setup.ts +3 -2
- package/src/git.ts +2 -1
- package/src/graders/git-head.ts +3 -2
- package/src/graders/shell.ts +4 -3
- package/src/hosts/claude-keychain.ts +3 -2
- package/src/hosts/claude-login-refresh.ts +3 -2
- package/src/hosts/claude-refresh-lock.ts +2 -1
- package/src/hosts/claude-settings.ts +3 -1
- package/src/hosts/claude.ts +1 -1
- package/src/hosts/isolation-roots.ts +3 -2
- package/src/hosts/process-lifecycle.ts +4 -6
- package/src/hosts/protected-worktrees.ts +2 -1
- package/src/hosts/skill-hook-handler.ts +1 -1
- package/src/hosts/skill-hooks.ts +10 -2
- package/src/provenance.ts +7 -6
- package/src/results-lock.ts +4 -4
- package/src/run-owner.ts +15 -9
- package/src/runner-paths.ts +21 -0
- package/src/runtime/hook-processes.ts +2 -1
- package/src/runtime/hooks.ts +9 -7
- package/src/runtime-process.ts +194 -0
- package/src/sqlite-lock.ts +25 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codex-state.js","sourceRoot":"","sources":["codex-state.ts"],"names":[],"mappings":"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","sourcesContent":["import { runtimeLocalHttpEnabled, runtimeSeedSources } from \"../runtime/config\";\nimport { shellQuote } from \"../shell\";\nimport {\n candidateArtifactEnvironment,\n candidateArtifactReadRoots,\n} from \"../candidate-artifacts\";\nimport {\n codexStateEnabled,\n retainCandidateCodexState,\n} from \"../candidate-codex-state\";\nimport { randomUUID } from \"node:crypto\";\nimport { existsSync } from \"node:fs\";\nimport { isMissingFile } from \"../fixtures/tools\";\nimport {\n cp,\n lstat,\n mkdir,\n readFile,\n realpath,\n rm,\n stat,\n symlink,\n writeFile,\n} from \"node:fs/promises\";\nimport { delimiter, dirname, join, sep } from \"node:path\";\nimport type { HostAdapter } from \"../engine\";\nimport {\n candidateTranscriptEnvironment,\n candidateTranscriptRoots,\n} from \"../native-transcripts\";\nimport { prepareHookMounts } from \"../runtime/hooks\";\nimport { requireNativeHookRoots } from \"../native-transcript-state\";\nimport {\n requireRuntimeReadRoots,\n runtimeExecutableProtection,\n} from \"../runtime/paths\";\nimport { prepareRuntimeState } from \"../runtime/state\";\nimport {\n sharedCacheDenyRoots,\n sharedCacheRoots,\n} from \"../runtime/shared-cache\";\nimport { codexPermissionProfile } from \"./codex-profile\";\nimport { evaluationProtectedRoots } from \"./isolation-roots\";\ntype Request = Parameters<HostAdapter[\"run\"]>[0];\ntype CodexState = Awaited<ReturnType<typeof prepareCodexState>>;\nconst MAX_AUTH_BYTES = 1024 * 1024;\n\nexport interface CodexHostOptions {\n binary: string;\n authFile: string;\n model: string;\n effort: string;\n projectRoot: string;\n resultsRoot: string;\n additionalProtectedRoots: string[];\n agentConcurrencyLimit?: number | null;\n timeoutMs?: number;\n entrypoint?: \"exec\" | \"app-server\";\n retainHostDiagnostics?: boolean;\n /** Integration-test seam; production uses the same CLI for execution and preflight. */\n sandboxBinary?: string;\n}\n\nasync function copyAuth(source: string, target: string): Promise<void> {\n let bytes: Buffer;\n try {\n if ((await stat(source)).size > MAX_AUTH_BYTES)\n throw new Error(\"Codex auth file exceeds the size limit\");\n bytes = await readFile(source);\n } catch (error) {\n throw new Error(\"Codex auth file is unreadable or oversized\", {\n cause: error,\n });\n }\n if (bytes.byteLength > MAX_AUTH_BYTES)\n throw new Error(\"Codex auth file exceeds the size limit\");\n await writeFile(target, bytes, { flag: \"wx\", mode: 0o600 });\n}\n\nexport async function codexHookMounts(\n request: Request,\n state: CodexState,\n installedPluginRoots: string[],\n) {\n const hooks = await prepareHookMounts({\n workspace: request.workspace,\n stateRoot: state.stateRoot,\n privateRoot: state.codexHome,\n pluginRoots: installedPluginRoots,\n protectedRoots: state.protectedRoots,\n policy: request.runtimePolicy ?? {\n format: \"sevro.runtime.v1\",\n environment: {},\n readOnlyRoots: [],\n },\n });\n for (const [index, root] of installedPluginRoots.entries()) {\n const curated = hooks.directories[index];\n if (!curated) throw new Error(\"Codex hook projection is incomplete\");\n await rm(root, { recursive: true });\n await cp(curated, root, { recursive: true });\n }\n await grantCodexHookReads(state, hooks.directories);\n return hooks;\n}\n\n/** Hooks advertise paths relative to these curated copies, not the install cache. */\nasync function grantCodexHookReads(\n state: CodexState,\n roots: string[],\n): Promise<void> {\n if (roots.length === 0) return;\n await requireNativeHookRoots(roots, state.codexHome);\n const path = join(state.codexHome, \"config.toml\");\n const config = await readFile(path, \"utf8\");\n const header = `[permissions.${state.profileId}.filesystem]\\n`;\n const grants = roots\n .map((root) => `${JSON.stringify(root)} = \"read\"\\n`)\n .join(\"\");\n await writeFile(path, config.replace(header, header + grants), {\n mode: 0o600,\n });\n}\n\nasync function privateCodexDirectories(stateRoot: string) {\n const codexHome = join(stateRoot, \"codex-home\"),\n parentHome = join(stateRoot, \"home\"),\n parentTemp = join(stateRoot, \"tmp\"),\n commandHome = join(stateRoot, \"command-home\"),\n commandTemp = join(stateRoot, \"command-tmp\");\n await Promise.all(\n [codexHome, parentHome, parentTemp, commandHome, commandTemp].map((path) =>\n mkdir(path, { mode: 0o700 }),\n ),\n );\n if (process.platform === \"linux\")\n await mkdir(join(codexHome, \"tmp\", \"arg0\"), {\n recursive: true,\n mode: 0o700,\n });\n return {\n codexHome,\n parentHome,\n parentTemp,\n commandHome,\n commandTemp,\n pluginCacheRoot: join(codexHome, \"plugins\", \"cache\"),\n };\n}\n\nfunction requireUnprotectedExecutables(\n readRoots: string[],\n protectedRoots: string[],\n): void {\n if (\n readRoots.some((readRoot) =>\n protectedRoots.some(\n (root) => readRoot === root || readRoot.startsWith(`${root}${sep}`),\n ),\n )\n )\n throw new Error(\"Codex executable resides inside a protected root\");\n}\n\nfunction concurrencyConfiguration(limit: number | null): string {\n return limit === null\n ? \"\"\n : `\\n[agents]\\nmax_concurrent_threads_per_session = ${limit}\\n`;\n}\n\nasync function writeCodexProfile(\n paths: Awaited<ReturnType<typeof privateCodexDirectories>>,\n profileId: string,\n request: Request,\n readRoots: string[],\n protectedRoots: string[],\n limit: number | null,\n commandEnvironment = request.runtimePolicy?.environment,\n runtimeWriteRoot: string | undefined,\n writableCacheRoots: string[],\n): Promise<void> {\n const profile = codexPermissionProfile({\n localHttp: runtimeLocalHttpEnabled(\n request.runtimePolicy,\n request.runtimeRole ?? \"candidate\",\n ),\n commandEnvironment: codexProfileEnvironment(\n request,\n paths,\n commandEnvironment,\n ),\n runtimeWriteRoot,\n runtimeReadRoots: request.runtimePolicy?.readOnlyRoots,\n nativeReadRoots: codexNativeReadRoots(request, paths.codexHome),\n nativeWriteRoots: [\n ...codexStateWriteRoots(request, paths),\n ...writableCacheRoots,\n ],\n id: profileId,\n workspace: request.workspace,\n commandHome: paths.commandHome,\n commandTemp: paths.commandTemp,\n executableReadRoots: readRoots,\n ...codexPluginReadRoot(request, paths.pluginCacheRoot),\n protectedRoots,\n });\n await writeFile(\n join(paths.codexHome, \"config.toml\"),\n profile +\n concurrencyConfiguration(limit) +\n fixtureTrustConfiguration(request),\n { flag: \"wx\", mode: 0o600 },\n );\n}\n\nfunction fixtureTrustConfiguration(request: Request): string {\n return `\\n[projects.${JSON.stringify(request.workspace)}]\\ntrust_level = \"untrusted\"\\n`;\n}\n\nfunction codexProfileEnvironment(\n request: Request,\n paths: Awaited<ReturnType<typeof privateCodexDirectories>>,\n environment: Record<string, string> | undefined,\n) {\n return {\n ...codexCommandEnvironment(request, environment),\n ...codexTranscriptEnvironment(request, paths.codexHome),\n ...candidateTranscriptEnvironment(request.candidateTranscriptRoot),\n ...candidateArtifactEnvironment(request.candidateArtifactRoots),\n ...(request.runtimePolicy?.codexState === true\n ? {\n SEVRO_CODEX_AGENT_SKILLS: join(paths.parentHome, \".agents\", \"skills\"),\n }\n : {}),\n };\n}\n\nfunction codexTranscriptEnvironment(\n request: Request,\n home: string,\n): Record<string, string> {\n return {\n ...(request.runtimePolicy?.codexState === true ? { CODEX_HOME: home } : {}),\n ...(request.runtimePolicy?.nativeTranscripts === true\n ? {\n CODEX_HOME: home,\n SEVRO_NATIVE_TRANSCRIPT_ROOT: join(home, \"sessions\"),\n }\n : {}),\n };\n}\n\nfunction codexNativeReadRoots(request: Request, home: string) {\n return [\n ...linuxArg0ReadRoots(home),\n ...(request.runtimePolicy?.codexState === true\n ? [join(home, \"config.toml\"), join(home, \"skills\", \".system\")]\n : []),\n ...codexTranscriptRoots(request, home),\n ...candidateTranscriptRoots(request.candidateTranscriptRoot),\n ...candidateArtifactReadRoots(request.candidateArtifactRoots),\n ];\n}\n\nfunction codexTranscriptRoots(request: Request, home: string) {\n return request.runtimePolicy?.nativeTranscripts === true\n ? [join(home, \"sessions\")]\n : [];\n}\n\nfunction linuxArg0ReadRoots(codexHome: string): string[] {\n return process.platform === \"linux\" ? [join(codexHome, \"tmp\", \"arg0\")] : [];\n}\n\nfunction codexPluginReadRoot(request: Request, root: string) {\n return request.codexMarketplace ? { pluginReadRoot: root } : {};\n}\n\nfunction codexHelperBinary(options: CodexHostOptions, sandboxBinary: string) {\n const sibling = join(dirname(options.binary), \"codex-linux-sandbox\");\n return (\n options.sandboxBinary ?? (existsSync(sibling) ? sibling : sandboxBinary)\n );\n}\n\nfunction codexCommandEnvironment(\n request: Request,\n environment: Record<string, string> | undefined,\n): Record<string, string> | undefined {\n if (!environment) return undefined;\n const path =\n environment.PATH ??\n \"/opt/homebrew/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin\";\n return {\n ...environment,\n PATH: [request.fixtureBinDir, path].filter(Boolean).join(delimiter),\n };\n}\n\nasync function fixtureShellRoot(\n request: Request,\n parentHome: string,\n): Promise<string> {\n const root = join(request.workspace, \".git\", \"sevro-shell\");\n if (request.fixtureBinDir) {\n await mkdir(root, { mode: 0o700 });\n await writeFile(\n process.platform === \"linux\"\n ? join(parentHome, \".bash_profile\")\n : join(root, \".zprofile\"),\n `export PATH=${shellQuote(request.fixtureBinDir)}:\"$PATH\"\\n`,\n { flag: \"wx\", mode: 0o600 },\n );\n }\n return root;\n}\n\nfunction codexPath(fixtureBin: string | undefined): string {\n const path = process.env.PATH ?? \"/usr/bin:/bin\";\n return fixtureBin ? `${fixtureBin}${delimiter}${path}` : path;\n}\n\nfunction codexEnvironment(\n paths: Awaited<ReturnType<typeof privateCodexDirectories>>,\n request: Request,\n shellRoot: string,\n): Record<string, string> {\n return {\n ...request.runtimePolicy?.environment,\n PATH: declaredCodexPath(request),\n LANG: process.env.LANG ?? \"C\",\n HOME: paths.parentHome,\n TMPDIR: paths.parentTemp,\n CODEX_HOME: paths.codexHome,\n NO_COLOR: \"1\",\n ...(request.fixtureBinDir && process.platform === \"darwin\"\n ? { ZDOTDIR: shellRoot }\n : {}),\n };\n}\n\nfunction declaredCodexPath(request: Request): string {\n return (\n request.runtimePolicy?.environment.PATH ?? codexPath(request.fixtureBinDir)\n );\n}\n\nfunction codexSeedSources(request: Request): string[] {\n return runtimeSeedSources(request.runtimePolicy);\n}\n\nasync function codexRuntime(\n request: Request,\n paths: Awaited<ReturnType<typeof privateCodexDirectories>>,\n stateRoot: string,\n) {\n if (!request.runtimePolicy) return undefined;\n const runtime = await prepareRuntimeState(\n request.workspace,\n request.runtimePolicy,\n request.runtimeRole ?? \"candidate\",\n request.candidateRuntimeRoot ?? join(stateRoot, \"runtime\"),\n );\n paths.commandHome = runtime.home;\n paths.commandTemp = runtime.temp;\n return runtime;\n}\n\nfunction applyCodexRuntime(\n runtime: Awaited<ReturnType<typeof codexRuntime>>,\n env: Record<string, string>,\n paths: Awaited<ReturnType<typeof privateCodexDirectories>>,\n): void {\n if (runtime)\n Object.assign(env, runtime.environment, {\n HOME: paths.parentHome,\n TMPDIR: paths.parentTemp,\n });\n}\n\nfunction codexRuntimeProfile(\n runtime: Awaited<ReturnType<typeof codexRuntime>>,\n) {\n return {\n environment: runtime?.environment,\n root: runtime?.root,\n writableCacheRoots: runtime?.writableCacheRoots ?? [],\n };\n}\n\nexport async function prepareCodexState(\n stateRoot: string,\n options: CodexHostOptions,\n limit: number | null,\n request: Request,\n helperRoot?: string,\n) {\n await requireIsolatedGitMetadata(request.workspace);\n const paths = await privateCodexDirectories(stateRoot);\n const runtime = await codexRuntime(request, paths, stateRoot);\n await copyAuth(options.authFile, join(paths.codexHome, \"auth.json\"));\n const protectedRoots = await evaluationProtectedRoots({\n workspace: request.workspace,\n projectRoot: options.projectRoot,\n resultsRoot: options.resultsRoot,\n additionalRoots: [\n ...options.additionalProtectedRoots,\n ...(process.platform === \"linux\" ? [] : [stateRoot]),\n ...codexSeedSources(request),\n ],\n });\n const sandboxBinary = options.sandboxBinary ?? options.binary;\n const helperBinary = codexHelperBinary(options, sandboxBinary);\n if (helperRoot)\n await symlink(helperBinary, join(helperRoot, \"codex-linux-sandbox\"));\n const readRoots = await Promise.all(\n [options.binary, sandboxBinary, helperBinary].flatMap((binary) => [\n realpath(dirname(binary)),\n realpath(binary).then(dirname),\n ]),\n );\n if (helperRoot) readRoots.push(helperRoot);\n requireCodexRuntimeReadRoots(request, protectedRoots);\n await sharedCacheRoots(\n request.runtimePolicy,\n request.runtimeRole,\n protectedRoots,\n );\n protectedRoots.push(\n ...sharedCacheDenyRoots(request.runtimePolicy, request.runtimeRole),\n );\n requireUnprotectedExecutables(\n readRoots,\n runtimeExecutableProtection(\n readRoots,\n protectedRoots,\n Boolean(request.runtimePolicy),\n ),\n );\n const profileId = `sevro_${randomUUID().replaceAll(\"-\", \"\")}`;\n const runtimeProfile = codexRuntimeProfile(runtime);\n await writeCodexProfile(\n paths,\n profileId,\n request,\n readRoots,\n protectedRoots,\n limit,\n runtimeProfile.environment,\n runtimeProfile.root,\n runtimeProfile.writableCacheRoots,\n );\n const shellRoot = await fixtureShellRoot(request, paths.parentHome);\n const env = codexEnvironment(paths, request, shellRoot);\n applyCodexRuntime(runtime, env, paths);\n await prepareCodexStateEvidence(request, stateRoot, paths);\n return { ...paths, stateRoot, sandboxBinary, profileId, env, protectedRoots };\n}\n\nfunction codexStateWriteRoots(\n request: Request,\n paths: Awaited<ReturnType<typeof privateCodexDirectories>>,\n): string[] {\n return codexStateEnabled(request.runtimePolicy)\n ? [\n join(paths.codexHome, \"skills\"),\n join(paths.parentHome, \".agents\", \"skills\"),\n join(paths.commandHome, \".agents\", \"skills\"),\n join(paths.commandHome, \".codex\", \"skills\"),\n ]\n : [];\n}\n\nasync function prepareCodexStateEvidence(\n request: Request,\n stateRoot: string,\n paths: Awaited<ReturnType<typeof privateCodexDirectories>>,\n): Promise<void> {\n if (!codexStateEnabled(request.runtimePolicy)) return;\n const skillRoots = codexStateWriteRoots(request, paths);\n await Promise.all(\n skillRoots.map((root) => mkdir(root, { recursive: true, mode: 0o700 })),\n );\n await mkdir(join(paths.codexHome, \"skills\", \".system\"), { mode: 0o700 });\n await retainCandidateCodexState(\n request.candidateRuntimeRoot,\n stateRoot,\n paths,\n );\n}\n\nasync function requireIsolatedGitMetadata(workspace: string): Promise<void> {\n try {\n if (!(await lstat(join(workspace, \".git\"))).isDirectory())\n throw new Error(\"Codex Git metadata must be an isolated directory\");\n } catch (cause) {\n if (!isMissingFile(cause)) throw cause;\n }\n}\n\nfunction requireCodexRuntimeReadRoots(\n request: Request,\n protectedRoots: string[],\n): void {\n requireRuntimeReadRoots(\n request.runtimePolicy?.readOnlyRoots ?? [],\n protectedRoots,\n );\n}\n"]}
|
|
@@ -0,0 +1,527 @@
|
|
|
1
|
+
import { existsSync } from "node:fs";
|
|
2
|
+
import { candidateCodexStateRetained } from "../candidate-codex-state.js";
|
|
3
|
+
import { lstat, mkdtemp, rm, writeFile } from "node:fs/promises";
|
|
4
|
+
import { tmpdir } from "node:os";
|
|
5
|
+
import { isAbsolute, join } from "node:path";
|
|
6
|
+
import { allocateNativeState } from "../native-transcript-state.js";
|
|
7
|
+
import { failedNativeTranscripts, retainEnabledNativeTranscripts, } from "../native-transcripts.js";
|
|
8
|
+
import { runtimeNativeGoalEnabled } from "../runtime/config.js";
|
|
9
|
+
import { releaseRuntimeHooks, runtimeHookObservation, } from "../runtime/hooks.js";
|
|
10
|
+
import { runtimeObservations } from "../runtime/state.js";
|
|
11
|
+
import { validateNativeHostRequest, validHostTimeout } from "./native-request.js";
|
|
12
|
+
import { runCodexAppServer } from "./codex-app-server.js";
|
|
13
|
+
import { summarizeCodexEvents } from "./codex-events.js";
|
|
14
|
+
import { verifyCodexInvocation } from "./codex-invocation.js";
|
|
15
|
+
import { installCodexPlugins } from "./codex-marketplace.js";
|
|
16
|
+
import { codexNativeCallObservation, codexNativeSessionLastOrdinal, } from "./codex-native-calls.js";
|
|
17
|
+
import { runCodexProcess, CodexProcessFailure } from "./codex-process.js";
|
|
18
|
+
import { codexHookMounts, prepareCodexState, } from "./codex-state.js";
|
|
19
|
+
import { codexNativeControls } from "./native-controls.js";
|
|
20
|
+
import { workspaceFingerprint } from "./workspace-fingerprint.js";
|
|
21
|
+
import { codexSkillCatalogRoots } from "./skill-hook-catalog.js";
|
|
22
|
+
import { prepareSkillTracking, skillTrackingObservation, skillActivationClaims, skillExposureClaims, } from "./skill-hooks.js";
|
|
23
|
+
import { cleanupNativeState, createHostDiagnostics, diagnoseHostRequest, diagnosticConfiguration, } from "../host-diagnostics.js";
|
|
24
|
+
const DEFAULT_TIMEOUT_MS = 10 * 60_000;
|
|
25
|
+
function validCodexPaths(options) {
|
|
26
|
+
return ([
|
|
27
|
+
options.binary,
|
|
28
|
+
options.authFile,
|
|
29
|
+
options.projectRoot,
|
|
30
|
+
options.resultsRoot,
|
|
31
|
+
...options.additionalProtectedRoots,
|
|
32
|
+
].every(isAbsolute) &&
|
|
33
|
+
(options.sandboxBinary === undefined || isAbsolute(options.sandboxBinary)));
|
|
34
|
+
}
|
|
35
|
+
function validConcurrencyLimit(limit) {
|
|
36
|
+
return limit === null || (Number.isSafeInteger(limit) && limit >= 1);
|
|
37
|
+
}
|
|
38
|
+
function validEntrypoint(entrypoint) {
|
|
39
|
+
return (entrypoint === undefined || ["exec", "app-server"].includes(entrypoint));
|
|
40
|
+
}
|
|
41
|
+
function validCodexIdentity(options, limit, timeoutMs) {
|
|
42
|
+
return (!!options.model &&
|
|
43
|
+
!!options.effort &&
|
|
44
|
+
validEntrypoint(options.entrypoint) &&
|
|
45
|
+
validConcurrencyLimit(limit) &&
|
|
46
|
+
validHostTimeout(timeoutMs));
|
|
47
|
+
}
|
|
48
|
+
function codexCapabilities(entrypoint) {
|
|
49
|
+
return [
|
|
50
|
+
"sevro.host.continuation",
|
|
51
|
+
"sevro.host.runtime",
|
|
52
|
+
"sevro.host.native-transcripts",
|
|
53
|
+
"sevro.host.hooks",
|
|
54
|
+
"sevro.host.skill-activations",
|
|
55
|
+
"sevro.host.skill-activation-claims",
|
|
56
|
+
"sevro.host.skill-exposure-claims",
|
|
57
|
+
...(entrypoint === "app-server" ? ["sevro.host.native-goal"] : []),
|
|
58
|
+
"sevro.codex.plugin-marketplace",
|
|
59
|
+
"sevro.codex.explicit-invocation",
|
|
60
|
+
"sevro.codex.repository-invocation",
|
|
61
|
+
"sevro.codex.native-calls",
|
|
62
|
+
"sevro.host.native-controls",
|
|
63
|
+
];
|
|
64
|
+
}
|
|
65
|
+
function codexConfiguration(limit, entrypoint, retainDiagnostics) {
|
|
66
|
+
return {
|
|
67
|
+
...diagnosticConfiguration(retainDiagnostics),
|
|
68
|
+
"sevro.codex.agent-concurrency-limit": limit,
|
|
69
|
+
...(entrypoint === "app-server"
|
|
70
|
+
? { "sevro.codex.entrypoint": "app-server" }
|
|
71
|
+
: {}),
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
/** Construct one Codex route without inheriting user settings or credentials. */
|
|
75
|
+
export function createCodexHost(options) {
|
|
76
|
+
const timeoutMs = options.timeoutMs ?? DEFAULT_TIMEOUT_MS;
|
|
77
|
+
const limit = options.agentConcurrencyLimit ?? null;
|
|
78
|
+
if (!validCodexPaths(options) ||
|
|
79
|
+
!validCodexIdentity(options, limit, timeoutMs))
|
|
80
|
+
throw new Error("invalid Codex host configuration");
|
|
81
|
+
return {
|
|
82
|
+
id: "sevro.host.codex",
|
|
83
|
+
hostCapabilities: codexCapabilities(options.entrypoint),
|
|
84
|
+
model: options.model,
|
|
85
|
+
effort: options.effort,
|
|
86
|
+
configuration: codexConfiguration(limit, options.entrypoint, options.retainHostDiagnostics),
|
|
87
|
+
run(request) {
|
|
88
|
+
return runCodexRequest(options, timeoutMs, limit, request);
|
|
89
|
+
},
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
function allocateCodexRequestState(request) {
|
|
93
|
+
return allocateNativeState("codex-", request.runtimePolicy ? request.workspace : undefined);
|
|
94
|
+
}
|
|
95
|
+
async function runCodexRequest(options, timeoutMs, limit, request) {
|
|
96
|
+
const diagnostics = createHostDiagnostics("codex", options.retainHostDiagnostics, request);
|
|
97
|
+
return diagnoseHostRequest(diagnostics, async () => {
|
|
98
|
+
diagnostics.stage = "request-validation";
|
|
99
|
+
await diagnostics.readCredentials(options.authFile);
|
|
100
|
+
return executeCodexRequest(options, timeoutMs, limit, request, diagnostics);
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
async function executeCodexRequest(options, timeoutMs, limit, request, diagnostics) {
|
|
104
|
+
await validateCodexRequest(options, request);
|
|
105
|
+
diagnostics.stage = "state-allocation";
|
|
106
|
+
const stateRoot = await allocateCodexRequestState(request);
|
|
107
|
+
const helperRoot = process.platform === "linux"
|
|
108
|
+
? await mkdtemp(join(tmpdir(), "sevro-codex-helper-"))
|
|
109
|
+
: undefined;
|
|
110
|
+
let activeHooks;
|
|
111
|
+
try {
|
|
112
|
+
diagnostics.stage = "state-preparation";
|
|
113
|
+
const state = await prepareCodexState(stateRoot, options, limit, request, helperRoot);
|
|
114
|
+
const installedPluginRoots = await installCodexPlugins({
|
|
115
|
+
binary: options.binary,
|
|
116
|
+
env: state.env,
|
|
117
|
+
pluginCacheRoot: state.pluginCacheRoot,
|
|
118
|
+
request,
|
|
119
|
+
diagnostics,
|
|
120
|
+
});
|
|
121
|
+
diagnostics.stage = "hooks-preparation";
|
|
122
|
+
const hooks = await codexHookMounts(request, state, installedPluginRoots);
|
|
123
|
+
activeHooks = hooks;
|
|
124
|
+
const skillTracking = await prepareCodexSkillTracking(state, request, installedPluginRoots);
|
|
125
|
+
await codexPreflight(options, request, state, diagnostics);
|
|
126
|
+
const context = {
|
|
127
|
+
options,
|
|
128
|
+
request,
|
|
129
|
+
state,
|
|
130
|
+
timeoutMs,
|
|
131
|
+
hooks,
|
|
132
|
+
skillTracking,
|
|
133
|
+
diagnostics,
|
|
134
|
+
};
|
|
135
|
+
const turns = await new CodexTurnExecution(context).run();
|
|
136
|
+
if (turns.summary.complete)
|
|
137
|
+
diagnostics.stage = "result-processing";
|
|
138
|
+
return await retainCodexResult(context, turns);
|
|
139
|
+
}
|
|
140
|
+
catch (cause) {
|
|
141
|
+
return await failedNativeTranscripts(cause, request.runtimePolicy, join(stateRoot, "codex-home", "sessions"), "codex", request.runtimeRole, diagnostics);
|
|
142
|
+
}
|
|
143
|
+
finally {
|
|
144
|
+
await cleanupNativeState(diagnostics, async () => {
|
|
145
|
+
await releaseRuntimeHooks(activeHooks);
|
|
146
|
+
if (!candidateCodexStateRetained(request.candidateRuntimeRoot, stateRoot))
|
|
147
|
+
await rm(stateRoot, { recursive: true, force: true });
|
|
148
|
+
if (helperRoot)
|
|
149
|
+
await rm(helperRoot, { recursive: true, force: true });
|
|
150
|
+
});
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
async function retainCodexResult(context, turns) {
|
|
154
|
+
const result = await codexHostResult(context, turns);
|
|
155
|
+
await context.diagnostics.retainFailure(result, "Codex host execution did not complete");
|
|
156
|
+
await retainEnabledNativeTranscripts(result, context.request.runtimePolicy, join(context.state.codexHome, "sessions"), "codex", context.request.runtimeRole, turns.summary.threadId);
|
|
157
|
+
return result;
|
|
158
|
+
}
|
|
159
|
+
async function prepareCodexSkillTracking(state, request, pluginRoots) {
|
|
160
|
+
const roots = await codexSkillCatalogRoots(request.workspace, pluginRoots, [
|
|
161
|
+
{ directory: join(state.codexHome, "skills"), boundary: state.codexHome },
|
|
162
|
+
{
|
|
163
|
+
directory: join(state.parentHome, ".agents/skills"),
|
|
164
|
+
boundary: state.parentHome,
|
|
165
|
+
},
|
|
166
|
+
{
|
|
167
|
+
directory: join(state.commandHome, ".agents/skills"),
|
|
168
|
+
boundary: state.commandHome,
|
|
169
|
+
},
|
|
170
|
+
{
|
|
171
|
+
directory: join(state.commandHome, ".codex/skills"),
|
|
172
|
+
boundary: state.commandHome,
|
|
173
|
+
},
|
|
174
|
+
]);
|
|
175
|
+
const tracking = await prepareSkillTracking({
|
|
176
|
+
privateRoot: state.codexHome,
|
|
177
|
+
host: "codex",
|
|
178
|
+
roots,
|
|
179
|
+
});
|
|
180
|
+
await writeFile(join(state.codexHome, "hooks.json"), JSON.stringify({ hooks: tracking.hooks }), {
|
|
181
|
+
flag: "wx",
|
|
182
|
+
mode: 0o600,
|
|
183
|
+
});
|
|
184
|
+
return tracking;
|
|
185
|
+
}
|
|
186
|
+
async function validateCodexRequest(options, request) {
|
|
187
|
+
await validateNativeHostRequest(request, "Codex");
|
|
188
|
+
requireCodexGoalRoute(request, options);
|
|
189
|
+
await verifyCodexInvocation(request);
|
|
190
|
+
await requireCodexFixtureConfiguration(request);
|
|
191
|
+
}
|
|
192
|
+
async function requireCodexFixtureConfiguration(request) {
|
|
193
|
+
const path = join(request.workspace, ".codex");
|
|
194
|
+
if (!existsSync(path))
|
|
195
|
+
return;
|
|
196
|
+
if (request.runtimePolicy?.codexState !== true)
|
|
197
|
+
throw new Error("fixture Codex configuration is unsupported");
|
|
198
|
+
if (!(await lstat(path)).isDirectory())
|
|
199
|
+
throw new Error("fixture Codex configuration must be a physical directory");
|
|
200
|
+
}
|
|
201
|
+
function requireCodexGoalRoute(request, options) {
|
|
202
|
+
if (runtimeNativeGoalEnabled(request.runtimePolicy) &&
|
|
203
|
+
options.entrypoint !== "app-server")
|
|
204
|
+
throw new Error("native-goal runtime policy requires Codex app-server");
|
|
205
|
+
}
|
|
206
|
+
function sandboxArgs(state, request, command) {
|
|
207
|
+
return [
|
|
208
|
+
state.sandboxBinary,
|
|
209
|
+
"sandbox",
|
|
210
|
+
"-P",
|
|
211
|
+
state.profileId,
|
|
212
|
+
"-C",
|
|
213
|
+
request.workspace,
|
|
214
|
+
...command,
|
|
215
|
+
];
|
|
216
|
+
}
|
|
217
|
+
async function sandboxPreflight(state, request, command, diagnostics) {
|
|
218
|
+
return runCodexProcess({
|
|
219
|
+
diagnostics,
|
|
220
|
+
argv: sandboxArgs(state, request, command),
|
|
221
|
+
cwd: request.workspace,
|
|
222
|
+
env: state.env,
|
|
223
|
+
timeoutMs: 60_000,
|
|
224
|
+
phase: "isolation-preflight",
|
|
225
|
+
signal: request.signal,
|
|
226
|
+
});
|
|
227
|
+
}
|
|
228
|
+
async function codexPreflight(options, request, state, diagnostics) {
|
|
229
|
+
diagnostics.stage = "isolation-preflight";
|
|
230
|
+
const probe = join(state.commandTemp, "isolation-probe");
|
|
231
|
+
await writeFile(probe, "probe\n", { flag: "wx", mode: 0o600 });
|
|
232
|
+
const checked = await sandboxPreflight(state, request, [
|
|
233
|
+
"/bin/sh",
|
|
234
|
+
"-c",
|
|
235
|
+
'/bin/cat "$1" >/dev/null && ! /bin/ls "$2" >/dev/null 2>&1 && ! /bin/cat "$3" >/dev/null 2>&1 && ! /bin/cat "$4" >/dev/null 2>&1 || exit 70; "$5" --version >/dev/null 2>&1 || exit 71',
|
|
236
|
+
"sevro-probe",
|
|
237
|
+
probe,
|
|
238
|
+
options.projectRoot,
|
|
239
|
+
join(state.codexHome, "auth.json"),
|
|
240
|
+
// The opt-in config read is tested separately; credentials always stay denied.
|
|
241
|
+
join(state.codexHome, request.runtimePolicy?.codexState === true
|
|
242
|
+
? "auth.json"
|
|
243
|
+
: "config.toml"),
|
|
244
|
+
state.sandboxBinary,
|
|
245
|
+
], diagnostics);
|
|
246
|
+
if (checked.code === 71)
|
|
247
|
+
throw new CodexProcessFailure("executable-preflight", checked);
|
|
248
|
+
if (checked.code !== 0)
|
|
249
|
+
throw new CodexProcessFailure("isolation-preflight", checked);
|
|
250
|
+
await rm(probe);
|
|
251
|
+
}
|
|
252
|
+
function routeArgs(context) {
|
|
253
|
+
return [
|
|
254
|
+
"-m",
|
|
255
|
+
context.options.model,
|
|
256
|
+
"-c",
|
|
257
|
+
`model_reasoning_effort=${JSON.stringify(context.options.effort)}`,
|
|
258
|
+
"-c",
|
|
259
|
+
`default_permissions=${JSON.stringify(context.state.profileId)}`,
|
|
260
|
+
"-c",
|
|
261
|
+
'approval_policy="never"',
|
|
262
|
+
"-c",
|
|
263
|
+
"features.hooks=true",
|
|
264
|
+
];
|
|
265
|
+
}
|
|
266
|
+
function initialTurnArgs(context) {
|
|
267
|
+
return [
|
|
268
|
+
context.options.binary,
|
|
269
|
+
"exec",
|
|
270
|
+
"--json",
|
|
271
|
+
"--strict-config",
|
|
272
|
+
"--skip-git-repo-check",
|
|
273
|
+
...(context.request.followUpPrompt ||
|
|
274
|
+
context.request.runtimePolicy?.nativeTranscripts
|
|
275
|
+
? []
|
|
276
|
+
: ["--ephemeral"]),
|
|
277
|
+
"--ignore-rules",
|
|
278
|
+
"--dangerously-bypass-hook-trust",
|
|
279
|
+
"-C",
|
|
280
|
+
context.request.workspace,
|
|
281
|
+
...routeArgs(context),
|
|
282
|
+
"-",
|
|
283
|
+
];
|
|
284
|
+
}
|
|
285
|
+
function followUpTurnArgs(context, threadId) {
|
|
286
|
+
return [
|
|
287
|
+
context.options.binary,
|
|
288
|
+
"exec",
|
|
289
|
+
"resume",
|
|
290
|
+
"--json",
|
|
291
|
+
"--strict-config",
|
|
292
|
+
"--skip-git-repo-check",
|
|
293
|
+
"--ignore-rules",
|
|
294
|
+
"--dangerously-bypass-hook-trust",
|
|
295
|
+
...routeArgs(context),
|
|
296
|
+
threadId,
|
|
297
|
+
"-",
|
|
298
|
+
];
|
|
299
|
+
}
|
|
300
|
+
async function codexProcessTurn(context, argv, input) {
|
|
301
|
+
context.diagnostics.stage = "exec";
|
|
302
|
+
const result = await runCodexProcess({
|
|
303
|
+
diagnostics: context.diagnostics,
|
|
304
|
+
argv,
|
|
305
|
+
cwd: context.request.workspace,
|
|
306
|
+
env: context.state.env,
|
|
307
|
+
input,
|
|
308
|
+
timeoutMs: context.timeoutMs,
|
|
309
|
+
signal: context.request.signal,
|
|
310
|
+
});
|
|
311
|
+
return result;
|
|
312
|
+
}
|
|
313
|
+
async function initialFingerprint(request) {
|
|
314
|
+
return request.followUpPrompt
|
|
315
|
+
? workspaceFingerprint(request.workspace)
|
|
316
|
+
: null;
|
|
317
|
+
}
|
|
318
|
+
async function continuationBoundary(context, threadId, originalFingerprint, goal = {}) {
|
|
319
|
+
const boundary = await workspaceFingerprint(context.request.workspace);
|
|
320
|
+
const measured = originalFingerprint !== null && boundary !== null;
|
|
321
|
+
return {
|
|
322
|
+
id: "sevro.codex.continuation",
|
|
323
|
+
completeness: measured ? "complete" : "partial",
|
|
324
|
+
data: {
|
|
325
|
+
method: "same_thread_resume",
|
|
326
|
+
...goal,
|
|
327
|
+
threadId,
|
|
328
|
+
nativeAfterOrdinal: await codexNativeSessionLastOrdinal(context.state.codexHome, threadId),
|
|
329
|
+
preFollowUpWorktreeUnchanged: measured
|
|
330
|
+
? originalFingerprint === boundary
|
|
331
|
+
: null,
|
|
332
|
+
},
|
|
333
|
+
};
|
|
334
|
+
}
|
|
335
|
+
function requireInitialCompletion(summary, appServer) {
|
|
336
|
+
if (!summary.complete && !appServer)
|
|
337
|
+
throw new Error("Codex turn did not complete");
|
|
338
|
+
}
|
|
339
|
+
function requireFollowUpCompletion(followUp, original) {
|
|
340
|
+
if (!followUp.complete || followUp.threadId !== original.threadId)
|
|
341
|
+
throw new Error("Codex follow-up turn did not complete in the original thread");
|
|
342
|
+
}
|
|
343
|
+
function appServerSummary(result) {
|
|
344
|
+
return {
|
|
345
|
+
threadId: result.evidence.threadId ?? "",
|
|
346
|
+
complete: result.code === 0,
|
|
347
|
+
finalMessage: result.finalMessage,
|
|
348
|
+
// App-server reports cumulative thread totals, not per-turn usage. Keep
|
|
349
|
+
// usage unknown rather than count continuations or feedback more than once.
|
|
350
|
+
inputTokens: null,
|
|
351
|
+
outputTokens: null,
|
|
352
|
+
usageComplete: false,
|
|
353
|
+
};
|
|
354
|
+
}
|
|
355
|
+
function initialSummary(appServer, execution) {
|
|
356
|
+
return appServer
|
|
357
|
+
? appServerSummary(appServer)
|
|
358
|
+
: summarizeCodexEvents(execution.out, execution.code);
|
|
359
|
+
}
|
|
360
|
+
class CodexTurnExecution {
|
|
361
|
+
context;
|
|
362
|
+
appServerContinuation;
|
|
363
|
+
constructor(context) {
|
|
364
|
+
this.context = context;
|
|
365
|
+
}
|
|
366
|
+
async run() {
|
|
367
|
+
const fingerprint = await initialFingerprint(this.context.request);
|
|
368
|
+
const appServer = await this.maybeAppServer(fingerprint);
|
|
369
|
+
const execution = appServer ??
|
|
370
|
+
(await codexProcessTurn(this.context, initialTurnArgs(this.context), this.context.request.prompt));
|
|
371
|
+
const summary = initialSummary(appServer, execution);
|
|
372
|
+
requireInitialCompletion(summary, appServer);
|
|
373
|
+
const follow = await this.maybeFollowUp(summary, appServer, fingerprint);
|
|
374
|
+
return {
|
|
375
|
+
execution,
|
|
376
|
+
summary,
|
|
377
|
+
appServer,
|
|
378
|
+
...follow,
|
|
379
|
+
};
|
|
380
|
+
}
|
|
381
|
+
async maybeAppServer(fingerprint) {
|
|
382
|
+
const { options, request, state, timeoutMs } = this.context;
|
|
383
|
+
if (options.entrypoint !== "app-server")
|
|
384
|
+
return null;
|
|
385
|
+
this.context.diagnostics.stage = "app-server";
|
|
386
|
+
return runCodexAppServer({
|
|
387
|
+
diagnostics: this.context.diagnostics,
|
|
388
|
+
argv: [
|
|
389
|
+
options.binary,
|
|
390
|
+
"app-server",
|
|
391
|
+
"--stdio",
|
|
392
|
+
"--strict-config",
|
|
393
|
+
"-c",
|
|
394
|
+
`default_permissions=${JSON.stringify(state.profileId)}`,
|
|
395
|
+
"-c",
|
|
396
|
+
"features.hooks=true",
|
|
397
|
+
],
|
|
398
|
+
env: state.env,
|
|
399
|
+
permissionProfile: state.profileId,
|
|
400
|
+
vettedHooks: true,
|
|
401
|
+
request: {
|
|
402
|
+
repoDir: request.workspace,
|
|
403
|
+
prompt: request.prompt,
|
|
404
|
+
model: options.model,
|
|
405
|
+
effort: options.effort,
|
|
406
|
+
signal: request.signal,
|
|
407
|
+
control: {
|
|
408
|
+
appServerTimeoutMs: timeoutMs,
|
|
409
|
+
...(request.followUpPrompt
|
|
410
|
+
? { followUpPrompt: request.followUpPrompt }
|
|
411
|
+
: {}),
|
|
412
|
+
},
|
|
413
|
+
},
|
|
414
|
+
followUpBoundary: async (threadId, goal) => {
|
|
415
|
+
this.appServerContinuation = await continuationBoundary(this.context, threadId, fingerprint, goal);
|
|
416
|
+
return JSON.stringify({
|
|
417
|
+
type: "sevro.codex.feedback-boundary",
|
|
418
|
+
...this.appServerContinuation.data,
|
|
419
|
+
});
|
|
420
|
+
},
|
|
421
|
+
});
|
|
422
|
+
}
|
|
423
|
+
async maybeFollowUp(summary, appServer, fingerprint) {
|
|
424
|
+
const prompt = this.context.request.followUpPrompt;
|
|
425
|
+
if (!prompt || appServer)
|
|
426
|
+
return {
|
|
427
|
+
followUp: null,
|
|
428
|
+
followUpSummary: null,
|
|
429
|
+
continuation: this.appServerContinuation,
|
|
430
|
+
};
|
|
431
|
+
const continuation = await continuationBoundary(this.context, summary.threadId, fingerprint);
|
|
432
|
+
const followUp = await codexProcessTurn(this.context, followUpTurnArgs(this.context, summary.threadId), prompt);
|
|
433
|
+
const followUpSummary = summarizeCodexEvents(followUp.out, followUp.code);
|
|
434
|
+
requireFollowUpCompletion(followUpSummary, summary);
|
|
435
|
+
return { followUp, followUpSummary, continuation };
|
|
436
|
+
}
|
|
437
|
+
}
|
|
438
|
+
function explicitInvocationReceipt(selected, completed) {
|
|
439
|
+
if (!selected)
|
|
440
|
+
return null;
|
|
441
|
+
return {
|
|
442
|
+
id: "sevro.codex.explicit-invocation",
|
|
443
|
+
completeness: completed ? "complete" : "partial",
|
|
444
|
+
data: {
|
|
445
|
+
method: "explicit_invocation",
|
|
446
|
+
primarySkill: selected.skillName,
|
|
447
|
+
},
|
|
448
|
+
};
|
|
449
|
+
}
|
|
450
|
+
function appServerObservation(result) {
|
|
451
|
+
return result
|
|
452
|
+
? [
|
|
453
|
+
{
|
|
454
|
+
id: "sevro.host.native-goal",
|
|
455
|
+
completeness: result.code === 0 ? "complete" : "partial",
|
|
456
|
+
data: { ...result.evidence },
|
|
457
|
+
},
|
|
458
|
+
]
|
|
459
|
+
: [];
|
|
460
|
+
}
|
|
461
|
+
async function codexObservations(context, turns) {
|
|
462
|
+
const tracking = await skillTrackingObservation(context.skillTracking, turns.summary.threadId, turns.summary.complete);
|
|
463
|
+
const native = await codexNativeCallObservation(context.state.codexHome, turns.summary.threadId, { followUpPrompt: context.request.followUpPrompt });
|
|
464
|
+
const explicit = explicitInvocationReceipt(context.request.explicitSkillInvocation, turns.summary.complete);
|
|
465
|
+
return [
|
|
466
|
+
...(await codexHookObservations(context)),
|
|
467
|
+
...runtimeObservations(context.request.runtimePolicy, context.request.runtimeRole),
|
|
468
|
+
...appServerObservation(turns.appServer),
|
|
469
|
+
native,
|
|
470
|
+
codexNativeControls(native),
|
|
471
|
+
...(turns.continuation ? [turns.continuation] : []),
|
|
472
|
+
...(explicit ? [explicit] : []),
|
|
473
|
+
tracking,
|
|
474
|
+
...skillActivationClaims(tracking),
|
|
475
|
+
...skillExposureClaims(tracking),
|
|
476
|
+
];
|
|
477
|
+
}
|
|
478
|
+
async function codexHookObservations(context) {
|
|
479
|
+
if (!context.request.runtimePolicy)
|
|
480
|
+
return [];
|
|
481
|
+
return [await runtimeHookObservation(context.hooks)];
|
|
482
|
+
}
|
|
483
|
+
function codexArtifacts(turns) {
|
|
484
|
+
return [
|
|
485
|
+
{
|
|
486
|
+
id: "sevro.codex.events",
|
|
487
|
+
bytes: Buffer.from(turns.execution.out, "utf8"),
|
|
488
|
+
},
|
|
489
|
+
...(turns.followUp
|
|
490
|
+
? [
|
|
491
|
+
{
|
|
492
|
+
id: "sevro.codex.follow-up-events",
|
|
493
|
+
bytes: Buffer.from(turns.followUp.out, "utf8"),
|
|
494
|
+
},
|
|
495
|
+
]
|
|
496
|
+
: []),
|
|
497
|
+
];
|
|
498
|
+
}
|
|
499
|
+
function tokenCount(initial, followUp) {
|
|
500
|
+
if (followUp === undefined)
|
|
501
|
+
return initial;
|
|
502
|
+
return initial !== null && followUp !== null ? initial + followUp : null;
|
|
503
|
+
}
|
|
504
|
+
function codexUsageComplete(summary, followUp) {
|
|
505
|
+
return summary.usageComplete && (followUp?.usageComplete ?? true);
|
|
506
|
+
}
|
|
507
|
+
function codexUsage(turns) {
|
|
508
|
+
return {
|
|
509
|
+
inputTokens: tokenCount(turns.summary.inputTokens, turns.followUpSummary?.inputTokens),
|
|
510
|
+
outputTokens: tokenCount(turns.summary.outputTokens, turns.followUpSummary?.outputTokens),
|
|
511
|
+
usageComplete: codexUsageComplete(turns.summary, turns.followUpSummary),
|
|
512
|
+
costUsd: null,
|
|
513
|
+
};
|
|
514
|
+
}
|
|
515
|
+
async function codexHostResult(context, turns) {
|
|
516
|
+
const final = turns.followUpSummary ?? turns.summary;
|
|
517
|
+
return {
|
|
518
|
+
finalMessage: final.finalMessage,
|
|
519
|
+
...(turns.appServer ? { executionFailed: !turns.summary.complete } : {}),
|
|
520
|
+
complete: final.finalMessage !== null,
|
|
521
|
+
observations: await codexObservations(context, turns),
|
|
522
|
+
artifacts: codexArtifacts(turns),
|
|
523
|
+
actualCondition: "passive",
|
|
524
|
+
...codexUsage(turns),
|
|
525
|
+
};
|
|
526
|
+
}
|
|
527
|
+
//# sourceMappingURL=codex.js.map
|