@bjoernrochel/sevro 1.0.0 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/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 +156 -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/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
package/dist/src/cli.js
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { main } from "./cli/command.js";
|
|
3
|
+
import { reportCommand } from "./report.js";
|
|
4
|
+
import { informationCommand } from "./cli/help.js";
|
|
5
|
+
import { demoCommand } from "./cli/demo.js";
|
|
6
|
+
import { initCommand } from "./cli/init.js";
|
|
7
|
+
import { pruneCommand } from "./prune.js";
|
|
8
|
+
if (informationCommand(process.argv.slice(2)))
|
|
9
|
+
process.exitCode = 0;
|
|
10
|
+
else if (process.argv[2] === "demo")
|
|
11
|
+
await demoCommand(process.argv.slice(3));
|
|
12
|
+
else if (process.argv[2] === "init")
|
|
13
|
+
process.exitCode = await initCommand(process.argv.slice(3));
|
|
14
|
+
else if (process.argv[2] === "report")
|
|
15
|
+
process.exitCode = await reportCommand(process.argv.slice(2));
|
|
16
|
+
else if (process.argv[2] === "prune")
|
|
17
|
+
process.exitCode = await pruneCommand(process.argv.slice(3));
|
|
18
|
+
else
|
|
19
|
+
await main(process.argv.slice(2));
|
|
20
|
+
//# sourceMappingURL=cli.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["cli.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,IAAI,EAAE,yBAAsB;AACrC,OAAO,EAAE,aAAa,EAAE,oBAAiB;AACzC,OAAO,EAAE,kBAAkB,EAAE,sBAAmB;AAChD,OAAO,EAAE,WAAW,EAAE,sBAAmB;AACzC,OAAO,EAAE,WAAW,EAAE,sBAAmB;AACzC,OAAO,EAAE,YAAY,EAAE,mBAAgB;AAEvC,IAAI,kBAAkB,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAAE,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;KAC/D,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,MAAM;IAAE,MAAM,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;KACzE,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,MAAM;IACjC,OAAO,CAAC,QAAQ,GAAG,MAAM,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;KACzD,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,QAAQ;IACnC,OAAO,CAAC,QAAQ,GAAG,MAAM,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;KAC3D,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,OAAO;IAClC,OAAO,CAAC,QAAQ,GAAG,MAAM,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;;IAC1D,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC","sourcesContent":["#!/usr/bin/env node\nimport { main } from \"./cli/command\";\nimport { reportCommand } from \"./report\";\nimport { informationCommand } from \"./cli/help\";\nimport { demoCommand } from \"./cli/demo\";\nimport { initCommand } from \"./cli/init\";\nimport { pruneCommand } from \"./prune\";\n\nif (informationCommand(process.argv.slice(2))) process.exitCode = 0;\nelse if (process.argv[2] === \"demo\") await demoCommand(process.argv.slice(3));\nelse if (process.argv[2] === \"init\")\n process.exitCode = await initCommand(process.argv.slice(3));\nelse if (process.argv[2] === \"report\")\n process.exitCode = await reportCommand(process.argv.slice(2));\nelse if (process.argv[2] === \"prune\")\n process.exitCode = await pruneCommand(process.argv.slice(3));\nelse await main(process.argv.slice(2));\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"contract-types.js","sourceRoot":"","sources":["contract-types.ts"],"names":[],"mappings":"","sourcesContent":["/** Shared structures; public schemas and runtime guards still validate external data. */\nexport type ExecutionStatus = \"completed\" | \"failed\" | \"cancelled\" | \"not_run\";\nexport type GradingStatus =\n \"completed\" | \"error\" | \"unavailable\" | \"not_requested\";\nexport type TaskVerdict = \"passed\" | \"failed\" | \"not_assessed\";\nexport type OutcomeStatus = \"passed\" | \"failed\" | \"unavailable\";\nexport type ExitCode = 0 | 1 | 2 | 3 | 4 | 64 | 70 | 130 | 143;\n\nexport interface Assessment {\n execution: { status: ExecutionStatus };\n grading: { status: GradingStatus };\n task: { verdict: TaskVerdict };\n}\n\nexport type CheckDeclaration = {\n id: string;\n grader: string;\n configuration: Record<string, unknown>;\n};\n\n/** Runner check outcomes include their grader and may lack evidence references. */\nexport interface CheckOutcome {\n id: string;\n grader: string;\n status: OutcomeStatus;\n detail?: string;\n evidenceRefs?: string[];\n}\n\n/** Extension checks require references; their grader comes from the declaration. */\nexport type ExtensionCheckOutcome = {\n id: string;\n status: OutcomeStatus;\n detail?: string;\n evidenceRefs: string[];\n};\n\n/** Domain outcomes are retained independently of task checks and verdicts. */\nexport type DomainOutcome = {\n id: string;\n status: OutcomeStatus;\n detail?: string;\n evidenceRefs: string[];\n data?: Record<string, unknown>;\n};\n\nexport type ObservationCompleteness = \"complete\" | \"partial\" | \"unavailable\";\n\nexport type ObservationEvidence = {\n id: string;\n source: string;\n completeness: ObservationCompleteness;\n data: Record<string, unknown>;\n};\n\nexport type MetricEvidence = {\n id: string;\n value: number | null;\n unit: string;\n};\n\n/** Retained measurements keep unknown values and completeness separate. */\nexport type UsageEvidence = {\n inputTokens: number | null;\n outputTokens: number | null;\n costUsd: number | null;\n complete: boolean;\n};\n\nexport type RawResultReference = {\n source: string;\n path: string | null;\n sha256: string | null;\n};\n\nexport type ArtifactReference = {\n id: string;\n path: string;\n sha256: string;\n gitExclude?: boolean;\n executable?: boolean;\n};\n\nexport type EvidenceRoute = {\n role: \"candidate\" | \"semantic\" | \"advisory\";\n host: string;\n model: string;\n effort: string;\n};\n\nexport type Diagnostic = {\n code: string;\n message: string;\n};\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"engine.js","sourceRoot":"","sources":["engine.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,4BAA4B,EAC5B,oBAAoB,GACrB,8BAA2B;AAS5B,OAAO,EAAE,aAAa,EAAE,4BAAyB;AACjD,OAAO,EAAE,wBAAwB,EAAE,4BAAyB","sourcesContent":["export {\n EvaluationConfigurationError,\n HostExecutionFailure,\n} from \"./evaluation/types\";\nexport type {\n HostResult,\n HostAdapter,\n ResolvedCase,\n EvaluationOptions,\n EvaluationProgress,\n CliResult,\n} from \"./evaluation/types\";\nexport { runEvaluation } from \"./evaluation/run\";\nexport { loadRuntimeConfiguration } from \"./runtime/config\";\nexport type { RuntimeConfiguration, RuntimePolicy } from \"./runtime/config\";\nexport type {\n RuntimeArtifactDirectory,\n CandidateArtifactRoots,\n} from \"./candidate-artifacts\";\n"]}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import { advisoryPrompt, parseAdvisoryAssessment, } from "../advisory.js";
|
|
2
|
+
import { usage } from "../evidence/usage.js";
|
|
3
|
+
import { buildBlindAdvisoryFixture } from "../fixtures/advisory.js";
|
|
4
|
+
import { removeWorkspace } from "../fixtures/workspace-state.js";
|
|
5
|
+
import { HostDiagnosticPersistenceError } from "../host-diagnostics.js";
|
|
6
|
+
import { gradingRuntimePolicy, scopedHostArtifacts } from "./grading-host.js";
|
|
7
|
+
import { TrialPersistenceError, } from "./types.js";
|
|
8
|
+
function defaultAdvisoryReview(host) {
|
|
9
|
+
return {
|
|
10
|
+
status: "not_run",
|
|
11
|
+
assessment: null,
|
|
12
|
+
usage: usage(null),
|
|
13
|
+
rawResult: { source: host.id, path: null, sha256: null },
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
function completeAdvisoryAssessment(response) {
|
|
17
|
+
if (response.executionFailed ||
|
|
18
|
+
!response.complete ||
|
|
19
|
+
response.finalMessage === null)
|
|
20
|
+
throw new Error("advisory response is incomplete");
|
|
21
|
+
return parseAdvisoryAssessment(response.finalMessage);
|
|
22
|
+
}
|
|
23
|
+
async function cleanupAdvisoryWorkspace(workspace, successful, effects) {
|
|
24
|
+
if (!workspace)
|
|
25
|
+
return;
|
|
26
|
+
if (!successful)
|
|
27
|
+
return effects.retainWorkspace(workspace);
|
|
28
|
+
try {
|
|
29
|
+
await removeWorkspace(workspace);
|
|
30
|
+
}
|
|
31
|
+
catch {
|
|
32
|
+
console.warn(`advisory fixture cleanup failed; retained at ${workspace}`);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
async function executeAdvisoryReview(input, effects, review) {
|
|
36
|
+
let workspace = null;
|
|
37
|
+
try {
|
|
38
|
+
if (input.baseRevision === null)
|
|
39
|
+
throw new Error("advisory base revision is unavailable");
|
|
40
|
+
workspace = await buildBlindAdvisoryFixture(input.candidateWorkspace, {
|
|
41
|
+
baseRevision: input.baseRevision,
|
|
42
|
+
excludedPaths: input.excludedPaths,
|
|
43
|
+
});
|
|
44
|
+
const response = await input.host.run({
|
|
45
|
+
retainHostDiagnostics: (bytes) => effects.evidence.retainArtifacts([
|
|
46
|
+
{
|
|
47
|
+
id: "sevro.advisory.sevro.host.diagnostics",
|
|
48
|
+
bytes: Buffer.from(bytes),
|
|
49
|
+
},
|
|
50
|
+
]),
|
|
51
|
+
candidateTranscriptRoot: input.candidateTranscriptRoot,
|
|
52
|
+
candidateArtifactRoots: input.candidateArtifactRoots,
|
|
53
|
+
prompt: advisoryPrompt(input.task, [...input.checks]),
|
|
54
|
+
runtimePolicy: gradingRuntimePolicy(input.runtimePolicy),
|
|
55
|
+
runtimeRole: "advisory",
|
|
56
|
+
workspace,
|
|
57
|
+
condition: "passive",
|
|
58
|
+
signal: input.signal,
|
|
59
|
+
});
|
|
60
|
+
review.usage = usage(response);
|
|
61
|
+
const artifacts = scopedHostArtifacts(response, "sevro.advisory.", effects.evidence.artifactRefs, input.declaredChecks, "sevro.advisory.response");
|
|
62
|
+
await effects.evidence.retainArtifacts(artifacts);
|
|
63
|
+
review.rawResult = await effects.evidence.retainAdvisoryResponse(input.host.id, response.finalMessage);
|
|
64
|
+
review.assessment = completeAdvisoryAssessment(response);
|
|
65
|
+
review.status = "completed";
|
|
66
|
+
}
|
|
67
|
+
catch (error) {
|
|
68
|
+
if (error instanceof HostDiagnosticPersistenceError ||
|
|
69
|
+
error instanceof TrialPersistenceError)
|
|
70
|
+
throw error;
|
|
71
|
+
review.status = "failed";
|
|
72
|
+
}
|
|
73
|
+
finally {
|
|
74
|
+
await cleanupAdvisoryWorkspace(workspace, review.status === "completed", effects);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
/** Advisory execution depends on candidate completion, independently of task grading. */
|
|
78
|
+
export async function runAdvisoryReview(input, effects) {
|
|
79
|
+
const review = defaultAdvisoryReview(input.host);
|
|
80
|
+
if (!input.candidateCompleted || input.signal?.aborted)
|
|
81
|
+
return review;
|
|
82
|
+
await executeAdvisoryReview(input, effects, review);
|
|
83
|
+
return review;
|
|
84
|
+
}
|
|
85
|
+
//# sourceMappingURL=advisory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"advisory.js","sourceRoot":"","sources":["advisory.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n advisoryPrompt,\n parseAdvisoryAssessment,\n type AdvisoryAssessment,\n} from \"../advisory\";\nimport type { CandidateArtifactRoots } from \"../candidate-artifacts\";\nimport type { TrialEvidenceWriter } from \"../evidence/trial-writer\";\nimport { usage } from \"../evidence/usage\";\nimport { buildBlindAdvisoryFixture } from \"../fixtures/advisory\";\nimport { removeWorkspace } from \"../fixtures/workspace-state\";\nimport { HostDiagnosticPersistenceError } from \"../host-diagnostics\";\nimport type { CheckOutcome } from \"../results\";\nimport type { AdvisoryReviewData } from \"../schema-types\";\nimport type { RuntimePolicy } from \"../runtime/config\";\nimport { gradingRuntimePolicy, scopedHostArtifacts } from \"./grading-host\";\nimport {\n TrialPersistenceError,\n type HostAdapter,\n type HostResult,\n} from \"./types\";\n\nexport type AdvisoryReview = AdvisoryReviewData;\n\ninterface AdvisoryInput {\n readonly host: HostAdapter;\n readonly candidateCompleted: boolean;\n readonly candidateWorkspace: string;\n readonly candidateTranscriptRoot?: string;\n readonly candidateArtifactRoots?: CandidateArtifactRoots;\n readonly baseRevision: string | null;\n readonly excludedPaths?: string[];\n readonly task: string;\n readonly checks: readonly CheckOutcome[];\n readonly declaredChecks: { id: string }[];\n readonly runtimePolicy?: RuntimePolicy;\n readonly signal?: AbortSignal;\n}\n\ninterface AdvisoryEffects {\n readonly evidence: Pick<\n TrialEvidenceWriter,\n \"artifactRefs\" | \"retainArtifacts\" | \"retainAdvisoryResponse\"\n >;\n retainWorkspace(workspace: string): Promise<void>;\n}\n\nfunction defaultAdvisoryReview(host: HostAdapter): AdvisoryReview {\n return {\n status: \"not_run\",\n assessment: null,\n usage: usage(null),\n rawResult: { source: host.id, path: null, sha256: null },\n };\n}\n\nfunction completeAdvisoryAssessment(response: HostResult): AdvisoryAssessment {\n if (\n response.executionFailed ||\n !response.complete ||\n response.finalMessage === null\n )\n throw new Error(\"advisory response is incomplete\");\n return parseAdvisoryAssessment(response.finalMessage);\n}\n\nasync function cleanupAdvisoryWorkspace(\n workspace: string | null,\n successful: boolean,\n effects: AdvisoryEffects,\n): Promise<void> {\n if (!workspace) return;\n if (!successful) return effects.retainWorkspace(workspace);\n try {\n await removeWorkspace(workspace);\n } catch {\n console.warn(`advisory fixture cleanup failed; retained at ${workspace}`);\n }\n}\n\nasync function executeAdvisoryReview(\n input: AdvisoryInput,\n effects: AdvisoryEffects,\n review: AdvisoryReview,\n): Promise<void> {\n let workspace: string | null = null;\n try {\n if (input.baseRevision === null)\n throw new Error(\"advisory base revision is unavailable\");\n workspace = await buildBlindAdvisoryFixture(input.candidateWorkspace, {\n baseRevision: input.baseRevision,\n excludedPaths: input.excludedPaths,\n });\n const response = await input.host.run({\n retainHostDiagnostics: (bytes) =>\n effects.evidence.retainArtifacts([\n {\n id: \"sevro.advisory.sevro.host.diagnostics\",\n bytes: Buffer.from(bytes),\n },\n ]),\n candidateTranscriptRoot: input.candidateTranscriptRoot,\n candidateArtifactRoots: input.candidateArtifactRoots,\n prompt: advisoryPrompt(input.task, [...input.checks]),\n runtimePolicy: gradingRuntimePolicy(input.runtimePolicy),\n runtimeRole: \"advisory\",\n workspace,\n condition: \"passive\",\n signal: input.signal,\n });\n review.usage = usage(response);\n const artifacts = scopedHostArtifacts(\n response,\n \"sevro.advisory.\",\n effects.evidence.artifactRefs,\n input.declaredChecks,\n \"sevro.advisory.response\",\n );\n await effects.evidence.retainArtifacts(artifacts);\n review.rawResult = await effects.evidence.retainAdvisoryResponse(\n input.host.id,\n response.finalMessage,\n );\n review.assessment = completeAdvisoryAssessment(response);\n review.status = \"completed\";\n } catch (error) {\n if (\n error instanceof HostDiagnosticPersistenceError ||\n error instanceof TrialPersistenceError\n )\n throw error;\n review.status = \"failed\";\n } finally {\n await cleanupAdvisoryWorkspace(\n workspace,\n review.status === \"completed\",\n effects,\n );\n }\n}\n\n/** Advisory execution depends on candidate completion, independently of task grading. */\nexport async function runAdvisoryReview(\n input: AdvisoryInput,\n effects: AdvisoryEffects,\n): Promise<AdvisoryReview> {\n const review = defaultAdvisoryReview(input.host);\n if (!input.candidateCompleted || input.signal?.aborted) return review;\n await executeAdvisoryReview(input, effects, review);\n return review;\n}\n"]}
|
|
@@ -0,0 +1,292 @@
|
|
|
1
|
+
import { isAbsolute } from "node:path";
|
|
2
|
+
import { validQualifiedId } from "../value-guards.js";
|
|
3
|
+
import { validInlineFixture } from "../case-validation.js";
|
|
4
|
+
import { EvaluationConfigurationError, } from "./types.js";
|
|
5
|
+
import { prepareGeneratedFixture, } from "../fixtures/generated.js";
|
|
6
|
+
import { prepareGitHeadChecks, } from "../graders/git-head.js";
|
|
7
|
+
import { isOutputGrader, prepareOutputChecks, } from "../graders/output.js";
|
|
8
|
+
import { prepareSemanticChecks, } from "../graders/semantic.js";
|
|
9
|
+
import { prepareShellChecks, } from "../graders/shell.js";
|
|
10
|
+
import { hashJson } from "../identity.js";
|
|
11
|
+
import { fixtureParts } from "../fixtures/preparation.js";
|
|
12
|
+
import { prepareRepositoryFixture, } from "../fixtures/repository.js";
|
|
13
|
+
import { resolvedFixture } from "../resolved-case.js";
|
|
14
|
+
import { isOptionalNonblankString, isRecord } from "../value-guards.js";
|
|
15
|
+
function validateRootOptions(options) {
|
|
16
|
+
if (!isAbsolute(options.projectRoot) ||
|
|
17
|
+
!isAbsolute(options.resultsRoot) ||
|
|
18
|
+
(options.runStateRoot !== undefined && !isAbsolute(options.runStateRoot)))
|
|
19
|
+
throw new EvaluationConfigurationError("project, results, and run-state roots must be absolute");
|
|
20
|
+
}
|
|
21
|
+
function hostIdentityComplete(host) {
|
|
22
|
+
return Boolean(host.id && host.model && host.effort);
|
|
23
|
+
}
|
|
24
|
+
function validateEvaluationIdentity(options) {
|
|
25
|
+
if (!options.case.id ||
|
|
26
|
+
!options.case.prompt ||
|
|
27
|
+
!hostIdentityComplete(options.host))
|
|
28
|
+
throw new EvaluationConfigurationError("case and host identities must be nonempty");
|
|
29
|
+
}
|
|
30
|
+
function validateFollowUpPrompt(value) {
|
|
31
|
+
if (!isOptionalNonblankString(value))
|
|
32
|
+
throw new EvaluationConfigurationError("follow-up prompt must be nonempty");
|
|
33
|
+
}
|
|
34
|
+
function validateContinuationHost(options) {
|
|
35
|
+
if (options.case.followUpPrompt !== undefined &&
|
|
36
|
+
!options.host.hostCapabilities?.includes("sevro.host.continuation"))
|
|
37
|
+
throw new EvaluationConfigurationError("selected host does not support continuation");
|
|
38
|
+
}
|
|
39
|
+
function validateContinuationNegotiation(options) {
|
|
40
|
+
if (options.case.followUpPrompt !== undefined &&
|
|
41
|
+
options.extension &&
|
|
42
|
+
!options.extension.session.identity.capabilities.includes("sevro.host.continuation"))
|
|
43
|
+
throw new EvaluationConfigurationError("continuation capability was not negotiated");
|
|
44
|
+
}
|
|
45
|
+
function validateEvaluationInputs(options) {
|
|
46
|
+
validateRootOptions(options);
|
|
47
|
+
validateEvaluationIdentity(options);
|
|
48
|
+
validateFollowUpPrompt(options.case.followUpPrompt);
|
|
49
|
+
validateContinuationHost(options);
|
|
50
|
+
validateContinuationNegotiation(options);
|
|
51
|
+
}
|
|
52
|
+
function evaluationFixtureObject(value) {
|
|
53
|
+
if (!isRecord(value))
|
|
54
|
+
throw new EvaluationConfigurationError("invalid fixture declaration");
|
|
55
|
+
return value;
|
|
56
|
+
}
|
|
57
|
+
function generatedEvaluationFixture(fixture) {
|
|
58
|
+
try {
|
|
59
|
+
return prepareGeneratedFixture(fixture);
|
|
60
|
+
}
|
|
61
|
+
catch (cause) {
|
|
62
|
+
throw new EvaluationConfigurationError(cause instanceof Error ? cause.message : "invalid generated fixture", { cause });
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
function repositoryEvaluationFixture(fixture) {
|
|
66
|
+
try {
|
|
67
|
+
return prepareRepositoryFixture({ kind: "repository", ...fixture });
|
|
68
|
+
}
|
|
69
|
+
catch (cause) {
|
|
70
|
+
throw new EvaluationConfigurationError(cause instanceof Error ? cause.message : "invalid repository fixture", { cause });
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
function validateInlineEvaluationFixture(fixture) {
|
|
74
|
+
if (!validInlineFixture(fixture))
|
|
75
|
+
throw new EvaluationConfigurationError("fixture must declare inline files or a repository source");
|
|
76
|
+
}
|
|
77
|
+
function prepareEvaluationFixture(options) {
|
|
78
|
+
const fixture = evaluationFixtureObject(options.case.fixture);
|
|
79
|
+
if ("kind" in fixture)
|
|
80
|
+
return {
|
|
81
|
+
kind: "generated",
|
|
82
|
+
fixture: generatedEvaluationFixture(fixture),
|
|
83
|
+
};
|
|
84
|
+
if (Object.hasOwn(fixture, "sourceRef"))
|
|
85
|
+
return {
|
|
86
|
+
kind: "repository",
|
|
87
|
+
fixture: repositoryEvaluationFixture(fixture),
|
|
88
|
+
repository: null,
|
|
89
|
+
};
|
|
90
|
+
validateInlineEvaluationFixture(fixture);
|
|
91
|
+
return { kind: "inline", files: options.case.fixture.files };
|
|
92
|
+
}
|
|
93
|
+
function validateTrialInteger(value, message) {
|
|
94
|
+
if (!Number.isSafeInteger(value) || value < 1)
|
|
95
|
+
throw new EvaluationConfigurationError(message);
|
|
96
|
+
}
|
|
97
|
+
function validatePassThreshold(value) {
|
|
98
|
+
if (!Number.isFinite(value) || value <= 0 || value > 1)
|
|
99
|
+
throw new EvaluationConfigurationError("pass threshold must be greater than zero and at most one");
|
|
100
|
+
}
|
|
101
|
+
function validateRequiredEvidence(ids) {
|
|
102
|
+
if (new Set(ids).size !== ids.length ||
|
|
103
|
+
ids.some((id) => !validQualifiedId(id)))
|
|
104
|
+
throw new EvaluationConfigurationError("invalid required evidence IDs");
|
|
105
|
+
}
|
|
106
|
+
function prepareTrialParameters(options) {
|
|
107
|
+
validateTrialInteger(options.trialCount, "trial count must be a positive integer");
|
|
108
|
+
const jobs = options.jobs ?? 3;
|
|
109
|
+
validateTrialInteger(jobs, "jobs must be a positive integer");
|
|
110
|
+
validatePassThreshold(options.passThreshold);
|
|
111
|
+
validateRequiredEvidence(options.case.requiredEvidence);
|
|
112
|
+
return jobs;
|
|
113
|
+
}
|
|
114
|
+
function declaredCaseChecks(options) {
|
|
115
|
+
const allBuiltinDeclarations = options.case.checks.filter((check) => isOutputGrader(check.grader));
|
|
116
|
+
const allShellDeclarations = options.case.checks.filter((check) => check.grader === "sevro.shell");
|
|
117
|
+
const allGitHeadDeclarations = options.case.checks.filter((check) => check.grader === "sevro.git-head");
|
|
118
|
+
const allSemanticDeclarations = options.case.checks.filter((check) => check.grader === "sevro.semantic");
|
|
119
|
+
const extensionDeclarations = options.case.checks.filter((check) => !isOutputGrader(check.grader) &&
|
|
120
|
+
check.grader !== "sevro.shell" &&
|
|
121
|
+
check.grader !== "sevro.git-head" &&
|
|
122
|
+
check.grader !== "sevro.semantic");
|
|
123
|
+
const replacedBuiltinGraders = options.extension?.session.identity.replacedBuiltinGraders ?? [];
|
|
124
|
+
const replaced = new Set(replacedBuiltinGraders);
|
|
125
|
+
return {
|
|
126
|
+
allBuiltinDeclarations,
|
|
127
|
+
allShellDeclarations,
|
|
128
|
+
allGitHeadDeclarations,
|
|
129
|
+
allSemanticDeclarations,
|
|
130
|
+
extensionDeclarations,
|
|
131
|
+
replacedBuiltinGraders,
|
|
132
|
+
replaced,
|
|
133
|
+
};
|
|
134
|
+
}
|
|
135
|
+
function validateBuiltInReplacements(context) {
|
|
136
|
+
const { allBuiltinDeclarations, allShellDeclarations, allGitHeadDeclarations, allSemanticDeclarations, extensionDeclarations, replacedBuiltinGraders, replaced, } = context;
|
|
137
|
+
const declaredGraders = new Set([
|
|
138
|
+
...allBuiltinDeclarations,
|
|
139
|
+
...allShellDeclarations,
|
|
140
|
+
...allGitHeadDeclarations,
|
|
141
|
+
...allSemanticDeclarations,
|
|
142
|
+
].map((check) => check.grader));
|
|
143
|
+
if (replaced.size !== replacedBuiltinGraders.length ||
|
|
144
|
+
replacedBuiltinGraders.some((id) => !declaredGraders.has(id)))
|
|
145
|
+
throw new EvaluationConfigurationError("unknown or duplicate built-in grader replacement");
|
|
146
|
+
if (replaced.size && !extensionDeclarations.length)
|
|
147
|
+
throw new EvaluationConfigurationError("built-in grader replacement requires an extension check");
|
|
148
|
+
}
|
|
149
|
+
function activeCheckDeclarations(context) {
|
|
150
|
+
const { allBuiltinDeclarations, allShellDeclarations, allGitHeadDeclarations, allSemanticDeclarations, replaced, } = context;
|
|
151
|
+
const builtinDeclarations = allBuiltinDeclarations.filter((check) => !replaced.has(check.grader));
|
|
152
|
+
const shellDeclarations = allShellDeclarations.filter((check) => !replaced.has(check.grader));
|
|
153
|
+
const gitHeadDeclarations = allGitHeadDeclarations.filter((check) => !replaced.has(check.grader));
|
|
154
|
+
const semanticDeclarations = allSemanticDeclarations.filter((check) => !replaced.has(check.grader));
|
|
155
|
+
return {
|
|
156
|
+
builtinDeclarations,
|
|
157
|
+
shellDeclarations,
|
|
158
|
+
gitHeadDeclarations,
|
|
159
|
+
semanticDeclarations,
|
|
160
|
+
};
|
|
161
|
+
}
|
|
162
|
+
function validateSemanticRoute(options, checks) {
|
|
163
|
+
if (checks.length && !options.semanticHost)
|
|
164
|
+
throw new EvaluationConfigurationError("semantic checks require an explicit semantic host");
|
|
165
|
+
if (options.semanticHost && !hostIdentityComplete(options.semanticHost))
|
|
166
|
+
throw new EvaluationConfigurationError("semantic host identity is incomplete");
|
|
167
|
+
}
|
|
168
|
+
function validateAdvisoryGitFixture(source) {
|
|
169
|
+
if (source.kind === "inline")
|
|
170
|
+
throw new EvaluationConfigurationError("advisory review requires a Git fixture");
|
|
171
|
+
}
|
|
172
|
+
function validateAdvisoryExclusions(paths) {
|
|
173
|
+
try {
|
|
174
|
+
for (const path of paths) {
|
|
175
|
+
fixtureParts(path);
|
|
176
|
+
if (path.toLowerCase() === ".git" ||
|
|
177
|
+
path.toLowerCase().startsWith(".git/"))
|
|
178
|
+
throw new Error("repository metadata cannot be an advisory exclusion");
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
catch (cause) {
|
|
182
|
+
throw new EvaluationConfigurationError("invalid advisory exclusion path", {
|
|
183
|
+
cause,
|
|
184
|
+
});
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
function validateAdvisoryRoute(options, source) {
|
|
188
|
+
const host = options.advisoryHost;
|
|
189
|
+
if (!host) {
|
|
190
|
+
if (options.advisoryExcludedPaths?.length)
|
|
191
|
+
throw new EvaluationConfigurationError("advisory exclusions require an advisory host");
|
|
192
|
+
return;
|
|
193
|
+
}
|
|
194
|
+
validateAdvisoryGitFixture(source);
|
|
195
|
+
validateAdvisoryIdentity(host);
|
|
196
|
+
validateAdvisoryExclusions(options.advisoryExcludedPaths ?? []);
|
|
197
|
+
}
|
|
198
|
+
function validateAdvisoryIdentity(host) {
|
|
199
|
+
if (!hostIdentityComplete(host))
|
|
200
|
+
throw new EvaluationConfigurationError("advisory host identity is incomplete");
|
|
201
|
+
}
|
|
202
|
+
function validateShellRoute(options, checks) {
|
|
203
|
+
if (checks.length && !options.shellIsolation)
|
|
204
|
+
throw new EvaluationConfigurationError("shell checks require explicit protected source roots");
|
|
205
|
+
}
|
|
206
|
+
function validateGitHeadRoute(source, checks) {
|
|
207
|
+
if (checks.length && source.kind === "inline")
|
|
208
|
+
throw new EvaluationConfigurationError("Git HEAD checks require a Git fixture");
|
|
209
|
+
}
|
|
210
|
+
function validateCaseCheckIds(checks) {
|
|
211
|
+
if (new Set(checks.map((check) => check.id)).size !== checks.length)
|
|
212
|
+
throw new EvaluationConfigurationError("case check IDs must be unique");
|
|
213
|
+
}
|
|
214
|
+
function validateExtensionGraders(options, declarations) {
|
|
215
|
+
if (!declarations.length)
|
|
216
|
+
return;
|
|
217
|
+
const extension = options.extension;
|
|
218
|
+
if (!extension)
|
|
219
|
+
throw new EvaluationConfigurationError("case declares an unavailable extension grader");
|
|
220
|
+
if (declarations.some((check) => !extension.session.identity.graders.includes(check.grader)))
|
|
221
|
+
throw new EvaluationConfigurationError("case declares an unavailable extension grader");
|
|
222
|
+
}
|
|
223
|
+
function comparisonCase(caseData) {
|
|
224
|
+
return {
|
|
225
|
+
id: caseData.id,
|
|
226
|
+
prompt: caseData.prompt,
|
|
227
|
+
...(caseData.followUpPrompt !== undefined
|
|
228
|
+
? { followUpPrompt: caseData.followUpPrompt }
|
|
229
|
+
: {}),
|
|
230
|
+
fixture: caseData.fixture,
|
|
231
|
+
checks: caseData.checks,
|
|
232
|
+
requiredEvidence: caseData.requiredEvidence,
|
|
233
|
+
};
|
|
234
|
+
}
|
|
235
|
+
function validateResolvedExtensionCase(options) {
|
|
236
|
+
if (!options.extension)
|
|
237
|
+
return;
|
|
238
|
+
const resolved = options.extension.resolvedCase;
|
|
239
|
+
const comparable = comparisonCase({
|
|
240
|
+
...resolved,
|
|
241
|
+
fixture: resolvedFixture(resolved.fixture),
|
|
242
|
+
});
|
|
243
|
+
if (hashJson(comparable) !== hashJson(comparisonCase(options.case)))
|
|
244
|
+
throw new EvaluationConfigurationError("resolved extension case does not match the selected case");
|
|
245
|
+
}
|
|
246
|
+
function activePreparedChecks(checks, replaced, grader) {
|
|
247
|
+
return replaced.has(grader) ? [] : checks;
|
|
248
|
+
}
|
|
249
|
+
function validateInlinePaths(files) {
|
|
250
|
+
for (const path of Object.keys(files ?? {}))
|
|
251
|
+
fixtureParts(path);
|
|
252
|
+
}
|
|
253
|
+
function prepareBuiltInChecks(options, context) {
|
|
254
|
+
const { allBuiltinDeclarations, allShellDeclarations, allGitHeadDeclarations, allSemanticDeclarations, replaced, } = context;
|
|
255
|
+
try {
|
|
256
|
+
const prepared = prepareOutputChecks(allBuiltinDeclarations).filter((check) => !replaced.has(check.grader));
|
|
257
|
+
const preparedShell = activePreparedChecks(prepareShellChecks(allShellDeclarations), replaced, "sevro.shell");
|
|
258
|
+
const preparedGitHead = activePreparedChecks(prepareGitHeadChecks(allGitHeadDeclarations), replaced, "sevro.git-head");
|
|
259
|
+
const preparedSemantic = activePreparedChecks(prepareSemanticChecks(allSemanticDeclarations), replaced, "sevro.semantic");
|
|
260
|
+
validateInlinePaths(options.case.fixture.files);
|
|
261
|
+
return { prepared, preparedShell, preparedGitHead, preparedSemantic };
|
|
262
|
+
}
|
|
263
|
+
catch (cause) {
|
|
264
|
+
throw new EvaluationConfigurationError(cause instanceof Error ? cause.message : "invalid case configuration", { cause });
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
function prepareCheckPlan(options, source) {
|
|
268
|
+
const declarations = declaredCaseChecks(options);
|
|
269
|
+
validateBuiltInReplacements(declarations);
|
|
270
|
+
const active = activeCheckDeclarations(declarations);
|
|
271
|
+
validateSemanticRoute(options, active.semanticDeclarations);
|
|
272
|
+
validateAdvisoryRoute(options, source);
|
|
273
|
+
validateShellRoute(options, active.shellDeclarations);
|
|
274
|
+
validateGitHeadRoute(source, active.gitHeadDeclarations);
|
|
275
|
+
validateCaseCheckIds(options.case.checks);
|
|
276
|
+
validateExtensionGraders(options, declarations.extensionDeclarations);
|
|
277
|
+
validateResolvedExtensionCase(options);
|
|
278
|
+
return {
|
|
279
|
+
...active,
|
|
280
|
+
...prepareBuiltInChecks(options, declarations),
|
|
281
|
+
extensionDeclarations: declarations.extensionDeclarations,
|
|
282
|
+
replacedBuiltinGraders: declarations.replacedBuiltinGraders,
|
|
283
|
+
replaced: declarations.replaced,
|
|
284
|
+
};
|
|
285
|
+
}
|
|
286
|
+
export function prepareEvaluationChecks(options) {
|
|
287
|
+
validateEvaluationInputs(options);
|
|
288
|
+
const source = prepareEvaluationFixture(options);
|
|
289
|
+
const jobs = prepareTrialParameters(options);
|
|
290
|
+
return { source, jobs, checks: prepareCheckPlan(options, source) };
|
|
291
|
+
}
|
|
292
|
+
//# sourceMappingURL=check-plan.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"check-plan.js","sourceRoot":"","sources":["check-plan.ts"],"names":[],"mappings":"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","sourcesContent":["import { isAbsolute } from \"node:path\";\nimport { validQualifiedId } from \"../value-guards\";\nimport { validInlineFixture } from \"../case-validation\";\nimport {\n EvaluationConfigurationError,\n type EvaluationOptions,\n type HostAdapter,\n type ResolvedCase,\n} from \"./types\";\nimport {\n prepareGeneratedFixture,\n type GeneratedFixture,\n} from \"../fixtures/generated\";\nimport {\n prepareGitHeadChecks,\n type GitHeadCheckDeclaration,\n type PreparedGitHeadCheck,\n} from \"../graders/git-head\";\nimport {\n isOutputGrader,\n prepareOutputChecks,\n type OutputCheckDeclaration,\n type PreparedOutputCheck,\n} from \"../graders/output\";\nimport {\n prepareSemanticChecks,\n type SemanticCheckDeclaration,\n type PreparedSemanticCheck,\n} from \"../graders/semantic\";\nimport {\n prepareShellChecks,\n type ShellCheckDeclaration,\n type PreparedShellCheck,\n} from \"../graders/shell\";\nimport { hashJson } from \"../identity\";\nimport { fixtureParts } from \"../fixtures/preparation\";\nimport {\n prepareRepositoryFixture,\n type RepositoryFixture,\n} from \"../fixtures/repository\";\nimport { resolvedFixture } from \"../resolved-case\";\nimport { isOptionalNonblankString, isRecord } from \"../value-guards\";\nimport type { FixtureSource } from \"../fixtures/create\";\n\ninterface CaseCheckDeclarations {\n allBuiltinDeclarations: OutputCheckDeclaration[];\n allShellDeclarations: ShellCheckDeclaration[];\n allGitHeadDeclarations: GitHeadCheckDeclaration[];\n allSemanticDeclarations: SemanticCheckDeclaration[];\n extensionDeclarations: ResolvedCase[\"checks\"];\n replacedBuiltinGraders: string[];\n replaced: Set<string>;\n}\n\ninterface ActiveCheckDeclarations {\n readonly builtinDeclarations: OutputCheckDeclaration[];\n readonly shellDeclarations: ShellCheckDeclaration[];\n readonly gitHeadDeclarations: GitHeadCheckDeclaration[];\n readonly semanticDeclarations: SemanticCheckDeclaration[];\n}\n\ninterface BuiltInCheckPlan {\n readonly prepared: PreparedOutputCheck[];\n readonly preparedShell: PreparedShellCheck[];\n readonly preparedGitHead: PreparedGitHeadCheck[];\n readonly preparedSemantic: PreparedSemanticCheck[];\n}\n\nexport interface PreparedChecks\n extends ActiveCheckDeclarations, BuiltInCheckPlan {\n readonly extensionDeclarations: ResolvedCase[\"checks\"];\n readonly replacedBuiltinGraders: string[];\n readonly replaced: ReadonlySet<string>;\n}\n\nexport interface EvaluationCheckPlan {\n readonly source: FixtureSource<null>;\n readonly jobs: number;\n readonly checks: PreparedChecks;\n}\n\nfunction validateRootOptions(options: EvaluationOptions): void {\n if (\n !isAbsolute(options.projectRoot) ||\n !isAbsolute(options.resultsRoot) ||\n (options.runStateRoot !== undefined && !isAbsolute(options.runStateRoot))\n )\n throw new EvaluationConfigurationError(\n \"project, results, and run-state roots must be absolute\",\n );\n}\n\nfunction hostIdentityComplete(host: HostAdapter): boolean {\n return Boolean(host.id && host.model && host.effort);\n}\n\nfunction validateEvaluationIdentity(options: EvaluationOptions): void {\n if (\n !options.case.id ||\n !options.case.prompt ||\n !hostIdentityComplete(options.host)\n )\n throw new EvaluationConfigurationError(\n \"case and host identities must be nonempty\",\n );\n}\n\nfunction validateFollowUpPrompt(value: unknown): void {\n if (!isOptionalNonblankString(value))\n throw new EvaluationConfigurationError(\"follow-up prompt must be nonempty\");\n}\n\nfunction validateContinuationHost(options: EvaluationOptions): void {\n if (\n options.case.followUpPrompt !== undefined &&\n !options.host.hostCapabilities?.includes(\"sevro.host.continuation\")\n )\n throw new EvaluationConfigurationError(\n \"selected host does not support continuation\",\n );\n}\n\nfunction validateContinuationNegotiation(options: EvaluationOptions): void {\n if (\n options.case.followUpPrompt !== undefined &&\n options.extension &&\n !options.extension.session.identity.capabilities.includes(\n \"sevro.host.continuation\",\n )\n )\n throw new EvaluationConfigurationError(\n \"continuation capability was not negotiated\",\n );\n}\n\nfunction validateEvaluationInputs(options: EvaluationOptions): void {\n validateRootOptions(options);\n validateEvaluationIdentity(options);\n validateFollowUpPrompt(options.case.followUpPrompt);\n validateContinuationHost(options);\n validateContinuationNegotiation(options);\n}\n\nfunction evaluationFixtureObject(value: unknown): Record<string, unknown> {\n if (!isRecord(value))\n throw new EvaluationConfigurationError(\"invalid fixture declaration\");\n return value;\n}\n\nfunction generatedEvaluationFixture(\n fixture: Record<string, unknown>,\n): GeneratedFixture {\n try {\n return prepareGeneratedFixture(fixture);\n } catch (cause) {\n throw new EvaluationConfigurationError(\n cause instanceof Error ? cause.message : \"invalid generated fixture\",\n { cause },\n );\n }\n}\n\nfunction repositoryEvaluationFixture(\n fixture: Record<string, unknown>,\n): RepositoryFixture {\n try {\n return prepareRepositoryFixture({ kind: \"repository\", ...fixture });\n } catch (cause) {\n throw new EvaluationConfigurationError(\n cause instanceof Error ? cause.message : \"invalid repository fixture\",\n { cause },\n );\n }\n}\n\nfunction validateInlineEvaluationFixture(\n fixture: Record<string, unknown>,\n): void {\n if (!validInlineFixture(fixture))\n throw new EvaluationConfigurationError(\n \"fixture must declare inline files or a repository source\",\n );\n}\n\nfunction prepareEvaluationFixture(\n options: EvaluationOptions,\n): FixtureSource<null> {\n const fixture = evaluationFixtureObject(options.case.fixture);\n if (\"kind\" in fixture)\n return {\n kind: \"generated\",\n fixture: generatedEvaluationFixture(fixture),\n };\n if (Object.hasOwn(fixture, \"sourceRef\"))\n return {\n kind: \"repository\",\n fixture: repositoryEvaluationFixture(fixture),\n repository: null,\n };\n validateInlineEvaluationFixture(fixture);\n return { kind: \"inline\", files: options.case.fixture.files };\n}\n\nfunction validateTrialInteger(value: number, message: string): void {\n if (!Number.isSafeInteger(value) || value < 1)\n throw new EvaluationConfigurationError(message);\n}\n\nfunction validatePassThreshold(value: number): void {\n if (!Number.isFinite(value) || value <= 0 || value > 1)\n throw new EvaluationConfigurationError(\n \"pass threshold must be greater than zero and at most one\",\n );\n}\n\nfunction validateRequiredEvidence(ids: string[]): void {\n if (\n new Set(ids).size !== ids.length ||\n ids.some((id) => !validQualifiedId(id))\n )\n throw new EvaluationConfigurationError(\"invalid required evidence IDs\");\n}\n\nfunction prepareTrialParameters(options: EvaluationOptions): number {\n validateTrialInteger(\n options.trialCount,\n \"trial count must be a positive integer\",\n );\n const jobs = options.jobs ?? 3;\n validateTrialInteger(jobs, \"jobs must be a positive integer\");\n validatePassThreshold(options.passThreshold);\n validateRequiredEvidence(options.case.requiredEvidence);\n return jobs;\n}\n\nfunction declaredCaseChecks(options: EvaluationOptions): CaseCheckDeclarations {\n const allBuiltinDeclarations = options.case.checks.filter((check) =>\n isOutputGrader(check.grader),\n ) as OutputCheckDeclaration[];\n const allShellDeclarations = options.case.checks.filter(\n (check) => check.grader === \"sevro.shell\",\n ) as ShellCheckDeclaration[];\n const allGitHeadDeclarations = options.case.checks.filter(\n (check) => check.grader === \"sevro.git-head\",\n ) as GitHeadCheckDeclaration[];\n const allSemanticDeclarations = options.case.checks.filter(\n (check) => check.grader === \"sevro.semantic\",\n ) as SemanticCheckDeclaration[];\n const extensionDeclarations = options.case.checks.filter(\n (check) =>\n !isOutputGrader(check.grader) &&\n check.grader !== \"sevro.shell\" &&\n check.grader !== \"sevro.git-head\" &&\n check.grader !== \"sevro.semantic\",\n );\n const replacedBuiltinGraders =\n options.extension?.session.identity.replacedBuiltinGraders ?? [];\n const replaced = new Set(replacedBuiltinGraders);\n return {\n allBuiltinDeclarations,\n allShellDeclarations,\n allGitHeadDeclarations,\n allSemanticDeclarations,\n extensionDeclarations,\n replacedBuiltinGraders,\n replaced,\n };\n}\n\nfunction validateBuiltInReplacements(context: CaseCheckDeclarations): void {\n const {\n allBuiltinDeclarations,\n allShellDeclarations,\n allGitHeadDeclarations,\n allSemanticDeclarations,\n extensionDeclarations,\n replacedBuiltinGraders,\n replaced,\n } = context;\n const declaredGraders = new Set<string>(\n [\n ...allBuiltinDeclarations,\n ...allShellDeclarations,\n ...allGitHeadDeclarations,\n ...allSemanticDeclarations,\n ].map((check) => check.grader),\n );\n if (\n replaced.size !== replacedBuiltinGraders.length ||\n replacedBuiltinGraders.some((id) => !declaredGraders.has(id))\n )\n throw new EvaluationConfigurationError(\n \"unknown or duplicate built-in grader replacement\",\n );\n if (replaced.size && !extensionDeclarations.length)\n throw new EvaluationConfigurationError(\n \"built-in grader replacement requires an extension check\",\n );\n}\n\nfunction activeCheckDeclarations(\n context: CaseCheckDeclarations,\n): ActiveCheckDeclarations {\n const {\n allBuiltinDeclarations,\n allShellDeclarations,\n allGitHeadDeclarations,\n allSemanticDeclarations,\n replaced,\n } = context;\n const builtinDeclarations = allBuiltinDeclarations.filter(\n (check) => !replaced.has(check.grader),\n );\n const shellDeclarations = allShellDeclarations.filter(\n (check) => !replaced.has(check.grader),\n );\n const gitHeadDeclarations = allGitHeadDeclarations.filter(\n (check) => !replaced.has(check.grader),\n );\n const semanticDeclarations = allSemanticDeclarations.filter(\n (check) => !replaced.has(check.grader),\n );\n return {\n builtinDeclarations,\n shellDeclarations,\n gitHeadDeclarations,\n semanticDeclarations,\n };\n}\n\nfunction validateSemanticRoute(\n options: EvaluationOptions,\n checks: SemanticCheckDeclaration[],\n): void {\n if (checks.length && !options.semanticHost)\n throw new EvaluationConfigurationError(\n \"semantic checks require an explicit semantic host\",\n );\n if (options.semanticHost && !hostIdentityComplete(options.semanticHost))\n throw new EvaluationConfigurationError(\n \"semantic host identity is incomplete\",\n );\n}\n\nfunction validateAdvisoryGitFixture(source: FixtureSource<null>): void {\n if (source.kind === \"inline\")\n throw new EvaluationConfigurationError(\n \"advisory review requires a Git fixture\",\n );\n}\n\nfunction validateAdvisoryExclusions(paths: string[]): void {\n try {\n for (const path of paths) {\n fixtureParts(path);\n if (\n path.toLowerCase() === \".git\" ||\n path.toLowerCase().startsWith(\".git/\")\n )\n throw new Error(\"repository metadata cannot be an advisory exclusion\");\n }\n } catch (cause) {\n throw new EvaluationConfigurationError(\"invalid advisory exclusion path\", {\n cause,\n });\n }\n}\n\nfunction validateAdvisoryRoute(\n options: EvaluationOptions,\n source: FixtureSource<null>,\n): void {\n const host = options.advisoryHost;\n if (!host) {\n if (options.advisoryExcludedPaths?.length)\n throw new EvaluationConfigurationError(\n \"advisory exclusions require an advisory host\",\n );\n return;\n }\n validateAdvisoryGitFixture(source);\n validateAdvisoryIdentity(host);\n validateAdvisoryExclusions(options.advisoryExcludedPaths ?? []);\n}\n\nfunction validateAdvisoryIdentity(host: HostAdapter): void {\n if (!hostIdentityComplete(host))\n throw new EvaluationConfigurationError(\n \"advisory host identity is incomplete\",\n );\n}\n\nfunction validateShellRoute(\n options: EvaluationOptions,\n checks: ShellCheckDeclaration[],\n): void {\n if (checks.length && !options.shellIsolation)\n throw new EvaluationConfigurationError(\n \"shell checks require explicit protected source roots\",\n );\n}\n\nfunction validateGitHeadRoute(\n source: FixtureSource<null>,\n checks: GitHeadCheckDeclaration[],\n): void {\n if (checks.length && source.kind === \"inline\")\n throw new EvaluationConfigurationError(\n \"Git HEAD checks require a Git fixture\",\n );\n}\n\nfunction validateCaseCheckIds(checks: ResolvedCase[\"checks\"]): void {\n if (new Set(checks.map((check) => check.id)).size !== checks.length)\n throw new EvaluationConfigurationError(\"case check IDs must be unique\");\n}\n\nfunction validateExtensionGraders(\n options: EvaluationOptions,\n declarations: ResolvedCase[\"checks\"],\n): void {\n if (!declarations.length) return;\n const extension = options.extension;\n if (!extension)\n throw new EvaluationConfigurationError(\n \"case declares an unavailable extension grader\",\n );\n if (\n declarations.some(\n (check) => !extension.session.identity.graders.includes(check.grader),\n )\n )\n throw new EvaluationConfigurationError(\n \"case declares an unavailable extension grader\",\n );\n}\n\nfunction comparisonCase(caseData: ResolvedCase) {\n return {\n id: caseData.id,\n prompt: caseData.prompt,\n ...(caseData.followUpPrompt !== undefined\n ? { followUpPrompt: caseData.followUpPrompt }\n : {}),\n fixture: caseData.fixture,\n checks: caseData.checks,\n requiredEvidence: caseData.requiredEvidence,\n };\n}\n\nfunction validateResolvedExtensionCase(options: EvaluationOptions): void {\n if (!options.extension) return;\n const resolved = options.extension.resolvedCase;\n const comparable = comparisonCase({\n ...resolved,\n fixture: resolvedFixture(resolved.fixture),\n });\n if (hashJson(comparable) !== hashJson(comparisonCase(options.case)))\n throw new EvaluationConfigurationError(\n \"resolved extension case does not match the selected case\",\n );\n}\n\nfunction activePreparedChecks<T>(\n checks: T[],\n replaced: Set<string>,\n grader: string,\n): T[] {\n return replaced.has(grader) ? [] : checks;\n}\n\nfunction validateInlinePaths(files: ResolvedCase[\"fixture\"][\"files\"]): void {\n for (const path of Object.keys(files ?? {})) fixtureParts(path);\n}\n\nfunction prepareBuiltInChecks(\n options: EvaluationOptions,\n context: CaseCheckDeclarations,\n): BuiltInCheckPlan {\n const {\n allBuiltinDeclarations,\n allShellDeclarations,\n allGitHeadDeclarations,\n allSemanticDeclarations,\n replaced,\n } = context;\n try {\n const prepared = prepareOutputChecks(allBuiltinDeclarations).filter(\n (check) => !replaced.has(check.grader),\n );\n const preparedShell = activePreparedChecks(\n prepareShellChecks(allShellDeclarations),\n replaced,\n \"sevro.shell\",\n );\n const preparedGitHead = activePreparedChecks(\n prepareGitHeadChecks(allGitHeadDeclarations),\n replaced,\n \"sevro.git-head\",\n );\n const preparedSemantic = activePreparedChecks(\n prepareSemanticChecks(allSemanticDeclarations),\n replaced,\n \"sevro.semantic\",\n );\n validateInlinePaths(options.case.fixture.files);\n return { prepared, preparedShell, preparedGitHead, preparedSemantic };\n } catch (cause) {\n throw new EvaluationConfigurationError(\n cause instanceof Error ? cause.message : \"invalid case configuration\",\n { cause },\n );\n }\n}\n\nfunction prepareCheckPlan(\n options: EvaluationOptions,\n source: FixtureSource<null>,\n): PreparedChecks {\n const declarations = declaredCaseChecks(options);\n validateBuiltInReplacements(declarations);\n const active = activeCheckDeclarations(declarations);\n validateSemanticRoute(options, active.semanticDeclarations);\n validateAdvisoryRoute(options, source);\n validateShellRoute(options, active.shellDeclarations);\n validateGitHeadRoute(source, active.gitHeadDeclarations);\n validateCaseCheckIds(options.case.checks);\n validateExtensionGraders(options, declarations.extensionDeclarations);\n validateResolvedExtensionCase(options);\n return {\n ...active,\n ...prepareBuiltInChecks(options, declarations),\n extensionDeclarations: declarations.extensionDeclarations,\n replacedBuiltinGraders: declarations.replacedBuiltinGraders,\n replaced: declarations.replaced,\n };\n}\n\nexport function prepareEvaluationChecks(\n options: EvaluationOptions,\n): EvaluationCheckPlan {\n validateEvaluationInputs(options);\n const source = prepareEvaluationFixture(options);\n const jobs = prepareTrialParameters(options);\n return { source, jobs, checks: prepareCheckPlan(options, source) };\n}\n"]}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { checkpointRunOwner } from "../run-owner.js";
|
|
2
|
+
import { summarizeAssessments } from "../results.js";
|
|
3
|
+
/** Registers retained trials before checkpointing; owns their final ordering. */
|
|
4
|
+
export class ResultCollector {
|
|
5
|
+
owner;
|
|
6
|
+
summaries = [];
|
|
7
|
+
evidence = [];
|
|
8
|
+
diagnostics = [];
|
|
9
|
+
constructor(owner) {
|
|
10
|
+
this.owner = owner;
|
|
11
|
+
}
|
|
12
|
+
complete(record) {
|
|
13
|
+
this.summaries.push(record.summary);
|
|
14
|
+
this.summaries.sort((left, right) => left.trial - right.trial);
|
|
15
|
+
this.evidence.push(record.evidence);
|
|
16
|
+
this.evidence.sort((left, right) => left.trial - right.trial);
|
|
17
|
+
if (record.diagnostic)
|
|
18
|
+
this.diagnostics.push({
|
|
19
|
+
trial: record.summary.trial,
|
|
20
|
+
diagnostic: record.diagnostic,
|
|
21
|
+
});
|
|
22
|
+
this.checkpoint("active");
|
|
23
|
+
}
|
|
24
|
+
snapshot(input) {
|
|
25
|
+
const assessment = !this.summaries.length && input.cancelled
|
|
26
|
+
? {
|
|
27
|
+
execution: { status: "cancelled" },
|
|
28
|
+
grading: { status: "not_requested" },
|
|
29
|
+
task: { verdict: "not_assessed" },
|
|
30
|
+
}
|
|
31
|
+
: summarizeAssessments(this.summaries, input.passThreshold);
|
|
32
|
+
const diagnostic = this.diagnostics.sort((left, right) => left.trial - right.trial)[0]?.diagnostic;
|
|
33
|
+
return {
|
|
34
|
+
caseSummary: {
|
|
35
|
+
caseId: input.caseId,
|
|
36
|
+
...assessment,
|
|
37
|
+
trials: this.summaries,
|
|
38
|
+
},
|
|
39
|
+
trials: this.evidence,
|
|
40
|
+
diagnostic,
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
checkpoint(status) {
|
|
44
|
+
checkpointRunOwner(this.owner, this.checkpointTrials(), status);
|
|
45
|
+
}
|
|
46
|
+
diagnoseFailure() {
|
|
47
|
+
try {
|
|
48
|
+
checkpointRunOwner(this.owner, this.checkpointTrials(), "diagnostic");
|
|
49
|
+
}
|
|
50
|
+
catch {
|
|
51
|
+
/* Preserve the original failure and retained artifacts. */
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
checkpointTrials() {
|
|
55
|
+
return this.summaries.map((trial) => ({
|
|
56
|
+
trial: trial.trial,
|
|
57
|
+
artifactPath: trial.artifactPath,
|
|
58
|
+
}));
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=collection.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"collection.js","sourceRoot":"","sources":["collection.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAiB,wBAAqB;AACjE,OAAO,EAAE,oBAAoB,EAAmB,sBAAmB;AAmBnE,iFAAiF;AACjF,MAAM,OAAO,eAAe;IAMG;IALZ,SAAS,GAAmB,EAAE,CAAC;IAC/B,QAAQ,GAAoB,EAAE,CAAC;IAC/B,WAAW,GAC1B,EAAE,CAAC;IAEL,YAA6B,KAAe;QAAf,UAAK,GAAL,KAAK,CAAU;IAAG,CAAC;IAEhD,QAAQ,CAAC,MAAsB;QAC7B,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACpC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC;QAC/D,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QACpC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC;QAC9D,IAAI,MAAM,CAAC,UAAU;YACnB,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;gBACpB,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC,KAAK;gBAC3B,UAAU,EAAE,MAAM,CAAC,UAAU;aAC9B,CAAC,CAAC;QACL,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;IAC5B,CAAC;IAED,QAAQ,CAAC,KAIR;QACC,MAAM,UAAU,GACd,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,IAAI,KAAK,CAAC,SAAS;YACvC,CAAC,CAAC;gBACE,SAAS,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE;gBAClC,OAAO,EAAE,EAAE,MAAM,EAAE,eAAe,EAAE;gBACpC,IAAI,EAAE,EAAE,OAAO,EAAE,cAAc,EAAE;aAClC;YACH,CAAC,CAAC,oBAAoB,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,aAAa,CAAC,CAAC;QAChE,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CACtC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAC1C,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC;QACjB,OAAO;YACL,WAAW,EAAE;gBACX,MAAM,EAAE,KAAK,CAAC,MAAM;gBACpB,GAAG,UAAU;gBACb,MAAM,EAAE,IAAI,CAAC,SAAS;aACvB;YACD,MAAM,EAAE,IAAI,CAAC,QAAQ;YACrB,UAAU;SACX,CAAC;IACJ,CAAC;IAED,UAAU,CAAC,MAA6C;QACtD,kBAAkB,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,gBAAgB,EAAE,EAAE,MAAM,CAAC,CAAC;IAClE,CAAC;IAED,eAAe;QACb,IAAI,CAAC;YACH,kBAAkB,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,gBAAgB,EAAE,EAAE,YAAY,CAAC,CAAC;QACxE,CAAC;QAAC,MAAM,CAAC;YACP,2DAA2D;QAC7D,CAAC;IACH,CAAC;IAEO,gBAAgB;QACtB,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YACpC,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,YAAY,EAAE,KAAK,CAAC,YAAY;SACjC,CAAC,CAAC,CAAC;IACN,CAAC;CACF","sourcesContent":["import { checkpointRunOwner, type RunOwner } from \"../run-owner\";\nimport { summarizeAssessments, type Assessment } from \"../results\";\nimport type { Diagnostic } from \"../contract-types\";\nimport type { RunEvidenceDataTrialEvidence } from \"../schema-types\";\nimport type { CaseSummary, TrialSummary } from \"./types\";\n\ntype TrialEvidence = RunEvidenceDataTrialEvidence;\n\nexport interface CompletedTrial {\n readonly summary: TrialSummary;\n readonly evidence: TrialEvidence;\n readonly diagnostic?: Diagnostic;\n}\n\nexport interface CollectedResults {\n readonly caseSummary: CaseSummary;\n readonly trials: readonly TrialEvidence[];\n readonly diagnostic: Diagnostic | undefined;\n}\n\n/** Registers retained trials before checkpointing; owns their final ordering. */\nexport class ResultCollector {\n private readonly summaries: TrialSummary[] = [];\n private readonly evidence: TrialEvidence[] = [];\n private readonly diagnostics: { trial: number; diagnostic: Diagnostic }[] =\n [];\n\n constructor(private readonly owner: RunOwner) {}\n\n complete(record: CompletedTrial): void {\n this.summaries.push(record.summary);\n this.summaries.sort((left, right) => left.trial - right.trial);\n this.evidence.push(record.evidence);\n this.evidence.sort((left, right) => left.trial - right.trial);\n if (record.diagnostic)\n this.diagnostics.push({\n trial: record.summary.trial,\n diagnostic: record.diagnostic,\n });\n this.checkpoint(\"active\");\n }\n\n snapshot(input: {\n caseId: string;\n passThreshold: number;\n cancelled: boolean;\n }): CollectedResults {\n const assessment: Assessment =\n !this.summaries.length && input.cancelled\n ? {\n execution: { status: \"cancelled\" },\n grading: { status: \"not_requested\" },\n task: { verdict: \"not_assessed\" },\n }\n : summarizeAssessments(this.summaries, input.passThreshold);\n const diagnostic = this.diagnostics.sort(\n (left, right) => left.trial - right.trial,\n )[0]?.diagnostic;\n return {\n caseSummary: {\n caseId: input.caseId,\n ...assessment,\n trials: this.summaries,\n },\n trials: this.evidence,\n diagnostic,\n };\n }\n\n checkpoint(status: \"active\" | \"complete\" | \"interrupted\"): void {\n checkpointRunOwner(this.owner, this.checkpointTrials(), status);\n }\n\n diagnoseFailure(): void {\n try {\n checkpointRunOwner(this.owner, this.checkpointTrials(), \"diagnostic\");\n } catch {\n /* Preserve the original failure and retained artifacts. */\n }\n }\n\n private checkpointTrials() {\n return this.summaries.map((trial) => ({\n trial: trial.trial,\n artifactPath: trial.artifactPath,\n }));\n }\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context.js","sourceRoot":"","sources":["context.ts"],"names":[],"mappings":"","sourcesContent":["import type { ResultCollector } from \"./collection\";\nimport type { PreparedEvaluation } from \"./plan\";\nimport type { PreparationArtifactReference, RunResources } from \"./resources\";\n\nexport interface EvaluationContext {\n readonly prepared: PreparedEvaluation;\n readonly resources: RunResources;\n readonly results: ResultCollector;\n readonly preparationArtifacts: readonly PreparationArtifactReference[];\n}\n"]}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { hostArtifacts } from "../evidence/host-results.js";
|
|
2
|
+
import { runtimeSeedSources } from "../runtime/config.js";
|
|
3
|
+
export function scopedHostArtifacts(response, prefix, artifacts, checks, reservedId) {
|
|
4
|
+
return hostArtifacts({
|
|
5
|
+
...response,
|
|
6
|
+
artifacts: response.artifacts?.map((item) => ({
|
|
7
|
+
...item,
|
|
8
|
+
id: `${prefix}${item.id}`,
|
|
9
|
+
})),
|
|
10
|
+
}, new Set([
|
|
11
|
+
...artifacts.map((item) => item.id),
|
|
12
|
+
...checks.map((item) => item.id),
|
|
13
|
+
reservedId,
|
|
14
|
+
]));
|
|
15
|
+
}
|
|
16
|
+
export function gradingRuntimePolicy(policy, responseOnly = false) {
|
|
17
|
+
if (!policy)
|
|
18
|
+
return undefined;
|
|
19
|
+
return {
|
|
20
|
+
...policy,
|
|
21
|
+
hooks: undefined,
|
|
22
|
+
seedReadDenyRoots: runtimeSeedSources(policy),
|
|
23
|
+
seeds: responseOnly
|
|
24
|
+
? (policy.seeds ?? []).filter((seed) => seed.roles?.includes("semantic"))
|
|
25
|
+
: policy.seeds,
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=grading-host.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"grading-host.js","sourceRoot":"","sources":["grading-host.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,oCAAiC;AAEzD,OAAO,EAAE,kBAAkB,EAAsB,6BAA0B;AAC3E,MAAM,UAAU,mBAAmB,CACjC,QAAoB,EACpB,MAAc,EACd,SAAoC,EACpC,MAAiC,EACjC,UAAkB;IAElB,OAAO,aAAa,CAClB;QACE,GAAG,QAAQ;QACX,SAAS,EAAE,QAAQ,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YAC5C,GAAG,IAAI;YACP,EAAE,EAAE,GAAG,MAAM,GAAG,IAAI,CAAC,EAAE,EAAE;SAC1B,CAAC,CAAC;KACJ,EACD,IAAI,GAAG,CAAC;QACN,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QACnC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QAChC,UAAU;KACX,CAAC,CACH,CAAC;AACJ,CAAC;AACD,MAAM,UAAU,oBAAoB,CAClC,MAAiC,EACjC,YAAY,GAAG,KAAK;IAEpB,IAAI,CAAC,MAAM;QAAE,OAAO,SAAS,CAAC;IAC9B,OAAO;QACL,GAAG,MAAM;QACT,KAAK,EAAE,SAAS;QAChB,iBAAiB,EAAE,kBAAkB,CAAC,MAAM,CAAC;QAC7C,KAAK,EAAE,YAAY;YACjB,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,QAAQ,CAAC,UAAU,CAAC,CAAC;YACzE,CAAC,CAAC,MAAM,CAAC,KAAK;KACjB,CAAC;AACJ,CAAC","sourcesContent":["import { hostArtifacts } from \"../evidence/host-results\";\nimport type { HostResult } from \"./types\";\nimport { runtimeSeedSources, type RuntimePolicy } from \"../runtime/config\";\nexport function scopedHostArtifacts(\n response: HostResult,\n prefix: string,\n artifacts: readonly { id: string }[],\n checks: readonly { id: string }[],\n reservedId: string,\n) {\n return hostArtifacts(\n {\n ...response,\n artifacts: response.artifacts?.map((item) => ({\n ...item,\n id: `${prefix}${item.id}`,\n })),\n },\n new Set([\n ...artifacts.map((item) => item.id),\n ...checks.map((item) => item.id),\n reservedId,\n ]),\n );\n}\nexport function gradingRuntimePolicy(\n policy: RuntimePolicy | undefined,\n responseOnly = false,\n) {\n if (!policy) return undefined;\n return {\n ...policy,\n hooks: undefined,\n seedReadDenyRoots: runtimeSeedSources(policy),\n seeds: responseOnly\n ? (policy.seeds ?? []).filter((seed) => seed.roles?.includes(\"semantic\"))\n : policy.seeds,\n };\n}\n"]}
|