niceeval 0.18.0 → 0.19.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/INDEX.md +4 -2
- package/dist/adapter-usage.cjs.map +1 -1
- package/dist/adapter-usage.d.cts +1 -1
- package/dist/adapter-usage.d.mts +1 -1
- package/dist/adapter-usage.d.ts +1 -1
- package/dist/adapter.cjs +8 -7
- package/dist/adapter.cjs.map +1 -1
- package/dist/adapter.d.cts +21 -21
- package/dist/adapter.d.mts +21 -21
- package/dist/adapter.d.ts +21 -21
- package/dist/agents/{effect-runtime.cjs → agent-effects.cjs} +12 -18
- package/dist/agents/agent-effects.cjs.map +1 -0
- package/dist/agents/agent-effects.d.cts +23 -0
- package/dist/agents/agent-effects.d.mts +23 -0
- package/dist/agents/agent-effects.d.ts +23 -0
- package/dist/agents/agent-effects.js +16 -0
- package/dist/agents/agent-effects.js.map +1 -0
- package/dist/agents/ai-sdk.cjs +1 -1
- package/dist/agents/ai-sdk.cjs.map +1 -1
- package/dist/agents/bub.cjs +31 -18
- package/dist/agents/bub.cjs.map +1 -1
- package/dist/agents/bub.d.cts +9 -12
- package/dist/agents/bub.d.mts +9 -12
- package/dist/agents/bub.d.ts +9 -12
- package/dist/agents/claude-code-native.cjs +2 -2
- package/dist/agents/claude-code-native.cjs.map +1 -1
- package/dist/agents/claude-code.cjs +17 -11
- package/dist/agents/claude-code.cjs.map +1 -1
- package/dist/agents/claude-code.d.cts +11 -11
- package/dist/agents/claude-code.d.mts +11 -11
- package/dist/agents/claude-code.d.ts +11 -11
- package/dist/agents/codex-app-server.cjs +2 -2
- package/dist/agents/codex-app-server.cjs.map +1 -1
- package/dist/agents/codex.cjs +18 -12
- package/dist/agents/codex.cjs.map +1 -1
- package/dist/agents/codex.d.cts +12 -12
- package/dist/agents/codex.d.mts +12 -12
- package/dist/agents/codex.d.ts +12 -12
- package/dist/agents/deepseek-harness.cjs +2 -2
- package/dist/agents/deepseek-harness.cjs.map +1 -1
- package/dist/agents/hermes.cjs +3 -3
- package/dist/agents/hermes.cjs.map +1 -1
- package/dist/agents/index.cjs +3 -3
- package/dist/agents/index.cjs.map +1 -1
- package/dist/agents/index.d.cts +3 -3
- package/dist/agents/index.d.mts +3 -3
- package/dist/agents/index.d.ts +3 -3
- package/dist/agents/index.js +2 -2
- package/dist/agents/index.mjs +2 -2
- package/dist/agents/mcp.cjs.map +1 -1
- package/dist/agents/mcp.d.cts +2 -2
- package/dist/agents/mcp.d.mts +2 -2
- package/dist/agents/mcp.d.ts +2 -2
- package/dist/agents/omp.cjs +2 -2
- package/dist/agents/omp.cjs.map +1 -1
- package/dist/agents/openai-compat.cjs +2 -2
- package/dist/agents/openai-compat.cjs.map +1 -1
- package/dist/agents/openclaw.cjs +3 -3
- package/dist/agents/openclaw.cjs.map +1 -1
- package/dist/agents/opencode.cjs +16 -4
- package/dist/agents/opencode.cjs.map +1 -1
- package/dist/agents/plugin-extensions.cjs +71 -0
- package/dist/agents/plugin-extensions.cjs.map +1 -0
- package/dist/agents/plugin-extensions.d.cts +26 -0
- package/dist/agents/plugin-extensions.d.mts +26 -0
- package/dist/agents/plugin-extensions.d.ts +26 -0
- package/dist/agents/plugin-extensions.js +8 -0
- package/dist/agents/plugin-extensions.js.map +1 -0
- package/dist/agents/post-setup.cjs +14 -3
- package/dist/agents/post-setup.cjs.map +1 -1
- package/dist/agents/post-setup.d.cts +4 -2
- package/dist/agents/post-setup.d.mts +4 -2
- package/dist/agents/post-setup.d.ts +4 -2
- package/dist/agents/post-setup.js +8 -6
- package/dist/agents/sdk-streams.cjs +3 -3
- package/dist/agents/sdk-streams.cjs.map +1 -1
- package/dist/agents/{session-slot.cjs → session-key.cjs} +4 -4
- package/dist/agents/session-key.cjs.map +1 -0
- package/dist/agents/session-key.d.cts +12 -0
- package/dist/agents/session-key.d.mts +12 -0
- package/dist/agents/session-key.d.ts +12 -0
- package/dist/agents/session-key.js +6 -0
- package/dist/agents/session-key.js.map +1 -0
- package/dist/agents/shared.cjs +2 -2
- package/dist/agents/shared.cjs.map +1 -1
- package/dist/agents/shared.d.cts +4 -4
- package/dist/agents/shared.d.mts +4 -4
- package/dist/agents/shared.d.ts +4 -4
- package/dist/agents/skills.cjs.map +1 -1
- package/dist/agents/skills.d.cts +3 -3
- package/dist/agents/skills.d.mts +3 -3
- package/dist/agents/skills.d.ts +3 -3
- package/dist/agents/types.cjs.map +1 -1
- package/dist/agents/types.d.cts +55 -54
- package/dist/agents/types.d.mts +55 -54
- package/dist/agents/types.d.ts +55 -54
- package/dist/agents/ui-message-stream.cjs +4 -4
- package/dist/agents/ui-message-stream.cjs.map +1 -1
- package/dist/agents/unrecognized-events.cjs +32 -0
- package/dist/agents/unrecognized-events.cjs.map +1 -0
- package/dist/agents/unrecognized-events.d.cts +8 -0
- package/dist/agents/unrecognized-events.d.mts +8 -0
- package/dist/agents/unrecognized-events.d.ts +8 -0
- package/dist/agents/unrecognized-events.js +6 -0
- package/dist/agents/unrecognized-events.js.map +1 -0
- package/dist/assertions/api.cjs.map +1 -1
- package/dist/assertions/api.d.cts +3 -0
- package/dist/assertions/api.d.mts +3 -0
- package/dist/assertions/api.d.ts +3 -0
- package/dist/assertions/collection.cjs +1 -1
- package/dist/assertions/collection.cjs.map +1 -1
- package/dist/assertions/judge.cjs +1 -1
- package/dist/assertions/judge.cjs.map +1 -1
- package/dist/assertions/match.cjs +52 -21
- package/dist/assertions/match.cjs.map +1 -1
- package/dist/assertions/match.d.cts +16 -5
- package/dist/assertions/match.d.mts +16 -5
- package/dist/assertions/match.d.ts +16 -5
- package/dist/assertions/match.js +96 -94
- package/dist/assertions/measurements.cjs +22 -6
- package/dist/assertions/measurements.cjs.map +1 -1
- package/dist/assertions/measurements.d.cts +8 -1
- package/dist/assertions/measurements.d.mts +8 -1
- package/dist/assertions/measurements.d.ts +8 -1
- package/dist/assertions/numeric.cjs +2 -0
- package/dist/assertions/numeric.cjs.map +1 -1
- package/dist/assertions/numeric.d.cts +1 -1
- package/dist/assertions/numeric.d.mts +1 -1
- package/dist/assertions/numeric.d.ts +1 -1
- package/dist/assertions/quantity.cjs +42 -0
- package/dist/assertions/quantity.cjs.map +1 -0
- package/dist/assertions/quantity.d.cts +18 -0
- package/dist/assertions/quantity.d.mts +18 -0
- package/dist/assertions/quantity.d.ts +18 -0
- package/dist/assertions/quantity.js +22 -0
- package/dist/assertions/quantity.js.map +1 -0
- package/dist/assertions/record/attachment.cjs +2 -0
- package/dist/assertions/record/attachment.cjs.map +1 -1
- package/dist/assertions/record/codec.cjs +5 -1
- package/dist/assertions/record/codec.cjs.map +1 -1
- package/dist/assertions/record/model.cjs.map +1 -1
- package/dist/assertions/record/model.d.cts +3 -1
- package/dist/assertions/record/model.d.mts +3 -1
- package/dist/assertions/record/model.d.ts +3 -1
- package/dist/assertions/runtime.cjs +11 -6
- package/dist/assertions/runtime.cjs.map +1 -1
- package/dist/cli/program.cjs +3 -0
- package/dist/cli/program.cjs.map +1 -1
- package/dist/context/assert-first.cjs +6 -4
- package/dist/context/assert-first.cjs.map +1 -1
- package/dist/context/assert-first.d.cts +9 -3
- package/dist/context/assert-first.d.mts +9 -3
- package/dist/context/assert-first.d.ts +9 -3
- package/dist/context/notes.cjs +47 -0
- package/dist/context/notes.cjs.map +1 -0
- package/dist/context/notes.d.cts +10 -0
- package/dist/context/notes.d.mts +10 -0
- package/dist/context/notes.d.ts +10 -0
- package/dist/context/notes.js +6 -0
- package/dist/context/notes.js.map +1 -0
- package/dist/context/send-failures.cjs +1 -7
- package/dist/context/send-failures.cjs.map +1 -1
- package/dist/context/send-failures.d.cts +2 -3
- package/dist/context/send-failures.d.mts +2 -3
- package/dist/context/send-failures.d.ts +2 -3
- package/dist/context/send-retry.cjs +0 -1
- package/dist/context/send-retry.cjs.map +1 -1
- package/dist/context/send-retry.d.cts +1 -2
- package/dist/context/send-retry.d.mts +1 -2
- package/dist/context/send-retry.d.ts +1 -2
- package/dist/context/session.cjs +10 -17
- package/dist/context/session.cjs.map +1 -1
- package/dist/context/session.d.cts +4 -10
- package/dist/context/session.d.mts +4 -10
- package/dist/context/session.d.ts +4 -10
- package/dist/define.cjs +88 -65
- package/dist/define.cjs.map +1 -1
- package/dist/define.d.cts +3 -3
- package/dist/define.d.mts +3 -3
- package/dist/define.d.ts +3 -3
- package/dist/eval/cli/contribution.cjs +1 -1
- package/dist/eval/cli/contribution.cjs.map +1 -1
- package/dist/eval/host/index.cjs +1 -1
- package/dist/eval/host/index.cjs.map +1 -1
- package/dist/eval/record/evaluation.cjs +1 -1
- package/dist/eval/record/evaluation.cjs.map +1 -1
- package/dist/eval/record/membership-provenance.d.cts +3 -3
- package/dist/eval/record/membership-provenance.d.mts +3 -3
- package/dist/eval/record/membership-provenance.d.ts +3 -3
- package/dist/eval/record/score.cjs +2 -2
- package/dist/eval/record/score.cjs.map +1 -1
- package/dist/eval/record/sealed-assertion.cjs +1 -1
- package/dist/eval/record/sealed-assertion.cjs.map +1 -1
- package/dist/eval/record/verdict.cjs +2 -2
- package/dist/eval/record/verdict.cjs.map +1 -1
- package/dist/expect/index.cjs +10 -1
- package/dist/expect/index.cjs.map +1 -1
- package/dist/expect/index.d.cts +3 -1
- package/dist/expect/index.d.mts +3 -1
- package/dist/expect/index.d.ts +3 -1
- package/dist/expect/index.js +92 -76
- package/dist/expect/index.mjs +92 -76
- package/dist/experiment/host/cli/contribution.cjs +52 -39
- package/dist/experiment/host/cli/contribution.cjs.map +1 -1
- package/dist/experiment/host/cli/contribution.d.cts +18 -4
- package/dist/experiment/host/cli/contribution.d.mts +18 -4
- package/dist/experiment/host/cli/contribution.d.ts +18 -4
- package/dist/experiment/host/cli/contribution.js +2 -2
- package/dist/experiment/host/cli/debug-protocol.cjs +2 -2
- package/dist/experiment/host/cli/debug-protocol.cjs.map +1 -1
- package/dist/experiment/host/cli/debug-protocol.d.cts +2 -2
- package/dist/experiment/host/cli/debug-protocol.d.mts +2 -2
- package/dist/experiment/host/cli/debug-protocol.d.ts +2 -2
- package/dist/experiment/host/cli/output-protocol.cjs +1 -1
- package/dist/experiment/host/cli/output-protocol.cjs.map +1 -1
- package/dist/experiment/host/cli/output-protocol.d.cts +2 -2
- package/dist/experiment/host/cli/output-protocol.d.mts +2 -2
- package/dist/experiment/host/cli/output-protocol.d.ts +2 -2
- package/dist/experiment/host/current.cjs +2 -2
- package/dist/experiment/host/current.cjs.map +1 -1
- package/dist/experiment/host/index.cjs +1 -1
- package/dist/experiment/host/index.cjs.map +1 -1
- package/dist/experiment/host/operations.cjs +21 -22
- package/dist/experiment/host/operations.cjs.map +1 -1
- package/dist/experiment/host/runtime.cjs +8 -9
- package/dist/experiment/host/runtime.cjs.map +1 -1
- package/dist/experiment/host/runtime.d.cts +3 -3
- package/dist/experiment/host/runtime.d.mts +3 -3
- package/dist/experiment/host/runtime.d.ts +3 -3
- package/dist/experiment/host/teardown.cjs +3 -3
- package/dist/experiment/host/teardown.cjs.map +1 -1
- package/dist/experiment/host/teardown.d.cts +3 -3
- package/dist/experiment/host/teardown.d.mts +3 -3
- package/dist/experiment/host/teardown.d.ts +3 -3
- package/dist/experiment/host/types.cjs.map +1 -1
- package/dist/experiment/host/types.d.cts +19 -19
- package/dist/experiment/host/types.d.mts +19 -19
- package/dist/experiment/host/types.d.ts +19 -19
- package/dist/index.cjs +3 -3
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +3 -3
- package/dist/index.d.mts +3 -3
- package/dist/index.d.ts +3 -3
- package/dist/index.js +2 -2
- package/dist/index.mjs +2 -2
- package/dist/inspection/assertions.cjs +1 -1
- package/dist/inspection/assertions.cjs.map +1 -1
- package/dist/inspection/cli/contribution.cjs +8 -7
- package/dist/inspection/cli/contribution.cjs.map +1 -1
- package/dist/inspection/facts.cjs +4 -4
- package/dist/inspection/facts.cjs.map +1 -1
- package/dist/inspection/index.cjs +1 -5
- package/dist/inspection/index.cjs.map +1 -1
- package/dist/inspection/index.d.cts +1 -2
- package/dist/inspection/index.d.mts +1 -2
- package/dist/inspection/index.d.ts +1 -2
- package/dist/inspection/index.js +20 -26
- package/dist/inspection/lifecycle.cjs +7 -0
- package/dist/inspection/lifecycle.cjs.map +1 -0
- package/dist/inspection/lifecycle.d.cts +4 -0
- package/dist/inspection/lifecycle.d.mts +4 -0
- package/dist/inspection/lifecycle.d.ts +4 -0
- package/dist/inspection/lifecycle.js +6 -0
- package/dist/inspection/lifecycle.js.map +1 -0
- package/dist/inspection/notes.cjs +40 -0
- package/dist/inspection/notes.cjs.map +1 -0
- package/dist/inspection/notes.d.cts +12 -0
- package/dist/inspection/notes.d.mts +12 -0
- package/dist/inspection/notes.d.ts +12 -0
- package/dist/inspection/notes.js +8 -0
- package/dist/inspection/notes.js.map +1 -0
- package/dist/inspection/overview.cjs +12 -15
- package/dist/inspection/overview.cjs.map +1 -1
- package/dist/inspection/overview.d.cts +8 -6
- package/dist/inspection/overview.d.mts +8 -6
- package/dist/inspection/overview.d.ts +8 -6
- package/dist/inspection/planned-attempt.cjs +45 -0
- package/dist/inspection/planned-attempt.cjs.map +1 -0
- package/dist/inspection/planned-attempt.d.cts +109 -0
- package/dist/inspection/planned-attempt.d.mts +109 -0
- package/dist/inspection/planned-attempt.d.ts +109 -0
- package/dist/inspection/planned-attempt.js +24 -0
- package/dist/inspection/planned-attempt.js.map +1 -0
- package/dist/inspection/project-result.cjs +5 -5
- package/dist/inspection/project-result.cjs.map +1 -1
- package/dist/inspection/project-result.d.cts +58 -57
- package/dist/inspection/project-result.d.mts +58 -57
- package/dist/inspection/project-result.d.ts +58 -57
- package/dist/inspection/project-result.js +4 -4
- package/dist/inspection/project.cjs +3 -3
- package/dist/inspection/project.cjs.map +1 -1
- package/dist/inspection/protocol-values.cjs +1 -1
- package/dist/inspection/protocol-values.cjs.map +1 -1
- package/dist/inspection/protocol-values.d.cts +1 -1
- package/dist/inspection/protocol-values.d.mts +1 -1
- package/dist/inspection/protocol-values.d.ts +1 -1
- package/dist/inspection/protocol.cjs +8 -8
- package/dist/inspection/protocol.cjs.map +1 -1
- package/dist/inspection/protocol.d.cts +237 -219
- package/dist/inspection/protocol.d.mts +237 -219
- package/dist/inspection/protocol.d.ts +237 -219
- package/dist/inspection/public.cjs +1 -5
- package/dist/inspection/public.cjs.map +1 -1
- package/dist/inspection/public.d.cts +1 -2
- package/dist/inspection/public.d.mts +1 -2
- package/dist/inspection/public.d.ts +1 -2
- package/dist/inspection/public.js +14 -20
- package/dist/inspection/public.mjs +166 -129
- package/dist/inspection/query.cjs +1 -1
- package/dist/inspection/query.cjs.map +1 -1
- package/dist/inspection/results.cjs +61 -52
- package/dist/inspection/results.cjs.map +1 -1
- package/dist/inspection/results.d.cts +157 -140
- package/dist/inspection/results.d.mts +157 -140
- package/dist/inspection/results.d.ts +157 -140
- package/dist/inspection/select.cjs +33 -28
- package/dist/inspection/select.cjs.map +1 -1
- package/dist/inspection/source.cjs +1 -1
- package/dist/inspection/source.cjs.map +1 -1
- package/dist/inspection/sources.cjs +2 -2
- package/dist/inspection/sources.cjs.map +1 -1
- package/dist/inspection/trace.cjs +9 -8
- package/dist/inspection/trace.cjs.map +1 -1
- package/dist/inspection/trace.d.cts +4 -4
- package/dist/inspection/trace.d.mts +4 -4
- package/dist/inspection/trace.d.ts +4 -4
- package/dist/loaders/index.cjs +7 -279
- package/dist/loaders/index.cjs.map +1 -1
- package/dist/loaders/index.d.cts +2 -95
- package/dist/loaders/index.d.mts +2 -95
- package/dist/loaders/index.d.ts +2 -95
- package/dist/loaders/index.js +10 -12
- package/dist/loaders/index.mjs +10 -12
- package/dist/loaders/runtime.cjs +283 -0
- package/dist/loaders/runtime.cjs.map +1 -0
- package/dist/loaders/runtime.d.cts +95 -0
- package/dist/loaders/runtime.d.mts +95 -0
- package/dist/loaders/runtime.d.ts +95 -0
- package/dist/loaders/runtime.js +16 -0
- package/dist/loaders/runtime.js.map +1 -0
- package/dist/migrations/judge-provider.md +6 -6
- package/dist/{model-slots.cjs → model-roles.cjs} +12 -12
- package/dist/{model-slots.cjs.map → model-roles.cjs.map} +1 -1
- package/dist/{model-slots.d.cts → model-roles.d.cts} +10 -10
- package/dist/{model-slots.d.mts → model-roles.d.mts} +10 -10
- package/dist/{model-slots.d.ts → model-roles.d.ts} +10 -10
- package/dist/model-roles.js +14 -0
- package/dist/model-roles.js.map +1 -0
- package/dist/o11y/adapter-usage-projection.cjs +9 -8
- package/dist/o11y/adapter-usage-projection.cjs.map +1 -1
- package/dist/o11y/adapter-usage-projection.d.cts +23 -15
- package/dist/o11y/adapter-usage-projection.d.mts +23 -15
- package/dist/o11y/adapter-usage-projection.d.ts +23 -15
- package/dist/o11y/cache-read.cjs +14 -14
- package/dist/o11y/cache-read.cjs.map +1 -1
- package/dist/o11y/cache-read.d.cts +5 -5
- package/dist/o11y/cache-read.d.mts +5 -5
- package/dist/o11y/cache-read.d.ts +5 -5
- package/dist/o11y/derive.cjs.map +1 -1
- package/dist/o11y/derive.d.cts +2 -2
- package/dist/o11y/derive.d.mts +2 -2
- package/dist/o11y/derive.d.ts +2 -2
- package/dist/o11y/eval-usage.cjs +9 -9
- package/dist/o11y/eval-usage.cjs.map +1 -1
- package/dist/o11y/eval-usage.d.cts +7 -7
- package/dist/o11y/eval-usage.d.mts +7 -7
- package/dist/o11y/eval-usage.d.ts +7 -7
- package/dist/o11y/parsers/bub.cjs +57 -81
- package/dist/o11y/parsers/bub.cjs.map +1 -1
- package/dist/o11y/parsers/index.cjs.map +1 -1
- package/dist/o11y/parsers/index.d.cts +2 -0
- package/dist/o11y/parsers/index.d.mts +2 -0
- package/dist/o11y/parsers/index.d.ts +2 -0
- package/dist/o11y/parsers/opencode.cjs +129 -217
- package/dist/o11y/parsers/opencode.cjs.map +1 -1
- package/dist/o11y/parsers/opencode.d.cts +2 -5
- package/dist/o11y/parsers/opencode.d.mts +2 -5
- package/dist/o11y/parsers/opencode.d.ts +2 -5
- package/dist/o11y/types.cjs.map +1 -1
- package/dist/o11y/types.d.cts +1 -1
- package/dist/o11y/types.d.mts +1 -1
- package/dist/o11y/types.d.ts +1 -1
- package/dist/plugin/contracts.cjs +170 -120
- package/dist/plugin/contracts.cjs.map +1 -1
- package/dist/plugin/contracts.d.cts +102 -90
- package/dist/plugin/contracts.d.mts +102 -90
- package/dist/plugin/contracts.d.ts +102 -90
- package/dist/plugin/contracts.js +16 -12
- package/dist/plugin/index.cjs.map +1 -1
- package/dist/plugin/index.d.cts +1 -1
- package/dist/plugin/index.d.mts +1 -1
- package/dist/plugin/index.d.ts +1 -1
- package/dist/plugin/link.cjs +69 -64
- package/dist/plugin/link.cjs.map +1 -1
- package/dist/plugin/link.d.cts +5 -3
- package/dist/plugin/link.d.mts +5 -3
- package/dist/plugin/link.d.ts +5 -3
- package/dist/plugin/link.js +12 -8
- package/dist/record/codec/seal-manifest.d.cts +3 -3
- package/dist/record/codec/seal-manifest.d.mts +3 -3
- package/dist/record/codec/seal-manifest.d.ts +3 -3
- package/dist/record/family/attempt-note/definition.cjs +12 -0
- package/dist/record/family/attempt-note/definition.cjs.map +1 -0
- package/dist/record/family/attempt-note/definition.d.cts +6 -0
- package/dist/record/family/attempt-note/definition.d.mts +6 -0
- package/dist/record/family/attempt-note/definition.d.ts +6 -0
- package/dist/record/family/attempt-note/definition.js +6 -0
- package/dist/record/family/attempt-note/definition.js.map +1 -0
- package/dist/record/family/attempt-note/persistence.cjs +10 -0
- package/dist/record/family/attempt-note/persistence.cjs.map +1 -0
- package/dist/record/family/attempt-note/persistence.d.cts +6 -0
- package/dist/record/family/attempt-note/persistence.d.mts +6 -0
- package/dist/record/family/attempt-note/persistence.d.ts +6 -0
- package/dist/record/family/attempt-note/persistence.js +6 -0
- package/dist/record/family/attempt-note/persistence.js.map +1 -0
- package/dist/record/family/attempt-note/schema.cjs +20 -0
- package/dist/record/family/attempt-note/schema.cjs.map +1 -0
- package/dist/record/family/attempt-note/schema.d.cts +21 -0
- package/dist/record/family/attempt-note/schema.d.mts +21 -0
- package/dist/record/family/attempt-note/schema.d.ts +21 -0
- package/dist/record/family/attempt-note/schema.js +10 -0
- package/dist/record/family/attempt-note/schema.js.map +1 -0
- package/dist/record/family/catalog.cjs +32 -29
- package/dist/record/family/catalog.cjs.map +1 -1
- package/dist/record/family/catalog.d.cts +7 -2
- package/dist/record/family/catalog.d.mts +7 -2
- package/dist/record/family/catalog.d.ts +7 -2
- package/dist/record/family/current.cjs +48 -45
- package/dist/record/family/current.cjs.map +1 -1
- package/dist/record/family/current.d.cts +15 -0
- package/dist/record/family/current.d.mts +15 -0
- package/dist/record/family/current.d.ts +15 -0
- package/dist/record/model/index.js +66 -64
- package/dist/record/model/run-context.cjs +9 -3
- package/dist/record/model/run-context.cjs.map +1 -1
- package/dist/record/model/run-context.d.cts +9 -2
- package/dist/record/model/run-context.d.mts +9 -2
- package/dist/record/model/run-context.d.ts +9 -2
- package/dist/record/model/run-context.js +8 -6
- package/dist/record/model/seal-manifest.d.cts +1 -1
- package/dist/record/model/seal-manifest.d.mts +1 -1
- package/dist/record/model/seal-manifest.d.ts +1 -1
- package/dist/run/cli/contribution.cjs +6 -32
- package/dist/run/cli/contribution.cjs.map +1 -1
- package/dist/run/host/runtime.cjs +1 -1
- package/dist/run/host/runtime.cjs.map +1 -1
- package/dist/run/storage/sqlite.cjs +7 -7
- package/dist/run/storage/sqlite.cjs.map +1 -1
- package/dist/runner/adapter-usage.cjs +5 -3
- package/dist/runner/adapter-usage.cjs.map +1 -1
- package/dist/runner/adapter-usage.d.cts +2 -2
- package/dist/runner/adapter-usage.d.mts +2 -2
- package/dist/runner/adapter-usage.d.ts +2 -2
- package/dist/runner/adoption.cjs +9 -12
- package/dist/runner/adoption.cjs.map +1 -1
- package/dist/runner/attempt-notes.cjs +8 -0
- package/dist/runner/attempt-notes.cjs.map +1 -0
- package/dist/runner/attempt-notes.d.cts +4 -0
- package/dist/runner/attempt-notes.d.mts +4 -0
- package/dist/runner/attempt-notes.d.ts +4 -0
- package/dist/runner/attempt-notes.js +8 -0
- package/dist/runner/attempt-notes.js.map +1 -0
- package/dist/runner/attempt.cjs +61 -73
- package/dist/runner/attempt.cjs.map +1 -1
- package/dist/runner/attempt.d.cts +3 -3
- package/dist/runner/attempt.d.mts +3 -3
- package/dist/runner/attempt.d.ts +3 -3
- package/dist/runner/command-plan.cjs +21 -26
- package/dist/runner/command-plan.cjs.map +1 -1
- package/dist/runner/command-plan.d.cts +4 -4
- package/dist/runner/command-plan.d.mts +4 -4
- package/dist/runner/command-plan.d.ts +4 -4
- package/dist/runner/command-plan.js +4 -4
- package/dist/runner/config-identity.cjs.map +1 -1
- package/dist/runner/config-identity.d.cts +2 -2
- package/dist/runner/config-identity.d.mts +2 -2
- package/dist/runner/config-identity.d.ts +2 -2
- package/dist/runner/discover.cjs +6 -6
- package/dist/runner/discover.cjs.map +1 -1
- package/dist/runner/eval-selection.cjs +2 -2
- package/dist/runner/eval-selection.cjs.map +1 -1
- package/dist/runner/eval-selection.d.cts +2 -2
- package/dist/runner/eval-selection.d.mts +2 -2
- package/dist/runner/eval-selection.d.ts +2 -2
- package/dist/runner/feedback/human.cjs +1 -1
- package/dist/runner/feedback/human.cjs.map +1 -1
- package/dist/runner/feedback/json.cjs +4 -2
- package/dist/runner/feedback/json.cjs.map +1 -1
- package/dist/runner/feedback/json.d.cts +1 -1
- package/dist/runner/feedback/json.d.mts +1 -1
- package/dist/runner/feedback/json.d.ts +1 -1
- package/dist/runner/feedback/sink.cjs +1 -1
- package/dist/runner/feedback/sink.cjs.map +1 -1
- package/dist/runner/feedback/sink.d.cts +1 -1
- package/dist/runner/feedback/sink.d.mts +1 -1
- package/dist/runner/feedback/sink.d.ts +1 -1
- package/dist/runner/fingerprint.cjs +1 -1
- package/dist/runner/fingerprint.cjs.map +1 -1
- package/dist/runner/project-target.cjs.map +1 -1
- package/dist/runner/project-target.d.cts +2 -2
- package/dist/runner/project-target.d.mts +2 -2
- package/dist/runner/project-target.d.ts +2 -2
- package/dist/runner/record/attachments.cjs +2 -2
- package/dist/runner/record/attachments.cjs.map +1 -1
- package/dist/runner/record/planning.cjs +8 -2
- package/dist/runner/record/planning.cjs.map +1 -1
- package/dist/runner/record.cjs +2 -0
- package/dist/runner/record.cjs.map +1 -1
- package/dist/runner/report.cjs +3 -3
- package/dist/runner/report.cjs.map +1 -1
- package/dist/runner/report.d.cts +1 -1
- package/dist/runner/report.d.mts +1 -1
- package/dist/runner/report.d.ts +1 -1
- package/dist/runner/reuse-plan.cjs +2 -2
- package/dist/runner/reuse-plan.cjs.map +1 -1
- package/dist/runner/run.cjs +10 -45
- package/dist/runner/run.cjs.map +1 -1
- package/dist/runner/sandbox-pool.cjs +1 -2
- package/dist/runner/sandbox-pool.cjs.map +1 -1
- package/dist/runner/setup-prefix-preparation.cjs +1 -1
- package/dist/runner/setup-prefix-preparation.cjs.map +1 -1
- package/dist/runner/teardown-registry.cjs +2 -2
- package/dist/runner/teardown-registry.cjs.map +1 -1
- package/dist/runner/teardown-registry.d.cts +1 -1
- package/dist/runner/teardown-registry.d.mts +1 -1
- package/dist/runner/teardown-registry.d.ts +1 -1
- package/dist/runner/types.cjs +4 -4
- package/dist/runner/types.cjs.map +1 -1
- package/dist/runner/types.d.cts +64 -93
- package/dist/runner/types.d.mts +64 -93
- package/dist/runner/types.d.ts +64 -93
- package/dist/runner/types.js +2 -2
- package/dist/sandbox/action.cjs +1 -1
- package/dist/sandbox/action.cjs.map +1 -1
- package/dist/sandbox/cli/contribution.cjs +17 -14
- package/dist/sandbox/cli/contribution.cjs.map +1 -1
- package/dist/sandbox/cli/contribution.d.cts +1 -1
- package/dist/sandbox/cli/contribution.d.mts +1 -1
- package/dist/sandbox/cli/contribution.d.ts +1 -1
- package/dist/sandbox/commands.cjs +1 -1
- package/dist/sandbox/commands.cjs.map +1 -1
- package/dist/sandbox/commands.d.cts +1 -1
- package/dist/sandbox/commands.d.mts +1 -1
- package/dist/sandbox/commands.d.ts +1 -1
- package/dist/sandbox/compose.cjs +2 -2
- package/dist/sandbox/compose.cjs.map +1 -1
- package/dist/sandbox/docker-profile/registry.cjs +5 -9
- package/dist/sandbox/docker-profile/registry.cjs.map +1 -1
- package/dist/sandbox/docker-profile/registry.d.cts +0 -3
- package/dist/sandbox/docker-profile/registry.d.mts +0 -3
- package/dist/sandbox/docker-profile/registry.d.ts +0 -3
- package/dist/sandbox/docker-profile/registry.js +6 -12
- package/dist/sandbox/docker-profile/runtime.cjs +1 -1
- package/dist/sandbox/docker-profile/runtime.cjs.map +1 -1
- package/dist/sandbox/docker-profile/schema.cjs +12 -16
- package/dist/sandbox/docker-profile/schema.cjs.map +1 -1
- package/dist/sandbox/docker-profile/schema.d.cts +2 -6
- package/dist/sandbox/docker-profile/schema.d.mts +2 -6
- package/dist/sandbox/docker-profile/schema.d.ts +2 -6
- package/dist/sandbox/docker-profile/schema.js +24 -32
- package/dist/sandbox/incus.cjs +2 -2
- package/dist/sandbox/incus.cjs.map +1 -1
- package/dist/sandbox/index.cjs +4 -35
- package/dist/sandbox/index.cjs.map +1 -1
- package/dist/sandbox/index.d.cts +4 -8
- package/dist/sandbox/index.d.mts +4 -8
- package/dist/sandbox/index.d.ts +4 -8
- package/dist/sandbox/index.js +116 -172
- package/dist/sandbox/index.mjs +116 -172
- package/dist/sandbox/layer.cjs +3 -3
- package/dist/sandbox/layer.cjs.map +1 -1
- package/dist/sandbox/link.cjs +5 -0
- package/dist/sandbox/link.cjs.map +1 -1
- package/dist/sandbox/link.d.cts +3 -0
- package/dist/sandbox/link.d.mts +3 -0
- package/dist/sandbox/link.d.ts +3 -0
- package/dist/sandbox/runtime.cjs +9 -4
- package/dist/sandbox/runtime.cjs.map +1 -1
- package/dist/shared/failure-class.cjs +5 -5
- package/dist/shared/failure-class.cjs.map +1 -1
- package/dist/shared/failure-class.d.cts +4 -10
- package/dist/shared/failure-class.d.mts +4 -10
- package/dist/shared/failure-class.d.ts +4 -10
- package/dist/shared/types.cjs.map +1 -1
- package/dist/shared/types.d.cts +1 -1
- package/dist/shared/types.d.mts +1 -1
- package/dist/shared/types.d.ts +1 -1
- package/dist/show/contribution.cjs +17 -2
- package/dist/show/contribution.cjs.map +1 -1
- package/dist/show/contribution.d.cts +14 -0
- package/dist/show/contribution.d.mts +14 -0
- package/dist/show/contribution.d.ts +14 -0
- package/dist/show/model.cjs +8 -5
- package/dist/show/model.cjs.map +1 -1
- package/dist/show/model.d.cts +11 -8
- package/dist/show/model.d.mts +11 -8
- package/dist/show/model.d.ts +11 -8
- package/dist/show/render.cjs +34 -22
- package/dist/show/render.cjs.map +1 -1
- package/dist/sources/projector.cjs +1 -1
- package/dist/sources/projector.cjs.map +1 -1
- package/dist/types.cjs +1 -1
- package/dist/types.cjs.map +1 -1
- package/dist/types.d.cts +1 -1
- package/dist/types.d.mts +1 -1
- package/dist/types.d.ts +1 -1
- package/dist/types.js +2 -2
- package/dist/view/app-dist/.vite/manifest.json +2 -2
- package/dist/view/app-dist/assets/{index-B3ijZRph.js → index-CxrOUvHC.js} +17 -17
- package/dist/view/app-dist/assets/{quality-cost-scatter-B--DfJ9s.js → quality-cost-scatter-B6Aiss7x.js} +1 -1
- package/dist/view/app-dist/index.html +1 -1
- package/dist/view/cli/contribution.cjs +1 -1
- package/dist/view/cli/contribution.cjs.map +1 -1
- package/dist/view/function-runtime.mjs +318 -121
- package/dist/view/http-protocol.d.cts +1 -1
- package/dist/view/http-protocol.d.mts +1 -1
- package/dist/view/http-protocol.d.ts +1 -1
- package/dist/view/inspection-host.cjs +2 -2
- package/dist/view/inspection-host.cjs.map +1 -1
- package/dist/view/inspection-host.d.cts +349 -331
- package/dist/view/inspection-host.d.mts +349 -331
- package/dist/view/inspection-host.d.ts +349 -331
- package/docs-site/zh/examples/integrations/ai-sdk-v7.mdx +6 -6
- package/docs-site/zh/examples/integrations/claude-sdk.mdx +5 -5
- package/docs-site/zh/examples/integrations/codex-sdk.mdx +4 -4
- package/docs-site/zh/examples/integrations/langgraph.mdx +4 -4
- package/docs-site/zh/examples/integrations/pi-sdk.mdx +5 -5
- package/docs-site/zh/explanation/adapter.mdx +6 -6
- package/docs-site/zh/explanation/assert.mdx +7 -7
- package/docs-site/zh/explanation/drive.mdx +4 -4
- package/docs-site/zh/explanation/hitl.mdx +2 -2
- package/docs-site/zh/explanation/judge.mdx +2 -2
- package/docs-site/zh/introduction.mdx +2 -2
- package/docs-site/zh/reference/builtin-agents.mdx +46 -49
- package/docs-site/zh/reference/cli.mdx +16 -14
- package/docs-site/zh/reference/define-agent.mdx +19 -19
- package/docs-site/zh/reference/define-config.mdx +7 -15
- package/docs-site/zh/reference/define-eval.mdx +20 -14
- package/docs-site/zh/reference/define-experiment.mdx +18 -39
- package/docs-site/zh/reference/events.mdx +1 -1
- package/docs-site/zh/reference/expect.mdx +21 -0
- package/docs-site/zh/reference/official-adapters.mdx +12 -5
- package/docs-site/zh/troubleshooting/debugging.mdx +2 -2
- package/docs-site/zh/troubleshooting/recover-after-kill.mdx +1 -1
- package/docs-site/zh/tutorials/agent-onboarding.mdx +2 -2
- package/docs-site/zh/tutorials/authoring.mdx +2 -2
- package/docs-site/zh/tutorials/compare-runs.mdx +1 -1
- package/docs-site/zh/tutorials/concurrency.mdx +8 -8
- package/docs-site/zh/tutorials/configuration.mdx +5 -5
- package/docs-site/zh/tutorials/control-run-cost.mdx +19 -19
- package/docs-site/zh/tutorials/eval-groups.mdx +1 -1
- package/docs-site/zh/tutorials/evaluation-kinds.mdx +5 -5
- package/docs-site/zh/tutorials/experiment-services.mdx +32 -32
- package/docs-site/zh/tutorials/handle-execution-failures.mdx +2 -28
- package/docs-site/zh/tutorials/plugins.mdx +49 -143
- package/docs-site/zh/tutorials/sandbox-agent.mdx +1 -1
- package/docs-site/zh/tutorials/sandbox-reuse.mdx +7 -7
- package/docs-site/zh/tutorials/upgrade-0-18.mdx +1 -1
- package/docs-site/zh/tutorials/upgrade-0-19.mdx +121 -0
- package/docs-site/zh/tutorials/upgrade-0-20.mdx +12 -0
- package/docs-site/zh/tutorials/verify-judge.mdx +2 -2
- package/docs-site/zh/tutorials/viewing-results.mdx +2 -2
- package/docs-site/zh/tutorials/write-experiment.mdx +1 -1
- package/docs-site/zh/tutorials/write-send.mdx +13 -13
- package/package.json +1 -1
- package/dist/agents/effect-runtime.cjs.map +0 -1
- package/dist/agents/effect-runtime.d.cts +0 -29
- package/dist/agents/effect-runtime.d.mts +0 -29
- package/dist/agents/effect-runtime.d.ts +0 -29
- package/dist/agents/effect-runtime.js +0 -16
- package/dist/agents/effect-runtime.js.map +0 -1
- package/dist/agents/session-slot.cjs.map +0 -1
- package/dist/agents/session-slot.d.cts +0 -12
- package/dist/agents/session-slot.d.mts +0 -12
- package/dist/agents/session-slot.d.ts +0 -12
- package/dist/agents/session-slot.js +0 -6
- package/dist/agents/session-slot.js.map +0 -1
- package/dist/model-slots.js +0 -14
- package/dist/model-slots.js.map +0 -1
|
@@ -198,7 +198,7 @@ Adapter 侧按 `requestId` 把裁决交回应用,不按顺序猜。被人拒
|
|
|
198
198
|
interface AgentContext {
|
|
199
199
|
// 每轮都在的反馈与运行上下文
|
|
200
200
|
readonly signal: AbortSignal; // 运行器的超时与取消:透传给你发出的每个请求
|
|
201
|
-
readonly session: AgentSession; //
|
|
201
|
+
readonly session: AgentSession; // 本条会话线的状态键
|
|
202
202
|
progress(update: { message: string; current?: number; total?: number }): void;
|
|
203
203
|
diagnostic(input: {
|
|
204
204
|
code: string;
|
|
@@ -227,9 +227,9 @@ interface AgentSession {
|
|
|
227
227
|
capture(id: string | undefined): void; // 记回传的 id。只在还没记过时落地
|
|
228
228
|
|
|
229
229
|
// Adapter 私有状态:客户端历史、HITL 停轮现场等
|
|
230
|
-
get<T>(
|
|
231
|
-
set<T>(
|
|
232
|
-
take<T>(
|
|
230
|
+
get<T>(key: SessionKey<T>): T | undefined;
|
|
231
|
+
set<T>(key: SessionKey<T>, value: T): void;
|
|
232
|
+
take<T>(key: SessionKey<T>): T | undefined; // 取到即清除,一次消费
|
|
233
233
|
}
|
|
234
234
|
```
|
|
235
235
|
|
|
@@ -237,7 +237,7 @@ Runner 为 Agent 的 `setup`、每次 `send` 和 `teardown` 分别绑定 lifecyc
|
|
|
237
237
|
|
|
238
238
|
`ctx` 里没有要你检查的标志位。三个档位字段都是"透传"语义:`model`、`flags` 由 Experiment 声明、运行器原样递过来,Adapter 只负责随请求转发给应用,不解释它们的含义。`telemetry` 仅在配置了 OTel 接入时出现,`send` 里只需要把 `headers` spread 进请求头。接收端点在 `defineConfig` 里固定、由应用启动时指向,不从这里传,见[OTel 接入](/zh/tutorials/connect-otel)。`experimentId` 是路径推导出的稳定标识,可以在动态 Sandbox callback 中按实验隔离跨 Attempt 的状态,见 [Sandbox · 按顺序准备 Sandbox](/zh/tutorials/sandbox-providers#按顺序准备-sandbox)。
|
|
239
239
|
|
|
240
|
-
`session` 是本条会话线的自有状态,[NiceEval](https://niceeval.com/) 对它只承诺一件事:**同一条会话线的每次 `send` 拿到同一个 `ctx.session`,新会话线(评估用例的第一轮,或 `t.newSession()` 之后)拿到一个全新的。** 服务端历史用 `id` / `capture` 续接。客户端历史和 HITL 停轮现场由 Adapter 在模块作用域用 `
|
|
240
|
+
`session` 是本条会话线的自有状态,[NiceEval](https://niceeval.com/) 对它只承诺一件事:**同一条会话线的每次 `send` 拿到同一个 `ctx.session`,新会话线(评估用例的第一轮,或 `t.newSession()` 之后)拿到一个全新的。** 服务端历史用 `id` / `capture` 续接。客户端历史和 HITL 停轮现场由 Adapter 在模块作用域用 `createSessionKey<T>(name)` 创建 typed key,再经 `get` / `set` / `take` 存取。`take` 取到即清除。key 按 symbol 身份隔离,即使名字相同也不会冲突。
|
|
241
241
|
|
|
242
242
|
### 返回:`Turn`
|
|
243
243
|
|
|
@@ -299,7 +299,7 @@ Sandbox Agent,只有它的回调拿到带真实 `sandbox` 的 `SandboxAgentCon
|
|
|
299
299
|
| `t` 上解锁什么 | 证据是什么 | 你写什么 |
|
|
300
300
|
|---|---|---|
|
|
301
301
|
| `t.send`、`t.sendFile`、`t.check`… | 任何 Agent 都有 | 无 |
|
|
302
|
-
| 多次 `t.send()`、`t.reply`、`t.newSession()` | `send` 里接了 `ctx.session` 的续接存取器(typed
|
|
302
|
+
| 多次 `t.send()`、`t.reply`、`t.newSession()` | `send` 里接了 `ctx.session` 的续接存取器(typed key 或 `id` + `capture()`)——没接则每轮各是新对话 | 无——存取器就在 `ctx` 上 |
|
|
303
303
|
| `t.respond()`、状态检查等 HITL | send 返回过 `"waiting"` + `input.requested` 事件 | 无——做到了就是有 |
|
|
304
304
|
| `turn.calledTool()` / `turn.toolOrder()` 等正断言 | events 里有配对的 `operation.started` / `operation.finished` | 无——有事件就能断 |
|
|
305
305
|
| `t.notCalledTool()` / `t.usedNoTools()` 等负断言**可信** | 事件来自带完整性证明的官方转换器 | 无——证明随转换器返回值走 |
|
|
@@ -11,10 +11,10 @@ NiceEval 按 Assertion 评估,一条 Assertion 就是一项检查。调用 `t.
|
|
|
11
11
|
```ts
|
|
12
12
|
import { includes } from "niceeval/expect";
|
|
13
13
|
|
|
14
|
-
t.check(turn.
|
|
14
|
+
t.check(turn.reply, includes("完成")).label("回复说明完成");
|
|
15
15
|
turn.succeeded().label("Turn 完成");
|
|
16
16
|
turn.calledTool("get_weather").label("查询天气");
|
|
17
|
-
t.judge({ question, answer: turn.
|
|
17
|
+
t.judge({ question, answer: turn.reply }, answerQuality)
|
|
18
18
|
.gate(0.8).label("回答质量");
|
|
19
19
|
```
|
|
20
20
|
|
|
@@ -29,10 +29,10 @@ t.judge({ question, answer: turn.message }, answerQuality)
|
|
|
29
29
|
```ts
|
|
30
30
|
import { equals, includes, matches, satisfies, toolMatch } from "niceeval/expect";
|
|
31
31
|
|
|
32
|
-
t.check(turn.
|
|
32
|
+
t.check(turn.reply, includes("订单已确认"));
|
|
33
33
|
t.check(turn.data, equals({ status: "refund", amount: 42 }));
|
|
34
34
|
t.check(turn.data, matches(OrderSchema));
|
|
35
|
-
t.check(turn.
|
|
35
|
+
t.check(turn.reply.length, satisfies("回复不是空文本", (length) => length > 0));
|
|
36
36
|
```
|
|
37
37
|
|
|
38
38
|
结果是 `matched` 还是 `mismatched`,只说明这个值是否满足这条规则,不说明规则本身写得对不对。任务允许多种正确结果时,规则要覆盖所有这些结果。
|
|
@@ -63,7 +63,7 @@ turn.calledTool(toolMatch("read_file").exactly(2)).label("读取两次");
|
|
|
63
63
|
连续值检查和 Judge 给出 0 到 1 之间的测量值。测量值默认不影响判定,在 handle 上调用 `.gate(minimum)` 后,低于最低分才判 `failed`。
|
|
64
64
|
|
|
65
65
|
```ts
|
|
66
|
-
t.judge({ task, answer: turn.
|
|
66
|
+
t.judge({ task, answer: turn.reply }, actionableQuality)
|
|
67
67
|
.gate(0.8).label("步骤可执行");
|
|
68
68
|
```
|
|
69
69
|
|
|
@@ -74,7 +74,7 @@ Assertion 默认只记录结果,不计分;加上 `.score(n)` 才贡献分数
|
|
|
74
74
|
```ts
|
|
75
75
|
turn.calledTool("search"); // 只保存 evaluation
|
|
76
76
|
turn.calledTool("search").score(2); // matched 时 +2
|
|
77
|
-
t.check({ task, answer: turn.
|
|
77
|
+
t.check({ task, answer: turn.reply }, completeness).score(5); // Measurement 0.8 时 +4
|
|
78
78
|
t.score(5); // 直接 +5
|
|
79
79
|
```
|
|
80
80
|
|
|
@@ -93,7 +93,7 @@ t.score(5); // 直接 +5
|
|
|
93
93
|
```ts
|
|
94
94
|
const turn = await t.send("搜索资料并说明结论。");
|
|
95
95
|
await turn.succeeded().orStop();
|
|
96
|
-
const search = await t.check(turn.
|
|
96
|
+
const search = await t.check(turn.reply, includes("结论")).orStop();
|
|
97
97
|
```
|
|
98
98
|
|
|
99
99
|
停止只影响 `await` 之后还没执行的代码,这部分代码不会产生结果。已经发生的普通 JavaScript 副作用不会撤销,之前启动的并发任务也不会被取消。
|
|
@@ -13,7 +13,7 @@ description: "t.send() 和它返回的 Turn、t.sendFile()、多轮对话、t.ne
|
|
|
13
13
|
```ts
|
|
14
14
|
const turn = await t.send("布鲁克林今天天气怎么样?");
|
|
15
15
|
|
|
16
|
-
turn.
|
|
16
|
+
turn.reply; // 最后一条 assistant 消息
|
|
17
17
|
turn.data; // 结构化产物:仅当这次 send 声明了 output 时存在,类型随声明(见下)
|
|
18
18
|
turn.status; // "completed" | "failed" | "waiting"
|
|
19
19
|
turn.events; // 这一轮的 StreamEvent[]
|
|
@@ -21,7 +21,7 @@ turn.usage; // { inputTokens, outputTokens, ... },adapter 报了才有
|
|
|
21
21
|
turn.succeeded().label("本轮完成"); // 这一轮没失败、也没卡在未回答的 HITL 上
|
|
22
22
|
```
|
|
23
23
|
|
|
24
|
-
`t.reply` 是主 session 最后一条 assistant 消息的简写,等价于最近一次 `t.send()` 返回的 `turn.
|
|
24
|
+
`t.reply` 是主 session 最后一条 assistant 消息的简写,等价于最近一次 `t.send()` 返回的 `turn.reply`。`t.events` 是主 session 已累积的完整事件流。
|
|
25
25
|
|
|
26
26
|
要结构化输出时,在 send 上声明 `output`(Standard Schema,zod 即可)。声明既是给应用的要求,也是 `turn.data` 的类型来源:
|
|
27
27
|
|
|
@@ -44,7 +44,7 @@ adapter 返回后运行器立刻按声明校验:`data` 不匹配,本轮直
|
|
|
44
44
|
|
|
45
45
|
```ts
|
|
46
46
|
const turn = await t.sendFile("fixtures/invoice.png", "这张发票的总额是多少?");
|
|
47
|
-
t.check(turn.
|
|
47
|
+
t.check(turn.reply, includes("$"));
|
|
48
48
|
```
|
|
49
49
|
|
|
50
50
|
## 多轮对话
|
|
@@ -62,7 +62,7 @@ await t.send("好,发出去。");
|
|
|
62
62
|
t.calledTool("send_email").label("已发送");
|
|
63
63
|
```
|
|
64
64
|
|
|
65
|
-
多轮 `t.send()` 能不能真的续上上文,取决于 Adapter 的 `send` 是否接了 `ctx.session` 的会话续接存取器(typed
|
|
65
|
+
多轮 `t.send()` 能不能真的续上上文,取决于 Adapter 的 `send` 是否接了 `ctx.session` 的会话续接存取器(typed key 或 `id` + `capture()`)——没接时每轮各是一场新对话。怎么接见 [Adapter](/zh/explanation/adapter) 与[写 send](/zh/tutorials/write-send)。
|
|
66
66
|
|
|
67
67
|
## 独立会话 —— `t.newSession()`
|
|
68
68
|
|
|
@@ -61,7 +61,7 @@ HITL 对 Adapter 的全部要求就三件事——前两件发生在停下的那
|
|
|
61
61
|
2. **每个待回答的问题吐一条 `input.requested`**,`id` 稳定、字段尽量填全——评估侧的检查和对位全靠它们。
|
|
62
62
|
3. **下一次 `send` 先交裁决、再续跑**:从 `input.responses` 按 `requestId` 把裁决交回应用(不要按顺序猜),然后接着上一轮挂起的地方继续,而不是重发请求。
|
|
63
63
|
|
|
64
|
-
"挂起的现场"(比如读了一半的 SSE 流)存在本会话线的 `ctx.session` 上。Adapter 用 `
|
|
64
|
+
"挂起的现场"(比如读了一半的 SSE 流)存在本会话线的 `ctx.session` 上。Adapter 用 `createSessionKey<Pending>()` 声明私有 key,停轮时 `ctx.session.set(key, pending)`,回答轮 `ctx.session.take(key)` 取回,取到即清除。怎么和流式驱动拼起来,见[写 send](/zh/tutorials/write-send#第五步:hitl) 第五步的完整骨架。
|
|
65
65
|
|
|
66
66
|
和 [NiceEval](https://niceeval.com/) 的其它能力一样,HITL 没有布尔声明:**做到了就是有**。send 返回过 `"waiting"` 并吐了 `input.requested`,`t.respond` 就能工作。没做到,评估用例会在状态检查或 `requireInputRequest()` 上明确失败,而不是静默假通过。能力如何从构造中来,见 [Adapter](/zh/explanation/adapter#能力从哪来:构造证明,不是问卷)。
|
|
67
67
|
|
|
@@ -83,5 +83,5 @@ HITL 对 Adapter 的全部要求就三件事——前两件发生在停下的那
|
|
|
83
83
|
|
|
84
84
|
- [Drive](/zh/explanation/drive#人工介入-hitl) — 评估侧的完整用法:状态检查、`t.requireInputRequest()`、`t.respond()` / `t.respondAll()`。
|
|
85
85
|
- [Adapter](/zh/explanation/adapter#不同回答的入参) — 回答到 Adapter 的结构化入参,四种典型形态。
|
|
86
|
-
- [写 send](/zh/tutorials/write-send) — Adapter 侧实操:typed session
|
|
86
|
+
- [写 send](/zh/tutorials/write-send) — Adapter 侧实操:typed session key 与流式 + HITL 的完整骨架。
|
|
87
87
|
- [接入你的 Agent](/zh/tutorials/connect-your-agent) — 接入全景:最小接入、参数通道与增量地图。
|
|
@@ -39,7 +39,7 @@ export default defineEval({
|
|
|
39
39
|
const change = "修改持久化字段并提供回滚方案";
|
|
40
40
|
const turn = await t.send(`解释这项变更:${change}`);
|
|
41
41
|
|
|
42
|
-
t.judge({ change, explanation: turn.
|
|
42
|
+
t.judge({ change, explanation: turn.reply }, explainsRisk)
|
|
43
43
|
.gate(0.8)
|
|
44
44
|
.label("风险说明质量");
|
|
45
45
|
},
|
|
@@ -91,7 +91,7 @@ import { defineConfig } from "niceeval";
|
|
|
91
91
|
import { OpenAIProvider } from "niceeval/judge";
|
|
92
92
|
|
|
93
93
|
export default defineConfig({
|
|
94
|
-
|
|
94
|
+
judgeProvider: OpenAIProvider({
|
|
95
95
|
model: "judge-model",
|
|
96
96
|
baseUrl: "https://gateway.example.com/v1",
|
|
97
97
|
apiKeyEnv: "JUDGE_GATEWAY_KEY",
|
|
@@ -44,12 +44,12 @@ export default defineEval({
|
|
|
44
44
|
turn.succeeded().label("Turn 成功");
|
|
45
45
|
|
|
46
46
|
t.calledTool("get_weather").label("调用天气工具");
|
|
47
|
-
t.check(turn.
|
|
47
|
+
t.check(turn.reply, includes("天气")).label("说明天气");
|
|
48
48
|
|
|
49
49
|
const second = await t.send("那上海明天呢?");
|
|
50
50
|
t.check(second.message, includes("上海")).label("第二轮接得上上下文");
|
|
51
51
|
|
|
52
|
-
t.judge({ question: turn.input, answer: turn.
|
|
52
|
+
t.judge({ question: turn.input, answer: turn.reply }, groundedAnswer).gate(0.7)
|
|
53
53
|
.label("回答有依据");
|
|
54
54
|
},
|
|
55
55
|
});
|
|
@@ -11,7 +11,7 @@ description: "NiceEval 内置的 claude-code、codex、bub 适配器分别做到
|
|
|
11
11
|
| 能力 | 对应的断言 / API |
|
|
12
12
|
|---|---|
|
|
13
13
|
| 收发消息(基础契约) | `t.send()`(可多次调用)、`t.reply`、`t.check(turn.data, equals(...))` / `matches(...)`、按状态判断的 `t.succeeded()` |
|
|
14
|
-
| 事件流完整性 | `calledTool` / `usedNoTools` / `maxToolCalls` / `noFailedActions` / `event` 等作用域断言;`toolOrder` / `eventOrder` 只在 Turn 或 Session 上接收 matcher。消息用 `t.check(turn.
|
|
14
|
+
| 事件流完整性 | `calledTool` / `usedNoTools` / `maxToolCalls` / `noFailedActions` / `event` 等作用域断言;`toolOrder` / `eventOrder` 只在 Turn 或 Session 上接收 matcher。消息用 `t.check(turn.reply, includes(...))` 或 `t.check(turn.reply, pattern(...))`。**负断言(`notCalledTool` 等)有完整事件流才可信** |
|
|
15
15
|
| 会话续接 | 跨轮记忆断言、`t.newSession()` 会话隔离 |
|
|
16
16
|
| HITL(人工介入) | `t.check(turn.status, equals("waiting"))`、`t.requireInputRequest()`、`t.respond()` / `t.respondAll()` |
|
|
17
17
|
| `tracing` | trace decoding、`niceeval view` 的调用瀑布图 |
|
|
@@ -103,7 +103,7 @@ maxTurns?: number;
|
|
|
103
103
|
mcpServers?: readonly McpServer[];
|
|
104
104
|
```
|
|
105
105
|
|
|
106
|
-
额外 MCP server(每个 Sandbox
|
|
106
|
+
额外 MCP server(每个 Sandbox before 时写进用户级 ~/.claude.json)。
|
|
107
107
|
stdio 形态写 command(可带 args / env);Streamable HTTP 形态写 url(可带 headers,
|
|
108
108
|
逐字进请求头),落成 { "type": "http", "url": …, "headers": … } 条目。
|
|
109
109
|
|
|
@@ -133,30 +133,30 @@ settingsFile?: string;
|
|
|
133
133
|
一份完整的 Claude Code `settings.json`(官方格式)在本地项目里的路径 —— 相对运行
|
|
134
134
|
niceeval 的项目根(含 `niceeval.config.ts` 的目录)解析,不是 Sandbox 内路径;只接受
|
|
135
135
|
项目根内的相对路径,包含 `..` 的路径、绝对路径、`~` 路径和解析后逃出项目根的符号链接
|
|
136
|
-
都在
|
|
136
|
+
都在 before 阶段报错。原始字节原样上传为 Sandbox 里原本为空的用户级 `~/.claude/settings.json`
|
|
137
137
|
(不继承宿主机配置、不拼接、不重新序列化);保留键 `model` 与 `env` 出现在文件里
|
|
138
|
-
|
|
138
|
+
before 报错。manifest 只记项目相对路径与字节 SHA-256,不落正文。
|
|
139
139
|
|
|
140
|
-
#### `
|
|
140
|
+
#### `before`
|
|
141
141
|
|
|
142
142
|
```ts
|
|
143
|
-
|
|
143
|
+
before?: readonly SandboxCommand[];
|
|
144
144
|
```
|
|
145
145
|
|
|
146
146
|
安装后按数组顺序运行的用户 Hook(复用 SandboxCommand 的窄上下文):在写 settings、挂 MCP、
|
|
147
|
-
装 Skills / Plugin、写 manifest 全部完成后执行,适合跑插件自带的
|
|
147
|
+
装 Skills / Plugin、写 manifest 全部完成后执行,适合跑插件自带的 before 脚本这类
|
|
148
148
|
「安装产物就位后才能跑」的过程动作。抛错按基础设施错误计(attempt errored)。
|
|
149
149
|
见 docs/feature/adapters/library/coding-agent-extensions.md「安装后运行脚本」。
|
|
150
150
|
|
|
151
|
-
#### `
|
|
151
|
+
#### `after`
|
|
152
152
|
|
|
153
153
|
```ts
|
|
154
|
-
|
|
154
|
+
after?: readonly SandboxCommand[];
|
|
155
155
|
```
|
|
156
156
|
|
|
157
|
-
与 `
|
|
158
|
-
之前执行(LIFO 镜像 —— `
|
|
159
|
-
之前),当且仅当 `
|
|
157
|
+
与 `before` 成对的收尾 Hook:按 `before` 的逆序语义,在 agent 自己的 after 步骤
|
|
158
|
+
之前执行(LIFO 镜像 —— `before` 跑在 agent 安装之后,`after` 就跑在 agent 收尾
|
|
159
|
+
之前),当且仅当 `before` 的时点走到过才触发。抛错按基础设施错误计,由 after 段
|
|
160
160
|
按 teardown-failed 诊断收束。
|
|
161
161
|
见 docs/feature/adapters/library/coding-agent-extensions.md「安装后运行脚本」。
|
|
162
162
|
|
|
@@ -186,7 +186,7 @@ env?: Readonly<globalThis.Record<string, string>>;
|
|
|
186
186
|
|
|
187
187
|
注入每次 Codex CLI 进程的额外环境变量。首轮 `codex exec` 与续轮 `codex exec resume`
|
|
188
188
|
使用同一份声明;Codex 启动的 lifecycle Hook、MCP 动态 header 与命令子进程都会继承。
|
|
189
|
-
值只经 Sandbox command options 传入,不拼进 shell 文本或写入
|
|
189
|
+
值只经 Sandbox command options 传入,不拼进 shell 文本或写入 before manifest,并全部按
|
|
190
190
|
潜在敏感值从 timing / execution / error 证据中脱敏。`CODEX_API_KEY` 仍由 `apiKey` 或
|
|
191
191
|
宿主同名环境变量提供,Adapter 的鉴权值会覆盖这里的同名键。
|
|
192
192
|
env value 不进入 carry 身份。会改变被测行为的非敏感值必须同时声明在 Experiment flags
|
|
@@ -200,7 +200,7 @@ Sandbox factory 的 `pathPrepend`(见 docs/feature/sandbox/library.md)。
|
|
|
200
200
|
mcpServers?: readonly McpServer[];
|
|
201
201
|
```
|
|
202
202
|
|
|
203
|
-
额外 MCP server(每个 Sandbox
|
|
203
|
+
额外 MCP server(每个 Sandbox before 时追加进 ~/.codex/config.toml)。
|
|
204
204
|
stdio 形态(command/args/env)写 [mcp_servers.<name>] 的 command 行;
|
|
205
205
|
Streamable HTTP 形态(url/headers)写 url 行,headers 进 [mcp_servers.<name>.http_headers] 子表。
|
|
206
206
|
|
|
@@ -231,31 +231,31 @@ configFile?: string;
|
|
|
231
231
|
一份完整的 Codex `config.toml`(官方 TOML 格式)在本地项目里的路径 —— 相对运行
|
|
232
232
|
niceeval 的项目根(含 `niceeval.config.ts` 的目录)解析,不是 Sandbox 内路径;只接受
|
|
233
233
|
项目根内的相对路径,包含 `..` 的路径、绝对路径、`~` 路径和解析后逃出项目根的符号链接
|
|
234
|
-
都在
|
|
234
|
+
都在 before 阶段报错。原始字节原样并入 Sandbox 里原本为空的用户级 `~/.codex/config.toml`
|
|
235
235
|
(不继承宿主机配置、不解析后重写);保留键 `model`、`model_provider`、`model_providers`、
|
|
236
|
-
`model_reasoning_effort`、`mcp_servers`、`otel` 出现在文件里
|
|
236
|
+
`model_reasoning_effort`、`mcp_servers`、`otel` 出现在文件里 before 报错。manifest 只记
|
|
237
237
|
项目相对路径与字节 SHA-256,不落正文。
|
|
238
238
|
|
|
239
|
-
#### `
|
|
239
|
+
#### `before`
|
|
240
240
|
|
|
241
241
|
```ts
|
|
242
|
-
|
|
242
|
+
before?: readonly SandboxCommand[];
|
|
243
243
|
```
|
|
244
244
|
|
|
245
245
|
安装后按数组顺序运行的用户 Hook(复用 SandboxCommand 的窄上下文):在写主配置、挂 MCP、
|
|
246
|
-
装 Skills / Plugin、写 manifest 全部完成后执行,适合跑插件自带的
|
|
246
|
+
装 Skills / Plugin、写 manifest 全部完成后执行,适合跑插件自带的 before 脚本这类
|
|
247
247
|
「安装产物就位后才能跑」的过程动作。抛错按基础设施错误计(attempt errored)。
|
|
248
248
|
见 docs/feature/adapters/library/coding-agent-extensions.md「安装后运行脚本」。
|
|
249
249
|
|
|
250
|
-
#### `
|
|
250
|
+
#### `after`
|
|
251
251
|
|
|
252
252
|
```ts
|
|
253
|
-
|
|
253
|
+
after?: readonly SandboxCommand[];
|
|
254
254
|
```
|
|
255
255
|
|
|
256
|
-
与 `
|
|
257
|
-
之前执行(LIFO 镜像 —— `
|
|
258
|
-
之前),当且仅当 `
|
|
256
|
+
与 `before` 成对的收尾 Hook:按 `before` 的逆序语义,在 agent 自己的 after 步骤
|
|
257
|
+
之前执行(LIFO 镜像 —— `before` 跑在 agent 安装之后,`after` 就跑在 agent 收尾
|
|
258
|
+
之前),当且仅当 `before` 的时点走到过才触发。抛错按基础设施错误计,由 after 段
|
|
259
259
|
按 teardown-failed 诊断收束。
|
|
260
260
|
见 docs/feature/adapters/library/coding-agent-extensions.md「安装后运行脚本」。
|
|
261
261
|
|
|
@@ -269,10 +269,10 @@ apiKey?: string;
|
|
|
269
269
|
|
|
270
270
|
OpenAI 兼容代理的 API key。省略时读 BUB_API_KEY env。
|
|
271
271
|
|
|
272
|
-
#### `
|
|
272
|
+
#### `baseUrl`
|
|
273
273
|
|
|
274
274
|
```ts
|
|
275
|
-
|
|
275
|
+
baseUrl?: string;
|
|
276
276
|
```
|
|
277
277
|
|
|
278
278
|
OpenAI 兼容代理的 base URL。省略时读 BUB_API_BASE env。
|
|
@@ -292,8 +292,7 @@ skills?: SkillSpec[];
|
|
|
292
292
|
version?: string;
|
|
293
293
|
```
|
|
294
294
|
|
|
295
|
-
|
|
296
|
-
永远是确定版本,不装 latest —— 被测对象的版本要能从实验配置读出来。
|
|
295
|
+
固定 Bub 0.5.1 协议。省略或填写 "0.5.1";其它版本在定义期抛出 TypeError。
|
|
297
296
|
|
|
298
297
|
#### `otelPlugin`
|
|
299
298
|
|
|
@@ -303,9 +302,7 @@ otelPlugin?: string;
|
|
|
303
302
|
|
|
304
303
|
OTel tape store 插件的 git 依赖(时间轨的来源)。省略时用 NiceEval 钉的默认 pin。
|
|
305
304
|
|
|
306
|
-
|
|
307
|
-
插件 commit 按 republic 的类型校验,配 Bub ≤ 0.3.9。配错代不会安装失败,而是 span 全被拒、
|
|
308
|
-
时间轨静默为空 —— 所以往回钉 `version` 时必须同批钉配套的插件 commit。
|
|
305
|
+
自定义插件必须支持固定版本 Bub 0.5.1 的 tape 协议。
|
|
309
306
|
|
|
310
307
|
#### `pythonPlugins`
|
|
311
308
|
|
|
@@ -313,29 +310,29 @@ OTel tape store 插件的 git 依赖(时间轨的来源)。省略时用 NiceEval
|
|
|
313
310
|
pythonPlugins?: PythonPluginSpec[];
|
|
314
311
|
```
|
|
315
312
|
|
|
316
|
-
额外装进 bub tool 环境的 Python Package,每个 Sandbox
|
|
313
|
+
额外装进 bub tool 环境的 Python Package,每个 Sandbox before 时进 `uv tool install … --with <pkg>`。
|
|
317
314
|
规范化后的 package 列表进安装 checkpoint key:plugin 集合不同的两个 agent 变体不会复用同一个
|
|
318
315
|
安装 checkpoint(否则第二个变体会静默拿到第一个变体的环境)。
|
|
319
316
|
|
|
320
|
-
#### `
|
|
317
|
+
#### `before`
|
|
321
318
|
|
|
322
319
|
```ts
|
|
323
|
-
|
|
320
|
+
before?: SandboxCommand[];
|
|
324
321
|
```
|
|
325
322
|
|
|
326
323
|
安装后按数组顺序运行的用户 Hook(复用 SandboxCommand 的窄上下文):在装 bub、装 Skills /
|
|
327
324
|
Python package、写 manifest 全部完成后执行。抛错按基础设施错误计(attempt errored)。
|
|
328
325
|
见 docs/feature/adapters/library/coding-agent-extensions.md「安装后运行脚本」。
|
|
329
326
|
|
|
330
|
-
#### `
|
|
327
|
+
#### `after`
|
|
331
328
|
|
|
332
329
|
```ts
|
|
333
|
-
|
|
330
|
+
after?: SandboxCommand[];
|
|
334
331
|
```
|
|
335
332
|
|
|
336
|
-
与 `
|
|
337
|
-
之前执行(LIFO 镜像 —— `
|
|
338
|
-
之前),当且仅当 `
|
|
333
|
+
与 `before` 成对的收尾 Hook:按 `before` 的逆序语义,在 agent 自己的 after 步骤
|
|
334
|
+
之前执行(LIFO 镜像 —— `before` 跑在 agent 安装之后,`after` 就跑在 agent 收尾
|
|
335
|
+
之前),当且仅当 `before` 的时点走到过才触发。抛错按基础设施错误计,由 after 段
|
|
339
336
|
按 teardown-failed 诊断收束。
|
|
340
337
|
见 docs/feature/adapters/library/coding-agent-extensions.md「安装后运行脚本」。
|
|
341
338
|
|
|
@@ -358,7 +355,7 @@ export default uiMessageStreamAgent({
|
|
|
358
355
|
它替你做好的能力:
|
|
359
356
|
|
|
360
357
|
- **收发 + 事件流**:SSE 帧经 `ai` 包官方的框架无关 reducer `readUIMessageStream`(`useChat` 内部同款)归约,工具调用/结果/消息文本从消息 parts 直构——**不要求应用接 OTel**。
|
|
361
|
-
- **会话续接**:协议是服务端零状态、「客户端带全量历史」——工厂用 Adapter 私有的 typed
|
|
358
|
+
- **会话续接**:协议是服务端零状态、「客户端带全量历史」——工厂用 Adapter 私有的 typed key 存整份 `UIMessage[]`,每轮原样重放。新会话线(`t.newSession()` 之后)还没有写过这个 key。
|
|
362
359
|
- **HITL**:AI SDK v7 tool approval(工具带 `needsApproval: true`)原生映射——part 停在 `approval-requested` 时该 Turn 的 `status: "waiting"` + `input.requested`。`t.respond("approve" / "deny")` 翻译成 `approval-responded` 原地改写该 part、原样重发 `messages` 触发服务端续跑(和真实前端 `addToolApprovalResponse()` + `sendMessage()` 的协议行为一致)。它没有单独的 approve 端点。
|
|
363
360
|
- **拒绝**:调用以 `rejected` 落进事件流,且默认带「不要重试」的 reason(`denyReason` 可覆盖)——不带的话模型经常原样重发同一个调用。
|
|
364
361
|
- **usage / 瀑布图**:UI Message Stream 协议帧里没有 usage,所以 `t.maxTokens` 这类用量断言在这个内置件上默认没有数据(应用把 usage 放进 message metadata 属于应用自己的协议扩展)。瀑布图是另一回事:应用有 OTel 埋点(如官方 `@ai-sdk/otel`)时,按 [OTel 接入](/zh/tutorials/connect-otel)把 span 发给 [NiceEval](https://niceeval.com/),`niceeval view` 就有完整瀑布图——span 只进瀑布图,不喂断言。
|
|
@@ -486,24 +483,24 @@ return driveFrameStream(frames, stream, ctx); // 逐帧喂 stream.add()
|
|
|
486
483
|
|
|
487
484
|
## 通用「拼装方式」件:`driveFrameStream` / `deltaStream` + `ctx.session`
|
|
488
485
|
|
|
489
|
-
一个手写 send 里真正互不相干的只有三段:transport(怎么发)、reduce(原始数据 → 事件,上一节的转换器管这个)、编排(会话续接 + HITL 暂停恢复)。第三段和任何具体协议无关,纯粹是控制流模式。服务端历史用 `ctx.session.id` / `capture`,客户端历史和 HITL 停轮现场用 `
|
|
486
|
+
一个手写 send 里真正互不相干的只有三段:transport(怎么发)、reduce(原始数据 → 事件,上一节的转换器管这个)、编排(会话续接 + HITL 暂停恢复)。第三段和任何具体协议无关,纯粹是控制流模式。服务端历史用 `ctx.session.id` / `capture`,客户端历史和 HITL 停轮现场用 `createSessionKey<T>()` 声明的 Adapter 私有 key,经 `ctx.session.get` / `set` / `take` 存取(`AgentSession`,见 [Adapter 概念](/zh/explanation/adapter#上下文:agentcontext))。剩下真正跨协议复用的只有两个官方件:
|
|
490
487
|
|
|
491
488
|
| 件 | 解决什么 |
|
|
492
489
|
|---|---|
|
|
493
|
-
| `driveFrameStream(cursor, reducer, ctx, onFrame?)` | 逐帧喂 reducer、处理传输帧、检测 HITL 暂停信号——循环本身收成一个函数。暂停时 `cursor` 不关闭,`onFrame` 里用 `ctx.session.set(
|
|
490
|
+
| `driveFrameStream(cursor, reducer, ctx, onFrame?)` | 逐帧喂 reducer、处理传输帧、检测 HITL 暂停信号——循环本身收成一个函数。暂停时 `cursor` 不关闭,`onFrame` 里用 `ctx.session.set(key, cursor)` 存住它,回答轮 `ctx.session.take(key)` 取回接着读,不重新发起请求 |
|
|
494
491
|
| `deltaStream(spec)` | 逐 token / 逐参数增量的通用累加器——原始 OpenAI/Anthropic 流式 API、自己手写的 token-by-token 后端这类"没有整段落地帧"的协议用它。声明"这一帧对应哪个操作"(文本增量/工具参数增量/收尾),拼接时机它自己管 |
|
|
495
492
|
|
|
496
493
|
```ts
|
|
497
|
-
const
|
|
494
|
+
const pendingKey = createSessionKey<Pending>("my-adapter/pending");
|
|
498
495
|
|
|
499
496
|
// send 一进来先看有没有挂起的现场(HITL 回答轮)
|
|
500
|
-
const pending = ctx.session.take(
|
|
497
|
+
const pending = ctx.session.take(pendingKey);
|
|
501
498
|
if (pending) {
|
|
502
499
|
// ……按 input.responses 对位取裁决、把审批交回应用……
|
|
503
500
|
return driveFrameStream(pending.cursor, pending.stream, ctx, onFrame);
|
|
504
501
|
}
|
|
505
502
|
|
|
506
|
-
// 正常轮:会话续接走 ctx.session.id / capture,暂停时把 cursor 存进 typed
|
|
503
|
+
// 正常轮:会话续接走 ctx.session.id / capture,暂停时把 cursor 存进 typed key
|
|
507
504
|
return driveFrameStream(cursor, stream, ctx, (frame, derived) => {
|
|
508
505
|
ctx.session.capture(stream.sessionId);
|
|
509
506
|
const gated = derived.find((event) =>
|
|
@@ -512,13 +509,13 @@ return driveFrameStream(cursor, stream, ctx, (frame, derived) => {
|
|
|
512
509
|
event.operation.name === GATED_TOOL_NAME
|
|
513
510
|
);
|
|
514
511
|
if (gated?.type === "operation.started") {
|
|
515
|
-
ctx.session.set(
|
|
512
|
+
ctx.session.set(pendingKey, { cursor, stream, toolUseId: gated.operationId });
|
|
516
513
|
return { pause: { id: gated.operationId, action: GATED_TOOL_NAME, options: [{ id: "approve" }, { id: "deny" }] } };
|
|
517
514
|
}
|
|
518
515
|
});
|
|
519
516
|
```
|
|
520
517
|
|
|
521
|
-
三个 Tier 1 示例(claude-sdk、pi-sdk 用 `driveFrameStream` + typed
|
|
518
|
+
三个 Tier 1 示例(claude-sdk、pi-sdk 用 `driveFrameStream` + typed key,codex-sdk 只用 `driveFrameStream`)已经用这套件重写。Adapter 只剩 transport 与 `onFrame` 里"这一帧要不要额外处理"的判断,没有手写循环和模块级 Map。
|
|
522
519
|
|
|
523
520
|
## `turnFromAiSdk`:AI SDK 结果 → 事件流转换器
|
|
524
521
|
|
|
@@ -544,9 +541,9 @@ export default defineAgent({
|
|
|
544
541
|
- 被测对象是 AI SDK 应用(`useChat` 后端):内置 `uiMessageStreamAgent` 无侵入接入,零映射(含 HITL)。
|
|
545
542
|
- 被测对象是其它 agent 系统(HTTP / gRPC 服务):无侵入接入,手写事件映射(官方转换器能覆盖大半)——[`examples/zh/tier1`](https://github.com/CorrectRoadH/niceeval/tree/main/examples/zh/tier1) 下五个示例全是这条路。应用已埋 OTel 的话顺手接上,多一张瀑布图。
|
|
546
543
|
- 需要调用瀑布图(`niceeval view` 的 trace):`claude-code` / `codex` / `bub` 三个都自发 OTLP(claude-code 走 CLI 的 beta 遥测,span 只有结构与计时)。自己写的 adapter 声明 `tracing` 即可(见 OTel 指南)。
|
|
547
|
-
- 需要人工审批 / 多步确认(HITL):`uiMessageStreamAgent` 原生支持(AI SDK v7 tool approval)。Sandbox 型三个都不支持,其它被测对象自己写 Adapter,拿 `driveFrameStream` + typed
|
|
544
|
+
- 需要人工审批 / 多步确认(HITL):`uiMessageStreamAgent` 原生支持(AI SDK v7 tool approval)。Sandbox 型三个都不支持,其它被测对象自己写 Adapter,拿 `driveFrameStream` + typed key 拼(Tier 1 示例里 pi-sdk / claude-sdk 有现成写法)。
|
|
548
545
|
- 想跑一个 coding agent 改代码、看 diff、判断工具调用:`claude-code` / `codex` / `bub`(收发 + 事件流 + 会话续接 + workspace + sandbox)。
|
|
549
|
-
- 后端协议是自己发明的、没有官方 SDK 转换器可用时,别从零手写 send。挑一种 reduce 形状(整段落地写小映射,逐 token 增量用 `deltaStream`),服务端会话续接用 `ctx.session.id` / `capture`,客户端历史或 HITL 现场用 typed
|
|
546
|
+
- 后端协议是自己发明的、没有官方 SDK 转换器可用时,别从零手写 send。挑一种 reduce 形状(整段落地写小映射,逐 token 增量用 `deltaStream`),服务端会话续接用 `ctx.session.id` / `capture`,客户端历史或 HITL 现场用 typed key,拼起来就是 send。
|
|
550
547
|
|
|
551
548
|
## 相关阅读
|
|
552
549
|
|
|
@@ -20,7 +20,7 @@ niceeval query explain [--record <file>] --request <file|->
|
|
|
20
20
|
niceeval query run [--record <file>] --request <file|->
|
|
21
21
|
```
|
|
22
22
|
|
|
23
|
-
`query` 使用带版本号的 JSON 请求协议 `niceeval.query/
|
|
23
|
+
`query` 使用带版本号的 JSON 请求协议 `niceeval.query/v2`,每一种固定的读取问题叫一个 operation。成功的结果和协议里定义的失败,都会向 stdout 写出恰好一个 JSON 文档。参数写错,或者进程出错到无法生成文档时,错误只写到 stderr。
|
|
24
24
|
|
|
25
25
|
- `discover` 列出当前版本支持的 operation ID。它不读运行记录,所以不接受 `--record`,也不返回请求的字段结构。
|
|
26
26
|
- `explain` 校验完整请求,说明它会运行哪个 operation,以及接下来可以发哪些请求。
|
|
@@ -110,13 +110,13 @@ niceeval view [--run <run-id>...] [--no-open] [--port <port>] [--json]
|
|
|
110
110
|
| `--help` | `niceeval` | boolean | 打印根命令索引。 |
|
|
111
111
|
| `--version` | `niceeval` | boolean | 打印当前安装的 NiceEval 版本。 |
|
|
112
112
|
| `--tag` | `niceeval check`、`niceeval exp`、`niceeval exp list` | string | 只选择带有该 tag 的评估用例。 |
|
|
113
|
-
| `--help` | `niceeval check`、`niceeval exp`、`niceeval exp list`、`niceeval exp rename`、`niceeval exp --
|
|
113
|
+
| `--help` | `niceeval check`、`niceeval exp`、`niceeval exp list`、`niceeval exp rename`、`niceeval exp --after`、`niceeval debug`、`niceeval accept`、`niceeval invocation` | boolean | 打印该命令的帮助。 |
|
|
114
114
|
| `--experiment` | `niceeval exp` | string[] | 按 Experiment selector 缩小当前项目的结果。 |
|
|
115
115
|
| `--attempts` | `niceeval exp` | number | 让每个选中的评估用例运行指定次数。 |
|
|
116
116
|
| `--max-concurrency` | `niceeval exp` | number | 限制同时执行的 Attempt 数量。 |
|
|
117
117
|
| `--max-build-concurrency` | `niceeval exp` | number | 限制同时准备 Sandbox build 的数量。 |
|
|
118
|
-
| `--max-
|
|
119
|
-
| `--sandbox-
|
|
118
|
+
| `--max-before-cache-concurrency` | `niceeval exp` | number | Limit concurrent Sandbox before-cache preparation. |
|
|
119
|
+
| `--sandbox-before-cache` | `niceeval exp` | string | Use or bypass the Sandbox before cache. |
|
|
120
120
|
| `--timeout` | `niceeval exp` | number | 以毫秒设置每个 Attempt 的超时时间。 |
|
|
121
121
|
| `--budget` | `niceeval exp` | number | 以美元设置本次 Invocation 的预算。 |
|
|
122
122
|
| `--junit` | `niceeval exp` | string | 写出必需的 JUnit 报告。 |
|
|
@@ -129,20 +129,22 @@ niceeval view [--run <run-id>...] [--no-open] [--port <port>] [--json]
|
|
|
129
129
|
| `--run` | `niceeval exp rename` | string[] | 选择要采用到目标 Experiment 的一个精确 Run;重复传入会被拒绝。 |
|
|
130
130
|
| `--dry` | `niceeval exp rename` | boolean | 预览显式 Experiment 重命名。 |
|
|
131
131
|
| `--json` | `niceeval exp rename` | boolean | 写出该命令的机器文档或事件流。 |
|
|
132
|
-
| `--
|
|
133
|
-
| `--json` | `niceeval exp --
|
|
134
|
-
| `--recover-shared-state` | `niceeval exp --
|
|
135
|
-
| `--owner-token` | `niceeval exp --
|
|
136
|
-
| `--confirm-owner-terminated` | `niceeval exp --
|
|
137
|
-
| `--confirm-remote-quiesced` | `niceeval exp --
|
|
132
|
+
| `--after` | `niceeval exp --after` | boolean | 运行显式的 Experiment after 恢复。 |
|
|
133
|
+
| `--json` | `niceeval exp --after` | boolean | 写出该命令的机器文档或事件流。 |
|
|
134
|
+
| `--recover-shared-state` | `niceeval exp --after` | string | 指定要显式恢复的共享状态 key。 |
|
|
135
|
+
| `--owner-token` | `niceeval exp --after` | string | 提供准确的共享状态 owner token。 |
|
|
136
|
+
| `--confirm-owner-terminated` | `niceeval exp --after` | boolean | 确认记录的 owner 已终止。 |
|
|
137
|
+
| `--confirm-remote-quiesced` | `niceeval exp --after` | boolean | 确认远端共享状态已静止。 |
|
|
138
138
|
| `--json` | `niceeval debug` | boolean | 写出该命令的机器文档或事件流。 |
|
|
139
139
|
| `--run` | `niceeval accept` | string[] | 采用一个已发布的精确 Run;重复传入会被拒绝。 |
|
|
140
140
|
| `--dry` | `niceeval accept` | boolean | 完成整 Run 采用预检,但不发布新 Run。 |
|
|
141
|
-
| `--all` | `niceeval
|
|
142
|
-
| `--json` | `niceeval
|
|
143
|
-
| `--request` | `niceeval query` | string | 从文件或标准输入读取一个 niceeval.query/
|
|
141
|
+
| `--all` | `niceeval invocation` | boolean | 包含已经完成的 Invocation 状态条目。 |
|
|
142
|
+
| `--json` | `niceeval invocation` | boolean | 写出该命令的机器文档或事件流。 |
|
|
143
|
+
| `--request` | `niceeval query` | string | 从文件或标准输入读取一个 niceeval.query/v2 request。 |
|
|
144
144
|
| `--record` | `niceeval query`、`niceeval show` | string | 读取一个外部 canonical SQLite Record。 |
|
|
145
145
|
| `--help` | `niceeval query` | boolean | 打印该命令的帮助。 |
|
|
146
|
+
| `--json` | `niceeval show` | boolean | 写出该命令的机器文档或事件流。 |
|
|
147
|
+
| `--exp` | `niceeval show` | string[] | Show one Experiment; repeat to show more. |
|
|
146
148
|
| `--run` | `niceeval show` | string[] | 显示一个已封口的 Run;可重复传入。 |
|
|
147
149
|
| `--experiment` | `niceeval show` | string[] | 显示一个精确的 Experiment;可重复传入。 |
|
|
148
150
|
| `--all` | `niceeval show` | boolean | 显示紧凑 Results 视图中隐藏的 Attempt。 |
|
|
@@ -172,7 +174,7 @@ niceeval view [--run <run-id>...] [--no-open] [--port <port>] [--json]
|
|
|
172
174
|
| `--window` | `niceeval sandbox diff` | string | 选择一个已记录的改动窗口。 |
|
|
173
175
|
| `--path` | `niceeval sandbox diff` | string | 选择 Sandbox diff 中的一个路径。 |
|
|
174
176
|
| `--leave-running` | `niceeval sandbox enter` | boolean | 离开 shell 后继续保留 Sandbox。 |
|
|
175
|
-
| `--record` | `niceeval sandbox list`、`niceeval sandbox enter`、`niceeval sandbox history`、`niceeval sandbox diff`、`niceeval sandbox stop`、`niceeval sandbox prune` | string |
|
|
177
|
+
| `--record-root` | `niceeval sandbox list`、`niceeval sandbox enter`、`niceeval sandbox history`、`niceeval sandbox diff`、`niceeval sandbox stop`、`niceeval sandbox prune` | string | Use a specific NiceEval record root. |
|
|
176
178
|
| `--orphans` | `niceeval sandbox list` | boolean | 检查已终止运行遗留的未登记 Sandbox 实例。 |
|
|
177
179
|
| `--force` | `niceeval sandbox prune` | boolean | 同时清理未验证的孤儿候选项。 |
|
|
178
180
|
| `--development` | `niceeval sandbox` | boolean | Diagnose the isolated Incus development domain instead of reference. |
|