@opensearch-project/agent-health 0.4.0 → 0.6.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/README.md +36 -5
- package/cli/dist/index.js +8292 -2938
- package/deployment/cloudformation/agent-health-observability.yaml +223 -32
- package/dist/assets/index-BfxtxmKc.css +1 -0
- package/dist/assets/index-CrjAfDHu.js +243 -0
- package/dist/index.html +2 -2
- package/docs/ARCHITECTURE.md +450 -0
- package/docs/BACKEND_JOB_QUEUE.md +405 -0
- package/docs/CLAUDE_CODE_TELEMETRY.md +283 -0
- package/docs/CLI.md +474 -0
- package/docs/CODING_AGENT_ANALYTICS.md +298 -0
- package/docs/CONFIGURATION.md +388 -0
- package/docs/CONNECTORS.md +536 -0
- package/docs/INSTRUMENT_WITH_OTEL.md +397 -0
- package/docs/ML-COMMONS-SETUP.md +289 -0
- package/docs/NPX_PACKAGING.md +195 -0
- package/docs/PERFORMANCE-MONITORING.md +200 -0
- package/docs/PERFORMANCE.md +390 -0
- package/docs/PI_PROFILING.md +169 -0
- package/docs/PLAN-non-agui-agent-support.md +525 -0
- package/docs/SDK.md +626 -0
- package/docs/SKILLS.md +264 -0
- package/docs/STORAGE_INDEX_FIELD_LIMITS.md +216 -0
- package/docs/blogs/2026-02-28-opensearch-agent-health.md +200 -0
- package/docs/blogs/getting-started-blog.md +608 -0
- package/docs/diagrams/Agent-health.excalidraw +5656 -0
- package/docs/diagrams/architecture.png +0 -0
- package/docs/plans/field-redesign.md +468 -0
- package/docs/rfcs/001-coding-agent-analytics.md +374 -0
- package/docs/rfcs/002-enterprise-leaderboard.md +267 -0
- package/docs/rfcs/003-remote-aggregation.md +146 -0
- package/docs/rfcs/004-test-sdk-v2.md +599 -0
- package/docs/skills/AGENT_HEALTH.md +652 -0
- package/docs/skills/AGENT_PROFILE.md +191 -0
- package/docs/skills/add-connector/SKILL.md +68 -0
- package/docs/skills/agent-health-profile/SKILL.md +40 -0
- package/docs/skills/config-auth/SKILL.md +194 -0
- package/docs/skills/config-auth/evals/evals.json +35 -0
- package/docs/skills/create-pr/SKILL.md +73 -0
- package/docs/skills/instrument-otel/SKILL.md +84 -0
- package/docs/skills/write-test/SKILL.md +124 -0
- package/docs/ui prd.md +376 -0
- package/examples/README.md +53 -0
- package/examples/config/agent-health.config.example.ts +155 -0
- package/examples/connectors/echo-connector.ts +131 -0
- package/examples/eval-files/demo.eval.js +128 -0
- package/examples/eval-files/ops-rca-classification.eval.js +71 -0
- package/examples/eval-files/ops-rca-evaluator.json +15 -0
- package/examples/eval-files/sdk-demo.eval.js +72 -0
- package/examples/eval-files/sdk-describe-demo.eval.js +50 -0
- package/examples/eval-files/sdk-hooks-demo.eval.js +99 -0
- package/examples/pi-profiling/README.md +77 -0
- package/examples/pi-profiling/agent-health-profile.ts +417 -0
- package/lib/dist/lib/agentUtils.d.ts +29 -0
- package/lib/dist/lib/agentUtils.d.ts.map +1 -0
- package/lib/dist/lib/agentUtils.js +43 -0
- package/lib/dist/lib/agentUtils.js.map +1 -0
- package/lib/dist/lib/bedrockCompat.d.ts +27 -0
- package/lib/dist/lib/bedrockCompat.d.ts.map +1 -0
- package/lib/dist/lib/bedrockCompat.js +83 -0
- package/lib/dist/lib/bedrockCompat.js.map +1 -0
- package/lib/dist/lib/benchmarkExport.d.ts +14 -0
- package/lib/dist/lib/benchmarkExport.d.ts.map +1 -0
- package/lib/dist/lib/benchmarkExport.js +41 -0
- package/lib/dist/lib/benchmarkExport.js.map +1 -0
- package/lib/dist/lib/benchmarkImage.d.ts +52 -0
- package/lib/dist/lib/benchmarkImage.d.ts.map +1 -0
- package/lib/dist/lib/benchmarkImage.js +113 -0
- package/lib/dist/lib/benchmarkImage.js.map +1 -0
- package/lib/dist/lib/benchmarkVersionUtils.d.ts +50 -0
- package/lib/dist/lib/benchmarkVersionUtils.d.ts.map +1 -0
- package/lib/dist/lib/benchmarkVersionUtils.js +89 -0
- package/lib/dist/lib/benchmarkVersionUtils.js.map +1 -0
- package/lib/dist/lib/chunkedFetch.d.ts +18 -0
- package/lib/dist/lib/chunkedFetch.d.ts.map +1 -0
- package/lib/dist/lib/chunkedFetch.js +40 -0
- package/lib/dist/lib/chunkedFetch.js.map +1 -0
- package/lib/dist/lib/comparisonInsights.d.ts +104 -0
- package/lib/dist/lib/comparisonInsights.d.ts.map +1 -0
- package/lib/dist/lib/comparisonInsights.js +212 -0
- package/lib/dist/lib/comparisonInsights.js.map +1 -0
- package/lib/dist/lib/config/defineConfig.d.ts +27 -0
- package/lib/dist/lib/config/defineConfig.d.ts.map +1 -0
- package/lib/dist/lib/config/defineConfig.js +28 -0
- package/lib/dist/lib/config/defineConfig.js.map +1 -0
- package/lib/dist/lib/config/index.d.ts +9 -0
- package/lib/dist/lib/config/index.d.ts.map +1 -0
- package/lib/dist/lib/config/index.js +8 -0
- package/lib/dist/lib/config/index.js.map +1 -0
- package/lib/dist/lib/config/loader.d.ts +39 -0
- package/lib/dist/lib/config/loader.d.ts.map +1 -0
- package/lib/dist/lib/config/loader.js +263 -0
- package/lib/dist/lib/config/loader.js.map +1 -0
- package/lib/dist/lib/config/statePaths.d.ts +61 -0
- package/lib/dist/lib/config/statePaths.d.ts.map +1 -0
- package/lib/dist/lib/config/statePaths.js +188 -0
- package/lib/dist/lib/config/statePaths.js.map +1 -0
- package/lib/dist/lib/config/types.d.ts +245 -0
- package/lib/dist/lib/config/types.d.ts.map +1 -0
- package/lib/dist/lib/config/types.js +6 -0
- package/lib/dist/lib/config/types.js.map +1 -0
- package/lib/dist/lib/config.d.ts +39 -0
- package/lib/dist/lib/config.d.ts.map +1 -0
- package/lib/dist/lib/config.js +118 -0
- package/lib/dist/lib/config.js.map +1 -0
- package/lib/dist/lib/constants.d.ts +81 -0
- package/lib/dist/lib/constants.d.ts.map +1 -0
- package/lib/dist/lib/constants.js +374 -0
- package/lib/dist/lib/constants.js.map +1 -0
- package/lib/dist/lib/contextFormat.d.ts +26 -0
- package/lib/dist/lib/contextFormat.d.ts.map +1 -0
- package/lib/dist/lib/contextFormat.js +28 -0
- package/lib/dist/lib/contextFormat.js.map +1 -0
- package/lib/dist/lib/contextUtilization.d.ts +23 -0
- package/lib/dist/lib/contextUtilization.d.ts.map +1 -0
- package/lib/dist/lib/contextUtilization.js +72 -0
- package/lib/dist/lib/contextUtilization.js.map +1 -0
- package/lib/dist/lib/dashboardMetrics.d.ts +87 -0
- package/lib/dist/lib/dashboardMetrics.d.ts.map +1 -0
- package/lib/dist/lib/dashboardMetrics.js +242 -0
- package/lib/dist/lib/dashboardMetrics.js.map +1 -0
- package/lib/dist/lib/dataSourceConfig.d.ts +108 -0
- package/lib/dist/lib/dataSourceConfig.d.ts.map +1 -0
- package/lib/dist/lib/dataSourceConfig.js +166 -0
- package/lib/dist/lib/dataSourceConfig.js.map +1 -0
- package/lib/dist/lib/debug.d.ts +26 -0
- package/lib/dist/lib/debug.d.ts.map +1 -0
- package/lib/dist/lib/debug.js +132 -0
- package/lib/dist/lib/debug.js.map +1 -0
- package/lib/dist/lib/diagnostics.d.ts +28 -0
- package/lib/dist/lib/diagnostics.d.ts.map +1 -0
- package/lib/dist/lib/diagnostics.js +65 -0
- package/lib/dist/lib/diagnostics.js.map +1 -0
- package/lib/dist/lib/envCompat.d.ts +27 -0
- package/lib/dist/lib/envCompat.d.ts.map +1 -0
- package/lib/dist/lib/envCompat.js +82 -0
- package/lib/dist/lib/envCompat.js.map +1 -0
- package/lib/dist/lib/evaluationRerun.d.ts +63 -0
- package/lib/dist/lib/evaluationRerun.d.ts.map +1 -0
- package/lib/dist/lib/evaluationRerun.js +85 -0
- package/lib/dist/lib/evaluationRerun.js.map +1 -0
- package/lib/dist/lib/findPackageRoot.d.ts +7 -0
- package/lib/dist/lib/findPackageRoot.d.ts.map +1 -0
- package/lib/dist/lib/findPackageRoot.js +57 -0
- package/lib/dist/lib/findPackageRoot.js.map +1 -0
- package/lib/dist/lib/hooks.d.ts +36 -0
- package/lib/dist/lib/hooks.d.ts.map +1 -0
- package/lib/dist/lib/hooks.js +112 -0
- package/lib/dist/lib/hooks.js.map +1 -0
- package/lib/dist/lib/index.d.ts +47 -0
- package/lib/dist/lib/index.d.ts.map +1 -0
- package/lib/dist/lib/index.js +62 -0
- package/lib/dist/lib/index.js.map +1 -0
- package/lib/dist/lib/labels.d.ts +90 -0
- package/lib/dist/lib/labels.d.ts.map +1 -0
- package/lib/dist/lib/labels.js +158 -0
- package/lib/dist/lib/labels.js.map +1 -0
- package/lib/dist/lib/markdown.d.ts +16 -0
- package/lib/dist/lib/markdown.d.ts.map +1 -0
- package/lib/dist/lib/markdown.js +42 -0
- package/lib/dist/lib/markdown.js.map +1 -0
- package/lib/dist/lib/matchers/expect.d.ts +3 -0
- package/lib/dist/lib/matchers/expect.d.ts.map +1 -0
- package/lib/dist/lib/matchers/expect.js +225 -0
- package/lib/dist/lib/matchers/expect.js.map +1 -0
- package/lib/dist/lib/matchers/index.d.ts +8 -0
- package/lib/dist/lib/matchers/index.d.ts.map +1 -0
- package/lib/dist/lib/matchers/index.js +9 -0
- package/lib/dist/lib/matchers/index.js.map +1 -0
- package/lib/dist/lib/matchers/judgeAccessor.d.ts +113 -0
- package/lib/dist/lib/matchers/judgeAccessor.d.ts.map +1 -0
- package/lib/dist/lib/matchers/judgeAccessor.js +183 -0
- package/lib/dist/lib/matchers/judgeAccessor.js.map +1 -0
- package/lib/dist/lib/matchers/session.d.ts +39 -0
- package/lib/dist/lib/matchers/session.d.ts.map +1 -0
- package/lib/dist/lib/matchers/session.js +116 -0
- package/lib/dist/lib/matchers/session.js.map +1 -0
- package/lib/dist/lib/matchers/traces.d.ts +70 -0
- package/lib/dist/lib/matchers/traces.d.ts.map +1 -0
- package/lib/dist/lib/matchers/traces.js +236 -0
- package/lib/dist/lib/matchers/traces.js.map +1 -0
- package/lib/dist/lib/matchers/tracesPricing.d.ts +38 -0
- package/lib/dist/lib/matchers/tracesPricing.d.ts.map +1 -0
- package/lib/dist/lib/matchers/tracesPricing.js +64 -0
- package/lib/dist/lib/matchers/tracesPricing.js.map +1 -0
- package/lib/dist/lib/matchers/types.d.ts +75 -0
- package/lib/dist/lib/matchers/types.d.ts.map +1 -0
- package/lib/dist/lib/matchers/types.js +6 -0
- package/lib/dist/lib/matchers/types.js.map +1 -0
- package/lib/dist/lib/packagePaths.d.ts +29 -0
- package/lib/dist/lib/packagePaths.d.ts.map +1 -0
- package/lib/dist/lib/packagePaths.js +63 -0
- package/lib/dist/lib/packagePaths.js.map +1 -0
- package/lib/dist/lib/performance.d.ts +51 -0
- package/lib/dist/lib/performance.d.ts.map +1 -0
- package/lib/dist/lib/performance.js +159 -0
- package/lib/dist/lib/performance.js.map +1 -0
- package/lib/dist/lib/portConfig.d.ts +29 -0
- package/lib/dist/lib/portConfig.d.ts.map +1 -0
- package/lib/dist/lib/portConfig.js +64 -0
- package/lib/dist/lib/portConfig.js.map +1 -0
- package/lib/dist/lib/preferences.d.ts +63 -0
- package/lib/dist/lib/preferences.d.ts.map +1 -0
- package/lib/dist/lib/preferences.js +117 -0
- package/lib/dist/lib/preferences.js.map +1 -0
- package/lib/dist/lib/resolveAgentModel.d.ts +22 -0
- package/lib/dist/lib/resolveAgentModel.d.ts.map +1 -0
- package/lib/dist/lib/resolveAgentModel.js +37 -0
- package/lib/dist/lib/resolveAgentModel.js.map +1 -0
- package/lib/dist/lib/runStats.d.ts +116 -0
- package/lib/dist/lib/runStats.d.ts.map +1 -0
- package/lib/dist/lib/runStats.js +192 -0
- package/lib/dist/lib/runStats.js.map +1 -0
- package/lib/dist/lib/telemetry/constants.d.ts +60 -0
- package/lib/dist/lib/telemetry/constants.d.ts.map +1 -0
- package/lib/dist/lib/telemetry/constants.js +87 -0
- package/lib/dist/lib/telemetry/constants.js.map +1 -0
- package/lib/dist/lib/telemetry/evalSpans.d.ts +61 -0
- package/lib/dist/lib/telemetry/evalSpans.d.ts.map +1 -0
- package/lib/dist/lib/telemetry/evalSpans.js +254 -0
- package/lib/dist/lib/telemetry/evalSpans.js.map +1 -0
- package/lib/dist/lib/telemetry/index.d.ts +11 -0
- package/lib/dist/lib/telemetry/index.d.ts.map +1 -0
- package/lib/dist/lib/telemetry/index.js +15 -0
- package/lib/dist/lib/telemetry/index.js.map +1 -0
- package/lib/dist/lib/telemetry/opensearchExporter.d.ts +43 -0
- package/lib/dist/lib/telemetry/opensearchExporter.d.ts.map +1 -0
- package/lib/dist/lib/telemetry/opensearchExporter.js +217 -0
- package/lib/dist/lib/telemetry/opensearchExporter.js.map +1 -0
- package/lib/dist/lib/telemetry/provider.d.ts +55 -0
- package/lib/dist/lib/telemetry/provider.d.ts.map +1 -0
- package/lib/dist/lib/telemetry/provider.js +140 -0
- package/lib/dist/lib/telemetry/provider.js.map +1 -0
- package/lib/dist/lib/testCaseLabels.d.ts +34 -0
- package/lib/dist/lib/testCaseLabels.d.ts.map +1 -0
- package/lib/dist/lib/testCaseLabels.js +88 -0
- package/lib/dist/lib/testCaseLabels.js.map +1 -0
- package/lib/dist/lib/testCaseValidation.d.ts +140 -0
- package/lib/dist/lib/testCaseValidation.d.ts.map +1 -0
- package/lib/dist/lib/testCaseValidation.js +162 -0
- package/lib/dist/lib/testCaseValidation.js.map +1 -0
- package/lib/dist/lib/testCases/agentFixture.d.ts +80 -0
- package/lib/dist/lib/testCases/agentFixture.d.ts.map +1 -0
- package/lib/dist/lib/testCases/agentFixture.js +43 -0
- package/lib/dist/lib/testCases/agentFixture.js.map +1 -0
- package/lib/dist/lib/testCases/authoringSurface.d.ts +10 -0
- package/lib/dist/lib/testCases/authoringSurface.d.ts.map +1 -0
- package/lib/dist/lib/testCases/authoringSurface.js +54 -0
- package/lib/dist/lib/testCases/authoringSurface.js.map +1 -0
- package/lib/dist/lib/testCases/codemod.d.ts +13 -0
- package/lib/dist/lib/testCases/codemod.d.ts.map +1 -0
- package/lib/dist/lib/testCases/codemod.js +169 -0
- package/lib/dist/lib/testCases/codemod.js.map +1 -0
- package/lib/dist/lib/testCases/define.d.ts +114 -0
- package/lib/dist/lib/testCases/define.d.ts.map +1 -0
- package/lib/dist/lib/testCases/define.js +253 -0
- package/lib/dist/lib/testCases/define.js.map +1 -0
- package/lib/dist/lib/testCases/evaluators.d.ts +80 -0
- package/lib/dist/lib/testCases/evaluators.d.ts.map +1 -0
- package/lib/dist/lib/testCases/evaluators.js +105 -0
- package/lib/dist/lib/testCases/evaluators.js.map +1 -0
- package/lib/dist/lib/testCases/index.d.ts +14 -0
- package/lib/dist/lib/testCases/index.d.ts.map +1 -0
- package/lib/dist/lib/testCases/index.js +12 -0
- package/lib/dist/lib/testCases/index.js.map +1 -0
- package/lib/dist/lib/testCases/judge.d.ts +165 -0
- package/lib/dist/lib/testCases/judge.d.ts.map +1 -0
- package/lib/dist/lib/testCases/judge.js +359 -0
- package/lib/dist/lib/testCases/judge.js.map +1 -0
- package/lib/dist/lib/testCases/loader.d.ts +36 -0
- package/lib/dist/lib/testCases/loader.d.ts.map +1 -0
- package/lib/dist/lib/testCases/loader.js +179 -0
- package/lib/dist/lib/testCases/loader.js.map +1 -0
- package/lib/dist/lib/testCases/types.d.ts +242 -0
- package/lib/dist/lib/testCases/types.d.ts.map +1 -0
- package/lib/dist/lib/testCases/types.js +6 -0
- package/lib/dist/lib/testCases/types.js.map +1 -0
- package/lib/dist/lib/theme.d.ts +6 -0
- package/lib/dist/lib/theme.d.ts.map +1 -0
- package/lib/dist/lib/theme.js +36 -0
- package/lib/dist/lib/theme.js.map +1 -0
- package/lib/dist/lib/uiTelemetry.d.ts +7 -0
- package/lib/dist/lib/uiTelemetry.d.ts.map +1 -0
- package/lib/dist/lib/uiTelemetry.js +25 -0
- package/lib/dist/lib/uiTelemetry.js.map +1 -0
- package/lib/dist/lib/utils.d.ts +111 -0
- package/lib/dist/lib/utils.d.ts.map +1 -0
- package/lib/dist/lib/utils.js +254 -0
- package/lib/dist/lib/utils.js.map +1 -0
- package/lib/dist/lib/workflow/consolidate.d.ts +12 -0
- package/lib/dist/lib/workflow/consolidate.d.ts.map +1 -0
- package/lib/dist/lib/workflow/consolidate.js +33 -0
- package/lib/dist/lib/workflow/consolidate.js.map +1 -0
- package/lib/dist/lib/workflow/index.d.ts +13 -0
- package/lib/dist/lib/workflow/index.d.ts.map +1 -0
- package/lib/dist/lib/workflow/index.js +12 -0
- package/lib/dist/lib/workflow/index.js.map +1 -0
- package/lib/dist/lib/workflow/ledger.d.ts +30 -0
- package/lib/dist/lib/workflow/ledger.d.ts.map +1 -0
- package/lib/dist/lib/workflow/ledger.js +41 -0
- package/lib/dist/lib/workflow/ledger.js.map +1 -0
- package/lib/dist/lib/workflow/pool.d.ts +13 -0
- package/lib/dist/lib/workflow/pool.d.ts.map +1 -0
- package/lib/dist/lib/workflow/pool.js +44 -0
- package/lib/dist/lib/workflow/pool.js.map +1 -0
- package/lib/dist/lib/workflow/source.d.ts +22 -0
- package/lib/dist/lib/workflow/source.d.ts.map +1 -0
- package/lib/dist/lib/workflow/source.js +29 -0
- package/lib/dist/lib/workflow/source.js.map +1 -0
- package/lib/dist/lib/workflow/stepB.d.ts +71 -0
- package/lib/dist/lib/workflow/stepB.d.ts.map +1 -0
- package/lib/dist/lib/workflow/stepB.js +99 -0
- package/lib/dist/lib/workflow/stepB.js.map +1 -0
- package/lib/dist/lib/workflow/types.d.ts +86 -0
- package/lib/dist/lib/workflow/types.d.ts.map +1 -0
- package/lib/dist/lib/workflow/types.js +6 -0
- package/lib/dist/lib/workflow/types.js.map +1 -0
- package/lib/dist/lib/workflow/workflow.d.ts +119 -0
- package/lib/dist/lib/workflow/workflow.d.ts.map +1 -0
- package/lib/dist/lib/workflow/workflow.js +195 -0
- package/lib/dist/lib/workflow/workflow.js.map +1 -0
- package/lib/dist/services/agent/aguiConverter.d.ts +50 -0
- package/lib/dist/services/agent/aguiConverter.d.ts.map +1 -0
- package/lib/dist/services/agent/aguiConverter.js +449 -0
- package/lib/dist/services/agent/aguiConverter.js.map +1 -0
- package/lib/dist/services/agent/index.d.ts +10 -0
- package/lib/dist/services/agent/index.d.ts.map +1 -0
- package/lib/dist/services/agent/index.js +12 -0
- package/lib/dist/services/agent/index.js.map +1 -0
- package/lib/dist/services/agent/payloadBuilder.d.ts +33 -0
- package/lib/dist/services/agent/payloadBuilder.d.ts.map +1 -0
- package/lib/dist/services/agent/payloadBuilder.js +75 -0
- package/lib/dist/services/agent/payloadBuilder.js.map +1 -0
- package/lib/dist/services/agent/sseStream.d.ts +43 -0
- package/lib/dist/services/agent/sseStream.d.ts.map +1 -0
- package/lib/dist/services/agent/sseStream.js +223 -0
- package/lib/dist/services/agent/sseStream.js.map +1 -0
- package/lib/dist/services/connectors/agui/AGUIStreamingConnector.d.ts +44 -0
- package/lib/dist/services/connectors/agui/AGUIStreamingConnector.d.ts.map +1 -0
- package/lib/dist/services/connectors/agui/AGUIStreamingConnector.js +95 -0
- package/lib/dist/services/connectors/agui/AGUIStreamingConnector.js.map +1 -0
- package/lib/dist/services/connectors/base/BaseConnector.d.ts +81 -0
- package/lib/dist/services/connectors/base/BaseConnector.d.ts.map +1 -0
- package/lib/dist/services/connectors/base/BaseConnector.js +170 -0
- package/lib/dist/services/connectors/base/BaseConnector.js.map +1 -0
- package/lib/dist/services/connectors/claude-code/ClaudeCodeConnector.d.ts +126 -0
- package/lib/dist/services/connectors/claude-code/ClaudeCodeConnector.d.ts.map +1 -0
- package/lib/dist/services/connectors/claude-code/ClaudeCodeConnector.js +417 -0
- package/lib/dist/services/connectors/claude-code/ClaudeCodeConnector.js.map +1 -0
- package/lib/dist/services/connectors/index.d.ts +13 -0
- package/lib/dist/services/connectors/index.d.ts.map +1 -0
- package/lib/dist/services/connectors/index.js +32 -0
- package/lib/dist/services/connectors/index.js.map +1 -0
- package/lib/dist/services/connectors/kiro/KiroConnector.d.ts +48 -0
- package/lib/dist/services/connectors/kiro/KiroConnector.d.ts.map +1 -0
- package/lib/dist/services/connectors/kiro/KiroConnector.js +158 -0
- package/lib/dist/services/connectors/kiro/KiroConnector.js.map +1 -0
- package/lib/dist/services/connectors/langgraph/LangGraphConnector.d.ts +36 -0
- package/lib/dist/services/connectors/langgraph/LangGraphConnector.d.ts.map +1 -0
- package/lib/dist/services/connectors/langgraph/LangGraphConnector.js +175 -0
- package/lib/dist/services/connectors/langgraph/LangGraphConnector.js.map +1 -0
- package/lib/dist/services/connectors/mock/MockConnector.d.ts +37 -0
- package/lib/dist/services/connectors/mock/MockConnector.d.ts.map +1 -0
- package/lib/dist/services/connectors/mock/MockConnector.js +120 -0
- package/lib/dist/services/connectors/mock/MockConnector.js.map +1 -0
- package/lib/dist/services/connectors/openai-compatible/OpenAICompatibleConnector.d.ts +42 -0
- package/lib/dist/services/connectors/openai-compatible/OpenAICompatibleConnector.d.ts.map +1 -0
- package/lib/dist/services/connectors/openai-compatible/OpenAICompatibleConnector.js +133 -0
- package/lib/dist/services/connectors/openai-compatible/OpenAICompatibleConnector.js.map +1 -0
- package/lib/dist/services/connectors/pi/PiConnector.d.ts +87 -0
- package/lib/dist/services/connectors/pi/PiConnector.d.ts.map +1 -0
- package/lib/dist/services/connectors/pi/PiConnector.js +274 -0
- package/lib/dist/services/connectors/pi/PiConnector.js.map +1 -0
- package/lib/dist/services/connectors/registry.d.ts +57 -0
- package/lib/dist/services/connectors/registry.d.ts.map +1 -0
- package/lib/dist/services/connectors/registry.js +106 -0
- package/lib/dist/services/connectors/registry.js.map +1 -0
- package/lib/dist/services/connectors/rest/RESTConnector.d.ts +38 -0
- package/lib/dist/services/connectors/rest/RESTConnector.d.ts.map +1 -0
- package/lib/dist/services/connectors/rest/RESTConnector.js +117 -0
- package/lib/dist/services/connectors/rest/RESTConnector.js.map +1 -0
- package/lib/dist/services/connectors/server.d.ts +13 -0
- package/lib/dist/services/connectors/server.d.ts.map +1 -0
- package/lib/dist/services/connectors/server.js +34 -0
- package/lib/dist/services/connectors/server.js.map +1 -0
- package/lib/dist/services/connectors/strands/StrandsConnector.d.ts +48 -0
- package/lib/dist/services/connectors/strands/StrandsConnector.d.ts.map +1 -0
- package/lib/dist/services/connectors/strands/StrandsConnector.js +221 -0
- package/lib/dist/services/connectors/strands/StrandsConnector.js.map +1 -0
- package/lib/dist/services/connectors/subprocess/SubprocessConnector.d.ts +88 -0
- package/lib/dist/services/connectors/subprocess/SubprocessConnector.d.ts.map +1 -0
- package/lib/dist/services/connectors/subprocess/SubprocessConnector.js +426 -0
- package/lib/dist/services/connectors/subprocess/SubprocessConnector.js.map +1 -0
- package/lib/dist/services/connectors/types.d.ts +213 -0
- package/lib/dist/services/connectors/types.d.ts.map +1 -0
- package/lib/dist/services/connectors/types.js +6 -0
- package/lib/dist/services/connectors/types.js.map +1 -0
- package/lib/dist/services/evaluation/bedrockJudge.d.ts +71 -0
- package/lib/dist/services/evaluation/bedrockJudge.d.ts.map +1 -0
- package/lib/dist/services/evaluation/bedrockJudge.js +169 -0
- package/lib/dist/services/evaluation/bedrockJudge.js.map +1 -0
- package/lib/dist/services/evaluation/evaluatorError.d.ts +56 -0
- package/lib/dist/services/evaluation/evaluatorError.d.ts.map +1 -0
- package/lib/dist/services/evaluation/evaluatorError.js +56 -0
- package/lib/dist/services/evaluation/evaluatorError.js.map +1 -0
- package/lib/dist/services/evaluation/index.d.ts +106 -0
- package/lib/dist/services/evaluation/index.d.ts.map +1 -0
- package/lib/dist/services/evaluation/index.js +684 -0
- package/lib/dist/services/evaluation/index.js.map +1 -0
- package/lib/dist/services/evaluation/mockTrajectory.d.ts +3 -0
- package/lib/dist/services/evaluation/mockTrajectory.d.ts.map +1 -0
- package/lib/dist/services/evaluation/mockTrajectory.js +72 -0
- package/lib/dist/services/evaluation/mockTrajectory.js.map +1 -0
- package/lib/dist/services/opensearch/client.d.ts +26 -0
- package/lib/dist/services/opensearch/client.d.ts.map +1 -0
- package/lib/dist/services/opensearch/client.js +131 -0
- package/lib/dist/services/opensearch/client.js.map +1 -0
- package/lib/dist/services/opensearch/index.d.ts +16 -0
- package/lib/dist/services/opensearch/index.d.ts.map +1 -0
- package/lib/dist/services/opensearch/index.js +25 -0
- package/lib/dist/services/opensearch/index.js.map +1 -0
- package/lib/dist/services/storage/asyncBenchmarkStorage.d.ts +123 -0
- package/lib/dist/services/storage/asyncBenchmarkStorage.d.ts.map +1 -0
- package/lib/dist/services/storage/asyncBenchmarkStorage.js +440 -0
- package/lib/dist/services/storage/asyncBenchmarkStorage.js.map +1 -0
- package/lib/dist/services/storage/asyncRunStorage.d.ts +135 -0
- package/lib/dist/services/storage/asyncRunStorage.d.ts.map +1 -0
- package/lib/dist/services/storage/asyncRunStorage.js +524 -0
- package/lib/dist/services/storage/asyncRunStorage.js.map +1 -0
- package/lib/dist/services/storage/asyncTestCaseStorage.d.ts +170 -0
- package/lib/dist/services/storage/asyncTestCaseStorage.d.ts.map +1 -0
- package/lib/dist/services/storage/asyncTestCaseStorage.js +301 -0
- package/lib/dist/services/storage/asyncTestCaseStorage.js.map +1 -0
- package/lib/dist/services/storage/index.d.ts +17 -0
- package/lib/dist/services/storage/index.d.ts.map +1 -0
- package/lib/dist/services/storage/index.js +20 -0
- package/lib/dist/services/storage/index.js.map +1 -0
- package/lib/dist/services/storage/migration.d.ts +54 -0
- package/lib/dist/services/storage/migration.d.ts.map +1 -0
- package/lib/dist/services/storage/migration.js +296 -0
- package/lib/dist/services/storage/migration.js.map +1 -0
- package/lib/dist/services/storage/opensearchClient.d.ts +947 -0
- package/lib/dist/services/storage/opensearchClient.d.ts.map +1 -0
- package/lib/dist/services/storage/opensearchClient.js +442 -0
- package/lib/dist/services/storage/opensearchClient.js.map +1 -0
- package/lib/dist/services/traces/browserRecovery.d.ts +37 -0
- package/lib/dist/services/traces/browserRecovery.d.ts.map +1 -0
- package/lib/dist/services/traces/browserRecovery.js +108 -0
- package/lib/dist/services/traces/browserRecovery.js.map +1 -0
- package/lib/dist/services/traces/categoryStyles.d.ts +21 -0
- package/lib/dist/services/traces/categoryStyles.d.ts.map +1 -0
- package/lib/dist/services/traces/categoryStyles.js +56 -0
- package/lib/dist/services/traces/categoryStyles.js.map +1 -0
- package/lib/dist/services/traces/executionOrderTransform.d.ts +35 -0
- package/lib/dist/services/traces/executionOrderTransform.d.ts.map +1 -0
- package/lib/dist/services/traces/executionOrderTransform.js +313 -0
- package/lib/dist/services/traces/executionOrderTransform.js.map +1 -0
- package/lib/dist/services/traces/fetchSpansForRun.d.ts +86 -0
- package/lib/dist/services/traces/fetchSpansForRun.d.ts.map +1 -0
- package/lib/dist/services/traces/fetchSpansForRun.js +69 -0
- package/lib/dist/services/traces/fetchSpansForRun.js.map +1 -0
- package/lib/dist/services/traces/flowTransform.d.ts +24 -0
- package/lib/dist/services/traces/flowTransform.d.ts.map +1 -0
- package/lib/dist/services/traces/flowTransform.js +228 -0
- package/lib/dist/services/traces/flowTransform.js.map +1 -0
- package/lib/dist/services/traces/index.d.ts +121 -0
- package/lib/dist/services/traces/index.d.ts.map +1 -0
- package/lib/dist/services/traces/index.js +255 -0
- package/lib/dist/services/traces/index.js.map +1 -0
- package/lib/dist/services/traces/intentTransform.d.ts +20 -0
- package/lib/dist/services/traces/intentTransform.d.ts.map +1 -0
- package/lib/dist/services/traces/intentTransform.js +131 -0
- package/lib/dist/services/traces/intentTransform.js.map +1 -0
- package/lib/dist/services/traces/judgeAgentsHints.d.ts +63 -0
- package/lib/dist/services/traces/judgeAgentsHints.d.ts.map +1 -0
- package/lib/dist/services/traces/judgeAgentsHints.js +89 -0
- package/lib/dist/services/traces/judgeAgentsHints.js.map +1 -0
- package/lib/dist/services/traces/messageExtraction.d.ts +15 -0
- package/lib/dist/services/traces/messageExtraction.d.ts.map +1 -0
- package/lib/dist/services/traces/messageExtraction.js +313 -0
- package/lib/dist/services/traces/messageExtraction.js.map +1 -0
- package/lib/dist/services/traces/spanCategorization.d.ts +63 -0
- package/lib/dist/services/traces/spanCategorization.d.ts.map +1 -0
- package/lib/dist/services/traces/spanCategorization.js +276 -0
- package/lib/dist/services/traces/spanCategorization.js.map +1 -0
- package/lib/dist/services/traces/spanPreprocessing.d.ts +37 -0
- package/lib/dist/services/traces/spanPreprocessing.d.ts.map +1 -0
- package/lib/dist/services/traces/spanPreprocessing.js +102 -0
- package/lib/dist/services/traces/spanPreprocessing.js.map +1 -0
- package/lib/dist/services/traces/spansToTrajectory.d.ts +36 -0
- package/lib/dist/services/traces/spansToTrajectory.d.ts.map +1 -0
- package/lib/dist/services/traces/spansToTrajectory.js +425 -0
- package/lib/dist/services/traces/spansToTrajectory.js.map +1 -0
- package/lib/dist/services/traces/toolSimilarity.d.ts +35 -0
- package/lib/dist/services/traces/toolSimilarity.d.ts.map +1 -0
- package/lib/dist/services/traces/toolSimilarity.js +203 -0
- package/lib/dist/services/traces/toolSimilarity.js.map +1 -0
- package/lib/dist/services/traces/traceComparison.d.ts +31 -0
- package/lib/dist/services/traces/traceComparison.d.ts.map +1 -0
- package/lib/dist/services/traces/traceComparison.js +318 -0
- package/lib/dist/services/traces/traceComparison.js.map +1 -0
- package/lib/dist/services/traces/traceGrouping.d.ts +19 -0
- package/lib/dist/services/traces/traceGrouping.d.ts.map +1 -0
- package/lib/dist/services/traces/traceGrouping.js +107 -0
- package/lib/dist/services/traces/traceGrouping.js.map +1 -0
- package/lib/dist/services/traces/tracePoller.d.ts +108 -0
- package/lib/dist/services/traces/tracePoller.d.ts.map +1 -0
- package/lib/dist/services/traces/tracePoller.js +475 -0
- package/lib/dist/services/traces/tracePoller.js.map +1 -0
- package/lib/dist/services/traces/traceStats.d.ts +45 -0
- package/lib/dist/services/traces/traceStats.d.ts.map +1 -0
- package/lib/dist/services/traces/traceStats.js +114 -0
- package/lib/dist/services/traces/traceStats.js.map +1 -0
- package/lib/dist/services/traces/traceSummary.d.ts +47 -0
- package/lib/dist/services/traces/traceSummary.d.ts.map +1 -0
- package/lib/dist/services/traces/traceSummary.js +68 -0
- package/lib/dist/services/traces/traceSummary.js.map +1 -0
- package/lib/dist/services/traces/utils.d.ts +33 -0
- package/lib/dist/services/traces/utils.d.ts.map +1 -0
- package/lib/dist/services/traces/utils.js +114 -0
- package/lib/dist/services/traces/utils.js.map +1 -0
- package/lib/dist/types/agui.d.ts +13 -0
- package/lib/dist/types/agui.d.ts.map +1 -0
- package/lib/dist/types/agui.js +16 -0
- package/lib/dist/types/agui.js.map +1 -0
- package/lib/dist/types/index.d.ts +1229 -0
- package/lib/dist/types/index.d.ts.map +1 -0
- package/lib/dist/types/index.js +12 -0
- package/lib/dist/types/index.js.map +1 -0
- package/lib/dist/types/skills.d.ts +146 -0
- package/lib/dist/types/skills.d.ts.map +1 -0
- package/lib/dist/types/skills.js +6 -0
- package/lib/dist/types/skills.js.map +1 -0
- package/observio-sample-agent/pi-package/README.md +112 -0
- package/observio-sample-agent/pi-package/extensions/agent-health.ts +373 -0
- package/observio-sample-agent/pi-package/package.json +17 -0
- package/observio-sample-agent/pi-package/prompts/agent-health.md +37 -0
- package/observio-sample-agent/pi-package/skills/create-pr/SKILL.md +88 -0
- package/observio-sample-agent/pi-package/skills/fix-bug/SKILL.md +71 -0
- package/observio-sample-agent/pi-package/skills/implement-feature/SKILL.md +156 -0
- package/observio-sample-agent/pi-package/skills/instrument-otel/SKILL.md +208 -0
- package/observio-sample-agent/pi-package/skills/setup-collector/SKILL.md +146 -0
- package/observio-sample-agent/pi-package/skills/write-test/SKILL.md +115 -0
- package/package.json +45 -9
- package/server/dist/app.js +34031 -18731
- package/server/dist/index.js +30737 -15338
- package/tsconfig.lib.json +71 -0
- package/dist/assets/index-BOIP5L7h.js +0 -246
- package/dist/assets/index-CU9YKpAL.css +0 -1
- package/lib/dist/config/index.js +0 -452
- package/lib/dist/index.js +0 -1725
|
@@ -0,0 +1,225 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright OpenSearch Contributors
|
|
3
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Chai-based `expect` with two extensions:
|
|
7
|
+
*
|
|
8
|
+
* 1. A recording plugin that captures every assertion outcome on the
|
|
9
|
+
* active matcher session (so the runner can persist per-matcher
|
|
10
|
+
* results and the UI can show a breakdown).
|
|
11
|
+
*
|
|
12
|
+
* 2. Custom matchers tailored to agent trajectories:
|
|
13
|
+
* - `.haveCalledTool(name)` — tool was invoked
|
|
14
|
+
* - `.haveStepsOfType(type)` — at least one step of given type
|
|
15
|
+
* - `.haveOutputMatching(regex)` — final response matches regex
|
|
16
|
+
* - `.haveCompletedWithin(ms)` — durationMs is below threshold
|
|
17
|
+
*
|
|
18
|
+
* Chai's BDD style: `expect(value).to.<matcher>(...)`.
|
|
19
|
+
*/
|
|
20
|
+
import * as chai from 'chai';
|
|
21
|
+
import { recordVerdict } from './session.js';
|
|
22
|
+
let pluginsInstalled = false;
|
|
23
|
+
/**
|
|
24
|
+
* Install the recording plugin once per process. Subsequent calls are
|
|
25
|
+
* no-ops so the plugin doesn't double-record when the SDK is loaded
|
|
26
|
+
* multiple times in the same Node session.
|
|
27
|
+
*/
|
|
28
|
+
function ensurePluginsInstalled() {
|
|
29
|
+
if (pluginsInstalled)
|
|
30
|
+
return;
|
|
31
|
+
pluginsInstalled = true;
|
|
32
|
+
const Assertion = chai.Assertion;
|
|
33
|
+
const utils = chai.util;
|
|
34
|
+
// ─── Recording plugin ────────────────────────────────────────────────
|
|
35
|
+
// Wraps Assertion.prototype.assert so every chai expr produces a
|
|
36
|
+
// MatcherResult on the active session.
|
|
37
|
+
const originalAssert = Assertion.prototype.assert;
|
|
38
|
+
Assertion.prototype.assert = function (expr, msg, negateMsg, expected, actual, showDiff) {
|
|
39
|
+
const negate = utils.flag(this, 'negate');
|
|
40
|
+
const ok = negate ? !expr : !!expr;
|
|
41
|
+
// chai resolves #{this}, #{exp}, #{act} placeholders only when it builds
|
|
42
|
+
// its own error message. We resolve them here so the recorded
|
|
43
|
+
// description is human-readable in the UI for both passing and failing
|
|
44
|
+
// assertions.
|
|
45
|
+
const description = describeAssertion(this, expr, msg, negateMsg, expected, actual, utils);
|
|
46
|
+
try {
|
|
47
|
+
const result = originalAssert.call(this, expr, msg, negateMsg, expected, actual, showDiff);
|
|
48
|
+
if (description) {
|
|
49
|
+
recordVerdict({
|
|
50
|
+
description,
|
|
51
|
+
pass: true,
|
|
52
|
+
method: 'code-assertion',
|
|
53
|
+
actual: safeClone(actual ?? utils.flag(this, 'object')),
|
|
54
|
+
expected: safeClone(expected),
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
return result;
|
|
58
|
+
}
|
|
59
|
+
catch (err) {
|
|
60
|
+
if (description) {
|
|
61
|
+
recordVerdict({
|
|
62
|
+
description,
|
|
63
|
+
pass: false,
|
|
64
|
+
method: 'code-assertion',
|
|
65
|
+
actual: safeClone(actual ?? utils.flag(this, 'object')),
|
|
66
|
+
expected: safeClone(expected),
|
|
67
|
+
errorMessage: err?.message || String(err),
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
throw err;
|
|
71
|
+
}
|
|
72
|
+
};
|
|
73
|
+
// ─── Custom matchers ──────────────────────────────────────────────────
|
|
74
|
+
/**
|
|
75
|
+
* `.haveCalledTool(toolName, argsPartial?)`
|
|
76
|
+
* Asserts that `actual` is an array of TrajectoryStep with at least one
|
|
77
|
+
* `action` step whose toolName matches and whose toolArgs is a superset
|
|
78
|
+
* of `argsPartial` (when provided).
|
|
79
|
+
*/
|
|
80
|
+
Assertion.addMethod('haveCalledTool', function (toolName, argsPartial) {
|
|
81
|
+
const trajectory = utils.flag(this, 'object');
|
|
82
|
+
if (!Array.isArray(trajectory)) {
|
|
83
|
+
this.assert(false, 'expected an array of TrajectoryStep', '', toolName, trajectory);
|
|
84
|
+
return;
|
|
85
|
+
}
|
|
86
|
+
const matches = trajectory.filter((step) => step?.type === 'action' && step?.toolName === toolName);
|
|
87
|
+
let hit = matches[0];
|
|
88
|
+
if (argsPartial && matches.length > 0) {
|
|
89
|
+
hit = matches.find((s) => isSupersetOf(s.toolArgs ?? s.input, argsPartial));
|
|
90
|
+
}
|
|
91
|
+
const argsLabel = argsPartial ? ` with args ${JSON.stringify(argsPartial)}` : '';
|
|
92
|
+
this.assert(!!hit, `expected trajectory to have called tool '${toolName}'${argsLabel}`, `expected trajectory to NOT have called tool '${toolName}'${argsLabel}`, toolName, matches.map((m) => ({ toolName: m.toolName, toolArgs: m.toolArgs ?? m.input })));
|
|
93
|
+
});
|
|
94
|
+
/**
|
|
95
|
+
* `.haveStepsOfType(type)` — at least one step has the given `type`
|
|
96
|
+
* (e.g. 'thinking', 'action', 'response', 'tool_result').
|
|
97
|
+
*/
|
|
98
|
+
Assertion.addMethod('haveStepsOfType', function (type) {
|
|
99
|
+
const trajectory = utils.flag(this, 'object');
|
|
100
|
+
const arr = Array.isArray(trajectory) ? trajectory : [];
|
|
101
|
+
const found = arr.filter((s) => s?.type === type);
|
|
102
|
+
this.assert(found.length > 0, `expected trajectory to have at least one step of type '${type}'`, `expected trajectory to have NO steps of type '${type}' but found ${found.length}`, type, arr.map((s) => s?.type));
|
|
103
|
+
});
|
|
104
|
+
/**
|
|
105
|
+
* `.haveOutputMatching(pattern)` — `actual` is a string and matches the
|
|
106
|
+
* given regex (or contains the given substring).
|
|
107
|
+
*/
|
|
108
|
+
Assertion.addMethod('haveOutputMatching', function (pattern) {
|
|
109
|
+
const text = utils.flag(this, 'object');
|
|
110
|
+
const str = typeof text === 'string' ? text : '';
|
|
111
|
+
const re = pattern instanceof RegExp ? pattern : new RegExp(escapeRegex(String(pattern)));
|
|
112
|
+
this.assert(re.test(str), `expected output to match ${re}`, `expected output to NOT match ${re}`, pattern, str);
|
|
113
|
+
});
|
|
114
|
+
/**
|
|
115
|
+
* `.haveCompletedWithin(thresholdMs)` — `actual` is an EvalResult-shaped
|
|
116
|
+
* object whose `durationMs` is below `thresholdMs`.
|
|
117
|
+
*/
|
|
118
|
+
Assertion.addMethod('haveCompletedWithin', function (thresholdMs) {
|
|
119
|
+
const obj = utils.flag(this, 'object');
|
|
120
|
+
const duration = obj?.durationMs ?? 0;
|
|
121
|
+
this.assert(duration <= thresholdMs, `expected to have completed within ${thresholdMs}ms (took ${duration}ms)`, `expected to have NOT completed within ${thresholdMs}ms`, thresholdMs, duration);
|
|
122
|
+
});
|
|
123
|
+
/**
|
|
124
|
+
* `.toPass()` — assert a judge {@link Verdict} passed. Gives `judge()`'s
|
|
125
|
+
* non-throwing verdict an ergonomic gate:
|
|
126
|
+
* expect(await judge(result, claim)).toPass();
|
|
127
|
+
* Reads `verdict.pass`; surfaces `verdict.reasoning` / `errorMessage` on
|
|
128
|
+
* failure so the recorded matcher is actionable.
|
|
129
|
+
*/
|
|
130
|
+
Assertion.addMethod('toPass', function () {
|
|
131
|
+
const verdict = utils.flag(this, 'object');
|
|
132
|
+
const passed = !!verdict?.pass;
|
|
133
|
+
const detail = verdict?.errorMessage || verdict?.reasoning || '';
|
|
134
|
+
this.assert(passed, `expected judge verdict to pass${detail ? ` — ${detail}` : ''}`, `expected judge verdict to NOT pass`, true, passed);
|
|
135
|
+
});
|
|
136
|
+
}
|
|
137
|
+
ensurePluginsInstalled();
|
|
138
|
+
/** The user-facing `expect` — chai's expect with our plugin pre-installed. */
|
|
139
|
+
export const expect = chai.expect;
|
|
140
|
+
/**
|
|
141
|
+
* Build a UI-friendly description for an assertion. Chai's raw msg/negateMsg
|
|
142
|
+
* contain `#{this}`, `#{exp}`, `#{act}` placeholders that only get resolved
|
|
143
|
+
* by chai when it builds an error message. We resolve them here so the
|
|
144
|
+
* description is readable on pass too.
|
|
145
|
+
*/
|
|
146
|
+
function describeAssertion(ctx, _expr, msg, negateMsg, expected, actual, utils) {
|
|
147
|
+
const rawMsg = typeof msg === 'function' ? msg() : msg;
|
|
148
|
+
const rawNeg = typeof negateMsg === 'function' ? negateMsg() : negateMsg;
|
|
149
|
+
const template = rawMsg || rawNeg || '';
|
|
150
|
+
if (!template)
|
|
151
|
+
return '';
|
|
152
|
+
const obj = utils.flag(ctx, 'object');
|
|
153
|
+
const resolved = template
|
|
154
|
+
.replace(/#\{this\}/g, () => safeInspect(obj, utils))
|
|
155
|
+
.replace(/#\{act\}/g, () => safeInspect(actual, utils))
|
|
156
|
+
.replace(/#\{exp\}/g, () => safeInspect(expected, utils));
|
|
157
|
+
return shortDescription(resolved);
|
|
158
|
+
}
|
|
159
|
+
function safeInspect(v, utils) {
|
|
160
|
+
try {
|
|
161
|
+
const str = utils.objDisplay && typeof utils.objDisplay === 'function'
|
|
162
|
+
? utils.objDisplay(v)
|
|
163
|
+
: utils.inspect
|
|
164
|
+
? utils.inspect(v)
|
|
165
|
+
: String(v);
|
|
166
|
+
if (typeof str !== 'string')
|
|
167
|
+
return String(v);
|
|
168
|
+
return str.length > 60 ? `${str.slice(0, 57)}\u2026` : str;
|
|
169
|
+
}
|
|
170
|
+
catch {
|
|
171
|
+
return String(v);
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
/** Trim chai's verbose default messages to a UI-friendly description. */
|
|
175
|
+
function shortDescription(msg) {
|
|
176
|
+
// chai messages look like "expected X to contain Y". Drop the "expected X "
|
|
177
|
+
// prefix when we have a useful object label so the UI shows the matcher,
|
|
178
|
+
// not the actual data dump.
|
|
179
|
+
const trimmed = msg.replace(/^expected\s+/i, '');
|
|
180
|
+
// Cap at 120 chars to keep tables readable.
|
|
181
|
+
return trimmed.length > 120 ? `${trimmed.slice(0, 117)}\u2026` : trimmed;
|
|
182
|
+
}
|
|
183
|
+
/** Best-effort clone for serialization \u2014 stringify primitives and small objects. */
|
|
184
|
+
function safeClone(v) {
|
|
185
|
+
if (v === undefined || v === null)
|
|
186
|
+
return v;
|
|
187
|
+
if (typeof v === 'string' || typeof v === 'number' || typeof v === 'boolean')
|
|
188
|
+
return v;
|
|
189
|
+
try {
|
|
190
|
+
const s = JSON.stringify(v);
|
|
191
|
+
if (s && s.length < 2000)
|
|
192
|
+
return JSON.parse(s);
|
|
193
|
+
return s ? `${s.slice(0, 1997)}...` : '[unserializable]';
|
|
194
|
+
}
|
|
195
|
+
catch {
|
|
196
|
+
return '[circular]';
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
function isSupersetOf(actual, expected) {
|
|
200
|
+
if (typeof actual !== 'object' || actual === null)
|
|
201
|
+
return false;
|
|
202
|
+
for (const [k, v] of Object.entries(expected)) {
|
|
203
|
+
if (!(k in actual))
|
|
204
|
+
return false;
|
|
205
|
+
if (typeof v === 'object' && v !== null) {
|
|
206
|
+
if (!isSupersetOf(actual[k], v))
|
|
207
|
+
return false;
|
|
208
|
+
}
|
|
209
|
+
else if (actual[k] !== v) {
|
|
210
|
+
return false;
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
return true;
|
|
214
|
+
}
|
|
215
|
+
function escapeRegex(s) {
|
|
216
|
+
return s.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
217
|
+
}
|
|
218
|
+
// ─── TypeScript module augmentation ─────────────────────────────────
|
|
219
|
+
// chai@4 uses ambient namespace declarations rather than modules, so we
|
|
220
|
+
// can't `declare module 'chai'` here. The custom matchers above
|
|
221
|
+
// (haveCalledTool, haveStepsOfType, haveOutputMatching, haveCompletedWithin)
|
|
222
|
+
// are registered via `Assertion.addMethod` and work at runtime; user code
|
|
223
|
+
// that wants type-safe access can either cast `as any` or drop a tiny
|
|
224
|
+
// .d.ts in their own project that augments `Chai.Assertion`.
|
|
225
|
+
//# sourceMappingURL=expect.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"expect.js","sourceRoot":"","sources":["../../../matchers/expect.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export { expect } from './expect.js';
|
|
2
|
+
export type { TracesAccessor } from './traces.js';
|
|
3
|
+
export { buildTracesAccessor, emptyTracesAccessor, unavailableTracesAccessor } from './traces.js';
|
|
4
|
+
export type { MatcherResult, MatcherMethod } from './types.js';
|
|
5
|
+
export { getJudgeMatcherResults, getJudgeReasoningText, recordJudgeMatcherResult, buildJudgeMatcherEntry, formatExpectedOutcomesAsClaim, } from './judgeAccessor.js';
|
|
6
|
+
export type { JudgeAccessReport, JudgeResultLike } from './judgeAccessor.js';
|
|
7
|
+
export { startSession, endSession, isSessionActive, recordVerdict, recordWithTiming, runInSession, } from './session.js';
|
|
8
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../matchers/index.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,YAAY,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAC;AAClG,YAAY,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC/D,OAAO,EACL,sBAAsB,EACtB,qBAAqB,EACrB,wBAAwB,EACxB,sBAAsB,EACtB,6BAA6B,GAC9B,MAAM,oBAAoB,CAAC;AAC5B,YAAY,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAC7E,OAAO,EACL,YAAY,EACZ,UAAU,EACV,eAAe,EACf,aAAa,EACb,gBAAgB,EAChB,YAAY,GACb,MAAM,cAAc,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright OpenSearch Contributors
|
|
3
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
4
|
+
*/
|
|
5
|
+
export { expect } from './expect.js';
|
|
6
|
+
export { buildTracesAccessor, emptyTracesAccessor, unavailableTracesAccessor } from './traces.js';
|
|
7
|
+
export { getJudgeMatcherResults, getJudgeReasoningText, recordJudgeMatcherResult, buildJudgeMatcherEntry, formatExpectedOutcomesAsClaim, } from './judgeAccessor.js';
|
|
8
|
+
export { startSession, endSession, isSessionActive, recordVerdict, recordWithTiming, runInSession, } from './session.js';
|
|
9
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../matchers/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,OAAO,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAC;AAElG,OAAO,EACL,sBAAsB,EACtB,qBAAqB,EACrB,wBAAwB,EACxB,sBAAsB,EACtB,6BAA6B,GAC9B,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EACL,YAAY,EACZ,UAAU,EACV,eAAe,EACf,aAAa,EACb,gBAAgB,EAChB,YAAY,GACb,MAAM,cAAc,CAAC"}
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Unified judge accessor — single source of truth for "what the LLM judge
|
|
3
|
+
* said" on an EvaluationReport.
|
|
4
|
+
*
|
|
5
|
+
* Background: historically the judge verdict + reasoning lived in two
|
|
6
|
+
* parallel surfaces:
|
|
7
|
+
*
|
|
8
|
+
* 1. report.llmJudgeReasoning (string) — written by the legacy
|
|
9
|
+
* auto-judge path (services/evaluation/index.ts and the various
|
|
10
|
+
* runners that call callBedrockJudge against expectedOutcomes).
|
|
11
|
+
* One per report, last writer wins.
|
|
12
|
+
*
|
|
13
|
+
* 2. report.matcherResults[*] with method: 'llm-judge' — written by
|
|
14
|
+
* the SDK `judge(result, claim)` matcher. Many per report.
|
|
15
|
+
*
|
|
16
|
+
* Both ultimately come from the same Bedrock Judge endpoint. Storing
|
|
17
|
+
* them in two places caused real bugs (notably issue #230, where the
|
|
18
|
+
* trace-mode placeholder leaked into the legacy field and bled through
|
|
19
|
+
* to the UI for deterministic SDK runs).
|
|
20
|
+
*
|
|
21
|
+
* The fix: `matcherResults[]` is the canonical surface. The legacy
|
|
22
|
+
* `llmJudgeReasoning` field is kept populated as a derived
|
|
23
|
+
* convenience for backward-compat readers, but new code MUST use
|
|
24
|
+
* {@link getJudgeMatcherResults} on the read side and
|
|
25
|
+
* {@link recordJudgeMatcherResult} on the write side.
|
|
26
|
+
*/
|
|
27
|
+
import type { MatcherResult } from './types.js';
|
|
28
|
+
/** A minimal duck-typed report shape — accepts any object with the two fields. */
|
|
29
|
+
export interface JudgeAccessReport {
|
|
30
|
+
matcherResults?: MatcherResult[];
|
|
31
|
+
llmJudgeReasoning?: string;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Returns every llm-judge MatcherResult on the report, including a
|
|
35
|
+
* synthetic entry derived from the legacy `llmJudgeReasoning` field
|
|
36
|
+
* when the report pre-dates the unified surface.
|
|
37
|
+
*
|
|
38
|
+
* Read-only: nothing is written back to the report.
|
|
39
|
+
*
|
|
40
|
+
* Behaviour matrix:
|
|
41
|
+
*
|
|
42
|
+
* | matcherResults has [llm-judge] | llmJudgeReasoning | Returns |
|
|
43
|
+
* |--------------------------------|------------------------|----------------------------|
|
|
44
|
+
* | yes | anything | the existing entries |
|
|
45
|
+
* | no | empty / placeholder | [] |
|
|
46
|
+
* | no | real reasoning | [<synthetic entry>] |
|
|
47
|
+
*
|
|
48
|
+
* The placeholder string `Waiting for traces to become available...`
|
|
49
|
+
* is treated as "no judge ran yet" \u2014 see issue #230.
|
|
50
|
+
*/
|
|
51
|
+
export declare function getJudgeMatcherResults(report: JudgeAccessReport): MatcherResult[];
|
|
52
|
+
/**
|
|
53
|
+
* Convenience: the single most recent llm-judge reasoning string, or
|
|
54
|
+
* empty when no judge ran. Used by surfaces that historically read
|
|
55
|
+
* `llmJudgeReasoning` directly (HTML report, skills grader, compare
|
|
56
|
+
* view) and only need a flat string.
|
|
57
|
+
*/
|
|
58
|
+
export declare function getJudgeReasoningText(report: JudgeAccessReport): string;
|
|
59
|
+
/**
|
|
60
|
+
* Convert a `JudgeResult` from `callBedrockJudge` into a `MatcherResult`.
|
|
61
|
+
* Pure: doesn't touch any report. Used by inline-return code paths in
|
|
62
|
+
* services/evaluation/index.ts where building a fresh report object is
|
|
63
|
+
* cleaner than the mutate-then-return pattern.
|
|
64
|
+
*/
|
|
65
|
+
export declare function buildJudgeMatcherEntry(judgeResult: JudgeResultLike, options?: {
|
|
66
|
+
claim?: string;
|
|
67
|
+
model?: string;
|
|
68
|
+
}): MatcherResult;
|
|
69
|
+
/**
|
|
70
|
+
* Format an arbitrary `expectedOutcomes` value into a single description
|
|
71
|
+
* fragment suitable for the matcher entry's `description` field. Accepts
|
|
72
|
+
* the SDK's flat `string[]` *and* the legacy `{ rootCauses, requiredFacts,
|
|
73
|
+
* conclusions }` object — both shapes appear on persisted test cases.
|
|
74
|
+
*/
|
|
75
|
+
export declare function formatExpectedOutcomesAsClaim(outcomes?: unknown): string;
|
|
76
|
+
/**
|
|
77
|
+
* Convert a `JudgeResult` from `callBedrockJudge` into a `MatcherResult`
|
|
78
|
+
* and append it to `report.matcherResults`. Also keeps the legacy
|
|
79
|
+
* `report.llmJudgeReasoning` field populated as a derived
|
|
80
|
+
* backward-compat shim (it equals the reasoning of the just-pushed
|
|
81
|
+
* entry, so direct readers continue to work).
|
|
82
|
+
*
|
|
83
|
+
* Mutates the passed report and returns the matcher entry.
|
|
84
|
+
*
|
|
85
|
+
* The `claim` argument is what the auto-judge was evaluating against
|
|
86
|
+
* (the test case's expected outcomes). The matcher description ends
|
|
87
|
+
* up as `judge: <claim>` matching the SDK convention.
|
|
88
|
+
*/
|
|
89
|
+
export declare function recordJudgeMatcherResult(report: JudgeAccessReport & {
|
|
90
|
+
matcherResults?: MatcherResult[];
|
|
91
|
+
llmJudgeReasoning?: string;
|
|
92
|
+
}, judgeResult: JudgeResultLike, options?: {
|
|
93
|
+
claim?: string;
|
|
94
|
+
model?: string;
|
|
95
|
+
}): MatcherResult;
|
|
96
|
+
/** Subset of `JudgeResult` we depend on \u2014 keeps this module type-import-light. */
|
|
97
|
+
export interface JudgeResultLike {
|
|
98
|
+
passFailStatus: 'passed' | 'failed';
|
|
99
|
+
metrics: {
|
|
100
|
+
accuracy?: number;
|
|
101
|
+
[k: string]: number | undefined;
|
|
102
|
+
};
|
|
103
|
+
llmJudgeReasoning: string;
|
|
104
|
+
judgeDurationMs?: number;
|
|
105
|
+
improvementStrategies?: Array<{
|
|
106
|
+
category: string;
|
|
107
|
+
issue: string;
|
|
108
|
+
recommendation: string;
|
|
109
|
+
priority: 'high' | 'medium' | 'low';
|
|
110
|
+
}>;
|
|
111
|
+
}
|
|
112
|
+
export type { JudgeResult } from '../../types/index.js';
|
|
113
|
+
//# sourceMappingURL=judgeAccessor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"judgeAccessor.d.ts","sourceRoot":"","sources":["../../../matchers/judgeAccessor.ts"],"names":[],"mappings":"AAKA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAGhD,kFAAkF;AAClF,MAAM,WAAW,iBAAiB;IAChC,cAAc,CAAC,EAAE,aAAa,EAAE,CAAC;IACjC,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,iBAAiB,GAAG,aAAa,EAAE,CAuBjF;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,iBAAiB,GAAG,MAAM,CAevE;AAED;;;;;GAKG;AACH,wBAAgB,sBAAsB,CACpC,WAAW,EAAE,eAAe,EAC5B,OAAO,CAAC,EAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,GAC3C,aAAa,CA0Bf;AAED;;;;;GAKG;AACH,wBAAgB,6BAA6B,CAAC,QAAQ,CAAC,EAAE,OAAO,GAAG,MAAM,CAoBxE;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,iBAAiB,GAAG;IAAE,cAAc,CAAC,EAAE,aAAa,EAAE,CAAC;IAAC,iBAAiB,CAAC,EAAE,MAAM,CAAA;CAAE,EAC5F,WAAW,EAAE,eAAe,EAC5B,OAAO,CAAC,EAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,GAC3C,aAAa,CAcf;AAED,uFAAuF;AACvF,MAAM,WAAW,eAAe;IAC9B,cAAc,EAAE,QAAQ,GAAG,QAAQ,CAAC;IACpC,OAAO,EAAE;QAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAA;KAAE,CAAC;IAChE,iBAAiB,EAAE,MAAM,CAAC;IAC1B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,qBAAqB,CAAC,EAAE,KAAK,CAAC;QAC5B,QAAQ,EAAE,MAAM,CAAC;QACjB,KAAK,EAAE,MAAM,CAAC;QACd,cAAc,EAAE,MAAM,CAAC;QACvB,QAAQ,EAAE,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;KACrC,CAAC,CAAC;CACJ;AA+BD,YAAY,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC"}
|
|
@@ -0,0 +1,183 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright OpenSearch Contributors
|
|
3
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Returns every llm-judge MatcherResult on the report, including a
|
|
7
|
+
* synthetic entry derived from the legacy `llmJudgeReasoning` field
|
|
8
|
+
* when the report pre-dates the unified surface.
|
|
9
|
+
*
|
|
10
|
+
* Read-only: nothing is written back to the report.
|
|
11
|
+
*
|
|
12
|
+
* Behaviour matrix:
|
|
13
|
+
*
|
|
14
|
+
* | matcherResults has [llm-judge] | llmJudgeReasoning | Returns |
|
|
15
|
+
* |--------------------------------|------------------------|----------------------------|
|
|
16
|
+
* | yes | anything | the existing entries |
|
|
17
|
+
* | no | empty / placeholder | [] |
|
|
18
|
+
* | no | real reasoning | [<synthetic entry>] |
|
|
19
|
+
*
|
|
20
|
+
* The placeholder string `Waiting for traces to become available...`
|
|
21
|
+
* is treated as "no judge ran yet" \u2014 see issue #230.
|
|
22
|
+
*/
|
|
23
|
+
export function getJudgeMatcherResults(report) {
|
|
24
|
+
const fromMatcher = (report.matcherResults ?? []).filter(m => m.method === 'llm-judge');
|
|
25
|
+
if (fromMatcher.length > 0) {
|
|
26
|
+
return fromMatcher;
|
|
27
|
+
}
|
|
28
|
+
const legacy = report.llmJudgeReasoning?.trim();
|
|
29
|
+
if (!legacy || isPlaceholderReasoning(legacy)) {
|
|
30
|
+
return [];
|
|
31
|
+
}
|
|
32
|
+
// Old report: synthesize a single virtual matcher entry so UIs that
|
|
33
|
+
// render only matcherResults still have something to show.
|
|
34
|
+
return [
|
|
35
|
+
{
|
|
36
|
+
description: 'judge: expected outcomes',
|
|
37
|
+
pass: inferPassFromReport(report),
|
|
38
|
+
method: 'llm-judge',
|
|
39
|
+
reasoning: legacy,
|
|
40
|
+
},
|
|
41
|
+
];
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Convenience: the single most recent llm-judge reasoning string, or
|
|
45
|
+
* empty when no judge ran. Used by surfaces that historically read
|
|
46
|
+
* `llmJudgeReasoning` directly (HTML report, skills grader, compare
|
|
47
|
+
* view) and only need a flat string.
|
|
48
|
+
*/
|
|
49
|
+
export function getJudgeReasoningText(report) {
|
|
50
|
+
const entries = getJudgeMatcherResults(report);
|
|
51
|
+
if (entries.length === 0)
|
|
52
|
+
return '';
|
|
53
|
+
// Most-recent-first: prefer the last entry the runner pushed. If
|
|
54
|
+
// multiple entries exist (SDK with several judge() calls) we join
|
|
55
|
+
// them with horizontal-rule markers so a flat-string consumer still
|
|
56
|
+
// sees every claim.
|
|
57
|
+
if (entries.length === 1)
|
|
58
|
+
return entries[0].reasoning ?? '';
|
|
59
|
+
return entries
|
|
60
|
+
.map((m, i) => {
|
|
61
|
+
const claim = m.description?.replace(/^judge:\s*/, '') ?? `claim ${i + 1}`;
|
|
62
|
+
const verdict = m.pass ? 'PASS' : 'FAIL';
|
|
63
|
+
return `### ${verdict} \u2014 ${claim}\n\n${m.reasoning ?? ''}`;
|
|
64
|
+
})
|
|
65
|
+
.join('\n\n---\n\n');
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Convert a `JudgeResult` from `callBedrockJudge` into a `MatcherResult`.
|
|
69
|
+
* Pure: doesn't touch any report. Used by inline-return code paths in
|
|
70
|
+
* services/evaluation/index.ts where building a fresh report object is
|
|
71
|
+
* cleaner than the mutate-then-return pattern.
|
|
72
|
+
*/
|
|
73
|
+
export function buildJudgeMatcherEntry(judgeResult, options) {
|
|
74
|
+
const claim = options?.claim?.trim() || 'expected outcomes';
|
|
75
|
+
const accuracy = judgeResult.metrics?.accuracy;
|
|
76
|
+
const score = typeof accuracy === 'number' ? accuracy / 100 : undefined;
|
|
77
|
+
const pass = judgeResult.passFailStatus === 'passed';
|
|
78
|
+
const reasoning = judgeResult.llmJudgeReasoning ?? '';
|
|
79
|
+
return {
|
|
80
|
+
description: `judge: ${claim}`,
|
|
81
|
+
pass,
|
|
82
|
+
method: 'llm-judge',
|
|
83
|
+
durationMs: judgeResult.judgeDurationMs,
|
|
84
|
+
score,
|
|
85
|
+
reasoning,
|
|
86
|
+
...(options?.model ? { model: options.model } : {}),
|
|
87
|
+
...(pass ? {} : { errorMessage: reasoning }),
|
|
88
|
+
// Carry the rest of the judge payload through so SDK
|
|
89
|
+
// `getJudgeMatcherResults()` consumers see the same data the
|
|
90
|
+
// legacy report-level fields used to expose. See MatcherResult.
|
|
91
|
+
...(Array.isArray(judgeResult.improvementStrategies) && judgeResult.improvementStrategies.length > 0
|
|
92
|
+
? { improvementStrategies: judgeResult.improvementStrategies }
|
|
93
|
+
: {}),
|
|
94
|
+
...(judgeResult.metrics && typeof judgeResult.metrics === 'object'
|
|
95
|
+
? { judgeMetrics: { ...judgeResult.metrics } }
|
|
96
|
+
: {}),
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Format an arbitrary `expectedOutcomes` value into a single description
|
|
101
|
+
* fragment suitable for the matcher entry's `description` field. Accepts
|
|
102
|
+
* the SDK's flat `string[]` *and* the legacy `{ rootCauses, requiredFacts,
|
|
103
|
+
* conclusions }` object — both shapes appear on persisted test cases.
|
|
104
|
+
*/
|
|
105
|
+
export function formatExpectedOutcomesAsClaim(outcomes) {
|
|
106
|
+
const items = [];
|
|
107
|
+
if (Array.isArray(outcomes)) {
|
|
108
|
+
for (const o of outcomes) {
|
|
109
|
+
if (typeof o === 'string' && o.trim())
|
|
110
|
+
items.push(o.trim());
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
else if (outcomes && typeof outcomes === 'object') {
|
|
114
|
+
// Legacy shape: { rootCauses?: string[]; requiredFacts?: string[]; conclusions?: string[] }
|
|
115
|
+
for (const key of Object.keys(outcomes)) {
|
|
116
|
+
const v = outcomes[key];
|
|
117
|
+
if (Array.isArray(v)) {
|
|
118
|
+
for (const s of v) {
|
|
119
|
+
if (typeof s === 'string' && s.trim())
|
|
120
|
+
items.push(s.trim());
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
if (items.length === 0)
|
|
126
|
+
return 'expected outcomes';
|
|
127
|
+
if (items.length === 1)
|
|
128
|
+
return items[0];
|
|
129
|
+
return `${items.length} expected outcomes`;
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Convert a `JudgeResult` from `callBedrockJudge` into a `MatcherResult`
|
|
133
|
+
* and append it to `report.matcherResults`. Also keeps the legacy
|
|
134
|
+
* `report.llmJudgeReasoning` field populated as a derived
|
|
135
|
+
* backward-compat shim (it equals the reasoning of the just-pushed
|
|
136
|
+
* entry, so direct readers continue to work).
|
|
137
|
+
*
|
|
138
|
+
* Mutates the passed report and returns the matcher entry.
|
|
139
|
+
*
|
|
140
|
+
* The `claim` argument is what the auto-judge was evaluating against
|
|
141
|
+
* (the test case's expected outcomes). The matcher description ends
|
|
142
|
+
* up as `judge: <claim>` matching the SDK convention.
|
|
143
|
+
*/
|
|
144
|
+
export function recordJudgeMatcherResult(report, judgeResult, options) {
|
|
145
|
+
const entry = buildJudgeMatcherEntry(judgeResult, options);
|
|
146
|
+
const existing = report.matcherResults ?? [];
|
|
147
|
+
report.matcherResults = [...existing, entry];
|
|
148
|
+
// Backward-compat shim: keep the legacy field populated with the most
|
|
149
|
+
// recent reasoning so external readers that haven't migrated still
|
|
150
|
+
// work. Empty string is a deliberate signal for SDK-multi-judge runs
|
|
151
|
+
// (the field can't represent multiple verdicts; consumers must look
|
|
152
|
+
// at matcherResults).
|
|
153
|
+
report.llmJudgeReasoning = entry.reasoning ?? '';
|
|
154
|
+
return entry;
|
|
155
|
+
}
|
|
156
|
+
// ─── internal helpers ───────────────────────────────────────────────────────
|
|
157
|
+
/**
|
|
158
|
+
* The trace-mode init path sets `llmJudgeReasoning` to a placeholder
|
|
159
|
+
* before any real verdict exists. We must not synthesize a virtual
|
|
160
|
+
* matcher entry from that string \u2014 it's a "judge has not run yet"
|
|
161
|
+
* signal, not real reasoning.
|
|
162
|
+
*/
|
|
163
|
+
function isPlaceholderReasoning(s) {
|
|
164
|
+
return /^Waiting for traces/i.test(s);
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* Best-effort guess at the verdict for a synthesized entry on an old
|
|
168
|
+
* report. Prefers an explicit `passFailStatus` if present; otherwise
|
|
169
|
+
* falls back to the report's metrics.accuracy (>=70 ~ pass), and
|
|
170
|
+
* finally defaults to `false` so a missing verdict never silently
|
|
171
|
+
* looks green.
|
|
172
|
+
*/
|
|
173
|
+
function inferPassFromReport(report) {
|
|
174
|
+
if (report.passFailStatus === 'passed')
|
|
175
|
+
return true;
|
|
176
|
+
if (report.passFailStatus === 'failed')
|
|
177
|
+
return false;
|
|
178
|
+
const acc = report.metrics?.accuracy;
|
|
179
|
+
if (typeof acc === 'number')
|
|
180
|
+
return acc >= 70;
|
|
181
|
+
return false;
|
|
182
|
+
}
|
|
183
|
+
//# sourceMappingURL=judgeAccessor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"judgeAccessor.js","sourceRoot":"","sources":["../../../matchers/judgeAccessor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import type { MatcherResult, MatcherMethod } from './types.js';
|
|
2
|
+
export interface MatcherSession {
|
|
3
|
+
results: MatcherResult[];
|
|
4
|
+
startedAt: number;
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* Run `fn` with a fresh, isolated matcher session and return the verdicts
|
|
8
|
+
* recorded during it. Concurrency-safe: each call gets its own session via
|
|
9
|
+
* AsyncLocalStorage, so interleaved bodies never share verdicts.
|
|
10
|
+
*
|
|
11
|
+
* Results are returned even when `fn` throws — the caller can inspect both
|
|
12
|
+
* the partial results and the error (cleanup hooks that record after a body
|
|
13
|
+
* failure therefore still surface in the breakdown).
|
|
14
|
+
*/
|
|
15
|
+
export declare function runInSession<T>(fn: () => Promise<T> | T): Promise<{
|
|
16
|
+
results: MatcherResult[];
|
|
17
|
+
value?: T;
|
|
18
|
+
error?: unknown;
|
|
19
|
+
}>;
|
|
20
|
+
/**
|
|
21
|
+
* Begin a fresh global session and make it active (legacy API).
|
|
22
|
+
*
|
|
23
|
+
* Prefer {@link runInSession} for anything that may run concurrently. This
|
|
24
|
+
* remains for synchronous, single-threaded callers.
|
|
25
|
+
*/
|
|
26
|
+
export declare function startSession(): MatcherSession;
|
|
27
|
+
/** Stop the current global session and return its results (legacy API). */
|
|
28
|
+
export declare function endSession(): MatcherResult[];
|
|
29
|
+
/** True when a session is active (ALS scope or legacy global). */
|
|
30
|
+
export declare function isSessionActive(): boolean;
|
|
31
|
+
/** Record a single matcher verdict on the active session. No-op when none. */
|
|
32
|
+
export declare function recordVerdict(result: MatcherResult): void;
|
|
33
|
+
/**
|
|
34
|
+
* Record a verdict computed from a try/catch around the matcher body.
|
|
35
|
+
* Convenience wrapper used by judge() and traces helpers; chai matchers go
|
|
36
|
+
* through the chai plugin in `./expect.ts`.
|
|
37
|
+
*/
|
|
38
|
+
export declare function recordWithTiming<T>(description: string, method: MatcherMethod, fn: () => Promise<T> | T): Promise<T>;
|
|
39
|
+
//# sourceMappingURL=session.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../../matchers/session.ts"],"names":[],"mappings":"AA8BA,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAE/D,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,aAAa,EAAE,CAAC;IACzB,SAAS,EAAE,MAAM,CAAC;CACnB;AAiBD;;;;;;;;GAQG;AACH,wBAAsB,YAAY,CAAC,CAAC,EAClC,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,GACvB,OAAO,CAAC;IAAE,OAAO,EAAE,aAAa,EAAE,CAAC;IAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC,CAQnE;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,IAAI,cAAc,CAG7C;AAED,2EAA2E;AAC3E,wBAAgB,UAAU,IAAI,aAAa,EAAE,CAK5C;AAED,kEAAkE;AAClE,wBAAgB,eAAe,IAAI,OAAO,CAEzC;AAED,8EAA8E;AAC9E,wBAAgB,aAAa,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI,CAIzD;AAED;;;;GAIG;AACH,wBAAsB,gBAAgB,CAAC,CAAC,EACtC,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,aAAa,EACrB,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,GACvB,OAAO,CAAC,CAAC,CAAC,CAqBZ"}
|