niceeval 0.17.1 → 0.18.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.
Files changed (88) hide show
  1. package/INDEX.md +1 -0
  2. package/dist/adapter.cjs +4 -0
  3. package/dist/adapter.cjs.map +1 -1
  4. package/dist/adapter.d.cts +25 -14
  5. package/dist/adapter.d.mts +25 -14
  6. package/dist/adapter.d.ts +25 -14
  7. package/dist/assertions/measurements.cjs +45 -0
  8. package/dist/assertions/measurements.cjs.map +1 -0
  9. package/dist/assertions/measurements.d.cts +17 -0
  10. package/dist/assertions/measurements.d.mts +17 -0
  11. package/dist/assertions/measurements.d.ts +17 -0
  12. package/dist/assertions/measurements.js +8 -0
  13. package/dist/assertions/measurements.js.map +1 -0
  14. package/dist/define.cjs +2 -0
  15. package/dist/define.cjs.map +1 -1
  16. package/dist/expect/index.cjs +4 -1
  17. package/dist/expect/index.cjs.map +1 -1
  18. package/dist/expect/index.d.cts +2 -0
  19. package/dist/expect/index.d.mts +2 -0
  20. package/dist/expect/index.d.ts +2 -0
  21. package/dist/expect/index.js +20 -16
  22. package/dist/expect/index.mjs +20 -16
  23. package/dist/experiment/host/operations.cjs +3 -1
  24. package/dist/experiment/host/operations.cjs.map +1 -1
  25. package/dist/experiment/host/runtime.cjs +3 -1
  26. package/dist/experiment/host/runtime.cjs.map +1 -1
  27. package/dist/experiment/host/teardown.cjs +1 -0
  28. package/dist/experiment/host/teardown.cjs.map +1 -1
  29. package/dist/index.cjs +3 -19
  30. package/dist/index.cjs.map +1 -1
  31. package/dist/index.d.cts +2 -6
  32. package/dist/index.d.mts +2 -6
  33. package/dist/index.d.ts +2 -6
  34. package/dist/index.js +12 -34
  35. package/dist/index.mjs +12 -34
  36. package/dist/model-slots.cjs +19 -0
  37. package/dist/model-slots.cjs.map +1 -1
  38. package/dist/model-slots.d.cts +7 -0
  39. package/dist/model-slots.d.mts +7 -0
  40. package/dist/model-slots.d.ts +7 -0
  41. package/dist/model-slots.js +8 -2
  42. package/dist/o11y/eval-usage.cjs.map +1 -1
  43. package/dist/o11y/eval-usage.d.cts +4 -4
  44. package/dist/o11y/eval-usage.d.mts +4 -4
  45. package/dist/o11y/eval-usage.d.ts +4 -4
  46. package/dist/runner/adoption.cjs +1 -0
  47. package/dist/runner/adoption.cjs.map +1 -1
  48. package/dist/runner/eval-selection.cjs +15 -1
  49. package/dist/runner/eval-selection.cjs.map +1 -1
  50. package/dist/runner/eval-selection.d.cts +4 -0
  51. package/dist/runner/eval-selection.d.mts +4 -0
  52. package/dist/runner/eval-selection.d.ts +4 -0
  53. package/dist/runner/lock.cjs +1 -3
  54. package/dist/runner/lock.cjs.map +1 -1
  55. package/dist/runner/lock.d.cts +0 -2
  56. package/dist/runner/lock.d.mts +0 -2
  57. package/dist/runner/lock.d.ts +0 -2
  58. package/dist/runner/lock.js +14 -16
  59. package/dist/runner/types.cjs.map +1 -1
  60. package/dist/runner/types.d.cts +1 -0
  61. package/dist/runner/types.d.mts +1 -0
  62. package/dist/runner/types.d.ts +1 -0
  63. package/dist/sandbox/docker-profile/registry.cjs +1 -2
  64. package/dist/sandbox/docker-profile/registry.cjs.map +1 -1
  65. package/dist/sandbox/docker-profile/registry.d.cts +0 -1
  66. package/dist/sandbox/docker-profile/registry.d.mts +0 -1
  67. package/dist/sandbox/docker-profile/registry.d.ts +0 -1
  68. package/dist/sandbox/docker-profile/registry.js +2 -4
  69. package/dist/sandbox/index.cjs +1 -2
  70. package/dist/sandbox/index.cjs.map +1 -1
  71. package/dist/sandbox/index.d.cts +1 -1
  72. package/dist/sandbox/index.d.mts +1 -1
  73. package/dist/sandbox/index.d.ts +1 -1
  74. package/dist/sandbox/index.js +32 -34
  75. package/dist/sandbox/index.mjs +32 -34
  76. package/docs-site/zh/examples/integrations/ai-sdk-v7.mdx +5 -5
  77. package/docs-site/zh/examples/integrations/claude-sdk.mdx +5 -5
  78. package/docs-site/zh/examples/integrations/langgraph.mdx +3 -3
  79. package/docs-site/zh/examples/integrations/pi-sdk.mdx +5 -5
  80. package/docs-site/zh/explanation/judge.mdx +1 -1
  81. package/docs-site/zh/index.mdx +18 -0
  82. package/docs-site/zh/introduction.mdx +2 -1
  83. package/docs-site/zh/reference/define-agent.mdx +2 -2
  84. package/docs-site/zh/tutorials/authoring.mdx +2 -1
  85. package/docs-site/zh/tutorials/control-run-cost.mdx +40 -0
  86. package/docs-site/zh/tutorials/upgrade-0-18.mdx +64 -0
  87. package/docs-site/zh/tutorials/verify-judge.mdx +2 -1
  88. package/package.json +1 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"measurements.js","sourceRoot":"","sources":["measurements.ts"],"names":[],"mappings":"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","sourcesContent":["import type { NumericMaterial } from \"./match.ts\";\n/** Preserve a missing observation instead of coercing null to zero. */\nexport function measured(value: number | null, options: {\n readonly unavailable: string;\n}): NumericMaterial {\n if (typeof options?.unavailable !== \"string\" || options.unavailable.trim().length === 0) {\n throw new TypeError(\"measured() requires a non-empty unavailable reason.\");\n }\n if (value === null)\n return Object.freeze({ state: \"unavailable\", reason: options.unavailable });\n if (typeof value !== \"number\")\n throw new TypeError(\"measured() requires a number or null.\");\n return Number.isFinite(value)\n ? Object.freeze({ state: \"exact\", value })\n : Object.freeze({ state: \"unavailable\", reason: \"non-finite-number\" });\n}\nexport type QuantileMethod = \"linear\" | \"nearest-rank\";\nexport type QuantileMaterial = NumericMaterial & {\n readonly statistics: {\n readonly sampleCount: number;\n readonly probability: number;\n readonly method: QuantileMethod;\n };\n};\n/** Compute a quantile without changing or retaining the samples. Empty or invalid samples remain unavailable. */\nexport function quantile(samples: readonly number[], p: number, options: {\n readonly method?: QuantileMethod;\n} = {}): QuantileMaterial {\n if (!Array.isArray(samples))\n throw new TypeError(\"quantile() requires an array of samples.\");\n if (!Number.isFinite(p) || p < 0 || p > 1)\n throw new TypeError(\"quantile() probability must be a finite number in [0, 1].\");\n const method = options.method ?? \"linear\";\n if (method !== \"linear\" && method !== \"nearest-rank\")\n throw new TypeError(\"quantile() method must be linear or nearest-rank.\");\n const statistics = Object.freeze({ sampleCount: samples.length, probability: p, method });\n if (samples.length === 0)\n return Object.freeze({ state: \"unavailable\", reason: \"no-samples\", statistics });\n for (const sample of samples) {\n if (!Number.isFinite(sample))\n return Object.freeze({ state: \"unavailable\", reason: \"non-finite-sample\", statistics });\n }\n const sorted = [...samples].sort((a, b) => a - b);\n const position = (sorted.length - 1) * p;\n const lower = sorted[Math.floor(position)]!;\n const upper = sorted[Math.ceil(position)]!;\n const fraction = position - Math.floor(position);\n const delta = upper - lower;\n const value = method === \"nearest-rank\"\n ? sorted[Math.max(0, Math.ceil(sorted.length * p) - 1)]!\n : Number.isFinite(delta) ? lower + delta * fraction : lower * (1 - fraction) + upper * fraction;\n return Object.freeze({ state: \"exact\", value, statistics });\n}\n"]}
@@ -0,0 +1,17 @@
1
+ import type { NumericMaterial } from "./match.cjs";
2
+ /** Preserve a missing observation instead of coercing null to zero. */
3
+ export declare function measured(value: number | null, options: {
4
+ readonly unavailable: string;
5
+ }): NumericMaterial;
6
+ export type QuantileMethod = "linear" | "nearest-rank";
7
+ export type QuantileMaterial = NumericMaterial & {
8
+ readonly statistics: {
9
+ readonly sampleCount: number;
10
+ readonly probability: number;
11
+ readonly method: QuantileMethod;
12
+ };
13
+ };
14
+ /** Compute a quantile without changing or retaining the samples. Empty or invalid samples remain unavailable. */
15
+ export declare function quantile(samples: readonly number[], p: number, options?: {
16
+ readonly method?: QuantileMethod;
17
+ }): QuantileMaterial;
@@ -0,0 +1,17 @@
1
+ import type { NumericMaterial } from "./match.mjs";
2
+ /** Preserve a missing observation instead of coercing null to zero. */
3
+ export declare function measured(value: number | null, options: {
4
+ readonly unavailable: string;
5
+ }): NumericMaterial;
6
+ export type QuantileMethod = "linear" | "nearest-rank";
7
+ export type QuantileMaterial = NumericMaterial & {
8
+ readonly statistics: {
9
+ readonly sampleCount: number;
10
+ readonly probability: number;
11
+ readonly method: QuantileMethod;
12
+ };
13
+ };
14
+ /** Compute a quantile without changing or retaining the samples. Empty or invalid samples remain unavailable. */
15
+ export declare function quantile(samples: readonly number[], p: number, options?: {
16
+ readonly method?: QuantileMethod;
17
+ }): QuantileMaterial;
@@ -0,0 +1,17 @@
1
+ import type { NumericMaterial } from "./match.js";
2
+ /** Preserve a missing observation instead of coercing null to zero. */
3
+ export declare function measured(value: number | null, options: {
4
+ readonly unavailable: string;
5
+ }): NumericMaterial;
6
+ export type QuantileMethod = "linear" | "nearest-rank";
7
+ export type QuantileMaterial = NumericMaterial & {
8
+ readonly statistics: {
9
+ readonly sampleCount: number;
10
+ readonly probability: number;
11
+ readonly method: QuantileMethod;
12
+ };
13
+ };
14
+ /** Compute a quantile without changing or retaining the samples. Empty or invalid samples remain unavailable. */
15
+ export declare function quantile(samples: readonly number[], p: number, options?: {
16
+ readonly method?: QuantileMethod;
17
+ }): QuantileMaterial;
@@ -0,0 +1,8 @@
1
+ import { createRequire as __niceevalCreateRequire } from "node:module";
2
+ const __niceevalRequire = __niceevalCreateRequire(import.meta.url);
3
+ const __niceevalCanonical = __niceevalRequire("./measurements.cjs");
4
+ const __niceevalExport0 = __niceevalCanonical["measured"];
5
+ export { __niceevalExport0 as measured };
6
+ const __niceevalExport1 = __niceevalCanonical["quantile"];
7
+ export { __niceevalExport1 as quantile };
8
+ //# sourceMappingURL=measurements.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"measurements.js","sources":[],"names":[],"mappings":""}
package/dist/define.cjs CHANGED
@@ -216,6 +216,8 @@ function defineExperiment(def) {
216
216
  throw new TypeError("Experiment models is only supported by custom Adapters.");
217
217
  }
218
218
  const models = adapter.kind === "custom" ? (0, model_slots_ts_1.normalizeModelSlots)(def) : undefined;
219
+ if (adapter.kind === "custom")
220
+ (0, model_slots_ts_1.assertRequiredModelSlots)(adapter.requiredModelSlots, models, `Adapter "${adapter.name}"`);
219
221
  const judgeRuntime = def.judgeRuntime === undefined
220
222
  ? undefined
221
223
  : normalizeDefinitionJudge(def.judgeRuntime, "defineExperiment() judgeRuntime");
@@ -1 +1 @@
1
- {"version":3,"file":"define.js","sourceRoot":"","sources":["define.ts"],"names":[],"mappings":"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","sourcesContent":["// @concord-file ne-surface-definition-entry\n// @concord-implements docs/feature/plugins/library.md\nimport type { Adapter } from \"./adapter.ts\";\nimport { normalizeModelSlots } from \"./model-slots.ts\";\nimport { parseAdapterFlags } from \"./adapter-flags.ts\";\nimport { decodeExperimentFlags } from \"./experiment/flags.ts\";\n// 定义入口:把用户对象规格化成核心认得的形状。路径即身份 —— 这里禁止手写 id,\n// 由发现阶段从文件路径推导(见 runner/discover.ts)。\nimport type { DirectAgent, DirectAgentDef, Config, EvalInput, EvalGroupDefinition, EvalGroupInput, EvalDefinition, EvalDefinitionFields, ExperimentDefinition, ExperimentInput, SharedStateConfig, SandboxCacheConfig, SandboxAgent, SandboxAgentDef, ScoreEvalInput, ScoreTestContext, TestContext, JsonValue, } from \"./types.ts\";\nimport { normalizeJudgeSelection } from \"./runner/judge-config.ts\";\nimport { isJudgeProvider } from \"./judge/provider.ts\";\nimport { MigrationRequiredError, captureMigrationSource } from \"./error-assistance/index.ts\";\nimport { brandEvalDefinition, brandEvalGroupDefinition, brandExperimentDefinition, isEvalDefinition, } from \"./types.ts\";\nimport { customProviderSandbox, isSandboxLayer, sandboxLayerStateOf, type CustomProviderSandboxOptions, type SandboxLayer, } from \"./sandbox/layer.ts\";\nimport { Result, Schema } from \"effect\";\nimport { assertEvidenceCoverage } from \"./assertions/coverage.ts\";\nimport { effectAgentCallback, registerAgentEffectRuntime, type InternalDirectAgentDefinition, type InternalSandboxAgentDefinition, } from \"./agents/effect-runtime.ts\";\nimport { isPluginInstance, pluginInstanceDataOf, type PluginInstance, type PluginOwner } from \"./plugin/contracts.ts\";\n/** Recognize only the retired flat configuration, without evaluating getters. */\nfunction normalizeDefinitionJudge(value: unknown, label: string) {\n if (!isJudgeProvider(value) && typeof value === \"object\" && value !== null && !Array.isArray(value)) {\n const prototype = Object.getPrototypeOf(value);\n const legacyKeys = [\"model\", \"baseUrl\", \"apiKeyEnv\", \"timeoutMs\", \"maxOutputTokens\"];\n if ((prototype === Object.prototype || prototype === null) && Reflect.ownKeys(value).every((key) => {\n const descriptor = Reflect.getOwnPropertyDescriptor(value, key);\n return typeof key === \"string\" && legacyKeys.includes(key) && descriptor !== undefined && \"value\" in descriptor;\n })) {\n throw new MigrationRequiredError({ occurrences: [{\n guideId: \"judge-provider\",\n subject: label.replace(\"() \", \".\"),\n source: captureMigrationSource(),\n }] });\n }\n }\n return normalizeJudgeSelection(value, label);\n}\n// 发现期必须区分 defineScoreEval 的真正产物与运行时手写 `{ evaluationKind: \"score\" }` 的裸对象。\n// WeakSet 是模块私有来源证明;Definition 本身另有 types.ts 的私有 symbol 品牌供类型层使用。\nconst definedScoreEvals = new WeakSet<object>();\n/** Define a closed set of real Eval definitions sharing one physical Sandbox. */\nexport function defineEvalGroup<const Sandbox extends SandboxLayer | undefined>(input: EvalGroupInput<Sandbox>): EvalGroupDefinition {\n if (!Array.isArray(input.evals) || input.evals.length === 0) {\n throw new TypeError(\"defineEvalGroup evals must be a non-empty array of defineEval()/defineScoreEval() definitions.\");\n }\n input.evals.forEach((member, index) => {\n if (!isEvalDefinition(member)) {\n throw new TypeError(`defineEvalGroup evals[${index}] must be the object returned by defineEval() or defineScoreEval().`);\n }\n });\n assertSandboxLayer(input.sandbox, \"defineEvalGroup\");\n if (input.onUnavailable !== \"stop-group\" && input.onUnavailable !== \"replace-sandbox\") {\n throw new TypeError(\"defineEvalGroup onUnavailable must be \\\"stop-group\\\" or \\\"replace-sandbox\\\".\");\n }\n const [first, ...rest] = input.evals;\n return brandEvalGroupDefinition({\n evals: Object.freeze([first, ...rest]),\n onUnavailable: input.onUnavailable,\n ...(input.sandbox ? { sandbox: input.sandbox } : {}),\n ...(input.plugins === undefined ? {} : { plugins: normalizePlugins(input.plugins, \"defineEvalGroup plugins\", \"group\") }),\n });\n}\n/** @internal 仅供 discoverEvals 验证 score 题型来源。 */\nexport function isDefinedScoreEval(value: object): boolean {\n return definedScoreEvals.has(value);\n}\n/** 沙箱型 agent:在沙箱里 spawn 一个 coding agent 的 CLI,跑完读回 transcript。 */\nexport function defineSandboxAgent(def: SandboxAgentDef): SandboxAgent {\n if (!def.name)\n throw new Error(`defineSandboxAgent requires name.`);\n assertEvidenceCoverage(def.evidenceCoverage, \"defineSandboxAgent\");\n if (def.ensure === undefined)\n throw new Error(`defineSandboxAgent requires an ensure declaration.`);\n const ensure = Array.isArray(def.ensure) ? def.ensure : [def.ensure];\n if (ensure.length === 0)\n throw new Error(`defineSandboxAgent requires an ensure declaration.`);\n if (def.sandbox !== undefined) {\n if (!isSandboxLayer(def.sandbox)) {\n throw new TypeError(\"defineSandboxAgent sandbox must be a SandboxLayer created by sandboxLayer().\");\n }\n if (sandboxLayerStateOf(def.sandbox).kind !== \"command-only\") {\n throw new TypeError(\"defineSandboxAgent sandbox must be command-only; an Agent cannot provide a Sandbox template.\");\n }\n }\n return {\n name: def.name,\n kind: \"sandbox\",\n defineEval,\n defineScoreEval,\n evidenceCoverage: def.evidenceCoverage,\n ...(def.sandbox === undefined ? {} : { sandbox: def.sandbox }),\n ensure,\n installers: def.installers ?? [],\n setup: def.setup,\n tracing: def.tracing,\n spanMapper: def.spanMapper,\n send: def.send,\n classifySendFailure: def.classifySendFailure,\n teardown: def.teardown,\n };\n}\n/** @internal Creates a Promise facade while retaining a built-in Effect runtime. */\nexport function makeSandboxAgent(def: Omit<SandboxAgentDef, \"send\" | \"setup\" | \"teardown\"> & InternalSandboxAgentDefinition): SandboxAgent {\n const { send, setup, teardown, ...publicDefinition } = def;\n const agent = defineSandboxAgent({\n ...publicDefinition,\n send: effectAgentCallback(send, (_input, context) => context.signal),\n ...(setup === undefined ? {} : {\n setup: effectAgentCallback(setup, (_sandbox, context) => context.signal),\n }),\n ...(teardown === undefined ? {} : {\n teardown: effectAgentCallback(teardown, (_sandbox, context) => context.signal),\n }),\n });\n return registerAgentEffectRuntime(agent, {\n send: send as InternalDirectAgentDefinition[\"send\"],\n sandboxSetup: setup,\n sandboxTeardown: teardown,\n });\n}\n/** Direct Agent:在 send 里直接驱动函数、SDK 或服务端点。 */\nexport function defineAgent(def: DirectAgentDef): DirectAgent {\n if (!def.name)\n throw new Error(`defineAgent requires name.`);\n assertEvidenceCoverage(def.evidenceCoverage, \"defineAgent\");\n return {\n name: def.name,\n kind: \"direct\",\n defineEval,\n defineScoreEval,\n evidenceCoverage: def.evidenceCoverage,\n setup: def.setup,\n tracing: def.tracing,\n spanMapper: def.spanMapper,\n send: def.send,\n classifySendFailure: def.classifySendFailure,\n teardown: def.teardown,\n };\n}\n/** @internal Creates a Promise facade while retaining a built-in Effect runtime. */\nexport function makeDirectAgent(def: Omit<DirectAgentDef, \"send\" | \"setup\" | \"teardown\"> & InternalDirectAgentDefinition): DirectAgent {\n const { send, setup, teardown, ...publicDefinition } = def;\n const agent = defineAgent({\n ...publicDefinition,\n send: effectAgentCallback(send, (_input, context) => context.signal),\n ...(setup === undefined ? {} : {\n setup: effectAgentCallback(setup, (context) => context.signal),\n }),\n ...(teardown === undefined ? {} : {\n teardown: effectAgentCallback(teardown, (context) => context.signal),\n }),\n });\n return registerAgentEffectRuntime(agent, {\n send,\n directSetup: setup,\n directTeardown: teardown,\n });\n}\n/** 会话型 eval(通过制:一个 eval 折叠成一分)。禁止提供 id —— 从路径推导。 */\nexport function defineEval<const Sandbox extends SandboxLayer | undefined = undefined>(def: EvalInput<Sandbox>): EvalDefinition<\"pass\", TestContext, Sandbox> {\n return defineEvalForContext(\"pass\", def);\n}\n/**\n * 计分制 eval:Fact verdict uses 与 Fact score uses 可以读取同一份证据;正常返回由 Runner\n * 自动关闭计分收集器。字段与 `defineEval` 同形,禁止提供 id,由发现期推导。\n */\nexport function defineScoreEval<const Sandbox extends SandboxLayer | undefined = undefined>(def: ScoreEvalInput<Sandbox>): EvalDefinition<\"score\", ScoreTestContext, Sandbox> {\n return defineEvalForContext(\"score\", def);\n}\ntype EvalFactoryInput<Sandbox extends SandboxLayer | undefined> = Omit<EvalInput<Sandbox> | ScoreEvalInput<Sandbox>, \"test\"> & {\n readonly test: (...args: never[]) => ReturnType<EvalDefinition<\"pass\", unknown, Sandbox>[\"test\"]>;\n};\n/** @internal Shared normalization and provenance path for root and Adapter-bound Eval factories. */\n// @concord-code ne-surface-define-eval-context\n// @concord-implements docs/feature/compile-time-contracts/use-case/three-levels.md\nexport function defineEvalForContext<Kind extends \"pass\" | \"score\", Context, const Sandbox extends SandboxLayer | undefined = undefined>(kind: Kind, def: EvalFactoryInput<Sandbox>, internalFields: Readonly<Record<PropertyKey, unknown>> = {}): EvalDefinition<Kind, Context, Sandbox> {\n const factory = kind === \"pass\" ? \"defineEval\" : \"defineScoreEval\";\n if (Object.hasOwn(def, \"id\")) {\n throw new Error(`${factory} does not accept id; ids are derived from file paths.`);\n }\n if (Object.hasOwn(def, \"evaluationKind\")) {\n throw new Error(`${factory} does not accept evaluationKind; it is always set to ${JSON.stringify(kind)}.`);\n }\n if (Object.hasOwn(def, \"configHash\")) {\n throw new Error(`${factory} does not accept configHash; configHash is computed during run planning.`);\n }\n if (typeof def.test !== \"function\") {\n throw new Error(`${factory} requires an async test(t) function.`);\n }\n assertSandboxLayer(def.sandbox, factory);\n const result = brandEvalDefinition({\n ...normalizeEvalFields(def),\n ...internalFields,\n evaluationKind: kind,\n test: def.test,\n });\n if (kind === \"score\")\n definedScoreEvals.add(result);\n return result as EvalDefinition<Kind, Context, Sandbox>;\n}\n/** 实验:可签入的运行配置(怎么跑这批 eval)。 */\nexport function defineExperiment<const A extends Adapter>(def: ExperimentInput<A>): ExperimentDefinition<A>;\n// @concord-code ne-surface-define-experiment\n// @concord-implements docs/feature/compile-time-contracts/use-case/three-levels.md\nexport function defineExperiment(def: Omit<ExperimentInput, \"flags\"> & {\n readonly flags?: unknown;\n}): ExperimentDefinition {\n if (Object.hasOwn(def, \"id\")) {\n throw new Error(`defineExperiment does not accept id; ids are derived from file paths.`);\n }\n if ((def.agent === undefined) === (def.adapter === undefined)) {\n throw new Error(`defineExperiment requires exactly one of agent or adapter.`);\n }\n const adapter = def.adapter ?? def.agent!;\n if (adapter.kind !== \"custom\" && def.models !== undefined) {\n throw new TypeError(\"Experiment models is only supported by custom Adapters.\");\n }\n const models = adapter.kind === \"custom\" ? normalizeModelSlots(def) : undefined;\n const judgeRuntime = def.judgeRuntime === undefined\n ? undefined\n : normalizeDefinitionJudge(def.judgeRuntime, \"defineExperiment() judgeRuntime\");\n assertSandboxLayer(def.sandbox, \"defineExperiment\");\n if (adapter.kind === \"custom\") {\n if (def.sandbox !== undefined || def.sandboxReuse === true || def.sandboxCache !== undefined) {\n throw new Error(`Custom Adapter experiments do not support sandbox, sandboxReuse, or sandboxCache.`);\n }\n if (def.budget !== undefined) {\n throw new Error(`Custom Adapter experiments do not support budget because Adapter usage is not collected.`);\n }\n }\n // setup 是实验级生命周期钩子(整场一次,宿主机侧,见 runner/types.ts 的 ExperimentDef.setup);\n // 传成非函数(如误把 sandbox 钩子对象塞进来)在解析时就报,不等到调度才炸。\n if (def.setup !== undefined && typeof def.setup !== \"function\") {\n throw new Error(`experiment.setup must be a function ((ctx) => void); use experiment.teardown for cleanup; to prepare the in-sandbox environment per experiment, chain .setup() hooks on the sandbox spec instead.`);\n }\n // teardown 与 setup 是同一个 Experiment lifecycle 边界。非函数值绝不能\n // 伪装成已声明的 cleanup,否则 explicit sharedState recovery 可能在没有\n // 执行补偿的情况下释放 immutable owner generation。\n if (def.teardown !== undefined && typeof def.teardown !== \"function\") {\n throw new Error(`Experiment teardown must be a function ((ctx) => void); use a function-valued paired lifecycle hook so normal cleanup and explicit sharedState recovery can both execute it.`);\n }\n // classifyFailure 是失败分类链上的实验通道(见 runner/types.ts 的 ExperimentDef.classifyFailure):\n // 传成非函数在解析时就报,不等到某条 attempt 撞死才发现这一路声明白写。\n if (def.classifyFailure !== undefined && typeof def.classifyFailure !== \"function\") {\n throw new Error(`experiment.classifyFailure must be a function ((failure) => FailureClass | undefined); it classifies failures that surface as third-party errors and must return undefined for anything it does not recognize.`);\n }\n // labels 是报告归类坐标(进 ExperimentRunInfo.labels,不透传 ctx/t):值域 string | number,\n // 解析时即校验,布尔 / 对象 / NaN 直接报错,不等到落盘或报告分组才炸。\n if (def.labels !== undefined) {\n for (const [key, value] of Object.entries(def.labels)) {\n const ok = typeof value === \"string\" || (typeof value === \"number\" && Number.isFinite(value));\n if (!ok)\n throw new Error(`experiment.labels.${key} must be a string or a finite number; labels are report-side grouping coordinates persisted verbatim into result runs.`);\n }\n }\n const sharedState = normalizeSharedState(def.sharedState);\n const sandboxCache = normalizeSandboxCache(def.sandboxCache, \"defineExperiment\");\n const { id: _derivedId, agent: _agent, adapter: _adapter, sharedState: _sharedState, sandboxCache: _sandboxCache, models: _models, ...author } = def;\n const flags = decodeExperimentFlags(def.flags === undefined ? {} : def.flags);\n return brandExperimentDefinition({\n ...author,\n ...(models === undefined ? {} : {\n models,\n model: models.default?.model ?? undefined,\n reasoningEffort: models.default?.reasoningEffort ?? undefined,\n }),\n adapter,\n ...(adapter.kind === \"custom\" ? {} : { agent: adapter }),\n flags: adapter.kind === \"custom\" && adapter.parseFlags !== undefined\n ? parseAdapterFlags(adapter.parseFlags, flags)\n : flags,\n labels: Object.freeze({ ...(def.labels ?? {}) }),\n attempts: def.attempts ?? 1,\n earlyExit: def.earlyExit ?? false,\n evals: Array.isArray(def.evals) ? Object.freeze([...def.evals]) : (def.evals ?? \"*\"),\n sandboxReuse: def.sandboxReuse === true,\n ...(judgeRuntime === undefined ? {} : { judgeRuntime }),\n ...(sharedState === undefined ? {} : { sharedState }),\n ...(sandboxCache === undefined ? {} : { sandboxCache }),\n plugins: normalizePlugins(def.plugins ?? [], \"defineExperiment plugins\", \"experiment\"),\n });\n}\nfunction normalizeSandboxCache(value: unknown, factory: \"defineConfig\" | \"defineExperiment\"): SandboxCacheConfig | undefined {\n if (value === undefined)\n return undefined;\n if (typeof value !== \"object\" || value === null || Array.isArray(value)) {\n throw new TypeError(`${factory} sandboxCache must be an object with optional setup \"use\" or \"bypass\".`);\n }\n const keys = Object.keys(value);\n const setup = Reflect.get(value, \"setup\");\n if (keys.some((key) => key !== \"setup\") ||\n (setup !== undefined && setup !== \"use\" && setup !== \"bypass\")) {\n throw new TypeError(`${factory} sandboxCache must be an object with optional setup \"use\" or \"bypass\".`);\n }\n return Object.freeze(setup === undefined ? {} : { setup });\n}\nconst SharedStateKeyPattern = /^[a-z0-9][a-z0-9._/-]{0,127}$/u;\nfunction normalizeSharedState(value: unknown): SharedStateConfig | undefined {\n if (value === undefined)\n return undefined;\n const candidate = value as {\n key?: unknown;\n };\n if (typeof value !== \"object\" ||\n value === null ||\n Array.isArray(value) ||\n !Object.hasOwn(value, \"key\") ||\n Object.keys(value).length !== 1 ||\n typeof candidate.key !== \"string\" ||\n !SharedStateKeyPattern.test(candidate.key)) {\n throw new TypeError(`experiment.sharedState must be exactly { key }, where key is a stable, non-secret string matching [a-z0-9][a-z0-9._/-]{0,127}.`);\n }\n return Object.freeze({ key: candidate.key });\n}\nfunction normalizeEvalFields<const Sandbox extends SandboxLayer | undefined>(def: EvalInput<Sandbox> | ScoreEvalInput<Sandbox>): EvalDefinitionFields<Sandbox> {\n const judge = def.judge === undefined\n ? undefined\n : normalizeDefinitionJudge(def.judge, \"defineEval() judge\");\n return {\n ...(def.description !== undefined ? { description: def.description } : {}),\n tags: Object.freeze([...(def.tags ?? [])]),\n ...(def.sandbox !== undefined ? { sandbox: def.sandbox } : {}),\n plugins: normalizePlugins(def.plugins ?? [], \"defineEval plugins\", \"eval\"),\n ...(judge !== undefined ? { judge } : {}),\n reporters: Object.freeze([...(def.reporters ?? [])]),\n ...(def.timeoutMs !== undefined ? { timeoutMs: def.timeoutMs } : {}),\n metadata: decodeJsonRecord(def.metadata ?? {}, \"Eval metadata\"),\n diff: Object.freeze({\n include: Object.freeze([...(def.diff?.include ?? [])]),\n ignore: Object.freeze([...(def.diff?.ignore ?? [])]),\n }),\n };\n}\n// @concord-code ne-surface-normalize-plugins\n// @concord-implements docs/feature/plugins/library.md\nfunction normalizePlugins<Owner extends PluginOwner>(value: readonly PluginInstance<Owner>[], label: string, owner: Owner): readonly PluginInstance<Owner>[] {\n if (!Array.isArray(value))\n throw new TypeError(`${label} must be an array.`);\n return Object.freeze(value.map((plugin, index) => {\n if (!isPluginInstance(plugin))\n throw new TypeError(`${label}[${index}] must be created by definePlugin().`);\n if (pluginInstanceDataOf(plugin)[owner] === undefined) {\n throw new TypeError(`${label}[${index}] does not support ${owner} attachment.`);\n }\n return plugin;\n }));\n}\nfunction isJsonValue(value: unknown): value is JsonValue {\n if (value === null || typeof value === \"string\" || typeof value === \"boolean\")\n return true;\n if (typeof value === \"number\")\n return Number.isFinite(value);\n if (Array.isArray(value))\n return value.every(isJsonValue);\n if (typeof value !== \"object\")\n return false;\n return Object.values(value).every(isJsonValue);\n}\nconst JsonValueSchema = Schema.declare<JsonValue>(isJsonValue);\nconst JsonRecordSchema = Schema.Record(Schema.String, JsonValueSchema);\nfunction deepFreezeJson(value: JsonValue): JsonValue {\n if (Array.isArray(value)) {\n const items: JsonValue[] = value.map(deepFreezeJson);\n Object.freeze(items);\n return items;\n }\n if (value !== null && typeof value === \"object\") {\n const record: globalThis.Record<string, JsonValue> = Object.fromEntries(Object.entries(value).map(([key, child]) => [key, deepFreezeJson(child)]));\n Object.freeze(record);\n return record;\n }\n return value;\n}\nfunction decodeJsonRecord(value: unknown, label: string): Readonly<globalThis.Record<string, JsonValue>> {\n const decoded = Schema.decodeUnknownResult(JsonRecordSchema, { errors: \"all\" })(value);\n if (Result.isFailure(decoded))\n throw new TypeError(`${label} must be JSON-compatible: ${String(decoded.failure)}`);\n return Object.freeze(Object.fromEntries(Object.entries(decoded.success).map(([key, child]) => [key, deepFreezeJson(child)])));\n}\n/**\n * `SandboxLayer` 的品牌只由 `niceeval/sandbox` 工厂写入。动态 TSX/JS 调用绕过静态类型时,\n * 不接受看似相同的裸对象,以免在 linker 阶段才得到难以定位的错误。\n */\nfunction assertSandboxLayer(value: unknown, factory: string): void {\n if (value !== undefined && !isSandboxLayer(value)) {\n throw new TypeError(`${factory} sandbox must be a SandboxLayer created by a niceeval/sandbox factory (for example dockerSandbox(), dockerComposeSandbox(), e2bSandbox(), or vercelSandbox()).`);\n }\n}\n/** 项目级配置。 */\nexport function defineConfig(config: Config): Config {\n const sandboxCache = normalizeSandboxCache(config.sandboxCache, \"defineConfig\");\n const judgeRuntime = config.judgeRuntime === undefined\n ? undefined\n : normalizeDefinitionJudge(config.judgeRuntime, \"defineConfig() judgeRuntime\");\n if (judgeRuntime !== undefined && !isJudgeProvider(judgeRuntime)) {\n throw new TypeError(\"defineConfig() judgeRuntime must be a Judge Provider created by niceeval/judge\");\n }\n return Object.freeze({\n ...config,\n ...(sandboxCache === undefined ? {} : { sandboxCache }),\n ...(judgeRuntime === undefined ? {} : { judgeRuntime }),\n });\n}\n/**\n * 自定义沙箱 provider:`create` 直接返回一个实现 `Sandbox` 接口的实例,不需要 niceeval 内置支持\n * 这个 provider 名字。用于接入 docker/vercel/e2b 之外的运行环境(自建 VM、Modal、Fly 等)。\n */\nexport function defineSandbox(def: CustomProviderSandboxOptions): SandboxLayer<\"template-bearing\"> {\n return customProviderSandbox(def);\n}\n"]}
1
+ {"version":3,"file":"define.js","sourceRoot":"","sources":["define.ts"],"names":[],"mappings":"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","sourcesContent":["// @concord-file ne-surface-definition-entry\n// @concord-implements docs/feature/plugins/library.md\nimport type { Adapter } from \"./adapter.ts\";\nimport { assertRequiredModelSlots, normalizeModelSlots } from \"./model-slots.ts\";\nimport { parseAdapterFlags } from \"./adapter-flags.ts\";\nimport { decodeExperimentFlags } from \"./experiment/flags.ts\";\n// 定义入口:把用户对象规格化成核心认得的形状。路径即身份 —— 这里禁止手写 id,\n// 由发现阶段从文件路径推导(见 runner/discover.ts)。\nimport type { DirectAgent, DirectAgentDef, Config, EvalInput, EvalGroupDefinition, EvalGroupInput, EvalDefinition, EvalDefinitionFields, ExperimentDefinition, ExperimentInput, SharedStateConfig, SandboxCacheConfig, SandboxAgent, SandboxAgentDef, ScoreEvalInput, ScoreTestContext, TestContext, JsonValue, } from \"./types.ts\";\nimport { normalizeJudgeSelection } from \"./runner/judge-config.ts\";\nimport { isJudgeProvider } from \"./judge/provider.ts\";\nimport { MigrationRequiredError, captureMigrationSource } from \"./error-assistance/index.ts\";\nimport { brandEvalDefinition, brandEvalGroupDefinition, brandExperimentDefinition, isEvalDefinition, } from \"./types.ts\";\nimport { customProviderSandbox, isSandboxLayer, sandboxLayerStateOf, type CustomProviderSandboxOptions, type SandboxLayer, } from \"./sandbox/layer.ts\";\nimport { Result, Schema } from \"effect\";\nimport { assertEvidenceCoverage } from \"./assertions/coverage.ts\";\nimport { effectAgentCallback, registerAgentEffectRuntime, type InternalDirectAgentDefinition, type InternalSandboxAgentDefinition, } from \"./agents/effect-runtime.ts\";\nimport { isPluginInstance, pluginInstanceDataOf, type PluginInstance, type PluginOwner } from \"./plugin/contracts.ts\";\n/** Recognize only the retired flat configuration, without evaluating getters. */\nfunction normalizeDefinitionJudge(value: unknown, label: string) {\n if (!isJudgeProvider(value) && typeof value === \"object\" && value !== null && !Array.isArray(value)) {\n const prototype = Object.getPrototypeOf(value);\n const legacyKeys = [\"model\", \"baseUrl\", \"apiKeyEnv\", \"timeoutMs\", \"maxOutputTokens\"];\n if ((prototype === Object.prototype || prototype === null) && Reflect.ownKeys(value).every((key) => {\n const descriptor = Reflect.getOwnPropertyDescriptor(value, key);\n return typeof key === \"string\" && legacyKeys.includes(key) && descriptor !== undefined && \"value\" in descriptor;\n })) {\n throw new MigrationRequiredError({ occurrences: [{\n guideId: \"judge-provider\",\n subject: label.replace(\"() \", \".\"),\n source: captureMigrationSource(),\n }] });\n }\n }\n return normalizeJudgeSelection(value, label);\n}\n// 发现期必须区分 defineScoreEval 的真正产物与运行时手写 `{ evaluationKind: \"score\" }` 的裸对象。\n// WeakSet 是模块私有来源证明;Definition 本身另有 types.ts 的私有 symbol 品牌供类型层使用。\nconst definedScoreEvals = new WeakSet<object>();\n/** Define a closed set of real Eval definitions sharing one physical Sandbox. */\nexport function defineEvalGroup<const Sandbox extends SandboxLayer | undefined>(input: EvalGroupInput<Sandbox>): EvalGroupDefinition {\n if (!Array.isArray(input.evals) || input.evals.length === 0) {\n throw new TypeError(\"defineEvalGroup evals must be a non-empty array of defineEval()/defineScoreEval() definitions.\");\n }\n input.evals.forEach((member, index) => {\n if (!isEvalDefinition(member)) {\n throw new TypeError(`defineEvalGroup evals[${index}] must be the object returned by defineEval() or defineScoreEval().`);\n }\n });\n assertSandboxLayer(input.sandbox, \"defineEvalGroup\");\n if (input.onUnavailable !== \"stop-group\" && input.onUnavailable !== \"replace-sandbox\") {\n throw new TypeError(\"defineEvalGroup onUnavailable must be \\\"stop-group\\\" or \\\"replace-sandbox\\\".\");\n }\n const [first, ...rest] = input.evals;\n return brandEvalGroupDefinition({\n evals: Object.freeze([first, ...rest]),\n onUnavailable: input.onUnavailable,\n ...(input.sandbox ? { sandbox: input.sandbox } : {}),\n ...(input.plugins === undefined ? {} : { plugins: normalizePlugins(input.plugins, \"defineEvalGroup plugins\", \"group\") }),\n });\n}\n/** @internal 仅供 discoverEvals 验证 score 题型来源。 */\nexport function isDefinedScoreEval(value: object): boolean {\n return definedScoreEvals.has(value);\n}\n/** 沙箱型 agent:在沙箱里 spawn 一个 coding agent 的 CLI,跑完读回 transcript。 */\nexport function defineSandboxAgent(def: SandboxAgentDef): SandboxAgent {\n if (!def.name)\n throw new Error(`defineSandboxAgent requires name.`);\n assertEvidenceCoverage(def.evidenceCoverage, \"defineSandboxAgent\");\n if (def.ensure === undefined)\n throw new Error(`defineSandboxAgent requires an ensure declaration.`);\n const ensure = Array.isArray(def.ensure) ? def.ensure : [def.ensure];\n if (ensure.length === 0)\n throw new Error(`defineSandboxAgent requires an ensure declaration.`);\n if (def.sandbox !== undefined) {\n if (!isSandboxLayer(def.sandbox)) {\n throw new TypeError(\"defineSandboxAgent sandbox must be a SandboxLayer created by sandboxLayer().\");\n }\n if (sandboxLayerStateOf(def.sandbox).kind !== \"command-only\") {\n throw new TypeError(\"defineSandboxAgent sandbox must be command-only; an Agent cannot provide a Sandbox template.\");\n }\n }\n return {\n name: def.name,\n kind: \"sandbox\",\n defineEval,\n defineScoreEval,\n evidenceCoverage: def.evidenceCoverage,\n ...(def.sandbox === undefined ? {} : { sandbox: def.sandbox }),\n ensure,\n installers: def.installers ?? [],\n setup: def.setup,\n tracing: def.tracing,\n spanMapper: def.spanMapper,\n send: def.send,\n classifySendFailure: def.classifySendFailure,\n teardown: def.teardown,\n };\n}\n/** @internal Creates a Promise facade while retaining a built-in Effect runtime. */\nexport function makeSandboxAgent(def: Omit<SandboxAgentDef, \"send\" | \"setup\" | \"teardown\"> & InternalSandboxAgentDefinition): SandboxAgent {\n const { send, setup, teardown, ...publicDefinition } = def;\n const agent = defineSandboxAgent({\n ...publicDefinition,\n send: effectAgentCallback(send, (_input, context) => context.signal),\n ...(setup === undefined ? {} : {\n setup: effectAgentCallback(setup, (_sandbox, context) => context.signal),\n }),\n ...(teardown === undefined ? {} : {\n teardown: effectAgentCallback(teardown, (_sandbox, context) => context.signal),\n }),\n });\n return registerAgentEffectRuntime(agent, {\n send: send as InternalDirectAgentDefinition[\"send\"],\n sandboxSetup: setup,\n sandboxTeardown: teardown,\n });\n}\n/** Direct Agent:在 send 里直接驱动函数、SDK 或服务端点。 */\nexport function defineAgent(def: DirectAgentDef): DirectAgent {\n if (!def.name)\n throw new Error(`defineAgent requires name.`);\n assertEvidenceCoverage(def.evidenceCoverage, \"defineAgent\");\n return {\n name: def.name,\n kind: \"direct\",\n defineEval,\n defineScoreEval,\n evidenceCoverage: def.evidenceCoverage,\n setup: def.setup,\n tracing: def.tracing,\n spanMapper: def.spanMapper,\n send: def.send,\n classifySendFailure: def.classifySendFailure,\n teardown: def.teardown,\n };\n}\n/** @internal Creates a Promise facade while retaining a built-in Effect runtime. */\nexport function makeDirectAgent(def: Omit<DirectAgentDef, \"send\" | \"setup\" | \"teardown\"> & InternalDirectAgentDefinition): DirectAgent {\n const { send, setup, teardown, ...publicDefinition } = def;\n const agent = defineAgent({\n ...publicDefinition,\n send: effectAgentCallback(send, (_input, context) => context.signal),\n ...(setup === undefined ? {} : {\n setup: effectAgentCallback(setup, (context) => context.signal),\n }),\n ...(teardown === undefined ? {} : {\n teardown: effectAgentCallback(teardown, (context) => context.signal),\n }),\n });\n return registerAgentEffectRuntime(agent, {\n send,\n directSetup: setup,\n directTeardown: teardown,\n });\n}\n/** 会话型 eval(通过制:一个 eval 折叠成一分)。禁止提供 id —— 从路径推导。 */\nexport function defineEval<const Sandbox extends SandboxLayer | undefined = undefined>(def: EvalInput<Sandbox>): EvalDefinition<\"pass\", TestContext, Sandbox> {\n return defineEvalForContext(\"pass\", def);\n}\n/**\n * 计分制 eval:Fact verdict uses 与 Fact score uses 可以读取同一份证据;正常返回由 Runner\n * 自动关闭计分收集器。字段与 `defineEval` 同形,禁止提供 id,由发现期推导。\n */\nexport function defineScoreEval<const Sandbox extends SandboxLayer | undefined = undefined>(def: ScoreEvalInput<Sandbox>): EvalDefinition<\"score\", ScoreTestContext, Sandbox> {\n return defineEvalForContext(\"score\", def);\n}\ntype EvalFactoryInput<Sandbox extends SandboxLayer | undefined> = Omit<EvalInput<Sandbox> | ScoreEvalInput<Sandbox>, \"test\"> & {\n readonly test: (...args: never[]) => ReturnType<EvalDefinition<\"pass\", unknown, Sandbox>[\"test\"]>;\n};\n/** @internal Shared normalization and provenance path for root and Adapter-bound Eval factories. */\n// @concord-code ne-surface-define-eval-context\n// @concord-implements docs/feature/compile-time-contracts/use-case/three-levels.md\nexport function defineEvalForContext<Kind extends \"pass\" | \"score\", Context, const Sandbox extends SandboxLayer | undefined = undefined>(kind: Kind, def: EvalFactoryInput<Sandbox>, internalFields: Readonly<Record<PropertyKey, unknown>> = {}): EvalDefinition<Kind, Context, Sandbox> {\n const factory = kind === \"pass\" ? \"defineEval\" : \"defineScoreEval\";\n if (Object.hasOwn(def, \"id\")) {\n throw new Error(`${factory} does not accept id; ids are derived from file paths.`);\n }\n if (Object.hasOwn(def, \"evaluationKind\")) {\n throw new Error(`${factory} does not accept evaluationKind; it is always set to ${JSON.stringify(kind)}.`);\n }\n if (Object.hasOwn(def, \"configHash\")) {\n throw new Error(`${factory} does not accept configHash; configHash is computed during run planning.`);\n }\n if (typeof def.test !== \"function\") {\n throw new Error(`${factory} requires an async test(t) function.`);\n }\n assertSandboxLayer(def.sandbox, factory);\n const result = brandEvalDefinition({\n ...normalizeEvalFields(def),\n ...internalFields,\n evaluationKind: kind,\n test: def.test,\n });\n if (kind === \"score\")\n definedScoreEvals.add(result);\n return result as EvalDefinition<Kind, Context, Sandbox>;\n}\n/** 实验:可签入的运行配置(怎么跑这批 eval)。 */\nexport function defineExperiment<const A extends Adapter>(def: ExperimentInput<A>): ExperimentDefinition<A>;\n// @concord-code ne-surface-define-experiment\n// @concord-implements docs/feature/compile-time-contracts/use-case/three-levels.md\nexport function defineExperiment(def: Omit<ExperimentInput, \"flags\"> & {\n readonly flags?: unknown;\n}): ExperimentDefinition {\n if (Object.hasOwn(def, \"id\")) {\n throw new Error(`defineExperiment does not accept id; ids are derived from file paths.`);\n }\n if ((def.agent === undefined) === (def.adapter === undefined)) {\n throw new Error(`defineExperiment requires exactly one of agent or adapter.`);\n }\n const adapter = def.adapter ?? def.agent!;\n if (adapter.kind !== \"custom\" && def.models !== undefined) {\n throw new TypeError(\"Experiment models is only supported by custom Adapters.\");\n }\n const models = adapter.kind === \"custom\" ? normalizeModelSlots(def) : undefined;\n if (adapter.kind === \"custom\")\n assertRequiredModelSlots(adapter.requiredModelSlots, models, `Adapter \"${adapter.name}\"`);\n const judgeRuntime = def.judgeRuntime === undefined\n ? undefined\n : normalizeDefinitionJudge(def.judgeRuntime, \"defineExperiment() judgeRuntime\");\n assertSandboxLayer(def.sandbox, \"defineExperiment\");\n if (adapter.kind === \"custom\") {\n if (def.sandbox !== undefined || def.sandboxReuse === true || def.sandboxCache !== undefined) {\n throw new Error(`Custom Adapter experiments do not support sandbox, sandboxReuse, or sandboxCache.`);\n }\n if (def.budget !== undefined) {\n throw new Error(`Custom Adapter experiments do not support budget because Adapter usage is not collected.`);\n }\n }\n // setup 是实验级生命周期钩子(整场一次,宿主机侧,见 runner/types.ts 的 ExperimentDef.setup);\n // 传成非函数(如误把 sandbox 钩子对象塞进来)在解析时就报,不等到调度才炸。\n if (def.setup !== undefined && typeof def.setup !== \"function\") {\n throw new Error(`experiment.setup must be a function ((ctx) => void); use experiment.teardown for cleanup; to prepare the in-sandbox environment per experiment, chain .setup() hooks on the sandbox spec instead.`);\n }\n // teardown 与 setup 是同一个 Experiment lifecycle 边界。非函数值绝不能\n // 伪装成已声明的 cleanup,否则 explicit sharedState recovery 可能在没有\n // 执行补偿的情况下释放 immutable owner generation。\n if (def.teardown !== undefined && typeof def.teardown !== \"function\") {\n throw new Error(`Experiment teardown must be a function ((ctx) => void); use a function-valued paired lifecycle hook so normal cleanup and explicit sharedState recovery can both execute it.`);\n }\n // classifyFailure 是失败分类链上的实验通道(见 runner/types.ts 的 ExperimentDef.classifyFailure):\n // 传成非函数在解析时就报,不等到某条 attempt 撞死才发现这一路声明白写。\n if (def.classifyFailure !== undefined && typeof def.classifyFailure !== \"function\") {\n throw new Error(`experiment.classifyFailure must be a function ((failure) => FailureClass | undefined); it classifies failures that surface as third-party errors and must return undefined for anything it does not recognize.`);\n }\n // labels 是报告归类坐标(进 ExperimentRunInfo.labels,不透传 ctx/t):值域 string | number,\n // 解析时即校验,布尔 / 对象 / NaN 直接报错,不等到落盘或报告分组才炸。\n if (def.labels !== undefined) {\n for (const [key, value] of Object.entries(def.labels)) {\n const ok = typeof value === \"string\" || (typeof value === \"number\" && Number.isFinite(value));\n if (!ok)\n throw new Error(`experiment.labels.${key} must be a string or a finite number; labels are report-side grouping coordinates persisted verbatim into result runs.`);\n }\n }\n const sharedState = normalizeSharedState(def.sharedState);\n const sandboxCache = normalizeSandboxCache(def.sandboxCache, \"defineExperiment\");\n const { id: _derivedId, agent: _agent, adapter: _adapter, sharedState: _sharedState, sandboxCache: _sandboxCache, models: _models, ...author } = def;\n const flags = decodeExperimentFlags(def.flags === undefined ? {} : def.flags);\n return brandExperimentDefinition({\n ...author,\n ...(models === undefined ? {} : {\n models,\n model: models.default?.model ?? undefined,\n reasoningEffort: models.default?.reasoningEffort ?? undefined,\n }),\n adapter,\n ...(adapter.kind === \"custom\" ? {} : { agent: adapter }),\n flags: adapter.kind === \"custom\" && adapter.parseFlags !== undefined\n ? parseAdapterFlags(adapter.parseFlags, flags)\n : flags,\n labels: Object.freeze({ ...(def.labels ?? {}) }),\n attempts: def.attempts ?? 1,\n earlyExit: def.earlyExit ?? false,\n evals: Array.isArray(def.evals) ? Object.freeze([...def.evals]) : (def.evals ?? \"*\"),\n sandboxReuse: def.sandboxReuse === true,\n ...(judgeRuntime === undefined ? {} : { judgeRuntime }),\n ...(sharedState === undefined ? {} : { sharedState }),\n ...(sandboxCache === undefined ? {} : { sandboxCache }),\n plugins: normalizePlugins(def.plugins ?? [], \"defineExperiment plugins\", \"experiment\"),\n });\n}\nfunction normalizeSandboxCache(value: unknown, factory: \"defineConfig\" | \"defineExperiment\"): SandboxCacheConfig | undefined {\n if (value === undefined)\n return undefined;\n if (typeof value !== \"object\" || value === null || Array.isArray(value)) {\n throw new TypeError(`${factory} sandboxCache must be an object with optional setup \"use\" or \"bypass\".`);\n }\n const keys = Object.keys(value);\n const setup = Reflect.get(value, \"setup\");\n if (keys.some((key) => key !== \"setup\") ||\n (setup !== undefined && setup !== \"use\" && setup !== \"bypass\")) {\n throw new TypeError(`${factory} sandboxCache must be an object with optional setup \"use\" or \"bypass\".`);\n }\n return Object.freeze(setup === undefined ? {} : { setup });\n}\nconst SharedStateKeyPattern = /^[a-z0-9][a-z0-9._/-]{0,127}$/u;\nfunction normalizeSharedState(value: unknown): SharedStateConfig | undefined {\n if (value === undefined)\n return undefined;\n const candidate = value as {\n key?: unknown;\n };\n if (typeof value !== \"object\" ||\n value === null ||\n Array.isArray(value) ||\n !Object.hasOwn(value, \"key\") ||\n Object.keys(value).length !== 1 ||\n typeof candidate.key !== \"string\" ||\n !SharedStateKeyPattern.test(candidate.key)) {\n throw new TypeError(`experiment.sharedState must be exactly { key }, where key is a stable, non-secret string matching [a-z0-9][a-z0-9._/-]{0,127}.`);\n }\n return Object.freeze({ key: candidate.key });\n}\nfunction normalizeEvalFields<const Sandbox extends SandboxLayer | undefined>(def: EvalInput<Sandbox> | ScoreEvalInput<Sandbox>): EvalDefinitionFields<Sandbox> {\n const judge = def.judge === undefined\n ? undefined\n : normalizeDefinitionJudge(def.judge, \"defineEval() judge\");\n return {\n ...(def.description !== undefined ? { description: def.description } : {}),\n tags: Object.freeze([...(def.tags ?? [])]),\n ...(def.sandbox !== undefined ? { sandbox: def.sandbox } : {}),\n plugins: normalizePlugins(def.plugins ?? [], \"defineEval plugins\", \"eval\"),\n ...(judge !== undefined ? { judge } : {}),\n reporters: Object.freeze([...(def.reporters ?? [])]),\n ...(def.timeoutMs !== undefined ? { timeoutMs: def.timeoutMs } : {}),\n metadata: decodeJsonRecord(def.metadata ?? {}, \"Eval metadata\"),\n diff: Object.freeze({\n include: Object.freeze([...(def.diff?.include ?? [])]),\n ignore: Object.freeze([...(def.diff?.ignore ?? [])]),\n }),\n };\n}\n// @concord-code ne-surface-normalize-plugins\n// @concord-implements docs/feature/plugins/library.md\nfunction normalizePlugins<Owner extends PluginOwner>(value: readonly PluginInstance<Owner>[], label: string, owner: Owner): readonly PluginInstance<Owner>[] {\n if (!Array.isArray(value))\n throw new TypeError(`${label} must be an array.`);\n return Object.freeze(value.map((plugin, index) => {\n if (!isPluginInstance(plugin))\n throw new TypeError(`${label}[${index}] must be created by definePlugin().`);\n if (pluginInstanceDataOf(plugin)[owner] === undefined) {\n throw new TypeError(`${label}[${index}] does not support ${owner} attachment.`);\n }\n return plugin;\n }));\n}\nfunction isJsonValue(value: unknown): value is JsonValue {\n if (value === null || typeof value === \"string\" || typeof value === \"boolean\")\n return true;\n if (typeof value === \"number\")\n return Number.isFinite(value);\n if (Array.isArray(value))\n return value.every(isJsonValue);\n if (typeof value !== \"object\")\n return false;\n return Object.values(value).every(isJsonValue);\n}\nconst JsonValueSchema = Schema.declare<JsonValue>(isJsonValue);\nconst JsonRecordSchema = Schema.Record(Schema.String, JsonValueSchema);\nfunction deepFreezeJson(value: JsonValue): JsonValue {\n if (Array.isArray(value)) {\n const items: JsonValue[] = value.map(deepFreezeJson);\n Object.freeze(items);\n return items;\n }\n if (value !== null && typeof value === \"object\") {\n const record: globalThis.Record<string, JsonValue> = Object.fromEntries(Object.entries(value).map(([key, child]) => [key, deepFreezeJson(child)]));\n Object.freeze(record);\n return record;\n }\n return value;\n}\nfunction decodeJsonRecord(value: unknown, label: string): Readonly<globalThis.Record<string, JsonValue>> {\n const decoded = Schema.decodeUnknownResult(JsonRecordSchema, { errors: \"all\" })(value);\n if (Result.isFailure(decoded))\n throw new TypeError(`${label} must be JSON-compatible: ${String(decoded.failure)}`);\n return Object.freeze(Object.fromEntries(Object.entries(decoded.success).map(([key, child]) => [key, deepFreezeJson(child)])));\n}\n/**\n * `SandboxLayer` 的品牌只由 `niceeval/sandbox` 工厂写入。动态 TSX/JS 调用绕过静态类型时,\n * 不接受看似相同的裸对象,以免在 linker 阶段才得到难以定位的错误。\n */\nfunction assertSandboxLayer(value: unknown, factory: string): void {\n if (value !== undefined && !isSandboxLayer(value)) {\n throw new TypeError(`${factory} sandbox must be a SandboxLayer created by a niceeval/sandbox factory (for example dockerSandbox(), dockerComposeSandbox(), e2bSandbox(), or vercelSandbox()).`);\n }\n}\n/** 项目级配置。 */\nexport function defineConfig(config: Config): Config {\n const sandboxCache = normalizeSandboxCache(config.sandboxCache, \"defineConfig\");\n const judgeRuntime = config.judgeRuntime === undefined\n ? undefined\n : normalizeDefinitionJudge(config.judgeRuntime, \"defineConfig() judgeRuntime\");\n if (judgeRuntime !== undefined && !isJudgeProvider(judgeRuntime)) {\n throw new TypeError(\"defineConfig() judgeRuntime must be a Judge Provider created by niceeval/judge\");\n }\n return Object.freeze({\n ...config,\n ...(sandboxCache === undefined ? {} : { sandboxCache }),\n ...(judgeRuntime === undefined ? {} : { judgeRuntime }),\n });\n}\n/**\n * 自定义沙箱 provider:`create` 直接返回一个实现 `Sandbox` 接口的实例,不需要 niceeval 内置支持\n * 这个 provider 名字。用于接入 docker/vercel/e2b 之外的运行环境(自建 VM、Modal、Fly 等)。\n */\nexport function defineSandbox(def: CustomProviderSandboxOptions): SandboxLayer<\"template-bearing\"> {\n return customProviderSandbox(def);\n}\n"]}
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.defineContextMatch = exports.defineMaterialMatch = exports.pairwisePreference = exports.instructionFollowing = exports.faithfulness = exports.factuality = exports.toolMatch = exports.similarity = exports.satisfies = exports.referencesAnyPath = exports.pattern = exports.or = exports.not = exports.mapValue = exports.mapEach = exports.matches = exports.lessThan = exports.hasSections = exports.jsonMatch = exports.isTrue = exports.isFalse = exports.isDefined = exports.inOrder = exports.includesUrl = exports.includes = exports.greaterThan = exports.filterWhere = exports.excludes = exports.eventMatch = exports.equals = exports.defineValueMatch = exports.defineScoreMatch = exports.countWhere = exports.commandSucceeded = exports.commandMatch = exports.atMost = exports.atLeast = exports.and = exports.defineJudge = void 0;
3
+ exports.quantile = exports.measured = exports.defineContextMatch = exports.defineMaterialMatch = exports.pairwisePreference = exports.instructionFollowing = exports.faithfulness = exports.factuality = exports.toolMatch = exports.similarity = exports.satisfies = exports.referencesAnyPath = exports.pattern = exports.or = exports.not = exports.mapValue = exports.mapEach = exports.matches = exports.lessThan = exports.hasSections = exports.jsonMatch = exports.isTrue = exports.isFalse = exports.isDefined = exports.inOrder = exports.includesUrl = exports.includes = exports.greaterThan = exports.filterWhere = exports.excludes = exports.eventMatch = exports.equals = exports.defineValueMatch = exports.defineScoreMatch = exports.countWhere = exports.commandSucceeded = exports.commandMatch = exports.atMost = exports.atLeast = exports.and = exports.defineJudge = void 0;
4
4
  // niceeval/expect:只导出纯 Match factories。Fact、verdict 与 score use 由 context 负责。
5
5
  var judge_ts_1 = require("../assertions/judge.cjs");
6
6
  Object.defineProperty(exports, "defineJudge", { enumerable: true, get: function () { return judge_ts_1.defineJudge; } });
@@ -45,4 +45,7 @@ Object.defineProperty(exports, "pairwisePreference", { enumerable: true, get: fu
45
45
  var context_match_ts_1 = require("../assertions/context-match.cjs");
46
46
  Object.defineProperty(exports, "defineMaterialMatch", { enumerable: true, get: function () { return context_match_ts_1.defineMaterialMatch; } });
47
47
  Object.defineProperty(exports, "defineContextMatch", { enumerable: true, get: function () { return context_match_ts_1.defineContextMatch; } });
48
+ var measurements_ts_1 = require("../assertions/measurements.cjs");
49
+ Object.defineProperty(exports, "measured", { enumerable: true, get: function () { return measurements_ts_1.measured; } });
50
+ Object.defineProperty(exports, "quantile", { enumerable: true, get: function () { return measurements_ts_1.quantile; } });
48
51
  //# sourceMappingURL=index.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":";;;AAAA,8EAA8E;AAC9E,mDAAqD;AAA5C,uGAAA,WAAW,OAAA;AAEpB,mDAAwY;AAA/X,+FAAA,GAAG,OAAA;AAAE,mGAAA,OAAO,OAAA;AAAE,kGAAA,MAAM,OAAA;AAAE,wGAAA,YAAY,OAAA;AAAE,4GAAA,gBAAgB,OAAA;AAAE,sGAAA,UAAU,OAAA;AAAE,4GAAA,gBAAgB,OAAA;AAAE,4GAAA,gBAAgB,OAAA;AAAE,kGAAA,MAAM,OAAA;AAAE,sGAAA,UAAU,OAAA;AAAE,oGAAA,QAAQ,OAAA;AAAE,uGAAA,WAAW,OAAA;AAAE,uGAAA,WAAW,OAAA;AAAE,oGAAA,QAAQ,OAAA;AAAE,uGAAA,WAAW,OAAA;AAAE,mGAAA,OAAO,OAAA;AAAE,qGAAA,SAAS,OAAA;AAAE,mGAAA,OAAO,OAAA;AAAE,kGAAA,MAAM,OAAA;AAAE,qGAAA,SAAS,OAAA;AAAE,uGAAA,WAAW,OAAA;AAAE,oGAAA,QAAQ,OAAA;AAAE,mGAAA,OAAO,OAAA;AAAE,mGAAA,OAAO,OAAA;AAAE,oGAAA,QAAQ,OAAA;AAAE,+FAAA,GAAG,OAAA;AAAE,8FAAA,EAAE,OAAA;AAAE,mGAAA,OAAO,OAAA;AAAE,6GAAA,iBAAiB,OAAA;AAAE,qGAAA,SAAS,OAAA;AAAE,sGAAA,UAAU,OAAA;AAAE,qGAAA,SAAS,OAAA;AAEtW,mEAAoH;AAA3G,8GAAA,UAAU,OAAA;AAAE,gHAAA,YAAY,OAAA;AAAE,wHAAA,oBAAoB,OAAA;AAAE,sHAAA,kBAAkB,OAAA;AAE3E,mEAAyF;AAAhF,uHAAA,mBAAmB,OAAA;AAAE,sHAAA,kBAAkB,OAAA","sourcesContent":["// niceeval/expect:只导出纯 Match factories。Fact、verdict 与 score use 由 context 负责。\nexport { defineJudge } from \"../assertions/judge.ts\";\nexport type { JudgeAnchor, JudgeDefinition, JudgeOptions } from \"../assertions/judge.ts\";\nexport { and, atLeast, atMost, commandMatch, commandSucceeded, countWhere, defineScoreMatch, defineValueMatch, equals, eventMatch, excludes, filterWhere, greaterThan, includes, includesUrl, inOrder, isDefined, isFalse, isTrue, jsonMatch, hasSections, lessThan, matches, mapEach, mapValue, not, or, pattern, referencesAnyPath, satisfies, similarity, toolMatch, } from \"../assertions/match.ts\";\nexport type { BooleanMatch, CollectionMatch, CollectionValue, CommandMatchOptions, EventMatch, EventOccurrenceMatch, EventOccurrenceQuantifiers, EventOccurrenceView, EventSequenceMatch, EventUpperBoundOccurrenceMatch, EventOptionsByType, LogicalCommandOccurrence, ManagedToolCalls, ManagedEventOccurrences, Match, MatchDomain, NumericComparisonMatch, TextMatchOptions, ToolMatch, ToolOccurrenceMatch, ToolSequenceMatch, ToolUpperBoundOccurrenceMatch, ToolMatchOptions, ToolOccurrenceQuantifiers, ToolOccurrenceView, ToolStatus, ValueMatch, ManagedScoreMatchOptions, ScoreMatch, ScoreMatchContext, ScoreMatchLlmFailure, ScoreMatchResult, ScoreMatchAnchor, } from \"../assertions/match.ts\";\nexport { factuality, faithfulness, instructionFollowing, pairwisePreference } from \"../assertions/judge-presets.ts\";\nexport type { JudgePresetOptions, FactualityMaterial, FaithfulnessMaterial, InstructionFollowingMaterial, PairwisePreferenceMaterial } from \"../assertions/judge-presets.ts\";\nexport { defineMaterialMatch, defineContextMatch } from \"../assertions/context-match.ts\";\nexport type { MaterialMatch, ContextBooleanMatch, ContextScoreMatch, MatchContext, ReadonlyMaterial, MatchFact, MaterialCollection, MaterialItem, MaterialCaptureBudget, FactCaptureBudget } from \"../assertions/context-match.ts\";\nexport type { NumericMaterial } from \"../assertions/match.ts\";\nexport type { EvalUsage, EvalCacheRead } from \"../o11y/eval-usage.ts\";\nexport type { CacheReadReport, CacheReadSummary } from \"../o11y/cache-read.ts\";\nexport type { AgentMatchContext } from \"../context/assert-first.ts\";\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":";;;AAAA,8EAA8E;AAC9E,mDAAqD;AAA5C,uGAAA,WAAW,OAAA;AAEpB,mDAAwY;AAA/X,+FAAA,GAAG,OAAA;AAAE,mGAAA,OAAO,OAAA;AAAE,kGAAA,MAAM,OAAA;AAAE,wGAAA,YAAY,OAAA;AAAE,4GAAA,gBAAgB,OAAA;AAAE,sGAAA,UAAU,OAAA;AAAE,4GAAA,gBAAgB,OAAA;AAAE,4GAAA,gBAAgB,OAAA;AAAE,kGAAA,MAAM,OAAA;AAAE,sGAAA,UAAU,OAAA;AAAE,oGAAA,QAAQ,OAAA;AAAE,uGAAA,WAAW,OAAA;AAAE,uGAAA,WAAW,OAAA;AAAE,oGAAA,QAAQ,OAAA;AAAE,uGAAA,WAAW,OAAA;AAAE,mGAAA,OAAO,OAAA;AAAE,qGAAA,SAAS,OAAA;AAAE,mGAAA,OAAO,OAAA;AAAE,kGAAA,MAAM,OAAA;AAAE,qGAAA,SAAS,OAAA;AAAE,uGAAA,WAAW,OAAA;AAAE,oGAAA,QAAQ,OAAA;AAAE,mGAAA,OAAO,OAAA;AAAE,mGAAA,OAAO,OAAA;AAAE,oGAAA,QAAQ,OAAA;AAAE,+FAAA,GAAG,OAAA;AAAE,8FAAA,EAAE,OAAA;AAAE,mGAAA,OAAO,OAAA;AAAE,6GAAA,iBAAiB,OAAA;AAAE,qGAAA,SAAS,OAAA;AAAE,sGAAA,UAAU,OAAA;AAAE,qGAAA,SAAS,OAAA;AAEtW,mEAAoH;AAA3G,8GAAA,UAAU,OAAA;AAAE,gHAAA,YAAY,OAAA;AAAE,wHAAA,oBAAoB,OAAA;AAAE,sHAAA,kBAAkB,OAAA;AAE3E,mEAAyF;AAAhF,uHAAA,mBAAmB,OAAA;AAAE,sHAAA,kBAAkB,OAAA;AAGhD,iEAAmE;AAA1D,2GAAA,QAAQ,OAAA;AAAE,2GAAA,QAAQ,OAAA","sourcesContent":["// niceeval/expect:只导出纯 Match factories。Fact、verdict 与 score use 由 context 负责。\nexport { defineJudge } from \"../assertions/judge.ts\";\nexport type { JudgeAnchor, JudgeDefinition, JudgeOptions } from \"../assertions/judge.ts\";\nexport { and, atLeast, atMost, commandMatch, commandSucceeded, countWhere, defineScoreMatch, defineValueMatch, equals, eventMatch, excludes, filterWhere, greaterThan, includes, includesUrl, inOrder, isDefined, isFalse, isTrue, jsonMatch, hasSections, lessThan, matches, mapEach, mapValue, not, or, pattern, referencesAnyPath, satisfies, similarity, toolMatch, } from \"../assertions/match.ts\";\nexport type { BooleanMatch, CollectionMatch, CollectionValue, CommandMatchOptions, EventMatch, EventOccurrenceMatch, EventOccurrenceQuantifiers, EventOccurrenceView, EventSequenceMatch, EventUpperBoundOccurrenceMatch, EventOptionsByType, LogicalCommandOccurrence, ManagedToolCalls, ManagedEventOccurrences, Match, MatchDomain, NumericComparisonMatch, TextMatchOptions, ToolMatch, ToolOccurrenceMatch, ToolSequenceMatch, ToolUpperBoundOccurrenceMatch, ToolMatchOptions, ToolOccurrenceQuantifiers, ToolOccurrenceView, ToolStatus, ValueMatch, ManagedScoreMatchOptions, ScoreMatch, ScoreMatchContext, ScoreMatchLlmFailure, ScoreMatchResult, ScoreMatchAnchor, } from \"../assertions/match.ts\";\nexport { factuality, faithfulness, instructionFollowing, pairwisePreference } from \"../assertions/judge-presets.ts\";\nexport type { JudgePresetOptions, FactualityMaterial, FaithfulnessMaterial, InstructionFollowingMaterial, PairwisePreferenceMaterial } from \"../assertions/judge-presets.ts\";\nexport { defineMaterialMatch, defineContextMatch } from \"../assertions/context-match.ts\";\nexport type { MaterialMatch, ContextBooleanMatch, ContextScoreMatch, MatchContext, ReadonlyMaterial, MatchFact, MaterialCollection, MaterialItem, MaterialCaptureBudget, FactCaptureBudget } from \"../assertions/context-match.ts\";\nexport type { NumericMaterial } from \"../assertions/match.ts\";\nexport { measured, quantile } from \"../assertions/measurements.ts\";\nexport type { QuantileMethod, QuantileMaterial } from \"../assertions/measurements.ts\";\nexport type { EvalUsage, EvalCacheRead } from \"../o11y/eval-usage.ts\";\nexport type { CacheReadReport, CacheReadSummary } from \"../o11y/cache-read.ts\";\nexport type { AgentMatchContext } from \"../context/assert-first.ts\";\n"]}
@@ -7,6 +7,8 @@ export type { JudgePresetOptions, FactualityMaterial, FaithfulnessMaterial, Inst
7
7
  export { defineMaterialMatch, defineContextMatch } from "../assertions/context-match.cjs";
8
8
  export type { MaterialMatch, ContextBooleanMatch, ContextScoreMatch, MatchContext, ReadonlyMaterial, MatchFact, MaterialCollection, MaterialItem, MaterialCaptureBudget, FactCaptureBudget } from "../assertions/context-match.cjs";
9
9
  export type { NumericMaterial } from "../assertions/match.cjs";
10
+ export { measured, quantile } from "../assertions/measurements.cjs";
11
+ export type { QuantileMethod, QuantileMaterial } from "../assertions/measurements.cjs";
10
12
  export type { EvalUsage, EvalCacheRead } from "../o11y/eval-usage.cjs";
11
13
  export type { CacheReadReport, CacheReadSummary } from "../o11y/cache-read.cjs";
12
14
  export type { AgentMatchContext } from "../context/assert-first.cjs";
@@ -7,6 +7,8 @@ export type { JudgePresetOptions, FactualityMaterial, FaithfulnessMaterial, Inst
7
7
  export { defineMaterialMatch, defineContextMatch } from "../assertions/context-match.mjs";
8
8
  export type { MaterialMatch, ContextBooleanMatch, ContextScoreMatch, MatchContext, ReadonlyMaterial, MatchFact, MaterialCollection, MaterialItem, MaterialCaptureBudget, FactCaptureBudget } from "../assertions/context-match.mjs";
9
9
  export type { NumericMaterial } from "../assertions/match.mjs";
10
+ export { measured, quantile } from "../assertions/measurements.mjs";
11
+ export type { QuantileMethod, QuantileMaterial } from "../assertions/measurements.mjs";
10
12
  export type { EvalUsage, EvalCacheRead } from "../o11y/eval-usage.mjs";
11
13
  export type { CacheReadReport, CacheReadSummary } from "../o11y/cache-read.mjs";
12
14
  export type { AgentMatchContext } from "../context/assert-first.mjs";
@@ -7,6 +7,8 @@ export type { JudgePresetOptions, FactualityMaterial, FaithfulnessMaterial, Inst
7
7
  export { defineMaterialMatch, defineContextMatch } from "../assertions/context-match.js";
8
8
  export type { MaterialMatch, ContextBooleanMatch, ContextScoreMatch, MatchContext, ReadonlyMaterial, MatchFact, MaterialCollection, MaterialItem, MaterialCaptureBudget, FactCaptureBudget } from "../assertions/context-match.js";
9
9
  export type { NumericMaterial } from "../assertions/match.js";
10
+ export { measured, quantile } from "../assertions/measurements.js";
11
+ export type { QuantileMethod, QuantileMaterial } from "../assertions/measurements.js";
10
12
  export type { EvalUsage, EvalCacheRead } from "../o11y/eval-usage.js";
11
13
  export type { CacheReadReport, CacheReadSummary } from "../o11y/cache-read.js";
12
14
  export type { AgentMatchContext } from "../context/assert-first.js";
@@ -63,20 +63,24 @@ const __niceevalExport29 = __niceevalCanonical["mapValue"];
63
63
  export { __niceevalExport29 as mapValue };
64
64
  const __niceevalExport30 = __niceevalCanonical["matches"];
65
65
  export { __niceevalExport30 as matches };
66
- const __niceevalExport31 = __niceevalCanonical["not"];
67
- export { __niceevalExport31 as not };
68
- const __niceevalExport32 = __niceevalCanonical["or"];
69
- export { __niceevalExport32 as or };
70
- const __niceevalExport33 = __niceevalCanonical["pairwisePreference"];
71
- export { __niceevalExport33 as pairwisePreference };
72
- const __niceevalExport34 = __niceevalCanonical["pattern"];
73
- export { __niceevalExport34 as pattern };
74
- const __niceevalExport35 = __niceevalCanonical["referencesAnyPath"];
75
- export { __niceevalExport35 as referencesAnyPath };
76
- const __niceevalExport36 = __niceevalCanonical["satisfies"];
77
- export { __niceevalExport36 as satisfies };
78
- const __niceevalExport37 = __niceevalCanonical["similarity"];
79
- export { __niceevalExport37 as similarity };
80
- const __niceevalExport38 = __niceevalCanonical["toolMatch"];
81
- export { __niceevalExport38 as toolMatch };
66
+ const __niceevalExport31 = __niceevalCanonical["measured"];
67
+ export { __niceevalExport31 as measured };
68
+ const __niceevalExport32 = __niceevalCanonical["not"];
69
+ export { __niceevalExport32 as not };
70
+ const __niceevalExport33 = __niceevalCanonical["or"];
71
+ export { __niceevalExport33 as or };
72
+ const __niceevalExport34 = __niceevalCanonical["pairwisePreference"];
73
+ export { __niceevalExport34 as pairwisePreference };
74
+ const __niceevalExport35 = __niceevalCanonical["pattern"];
75
+ export { __niceevalExport35 as pattern };
76
+ const __niceevalExport36 = __niceevalCanonical["quantile"];
77
+ export { __niceevalExport36 as quantile };
78
+ const __niceevalExport37 = __niceevalCanonical["referencesAnyPath"];
79
+ export { __niceevalExport37 as referencesAnyPath };
80
+ const __niceevalExport38 = __niceevalCanonical["satisfies"];
81
+ export { __niceevalExport38 as satisfies };
82
+ const __niceevalExport39 = __niceevalCanonical["similarity"];
83
+ export { __niceevalExport39 as similarity };
84
+ const __niceevalExport40 = __niceevalCanonical["toolMatch"];
85
+ export { __niceevalExport40 as toolMatch };
82
86
  //# sourceMappingURL=index.js.map
@@ -63,20 +63,24 @@ const __niceevalExport29 = __niceevalCanonical["mapValue"];
63
63
  export { __niceevalExport29 as mapValue };
64
64
  const __niceevalExport30 = __niceevalCanonical["matches"];
65
65
  export { __niceevalExport30 as matches };
66
- const __niceevalExport31 = __niceevalCanonical["not"];
67
- export { __niceevalExport31 as not };
68
- const __niceevalExport32 = __niceevalCanonical["or"];
69
- export { __niceevalExport32 as or };
70
- const __niceevalExport33 = __niceevalCanonical["pairwisePreference"];
71
- export { __niceevalExport33 as pairwisePreference };
72
- const __niceevalExport34 = __niceevalCanonical["pattern"];
73
- export { __niceevalExport34 as pattern };
74
- const __niceevalExport35 = __niceevalCanonical["referencesAnyPath"];
75
- export { __niceevalExport35 as referencesAnyPath };
76
- const __niceevalExport36 = __niceevalCanonical["satisfies"];
77
- export { __niceevalExport36 as satisfies };
78
- const __niceevalExport37 = __niceevalCanonical["similarity"];
79
- export { __niceevalExport37 as similarity };
80
- const __niceevalExport38 = __niceevalCanonical["toolMatch"];
81
- export { __niceevalExport38 as toolMatch };
66
+ const __niceevalExport31 = __niceevalCanonical["measured"];
67
+ export { __niceevalExport31 as measured };
68
+ const __niceevalExport32 = __niceevalCanonical["not"];
69
+ export { __niceevalExport32 as not };
70
+ const __niceevalExport33 = __niceevalCanonical["or"];
71
+ export { __niceevalExport33 as or };
72
+ const __niceevalExport34 = __niceevalCanonical["pairwisePreference"];
73
+ export { __niceevalExport34 as pairwisePreference };
74
+ const __niceevalExport35 = __niceevalCanonical["pattern"];
75
+ export { __niceevalExport35 as pattern };
76
+ const __niceevalExport36 = __niceevalCanonical["quantile"];
77
+ export { __niceevalExport36 as quantile };
78
+ const __niceevalExport37 = __niceevalCanonical["referencesAnyPath"];
79
+ export { __niceevalExport37 as referencesAnyPath };
80
+ const __niceevalExport38 = __niceevalCanonical["satisfies"];
81
+ export { __niceevalExport38 as satisfies };
82
+ const __niceevalExport39 = __niceevalCanonical["similarity"];
83
+ export { __niceevalExport39 as similarity };
84
+ const __niceevalExport40 = __niceevalCanonical["toolMatch"];
85
+ export { __niceevalExport40 as toolMatch };
82
86
  //# sourceMappingURL=index.mjs.map
@@ -192,9 +192,11 @@ function closeSelection(input, options = {}) {
192
192
  .map((experiment) => {
193
193
  const selection = (0, eval_selection_ts_1.resolveExperimentEvals)({
194
194
  experimentId: experiment.id,
195
+ models: experiment.models,
196
+ tag: input.tag,
195
197
  selector: experiment.evals,
196
198
  cliPatterns: input.evalSelectors ?? [],
197
- evals,
199
+ evals: discovered,
198
200
  });
199
201
  return Object.freeze({
200
202
  experiment,