@prismatic-io/lux 0.0.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/LICENSE +21 -0
- package/lib/answerers/claude-code/index.d.ts +17 -0
- package/lib/answerers/claude-code/index.d.ts.map +1 -0
- package/lib/answerers/claude-code/index.js +280 -0
- package/lib/answerers/claude-code/index.js.map +1 -0
- package/lib/answerers/persona/index.d.ts +40 -0
- package/lib/answerers/persona/index.d.ts.map +1 -0
- package/lib/answerers/persona/index.js +265 -0
- package/lib/answerers/persona/index.js.map +1 -0
- package/lib/answerers/scripted/index.d.ts +8 -0
- package/lib/answerers/scripted/index.d.ts.map +1 -0
- package/lib/answerers/scripted/index.js +163 -0
- package/lib/answerers/scripted/index.js.map +1 -0
- package/lib/answerers/shared.d.ts +13 -0
- package/lib/answerers/shared.d.ts.map +1 -0
- package/lib/answerers/shared.js +17 -0
- package/lib/answerers/shared.js.map +1 -0
- package/lib/answerers/terminal/index.d.ts +9 -0
- package/lib/answerers/terminal/index.d.ts.map +1 -0
- package/lib/answerers/terminal/index.js +97 -0
- package/lib/answerers/terminal/index.js.map +1 -0
- package/lib/assertions/core/command-exits-zero.d.ts +21 -0
- package/lib/assertions/core/command-exits-zero.d.ts.map +1 -0
- package/lib/assertions/core/command-exits-zero.js +87 -0
- package/lib/assertions/core/command-exits-zero.js.map +1 -0
- package/lib/assertions/core/event-checks.d.ts +57 -0
- package/lib/assertions/core/event-checks.d.ts.map +1 -0
- package/lib/assertions/core/event-checks.js +123 -0
- package/lib/assertions/core/event-checks.js.map +1 -0
- package/lib/assertions/core/file-checks.d.ts +103 -0
- package/lib/assertions/core/file-checks.d.ts.map +1 -0
- package/lib/assertions/core/file-checks.js +288 -0
- package/lib/assertions/core/file-checks.js.map +1 -0
- package/lib/assertions/core/helpers.d.ts +66 -0
- package/lib/assertions/core/helpers.d.ts.map +1 -0
- package/lib/assertions/core/helpers.js +170 -0
- package/lib/assertions/core/helpers.js.map +1 -0
- package/lib/assertions/core/index.d.ts +15 -0
- package/lib/assertions/core/index.d.ts.map +1 -0
- package/lib/assertions/core/index.js +56 -0
- package/lib/assertions/core/index.js.map +1 -0
- package/lib/assertions/core/json-pointer-equals.d.ts +19 -0
- package/lib/assertions/core/json-pointer-equals.d.ts.map +1 -0
- package/lib/assertions/core/json-pointer-equals.js +71 -0
- package/lib/assertions/core/json-pointer-equals.js.map +1 -0
- package/lib/assertions/core/output-checks.d.ts +46 -0
- package/lib/assertions/core/output-checks.d.ts.map +1 -0
- package/lib/assertions/core/output-checks.js +121 -0
- package/lib/assertions/core/output-checks.js.map +1 -0
- package/lib/assertions/core/predicate.d.ts +14 -0
- package/lib/assertions/core/predicate.d.ts.map +1 -0
- package/lib/assertions/core/predicate.js +55 -0
- package/lib/assertions/core/predicate.js.map +1 -0
- package/lib/assertions/core/resource-checks.d.ts +71 -0
- package/lib/assertions/core/resource-checks.d.ts.map +1 -0
- package/lib/assertions/core/resource-checks.js +159 -0
- package/lib/assertions/core/resource-checks.js.map +1 -0
- package/lib/assertions/core/safe-regex.d.ts +23 -0
- package/lib/assertions/core/safe-regex.d.ts.map +1 -0
- package/lib/assertions/core/safe-regex.js +102 -0
- package/lib/assertions/core/safe-regex.js.map +1 -0
- package/lib/assertions/core/tool-called-with.d.ts +21 -0
- package/lib/assertions/core/tool-called-with.d.ts.map +1 -0
- package/lib/assertions/core/tool-called-with.js +69 -0
- package/lib/assertions/core/tool-called-with.js.map +1 -0
- package/lib/assertions/core/tool-calls.d.ts +22 -0
- package/lib/assertions/core/tool-calls.d.ts.map +1 -0
- package/lib/assertions/core/tool-calls.js +17 -0
- package/lib/assertions/core/tool-calls.js.map +1 -0
- package/lib/assertions/core/tool-invocation.d.ts +36 -0
- package/lib/assertions/core/tool-invocation.d.ts.map +1 -0
- package/lib/assertions/core/tool-invocation.js +170 -0
- package/lib/assertions/core/tool-invocation.js.map +1 -0
- package/lib/assertions/core/tool-result-checks.d.ts +59 -0
- package/lib/assertions/core/tool-result-checks.d.ts.map +1 -0
- package/lib/assertions/core/tool-result-checks.js +193 -0
- package/lib/assertions/core/tool-result-checks.js.map +1 -0
- package/lib/assertions/mcp/discovery-checks.d.ts +36 -0
- package/lib/assertions/mcp/discovery-checks.d.ts.map +1 -0
- package/lib/assertions/mcp/discovery-checks.js +122 -0
- package/lib/assertions/mcp/discovery-checks.js.map +1 -0
- package/lib/assertions/mcp/index.d.ts +10 -0
- package/lib/assertions/mcp/index.d.ts.map +1 -0
- package/lib/assertions/mcp/index.js +25 -0
- package/lib/assertions/mcp/index.js.map +1 -0
- package/lib/assertions/rubric/index.d.ts +104 -0
- package/lib/assertions/rubric/index.d.ts.map +1 -0
- package/lib/assertions/rubric/index.js +191 -0
- package/lib/assertions/rubric/index.js.map +1 -0
- package/lib/assertions/rubric/internal.d.ts +14 -0
- package/lib/assertions/rubric/internal.d.ts.map +1 -0
- package/lib/assertions/rubric/internal.js +335 -0
- package/lib/assertions/rubric/internal.js.map +1 -0
- package/lib/authoring.d.ts +3 -0
- package/lib/authoring.d.ts.map +1 -0
- package/lib/authoring.js +3 -0
- package/lib/authoring.js.map +1 -0
- package/lib/cli/bin.d.ts +3 -0
- package/lib/cli/bin.d.ts.map +1 -0
- package/lib/cli/bin.js +15 -0
- package/lib/cli/bin.js.map +1 -0
- package/lib/cli/command-runtime.d.ts +5 -0
- package/lib/cli/command-runtime.d.ts.map +1 -0
- package/lib/cli/command-runtime.js +30 -0
- package/lib/cli/command-runtime.js.map +1 -0
- package/lib/cli/init.d.ts +21 -0
- package/lib/cli/init.d.ts.map +1 -0
- package/lib/cli/init.js +340 -0
- package/lib/cli/init.js.map +1 -0
- package/lib/cli/program.d.ts +22 -0
- package/lib/cli/program.d.ts.map +1 -0
- package/lib/cli/program.js +757 -0
- package/lib/cli/program.js.map +1 -0
- package/lib/cli/render/format.d.ts +14 -0
- package/lib/cli/render/format.d.ts.map +1 -0
- package/lib/cli/render/format.js +71 -0
- package/lib/cli/render/format.js.map +1 -0
- package/lib/cli/render/reporter.d.ts +73 -0
- package/lib/cli/render/reporter.d.ts.map +1 -0
- package/lib/cli/render/reporter.js +519 -0
- package/lib/cli/render/reporter.js.map +1 -0
- package/lib/cli/render/tty.d.ts +77 -0
- package/lib/cli/render/tty.d.ts.map +1 -0
- package/lib/cli/render/tty.js +283 -0
- package/lib/cli/render/tty.js.map +1 -0
- package/lib/cli/run-options.d.ts +27 -0
- package/lib/cli/run-options.d.ts.map +1 -0
- package/lib/cli/run-options.js +58 -0
- package/lib/cli/run-options.js.map +1 -0
- package/lib/cli/skills.d.ts +38 -0
- package/lib/cli/skills.d.ts.map +1 -0
- package/lib/cli/skills.js +84 -0
- package/lib/cli/skills.js.map +1 -0
- package/lib/core/annotation.d.ts +56 -0
- package/lib/core/annotation.d.ts.map +1 -0
- package/lib/core/annotation.js +92 -0
- package/lib/core/annotation.js.map +1 -0
- package/lib/core/answerer.d.ts +68 -0
- package/lib/core/answerer.d.ts.map +1 -0
- package/lib/core/answerer.js +17 -0
- package/lib/core/answerer.js.map +1 -0
- package/lib/core/artifact-evidence.d.ts +50 -0
- package/lib/core/artifact-evidence.d.ts.map +1 -0
- package/lib/core/artifact-evidence.js +185 -0
- package/lib/core/artifact-evidence.js.map +1 -0
- package/lib/core/artifact-snapshot.d.ts +37 -0
- package/lib/core/artifact-snapshot.d.ts.map +1 -0
- package/lib/core/artifact-snapshot.js +339 -0
- package/lib/core/artifact-snapshot.js.map +1 -0
- package/lib/core/assertion.d.ts +129 -0
- package/lib/core/assertion.d.ts.map +1 -0
- package/lib/core/assertion.js +75 -0
- package/lib/core/assertion.js.map +1 -0
- package/lib/core/case.d.ts +79 -0
- package/lib/core/case.d.ts.map +1 -0
- package/lib/core/case.js +90 -0
- package/lib/core/case.js.map +1 -0
- package/lib/core/conversation-turn.d.ts +23 -0
- package/lib/core/conversation-turn.d.ts.map +1 -0
- package/lib/core/conversation-turn.js +31 -0
- package/lib/core/conversation-turn.js.map +1 -0
- package/lib/core/driver.d.ts +64 -0
- package/lib/core/driver.d.ts.map +1 -0
- package/lib/core/driver.js +18 -0
- package/lib/core/driver.js.map +1 -0
- package/lib/core/emitter.d.ts +20 -0
- package/lib/core/emitter.d.ts.map +1 -0
- package/lib/core/emitter.js +34 -0
- package/lib/core/emitter.js.map +1 -0
- package/lib/core/events.d.ts +202 -0
- package/lib/core/events.d.ts.map +1 -0
- package/lib/core/events.js +107 -0
- package/lib/core/events.js.map +1 -0
- package/lib/core/exec.d.ts +82 -0
- package/lib/core/exec.d.ts.map +1 -0
- package/lib/core/exec.js +168 -0
- package/lib/core/exec.js.map +1 -0
- package/lib/core/experiment.d.ts +285 -0
- package/lib/core/experiment.d.ts.map +1 -0
- package/lib/core/experiment.js +389 -0
- package/lib/core/experiment.js.map +1 -0
- package/lib/core/glob.d.ts +3 -0
- package/lib/core/glob.d.ts.map +1 -0
- package/lib/core/glob.js +32 -0
- package/lib/core/glob.js.map +1 -0
- package/lib/core/hash.d.ts +8 -0
- package/lib/core/hash.d.ts.map +1 -0
- package/lib/core/hash.js +214 -0
- package/lib/core/hash.js.map +1 -0
- package/lib/core/index.d.ts +29 -0
- package/lib/core/index.d.ts.map +1 -0
- package/lib/core/index.js +29 -0
- package/lib/core/index.js.map +1 -0
- package/lib/core/lifecycle-fixtures.d.ts +20 -0
- package/lib/core/lifecycle-fixtures.d.ts.map +1 -0
- package/lib/core/lifecycle-fixtures.js +109 -0
- package/lib/core/lifecycle-fixtures.js.map +1 -0
- package/lib/core/lifecycle-hooks.d.ts +52 -0
- package/lib/core/lifecycle-hooks.d.ts.map +1 -0
- package/lib/core/lifecycle-hooks.js +42 -0
- package/lib/core/lifecycle-hooks.js.map +1 -0
- package/lib/core/mcp-events.d.ts +44 -0
- package/lib/core/mcp-events.d.ts.map +1 -0
- package/lib/core/mcp-events.js +23 -0
- package/lib/core/mcp-events.js.map +1 -0
- package/lib/core/model-cli.d.ts +57 -0
- package/lib/core/model-cli.d.ts.map +1 -0
- package/lib/core/model-cli.js +237 -0
- package/lib/core/model-cli.js.map +1 -0
- package/lib/core/observer.d.ts +31 -0
- package/lib/core/observer.d.ts.map +1 -0
- package/lib/core/observer.js +25 -0
- package/lib/core/observer.js.map +1 -0
- package/lib/core/platform-process.d.ts +33 -0
- package/lib/core/platform-process.d.ts.map +1 -0
- package/lib/core/platform-process.js +214 -0
- package/lib/core/platform-process.js.map +1 -0
- package/lib/core/registry.d.ts +22 -0
- package/lib/core/registry.d.ts.map +1 -0
- package/lib/core/registry.js +45 -0
- package/lib/core/registry.js.map +1 -0
- package/lib/core/rubric.d.ts +18 -0
- package/lib/core/rubric.d.ts.map +1 -0
- package/lib/core/rubric.js +49 -0
- package/lib/core/rubric.js.map +1 -0
- package/lib/core/run.d.ts +419 -0
- package/lib/core/run.d.ts.map +1 -0
- package/lib/core/run.js +126 -0
- package/lib/core/run.js.map +1 -0
- package/lib/core/statistics.d.ts +39 -0
- package/lib/core/statistics.d.ts.map +1 -0
- package/lib/core/statistics.js +163 -0
- package/lib/core/statistics.js.map +1 -0
- package/lib/core/subject.d.ts +4 -0
- package/lib/core/subject.d.ts.map +1 -0
- package/lib/core/subject.js +46 -0
- package/lib/core/subject.js.map +1 -0
- package/lib/core/tool-events.d.ts +69 -0
- package/lib/core/tool-events.d.ts.map +1 -0
- package/lib/core/tool-events.js +242 -0
- package/lib/core/tool-events.js.map +1 -0
- package/lib/core/usage.d.ts +78 -0
- package/lib/core/usage.d.ts.map +1 -0
- package/lib/core/usage.js +104 -0
- package/lib/core/usage.js.map +1 -0
- package/lib/core/wire.d.ts +83 -0
- package/lib/core/wire.d.ts.map +1 -0
- package/lib/core/wire.js +101 -0
- package/lib/core/wire.js.map +1 -0
- package/lib/core/zod.d.ts +10 -0
- package/lib/core/zod.d.ts.map +1 -0
- package/lib/core/zod.js +18 -0
- package/lib/core/zod.js.map +1 -0
- package/lib/drivers/claude-code/index.d.ts +55 -0
- package/lib/drivers/claude-code/index.d.ts.map +1 -0
- package/lib/drivers/claude-code/index.js +779 -0
- package/lib/drivers/claude-code/index.js.map +1 -0
- package/lib/drivers/claude-code/parse-events.d.ts +46 -0
- package/lib/drivers/claude-code/parse-events.d.ts.map +1 -0
- package/lib/drivers/claude-code/parse-events.js +387 -0
- package/lib/drivers/claude-code/parse-events.js.map +1 -0
- package/lib/drivers/codex/app-events.d.ts +16 -0
- package/lib/drivers/codex/app-events.d.ts.map +1 -0
- package/lib/drivers/codex/app-events.js +184 -0
- package/lib/drivers/codex/app-events.js.map +1 -0
- package/lib/drivers/codex/config.d.ts +55 -0
- package/lib/drivers/codex/config.d.ts.map +1 -0
- package/lib/drivers/codex/config.js +125 -0
- package/lib/drivers/codex/config.js.map +1 -0
- package/lib/drivers/codex/index.d.ts +8 -0
- package/lib/drivers/codex/index.d.ts.map +1 -0
- package/lib/drivers/codex/index.js +904 -0
- package/lib/drivers/codex/index.js.map +1 -0
- package/lib/drivers/mcp/index.d.ts +52 -0
- package/lib/drivers/mcp/index.d.ts.map +1 -0
- package/lib/drivers/mcp/index.js +282 -0
- package/lib/drivers/mcp/index.js.map +1 -0
- package/lib/drivers/mcp/transport.d.ts +50 -0
- package/lib/drivers/mcp/transport.d.ts.map +1 -0
- package/lib/drivers/mcp/transport.js +190 -0
- package/lib/drivers/mcp/transport.js.map +1 -0
- package/lib/drivers/shared/artifacts.d.ts +4 -0
- package/lib/drivers/shared/artifacts.d.ts.map +1 -0
- package/lib/drivers/shared/artifacts.js +81 -0
- package/lib/drivers/shared/artifacts.js.map +1 -0
- package/lib/drivers/shared/secure-copy.d.ts +2 -0
- package/lib/drivers/shared/secure-copy.d.ts.map +1 -0
- package/lib/drivers/shared/secure-copy.js +35 -0
- package/lib/drivers/shared/secure-copy.js.map +1 -0
- package/lib/drivers/subprocess/index.d.ts +24 -0
- package/lib/drivers/subprocess/index.d.ts.map +1 -0
- package/lib/drivers/subprocess/index.js +451 -0
- package/lib/drivers/subprocess/index.js.map +1 -0
- package/lib/index.d.ts +40 -0
- package/lib/index.d.ts.map +1 -0
- package/lib/index.js +48 -0
- package/lib/index.js.map +1 -0
- package/lib/optimization/reflective.d.ts +27 -0
- package/lib/optimization/reflective.d.ts.map +1 -0
- package/lib/optimization/reflective.js +257 -0
- package/lib/optimization/reflective.js.map +1 -0
- package/lib/orchestrator/annotation-loader.d.ts +65 -0
- package/lib/orchestrator/annotation-loader.d.ts.map +1 -0
- package/lib/orchestrator/annotation-loader.js +73 -0
- package/lib/orchestrator/annotation-loader.js.map +1 -0
- package/lib/orchestrator/annotation-store.d.ts +3 -0
- package/lib/orchestrator/annotation-store.d.ts.map +1 -0
- package/lib/orchestrator/annotation-store.js +100 -0
- package/lib/orchestrator/annotation-store.js.map +1 -0
- package/lib/orchestrator/authored-dependencies.d.ts +3 -0
- package/lib/orchestrator/authored-dependencies.d.ts.map +1 -0
- package/lib/orchestrator/authored-dependencies.js +146 -0
- package/lib/orchestrator/authored-dependencies.js.map +1 -0
- package/lib/orchestrator/campaign-lifecycle.d.ts +105 -0
- package/lib/orchestrator/campaign-lifecycle.d.ts.map +1 -0
- package/lib/orchestrator/campaign-lifecycle.js +141 -0
- package/lib/orchestrator/campaign-lifecycle.js.map +1 -0
- package/lib/orchestrator/candidate-integrity.d.ts +4 -0
- package/lib/orchestrator/candidate-integrity.d.ts.map +1 -0
- package/lib/orchestrator/candidate-integrity.js +14 -0
- package/lib/orchestrator/candidate-integrity.js.map +1 -0
- package/lib/orchestrator/candidates.d.ts +13 -0
- package/lib/orchestrator/candidates.d.ts.map +1 -0
- package/lib/orchestrator/candidates.js +577 -0
- package/lib/orchestrator/candidates.js.map +1 -0
- package/lib/orchestrator/compare.d.ts +80 -0
- package/lib/orchestrator/compare.d.ts.map +1 -0
- package/lib/orchestrator/compare.js +270 -0
- package/lib/orchestrator/compare.js.map +1 -0
- package/lib/orchestrator/comparison-identity.d.ts +10 -0
- package/lib/orchestrator/comparison-identity.d.ts.map +1 -0
- package/lib/orchestrator/comparison-identity.js +39 -0
- package/lib/orchestrator/comparison-identity.js.map +1 -0
- package/lib/orchestrator/config.d.ts +121 -0
- package/lib/orchestrator/config.d.ts.map +1 -0
- package/lib/orchestrator/config.js +176 -0
- package/lib/orchestrator/config.js.map +1 -0
- package/lib/orchestrator/content-bound-json.d.ts +5 -0
- package/lib/orchestrator/content-bound-json.d.ts.map +1 -0
- package/lib/orchestrator/content-bound-json.js +59 -0
- package/lib/orchestrator/content-bound-json.js.map +1 -0
- package/lib/orchestrator/discover.d.ts +45 -0
- package/lib/orchestrator/discover.d.ts.map +1 -0
- package/lib/orchestrator/discover.js +98 -0
- package/lib/orchestrator/discover.js.map +1 -0
- package/lib/orchestrator/doctor.d.ts +141 -0
- package/lib/orchestrator/doctor.d.ts.map +1 -0
- package/lib/orchestrator/doctor.js +525 -0
- package/lib/orchestrator/doctor.js.map +1 -0
- package/lib/orchestrator/driver-session.d.ts +177 -0
- package/lib/orchestrator/driver-session.d.ts.map +1 -0
- package/lib/orchestrator/driver-session.js +396 -0
- package/lib/orchestrator/driver-session.js.map +1 -0
- package/lib/orchestrator/evaluator-identity.d.ts +7 -0
- package/lib/orchestrator/evaluator-identity.d.ts.map +1 -0
- package/lib/orchestrator/evaluator-identity.js +42 -0
- package/lib/orchestrator/evaluator-identity.js.map +1 -0
- package/lib/orchestrator/experiment-budget.d.ts +11 -0
- package/lib/orchestrator/experiment-budget.d.ts.map +1 -0
- package/lib/orchestrator/experiment-budget.js +51 -0
- package/lib/orchestrator/experiment-budget.js.map +1 -0
- package/lib/orchestrator/experiment-context.d.ts +43 -0
- package/lib/orchestrator/experiment-context.d.ts.map +1 -0
- package/lib/orchestrator/experiment-context.js +9 -0
- package/lib/orchestrator/experiment-context.js.map +1 -0
- package/lib/orchestrator/experiment-contracts.d.ts +290 -0
- package/lib/orchestrator/experiment-contracts.d.ts.map +1 -0
- package/lib/orchestrator/experiment-contracts.js +38 -0
- package/lib/orchestrator/experiment-contracts.js.map +1 -0
- package/lib/orchestrator/experiment-corpus.d.ts +21 -0
- package/lib/orchestrator/experiment-corpus.d.ts.map +1 -0
- package/lib/orchestrator/experiment-corpus.js +276 -0
- package/lib/orchestrator/experiment-corpus.js.map +1 -0
- package/lib/orchestrator/experiment-evaluation.d.ts +44 -0
- package/lib/orchestrator/experiment-evaluation.d.ts.map +1 -0
- package/lib/orchestrator/experiment-evaluation.js +542 -0
- package/lib/orchestrator/experiment-evaluation.js.map +1 -0
- package/lib/orchestrator/experiment-finish.d.ts +6 -0
- package/lib/orchestrator/experiment-finish.d.ts.map +1 -0
- package/lib/orchestrator/experiment-finish.js +19 -0
- package/lib/orchestrator/experiment-finish.js.map +1 -0
- package/lib/orchestrator/experiment-identity.d.ts +6 -0
- package/lib/orchestrator/experiment-identity.d.ts.map +1 -0
- package/lib/orchestrator/experiment-identity.js +257 -0
- package/lib/orchestrator/experiment-identity.js.map +1 -0
- package/lib/orchestrator/experiment-loader.d.ts +175 -0
- package/lib/orchestrator/experiment-loader.d.ts.map +1 -0
- package/lib/orchestrator/experiment-loader.js +77 -0
- package/lib/orchestrator/experiment-loader.js.map +1 -0
- package/lib/orchestrator/experiment-report.d.ts +450 -0
- package/lib/orchestrator/experiment-report.d.ts.map +1 -0
- package/lib/orchestrator/experiment-report.js +570 -0
- package/lib/orchestrator/experiment-report.js.map +1 -0
- package/lib/orchestrator/experiment-runs.d.ts +379 -0
- package/lib/orchestrator/experiment-runs.d.ts.map +1 -0
- package/lib/orchestrator/experiment-runs.js +796 -0
- package/lib/orchestrator/experiment-runs.js.map +1 -0
- package/lib/orchestrator/experiment-runtime-identity.d.ts +41 -0
- package/lib/orchestrator/experiment-runtime-identity.d.ts.map +1 -0
- package/lib/orchestrator/experiment-runtime-identity.js +411 -0
- package/lib/orchestrator/experiment-runtime-identity.js.map +1 -0
- package/lib/orchestrator/experiment-selection.d.ts +25 -0
- package/lib/orchestrator/experiment-selection.d.ts.map +1 -0
- package/lib/orchestrator/experiment-selection.js +286 -0
- package/lib/orchestrator/experiment-selection.js.map +1 -0
- package/lib/orchestrator/experiment.d.ts +11 -0
- package/lib/orchestrator/experiment.d.ts.map +1 -0
- package/lib/orchestrator/experiment.js +639 -0
- package/lib/orchestrator/experiment.js.map +1 -0
- package/lib/orchestrator/fixture-identity.d.ts +7 -0
- package/lib/orchestrator/fixture-identity.d.ts.map +1 -0
- package/lib/orchestrator/fixture-identity.js +55 -0
- package/lib/orchestrator/fixture-identity.js.map +1 -0
- package/lib/orchestrator/fs-read.d.ts +19 -0
- package/lib/orchestrator/fs-read.d.ts.map +1 -0
- package/lib/orchestrator/fs-read.js +113 -0
- package/lib/orchestrator/fs-read.js.map +1 -0
- package/lib/orchestrator/grader-experiment.d.ts +190 -0
- package/lib/orchestrator/grader-experiment.d.ts.map +1 -0
- package/lib/orchestrator/grader-experiment.js +579 -0
- package/lib/orchestrator/grader-experiment.js.map +1 -0
- package/lib/orchestrator/grading.d.ts +31 -0
- package/lib/orchestrator/grading.d.ts.map +1 -0
- package/lib/orchestrator/grading.js +186 -0
- package/lib/orchestrator/grading.js.map +1 -0
- package/lib/orchestrator/index.d.ts +22 -0
- package/lib/orchestrator/index.d.ts.map +1 -0
- package/lib/orchestrator/index.js +30 -0
- package/lib/orchestrator/index.js.map +1 -0
- package/lib/orchestrator/lifecycle-hook-execution.d.ts +4 -0
- package/lib/orchestrator/lifecycle-hook-execution.d.ts.map +1 -0
- package/lib/orchestrator/lifecycle-hook-execution.js +67 -0
- package/lib/orchestrator/lifecycle-hook-execution.js.map +1 -0
- package/lib/orchestrator/list-runs.d.ts +33 -0
- package/lib/orchestrator/list-runs.d.ts.map +1 -0
- package/lib/orchestrator/list-runs.js +308 -0
- package/lib/orchestrator/list-runs.js.map +1 -0
- package/lib/orchestrator/loader.d.ts +3 -0
- package/lib/orchestrator/loader.d.ts.map +1 -0
- package/lib/orchestrator/loader.js +17 -0
- package/lib/orchestrator/loader.js.map +1 -0
- package/lib/orchestrator/optimization-lifecycle.d.ts +12 -0
- package/lib/orchestrator/optimization-lifecycle.d.ts.map +1 -0
- package/lib/orchestrator/optimization-lifecycle.js +92 -0
- package/lib/orchestrator/optimization-lifecycle.js.map +1 -0
- package/lib/orchestrator/orchestrator.d.ts +144 -0
- package/lib/orchestrator/orchestrator.d.ts.map +1 -0
- package/lib/orchestrator/orchestrator.js +632 -0
- package/lib/orchestrator/orchestrator.js.map +1 -0
- package/lib/orchestrator/owned-lock.d.ts +17 -0
- package/lib/orchestrator/owned-lock.d.ts.map +1 -0
- package/lib/orchestrator/owned-lock.js +149 -0
- package/lib/orchestrator/owned-lock.js.map +1 -0
- package/lib/orchestrator/package-version.d.ts +2 -0
- package/lib/orchestrator/package-version.d.ts.map +1 -0
- package/lib/orchestrator/package-version.js +4 -0
- package/lib/orchestrator/package-version.js.map +1 -0
- package/lib/orchestrator/provenance.d.ts +5 -0
- package/lib/orchestrator/provenance.d.ts.map +1 -0
- package/lib/orchestrator/provenance.js +137 -0
- package/lib/orchestrator/provenance.js.map +1 -0
- package/lib/orchestrator/regrade.d.ts +80 -0
- package/lib/orchestrator/regrade.d.ts.map +1 -0
- package/lib/orchestrator/regrade.js +433 -0
- package/lib/orchestrator/regrade.js.map +1 -0
- package/lib/orchestrator/rubric-loader.d.ts +7 -0
- package/lib/orchestrator/rubric-loader.d.ts.map +1 -0
- package/lib/orchestrator/rubric-loader.js +65 -0
- package/lib/orchestrator/rubric-loader.js.map +1 -0
- package/lib/orchestrator/run-dir.d.ts +40 -0
- package/lib/orchestrator/run-dir.d.ts.map +1 -0
- package/lib/orchestrator/run-dir.js +161 -0
- package/lib/orchestrator/run-dir.js.map +1 -0
- package/lib/orchestrator/run-execution.d.ts +30 -0
- package/lib/orchestrator/run-execution.d.ts.map +1 -0
- package/lib/orchestrator/run-execution.js +531 -0
- package/lib/orchestrator/run-execution.js.map +1 -0
- package/lib/orchestrator/run-lifecycle.d.ts +115 -0
- package/lib/orchestrator/run-lifecycle.d.ts.map +1 -0
- package/lib/orchestrator/run-lifecycle.js +136 -0
- package/lib/orchestrator/run-lifecycle.js.map +1 -0
- package/lib/orchestrator/suite-compare.d.ts +76 -0
- package/lib/orchestrator/suite-compare.d.ts.map +1 -0
- package/lib/orchestrator/suite-compare.js +159 -0
- package/lib/orchestrator/suite-compare.js.map +1 -0
- package/lib/orchestrator/suite-lifecycle.d.ts +157 -0
- package/lib/orchestrator/suite-lifecycle.d.ts.map +1 -0
- package/lib/orchestrator/suite-lifecycle.js +253 -0
- package/lib/orchestrator/suite-lifecycle.js.map +1 -0
- package/lib/orchestrator/suite-runs.d.ts +91 -0
- package/lib/orchestrator/suite-runs.d.ts.map +1 -0
- package/lib/orchestrator/suite-runs.js +157 -0
- package/lib/orchestrator/suite-runs.js.map +1 -0
- package/lib/orchestrator/suite-summary.d.ts +109 -0
- package/lib/orchestrator/suite-summary.d.ts.map +1 -0
- package/lib/orchestrator/suite-summary.js +213 -0
- package/lib/orchestrator/suite-summary.js.map +1 -0
- package/lib/orchestrator/trace-limits.d.ts +20 -0
- package/lib/orchestrator/trace-limits.d.ts.map +1 -0
- package/lib/orchestrator/trace-limits.js +28 -0
- package/lib/orchestrator/trace-limits.js.map +1 -0
- package/lib/orchestrator/validate-plugin-config.d.ts +10 -0
- package/lib/orchestrator/validate-plugin-config.d.ts.map +1 -0
- package/lib/orchestrator/validate-plugin-config.js +26 -0
- package/lib/orchestrator/validate-plugin-config.js.map +1 -0
- package/package.json +84 -0
- package/skills/lux/SKILL.md +85 -0
- package/skills/lux/references/cli.md +102 -0
- package/skills/lux/references/eval-authoring.md +105 -0
- package/skills/lux-answerer/SKILL.md +169 -0
- package/src/answerers/claude-code/index.ts +342 -0
- package/src/answerers/persona/index.ts +327 -0
- package/src/answerers/scripted/index.ts +186 -0
- package/src/answerers/shared.ts +23 -0
- package/src/answerers/terminal/index.ts +117 -0
- package/src/assertions/core/command-exits-zero.ts +94 -0
- package/src/assertions/core/event-checks.ts +138 -0
- package/src/assertions/core/file-checks.ts +336 -0
- package/src/assertions/core/helpers.ts +203 -0
- package/src/assertions/core/index.ts +80 -0
- package/src/assertions/core/json-pointer-equals.ts +84 -0
- package/src/assertions/core/output-checks.ts +134 -0
- package/src/assertions/core/predicate.ts +67 -0
- package/src/assertions/core/resource-checks.ts +180 -0
- package/src/assertions/core/safe-regex.ts +196 -0
- package/src/assertions/core/tool-called-with.ts +68 -0
- package/src/assertions/core/tool-calls.ts +28 -0
- package/src/assertions/core/tool-invocation.ts +198 -0
- package/src/assertions/core/tool-result-checks.ts +211 -0
- package/src/assertions/mcp/discovery-checks.ts +139 -0
- package/src/assertions/mcp/index.ts +37 -0
- package/src/assertions/rubric/index.ts +258 -0
- package/src/assertions/rubric/internal.ts +367 -0
- package/src/authoring.ts +2 -0
- package/src/cli/bin.ts +14 -0
- package/src/cli/command-runtime.ts +34 -0
- package/src/cli/init.ts +410 -0
- package/src/cli/program.ts +992 -0
- package/src/cli/render/format.ts +69 -0
- package/src/cli/render/reporter.ts +643 -0
- package/src/cli/render/tty.ts +314 -0
- package/src/cli/run-options.ts +82 -0
- package/src/cli/skills.ts +129 -0
- package/src/core/annotation.ts +104 -0
- package/src/core/answerer.ts +75 -0
- package/src/core/artifact-evidence.ts +249 -0
- package/src/core/artifact-snapshot.ts +429 -0
- package/src/core/assertion.ts +156 -0
- package/src/core/case.ts +103 -0
- package/src/core/conversation-turn.ts +47 -0
- package/src/core/driver.ts +75 -0
- package/src/core/emitter.ts +38 -0
- package/src/core/events.ts +135 -0
- package/src/core/exec.ts +263 -0
- package/src/core/experiment.ts +467 -0
- package/src/core/glob.ts +31 -0
- package/src/core/hash.ts +237 -0
- package/src/core/index.ts +28 -0
- package/src/core/lifecycle-fixtures.ts +145 -0
- package/src/core/lifecycle-hooks.ts +101 -0
- package/src/core/mcp-events.ts +57 -0
- package/src/core/model-cli.ts +271 -0
- package/src/core/observer.ts +50 -0
- package/src/core/platform-process.ts +284 -0
- package/src/core/registry.ts +57 -0
- package/src/core/rubric.ts +52 -0
- package/src/core/run.ts +144 -0
- package/src/core/statistics.ts +194 -0
- package/src/core/subject.ts +50 -0
- package/src/core/tool-events.ts +292 -0
- package/src/core/usage.ts +123 -0
- package/src/core/wire.ts +135 -0
- package/src/core/zod.ts +20 -0
- package/src/drivers/claude-code/index.ts +866 -0
- package/src/drivers/claude-code/parse-events.ts +464 -0
- package/src/drivers/codex/app-events.ts +218 -0
- package/src/drivers/codex/config.ts +128 -0
- package/src/drivers/codex/index.ts +995 -0
- package/src/drivers/mcp/index.ts +351 -0
- package/src/drivers/mcp/transport.ts +222 -0
- package/src/drivers/shared/artifacts.ts +86 -0
- package/src/drivers/shared/secure-copy.ts +40 -0
- package/src/drivers/subprocess/index.ts +490 -0
- package/src/index.ts +594 -0
- package/src/optimization/reflective.ts +319 -0
- package/src/orchestrator/annotation-loader.ts +97 -0
- package/src/orchestrator/annotation-store.ts +112 -0
- package/src/orchestrator/authored-dependencies.ts +193 -0
- package/src/orchestrator/campaign-lifecycle.ts +181 -0
- package/src/orchestrator/candidate-integrity.ts +18 -0
- package/src/orchestrator/candidates.ts +683 -0
- package/src/orchestrator/compare.ts +358 -0
- package/src/orchestrator/comparison-identity.ts +45 -0
- package/src/orchestrator/config.ts +205 -0
- package/src/orchestrator/content-bound-json.ts +71 -0
- package/src/orchestrator/discover.ts +132 -0
- package/src/orchestrator/doctor.ts +781 -0
- package/src/orchestrator/driver-session.ts +507 -0
- package/src/orchestrator/evaluator-identity.ts +45 -0
- package/src/orchestrator/experiment-budget.ts +61 -0
- package/src/orchestrator/experiment-context.ts +41 -0
- package/src/orchestrator/experiment-contracts.ts +43 -0
- package/src/orchestrator/experiment-corpus.ts +416 -0
- package/src/orchestrator/experiment-evaluation.ts +749 -0
- package/src/orchestrator/experiment-finish.ts +33 -0
- package/src/orchestrator/experiment-identity.ts +356 -0
- package/src/orchestrator/experiment-loader.ts +105 -0
- package/src/orchestrator/experiment-report.ts +788 -0
- package/src/orchestrator/experiment-runs.ts +960 -0
- package/src/orchestrator/experiment-runtime-identity.ts +465 -0
- package/src/orchestrator/experiment-selection.ts +467 -0
- package/src/orchestrator/experiment.ts +991 -0
- package/src/orchestrator/fixture-identity.ts +67 -0
- package/src/orchestrator/fs-read.ts +126 -0
- package/src/orchestrator/grader-experiment.ts +856 -0
- package/src/orchestrator/grading.ts +260 -0
- package/src/orchestrator/index.ts +186 -0
- package/src/orchestrator/lifecycle-hook-execution.ts +90 -0
- package/src/orchestrator/list-runs.ts +384 -0
- package/src/orchestrator/loader.ts +19 -0
- package/src/orchestrator/optimization-lifecycle.ts +126 -0
- package/src/orchestrator/orchestrator.ts +919 -0
- package/src/orchestrator/owned-lock.ts +147 -0
- package/src/orchestrator/package-version.ts +5 -0
- package/src/orchestrator/provenance.ts +140 -0
- package/src/orchestrator/regrade.ts +580 -0
- package/src/orchestrator/rubric-loader.ts +74 -0
- package/src/orchestrator/run-dir.ts +209 -0
- package/src/orchestrator/run-execution.ts +694 -0
- package/src/orchestrator/run-lifecycle.ts +174 -0
- package/src/orchestrator/suite-compare.ts +195 -0
- package/src/orchestrator/suite-lifecycle.ts +335 -0
- package/src/orchestrator/suite-runs.ts +202 -0
- package/src/orchestrator/suite-summary.ts +276 -0
- package/src/orchestrator/trace-limits.ts +65 -0
- package/src/orchestrator/validate-plugin-config.ts +34 -0
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
import { lstat } from "node:fs/promises";
|
|
2
|
+
import { isAbsolute, join, relative, resolve, sep } from "node:path";
|
|
3
|
+
import { z } from "zod";
|
|
4
|
+
import { inspectRunArtifact, runArtifactsRoot } from "../../core/artifact-evidence.js";
|
|
5
|
+
const FsLocationSchema = z.enum(["artifacts", "cwd"]);
|
|
6
|
+
export const resolveLocationRoot = (run, where = "artifacts") => where === "cwd" ? run.runDir : runArtifactsRoot(run);
|
|
7
|
+
const pathEscapesRoot = (root, target) => {
|
|
8
|
+
const rel = relative(root, target);
|
|
9
|
+
return rel === ".." || rel.startsWith(`..${sep}`) || isAbsolute(rel);
|
|
10
|
+
};
|
|
11
|
+
export const inspectAssertionPath = async (run, where, authoredPath) => {
|
|
12
|
+
if (where === "artifacts") {
|
|
13
|
+
const { target, stats, issue } = await inspectRunArtifact(run, authoredPath);
|
|
14
|
+
return { target, ...(stats ? { stats } : {}), ...(issue ? { issue } : {}) };
|
|
15
|
+
}
|
|
16
|
+
const root = resolve(resolveLocationRoot(run, where));
|
|
17
|
+
const target = resolve(root, authoredPath);
|
|
18
|
+
if (pathEscapesRoot(root, target)) {
|
|
19
|
+
return { target, issue: `${authoredPath} escapes the selected assertion root` };
|
|
20
|
+
}
|
|
21
|
+
const rel = relative(root, target);
|
|
22
|
+
const components = [
|
|
23
|
+
root,
|
|
24
|
+
...rel
|
|
25
|
+
.split(sep)
|
|
26
|
+
.filter(Boolean)
|
|
27
|
+
.map((_, index, parts) => join(root, ...parts.slice(0, index + 1))),
|
|
28
|
+
];
|
|
29
|
+
for (const [index, component] of components.entries()) {
|
|
30
|
+
let stats;
|
|
31
|
+
try {
|
|
32
|
+
stats = await lstat(component);
|
|
33
|
+
}
|
|
34
|
+
catch (err) {
|
|
35
|
+
const code = err.code;
|
|
36
|
+
if (code === "ENOENT" || code === "ENOTDIR") {
|
|
37
|
+
return { target, issue: `${authoredPath} not found` };
|
|
38
|
+
}
|
|
39
|
+
throw err;
|
|
40
|
+
}
|
|
41
|
+
if (stats.isSymbolicLink()) {
|
|
42
|
+
return { target, issue: `${authoredPath} resolves through a symlink` };
|
|
43
|
+
}
|
|
44
|
+
if (index < components.length - 1 && !stats.isDirectory()) {
|
|
45
|
+
return { target, issue: `${authoredPath} not found` };
|
|
46
|
+
}
|
|
47
|
+
if (index === components.length - 1)
|
|
48
|
+
return { target, stats };
|
|
49
|
+
}
|
|
50
|
+
return { target, issue: `${authoredPath} not found` };
|
|
51
|
+
};
|
|
52
|
+
export const globEscapesAssertionRoot = (pattern) => isAbsolute(pattern) || pattern.split(/[\\/]/).includes("..");
|
|
53
|
+
const COMMAND_TOOLCHAIN_ENV = [
|
|
54
|
+
"PATH",
|
|
55
|
+
"PATHEXT",
|
|
56
|
+
"HOME",
|
|
57
|
+
"USERPROFILE",
|
|
58
|
+
"SYSTEMROOT",
|
|
59
|
+
"COMSPEC",
|
|
60
|
+
"SHELL",
|
|
61
|
+
"TMPDIR",
|
|
62
|
+
"TMP",
|
|
63
|
+
"TEMP",
|
|
64
|
+
"LANG",
|
|
65
|
+
"LANGUAGE",
|
|
66
|
+
"LC_ALL",
|
|
67
|
+
"LC_CTYPE",
|
|
68
|
+
"TERM",
|
|
69
|
+
"COLORTERM",
|
|
70
|
+
"NO_COLOR",
|
|
71
|
+
"FORCE_COLOR",
|
|
72
|
+
];
|
|
73
|
+
export const commandEnvironment = (parent, inherit = []) => {
|
|
74
|
+
if (inherit === true)
|
|
75
|
+
return { ...parent };
|
|
76
|
+
const names = new Set([...COMMAND_TOOLCHAIN_ENV, ...inherit]);
|
|
77
|
+
return Object.fromEntries([...names].flatMap((name) => {
|
|
78
|
+
const value = parent[name];
|
|
79
|
+
return value === undefined ? [] : [[name, value]];
|
|
80
|
+
}));
|
|
81
|
+
};
|
|
82
|
+
/**
|
|
83
|
+
* Resolve an RFC 6901 JSON pointer against a parsed value; undefined when it
|
|
84
|
+
* does not resolve. Deviates from the RFC for arrays: any own property
|
|
85
|
+
* resolves, so `/length` works even though the RFC only allows index tokens.
|
|
86
|
+
*/
|
|
87
|
+
export const resolvePointer = (root, pointer) => {
|
|
88
|
+
if (pointer === "")
|
|
89
|
+
return root;
|
|
90
|
+
if (!pointer.startsWith("/"))
|
|
91
|
+
return undefined;
|
|
92
|
+
const parts = pointer
|
|
93
|
+
.slice(1)
|
|
94
|
+
.split("/")
|
|
95
|
+
.map((p) => p.replace(/~1/g, "/").replace(/~0/g, "~"));
|
|
96
|
+
let node = root;
|
|
97
|
+
for (const part of parts) {
|
|
98
|
+
if (node === null || typeof node !== "object")
|
|
99
|
+
return undefined;
|
|
100
|
+
// Own properties only — a pointer like `/constructor` must not walk the
|
|
101
|
+
// prototype chain into inherited values.
|
|
102
|
+
if (!Object.hasOwn(node, part))
|
|
103
|
+
return undefined;
|
|
104
|
+
node = node[part];
|
|
105
|
+
}
|
|
106
|
+
return node;
|
|
107
|
+
};
|
|
108
|
+
export const inRange = (value, min, max) => {
|
|
109
|
+
if (min !== undefined && value < min) {
|
|
110
|
+
return { passed: false, comment: `${value} < min ${min}` };
|
|
111
|
+
}
|
|
112
|
+
if (max !== undefined && value > max) {
|
|
113
|
+
return { passed: false, comment: `${value} > max ${max}` };
|
|
114
|
+
}
|
|
115
|
+
const bounds = [
|
|
116
|
+
min !== undefined ? `>= ${min}` : undefined,
|
|
117
|
+
max !== undefined ? `<= ${max}` : undefined,
|
|
118
|
+
]
|
|
119
|
+
.filter((b) => b !== undefined)
|
|
120
|
+
.join(", ");
|
|
121
|
+
return {
|
|
122
|
+
passed: true,
|
|
123
|
+
comment: bounds ? `${value} ${bounds}` : `${value}`,
|
|
124
|
+
};
|
|
125
|
+
};
|
|
126
|
+
/** Structural equality for JSON-shaped values — object key order is irrelevant. */
|
|
127
|
+
export const deepEquals = (a, b) => {
|
|
128
|
+
if (Object.is(a, b))
|
|
129
|
+
return true;
|
|
130
|
+
if (typeof a !== "object" || typeof b !== "object" || a === null || b === null)
|
|
131
|
+
return false;
|
|
132
|
+
if (Array.isArray(a) || Array.isArray(b)) {
|
|
133
|
+
if (!Array.isArray(a) || !Array.isArray(b) || a.length !== b.length)
|
|
134
|
+
return false;
|
|
135
|
+
return a.every((v, i) => deepEquals(v, b[i]));
|
|
136
|
+
}
|
|
137
|
+
const aEntries = Object.entries(a);
|
|
138
|
+
if (aEntries.length !== Object.keys(b).length)
|
|
139
|
+
return false;
|
|
140
|
+
return aEntries.every(([k, v]) => Object.hasOwn(b, k) && deepEquals(v, b[k]));
|
|
141
|
+
};
|
|
142
|
+
/**
|
|
143
|
+
* Zod fragment for the framework-level fields every assertion shares
|
|
144
|
+
* (weight, threshold, name). Spread into per-assertion config schemas:
|
|
145
|
+
*
|
|
146
|
+
* z.object({ type: z.literal("foo"), ...baseAssertionFields, ... })
|
|
147
|
+
*
|
|
148
|
+
* Mirrors {@link Assertion} from the core module while letting each built-in
|
|
149
|
+
* assertion reject misspelled type-specific fields at its own schema boundary.
|
|
150
|
+
*/
|
|
151
|
+
export const baseAssertionFields = {
|
|
152
|
+
id: z.string().min(1).optional(),
|
|
153
|
+
weight: z.number().positive().optional(),
|
|
154
|
+
threshold: z.number().min(0).max(1).optional(),
|
|
155
|
+
name: z.string().optional(),
|
|
156
|
+
};
|
|
157
|
+
/**
|
|
158
|
+
* Where on the run dir an assertion looks for files. Defaults to
|
|
159
|
+
* `artifacts` (the standard place drivers drop captured files).
|
|
160
|
+
*/
|
|
161
|
+
export const LocationSchema = FsLocationSchema.default("artifacts");
|
|
162
|
+
// `name` is intentionally excluded: for tool assertions the `name` field is
|
|
163
|
+
// the tool's name, which then doubles as the display label.
|
|
164
|
+
export const weightThresholdFields = {
|
|
165
|
+
id: baseAssertionFields.id,
|
|
166
|
+
weight: baseAssertionFields.weight,
|
|
167
|
+
threshold: baseAssertionFields.threshold,
|
|
168
|
+
};
|
|
169
|
+
export const isToolCallEvent = (e) => e.type === "progress" && e.kind === "tool-call";
|
|
170
|
+
//# sourceMappingURL=helpers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../../src/assertions/core/helpers.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { AssertionImpl, Registry } from "../../core/index.js";
|
|
2
|
+
export * from "./command-exits-zero.js";
|
|
3
|
+
export * from "./event-checks.js";
|
|
4
|
+
export * from "./file-checks.js";
|
|
5
|
+
export * from "./json-pointer-equals.js";
|
|
6
|
+
export * from "./output-checks.js";
|
|
7
|
+
export * from "./predicate.js";
|
|
8
|
+
export * from "./resource-checks.js";
|
|
9
|
+
export * from "./tool-called-with.js";
|
|
10
|
+
export * from "./tool-calls.js";
|
|
11
|
+
export * from "./tool-invocation.js";
|
|
12
|
+
export * from "./tool-result-checks.js";
|
|
13
|
+
export declare const allCoreAssertions: AssertionImpl[];
|
|
14
|
+
export declare const registerCoreAssertions: (registry: Registry) => void;
|
|
15
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/assertions/core/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAkCnE,cAAc,yBAAyB,CAAC;AACxC,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,0BAA0B,CAAC;AACzC,cAAc,oBAAoB,CAAC;AACnC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC;AACtC,cAAc,iBAAiB,CAAC;AAChC,cAAc,sBAAsB,CAAC;AACrC,cAAc,yBAAyB,CAAC;AAExC,eAAO,MAAM,iBAAiB,EAAE,aAAa,EA2B5C,CAAC;AAEF,eAAO,MAAM,sBAAsB,aAAc,QAAQ,KAAG,IAI3D,CAAC"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { commandExitsZeroAssertion } from "./command-exits-zero.js";
|
|
2
|
+
import { interruptCountAssertion, toolCallCountAssertion, toolCalledAssertion, } from "./event-checks.js";
|
|
3
|
+
import { fileContainsAssertion, fileExistsAssertion, fileMatchesAssertion, fileRegexCountAssertion, fileRegexSetAssertion, globCountAssertion, } from "./file-checks.js";
|
|
4
|
+
import { jsonPointerEqualsAssertion } from "./json-pointer-equals.js";
|
|
5
|
+
import { containsAssertion, notContainsAssertion, regexAssertion } from "./output-checks.js";
|
|
6
|
+
import { predicateAssertion } from "./predicate.js";
|
|
7
|
+
import { artifactBytesUnderAssertion, costUnderAssertion, latencyUnderAssertion, runSucceededAssertion, tokensUnderAssertion, } from "./resource-checks.js";
|
|
8
|
+
import { toolCalledWithAssertion } from "./tool-called-with.js";
|
|
9
|
+
import { toolInvocationAssertion } from "./tool-invocation.js";
|
|
10
|
+
import { noErrorResultsAssertion, toolResultContainsAssertion, toolResultIsErrorAssertion, toolResultJsonPointerEqualsAssertion, } from "./tool-result-checks.js";
|
|
11
|
+
export * from "./command-exits-zero.js";
|
|
12
|
+
export * from "./event-checks.js";
|
|
13
|
+
export * from "./file-checks.js";
|
|
14
|
+
export * from "./json-pointer-equals.js";
|
|
15
|
+
export * from "./output-checks.js";
|
|
16
|
+
export * from "./predicate.js";
|
|
17
|
+
export * from "./resource-checks.js";
|
|
18
|
+
export * from "./tool-called-with.js";
|
|
19
|
+
export * from "./tool-calls.js";
|
|
20
|
+
export * from "./tool-invocation.js";
|
|
21
|
+
export * from "./tool-result-checks.js";
|
|
22
|
+
export const allCoreAssertions = [
|
|
23
|
+
fileExistsAssertion,
|
|
24
|
+
fileContainsAssertion,
|
|
25
|
+
fileMatchesAssertion,
|
|
26
|
+
fileRegexSetAssertion,
|
|
27
|
+
fileRegexCountAssertion,
|
|
28
|
+
globCountAssertion,
|
|
29
|
+
toolCalledAssertion,
|
|
30
|
+
toolCalledWithAssertion,
|
|
31
|
+
toolInvocationAssertion,
|
|
32
|
+
toolCallCountAssertion,
|
|
33
|
+
toolResultIsErrorAssertion,
|
|
34
|
+
toolResultContainsAssertion,
|
|
35
|
+
toolResultJsonPointerEqualsAssertion,
|
|
36
|
+
noErrorResultsAssertion,
|
|
37
|
+
interruptCountAssertion,
|
|
38
|
+
commandExitsZeroAssertion,
|
|
39
|
+
containsAssertion,
|
|
40
|
+
notContainsAssertion,
|
|
41
|
+
regexAssertion,
|
|
42
|
+
jsonPointerEqualsAssertion,
|
|
43
|
+
latencyUnderAssertion,
|
|
44
|
+
artifactBytesUnderAssertion,
|
|
45
|
+
tokensUnderAssertion,
|
|
46
|
+
costUnderAssertion,
|
|
47
|
+
runSucceededAssertion,
|
|
48
|
+
predicateAssertion,
|
|
49
|
+
];
|
|
50
|
+
export const registerCoreAssertions = (registry) => {
|
|
51
|
+
for (const a of allCoreAssertions) {
|
|
52
|
+
if (!registry.getAssertion(a.type))
|
|
53
|
+
registry.registerAssertion(a);
|
|
54
|
+
}
|
|
55
|
+
};
|
|
56
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/assertions/core/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,yBAAyB,EAAE,MAAM,yBAAyB,CAAC;AACpE,OAAO,EACL,uBAAuB,EACvB,sBAAsB,EACtB,mBAAmB,GACpB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,qBAAqB,EACrB,mBAAmB,EACnB,oBAAoB,EACpB,uBAAuB,EACvB,qBAAqB,EACrB,kBAAkB,GACnB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,0BAA0B,EAAE,MAAM,0BAA0B,CAAC;AACtE,OAAO,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAC7F,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,EACL,2BAA2B,EAC3B,kBAAkB,EAClB,qBAAqB,EACrB,qBAAqB,EACrB,oBAAoB,GACrB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAChE,OAAO,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AAC/D,OAAO,EACL,uBAAuB,EACvB,2BAA2B,EAC3B,0BAA0B,EAC1B,oCAAoC,GACrC,MAAM,yBAAyB,CAAC;AAEjC,cAAc,yBAAyB,CAAC;AACxC,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,0BAA0B,CAAC;AACzC,cAAc,oBAAoB,CAAC;AACnC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC;AACtC,cAAc,iBAAiB,CAAC;AAChC,cAAc,sBAAsB,CAAC;AACrC,cAAc,yBAAyB,CAAC;AAExC,MAAM,CAAC,MAAM,iBAAiB,GAAoB;IAChD,mBAAmB;IACnB,qBAAqB;IACrB,oBAAoB;IACpB,qBAAqB;IACrB,uBAAuB;IACvB,kBAAkB;IAClB,mBAAmB;IACnB,uBAAuB;IACvB,uBAAuB;IACvB,sBAAsB;IACtB,0BAA0B;IAC1B,2BAA2B;IAC3B,oCAAoC;IACpC,uBAAuB;IACvB,uBAAuB;IACvB,yBAAyB;IACzB,iBAAiB;IACjB,oBAAoB;IACpB,cAAc;IACd,0BAA0B;IAC1B,qBAAqB;IACrB,2BAA2B;IAC3B,oBAAoB;IACpB,kBAAkB;IAClB,qBAAqB;IACrB,kBAAkB;CACnB,CAAC;AAEF,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,QAAkB,EAAQ,EAAE;IACjE,KAAK,MAAM,CAAC,IAAI,iBAAiB,EAAE,CAAC;QAClC,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC;YAAE,QAAQ,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC;IACpE,CAAC;AACH,CAAC,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { type AssertionImpl } from "../../core/index.js";
|
|
3
|
+
export declare const JsonPointerEqualsConfigSchema: z.ZodObject<{
|
|
4
|
+
id: z.ZodOptional<z.ZodString>;
|
|
5
|
+
weight: z.ZodOptional<z.ZodNumber>;
|
|
6
|
+
threshold: z.ZodOptional<z.ZodNumber>;
|
|
7
|
+
name: z.ZodOptional<z.ZodString>;
|
|
8
|
+
type: z.ZodLiteral<"json-pointer-equals">;
|
|
9
|
+
path: z.ZodString;
|
|
10
|
+
in: z.ZodDefault<z.ZodEnum<{
|
|
11
|
+
artifacts: "artifacts";
|
|
12
|
+
cwd: "cwd";
|
|
13
|
+
}>>;
|
|
14
|
+
pointer: z.ZodString;
|
|
15
|
+
value: z.ZodUnknown;
|
|
16
|
+
}, z.core.$strict>;
|
|
17
|
+
export type JsonPointerEqualsConfig = z.infer<typeof JsonPointerEqualsConfigSchema>;
|
|
18
|
+
export declare const jsonPointerEqualsAssertion: AssertionImpl<JsonPointerEqualsConfig>;
|
|
19
|
+
//# sourceMappingURL=json-pointer-equals.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"json-pointer-equals.d.ts","sourceRoot":"","sources":["../../../src/assertions/core/json-pointer-equals.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,KAAK,aAAa,EAA0B,MAAM,qBAAqB,CAAC;AAWjF,eAAO,MAAM,6BAA6B;;;;;;;;;;;;;kBAgBsB,CAAC;AACjE,MAAM,MAAM,uBAAuB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,6BAA6B,CAAC,CAAC;AAEpF,eAAO,MAAM,0BAA0B,EAAE,aAAa,CAAC,uBAAuB,CAoD7E,CAAC"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { readInspectedFileBytes } from "../../core/index.js";
|
|
3
|
+
import { baseAssertionFields, deepEquals, inspectAssertionPath, LocationSchema, resolvePointer, } from "./helpers.js";
|
|
4
|
+
const MAX_JSON_FILE_BYTES = 10 * 1024 * 1024;
|
|
5
|
+
export const JsonPointerEqualsConfigSchema = z
|
|
6
|
+
.object({
|
|
7
|
+
type: z.literal("json-pointer-equals"),
|
|
8
|
+
/** File path to read (parsed as JSON). */
|
|
9
|
+
path: z.string(),
|
|
10
|
+
/** Where to look for the file. */
|
|
11
|
+
in: LocationSchema,
|
|
12
|
+
/** RFC 6901 JSON pointer. */
|
|
13
|
+
pointer: z.string(),
|
|
14
|
+
/** Expected value at the pointer. */
|
|
15
|
+
value: z.unknown(),
|
|
16
|
+
...baseAssertionFields,
|
|
17
|
+
})
|
|
18
|
+
.strict()
|
|
19
|
+
// An omitted `value` would silently pass against any missing pointer
|
|
20
|
+
// (undefined === undefined), so its presence is required outright.
|
|
21
|
+
.refine((c) => "value" in c, { message: "value is required" });
|
|
22
|
+
export const jsonPointerEqualsAssertion = {
|
|
23
|
+
type: "json-pointer-equals",
|
|
24
|
+
configSchema: JsonPointerEqualsConfigSchema,
|
|
25
|
+
evaluate: async (config, run) => {
|
|
26
|
+
const { target, stats, issue } = await inspectAssertionPath(run, config.in, config.path);
|
|
27
|
+
if (!stats?.isFile()) {
|
|
28
|
+
return {
|
|
29
|
+
passed: false,
|
|
30
|
+
score: 0,
|
|
31
|
+
comment: issue ?? (stats ? `${config.path} is not a file` : `${config.path} not found`),
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
if (stats.size > MAX_JSON_FILE_BYTES) {
|
|
35
|
+
return {
|
|
36
|
+
passed: false,
|
|
37
|
+
score: 0,
|
|
38
|
+
comment: `${config.path} exceeds the ${MAX_JSON_FILE_BYTES}-byte JSON assertion limit`,
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
let parsed;
|
|
42
|
+
try {
|
|
43
|
+
const contents = await readInspectedFileBytes(target, stats, MAX_JSON_FILE_BYTES, config.path);
|
|
44
|
+
parsed = JSON.parse(contents.toString("utf8"));
|
|
45
|
+
}
|
|
46
|
+
catch (err) {
|
|
47
|
+
return {
|
|
48
|
+
passed: false,
|
|
49
|
+
score: 0,
|
|
50
|
+
comment: `${config.path} is not valid JSON: ${err instanceof Error ? err.message : String(err)}`,
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
const resolved = resolvePointer(parsed, config.pointer);
|
|
54
|
+
if (resolved === undefined) {
|
|
55
|
+
return {
|
|
56
|
+
passed: false,
|
|
57
|
+
score: 0,
|
|
58
|
+
comment: `${config.pointer} does not resolve in ${config.path}`,
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
const passed = deepEquals(resolved, config.value);
|
|
62
|
+
return {
|
|
63
|
+
passed,
|
|
64
|
+
score: passed ? 1 : 0,
|
|
65
|
+
comment: passed
|
|
66
|
+
? `${config.pointer} matches expected value`
|
|
67
|
+
: `${config.pointer}: expected ${JSON.stringify(config.value)}, got ${JSON.stringify(resolved)}`,
|
|
68
|
+
};
|
|
69
|
+
},
|
|
70
|
+
};
|
|
71
|
+
//# sourceMappingURL=json-pointer-equals.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"json-pointer-equals.js","sourceRoot":"","sources":["../../../src/assertions/core/json-pointer-equals.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import type { AssertionImpl } from "../../core/index.js";
|
|
3
|
+
export declare const ContainsConfigSchema: z.ZodObject<{
|
|
4
|
+
id: z.ZodOptional<z.ZodString>;
|
|
5
|
+
weight: z.ZodOptional<z.ZodNumber>;
|
|
6
|
+
threshold: z.ZodOptional<z.ZodNumber>;
|
|
7
|
+
name: z.ZodOptional<z.ZodString>;
|
|
8
|
+
type: z.ZodLiteral<"contains">;
|
|
9
|
+
text: z.ZodString;
|
|
10
|
+
against: z.ZodDefault<z.ZodEnum<{
|
|
11
|
+
"transcript-all": "transcript-all";
|
|
12
|
+
"transcript-final": "transcript-final";
|
|
13
|
+
}>>;
|
|
14
|
+
}, z.core.$strict>;
|
|
15
|
+
export type ContainsConfig = z.infer<typeof ContainsConfigSchema>;
|
|
16
|
+
export declare const containsAssertion: AssertionImpl<ContainsConfig>;
|
|
17
|
+
export declare const NotContainsConfigSchema: z.ZodObject<{
|
|
18
|
+
id: z.ZodOptional<z.ZodString>;
|
|
19
|
+
weight: z.ZodOptional<z.ZodNumber>;
|
|
20
|
+
threshold: z.ZodOptional<z.ZodNumber>;
|
|
21
|
+
name: z.ZodOptional<z.ZodString>;
|
|
22
|
+
type: z.ZodLiteral<"not-contains">;
|
|
23
|
+
text: z.ZodString;
|
|
24
|
+
against: z.ZodDefault<z.ZodEnum<{
|
|
25
|
+
"transcript-all": "transcript-all";
|
|
26
|
+
"transcript-final": "transcript-final";
|
|
27
|
+
}>>;
|
|
28
|
+
}, z.core.$strict>;
|
|
29
|
+
export type NotContainsConfig = z.infer<typeof NotContainsConfigSchema>;
|
|
30
|
+
export declare const notContainsAssertion: AssertionImpl<NotContainsConfig>;
|
|
31
|
+
export declare const RegexConfigSchema: z.ZodObject<{
|
|
32
|
+
id: z.ZodOptional<z.ZodString>;
|
|
33
|
+
weight: z.ZodOptional<z.ZodNumber>;
|
|
34
|
+
threshold: z.ZodOptional<z.ZodNumber>;
|
|
35
|
+
name: z.ZodOptional<z.ZodString>;
|
|
36
|
+
type: z.ZodLiteral<"regex">;
|
|
37
|
+
pattern: z.ZodString;
|
|
38
|
+
flags: z.ZodOptional<z.ZodString>;
|
|
39
|
+
against: z.ZodDefault<z.ZodEnum<{
|
|
40
|
+
"transcript-all": "transcript-all";
|
|
41
|
+
"transcript-final": "transcript-final";
|
|
42
|
+
}>>;
|
|
43
|
+
}, z.core.$strict>;
|
|
44
|
+
export type RegexConfig = z.infer<typeof RegexConfigSchema>;
|
|
45
|
+
export declare const regexAssertion: AssertionImpl<RegexConfig>;
|
|
46
|
+
//# sourceMappingURL=output-checks.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"output-checks.d.ts","sourceRoot":"","sources":["../../../src/assertions/core/output-checks.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,aAAa,EAAiB,MAAM,qBAAqB,CAAC;AA0CxE,eAAO,MAAM,oBAAoB;;;;;;;;;;;kBAOtB,CAAC;AACZ,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAElE,eAAO,MAAM,iBAAiB,EAAE,aAAa,CAAC,cAAc,CAY3D,CAAC;AAEF,eAAO,MAAM,uBAAuB;;;;;;;;;;;kBAOzB,CAAC;AACZ,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAC;AAExE,eAAO,MAAM,oBAAoB,EAAE,aAAa,CAAC,iBAAiB,CAcjE,CAAC;AAEF,eAAO,MAAM,iBAAiB;;;;;;;;;;;;kBAc1B,CAAC;AACL,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAE5D,eAAO,MAAM,cAAc,EAAE,aAAa,CAAC,WAAW,CAuBrD,CAAC"}
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { baseAssertionFields as baseFields } from "./helpers.js";
|
|
3
|
+
import { inspectSafeRegexes, testSafeRegex } from "./safe-regex.js";
|
|
4
|
+
const MAX_REGEX_PATTERN_CHARS = 2_000;
|
|
5
|
+
const MAX_REGEX_TEXT_CHARS = 1024 * 1024;
|
|
6
|
+
// Skip `responded` events: they carry the answerer's reply, not agent output,
|
|
7
|
+
// so sampling them would grade the persona's words instead of the agent's.
|
|
8
|
+
const agentMessageText = (e) => {
|
|
9
|
+
if (e?.type === "progress" && e.kind === "agent-message") {
|
|
10
|
+
const payload = e.payload;
|
|
11
|
+
if (typeof payload?.text === "string")
|
|
12
|
+
return payload.text;
|
|
13
|
+
}
|
|
14
|
+
return undefined;
|
|
15
|
+
};
|
|
16
|
+
const finalAssistantText = (events) => {
|
|
17
|
+
for (let i = events.length - 1; i >= 0; i--) {
|
|
18
|
+
const text = agentMessageText(events[i]);
|
|
19
|
+
if (text !== undefined)
|
|
20
|
+
return text;
|
|
21
|
+
}
|
|
22
|
+
return "";
|
|
23
|
+
};
|
|
24
|
+
const allAssistantText = (events) => {
|
|
25
|
+
const parts = [];
|
|
26
|
+
for (const e of events) {
|
|
27
|
+
const text = agentMessageText(e);
|
|
28
|
+
if (text !== undefined)
|
|
29
|
+
parts.push(text);
|
|
30
|
+
}
|
|
31
|
+
return parts.join("\n");
|
|
32
|
+
};
|
|
33
|
+
const TARGETS = ["transcript-final", "transcript-all"];
|
|
34
|
+
const targetSchema = z.enum(TARGETS).default("transcript-final");
|
|
35
|
+
const sample = (run, against) => against === "transcript-all" ? allAssistantText(run.events) : finalAssistantText(run.events);
|
|
36
|
+
// Empty text vacuously passes contains (and vacuously fails not-contains);
|
|
37
|
+
// reject it at authoring time like the other no-op configs.
|
|
38
|
+
export const ContainsConfigSchema = z
|
|
39
|
+
.object({
|
|
40
|
+
type: z.literal("contains"),
|
|
41
|
+
text: z.string().min(1),
|
|
42
|
+
against: targetSchema,
|
|
43
|
+
...baseFields,
|
|
44
|
+
})
|
|
45
|
+
.strict();
|
|
46
|
+
export const containsAssertion = {
|
|
47
|
+
type: "contains",
|
|
48
|
+
configSchema: ContainsConfigSchema,
|
|
49
|
+
evaluate: async (config, run) => {
|
|
50
|
+
const actual = sample(run, config.against);
|
|
51
|
+
const passed = actual.includes(config.text);
|
|
52
|
+
return {
|
|
53
|
+
passed,
|
|
54
|
+
score: passed ? 1 : 0,
|
|
55
|
+
comment: passed ? `contains '${config.text}'` : `does not contain '${config.text}'`,
|
|
56
|
+
};
|
|
57
|
+
},
|
|
58
|
+
};
|
|
59
|
+
export const NotContainsConfigSchema = z
|
|
60
|
+
.object({
|
|
61
|
+
type: z.literal("not-contains"),
|
|
62
|
+
text: z.string().min(1),
|
|
63
|
+
against: targetSchema,
|
|
64
|
+
...baseFields,
|
|
65
|
+
})
|
|
66
|
+
.strict();
|
|
67
|
+
export const notContainsAssertion = {
|
|
68
|
+
type: "not-contains",
|
|
69
|
+
configSchema: NotContainsConfigSchema,
|
|
70
|
+
evaluate: async (config, run) => {
|
|
71
|
+
const actual = sample(run, config.against);
|
|
72
|
+
const passed = !actual.includes(config.text);
|
|
73
|
+
return {
|
|
74
|
+
passed,
|
|
75
|
+
score: passed ? 1 : 0,
|
|
76
|
+
comment: passed
|
|
77
|
+
? `does not contain '${config.text}'`
|
|
78
|
+
: `unexpectedly contains '${config.text}'`,
|
|
79
|
+
};
|
|
80
|
+
},
|
|
81
|
+
};
|
|
82
|
+
export const RegexConfigSchema = z
|
|
83
|
+
.object({
|
|
84
|
+
type: z.literal("regex"),
|
|
85
|
+
pattern: z.string().max(MAX_REGEX_PATTERN_CHARS),
|
|
86
|
+
flags: z.string().max(16).optional(),
|
|
87
|
+
against: targetSchema,
|
|
88
|
+
...baseFields,
|
|
89
|
+
})
|
|
90
|
+
.strict()
|
|
91
|
+
.superRefine(async (config, ctx) => {
|
|
92
|
+
const [inspection] = await inspectSafeRegexes([config.pattern], config.flags ?? "");
|
|
93
|
+
if (inspection && "error" in inspection) {
|
|
94
|
+
ctx.addIssue({ code: "custom", path: ["pattern"], message: inspection.error });
|
|
95
|
+
}
|
|
96
|
+
});
|
|
97
|
+
export const regexAssertion = {
|
|
98
|
+
type: "regex",
|
|
99
|
+
configSchema: RegexConfigSchema,
|
|
100
|
+
evaluate: async (config, run, ctx) => {
|
|
101
|
+
const actual = sample(run, config.against);
|
|
102
|
+
if (actual.length > MAX_REGEX_TEXT_CHARS) {
|
|
103
|
+
return {
|
|
104
|
+
passed: false,
|
|
105
|
+
score: 0,
|
|
106
|
+
comment: `transcript exceeds the ${MAX_REGEX_TEXT_CHARS}-character regex assertion limit`,
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
const passed = await testSafeRegex(config.pattern, config.flags ?? "", actual, {
|
|
110
|
+
abortSignal: ctx?.abortSignal,
|
|
111
|
+
});
|
|
112
|
+
return {
|
|
113
|
+
passed,
|
|
114
|
+
score: passed ? 1 : 0,
|
|
115
|
+
comment: passed
|
|
116
|
+
? `matches /${config.pattern}/${config.flags ?? ""}`
|
|
117
|
+
: `does not match /${config.pattern}/${config.flags ?? ""}`,
|
|
118
|
+
};
|
|
119
|
+
},
|
|
120
|
+
};
|
|
121
|
+
//# sourceMappingURL=output-checks.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"output-checks.js","sourceRoot":"","sources":["../../../src/assertions/core/output-checks.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { type AssertionImpl, type AssertionResult, type Run } from "../../core/index.js";
|
|
3
|
+
export type PredicateFn = (run: Run) => boolean | AssertionResult | Promise<boolean | AssertionResult>;
|
|
4
|
+
export declare const PredicateConfigSchema: z.ZodObject<{
|
|
5
|
+
id: z.ZodOptional<z.ZodString>;
|
|
6
|
+
weight: z.ZodOptional<z.ZodNumber>;
|
|
7
|
+
threshold: z.ZodOptional<z.ZodNumber>;
|
|
8
|
+
name: z.ZodOptional<z.ZodString>;
|
|
9
|
+
type: z.ZodLiteral<"predicate">;
|
|
10
|
+
fn: z.ZodCustom<PredicateFn, PredicateFn>;
|
|
11
|
+
}, z.core.$strict>;
|
|
12
|
+
export type PredicateConfig = z.infer<typeof PredicateConfigSchema>;
|
|
13
|
+
export declare const predicateAssertion: AssertionImpl<PredicateConfig>;
|
|
14
|
+
//# sourceMappingURL=predicate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"predicate.d.ts","sourceRoot":"","sources":["../../../src/assertions/core/predicate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EACL,KAAK,aAAa,EAClB,KAAK,eAAe,EAEpB,KAAK,GAAG,EACT,MAAM,qBAAqB,CAAC;AAG7B,MAAM,MAAM,WAAW,GAAG,CACxB,GAAG,EAAE,GAAG,KACL,OAAO,GAAG,eAAe,GAAG,OAAO,CAAC,OAAO,GAAG,eAAe,CAAC,CAAC;AAEpE,eAAO,MAAM,qBAAqB;;;;;;;kBAMvB,CAAC;AACZ,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC;AAKpE,eAAO,MAAM,kBAAkB,EAAE,aAAa,CAAC,eAAe,CAyC7D,CAAC"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { AssertionResultSchema, } from "../../core/index.js";
|
|
3
|
+
import { baseAssertionFields } from "./helpers.js";
|
|
4
|
+
export const PredicateConfigSchema = z
|
|
5
|
+
.object({
|
|
6
|
+
type: z.literal("predicate"),
|
|
7
|
+
fn: z.custom((v) => typeof v === "function"),
|
|
8
|
+
...baseAssertionFields,
|
|
9
|
+
})
|
|
10
|
+
.strict();
|
|
11
|
+
const isAssertionResult = (v) => AssertionResultSchema.safeParse(v).success;
|
|
12
|
+
export const predicateAssertion = {
|
|
13
|
+
type: "predicate",
|
|
14
|
+
configSchema: PredicateConfigSchema,
|
|
15
|
+
evaluate: async (config, run) => {
|
|
16
|
+
if (typeof config.fn !== "function") {
|
|
17
|
+
const errorMessage = "predicate.fn is not a function";
|
|
18
|
+
return {
|
|
19
|
+
passed: false,
|
|
20
|
+
score: 0,
|
|
21
|
+
comment: errorMessage,
|
|
22
|
+
errorMessage,
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
try {
|
|
26
|
+
const result = await config.fn(run);
|
|
27
|
+
if (isAssertionResult(result))
|
|
28
|
+
return result;
|
|
29
|
+
if (typeof result !== "boolean") {
|
|
30
|
+
const errorMessage = "predicate returned an invalid result; expected boolean or AssertionResult";
|
|
31
|
+
return {
|
|
32
|
+
passed: false,
|
|
33
|
+
score: 0,
|
|
34
|
+
comment: errorMessage,
|
|
35
|
+
errorMessage,
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
return {
|
|
39
|
+
passed: result,
|
|
40
|
+
score: result ? 1 : 0,
|
|
41
|
+
comment: result ? "predicate returned true" : "predicate returned false",
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
catch (err) {
|
|
45
|
+
const errorMessage = `predicate threw: ${err instanceof Error ? err.message : String(err)}`;
|
|
46
|
+
return {
|
|
47
|
+
passed: false,
|
|
48
|
+
score: 0,
|
|
49
|
+
comment: errorMessage,
|
|
50
|
+
errorMessage,
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
},
|
|
54
|
+
};
|
|
55
|
+
//# sourceMappingURL=predicate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"predicate.js","sourceRoot":"","sources":["../../../src/assertions/core/predicate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAGL,qBAAqB,GAEtB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAMnD,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC;KACnC,MAAM,CAAC;IACN,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC;IAC5B,EAAE,EAAE,CAAC,CAAC,MAAM,CAAc,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,UAAU,CAAC;IACzD,GAAG,mBAAmB;CACvB,CAAC;KACD,MAAM,EAAE,CAAC;AAGZ,MAAM,iBAAiB,GAAG,CAAC,CAAU,EAAwB,EAAE,CAC7D,qBAAqB,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;AAE7C,MAAM,CAAC,MAAM,kBAAkB,GAAmC;IAChE,IAAI,EAAE,WAAW;IACjB,YAAY,EAAE,qBAAqB;IACnC,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE;QAC9B,IAAI,OAAO,MAAM,CAAC,EAAE,KAAK,UAAU,EAAE,CAAC;YACpC,MAAM,YAAY,GAAG,gCAAgC,CAAC;YACtD,OAAO;gBACL,MAAM,EAAE,KAAK;gBACb,KAAK,EAAE,CAAC;gBACR,OAAO,EAAE,YAAY;gBACrB,YAAY;aACb,CAAC;QACJ,CAAC;QACD,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;YACpC,IAAI,iBAAiB,CAAC,MAAM,CAAC;gBAAE,OAAO,MAAM,CAAC;YAC7C,IAAI,OAAO,MAAM,KAAK,SAAS,EAAE,CAAC;gBAChC,MAAM,YAAY,GAChB,2EAA2E,CAAC;gBAC9E,OAAO;oBACL,MAAM,EAAE,KAAK;oBACb,KAAK,EAAE,CAAC;oBACR,OAAO,EAAE,YAAY;oBACrB,YAAY;iBACb,CAAC;YACJ,CAAC;YACD,OAAO;gBACL,MAAM,EAAE,MAAM;gBACd,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBACrB,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC,0BAA0B;aACzE,CAAC;QACJ,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,YAAY,GAAG,oBAAoB,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;YAC5F,OAAO;gBACL,MAAM,EAAE,KAAK;gBACb,KAAK,EAAE,CAAC;gBACR,OAAO,EAAE,YAAY;gBACrB,YAAY;aACb,CAAC;QACJ,CAAC;IACH,CAAC;CACF,CAAC"}
|