observability-toolkit 1.8.4 → 2.0.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 +126 -5
- package/dist/backends/index.d.ts +163 -0
- package/dist/backends/index.d.ts.map +1 -1
- package/dist/backends/index.js +57 -0
- package/dist/backends/index.js.map +1 -1
- package/dist/backends/index.test.js +55 -1
- package/dist/backends/index.test.js.map +1 -1
- package/dist/backends/local-jsonl-boolean-search.test.js +8 -8
- package/dist/backends/local-jsonl-boolean-search.test.js.map +1 -1
- package/dist/backends/local-jsonl-cache.test.d.ts +2 -0
- package/dist/backends/local-jsonl-cache.test.d.ts.map +1 -0
- package/dist/backends/local-jsonl-cache.test.js +295 -0
- package/dist/backends/local-jsonl-cache.test.js.map +1 -0
- package/dist/backends/local-jsonl-circuit-breaker.test.d.ts +2 -0
- package/dist/backends/local-jsonl-circuit-breaker.test.d.ts.map +1 -0
- package/dist/backends/local-jsonl-circuit-breaker.test.js +180 -0
- package/dist/backends/local-jsonl-circuit-breaker.test.js.map +1 -0
- package/dist/backends/local-jsonl-export.test.d.ts +2 -0
- package/dist/backends/local-jsonl-export.test.d.ts.map +1 -0
- package/dist/backends/local-jsonl-export.test.js +704 -0
- package/dist/backends/local-jsonl-export.test.js.map +1 -0
- package/dist/backends/local-jsonl-index.test.d.ts +2 -0
- package/dist/backends/local-jsonl-index.test.d.ts.map +1 -0
- package/dist/backends/local-jsonl-index.test.js +554 -0
- package/dist/backends/local-jsonl-index.test.js.map +1 -0
- package/dist/backends/local-jsonl-logs.test.js +52 -43
- package/dist/backends/local-jsonl-logs.test.js.map +1 -1
- package/dist/backends/local-jsonl-metrics.test.d.ts +2 -0
- package/dist/backends/local-jsonl-metrics.test.d.ts.map +1 -0
- package/dist/backends/local-jsonl-metrics.test.js +876 -0
- package/dist/backends/local-jsonl-metrics.test.js.map +1 -0
- package/dist/backends/local-jsonl-traces.test.js +89 -83
- package/dist/backends/local-jsonl-traces.test.js.map +1 -1
- package/dist/backends/local-jsonl.d.ts +39 -0
- package/dist/backends/local-jsonl.d.ts.map +1 -1
- package/dist/backends/local-jsonl.js +975 -492
- package/dist/backends/local-jsonl.js.map +1 -1
- package/dist/backends/signoz-api-circuit-breaker.test.d.ts +6 -0
- package/dist/backends/signoz-api-circuit-breaker.test.d.ts.map +1 -0
- package/dist/backends/signoz-api-circuit-breaker.test.js +548 -0
- package/dist/backends/signoz-api-circuit-breaker.test.js.map +1 -0
- package/dist/backends/signoz-api-rate-limiter.test.d.ts +6 -0
- package/dist/backends/signoz-api-rate-limiter.test.d.ts.map +1 -0
- package/dist/backends/signoz-api-rate-limiter.test.js +390 -0
- package/dist/backends/signoz-api-rate-limiter.test.js.map +1 -0
- package/dist/backends/signoz-api-ssrf.test.d.ts +6 -0
- package/dist/backends/signoz-api-ssrf.test.d.ts.map +1 -0
- package/dist/backends/signoz-api-ssrf.test.js +216 -0
- package/dist/backends/signoz-api-ssrf.test.js.map +1 -0
- package/dist/backends/signoz-api-test-helpers.d.ts +80 -0
- package/dist/backends/signoz-api-test-helpers.d.ts.map +1 -0
- package/dist/backends/signoz-api-test-helpers.js +79 -0
- package/dist/backends/signoz-api-test-helpers.js.map +1 -0
- package/dist/backends/signoz-api.d.ts +31 -1
- package/dist/backends/signoz-api.d.ts.map +1 -1
- package/dist/backends/signoz-api.js +717 -539
- package/dist/backends/signoz-api.js.map +1 -1
- package/dist/backends/signoz-api.test.d.ts +9 -0
- package/dist/backends/signoz-api.test.d.ts.map +1 -1
- package/dist/backends/signoz-api.test.js +20 -1032
- package/dist/backends/signoz-api.test.js.map +1 -1
- package/dist/lib/agent-as-judge.d.ts +388 -0
- package/dist/lib/agent-as-judge.d.ts.map +1 -0
- package/dist/lib/agent-as-judge.js +740 -0
- package/dist/lib/agent-as-judge.js.map +1 -0
- package/dist/lib/agent-as-judge.test.d.ts +5 -0
- package/dist/lib/agent-as-judge.test.d.ts.map +1 -0
- package/dist/lib/agent-as-judge.test.js +816 -0
- package/dist/lib/agent-as-judge.test.js.map +1 -0
- package/dist/lib/cache.d.ts +61 -2
- package/dist/lib/cache.d.ts.map +1 -1
- package/dist/lib/cache.js +54 -3
- package/dist/lib/cache.js.map +1 -1
- package/dist/lib/circuit-breaker.d.ts +101 -0
- package/dist/lib/circuit-breaker.d.ts.map +1 -0
- package/dist/lib/circuit-breaker.js +158 -0
- package/dist/lib/circuit-breaker.js.map +1 -0
- package/dist/lib/circuit-breaker.test.d.ts +2 -0
- package/dist/lib/circuit-breaker.test.d.ts.map +1 -0
- package/dist/lib/circuit-breaker.test.js +263 -0
- package/dist/lib/circuit-breaker.test.js.map +1 -0
- package/dist/lib/confident-export.d.ts +101 -0
- package/dist/lib/confident-export.d.ts.map +1 -0
- package/dist/lib/confident-export.js +393 -0
- package/dist/lib/confident-export.js.map +1 -0
- package/dist/lib/confident-export.test.d.ts +7 -0
- package/dist/lib/confident-export.test.d.ts.map +1 -0
- package/dist/lib/confident-export.test.js +835 -0
- package/dist/lib/confident-export.test.js.map +1 -0
- package/dist/lib/constants-symlink.test.d.ts +12 -0
- package/dist/lib/constants-symlink.test.d.ts.map +1 -0
- package/dist/lib/constants-symlink.test.js +357 -0
- package/dist/lib/constants-symlink.test.js.map +1 -0
- package/dist/lib/constants.d.ts +75 -0
- package/dist/lib/constants.d.ts.map +1 -1
- package/dist/lib/constants.js +104 -1
- package/dist/lib/constants.js.map +1 -1
- package/dist/lib/datadog-export.d.ts +156 -0
- package/dist/lib/datadog-export.d.ts.map +1 -0
- package/dist/lib/datadog-export.js +464 -0
- package/dist/lib/datadog-export.js.map +1 -0
- package/dist/lib/datadog-export.test.d.ts +14 -0
- package/dist/lib/datadog-export.test.d.ts.map +1 -0
- package/dist/lib/datadog-export.test.js +890 -0
- package/dist/lib/datadog-export.test.js.map +1 -0
- package/dist/lib/edge-cases.test.js +17 -17
- package/dist/lib/edge-cases.test.js.map +1 -1
- package/dist/lib/error-sanitizer.d.ts.map +1 -1
- package/dist/lib/error-sanitizer.js +29 -3
- package/dist/lib/error-sanitizer.js.map +1 -1
- package/dist/lib/error-sanitizer.test.js +159 -0
- package/dist/lib/error-sanitizer.test.js.map +1 -1
- package/dist/lib/error-types.d.ts +54 -0
- package/dist/lib/error-types.d.ts.map +1 -0
- package/dist/lib/error-types.js +154 -0
- package/dist/lib/error-types.js.map +1 -0
- package/dist/lib/error-types.test.d.ts +2 -0
- package/dist/lib/error-types.test.d.ts.map +1 -0
- package/dist/lib/error-types.test.js +196 -0
- package/dist/lib/error-types.test.js.map +1 -0
- package/dist/lib/evaluation-hooks.d.ts +49 -0
- package/dist/lib/evaluation-hooks.d.ts.map +1 -0
- package/dist/lib/evaluation-hooks.js +488 -0
- package/dist/lib/evaluation-hooks.js.map +1 -0
- package/dist/lib/evaluation-hooks.test.d.ts +8 -0
- package/dist/lib/evaluation-hooks.test.d.ts.map +1 -0
- package/dist/lib/evaluation-hooks.test.js +624 -0
- package/dist/lib/evaluation-hooks.test.js.map +1 -0
- package/dist/lib/export-utils.d.ts +99 -0
- package/dist/lib/export-utils.d.ts.map +1 -0
- package/dist/lib/export-utils.js +238 -0
- package/dist/lib/export-utils.js.map +1 -0
- package/dist/lib/export-utils.test.d.ts +5 -0
- package/dist/lib/export-utils.test.d.ts.map +1 -0
- package/dist/lib/export-utils.test.js +193 -0
- package/dist/lib/export-utils.test.js.map +1 -0
- package/dist/lib/file-utils.d.ts +17 -2
- package/dist/lib/file-utils.d.ts.map +1 -1
- package/dist/lib/file-utils.js +24 -5
- package/dist/lib/file-utils.js.map +1 -1
- package/dist/lib/file-utils.test.js +30 -0
- package/dist/lib/file-utils.test.js.map +1 -1
- package/dist/lib/histogram.d.ts +119 -0
- package/dist/lib/histogram.d.ts.map +1 -0
- package/dist/lib/histogram.js +202 -0
- package/dist/lib/histogram.js.map +1 -0
- package/dist/lib/histogram.test.d.ts +5 -0
- package/dist/lib/histogram.test.d.ts.map +1 -0
- package/dist/lib/histogram.test.js +381 -0
- package/dist/lib/histogram.test.js.map +1 -0
- package/dist/lib/indexer.test.js +27 -27
- package/dist/lib/indexer.test.js.map +1 -1
- package/dist/lib/input-validator.d.ts +12 -0
- package/dist/lib/input-validator.d.ts.map +1 -1
- package/dist/lib/input-validator.fuzz.test.d.ts +12 -0
- package/dist/lib/input-validator.fuzz.test.d.ts.map +1 -0
- package/dist/lib/input-validator.fuzz.test.js +290 -0
- package/dist/lib/input-validator.fuzz.test.js.map +1 -0
- package/dist/lib/input-validator.js +57 -3
- package/dist/lib/input-validator.js.map +1 -1
- package/dist/lib/input-validator.test.js +129 -1
- package/dist/lib/input-validator.test.js.map +1 -1
- package/dist/lib/instrumentation.d.ts +153 -0
- package/dist/lib/instrumentation.d.ts.map +1 -0
- package/dist/lib/instrumentation.integration.test.d.ts +2 -0
- package/dist/lib/instrumentation.integration.test.d.ts.map +1 -0
- package/dist/lib/instrumentation.integration.test.js +589 -0
- package/dist/lib/instrumentation.integration.test.js.map +1 -0
- package/dist/lib/instrumentation.js +520 -0
- package/dist/lib/instrumentation.js.map +1 -0
- package/dist/lib/instrumentation.test.d.ts +2 -0
- package/dist/lib/instrumentation.test.d.ts.map +1 -0
- package/dist/lib/instrumentation.test.js +821 -0
- package/dist/lib/instrumentation.test.js.map +1 -0
- package/dist/lib/langfuse-export.d.ts +125 -0
- package/dist/lib/langfuse-export.d.ts.map +1 -0
- package/dist/lib/langfuse-export.js +367 -0
- package/dist/lib/langfuse-export.js.map +1 -0
- package/dist/lib/langfuse-export.test.d.ts +7 -0
- package/dist/lib/langfuse-export.test.d.ts.map +1 -0
- package/dist/lib/langfuse-export.test.js +1007 -0
- package/dist/lib/langfuse-export.test.js.map +1 -0
- package/dist/lib/llm-as-judge.d.ts +657 -0
- package/dist/lib/llm-as-judge.d.ts.map +1 -0
- package/dist/lib/llm-as-judge.js +1397 -0
- package/dist/lib/llm-as-judge.js.map +1 -0
- package/dist/lib/llm-as-judge.test.d.ts +2 -0
- package/dist/lib/llm-as-judge.test.d.ts.map +1 -0
- package/dist/lib/llm-as-judge.test.js +2409 -0
- package/dist/lib/llm-as-judge.test.js.map +1 -0
- package/dist/lib/logger.d.ts +46 -0
- package/dist/lib/logger.d.ts.map +1 -0
- package/dist/lib/logger.js +81 -0
- package/dist/lib/logger.js.map +1 -0
- package/dist/lib/logger.test.d.ts +2 -0
- package/dist/lib/logger.test.d.ts.map +1 -0
- package/dist/lib/logger.test.js +122 -0
- package/dist/lib/logger.test.js.map +1 -0
- package/dist/lib/metrics.d.ts +62 -0
- package/dist/lib/metrics.d.ts.map +1 -0
- package/dist/lib/metrics.js +166 -0
- package/dist/lib/metrics.js.map +1 -0
- package/dist/lib/metrics.test.d.ts +5 -0
- package/dist/lib/metrics.test.d.ts.map +1 -0
- package/dist/lib/metrics.test.js +189 -0
- package/dist/lib/metrics.test.js.map +1 -0
- package/dist/lib/parse-stats.d.ts +119 -0
- package/dist/lib/parse-stats.d.ts.map +1 -0
- package/dist/lib/parse-stats.js +206 -0
- package/dist/lib/parse-stats.js.map +1 -0
- package/dist/lib/parse-stats.test.d.ts +5 -0
- package/dist/lib/parse-stats.test.d.ts.map +1 -0
- package/dist/lib/parse-stats.test.js +283 -0
- package/dist/lib/parse-stats.test.js.map +1 -0
- package/dist/lib/phoenix-export.d.ts +109 -0
- package/dist/lib/phoenix-export.d.ts.map +1 -0
- package/dist/lib/phoenix-export.js +429 -0
- package/dist/lib/phoenix-export.js.map +1 -0
- package/dist/lib/phoenix-export.test.d.ts +11 -0
- package/dist/lib/phoenix-export.test.d.ts.map +1 -0
- package/dist/lib/phoenix-export.test.js +725 -0
- package/dist/lib/phoenix-export.test.js.map +1 -0
- package/dist/lib/server-utils.d.ts +14 -1
- package/dist/lib/server-utils.d.ts.map +1 -1
- package/dist/lib/server-utils.js +43 -3
- package/dist/lib/server-utils.js.map +1 -1
- package/dist/lib/shared-schemas.d.ts +28 -0
- package/dist/lib/shared-schemas.d.ts.map +1 -1
- package/dist/lib/shared-schemas.js +33 -4
- package/dist/lib/shared-schemas.js.map +1 -1
- package/dist/lib/toon-encoder.d.ts +7 -2
- package/dist/lib/toon-encoder.d.ts.map +1 -1
- package/dist/lib/toon-encoder.js +21 -6
- package/dist/lib/toon-encoder.js.map +1 -1
- package/dist/lib/toon-encoder.test.d.ts +5 -0
- package/dist/lib/toon-encoder.test.d.ts.map +1 -0
- package/dist/lib/toon-encoder.test.js +85 -0
- package/dist/lib/toon-encoder.test.js.map +1 -0
- package/dist/lib/verification-events.d.ts +100 -0
- package/dist/lib/verification-events.d.ts.map +1 -0
- package/dist/lib/verification-events.js +162 -0
- package/dist/lib/verification-events.js.map +1 -0
- package/dist/lib/verification-events.test.d.ts +5 -0
- package/dist/lib/verification-events.test.d.ts.map +1 -0
- package/dist/lib/verification-events.test.js +193 -0
- package/dist/lib/verification-events.test.js.map +1 -0
- package/dist/server.d.ts +5 -0
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +79 -21
- package/dist/server.js.map +1 -1
- package/dist/server.test.js +30 -0
- package/dist/server.test.js.map +1 -1
- package/dist/test-helpers/env-utils.d.ts +22 -0
- package/dist/test-helpers/env-utils.d.ts.map +1 -1
- package/dist/test-helpers/env-utils.js +38 -0
- package/dist/test-helpers/env-utils.js.map +1 -1
- package/dist/test-helpers/fuzz-generators.d.ts +58 -0
- package/dist/test-helpers/fuzz-generators.d.ts.map +1 -0
- package/dist/test-helpers/fuzz-generators.js +216 -0
- package/dist/test-helpers/fuzz-generators.js.map +1 -0
- package/dist/test-helpers/index.d.ts +1 -0
- package/dist/test-helpers/index.d.ts.map +1 -1
- package/dist/test-helpers/index.js +2 -0
- package/dist/test-helpers/index.js.map +1 -1
- package/dist/test-helpers/memfs-utils.d.ts +181 -0
- package/dist/test-helpers/memfs-utils.d.ts.map +1 -0
- package/dist/test-helpers/memfs-utils.js +292 -0
- package/dist/test-helpers/memfs-utils.js.map +1 -0
- package/dist/test-helpers/memfs-utils.test.d.ts +5 -0
- package/dist/test-helpers/memfs-utils.test.d.ts.map +1 -0
- package/dist/test-helpers/memfs-utils.test.js +338 -0
- package/dist/test-helpers/memfs-utils.test.js.map +1 -0
- package/dist/test-helpers/race-condition-helpers.d.ts +85 -0
- package/dist/test-helpers/race-condition-helpers.d.ts.map +1 -0
- package/dist/test-helpers/race-condition-helpers.js +279 -0
- package/dist/test-helpers/race-condition-helpers.js.map +1 -0
- package/dist/test-helpers/test-data-builders.d.ts +40 -3
- package/dist/test-helpers/test-data-builders.d.ts.map +1 -1
- package/dist/test-helpers/test-data-builders.js +54 -5
- package/dist/test-helpers/test-data-builders.js.map +1 -1
- package/dist/test-helpers/tool-validators.d.ts.map +1 -1
- package/dist/test-helpers/tool-validators.js +16 -1
- package/dist/test-helpers/tool-validators.js.map +1 -1
- package/dist/tools/context-stats.d.ts.map +1 -1
- package/dist/tools/context-stats.js +6 -8
- package/dist/tools/context-stats.js.map +1 -1
- package/dist/tools/export-confident.d.ts +145 -0
- package/dist/tools/export-confident.d.ts.map +1 -0
- package/dist/tools/export-confident.js +134 -0
- package/dist/tools/export-confident.js.map +1 -0
- package/dist/tools/export-confident.test.d.ts +7 -0
- package/dist/tools/export-confident.test.d.ts.map +1 -0
- package/dist/tools/export-confident.test.js +332 -0
- package/dist/tools/export-confident.test.js.map +1 -0
- package/dist/tools/export-datadog.d.ts +160 -0
- package/dist/tools/export-datadog.d.ts.map +1 -0
- package/dist/tools/export-datadog.js +160 -0
- package/dist/tools/export-datadog.js.map +1 -0
- package/dist/tools/export-datadog.test.d.ts +8 -0
- package/dist/tools/export-datadog.test.d.ts.map +1 -0
- package/dist/tools/export-datadog.test.js +419 -0
- package/dist/tools/export-datadog.test.js.map +1 -0
- package/dist/tools/export-langfuse.d.ts +137 -0
- package/dist/tools/export-langfuse.d.ts.map +1 -0
- package/dist/tools/export-langfuse.js +131 -0
- package/dist/tools/export-langfuse.js.map +1 -0
- package/dist/tools/export-langfuse.test.d.ts +7 -0
- package/dist/tools/export-langfuse.test.d.ts.map +1 -0
- package/dist/tools/export-langfuse.test.js +303 -0
- package/dist/tools/export-langfuse.test.js.map +1 -0
- package/dist/tools/export-phoenix.d.ts +145 -0
- package/dist/tools/export-phoenix.d.ts.map +1 -0
- package/dist/tools/export-phoenix.js +135 -0
- package/dist/tools/export-phoenix.js.map +1 -0
- package/dist/tools/export-phoenix.test.d.ts +7 -0
- package/dist/tools/export-phoenix.test.d.ts.map +1 -0
- package/dist/tools/export-phoenix.test.js +316 -0
- package/dist/tools/export-phoenix.test.js.map +1 -0
- package/dist/tools/health-check.d.ts +26 -0
- package/dist/tools/health-check.d.ts.map +1 -1
- package/dist/tools/health-check.js +36 -7
- package/dist/tools/health-check.js.map +1 -1
- package/dist/tools/index.d.ts +6 -0
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +6 -0
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/inject-evaluations.d.ts +1315 -0
- package/dist/tools/inject-evaluations.d.ts.map +1 -0
- package/dist/tools/inject-evaluations.js +121 -0
- package/dist/tools/inject-evaluations.js.map +1 -0
- package/dist/tools/inject-evaluations.test.d.ts +5 -0
- package/dist/tools/inject-evaluations.test.d.ts.map +1 -0
- package/dist/tools/inject-evaluations.test.js +359 -0
- package/dist/tools/inject-evaluations.test.js.map +1 -0
- package/dist/tools/query-evaluations.d.ts +25 -4
- package/dist/tools/query-evaluations.d.ts.map +1 -1
- package/dist/tools/query-evaluations.js +26 -2
- package/dist/tools/query-evaluations.js.map +1 -1
- package/dist/tools/query-evaluations.test.js +53 -46
- package/dist/tools/query-evaluations.test.js.map +1 -1
- package/dist/tools/query-llm-events.js +2 -2
- package/dist/tools/query-llm-events.js.map +1 -1
- package/dist/tools/query-llm-events.test.js +6 -3
- package/dist/tools/query-llm-events.test.js.map +1 -1
- package/dist/tools/query-logs.d.ts +8 -8
- package/dist/tools/query-logs.js +3 -3
- package/dist/tools/query-logs.js.map +1 -1
- package/dist/tools/query-metrics.d.ts +4 -4
- package/dist/tools/query-metrics.js +2 -2
- package/dist/tools/query-metrics.js.map +1 -1
- package/dist/tools/query-traces.d.ts +8 -8
- package/dist/tools/query-verifications.d.ts +111 -0
- package/dist/tools/query-verifications.d.ts.map +1 -0
- package/dist/tools/query-verifications.js +101 -0
- package/dist/tools/query-verifications.js.map +1 -0
- package/dist/tools/query-verifications.test.d.ts +5 -0
- package/dist/tools/query-verifications.test.d.ts.map +1 -0
- package/dist/tools/query-verifications.test.js +156 -0
- package/dist/tools/query-verifications.test.js.map +1 -0
- package/dist/types/evaluation-hooks.d.ts +176 -0
- package/dist/types/evaluation-hooks.d.ts.map +1 -0
- package/dist/types/evaluation-hooks.js +49 -0
- package/dist/types/evaluation-hooks.js.map +1 -0
- package/package.json +11 -2
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tests for query-verifications tool
|
|
3
|
+
*/
|
|
4
|
+
import { describe, it, mock } from 'node:test';
|
|
5
|
+
import assert from 'node:assert';
|
|
6
|
+
import { queryVerifications, queryVerificationsSchema, queryVerificationsTool, buildSummary, } from './query-verifications.js';
|
|
7
|
+
import { validateLimitSchema, validateDateRangeSchema } from '../test-helpers/schema-validators.js';
|
|
8
|
+
describe('queryVerifications', () => {
|
|
9
|
+
// Use shared schema validators
|
|
10
|
+
validateLimitSchema(queryVerificationsSchema, 'queryVerificationsSchema', 50);
|
|
11
|
+
validateDateRangeSchema(queryVerificationsSchema, 'queryVerificationsSchema');
|
|
12
|
+
describe('schema validation', () => {
|
|
13
|
+
it('should accept empty input with defaults', () => {
|
|
14
|
+
const result = queryVerificationsSchema.parse({});
|
|
15
|
+
assert.strictEqual(result.limit, 50);
|
|
16
|
+
});
|
|
17
|
+
it('should accept all optional parameters', () => {
|
|
18
|
+
const input = {
|
|
19
|
+
sessionId: 'sess-123',
|
|
20
|
+
verificationType: 'approval',
|
|
21
|
+
startDate: '2026-01-28',
|
|
22
|
+
endDate: '2026-01-28',
|
|
23
|
+
limit: 100,
|
|
24
|
+
};
|
|
25
|
+
const result = queryVerificationsSchema.parse(input);
|
|
26
|
+
assert.strictEqual(result.sessionId, 'sess-123');
|
|
27
|
+
assert.strictEqual(result.verificationType, 'approval');
|
|
28
|
+
});
|
|
29
|
+
it('should enforce max limit of 1000', () => {
|
|
30
|
+
assert.throws(() => {
|
|
31
|
+
queryVerificationsSchema.parse({ limit: 1001 });
|
|
32
|
+
});
|
|
33
|
+
});
|
|
34
|
+
it('should accept all verification types', () => {
|
|
35
|
+
const types = ['approval', 'rejection', 'override', 'review'];
|
|
36
|
+
for (const type of types) {
|
|
37
|
+
const result = queryVerificationsSchema.parse({ verificationType: type });
|
|
38
|
+
assert.strictEqual(result.verificationType, type);
|
|
39
|
+
}
|
|
40
|
+
});
|
|
41
|
+
it('should reject invalid verification type', () => {
|
|
42
|
+
assert.throws(() => {
|
|
43
|
+
queryVerificationsSchema.parse({ verificationType: 'invalid' });
|
|
44
|
+
});
|
|
45
|
+
});
|
|
46
|
+
});
|
|
47
|
+
describe('buildSummary', () => {
|
|
48
|
+
it('should count by verification type', () => {
|
|
49
|
+
const events = [
|
|
50
|
+
{ timestamp: '2026-01-31T12:00:00Z', sessionId: 's1', verificationType: 'approval' },
|
|
51
|
+
{ timestamp: '2026-01-31T12:01:00Z', sessionId: 's2', verificationType: 'approval' },
|
|
52
|
+
{ timestamp: '2026-01-31T12:02:00Z', sessionId: 's3', verificationType: 'rejection' },
|
|
53
|
+
];
|
|
54
|
+
const summary = buildSummary(events);
|
|
55
|
+
assert.strictEqual(summary.byVerificationType['approval'], 2);
|
|
56
|
+
assert.strictEqual(summary.byVerificationType['rejection'], 1);
|
|
57
|
+
});
|
|
58
|
+
it('should count by verifier ID', () => {
|
|
59
|
+
const events = [
|
|
60
|
+
{ timestamp: '2026-01-31T12:00:00Z', sessionId: 's1', verificationType: 'approval', verifierId: 'user-001' },
|
|
61
|
+
{ timestamp: '2026-01-31T12:01:00Z', sessionId: 's2', verificationType: 'approval', verifierId: 'user-001' },
|
|
62
|
+
{ timestamp: '2026-01-31T12:02:00Z', sessionId: 's3', verificationType: 'rejection', verifierId: 'user-002' },
|
|
63
|
+
];
|
|
64
|
+
const summary = buildSummary(events);
|
|
65
|
+
assert.strictEqual(summary.byVerifierId['user-001'], 2);
|
|
66
|
+
assert.strictEqual(summary.byVerifierId['user-002'], 1);
|
|
67
|
+
});
|
|
68
|
+
it('should handle empty array', () => {
|
|
69
|
+
const summary = buildSummary([]);
|
|
70
|
+
assert.deepStrictEqual(summary.byVerificationType, {});
|
|
71
|
+
assert.deepStrictEqual(summary.byVerifierId, {});
|
|
72
|
+
});
|
|
73
|
+
});
|
|
74
|
+
describe('handler with mocked backend', () => {
|
|
75
|
+
it('should return empty results when no verifications found', async () => {
|
|
76
|
+
const mockQueryFn = mock.fn(async () => []);
|
|
77
|
+
const options = { queryFn: mockQueryFn };
|
|
78
|
+
const result = await queryVerifications({}, options);
|
|
79
|
+
assert.strictEqual(result.count, 0);
|
|
80
|
+
assert.deepStrictEqual(result.verifications, []);
|
|
81
|
+
});
|
|
82
|
+
it('should include all fields in verification response', async () => {
|
|
83
|
+
const mockEvent = {
|
|
84
|
+
timestamp: '2026-01-31T12:00:00Z',
|
|
85
|
+
sessionId: 'sess-123',
|
|
86
|
+
verificationType: 'override',
|
|
87
|
+
traceId: 'trace-456',
|
|
88
|
+
verifierId: 'user-001',
|
|
89
|
+
originalOutput: 'Original AI text',
|
|
90
|
+
verifiedOutput: 'Corrected text',
|
|
91
|
+
metadata: { reason: 'factual error' },
|
|
92
|
+
};
|
|
93
|
+
const mockQueryFn = mock.fn(async () => [mockEvent]);
|
|
94
|
+
const options = { queryFn: mockQueryFn };
|
|
95
|
+
const result = await queryVerifications({}, options);
|
|
96
|
+
const verification = result.verifications[0];
|
|
97
|
+
assert.strictEqual(verification.timestamp, '2026-01-31T12:00:00Z');
|
|
98
|
+
assert.strictEqual(verification.sessionId, 'sess-123');
|
|
99
|
+
assert.strictEqual(verification.verificationType, 'override');
|
|
100
|
+
assert.strictEqual(verification.traceId, 'trace-456');
|
|
101
|
+
assert.strictEqual(verification.verifierId, 'user-001');
|
|
102
|
+
assert.strictEqual(verification.originalOutput, 'Original AI text');
|
|
103
|
+
assert.strictEqual(verification.verifiedOutput, 'Corrected text');
|
|
104
|
+
assert.deepStrictEqual(verification.metadata, { reason: 'factual error' });
|
|
105
|
+
});
|
|
106
|
+
it('should limit returned verifications to 50', async () => {
|
|
107
|
+
const manyEvents = Array.from({ length: 60 }, (_, i) => ({
|
|
108
|
+
timestamp: `2026-01-31T12:${String(i).padStart(2, '0')}:00Z`,
|
|
109
|
+
sessionId: `sess-${i}`,
|
|
110
|
+
verificationType: 'approval',
|
|
111
|
+
}));
|
|
112
|
+
const mockQueryFn = mock.fn(async () => manyEvents);
|
|
113
|
+
const options = { queryFn: mockQueryFn };
|
|
114
|
+
const result = await queryVerifications({}, options);
|
|
115
|
+
assert.strictEqual(result.count, 60);
|
|
116
|
+
assert.strictEqual(result.verifications.length, 50);
|
|
117
|
+
});
|
|
118
|
+
it('should pass filter options to backend', async () => {
|
|
119
|
+
let capturedOptions;
|
|
120
|
+
const mockQueryFn = mock.fn(async (opts) => {
|
|
121
|
+
capturedOptions = opts;
|
|
122
|
+
return [];
|
|
123
|
+
});
|
|
124
|
+
const options = { queryFn: mockQueryFn };
|
|
125
|
+
await queryVerifications({
|
|
126
|
+
sessionId: 'sess-test',
|
|
127
|
+
verificationType: 'rejection',
|
|
128
|
+
startDate: '2026-01-01',
|
|
129
|
+
endDate: '2026-01-31',
|
|
130
|
+
limit: 25,
|
|
131
|
+
}, options);
|
|
132
|
+
assert.strictEqual(mockQueryFn.mock.calls.length, 1);
|
|
133
|
+
assert.ok(capturedOptions);
|
|
134
|
+
assert.strictEqual(capturedOptions.sessionId, 'sess-test');
|
|
135
|
+
assert.strictEqual(capturedOptions.verificationType, 'rejection');
|
|
136
|
+
assert.strictEqual(capturedOptions.startDate, '2026-01-01');
|
|
137
|
+
assert.strictEqual(capturedOptions.endDate, '2026-01-31');
|
|
138
|
+
assert.strictEqual(capturedOptions.limit, 25);
|
|
139
|
+
});
|
|
140
|
+
});
|
|
141
|
+
describe('tool definition', () => {
|
|
142
|
+
it('should have correct name', () => {
|
|
143
|
+
assert.strictEqual(queryVerificationsTool.name, 'obs_query_verifications');
|
|
144
|
+
});
|
|
145
|
+
it('should have description mentioning EU AI Act', () => {
|
|
146
|
+
assert.ok(queryVerificationsTool.description.includes('EU AI Act'));
|
|
147
|
+
});
|
|
148
|
+
it('should have handler function', () => {
|
|
149
|
+
assert.strictEqual(typeof queryVerificationsTool.handler, 'function');
|
|
150
|
+
});
|
|
151
|
+
it('should have inputSchema', () => {
|
|
152
|
+
assert.ok(queryVerificationsTool.inputSchema);
|
|
153
|
+
});
|
|
154
|
+
});
|
|
155
|
+
});
|
|
156
|
+
//# sourceMappingURL=query-verifications.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"query-verifications.test.js","sourceRoot":"","sources":["../../src/tools/query-verifications.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Type definitions for LLM-as-Judge Hooks (Phase 4e)
|
|
3
|
+
*
|
|
4
|
+
* Enables external evaluators to inject quality scores via webhooks.
|
|
5
|
+
* Supports multiple authentication methods and evaluation sources.
|
|
6
|
+
*/
|
|
7
|
+
import type { EvaluatorType, StepScore, ToolVerification } from '../backends/index.js';
|
|
8
|
+
/**
|
|
9
|
+
* Supported authentication methods for webhook endpoints
|
|
10
|
+
*/
|
|
11
|
+
export type WebhookAuthMethod = 'hmac-sha256' | 'bearer' | 'api-key' | 'none';
|
|
12
|
+
/**
|
|
13
|
+
* Configuration for a webhook endpoint that receives evaluation scores
|
|
14
|
+
*/
|
|
15
|
+
export interface WebhookConfig {
|
|
16
|
+
/** Unique identifier for this webhook configuration */
|
|
17
|
+
id: string;
|
|
18
|
+
/** Human-readable name for the webhook */
|
|
19
|
+
name: string;
|
|
20
|
+
/** Authentication method */
|
|
21
|
+
authMethod: WebhookAuthMethod;
|
|
22
|
+
/** Secret for HMAC signature validation (required for hmac-sha256) */
|
|
23
|
+
secret?: string;
|
|
24
|
+
/** Expected bearer token (required for bearer auth) */
|
|
25
|
+
bearerToken?: string;
|
|
26
|
+
/** Expected API key (required for api-key auth) */
|
|
27
|
+
apiKey?: string;
|
|
28
|
+
/** Optional IP allowlist for additional security */
|
|
29
|
+
allowedIps?: string[];
|
|
30
|
+
/** Whether this webhook is enabled */
|
|
31
|
+
enabled: boolean;
|
|
32
|
+
/** Creation timestamp */
|
|
33
|
+
createdAt: string;
|
|
34
|
+
/** Last update timestamp */
|
|
35
|
+
updatedAt?: string;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Payload structure for webhook-delivered evaluation results.
|
|
39
|
+
* Compatible with EvaluationResult but with required fields for external injection.
|
|
40
|
+
*/
|
|
41
|
+
export interface WebhookEvaluationPayload {
|
|
42
|
+
/** Evaluation metric name (e.g., "relevance", "faithfulness") - REQUIRED */
|
|
43
|
+
evaluationName: string;
|
|
44
|
+
/** Numeric score (0-1 normalized recommended) - one of scoreValue or scoreLabel required */
|
|
45
|
+
scoreValue?: number;
|
|
46
|
+
/** Human-readable label (e.g., "pass", "fail", "relevant") */
|
|
47
|
+
scoreLabel?: string;
|
|
48
|
+
/** Score unit/scale (e.g., "ratio_0_1", "percentage", "stars_5") */
|
|
49
|
+
scoreUnit?: string;
|
|
50
|
+
/** Explanation/rationale for the score */
|
|
51
|
+
explanation?: string;
|
|
52
|
+
/** Identity of the evaluator - REQUIRED for external webhooks */
|
|
53
|
+
evaluator: string;
|
|
54
|
+
/** Type of evaluator */
|
|
55
|
+
evaluatorType: EvaluatorType;
|
|
56
|
+
/** Response ID for correlation */
|
|
57
|
+
responseId?: string;
|
|
58
|
+
/** Trace ID for correlation */
|
|
59
|
+
traceId?: string;
|
|
60
|
+
/** Session ID for session-scoped correlation */
|
|
61
|
+
sessionId?: string;
|
|
62
|
+
/** Subject agent ID being evaluated */
|
|
63
|
+
agentId?: string;
|
|
64
|
+
/** Subject agent name being evaluated */
|
|
65
|
+
agentName?: string;
|
|
66
|
+
/** Per-step evaluation breakdown for agent trajectory */
|
|
67
|
+
stepScores?: StepScore[];
|
|
68
|
+
/** Tool call correctness verifications */
|
|
69
|
+
toolVerifications?: ToolVerification[];
|
|
70
|
+
/** Number of steps/actions in agent trajectory */
|
|
71
|
+
trajectoryLength?: number;
|
|
72
|
+
/** Optional custom metadata from external system */
|
|
73
|
+
metadata?: Record<string, unknown>;
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Batch payload for multiple evaluations in a single request
|
|
77
|
+
*/
|
|
78
|
+
export interface WebhookBatchPayload {
|
|
79
|
+
/** Array of evaluations (max 100 per batch) */
|
|
80
|
+
evaluations: WebhookEvaluationPayload[];
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Result of webhook payload validation and processing
|
|
84
|
+
*/
|
|
85
|
+
export interface HookResult {
|
|
86
|
+
/** Whether the operation succeeded */
|
|
87
|
+
success: boolean;
|
|
88
|
+
/** Human-readable message */
|
|
89
|
+
message: string;
|
|
90
|
+
/** Number of evaluations successfully processed */
|
|
91
|
+
processedCount?: number;
|
|
92
|
+
/** IDs of created evaluations (for deduplication tracking) */
|
|
93
|
+
evaluationIds?: string[];
|
|
94
|
+
/** Validation errors if any */
|
|
95
|
+
errors?: HookValidationError[];
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Detailed validation error for a specific field or evaluation
|
|
99
|
+
*/
|
|
100
|
+
export interface HookValidationError {
|
|
101
|
+
/** Index in batch (for batch payloads) */
|
|
102
|
+
index?: number;
|
|
103
|
+
/** Field that failed validation */
|
|
104
|
+
field: string;
|
|
105
|
+
/** Error message */
|
|
106
|
+
message: string;
|
|
107
|
+
/** Suggested fix */
|
|
108
|
+
suggestion?: string;
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* HMAC signature verification result
|
|
112
|
+
*/
|
|
113
|
+
export interface SignatureVerificationResult {
|
|
114
|
+
/** Whether signature is valid */
|
|
115
|
+
valid: boolean;
|
|
116
|
+
/** Error message if invalid */
|
|
117
|
+
error?: string;
|
|
118
|
+
/** Detected algorithm (for diagnostic purposes) */
|
|
119
|
+
algorithm?: string;
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Options for the hook executor
|
|
123
|
+
*/
|
|
124
|
+
export interface HookExecutorOptions {
|
|
125
|
+
/** Directory to write evaluation JSONL files */
|
|
126
|
+
telemetryDir: string;
|
|
127
|
+
/** Whether to validate signature (default: true) */
|
|
128
|
+
validateSignature?: boolean;
|
|
129
|
+
/** Maximum evaluations per batch (default: 100) */
|
|
130
|
+
maxBatchSize?: number;
|
|
131
|
+
/** Whether to deduplicate by responseId + timestamp (default: false) */
|
|
132
|
+
deduplication?: boolean;
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Statistics for hook processing
|
|
136
|
+
*/
|
|
137
|
+
export interface HookStats {
|
|
138
|
+
/** Total evaluations received */
|
|
139
|
+
totalReceived: number;
|
|
140
|
+
/** Successfully processed */
|
|
141
|
+
successCount: number;
|
|
142
|
+
/** Failed due to validation */
|
|
143
|
+
validationFailures: number;
|
|
144
|
+
/** Failed due to signature */
|
|
145
|
+
signatureFailures: number;
|
|
146
|
+
/** Deduplicated (skipped) */
|
|
147
|
+
deduplicatedCount: number;
|
|
148
|
+
/** Last processed timestamp */
|
|
149
|
+
lastProcessedAt?: string;
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
152
|
+
* Score normalization configuration
|
|
153
|
+
*/
|
|
154
|
+
export interface ScoreNormalizationConfig {
|
|
155
|
+
/** Unit of the input score */
|
|
156
|
+
inputUnit: string;
|
|
157
|
+
/** Target unit (usually "ratio_0_1") */
|
|
158
|
+
targetUnit: string;
|
|
159
|
+
/** Minimum value for the input scale */
|
|
160
|
+
inputMin: number;
|
|
161
|
+
/** Maximum value for the input scale */
|
|
162
|
+
inputMax: number;
|
|
163
|
+
}
|
|
164
|
+
/**
|
|
165
|
+
* Common score units and their normalization parameters
|
|
166
|
+
*/
|
|
167
|
+
export declare const SCORE_UNIT_CONFIGS: Record<string, ScoreNormalizationConfig>;
|
|
168
|
+
/**
|
|
169
|
+
* Normalize a score to 0-1 range based on its unit.
|
|
170
|
+
*
|
|
171
|
+
* @param value - The score value to normalize
|
|
172
|
+
* @param unit - The unit/scale of the input (e.g., "percentage", "stars_5")
|
|
173
|
+
* @returns Normalized score clamped to [0, 1]
|
|
174
|
+
*/
|
|
175
|
+
export declare function normalizeScore(value: number, unit?: string): number;
|
|
176
|
+
//# sourceMappingURL=evaluation-hooks.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"evaluation-hooks.d.ts","sourceRoot":"","sources":["../../src/types/evaluation-hooks.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Type definitions for LLM-as-Judge Hooks (Phase 4e)
|
|
3
|
+
*
|
|
4
|
+
* Enables external evaluators to inject quality scores via webhooks.
|
|
5
|
+
* Supports multiple authentication methods and evaluation sources.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Common score units and their normalization parameters
|
|
9
|
+
*/
|
|
10
|
+
export const SCORE_UNIT_CONFIGS = {
|
|
11
|
+
ratio_0_1: { inputUnit: 'ratio_0_1', targetUnit: 'ratio_0_1', inputMin: 0, inputMax: 1 },
|
|
12
|
+
percentage: { inputUnit: 'percentage', targetUnit: 'ratio_0_1', inputMin: 0, inputMax: 100 },
|
|
13
|
+
stars_5: { inputUnit: 'stars_5', targetUnit: 'ratio_0_1', inputMin: 0, inputMax: 5 },
|
|
14
|
+
stars_10: { inputUnit: 'stars_10', targetUnit: 'ratio_0_1', inputMin: 0, inputMax: 10 },
|
|
15
|
+
likert_5: { inputUnit: 'likert_5', targetUnit: 'ratio_0_1', inputMin: 1, inputMax: 5 },
|
|
16
|
+
likert_7: { inputUnit: 'likert_7', targetUnit: 'ratio_0_1', inputMin: 1, inputMax: 7 },
|
|
17
|
+
};
|
|
18
|
+
/**
|
|
19
|
+
* Normalize a score to 0-1 range based on its unit.
|
|
20
|
+
*
|
|
21
|
+
* @param value - The score value to normalize
|
|
22
|
+
* @param unit - The unit/scale of the input (e.g., "percentage", "stars_5")
|
|
23
|
+
* @returns Normalized score clamped to [0, 1]
|
|
24
|
+
*/
|
|
25
|
+
export function normalizeScore(value, unit) {
|
|
26
|
+
// Handle NaN, Infinity, -Infinity
|
|
27
|
+
if (!Number.isFinite(value)) {
|
|
28
|
+
return 0;
|
|
29
|
+
}
|
|
30
|
+
if (!unit || unit === 'ratio_0_1') {
|
|
31
|
+
return Math.max(0, Math.min(1, value));
|
|
32
|
+
}
|
|
33
|
+
const config = SCORE_UNIT_CONFIGS[unit];
|
|
34
|
+
if (!config) {
|
|
35
|
+
// Unknown unit - assume 0-1 and clamp
|
|
36
|
+
return Math.max(0, Math.min(1, value));
|
|
37
|
+
}
|
|
38
|
+
// Handle division by zero (inputMin === inputMax)
|
|
39
|
+
const range = config.inputMax - config.inputMin;
|
|
40
|
+
if (range === 0) {
|
|
41
|
+
// Edge case: if value equals the single valid value, return 0.5
|
|
42
|
+
// Otherwise clamp to bounds
|
|
43
|
+
return value === config.inputMin ? 0.5 : Math.max(0, Math.min(1, value));
|
|
44
|
+
}
|
|
45
|
+
// Normalize to 0-1
|
|
46
|
+
const normalized = (value - config.inputMin) / range;
|
|
47
|
+
return Math.max(0, Math.min(1, normalized));
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=evaluation-hooks.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"evaluation-hooks.js","sourceRoot":"","sources":["../../src/types/evaluation-hooks.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAyLH;;GAEG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAA6C;IAC1E,SAAS,EAAE,EAAE,SAAS,EAAE,WAAW,EAAE,UAAU,EAAE,WAAW,EAAE,QAAQ,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE;IACxF,UAAU,EAAE,EAAE,SAAS,EAAE,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,QAAQ,EAAE,CAAC,EAAE,QAAQ,EAAE,GAAG,EAAE;IAC5F,OAAO,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,UAAU,EAAE,WAAW,EAAE,QAAQ,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE;IACpF,QAAQ,EAAE,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,EAAE,WAAW,EAAE,QAAQ,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE;IACvF,QAAQ,EAAE,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,EAAE,WAAW,EAAE,QAAQ,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE;IACtF,QAAQ,EAAE,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,EAAE,WAAW,EAAE,QAAQ,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE;CACvF,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,UAAU,cAAc,CAAC,KAAa,EAAE,IAAa;IACzD,kCAAkC;IAClC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QAC5B,OAAO,CAAC,CAAC;IACX,CAAC;IAED,IAAI,CAAC,IAAI,IAAI,IAAI,KAAK,WAAW,EAAE,CAAC;QAClC,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;IACzC,CAAC;IAED,MAAM,MAAM,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC;IACxC,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,sCAAsC;QACtC,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;IACzC,CAAC;IAED,kDAAkD;IAClD,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;IAChD,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC;QAChB,gEAAgE;QAChE,4BAA4B;QAC5B,OAAO,KAAK,KAAK,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;IAC3E,CAAC;IAED,mBAAmB;IACnB,MAAM,UAAU,GAAG,CAAC,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,KAAK,CAAC;IACrD,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC;AAC9C,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "observability-toolkit",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "2.0.0",
|
|
4
4
|
"description": "MCP server for observability tooling - query traces, metrics, logs from local JSONL or SigNoz",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/server.js",
|
|
@@ -11,7 +11,8 @@
|
|
|
11
11
|
"build": "tsc",
|
|
12
12
|
"watch": "tsc --watch",
|
|
13
13
|
"start": "node dist/server.js",
|
|
14
|
-
"test": "node --test --test-concurrency=4 dist/*.test.js dist/**/*.test.js"
|
|
14
|
+
"test": "node --test --test-concurrency=4 dist/*.test.js dist/**/*.test.js",
|
|
15
|
+
"verify-docs": "bash scripts/verify-docs-line-counts.sh"
|
|
15
16
|
},
|
|
16
17
|
"keywords": [
|
|
17
18
|
"mcp",
|
|
@@ -27,12 +28,20 @@
|
|
|
27
28
|
"license": "MIT",
|
|
28
29
|
"dependencies": {
|
|
29
30
|
"@modelcontextprotocol/sdk": "^1.11.2",
|
|
31
|
+
"@opentelemetry/api": "^1.9.0",
|
|
32
|
+
"@opentelemetry/exporter-trace-otlp-http": "^0.52.0",
|
|
33
|
+
"@opentelemetry/sdk-node": "^0.52.0",
|
|
34
|
+
"@opentelemetry/semantic-conventions": "^1.25.0",
|
|
30
35
|
"@toon-format/toon": "^2.1.0",
|
|
36
|
+
"confusables": "^1.1.1",
|
|
37
|
+
"sbd": "^1.0.19",
|
|
31
38
|
"zod": "^3.24.2",
|
|
32
39
|
"zod-to-json-schema": "^3.25.1"
|
|
33
40
|
},
|
|
34
41
|
"devDependencies": {
|
|
35
42
|
"@types/node": "^22.15.21",
|
|
43
|
+
"@types/sbd": "^1.0.5",
|
|
44
|
+
"memfs": "^4.56.10",
|
|
36
45
|
"typescript": "^5.8.3"
|
|
37
46
|
},
|
|
38
47
|
"engines": {
|